From 4a609943f9d95c7138ce3ee48772f20e05797ef8 Mon Sep 17 00:00:00 2001 From: Victor Woeltjen Date: Fri, 4 Mar 2016 10:11:17 -0800 Subject: [PATCH 001/132] [Build] Configure JSHint #671 --- .jshintrc | 18 ++++++++++++++++-- 1 file changed, 16 insertions(+), 2 deletions(-) diff --git a/.jshintrc b/.jshintrc index a8e18932fd..e33c0e0c45 100644 --- a/.jshintrc +++ b/.jshintrc @@ -1,4 +1,18 @@ { - "validthis": true, - "laxbreak": true + "bitwise": true, + "curly": true, + "eqeqeq": true, + "esversion": 5, + "freeze": true, + "funcscope": true, + "futurehostile": true, + "latedef": true, + "noarg": true, + "nocomma": true, + "nonbsp": true, + "nonew": true, + "predef": [ "define" ], + "strict": "implied", + "undef": true, + "unused": true } From 91fb82d2121f5ef456cec082316787180f0c552f Mon Sep 17 00:00:00 2001 From: Victor Woeltjen Date: Fri, 4 Mar 2016 10:14:37 -0800 Subject: [PATCH 002/132] [Build] Remove esversion: 5 from lint cfg ...as this is apparently presumed. --- .jshintrc | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/.jshintrc b/.jshintrc index e33c0e0c45..3448f91e42 100644 --- a/.jshintrc +++ b/.jshintrc @@ -2,7 +2,6 @@ "bitwise": true, "curly": true, "eqeqeq": true, - "esversion": 5, "freeze": true, "funcscope": true, "futurehostile": true, @@ -11,8 +10,8 @@ "nocomma": true, "nonbsp": true, "nonew": true, - "predef": [ "define" ], + "predef": ["define"], "strict": "implied", "undef": true, "unused": true -} +} \ No newline at end of file From 28ae62b4acd9c00765d4973659f7d1e7ef47f1d0 Mon Sep 17 00:00:00 2001 From: Victor Woeltjen Date: Fri, 4 Mar 2016 10:21:12 -0800 Subject: [PATCH 003/132] [Build] Add script for JSHint migration To remove boilerplate which JSHint neither expects nor like. --- scripts/migrate-for-jshint.js | 49 +++++++++++++++++++++++++++++++++++ 1 file changed, 49 insertions(+) create mode 100644 scripts/migrate-for-jshint.js diff --git a/scripts/migrate-for-jshint.js b/scripts/migrate-for-jshint.js new file mode 100644 index 0000000000..d86abc12aa --- /dev/null +++ b/scripts/migrate-for-jshint.js @@ -0,0 +1,49 @@ +/***************************************************************************** + * Open MCT Web, Copyright (c) 2014-2015, United States Government + * as represented by the Administrator of the National Aeronautics and Space + * Administration. All rights reserved. + * + * Open MCT Web is licensed under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * http://www.apache.org/licenses/LICENSE-2.0. + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations + * under the License. + * + * Open MCT Web includes source code licensed under additional open source + * licenses. See the Open Source Licenses file (LICENSES.md) included with + * this source code distribution or the Licensing information page available + * at runtime from the About dialog for additional information. + *****************************************************************************/ + +// Converts all templateUrl references in bundle.js files to +// plain template references, loading said templates with the +// RequireJS text plugin. + +var glob = require('glob'), + fs = require('fs'); + +function migrate(file) { + var sourceCode = fs.readFileSync(file, 'utf8'), + lines = sourceCode.split('\n') + .filter(function (line) { + return line.trim().replace("'", '"') !== '"use strict";'; + }) + .filter(function (line) { + return line.indexOf("/*global") !== 0; + }); + fs.writeFileSync(file, lines.join('\n')); +} + +glob('platform/**/*.js', {}, function (err, files) { + if (err) { + console.log(err); + return; + } + + files.forEach(migrate); +}); From f092bfe653c5b5a573a8e743aa7c992b91f866a7 Mon Sep 17 00:00:00 2001 From: Victor Woeltjen Date: Fri, 4 Mar 2016 10:27:34 -0800 Subject: [PATCH 004/132] [Build] Don't lint specs --- gulpfile.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gulpfile.js b/gulpfile.js index fa832d1aa6..1724192224 100644 --- a/gulpfile.js +++ b/gulpfile.js @@ -98,7 +98,7 @@ gulp.task('stylesheets', function () { }); gulp.task('lint', function () { - return gulp.src(paths.scripts) + return gulp.src(paths.scripts.concat(['!**/test/*', '!**/*Spec.js'])) .pipe(jshint()) .pipe(jshint.reporter('default')) .pipe(jshint.reporter('fail')); From 02b806ebe0191fafc9b8f4bd5cadcfafd37d8fe3 Mon Sep 17 00:00:00 2001 From: Victor Woeltjen Date: Fri, 4 Mar 2016 10:27:59 -0800 Subject: [PATCH 005/132] [Build] Remove main.js boilerplate ...to satisfy JSHint --- main.js | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/main.js b/main.js index 452fe3e823..739cf056cd 100644 --- a/main.js +++ b/main.js @@ -19,7 +19,7 @@ * this source code distribution or the Licensing information page available * at runtime from the About dialog for additional information. *****************************************************************************/ -/*global define, window, requirejs*/ +/*global requirejs*/ requirejs.config({ "paths": { @@ -93,8 +93,6 @@ define([ './example/eventGenerator/bundle', './example/generator/bundle' ], function (Main, legacyRegistry) { - 'use strict'; - return { legacyRegistry: legacyRegistry, run: function () { From bc8aafbb1ff1609ee78b9b95f2c617f6a455f51c Mon Sep 17 00:00:00 2001 From: Victor Woeltjen Date: Fri, 4 Mar 2016 10:36:10 -0800 Subject: [PATCH 006/132] [Build] Define more common globals --- .jshintrc | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/.jshintrc b/.jshintrc index 3448f91e42..b3d3868d70 100644 --- a/.jshintrc +++ b/.jshintrc @@ -10,7 +10,11 @@ "nocomma": true, "nonbsp": true, "nonew": true, - "predef": ["define"], + "predef": [ + "define", + "Blob", + "Promise" + ], "strict": "implied", "undef": true, "unused": true From 377786caf96f92fa4cab8e221a5269e86c6b9f94 Mon Sep 17 00:00:00 2001 From: Victor Woeltjen Date: Fri, 4 Mar 2016 10:36:28 -0800 Subject: [PATCH 007/132] [Build] Fix lint exclusions --- gulpfile.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gulpfile.js b/gulpfile.js index 1724192224..6a8c790c8b 100644 --- a/gulpfile.js +++ b/gulpfile.js @@ -98,7 +98,7 @@ gulp.task('stylesheets', function () { }); gulp.task('lint', function () { - return gulp.src(paths.scripts.concat(['!**/test/*', '!**/*Spec.js'])) + return gulp.src(paths.scripts.concat(['!**/test/**/*.js', '!**/*Spec.js'])) .pipe(jshint()) .pipe(jshint.reporter('default')) .pipe(jshint.reporter('fail')); From 9f840aa0fdaf94bb76fe2c3b5d25d897abc2fb21 Mon Sep 17 00:00:00 2001 From: Victor Woeltjen Date: Fri, 4 Mar 2016 10:36:49 -0800 Subject: [PATCH 008/132] [Build] Tweak migration script --- scripts/migrate-for-jshint.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/scripts/migrate-for-jshint.js b/scripts/migrate-for-jshint.js index d86abc12aa..77a7c14569 100644 --- a/scripts/migrate-for-jshint.js +++ b/scripts/migrate-for-jshint.js @@ -31,7 +31,7 @@ function migrate(file) { var sourceCode = fs.readFileSync(file, 'utf8'), lines = sourceCode.split('\n') .filter(function (line) { - return line.trim().replace("'", '"') !== '"use strict";'; + return !(/^\W*['"]use strict['"];\W*$/.test(line)); }) .filter(function (line) { return line.indexOf("/*global") !== 0; @@ -39,7 +39,7 @@ function migrate(file) { fs.writeFileSync(file, lines.join('\n')); } -glob('platform/**/*.js', {}, function (err, files) { +glob('@(src|platform)/**/*.js', {}, function (err, files) { if (err) { console.log(err); return; From ac5ac8d34eedc76d8fbd78ae5898343f363f97f6 Mon Sep 17 00:00:00 2001 From: Victor Woeltjen Date: Fri, 4 Mar 2016 10:46:38 -0800 Subject: [PATCH 009/132] [Build] Remove boilerplate from scripts No longer necessary after JSHint configuration. --- platform/commonUI/about/bundle.js | 2 -- platform/commonUI/about/src/AboutController.js | 2 -- platform/commonUI/about/src/LicenseController.js | 2 -- platform/commonUI/about/src/LogoController.js | 2 -- platform/commonUI/about/test/AboutControllerSpec.js | 2 -- platform/commonUI/about/test/LicenseControllerSpec.js | 2 -- platform/commonUI/about/test/LogoControllerSpec.js | 2 -- platform/commonUI/browse/bundle.js | 2 -- platform/commonUI/browse/src/BrowseController.js | 2 -- platform/commonUI/browse/src/BrowseObjectController.js | 2 -- platform/commonUI/browse/src/InspectorRegion.js | 2 -- platform/commonUI/browse/src/MenuArrowController.js | 2 -- platform/commonUI/browse/src/PaneController.js | 2 -- platform/commonUI/browse/src/creation/AddAction.js | 2 -- platform/commonUI/browse/src/creation/AddActionProvider.js | 2 -- platform/commonUI/browse/src/creation/CreateAction.js | 2 -- platform/commonUI/browse/src/creation/CreateActionProvider.js | 2 -- platform/commonUI/browse/src/creation/CreateMenuController.js | 2 -- platform/commonUI/browse/src/creation/CreateWizard.js | 2 -- platform/commonUI/browse/src/creation/CreationPolicy.js | 2 -- platform/commonUI/browse/src/creation/CreationService.js | 2 -- platform/commonUI/browse/src/creation/LocatorController.js | 2 -- platform/commonUI/browse/src/navigation/NavigateAction.js | 2 -- platform/commonUI/browse/src/navigation/NavigationService.js | 2 -- platform/commonUI/browse/src/windowing/FullscreenAction.js | 2 -- platform/commonUI/browse/src/windowing/NewTabAction.js | 2 -- platform/commonUI/browse/src/windowing/WindowTitler.js | 2 -- platform/commonUI/browse/test/BrowseControllerSpec.js | 2 -- platform/commonUI/browse/test/BrowseObjectControllerSpec.js | 2 -- platform/commonUI/browse/test/InspectorRegionSpec.js | 2 -- platform/commonUI/browse/test/MenuArrowControllerSpec.js | 2 -- platform/commonUI/browse/test/PaneControllerSpec.js | 2 -- platform/commonUI/browse/test/creation/AddActionProviderSpec.js | 2 -- .../commonUI/browse/test/creation/CreateActionProviderSpec.js | 2 -- platform/commonUI/browse/test/creation/CreateActionSpec.js | 2 -- .../commonUI/browse/test/creation/CreateMenuControllerSpec.js | 2 -- platform/commonUI/browse/test/creation/CreateWizardSpec.js | 2 -- platform/commonUI/browse/test/creation/CreationPolicySpec.js | 2 -- platform/commonUI/browse/test/creation/CreationServiceSpec.js | 2 -- platform/commonUI/browse/test/creation/LocatorControllerSpec.js | 2 -- platform/commonUI/browse/test/navigation/NavigateActionSpec.js | 2 -- .../commonUI/browse/test/navigation/NavigationServiceSpec.js | 2 -- platform/commonUI/browse/test/windowing/FullscreenActionSpec.js | 2 -- platform/commonUI/browse/test/windowing/NewTabActionSpec.js | 2 -- platform/commonUI/browse/test/windowing/WindowTitlerSpec.js | 2 -- platform/commonUI/dialog/bundle.js | 2 -- platform/commonUI/dialog/src/DialogService.js | 2 -- platform/commonUI/dialog/src/OverlayService.js | 2 -- platform/commonUI/dialog/test/DialogServiceSpec.js | 2 -- platform/commonUI/dialog/test/OverlayServiceSpec.js | 2 -- platform/commonUI/edit/bundle.js | 2 -- platform/commonUI/edit/src/actions/CancelAction.js | 2 -- platform/commonUI/edit/src/actions/EditAction.js | 2 -- platform/commonUI/edit/src/actions/LinkAction.js | 2 -- platform/commonUI/edit/src/actions/PropertiesAction.js | 2 -- platform/commonUI/edit/src/actions/PropertiesDialog.js | 2 -- platform/commonUI/edit/src/actions/RemoveAction.js | 2 -- platform/commonUI/edit/src/actions/SaveAction.js | 2 -- .../commonUI/edit/src/capabilities/EditableActionCapability.js | 2 -- .../edit/src/capabilities/EditableCompositionCapability.js | 2 -- .../commonUI/edit/src/capabilities/EditableContextCapability.js | 2 -- .../edit/src/capabilities/EditableInstantiationCapability.js | 2 -- .../commonUI/edit/src/capabilities/EditableLookupCapability.js | 2 -- .../edit/src/capabilities/EditablePersistenceCapability.js | 2 -- .../edit/src/capabilities/EditableRelationshipCapability.js | 2 -- platform/commonUI/edit/src/capabilities/EditorCapability.js | 2 -- platform/commonUI/edit/src/controllers/EditActionController.js | 2 -- platform/commonUI/edit/src/controllers/EditObjectController.js | 2 -- platform/commonUI/edit/src/controllers/EditPanesController.js | 2 -- platform/commonUI/edit/src/controllers/ElementsController.js | 2 -- platform/commonUI/edit/src/directives/MCTBeforeUnload.js | 2 -- platform/commonUI/edit/src/objects/EditableDomainObject.js | 2 -- platform/commonUI/edit/src/objects/EditableDomainObjectCache.js | 2 -- platform/commonUI/edit/src/objects/EditableModelCache.js | 2 -- platform/commonUI/edit/src/policies/EditActionPolicy.js | 2 -- platform/commonUI/edit/src/policies/EditNavigationPolicy.js | 2 -- platform/commonUI/edit/src/policies/EditableViewPolicy.js | 2 -- platform/commonUI/edit/src/representers/EditRepresenter.js | 2 -- platform/commonUI/edit/src/representers/EditToolbar.js | 2 -- .../commonUI/edit/src/representers/EditToolbarRepresenter.js | 2 -- platform/commonUI/edit/src/representers/EditToolbarSelection.js | 2 -- platform/commonUI/edit/test/actions/CancelActionSpec.js | 2 -- platform/commonUI/edit/test/actions/EditActionSpec.js | 2 -- platform/commonUI/edit/test/actions/LinkActionSpec.js | 2 -- platform/commonUI/edit/test/actions/PropertiesActionSpec.js | 2 -- platform/commonUI/edit/test/actions/PropertiesDialogSpec.js | 2 -- platform/commonUI/edit/test/actions/RemoveActionSpec.js | 2 -- platform/commonUI/edit/test/actions/SaveActionSpec.js | 2 -- .../edit/test/capabilities/EditableCompositionCapabilitySpec.js | 2 -- .../edit/test/capabilities/EditableContextCapabilitySpec.js | 2 -- .../edit/test/capabilities/EditableLookupCapabilitySpec.js | 2 -- .../edit/test/capabilities/EditablePersistenceCapabilitySpec.js | 2 -- .../test/capabilities/EditableRelationshipCapabilitySpec.js | 2 -- .../commonUI/edit/test/capabilities/EditorCapabilitySpec.js | 2 -- .../commonUI/edit/test/controllers/EditActionControllerSpec.js | 2 -- platform/commonUI/edit/test/controllers/EditControllerSpec.js | 2 -- .../commonUI/edit/test/controllers/EditPanesControllerSpec.js | 2 -- platform/commonUI/edit/test/directives/MCTBeforeUnloadSpec.js | 2 -- .../commonUI/edit/test/objects/EditableDomainObjectCacheSpec.js | 2 -- platform/commonUI/edit/test/objects/EditableDomainObjectSpec.js | 2 -- platform/commonUI/edit/test/objects/EditableModelCacheSpec.js | 2 -- platform/commonUI/edit/test/policies/EditActionPolicySpec.js | 2 -- platform/commonUI/edit/test/policies/EditableViewPolicySpec.js | 2 -- platform/commonUI/edit/test/representers/EditRepresenterSpec.js | 2 -- .../edit/test/representers/EditToolbarRepresenterSpec.js | 2 -- .../commonUI/edit/test/representers/EditToolbarSelectionSpec.js | 2 -- platform/commonUI/edit/test/representers/EditToolbarSpec.js | 2 -- platform/commonUI/formats/bundle.js | 2 -- platform/commonUI/formats/src/FormatProvider.js | 2 -- platform/commonUI/formats/src/UTCTimeFormat.js | 2 -- platform/commonUI/formats/test/FormatProviderSpec.js | 2 -- platform/commonUI/formats/test/UTCTimeFormatSpec.js | 2 -- platform/commonUI/general/bundle.js | 2 -- platform/commonUI/general/src/SplashScreenManager.js | 2 -- platform/commonUI/general/src/StyleSheetLoader.js | 2 -- platform/commonUI/general/src/UnsupportedBrowserWarning.js | 2 -- .../commonUI/general/src/controllers/ActionGroupController.js | 2 -- platform/commonUI/general/src/controllers/BannerController.js | 2 -- .../commonUI/general/src/controllers/BottomBarController.js | 2 -- .../commonUI/general/src/controllers/ClickAwayController.js | 2 -- .../commonUI/general/src/controllers/ContextMenuController.js | 2 -- .../commonUI/general/src/controllers/DateTimeFieldController.js | 2 -- .../general/src/controllers/DateTimePickerController.js | 2 -- .../commonUI/general/src/controllers/GetterSetterController.js | 2 -- .../general/src/controllers/ObjectInspectorController.js | 2 -- platform/commonUI/general/src/controllers/SelectorController.js | 2 -- .../commonUI/general/src/controllers/TimeRangeController.js | 2 -- platform/commonUI/general/src/controllers/ToggleController.js | 2 -- platform/commonUI/general/src/controllers/TreeNodeController.js | 2 -- .../commonUI/general/src/controllers/ViewSwitcherController.js | 2 -- platform/commonUI/general/src/directives/MCTClickElsewhere.js | 2 -- platform/commonUI/general/src/directives/MCTContainer.js | 2 -- platform/commonUI/general/src/directives/MCTDrag.js | 2 -- platform/commonUI/general/src/directives/MCTPopup.js | 2 -- platform/commonUI/general/src/directives/MCTResize.js | 2 -- platform/commonUI/general/src/directives/MCTScroll.js | 2 -- platform/commonUI/general/src/directives/MCTSplitPane.js | 2 -- platform/commonUI/general/src/directives/MCTSplitter.js | 2 -- platform/commonUI/general/src/filters/ReverseFilter.js | 2 -- platform/commonUI/general/src/services/Popup.js | 2 -- platform/commonUI/general/src/services/PopupService.js | 2 -- platform/commonUI/general/src/services/UrlService.js | 2 -- platform/commonUI/general/test/SplashScreenManagerSpec.js | 2 -- platform/commonUI/general/test/StyleSheetLoaderSpec.js | 2 -- platform/commonUI/general/test/UnsupportedBrowserWarningSpec.js | 2 -- .../general/test/controllers/ActionGroupControllerSpec.js | 2 -- .../general/test/controllers/BottomBarControllerSpec.js | 2 -- .../general/test/controllers/ClickAwayControllerSpec.js | 2 -- .../general/test/controllers/ContextMenuControllerSpec.js | 2 -- .../general/test/controllers/DateTimeFieldControllerSpec.js | 2 -- .../general/test/controllers/DateTimePickerControllerSpec.js | 2 -- .../general/test/controllers/GetterSetterControllerSpec.js | 2 -- .../general/test/controllers/ObjectInspectorControllerSpec.js | 2 -- .../commonUI/general/test/controllers/SelectorControllerSpec.js | 2 -- .../general/test/controllers/TimeRangeControllerSpec.js | 2 -- .../commonUI/general/test/controllers/ToggleControllerSpec.js | 2 -- .../commonUI/general/test/controllers/TreeNodeControllerSpec.js | 2 -- .../general/test/controllers/ViewSwitcherControllerSpec.js | 2 -- .../commonUI/general/test/directives/MCTClickElsewhereSpec.js | 2 -- platform/commonUI/general/test/directives/MCTContainerSpec.js | 2 -- platform/commonUI/general/test/directives/MCTDragSpec.js | 2 -- platform/commonUI/general/test/directives/MCTPopupSpec.js | 2 -- platform/commonUI/general/test/directives/MCTResizeSpec.js | 2 -- platform/commonUI/general/test/directives/MCTScrollSpec.js | 2 -- platform/commonUI/general/test/directives/MCTSplitPaneSpec.js | 2 -- platform/commonUI/general/test/directives/MCTSplitterSpec.js | 2 -- platform/commonUI/general/test/filters/ReverseFilterSpec.js | 2 -- platform/commonUI/general/test/services/PopupServiceSpec.js | 2 -- platform/commonUI/general/test/services/PopupSpec.js | 2 -- platform/commonUI/general/test/services/UrlServiceSpec.js | 2 -- platform/commonUI/inspect/bundle.js | 2 -- platform/commonUI/inspect/src/InfoConstants.js | 1 - platform/commonUI/inspect/src/gestures/InfoButtonGesture.js | 2 -- platform/commonUI/inspect/src/gestures/InfoGesture.js | 2 -- platform/commonUI/inspect/src/services/InfoService.js | 2 -- .../commonUI/inspect/test/gestures/InfoButtonGestureSpec.js | 2 -- platform/commonUI/inspect/test/gestures/InfoGestureSpec.js | 2 -- platform/commonUI/inspect/test/services/InfoServiceSpec.js | 2 -- platform/commonUI/mobile/bundle.js | 2 -- platform/commonUI/mobile/src/AgentService.js | 2 -- platform/commonUI/mobile/src/DeviceClassifier.js | 2 -- platform/commonUI/mobile/src/DeviceMatchers.js | 2 -- platform/commonUI/mobile/src/MCTDevice.js | 2 -- platform/commonUI/mobile/test/AgentServiceSpec.js | 2 -- platform/commonUI/mobile/test/DeviceClassifierSpec.js | 2 -- platform/commonUI/mobile/test/DeviceMatchersSpec.js | 2 -- platform/commonUI/mobile/test/MCTDeviceSpec.js | 2 -- platform/commonUI/notification/bundle.js | 2 -- platform/commonUI/notification/src/NotificationIndicator.js | 2 -- .../notification/src/NotificationIndicatorController.js | 2 -- platform/commonUI/notification/src/NotificationService.js | 2 -- .../notification/test/NotificationIndicatorControllerSpec.js | 2 -- platform/commonUI/notification/test/NotificationServiceSpec.js | 2 -- platform/commonUI/regions/bundle.js | 2 -- platform/commonUI/regions/src/EditableRegionPolicy.js | 2 -- platform/commonUI/regions/src/InspectorController.js | 2 -- platform/commonUI/regions/src/Region.js | 2 -- platform/commonUI/regions/test/EditableRegionPolicySpec.js | 2 -- platform/commonUI/regions/test/InspectorControllerSpec.js | 2 -- platform/commonUI/regions/test/RegionSpec.js | 2 -- platform/commonUI/themes/espresso/bundle.js | 2 -- platform/commonUI/themes/snow/bundle.js | 2 -- platform/containment/bundle.js | 2 -- platform/containment/src/CapabilityTable.js | 2 -- platform/containment/src/ComposeActionPolicy.js | 2 -- platform/containment/src/CompositionModelPolicy.js | 2 -- platform/containment/src/CompositionMutabilityPolicy.js | 2 -- platform/containment/src/CompositionPolicy.js | 2 -- platform/containment/src/ContainmentTable.js | 2 -- platform/containment/test/CapabilityTableSpec.js | 2 -- platform/containment/test/ComposeActionPolicySpec.js | 2 -- platform/containment/test/CompositionModelPolicySpec.js | 2 -- platform/containment/test/CompositionMutabilityPolicySpec.js | 2 -- platform/containment/test/CompositionPolicySpec.js | 2 -- platform/containment/test/ContainmentTableSpec.js | 2 -- platform/core/bundle.js | 2 -- platform/core/src/actions/ActionAggregator.js | 2 -- platform/core/src/actions/ActionCapability.js | 2 -- platform/core/src/actions/ActionProvider.js | 2 -- platform/core/src/actions/LoggingActionDecorator.js | 2 -- platform/core/src/capabilities/CompositionCapability.js | 2 -- platform/core/src/capabilities/ContextCapability.js | 2 -- platform/core/src/capabilities/ContextualDomainObject.js | 2 -- platform/core/src/capabilities/CoreCapabilityProvider.js | 2 -- platform/core/src/capabilities/DelegationCapability.js | 2 -- platform/core/src/capabilities/InstantiationCapability.js | 2 -- platform/core/src/capabilities/MetadataCapability.js | 2 -- platform/core/src/capabilities/MutationCapability.js | 2 -- platform/core/src/capabilities/PersistenceCapability.js | 2 -- platform/core/src/capabilities/RelationshipCapability.js | 2 -- platform/core/src/identifiers/Identifier.js | 2 -- platform/core/src/identifiers/IdentifierProvider.js | 2 -- platform/core/src/models/CachingModelDecorator.js | 2 -- platform/core/src/models/MissingModelDecorator.js | 2 -- platform/core/src/models/ModelAggregator.js | 2 -- platform/core/src/models/PersistedModelProvider.js | 2 -- platform/core/src/models/RootModelProvider.js | 2 -- platform/core/src/models/StaticModelProvider.js | 2 -- platform/core/src/objects/DomainObjectImpl.js | 2 -- platform/core/src/objects/DomainObjectProvider.js | 2 -- platform/core/src/services/Contextualize.js | 2 -- platform/core/src/services/Instantiate.js | 2 -- platform/core/src/services/Now.js | 2 -- platform/core/src/services/Throttle.js | 2 -- platform/core/src/services/Topic.js | 2 -- platform/core/src/types/MergeModels.js | 2 -- platform/core/src/types/TypeCapability.js | 2 -- platform/core/src/types/TypeImpl.js | 2 -- platform/core/src/types/TypeProperty.js | 2 -- platform/core/src/types/TypePropertyConversion.js | 2 -- platform/core/src/types/TypeProvider.js | 2 -- platform/core/src/views/ViewCapability.js | 2 -- platform/core/src/views/ViewProvider.js | 2 -- platform/core/test/actions/ActionAggregatorSpec.js | 2 -- platform/core/test/actions/ActionCapabilitySpec.js | 2 -- platform/core/test/actions/ActionProviderSpec.js | 2 -- platform/core/test/actions/LoggingActionDecoratorSpec.js | 2 -- platform/core/test/capabilities/CompositionCapabilitySpec.js | 2 -- platform/core/test/capabilities/ContextCapabilitySpec.js | 2 -- platform/core/test/capabilities/ContextualDomainObjectSpec.js | 2 -- platform/core/test/capabilities/CoreCapabilityProviderSpec.js | 2 -- platform/core/test/capabilities/DelegationCapabilitySpec.js | 2 -- platform/core/test/capabilities/InstantiationCapabilitySpec.js | 2 -- platform/core/test/capabilities/MetadataCapabilitySpec.js | 2 -- platform/core/test/capabilities/MutationCapabilitySpec.js | 2 -- platform/core/test/capabilities/PersistenceCapabilitySpec.js | 2 -- platform/core/test/capabilities/RelationshipCapabilitySpec.js | 2 -- platform/core/test/identifiers/IdentifierProviderSpec.js | 2 -- platform/core/test/identifiers/IdentifierSpec.js | 2 -- platform/core/test/models/CachingModelDecoratorSpec.js | 2 -- platform/core/test/models/MissingModelDecoratorSpec.js | 2 -- platform/core/test/models/ModelAggregatorSpec.js | 2 -- platform/core/test/models/PersistedModelProviderSpec.js | 2 -- platform/core/test/models/RootModelProviderSpec.js | 2 -- platform/core/test/models/StaticModelProviderSpec.js | 2 -- platform/core/test/objects/DomainObjectProviderSpec.js | 2 -- platform/core/test/objects/DomainObjectSpec.js | 2 -- platform/core/test/services/ContextualizeSpec.js | 2 -- platform/core/test/services/InstantiateSpec.js | 2 -- platform/core/test/services/NowSpec.js | 2 -- platform/core/test/services/ThrottleSpec.js | 2 -- platform/core/test/services/TopicSpec.js | 2 -- platform/core/test/types/MergeModelsSpec.js | 2 -- platform/core/test/types/TypeCapabilitySpec.js | 2 -- platform/core/test/types/TypeImplSpec.js | 2 -- platform/core/test/types/TypePropertyConversionSpec.js | 2 -- platform/core/test/types/TypePropertySpec.js | 2 -- platform/core/test/types/TypeProviderSpec.js | 2 -- platform/core/test/views/ViewCapabilitySpec.js | 2 -- platform/core/test/views/ViewProviderSpec.js | 2 -- platform/entanglement/bundle.js | 2 -- platform/entanglement/src/actions/AbstractComposeAction.js | 2 -- platform/entanglement/src/actions/CopyAction.js | 2 -- platform/entanglement/src/actions/GoToOriginalAction.js | 2 -- platform/entanglement/src/actions/LinkAction.js | 2 -- platform/entanglement/src/actions/MoveAction.js | 2 -- platform/entanglement/src/actions/SetPrimaryLocationAction.js | 2 -- platform/entanglement/src/capabilities/LocationCapability.js | 2 -- platform/entanglement/src/policies/CrossSpacePolicy.js | 2 -- platform/entanglement/src/services/CopyService.js | 2 -- platform/entanglement/src/services/CopyTask.js | 2 -- platform/entanglement/src/services/LinkService.js | 2 -- platform/entanglement/src/services/LocatingCreationDecorator.js | 2 -- platform/entanglement/src/services/LocatingObjectDecorator.js | 2 -- platform/entanglement/src/services/LocationService.js | 2 -- platform/entanglement/src/services/MoveService.js | 2 -- platform/entanglement/test/ControlledPromise.js | 1 - platform/entanglement/test/DomainObjectFactory.js | 2 -- platform/entanglement/test/actions/AbstractComposeActionSpec.js | 2 -- platform/entanglement/test/actions/CopyActionSpec.js | 2 -- platform/entanglement/test/actions/GoToOriginalActionSpec.js | 2 -- platform/entanglement/test/actions/LinkActionSpec.js | 2 -- platform/entanglement/test/actions/MoveActionSpec.js | 2 -- .../entanglement/test/actions/SetPrimaryLocationActionSpec.js | 2 -- .../entanglement/test/capabilities/LocationCapabilitySpec.js | 2 -- platform/entanglement/test/policies/CrossSpacePolicySpec.js | 2 -- platform/entanglement/test/services/CopyServiceSpec.js | 2 -- platform/entanglement/test/services/CopyTaskSpec.js | 2 -- platform/entanglement/test/services/LinkServiceSpec.js | 2 -- .../entanglement/test/services/LocatingCreationDecoratorSpec.js | 2 -- .../entanglement/test/services/LocatingObjectDecoratorSpec.js | 2 -- platform/entanglement/test/services/LocationServiceSpec.js | 2 -- platform/entanglement/test/services/MockCopyService.js | 2 -- platform/entanglement/test/services/MockLinkService.js | 2 -- platform/entanglement/test/services/MockMoveService.js | 2 -- platform/entanglement/test/services/MoveServiceSpec.js | 2 -- platform/execution/bundle.js | 2 -- platform/execution/src/WorkerService.js | 2 -- platform/execution/test/WorkerServiceSpec.js | 2 -- platform/exporters/ExportService.js | 1 - platform/exporters/ExportServiceSpec.js | 2 -- platform/exporters/bundle.js | 2 -- platform/features/clock/bundle.js | 2 -- platform/features/clock/src/actions/AbstractStartTimerAction.js | 2 -- platform/features/clock/src/actions/RestartTimerAction.js | 2 -- platform/features/clock/src/actions/StartTimerAction.js | 2 -- platform/features/clock/src/controllers/ClockController.js | 2 -- platform/features/clock/src/controllers/RefreshingController.js | 2 -- platform/features/clock/src/controllers/TimerController.js | 2 -- platform/features/clock/src/controllers/TimerFormatter.js | 2 -- platform/features/clock/src/indicators/ClockIndicator.js | 2 -- platform/features/clock/src/services/TickerService.js | 2 -- .../features/clock/test/actions/AbstractStartTimerActionSpec.js | 2 -- platform/features/clock/test/actions/RestartTimerActionSpec.js | 2 -- platform/features/clock/test/actions/StartTimerActionSpec.js | 2 -- platform/features/clock/test/controllers/ClockControllerSpec.js | 2 -- .../features/clock/test/controllers/RefreshingControllerSpec.js | 2 -- platform/features/clock/test/controllers/TimerControllerSpec.js | 2 -- platform/features/clock/test/controllers/TimerFormatterSpec.js | 2 -- platform/features/clock/test/indicators/ClockIndicatorSpec.js | 2 -- platform/features/clock/test/services/TickerServiceSpec.js | 2 -- platform/features/conductor/bundle.js | 2 -- platform/features/conductor/src/ConductorRepresenter.js | 2 -- platform/features/conductor/src/ConductorService.js | 2 -- platform/features/conductor/src/ConductorTelemetryDecorator.js | 2 -- platform/features/conductor/src/TimeConductor.js | 2 -- platform/features/conductor/test/ConductorRepresenterSpec.js | 2 -- platform/features/conductor/test/ConductorServiceSpec.js | 2 -- .../features/conductor/test/ConductorTelemetryDecoratorSpec.js | 2 -- platform/features/conductor/test/TestTimeConductor.js | 2 -- platform/features/conductor/test/TimeConductorSpec.js | 2 -- platform/features/events/bundle.js | 2 -- platform/features/events/src/DomainColumn.js | 2 -- platform/features/events/src/EventListController.js | 2 -- platform/features/events/src/EventListPopulator.js | 2 -- platform/features/events/src/RangeColumn.js | 2 -- platform/features/events/src/directives/MCTDataTable.js | 2 -- platform/features/events/src/policies/MessagesViewPolicy.js | 2 -- platform/features/events/test/DomainColumnSpec.js | 2 -- platform/features/events/test/EventListControllerSpec.js | 2 -- platform/features/events/test/EventListPopulatorSpec.js | 2 -- platform/features/events/test/RangeColumnSpec.js | 2 -- .../features/events/test/policies/MessagesViewPolicySpec.js | 2 -- platform/features/imagery/bundle.js | 2 -- platform/features/imagery/src/controllers/ImageryController.js | 2 -- platform/features/imagery/src/directives/MCTBackgroundImage.js | 2 -- platform/features/imagery/src/policies/ImageryViewPolicy.js | 2 -- .../features/imagery/test/controllers/ImageryControllerSpec.js | 2 -- .../features/imagery/test/directives/MCTBackgroundImageSpec.js | 2 -- .../features/imagery/test/policies/ImageryViewPolicySpec.js | 2 -- platform/features/layout/bundle.js | 2 -- platform/features/layout/src/FixedController.js | 2 -- platform/features/layout/src/FixedDragHandle.js | 2 -- platform/features/layout/src/FixedProxy.js | 2 -- platform/features/layout/src/LayoutCompositionPolicy.js | 2 -- platform/features/layout/src/LayoutController.js | 2 -- platform/features/layout/src/LayoutDrag.js | 2 -- platform/features/layout/src/elements/AccessorMutator.js | 2 -- platform/features/layout/src/elements/BoxProxy.js | 2 -- platform/features/layout/src/elements/ElementFactory.js | 2 -- platform/features/layout/src/elements/ElementProxies.js | 2 -- platform/features/layout/src/elements/ElementProxy.js | 2 -- platform/features/layout/src/elements/ImageProxy.js | 2 -- platform/features/layout/src/elements/LineHandle.js | 2 -- platform/features/layout/src/elements/LineProxy.js | 2 -- platform/features/layout/src/elements/ResizeHandle.js | 2 -- platform/features/layout/src/elements/TelemetryProxy.js | 2 -- platform/features/layout/src/elements/TextProxy.js | 2 -- platform/features/layout/test/FixedControllerSpec.js | 2 -- platform/features/layout/test/FixedDragHandleSpec.js | 2 -- platform/features/layout/test/FixedProxySpec.js | 2 -- platform/features/layout/test/LayoutCompositionPolicySpec.js | 2 -- platform/features/layout/test/LayoutControllerSpec.js | 2 -- platform/features/layout/test/LayoutDragSpec.js | 2 -- platform/features/layout/test/elements/AccessorMutatorSpec.js | 2 -- platform/features/layout/test/elements/BoxProxySpec.js | 2 -- platform/features/layout/test/elements/ElementFactorySpec.js | 2 -- platform/features/layout/test/elements/ElementProxiesSpec.js | 2 -- platform/features/layout/test/elements/ElementProxySpec.js | 2 -- platform/features/layout/test/elements/ImageProxySpec.js | 2 -- platform/features/layout/test/elements/LineHandleSpec.js | 2 -- platform/features/layout/test/elements/LineProxySpec.js | 2 -- platform/features/layout/test/elements/ResizeHandleSpec.js | 2 -- platform/features/layout/test/elements/TelemetryProxySpec.js | 2 -- platform/features/layout/test/elements/TextProxySpec.js | 2 -- platform/features/pages/bundle.js | 2 -- platform/features/pages/src/EmbeddedPageController.js | 2 -- platform/features/pages/test/EmbeddedPageControllerSpec.js | 2 -- platform/features/plot/bundle.js | 2 -- platform/features/plot/src/Canvas2DChart.js | 2 -- platform/features/plot/src/GLChart.js | 2 -- platform/features/plot/src/MCTChart.js | 2 -- platform/features/plot/src/PlotController.js | 2 -- platform/features/plot/src/PlotOptionsController.js | 2 -- platform/features/plot/src/PlotOptionsForm.js | 2 -- platform/features/plot/src/SubPlot.js | 2 -- platform/features/plot/src/SubPlotFactory.js | 2 -- platform/features/plot/src/elements/PlotAxis.js | 2 -- platform/features/plot/src/elements/PlotLimitTracker.js | 2 -- platform/features/plot/src/elements/PlotLine.js | 2 -- platform/features/plot/src/elements/PlotLineBuffer.js | 2 -- platform/features/plot/src/elements/PlotPalette.js | 2 -- platform/features/plot/src/elements/PlotPanZoomStack.js | 2 -- platform/features/plot/src/elements/PlotPanZoomStackGroup.js | 2 -- platform/features/plot/src/elements/PlotPosition.js | 2 -- platform/features/plot/src/elements/PlotPreparer.js | 2 -- platform/features/plot/src/elements/PlotSeriesWindow.js | 2 -- platform/features/plot/src/elements/PlotTelemetryFormatter.js | 2 -- platform/features/plot/src/elements/PlotTickGenerator.js | 2 -- platform/features/plot/src/elements/PlotUpdater.js | 2 -- platform/features/plot/src/modes/PlotModeOptions.js | 2 -- platform/features/plot/src/modes/PlotOverlayMode.js | 2 -- platform/features/plot/src/modes/PlotStackMode.js | 2 -- platform/features/plot/src/policies/PlotViewPolicy.js | 2 -- platform/features/plot/test/Canvas2DChartSpec.js | 2 -- platform/features/plot/test/GLChartSpec.js | 2 -- platform/features/plot/test/MCTChartSpec.js | 2 -- platform/features/plot/test/PlotControllerSpec.js | 2 -- platform/features/plot/test/PlotOptionsControllerSpec.js | 2 -- platform/features/plot/test/PlotOptionsFormSpec.js | 2 -- platform/features/plot/test/SubPlotFactorySpec.js | 2 -- platform/features/plot/test/SubPlotSpec.js | 2 -- platform/features/plot/test/elements/PlotAxisSpec.js | 2 -- platform/features/plot/test/elements/PlotLimitTrackerSpec.js | 2 -- platform/features/plot/test/elements/PlotLineBufferSpec.js | 2 -- platform/features/plot/test/elements/PlotLineSpec.js | 2 -- platform/features/plot/test/elements/PlotPaletteSpec.js | 2 -- .../features/plot/test/elements/PlotPanZoomStackGroupSpec.js | 2 -- platform/features/plot/test/elements/PlotPanZoomStackSpec.js | 2 -- platform/features/plot/test/elements/PlotPositionSpec.js | 2 -- platform/features/plot/test/elements/PlotPreparerSpec.js | 2 -- platform/features/plot/test/elements/PlotSeriesWindowSpec.js | 2 -- .../features/plot/test/elements/PlotTelemetryFormatterSpec.js | 2 -- platform/features/plot/test/elements/PlotTickGeneratorSpec.js | 2 -- platform/features/plot/test/elements/PlotUpdaterSpec.js | 2 -- platform/features/plot/test/modes/PlotModeOptionsSpec.js | 2 -- platform/features/plot/test/modes/PlotOverlayModeSpec.js | 2 -- platform/features/plot/test/modes/PlotStackModeSpec.js | 2 -- platform/features/plot/test/policies/PlotViewPolicySpec.js | 2 -- platform/features/rtevents/bundle.js | 2 -- platform/features/rtevents/src/DomainColumn.js | 2 -- platform/features/rtevents/src/RTEventListController.js | 2 -- platform/features/rtevents/src/RangeColumn.js | 2 -- platform/features/rtevents/src/directives/MCTRTDataTable.js | 2 -- platform/features/rtevents/src/policies/RTMessagesViewPolicy.js | 2 -- platform/features/rtevents/test/DomainColumnSpec.js | 2 -- platform/features/rtevents/test/RTEventListControllerSpec.js | 2 -- platform/features/rtevents/test/RangeColumnSpec.js | 2 -- .../features/rtevents/test/policies/RTMessagesViewPolicySpec.js | 2 -- platform/features/rtscrolling/bundle.js | 2 -- platform/features/rtscrolling/src/DomainColumn.js | 2 -- platform/features/rtscrolling/src/NameColumn.js | 2 -- platform/features/rtscrolling/src/RTScrollingListController.js | 2 -- platform/features/rtscrolling/src/RangeColumn.js | 2 -- platform/features/scrolling/bundle.js | 2 -- platform/features/scrolling/src/DomainColumn.js | 2 -- platform/features/scrolling/src/NameColumn.js | 2 -- platform/features/scrolling/src/RangeColumn.js | 2 -- platform/features/scrolling/src/ScrollingListController.js | 2 -- platform/features/scrolling/src/ScrollingListPopulator.js | 2 -- platform/features/scrolling/test/DomainColumnSpec.js | 2 -- platform/features/scrolling/test/NameColumnSpec.js | 2 -- platform/features/scrolling/test/RangeColumnSpec.js | 2 -- platform/features/scrolling/test/ScrollingListControllerSpec.js | 2 -- platform/features/scrolling/test/ScrollingListPopulatorSpec.js | 2 -- platform/features/static-markup/bundle.js | 2 -- platform/features/table/bundle.js | 2 -- platform/features/table/src/DomainColumn.js | 2 -- platform/features/table/src/NameColumn.js | 2 -- platform/features/table/src/RangeColumn.js | 2 -- platform/features/table/src/TableConfiguration.js | 2 -- platform/features/table/src/controllers/MCTTableController.js | 2 -- .../features/table/src/controllers/TableOptionsController.js | 2 -- .../features/table/src/controllers/TelemetryTableController.js | 2 -- platform/features/table/src/directives/MCTTable.js | 2 -- platform/features/table/test/DomainColumnSpec.js | 2 -- platform/features/table/test/NameColumnSpec.js | 2 -- platform/features/table/test/RangeColumnSpec.js | 2 -- platform/features/table/test/TableConfigurationSpec.js | 2 -- .../features/table/test/controllers/MCTTableControllerSpec.js | 2 -- .../table/test/controllers/TableOptionsControllerSpec.js | 2 -- .../table/test/controllers/TelemetryTableControllerSpec.js | 2 -- platform/features/timeline/bundle.js | 2 -- platform/features/timeline/src/TimelineConstants.js | 1 - platform/features/timeline/src/TimelineFormatter.js | 2 -- platform/features/timeline/src/capabilities/ActivityTimespan.js | 2 -- .../timeline/src/capabilities/ActivityTimespanCapability.js | 2 -- .../features/timeline/src/capabilities/ActivityUtilization.js | 2 -- platform/features/timeline/src/capabilities/CostCapability.js | 2 -- platform/features/timeline/src/capabilities/CumulativeGraph.js | 2 -- platform/features/timeline/src/capabilities/GraphCapability.js | 2 -- platform/features/timeline/src/capabilities/ResourceGraph.js | 2 -- platform/features/timeline/src/capabilities/TimelineTimespan.js | 2 -- .../timeline/src/capabilities/TimelineTimespanCapability.js | 2 -- .../features/timeline/src/capabilities/TimelineUtilization.js | 2 -- .../features/timeline/src/capabilities/UtilizationCapability.js | 2 -- .../timeline/src/controllers/ActivityModeValuesController.js | 2 -- .../features/timeline/src/controllers/TimelineController.js | 2 -- .../timeline/src/controllers/TimelineDateTimeController.js | 2 -- .../timeline/src/controllers/TimelineGanttController.js | 2 -- .../timeline/src/controllers/TimelineGraphController.js | 2 -- .../timeline/src/controllers/TimelineTableController.js | 2 -- .../features/timeline/src/controllers/TimelineTickController.js | 2 -- .../features/timeline/src/controllers/TimelineZoomController.js | 2 -- .../timeline/src/controllers/drag/TimelineDragHandleFactory.js | 2 -- .../timeline/src/controllers/drag/TimelineDragHandler.js | 2 -- .../timeline/src/controllers/drag/TimelineDragPopulator.js | 2 -- .../features/timeline/src/controllers/drag/TimelineEndHandle.js | 2 -- .../timeline/src/controllers/drag/TimelineMoveHandle.js | 2 -- .../timeline/src/controllers/drag/TimelineSnapHandler.js | 2 -- .../timeline/src/controllers/drag/TimelineStartHandle.js | 2 -- .../features/timeline/src/controllers/graph/TimelineGraph.js | 2 -- .../timeline/src/controllers/graph/TimelineGraphPopulator.js | 2 -- .../timeline/src/controllers/graph/TimelineGraphRenderer.js | 2 -- .../timeline/src/controllers/swimlane/TimelineColorAssigner.js | 2 -- .../features/timeline/src/controllers/swimlane/TimelineProxy.js | 2 -- .../timeline/src/controllers/swimlane/TimelineSwimlane.js | 2 -- .../src/controllers/swimlane/TimelineSwimlaneDecorator.js | 2 -- .../src/controllers/swimlane/TimelineSwimlaneDropHandler.js | 2 -- .../src/controllers/swimlane/TimelineSwimlanePopulator.js | 2 -- platform/features/timeline/src/directives/MCTSwimlaneDrag.js | 2 -- platform/features/timeline/src/directives/MCTSwimlaneDrop.js | 2 -- .../features/timeline/src/directives/SwimlaneDragConstants.js | 1 - platform/features/timeline/src/services/ObjectLoader.js | 2 -- platform/features/timeline/test/TimelineConstantsSpec.js | 2 -- platform/features/timeline/test/TimelineFormatterSpec.js | 2 -- .../test/capabilities/ActivityTimespanCapabilitySpec.js | 2 -- .../features/timeline/test/capabilities/ActivityTimespanSpec.js | 2 -- .../timeline/test/capabilities/ActivityUtilizationSpec.js | 2 -- .../features/timeline/test/capabilities/CostCapabilitySpec.js | 2 -- .../features/timeline/test/capabilities/CumulativeGraphSpec.js | 2 -- .../features/timeline/test/capabilities/GraphCapabilitySpec.js | 2 -- .../features/timeline/test/capabilities/ResourceGraphSpec.js | 2 -- .../test/capabilities/TimelineTimespanCapabilitySpec.js | 2 -- .../features/timeline/test/capabilities/TimelineTimespanSpec.js | 2 -- .../timeline/test/capabilities/TimelineUtilizationSpec.js | 2 -- .../timeline/test/capabilities/UtilizationCapabilitySpec.js | 2 -- .../test/controllers/ActivityModeValuesControllerSpec.js | 2 -- .../timeline/test/controllers/TimelineControllerSpec.js | 2 -- .../timeline/test/controllers/TimelineDateTimeControllerSpec.js | 2 -- .../timeline/test/controllers/TimelineGanttControllerSpec.js | 2 -- .../timeline/test/controllers/TimelineGraphControllerSpec.js | 2 -- .../timeline/test/controllers/TimelineTableControllerSpec.js | 2 -- .../timeline/test/controllers/TimelineTickControllerSpec.js | 2 -- .../timeline/test/controllers/TimelineZoomControllerSpec.js | 2 -- .../test/controllers/drag/TimelineDragHandleFactorySpec.js | 2 -- .../timeline/test/controllers/drag/TimelineDragHandlerSpec.js | 2 -- .../timeline/test/controllers/drag/TimelineDragPopulatorSpec.js | 2 -- .../timeline/test/controllers/drag/TimelineEndHandleSpec.js | 2 -- .../timeline/test/controllers/drag/TimelineMoveHandleSpec.js | 2 -- .../timeline/test/controllers/drag/TimelineSnapHandlerSpec.js | 2 -- .../timeline/test/controllers/drag/TimelineStartHandleSpec.js | 2 -- .../test/controllers/graph/TimelineGraphPopulatorSpec.js | 2 -- .../test/controllers/graph/TimelineGraphRendererSpec.js | 2 -- .../timeline/test/controllers/graph/TimelineGraphSpec.js | 2 -- .../test/controllers/swimlane/TimelineColorAssignerSpec.js | 2 -- .../timeline/test/controllers/swimlane/TimelineProxySpec.js | 2 -- .../test/controllers/swimlane/TimelineSwimlaneDecoratorSpec.js | 2 -- .../controllers/swimlane/TimelineSwimlaneDropHandlerSpec.js | 2 -- .../test/controllers/swimlane/TimelineSwimlanePopulatorSpec.js | 2 -- .../timeline/test/controllers/swimlane/TimelineSwimlaneSpec.js | 2 -- .../features/timeline/test/directives/MCTSwimlaneDragSpec.js | 2 -- .../features/timeline/test/directives/MCTSwimlaneDropSpec.js | 2 -- .../timeline/test/directives/SwimlaneDragConstantsSpec.js | 2 -- platform/features/timeline/test/services/ObjectLoaderSpec.js | 2 -- platform/forms/bundle.js | 2 -- platform/forms/src/MCTControl.js | 2 -- platform/forms/src/MCTForm.js | 2 -- platform/forms/src/MCTToolbar.js | 2 -- platform/forms/src/controllers/ColorController.js | 2 -- platform/forms/src/controllers/CompositeController.js | 2 -- platform/forms/src/controllers/DateTimeController.js | 2 -- platform/forms/src/controllers/DialogButtonController.js | 2 -- platform/forms/src/controllers/FormController.js | 2 -- platform/forms/test/MCTControlSpec.js | 2 -- platform/forms/test/MCTFormSpec.js | 2 -- platform/forms/test/MCTToolbarSpec.js | 2 -- platform/forms/test/controllers/ColorControllerSpec.js | 2 -- platform/forms/test/controllers/CompositeControllerSpec.js | 2 -- platform/forms/test/controllers/DateTimeControllerSpec.js | 2 -- platform/forms/test/controllers/DialogButtonControllerSpec.js | 2 -- platform/forms/test/controllers/FormControllerSpec.js | 2 -- platform/framework/bundle.js | 2 -- platform/framework/src/Constants.js | 1 - platform/framework/src/FrameworkInitializer.js | 2 -- platform/framework/src/FrameworkLayer.js | 2 -- platform/framework/src/LogLevel.js | 2 -- platform/framework/src/Main.js | 2 -- platform/framework/src/bootstrap/ApplicationBootstrapper.js | 2 -- platform/framework/src/load/Bundle.js | 2 -- platform/framework/src/load/BundleLoader.js | 2 -- platform/framework/src/load/Extension.js | 2 -- platform/framework/src/register/CustomRegistrars.js | 2 -- platform/framework/src/register/ExtensionRegistrar.js | 2 -- platform/framework/src/register/ExtensionSorter.js | 2 -- platform/framework/src/register/PartialConstructor.js | 2 -- platform/framework/src/register/ServiceCompositor.js | 2 -- platform/framework/src/resolve/BundleResolver.js | 2 -- platform/framework/src/resolve/ExtensionResolver.js | 2 -- platform/framework/src/resolve/ImplementationLoader.js | 2 -- platform/framework/src/resolve/RequireConfigurator.js | 2 -- platform/framework/test/FrameworkInitializerSpec.js | 2 -- platform/framework/test/LogLevelSpec.js | 2 -- .../framework/test/bootstrap/ApplicationBootstrapperSpec.js | 2 -- platform/framework/test/load/BundleLoaderSpec.js | 2 -- platform/framework/test/load/BundleSpec.js | 2 -- platform/framework/test/load/ExtensionSpec.js | 2 -- platform/framework/test/register/CustomRegistrarsSpec.js | 2 -- platform/framework/test/register/ExtensionRegistrarSpec.js | 2 -- platform/framework/test/register/ExtensionSorterSpec.js | 2 -- platform/framework/test/register/PartialConstructorSpec.js | 2 -- platform/framework/test/register/ServiceCompositorSpec.js | 2 -- platform/framework/test/resolve/BundleResolverSpec.js | 2 -- platform/framework/test/resolve/ExtensionResolverSpec.js | 2 -- platform/framework/test/resolve/ImplementationLoaderSpec.js | 2 -- platform/framework/test/resolve/RequireConfiguratorSpec.js | 2 -- platform/identity/bundle.js | 2 -- platform/identity/src/IdentityAggregator.js | 2 -- platform/identity/src/IdentityCreationDecorator.js | 2 -- platform/identity/src/IdentityIndicator.js | 2 -- platform/identity/src/IdentityProvider.js | 2 -- platform/identity/test/IdentityAggregatorSpec.js | 2 -- platform/identity/test/IdentityCreationDecoratorSpec.js | 2 -- platform/identity/test/IdentityIndicatorSpec.js | 2 -- platform/identity/test/IdentityProviderSpec.js | 2 -- platform/persistence/aggregator/bundle.js | 2 -- platform/persistence/aggregator/src/PersistenceAggregator.js | 2 -- .../persistence/aggregator/test/PersistenceAggregatorSpec.js | 2 -- platform/persistence/cache/bundle.js | 2 -- platform/persistence/cache/src/CachingPersistenceDecorator.js | 2 -- .../persistence/cache/test/CachingPersistenceDecoratorSpec.js | 2 -- platform/persistence/couch/bundle.js | 2 -- platform/persistence/couch/src/CouchDocument.js | 2 -- platform/persistence/couch/src/CouchIndicator.js | 2 -- platform/persistence/couch/src/CouchPersistenceProvider.js | 2 -- platform/persistence/couch/test/CouchDocumentSpec.js | 2 -- platform/persistence/couch/test/CouchIndicatorSpec.js | 2 -- platform/persistence/couch/test/CouchPersistenceProviderSpec.js | 2 -- platform/persistence/elastic/bundle.js | 2 -- platform/persistence/elastic/src/ElasticIndicator.js | 2 -- platform/persistence/elastic/src/ElasticPersistenceProvider.js | 2 -- platform/persistence/elastic/src/ElasticSearchProvider.js | 2 -- platform/persistence/elastic/test/ElasticIndicatorSpec.js | 2 -- .../persistence/elastic/test/ElasticPersistenceProviderSpec.js | 2 -- platform/persistence/elastic/test/ElasticSearchProviderSpec.js | 2 -- platform/persistence/local/bundle.js | 2 -- platform/persistence/local/src/LocalStorageIndicator.js | 2 -- .../persistence/local/src/LocalStoragePersistenceProvider.js | 2 -- platform/persistence/local/test/LocalStorageIndicatorSpec.js | 2 -- .../local/test/LocalStoragePersistenceProviderSpec.js | 2 -- platform/persistence/queue/bundle.js | 2 -- platform/persistence/queue/src/PersistenceFailureConstants.js | 1 - platform/persistence/queue/src/PersistenceFailureController.js | 2 -- platform/persistence/queue/src/PersistenceFailureDialog.js | 2 -- platform/persistence/queue/src/PersistenceFailureHandler.js | 2 -- platform/persistence/queue/src/PersistenceQueue.js | 2 -- platform/persistence/queue/src/PersistenceQueueHandler.js | 2 -- platform/persistence/queue/src/PersistenceQueueImpl.js | 2 -- platform/persistence/queue/src/QueuingPersistenceCapability.js | 2 -- .../queue/src/QueuingPersistenceCapabilityDecorator.js | 2 -- .../persistence/queue/test/PersistenceFailureConstantsSpec.js | 2 -- .../persistence/queue/test/PersistenceFailureControllerSpec.js | 2 -- platform/persistence/queue/test/PersistenceFailureDialogSpec.js | 2 -- .../persistence/queue/test/PersistenceFailureHandlerSpec.js | 2 -- platform/persistence/queue/test/PersistenceQueueHandlerSpec.js | 2 -- platform/persistence/queue/test/PersistenceQueueImplSpec.js | 2 -- platform/persistence/queue/test/PersistenceQueueSpec.js | 2 -- .../queue/test/QueuingPersistenceCapabilityDecoratorSpec.js | 2 -- .../persistence/queue/test/QueuingPersistenceCapabilitySpec.js | 2 -- platform/policy/bundle.js | 2 -- platform/policy/src/PolicyActionDecorator.js | 2 -- platform/policy/src/PolicyProvider.js | 2 -- platform/policy/src/PolicyViewDecorator.js | 2 -- platform/policy/test/PolicyActionDecoratorSpec.js | 2 -- platform/policy/test/PolicyProviderSpec.js | 2 -- platform/policy/test/PolicyViewDecoratorSpec.js | 2 -- platform/representation/bundle.js | 2 -- platform/representation/src/MCTInclude.js | 2 -- platform/representation/src/MCTRepresentation.js | 2 -- platform/representation/src/TemplateLinker.js | 2 -- platform/representation/src/TemplatePrefetcher.js | 2 -- platform/representation/src/actions/ContextMenuAction.js | 2 -- platform/representation/src/gestures/ContextMenuGesture.js | 2 -- platform/representation/src/gestures/DragGesture.js | 2 -- platform/representation/src/gestures/DropGesture.js | 2 -- platform/representation/src/gestures/GestureConstants.js | 1 - platform/representation/src/gestures/GestureProvider.js | 2 -- platform/representation/src/gestures/GestureRepresenter.js | 2 -- platform/representation/src/services/DndService.js | 2 -- platform/representation/test/MCTIncludeSpec.js | 2 -- platform/representation/test/MCTRepresentationSpec.js | 2 -- platform/representation/test/TemplateLinkerSpec.js | 2 -- platform/representation/test/TemplatePrefetcherSpec.js | 2 -- platform/representation/test/actions/ContextMenuActionSpec.js | 2 -- platform/representation/test/gestures/ContextMenuGestureSpec.js | 2 -- platform/representation/test/gestures/DragGestureSpec.js | 2 -- platform/representation/test/gestures/DropGestureSpec.js | 2 -- platform/representation/test/gestures/GestureProviderSpec.js | 2 -- platform/representation/test/gestures/GestureRepresenterSpec.js | 2 -- platform/representation/test/services/DndServiceSpec.js | 2 -- platform/search/bundle.js | 2 -- platform/search/src/controllers/ClickAwayController.js | 2 -- platform/search/src/controllers/SearchController.js | 2 -- platform/search/src/controllers/SearchMenuController.js | 2 -- platform/search/src/services/GenericSearchProvider.js | 2 -- platform/search/src/services/GenericSearchWorker.js | 2 -- platform/search/src/services/SearchAggregator.js | 2 -- platform/search/test/controllers/ClickAwayControllerSpec.js | 2 -- platform/search/test/controllers/SearchControllerSpec.js | 2 -- platform/search/test/controllers/SearchMenuControllerSpec.js | 2 -- platform/search/test/services/GenericSearchProviderSpec.js | 2 -- platform/search/test/services/GenericSearchWorkerSpec.js | 2 -- platform/search/test/services/SearchAggregatorSpec.js | 2 -- platform/status/bundle.js | 2 -- platform/status/src/StatusCapability.js | 2 -- platform/status/src/StatusConstants.js | 1 - platform/status/src/StatusRepresenter.js | 2 -- platform/status/src/StatusService.js | 2 -- platform/status/test/StatusCapabilitySpec.js | 2 -- platform/status/test/StatusRepresenterSpec.js | 2 -- platform/status/test/StatusServiceSpec.js | 2 -- platform/telemetry/bundle.js | 2 -- platform/telemetry/src/TelemetryAggregator.js | 2 -- platform/telemetry/src/TelemetryCapability.js | 2 -- platform/telemetry/src/TelemetryController.js | 2 -- platform/telemetry/src/TelemetryDelegator.js | 2 -- platform/telemetry/src/TelemetryFormatter.js | 2 -- platform/telemetry/src/TelemetryHandle.js | 2 -- platform/telemetry/src/TelemetryHandler.js | 2 -- platform/telemetry/src/TelemetryQueue.js | 2 -- platform/telemetry/src/TelemetrySubscriber.js | 2 -- platform/telemetry/src/TelemetrySubscription.js | 2 -- platform/telemetry/src/TelemetryTable.js | 2 -- platform/telemetry/test/TelemetryAggregatorSpec.js | 2 -- platform/telemetry/test/TelemetryCapabilitySpec.js | 2 -- platform/telemetry/test/TelemetryControllerSpec.js | 2 -- platform/telemetry/test/TelemetryDelegatorSpec.js | 2 -- platform/telemetry/test/TelemetryFormatterSpec.js | 2 -- platform/telemetry/test/TelemetryHandleSpec.js | 2 -- platform/telemetry/test/TelemetryHandlerSpec.js | 2 -- platform/telemetry/test/TelemetryQueueSpec.js | 2 -- platform/telemetry/test/TelemetrySubscriberSpec.js | 2 -- platform/telemetry/test/TelemetrySubscriptionSpec.js | 2 -- platform/telemetry/test/TelemetryTableSpec.js | 2 -- src/BundleRegistry.js | 2 -- src/BundleRegistrySpec.js | 2 -- src/legacyRegistry.js | 2 -- src/legacyRegistrySpec.js | 2 -- 778 files changed, 1547 deletions(-) diff --git a/platform/commonUI/about/bundle.js b/platform/commonUI/about/bundle.js index aff0825f5c..a5fdd726d5 100644 --- a/platform/commonUI/about/bundle.js +++ b/platform/commonUI/about/bundle.js @@ -19,7 +19,6 @@ * this source code distribution or the Licensing information page available * at runtime from the About dialog for additional information. *****************************************************************************/ -/*global define*/ define([ "text!./res/templates/about-dialog.html", @@ -48,7 +47,6 @@ define([ licensesExportMdTemplate, legacyRegistry ) { - "use strict"; legacyRegistry.register("platform/commonUI/about", { "name": "About Open MCT Web", diff --git a/platform/commonUI/about/src/AboutController.js b/platform/commonUI/about/src/AboutController.js index dffd9b9471..0807166bc9 100644 --- a/platform/commonUI/about/src/AboutController.js +++ b/platform/commonUI/about/src/AboutController.js @@ -19,7 +19,6 @@ * this source code distribution or the Licensing information page available * at runtime from the About dialog for additional information. *****************************************************************************/ -/*global define*/ /** @@ -29,7 +28,6 @@ define( [], function () { - "use strict"; /** * The AboutController provides information to populate the diff --git a/platform/commonUI/about/src/LicenseController.js b/platform/commonUI/about/src/LicenseController.js index 740124641f..5d030588c9 100644 --- a/platform/commonUI/about/src/LicenseController.js +++ b/platform/commonUI/about/src/LicenseController.js @@ -19,12 +19,10 @@ * this source code distribution or the Licensing information page available * at runtime from the About dialog for additional information. *****************************************************************************/ -/*global define*/ define( [], function () { - "use strict"; /** * Provides extension-introduced licenses information to the diff --git a/platform/commonUI/about/src/LogoController.js b/platform/commonUI/about/src/LogoController.js index 85909a0552..616981e8da 100644 --- a/platform/commonUI/about/src/LogoController.js +++ b/platform/commonUI/about/src/LogoController.js @@ -19,12 +19,10 @@ * this source code distribution or the Licensing information page available * at runtime from the About dialog for additional information. *****************************************************************************/ -/*global define*/ define( [], function () { - "use strict"; /** * The LogoController provides functionality to the application diff --git a/platform/commonUI/about/test/AboutControllerSpec.js b/platform/commonUI/about/test/AboutControllerSpec.js index c4fb26c488..f902c7b6dc 100644 --- a/platform/commonUI/about/test/AboutControllerSpec.js +++ b/platform/commonUI/about/test/AboutControllerSpec.js @@ -19,12 +19,10 @@ * this source code distribution or the Licensing information page available * at runtime from the About dialog for additional information. *****************************************************************************/ -/*global define,Promise,describe,it,expect,beforeEach,waitsFor,jasmine*/ define( ['../src/AboutController'], function (AboutController) { - "use strict"; describe("The About controller", function () { var testVersions, diff --git a/platform/commonUI/about/test/LicenseControllerSpec.js b/platform/commonUI/about/test/LicenseControllerSpec.js index 9e281c3cfd..ba99fc1f0d 100644 --- a/platform/commonUI/about/test/LicenseControllerSpec.js +++ b/platform/commonUI/about/test/LicenseControllerSpec.js @@ -19,12 +19,10 @@ * this source code distribution or the Licensing information page available * at runtime from the About dialog for additional information. *****************************************************************************/ -/*global define,Promise,describe,it,expect,beforeEach,waitsFor,jasmine*/ define( ['../src/LicenseController'], function (LicenseController) { - "use strict"; describe("The License controller", function () { var testLicenses, diff --git a/platform/commonUI/about/test/LogoControllerSpec.js b/platform/commonUI/about/test/LogoControllerSpec.js index c7ad665319..da1c4b0a84 100644 --- a/platform/commonUI/about/test/LogoControllerSpec.js +++ b/platform/commonUI/about/test/LogoControllerSpec.js @@ -19,12 +19,10 @@ * this source code distribution or the Licensing information page available * at runtime from the About dialog for additional information. *****************************************************************************/ -/*global define,Promise,describe,it,expect,beforeEach,waitsFor,jasmine*/ define( ['../src/LogoController'], function (LogoController) { - "use strict"; describe("The About controller", function () { var mockOverlayService, diff --git a/platform/commonUI/browse/bundle.js b/platform/commonUI/browse/bundle.js index 7fd785a7f5..73b3f44de7 100644 --- a/platform/commonUI/browse/bundle.js +++ b/platform/commonUI/browse/bundle.js @@ -19,7 +19,6 @@ * this source code distribution or the Licensing information page available * at runtime from the About dialog for additional information. *****************************************************************************/ -/*global define*/ define([ "./src/BrowseController", @@ -80,7 +79,6 @@ define([ inspectorRegionTemplate, legacyRegistry ) { - "use strict"; legacyRegistry.register("platform/commonUI/browse", { "extensions": { diff --git a/platform/commonUI/browse/src/BrowseController.js b/platform/commonUI/browse/src/BrowseController.js index db7d9182cb..2c07ee7b50 100644 --- a/platform/commonUI/browse/src/BrowseController.js +++ b/platform/commonUI/browse/src/BrowseController.js @@ -19,7 +19,6 @@ * this source code distribution or the Licensing information page available * at runtime from the About dialog for additional information. *****************************************************************************/ -/*global define,Promise, confirm*/ /** * This bundle implements Browse mode. @@ -30,7 +29,6 @@ define( '../../../representation/src/gestures/GestureConstants' ], function (GestureConstants) { - "use strict"; var ROOT_ID = "ROOT"; diff --git a/platform/commonUI/browse/src/BrowseObjectController.js b/platform/commonUI/browse/src/BrowseObjectController.js index 71345d6f1b..63547993f8 100644 --- a/platform/commonUI/browse/src/BrowseObjectController.js +++ b/platform/commonUI/browse/src/BrowseObjectController.js @@ -19,12 +19,10 @@ * this source code distribution or the Licensing information page available * at runtime from the About dialog for additional information. *****************************************************************************/ -/*global define,Promise*/ define( [], function () { - "use strict"; /** * Controller for the `browse-object` representation of a domain diff --git a/platform/commonUI/browse/src/InspectorRegion.js b/platform/commonUI/browse/src/InspectorRegion.js index cc47ae2db8..e227d3d452 100644 --- a/platform/commonUI/browse/src/InspectorRegion.js +++ b/platform/commonUI/browse/src/InspectorRegion.js @@ -19,14 +19,12 @@ * this source code distribution or the Licensing information page available * at runtime from the About dialog for additional information. *****************************************************************************/ -/*global define,window*/ define( [ '../../regions/src/Region' ], function (Region) { - "use strict"; /** * Defines the a default Inspector region. Captured in a class to diff --git a/platform/commonUI/browse/src/MenuArrowController.js b/platform/commonUI/browse/src/MenuArrowController.js index 5c4916e099..f222871ccc 100644 --- a/platform/commonUI/browse/src/MenuArrowController.js +++ b/platform/commonUI/browse/src/MenuArrowController.js @@ -19,7 +19,6 @@ * this source code distribution or the Licensing information page available * at runtime from the About dialog for additional information. *****************************************************************************/ -/*global define*/ /** * Module defining MenuArrowController. Created by shale on 06/30/2015. @@ -27,7 +26,6 @@ define( [], function () { - "use strict"; /** * A left-click on the menu arrow should display a diff --git a/platform/commonUI/browse/src/PaneController.js b/platform/commonUI/browse/src/PaneController.js index 6a59baa0e0..3fb5630fdd 100644 --- a/platform/commonUI/browse/src/PaneController.js +++ b/platform/commonUI/browse/src/PaneController.js @@ -19,13 +19,11 @@ * this source code distribution or the Licensing information page available * at runtime from the About dialog for additional information. *****************************************************************************/ -/*global define,Promise*/ define( [], function () { - "use strict"; /** * Controller to provide the ability to show/hide the tree in diff --git a/platform/commonUI/browse/src/creation/AddAction.js b/platform/commonUI/browse/src/creation/AddAction.js index 3832280130..9a9467ef5b 100644 --- a/platform/commonUI/browse/src/creation/AddAction.js +++ b/platform/commonUI/browse/src/creation/AddAction.js @@ -19,7 +19,6 @@ * this source code distribution or the Licensing information page available * at runtime from the About dialog for additional information. *****************************************************************************/ -/*global define,Promise*/ /** * Module defining AddAction. Created by ahenry on 01/21/16. @@ -29,7 +28,6 @@ define( './CreateWizard' ], function (CreateWizard) { - "use strict"; /** * The Add Action is performed to create new instances of diff --git a/platform/commonUI/browse/src/creation/AddActionProvider.js b/platform/commonUI/browse/src/creation/AddActionProvider.js index 0ac97c0013..9ae5364d95 100644 --- a/platform/commonUI/browse/src/creation/AddActionProvider.js +++ b/platform/commonUI/browse/src/creation/AddActionProvider.js @@ -19,7 +19,6 @@ * this source code distribution or the Licensing information page available * at runtime from the About dialog for additional information. *****************************************************************************/ -/*global define,Promise*/ /** * Module defining AddActionProvider.js. Created by ahenry on 01/21/16. @@ -27,7 +26,6 @@ define( ["./AddAction"], function (AddAction) { - "use strict"; /** * The AddActionProvider is an ActionProvider which introduces diff --git a/platform/commonUI/browse/src/creation/CreateAction.js b/platform/commonUI/browse/src/creation/CreateAction.js index 83d88ba709..00b7c09fa4 100644 --- a/platform/commonUI/browse/src/creation/CreateAction.js +++ b/platform/commonUI/browse/src/creation/CreateAction.js @@ -19,7 +19,6 @@ * this source code distribution or the Licensing information page available * at runtime from the About dialog for additional information. *****************************************************************************/ -/*global define,Promise*/ /** * Module defining CreateAction. Created by vwoeltje on 11/10/14. @@ -30,7 +29,6 @@ define( '../../../edit/src/objects/EditableDomainObject' ], function (CreateWizard, EditableDomainObject) { - "use strict"; /** * The Create Action is performed to create new instances of diff --git a/platform/commonUI/browse/src/creation/CreateActionProvider.js b/platform/commonUI/browse/src/creation/CreateActionProvider.js index 0a8d145b4e..82f57343da 100644 --- a/platform/commonUI/browse/src/creation/CreateActionProvider.js +++ b/platform/commonUI/browse/src/creation/CreateActionProvider.js @@ -19,7 +19,6 @@ * this source code distribution or the Licensing information page available * at runtime from the About dialog for additional information. *****************************************************************************/ -/*global define,Promise*/ /** * Module defining CreateActionProvider.js. Created by vwoeltje on 11/10/14. @@ -27,7 +26,6 @@ define( ["./CreateAction"], function (CreateAction) { - "use strict"; /** * The CreateActionProvider is an ActionProvider which introduces diff --git a/platform/commonUI/browse/src/creation/CreateMenuController.js b/platform/commonUI/browse/src/creation/CreateMenuController.js index 624764c2e4..77e09a69c4 100644 --- a/platform/commonUI/browse/src/creation/CreateMenuController.js +++ b/platform/commonUI/browse/src/creation/CreateMenuController.js @@ -19,7 +19,6 @@ * this source code distribution or the Licensing information page available * at runtime from the About dialog for additional information. *****************************************************************************/ -/*global define,Promise*/ /** * Module defining CreateMenuController. Created by vwoeltje on 11/10/14. @@ -27,7 +26,6 @@ define( [], function () { - "use strict"; /** * Controller for the Create menu; maintains an up-to-date diff --git a/platform/commonUI/browse/src/creation/CreateWizard.js b/platform/commonUI/browse/src/creation/CreateWizard.js index f4a29d42ac..660a577905 100644 --- a/platform/commonUI/browse/src/creation/CreateWizard.js +++ b/platform/commonUI/browse/src/creation/CreateWizard.js @@ -19,11 +19,9 @@ * this source code distribution or the Licensing information page available * at runtime from the About dialog for additional information. *****************************************************************************/ -/*global define*/ define( function () { - 'use strict'; /** * A class for capturing user input data from an object creation diff --git a/platform/commonUI/browse/src/creation/CreationPolicy.js b/platform/commonUI/browse/src/creation/CreationPolicy.js index 28749e711f..480d0adec4 100644 --- a/platform/commonUI/browse/src/creation/CreationPolicy.js +++ b/platform/commonUI/browse/src/creation/CreationPolicy.js @@ -19,12 +19,10 @@ * this source code distribution or the Licensing information page available * at runtime from the About dialog for additional information. *****************************************************************************/ -/*global define*/ define( [], function () { - "use strict"; /** * A policy for determining whether objects of a given type can be diff --git a/platform/commonUI/browse/src/creation/CreationService.js b/platform/commonUI/browse/src/creation/CreationService.js index 4b7c0119c9..ca5389e162 100644 --- a/platform/commonUI/browse/src/creation/CreationService.js +++ b/platform/commonUI/browse/src/creation/CreationService.js @@ -19,7 +19,6 @@ * this source code distribution or the Licensing information page available * at runtime from the About dialog for additional information. *****************************************************************************/ -/*global define,Promise*/ /** * Module defining CreateService. Created by vwoeltje on 11/10/14. @@ -27,7 +26,6 @@ define( [], function () { - "use strict"; var NON_PERSISTENT_WARNING = "Tried to create an object in non-persistent container.", diff --git a/platform/commonUI/browse/src/creation/LocatorController.js b/platform/commonUI/browse/src/creation/LocatorController.js index 3d8c6cfc7f..43a1a4ed10 100644 --- a/platform/commonUI/browse/src/creation/LocatorController.js +++ b/platform/commonUI/browse/src/creation/LocatorController.js @@ -19,12 +19,10 @@ * this source code distribution or the Licensing information page available * at runtime from the About dialog for additional information. *****************************************************************************/ -/*global define*/ define( [], function () { - "use strict"; /** * Controller for the "locator" control, which provides the diff --git a/platform/commonUI/browse/src/navigation/NavigateAction.js b/platform/commonUI/browse/src/navigation/NavigateAction.js index 7b258afafe..e9cc700f93 100644 --- a/platform/commonUI/browse/src/navigation/NavigateAction.js +++ b/platform/commonUI/browse/src/navigation/NavigateAction.js @@ -19,7 +19,6 @@ * this source code distribution or the Licensing information page available * at runtime from the About dialog for additional information. *****************************************************************************/ -/*global define,Promise*/ /** * Module defining NavigateAction. Created by vwoeltje on 11/10/14. @@ -27,7 +26,6 @@ define( [], function () { - "use strict"; /** * The navigate action navigates to a specific domain object. diff --git a/platform/commonUI/browse/src/navigation/NavigationService.js b/platform/commonUI/browse/src/navigation/NavigationService.js index 3b4d266bd1..05d93aa996 100644 --- a/platform/commonUI/browse/src/navigation/NavigationService.js +++ b/platform/commonUI/browse/src/navigation/NavigationService.js @@ -19,7 +19,6 @@ * this source code distribution or the Licensing information page available * at runtime from the About dialog for additional information. *****************************************************************************/ -/*global define,Promise*/ /** * Module defining NavigationService. Created by vwoeltje on 11/10/14. @@ -27,7 +26,6 @@ define( [], function () { - "use strict"; /** * The navigation service maintains the application's current diff --git a/platform/commonUI/browse/src/windowing/FullscreenAction.js b/platform/commonUI/browse/src/windowing/FullscreenAction.js index 5de4336acd..f898dbbe6e 100644 --- a/platform/commonUI/browse/src/windowing/FullscreenAction.js +++ b/platform/commonUI/browse/src/windowing/FullscreenAction.js @@ -19,7 +19,6 @@ * this source code distribution or the Licensing information page available * at runtime from the About dialog for additional information. *****************************************************************************/ -/*global define,screenfull,Promise*/ /** * Module defining FullscreenAction. Created by vwoeltje on 11/18/14. @@ -27,7 +26,6 @@ define( ["screenfull"], function () { - "use strict"; var ENTER_FULLSCREEN = "Enter full screen mode", EXIT_FULLSCREEN = "Exit full screen mode"; diff --git a/platform/commonUI/browse/src/windowing/NewTabAction.js b/platform/commonUI/browse/src/windowing/NewTabAction.js index 301c204bbd..83422d5096 100644 --- a/platform/commonUI/browse/src/windowing/NewTabAction.js +++ b/platform/commonUI/browse/src/windowing/NewTabAction.js @@ -19,7 +19,6 @@ * this source code distribution or the Licensing information page available * at runtime from the About dialog for additional information. *****************************************************************************/ -/*global define,Promise*/ /** * Module defining NewTabAction (Originally NewWindowAction). Created by vwoeltje on 11/18/14. @@ -27,7 +26,6 @@ define( [], function () { - "use strict"; var ROOT_ID = "ROOT", DEFAULT_PATH = "/mine"; /** diff --git a/platform/commonUI/browse/src/windowing/WindowTitler.js b/platform/commonUI/browse/src/windowing/WindowTitler.js index 4ce448cb1e..eb8c499e24 100644 --- a/platform/commonUI/browse/src/windowing/WindowTitler.js +++ b/platform/commonUI/browse/src/windowing/WindowTitler.js @@ -19,12 +19,10 @@ * this source code distribution or the Licensing information page available * at runtime from the About dialog for additional information. *****************************************************************************/ -/*global define,Promise*/ define( [], function () { - "use strict"; /** * Updates the title of the current window to reflect the name diff --git a/platform/commonUI/browse/test/BrowseControllerSpec.js b/platform/commonUI/browse/test/BrowseControllerSpec.js index cc14b4d0e5..6bb41b4e6e 100644 --- a/platform/commonUI/browse/test/BrowseControllerSpec.js +++ b/platform/commonUI/browse/test/BrowseControllerSpec.js @@ -19,7 +19,6 @@ * this source code distribution or the Licensing information page available * at runtime from the About dialog for additional information. *****************************************************************************/ -/*global define,Promise,describe,it,expect,beforeEach,waitsFor,jasmine,xit,xdescribe*/ /** * MCTRepresentationSpec. Created by vwoeltje on 11/6/14. @@ -27,7 +26,6 @@ define( ["../src/BrowseController"], function (BrowseController) { - "use strict"; describe("The browse controller", function () { var mockScope, diff --git a/platform/commonUI/browse/test/BrowseObjectControllerSpec.js b/platform/commonUI/browse/test/BrowseObjectControllerSpec.js index 9fc7ba3119..dd873030f5 100644 --- a/platform/commonUI/browse/test/BrowseObjectControllerSpec.js +++ b/platform/commonUI/browse/test/BrowseObjectControllerSpec.js @@ -19,13 +19,11 @@ * this source code distribution or the Licensing information page available * at runtime from the About dialog for additional information. *****************************************************************************/ -/*global define,Promise,describe,it,expect,beforeEach,waitsFor,jasmine*/ define( ["../src/BrowseObjectController"], function (BrowseObjectController) { - "use strict"; describe("The browse object controller", function () { var mockScope, diff --git a/platform/commonUI/browse/test/InspectorRegionSpec.js b/platform/commonUI/browse/test/InspectorRegionSpec.js index e455a8df4d..b7ce021cdc 100644 --- a/platform/commonUI/browse/test/InspectorRegionSpec.js +++ b/platform/commonUI/browse/test/InspectorRegionSpec.js @@ -19,7 +19,6 @@ * this source code distribution or the Licensing information page available * at runtime from the About dialog for additional information. *****************************************************************************/ -/*global define,Promise,describe,it,expect,beforeEach,waitsFor,jasmine*/ /** * MCTIncudeSpec. Created by vwoeltje on 11/6/14. @@ -27,7 +26,6 @@ define( ["../src/InspectorRegion"], function (InspectorRegion) { - "use strict"; describe("The inspector region", function () { var inspectorRegion; diff --git a/platform/commonUI/browse/test/MenuArrowControllerSpec.js b/platform/commonUI/browse/test/MenuArrowControllerSpec.js index b8aa345489..22f9882115 100644 --- a/platform/commonUI/browse/test/MenuArrowControllerSpec.js +++ b/platform/commonUI/browse/test/MenuArrowControllerSpec.js @@ -19,7 +19,6 @@ * this source code distribution or the Licensing information page available * at runtime from the About dialog for additional information. *****************************************************************************/ -/*global define,Promise,describe,it,expect,beforeEach,waitsFor,jasmine*/ /** * MenuArrowControllerSpec. Created by shale on 07/02/2015. @@ -27,7 +26,6 @@ define( ["../src/MenuArrowController"], function (MenuArrowController) { - "use strict"; describe("The menu arrow controller ", function () { var mockScope, diff --git a/platform/commonUI/browse/test/PaneControllerSpec.js b/platform/commonUI/browse/test/PaneControllerSpec.js index f02da713a4..8654884f39 100644 --- a/platform/commonUI/browse/test/PaneControllerSpec.js +++ b/platform/commonUI/browse/test/PaneControllerSpec.js @@ -19,12 +19,10 @@ * this source code distribution or the Licensing information page available * at runtime from the About dialog for additional information. *****************************************************************************/ -/*global define,Promise,describe,it,expect,beforeEach,waitsFor,jasmine*/ define( ["../src/PaneController"], function (PaneController) { - 'use strict'; describe("The PaneController", function () { var mockScope, diff --git a/platform/commonUI/browse/test/creation/AddActionProviderSpec.js b/platform/commonUI/browse/test/creation/AddActionProviderSpec.js index aaa83af8e9..3b391d0258 100644 --- a/platform/commonUI/browse/test/creation/AddActionProviderSpec.js +++ b/platform/commonUI/browse/test/creation/AddActionProviderSpec.js @@ -19,7 +19,6 @@ * this source code distribution or the Licensing information page available * at runtime from the About dialog for additional information. *****************************************************************************/ -/*global define,Promise,describe,it,expect,beforeEach,waitsFor,jasmine,xit,xdescribe*/ /** * MCTRepresentationSpec. Created by ahenry on 01/21/14. @@ -27,7 +26,6 @@ define( ["../../src/creation/AddActionProvider"], function (AddActionProvider) { - "use strict"; describe("The add action provider", function () { var mockTypeService, diff --git a/platform/commonUI/browse/test/creation/CreateActionProviderSpec.js b/platform/commonUI/browse/test/creation/CreateActionProviderSpec.js index 857b29fe4e..b5bb794b04 100644 --- a/platform/commonUI/browse/test/creation/CreateActionProviderSpec.js +++ b/platform/commonUI/browse/test/creation/CreateActionProviderSpec.js @@ -19,7 +19,6 @@ * this source code distribution or the Licensing information page available * at runtime from the About dialog for additional information. *****************************************************************************/ -/*global define,Promise,describe,it,expect,beforeEach,waitsFor,jasmine,xit,xdescribe*/ /** * MCTRepresentationSpec. Created by vwoeltje on 11/6/14. @@ -27,7 +26,6 @@ define( ["../../src/creation/CreateActionProvider"], function (CreateActionProvider) { - "use strict"; describe("The create action provider", function () { var mockTypeService, diff --git a/platform/commonUI/browse/test/creation/CreateActionSpec.js b/platform/commonUI/browse/test/creation/CreateActionSpec.js index d7e357fd9e..600bfadbdb 100644 --- a/platform/commonUI/browse/test/creation/CreateActionSpec.js +++ b/platform/commonUI/browse/test/creation/CreateActionSpec.js @@ -19,7 +19,6 @@ * this source code distribution or the Licensing information page available * at runtime from the About dialog for additional information. *****************************************************************************/ -/*global define,Promise,describe,it,expect,beforeEach,waitsFor,jasmine,xit,xdescribe*/ /** * MCTRepresentationSpec. Created by vwoeltje on 11/6/14. @@ -27,7 +26,6 @@ define( ["../../src/creation/CreateAction"], function (CreateAction) { - "use strict"; describe("The create action", function () { var mockType, diff --git a/platform/commonUI/browse/test/creation/CreateMenuControllerSpec.js b/platform/commonUI/browse/test/creation/CreateMenuControllerSpec.js index 5f10ee35e4..a2f5473199 100644 --- a/platform/commonUI/browse/test/creation/CreateMenuControllerSpec.js +++ b/platform/commonUI/browse/test/creation/CreateMenuControllerSpec.js @@ -19,7 +19,6 @@ * this source code distribution or the Licensing information page available * at runtime from the About dialog for additional information. *****************************************************************************/ -/*global define,Promise,describe,it,expect,beforeEach,waitsFor,jasmine*/ /** * MCTRepresentationSpec. Created by vwoeltje on 11/6/14. @@ -27,7 +26,6 @@ define( ["../../src/creation/CreateMenuController"], function (CreateMenuController) { - "use strict"; describe("The create menu controller", function () { var mockScope, diff --git a/platform/commonUI/browse/test/creation/CreateWizardSpec.js b/platform/commonUI/browse/test/creation/CreateWizardSpec.js index fbb2a735e6..577fb9b9ff 100644 --- a/platform/commonUI/browse/test/creation/CreateWizardSpec.js +++ b/platform/commonUI/browse/test/creation/CreateWizardSpec.js @@ -19,7 +19,6 @@ * this source code distribution or the Licensing information page available * at runtime from the About dialog for additional information. *****************************************************************************/ -/*global define,Promise,describe,it,expect,beforeEach,waitsFor,jasmine*/ /** * MCTRepresentationSpec. Created by vwoeltje on 11/6/14. @@ -27,7 +26,6 @@ define( ["../../src/creation/CreateWizard"], function (CreateWizard) { - "use strict"; describe("The create wizard", function () { var mockType, diff --git a/platform/commonUI/browse/test/creation/CreationPolicySpec.js b/platform/commonUI/browse/test/creation/CreationPolicySpec.js index 1f88c1b149..a12d2c752d 100644 --- a/platform/commonUI/browse/test/creation/CreationPolicySpec.js +++ b/platform/commonUI/browse/test/creation/CreationPolicySpec.js @@ -19,12 +19,10 @@ * this source code distribution or the Licensing information page available * at runtime from the About dialog for additional information. *****************************************************************************/ -/*global define,describe,it,expect,beforeEach,jasmine*/ define( ["../../src/creation/CreationPolicy"], function (CreationPolicy) { - "use strict"; describe("The creation policy", function () { var mockType, diff --git a/platform/commonUI/browse/test/creation/CreationServiceSpec.js b/platform/commonUI/browse/test/creation/CreationServiceSpec.js index e0704ba702..deb2ba068b 100644 --- a/platform/commonUI/browse/test/creation/CreationServiceSpec.js +++ b/platform/commonUI/browse/test/creation/CreationServiceSpec.js @@ -19,7 +19,6 @@ * this source code distribution or the Licensing information page available * at runtime from the About dialog for additional information. *****************************************************************************/ -/*global define,Promise,describe,it,expect,beforeEach,waitsFor,jasmine*/ /** * MCTRepresentationSpec. Created by vwoeltje on 11/6/14. @@ -27,7 +26,6 @@ define( ["../../src/creation/CreationService"], function (CreationService) { - "use strict"; describe("The creation service", function () { var mockQ, diff --git a/platform/commonUI/browse/test/creation/LocatorControllerSpec.js b/platform/commonUI/browse/test/creation/LocatorControllerSpec.js index 381aecf0ab..a601d5ea42 100644 --- a/platform/commonUI/browse/test/creation/LocatorControllerSpec.js +++ b/platform/commonUI/browse/test/creation/LocatorControllerSpec.js @@ -19,7 +19,6 @@ * this source code distribution or the Licensing information page available * at runtime from the About dialog for additional information. *****************************************************************************/ -/*global define,Promise,describe,it,expect,beforeEach,waitsFor,jasmine*/ /** * MCTRepresentationSpec. Created by vwoeltje on 11/6/14. @@ -27,7 +26,6 @@ define( ["../../src/creation/LocatorController"], function (LocatorController) { - "use strict"; describe("The locator controller", function () { var mockScope, diff --git a/platform/commonUI/browse/test/navigation/NavigateActionSpec.js b/platform/commonUI/browse/test/navigation/NavigateActionSpec.js index 2441087a1a..fca6f3bea0 100644 --- a/platform/commonUI/browse/test/navigation/NavigateActionSpec.js +++ b/platform/commonUI/browse/test/navigation/NavigateActionSpec.js @@ -19,7 +19,6 @@ * this source code distribution or the Licensing information page available * at runtime from the About dialog for additional information. *****************************************************************************/ -/*global define,Promise,describe,it,expect,beforeEach,waitsFor,jasmine*/ /** * MCTRepresentationSpec. Created by vwoeltje on 11/6/14. @@ -27,7 +26,6 @@ define( ["../../src/navigation/NavigateAction"], function (NavigateAction) { - "use strict"; describe("The navigate action", function () { var mockNavigationService, diff --git a/platform/commonUI/browse/test/navigation/NavigationServiceSpec.js b/platform/commonUI/browse/test/navigation/NavigationServiceSpec.js index 410a5f1562..12b849a314 100644 --- a/platform/commonUI/browse/test/navigation/NavigationServiceSpec.js +++ b/platform/commonUI/browse/test/navigation/NavigationServiceSpec.js @@ -19,7 +19,6 @@ * this source code distribution or the Licensing information page available * at runtime from the About dialog for additional information. *****************************************************************************/ -/*global define,Promise,describe,it,expect,beforeEach,waitsFor,jasmine*/ /** * MCTRepresentationSpec. Created by vwoeltje on 11/6/14. @@ -27,7 +26,6 @@ define( ["../../src/navigation/NavigationService"], function (NavigationService) { - "use strict"; describe("The navigation service", function () { var navigationService; diff --git a/platform/commonUI/browse/test/windowing/FullscreenActionSpec.js b/platform/commonUI/browse/test/windowing/FullscreenActionSpec.js index 4ef3f50a7f..f0cf4eb382 100644 --- a/platform/commonUI/browse/test/windowing/FullscreenActionSpec.js +++ b/platform/commonUI/browse/test/windowing/FullscreenActionSpec.js @@ -19,7 +19,6 @@ * this source code distribution or the Licensing information page available * at runtime from the About dialog for additional information. *****************************************************************************/ -/*global define,Promise,describe,it,expect,beforeEach,waitsFor,jasmine,afterEach,window*/ /** * MCTRepresentationSpec. Created by vwoeltje on 11/6/14. @@ -27,7 +26,6 @@ define( ["../../src/windowing/FullscreenAction"], function (FullscreenAction) { - "use strict"; describe("The fullscreen action", function () { var action, diff --git a/platform/commonUI/browse/test/windowing/NewTabActionSpec.js b/platform/commonUI/browse/test/windowing/NewTabActionSpec.js index 1371f96eda..47f02f6c41 100644 --- a/platform/commonUI/browse/test/windowing/NewTabActionSpec.js +++ b/platform/commonUI/browse/test/windowing/NewTabActionSpec.js @@ -19,12 +19,10 @@ * this source code distribution or the Licensing information page available * at runtime from the About dialog for additional information. *****************************************************************************/ -/*global define,Promise,describe,it,expect,beforeEach,waitsFor,jasmine,afterEach,window*/ define( ["../../src/windowing/NewTabAction"], function (NewTabAction) { - "use strict"; describe("The new tab action", function () { var actionSelected, diff --git a/platform/commonUI/browse/test/windowing/WindowTitlerSpec.js b/platform/commonUI/browse/test/windowing/WindowTitlerSpec.js index d9c71a86dd..f4a0bfb4bc 100644 --- a/platform/commonUI/browse/test/windowing/WindowTitlerSpec.js +++ b/platform/commonUI/browse/test/windowing/WindowTitlerSpec.js @@ -19,7 +19,6 @@ * this source code distribution or the Licensing information page available * at runtime from the About dialog for additional information. *****************************************************************************/ -/*global define,Promise,describe,it,expect,beforeEach,waitsFor,jasmine*/ /** * WindowTitlerSpec. Created by vwoeltje on 11/6/14. @@ -27,7 +26,6 @@ define( ["../../src/windowing/WindowTitler"], function (WindowTitler) { - "use strict"; describe("The window titler", function () { var mockNavigationService, diff --git a/platform/commonUI/dialog/bundle.js b/platform/commonUI/dialog/bundle.js index 3d99408478..ef1384c3d4 100644 --- a/platform/commonUI/dialog/bundle.js +++ b/platform/commonUI/dialog/bundle.js @@ -19,7 +19,6 @@ * this source code distribution or the Licensing information page available * at runtime from the About dialog for additional information. *****************************************************************************/ -/*global define*/ define([ "./src/DialogService", @@ -44,7 +43,6 @@ define([ overlayTemplate, legacyRegistry ) { - "use strict"; legacyRegistry.register("platform/commonUI/dialog", { "extensions": { diff --git a/platform/commonUI/dialog/src/DialogService.js b/platform/commonUI/dialog/src/DialogService.js index 0d480f3455..94b59e0156 100644 --- a/platform/commonUI/dialog/src/DialogService.js +++ b/platform/commonUI/dialog/src/DialogService.js @@ -19,7 +19,6 @@ * this source code distribution or the Licensing information page available * at runtime from the About dialog for additional information. *****************************************************************************/ -/*global define*/ /** * This bundle implements the dialog service, which can be used to @@ -29,7 +28,6 @@ define( [], function () { - "use strict"; /** * The dialog service is responsible for handling window-modal * communication with the user, such as displaying forms for user diff --git a/platform/commonUI/dialog/src/OverlayService.js b/platform/commonUI/dialog/src/OverlayService.js index 5e9703cb42..084342603f 100644 --- a/platform/commonUI/dialog/src/OverlayService.js +++ b/platform/commonUI/dialog/src/OverlayService.js @@ -19,12 +19,10 @@ * this source code distribution or the Licensing information page available * at runtime from the About dialog for additional information. *****************************************************************************/ -/*global define*/ define( [], function () { - "use strict"; // Template to inject into the DOM to show the dialog; really just points to // the a specific template that can be included via mct-include diff --git a/platform/commonUI/dialog/test/DialogServiceSpec.js b/platform/commonUI/dialog/test/DialogServiceSpec.js index 2dc109ac44..cfaf21fe76 100644 --- a/platform/commonUI/dialog/test/DialogServiceSpec.js +++ b/platform/commonUI/dialog/test/DialogServiceSpec.js @@ -19,7 +19,6 @@ * this source code distribution or the Licensing information page available * at runtime from the About dialog for additional information. *****************************************************************************/ -/*global define,Promise,describe,it,expect,beforeEach,waitsFor,jasmine*/ /** * MCTIncudeSpec. Created by vwoeltje on 11/6/14. @@ -27,7 +26,6 @@ define( ["../src/DialogService"], function (DialogService) { - "use strict"; describe("The dialog service", function () { var mockOverlayService, diff --git a/platform/commonUI/dialog/test/OverlayServiceSpec.js b/platform/commonUI/dialog/test/OverlayServiceSpec.js index cdeffb9f24..42fec48efd 100644 --- a/platform/commonUI/dialog/test/OverlayServiceSpec.js +++ b/platform/commonUI/dialog/test/OverlayServiceSpec.js @@ -19,7 +19,6 @@ * this source code distribution or the Licensing information page available * at runtime from the About dialog for additional information. *****************************************************************************/ -/*global define,Promise,describe,it,expect,beforeEach,waitsFor,jasmine*/ /** * MCTIncudeSpec. Created by vwoeltje on 11/6/14. @@ -27,7 +26,6 @@ define( ["../src/OverlayService"], function (OverlayService) { - "use strict"; describe("The overlay service", function () { var mockDocument, diff --git a/platform/commonUI/edit/bundle.js b/platform/commonUI/edit/bundle.js index 80a98a6927..3638f882c9 100644 --- a/platform/commonUI/edit/bundle.js +++ b/platform/commonUI/edit/bundle.js @@ -19,7 +19,6 @@ * this source code distribution or the Licensing information page available * at runtime from the About dialog for additional information. *****************************************************************************/ -/*global define*/ define([ "./src/controllers/EditActionController", @@ -66,7 +65,6 @@ define([ topbarEditTemplate, legacyRegistry ) { - "use strict"; legacyRegistry.register("platform/commonUI/edit", { "extensions": { diff --git a/platform/commonUI/edit/src/actions/CancelAction.js b/platform/commonUI/edit/src/actions/CancelAction.js index 6b9cbf9c08..da3fea8046 100644 --- a/platform/commonUI/edit/src/actions/CancelAction.js +++ b/platform/commonUI/edit/src/actions/CancelAction.js @@ -19,11 +19,9 @@ * this source code distribution or the Licensing information page available * at runtime from the About dialog for additional information. *****************************************************************************/ -/*global define*/ define( function () { - 'use strict'; /** * The "Cancel" action; the action triggered by clicking Cancel from diff --git a/platform/commonUI/edit/src/actions/EditAction.js b/platform/commonUI/edit/src/actions/EditAction.js index d771f75dd4..17fd34156c 100644 --- a/platform/commonUI/edit/src/actions/EditAction.js +++ b/platform/commonUI/edit/src/actions/EditAction.js @@ -19,7 +19,6 @@ * this source code distribution or the Licensing information page available * at runtime from the About dialog for additional information. *****************************************************************************/ -/*global define,Promise*/ /** * Module defining EditAction. Created by vwoeltje on 11/14/14. @@ -27,7 +26,6 @@ define( ['../objects/EditableDomainObject'], function (EditableDomainObject) { - "use strict"; // A no-op action to return in the event that the action cannot // be completed. diff --git a/platform/commonUI/edit/src/actions/LinkAction.js b/platform/commonUI/edit/src/actions/LinkAction.js index 95ed9a8082..f12539b1fe 100644 --- a/platform/commonUI/edit/src/actions/LinkAction.js +++ b/platform/commonUI/edit/src/actions/LinkAction.js @@ -19,12 +19,10 @@ * this source code distribution or the Licensing information page available * at runtime from the About dialog for additional information. *****************************************************************************/ -/*global define*/ define( [], function () { - "use strict"; /** diff --git a/platform/commonUI/edit/src/actions/PropertiesAction.js b/platform/commonUI/edit/src/actions/PropertiesAction.js index 1134c23190..7ec48122ca 100644 --- a/platform/commonUI/edit/src/actions/PropertiesAction.js +++ b/platform/commonUI/edit/src/actions/PropertiesAction.js @@ -19,7 +19,6 @@ * this source code distribution or the Licensing information page available * at runtime from the About dialog for additional information. *****************************************************************************/ -/*global define*/ /** * Edit the properties of a domain object. Shows a dialog @@ -29,7 +28,6 @@ define( ['./PropertiesDialog'], function (PropertiesDialog) { - 'use strict'; /** * Implements the "Edit Properties" action, which prompts the user diff --git a/platform/commonUI/edit/src/actions/PropertiesDialog.js b/platform/commonUI/edit/src/actions/PropertiesDialog.js index f461c0b8e1..0508724ac1 100644 --- a/platform/commonUI/edit/src/actions/PropertiesDialog.js +++ b/platform/commonUI/edit/src/actions/PropertiesDialog.js @@ -19,11 +19,9 @@ * this source code distribution or the Licensing information page available * at runtime from the About dialog for additional information. *****************************************************************************/ -/*global define*/ define( function () { - 'use strict'; /** * Construct a new Properties dialog. diff --git a/platform/commonUI/edit/src/actions/RemoveAction.js b/platform/commonUI/edit/src/actions/RemoveAction.js index dd95616289..3174330d03 100644 --- a/platform/commonUI/edit/src/actions/RemoveAction.js +++ b/platform/commonUI/edit/src/actions/RemoveAction.js @@ -19,7 +19,6 @@ * this source code distribution or the Licensing information page available * at runtime from the About dialog for additional information. *****************************************************************************/ -/*global define*/ /** * Module defining RemoveAction. Created by vwoeltje on 11/17/14. @@ -27,7 +26,6 @@ define( [], function () { - "use strict"; /** * Construct an action which will remove the provided object manifestation. diff --git a/platform/commonUI/edit/src/actions/SaveAction.js b/platform/commonUI/edit/src/actions/SaveAction.js index 1415a6ed4b..55755e12cb 100644 --- a/platform/commonUI/edit/src/actions/SaveAction.js +++ b/platform/commonUI/edit/src/actions/SaveAction.js @@ -19,14 +19,12 @@ * this source code distribution or the Licensing information page available * at runtime from the About dialog for additional information. *****************************************************************************/ -/*global define*/ /*jslint es5: true */ define( ['../../../browse/src/creation/CreateWizard'], function (CreateWizard) { - 'use strict'; /** * The "Save" action; the action triggered by clicking Save from diff --git a/platform/commonUI/edit/src/capabilities/EditableActionCapability.js b/platform/commonUI/edit/src/capabilities/EditableActionCapability.js index b5bad72dc0..2e83dee0a0 100644 --- a/platform/commonUI/edit/src/capabilities/EditableActionCapability.js +++ b/platform/commonUI/edit/src/capabilities/EditableActionCapability.js @@ -19,12 +19,10 @@ * this source code distribution or the Licensing information page available * at runtime from the About dialog for additional information. *****************************************************************************/ -/*global define*/ define( function () { - 'use strict'; var DISALLOWED_ACTIONS = ["move", "copy", "link", "window", "follow"]; /** * Editable Action Capability. Overrides the action capability diff --git a/platform/commonUI/edit/src/capabilities/EditableCompositionCapability.js b/platform/commonUI/edit/src/capabilities/EditableCompositionCapability.js index 17dff58c0d..343c6a03a2 100644 --- a/platform/commonUI/edit/src/capabilities/EditableCompositionCapability.js +++ b/platform/commonUI/edit/src/capabilities/EditableCompositionCapability.js @@ -19,13 +19,11 @@ * this source code distribution or the Licensing information page available * at runtime from the About dialog for additional information. *****************************************************************************/ -/*global define*/ define( ['./EditableLookupCapability'], function (EditableLookupCapability) { - 'use strict'; /** * Wrapper for the "composition" capability; diff --git a/platform/commonUI/edit/src/capabilities/EditableContextCapability.js b/platform/commonUI/edit/src/capabilities/EditableContextCapability.js index d0df90afc4..d20971fb04 100644 --- a/platform/commonUI/edit/src/capabilities/EditableContextCapability.js +++ b/platform/commonUI/edit/src/capabilities/EditableContextCapability.js @@ -19,13 +19,11 @@ * this source code distribution or the Licensing information page available * at runtime from the About dialog for additional information. *****************************************************************************/ -/*global define*/ define( ['./EditableLookupCapability'], function (EditableLookupCapability) { - 'use strict'; /** * Wrapper for the "context" capability; diff --git a/platform/commonUI/edit/src/capabilities/EditableInstantiationCapability.js b/platform/commonUI/edit/src/capabilities/EditableInstantiationCapability.js index 6a0392476b..4376a9310e 100644 --- a/platform/commonUI/edit/src/capabilities/EditableInstantiationCapability.js +++ b/platform/commonUI/edit/src/capabilities/EditableInstantiationCapability.js @@ -19,13 +19,11 @@ * this source code distribution or the Licensing information page available * at runtime from the About dialog for additional information. *****************************************************************************/ -/*global define*/ define( ['./EditableLookupCapability'], function (EditableLookupCapability) { - 'use strict'; /** * Wrapper for the "instantiation" capability; diff --git a/platform/commonUI/edit/src/capabilities/EditableLookupCapability.js b/platform/commonUI/edit/src/capabilities/EditableLookupCapability.js index dae2df3d83..a0c8add0c3 100644 --- a/platform/commonUI/edit/src/capabilities/EditableLookupCapability.js +++ b/platform/commonUI/edit/src/capabilities/EditableLookupCapability.js @@ -19,13 +19,11 @@ * this source code distribution or the Licensing information page available * at runtime from the About dialog for additional information. *****************************************************************************/ -/*global define*/ define( [], function () { - 'use strict'; /** * Wrapper for both "context" and "composition" capabilities; diff --git a/platform/commonUI/edit/src/capabilities/EditablePersistenceCapability.js b/platform/commonUI/edit/src/capabilities/EditablePersistenceCapability.js index 92d29f66ad..e6c32e2bf4 100644 --- a/platform/commonUI/edit/src/capabilities/EditablePersistenceCapability.js +++ b/platform/commonUI/edit/src/capabilities/EditablePersistenceCapability.js @@ -19,12 +19,10 @@ * this source code distribution or the Licensing information page available * at runtime from the About dialog for additional information. *****************************************************************************/ -/*global define*/ define( function () { - 'use strict'; /** * Editable Persistence Capability. Overrides the persistence capability diff --git a/platform/commonUI/edit/src/capabilities/EditableRelationshipCapability.js b/platform/commonUI/edit/src/capabilities/EditableRelationshipCapability.js index 3034301502..af8c142338 100644 --- a/platform/commonUI/edit/src/capabilities/EditableRelationshipCapability.js +++ b/platform/commonUI/edit/src/capabilities/EditableRelationshipCapability.js @@ -19,13 +19,11 @@ * this source code distribution or the Licensing information page available * at runtime from the About dialog for additional information. *****************************************************************************/ -/*global define*/ define( ['./EditableLookupCapability'], function (EditableLookupCapability) { - 'use strict'; /** * Wrapper for the "relationship" capability; diff --git a/platform/commonUI/edit/src/capabilities/EditorCapability.js b/platform/commonUI/edit/src/capabilities/EditorCapability.js index b48c1988e6..ff9dfc19ed 100644 --- a/platform/commonUI/edit/src/capabilities/EditorCapability.js +++ b/platform/commonUI/edit/src/capabilities/EditorCapability.js @@ -19,12 +19,10 @@ * this source code distribution or the Licensing information page available * at runtime from the About dialog for additional information. *****************************************************************************/ -/*global define*/ define( [], function () { - 'use strict'; /** diff --git a/platform/commonUI/edit/src/controllers/EditActionController.js b/platform/commonUI/edit/src/controllers/EditActionController.js index 4ea38f9bb5..85a0550182 100644 --- a/platform/commonUI/edit/src/controllers/EditActionController.js +++ b/platform/commonUI/edit/src/controllers/EditActionController.js @@ -19,7 +19,6 @@ * this source code distribution or the Licensing information page available * at runtime from the About dialog for additional information. *****************************************************************************/ -/*global define,Promise*/ /** * Module defining EditActionController. Created by vwoeltje on 11/17/14. @@ -27,7 +26,6 @@ define( [], function () { - "use strict"; var ACTION_CONTEXT = { category: 'conclude-editing' }; diff --git a/platform/commonUI/edit/src/controllers/EditObjectController.js b/platform/commonUI/edit/src/controllers/EditObjectController.js index d6121106ec..2b41f344b5 100644 --- a/platform/commonUI/edit/src/controllers/EditObjectController.js +++ b/platform/commonUI/edit/src/controllers/EditObjectController.js @@ -19,7 +19,6 @@ * this source code distribution or the Licensing information page available * at runtime from the About dialog for additional information. *****************************************************************************/ -/*global define,Promise*/ /** * This bundle implements Edit mode. @@ -28,7 +27,6 @@ define( [], function () { - "use strict"; /** * Controller which is responsible for populating the scope for diff --git a/platform/commonUI/edit/src/controllers/EditPanesController.js b/platform/commonUI/edit/src/controllers/EditPanesController.js index 7dedc251ec..83562c6ffc 100644 --- a/platform/commonUI/edit/src/controllers/EditPanesController.js +++ b/platform/commonUI/edit/src/controllers/EditPanesController.js @@ -19,12 +19,10 @@ * this source code distribution or the Licensing information page available * at runtime from the About dialog for additional information. *****************************************************************************/ -/*global define*/ define( [], function () { - "use strict"; /** * Supports the Library and Elements panes in Edit mode. diff --git a/platform/commonUI/edit/src/controllers/ElementsController.js b/platform/commonUI/edit/src/controllers/ElementsController.js index c62e999fa2..531828544a 100644 --- a/platform/commonUI/edit/src/controllers/ElementsController.js +++ b/platform/commonUI/edit/src/controllers/ElementsController.js @@ -19,12 +19,10 @@ * this source code distribution or the Licensing information page available * at runtime from the About dialog for additional information. *****************************************************************************/ -/*global define,Promise*/ define( [], function () { - "use strict"; /** * The ElementsController prepares the elements view for display diff --git a/platform/commonUI/edit/src/directives/MCTBeforeUnload.js b/platform/commonUI/edit/src/directives/MCTBeforeUnload.js index 3e7501c788..a5dfc852ed 100644 --- a/platform/commonUI/edit/src/directives/MCTBeforeUnload.js +++ b/platform/commonUI/edit/src/directives/MCTBeforeUnload.js @@ -19,12 +19,10 @@ * this source code distribution or the Licensing information page available * at runtime from the About dialog for additional information. *****************************************************************************/ -/*global define*/ define( [], function () { - "use strict"; /** * Defines the `mct-before-unload` directive. The expression bound diff --git a/platform/commonUI/edit/src/objects/EditableDomainObject.js b/platform/commonUI/edit/src/objects/EditableDomainObject.js index 253947181d..1eedcd563b 100644 --- a/platform/commonUI/edit/src/objects/EditableDomainObject.js +++ b/platform/commonUI/edit/src/objects/EditableDomainObject.js @@ -19,7 +19,6 @@ * this source code distribution or the Licensing information page available * at runtime from the About dialog for additional information. *****************************************************************************/ -/*global define*/ /** * Defines EditableDomainObject, which wraps domain objects @@ -51,7 +50,6 @@ define( EditableActionCapability, EditableDomainObjectCache ) { - "use strict"; var capabilityFactories = { persistence: EditablePersistenceCapability, diff --git a/platform/commonUI/edit/src/objects/EditableDomainObjectCache.js b/platform/commonUI/edit/src/objects/EditableDomainObjectCache.js index 32a11604de..bd557f882c 100644 --- a/platform/commonUI/edit/src/objects/EditableDomainObjectCache.js +++ b/platform/commonUI/edit/src/objects/EditableDomainObjectCache.js @@ -19,7 +19,6 @@ * this source code distribution or the Licensing information page available * at runtime from the About dialog for additional information. *****************************************************************************/ -/*global define*/ /* @@ -36,7 +35,6 @@ define( ["./EditableModelCache"], function (EditableModelCache) { - 'use strict'; /** * Construct a new cache for editable domain objects. This can be used diff --git a/platform/commonUI/edit/src/objects/EditableModelCache.js b/platform/commonUI/edit/src/objects/EditableModelCache.js index 30ca3d774a..702cfbe6c7 100644 --- a/platform/commonUI/edit/src/objects/EditableModelCache.js +++ b/platform/commonUI/edit/src/objects/EditableModelCache.js @@ -19,12 +19,10 @@ * this source code distribution or the Licensing information page available * at runtime from the About dialog for additional information. *****************************************************************************/ -/*global define*/ define( [], function () { - "use strict"; /** * An editable model cache stores domain object models that have been diff --git a/platform/commonUI/edit/src/policies/EditActionPolicy.js b/platform/commonUI/edit/src/policies/EditActionPolicy.js index 7f623ce07b..a3a43fa81e 100644 --- a/platform/commonUI/edit/src/policies/EditActionPolicy.js +++ b/platform/commonUI/edit/src/policies/EditActionPolicy.js @@ -19,12 +19,10 @@ * this source code distribution or the Licensing information page available * at runtime from the About dialog for additional information. *****************************************************************************/ -/*global define*/ define( [], function () { - "use strict"; /** * Policy controlling when the `edit` and/or `properties` actions diff --git a/platform/commonUI/edit/src/policies/EditNavigationPolicy.js b/platform/commonUI/edit/src/policies/EditNavigationPolicy.js index 882e64935e..6797ac4eb1 100644 --- a/platform/commonUI/edit/src/policies/EditNavigationPolicy.js +++ b/platform/commonUI/edit/src/policies/EditNavigationPolicy.js @@ -19,12 +19,10 @@ * this source code distribution or the Licensing information page available * at runtime from the About dialog for additional information. *****************************************************************************/ -/*global define*/ define( [], function () { - "use strict"; /** * Policy controlling whether navigation events should proceed diff --git a/platform/commonUI/edit/src/policies/EditableViewPolicy.js b/platform/commonUI/edit/src/policies/EditableViewPolicy.js index 17194064b0..7c9742e2d3 100644 --- a/platform/commonUI/edit/src/policies/EditableViewPolicy.js +++ b/platform/commonUI/edit/src/policies/EditableViewPolicy.js @@ -19,12 +19,10 @@ * this source code distribution or the Licensing information page available * at runtime from the About dialog for additional information. *****************************************************************************/ -/*global define*/ define( [], function () { - "use strict"; /** * Policy controlling which views should be visible in Edit mode. diff --git a/platform/commonUI/edit/src/representers/EditRepresenter.js b/platform/commonUI/edit/src/representers/EditRepresenter.js index 533c8031e0..386285b38f 100644 --- a/platform/commonUI/edit/src/representers/EditRepresenter.js +++ b/platform/commonUI/edit/src/representers/EditRepresenter.js @@ -19,12 +19,10 @@ * this source code distribution or the Licensing information page available * at runtime from the About dialog for additional information. *****************************************************************************/ -/*global define*/ define( [], function () { - "use strict"; /** * The EditRepresenter is responsible for implementing diff --git a/platform/commonUI/edit/src/representers/EditToolbar.js b/platform/commonUI/edit/src/representers/EditToolbar.js index 367eaf1705..aabea1cf4a 100644 --- a/platform/commonUI/edit/src/representers/EditToolbar.js +++ b/platform/commonUI/edit/src/representers/EditToolbar.js @@ -19,11 +19,9 @@ * this source code distribution or the Licensing information page available * at runtime from the About dialog for additional information. *****************************************************************************/ -/*global define*/ define( [], function () { - "use strict"; // Utility functions for reducing truth arrays function and(a, b) { return a && b; } diff --git a/platform/commonUI/edit/src/representers/EditToolbarRepresenter.js b/platform/commonUI/edit/src/representers/EditToolbarRepresenter.js index daf3645b69..0e30920575 100644 --- a/platform/commonUI/edit/src/representers/EditToolbarRepresenter.js +++ b/platform/commonUI/edit/src/representers/EditToolbarRepresenter.js @@ -19,12 +19,10 @@ * this source code distribution or the Licensing information page available * at runtime from the About dialog for additional information. *****************************************************************************/ -/*global define*/ define( ['./EditToolbar', './EditToolbarSelection'], function (EditToolbar, EditToolbarSelection) { - "use strict"; // No operation var NOOP_REPRESENTER = { diff --git a/platform/commonUI/edit/src/representers/EditToolbarSelection.js b/platform/commonUI/edit/src/representers/EditToolbarSelection.js index 318ae935b5..f6cdedeadd 100644 --- a/platform/commonUI/edit/src/representers/EditToolbarSelection.js +++ b/platform/commonUI/edit/src/representers/EditToolbarSelection.js @@ -19,12 +19,10 @@ * this source code distribution or the Licensing information page available * at runtime from the About dialog for additional information. *****************************************************************************/ -/*global define*/ define( [], function () { - "use strict"; /** * Tracks selection state for editable views. Selection is diff --git a/platform/commonUI/edit/test/actions/CancelActionSpec.js b/platform/commonUI/edit/test/actions/CancelActionSpec.js index 4a06ad9649..2131bbf999 100644 --- a/platform/commonUI/edit/test/actions/CancelActionSpec.js +++ b/platform/commonUI/edit/test/actions/CancelActionSpec.js @@ -19,12 +19,10 @@ * this source code distribution or the Licensing information page available * at runtime from the About dialog for additional information. *****************************************************************************/ -/*global define,describe,it,expect,beforeEach,jasmine,xit,xdescribe*/ define( ["../../src/actions/CancelAction"], function (CancelAction) { - "use strict"; //TODO: Disabled for NEM Beta xdescribe("The Cancel action", function () { diff --git a/platform/commonUI/edit/test/actions/EditActionSpec.js b/platform/commonUI/edit/test/actions/EditActionSpec.js index 4858d9cf0a..7ed8b672bd 100644 --- a/platform/commonUI/edit/test/actions/EditActionSpec.js +++ b/platform/commonUI/edit/test/actions/EditActionSpec.js @@ -19,12 +19,10 @@ * this source code distribution or the Licensing information page available * at runtime from the About dialog for additional information. *****************************************************************************/ -/*global define,describe,it,expect,beforeEach,jasmine,xit,xdescribe*/ define( ["../../src/actions/EditAction"], function (EditAction) { - "use strict"; describe("The Edit action", function () { var mockLocation, diff --git a/platform/commonUI/edit/test/actions/LinkActionSpec.js b/platform/commonUI/edit/test/actions/LinkActionSpec.js index 96ea30e2b3..144dd4e395 100644 --- a/platform/commonUI/edit/test/actions/LinkActionSpec.js +++ b/platform/commonUI/edit/test/actions/LinkActionSpec.js @@ -19,12 +19,10 @@ * this source code distribution or the Licensing information page available * at runtime from the About dialog for additional information. *****************************************************************************/ -/*global define,describe,it,expect,beforeEach,jasmine,spyOn*/ define( ["../../src/actions/LinkAction"], function (LinkAction) { - "use strict"; describe("The Link action", function () { var mockQ, diff --git a/platform/commonUI/edit/test/actions/PropertiesActionSpec.js b/platform/commonUI/edit/test/actions/PropertiesActionSpec.js index 1621a34ab6..cad091cff5 100644 --- a/platform/commonUI/edit/test/actions/PropertiesActionSpec.js +++ b/platform/commonUI/edit/test/actions/PropertiesActionSpec.js @@ -19,12 +19,10 @@ * this source code distribution or the Licensing information page available * at runtime from the About dialog for additional information. *****************************************************************************/ -/*global define,describe,it,xit,expect,beforeEach,jasmine*/ define( ['../../src/actions/PropertiesAction'], function (PropertiesAction) { - "use strict"; describe("Properties action", function () { var capabilities, model, object, context, input, dialogService, action; diff --git a/platform/commonUI/edit/test/actions/PropertiesDialogSpec.js b/platform/commonUI/edit/test/actions/PropertiesDialogSpec.js index a9077e8ec6..764d8483c9 100644 --- a/platform/commonUI/edit/test/actions/PropertiesDialogSpec.js +++ b/platform/commonUI/edit/test/actions/PropertiesDialogSpec.js @@ -19,12 +19,10 @@ * this source code distribution or the Licensing information page available * at runtime from the About dialog for additional information. *****************************************************************************/ -/*global define,describe,it,xit,expect,beforeEach*/ define( ["../../src/actions/PropertiesDialog"], function (PropertiesDialog) { - "use strict"; describe("Properties dialog", function () { diff --git a/platform/commonUI/edit/test/actions/RemoveActionSpec.js b/platform/commonUI/edit/test/actions/RemoveActionSpec.js index 116627c87d..f9f36e36a8 100644 --- a/platform/commonUI/edit/test/actions/RemoveActionSpec.js +++ b/platform/commonUI/edit/test/actions/RemoveActionSpec.js @@ -19,12 +19,10 @@ * this source code distribution or the Licensing information page available * at runtime from the About dialog for additional information. *****************************************************************************/ -/*global define,describe,it,expect,beforeEach,jasmine,spyOn*/ define( ["../../src/actions/RemoveAction"], function (RemoveAction) { - "use strict"; describe("The Remove action", function () { var mockQ, diff --git a/platform/commonUI/edit/test/actions/SaveActionSpec.js b/platform/commonUI/edit/test/actions/SaveActionSpec.js index 656d6e1ebc..77b27fa429 100644 --- a/platform/commonUI/edit/test/actions/SaveActionSpec.js +++ b/platform/commonUI/edit/test/actions/SaveActionSpec.js @@ -19,12 +19,10 @@ * this source code distribution or the Licensing information page available * at runtime from the About dialog for additional information. *****************************************************************************/ -/*global define,describe,it,expect,beforeEach,jasmine,xit,xdescribe*/ define( ["../../src/actions/SaveAction"], function (SaveAction) { - "use strict"; describe("The Save action", function () { var mockLocation, diff --git a/platform/commonUI/edit/test/capabilities/EditableCompositionCapabilitySpec.js b/platform/commonUI/edit/test/capabilities/EditableCompositionCapabilitySpec.js index eed6222202..3e4083d2e8 100644 --- a/platform/commonUI/edit/test/capabilities/EditableCompositionCapabilitySpec.js +++ b/platform/commonUI/edit/test/capabilities/EditableCompositionCapabilitySpec.js @@ -19,12 +19,10 @@ * this source code distribution or the Licensing information page available * at runtime from the About dialog for additional information. *****************************************************************************/ -/*global define,describe,it,expect,beforeEach,jasmine*/ define( ["../../src/capabilities/EditableCompositionCapability"], function (EditableCompositionCapability) { - "use strict"; describe("An editable composition capability", function () { var mockContext, diff --git a/platform/commonUI/edit/test/capabilities/EditableContextCapabilitySpec.js b/platform/commonUI/edit/test/capabilities/EditableContextCapabilitySpec.js index 9967ffa076..b18a02e881 100644 --- a/platform/commonUI/edit/test/capabilities/EditableContextCapabilitySpec.js +++ b/platform/commonUI/edit/test/capabilities/EditableContextCapabilitySpec.js @@ -19,12 +19,10 @@ * this source code distribution or the Licensing information page available * at runtime from the About dialog for additional information. *****************************************************************************/ -/*global define,describe,it,expect,beforeEach,jasmine*/ define( ["../../src/capabilities/EditableContextCapability"], function (EditableContextCapability) { - "use strict"; describe("An editable context capability", function () { var mockContext, diff --git a/platform/commonUI/edit/test/capabilities/EditableLookupCapabilitySpec.js b/platform/commonUI/edit/test/capabilities/EditableLookupCapabilitySpec.js index 16bcee88b1..dc178da449 100644 --- a/platform/commonUI/edit/test/capabilities/EditableLookupCapabilitySpec.js +++ b/platform/commonUI/edit/test/capabilities/EditableLookupCapabilitySpec.js @@ -19,12 +19,10 @@ * this source code distribution or the Licensing information page available * at runtime from the About dialog for additional information. *****************************************************************************/ -/*global define,describe,it,expect,beforeEach,jasmine*/ define( ["../../src/capabilities/EditableLookupCapability"], function (EditableLookupCapability) { - "use strict"; describe("An editable lookup capability", function () { var mockContext, diff --git a/platform/commonUI/edit/test/capabilities/EditablePersistenceCapabilitySpec.js b/platform/commonUI/edit/test/capabilities/EditablePersistenceCapabilitySpec.js index 7fa0ac0dd7..4ce4a2f75d 100644 --- a/platform/commonUI/edit/test/capabilities/EditablePersistenceCapabilitySpec.js +++ b/platform/commonUI/edit/test/capabilities/EditablePersistenceCapabilitySpec.js @@ -19,12 +19,10 @@ * this source code distribution or the Licensing information page available * at runtime from the About dialog for additional information. *****************************************************************************/ -/*global define,describe,it,expect,beforeEach,jasmine*/ define( ["../../src/capabilities/EditablePersistenceCapability"], function (EditablePersistenceCapability) { - "use strict"; describe("An editable persistence capability", function () { var mockPersistence, diff --git a/platform/commonUI/edit/test/capabilities/EditableRelationshipCapabilitySpec.js b/platform/commonUI/edit/test/capabilities/EditableRelationshipCapabilitySpec.js index 366818e861..9a6c17d944 100644 --- a/platform/commonUI/edit/test/capabilities/EditableRelationshipCapabilitySpec.js +++ b/platform/commonUI/edit/test/capabilities/EditableRelationshipCapabilitySpec.js @@ -19,12 +19,10 @@ * this source code distribution or the Licensing information page available * at runtime from the About dialog for additional information. *****************************************************************************/ -/*global define,describe,it,expect,beforeEach,jasmine*/ define( ["../../src/capabilities/EditableRelationshipCapability"], function (EditableRelationshipCapability) { - "use strict"; describe("An editable relationship capability", function () { var mockContext, diff --git a/platform/commonUI/edit/test/capabilities/EditorCapabilitySpec.js b/platform/commonUI/edit/test/capabilities/EditorCapabilitySpec.js index 4e16a01170..d18cdcd931 100644 --- a/platform/commonUI/edit/test/capabilities/EditorCapabilitySpec.js +++ b/platform/commonUI/edit/test/capabilities/EditorCapabilitySpec.js @@ -19,12 +19,10 @@ * this source code distribution or the Licensing information page available * at runtime from the About dialog for additional information. *****************************************************************************/ -/*global define,describe,it,expect,beforeEach,waitsFor,runs,jasmine,xit,xdescribe*/ define( ["../../src/capabilities/EditorCapability"], function (EditorCapability) { - "use strict"; describe("The editor capability", function () { var mockPersistence, diff --git a/platform/commonUI/edit/test/controllers/EditActionControllerSpec.js b/platform/commonUI/edit/test/controllers/EditActionControllerSpec.js index 0ac30d6ef5..6478837ce6 100644 --- a/platform/commonUI/edit/test/controllers/EditActionControllerSpec.js +++ b/platform/commonUI/edit/test/controllers/EditActionControllerSpec.js @@ -19,12 +19,10 @@ * this source code distribution or the Licensing information page available * at runtime from the About dialog for additional information. *****************************************************************************/ -/*global define,describe,it,expect,beforeEach,jasmine*/ define( ["../../src/controllers/EditActionController"], function (EditActionController) { - "use strict"; describe("The Edit Action controller", function () { var mockScope, diff --git a/platform/commonUI/edit/test/controllers/EditControllerSpec.js b/platform/commonUI/edit/test/controllers/EditControllerSpec.js index 0ed0ddecc7..a359d6945b 100644 --- a/platform/commonUI/edit/test/controllers/EditControllerSpec.js +++ b/platform/commonUI/edit/test/controllers/EditControllerSpec.js @@ -19,12 +19,10 @@ * this source code distribution or the Licensing information page available * at runtime from the About dialog for additional information. *****************************************************************************/ -/*global define,describe,it,expect,beforeEach,jasmine*/ define( ["../../src/controllers/EditObjectController"], function (EditObjectController) { - "use strict"; describe("The Edit mode controller", function () { var mockScope, diff --git a/platform/commonUI/edit/test/controllers/EditPanesControllerSpec.js b/platform/commonUI/edit/test/controllers/EditPanesControllerSpec.js index fd1d56e67c..d0d6aea413 100644 --- a/platform/commonUI/edit/test/controllers/EditPanesControllerSpec.js +++ b/platform/commonUI/edit/test/controllers/EditPanesControllerSpec.js @@ -19,12 +19,10 @@ * this source code distribution or the Licensing information page available * at runtime from the About dialog for additional information. *****************************************************************************/ -/*global define,describe,it,expect,beforeEach,jasmine*/ define( ["../../src/controllers/EditPanesController"], function (EditPanesController) { - "use strict"; describe("The Edit Panes controller", function () { var mockScope, diff --git a/platform/commonUI/edit/test/directives/MCTBeforeUnloadSpec.js b/platform/commonUI/edit/test/directives/MCTBeforeUnloadSpec.js index 41070d76f5..f025cef20d 100644 --- a/platform/commonUI/edit/test/directives/MCTBeforeUnloadSpec.js +++ b/platform/commonUI/edit/test/directives/MCTBeforeUnloadSpec.js @@ -19,12 +19,10 @@ * this source code distribution or the Licensing information page available * at runtime from the About dialog for additional information. *****************************************************************************/ -/*global define,describe,it,expect,beforeEach,jasmine*/ define( ["../../src/directives/MCTBeforeUnload"], function (MCTBeforeUnload) { - "use strict"; describe("The mct-before-unload directive", function () { var mockWindow, diff --git a/platform/commonUI/edit/test/objects/EditableDomainObjectCacheSpec.js b/platform/commonUI/edit/test/objects/EditableDomainObjectCacheSpec.js index 4eea727e26..127bf6e3e4 100644 --- a/platform/commonUI/edit/test/objects/EditableDomainObjectCacheSpec.js +++ b/platform/commonUI/edit/test/objects/EditableDomainObjectCacheSpec.js @@ -19,12 +19,10 @@ * this source code distribution or the Licensing information page available * at runtime from the About dialog for additional information. *****************************************************************************/ -/*global define,describe,it,expect,beforeEach,jasmine*/ define( ["../../src/objects/EditableDomainObjectCache"], function (EditableDomainObjectCache) { - 'use strict'; describe("Editable domain object cache", function () { diff --git a/platform/commonUI/edit/test/objects/EditableDomainObjectSpec.js b/platform/commonUI/edit/test/objects/EditableDomainObjectSpec.js index f0f241be96..3878575237 100644 --- a/platform/commonUI/edit/test/objects/EditableDomainObjectSpec.js +++ b/platform/commonUI/edit/test/objects/EditableDomainObjectSpec.js @@ -19,12 +19,10 @@ * this source code distribution or the Licensing information page available * at runtime from the About dialog for additional information. *****************************************************************************/ -/*global define,describe,it,expect,beforeEach,jasmine*/ define( ["../../src/objects/EditableDomainObject"], function (EditableDomainObject) { - "use strict"; describe("Editable domain object", function () { diff --git a/platform/commonUI/edit/test/objects/EditableModelCacheSpec.js b/platform/commonUI/edit/test/objects/EditableModelCacheSpec.js index a12432164d..1fe8db0262 100644 --- a/platform/commonUI/edit/test/objects/EditableModelCacheSpec.js +++ b/platform/commonUI/edit/test/objects/EditableModelCacheSpec.js @@ -19,12 +19,10 @@ * this source code distribution or the Licensing information page available * at runtime from the About dialog for additional information. *****************************************************************************/ -/*global define,describe,it,expect,beforeEach,jasmine*/ define( ["../../src/objects/EditableModelCache"], function (EditableModelCache) { - "use strict"; describe("The editable model cache", function () { var mockObject, diff --git a/platform/commonUI/edit/test/policies/EditActionPolicySpec.js b/platform/commonUI/edit/test/policies/EditActionPolicySpec.js index 823c3d2737..b82d5458d0 100644 --- a/platform/commonUI/edit/test/policies/EditActionPolicySpec.js +++ b/platform/commonUI/edit/test/policies/EditActionPolicySpec.js @@ -19,12 +19,10 @@ * this source code distribution or the Licensing information page available * at runtime from the About dialog for additional information. *****************************************************************************/ -/*global define,describe,it,expect,beforeEach,jasmine,xit,xdescribe*/ define( ["../../src/policies/EditActionPolicy"], function (EditActionPolicy) { - "use strict"; describe("The Edit action policy", function () { var editableView, diff --git a/platform/commonUI/edit/test/policies/EditableViewPolicySpec.js b/platform/commonUI/edit/test/policies/EditableViewPolicySpec.js index a4a4c41a6f..6f432fafeb 100644 --- a/platform/commonUI/edit/test/policies/EditableViewPolicySpec.js +++ b/platform/commonUI/edit/test/policies/EditableViewPolicySpec.js @@ -19,12 +19,10 @@ * this source code distribution or the Licensing information page available * at runtime from the About dialog for additional information. *****************************************************************************/ -/*global define,describe,it,expect,beforeEach,jasmine*/ define( ["../../src/policies/EditableViewPolicy"], function (EditableViewPolicy) { - "use strict"; describe("The editable view policy", function () { var testView, diff --git a/platform/commonUI/edit/test/representers/EditRepresenterSpec.js b/platform/commonUI/edit/test/representers/EditRepresenterSpec.js index 3dcaa34627..b4c2f4ce7f 100644 --- a/platform/commonUI/edit/test/representers/EditRepresenterSpec.js +++ b/platform/commonUI/edit/test/representers/EditRepresenterSpec.js @@ -19,12 +19,10 @@ * this source code distribution or the Licensing information page available * at runtime from the About dialog for additional information. *****************************************************************************/ -/*global define,describe,it,expect,beforeEach,jasmine*/ define( ["../../src/representers/EditRepresenter"], function (EditRepresenter) { - "use strict"; describe("The Edit mode representer", function () { var mockQ, diff --git a/platform/commonUI/edit/test/representers/EditToolbarRepresenterSpec.js b/platform/commonUI/edit/test/representers/EditToolbarRepresenterSpec.js index c8b5bb2c91..cc566c71f3 100644 --- a/platform/commonUI/edit/test/representers/EditToolbarRepresenterSpec.js +++ b/platform/commonUI/edit/test/representers/EditToolbarRepresenterSpec.js @@ -19,12 +19,10 @@ * this source code distribution or the Licensing information page available * at runtime from the About dialog for additional information. *****************************************************************************/ -/*global define,describe,it,expect,beforeEach,jasmine*/ define( ["../../src/representers/EditToolbarRepresenter"], function (EditToolbarRepresenter) { - "use strict"; describe("The Edit mode toolbar representer", function () { var mockScope, diff --git a/platform/commonUI/edit/test/representers/EditToolbarSelectionSpec.js b/platform/commonUI/edit/test/representers/EditToolbarSelectionSpec.js index 45cbe92136..fa762631f7 100644 --- a/platform/commonUI/edit/test/representers/EditToolbarSelectionSpec.js +++ b/platform/commonUI/edit/test/representers/EditToolbarSelectionSpec.js @@ -19,12 +19,10 @@ * this source code distribution or the Licensing information page available * at runtime from the About dialog for additional information. *****************************************************************************/ -/*global define,describe,it,expect,beforeEach,jasmine,xit*/ define( ['../../src/representers/EditToolbarSelection'], function (EditToolbarSelection) { - "use strict"; describe("The Edit mode selection manager", function () { var testProxy, diff --git a/platform/commonUI/edit/test/representers/EditToolbarSpec.js b/platform/commonUI/edit/test/representers/EditToolbarSpec.js index fb58015654..9a5488d356 100644 --- a/platform/commonUI/edit/test/representers/EditToolbarSpec.js +++ b/platform/commonUI/edit/test/representers/EditToolbarSpec.js @@ -19,12 +19,10 @@ * this source code distribution or the Licensing information page available * at runtime from the About dialog for additional information. *****************************************************************************/ -/*global define,describe,it,expect,beforeEach,jasmine*/ define( ['../../src/representers/EditToolbar'], function (EditToolbar) { - "use strict"; describe("An Edit mode toolbar", function () { var mockCommit, diff --git a/platform/commonUI/formats/bundle.js b/platform/commonUI/formats/bundle.js index d323d3d47a..99c384f47f 100644 --- a/platform/commonUI/formats/bundle.js +++ b/platform/commonUI/formats/bundle.js @@ -19,7 +19,6 @@ * this source code distribution or the Licensing information page available * at runtime from the About dialog for additional information. *****************************************************************************/ -/*global define*/ define([ "./src/FormatProvider", @@ -30,7 +29,6 @@ define([ UTCTimeFormat, legacyRegistry ) { - "use strict"; legacyRegistry.register("platform/commonUI/formats", { "name": "Time services bundle", diff --git a/platform/commonUI/formats/src/FormatProvider.js b/platform/commonUI/formats/src/FormatProvider.js index e6d38fbcee..4df4a82d3d 100644 --- a/platform/commonUI/formats/src/FormatProvider.js +++ b/platform/commonUI/formats/src/FormatProvider.js @@ -19,14 +19,12 @@ * this source code distribution or the Licensing information page available * at runtime from the About dialog for additional information. *****************************************************************************/ -/*global define*/ define([ ], function ( ) { - "use strict"; /** * An object used to convert between numeric values and text values, diff --git a/platform/commonUI/formats/src/UTCTimeFormat.js b/platform/commonUI/formats/src/UTCTimeFormat.js index b035fed99f..913ffe3200 100644 --- a/platform/commonUI/formats/src/UTCTimeFormat.js +++ b/platform/commonUI/formats/src/UTCTimeFormat.js @@ -19,14 +19,12 @@ * this source code distribution or the Licensing information page available * at runtime from the About dialog for additional information. *****************************************************************************/ -/*global define*/ define([ 'moment' ], function ( moment ) { - "use strict"; var DATE_FORMAT = "YYYY-MM-DD HH:mm:ss", DATE_FORMATS = [ diff --git a/platform/commonUI/formats/test/FormatProviderSpec.js b/platform/commonUI/formats/test/FormatProviderSpec.js index 4f68c106f7..d66f9f8a5d 100644 --- a/platform/commonUI/formats/test/FormatProviderSpec.js +++ b/platform/commonUI/formats/test/FormatProviderSpec.js @@ -19,12 +19,10 @@ * this source code distribution or the Licensing information page available * at runtime from the About dialog for additional information. *****************************************************************************/ -/*global define,Promise,describe,it,expect,beforeEach,waitsFor,jasmine*/ define( ['../src/FormatProvider'], function (FormatProvider) { - 'use strict'; var KEYS = [ 'a', 'b', 'c' ]; diff --git a/platform/commonUI/formats/test/UTCTimeFormatSpec.js b/platform/commonUI/formats/test/UTCTimeFormatSpec.js index d55a8a9507..cd6917b06c 100644 --- a/platform/commonUI/formats/test/UTCTimeFormatSpec.js +++ b/platform/commonUI/formats/test/UTCTimeFormatSpec.js @@ -19,12 +19,10 @@ * this source code distribution or the Licensing information page available * at runtime from the About dialog for additional information. *****************************************************************************/ -/*global define,Promise,describe,it,expect,beforeEach,waitsFor,jasmine*/ define( ['../src/UTCTimeFormat', 'moment'], function (UTCTimeFormat, moment) { - 'use strict'; describe("The UTCTimeFormat", function () { var format; diff --git a/platform/commonUI/general/bundle.js b/platform/commonUI/general/bundle.js index f3d6d98f61..c03fe4cf09 100644 --- a/platform/commonUI/general/bundle.js +++ b/platform/commonUI/general/bundle.js @@ -19,7 +19,6 @@ * this source code distribution or the Licensing information page available * at runtime from the About dialog for additional information. *****************************************************************************/ -/*global define*/ define([ "./src/services/UrlService", @@ -118,7 +117,6 @@ define([ datetimeFieldTemplate, legacyRegistry ) { - "use strict"; legacyRegistry.register("platform/commonUI/general", { "name": "General UI elements", diff --git a/platform/commonUI/general/src/SplashScreenManager.js b/platform/commonUI/general/src/SplashScreenManager.js index 97b866ec45..b0e1d30672 100644 --- a/platform/commonUI/general/src/SplashScreenManager.js +++ b/platform/commonUI/general/src/SplashScreenManager.js @@ -20,14 +20,12 @@ * at runtime from the About dialog for additional information. *****************************************************************************/ -/*global define*/ define([ ], function ( ) { - 'use strict'; function SplashScreenManager($document) { var splash; diff --git a/platform/commonUI/general/src/StyleSheetLoader.js b/platform/commonUI/general/src/StyleSheetLoader.js index 9b64303df1..76f2a4a803 100644 --- a/platform/commonUI/general/src/StyleSheetLoader.js +++ b/platform/commonUI/general/src/StyleSheetLoader.js @@ -19,7 +19,6 @@ * this source code distribution or the Licensing information page available * at runtime from the About dialog for additional information. *****************************************************************************/ -/*global define*/ /** * This bundle provides various general-purpose UI elements, including @@ -29,7 +28,6 @@ define( [], function () { - "use strict"; /** * The StyleSheetLoader adds links to style sheets exposed from diff --git a/platform/commonUI/general/src/UnsupportedBrowserWarning.js b/platform/commonUI/general/src/UnsupportedBrowserWarning.js index f2fa0c3f20..5e37568cfd 100644 --- a/platform/commonUI/general/src/UnsupportedBrowserWarning.js +++ b/platform/commonUI/general/src/UnsupportedBrowserWarning.js @@ -19,7 +19,6 @@ * this source code distribution or the Licensing information page available * at runtime from the About dialog for additional information. *****************************************************************************/ -/*global define*/ /** * This bundle provides various general-purpose UI elements, including @@ -29,7 +28,6 @@ define( [], function () { - "use strict"; var WARNING_TITLE = "Unsupported browser", WARNING_DESCRIPTION = [ diff --git a/platform/commonUI/general/src/controllers/ActionGroupController.js b/platform/commonUI/general/src/controllers/ActionGroupController.js index 0992b5e967..f9704f9c81 100644 --- a/platform/commonUI/general/src/controllers/ActionGroupController.js +++ b/platform/commonUI/general/src/controllers/ActionGroupController.js @@ -19,7 +19,6 @@ * this source code distribution or the Licensing information page available * at runtime from the About dialog for additional information. *****************************************************************************/ -/*global define,Promise*/ /** * Module defining ActionGroupController. Created by vwoeltje on 11/14/14. @@ -27,7 +26,6 @@ define( [], function () { - "use strict"; /** * Controller which keeps an up-to-date list of actions of diff --git a/platform/commonUI/general/src/controllers/BannerController.js b/platform/commonUI/general/src/controllers/BannerController.js index cea7af4fbd..b3f7e23131 100644 --- a/platform/commonUI/general/src/controllers/BannerController.js +++ b/platform/commonUI/general/src/controllers/BannerController.js @@ -19,12 +19,10 @@ * this source code distribution or the Licensing information page available * at runtime from the About dialog for additional information. *****************************************************************************/ -/*global define*/ define( [], function () { - "use strict"; /** * A controller for banner notifications. Banner notifications are a diff --git a/platform/commonUI/general/src/controllers/BottomBarController.js b/platform/commonUI/general/src/controllers/BottomBarController.js index d53d76fce6..a536da1881 100644 --- a/platform/commonUI/general/src/controllers/BottomBarController.js +++ b/platform/commonUI/general/src/controllers/BottomBarController.js @@ -19,12 +19,10 @@ * this source code distribution or the Licensing information page available * at runtime from the About dialog for additional information. *****************************************************************************/ -/*global define*/ define( [], function () { - "use strict"; /** * Controller for the bottombar template. Exposes diff --git a/platform/commonUI/general/src/controllers/ClickAwayController.js b/platform/commonUI/general/src/controllers/ClickAwayController.js index 9c7c6f8091..d8843d5631 100644 --- a/platform/commonUI/general/src/controllers/ClickAwayController.js +++ b/platform/commonUI/general/src/controllers/ClickAwayController.js @@ -19,12 +19,10 @@ * this source code distribution or the Licensing information page available * at runtime from the About dialog for additional information. *****************************************************************************/ -/*global define,Promise*/ define( [], function () { - "use strict"; /** * A ClickAwayController is used to toggle things (such as context diff --git a/platform/commonUI/general/src/controllers/ContextMenuController.js b/platform/commonUI/general/src/controllers/ContextMenuController.js index dece522682..0f81d785bc 100644 --- a/platform/commonUI/general/src/controllers/ContextMenuController.js +++ b/platform/commonUI/general/src/controllers/ContextMenuController.js @@ -19,7 +19,6 @@ * this source code distribution or the Licensing information page available * at runtime from the About dialog for additional information. *****************************************************************************/ -/*global define,Promise*/ /** * Module defining ContextMenuController. Created by vwoeltje on 11/17/14. @@ -27,7 +26,6 @@ define( [], function () { - "use strict"; /** * Controller for the context menu. Maintains an up-to-date diff --git a/platform/commonUI/general/src/controllers/DateTimeFieldController.js b/platform/commonUI/general/src/controllers/DateTimeFieldController.js index ef0827e515..555cb62209 100644 --- a/platform/commonUI/general/src/controllers/DateTimeFieldController.js +++ b/platform/commonUI/general/src/controllers/DateTimeFieldController.js @@ -19,12 +19,10 @@ * this source code distribution or the Licensing information page available * at runtime from the About dialog for additional information. *****************************************************************************/ -/*global define,Promise*/ define( [], function () { - 'use strict'; /** * Controller to support the date-time entry field. diff --git a/platform/commonUI/general/src/controllers/DateTimePickerController.js b/platform/commonUI/general/src/controllers/DateTimePickerController.js index ac07d77553..81708d353e 100644 --- a/platform/commonUI/general/src/controllers/DateTimePickerController.js +++ b/platform/commonUI/general/src/controllers/DateTimePickerController.js @@ -19,12 +19,10 @@ * this source code distribution or the Licensing information page available * at runtime from the About dialog for additional information. *****************************************************************************/ -/*global define,Promise*/ define( [ 'moment' ], function (moment) { - 'use strict'; var TIME_NAMES = { 'hours': "Hour", diff --git a/platform/commonUI/general/src/controllers/GetterSetterController.js b/platform/commonUI/general/src/controllers/GetterSetterController.js index 3d61c00116..90a5474cd3 100644 --- a/platform/commonUI/general/src/controllers/GetterSetterController.js +++ b/platform/commonUI/general/src/controllers/GetterSetterController.js @@ -19,12 +19,10 @@ * this source code distribution or the Licensing information page available * at runtime from the About dialog for additional information. *****************************************************************************/ -/*global define*/ define( [], function () { - "use strict"; /** * This controller acts as an adapter to permit getter-setter diff --git a/platform/commonUI/general/src/controllers/ObjectInspectorController.js b/platform/commonUI/general/src/controllers/ObjectInspectorController.js index 5b04304af0..abdc27c154 100644 --- a/platform/commonUI/general/src/controllers/ObjectInspectorController.js +++ b/platform/commonUI/general/src/controllers/ObjectInspectorController.js @@ -19,7 +19,6 @@ * this source code distribution or the Licensing information page available * at runtime from the About dialog for additional information. *****************************************************************************/ -/*global define,Promise*/ /** * Module defining ObjectInspectorController. Created by shale on 08/21/2015. @@ -27,7 +26,6 @@ define( [], function () { - "use strict"; /** * The ObjectInspectorController gets and formats the data for diff --git a/platform/commonUI/general/src/controllers/SelectorController.js b/platform/commonUI/general/src/controllers/SelectorController.js index 26fe5f4d62..55a79af308 100644 --- a/platform/commonUI/general/src/controllers/SelectorController.js +++ b/platform/commonUI/general/src/controllers/SelectorController.js @@ -19,12 +19,10 @@ * this source code distribution or the Licensing information page available * at runtime from the About dialog for additional information. *****************************************************************************/ -/*global define*/ define( [], function () { - "use strict"; var ROOT_ID = "ROOT"; diff --git a/platform/commonUI/general/src/controllers/TimeRangeController.js b/platform/commonUI/general/src/controllers/TimeRangeController.js index f0e3da46d9..3f1b625d29 100644 --- a/platform/commonUI/general/src/controllers/TimeRangeController.js +++ b/platform/commonUI/general/src/controllers/TimeRangeController.js @@ -19,12 +19,10 @@ * this source code distribution or the Licensing information page available * at runtime from the About dialog for additional information. *****************************************************************************/ -/*global define,Promise*/ define( ['moment'], function (moment) { - "use strict"; var TICK_SPACING_PX = 150; diff --git a/platform/commonUI/general/src/controllers/ToggleController.js b/platform/commonUI/general/src/controllers/ToggleController.js index 9d7d493f15..8d5840f05a 100644 --- a/platform/commonUI/general/src/controllers/ToggleController.js +++ b/platform/commonUI/general/src/controllers/ToggleController.js @@ -19,12 +19,10 @@ * this source code distribution or the Licensing information page available * at runtime from the About dialog for additional information. *****************************************************************************/ -/*global define,Promise*/ define( [], function () { - "use strict"; /** * A ToggleController is used to activate/deactivate things. diff --git a/platform/commonUI/general/src/controllers/TreeNodeController.js b/platform/commonUI/general/src/controllers/TreeNodeController.js index 3efcf82d28..228069a8e9 100644 --- a/platform/commonUI/general/src/controllers/TreeNodeController.js +++ b/platform/commonUI/general/src/controllers/TreeNodeController.js @@ -19,7 +19,6 @@ * this source code distribution or the Licensing information page available * at runtime from the About dialog for additional information. *****************************************************************************/ -/*global define,Promise*/ /** * Module defining TreeNodeController. Created by vwoeltje on 11/10/14. @@ -27,7 +26,6 @@ define( [], function () { - "use strict"; /** * The TreeNodeController supports the tree node representation; diff --git a/platform/commonUI/general/src/controllers/ViewSwitcherController.js b/platform/commonUI/general/src/controllers/ViewSwitcherController.js index a3ab2e7bc4..2dee615011 100644 --- a/platform/commonUI/general/src/controllers/ViewSwitcherController.js +++ b/platform/commonUI/general/src/controllers/ViewSwitcherController.js @@ -19,7 +19,6 @@ * this source code distribution or the Licensing information page available * at runtime from the About dialog for additional information. *****************************************************************************/ -/*global define,Promise*/ /** * Module defining ViewSwitcherController. Created by vwoeltje on 11/7/14. @@ -27,7 +26,6 @@ define( [], function () { - "use strict"; /** * Controller for the view switcher; populates and maintains a list diff --git a/platform/commonUI/general/src/directives/MCTClickElsewhere.js b/platform/commonUI/general/src/directives/MCTClickElsewhere.js index 1bcdbbe6b5..0ffff19713 100644 --- a/platform/commonUI/general/src/directives/MCTClickElsewhere.js +++ b/platform/commonUI/general/src/directives/MCTClickElsewhere.js @@ -19,12 +19,10 @@ * this source code distribution or the Licensing information page available * at runtime from the About dialog for additional information. *****************************************************************************/ -/*global define*/ define( [], function () { - "use strict"; /** * The `mct-click-elsewhere` directive will evaluate its diff --git a/platform/commonUI/general/src/directives/MCTContainer.js b/platform/commonUI/general/src/directives/MCTContainer.js index e35c52f9f6..0c58f6a914 100644 --- a/platform/commonUI/general/src/directives/MCTContainer.js +++ b/platform/commonUI/general/src/directives/MCTContainer.js @@ -19,7 +19,6 @@ * this source code distribution or the Licensing information page available * at runtime from the About dialog for additional information. *****************************************************************************/ -/*global define,Promise*/ /** * Module defining MCTContainer. Created by vwoeltje on 11/17/14. @@ -27,7 +26,6 @@ define( [], function () { - "use strict"; /** * The mct-container is similar to the mct-include directive diff --git a/platform/commonUI/general/src/directives/MCTDrag.js b/platform/commonUI/general/src/directives/MCTDrag.js index 7bccccdf28..ac96357da8 100644 --- a/platform/commonUI/general/src/directives/MCTDrag.js +++ b/platform/commonUI/general/src/directives/MCTDrag.js @@ -19,12 +19,10 @@ * this source code distribution or the Licensing information page available * at runtime from the About dialog for additional information. *****************************************************************************/ -/*global define*/ define( [], function () { - "use strict"; /** * The mct-drag directive allows drag functionality diff --git a/platform/commonUI/general/src/directives/MCTPopup.js b/platform/commonUI/general/src/directives/MCTPopup.js index 254a41d1eb..e96c1c0327 100644 --- a/platform/commonUI/general/src/directives/MCTPopup.js +++ b/platform/commonUI/general/src/directives/MCTPopup.js @@ -19,11 +19,9 @@ * this source code distribution or the Licensing information page available * at runtime from the About dialog for additional information. *****************************************************************************/ -/*global define*/ define( function () { - 'use strict'; var TEMPLATE = "
"; diff --git a/platform/commonUI/general/src/directives/MCTResize.js b/platform/commonUI/general/src/directives/MCTResize.js index f0fd8e0a69..5cf6971c39 100644 --- a/platform/commonUI/general/src/directives/MCTResize.js +++ b/platform/commonUI/general/src/directives/MCTResize.js @@ -19,12 +19,10 @@ * this source code distribution or the Licensing information page available * at runtime from the About dialog for additional information. *****************************************************************************/ -/*global define*/ define( [], function () { - "use strict"; // Default resize interval var DEFAULT_INTERVAL = 100; diff --git a/platform/commonUI/general/src/directives/MCTScroll.js b/platform/commonUI/general/src/directives/MCTScroll.js index 6b9d480c66..fd546e426c 100644 --- a/platform/commonUI/general/src/directives/MCTScroll.js +++ b/platform/commonUI/general/src/directives/MCTScroll.js @@ -19,12 +19,10 @@ * this source code distribution or the Licensing information page available * at runtime from the About dialog for additional information. *****************************************************************************/ -/*global define*/ define( [], function () { - 'use strict'; /** * Implements `mct-scroll-x` and `mct-scroll-y` directives. Listens diff --git a/platform/commonUI/general/src/directives/MCTSplitPane.js b/platform/commonUI/general/src/directives/MCTSplitPane.js index b094ba785f..5f028fdf6b 100644 --- a/platform/commonUI/general/src/directives/MCTSplitPane.js +++ b/platform/commonUI/general/src/directives/MCTSplitPane.js @@ -19,12 +19,10 @@ * this source code distribution or the Licensing information page available * at runtime from the About dialog for additional information. *****************************************************************************/ -/*global define*/ define( [], function () { - 'use strict'; // Pixel width to allocate for the splitter itself var DEFAULT_ANCHOR = 'left', diff --git a/platform/commonUI/general/src/directives/MCTSplitter.js b/platform/commonUI/general/src/directives/MCTSplitter.js index ad8f809c65..b0c5b3357d 100644 --- a/platform/commonUI/general/src/directives/MCTSplitter.js +++ b/platform/commonUI/general/src/directives/MCTSplitter.js @@ -19,12 +19,10 @@ * this source code distribution or the Licensing information page available * at runtime from the About dialog for additional information. *****************************************************************************/ -/*global define*/ define( [], function () { - 'use strict'; // Pixel width to allocate for the splitter itself var SPLITTER_TEMPLATE = "
Date: Fri, 4 Mar 2016 10:46:51 -0800 Subject: [PATCH 010/132] [Build] Add Float32Array to predefs --- .jshintrc | 1 + 1 file changed, 1 insertion(+) diff --git a/.jshintrc b/.jshintrc index b3d3868d70..a0109fbce7 100644 --- a/.jshintrc +++ b/.jshintrc @@ -13,6 +13,7 @@ "predef": [ "define", "Blob", + "Float32Array", "Promise" ], "strict": "implied", From dda06286212b9ef95c3236924409256f508927e2 Mon Sep 17 00:00:00 2001 From: Victor Woeltjen Date: Fri, 4 Mar 2016 10:49:22 -0800 Subject: [PATCH 011/132] [Build] Clarify expressions ...to satisfy JSHint. --- .../src/controllers/drag/TimelineMoveHandle.js | 11 ++++------- 1 file changed, 4 insertions(+), 7 deletions(-) diff --git a/platform/features/timeline/src/controllers/drag/TimelineMoveHandle.js b/platform/features/timeline/src/controllers/drag/TimelineMoveHandle.js index 6d642bf166..a05ce117e5 100644 --- a/platform/features/timeline/src/controllers/drag/TimelineMoveHandle.js +++ b/platform/features/timeline/src/controllers/drag/TimelineMoveHandle.js @@ -117,13 +117,10 @@ define( style: function (zoom) { return { - left: zoom.toPixels(dragHandler.start(id)) + - Constants.HANDLE_WIDTH + - 'px', - width: zoom.toPixels(dragHandler.duration(id)) - - Constants.HANDLE_WIDTH * 2 - + 'px' - //cursor: initialStart === undefined ? 'grab' : 'grabbing' + left: (zoom.toPixels(dragHandler.start(id)) + + Constants.HANDLE_WIDTH) + 'px', + width: (zoom.toPixels(dragHandler.duration(id)) - + Constants.HANDLE_WIDTH * 2) + 'px' }; } }; From 2dabe0d3c426dcf683d23b0582e27bc2188f3b79 Mon Sep 17 00:00:00 2001 From: Victor Woeltjen Date: Fri, 4 Mar 2016 10:51:08 -0800 Subject: [PATCH 012/132] [Build] Add curly braces around if block ...to satisfy JSHint --- .../features/table/src/controllers/TelemetryTableController.js | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/platform/features/table/src/controllers/TelemetryTableController.js b/platform/features/table/src/controllers/TelemetryTableController.js index 747f6cc137..12339cf9e6 100644 --- a/platform/features/table/src/controllers/TelemetryTableController.js +++ b/platform/features/table/src/controllers/TelemetryTableController.js @@ -59,8 +59,9 @@ define( // Subscribe to telemetry when a domain object becomes available this.$scope.$watch('domainObject', function(domainObject){ - if (!domainObject) + if (!domainObject) { return; + } self.subscribe(); self.registerChangeListeners(); From a8f7bc01c32dd1d9f191649c338a96f5b9be5389 Mon Sep 17 00:00:00 2001 From: Victor Woeltjen Date: Fri, 4 Mar 2016 10:53:12 -0800 Subject: [PATCH 013/132] [Build] Redeclare globals --- platform/framework/src/FrameworkLayer.js | 2 ++ platform/framework/src/Main.js | 2 ++ 2 files changed, 4 insertions(+) diff --git a/platform/framework/src/FrameworkLayer.js b/platform/framework/src/FrameworkLayer.js index ba362be67b..1f8910fe15 100644 --- a/platform/framework/src/FrameworkLayer.js +++ b/platform/framework/src/FrameworkLayer.js @@ -20,6 +20,8 @@ * at runtime from the About dialog for additional information. *****************************************************************************/ +/*global window,requirejs*/ + define([ 'require', './Constants', diff --git a/platform/framework/src/Main.js b/platform/framework/src/Main.js index 87b67dd8ca..c468e4dbea 100644 --- a/platform/framework/src/Main.js +++ b/platform/framework/src/Main.js @@ -20,6 +20,8 @@ * at runtime from the About dialog for additional information. *****************************************************************************/ +/*global window,requirejs*/ + /** * Implements the framework layer, which handles the loading of bundles * and the wiring-together of the extensions they expose. From 72ef1347507c7258e77ea4cda6c3d82e86489662 Mon Sep 17 00:00:00 2001 From: Victor Woeltjen Date: Fri, 4 Mar 2016 10:55:30 -0800 Subject: [PATCH 014/132] [Build] Move operators to satisfy JSHint --- platform/features/clock/src/actions/RestartTimerAction.js | 4 ++-- platform/features/clock/src/actions/StartTimerAction.js | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/platform/features/clock/src/actions/RestartTimerAction.js b/platform/features/clock/src/actions/RestartTimerAction.js index 7f359ca721..30b785b332 100644 --- a/platform/features/clock/src/actions/RestartTimerAction.js +++ b/platform/features/clock/src/actions/RestartTimerAction.js @@ -47,8 +47,8 @@ define( RestartTimerAction.appliesTo = function (context) { var model = - (context.domainObject && context.domainObject.getModel()) - || {}; + (context.domainObject && context.domainObject.getModel()) || + {}; // We show this variant for timers which already have // a target time. diff --git a/platform/features/clock/src/actions/StartTimerAction.js b/platform/features/clock/src/actions/StartTimerAction.js index 04a548de2b..25aff8ac2a 100644 --- a/platform/features/clock/src/actions/StartTimerAction.js +++ b/platform/features/clock/src/actions/StartTimerAction.js @@ -47,8 +47,8 @@ define( StartTimerAction.appliesTo = function (context) { var model = - (context.domainObject && context.domainObject.getModel()) - || {}; + (context.domainObject && context.domainObject.getModel()) || + {}; // We show this variant for timers which do not yet have // a target time. From f6898d16c9efabf25319cae2981bd1d8c082fff1 Mon Sep 17 00:00:00 2001 From: Victor Woeltjen Date: Fri, 4 Mar 2016 10:56:51 -0800 Subject: [PATCH 015/132] [Build] Remove obsolete argument ...which incidentally triggers JSHint errors --- platform/commonUI/inspect/src/services/InfoService.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/platform/commonUI/inspect/src/services/InfoService.js b/platform/commonUI/inspect/src/services/InfoService.js index 314ed32dd0..605bf8dfc5 100644 --- a/platform/commonUI/inspect/src/services/InfoService.js +++ b/platform/commonUI/inspect/src/services/InfoService.js @@ -67,7 +67,7 @@ define( // On a phone, bubble takes up more screen real estate, // so position it differently (toward the bottom) - if (this.agentService.isPhone(navigator.userAgent)) { + if (this.agentService.isPhone()) { position = MOBILE_POSITION; options = {}; } From 56a91dfbaf3012bcfd2bc27967a86be6fbd54a3f Mon Sep 17 00:00:00 2001 From: Victor Woeltjen Date: Fri, 4 Mar 2016 10:58:23 -0800 Subject: [PATCH 016/132] [Build] Use not-threequals operator ...to satisfy JSHint --- platform/commonUI/edit/src/representers/EditRepresenter.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/platform/commonUI/edit/src/representers/EditRepresenter.js b/platform/commonUI/edit/src/representers/EditRepresenter.js index 386285b38f..d61d5825ec 100644 --- a/platform/commonUI/edit/src/representers/EditRepresenter.js +++ b/platform/commonUI/edit/src/representers/EditRepresenter.js @@ -131,7 +131,7 @@ define( * object representation accordingly */ this.listenHandle = this.domainObject.getCapability('status').listen(function(statuses){ - if (statuses.indexOf('editing')!=-1){ + if (statuses.indexOf('editing') !== -1){ setEditing(); } else { delete scope.viewObjectTemplate; From c00d77dcb11338c67fe01ee610c7a77ed331fda3 Mon Sep 17 00:00:00 2001 From: Victor Woeltjen Date: Fri, 4 Mar 2016 11:02:57 -0800 Subject: [PATCH 017/132] [Build] Relocate operators ...in multi-line expressions, to satisfy JSHint. --- platform/commonUI/edit/src/policies/EditActionPolicy.js | 6 +++--- .../commonUI/edit/src/policies/EditNavigationPolicy.js | 4 ++-- platform/commonUI/notification/src/NotificationService.js | 8 ++++---- platform/entanglement/src/actions/GoToOriginalAction.js | 4 ++-- .../entanglement/src/actions/SetPrimaryLocationAction.js | 4 ++-- platform/features/plot/src/SubPlot.js | 4 ++-- platform/persistence/queue/src/PersistenceQueueImpl.js | 4 ++-- .../representation/src/gestures/ContextMenuGesture.js | 8 ++++---- 8 files changed, 21 insertions(+), 21 deletions(-) diff --git a/platform/commonUI/edit/src/policies/EditActionPolicy.js b/platform/commonUI/edit/src/policies/EditActionPolicy.js index a3a43fa81e..8c4ffc2641 100644 --- a/platform/commonUI/edit/src/policies/EditActionPolicy.js +++ b/platform/commonUI/edit/src/policies/EditActionPolicy.js @@ -79,9 +79,9 @@ define( */ function isEditing(context) { var domainObject = (context || {}).domainObject; - return domainObject - && domainObject.hasCapability('status') - && domainObject.getCapability('status').get('editing'); + return domainObject && + domainObject.hasCapability('status') && + domainObject.getCapability('status').get('editing'); } EditActionPolicy.prototype.allow = function (action, context) { diff --git a/platform/commonUI/edit/src/policies/EditNavigationPolicy.js b/platform/commonUI/edit/src/policies/EditNavigationPolicy.js index 6797ac4eb1..62c489b35d 100644 --- a/platform/commonUI/edit/src/policies/EditNavigationPolicy.js +++ b/platform/commonUI/edit/src/policies/EditNavigationPolicy.js @@ -45,8 +45,8 @@ define( statusCapability = navigatedObject && navigatedObject.getCapability("status"); - return statusCapability && statusCapability.get('editing') - && editorCapability && editorCapability.dirty(); + return statusCapability && statusCapability.get('editing') && + editorCapability && editorCapability.dirty(); }; /** diff --git a/platform/commonUI/notification/src/NotificationService.js b/platform/commonUI/notification/src/NotificationService.js index 6ee888d57c..7d3ab2c61d 100644 --- a/platform/commonUI/notification/src/NotificationService.js +++ b/platform/commonUI/notification/src/NotificationService.js @@ -388,8 +388,8 @@ define( notifications queued for display, setup a timeout to dismiss the dialog. */ - if (notification && (notification.model.autoDismiss - || this.selectNextNotification())) { + if (notification && (notification.model.autoDismiss || + this.selectNextNotification())) { timeout = notification.model.autoDismiss || this.DEFAULT_AUTO_DISMISS; this.active.timeout = this.$timeout(function () { @@ -416,8 +416,8 @@ define( for (; i< this.notifications.length; i++) { notification = this.notifications[i]; - if (!notification.model.minimized - && notification!== this.active.notification) { + if (!notification.model.minimized && + notification!== this.active.notification) { return notification; } diff --git a/platform/entanglement/src/actions/GoToOriginalAction.js b/platform/entanglement/src/actions/GoToOriginalAction.js index 6a1dbc6343..f68225d3b3 100644 --- a/platform/entanglement/src/actions/GoToOriginalAction.js +++ b/platform/entanglement/src/actions/GoToOriginalAction.js @@ -50,8 +50,8 @@ define( GoToOriginalAction.appliesTo = function (context) { var domainObject = context.domainObject; - return domainObject && domainObject.hasCapability("location") - && domainObject.getCapability("location").isLink(); + return domainObject && domainObject.hasCapability("location") && + domainObject.getCapability("location").isLink(); }; return GoToOriginalAction; diff --git a/platform/entanglement/src/actions/SetPrimaryLocationAction.js b/platform/entanglement/src/actions/SetPrimaryLocationAction.js index d47ef4a28d..6fbdf89cbc 100644 --- a/platform/entanglement/src/actions/SetPrimaryLocationAction.js +++ b/platform/entanglement/src/actions/SetPrimaryLocationAction.js @@ -48,8 +48,8 @@ define( SetPrimaryLocationAction.appliesTo = function (context) { var domainObject = context.domainObject; - return domainObject && domainObject.hasCapability("location") - && (domainObject.getModel().location === undefined); + return domainObject && domainObject.hasCapability("location") && + (domainObject.getModel().location === undefined); }; return SetPrimaryLocationAction; diff --git a/platform/features/plot/src/SubPlot.js b/platform/features/plot/src/SubPlot.js index b2a31cc8ca..d016d4730d 100644 --- a/platform/features/plot/src/SubPlot.js +++ b/platform/features/plot/src/SubPlot.js @@ -68,8 +68,8 @@ define( * @returns {boolean} true if domain data exists for the current pan/zoom level */ SubPlot.prototype.hasDomainData = function() { - return this.panZoomStack - && this.panZoomStack.getDimensions()[0] > 0; + return this.panZoomStack && + this.panZoomStack.getDimensions()[0] > 0; }; // Utility function for filtering out empty strings. diff --git a/platform/persistence/queue/src/PersistenceQueueImpl.js b/platform/persistence/queue/src/PersistenceQueueImpl.js index d344efe2b5..f177800afe 100644 --- a/platform/persistence/queue/src/PersistenceQueueImpl.js +++ b/platform/persistence/queue/src/PersistenceQueueImpl.js @@ -66,8 +66,8 @@ define( // Check if the queue's size has stopped increasing) function quiescent() { - return Object.keys(self.persistences).length - === self.lastObservedSize; + return Object.keys(self.persistences).length === + self.lastObservedSize; } // Persist all queued objects diff --git a/platform/representation/src/gestures/ContextMenuGesture.js b/platform/representation/src/gestures/ContextMenuGesture.js index 36d5aea65e..78abed5347 100644 --- a/platform/representation/src/gestures/ContextMenuGesture.js +++ b/platform/representation/src/gestures/ContextMenuGesture.js @@ -45,10 +45,10 @@ define( parameters = element && element.attr('parameters') && $parse(element.attr('parameters'))(); function suppressMenu() { - return parameters - && parameters.suppressMenuOnEdit - && navigationService.getNavigation() - && navigationService.getNavigation().hasCapability('editor'); + return parameters && + parameters.suppressMenuOnEdit && + navigationService.getNavigation() && + navigationService.getNavigation().hasCapability('editor'); } function showMenu(event) { From 6289fe333bb62f2a01a181a860b592f560f64368 Mon Sep 17 00:00:00 2001 From: Victor Woeltjen Date: Fri, 4 Mar 2016 11:05:08 -0800 Subject: [PATCH 018/132] [Build] Declare screenfull ...and shim such that it can be acquired in the normal AMD way. Avoids use of global variable to satisfy JSHint. --- main.js | 3 +++ platform/commonUI/browse/src/windowing/FullscreenAction.js | 2 +- test-main.js | 3 +++ 3 files changed, 7 insertions(+), 1 deletion(-) diff --git a/main.js b/main.js index 739cf056cd..8f0dfd2f3e 100644 --- a/main.js +++ b/main.js @@ -44,6 +44,9 @@ requirejs.config({ }, "moment-duration-format": { "deps": [ "moment" ] + }, + "screenfull": { + "exports": "screenfull" } } }); diff --git a/platform/commonUI/browse/src/windowing/FullscreenAction.js b/platform/commonUI/browse/src/windowing/FullscreenAction.js index f898dbbe6e..e9fcf9df76 100644 --- a/platform/commonUI/browse/src/windowing/FullscreenAction.js +++ b/platform/commonUI/browse/src/windowing/FullscreenAction.js @@ -25,7 +25,7 @@ */ define( ["screenfull"], - function () { + function (screenfull) { var ENTER_FULLSCREEN = "Enter full screen mode", EXIT_FULLSCREEN = "Exit full screen mode"; diff --git a/test-main.js b/test-main.js index 13f1bf367d..caa306c1b6 100644 --- a/test-main.js +++ b/test-main.js @@ -65,6 +65,9 @@ requirejs.config({ }, "moment-duration-format": { "deps": [ "moment" ] + }, + "screenfull": { + "exports": "screenfull" } }, From f380e43219e38a53f59b579e4d76cc05186413f3 Mon Sep 17 00:00:00 2001 From: Victor Woeltjen Date: Fri, 4 Mar 2016 11:08:20 -0800 Subject: [PATCH 019/132] [Build] Inject window to satisfy JSHint --- platform/persistence/local/bundle.js | 1 + .../persistence/local/src/LocalStoragePersistenceProvider.js | 5 ++--- .../local/test/LocalStoragePersistenceProviderSpec.js | 5 +---- 3 files changed, 4 insertions(+), 7 deletions(-) diff --git a/platform/persistence/local/bundle.js b/platform/persistence/local/bundle.js index 11a546941a..e09e19e4b7 100644 --- a/platform/persistence/local/bundle.js +++ b/platform/persistence/local/bundle.js @@ -38,6 +38,7 @@ define([ "type": "provider", "implementation": LocalStoragePersistenceProvider, "depends": [ + "$window", "$q", "PERSISTENCE_SPACE" ] diff --git a/platform/persistence/local/src/LocalStoragePersistenceProvider.js b/platform/persistence/local/src/LocalStoragePersistenceProvider.js index 2321297a44..a930304074 100644 --- a/platform/persistence/local/src/LocalStoragePersistenceProvider.js +++ b/platform/persistence/local/src/LocalStoragePersistenceProvider.js @@ -20,7 +20,6 @@ * at runtime from the About dialog for additional information. *****************************************************************************/ - define( [], function () { @@ -36,11 +35,11 @@ define( * @param $interval Angular's $interval service * @param {string} space the name of the persistence space being served */ - function LocalStoragePersistenceProvider($q, space) { + function LocalStoragePersistenceProvider($window, $q, space) { this.$q = $q; this.space = space; this.spaces = space ? [space] : []; - this.localStorage = window.localStorage; + this.localStorage = $window.localStorage; } /** diff --git a/platform/persistence/local/test/LocalStoragePersistenceProviderSpec.js b/platform/persistence/local/test/LocalStoragePersistenceProviderSpec.js index f01ece2e49..b6530584d6 100644 --- a/platform/persistence/local/test/LocalStoragePersistenceProviderSpec.js +++ b/platform/persistence/local/test/LocalStoragePersistenceProviderSpec.js @@ -49,14 +49,11 @@ define( mockQ.when.andCallFake(mockPromise); provider = new LocalStoragePersistenceProvider( + { localStorage: testLocalStorage }, mockQ, testSpace, testLocalStorage ); - - // White-boxy: Can't effectively mock window.localStorage, - // so override the provider's local reference to it. - provider.localStorage = testLocalStorage; }); it("reports available spaces", function () { From 6aeb156a5864d81cbafb81a83e9d5aa5b69704de Mon Sep 17 00:00:00 2001 From: Victor Woeltjen Date: Fri, 4 Mar 2016 11:09:41 -0800 Subject: [PATCH 020/132] [Build] Declare global self in worker --- platform/search/src/services/GenericSearchWorker.js | 2 ++ 1 file changed, 2 insertions(+) diff --git a/platform/search/src/services/GenericSearchWorker.js b/platform/search/src/services/GenericSearchWorker.js index bd8ab68ec2..a3cd34c2e2 100644 --- a/platform/search/src/services/GenericSearchWorker.js +++ b/platform/search/src/services/GenericSearchWorker.js @@ -20,6 +20,8 @@ * at runtime from the About dialog for additional information. *****************************************************************************/ +/*global self*/ + /** * Module defining GenericSearchWorker. Created by shale on 07/21/2015. */ From 9526207af876358987d7f0570f2e700418554b83 Mon Sep 17 00:00:00 2001 From: Victor Woeltjen Date: Fri, 4 Mar 2016 11:13:31 -0800 Subject: [PATCH 021/132] [Build] Replace setTimeout with To avoid need to declare global usage to satisfy JSHint --- platform/search/bundle.js | 1 + platform/search/src/services/GenericSearchProvider.js | 10 ++++++---- .../search/test/services/GenericSearchProviderSpec.js | 3 ++- 3 files changed, 9 insertions(+), 5 deletions(-) diff --git a/platform/search/bundle.js b/platform/search/bundle.js index fb5714fab6..74040b84f4 100644 --- a/platform/search/bundle.js +++ b/platform/search/bundle.js @@ -103,6 +103,7 @@ define([ "type": "provider", "implementation": GenericSearchProvider, "depends": [ + "$timeout", "$q", "$log", "modelService", diff --git a/platform/search/src/services/GenericSearchProvider.js b/platform/search/src/services/GenericSearchProvider.js index 7eff7c3b08..caa5dec428 100644 --- a/platform/search/src/services/GenericSearchProvider.js +++ b/platform/search/src/services/GenericSearchProvider.js @@ -41,8 +41,9 @@ define([ * @param {TopicService} topic the topic service. * @param {Array} ROOTS An array of object Ids to begin indexing. */ - function GenericSearchProvider($q, $log, modelService, workerService, topic, ROOTS) { + function GenericSearchProvider($timeout, $q, $log, modelService, workerService, topic, ROOTS) { var provider = this; + this.$timeout = $timeout; this.$q = $q; this.$log = $log; this.modelService = modelService; @@ -188,7 +189,8 @@ define([ */ GenericSearchProvider.prototype.beginIndexRequest = function () { var idToIndex = this.idsToIndex.shift(), - provider = this; + provider = this, + $timeout = this.$timeout; this.pendingRequests += 1; this.modelService @@ -204,10 +206,10 @@ define([ .warn('Failed to index domain object ' + idToIndex); }) .then(function () { - setTimeout(function () { + $timeout(function () { provider.pendingRequests -= 1; provider.keepIndexing(); - }, 0); + }, 0, false); }); }; diff --git a/platform/search/test/services/GenericSearchProviderSpec.js b/platform/search/test/services/GenericSearchProviderSpec.js index da3f43897f..b7c8321add 100644 --- a/platform/search/test/services/GenericSearchProviderSpec.js +++ b/platform/search/test/services/GenericSearchProviderSpec.js @@ -19,7 +19,6 @@ * this source code distribution or the Licensing information page available * at runtime from the About dialog for additional information. *****************************************************************************/ - runs*/ /** * SearchSpec. Created by shale on 07/31/2015. @@ -43,6 +42,7 @@ define([ provider; beforeEach(function () { + $timeout = jasmine.createSpy('$timeout'); $q = jasmine.createSpyObj( '$q', ['defer'] @@ -82,6 +82,7 @@ define([ spyOn(GenericSearchProvider.prototype, 'scheduleForIndexing'); provider = new GenericSearchProvider( + $timeout, $q, $log, modelService, From 19c9fcd3691ea86db583905bfc653c5a75130d44 Mon Sep 17 00:00:00 2001 From: Victor Woeltjen Date: Fri, 4 Mar 2016 11:18:25 -0800 Subject: [PATCH 022/132] [Build] Remove apparent strict violations ...from persistence providers. --- .../couch/src/CouchPersistenceProvider.js | 16 ++++++++-------- .../elastic/src/ElasticPersistenceProvider.js | 11 ++++++----- 2 files changed, 14 insertions(+), 13 deletions(-) diff --git a/platform/persistence/couch/src/CouchPersistenceProvider.js b/platform/persistence/couch/src/CouchPersistenceProvider.js index 6e7a1c6aaf..21579eb5f9 100644 --- a/platform/persistence/couch/src/CouchPersistenceProvider.js +++ b/platform/persistence/couch/src/CouchPersistenceProvider.js @@ -69,24 +69,24 @@ define( // Check the response to a create/update/delete request; // track the rev if it's valid, otherwise return false to // indicate that the request failed. - function checkResponse(response) { + CouchPersistenceProvider.prototype.checkResponse = function (response) { if (response && response.ok) { this.revs[response.id] = response.rev; return response.ok; } else { return false; } - } + }; // Get a domain object model out of CouchDB's response - function getModel(response) { + CouchPersistenceProvider.prototype.getModel = function (response) { if (response && response.model) { this.revs[response[ID]] = response[REV]; return response.model; } else { return undefined; } - } + }; // Issue a request using $http; get back the plain JS object // from the expected JSON response @@ -122,24 +122,24 @@ define( CouchPersistenceProvider.prototype.createObject = function (space, key, value) { return this.put(key, new CouchDocument(key, value)) - .then(bind(checkResponse, this)); + .then(bind(this.checkResponse, this)); }; CouchPersistenceProvider.prototype.readObject = function (space, key) { - return this.get(key).then(bind(getModel, this)); + return this.get(key).then(bind(this.getModel, this)); }; CouchPersistenceProvider.prototype.updateObject = function (space, key, value) { var rev = this.revs[key]; return this.put(key, new CouchDocument(key, value, rev)) - .then(bind(checkResponse, this)); + .then(bind(this.checkResponse, this)); }; CouchPersistenceProvider.prototype.deleteObject = function (space, key, value) { var rev = this.revs[key]; return this.put(key, new CouchDocument(key, value, rev, true)) - .then(bind(checkResponse, this)); + .then(bind(this.checkResponse, this)); }; return CouchPersistenceProvider; diff --git a/platform/persistence/elastic/src/ElasticPersistenceProvider.js b/platform/persistence/elastic/src/ElasticPersistenceProvider.js index 75208c9aac..8ffb5d0232 100644 --- a/platform/persistence/elastic/src/ElasticPersistenceProvider.js +++ b/platform/persistence/elastic/src/ElasticPersistenceProvider.js @@ -108,14 +108,14 @@ define( }; // Get a domain object model out of ElasticSearch's response - function getModel(response) { + ElasticPersistenceProvider.prototype.getModel = function (response) { if (response && response[SRC]) { this.revs[response[ID]] = response[REV]; return response[SRC]; } else { return undefined; } - } + }; // Check the response to a create/update/delete request; // track the rev if it's valid, otherwise return false to @@ -145,15 +145,16 @@ define( }; ElasticPersistenceProvider.prototype.readObject = function (space, key) { - return this.get(key).then(bind(getModel, this)); + return this.get(key).then(bind(this.getModel, this)); }; ElasticPersistenceProvider.prototype.updateObject = function (space, key, value) { + var self = this; function checkUpdate(response) { - return this.checkResponse(response, key); + return self.checkResponse(response, key); } return this.put(key, value, { version: this.revs[key] }) - .then(bind(checkUpdate, this)); + .then(checkUpdate); }; ElasticPersistenceProvider.prototype.deleteObject = function (space, key, value) { From bf232d05933e9a24d3be42b72351a8c3ec2d0bf6 Mon Sep 17 00:00:00 2001 From: Victor Woeltjen Date: Fri, 4 Mar 2016 11:24:14 -0800 Subject: [PATCH 023/132] [Build] Ignore apparent strict violation ...in CustomRegistrars. --- platform/framework/src/register/CustomRegistrars.js | 1 + 1 file changed, 1 insertion(+) diff --git a/platform/framework/src/register/CustomRegistrars.js b/platform/framework/src/register/CustomRegistrars.js index d0ce3cccc3..95ce291ad1 100644 --- a/platform/framework/src/register/CustomRegistrars.js +++ b/platform/framework/src/register/CustomRegistrars.js @@ -26,6 +26,7 @@ define( ['../Constants', './ServiceCompositor'], function (Constants, ServiceCompositor) { + /*jshint validthis:true */ /** * Handles registration of a few specific extension types that are From a1a7b2b8ce9b6c512842cbc17ceca6d2273c8849 Mon Sep 17 00:00:00 2001 From: Victor Woeltjen Date: Fri, 4 Mar 2016 11:41:48 -0800 Subject: [PATCH 024/132] [Build] Remove unused variables ...to satisfy JSHint --- platform/commonUI/browse/src/BrowseController.js | 6 ++---- platform/commonUI/browse/src/creation/CreationService.js | 4 +--- platform/commonUI/browse/src/windowing/NewTabAction.js | 2 -- platform/commonUI/edit/src/actions/SaveAction.js | 3 +-- .../edit/src/capabilities/EditableActionCapability.js | 5 +---- .../edit/src/objects/EditableDomainObjectCache.js | 3 +-- .../commonUI/edit/src/representers/EditRepresenter.js | 4 ++-- .../general/src/controllers/TimeRangeController.js | 8 ++++---- .../general/src/controllers/TreeNodeController.js | 4 +--- platform/commonUI/general/src/directives/MCTSplitPane.js | 9 +-------- platform/commonUI/general/src/directives/MCTSplitter.js | 9 +-------- platform/commonUI/general/src/services/PopupService.js | 3 +-- .../commonUI/notification/src/NotificationService.js | 3 +-- platform/containment/src/CompositionModelPolicy.js | 2 +- .../core/src/capabilities/InstantiationCapability.js | 4 ++-- platform/core/src/objects/DomainObjectProvider.js | 4 ++-- platform/entanglement/src/policies/CrossSpacePolicy.js | 3 +-- .../features/clock/src/controllers/TimerController.js | 3 +-- platform/features/clock/src/services/TickerService.js | 4 ++-- platform/features/conductor/src/ConductorRepresenter.js | 2 +- .../conductor/src/ConductorTelemetryDecorator.js | 3 --- .../imagery/src/directives/MCTBackgroundImage.js | 4 ++-- platform/features/layout/src/FixedController.js | 4 ++-- platform/features/layout/src/elements/TelemetryProxy.js | 4 ++-- platform/features/rtevents/src/RTEventListController.js | 6 +----- .../table/src/controllers/TelemetryTableController.js | 2 +- platform/features/table/src/directives/MCTTable.js | 4 ++-- .../timeline/src/capabilities/ActivityUtilization.js | 4 ++-- .../timeline/src/capabilities/CumulativeGraph.js | 1 - .../timeline/src/capabilities/TimelineTimespan.js | 4 ++-- .../timeline/src/controllers/TimelineZoomController.js | 8 ++------ .../timeline/src/controllers/graph/TimelineGraph.js | 2 -- .../features/timeline/src/directives/MCTSwimlaneDrop.js | 1 - platform/forms/src/controllers/ColorController.js | 2 +- platform/persistence/couch/src/CouchIndicator.js | 2 +- .../persistence/couch/src/CouchPersistenceProvider.js | 2 +- .../elastic/src/ElasticPersistenceProvider.js | 2 +- .../persistence/elastic/src/ElasticSearchProvider.js | 2 +- .../local/src/LocalStoragePersistenceProvider.js | 2 +- platform/representation/src/MCTRepresentation.js | 5 ++--- platform/representation/src/TemplatePrefetcher.js | 2 +- .../representation/src/gestures/ContextMenuGesture.js | 2 +- platform/representation/src/gestures/DropGesture.js | 9 +-------- platform/telemetry/src/TelemetryFormatter.js | 2 +- 44 files changed, 55 insertions(+), 109 deletions(-) diff --git a/platform/commonUI/browse/src/BrowseController.js b/platform/commonUI/browse/src/BrowseController.js index 2c07ee7b50..e5d0fcf2b9 100644 --- a/platform/commonUI/browse/src/BrowseController.js +++ b/platform/commonUI/browse/src/BrowseController.js @@ -25,10 +25,8 @@ * @namespace platform/commonUI/browse */ define( - [ - '../../../representation/src/gestures/GestureConstants' - ], - function (GestureConstants) { + [], + function () { var ROOT_ID = "ROOT"; diff --git a/platform/commonUI/browse/src/creation/CreationService.js b/platform/commonUI/browse/src/creation/CreationService.js index ca5389e162..6048d15378 100644 --- a/platform/commonUI/browse/src/creation/CreationService.js +++ b/platform/commonUI/browse/src/creation/CreationService.js @@ -28,9 +28,7 @@ define( function () { var NON_PERSISTENT_WARNING = - "Tried to create an object in non-persistent container.", - NO_COMPOSITION_WARNING = - "Could not add to composition; no composition in "; + "Tried to create an object in non-persistent container."; /** * The creation service is responsible for instantiating and diff --git a/platform/commonUI/browse/src/windowing/NewTabAction.js b/platform/commonUI/browse/src/windowing/NewTabAction.js index 83422d5096..86c1dfdd94 100644 --- a/platform/commonUI/browse/src/windowing/NewTabAction.js +++ b/platform/commonUI/browse/src/windowing/NewTabAction.js @@ -26,8 +26,6 @@ define( [], function () { - var ROOT_ID = "ROOT", - DEFAULT_PATH = "/mine"; /** * The new tab action allows a domain object to be opened * into a new browser tab. diff --git a/platform/commonUI/edit/src/actions/SaveAction.js b/platform/commonUI/edit/src/actions/SaveAction.js index 55755e12cb..bdc3225258 100644 --- a/platform/commonUI/edit/src/actions/SaveAction.js +++ b/platform/commonUI/edit/src/actions/SaveAction.js @@ -79,8 +79,7 @@ define( } function doWizardSave(parent) { - var context = domainObject.getCapability("context"), - wizard = new CreateWizard( + var wizard = new CreateWizard( domainObject, parent, self.policyService diff --git a/platform/commonUI/edit/src/capabilities/EditableActionCapability.js b/platform/commonUI/edit/src/capabilities/EditableActionCapability.js index 2e83dee0a0..bdfa4d3f59 100644 --- a/platform/commonUI/edit/src/capabilities/EditableActionCapability.js +++ b/platform/commonUI/edit/src/capabilities/EditableActionCapability.js @@ -37,10 +37,7 @@ define( * @implements {PersistenceCapability} */ function EditableActionCapability( - actionCapability, - editableObject, - domainObject, - cache + actionCapability ) { var action = Object.create(actionCapability); diff --git a/platform/commonUI/edit/src/objects/EditableDomainObjectCache.js b/platform/commonUI/edit/src/objects/EditableDomainObjectCache.js index bd557f882c..774e562e61 100644 --- a/platform/commonUI/edit/src/objects/EditableDomainObjectCache.js +++ b/platform/commonUI/edit/src/objects/EditableDomainObjectCache.js @@ -68,8 +68,7 @@ define( EditableDomainObjectCache.prototype.getEditableObject = function (domainObject) { var type = domainObject.getCapability('type'), EditableDomainObject = this.EditableDomainObject, - editableObject, - statusListener; + editableObject; // Track the top-level domain object; this will have // some special behavior for its context capability. diff --git a/platform/commonUI/edit/src/representers/EditRepresenter.js b/platform/commonUI/edit/src/representers/EditRepresenter.js index d61d5825ec..b48bb2f50a 100644 --- a/platform/commonUI/edit/src/representers/EditRepresenter.js +++ b/platform/commonUI/edit/src/representers/EditRepresenter.js @@ -109,8 +109,8 @@ define( // Handle a specific representation of a specific domain object EditRepresenter.prototype.represent = function represent(representation, representedObject) { - var scope = this.scope, - self = this; + var scope = this.scope; + // Track the key, to know which view configuration to save to. this.key = (representation || {}).key; // Track the represented object diff --git a/platform/commonUI/general/src/controllers/TimeRangeController.js b/platform/commonUI/general/src/controllers/TimeRangeController.js index 3f1b625d29..7f6732b98a 100644 --- a/platform/commonUI/general/src/controllers/TimeRangeController.js +++ b/platform/commonUI/general/src/controllers/TimeRangeController.js @@ -21,8 +21,8 @@ *****************************************************************************/ define( - ['moment'], - function (moment) { + [], + function () { var TICK_SPACING_PX = 150; @@ -180,7 +180,7 @@ define( }; } - function updateOuterStart(t) { + function updateOuterStart() { var ngModel = $scope.ngModel; ngModel.inner.start = @@ -195,7 +195,7 @@ define( updateTicks(); } - function updateOuterEnd(t) { + function updateOuterEnd() { var ngModel = $scope.ngModel; ngModel.inner.end = diff --git a/platform/commonUI/general/src/controllers/TreeNodeController.js b/platform/commonUI/general/src/controllers/TreeNodeController.js index 228069a8e9..52b0e2e5a9 100644 --- a/platform/commonUI/general/src/controllers/TreeNodeController.js +++ b/platform/commonUI/general/src/controllers/TreeNodeController.js @@ -60,9 +60,7 @@ define( */ function TreeNodeController($scope, $timeout) { var self = this, - selectedObject = ($scope.ngModel || {}).selectedObject, - isSelected = false, - hasBeenExpanded = false; + selectedObject = ($scope.ngModel || {}).selectedObject; // Look up the id for a domain object. A convenience // for mapping; additionally does some undefined-checking. diff --git a/platform/commonUI/general/src/directives/MCTSplitPane.js b/platform/commonUI/general/src/directives/MCTSplitPane.js index 5f028fdf6b..243481f0db 100644 --- a/platform/commonUI/general/src/directives/MCTSplitPane.js +++ b/platform/commonUI/general/src/directives/MCTSplitPane.js @@ -94,13 +94,6 @@ define( * @constructor */ function MCTSplitPane($parse, $log, $interval) { - var anchors = { - left: true, - right: true, - top: true, - bottom: true - }; - function controller($scope, $element, $attrs) { var anchorKey = $attrs.anchor || DEFAULT_ANCHOR, anchor, @@ -162,7 +155,7 @@ define( // Getter-setter for the pixel offset of the splitter, // relative to the current edge. function getSetPosition(value) { - var min, max, prior = position; + var prior = position; if (typeof value === 'number') { position = value; enforceExtrema(); diff --git a/platform/commonUI/general/src/directives/MCTSplitter.js b/platform/commonUI/general/src/directives/MCTSplitter.js index b0c5b3357d..0f8c77da96 100644 --- a/platform/commonUI/general/src/directives/MCTSplitter.js +++ b/platform/commonUI/general/src/directives/MCTSplitter.js @@ -28,13 +28,7 @@ define( var SPLITTER_TEMPLATE = "
", - OFFSETS_BY_EDGE = { - left: "offsetLeft", - right: "offsetRight", - top: "offsetTop", - bottom: "offsetBottom" - }; + "mct-drag-up=\"splitter.endMove()\">
"; /** * Implements `mct-splitter` directive. @@ -50,7 +44,6 @@ define( scope.splitter = { // Begin moving this splitter startMove: function () { - var splitter = element[0]; initialPosition = mctSplitPane.position(); mctSplitPane.toggleClass('resizing'); }, diff --git a/platform/commonUI/general/src/services/PopupService.js b/platform/commonUI/general/src/services/PopupService.js index 62d7a340e7..b869be6d76 100644 --- a/platform/commonUI/general/src/services/PopupService.js +++ b/platform/commonUI/general/src/services/PopupService.js @@ -81,8 +81,7 @@ define( winDim = [ $window.innerWidth, $window.innerHeight ], styles = { position: 'absolute' }, margin, - offset, - bubble; + offset; function adjustNegatives(value, index) { return value < 0 ? (value + winDim[index]) : value; diff --git a/platform/commonUI/notification/src/NotificationService.js b/platform/commonUI/notification/src/NotificationService.js index 7d3ab2c61d..868ccf6f08 100644 --- a/platform/commonUI/notification/src/NotificationService.js +++ b/platform/commonUI/notification/src/NotificationService.js @@ -379,9 +379,8 @@ define( */ NotificationService.prototype.setActiveNotification = function (notification) { + var timeout; - var self = this, - timeout; this.active.notification = notification; /* If autoDismiss has been specified, OR there are other diff --git a/platform/containment/src/CompositionModelPolicy.js b/platform/containment/src/CompositionModelPolicy.js index 3c8144a08e..be51e0c040 100644 --- a/platform/containment/src/CompositionModelPolicy.js +++ b/platform/containment/src/CompositionModelPolicy.js @@ -13,7 +13,7 @@ define( function CompositionModelPolicy() { } - CompositionModelPolicy.prototype.allow = function (candidate, context) { + CompositionModelPolicy.prototype.allow = function (candidate) { return Array.isArray( (candidate.getInitialModel() || {}).composition ); diff --git a/platform/core/src/capabilities/InstantiationCapability.js b/platform/core/src/capabilities/InstantiationCapability.js index 0b92c2bc68..e1de97f624 100644 --- a/platform/core/src/capabilities/InstantiationCapability.js +++ b/platform/core/src/capabilities/InstantiationCapability.js @@ -21,8 +21,8 @@ *****************************************************************************/ define( - ['../objects/DomainObjectImpl'], - function (DomainObjectImpl) { + [], + function () { /** * Implements the `instantiation` capability. This allows new domain diff --git a/platform/core/src/objects/DomainObjectProvider.js b/platform/core/src/objects/DomainObjectProvider.js index b2bbd8f84c..496d29d117 100644 --- a/platform/core/src/objects/DomainObjectProvider.js +++ b/platform/core/src/objects/DomainObjectProvider.js @@ -61,7 +61,7 @@ define( * @memberof platform/core * @constructor */ - function DomainObjectProvider(modelService, instantiate, $q) { + function DomainObjectProvider(modelService, instantiate) { this.modelService = modelService; this.instantiate = instantiate; } @@ -75,7 +75,7 @@ define( // from this service. function assembleResult(models) { var result = {}; - ids.forEach(function (id, index) { + ids.forEach(function (id) { if (models[id]) { // Create the domain object result[id] = instantiate(models[id], id); diff --git a/platform/entanglement/src/policies/CrossSpacePolicy.js b/platform/entanglement/src/policies/CrossSpacePolicy.js index 42f4c80f7f..29aab5a484 100644 --- a/platform/entanglement/src/policies/CrossSpacePolicy.js +++ b/platform/entanglement/src/policies/CrossSpacePolicy.js @@ -48,8 +48,7 @@ define( function isCrossSpace(context) { var domainObject = context.domainObject, - selectedObject = context.selectedObject, - spaces = [ domainObject, selectedObject ].map(lookupSpace); + selectedObject = context.selectedObject; return selectedObject !== undefined && domainObject !== undefined && lookupSpace(domainObject) !== lookupSpace(selectedObject); diff --git a/platform/features/clock/src/controllers/TimerController.js b/platform/features/clock/src/controllers/TimerController.js index ab42b065c1..d1d31bfb80 100644 --- a/platform/features/clock/src/controllers/TimerController.js +++ b/platform/features/clock/src/controllers/TimerController.js @@ -38,8 +38,7 @@ define( * time (typically wrapping `Date.now`) */ function TimerController($scope, $window, now) { - var timerObject, - formatter, + var formatter, active = true, relativeTimestamp, lastTimestamp, diff --git a/platform/features/clock/src/services/TickerService.js b/platform/features/clock/src/services/TickerService.js index 4f8661fca4..07e0a5886b 100644 --- a/platform/features/clock/src/services/TickerService.js +++ b/platform/features/clock/src/services/TickerService.js @@ -21,8 +21,8 @@ *****************************************************************************/ define( - ['moment'], - function (moment) { + [], + function () { /** * Calls functions every second, as close to the actual second diff --git a/platform/features/conductor/src/ConductorRepresenter.js b/platform/features/conductor/src/ConductorRepresenter.js index 720372b316..08a5968800 100644 --- a/platform/features/conductor/src/ConductorRepresenter.js +++ b/platform/features/conductor/src/ConductorRepresenter.js @@ -144,7 +144,7 @@ define( }; // Handle a specific representation of a specific domain object - ConductorRepresenter.prototype.represent = function represent(representation, representedObject) { + ConductorRepresenter.prototype.represent = function represent(representation) { this.destroy(); if (this.views.indexOf(representation) !== -1 && !GLOBAL_SHOWING) { diff --git a/platform/features/conductor/src/ConductorTelemetryDecorator.js b/platform/features/conductor/src/ConductorTelemetryDecorator.js index 953056c25a..67ec29a17b 100644 --- a/platform/features/conductor/src/ConductorTelemetryDecorator.js +++ b/platform/features/conductor/src/ConductorTelemetryDecorator.js @@ -57,14 +57,11 @@ define( }; ConductorTelemetryDecorator.prototype.requestTelemetry = function (requests) { - var self = this; return this.telemetryService .requestTelemetry(this.amendRequests(requests)); }; ConductorTelemetryDecorator.prototype.subscribe = function (callback, requests) { - var self = this; - return this.telemetryService .subscribe(callback, this.amendRequests(requests)); }; diff --git a/platform/features/imagery/src/directives/MCTBackgroundImage.js b/platform/features/imagery/src/directives/MCTBackgroundImage.js index f550b5f93b..ab2eb7b169 100644 --- a/platform/features/imagery/src/directives/MCTBackgroundImage.js +++ b/platform/features/imagery/src/directives/MCTBackgroundImage.js @@ -36,7 +36,7 @@ define( * @memberof platform/features/imagery */ function MCTBackgroundImage($document) { - function link(scope, element, attrs) { + function link(scope, element) { // General strategy here: // - Keep count of how many images have been requested; this // counter will be used as an internal identifier or sorts @@ -49,7 +49,7 @@ define( // in which images are actually loaded may be different, so // some strategy like this is necessary to ensure that images // do not display out-of-order. - var div, requested = 0, loaded = 0; + var requested = 0, loaded = 0; function nextImage(url) { var myCounter = requested, diff --git a/platform/features/layout/src/FixedController.js b/platform/features/layout/src/FixedController.js index b2d5e3c934..8a3bfd9d7e 100644 --- a/platform/features/layout/src/FixedController.js +++ b/platform/features/layout/src/FixedController.js @@ -36,7 +36,7 @@ define( * @constructor * @param {Scope} $scope the controller's Angular scope */ - function FixedController($scope, $q, dialogService, telemetryHandler, telemetryFormatter, throttle) { + function FixedController($scope, $q, dialogService, telemetryHandler, telemetryFormatter) { var self = this, handle, names = {}, // Cache names by ID @@ -230,7 +230,7 @@ define( } // Handle changes in the object's composition - function updateComposition(ids) { + function updateComposition() { // Populate panel positions // TODO: Ensure defaults here // Resubscribe - objects in view have changed diff --git a/platform/features/layout/src/elements/TelemetryProxy.js b/platform/features/layout/src/elements/TelemetryProxy.js index f03bb6cbb6..5537d3b525 100644 --- a/platform/features/layout/src/elements/TelemetryProxy.js +++ b/platform/features/layout/src/elements/TelemetryProxy.js @@ -21,8 +21,8 @@ *****************************************************************************/ define( - ['./TextProxy', './AccessorMutator'], - function (TextProxy, AccessorMutator) { + ['./TextProxy'], + function (TextProxy) { // Method names to expose from this proxy var HIDE = 'hideTitle', SHOW = 'showTitle'; diff --git a/platform/features/rtevents/src/RTEventListController.js b/platform/features/rtevents/src/RTEventListController.js index 9beaffdec9..1d32a346b6 100644 --- a/platform/features/rtevents/src/RTEventListController.js +++ b/platform/features/rtevents/src/RTEventListController.js @@ -58,11 +58,7 @@ define( lastIds.some(mismatch); } - function setupColumns(telemetryObjects) { - var id = $scope.domainObject && $scope.domainObject.getId(), - firstId = - telemetryObjects[0] && telemetryObjects[0].getId(); - + function setupColumns() { columns = []; columns.push(new DomainColumn(telemetryFormatter)); diff --git a/platform/features/table/src/controllers/TelemetryTableController.js b/platform/features/table/src/controllers/TelemetryTableController.js index 12339cf9e6..f7fcdec74a 100644 --- a/platform/features/table/src/controllers/TelemetryTableController.js +++ b/platform/features/table/src/controllers/TelemetryTableController.js @@ -143,7 +143,7 @@ define( self = this; if (handle) { - handle.promiseTelemetryObjects().then(function (objects) { + handle.promiseTelemetryObjects().then(function () { table.buildColumns(handle.getMetadata()); self.filterColumns(); diff --git a/platform/features/table/src/directives/MCTTable.js b/platform/features/table/src/directives/MCTTable.js index 8a8b9588c0..c7feb6bc35 100644 --- a/platform/features/table/src/directives/MCTTable.js +++ b/platform/features/table/src/directives/MCTTable.js @@ -3,7 +3,7 @@ define( ["../controllers/MCTTableController"], function (MCTTableController) { - function MCTTable($timeout) { + function MCTTable() { return { restrict: "E", templateUrl: "platform/features/table/res/templates/mct-data-table.html", @@ -13,7 +13,7 @@ define( rows: "=", enableFilter: "=?", enableSort: "=?" - }, + } }; } diff --git a/platform/features/timeline/src/capabilities/ActivityUtilization.js b/platform/features/timeline/src/capabilities/ActivityUtilization.js index b64d102e7c..9034d09939 100644 --- a/platform/features/timeline/src/capabilities/ActivityUtilization.js +++ b/platform/features/timeline/src/capabilities/ActivityUtilization.js @@ -35,10 +35,10 @@ define( getPointCount: function () { return 0; }, - getDomainValue: function (index) { + getDomainValue: function () { return 0; }, - getRangeValue: function (index) { + getRangeValue: function () { return 0; } }; diff --git a/platform/features/timeline/src/capabilities/CumulativeGraph.js b/platform/features/timeline/src/capabilities/CumulativeGraph.js index 2908e0c77c..a9cf5c7cad 100644 --- a/platform/features/timeline/src/capabilities/CumulativeGraph.js +++ b/platform/features/timeline/src/capabilities/CumulativeGraph.js @@ -55,7 +55,6 @@ define( function initializeValues() { var values = [], slope = 0, - previous = 0, i; // Add a point (or points, if needed) reaching to the provided diff --git a/platform/features/timeline/src/capabilities/TimelineTimespan.js b/platform/features/timeline/src/capabilities/TimelineTimespan.js index 246c60e075..ac07ef7071 100644 --- a/platform/features/timeline/src/capabilities/TimelineTimespan.js +++ b/platform/features/timeline/src/capabilities/TimelineTimespan.js @@ -63,12 +63,12 @@ define( } // Set the duration associated with this object - function setDuration(value) { + function setDuration() { // No-op; duration is implicit } // Set the end time associated with this object - function setEnd(value) { + function setEnd() { // No-op; end time is implicit } diff --git a/platform/features/timeline/src/controllers/TimelineZoomController.js b/platform/features/timeline/src/controllers/TimelineZoomController.js index 4581195d6f..1488d44aeb 100644 --- a/platform/features/timeline/src/controllers/TimelineZoomController.js +++ b/platform/features/timeline/src/controllers/TimelineZoomController.js @@ -20,11 +20,8 @@ * at runtime from the About dialog for additional information. *****************************************************************************/ define( - ['../TimelineFormatter'], - function (TimelineFormatter) { - - - var FORMATTER = new TimelineFormatter(); + [], + function () { /** * Controls the pan-zoom state of a timeline view. @@ -113,7 +110,6 @@ define( * @returns {number} duration, in milliseconds */ duration: function (value) { - var prior = duration; if (arguments.length > 0) { duration = roundDuration(value); } diff --git a/platform/features/timeline/src/controllers/graph/TimelineGraph.js b/platform/features/timeline/src/controllers/graph/TimelineGraph.js index 99696ac40c..c5e84ddaa0 100644 --- a/platform/features/timeline/src/controllers/graph/TimelineGraph.js +++ b/platform/features/timeline/src/controllers/graph/TimelineGraph.js @@ -45,8 +45,6 @@ define( min = 0, // current maximum max = 0, - // current displayed time span - duration = 1000, // line colors to display colors = Object.keys(domainObjects); diff --git a/platform/features/timeline/src/directives/MCTSwimlaneDrop.js b/platform/features/timeline/src/directives/MCTSwimlaneDrop.js index 1ffc0744d2..5a827c75f6 100644 --- a/platform/features/timeline/src/directives/MCTSwimlaneDrop.js +++ b/platform/features/timeline/src/directives/MCTSwimlaneDrop.js @@ -40,7 +40,6 @@ define( height = element[0].offsetHeight, rect = element[0].getBoundingClientRect(), offset = event.pageY - rect.top, - dataTransfer = event.dataTransfer, id = dndService.getData( SwimlaneDragConstants.MCT_DRAG_TYPE ), diff --git a/platform/forms/src/controllers/ColorController.js b/platform/forms/src/controllers/ColorController.js index 6224b25944..2bf38e0c63 100644 --- a/platform/forms/src/controllers/ColorController.js +++ b/platform/forms/src/controllers/ColorController.js @@ -55,7 +55,7 @@ define( } function initializeGroups() { - var i, group; + var group; // Ten grayscale colors group = []; diff --git a/platform/persistence/couch/src/CouchIndicator.js b/platform/persistence/couch/src/CouchIndicator.js index dfd8de04ee..223a12b7c4 100644 --- a/platform/persistence/couch/src/CouchIndicator.js +++ b/platform/persistence/couch/src/CouchIndicator.js @@ -74,7 +74,7 @@ define( // Callback if the HTTP request to Couch fails - function handleError(err) { + function handleError() { self.state = DISCONNECTED; } diff --git a/platform/persistence/couch/src/CouchPersistenceProvider.js b/platform/persistence/couch/src/CouchPersistenceProvider.js index 21579eb5f9..2e0cec8807 100644 --- a/platform/persistence/couch/src/CouchPersistenceProvider.js +++ b/platform/persistence/couch/src/CouchPersistenceProvider.js @@ -116,7 +116,7 @@ define( return this.$q.when(this.spaces); }; - CouchPersistenceProvider.prototype.listObjects = function (space) { + CouchPersistenceProvider.prototype.listObjects = function () { return this.get("_all_docs").then(bind(getIdsFromAllDocs, this)); }; diff --git a/platform/persistence/elastic/src/ElasticPersistenceProvider.js b/platform/persistence/elastic/src/ElasticPersistenceProvider.js index 8ffb5d0232..564029b4c7 100644 --- a/platform/persistence/elastic/src/ElasticPersistenceProvider.js +++ b/platform/persistence/elastic/src/ElasticPersistenceProvider.js @@ -157,7 +157,7 @@ define( .then(checkUpdate); }; - ElasticPersistenceProvider.prototype.deleteObject = function (space, key, value) { + ElasticPersistenceProvider.prototype.deleteObject = function (space, key) { return this.del(key).then(bind(this.checkResponse, this)); }; diff --git a/platform/persistence/elastic/src/ElasticSearchProvider.js b/platform/persistence/elastic/src/ElasticSearchProvider.js index a3dbe58f9c..30ef2cd62a 100644 --- a/platform/persistence/elastic/src/ElasticSearchProvider.js +++ b/platform/persistence/elastic/src/ElasticSearchProvider.js @@ -73,7 +73,7 @@ define([ }) .then(function success(succesResponse) { return provider.parseResponse(succesResponse); - }, function error(errorResponse) { + }, function error() { // Gracefully fail. return { hits: [], diff --git a/platform/persistence/local/src/LocalStoragePersistenceProvider.js b/platform/persistence/local/src/LocalStoragePersistenceProvider.js index a930304074..9f6b594a71 100644 --- a/platform/persistence/local/src/LocalStoragePersistenceProvider.js +++ b/platform/persistence/local/src/LocalStoragePersistenceProvider.js @@ -79,7 +79,7 @@ define( return this.$q.when(spaceObj[key]); }; - LocalStoragePersistenceProvider.prototype.deleteObject = function (space, key, value) { + LocalStoragePersistenceProvider.prototype.deleteObject = function (space, key) { var spaceObj = this.getValue(space); delete spaceObj[key]; this.setValue(space, spaceObj); diff --git a/platform/representation/src/MCTRepresentation.js b/platform/representation/src/MCTRepresentation.js index a9b784ae56..783f61e1f2 100644 --- a/platform/representation/src/MCTRepresentation.js +++ b/platform/representation/src/MCTRepresentation.js @@ -53,8 +53,7 @@ define( * @param {ViewDefinition[]} views an array of view extensions */ function MCTRepresentation(representations, views, representers, $q, templateLinker, $log) { - var representationMap = {}, - gestureMap = {}; + var representationMap = {}; // Assemble all representations and views // The distinction between views and representations is @@ -82,7 +81,7 @@ define( } } - function link($scope, element, attrs, ctrl, transclude) { + function link($scope, element, attrs) { var activeRepresenters = representers.map(function (Representer) { return new Representer($scope, element, attrs); }), diff --git a/platform/representation/src/TemplatePrefetcher.js b/platform/representation/src/TemplatePrefetcher.js index aea1389825..25fd223610 100644 --- a/platform/representation/src/TemplatePrefetcher.js +++ b/platform/representation/src/TemplatePrefetcher.js @@ -31,7 +31,7 @@ define( * @param {...Array.<{templateUrl: string}>} extensions arrays * of template or template-like extensions */ - function TemplatePrefetcher(templateLinker, extensions) { + function TemplatePrefetcher(templateLinker) { Array.prototype.slice.apply(arguments, [1]) .reduce(function (a, b) { return a.concat(b); diff --git a/platform/representation/src/gestures/ContextMenuGesture.js b/platform/representation/src/gestures/ContextMenuGesture.js index 78abed5347..f659005694 100644 --- a/platform/representation/src/gestures/ContextMenuGesture.js +++ b/platform/representation/src/gestures/ContextMenuGesture.js @@ -91,7 +91,7 @@ define( }); // Whenever the touch event ends, 'isPressing' is false. - element.on('touchend', function (event) { + element.on('touchend', function () { isPressing = false; }); } diff --git a/platform/representation/src/gestures/DropGesture.js b/platform/representation/src/gestures/DropGesture.js index 992c17ba98..6af580d9c3 100644 --- a/platform/representation/src/gestures/DropGesture.js +++ b/platform/representation/src/gestures/DropGesture.js @@ -71,13 +71,6 @@ define( } } - function canCompose(domainObject, selectedObject){ - return domainObject.getCapability("action").getActions({ - key: 'compose', - selectedObject: selectedObject - }).length > 0; - } - function dragOver(e) { //Refresh domain object on each dragOver to catch external // updates to the model @@ -121,7 +114,7 @@ define( // destination domain object's composition, and persist // the change. if (id) { - $q.when(action && action.perform()).then(function (result) { + $q.when(action && action.perform()).then(function () { //Don't go into edit mode for folders if (domainObjectType!=='folder') { editableDomainObject.getCapability('action').perform('edit'); diff --git a/platform/telemetry/src/TelemetryFormatter.js b/platform/telemetry/src/TelemetryFormatter.js index 71c6e60bb9..92807f5cb8 100644 --- a/platform/telemetry/src/TelemetryFormatter.js +++ b/platform/telemetry/src/TelemetryFormatter.js @@ -70,7 +70,7 @@ define( * @returns {string} a textual representation of the * value, suitable for display. */ - TelemetryFormatter.prototype.formatRangeValue = function (v, key) { + TelemetryFormatter.prototype.formatRangeValue = function (v) { return isNaN(v) ? String(v) : v.toFixed(VALUE_FORMAT_DIGITS); }; From 65095d18f274e7de5a91de2edba648f61dd07dcb Mon Sep 17 00:00:00 2001 From: Victor Woeltjen Date: Fri, 4 Mar 2016 11:43:55 -0800 Subject: [PATCH 025/132] [Build] Remove partial global declarations --- platform/core/test/actions/ActionCapabilitySpec.js | 1 - platform/features/conductor/test/ConductorRepresenterSpec.js | 1 - platform/search/test/services/GenericSearchWorkerSpec.js | 1 - 3 files changed, 3 deletions(-) diff --git a/platform/core/test/actions/ActionCapabilitySpec.js b/platform/core/test/actions/ActionCapabilitySpec.js index f0a7da2672..de80d2186d 100644 --- a/platform/core/test/actions/ActionCapabilitySpec.js +++ b/platform/core/test/actions/ActionCapabilitySpec.js @@ -19,7 +19,6 @@ * this source code distribution or the Licensing information page available * at runtime from the About dialog for additional information. *****************************************************************************/ - jasmine*/ /** * ActionCapabilitySpec. Created by vwoeltje on 11/6/14. diff --git a/platform/features/conductor/test/ConductorRepresenterSpec.js b/platform/features/conductor/test/ConductorRepresenterSpec.js index a9493b8864..20647e91e8 100644 --- a/platform/features/conductor/test/ConductorRepresenterSpec.js +++ b/platform/features/conductor/test/ConductorRepresenterSpec.js @@ -19,7 +19,6 @@ * this source code distribution or the Licensing information page available * at runtime from the About dialog for additional information. *****************************************************************************/ - waitsFor,afterEach,jasmine*/ define( ["../src/ConductorRepresenter", "./TestTimeConductor"], diff --git a/platform/search/test/services/GenericSearchWorkerSpec.js b/platform/search/test/services/GenericSearchWorkerSpec.js index 3a35edfc9a..44c7c778ba 100644 --- a/platform/search/test/services/GenericSearchWorkerSpec.js +++ b/platform/search/test/services/GenericSearchWorkerSpec.js @@ -19,7 +19,6 @@ * this source code distribution or the Licensing information page available * at runtime from the About dialog for additional information. *****************************************************************************/ - require,afterEach*/ /** * SearchSpec. Created by shale on 07/31/2015. From 4f85616632bd03937547cce9cfcedde5399319d1 Mon Sep 17 00:00:00 2001 From: Victor Woeltjen Date: Fri, 4 Mar 2016 11:46:15 -0800 Subject: [PATCH 026/132] [Build] Fix FullscreenAction spec ...to reflect acquisition of screenfull dependency via AMD --- .../browse/test/windowing/FullscreenActionSpec.js | 13 ++++++------- 1 file changed, 6 insertions(+), 7 deletions(-) diff --git a/platform/commonUI/browse/test/windowing/FullscreenActionSpec.js b/platform/commonUI/browse/test/windowing/FullscreenActionSpec.js index f0cf4eb382..7b3dfdab80 100644 --- a/platform/commonUI/browse/test/windowing/FullscreenActionSpec.js +++ b/platform/commonUI/browse/test/windowing/FullscreenActionSpec.js @@ -24,26 +24,25 @@ * MCTRepresentationSpec. Created by vwoeltje on 11/6/14. */ define( - ["../../src/windowing/FullscreenAction"], - function (FullscreenAction) { + ["../../src/windowing/FullscreenAction", "screenfull"], + function (FullscreenAction, screenfull) { describe("The fullscreen action", function () { var action, - oldScreenfull; + oldToggle; beforeEach(function () { // Screenfull is not shimmed or injected, so // we need to spy on it in the global scope. - oldScreenfull = window.screenfull; + oldToggle = screenfull.toggle; - window.screenfull = {}; - window.screenfull.toggle = jasmine.createSpy("toggle"); + screenfull.toggle = jasmine.createSpy("toggle"); action = new FullscreenAction({}); }); afterEach(function () { - window.screenfull = oldScreenfull; + screenfull.toggle = oldToggle; }); it("toggles fullscreen mode when performed", function () { From 2be6b3f0515fa25de349826a3d2faeca9721d702 Mon Sep 17 00:00:00 2001 From: Victor Woeltjen Date: Fri, 4 Mar 2016 11:48:20 -0800 Subject: [PATCH 027/132] [Build] Fix GenericSearchProvider spec ...by delegating to window.setTimeout, such that spec as-written behaves correctly. --- platform/search/test/services/GenericSearchProviderSpec.js | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/platform/search/test/services/GenericSearchProviderSpec.js b/platform/search/test/services/GenericSearchProviderSpec.js index b7c8321add..a6c0e981c8 100644 --- a/platform/search/test/services/GenericSearchProviderSpec.js +++ b/platform/search/test/services/GenericSearchProviderSpec.js @@ -81,6 +81,10 @@ define([ spyOn(GenericSearchProvider.prototype, 'scheduleForIndexing'); + $timeout.andCallFake(function (callback, millis) { + window.setTimeout(callback, millis); + }); + provider = new GenericSearchProvider( $timeout, $q, From 1cdbc11894289ad3e200820884db14696cba5864 Mon Sep 17 00:00:00 2001 From: Victor Woeltjen Date: Fri, 4 Mar 2016 11:52:46 -0800 Subject: [PATCH 028/132] [Build] Clarify spec paths --- gulpfile.js | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/gulpfile.js b/gulpfile.js index 6a8c790c8b..d96d0ad825 100644 --- a/gulpfile.js +++ b/gulpfile.js @@ -42,6 +42,7 @@ var gulp = require('gulp'), assets: 'dist/assets', scss: ['./platform/**/*.scss', './example/**/*.scss'], scripts: [ 'main.js', 'platform/**/*.js', 'src/**/*.js' ], + specs: [ 'platform/**/*Spec.js', 'src/**/*Spec.js' ], static: [ 'index.html', 'platform/**/*', @@ -98,7 +99,10 @@ gulp.task('stylesheets', function () { }); gulp.task('lint', function () { - return gulp.src(paths.scripts.concat(['!**/test/**/*.js', '!**/*Spec.js'])) + var nonspecs = paths.specs.map(function (glob) { + return "!" + glob; + }); + return gulp.src(paths.scripts.concat(nonspecs)) .pipe(jshint()) .pipe(jshint.reporter('default')) .pipe(jshint.reporter('fail')); From f34ef8c4c8d1588f921e59870ae78687478c962f Mon Sep 17 00:00:00 2001 From: Victor Woeltjen Date: Fri, 4 Mar 2016 11:53:08 -0800 Subject: [PATCH 029/132] [Build] Add global declarations to mocks --- .../entanglement/test/ControlledPromise.js | 23 ++++++++++++++++++- .../entanglement/test/DomainObjectFactory.js | 2 +- .../test/services/MockCopyService.js | 2 +- .../test/services/MockLinkService.js | 4 ++-- .../test/services/MockMoveService.js | 2 +- .../conductor/test/TestTimeConductor.js | 1 + 6 files changed, 28 insertions(+), 6 deletions(-) diff --git a/platform/entanglement/test/ControlledPromise.js b/platform/entanglement/test/ControlledPromise.js index b555a5333d..0b3fcd6cf6 100644 --- a/platform/entanglement/test/ControlledPromise.js +++ b/platform/entanglement/test/ControlledPromise.js @@ -1,4 +1,25 @@ - +/***************************************************************************** + * Open MCT Web, Copyright (c) 2014-2015, United States Government + * as represented by the Administrator of the National Aeronautics and Space + * Administration. All rights reserved. + * + * Open MCT Web is licensed under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * http://www.apache.org/licenses/LICENSE-2.0. + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations + * under the License. + * + * Open MCT Web includes source code licensed under additional open source + * licenses. See the Open Source Licenses file (LICENSES.md) included with + * this source code distribution or the Licensing information page available + * at runtime from the About dialog for additional information. + *****************************************************************************/ +/*global spyOn*/ define( function () { diff --git a/platform/entanglement/test/DomainObjectFactory.js b/platform/entanglement/test/DomainObjectFactory.js index 5ee26c0a2f..4a11667084 100644 --- a/platform/entanglement/test/DomainObjectFactory.js +++ b/platform/entanglement/test/DomainObjectFactory.js @@ -20,7 +20,7 @@ * at runtime from the About dialog for additional information. *****************************************************************************/ - +/*global jasmine*/ define( function () { diff --git a/platform/entanglement/test/services/MockCopyService.js b/platform/entanglement/test/services/MockCopyService.js index 0415a01b4b..cf986bec7e 100644 --- a/platform/entanglement/test/services/MockCopyService.js +++ b/platform/entanglement/test/services/MockCopyService.js @@ -20,7 +20,7 @@ * at runtime from the About dialog for additional information. *****************************************************************************/ - +/*global jasmine*/ define( function () { diff --git a/platform/entanglement/test/services/MockLinkService.js b/platform/entanglement/test/services/MockLinkService.js index 2a5122d871..5345efc86e 100644 --- a/platform/entanglement/test/services/MockLinkService.js +++ b/platform/entanglement/test/services/MockLinkService.js @@ -20,7 +20,7 @@ * at runtime from the About dialog for additional information. *****************************************************************************/ - +/*global jasmine*/ define( [ '../ControlledPromise' @@ -63,7 +63,7 @@ define( ] ); - mockLinkService.perform.andCallFake(function (object, newParent) { + mockLinkService.perform.andCallFake(function (object) { var performPromise = new ControlledPromise(); this.perform.mostRecentCall.promise = performPromise; diff --git a/platform/entanglement/test/services/MockMoveService.js b/platform/entanglement/test/services/MockMoveService.js index 6136d623c6..d5a290c03f 100644 --- a/platform/entanglement/test/services/MockMoveService.js +++ b/platform/entanglement/test/services/MockMoveService.js @@ -20,7 +20,7 @@ * at runtime from the About dialog for additional information. *****************************************************************************/ - +/*global jasmine*/ define( function () { diff --git a/platform/features/conductor/test/TestTimeConductor.js b/platform/features/conductor/test/TestTimeConductor.js index 2a0fe7a7a8..52ffb773d4 100644 --- a/platform/features/conductor/test/TestTimeConductor.js +++ b/platform/features/conductor/test/TestTimeConductor.js @@ -20,6 +20,7 @@ * at runtime from the About dialog for additional information. *****************************************************************************/ +/*global spyOn*/ define( ["../src/TimeConductor"], function (TimeConductor) { From 43176cfbb858f6b3050e5716d6d0f89b70ece0c3 Mon Sep 17 00:00:00 2001 From: Victor Woeltjen Date: Fri, 4 Mar 2016 11:56:31 -0800 Subject: [PATCH 030/132] [Build] Move lint config to gulpfile --- .jshintrc | 22 ---------------------- gulpfile.js | 24 +++++++++++++++++++++++- 2 files changed, 23 insertions(+), 23 deletions(-) delete mode 100644 .jshintrc diff --git a/.jshintrc b/.jshintrc deleted file mode 100644 index a0109fbce7..0000000000 --- a/.jshintrc +++ /dev/null @@ -1,22 +0,0 @@ -{ - "bitwise": true, - "curly": true, - "eqeqeq": true, - "freeze": true, - "funcscope": true, - "futurehostile": true, - "latedef": true, - "noarg": true, - "nocomma": true, - "nonbsp": true, - "nonew": true, - "predef": [ - "define", - "Blob", - "Float32Array", - "Promise" - ], - "strict": "implied", - "undef": true, - "unused": true -} \ No newline at end of file diff --git a/gulpfile.js b/gulpfile.js index d96d0ad825..1fab6d5b18 100644 --- a/gulpfile.js +++ b/gulpfile.js @@ -56,6 +56,28 @@ var gulp = require('gulp'), mainConfigFile: paths.main, wrapShim: true }, + jshint: { + "bitwise": true, + "curly": true, + "eqeqeq": true, + "freeze": true, + "funcscope": true, + "futurehostile": true, + "latedef": true, + "noarg": true, + "nocomma": true, + "nonbsp": true, + "nonew": true, + "predef": [ + "define", + "Blob", + "Float32Array", + "Promise" + ], + "strict": "implied", + "undef": true, + "unused": true + }, karma: { configFile: path.resolve(__dirname, 'karma.conf.js'), singleRun: true @@ -103,7 +125,7 @@ gulp.task('lint', function () { return "!" + glob; }); return gulp.src(paths.scripts.concat(nonspecs)) - .pipe(jshint()) + .pipe(jshint(options.jshint)) .pipe(jshint.reporter('default')) .pipe(jshint.reporter('fail')); }); From c7f199a59ecfe40f1ddb5cff53898edd96d14a67 Mon Sep 17 00:00:00 2001 From: Victor Woeltjen Date: Fri, 4 Mar 2016 12:01:11 -0800 Subject: [PATCH 031/132] [Build] Also lint specs ...with additional tolerance declared for Jasmine variables. --- gulpfile.js | 14 ++++++++++---- package.json | 1 + 2 files changed, 11 insertions(+), 4 deletions(-) diff --git a/gulpfile.js b/gulpfile.js index 1fab6d5b18..2caf983d46 100644 --- a/gulpfile.js +++ b/gulpfile.js @@ -35,7 +35,9 @@ var gulp = require('gulp'), fs = require('fs'), git = require('git-rev-sync'), moment = require('moment'), + merge = require('merge-stream'), project = require('./package.json'), + _ = require('lodash'), paths = { main: 'main.js', dist: 'dist', @@ -122,10 +124,14 @@ gulp.task('stylesheets', function () { gulp.task('lint', function () { var nonspecs = paths.specs.map(function (glob) { - return "!" + glob; - }); - return gulp.src(paths.scripts.concat(nonspecs)) - .pipe(jshint(options.jshint)) + return "!" + glob; + }), + scriptLint = gulp.src(paths.scripts.concat(nonspecs)) + .pipe(jshint(options.jshint)), + specLint = gulp.src(paths.specs) + .pipe(jshint(_.extend({ jasmine: true }, options.jshint))); + + return merge(scriptLint, specLint) .pipe(jshint.reporter('default')) .pipe(jshint.reporter('fail')); }); diff --git a/package.json b/package.json index c0afb1c9ce..19f45ac089 100644 --- a/package.json +++ b/package.json @@ -34,6 +34,7 @@ "lodash": "^3.10.1", "markdown-toc": "^0.11.7", "marked": "^0.3.5", + "merge-stream": "^1.0.0", "mkdirp": "^0.5.1", "moment": "^2.11.1", "node-bourbon": "^4.2.3", From 7eb7027b671ebaf33a31e4db9504926eb6942cda Mon Sep 17 00:00:00 2001 From: Victor Woeltjen Date: Fri, 4 Mar 2016 12:05:00 -0800 Subject: [PATCH 032/132] [Build] Specify browser environment ...such that various browser globals do not need to be individually declared. --- gulpfile.js | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/gulpfile.js b/gulpfile.js index 2caf983d46..d319738002 100644 --- a/gulpfile.js +++ b/gulpfile.js @@ -60,6 +60,7 @@ var gulp = require('gulp'), }, jshint: { "bitwise": true, + "browser": true, "curly": true, "eqeqeq": true, "freeze": true, @@ -72,8 +73,6 @@ var gulp = require('gulp'), "nonew": true, "predef": [ "define", - "Blob", - "Float32Array", "Promise" ], "strict": "implied", From 5920533637e58d5af9ad65e369bad8185192178a Mon Sep 17 00:00:00 2001 From: Victor Woeltjen Date: Fri, 4 Mar 2016 12:23:53 -0800 Subject: [PATCH 033/132] [Build] Don't appear to use new for side effects --- platform/commonUI/general/test/SplashScreenManagerSpec.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/platform/commonUI/general/test/SplashScreenManagerSpec.js b/platform/commonUI/general/test/SplashScreenManagerSpec.js index 09546971a5..1e82190326 100644 --- a/platform/commonUI/general/test/SplashScreenManagerSpec.js +++ b/platform/commonUI/general/test/SplashScreenManagerSpec.js @@ -52,7 +52,7 @@ define([ describe('when element exists', function () { beforeEach(function () { $document.querySelectorAll.andReturn([splashElement]); - new SplashScreenManager([$document]); + return new SplashScreenManager([$document]); }); it('adds fade out class', function () { @@ -79,7 +79,7 @@ define([ $document.querySelectorAll.andReturn([]); function run() { - new SplashScreenManager([$document]); + return new SplashScreenManager([$document]); } expect(run).not.toThrow(); From e4704517183996685930a7c009c2aaa21b44233a Mon Sep 17 00:00:00 2001 From: Victor Woeltjen Date: Fri, 4 Mar 2016 12:30:23 -0800 Subject: [PATCH 034/132] [Build] Declare undefined variables ...to satisfy JSLint for specs. --- platform/search/test/services/GenericSearchProviderSpec.js | 3 ++- platform/search/test/services/GenericSearchWorkerSpec.js | 2 ++ 2 files changed, 4 insertions(+), 1 deletion(-) diff --git a/platform/search/test/services/GenericSearchProviderSpec.js b/platform/search/test/services/GenericSearchProviderSpec.js index a6c0e981c8..ecc76f044e 100644 --- a/platform/search/test/services/GenericSearchProviderSpec.js +++ b/platform/search/test/services/GenericSearchProviderSpec.js @@ -30,7 +30,8 @@ define([ ) { describe('GenericSearchProvider', function () { - var $q, + var $timeout, + $q, $log, modelService, models, diff --git a/platform/search/test/services/GenericSearchWorkerSpec.js b/platform/search/test/services/GenericSearchWorkerSpec.js index 44c7c778ba..952d2a4d58 100644 --- a/platform/search/test/services/GenericSearchWorkerSpec.js +++ b/platform/search/test/services/GenericSearchWorkerSpec.js @@ -20,6 +20,8 @@ * at runtime from the About dialog for additional information. *****************************************************************************/ +/*global require*/ + /** * SearchSpec. Created by shale on 07/31/2015. */ From d6ec7e9ab883d125f995c176e48f753fd98de145 Mon Sep 17 00:00:00 2001 From: Victor Woeltjen Date: Fri, 4 Mar 2016 12:56:14 -0800 Subject: [PATCH 035/132] [Build] Remove unused variables from specs ...to satisfy JSHint. --- .../browse/test/creation/CreationServiceSpec.js | 6 ++---- .../browse/test/navigation/NavigateActionSpec.js | 1 - .../browse/test/windowing/NewTabActionSpec.js | 1 - .../edit/test/actions/PropertiesDialogSpec.js | 2 +- .../edit/test/controllers/EditControllerSpec.js | 3 +-- .../test/objects/EditableDomainObjectCacheSpec.js | 3 +-- .../edit/test/objects/EditableDomainObjectSpec.js | 4 ++++ .../edit/test/policies/EditableViewPolicySpec.js | 3 +-- .../edit/test/representers/EditToolbarSpec.js | 2 +- .../commonUI/formats/test/FormatProviderSpec.js | 1 - .../general/test/directives/MCTPopupSpec.js | 8 -------- .../inspect/test/services/InfoServiceSpec.js | 4 ++-- .../test/NotificationIndicatorControllerSpec.js | 13 ++++++------- platform/containment/test/CapabilityTableSpec.js | 2 +- .../test/capabilities/MutationCapabilitySpec.js | 2 +- .../test/capabilities/RelationshipCapabilitySpec.js | 6 ++---- platform/core/test/identifiers/IdentifierSpec.js | 2 +- .../core/test/objects/DomainObjectProviderSpec.js | 6 ------ platform/core/test/services/InstantiateSpec.js | 2 -- platform/core/test/types/TypeProviderSpec.js | 8 +------- platform/core/test/views/ViewProviderSpec.js | 3 +-- .../test/actions/SetPrimaryLocationActionSpec.js | 3 +-- .../entanglement/test/services/CopyServiceSpec.js | 7 ++----- platform/entanglement/test/services/CopyTaskSpec.js | 7 ++----- .../clock/test/controllers/ClockControllerSpec.js | 1 - .../clock/test/controllers/TimerFormatterSpec.js | 4 ---- .../test/ConductorTelemetryDecoratorSpec.js | 10 ---------- .../events/test/policies/MessagesViewPolicySpec.js | 3 +-- .../features/layout/test/LayoutControllerSpec.js | 2 +- .../features/plot/test/PlotOptionsControllerSpec.js | 1 - platform/features/plot/test/PlotOptionsFormSpec.js | 3 +-- .../plot/test/elements/PlotLimitTrackerSpec.js | 1 - .../features/plot/test/elements/PlotPreparerSpec.js | 2 ++ .../features/plot/test/modes/PlotOverlayModeSpec.js | 13 ++----------- .../features/plot/test/modes/PlotStackModeSpec.js | 11 +---------- .../test/controllers/MCTTableControllerSpec.js | 8 -------- .../test/controllers/TableOptionsControllerSpec.js | 8 -------- .../controllers/TelemetryTableControllerSpec.js | 2 -- .../timeline/test/directives/MCTSwimlaneDropSpec.js | 1 - platform/forms/test/MCTFormSpec.js | 3 +-- platform/identity/test/IdentityAggregatorSpec.js | 1 - .../queue/test/PersistenceFailureHandlerSpec.js | 2 +- platform/policy/test/PolicyActionDecoratorSpec.js | 2 +- platform/policy/test/PolicyViewDecoratorSpec.js | 2 +- .../test/actions/ContextMenuActionSpec.js | 7 +++---- .../test/gestures/GestureRepresenterSpec.js | 1 - .../test/controllers/SearchMenuControllerSpec.js | 1 - platform/telemetry/test/TelemetryDelegatorSpec.js | 4 ++++ 48 files changed, 50 insertions(+), 142 deletions(-) diff --git a/platform/commonUI/browse/test/creation/CreationServiceSpec.js b/platform/commonUI/browse/test/creation/CreationServiceSpec.js index deb2ba068b..270f5f8c90 100644 --- a/platform/commonUI/browse/test/creation/CreationServiceSpec.js +++ b/platform/commonUI/browse/test/creation/CreationServiceSpec.js @@ -147,8 +147,7 @@ define( }); it("adds new objects to the parent's composition", function () { - var model = { someKey: "some value" }, - parentModel = { composition: ["notAnyUUID"] }; + var model = { someKey: "some value" }; creationService.createObject(model, mockParentObject); // Verify that a new ID was added @@ -199,8 +198,7 @@ define( it("logs an error when mutaton fails", function () { // If mutation of the parent fails, we've lost the // created object - this is an error. - var model = { someKey: "some value" }, - parentModel = { composition: ["notAnyUUID"] }; + var model = { someKey: "some value" }; mockCompositionCapability.add.andReturn(mockPromise(false)); diff --git a/platform/commonUI/browse/test/navigation/NavigateActionSpec.js b/platform/commonUI/browse/test/navigation/NavigateActionSpec.js index fca6f3bea0..0295651a1f 100644 --- a/platform/commonUI/browse/test/navigation/NavigateActionSpec.js +++ b/platform/commonUI/browse/test/navigation/NavigateActionSpec.js @@ -30,7 +30,6 @@ define( describe("The navigate action", function () { var mockNavigationService, mockQ, - actionContext, mockDomainObject, action; diff --git a/platform/commonUI/browse/test/windowing/NewTabActionSpec.js b/platform/commonUI/browse/test/windowing/NewTabActionSpec.js index 47f02f6c41..335c4fe42b 100644 --- a/platform/commonUI/browse/test/windowing/NewTabActionSpec.js +++ b/platform/commonUI/browse/test/windowing/NewTabActionSpec.js @@ -28,7 +28,6 @@ define( var actionSelected, actionCurrent, mockWindow, - mockDomainObject, mockContextCurrent, mockContextSelected, mockUrlService; diff --git a/platform/commonUI/edit/test/actions/PropertiesDialogSpec.js b/platform/commonUI/edit/test/actions/PropertiesDialogSpec.js index 764d8483c9..2de6c12885 100644 --- a/platform/commonUI/edit/test/actions/PropertiesDialogSpec.js +++ b/platform/commonUI/edit/test/actions/PropertiesDialogSpec.js @@ -26,7 +26,7 @@ define( describe("Properties dialog", function () { - var type, properties, domainObject, model, dialog; + var type, properties, model, dialog; beforeEach(function () { type = { diff --git a/platform/commonUI/edit/test/controllers/EditControllerSpec.js b/platform/commonUI/edit/test/controllers/EditControllerSpec.js index a359d6945b..8c6a1ee31f 100644 --- a/platform/commonUI/edit/test/controllers/EditControllerSpec.js +++ b/platform/commonUI/edit/test/controllers/EditControllerSpec.js @@ -93,8 +93,7 @@ define( }); it("exposes a warning message for unload", function () { - var obj = mockObject, - errorMessage = "Unsaved changes"; + var errorMessage = "Unsaved changes"; // Normally, should be undefined expect(controller.getUnloadWarning()).toBeUndefined(); diff --git a/platform/commonUI/edit/test/objects/EditableDomainObjectCacheSpec.js b/platform/commonUI/edit/test/objects/EditableDomainObjectCacheSpec.js index 127bf6e3e4..edbfd3edc4 100644 --- a/platform/commonUI/edit/test/objects/EditableDomainObjectCacheSpec.js +++ b/platform/commonUI/edit/test/objects/EditableDomainObjectCacheSpec.js @@ -28,7 +28,6 @@ define( var captured, completionCapability, - object, mockQ, mockType, cache; @@ -45,7 +44,7 @@ define( type: mockType }[key]; }, - hasCapability: function (key) { + hasCapability: function () { return false; } }; diff --git a/platform/commonUI/edit/test/objects/EditableDomainObjectSpec.js b/platform/commonUI/edit/test/objects/EditableDomainObjectSpec.js index 3878575237..9b1095f68d 100644 --- a/platform/commonUI/edit/test/objects/EditableDomainObjectSpec.js +++ b/platform/commonUI/edit/test/objects/EditableDomainObjectSpec.js @@ -25,7 +25,11 @@ define( function (EditableDomainObject) { describe("Editable domain object", function () { + var object; + beforeEach(function () { + object = new EditableDomainObject(); + }); }); } ); \ No newline at end of file diff --git a/platform/commonUI/edit/test/policies/EditableViewPolicySpec.js b/platform/commonUI/edit/test/policies/EditableViewPolicySpec.js index 6f432fafeb..2194a8c45a 100644 --- a/platform/commonUI/edit/test/policies/EditableViewPolicySpec.js +++ b/platform/commonUI/edit/test/policies/EditableViewPolicySpec.js @@ -25,8 +25,7 @@ define( function (EditableViewPolicy) { describe("The editable view policy", function () { - var testView, - mockDomainObject, + var mockDomainObject, testMode, policy; diff --git a/platform/commonUI/edit/test/representers/EditToolbarSpec.js b/platform/commonUI/edit/test/representers/EditToolbarSpec.js index 9a5488d356..a252b32612 100644 --- a/platform/commonUI/edit/test/representers/EditToolbarSpec.js +++ b/platform/commonUI/edit/test/representers/EditToolbarSpec.js @@ -147,7 +147,7 @@ define( }); it("invokes setters on update", function () { - var structure, state; + var structure; testABC.a = jasmine.createSpy('a'); diff --git a/platform/commonUI/formats/test/FormatProviderSpec.js b/platform/commonUI/formats/test/FormatProviderSpec.js index d66f9f8a5d..527a0182af 100644 --- a/platform/commonUI/formats/test/FormatProviderSpec.js +++ b/platform/commonUI/formats/test/FormatProviderSpec.js @@ -28,7 +28,6 @@ define( describe("The FormatProvider", function () { var mockFormats, - mockLog, mockFormatInstances, provider; diff --git a/platform/commonUI/general/test/directives/MCTPopupSpec.js b/platform/commonUI/general/test/directives/MCTPopupSpec.js index 065b916c32..bfe6b469cb 100644 --- a/platform/commonUI/general/test/directives/MCTPopupSpec.js +++ b/platform/commonUI/general/test/directives/MCTPopupSpec.js @@ -40,14 +40,6 @@ define( testRect, mctPopup; - function testEvent(x, y) { - return { - pageX: x, - pageY: y, - preventDefault: jasmine.createSpy("preventDefault") - }; - } - beforeEach(function () { mockCompile = jasmine.createSpy("$compile"); diff --git a/platform/commonUI/inspect/test/services/InfoServiceSpec.js b/platform/commonUI/inspect/test/services/InfoServiceSpec.js index 167b940360..1f5c315041 100644 --- a/platform/commonUI/inspect/test/services/InfoServiceSpec.js +++ b/platform/commonUI/inspect/test/services/InfoServiceSpec.js @@ -21,8 +21,8 @@ *****************************************************************************/ define( - ['../../src/services/InfoService', '../../src/InfoConstants'], - function (InfoService, InfoConstants) { + ['../../src/services/InfoService'], + function (InfoService) { describe("The info service", function () { var mockCompile, diff --git a/platform/commonUI/notification/test/NotificationIndicatorControllerSpec.js b/platform/commonUI/notification/test/NotificationIndicatorControllerSpec.js index 0af266ad19..a6acd28417 100644 --- a/platform/commonUI/notification/test/NotificationIndicatorControllerSpec.js +++ b/platform/commonUI/notification/test/NotificationIndicatorControllerSpec.js @@ -27,7 +27,8 @@ define( describe("The notification indicator controller ", function () { var mockNotificationService, mockScope, - mockDialogService; + mockDialogService, + controller; beforeEach(function(){ mockNotificationService = jasmine.createSpy("notificationService"); @@ -36,19 +37,18 @@ define( "dialogService", ["getDialogResponse","dismiss"] ); - }); - - it("exposes the highest notification severity to the template", function() { mockNotificationService.highest = { severity: "error" }; - var controller = new NotificationIndicatorController(mockScope, mockNotificationService, mockDialogService); + 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() { - var controller = new NotificationIndicatorController(mockScope, mockNotificationService, mockDialogService); expect(mockScope.showNotificationsList).toBeDefined(); mockScope.showNotificationsList(); expect(mockDialogService.getDialogResponse).toHaveBeenCalled(); @@ -61,7 +61,6 @@ define( }); it("provides a means of dismissing the message list", function() { - var controller = new NotificationIndicatorController(mockScope, mockNotificationService, mockDialogService); expect(mockScope.showNotificationsList).toBeDefined(); mockScope.showNotificationsList(); expect(mockDialogService.getDialogResponse).toHaveBeenCalled(); diff --git a/platform/containment/test/CapabilityTableSpec.js b/platform/containment/test/CapabilityTableSpec.js index 79a86d45d5..76fbd6ffcd 100644 --- a/platform/containment/test/CapabilityTableSpec.js +++ b/platform/containment/test/CapabilityTableSpec.js @@ -39,7 +39,7 @@ define( [ 'getCapabilities' ] ); // Both types can only contain b, let's say - mockTypes = ['a', 'b'].map(function (type, index) { + mockTypes = ['a', 'b'].map(function (type) { var mockType = jasmine.createSpyObj( 'type-' + type, ['getKey', 'getDefinition', 'getInitialModel'] diff --git a/platform/core/test/capabilities/MutationCapabilitySpec.js b/platform/core/test/capabilities/MutationCapabilitySpec.js index 28aa983144..bb6070b154 100644 --- a/platform/core/test/capabilities/MutationCapabilitySpec.js +++ b/platform/core/test/capabilities/MutationCapabilitySpec.js @@ -60,7 +60,7 @@ define( }); it("allows setting a model", function () { - mutation.invoke(function (m) { + mutation.invoke(function () { return { someKey: "some value" }; }); expect(testModel.number).toBeUndefined(); diff --git a/platform/core/test/capabilities/RelationshipCapabilitySpec.js b/platform/core/test/capabilities/RelationshipCapabilitySpec.js index f3130326c6..6b69a9b615 100644 --- a/platform/core/test/capabilities/RelationshipCapabilitySpec.js +++ b/platform/core/test/capabilities/RelationshipCapabilitySpec.js @@ -104,10 +104,8 @@ define( }); it("avoids redundant requests", function () { - // Lookups can be expensive, so this capability + // Lookups can be expensive, so this capability // should have some self-caching - var response; - mockDomainObject.getModel .andReturn({ relationships: { xyz: ['a'] } }); @@ -123,7 +121,7 @@ define( it("makes new requests on modification", function () { // Lookups can be expensive, so this capability // should have some self-caching - var response, testModel; + var testModel; testModel = { relationships: { xyz: ['a'] } }; diff --git a/platform/core/test/identifiers/IdentifierSpec.js b/platform/core/test/identifiers/IdentifierSpec.js index 37fee4b82a..e54a853712 100644 --- a/platform/core/test/identifiers/IdentifierSpec.js +++ b/platform/core/test/identifiers/IdentifierSpec.js @@ -34,7 +34,7 @@ define( }); describe("when space is encoded", function () { - var idSpace, idKey, spacedId; + var idSpace, idKey; beforeEach(function () { idSpace = "a-specific-space"; diff --git a/platform/core/test/objects/DomainObjectProviderSpec.js b/platform/core/test/objects/DomainObjectProviderSpec.js index 19aa95bc24..6da0d122b5 100644 --- a/platform/core/test/objects/DomainObjectProviderSpec.js +++ b/platform/core/test/objects/DomainObjectProviderSpec.js @@ -46,12 +46,6 @@ define( }; } - function mockAll(mockPromises) { - return mockPromise(mockPromises.map(function (p) { - return mockPromise(p).testValue; - })); - } - beforeEach(function () { mockModelService = jasmine.createSpyObj( "modelService", diff --git a/platform/core/test/services/InstantiateSpec.js b/platform/core/test/services/InstantiateSpec.js index bd609de8ef..0d32f9fa0e 100644 --- a/platform/core/test/services/InstantiateSpec.js +++ b/platform/core/test/services/InstantiateSpec.js @@ -30,8 +30,6 @@ define( mockIdentifierService, mockCapabilityConstructor, mockCapabilityInstance, - mockCapabilities, - mockIdentifier, idCounter, testModel, instantiate, diff --git a/platform/core/test/types/TypeProviderSpec.js b/platform/core/test/types/TypeProviderSpec.js index d178564e2e..3f687764d3 100644 --- a/platform/core/test/types/TypeProviderSpec.js +++ b/platform/core/test/types/TypeProviderSpec.js @@ -26,13 +26,7 @@ define( describe("Type provider", function () { - var captured = {}, - capture = function (name) { - return function (value) { - captured[name] = value; - }; - }, - testTypeDefinitions = [ + var testTypeDefinitions = [ { key: 'basic', glyph: "X", diff --git a/platform/core/test/views/ViewProviderSpec.js b/platform/core/test/views/ViewProviderSpec.js index 936bb903b4..0029527bbb 100644 --- a/platform/core/test/views/ViewProviderSpec.js +++ b/platform/core/test/views/ViewProviderSpec.js @@ -133,8 +133,7 @@ define( }); it("enforces view restrictions from types", function () { - var testType = "testType", - testView = { key: "x" }, + var testView = { key: "x" }, provider = new ViewProvider([testView], mockLog); // Include a "type" capability diff --git a/platform/entanglement/test/actions/SetPrimaryLocationActionSpec.js b/platform/entanglement/test/actions/SetPrimaryLocationActionSpec.js index db6e805a3e..ca4c1671ec 100644 --- a/platform/entanglement/test/actions/SetPrimaryLocationActionSpec.js +++ b/platform/entanglement/test/actions/SetPrimaryLocationActionSpec.js @@ -32,8 +32,7 @@ define( var testContext, testModel, testId, - mockLocationCapability, - mockContextCapability; + mockLocationCapability; beforeEach(function () { testId = "some-id"; diff --git a/platform/entanglement/test/services/CopyServiceSpec.js b/platform/entanglement/test/services/CopyServiceSpec.js index e020a828b3..c036de1ec6 100644 --- a/platform/entanglement/test/services/CopyServiceSpec.js +++ b/platform/entanglement/test/services/CopyServiceSpec.js @@ -124,10 +124,8 @@ define( var mockQ, mockDeferred, - creationService, createObjectPromise, copyService, - mockNow, object, newParent, copyResult, @@ -172,7 +170,7 @@ define( 'mockDeferred', ['notify', 'resolve', 'reject'] ); - mockDeferred.notify.andCallFake(function(notification){}); + mockDeferred.notify.andCallFake(function(){}); mockDeferred.resolve.andCallFake(function(value){resolvedValue = value;}); mockDeferred.promise = { then: function(callback){ @@ -271,8 +269,7 @@ define( }); describe("on domainObject with composition", function () { - var newObject, - childObject, + var childObject, objectClone, childObjectClone, compositionPromise; diff --git a/platform/entanglement/test/services/CopyTaskSpec.js b/platform/entanglement/test/services/CopyTaskSpec.js index 6f97db7fe0..32302edb04 100644 --- a/platform/entanglement/test/services/CopyTaskSpec.js +++ b/platform/entanglement/test/services/CopyTaskSpec.js @@ -187,8 +187,7 @@ define( describe("copies object trees with multiple references to the" + " same object", function () { - var model, - mockDomainObjectB, + var mockDomainObjectB, mockComposingObject, composingObjectModel, domainObjectClone, @@ -252,9 +251,7 @@ define( it(" and correctly updates child identifiers in object" + " arrays within models ", function () { var childA_ID = task.clones[0].getId(), - childB_ID = task.clones[1].getId(), - childC_ID = task.clones[3].getId(), - childD_ID = task.clones[4].getId(); + childB_ID = task.clones[1].getId(); expect(domainObjectClone.model.objArr[0].id).not.toBe(ID_A); expect(domainObjectClone.model.objArr[0].id).toBe(childA_ID); diff --git a/platform/features/clock/test/controllers/ClockControllerSpec.js b/platform/features/clock/test/controllers/ClockControllerSpec.js index c453ca356d..3ee76596fb 100644 --- a/platform/features/clock/test/controllers/ClockControllerSpec.js +++ b/platform/features/clock/test/controllers/ClockControllerSpec.js @@ -31,7 +31,6 @@ define( var mockScope, mockTicker, mockUnticker, - mockDomainObject, controller; beforeEach(function () { diff --git a/platform/features/clock/test/controllers/TimerFormatterSpec.js b/platform/features/clock/test/controllers/TimerFormatterSpec.js index 9a54685f21..58f91edad7 100644 --- a/platform/features/clock/test/controllers/TimerFormatterSpec.js +++ b/platform/features/clock/test/controllers/TimerFormatterSpec.js @@ -45,10 +45,6 @@ define( ].reduce(sum, 0); } - function twoDigits(n) { - return n < 10 ? ('0' + n) : n; - } - it("formats short-form values (no days)", function () { expect(formatter.short(toDuration(0, 123, 2, 3) + 123)) .toEqual("123:02:03"); diff --git a/platform/features/conductor/test/ConductorTelemetryDecoratorSpec.js b/platform/features/conductor/test/ConductorTelemetryDecoratorSpec.js index 914fbf0e3b..aa7757423b 100644 --- a/platform/features/conductor/test/ConductorTelemetryDecoratorSpec.js +++ b/platform/features/conductor/test/ConductorTelemetryDecoratorSpec.js @@ -33,16 +33,6 @@ define( mockSeries, decorator; - function seriesIsInWindow(series) { - var i, v, inWindow = true; - for (i = 0; i < series.getPointCount(); i += 1) { - v = series.getDomainValue(i); - inWindow = inWindow && (v >= mockConductor.displayStart()); - inWindow = inWindow && (v <= mockConductor.displayEnd()); - } - return inWindow; - } - beforeEach(function () { mockTelemetryService = jasmine.createSpyObj( 'telemetryService', diff --git a/platform/features/events/test/policies/MessagesViewPolicySpec.js b/platform/features/events/test/policies/MessagesViewPolicySpec.js index 95542fa2c3..f890dda91a 100644 --- a/platform/features/events/test/policies/MessagesViewPolicySpec.js +++ b/platform/features/events/test/policies/MessagesViewPolicySpec.js @@ -30,7 +30,6 @@ define( describe("The messages view policy", function () { var mockDomainObject, mockTelemetry, - telemetryType, testType, testView, testMetadata, @@ -50,7 +49,7 @@ define( ['getMetadata'] ); - mockDomainObject.getModel.andCallFake(function (c) { + mockDomainObject.getModel.andCallFake(function () { return {type: testType}; }); mockDomainObject.getCapability.andCallFake(function (c) { diff --git a/platform/features/layout/test/LayoutControllerSpec.js b/platform/features/layout/test/LayoutControllerSpec.js index 85efaec5bd..ebd778cb7e 100644 --- a/platform/features/layout/test/LayoutControllerSpec.js +++ b/platform/features/layout/test/LayoutControllerSpec.js @@ -235,7 +235,7 @@ define( }); it("ensures a minimum frame size", function () { - var styleB, styleC; + var styleB; // Start with a very small frame size testModel.layoutGrid = [ 1, 1 ]; diff --git a/platform/features/plot/test/PlotOptionsControllerSpec.js b/platform/features/plot/test/PlotOptionsControllerSpec.js index 6584ccfe78..caaf66182a 100644 --- a/platform/features/plot/test/PlotOptionsControllerSpec.js +++ b/platform/features/plot/test/PlotOptionsControllerSpec.js @@ -32,7 +32,6 @@ define( mockCompositionCapability, mockComposition, mockUnlisten, - mockFormUnlisten, mockChildOne, mockChildTwo, model, diff --git a/platform/features/plot/test/PlotOptionsFormSpec.js b/platform/features/plot/test/PlotOptionsFormSpec.js index 6ee5a25ac6..bb35d532f4 100644 --- a/platform/features/plot/test/PlotOptionsFormSpec.js +++ b/platform/features/plot/test/PlotOptionsFormSpec.js @@ -25,8 +25,7 @@ define( function (PlotOptionsForm) { describe("The Plot Options form", function () { - var plotOptionsForm, - listener; + var plotOptionsForm; beforeEach(function () { diff --git a/platform/features/plot/test/elements/PlotLimitTrackerSpec.js b/platform/features/plot/test/elements/PlotLimitTrackerSpec.js index 3e080b9e87..d37507c628 100644 --- a/platform/features/plot/test/elements/PlotLimitTrackerSpec.js +++ b/platform/features/plot/test/elements/PlotLimitTrackerSpec.js @@ -29,7 +29,6 @@ define( testRange, mockTelemetryObjects, testData, - mockLimitCapabilities, tracker; beforeEach(function () { diff --git a/platform/features/plot/test/elements/PlotPreparerSpec.js b/platform/features/plot/test/elements/PlotPreparerSpec.js index fd0535bd91..414c3b56e1 100644 --- a/platform/features/plot/test/elements/PlotPreparerSpec.js +++ b/platform/features/plot/test/elements/PlotPreparerSpec.js @@ -61,6 +61,8 @@ define( var datas = [makeMockData(1)], preparer = new PlotPreparer(datas, "testDomain", "testRange"); + expect(preparer).toBeDefined(); + expect(datas[0].getDomainValue).toHaveBeenCalledWith( jasmine.any(Number), "testDomain" diff --git a/platform/features/plot/test/modes/PlotOverlayModeSpec.js b/platform/features/plot/test/modes/PlotOverlayModeSpec.js index 2f86c0e11e..0560d428f7 100644 --- a/platform/features/plot/test/modes/PlotOverlayModeSpec.js +++ b/platform/features/plot/test/modes/PlotOverlayModeSpec.js @@ -30,20 +30,11 @@ define( describe("Overlaid plot mode", function () { var mockDomainObject, mockSubPlotFactory, - mockSubPlot, mockPrepared, testBuffers, testDrawingObjects, mode; - function mockElement(x, y, w, h) { - return { - getBoundingClientRect: function () { - return { left: x, top: y, width: w, height: h }; - } - }; - } - function createMockSubPlot() { var mockSubPlot = jasmine.createSpyObj( "subPlot", @@ -127,7 +118,7 @@ define( mode.plotTelemetry(mockPrepared); // Should have one sub-plot with three lines - testDrawingObjects.forEach(function (testDrawingObject, i) { + testDrawingObjects.forEach(function (testDrawingObject) { // Either empty list or undefined is fine; // just want to make sure there are no lines. expect(testDrawingObject.lines.length) @@ -178,7 +169,7 @@ define( }); // Step back the same number of zoom changes - mockSubPlotFactory.createSubPlot.calls.forEach(function (c) { + mockSubPlotFactory.createSubPlot.calls.forEach(function () { // Should still be zoomed at start of each iteration expect(mode.isZoomed()).toBeTruthy(); // Step back one of the zoom changes. diff --git a/platform/features/plot/test/modes/PlotStackModeSpec.js b/platform/features/plot/test/modes/PlotStackModeSpec.js index db052dbe5c..cf4407e7e0 100644 --- a/platform/features/plot/test/modes/PlotStackModeSpec.js +++ b/platform/features/plot/test/modes/PlotStackModeSpec.js @@ -30,20 +30,11 @@ define( describe("Stacked plot mode", function () { var mockDomainObject, mockSubPlotFactory, - mockSubPlot, mockPrepared, testBuffers, testDrawingObjects, mode; - function mockElement(x, y, w, h) { - return { - getBoundingClientRect: function () { - return { left: x, top: y, width: w, height: h }; - } - }; - } - function createMockSubPlot() { var mockSubPlot = jasmine.createSpyObj( "subPlot", @@ -172,7 +163,7 @@ define( }); // Step back the same number of zoom changes - mockSubPlotFactory.createSubPlot.calls.forEach(function (c) { + mockSubPlotFactory.createSubPlot.calls.forEach(function () { // Should still be zoomed at start of each iteration expect(mode.isZoomed()).toBeTruthy(); // Step back diff --git a/platform/features/table/test/controllers/MCTTableControllerSpec.js b/platform/features/table/test/controllers/MCTTableControllerSpec.js index f9c7ff50c7..4fe4be7df3 100644 --- a/platform/features/table/test/controllers/MCTTableControllerSpec.js +++ b/platform/features/table/test/controllers/MCTTableControllerSpec.js @@ -34,14 +34,6 @@ define( mockTimeout, mockElement; - function promise(value) { - return { - then: function (callback){ - return promise(callback(value)); - } - }; - } - beforeEach(function() { watches = {}; diff --git a/platform/features/table/test/controllers/TableOptionsControllerSpec.js b/platform/features/table/test/controllers/TableOptionsControllerSpec.js index 7976aecafd..4838f2e6ac 100644 --- a/platform/features/table/test/controllers/TableOptionsControllerSpec.js +++ b/platform/features/table/test/controllers/TableOptionsControllerSpec.js @@ -32,14 +32,6 @@ define( controller, mockScope; - function promise(value) { - return { - then: function (callback){ - return promise(callback(value)); - } - }; - } - beforeEach(function() { mockCapability = jasmine.createSpyObj('mutationCapability', [ 'listen' diff --git a/platform/features/table/test/controllers/TelemetryTableControllerSpec.js b/platform/features/table/test/controllers/TelemetryTableControllerSpec.js index 548e0ea733..91e6a05315 100644 --- a/platform/features/table/test/controllers/TelemetryTableControllerSpec.js +++ b/platform/features/table/test/controllers/TelemetryTableControllerSpec.js @@ -130,8 +130,6 @@ define( it('to create column configuration, which is written to the' + ' object model', function() { - var mockModel = {}; - controller.setup(); expect(mockTable.getColumnConfiguration).toHaveBeenCalled(); expect(mockTable.saveColumnConfiguration).toHaveBeenCalled(); diff --git a/platform/features/timeline/test/directives/MCTSwimlaneDropSpec.js b/platform/features/timeline/test/directives/MCTSwimlaneDropSpec.js index 0ae16394a0..60891567cc 100644 --- a/platform/features/timeline/test/directives/MCTSwimlaneDropSpec.js +++ b/platform/features/timeline/test/directives/MCTSwimlaneDropSpec.js @@ -33,7 +33,6 @@ define( mockElement, testAttrs, mockSwimlane, - mockRealElement, testEvent, handlers, directive; diff --git a/platform/forms/test/MCTFormSpec.js b/platform/forms/test/MCTFormSpec.js index 7b5563f6ae..0be985212e 100644 --- a/platform/forms/test/MCTFormSpec.js +++ b/platform/forms/test/MCTFormSpec.js @@ -29,8 +29,7 @@ define( mctForm; function installController() { - var controllerProperty = mctForm.controller, - Controller = mctForm.controller[1]; + var Controller = mctForm.controller[1]; return new Controller(mockScope); } diff --git a/platform/identity/test/IdentityAggregatorSpec.js b/platform/identity/test/IdentityAggregatorSpec.js index 242ff95eca..c61e8b805b 100644 --- a/platform/identity/test/IdentityAggregatorSpec.js +++ b/platform/identity/test/IdentityAggregatorSpec.js @@ -28,7 +28,6 @@ define( var mockProviders, mockQ, resolves, - mockPromise, mockCallback, testUsers, aggregator; diff --git a/platform/persistence/queue/test/PersistenceFailureHandlerSpec.js b/platform/persistence/queue/test/PersistenceFailureHandlerSpec.js index e6a5f9cc27..7bb0fe8a04 100644 --- a/platform/persistence/queue/test/PersistenceFailureHandlerSpec.js +++ b/platform/persistence/queue/test/PersistenceFailureHandlerSpec.js @@ -104,7 +104,7 @@ define( // User chooses overwrite mockPromise.then.mostRecentCall.args[0](false); // Should refresh, but not remutate, and requeue all objects - mockFailures.forEach(function (mockFailure, i) { + mockFailures.forEach(function (mockFailure) { expect(mockFailure.persistence.refresh).toHaveBeenCalled(); expect(mockFailure.requeue).not.toHaveBeenCalled(); expect(mockFailure.domainObject.useCapability).not.toHaveBeenCalled(); diff --git a/platform/policy/test/PolicyActionDecoratorSpec.js b/platform/policy/test/PolicyActionDecoratorSpec.js index a098d508e4..fb9c7b6724 100644 --- a/platform/policy/test/PolicyActionDecoratorSpec.js +++ b/platform/policy/test/PolicyActionDecoratorSpec.js @@ -86,7 +86,7 @@ define( it("filters out policy-disallowed actions", function () { // Disallow the second action - mockPolicyService.allow.andCallFake(function (cat, candidate, ctxt) { + mockPolicyService.allow.andCallFake(function (cat, candidate) { return candidate.someKey !== 'b'; }); expect(decorator.getActions(testContext)) diff --git a/platform/policy/test/PolicyViewDecoratorSpec.js b/platform/policy/test/PolicyViewDecoratorSpec.js index 30829f46ce..91e86e9bd1 100644 --- a/platform/policy/test/PolicyViewDecoratorSpec.js +++ b/platform/policy/test/PolicyViewDecoratorSpec.js @@ -90,7 +90,7 @@ define( it("filters out policy-disallowed views", function () { // Disallow the second action - mockPolicyService.allow.andCallFake(function (cat, candidate, ctxt) { + mockPolicyService.allow.andCallFake(function (cat, candidate) { return candidate.someKey !== 'b'; }); expect(decorator.getViews(mockDomainObject)) diff --git a/platform/representation/test/actions/ContextMenuActionSpec.js b/platform/representation/test/actions/ContextMenuActionSpec.js index 3af48fb3c5..bab5a311f5 100644 --- a/platform/representation/test/actions/ContextMenuActionSpec.js +++ b/platform/representation/test/actions/ContextMenuActionSpec.js @@ -25,12 +25,11 @@ * Module defining ContextMenuActionSpec. Created by shale on 07/02/2015. */ define( - ["../../src/actions/ContextMenuAction", "../../src/gestures/GestureConstants"], - function (ContextMenuAction, GestureConstants) { + ["../../src/actions/ContextMenuAction"], + function (ContextMenuAction) { var JQLITE_FUNCTIONS = [ "on", "off", "find", "append", "remove" ], - DOMAIN_OBJECT_METHODS = [ "getId", "getModel", "getCapability", "hasCapability", "useCapability" ], - MENU_DIMENSIONS = GestureConstants.MCT_MENU_DIMENSIONS; + DOMAIN_OBJECT_METHODS = [ "getId", "getModel", "getCapability", "hasCapability", "useCapability" ]; describe("The 'context menu' action", function () { diff --git a/platform/representation/test/gestures/GestureRepresenterSpec.js b/platform/representation/test/gestures/GestureRepresenterSpec.js index ceffa2e734..f66696ed99 100644 --- a/platform/representation/test/gestures/GestureRepresenterSpec.js +++ b/platform/representation/test/gestures/GestureRepresenterSpec.js @@ -27,7 +27,6 @@ define( describe("A gesture representer", function () { var mockGestureService, mockGestureHandle, - mockScope, mockElement, representer; diff --git a/platform/search/test/controllers/SearchMenuControllerSpec.js b/platform/search/test/controllers/SearchMenuControllerSpec.js index 1c0949a67c..bff6dab569 100644 --- a/platform/search/test/controllers/SearchMenuControllerSpec.js +++ b/platform/search/test/controllers/SearchMenuControllerSpec.js @@ -29,7 +29,6 @@ define( describe("The search menu controller", function () { var mockScope, - mockPromise, mockTypes, controller; diff --git a/platform/telemetry/test/TelemetryDelegatorSpec.js b/platform/telemetry/test/TelemetryDelegatorSpec.js index 5c5897cf30..0841020449 100644 --- a/platform/telemetry/test/TelemetryDelegatorSpec.js +++ b/platform/telemetry/test/TelemetryDelegatorSpec.js @@ -25,7 +25,11 @@ define( function (TelemetryDelegator) { describe("The telemetry delegator", function () { + var delegator; + beforeEach(function () { + delegator = new TelemetryDelegator(); + }); }); } ); From 8b5a425da6eebb47fd0596c3b2f7601880c77daa Mon Sep 17 00:00:00 2001 From: Victor Woeltjen Date: Fri, 4 Mar 2016 13:03:41 -0800 Subject: [PATCH 036/132] [Build] Restore erroneously-removed variable --- platform/core/test/types/TypeProviderSpec.js | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/platform/core/test/types/TypeProviderSpec.js b/platform/core/test/types/TypeProviderSpec.js index 3f687764d3..d876c9fa08 100644 --- a/platform/core/test/types/TypeProviderSpec.js +++ b/platform/core/test/types/TypeProviderSpec.js @@ -26,7 +26,8 @@ define( describe("Type provider", function () { - var testTypeDefinitions = [ + var captured = {}, + testTypeDefinitions = [ { key: 'basic', glyph: "X", From fb56b3ad56f4cdc628e46d80a42d288f9a3a0ef2 Mon Sep 17 00:00:00 2001 From: Victor Woeltjen Date: Fri, 4 Mar 2016 13:04:06 -0800 Subject: [PATCH 037/132] [Build] Enable forin check for JSHint --- gulpfile.js | 1 + 1 file changed, 1 insertion(+) diff --git a/gulpfile.js b/gulpfile.js index d319738002..80a668b87c 100644 --- a/gulpfile.js +++ b/gulpfile.js @@ -63,6 +63,7 @@ var gulp = require('gulp'), "browser": true, "curly": true, "eqeqeq": true, + "forin": true, "freeze": true, "funcscope": true, "futurehostile": true, From 134452582c5c1c8e9c0d4dc150609b8b3fa2c8ca Mon Sep 17 00:00:00 2001 From: Victor Woeltjen Date: Fri, 4 Mar 2016 13:10:23 -0800 Subject: [PATCH 038/132] [Build] Remove/qualify for-in usages --- .../capabilities/EditableLookupCapability.js | 2 +- .../src/controllers/SearchMenuController.js | 6 ++---- .../controllers/SearchMenuControllerSpec.js | 20 +++++++------------ 3 files changed, 10 insertions(+), 18 deletions(-) diff --git a/platform/commonUI/edit/src/capabilities/EditableLookupCapability.js b/platform/commonUI/edit/src/capabilities/EditableLookupCapability.js index a0c8add0c3..0abde97c5a 100644 --- a/platform/commonUI/edit/src/capabilities/EditableLookupCapability.js +++ b/platform/commonUI/edit/src/capabilities/EditableLookupCapability.js @@ -24,7 +24,7 @@ define( [], function () { - + /*jshint forin:false */ /** * Wrapper for both "context" and "composition" capabilities; * ensures that any domain objects reachable in Edit mode diff --git a/platform/search/src/controllers/SearchMenuController.js b/platform/search/src/controllers/SearchMenuController.js index 154f746a53..2f369929ab 100644 --- a/platform/search/src/controllers/SearchMenuController.js +++ b/platform/search/src/controllers/SearchMenuController.js @@ -90,12 +90,10 @@ define(function () { // For documentation, see checkAll below function checkAll() { - var type; - // Reset all the other options to original/default position - for (type in $scope.ngModel.checked) { + Object.keys($scope.ngModel.checked).forEach(function (type) { $scope.ngModel.checked[type] = false; - } + }); // Change the filters string depending on checkAll status if ($scope.ngModel.checkAll) { diff --git a/platform/search/test/controllers/SearchMenuControllerSpec.js b/platform/search/test/controllers/SearchMenuControllerSpec.js index bff6dab569..68f8930431 100644 --- a/platform/search/test/controllers/SearchMenuControllerSpec.js +++ b/platform/search/test/controllers/SearchMenuControllerSpec.js @@ -87,24 +87,20 @@ define( }); it("checking checkAll option resets other options", function () { - var type; - mockScope.ngModel.checked['mock.type.1'] = true; mockScope.ngModel.checked['mock.type.2'] = true; controller.checkAll(); - - for (type in mockScope.ngModel.checked) { + + Object.keys(mockScope.ngModel.checked).forEach(function (type) { expect(mockScope.ngModel.checked[type]).toBeFalsy(); - } + }); }); it("tells the user when no options are checked", function () { - var type; - - for (type in mockScope.ngModel.checked) { + Object.keys(mockScope.ngModel.checked).forEach(function (type) { mockScope.ngModel.checked[type] = false; - } + }); mockScope.ngModel.checkAll = false; controller.updateOptions(); @@ -113,12 +109,10 @@ define( }); it("tells the user when options are checked", function () { - var type; - mockScope.ngModel.checkAll = false; - for (type in mockScope.ngModel.checked) { + Object.keys(mockScope.ngModel.checked).forEach(function (type) { mockScope.ngModel.checked[type] = true; - } + }); controller.updateOptions(); From 22be6bc86027180ad0a8ed996a25f45604840554 Mon Sep 17 00:00:00 2001 From: Victor Woeltjen Date: Fri, 4 Mar 2016 16:16:35 -0800 Subject: [PATCH 039/132] [Build] Run lint task from CircleCI https://github.com/nasa/openmctweb/pull/724#issuecomment-192487995 --- circle.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/circle.yml b/circle.yml index d163b3ee0c..e2f670e899 100644 --- a/circle.yml +++ b/circle.yml @@ -15,4 +15,4 @@ deployment: appname: openmctweb-staging-deux test: post: - - npm run jshint --silent + - gulp lint From 50884537125d743259b30d95f7ffa69d713f2b6c Mon Sep 17 00:00:00 2001 From: Victor Woeltjen Date: Fri, 8 Apr 2016 16:11:12 -0700 Subject: [PATCH 040/132] [Build] Remove use strict, global Remove usages of use strict and global declarations that are no longer necessary with JSHint configuration, from files added/changed since #724 --- platform/commonUI/edit/src/policies/EditableLinkPolicy.js | 2 -- platform/commonUI/general/src/ui/TreeLabelView.js | 2 -- platform/commonUI/general/src/ui/TreeNodeView.js | 2 -- platform/commonUI/general/src/ui/TreeView.js | 2 -- platform/commonUI/general/test/directives/MCTTreeSpec.js | 1 - platform/commonUI/general/test/ui/TreeViewSpec.js | 2 -- platform/core/src/models/ModelCacheService.js | 2 -- platform/core/test/models/ModelCacheServiceSpec.js | 2 -- platform/entanglement/src/policies/CopyPolicy.js | 2 -- platform/entanglement/src/policies/MovePolicy.js | 2 -- platform/entanglement/test/ControlledPromise.js | 1 - platform/entanglement/test/DomainObjectFactory.js | 1 - platform/entanglement/test/policies/CopyPolicySpec.js | 2 -- platform/entanglement/test/policies/MovePolicySpec.js | 2 -- platform/entanglement/test/services/MockCopyService.js | 1 - platform/entanglement/test/services/MockLinkService.js | 1 - platform/entanglement/test/services/MockMoveService.js | 1 - platform/features/conductor/test/TestTimeConductor.js | 1 - .../table/src/controllers/RTTelemetryTableController.js | 2 -- .../table/test/controllers/RTTelemetryTableControllerSpec.js | 2 -- platform/features/timeline/src/actions/CompositionColumn.js | 2 -- .../features/timeline/src/actions/ExportTimelineAsCSVAction.js | 2 -- .../features/timeline/src/actions/ExportTimelineAsCSVTask.js | 2 -- platform/features/timeline/src/actions/IdColumn.js | 2 -- platform/features/timeline/src/actions/MetadataColumn.js | 2 -- platform/features/timeline/src/actions/ModeColumn.js | 2 -- platform/features/timeline/src/actions/TimelineColumnizer.js | 2 -- platform/features/timeline/src/actions/TimelineTraverser.js | 2 -- platform/features/timeline/src/actions/TimespanColumn.js | 2 -- .../features/timeline/test/actions/CompositionColumnSpec.js | 1 - .../timeline/test/actions/ExportTimelineAsCSVActionSpec.js | 1 - .../timeline/test/actions/ExportTimelineAsCSVTaskSpec.js | 2 -- platform/features/timeline/test/actions/IdColumnSpec.js | 1 - platform/features/timeline/test/actions/MetadataColumnSpec.js | 1 - platform/features/timeline/test/actions/ModeColumnSpec.js | 1 - .../features/timeline/test/actions/TimelineColumnizerSpec.js | 1 - .../features/timeline/test/actions/TimelineTraverserSpec.js | 2 -- platform/features/timeline/test/actions/TimespanColumnSpec.js | 1 - platform/framework/src/FrameworkLayer.js | 1 - platform/framework/src/Main.js | 1 - platform/search/src/services/GenericSearchWorker.js | 1 - platform/search/test/services/GenericSearchWorkerSpec.js | 1 - 42 files changed, 66 deletions(-) diff --git a/platform/commonUI/edit/src/policies/EditableLinkPolicy.js b/platform/commonUI/edit/src/policies/EditableLinkPolicy.js index ad3043df2d..c311266cf8 100644 --- a/platform/commonUI/edit/src/policies/EditableLinkPolicy.js +++ b/platform/commonUI/edit/src/policies/EditableLinkPolicy.js @@ -19,10 +19,8 @@ * this source code distribution or the Licensing information page available * at runtime from the About dialog for additional information. *****************************************************************************/ -/*global define*/ define([], function () { - "use strict"; /** * Policy suppressing links when the linked-to domain object is in diff --git a/platform/commonUI/general/src/ui/TreeLabelView.js b/platform/commonUI/general/src/ui/TreeLabelView.js index 75e8efcc29..d5dffb0068 100644 --- a/platform/commonUI/general/src/ui/TreeLabelView.js +++ b/platform/commonUI/general/src/ui/TreeLabelView.js @@ -19,13 +19,11 @@ * this source code distribution or the Licensing information page available * at runtime from the About dialog for additional information. *****************************************************************************/ -/*global define*/ define([ 'zepto', 'text!../../res/templates/tree/tree-label.html' ], function ($, labelTemplate) { - 'use strict'; function TreeLabelView(gestureService) { this.el = $(labelTemplate); diff --git a/platform/commonUI/general/src/ui/TreeNodeView.js b/platform/commonUI/general/src/ui/TreeNodeView.js index 14ff0f3233..2cff198e76 100644 --- a/platform/commonUI/general/src/ui/TreeNodeView.js +++ b/platform/commonUI/general/src/ui/TreeNodeView.js @@ -19,7 +19,6 @@ * this source code distribution or the Licensing information page available * at runtime from the About dialog for additional information. *****************************************************************************/ -/*global define*/ define([ 'zepto', @@ -27,7 +26,6 @@ define([ './ToggleView', './TreeLabelView' ], function ($, nodeTemplate, ToggleView, TreeLabelView) { - 'use strict'; function TreeNodeView(gestureService, subtreeFactory, selectFn) { this.li = $('
  • '); diff --git a/platform/commonUI/general/src/ui/TreeView.js b/platform/commonUI/general/src/ui/TreeView.js index b1b394ae4c..da0bed7091 100644 --- a/platform/commonUI/general/src/ui/TreeView.js +++ b/platform/commonUI/general/src/ui/TreeView.js @@ -19,14 +19,12 @@ * this source code distribution or the Licensing information page available * at runtime from the About dialog for additional information. *****************************************************************************/ -/*global define*/ define([ 'zepto', './TreeNodeView', 'text!../../res/templates/tree/wait-node.html' ], function ($, TreeNodeView, spinnerTemplate) { - 'use strict'; function TreeView(gestureService, selectFn) { this.ul = $('
      '); diff --git a/platform/commonUI/general/test/directives/MCTTreeSpec.js b/platform/commonUI/general/test/directives/MCTTreeSpec.js index 597c4c55b7..80854685e6 100644 --- a/platform/commonUI/general/test/directives/MCTTreeSpec.js +++ b/platform/commonUI/general/test/directives/MCTTreeSpec.js @@ -19,7 +19,6 @@ * this source code distribution or the Licensing information page available * at runtime from the About dialog for additional information. *****************************************************************************/ -/*global define,describe,beforeEach,jasmine,it,expect*/ define([ '../../src/directives/MCTTree' diff --git a/platform/commonUI/general/test/ui/TreeViewSpec.js b/platform/commonUI/general/test/ui/TreeViewSpec.js index eae4d3eafd..7d28ae32a6 100644 --- a/platform/commonUI/general/test/ui/TreeViewSpec.js +++ b/platform/commonUI/general/test/ui/TreeViewSpec.js @@ -19,13 +19,11 @@ * this source code distribution or the Licensing information page available * at runtime from the About dialog for additional information. *****************************************************************************/ -/*global define,describe,beforeEach,jasmine,it,expect*/ define([ '../../src/ui/TreeView', 'zepto' ], function (TreeView, $) { - 'use strict'; describe("TreeView", function () { var mockGestureService, diff --git a/platform/core/src/models/ModelCacheService.js b/platform/core/src/models/ModelCacheService.js index 4bcee0b93d..0e6a196dbc 100644 --- a/platform/core/src/models/ModelCacheService.js +++ b/platform/core/src/models/ModelCacheService.js @@ -19,10 +19,8 @@ * this source code distribution or the Licensing information page available * at runtime from the About dialog for additional information. *****************************************************************************/ -/*global define*/ define([], function () { - 'use strict'; /** * Provides a cache for domain object models which exist in memory, diff --git a/platform/core/test/models/ModelCacheServiceSpec.js b/platform/core/test/models/ModelCacheServiceSpec.js index f8254779ab..23d1a0ce0d 100644 --- a/platform/core/test/models/ModelCacheServiceSpec.js +++ b/platform/core/test/models/ModelCacheServiceSpec.js @@ -19,10 +19,8 @@ * this source code distribution or the Licensing information page available * at runtime from the About dialog for additional information. *****************************************************************************/ -/*global define,Promise,describe,it,expect,beforeEach,waitsFor,jasmine*/ define(['../../src/models/ModelCacheService'], function (ModelCacheService) { - 'use strict'; describe("ModelCacheService", function () { var testIds, testModels, diff --git a/platform/entanglement/src/policies/CopyPolicy.js b/platform/entanglement/src/policies/CopyPolicy.js index 09fe424540..dae3066111 100644 --- a/platform/entanglement/src/policies/CopyPolicy.js +++ b/platform/entanglement/src/policies/CopyPolicy.js @@ -20,9 +20,7 @@ * at runtime from the About dialog for additional information. *****************************************************************************/ -/*global define */ define([], function () { - 'use strict'; /** * Disallow duplication when the object to be duplicated is not diff --git a/platform/entanglement/src/policies/MovePolicy.js b/platform/entanglement/src/policies/MovePolicy.js index 064b6b7192..0c395f9302 100644 --- a/platform/entanglement/src/policies/MovePolicy.js +++ b/platform/entanglement/src/policies/MovePolicy.js @@ -20,9 +20,7 @@ * at runtime from the About dialog for additional information. *****************************************************************************/ -/*global define */ define([], function () { - 'use strict'; /** * Disallow moves when either the parent or the child are not diff --git a/platform/entanglement/test/ControlledPromise.js b/platform/entanglement/test/ControlledPromise.js index 0b3fcd6cf6..2f1c99ed84 100644 --- a/platform/entanglement/test/ControlledPromise.js +++ b/platform/entanglement/test/ControlledPromise.js @@ -19,7 +19,6 @@ * this source code distribution or the Licensing information page available * at runtime from the About dialog for additional information. *****************************************************************************/ -/*global spyOn*/ define( function () { diff --git a/platform/entanglement/test/DomainObjectFactory.js b/platform/entanglement/test/DomainObjectFactory.js index 4a11667084..e9ef03c021 100644 --- a/platform/entanglement/test/DomainObjectFactory.js +++ b/platform/entanglement/test/DomainObjectFactory.js @@ -20,7 +20,6 @@ * at runtime from the About dialog for additional information. *****************************************************************************/ -/*global jasmine*/ define( function () { diff --git a/platform/entanglement/test/policies/CopyPolicySpec.js b/platform/entanglement/test/policies/CopyPolicySpec.js index b53f4d22ed..88eeaec8d8 100644 --- a/platform/entanglement/test/policies/CopyPolicySpec.js +++ b/platform/entanglement/test/policies/CopyPolicySpec.js @@ -20,12 +20,10 @@ * at runtime from the About dialog for additional information. *****************************************************************************/ -/*global define,describe,beforeEach,it,jasmine,expect,spyOn */ define([ '../../src/policies/CopyPolicy', '../DomainObjectFactory' ], function (CopyPolicy, domainObjectFactory) { - 'use strict'; describe("CopyPolicy", function () { var testMetadata, diff --git a/platform/entanglement/test/policies/MovePolicySpec.js b/platform/entanglement/test/policies/MovePolicySpec.js index d55ad3c697..ab19731a60 100644 --- a/platform/entanglement/test/policies/MovePolicySpec.js +++ b/platform/entanglement/test/policies/MovePolicySpec.js @@ -20,12 +20,10 @@ * at runtime from the About dialog for additional information. *****************************************************************************/ -/*global define,describe,beforeEach,it,jasmine,expect,spyOn */ define([ '../../src/policies/MovePolicy', '../DomainObjectFactory' ], function (MovePolicy, domainObjectFactory) { - 'use strict'; describe("MovePolicy", function () { var testMetadata, diff --git a/platform/entanglement/test/services/MockCopyService.js b/platform/entanglement/test/services/MockCopyService.js index cf986bec7e..2ba49b53b9 100644 --- a/platform/entanglement/test/services/MockCopyService.js +++ b/platform/entanglement/test/services/MockCopyService.js @@ -20,7 +20,6 @@ * at runtime from the About dialog for additional information. *****************************************************************************/ -/*global jasmine*/ define( function () { diff --git a/platform/entanglement/test/services/MockLinkService.js b/platform/entanglement/test/services/MockLinkService.js index 5345efc86e..5c583783c8 100644 --- a/platform/entanglement/test/services/MockLinkService.js +++ b/platform/entanglement/test/services/MockLinkService.js @@ -20,7 +20,6 @@ * at runtime from the About dialog for additional information. *****************************************************************************/ -/*global jasmine*/ define( [ '../ControlledPromise' diff --git a/platform/entanglement/test/services/MockMoveService.js b/platform/entanglement/test/services/MockMoveService.js index d5a290c03f..1eccad53c0 100644 --- a/platform/entanglement/test/services/MockMoveService.js +++ b/platform/entanglement/test/services/MockMoveService.js @@ -20,7 +20,6 @@ * at runtime from the About dialog for additional information. *****************************************************************************/ -/*global jasmine*/ define( function () { diff --git a/platform/features/conductor/test/TestTimeConductor.js b/platform/features/conductor/test/TestTimeConductor.js index 52ffb773d4..2a0fe7a7a8 100644 --- a/platform/features/conductor/test/TestTimeConductor.js +++ b/platform/features/conductor/test/TestTimeConductor.js @@ -20,7 +20,6 @@ * at runtime from the About dialog for additional information. *****************************************************************************/ -/*global spyOn*/ define( ["../src/TimeConductor"], function (TimeConductor) { diff --git a/platform/features/table/src/controllers/RTTelemetryTableController.js b/platform/features/table/src/controllers/RTTelemetryTableController.js index 8a61d61b5e..6ae7f3b578 100644 --- a/platform/features/table/src/controllers/RTTelemetryTableController.js +++ b/platform/features/table/src/controllers/RTTelemetryTableController.js @@ -19,14 +19,12 @@ * this source code distribution or the Licensing information page available * at runtime from the About dialog for additional information. *****************************************************************************/ -/*global define*/ define( [ './TelemetryTableController' ], function (TableController) { - "use strict"; /** * Extends TelemetryTableController and adds real-time streaming diff --git a/platform/features/table/test/controllers/RTTelemetryTableControllerSpec.js b/platform/features/table/test/controllers/RTTelemetryTableControllerSpec.js index 59911d1771..cf6421c9a5 100644 --- a/platform/features/table/test/controllers/RTTelemetryTableControllerSpec.js +++ b/platform/features/table/test/controllers/RTTelemetryTableControllerSpec.js @@ -19,14 +19,12 @@ * this source code distribution or the Licensing information page available * at runtime from the About dialog for additional information. *****************************************************************************/ -/*global define,describe,it,expect,beforeEach,waitsFor,jasmine,xit*/ define( [ "../../src/controllers/RTTelemetryTableController" ], function (TableController) { - "use strict"; describe('The real-time table controller', function () { var mockScope, diff --git a/platform/features/timeline/src/actions/CompositionColumn.js b/platform/features/timeline/src/actions/CompositionColumn.js index b7208c3e92..f9bede9983 100644 --- a/platform/features/timeline/src/actions/CompositionColumn.js +++ b/platform/features/timeline/src/actions/CompositionColumn.js @@ -19,10 +19,8 @@ * this source code distribution or the Licensing information page available * at runtime from the About dialog for additional information. *****************************************************************************/ -/*global define*/ define([], function () { - "use strict"; /** * A column containing references to other objects contained diff --git a/platform/features/timeline/src/actions/ExportTimelineAsCSVAction.js b/platform/features/timeline/src/actions/ExportTimelineAsCSVAction.js index 387c0839a0..7b7754e720 100644 --- a/platform/features/timeline/src/actions/ExportTimelineAsCSVAction.js +++ b/platform/features/timeline/src/actions/ExportTimelineAsCSVAction.js @@ -19,10 +19,8 @@ * this source code distribution or the Licensing information page available * at runtime from the About dialog for additional information. *****************************************************************************/ -/*global define*/ define(["./ExportTimelineAsCSVTask"], function (ExportTimelineAsCSVTask) { - 'use strict'; /** * Implements the "Export Timeline as CSV" action. diff --git a/platform/features/timeline/src/actions/ExportTimelineAsCSVTask.js b/platform/features/timeline/src/actions/ExportTimelineAsCSVTask.js index 253db5c8b9..b8d796b3c4 100644 --- a/platform/features/timeline/src/actions/ExportTimelineAsCSVTask.js +++ b/platform/features/timeline/src/actions/ExportTimelineAsCSVTask.js @@ -19,7 +19,6 @@ * this source code distribution or the Licensing information page available * at runtime from the About dialog for additional information. *****************************************************************************/ -/*global define,Promise*/ /** * Module defining ExportTimelineAsCSVTask. Created by vwoeltje on 2/8/16. @@ -28,7 +27,6 @@ define([ "./TimelineTraverser", "./TimelineColumnizer" ], function (TimelineTraverser, TimelineColumnizer) { - "use strict"; /** * Runs (and coordinates) the preparation and export of CSV data diff --git a/platform/features/timeline/src/actions/IdColumn.js b/platform/features/timeline/src/actions/IdColumn.js index 56ddfe385f..38c8b9264e 100644 --- a/platform/features/timeline/src/actions/IdColumn.js +++ b/platform/features/timeline/src/actions/IdColumn.js @@ -19,10 +19,8 @@ * this source code distribution or the Licensing information page available * at runtime from the About dialog for additional information. *****************************************************************************/ -/*global define*/ define([], function () { - "use strict"; /** * A column showing domain object identifiers. diff --git a/platform/features/timeline/src/actions/MetadataColumn.js b/platform/features/timeline/src/actions/MetadataColumn.js index c94237a917..7676552879 100644 --- a/platform/features/timeline/src/actions/MetadataColumn.js +++ b/platform/features/timeline/src/actions/MetadataColumn.js @@ -19,10 +19,8 @@ * this source code distribution or the Licensing information page available * at runtime from the About dialog for additional information. *****************************************************************************/ -/*global define*/ define([], function () { - "use strict"; /** * A column reflecting properties from domain object metadata. diff --git a/platform/features/timeline/src/actions/ModeColumn.js b/platform/features/timeline/src/actions/ModeColumn.js index 4ae61b30d3..fe2063566d 100644 --- a/platform/features/timeline/src/actions/ModeColumn.js +++ b/platform/features/timeline/src/actions/ModeColumn.js @@ -19,10 +19,8 @@ * this source code distribution or the Licensing information page available * at runtime from the About dialog for additional information. *****************************************************************************/ -/*global define*/ define([], function () { - "use strict"; /** * A column showing relationships to activity modes. diff --git a/platform/features/timeline/src/actions/TimelineColumnizer.js b/platform/features/timeline/src/actions/TimelineColumnizer.js index 3069bd8b96..f24fa20eee 100644 --- a/platform/features/timeline/src/actions/TimelineColumnizer.js +++ b/platform/features/timeline/src/actions/TimelineColumnizer.js @@ -19,7 +19,6 @@ * this source code distribution or the Licensing information page available * at runtime from the About dialog for additional information. *****************************************************************************/ -/*global define,Promise*/ define([ "./IdColumn", @@ -34,7 +33,6 @@ define([ MetadataColumn, TimespanColumn ) { - 'use strict'; /** * A description of how to populate a given column within a diff --git a/platform/features/timeline/src/actions/TimelineTraverser.js b/platform/features/timeline/src/actions/TimelineTraverser.js index f6857658fb..f38d0e3489 100644 --- a/platform/features/timeline/src/actions/TimelineTraverser.js +++ b/platform/features/timeline/src/actions/TimelineTraverser.js @@ -19,10 +19,8 @@ * this source code distribution or the Licensing information page available * at runtime from the About dialog for additional information. *****************************************************************************/ -/*global define,Promise*/ define([], function () { - "use strict"; /** * Builds a list of domain objects which should be included diff --git a/platform/features/timeline/src/actions/TimespanColumn.js b/platform/features/timeline/src/actions/TimespanColumn.js index 6d0c4e05a9..a701724ee1 100644 --- a/platform/features/timeline/src/actions/TimespanColumn.js +++ b/platform/features/timeline/src/actions/TimespanColumn.js @@ -19,10 +19,8 @@ * this source code distribution or the Licensing information page available * at runtime from the About dialog for additional information. *****************************************************************************/ -/*global define*/ define(['../TimelineFormatter'], function (TimelineFormatter) { - "use strict"; var FORMATTER = new TimelineFormatter(); diff --git a/platform/features/timeline/test/actions/CompositionColumnSpec.js b/platform/features/timeline/test/actions/CompositionColumnSpec.js index 99e23d5597..87377a856f 100644 --- a/platform/features/timeline/test/actions/CompositionColumnSpec.js +++ b/platform/features/timeline/test/actions/CompositionColumnSpec.js @@ -19,7 +19,6 @@ * this source code distribution or the Licensing information page available * at runtime from the About dialog for additional information. *****************************************************************************/ -/*global define,describe,it,expect,beforeEach,waitsFor,jasmine,window,afterEach*/ define( ['../../src/actions/CompositionColumn'], diff --git a/platform/features/timeline/test/actions/ExportTimelineAsCSVActionSpec.js b/platform/features/timeline/test/actions/ExportTimelineAsCSVActionSpec.js index 3d5cd8b01c..7250fd2621 100644 --- a/platform/features/timeline/test/actions/ExportTimelineAsCSVActionSpec.js +++ b/platform/features/timeline/test/actions/ExportTimelineAsCSVActionSpec.js @@ -19,7 +19,6 @@ * this source code distribution or the Licensing information page available * at runtime from the About dialog for additional information. *****************************************************************************/ -/*global define,describe,it,expect,beforeEach,waitsFor,jasmine,window,afterEach*/ define( ['../../src/actions/ExportTimelineAsCSVAction'], diff --git a/platform/features/timeline/test/actions/ExportTimelineAsCSVTaskSpec.js b/platform/features/timeline/test/actions/ExportTimelineAsCSVTaskSpec.js index 7979104ee5..d9c6ca3c6e 100644 --- a/platform/features/timeline/test/actions/ExportTimelineAsCSVTaskSpec.js +++ b/platform/features/timeline/test/actions/ExportTimelineAsCSVTaskSpec.js @@ -19,12 +19,10 @@ * this source code distribution or the Licensing information page available * at runtime from the About dialog for additional information. *****************************************************************************/ -/*global define,describe,it,expect,beforeEach,waitsFor,jasmine,window,afterEach*/ define( ['../../src/actions/ExportTimelineAsCSVTask'], function (ExportTimelineAsCSVTask) { - 'use strict'; // Note that most responsibility is delegated to helper // classes, so testing here is minimal. diff --git a/platform/features/timeline/test/actions/IdColumnSpec.js b/platform/features/timeline/test/actions/IdColumnSpec.js index a12b6145a9..5aab82d11f 100644 --- a/platform/features/timeline/test/actions/IdColumnSpec.js +++ b/platform/features/timeline/test/actions/IdColumnSpec.js @@ -19,7 +19,6 @@ * this source code distribution or the Licensing information page available * at runtime from the About dialog for additional information. *****************************************************************************/ -/*global define,describe,it,expect,beforeEach,waitsFor,jasmine,window,afterEach*/ define( ['../../src/actions/IdColumn'], diff --git a/platform/features/timeline/test/actions/MetadataColumnSpec.js b/platform/features/timeline/test/actions/MetadataColumnSpec.js index ba38fc83c0..f9ff3f3d35 100644 --- a/platform/features/timeline/test/actions/MetadataColumnSpec.js +++ b/platform/features/timeline/test/actions/MetadataColumnSpec.js @@ -19,7 +19,6 @@ * this source code distribution or the Licensing information page available * at runtime from the About dialog for additional information. *****************************************************************************/ -/*global define,describe,it,expect,beforeEach,waitsFor,jasmine,window,afterEach*/ define( ['../../src/actions/MetadataColumn'], diff --git a/platform/features/timeline/test/actions/ModeColumnSpec.js b/platform/features/timeline/test/actions/ModeColumnSpec.js index ab15d696c2..1189b30ca6 100644 --- a/platform/features/timeline/test/actions/ModeColumnSpec.js +++ b/platform/features/timeline/test/actions/ModeColumnSpec.js @@ -19,7 +19,6 @@ * this source code distribution or the Licensing information page available * at runtime from the About dialog for additional information. *****************************************************************************/ -/*global define,describe,it,expect,beforeEach,waitsFor,jasmine,window,afterEach*/ define( ['../../src/actions/ModeColumn'], diff --git a/platform/features/timeline/test/actions/TimelineColumnizerSpec.js b/platform/features/timeline/test/actions/TimelineColumnizerSpec.js index 9eacf4f3b3..d47d493ca9 100644 --- a/platform/features/timeline/test/actions/TimelineColumnizerSpec.js +++ b/platform/features/timeline/test/actions/TimelineColumnizerSpec.js @@ -19,7 +19,6 @@ * this source code distribution or the Licensing information page available * at runtime from the About dialog for additional information. *****************************************************************************/ -/*global define,describe,it,expect,beforeEach,waitsFor,jasmine,window,afterEach*/ define( ['../../src/actions/TimelineColumnizer'], diff --git a/platform/features/timeline/test/actions/TimelineTraverserSpec.js b/platform/features/timeline/test/actions/TimelineTraverserSpec.js index 6962373ff9..3cec488b0d 100644 --- a/platform/features/timeline/test/actions/TimelineTraverserSpec.js +++ b/platform/features/timeline/test/actions/TimelineTraverserSpec.js @@ -19,12 +19,10 @@ * this source code distribution or the Licensing information page available * at runtime from the About dialog for additional information. *****************************************************************************/ -/*global define,describe,it,expect,beforeEach,waitsFor,jasmine,window,afterEach*/ define([ "../../src/actions/TimelineTraverser" ], function (TimelineTraverser) { - 'use strict'; describe("TimelineTraverser", function () { var testModels, diff --git a/platform/features/timeline/test/actions/TimespanColumnSpec.js b/platform/features/timeline/test/actions/TimespanColumnSpec.js index f4970b778e..5eea2a9281 100644 --- a/platform/features/timeline/test/actions/TimespanColumnSpec.js +++ b/platform/features/timeline/test/actions/TimespanColumnSpec.js @@ -19,7 +19,6 @@ * this source code distribution or the Licensing information page available * at runtime from the About dialog for additional information. *****************************************************************************/ -/*global define,describe,it,expect,beforeEach,waitsFor,jasmine,window,afterEach*/ define( ['../../src/actions/TimespanColumn', '../../src/TimelineFormatter'], diff --git a/platform/framework/src/FrameworkLayer.js b/platform/framework/src/FrameworkLayer.js index 1f8910fe15..765013adf8 100644 --- a/platform/framework/src/FrameworkLayer.js +++ b/platform/framework/src/FrameworkLayer.js @@ -20,7 +20,6 @@ * at runtime from the About dialog for additional information. *****************************************************************************/ -/*global window,requirejs*/ define([ 'require', diff --git a/platform/framework/src/Main.js b/platform/framework/src/Main.js index c468e4dbea..e1feb8b861 100644 --- a/platform/framework/src/Main.js +++ b/platform/framework/src/Main.js @@ -20,7 +20,6 @@ * at runtime from the About dialog for additional information. *****************************************************************************/ -/*global window,requirejs*/ /** * Implements the framework layer, which handles the loading of bundles diff --git a/platform/search/src/services/GenericSearchWorker.js b/platform/search/src/services/GenericSearchWorker.js index a3cd34c2e2..4575ed1b55 100644 --- a/platform/search/src/services/GenericSearchWorker.js +++ b/platform/search/src/services/GenericSearchWorker.js @@ -20,7 +20,6 @@ * at runtime from the About dialog for additional information. *****************************************************************************/ -/*global self*/ /** * Module defining GenericSearchWorker. Created by shale on 07/21/2015. diff --git a/platform/search/test/services/GenericSearchWorkerSpec.js b/platform/search/test/services/GenericSearchWorkerSpec.js index 952d2a4d58..22f0d35ac9 100644 --- a/platform/search/test/services/GenericSearchWorkerSpec.js +++ b/platform/search/test/services/GenericSearchWorkerSpec.js @@ -20,7 +20,6 @@ * at runtime from the About dialog for additional information. *****************************************************************************/ -/*global require*/ /** * SearchSpec. Created by shale on 07/31/2015. From 0b11ddbcfd6dd8c9e8ca9e859f2c010e1447d353 Mon Sep 17 00:00:00 2001 From: Victor Woeltjen Date: Fri, 8 Apr 2016 16:22:28 -0700 Subject: [PATCH 041/132] [Build] Satisfy JSHint Restore globals lost during removal due to merge, remove unused variables and use threequals in new scripts. --- platform/commonUI/general/test/ui/TreeViewSpec.js | 3 ++- platform/core/src/capabilities/PersistenceCapability.js | 1 - platform/entanglement/test/ControlledPromise.js | 1 + platform/entanglement/test/DomainObjectFactory.js | 1 + platform/entanglement/test/services/MockCopyService.js | 1 + platform/entanglement/test/services/MockLinkService.js | 1 + platform/entanglement/test/services/MockMoveService.js | 1 + platform/features/conductor/test/TestTimeConductor.js | 1 + .../features/table/src/controllers/MCTTableController.js | 7 +++---- .../table/src/controllers/TelemetryTableController.js | 2 -- platform/framework/src/FrameworkLayer.js | 1 + platform/framework/src/Main.js | 1 + platform/search/src/services/GenericSearchWorker.js | 1 + platform/search/test/services/GenericSearchWorkerSpec.js | 1 + 14 files changed, 15 insertions(+), 8 deletions(-) diff --git a/platform/commonUI/general/test/ui/TreeViewSpec.js b/platform/commonUI/general/test/ui/TreeViewSpec.js index 7d28ae32a6..e8d114b27a 100644 --- a/platform/commonUI/general/test/ui/TreeViewSpec.js +++ b/platform/commonUI/general/test/ui/TreeViewSpec.js @@ -19,6 +19,7 @@ * this source code distribution or the Licensing information page available * at runtime from the About dialog for additional information. *****************************************************************************/ +/*global define,describe,beforeEach,jasmine,it,expect*/ define([ '../../src/ui/TreeView', @@ -122,7 +123,7 @@ define([ function waitForCompositionCallback() { var calledBack = false; - testCapabilities.composition.invoke().then(function (c) { + testCapabilities.composition.invoke().then(function () { calledBack = true; }); waitsFor(function () { diff --git a/platform/core/src/capabilities/PersistenceCapability.js b/platform/core/src/capabilities/PersistenceCapability.js index a56e0bb1c9..bf8fbd9961 100644 --- a/platform/core/src/capabilities/PersistenceCapability.js +++ b/platform/core/src/capabilities/PersistenceCapability.js @@ -130,7 +130,6 @@ define( domainObject = this.domainObject, model = domainObject.getModel(), modified = model.modified, - cacheService = this.cacheService, persistenceService = this.persistenceService, persistenceFn = model.persisted !== undefined ? this.persistenceService.updateObject : diff --git a/platform/entanglement/test/ControlledPromise.js b/platform/entanglement/test/ControlledPromise.js index 2f1c99ed84..0b3fcd6cf6 100644 --- a/platform/entanglement/test/ControlledPromise.js +++ b/platform/entanglement/test/ControlledPromise.js @@ -19,6 +19,7 @@ * this source code distribution or the Licensing information page available * at runtime from the About dialog for additional information. *****************************************************************************/ +/*global spyOn*/ define( function () { diff --git a/platform/entanglement/test/DomainObjectFactory.js b/platform/entanglement/test/DomainObjectFactory.js index e9ef03c021..4a11667084 100644 --- a/platform/entanglement/test/DomainObjectFactory.js +++ b/platform/entanglement/test/DomainObjectFactory.js @@ -20,6 +20,7 @@ * at runtime from the About dialog for additional information. *****************************************************************************/ +/*global jasmine*/ define( function () { diff --git a/platform/entanglement/test/services/MockCopyService.js b/platform/entanglement/test/services/MockCopyService.js index 2ba49b53b9..cf986bec7e 100644 --- a/platform/entanglement/test/services/MockCopyService.js +++ b/platform/entanglement/test/services/MockCopyService.js @@ -20,6 +20,7 @@ * at runtime from the About dialog for additional information. *****************************************************************************/ +/*global jasmine*/ define( function () { diff --git a/platform/entanglement/test/services/MockLinkService.js b/platform/entanglement/test/services/MockLinkService.js index 5c583783c8..5345efc86e 100644 --- a/platform/entanglement/test/services/MockLinkService.js +++ b/platform/entanglement/test/services/MockLinkService.js @@ -20,6 +20,7 @@ * at runtime from the About dialog for additional information. *****************************************************************************/ +/*global jasmine*/ define( [ '../ControlledPromise' diff --git a/platform/entanglement/test/services/MockMoveService.js b/platform/entanglement/test/services/MockMoveService.js index 1eccad53c0..d5a290c03f 100644 --- a/platform/entanglement/test/services/MockMoveService.js +++ b/platform/entanglement/test/services/MockMoveService.js @@ -20,6 +20,7 @@ * at runtime from the About dialog for additional information. *****************************************************************************/ +/*global jasmine*/ define( function () { diff --git a/platform/features/conductor/test/TestTimeConductor.js b/platform/features/conductor/test/TestTimeConductor.js index 2a0fe7a7a8..52ffb773d4 100644 --- a/platform/features/conductor/test/TestTimeConductor.js +++ b/platform/features/conductor/test/TestTimeConductor.js @@ -20,6 +20,7 @@ * at runtime from the About dialog for additional information. *****************************************************************************/ +/*global spyOn*/ define( ["../src/TimeConductor"], function (TimeConductor) { diff --git a/platform/features/table/src/controllers/MCTTableController.js b/platform/features/table/src/controllers/MCTTableController.js index ace37bdfe6..34987fc15d 100644 --- a/platform/features/table/src/controllers/MCTTableController.js +++ b/platform/features/table/src/controllers/MCTTableController.js @@ -118,7 +118,7 @@ define( // Do a sequential search here. Only way of finding row is by // object equality, so array is in effect unsorted. indexInDisplayRows = this.$scope.displayRows.indexOf(row); - if (indexInDisplayRows != -1) { + if (indexInDisplayRows !== -1) { this.$scope.displayRows.splice(indexInDisplayRows, 1); this.setVisibleRows(); } @@ -160,7 +160,7 @@ define( if (this.$scope.displayRows.length < this.maxDisplayRows) { //Check whether need to resynchronize visible with display // rows (if data added) - if (this.$scope.visibleRows.length != + if (this.$scope.visibleRows.length !== this.$scope.displayRows.length){ start = 0; end = this.$scope.displayRows.length; @@ -247,8 +247,7 @@ define( * for individual rows. */ MCTTableController.prototype.setElementSizes = function () { - var self = this, - thead = this.element.find('thead'), + var thead = this.element.find('thead'), tbody = this.element.find('tbody'), firstRow = tbody.find('tr'), column = firstRow.find('td'), diff --git a/platform/features/table/src/controllers/TelemetryTableController.js b/platform/features/table/src/controllers/TelemetryTableController.js index 1954488a69..488f8dc171 100644 --- a/platform/features/table/src/controllers/TelemetryTableController.js +++ b/platform/features/table/src/controllers/TelemetryTableController.js @@ -108,8 +108,6 @@ define( only). */ TelemetryTableController.prototype.subscribe = function () { - var self = this; - if (this.handle) { this.handle.unsubscribe(); } diff --git a/platform/framework/src/FrameworkLayer.js b/platform/framework/src/FrameworkLayer.js index 765013adf8..1f8910fe15 100644 --- a/platform/framework/src/FrameworkLayer.js +++ b/platform/framework/src/FrameworkLayer.js @@ -20,6 +20,7 @@ * at runtime from the About dialog for additional information. *****************************************************************************/ +/*global window,requirejs*/ define([ 'require', diff --git a/platform/framework/src/Main.js b/platform/framework/src/Main.js index e1feb8b861..c468e4dbea 100644 --- a/platform/framework/src/Main.js +++ b/platform/framework/src/Main.js @@ -20,6 +20,7 @@ * at runtime from the About dialog for additional information. *****************************************************************************/ +/*global window,requirejs*/ /** * Implements the framework layer, which handles the loading of bundles diff --git a/platform/search/src/services/GenericSearchWorker.js b/platform/search/src/services/GenericSearchWorker.js index 4575ed1b55..a3cd34c2e2 100644 --- a/platform/search/src/services/GenericSearchWorker.js +++ b/platform/search/src/services/GenericSearchWorker.js @@ -20,6 +20,7 @@ * at runtime from the About dialog for additional information. *****************************************************************************/ +/*global self*/ /** * Module defining GenericSearchWorker. Created by shale on 07/21/2015. diff --git a/platform/search/test/services/GenericSearchWorkerSpec.js b/platform/search/test/services/GenericSearchWorkerSpec.js index 22f0d35ac9..952d2a4d58 100644 --- a/platform/search/test/services/GenericSearchWorkerSpec.js +++ b/platform/search/test/services/GenericSearchWorkerSpec.js @@ -20,6 +20,7 @@ * at runtime from the About dialog for additional information. *****************************************************************************/ +/*global require*/ /** * SearchSpec. Created by shale on 07/31/2015. From f6a9c90cef7ea0822731550886fbd63b6b8a508f Mon Sep 17 00:00:00 2001 From: Victor Woeltjen Date: Fri, 8 Apr 2016 16:25:32 -0700 Subject: [PATCH 042/132] [Build] Use native bind ...in CouchPersistenceProvider and ElasticPersistenceProvider, per https://github.com/nasa/openmct/pull/724#issuecomment-193542314 --- .../couch/src/CouchPersistenceProvider.js | 16 +++++----------- .../elastic/src/ElasticPersistenceProvider.js | 12 +++--------- 2 files changed, 8 insertions(+), 20 deletions(-) diff --git a/platform/persistence/couch/src/CouchPersistenceProvider.js b/platform/persistence/couch/src/CouchPersistenceProvider.js index 2e0cec8807..ac0aaca304 100644 --- a/platform/persistence/couch/src/CouchPersistenceProvider.js +++ b/platform/persistence/couch/src/CouchPersistenceProvider.js @@ -54,12 +54,6 @@ define( this.path = path; } - function bind(fn, thisArg) { - return function () { - return fn.apply(thisArg, arguments); - }; - } - // Pull out a list of document IDs from CouchDB's // _all_docs response function getIdsFromAllDocs(allDocs) { @@ -117,29 +111,29 @@ define( }; CouchPersistenceProvider.prototype.listObjects = function () { - return this.get("_all_docs").then(bind(getIdsFromAllDocs, this)); + return this.get("_all_docs").then(getIdsFromAllDocs.bind(this)); }; CouchPersistenceProvider.prototype.createObject = function (space, key, value) { return this.put(key, new CouchDocument(key, value)) - .then(bind(this.checkResponse, this)); + .then(this.checkResponse.bind(this)); }; CouchPersistenceProvider.prototype.readObject = function (space, key) { - return this.get(key).then(bind(this.getModel, this)); + return this.get(key).then(this.getModel.bind(this)); }; CouchPersistenceProvider.prototype.updateObject = function (space, key, value) { var rev = this.revs[key]; return this.put(key, new CouchDocument(key, value, rev)) - .then(bind(this.checkResponse, this)); + .then(this.checkResponse.bind(this)); }; CouchPersistenceProvider.prototype.deleteObject = function (space, key, value) { var rev = this.revs[key]; return this.put(key, new CouchDocument(key, value, rev, true)) - .then(bind(this.checkResponse, this)); + .then(this.checkResponse.bind(this)); }; return CouchPersistenceProvider; diff --git a/platform/persistence/elastic/src/ElasticPersistenceProvider.js b/platform/persistence/elastic/src/ElasticPersistenceProvider.js index 564029b4c7..970f5cca26 100644 --- a/platform/persistence/elastic/src/ElasticPersistenceProvider.js +++ b/platform/persistence/elastic/src/ElasticPersistenceProvider.js @@ -58,12 +58,6 @@ define( this.path = path; } - function bind(fn, thisArg) { - return function () { - return fn.apply(thisArg, arguments); - }; - } - // Issue a request using $http; get back the plain JS object // from the expected JSON response ElasticPersistenceProvider.prototype.request = function (subpath, method, value, params) { @@ -141,11 +135,11 @@ define( ElasticPersistenceProvider.prototype.createObject = function (space, key, value) { - return this.put(key, value).then(bind(this.checkResponse, this)); + return this.put(key, value).then(this.checkResponse.bind(this)); }; ElasticPersistenceProvider.prototype.readObject = function (space, key) { - return this.get(key).then(bind(this.getModel, this)); + return this.get(key).then(this.getModel.bind(this)); }; ElasticPersistenceProvider.prototype.updateObject = function (space, key, value) { @@ -158,7 +152,7 @@ define( }; ElasticPersistenceProvider.prototype.deleteObject = function (space, key) { - return this.del(key).then(bind(this.checkResponse, this)); + return this.del(key).then(this.checkResponse.bind(this)); }; return ElasticPersistenceProvider; From aa45e5344082ff24f34164f1d2cb61dd3847b945 Mon Sep 17 00:00:00 2001 From: Victor Woeltjen Date: Fri, 8 Apr 2016 16:28:35 -0700 Subject: [PATCH 043/132] [Build] Revert setTimeout changes Restore usage of setTimeout (instead of the Angular-wrapped version) per https://github.com/nasa/openmct/pull/724#issuecomment-193542314 --- platform/search/bundle.js | 1 - platform/search/src/services/GenericSearchProvider.js | 11 +++++------ .../search/test/services/GenericSearchProviderSpec.js | 9 +-------- 3 files changed, 6 insertions(+), 15 deletions(-) diff --git a/platform/search/bundle.js b/platform/search/bundle.js index 74040b84f4..fb5714fab6 100644 --- a/platform/search/bundle.js +++ b/platform/search/bundle.js @@ -103,7 +103,6 @@ define([ "type": "provider", "implementation": GenericSearchProvider, "depends": [ - "$timeout", "$q", "$log", "modelService", diff --git a/platform/search/src/services/GenericSearchProvider.js b/platform/search/src/services/GenericSearchProvider.js index ce2ae642ed..fbe45ae6d8 100644 --- a/platform/search/src/services/GenericSearchProvider.js +++ b/platform/search/src/services/GenericSearchProvider.js @@ -19,6 +19,7 @@ * this source code distribution or the Licensing information page available * at runtime from the About dialog for additional information. *****************************************************************************/ +/*global setTimeout*/ /** * Module defining GenericSearchProvider. Created by shale on 07/16/2015. @@ -41,9 +42,8 @@ define([ * @param {TopicService} topic the topic service. * @param {Array} ROOTS An array of object Ids to begin indexing. */ - function GenericSearchProvider($timeout, $q, $log, modelService, workerService, topic, ROOTS) { + function GenericSearchProvider($q, $log, modelService, workerService, topic, ROOTS) { var provider = this; - this.$timeout = $timeout; this.$q = $q; this.$log = $log; this.modelService = modelService; @@ -193,8 +193,7 @@ define([ */ GenericSearchProvider.prototype.beginIndexRequest = function () { var idToIndex = this.idsToIndex.shift(), - provider = this, - $timeout = this.$timeout; + provider = this; this.pendingRequests += 1; this.modelService @@ -210,10 +209,10 @@ define([ .warn('Failed to index domain object ' + idToIndex); }) .then(function () { - $timeout(function () { + setTimeout(function () { provider.pendingRequests -= 1; provider.keepIndexing(); - }, 0, false); + }, 0); }); }; diff --git a/platform/search/test/services/GenericSearchProviderSpec.js b/platform/search/test/services/GenericSearchProviderSpec.js index c9fc1ff03d..abfe3d011d 100644 --- a/platform/search/test/services/GenericSearchProviderSpec.js +++ b/platform/search/test/services/GenericSearchProviderSpec.js @@ -30,8 +30,7 @@ define([ ) { describe('GenericSearchProvider', function () { - var $timeout, - $q, + var $q, $log, modelService, models, @@ -43,7 +42,6 @@ define([ provider; beforeEach(function () { - $timeout = jasmine.createSpy('$timeout'); $q = jasmine.createSpyObj( '$q', ['defer'] @@ -82,12 +80,7 @@ define([ spyOn(GenericSearchProvider.prototype, 'scheduleForIndexing'); - $timeout.andCallFake(function (callback, millis) { - window.setTimeout(callback, millis); - }); - provider = new GenericSearchProvider( - $timeout, $q, $log, modelService, From 93512851828ff89686d729384e35b0201596185e Mon Sep 17 00:00:00 2001 From: Victor Woeltjen Date: Fri, 8 Apr 2016 16:31:01 -0700 Subject: [PATCH 044/132] [Build] Remove obsolete argument from spec ...to reflect changes associated with JSHint configuration, https://github.com/nasa/openmct/pull/724#issuecomment-193542314 --- .../local/test/LocalStoragePersistenceProviderSpec.js | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/platform/persistence/local/test/LocalStoragePersistenceProviderSpec.js b/platform/persistence/local/test/LocalStoragePersistenceProviderSpec.js index b6530584d6..50869cf9a0 100644 --- a/platform/persistence/local/test/LocalStoragePersistenceProviderSpec.js +++ b/platform/persistence/local/test/LocalStoragePersistenceProviderSpec.js @@ -51,8 +51,7 @@ define( provider = new LocalStoragePersistenceProvider( { localStorage: testLocalStorage }, mockQ, - testSpace, - testLocalStorage + testSpace ); }); From c1ae68b565bcc33c61a7f3ec9e96a54492c10a9f Mon Sep 17 00:00:00 2001 From: Victor Woeltjen Date: Fri, 8 Apr 2016 16:32:17 -0700 Subject: [PATCH 045/132] [Build] Change unused to vars To allow placeholder arguments in method signatures, per https://github.com/nasa/openmct/pull/724#issuecomment-193542314 --- gulpfile.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gulpfile.js b/gulpfile.js index d36ebef46a..662574cea5 100644 --- a/gulpfile.js +++ b/gulpfile.js @@ -78,7 +78,7 @@ var gulp = require('gulp'), ], "strict": "implied", "undef": true, - "unused": true + "unused": "vars" }, karma: { configFile: path.resolve(__dirname, 'karma.conf.js'), From a224711dce6b2d0e7bd4e87139ef18be04cb1891 Mon Sep 17 00:00:00 2001 From: Victor Woeltjen Date: Fri, 8 Apr 2016 16:37:18 -0700 Subject: [PATCH 046/132] [Build] Move JSHint config to .jshintrc ...to allow code editors etc to pick up on rules, per https://github.com/nasa/openmct/pull/724#issuecomment-193542314 --- .jshintrc | 22 ++++++++++++++++++++++ gulpfile.js | 26 ++------------------------ 2 files changed, 24 insertions(+), 24 deletions(-) create mode 100644 .jshintrc diff --git a/.jshintrc b/.jshintrc new file mode 100644 index 0000000000..df3f02a1ff --- /dev/null +++ b/.jshintrc @@ -0,0 +1,22 @@ +{ + "bitwise": true, + "browser": true, + "curly": true, + "eqeqeq": true, + "forin": true, + "freeze": true, + "funcscope": true, + "futurehostile": true, + "latedef": true, + "noarg": true, + "nocomma": true, + "nonbsp": true, + "nonew": true, + "predef": [ + "define", + "Promise" + ], + "strict": "implied", + "undef": true, + "unused": "vars" +} diff --git a/gulpfile.js b/gulpfile.js index 662574cea5..7d7fb8a8e7 100644 --- a/gulpfile.js +++ b/gulpfile.js @@ -58,28 +58,6 @@ var gulp = require('gulp'), mainConfigFile: paths.main, wrapShim: true }, - jshint: { - "bitwise": true, - "browser": true, - "curly": true, - "eqeqeq": true, - "forin": true, - "freeze": true, - "funcscope": true, - "futurehostile": true, - "latedef": true, - "noarg": true, - "nocomma": true, - "nonbsp": true, - "nonew": true, - "predef": [ - "define", - "Promise" - ], - "strict": "implied", - "undef": true, - "unused": "vars" - }, karma: { configFile: path.resolve(__dirname, 'karma.conf.js'), singleRun: true @@ -128,9 +106,9 @@ gulp.task('lint', function () { return "!" + glob; }), scriptLint = gulp.src(paths.scripts.concat(nonspecs)) - .pipe(jshint(options.jshint)), + .pipe(jshint()), specLint = gulp.src(paths.specs) - .pipe(jshint(_.extend({ jasmine: true }, options.jshint))); + .pipe(jshint({ jasmine: true })); return merge(scriptLint, specLint) .pipe(jshint.reporter('default')) From 934eb13813254294d75fc8052ece74be96beea8d Mon Sep 17 00:00:00 2001 From: Victor Woeltjen Date: Fri, 8 Apr 2016 16:54:01 -0700 Subject: [PATCH 047/132] [Build] Remove obsolete jslint tags ES5 mode is enabled by default in JSHint, tags no longer necessary per https://github.com/nasa/openmct/pull/724#discussion_r55095722 --- platform/commonUI/edit/src/actions/SaveAction.js | 2 -- platform/core/src/capabilities/PersistenceCapability.js | 2 -- platform/core/test/capabilities/PersistenceCapabilitySpec.js | 1 - 3 files changed, 5 deletions(-) diff --git a/platform/commonUI/edit/src/actions/SaveAction.js b/platform/commonUI/edit/src/actions/SaveAction.js index bdc3225258..c4ea3b02ba 100644 --- a/platform/commonUI/edit/src/actions/SaveAction.js +++ b/platform/commonUI/edit/src/actions/SaveAction.js @@ -19,8 +19,6 @@ * this source code distribution or the Licensing information page available * at runtime from the About dialog for additional information. *****************************************************************************/ -/*jslint es5: true */ - define( ['../../../browse/src/creation/CreateWizard'], diff --git a/platform/core/src/capabilities/PersistenceCapability.js b/platform/core/src/capabilities/PersistenceCapability.js index bf8fbd9961..4e4e753e0c 100644 --- a/platform/core/src/capabilities/PersistenceCapability.js +++ b/platform/core/src/capabilities/PersistenceCapability.js @@ -19,8 +19,6 @@ * this source code distribution or the Licensing information page available * at runtime from the About dialog for additional information. *****************************************************************************/ -/*jslint es5: true */ - define( function () { diff --git a/platform/core/test/capabilities/PersistenceCapabilitySpec.js b/platform/core/test/capabilities/PersistenceCapabilitySpec.js index 2126d1e1b2..16f5d34e61 100644 --- a/platform/core/test/capabilities/PersistenceCapabilitySpec.js +++ b/platform/core/test/capabilities/PersistenceCapabilitySpec.js @@ -19,7 +19,6 @@ * this source code distribution or the Licensing information page available * at runtime from the About dialog for additional information. *****************************************************************************/ -/*jslint es5: true */ /** * PersistenceCapabilitySpec. Created by vwoeltje on 11/6/14. From 23a8c305c146d35a30c878028d4cfe6d2c24057f Mon Sep 17 00:00:00 2001 From: Henry Date: Sun, 3 Apr 2016 14:25:09 -0700 Subject: [PATCH 048/132] [Table] #798 Simplified markup, moved styles to external stylesheet --- platform/features/table/bundle.js | 6 + platform/features/table/res/sass/table.scss | 50 +++++++++ .../table/res/templates/mct-table.html | 43 ++++--- .../src/controllers/MCTTableController.js | 105 +++++++++--------- .../controllers/MCTTableControllerSpec.js | 24 +++- 5 files changed, 148 insertions(+), 80 deletions(-) create mode 100644 platform/features/table/res/sass/table.scss diff --git a/platform/features/table/bundle.js b/platform/features/table/bundle.js index 77ead67c04..15517c115c 100644 --- a/platform/features/table/bundle.js +++ b/platform/features/table/bundle.js @@ -161,6 +161,12 @@ define([ "key": "table-options-edit", "templateUrl": "templates/table-options-edit.html" } + ], + "stylesheets": [ + { + "stylesheetUrl": "css/table.css", + "priority": "mandatory" + } ] } }); diff --git a/platform/features/table/res/sass/table.scss b/platform/features/table/res/sass/table.scss new file mode 100644 index 0000000000..a79cfac4c6 --- /dev/null +++ b/platform/features/table/res/sass/table.scss @@ -0,0 +1,50 @@ +/***************************************************************************** + * Open MCT Web, Copyright (c) 2014-2015, United States Government + * as represented by the Administrator of the National Aeronautics and Space + * Administration. All rights reserved. + * + * Open MCT Web is licensed under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * http://www.apache.org/licenses/LICENSE-2.0. + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations + * under the License. + * + * Open MCT Web includes source code licensed under additional open source + * licenses. See the Open Source Licenses file (LICENSES.md) included with + * this source code distribution or the Licensing information page available + * at runtime from the About dialog for additional information. + *****************************************************************************/ +.sizing-table { + min-width: 100%; + z-index: -1; + visibility: hidden; + position: absolute; + + //Add some padding to allow for decorations such as limits indicator + td { + padding-right: 15px; + padding-left: 10px; + white-space: nowrap; + } +} +.mct-table { + table-layout: fixed; + th { + box-sizing: border-box; + } + tbody { + tr { + position: absolute; + } + td { + white-space: nowrap; + overflow: hidden; + box-sizing: border-box; + } + } +} \ No newline at end of file diff --git a/platform/features/table/res/templates/mct-table.html b/platform/features/table/res/templates/mct-table.html index 5997376587..7a18388455 100644 --- a/platform/features/table/res/templates/mct-table.html +++ b/platform/features/table/res/templates/mct-table.html @@ -1,22 +1,25 @@ -
      - +
      + + + + + + +
      {{header}}
      + {{sizingRow[header].text}} +
      + + }"> - +
      @@ -41,21 +42,15 @@
      {{ visibleRow.contents[header].text }} diff --git a/platform/features/table/src/controllers/MCTTableController.js b/platform/features/table/src/controllers/MCTTableController.js index ad13647766..c853f155ad 100644 --- a/platform/features/table/src/controllers/MCTTableController.js +++ b/platform/features/table/src/controllers/MCTTableController.js @@ -23,10 +23,13 @@ define( this.maxDisplayRows = 50; this.scrollable = element.find('div'); + this.thead = element.find('thead'); + this.tbody = element.find('tbody'); + this.$scope.sizingRow = {}; + this.scrollable.on('scroll', this.onScroll.bind(this)); $scope.visibleRows = []; - $scope.overrideRowPositioning = false; /** * Set default values for optional parameters on a given scope @@ -100,14 +103,31 @@ define( * @private */ MCTTableController.prototype.newRow = function (event, rowIndex) { - var row = this.$scope.rows[rowIndex]; - //Add row to the filtered, sorted list of all rows - if (this.filterRows([row]).length > 0) { - this.insertSorted(this.$scope.displayRows, row); + var self = this, + row = this.$scope.rows[rowIndex], + largestRow; + + function sizeAndScroll () { + self.setElementSizes(); + self.scrollToBottom(); } - this.$timeout(this.setElementSizes.bind(this)) - .then(this.scrollToBottom.bind(this)); + //Does the row pass the current filter? + if (this.filterRows([row]).length === 1) { + this.insertSorted(this.$scope.displayRows, row); + + //Calculate largest row + largestRow = this.buildLargestRow([this.$scope.sizingRow, row]); + + // Has it changed? If so, set the the 'sizing' row which + // determines column widths + if (JSON.stringify(largestRow) !== JSON.stringify(this.$scope.sizingRow)){ + this.$scope.sizingRow = largestRow; + this.$timeout(sizeAndScroll); + } else { + sizeAndScroll(); + } + } }; /** @@ -249,13 +269,12 @@ define( * for individual rows. */ MCTTableController.prototype.setElementSizes = function () { - var self = this, - thead = this.element.find('thead'), - tbody = this.element.find('tbody'), + var thead = this.thead, + tbody = this.tbody, firstRow = tbody.find('tr'), column = firstRow.find('td'), headerHeight = thead.prop('offsetHeight'), - rowHeight = 20, + rowHeight = firstRow.prop('offsetHeight'), columnWidth, tableWidth = 0, overallHeight = headerHeight + (rowHeight * @@ -279,8 +298,6 @@ define( } else { this.$scope.totalWidth = 'none'; } - - this.$scope.overrideRowPositioning = true; }; /** @@ -400,43 +417,32 @@ define( * pre-calculate optimal column sizes without having to render * every row. */ - MCTTableController.prototype.findLargestRow = function (rows) { - var largestRow = rows.reduce(function (largestRow, row) { + MCTTableController.prototype.buildLargestRow = function (rows) { + var largestRow = rows.reduce(function (prevLargest, row) { Object.keys(row).forEach(function (key) { - var currentColumn = row[key].text, + var currentColumn, + currentColumnLength, + largestColumn, + largestColumnLength; + if (!row[key]){ + //do nothing, no value for this column; + } else { + currentColumn = (row[key]).text; currentColumnLength = (currentColumn && currentColumn.length) ? currentColumn.length : - currentColumn, - largestColumn = largestRow[key].text, - largestColumnLength = - (largestColumn && largestColumn.length) ? - largestColumn.length : - largestColumn; + currentColumn; + largestColumn = prevLargest[key] ? prevLargest[key].text : ""; + largestColumnLength = largestColumn.length; - if (currentColumnLength > largestColumnLength) { - largestRow[key] = JSON.parse(JSON.stringify(row[key])); + if (currentColumnLength > largestColumnLength) { + prevLargest[key] = JSON.parse(JSON.stringify(row[key])); + } } + }); - return largestRow; + return prevLargest; }, JSON.parse(JSON.stringify(rows[0] || {}))); - - largestRow = JSON.parse(JSON.stringify(largestRow)); - - // Pad with characters to accomodate variable-width fonts, - // and remove characters that would allow word-wrapping. - Object.keys(largestRow).forEach(function (key) { - var padCharacters, - i; - - largestRow[key].text = String(largestRow[key].text); - padCharacters = largestRow[key].text.length / 10; - for (i = 0; i < padCharacters; i++) { - largestRow[key].text = largestRow[key].text + 'W'; - } - largestRow[key].text = largestRow[key].text - .replace(/[ \-_]/g, 'W'); - }); return largestRow; }; @@ -447,20 +453,13 @@ define( * @private */ MCTTableController.prototype.resize = function (){ - var largestRow = this.findLargestRow(this.$scope.displayRows), - self = this; - this.$scope.visibleRows = [ - { - rowIndex: 0, - offsetY: undefined, - contents: largestRow - } - ]; + var self = this; + + this.$scope.sizingRow = this.buildLargestRow(this.$scope.displayRows); //Wait a timeout to allow digest of previous change to visible // rows to happen. this.$timeout(function () { - //Remove temporary padding row used for setting column widths self.$scope.visibleRows = []; self.setElementSizes(); }); @@ -489,8 +488,6 @@ define( //Reset visible rows because new row data available. this.$scope.visibleRows = []; - this.$scope.overrideRowPositioning = false; - //Nothing to show because no columns visible if (!this.$scope.displayHeaders) { return; diff --git a/platform/features/table/test/controllers/MCTTableControllerSpec.js b/platform/features/table/test/controllers/MCTTableControllerSpec.js index 5e38c7e651..5ee9f21c41 100644 --- a/platform/features/table/test/controllers/MCTTableControllerSpec.js +++ b/platform/features/table/test/controllers/MCTTableControllerSpec.js @@ -58,15 +58,18 @@ define( mockElement = jasmine.createSpyObj('element', [ 'find', + 'prop', 'on' ]); mockElement.find.andReturn(mockElement); + mockElement.prop.andReturn(0); mockScope.displayHeaders = true; mockTimeout = jasmine.createSpy('$timeout'); mockTimeout.andReturn(promise(undefined)); controller = new MCTTableController(mockScope, mockTimeout, mockElement); + spyOn(controller, 'setVisibleRows'); }); it('Reacts to changes to filters, headers, and rows', function() { @@ -138,8 +141,6 @@ define( var removeRowFunc = mockScope.$on.calls[mockScope.$on.calls.length-1].args[1]; controller.updateRows(testRows); expect(mockScope.displayRows.length).toBe(3); - spyOn(controller, 'setVisibleRows'); - //controller.setVisibleRows.andReturn(undefined); removeRowFunc(undefined, 2); expect(mockScope.displayRows.length).toBe(2); expect(controller.setVisibleRows).toHaveBeenCalled(); @@ -266,6 +267,25 @@ define( expect(mockScope.displayRows[4].col2.text).toEqual('ggg'); }); + it('Resizes columns if length of any columns in new' + + ' row exceeds corresponding existing column', function() { + var row7 = { + 'col1': {'text': 'row6 col1'}, + 'col2': {'text': 'some longer string'}, + 'col3': {'text': 'row6 col3'} + }; + + mockScope.sortColumn = undefined; + mockScope.sortDirection = undefined; + mockScope.filters = {}; + + mockScope.displayRows = testRows.slice(0); + + mockScope.rows.push(row7); + controller.newRow(undefined, mockScope.rows.length-1); + expect(controller.$scope.sizingRow.col2).toEqual({text: 'some longer string'}); + }); + }); }); From 99ba9edb95ffb8778a73bfbf2a4bfb71feed4ea6 Mon Sep 17 00:00:00 2001 From: Henry Date: Mon, 11 Apr 2016 12:42:15 -0700 Subject: [PATCH 049/132] Merged Resolved merge conflicts Resolved merge conflicts --- platform/features/table/bundle.js | 18 ++-- .../{table.html => historical-table.html} | 2 +- .../table/res/templates/rt-table.html | 2 +- .../features/table/src/TableConfiguration.js | 25 ++++- .../controllers/HistoricalTableController.js | 70 ++++++++++++ .../src/controllers/MCTTableController.js | 101 +++++++++--------- ...ntroller.js => RealtimeTableController.js} | 71 ++++-------- .../src/controllers/TableOptionsController.js | 24 ++++- .../controllers/TelemetryTableController.js | 94 +++++++--------- .../table/test/TableConfigurationSpec.js | 11 +- ...ec.js => HistoricalTableControllerSpec.js} | 17 ++- .../controllers/MCTTableControllerSpec.js | 24 ++--- ...Spec.js => RealtimeTableControllerSpec.js} | 13 ++- .../controllers/TableOptionsControllerSpec.js | 10 +- 14 files changed, 273 insertions(+), 209 deletions(-) rename platform/features/table/res/templates/{table.html => historical-table.html} (74%) create mode 100644 platform/features/table/src/controllers/HistoricalTableController.js rename platform/features/table/src/controllers/{RTTelemetryTableController.js => RealtimeTableController.js} (58%) rename platform/features/table/test/controllers/{TelemetryTableControllerSpec.js => HistoricalTableControllerSpec.js} (94%) rename platform/features/table/test/controllers/{RTTelemetryTableControllerSpec.js => RealtimeTableControllerSpec.js} (94%) diff --git a/platform/features/table/bundle.js b/platform/features/table/bundle.js index 15517c115c..0220b7dc6d 100644 --- a/platform/features/table/bundle.js +++ b/platform/features/table/bundle.js @@ -23,16 +23,16 @@ define([ "./src/directives/MCTTable", - "./src/controllers/RTTelemetryTableController", - "./src/controllers/TelemetryTableController", + "./src/controllers/RealtimeTableController", + "./src/controllers/HistoricalTableController", "./src/controllers/TableOptionsController", '../../commonUI/regions/src/Region', '../../commonUI/browse/src/InspectorRegion', "legacyRegistry" ], function ( MCTTable, - RTTelemetryTableController, - TelemetryTableController, + RealtimeTableController, + HistoricalTableController, TableOptionsController, Region, InspectorRegion, @@ -109,13 +109,13 @@ define([ ], "controllers": [ { - "key": "TelemetryTableController", - "implementation": TelemetryTableController, + "key": "HistoricalTableController", + "implementation": HistoricalTableController, "depends": ["$scope", "telemetryHandler", "telemetryFormatter"] }, { - "key": "RTTelemetryTableController", - "implementation": RTTelemetryTableController, + "key": "RealtimeTableController", + "implementation": RealtimeTableController, "depends": ["$scope", "telemetryHandler", "telemetryFormatter"] }, { @@ -130,7 +130,7 @@ define([ "name": "Historical Table", "key": "table", "glyph": "\ue604", - "templateUrl": "templates/table.html", + "templateUrl": "templates/historical-table.html", "needs": [ "telemetry" ], diff --git a/platform/features/table/res/templates/table.html b/platform/features/table/res/templates/historical-table.html similarity index 74% rename from platform/features/table/res/templates/table.html rename to platform/features/table/res/templates/historical-table.html index c63f6d63fc..9917c41dcc 100644 --- a/platform/features/table/res/templates/table.html +++ b/platform/features/table/res/templates/historical-table.html @@ -1,4 +1,4 @@ -
      +
      +
      0) { this.$scope.totalWidth = tableWidth + 'px'; @@ -439,7 +434,6 @@ define( prevLargest[key] = JSON.parse(JSON.stringify(row[key])); } } - }); return prevLargest; }, JSON.parse(JSON.stringify(rows[0] || {}))); @@ -447,26 +441,30 @@ define( }; /** - * Calculates the widest row in the table, pads that row, and adds - * it to the table. Allows the table to size itself, then uses this - * as basis for column dimensions. + * Calculates the widest row in the table, and if necessary, resizes + * the table accordingly + * + * @param rows the rows on which to resize + * @returns {Promise} a promise that will resolve when resizing has + * occurred. * @private */ - MCTTableController.prototype.resize = function (){ - var self = this; + MCTTableController.prototype.resize = function (rows){ + //Calculate largest row + var largestRow = this.buildLargestRow(rows); - this.$scope.sizingRow = this.buildLargestRow(this.$scope.displayRows); - - //Wait a timeout to allow digest of previous change to visible - // rows to happen. - this.$timeout(function () { - self.$scope.visibleRows = []; - self.setElementSizes(); - }); + // Has it changed? If so, set the the 'sizing' row which + // determines column widths + if (JSON.stringify(largestRow) !== JSON.stringify(this.$scope.sizingRow)){ + this.$scope.sizingRow = largestRow; + return this.$timeout(this.setElementSizes.bind(this)); + } else { + return fastPromise(undefined); + } }; /** - * @priate + * @private */ MCTTableController.prototype.filterAndSort = function (rows) { var displayRows = rows; @@ -484,17 +482,14 @@ define( * Update rows with new data. If filtering is enabled, rows * will be sorted before display. */ - MCTTableController.prototype.updateRows = function (newRows) { - //Reset visible rows because new row data available. - this.$scope.visibleRows = []; - + MCTTableController.prototype.setRows = function (newRows) { //Nothing to show because no columns visible - if (!this.$scope.displayHeaders) { + if (!this.$scope.displayHeaders || !newRows) { return; } this.filterAndSort(newRows || []); - this.resize(); + this.resize(newRows).then(this.setVisibleRows.bind(this)); }; /** diff --git a/platform/features/table/src/controllers/RTTelemetryTableController.js b/platform/features/table/src/controllers/RealtimeTableController.js similarity index 58% rename from platform/features/table/src/controllers/RTTelemetryTableController.js rename to platform/features/table/src/controllers/RealtimeTableController.js index 8a61d61b5e..cf58cb236e 100644 --- a/platform/features/table/src/controllers/RTTelemetryTableController.js +++ b/platform/features/table/src/controllers/RealtimeTableController.js @@ -37,7 +37,7 @@ define( * @param telemetryFormatter * @constructor */ - function RTTelemetryTableController($scope, telemetryHandler, telemetryFormatter) { + function RealtimeTableController($scope, telemetryHandler, telemetryFormatter) { TableController.call(this, $scope, telemetryHandler, telemetryFormatter); $scope.autoScroll = false; @@ -66,58 +66,31 @@ define( }); } - RTTelemetryTableController.prototype = Object.create(TableController.prototype); + RealtimeTableController.prototype = Object.create(TableController.prototype); - /** - Override the subscribe function defined on the parent controller in - order to handle realtime telemetry instead of historical. - */ - RTTelemetryTableController.prototype.subscribe = function () { - var self = this; - self.$scope.rows = undefined; - (this.subscriptions || []).forEach(function (unsubscribe){ - unsubscribe(); - }); + RealtimeTableController.prototype.addRealtimeData = function() { + var self = this, + datum, + row; + this.handle.getTelemetryObjects().forEach(function (telemetryObject){ + datum = self.handle.getDatum(telemetryObject); + if (datum) { + //Populate row values from telemetry datum + row = self.table.getRowValues(telemetryObject, datum); + self.$scope.rows.push(row); - if (this.handle) { - this.handle.unsubscribe(); - } - - function updateData(){ - var datum, - row; - self.handle.getTelemetryObjects().forEach(function (telemetryObject){ - datum = self.handle.getDatum(telemetryObject); - if (datum) { - row = self.table.getRowValues(telemetryObject, datum); - if (!self.$scope.rows){ - self.$scope.rows = [row]; - self.$scope.$digest(); - } else { - self.$scope.rows.push(row); - - if (self.$scope.rows.length > self.maxRows) { - self.$scope.$broadcast('remove:row', 0); - self.$scope.rows.shift(); - } - - self.$scope.$broadcast('add:row', - self.$scope.rows.length - 1); - } + //Inform table that a new row has been added + if (self.$scope.rows.length > self.maxRows) { + self.$scope.$broadcast('remove:row', 0); + self.$scope.rows.shift(); } - }); - } + self.$scope.$broadcast('add:row', + self.$scope.rows.length - 1); + } + }); + } - this.handle = this.$scope.domainObject && this.telemetryHandler.handle( - this.$scope.domainObject, - updateData, - true // Lossless - ); - - this.setup(); - }; - - return RTTelemetryTableController; + return RealtimeTableController; } ); diff --git a/platform/features/table/src/controllers/TableOptionsController.js b/platform/features/table/src/controllers/TableOptionsController.js index c3b479073c..499e91efbc 100644 --- a/platform/features/table/src/controllers/TableOptionsController.js +++ b/platform/features/table/src/controllers/TableOptionsController.js @@ -51,13 +51,22 @@ define( this.$scope = $scope; this.domainObject = $scope.domainObject; + this.listeners = []; $scope.columnsForm = {}; - this.domainObject.getCapability('mutation').listen(function (model) { - self.populateForm(model); + $scope.$watch('domainObject', function(domainObject) { + self.populateForm(domainObject.getModel()); + + self.listeners.push(self.domainObject.getCapability('mutation').listen(function (model) { + self.populateForm(model); + })); }); + /** + * Maintain a configuration object on scope that stores column + * configuration. On change, synchronize with object model. + */ $scope.$watchCollection('configuration.table.columns', function (columns){ if (columns){ self.domainObject.useCapability('mutation', function (model) { @@ -67,6 +76,15 @@ define( } }); + /** + * Destroy all mutation listeners + */ + $scope.$on('$destroy', function () { + self.listeners.forEach(function (listener) { + listener(); + }); + }) + } TableOptionsController.prototype.populateForm = function (model) { @@ -86,7 +104,7 @@ define( 'key': key }); }); - this.$scope.configuration = JSON.parse(JSON.stringify(model.configuration)); + this.$scope.configuration = JSON.parse(JSON.stringify(model.configuration || {})); }; return TableOptionsController; diff --git a/platform/features/table/src/controllers/TelemetryTableController.js b/platform/features/table/src/controllers/TelemetryTableController.js index e579c5eeb8..b41cb940f5 100644 --- a/platform/features/table/src/controllers/TelemetryTableController.js +++ b/platform/features/table/src/controllers/TelemetryTableController.js @@ -52,19 +52,15 @@ define( this.$scope = $scope; this.columns = {}; //Range and Domain columns this.handle = undefined; - //this.pending = false; this.telemetryHandler = telemetryHandler; this.table = new TableConfiguration($scope.domainObject, telemetryFormatter); this.changeListeners = []; - $scope.rows = undefined; + $scope.rows = []; // Subscribe to telemetry when a domain object becomes available - this.$scope.$watch('domainObject', function(domainObject){ - if (!domainObject) - return; - + this.$scope.$watch('domainObject', function(){ self.subscribe(); self.registerChangeListeners(); }); @@ -73,16 +69,24 @@ define( this.$scope.$on("$destroy", this.destroy.bind(this)); } + /** + * @private + */ + TelemetryTableController.prototype.unregisterChangeListeners = function () { + this.changeListeners.forEach(function (listener) { + return listener && listener(); + }); + this.changeListeners = []; + } + /** * Defer registration of change listeners until domain object is * available in order to avoid race conditions * @private */ TelemetryTableController.prototype.registerChangeListeners = function () { - this.changeListeners.forEach(function (listener) { - return listener && listener(); - }); - this.changeListeners = []; + this.unregisterChangeListeners(); + // When composition changes, re-subscribe to the various // telemetry subscriptions this.changeListeners.push(this.$scope.$watchCollection( @@ -103,25 +107,37 @@ define( } }; + /** + * Function for handling realtime data when it is available. This + * will be called by the telemetry framework when new data is + * available. + * + * Method should be overridden by specializing class. + */ + TelemetryTableController.prototype.addRealtimeData = function () { + }; + + /** + * Function for handling historical data. Will be called by + * telemetry framework when requested historical data is available. + * Should be overridden by specializing class. + */ + TelemetryTableController.prototype.addHistoricalData = function () { + }; + /** Create a new subscription. This can be overridden by children to change default behaviour (which is to retrieve historical telemetry only). */ TelemetryTableController.prototype.subscribe = function () { - var self = this; - if (this.handle) { this.handle.unsubscribe(); } - //Noop because not supporting realtime data right now - function noop(){ - } - this.handle = this.$scope.domainObject && this.telemetryHandler.handle( this.$scope.domainObject, - noop, + this.addRealtimeData.bind(this), true // Lossless ); @@ -130,28 +146,6 @@ define( this.setup(); }; - /** - * Populates historical data on scope when it becomes available - * @private - */ - TelemetryTableController.prototype.addHistoricalData = function () { - var rowData = [], - self = this; - - this.handle.getTelemetryObjects().forEach(function (telemetryObject){ - var series = self.handle.getSeries(telemetryObject) || {}, - pointCount = series.getPointCount ? series.getPointCount() : 0, - i = 0; - - for (; i < pointCount; i++) { - rowData.push(self.table.getRowValues(telemetryObject, - self.handle.makeDatum(telemetryObject, series, i))); - } - }); - - this.$scope.rows = rowData; - }; - /** * Setup table columns based on domain object metadata */ @@ -162,7 +156,9 @@ define( if (handle) { handle.promiseTelemetryObjects().then(function () { - table.buildColumns(handle.getMetadata()); + self.$scope.headers = [] + self.$scope.rows = []; + table.populateColumns(handle.getMetadata()); self.filterColumns(); @@ -176,26 +172,14 @@ define( } }; - /** - * @private - * @param object The object for which data is available (table may - * be composed of multiple objects) - * @param datum The data received from the telemetry source - */ - TelemetryTableController.prototype.updateRows = function (object, datum) { - this.$scope.rows.push(this.table.getRowValues(object, datum)); - }; - /** * When column configuration changes, update the visible headers * accordingly. * @private */ - TelemetryTableController.prototype.filterColumns = function (columnConfig) { - if (!columnConfig){ - columnConfig = this.table.getColumnConfiguration(); - this.table.saveColumnConfiguration(columnConfig); - } + TelemetryTableController.prototype.filterColumns = function () { + var columnConfig = this.table.buildColumnConfiguration(); + //Populate headers with visible columns (determined by configuration) this.$scope.headers = Object.keys(columnConfig).filter(function (column) { return columnConfig[column]; diff --git a/platform/features/table/test/TableConfigurationSpec.js b/platform/features/table/test/TableConfigurationSpec.js index 86a18aee5a..79583d09f8 100644 --- a/platform/features/table/test/TableConfigurationSpec.js +++ b/platform/features/table/test/TableConfigurationSpec.js @@ -116,10 +116,10 @@ define( }]; beforeEach(function() { - table.buildColumns(metadata); + table.populateColumns(metadata); }); - it("populates the columns attribute", function() { + it("populates columns", function() { expect(table.columns.length).toBe(5); }); @@ -141,7 +141,7 @@ define( it("Provides a default configuration with all columns" + " visible", function() { - var configuration = table.getColumnConfiguration(); + var configuration = table.buildColumnConfiguration(); expect(configuration).toBeDefined(); expect(Object.keys(configuration).every(function(key){ @@ -160,7 +160,7 @@ define( }; mockModel.configuration = modelConfig; - tableConfig = table.getColumnConfiguration(); + tableConfig = table.buildColumnConfiguration(); expect(tableConfig).toBeDefined(); expect(tableConfig['Range 1']).toBe(false); @@ -191,6 +191,9 @@ define( expect(mockTelemetryFormatter.formatRangeValue).toHaveBeenCalled(); }); }); + /** + * TODO: Add test for saving column config + */ }); }); } diff --git a/platform/features/table/test/controllers/TelemetryTableControllerSpec.js b/platform/features/table/test/controllers/HistoricalTableControllerSpec.js similarity index 94% rename from platform/features/table/test/controllers/TelemetryTableControllerSpec.js rename to platform/features/table/test/controllers/HistoricalTableControllerSpec.js index 03f62f11e3..f000529467 100644 --- a/platform/features/table/test/controllers/TelemetryTableControllerSpec.js +++ b/platform/features/table/test/controllers/HistoricalTableControllerSpec.js @@ -23,7 +23,7 @@ define( [ - "../../src/controllers/TelemetryTableController" + "../../src/controllers/HistoricalTableController" ], function (TableController) { "use strict"; @@ -73,14 +73,14 @@ define( mockTable = jasmine.createSpyObj('table', [ - 'buildColumns', - 'getColumnConfiguration', + 'populateColumns', + 'buildColumnConfiguration', 'getRowValues', 'saveColumnConfiguration' ] ); mockTable.columns = []; - mockTable.getColumnConfiguration.andReturn(mockConfiguration); + mockTable.buildColumnConfiguration.andReturn(mockConfiguration); mockDomainObject= jasmine.createSpyObj('domainObject', [ 'getCapability', @@ -126,21 +126,18 @@ define( expect(mockTelemetryHandle.unsubscribe).toHaveBeenCalled(); }); - describe('the controller makes use of the table', function () { + describe('makes use of the table', function () { it('to create column definitions from telemetry' + ' metadata', function () { controller.setup(); - expect(mockTable.buildColumns).toHaveBeenCalled(); + expect(mockTable.populateColumns).toHaveBeenCalled(); }); it('to create column configuration, which is written to the' + ' object model', function () { - var mockModel = {}; - controller.setup(); - expect(mockTable.getColumnConfiguration).toHaveBeenCalled(); - expect(mockTable.saveColumnConfiguration).toHaveBeenCalled(); + expect(mockTable.buildColumnConfiguration).toHaveBeenCalled(); }); }); diff --git a/platform/features/table/test/controllers/MCTTableControllerSpec.js b/platform/features/table/test/controllers/MCTTableControllerSpec.js index 5ee9f21c41..7bca5c65b4 100644 --- a/platform/features/table/test/controllers/MCTTableControllerSpec.js +++ b/platform/features/table/test/controllers/MCTTableControllerSpec.js @@ -118,7 +118,7 @@ define( }); it('Sets rows on scope when rows change', function() { - controller.updateRows(testRows); + controller.setRows(testRows); expect(mockScope.displayRows.length).toBe(3); expect(mockScope.displayRows).toEqual(testRows); }); @@ -130,7 +130,7 @@ define( 'col2': {'text': 'ghi'}, 'col3': {'text': 'row3 col3'} }; - controller.updateRows(testRows); + controller.setRows(testRows); expect(mockScope.displayRows.length).toBe(3); testRows.push(row4); addRowFunc(undefined, 3); @@ -139,7 +139,7 @@ define( it('Supports removing rows individually', function() { var removeRowFunc = mockScope.$on.calls[mockScope.$on.calls.length-1].args[1]; - controller.updateRows(testRows); + controller.setRows(testRows); expect(mockScope.displayRows.length).toBe(3); removeRowFunc(undefined, 2); expect(mockScope.displayRows.length).toBe(2); @@ -211,20 +211,20 @@ define( mockScope.displayRows = controller.sortRows(testRows.slice(0)); mockScope.rows.push(row4); - controller.newRow(undefined, mockScope.rows.length-1); + controller.addRow(undefined, mockScope.rows.length-1); expect(mockScope.displayRows[0].col2.text).toEqual('xyz'); mockScope.rows.push(row5); - controller.newRow(undefined, mockScope.rows.length-1); + controller.addRow(undefined, mockScope.rows.length-1); expect(mockScope.displayRows[4].col2.text).toEqual('aaa'); mockScope.rows.push(row6); - controller.newRow(undefined, mockScope.rows.length-1); + controller.addRow(undefined, mockScope.rows.length-1); expect(mockScope.displayRows[2].col2.text).toEqual('ggg'); //Add a duplicate row mockScope.rows.push(row6); - controller.newRow(undefined, mockScope.rows.length-1); + controller.addRow(undefined, mockScope.rows.length-1); expect(mockScope.displayRows[2].col2.text).toEqual('ggg'); expect(mockScope.displayRows[3].col2.text).toEqual('ggg'); }); @@ -240,12 +240,12 @@ define( mockScope.displayRows = controller.filterRows(testRows); mockScope.rows.push(row5); - controller.newRow(undefined, mockScope.rows.length-1); + controller.addRow(undefined, mockScope.rows.length-1); expect(mockScope.displayRows.length).toBe(2); expect(mockScope.displayRows[1].col2.text).toEqual('aaa'); mockScope.rows.push(row6); - controller.newRow(undefined, mockScope.rows.length-1); + controller.addRow(undefined, mockScope.rows.length-1); expect(mockScope.displayRows.length).toBe(2); //Row was not added because does not match filter }); @@ -259,11 +259,11 @@ define( mockScope.displayRows = testRows.slice(0); mockScope.rows.push(row5); - controller.newRow(undefined, mockScope.rows.length-1); + controller.addRow(undefined, mockScope.rows.length-1); expect(mockScope.displayRows[3].col2.text).toEqual('aaa'); mockScope.rows.push(row6); - controller.newRow(undefined, mockScope.rows.length-1); + controller.addRow(undefined, mockScope.rows.length-1); expect(mockScope.displayRows[4].col2.text).toEqual('ggg'); }); @@ -282,7 +282,7 @@ define( mockScope.displayRows = testRows.slice(0); mockScope.rows.push(row7); - controller.newRow(undefined, mockScope.rows.length-1); + controller.addRow(undefined, mockScope.rows.length-1); expect(controller.$scope.sizingRow.col2).toEqual({text: 'some longer string'}); }); diff --git a/platform/features/table/test/controllers/RTTelemetryTableControllerSpec.js b/platform/features/table/test/controllers/RealtimeTableControllerSpec.js similarity index 94% rename from platform/features/table/test/controllers/RTTelemetryTableControllerSpec.js rename to platform/features/table/test/controllers/RealtimeTableControllerSpec.js index 59911d1771..e0b6978d88 100644 --- a/platform/features/table/test/controllers/RTTelemetryTableControllerSpec.js +++ b/platform/features/table/test/controllers/RealtimeTableControllerSpec.js @@ -23,7 +23,7 @@ define( [ - "../../src/controllers/RTTelemetryTableController" + "../../src/controllers/RealtimeTableController" ], function (TableController) { "use strict"; @@ -77,14 +77,14 @@ define( mockTable = jasmine.createSpyObj('table', [ - 'buildColumns', - 'getColumnConfiguration', + 'populateColumns', + 'buildColumnConfiguration', 'getRowValues', 'saveColumnConfiguration' ] ); mockTable.columns = []; - mockTable.getColumnConfiguration.andReturn(mockConfiguration); + mockTable.buildColumnConfiguration.andReturn(mockConfiguration); mockTable.getRowValues.andReturn(mockTableRow); mockDomainObject= jasmine.createSpyObj('domainObject', [ @@ -107,13 +107,16 @@ define( 'unsubscribe', 'getDatum', 'promiseTelemetryObjects', - 'getTelemetryObjects' + 'getTelemetryObjects', + 'request' ]); + // Arbitrary array with non-zero length, contents are not // used by mocks mockTelemetryHandle.getTelemetryObjects.andReturn([{}]); mockTelemetryHandle.promiseTelemetryObjects.andReturn(promise(undefined)); mockTelemetryHandle.getDatum.andReturn({}); + mockTelemetryHandle.request.andReturn(promise(undefined)); mockTelemetryHandler = jasmine.createSpyObj('telemetryHandler', [ 'handle' diff --git a/platform/features/table/test/controllers/TableOptionsControllerSpec.js b/platform/features/table/test/controllers/TableOptionsControllerSpec.js index 9de96b5f52..483696e0e2 100644 --- a/platform/features/table/test/controllers/TableOptionsControllerSpec.js +++ b/platform/features/table/test/controllers/TableOptionsControllerSpec.js @@ -47,11 +47,16 @@ define( 'listen' ]); mockDomainObject = jasmine.createSpyObj('domainObject', [ - 'getCapability' + 'getCapability', + 'getModel' ]); mockDomainObject.getCapability.andReturn(mockCapability); + mockDomainObject.getModel.andReturn({}); + mockScope = jasmine.createSpyObj('scope', [ - '$watchCollection' + '$watchCollection', + '$watch', + '$on' ]); mockScope.domainObject = mockDomainObject; @@ -59,6 +64,7 @@ define( }); it('Registers a listener for mutation events on the object', function() { + mockScope.$watch.mostRecentCall.args[1](mockDomainObject); expect(mockCapability.listen).toHaveBeenCalled(); }); From 20672ad028fa382d52ad70496aff85b041e440a6 Mon Sep 17 00:00:00 2001 From: Henry Date: Mon, 4 Apr 2016 21:10:13 -0700 Subject: [PATCH 050/132] [Tables] #801 Documented MctTable directive --- docs/src/guide/index.md | 68 +++++++++++++++++-- .../src/controllers/MCTTableController.js | 2 +- .../controllers/RealtimeTableController.js | 6 +- .../src/controllers/TableOptionsController.js | 15 ++-- .../controllers/TelemetryTableController.js | 4 +- .../features/table/src/directives/MCTTable.js | 45 ++++++++++++ .../controllers/TableOptionsControllerSpec.js | 12 ++++ 7 files changed, 136 insertions(+), 16 deletions(-) diff --git a/docs/src/guide/index.md b/docs/src/guide/index.md index 93cb95bb7a..7016462a5a 100644 --- a/docs/src/guide/index.md +++ b/docs/src/guide/index.md @@ -6,12 +6,13 @@ Victor Woeltjen September 23, 2015 Document Version 1.1 -Date | Version | Summary of Changes | Author -------------------- | --------- | ----------------------- | --------------- -April 29, 2015 | 0 | Initial Draft | Victor Woeltjen -May 12, 2015 | 0.1 | | Victor Woeltjen -June 4, 2015 | 1.0 | Name Changes | Victor Woeltjen -October 4, 2015 | 1.1 | Conversion to MarkDown | Andrew Henry +Date | Version | Summary of Changes | Author +------------------- | --------- | ------------------------- | --------------- +April 29, 2015 | 0 | Initial Draft | Victor Woeltjen +May 12, 2015 | 0.1 | | Victor Woeltjen +June 4, 2015 | 1.0 | Name Changes | Victor Woeltjen +October 4, 2015 | 1.1 | Conversion to MarkDown | Andrew Henry +April 5, 2016 | 1.2 | Added Mct-table directive | Andrew Henry # Introduction The purpose of this guide is to familiarize software developers with the Open @@ -1600,6 +1601,61 @@ there are items . ] } +## Table + +The `mct-table` directive provides a generic table component, with optional +sorting and filtering capabilities. The table can be pre-populated with data +by setting the `rows` parameter, and it can be updated in real-time using the +`add:row` and `remove:row` broadcast events. The table will expand to occupy +100% of the size of its containing element. The table is highly optimized for +very large data sets. + +### Events + +The table supports two events for notifying that the rows have changed. For +performance reasons, the table does not monitor the content of `rows` +constantly. + +* `add:row`: A `$broadcast` event that will notify the table that a new row +has been added to the table. + +eg. The code below adds a new row, and alerts the table using the `add:row` +event. Sorting and filtering will be applied automatically by the table component. + +``` +$scope.rows.push(newRow); +$scope.$broadcast('add:row', $scope.rows.length-1); +``` + +* `remove:row`: A `$broadcast` event that will notify the table that a row +should be removed from the table. + +eg. The code below removes a row from the rows array, and then alerts the table +to its removal. + +``` +$scope.rows.slice(5, 1); +$scope.$broadcast('remove:row', 5); +``` + +### Parameters + +* `headers`: An array of string values which will constitute the column titles + that appear at the top of the table. Corresponding values are specified in + the rows using the header title provided here. +* `rows`: An array of objects containing row values. Each element in the +array must be an associative array, where the key corresponds to a column header. +* `enableFilter`: A boolean that if true, will enable searching and result +filtering. When enabled, each column will have a text input field that can be +used to filter the table rows in real time. +* `enableSort`: A boolean determining whether rows can be sorted. If true, +sorting will be enabled allowing sorting by clicking on column headers. Only +one column may be sorted at a time. +* `autoScroll`: A boolean value that if true, will cause the table to automatically +scroll to the bottom as new data arrives. Auto-scroll can be disengaged manually +by scrolling away from the bottom of the table, and can also be enabled manually +by scrolling to the bottom of the table rows. + # Services The Open MCT Web platform provides a variety of services which can be retrieved diff --git a/platform/features/table/src/controllers/MCTTableController.js b/platform/features/table/src/controllers/MCTTableController.js index 477707e84b..7b4c748c7b 100644 --- a/platform/features/table/src/controllers/MCTTableController.js +++ b/platform/features/table/src/controllers/MCTTableController.js @@ -85,7 +85,7 @@ define( then: function (callback) { return fastPromise(callback(returnValue)); } - } + }; } /** diff --git a/platform/features/table/src/controllers/RealtimeTableController.js b/platform/features/table/src/controllers/RealtimeTableController.js index cf58cb236e..3f983207bc 100644 --- a/platform/features/table/src/controllers/RealtimeTableController.js +++ b/platform/features/table/src/controllers/RealtimeTableController.js @@ -68,6 +68,10 @@ define( RealtimeTableController.prototype = Object.create(TableController.prototype); + /** + * Overrides method on TelemetryTableController providing handling + * for realtime data. + */ RealtimeTableController.prototype.addRealtimeData = function() { var self = this, datum, @@ -89,7 +93,7 @@ define( self.$scope.rows.length - 1); } }); - } + }; return RealtimeTableController; } diff --git a/platform/features/table/src/controllers/TableOptionsController.js b/platform/features/table/src/controllers/TableOptionsController.js index 499e91efbc..a28411e7d0 100644 --- a/platform/features/table/src/controllers/TableOptionsController.js +++ b/platform/features/table/src/controllers/TableOptionsController.js @@ -55,8 +55,15 @@ define( $scope.columnsForm = {}; + function unlisten() { + self.listeners.forEach(function (listener) { + listener(); + }); + } + $scope.$watch('domainObject', function(domainObject) { - self.populateForm(domainObject.getModel()); + unlisten(); + self.populateForm(domainObject.getModel()); self.listeners.push(self.domainObject.getCapability('mutation').listen(function (model) { self.populateForm(model); @@ -79,11 +86,7 @@ define( /** * Destroy all mutation listeners */ - $scope.$on('$destroy', function () { - self.listeners.forEach(function (listener) { - listener(); - }); - }) + $scope.$on('$destroy', unlisten); } diff --git a/platform/features/table/src/controllers/TelemetryTableController.js b/platform/features/table/src/controllers/TelemetryTableController.js index b41cb940f5..36f54b1ac6 100644 --- a/platform/features/table/src/controllers/TelemetryTableController.js +++ b/platform/features/table/src/controllers/TelemetryTableController.js @@ -77,7 +77,7 @@ define( return listener && listener(); }); this.changeListeners = []; - } + }; /** * Defer registration of change listeners until domain object is @@ -156,7 +156,7 @@ define( if (handle) { handle.promiseTelemetryObjects().then(function () { - self.$scope.headers = [] + self.$scope.headers = []; self.$scope.rows = []; table.populateColumns(handle.getMetadata()); diff --git a/platform/features/table/src/directives/MCTTable.js b/platform/features/table/src/directives/MCTTable.js index 575e830395..2d61669a2e 100644 --- a/platform/features/table/src/directives/MCTTable.js +++ b/platform/features/table/src/directives/MCTTable.js @@ -12,6 +12,51 @@ define( * Defines a generic 'Table' component. The table can be populated * en-masse by setting the rows attribute, or rows can be added as * needed via a broadcast 'addRow' event. + * + * This directive accepts parameters specifying header and row + * content, as well as some additional options. + * + * Two broadcast events for notifying the table that the rows have + * changed. For performance reasons, the table does not monitor the + * content of `rows` constantly. + * - 'add:row': A $broadcast event that will notify the table that + * a new row has been added to the table. + * eg. + *
      
      +         * $scope.rows.push(newRow);
      +         * $scope.$broadcast('add:row', $scope.rows.length-1);
      +         * 
      + * The code above adds a new row, and alerts the table using the + * add:row event. Sorting and filtering will be applied + * automatically by the table component. + * + * - 'remove:row': A $broadcast event that will notify the table that a + * row should be removed from the table. + * eg. + *
      
      +         * $scope.rows.slice(5, 1);
      +         * $scope.$broadcast('remove:row', 5);
      +         * 
      + * The code above removes a row from the rows array, and then alerts + * the table to its removal. + * + * @memberof platform/features/table + * @param {string[]} headers The column titles to appear at the top + * of the table. Corresponding values are specified in the rows + * using the header title provided here. + * @param {Object[]} rows The row content. Each row is an object + * with key-value pairs where the key corresponds to a header + * specified in the headers parameter. + * @param {boolean} enableFilter If true, values will be searchable + * and results filtered + * @param {boolean} enableSort If true, sorting will be enabled + * allowing sorting by clicking on column headers + * @param {boolean} autoScroll If true, table will automatically + * scroll to the bottom as new data arrives. Auto-scroll can be + * disengaged manually by scrolling away from the bottom of the + * table, and can also be enabled manually by scrolling to the bottom of + * the table rows. + * * @constructor */ function MCTTable($timeout) { diff --git a/platform/features/table/test/controllers/TableOptionsControllerSpec.js b/platform/features/table/test/controllers/TableOptionsControllerSpec.js index 483696e0e2..fd6d8b43fe 100644 --- a/platform/features/table/test/controllers/TableOptionsControllerSpec.js +++ b/platform/features/table/test/controllers/TableOptionsControllerSpec.js @@ -63,6 +63,18 @@ define( controller = new TableOptionsController(mockScope); }); + it('Listens for changing domain object', function() { + expect(mockScope.$watch).toHaveBeenCalledWith('domainObject', jasmine.any(Function)); + }); + + it('On destruction of controller, destroys listeners', function() { + var unlistenFunc = jasmine.createSpy("unlisten"); + controller.listeners.push(unlistenFunc); + expect(mockScope.$on).toHaveBeenCalledWith('$destroy', jasmine.any(Function)); + mockScope.$on.mostRecentCall.args[1](); + expect(unlistenFunc).toHaveBeenCalled(); + }); + it('Registers a listener for mutation events on the object', function() { mockScope.$watch.mostRecentCall.args[1](mockDomainObject); expect(mockCapability.listen).toHaveBeenCalled(); From 0c6b4a5a231a71100ce5d3a3b0d18fdb66f77578 Mon Sep 17 00:00:00 2001 From: Henry Date: Tue, 5 Apr 2016 12:05:11 -0700 Subject: [PATCH 051/132] [Tables] Fix to correct sorting in realtime tables --- .../src/controllers/MCTTableController.js | 29 ++++++++---- .../controllers/MCTTableControllerSpec.js | 46 ++++++++++++++++++- 2 files changed, 64 insertions(+), 11 deletions(-) diff --git a/platform/features/table/src/controllers/MCTTableController.js b/platform/features/table/src/controllers/MCTTableController.js index 7b4c748c7b..2fe7fc1ba6 100644 --- a/platform/features/table/src/controllers/MCTTableController.js +++ b/platform/features/table/src/controllers/MCTTableController.js @@ -295,6 +295,20 @@ define( } }; + /** + * Given a value, if it can be coerced to a number, then return a + * number representation. It's a little more robust than using just + * Number() or parseFloat, or isNaN in isolation, all of which are + * fairly inconsistent in their results. + * @param value The value to cast (if possible) + * @returns {*} The value cast to a Number, or the original value if + * a Number representation is not possible. + */ + MCTTableController.prototype.toNumber = function (value){ + var val = !isNaN(Number(value)) && !isNaN(parseFloat(value)) ? Number(value) : value; + return val; + }; + /** * @private */ @@ -311,12 +325,8 @@ define( return min; // Element is not in array, min gives direction } - valA = isNaN(searchElement[sortKey].text) ? - searchElement[sortKey].text : - parseFloat(searchElement[sortKey].text); - valB = isNaN(searchArray[sampleAt][sortKey].text) ? - searchArray[sampleAt][sortKey].text : - parseFloat(searchArray[sampleAt][sortKey].text); + valA = self.toNumber(searchElement[sortKey].text); + valB = self.toNumber(searchArray[sampleAt][sortKey].text); switch(self.sortComparator(valA, valB)) { case -1: @@ -397,10 +407,9 @@ define( //If the values to compare can be compared as // numbers, do so. String comparison of number // values can cause inconsistencies - var valA = isNaN(a[sortKey].text) ? a[sortKey].text : - parseFloat(a[sortKey].text), - valB = isNaN(b[sortKey].text) ? b[sortKey].text : - parseFloat(b[sortKey].text); + + var valA = self.toNumber(a[sortKey].text), + valB = self.toNumber(b[sortKey].text); return self.sortComparator(valA, valB); }); diff --git a/platform/features/table/test/controllers/MCTTableControllerSpec.js b/platform/features/table/test/controllers/MCTTableControllerSpec.js index 7bca5c65b4..436b53bb16 100644 --- a/platform/features/table/test/controllers/MCTTableControllerSpec.js +++ b/platform/features/table/test/controllers/MCTTableControllerSpec.js @@ -180,6 +180,50 @@ define( expect(sortedRows[2].col2.text).toEqual('abc'); }); + it('converts number strings to numbers', function () { + var val1 = "", + val2 = "1", + val3 = "2016-04-05 18:41:30.713Z", + val4 = "1.1", + val5 = "8.945520958175627e-13"; + + expect(controller.toNumber(val1)).toEqual(""); + expect(controller.toNumber(val2)).toEqual(1); + expect(controller.toNumber(val3)).toEqual("2016-04-05 18:41:30.713Z"); + expect(controller.toNumber(val4)).toEqual(1.1); + expect(controller.toNumber(val5)).toEqual(8.945520958175627e-13); + }); + + it('correctly sorts rows of differing types', function () { + mockScope.sortColumn = 'col2'; + mockScope.sortDirection = 'desc'; + + testRows.push({ + 'col1': {'text': 'row4 col1'}, + 'col2': {'text': '123'}, + 'col3': {'text': 'row4 col3'} + }); + testRows.push({ + 'col1': {'text': 'row5 col1'}, + 'col2': {'text': '456'}, + 'col3': {'text': 'row5 col3'} + }); + testRows.push({ + 'col1': {'text': 'row5 col1'}, + 'col2': {'text': ''}, + 'col3': {'text': 'row5 col3'} + }); + + sortedRows = controller.sortRows(testRows); + expect(sortedRows[0].col2.text).toEqual('ghi'); + expect(sortedRows[1].col2.text).toEqual('def'); + expect(sortedRows[2].col2.text).toEqual('abc'); + + expect(sortedRows[sortedRows.length-3].col2.text).toEqual('456'); + expect(sortedRows[sortedRows.length-2].col2.text).toEqual('123'); + expect(sortedRows[sortedRows.length-1].col2.text).toEqual(''); + }); + describe('Adding new rows', function() { var row4, row5, @@ -251,7 +295,7 @@ define( }); it('Adds new rows at the correct sort position when' + - ' not sorted ', function() { + ' not sorted ', function () { mockScope.sortColumn = undefined; mockScope.sortDirection = undefined; mockScope.filters = {}; From 2fb9b65652d80d5a9640d0bed3cbbde897957539 Mon Sep 17 00:00:00 2001 From: Henry Date: Thu, 7 Apr 2016 11:14:02 -0700 Subject: [PATCH 052/132] Made comment a little more accurate --- .../features/table/src/controllers/MCTTableController.js | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/platform/features/table/src/controllers/MCTTableController.js b/platform/features/table/src/controllers/MCTTableController.js index 2fe7fc1ba6..a90d660f3c 100644 --- a/platform/features/table/src/controllers/MCTTableController.js +++ b/platform/features/table/src/controllers/MCTTableController.js @@ -296,11 +296,12 @@ define( }; /** - * Given a value, if it can be coerced to a number, then return a - * number representation. It's a little more robust than using just + * Given a value, if it is a number, or a string representation of a + * number, then return a number representation. Otherwise, return + * the original value. It's a little more robust than using just * Number() or parseFloat, or isNaN in isolation, all of which are * fairly inconsistent in their results. - * @param value The value to cast (if possible) + * @param value The value to return as a number. * @returns {*} The value cast to a Number, or the original value if * a Number representation is not possible. */ From f34e8ba61b1acdcbe21edbf8bef5dba523ac91db Mon Sep 17 00:00:00 2001 From: Henry Date: Mon, 11 Apr 2016 13:09:02 -0700 Subject: [PATCH 053/132] Modified code to call resize on every row add. Removed optimization to only resize when needed, because in fact resuze is necessary on every update in order to set vertical scroll size --- .../src/controllers/MCTTableController.js | 23 +++---------------- 1 file changed, 3 insertions(+), 20 deletions(-) diff --git a/platform/features/table/src/controllers/MCTTableController.js b/platform/features/table/src/controllers/MCTTableController.js index a90d660f3c..9b65613516 100644 --- a/platform/features/table/src/controllers/MCTTableController.js +++ b/platform/features/table/src/controllers/MCTTableController.js @@ -80,14 +80,6 @@ define( $scope.$on('remove:row', this.removeRow.bind(this)); } - function fastPromise(returnValue) { - return { - then: function (callback) { - return fastPromise(callback(returnValue)); - } - }; - } - /** * If auto-scroll is enabled, this function will scroll to the * bottom of the page @@ -118,8 +110,7 @@ define( //Insert the row into the correct position in the array this.insertSorted(this.$scope.displayRows, row); - //Resize the columns , then update the rows - // visible in the table + //Resize the columns , then update the rows visible in the table this.resize([this.$scope.sizingRow, row]) .then(this.setVisibleRows.bind(this)) .then(this.scrollToBottom.bind(this)); @@ -460,17 +451,9 @@ define( * @private */ MCTTableController.prototype.resize = function (rows){ - //Calculate largest row - var largestRow = this.buildLargestRow(rows); - // Has it changed? If so, set the the 'sizing' row which - // determines column widths - if (JSON.stringify(largestRow) !== JSON.stringify(this.$scope.sizingRow)){ - this.$scope.sizingRow = largestRow; - return this.$timeout(this.setElementSizes.bind(this)); - } else { - return fastPromise(undefined); - } + this.$scope.sizingRow = this.buildLargestRow(rows); + return this.$timeout(this.setElementSizes.bind(this)); }; /** From 1bb6e178293b28a046db088550fd8e4d08734556 Mon Sep 17 00:00:00 2001 From: Henry Date: Mon, 11 Apr 2016 13:30:05 -0700 Subject: [PATCH 054/132] Minor code change to improve clarity --- .../features/table/src/controllers/MCTTableController.js | 7 +++---- platform/features/table/test/TableConfigurationSpec.js | 3 --- 2 files changed, 3 insertions(+), 7 deletions(-) diff --git a/platform/features/table/src/controllers/MCTTableController.js b/platform/features/table/src/controllers/MCTTableController.js index 9b65613516..1470a9e47c 100644 --- a/platform/features/table/src/controllers/MCTTableController.js +++ b/platform/features/table/src/controllers/MCTTableController.js @@ -450,8 +450,7 @@ define( * occurred. * @private */ - MCTTableController.prototype.resize = function (rows){ - + MCTTableController.prototype.resize = function (rows) { this.$scope.sizingRow = this.buildLargestRow(rows); return this.$timeout(this.setElementSizes.bind(this)); }; @@ -468,7 +467,7 @@ define( if (this.$scope.enableSort) { displayRows = this.sortRows(displayRows.slice(0)); } - this.$scope.displayRows = displayRows; + return displayRows; }; /** @@ -481,7 +480,7 @@ define( return; } - this.filterAndSort(newRows || []); + this.$scope.displayRows = this.filterAndSort(newRows || []); this.resize(newRows).then(this.setVisibleRows.bind(this)); }; diff --git a/platform/features/table/test/TableConfigurationSpec.js b/platform/features/table/test/TableConfigurationSpec.js index 79583d09f8..bfc6f50edb 100644 --- a/platform/features/table/test/TableConfigurationSpec.js +++ b/platform/features/table/test/TableConfigurationSpec.js @@ -191,9 +191,6 @@ define( expect(mockTelemetryFormatter.formatRangeValue).toHaveBeenCalled(); }); }); - /** - * TODO: Add test for saving column config - */ }); }); } From 6322964dec2676831a70e23cdf60b30e1da341b5 Mon Sep 17 00:00:00 2001 From: Henry Date: Mon, 11 Apr 2016 14:09:04 -0700 Subject: [PATCH 055/132] Addressed comments from code review of #822 --- .../src/controllers/MCTTableController.js | 63 ++++++++++--------- .../controllers/MCTTableControllerSpec.js | 33 +++++----- 2 files changed, 50 insertions(+), 46 deletions(-) diff --git a/platform/features/table/src/controllers/MCTTableController.js b/platform/features/table/src/controllers/MCTTableController.js index 1470a9e47c..fd949f7056 100644 --- a/platform/features/table/src/controllers/MCTTableController.js +++ b/platform/features/table/src/controllers/MCTTableController.js @@ -286,21 +286,6 @@ define( } }; - /** - * Given a value, if it is a number, or a string representation of a - * number, then return a number representation. Otherwise, return - * the original value. It's a little more robust than using just - * Number() or parseFloat, or isNaN in isolation, all of which are - * fairly inconsistent in their results. - * @param value The value to return as a number. - * @returns {*} The value cast to a Number, or the original value if - * a Number representation is not possible. - */ - MCTTableController.prototype.toNumber = function (value){ - var val = !isNaN(Number(value)) && !isNaN(parseFloat(value)) ? Number(value) : value; - return val; - }; - /** * @private */ @@ -310,17 +295,14 @@ define( sortKey = this.$scope.sortColumn; function binarySearch(searchArray, searchElement, min, max){ - var sampleAt = Math.floor((max - min) / 2) + min, - valA, - valB; + var sampleAt = Math.floor((max - min) / 2) + min; + if (max < min) { return min; // Element is not in array, min gives direction } - valA = self.toNumber(searchElement[sortKey].text); - valB = self.toNumber(searchArray[sampleAt][sortKey].text); - - switch(self.sortComparator(valA, valB)) { + switch(self.sortComparator(searchElement[sortKey].text, + searchArray[sampleAt][sortKey].text)) { case -1: return binarySearch(searchArray, searchElement, min, sampleAt - 1); @@ -358,8 +340,34 @@ define( */ MCTTableController.prototype.sortComparator = function (a, b) { var result = 0, - sortDirectionMultiplier; + sortDirectionMultiplier, + numberA, + numberB; + /** + * Given a value, if it is a number, or a string representation of a + * number, then return a number representation. Otherwise, return + * the original value. It's a little more robust than using just + * Number() or parseFloat, or isNaN in isolation, all of which are + * fairly inconsistent in their results. + * @param value The value to return as a number. + * @returns {*} The value cast to a Number, or the original value if + * a Number representation is not possible. + */ + function toNumber (value){ + var val = !isNaN(Number(value)) && !isNaN(parseFloat(value)) ? Number(value) : value; + return val; + } + numberA = toNumber(a); + numberB = toNumber(b); + + //If they're both numbers, then compare them as numbers + if (typeof numberA === "number" && typeof numberB === "number") { + a = numberA; + b = numberB; + } + + //If they're both strings, then ignore case if (typeof a === "string" && typeof b === "string") { a = a.toLowerCase(); b = b.toLowerCase(); @@ -396,14 +404,7 @@ define( } return rowsToSort.sort(function (a, b) { - //If the values to compare can be compared as - // numbers, do so. String comparison of number - // values can cause inconsistencies - - var valA = self.toNumber(a[sortKey].text), - valB = self.toNumber(b[sortKey].text); - - return self.sortComparator(valA, valB); + return self.sortComparator(a[sortKey].text, b[sortKey].text); }); }; diff --git a/platform/features/table/test/controllers/MCTTableControllerSpec.js b/platform/features/table/test/controllers/MCTTableControllerSpec.js index 436b53bb16..175d8fed0a 100644 --- a/platform/features/table/test/controllers/MCTTableControllerSpec.js +++ b/platform/features/table/test/controllers/MCTTableControllerSpec.js @@ -180,20 +180,6 @@ define( expect(sortedRows[2].col2.text).toEqual('abc'); }); - it('converts number strings to numbers', function () { - var val1 = "", - val2 = "1", - val3 = "2016-04-05 18:41:30.713Z", - val4 = "1.1", - val5 = "8.945520958175627e-13"; - - expect(controller.toNumber(val1)).toEqual(""); - expect(controller.toNumber(val2)).toEqual(1); - expect(controller.toNumber(val3)).toEqual("2016-04-05 18:41:30.713Z"); - expect(controller.toNumber(val4)).toEqual(1.1); - expect(controller.toNumber(val5)).toEqual(8.945520958175627e-13); - }); - it('correctly sorts rows of differing types', function () { mockScope.sortColumn = 'col2'; mockScope.sortDirection = 'desc'; @@ -224,7 +210,24 @@ define( expect(sortedRows[sortedRows.length-1].col2.text).toEqual(''); }); - describe('Adding new rows', function() { + describe('The sort comparator', function () { + it('Correctly sorts different data types', function () { + var val1 = "", + val2 = "1", + val3 = "2016-04-05 18:41:30.713Z", + val4 = "1.1", + val5 = "8.945520958175627e-13"; + mockScope.sortDirection = "asc"; + + expect(controller.sortComparator(val1, val2)).toEqual(-1); + expect(controller.sortComparator(val3, val1)).toEqual(1); + expect(controller.sortComparator(val3, val2)).toEqual(1); + expect(controller.sortComparator(val4, val2)).toEqual(1); + expect(controller.sortComparator(val2, val5)).toEqual(1); + }); + }); + + describe('Adding new rows', function () { var row4, row5, row6; From 06436c488af5f5760e9a72efd94c6a80a55ac60b Mon Sep 17 00:00:00 2001 From: Henry Date: Mon, 18 Apr 2016 19:05:46 -0700 Subject: [PATCH 056/132] [Edit Mode] #794 Modified policy to show remove action in context for non-editable domain object types --- platform/commonUI/edit/bundle.js | 12 +++++++- .../policies/EditContextualActionPolicy.js | 28 +++++++++++------ .../EditContextualActionPolicySpec.js | 30 +++++++++++++++++-- 3 files changed, 57 insertions(+), 13 deletions(-) diff --git a/platform/commonUI/edit/bundle.js b/platform/commonUI/edit/bundle.js index f2e684a69f..e766d96e56 100644 --- a/platform/commonUI/edit/bundle.js +++ b/platform/commonUI/edit/bundle.js @@ -207,7 +207,7 @@ define([ { "category": "action", "implementation": EditContextualActionPolicy, - "depends": ["navigationService"] + "depends": ["navigationService", "editModeBlacklist", "nonEditContextBlacklist"] }, { "category": "action", @@ -274,6 +274,16 @@ define([ { "implementation": EditToolbarRepresenter } + ], + "constants": [ + { + "key":"editModeBlacklist", + "value": ["copy", "follow", "window", "link", "locate"] + }, + { + "key": "nonEditContextBlacklist", + "value": ["copy", "follow", "properties", "move", "link", "remove", "locate"] + } ] } }); diff --git a/platform/commonUI/edit/src/policies/EditContextualActionPolicy.js b/platform/commonUI/edit/src/policies/EditContextualActionPolicy.js index 06fe9de640..6b6c22252e 100644 --- a/platform/commonUI/edit/src/policies/EditContextualActionPolicy.js +++ b/platform/commonUI/edit/src/policies/EditContextualActionPolicy.js @@ -29,17 +29,27 @@ define( /** * Policy controlling whether the context menu is visible when * objects are being edited - * @memberof platform/commonUI/edit + * @param navigationService + * @param editModeBlacklist A blacklist of actions disallowed from + * context menu when navigated object is being edited + * @param nonEditContextBlacklist A blacklist of actions disallowed + * from context menu of non-editable objects, when navigated object + * is being edited * @constructor - * @implements {Policy.} */ - function EditContextualActionPolicy(navigationService) { + function EditContextualActionPolicy(navigationService, editModeBlacklist, nonEditContextBlacklist) { this.navigationService = navigationService; + //The list of objects disallowed on target object when in edit mode - this.editBlacklist = ["copy", "follow", "window"]; + this.editModeBlacklist = editModeBlacklist; //The list of objects disallowed on target object that is not in // edit mode (ie. the context menu in the tree on the LHS). - this.nonEditBlacklist = ["copy", "follow", "properties", "move", "link", "remove"]; + this.nonEditContextBlacklist = nonEditContextBlacklist; + } + + function isParentEditable(object) { + var parent = object.hasCapability("context") && object.getCapability("context").getParent(); + return !!parent && parent.hasCapability("editor"); } EditContextualActionPolicy.prototype.allow = function (action, context) { @@ -48,11 +58,11 @@ define( actionMetadata = action.getMetadata ? action.getMetadata() : {}; if (navigatedObject.hasCapability('editor')) { - if (!selectedObject.hasCapability('editor')){ - //Target is in the context menu - return this.nonEditBlacklist.indexOf(actionMetadata.key) === -1; + if (selectedObject.hasCapability('editor') || isParentEditable(selectedObject)){ + return this.editModeBlacklist.indexOf(actionMetadata.key) === -1; } else { - return this.editBlacklist.indexOf(actionMetadata.key) === -1; + //Target is in the context menu + return this.nonEditContextBlacklist.indexOf(actionMetadata.key) === -1; } } else { return true; diff --git a/platform/commonUI/edit/test/policies/EditContextualActionPolicySpec.js b/platform/commonUI/edit/test/policies/EditContextualActionPolicySpec.js index 8dbf2c128c..f7ec5e1709 100644 --- a/platform/commonUI/edit/test/policies/EditContextualActionPolicySpec.js +++ b/platform/commonUI/edit/test/policies/EditContextualActionPolicySpec.js @@ -33,13 +33,15 @@ define( context, navigatedObject, mockDomainObject, - metadata; + metadata, + editModeBlacklist = ["copy", "follow", "window", "link", "locate"], + nonEditContextBlacklist = ["copy", "follow", "properties", "move", "link", "remove", "locate"]; beforeEach(function () { navigatedObject = jasmine.createSpyObj("navigatedObject", ["hasCapability"]); navigatedObject.hasCapability.andReturn(false); - mockDomainObject = jasmine.createSpyObj("domainObject", ["hasCapability"]); + mockDomainObject = jasmine.createSpyObj("domainObject", ["hasCapability", "getCapability"]); mockDomainObject.hasCapability.andReturn(false); navigationService = jasmine.createSpyObj("navigationService", ["getNavigation"]); @@ -51,7 +53,7 @@ define( context = {domainObject: mockDomainObject}; - policy = new EditContextualActionPolicy(navigationService); + policy = new EditContextualActionPolicy(navigationService, editModeBlacklist, nonEditContextBlacklist); }); it('Allows all actions when navigated object not in edit mode', function() { @@ -65,6 +67,28 @@ define( expect(policy.allow(mockAction, context)).toBe(true); }); + it('Allows "remove" action when navigated object in edit mode,' + + ' and selected object not editable, but its parent is.', + function() { + var mockParent = jasmine.createSpyObj("parentObject", ["hasCapability"]), + mockContextCapability = jasmine.createSpyObj("contextCapability", ["getParent"]); + + mockParent.hasCapability.andReturn(true); + mockContextCapability.getParent.andReturn(mockParent); + navigatedObject.hasCapability.andReturn(true); + + mockDomainObject.getCapability.andReturn(mockContextCapability); + mockDomainObject.hasCapability.andCallFake(function (capability) { + switch (capability) { + case "editor": return false; + case "context": return true; + } + }); + metadata.key = "remove"; + + expect(policy.allow(mockAction, context)).toBe(true); + }); + it('Disallows "move" action when navigated object in edit mode,' + ' but selected object not in edit mode ', function() { navigatedObject.hasCapability.andReturn(true); From aac5a6d250cfef99633596a3a9548d975f482d18 Mon Sep 17 00:00:00 2001 From: Henry Date: Wed, 20 Apr 2016 19:18:27 -0700 Subject: [PATCH 057/132] #769 - Removed empty code block and addressed some excessive guard code --- platform/features/table/src/TableConfiguration.js | 7 +++---- .../features/table/src/controllers/MCTTableController.js | 4 +--- 2 files changed, 4 insertions(+), 7 deletions(-) diff --git a/platform/features/table/src/TableConfiguration.js b/platform/features/table/src/TableConfiguration.js index 59994ff13e..8494d88104 100644 --- a/platform/features/table/src/TableConfiguration.js +++ b/platform/features/table/src/TableConfiguration.js @@ -140,8 +140,7 @@ define( * @private */ TableConfiguration.prototype.defaultColumnConfiguration = function () { - return ((this.domainObject.getModel().configuration || {}).table || - {}).columns; + return ((this.domainObject.getModel().configuration || {}).table || {}).columns || {}; }; /** @@ -176,7 +175,7 @@ define( TableConfiguration.prototype.buildColumnConfiguration = function () { var configuration = {}, //Use existing persisted config, or default it - defaultConfig = this.defaultColumnConfiguration() || {}; + defaultConfig = this.defaultColumnConfiguration(); /** * For each column header, define a configuration value @@ -185,7 +184,7 @@ define( */ this.getHeaders().forEach(function (columnTitle) { configuration[columnTitle] = - typeof (defaultConfig || {})[columnTitle] === 'undefined' ? true : + typeof defaultConfig[columnTitle] === 'undefined' ? true : defaultConfig[columnTitle]; }); diff --git a/platform/features/table/src/controllers/MCTTableController.js b/platform/features/table/src/controllers/MCTTableController.js index fd949f7056..39540ef0b8 100644 --- a/platform/features/table/src/controllers/MCTTableController.js +++ b/platform/features/table/src/controllers/MCTTableController.js @@ -421,9 +421,7 @@ define( currentColumnLength, largestColumn, largestColumnLength; - if (!row[key]){ - //do nothing, no value for this column; - } else { + if (row[key]){ currentColumn = (row[key]).text; currentColumnLength = (currentColumn && currentColumn.length) ? From 8b390e7fb9bc8dc241d57477acd84ee89ec4469f Mon Sep 17 00:00:00 2001 From: Andrew Henry Date: Wed, 20 Apr 2016 19:31:54 -0700 Subject: [PATCH 058/132] Revert "[Tables] Fix to correct sorting in realtime tables" --- docs/src/guide/index.md | 68 +----- platform/features/table/bundle.js | 24 +-- platform/features/table/res/sass/table.scss | 50 ----- .../table/res/templates/mct-table.html | 43 ++-- .../table/res/templates/rt-table.html | 2 +- .../{historical-table.html => table.html} | 2 +- .../features/table/src/TableConfiguration.js | 22 +- .../controllers/HistoricalTableController.js | 70 ------- .../src/controllers/MCTTableController.js | 195 ++++++++++-------- ...oller.js => RTTelemetryTableController.js} | 73 ++++--- .../src/controllers/TableOptionsController.js | 27 +-- .../controllers/TelemetryTableController.js | 94 +++++---- .../features/table/src/directives/MCTTable.js | 45 ---- .../table/test/TableConfigurationSpec.js | 8 +- .../controllers/MCTTableControllerSpec.js | 97 ++------- ...c.js => RTTelemetryTableControllerSpec.js} | 13 +- .../controllers/TableOptionsControllerSpec.js | 22 +- ...pec.js => TelemetryTableControllerSpec.js} | 17 +- 18 files changed, 293 insertions(+), 579 deletions(-) delete mode 100644 platform/features/table/res/sass/table.scss rename platform/features/table/res/templates/{historical-table.html => table.html} (74%) delete mode 100644 platform/features/table/src/controllers/HistoricalTableController.js rename platform/features/table/src/controllers/{RealtimeTableController.js => RTTelemetryTableController.js} (59%) rename platform/features/table/test/controllers/{RealtimeTableControllerSpec.js => RTTelemetryTableControllerSpec.js} (94%) rename platform/features/table/test/controllers/{HistoricalTableControllerSpec.js => TelemetryTableControllerSpec.js} (94%) diff --git a/docs/src/guide/index.md b/docs/src/guide/index.md index 7016462a5a..93cb95bb7a 100644 --- a/docs/src/guide/index.md +++ b/docs/src/guide/index.md @@ -6,13 +6,12 @@ Victor Woeltjen September 23, 2015 Document Version 1.1 -Date | Version | Summary of Changes | Author -------------------- | --------- | ------------------------- | --------------- -April 29, 2015 | 0 | Initial Draft | Victor Woeltjen -May 12, 2015 | 0.1 | | Victor Woeltjen -June 4, 2015 | 1.0 | Name Changes | Victor Woeltjen -October 4, 2015 | 1.1 | Conversion to MarkDown | Andrew Henry -April 5, 2016 | 1.2 | Added Mct-table directive | Andrew Henry +Date | Version | Summary of Changes | Author +------------------- | --------- | ----------------------- | --------------- +April 29, 2015 | 0 | Initial Draft | Victor Woeltjen +May 12, 2015 | 0.1 | | Victor Woeltjen +June 4, 2015 | 1.0 | Name Changes | Victor Woeltjen +October 4, 2015 | 1.1 | Conversion to MarkDown | Andrew Henry # Introduction The purpose of this guide is to familiarize software developers with the Open @@ -1601,61 +1600,6 @@ there are items . ] } -## Table - -The `mct-table` directive provides a generic table component, with optional -sorting and filtering capabilities. The table can be pre-populated with data -by setting the `rows` parameter, and it can be updated in real-time using the -`add:row` and `remove:row` broadcast events. The table will expand to occupy -100% of the size of its containing element. The table is highly optimized for -very large data sets. - -### Events - -The table supports two events for notifying that the rows have changed. For -performance reasons, the table does not monitor the content of `rows` -constantly. - -* `add:row`: A `$broadcast` event that will notify the table that a new row -has been added to the table. - -eg. The code below adds a new row, and alerts the table using the `add:row` -event. Sorting and filtering will be applied automatically by the table component. - -``` -$scope.rows.push(newRow); -$scope.$broadcast('add:row', $scope.rows.length-1); -``` - -* `remove:row`: A `$broadcast` event that will notify the table that a row -should be removed from the table. - -eg. The code below removes a row from the rows array, and then alerts the table -to its removal. - -``` -$scope.rows.slice(5, 1); -$scope.$broadcast('remove:row', 5); -``` - -### Parameters - -* `headers`: An array of string values which will constitute the column titles - that appear at the top of the table. Corresponding values are specified in - the rows using the header title provided here. -* `rows`: An array of objects containing row values. Each element in the -array must be an associative array, where the key corresponds to a column header. -* `enableFilter`: A boolean that if true, will enable searching and result -filtering. When enabled, each column will have a text input field that can be -used to filter the table rows in real time. -* `enableSort`: A boolean determining whether rows can be sorted. If true, -sorting will be enabled allowing sorting by clicking on column headers. Only -one column may be sorted at a time. -* `autoScroll`: A boolean value that if true, will cause the table to automatically -scroll to the bottom as new data arrives. Auto-scroll can be disengaged manually -by scrolling away from the bottom of the table, and can also be enabled manually -by scrolling to the bottom of the table rows. - # Services The Open MCT Web platform provides a variety of services which can be retrieved diff --git a/platform/features/table/bundle.js b/platform/features/table/bundle.js index 0220b7dc6d..77ead67c04 100644 --- a/platform/features/table/bundle.js +++ b/platform/features/table/bundle.js @@ -23,16 +23,16 @@ define([ "./src/directives/MCTTable", - "./src/controllers/RealtimeTableController", - "./src/controllers/HistoricalTableController", + "./src/controllers/RTTelemetryTableController", + "./src/controllers/TelemetryTableController", "./src/controllers/TableOptionsController", '../../commonUI/regions/src/Region', '../../commonUI/browse/src/InspectorRegion', "legacyRegistry" ], function ( MCTTable, - RealtimeTableController, - HistoricalTableController, + RTTelemetryTableController, + TelemetryTableController, TableOptionsController, Region, InspectorRegion, @@ -109,13 +109,13 @@ define([ ], "controllers": [ { - "key": "HistoricalTableController", - "implementation": HistoricalTableController, + "key": "TelemetryTableController", + "implementation": TelemetryTableController, "depends": ["$scope", "telemetryHandler", "telemetryFormatter"] }, { - "key": "RealtimeTableController", - "implementation": RealtimeTableController, + "key": "RTTelemetryTableController", + "implementation": RTTelemetryTableController, "depends": ["$scope", "telemetryHandler", "telemetryFormatter"] }, { @@ -130,7 +130,7 @@ define([ "name": "Historical Table", "key": "table", "glyph": "\ue604", - "templateUrl": "templates/historical-table.html", + "templateUrl": "templates/table.html", "needs": [ "telemetry" ], @@ -161,12 +161,6 @@ define([ "key": "table-options-edit", "templateUrl": "templates/table-options-edit.html" } - ], - "stylesheets": [ - { - "stylesheetUrl": "css/table.css", - "priority": "mandatory" - } ] } }); diff --git a/platform/features/table/res/sass/table.scss b/platform/features/table/res/sass/table.scss deleted file mode 100644 index a79cfac4c6..0000000000 --- a/platform/features/table/res/sass/table.scss +++ /dev/null @@ -1,50 +0,0 @@ -/***************************************************************************** - * Open MCT Web, Copyright (c) 2014-2015, United States Government - * as represented by the Administrator of the National Aeronautics and Space - * Administration. All rights reserved. - * - * Open MCT Web is licensed under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * http://www.apache.org/licenses/LICENSE-2.0. - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the - * License for the specific language governing permissions and limitations - * under the License. - * - * Open MCT Web includes source code licensed under additional open source - * licenses. See the Open Source Licenses file (LICENSES.md) included with - * this source code distribution or the Licensing information page available - * at runtime from the About dialog for additional information. - *****************************************************************************/ -.sizing-table { - min-width: 100%; - z-index: -1; - visibility: hidden; - position: absolute; - - //Add some padding to allow for decorations such as limits indicator - td { - padding-right: 15px; - padding-left: 10px; - white-space: nowrap; - } -} -.mct-table { - table-layout: fixed; - th { - box-sizing: border-box; - } - tbody { - tr { - position: absolute; - } - td { - white-space: nowrap; - overflow: hidden; - box-sizing: border-box; - } - } -} \ No newline at end of file diff --git a/platform/features/table/res/templates/mct-table.html b/platform/features/table/res/templates/mct-table.html index 7a18388455..5997376587 100644 --- a/platform/features/table/res/templates/mct-table.html +++ b/platform/features/table/res/templates/mct-table.html @@ -1,25 +1,22 @@ -
      - - - - - - - -
      {{header}}
      - {{sizingRow[header].text}} -
      - +
      + }"> - +
      @@ -42,15 +41,21 @@
      {{ visibleRow.contents[header].text }} diff --git a/platform/features/table/res/templates/rt-table.html b/platform/features/table/res/templates/rt-table.html index d35015c96c..326c5b847b 100644 --- a/platform/features/table/res/templates/rt-table.html +++ b/platform/features/table/res/templates/rt-table.html @@ -1,4 +1,4 @@ -
      +
      +
      0) { this.insertSorted(this.$scope.displayRows, row); - - //Resize the columns , then update the rows visible in the table - this.resize([this.$scope.sizingRow, row]) - .then(this.setVisibleRows.bind(this)) - .then(this.scrollToBottom.bind(this)); } + + this.$timeout(this.setElementSizes.bind(this)) + .then(this.scrollToBottom.bind(this)); }; /** - * Handles a row remove event. Rows can be removed as needed using the - * `remove:row` broadcast event. + * Handles a row add event. Rows can be added as needed using the + * `addRow` broadcast event. * @private */ MCTTableController.prototype.removeRow = function (event, rowIndex) { @@ -232,7 +225,7 @@ define( * enabled, reset filters. If sorting is enabled, reset * sorting. */ - MCTTableController.prototype.setHeaders = function (newHeaders) { + MCTTableController.prototype.updateHeaders = function (newHeaders) { if (!newHeaders){ return; } @@ -248,7 +241,7 @@ define( this.$scope.sortColumn = undefined; this.$scope.sortDirection = undefined; } - this.setRows(this.$scope.rows); + this.updateRows(this.$scope.rows); }; /** @@ -256,12 +249,13 @@ define( * for individual rows. */ MCTTableController.prototype.setElementSizes = function () { - var thead = this.thead, - tbody = this.tbody, + var self = this, + thead = this.element.find('thead'), + tbody = this.element.find('tbody'), firstRow = tbody.find('tr'), column = firstRow.find('td'), headerHeight = thead.prop('offsetHeight'), - rowHeight = firstRow.prop('offsetHeight'), + rowHeight = 20, columnWidth, tableWidth = 0, overallHeight = headerHeight + (rowHeight * @@ -278,12 +272,15 @@ define( this.$scope.headerHeight = headerHeight; this.$scope.rowHeight = rowHeight; this.$scope.totalHeight = overallHeight; + this.setVisibleRows(); if (tableWidth > 0) { this.$scope.totalWidth = tableWidth + 'px'; } else { this.$scope.totalWidth = 'none'; } + + this.$scope.overrideRowPositioning = true; }; /** @@ -295,14 +292,21 @@ define( sortKey = this.$scope.sortColumn; function binarySearch(searchArray, searchElement, min, max){ - var sampleAt = Math.floor((max - min) / 2) + min; - + var sampleAt = Math.floor((max - min) / 2) + min, + valA, + valB; if (max < min) { return min; // Element is not in array, min gives direction } - switch(self.sortComparator(searchElement[sortKey].text, - searchArray[sampleAt][sortKey].text)) { + valA = isNaN(searchElement[sortKey].text) ? + searchElement[sortKey].text : + parseFloat(searchElement[sortKey].text); + valB = isNaN(searchArray[sampleAt][sortKey].text) ? + searchArray[sampleAt][sortKey].text : + parseFloat(searchArray[sampleAt][sortKey].text); + + switch(self.sortComparator(valA, valB)) { case -1: return binarySearch(searchArray, searchElement, min, sampleAt - 1); @@ -340,34 +344,8 @@ define( */ MCTTableController.prototype.sortComparator = function (a, b) { var result = 0, - sortDirectionMultiplier, - numberA, - numberB; - /** - * Given a value, if it is a number, or a string representation of a - * number, then return a number representation. Otherwise, return - * the original value. It's a little more robust than using just - * Number() or parseFloat, or isNaN in isolation, all of which are - * fairly inconsistent in their results. - * @param value The value to return as a number. - * @returns {*} The value cast to a Number, or the original value if - * a Number representation is not possible. - */ - function toNumber (value){ - var val = !isNaN(Number(value)) && !isNaN(parseFloat(value)) ? Number(value) : value; - return val; - } + sortDirectionMultiplier; - numberA = toNumber(a); - numberB = toNumber(b); - - //If they're both numbers, then compare them as numbers - if (typeof numberA === "number" && typeof numberB === "number") { - a = numberA; - b = numberB; - } - - //If they're both strings, then ignore case if (typeof a === "string" && typeof b === "string") { a = a.toLowerCase(); b = b.toLowerCase(); @@ -404,7 +382,15 @@ define( } return rowsToSort.sort(function (a, b) { - return self.sortComparator(a[sortKey].text, b[sortKey].text); + //If the values to compare can be compared as + // numbers, do so. String comparison of number + // values can cause inconsistencies + var valA = isNaN(a[sortKey].text) ? a[sortKey].text : + parseFloat(a[sortKey].text), + valB = isNaN(b[sortKey].text) ? b[sortKey].text : + parseFloat(b[sortKey].text); + + return self.sortComparator(valA, valB); }); }; @@ -414,48 +400,74 @@ define( * pre-calculate optimal column sizes without having to render * every row. */ - MCTTableController.prototype.buildLargestRow = function (rows) { - var largestRow = rows.reduce(function (prevLargest, row) { + MCTTableController.prototype.findLargestRow = function (rows) { + var largestRow = rows.reduce(function (largestRow, row) { Object.keys(row).forEach(function (key) { - var currentColumn, - currentColumnLength, - largestColumn, - largestColumnLength; - if (row[key]){ - currentColumn = (row[key]).text; + var currentColumn = row[key].text, currentColumnLength = (currentColumn && currentColumn.length) ? currentColumn.length : - currentColumn; - largestColumn = prevLargest[key] ? prevLargest[key].text : ""; - largestColumnLength = largestColumn.length; + currentColumn, + largestColumn = largestRow[key].text, + largestColumnLength = + (largestColumn && largestColumn.length) ? + largestColumn.length : + largestColumn; - if (currentColumnLength > largestColumnLength) { - prevLargest[key] = JSON.parse(JSON.stringify(row[key])); - } + if (currentColumnLength > largestColumnLength) { + largestRow[key] = JSON.parse(JSON.stringify(row[key])); } }); - return prevLargest; + return largestRow; }, JSON.parse(JSON.stringify(rows[0] || {}))); + + largestRow = JSON.parse(JSON.stringify(largestRow)); + + // Pad with characters to accomodate variable-width fonts, + // and remove characters that would allow word-wrapping. + Object.keys(largestRow).forEach(function (key) { + var padCharacters, + i; + + largestRow[key].text = String(largestRow[key].text); + padCharacters = largestRow[key].text.length / 10; + for (i = 0; i < padCharacters; i++) { + largestRow[key].text = largestRow[key].text + 'W'; + } + largestRow[key].text = largestRow[key].text + .replace(/[ \-_]/g, 'W'); + }); return largestRow; }; /** - * Calculates the widest row in the table, and if necessary, resizes - * the table accordingly - * - * @param rows the rows on which to resize - * @returns {Promise} a promise that will resolve when resizing has - * occurred. + * Calculates the widest row in the table, pads that row, and adds + * it to the table. Allows the table to size itself, then uses this + * as basis for column dimensions. * @private */ - MCTTableController.prototype.resize = function (rows) { - this.$scope.sizingRow = this.buildLargestRow(rows); - return this.$timeout(this.setElementSizes.bind(this)); + MCTTableController.prototype.resize = function (){ + var largestRow = this.findLargestRow(this.$scope.displayRows), + self = this; + this.$scope.visibleRows = [ + { + rowIndex: 0, + offsetY: undefined, + contents: largestRow + } + ]; + + //Wait a timeout to allow digest of previous change to visible + // rows to happen. + this.$timeout(function () { + //Remove temporary padding row used for setting column widths + self.$scope.visibleRows = []; + self.setElementSizes(); + }); }; /** - * @private + * @priate */ MCTTableController.prototype.filterAndSort = function (rows) { var displayRows = rows; @@ -466,21 +478,26 @@ define( if (this.$scope.enableSort) { displayRows = this.sortRows(displayRows.slice(0)); } - return displayRows; + this.$scope.displayRows = displayRows; }; /** * Update rows with new data. If filtering is enabled, rows * will be sorted before display. */ - MCTTableController.prototype.setRows = function (newRows) { + MCTTableController.prototype.updateRows = function (newRows) { + //Reset visible rows because new row data available. + this.$scope.visibleRows = []; + + this.$scope.overrideRowPositioning = false; + //Nothing to show because no columns visible - if (!this.$scope.displayHeaders || !newRows) { + if (!this.$scope.displayHeaders) { return; } - this.$scope.displayRows = this.filterAndSort(newRows || []); - this.resize(newRows).then(this.setVisibleRows.bind(this)); + this.filterAndSort(newRows || []); + this.resize(); }; /** diff --git a/platform/features/table/src/controllers/RealtimeTableController.js b/platform/features/table/src/controllers/RTTelemetryTableController.js similarity index 59% rename from platform/features/table/src/controllers/RealtimeTableController.js rename to platform/features/table/src/controllers/RTTelemetryTableController.js index 3f983207bc..8a61d61b5e 100644 --- a/platform/features/table/src/controllers/RealtimeTableController.js +++ b/platform/features/table/src/controllers/RTTelemetryTableController.js @@ -37,7 +37,7 @@ define( * @param telemetryFormatter * @constructor */ - function RealtimeTableController($scope, telemetryHandler, telemetryFormatter) { + function RTTelemetryTableController($scope, telemetryHandler, telemetryFormatter) { TableController.call(this, $scope, telemetryHandler, telemetryFormatter); $scope.autoScroll = false; @@ -66,35 +66,58 @@ define( }); } - RealtimeTableController.prototype = Object.create(TableController.prototype); + RTTelemetryTableController.prototype = Object.create(TableController.prototype); /** - * Overrides method on TelemetryTableController providing handling - * for realtime data. + Override the subscribe function defined on the parent controller in + order to handle realtime telemetry instead of historical. */ - RealtimeTableController.prototype.addRealtimeData = function() { - var self = this, - datum, - row; - this.handle.getTelemetryObjects().forEach(function (telemetryObject){ - datum = self.handle.getDatum(telemetryObject); - if (datum) { - //Populate row values from telemetry datum - row = self.table.getRowValues(telemetryObject, datum); - self.$scope.rows.push(row); - - //Inform table that a new row has been added - if (self.$scope.rows.length > self.maxRows) { - self.$scope.$broadcast('remove:row', 0); - self.$scope.rows.shift(); - } - - self.$scope.$broadcast('add:row', - self.$scope.rows.length - 1); - } + RTTelemetryTableController.prototype.subscribe = function () { + var self = this; + self.$scope.rows = undefined; + (this.subscriptions || []).forEach(function (unsubscribe){ + unsubscribe(); }); + + if (this.handle) { + this.handle.unsubscribe(); + } + + function updateData(){ + var datum, + row; + self.handle.getTelemetryObjects().forEach(function (telemetryObject){ + datum = self.handle.getDatum(telemetryObject); + if (datum) { + row = self.table.getRowValues(telemetryObject, datum); + if (!self.$scope.rows){ + self.$scope.rows = [row]; + self.$scope.$digest(); + } else { + self.$scope.rows.push(row); + + if (self.$scope.rows.length > self.maxRows) { + self.$scope.$broadcast('remove:row', 0); + self.$scope.rows.shift(); + } + + self.$scope.$broadcast('add:row', + self.$scope.rows.length - 1); + } + } + }); + + } + + this.handle = this.$scope.domainObject && this.telemetryHandler.handle( + this.$scope.domainObject, + updateData, + true // Lossless + ); + + this.setup(); }; - return RealtimeTableController; + return RTTelemetryTableController; } ); diff --git a/platform/features/table/src/controllers/TableOptionsController.js b/platform/features/table/src/controllers/TableOptionsController.js index a28411e7d0..c3b479073c 100644 --- a/platform/features/table/src/controllers/TableOptionsController.js +++ b/platform/features/table/src/controllers/TableOptionsController.js @@ -51,29 +51,13 @@ define( this.$scope = $scope; this.domainObject = $scope.domainObject; - this.listeners = []; $scope.columnsForm = {}; - function unlisten() { - self.listeners.forEach(function (listener) { - listener(); - }); - } - - $scope.$watch('domainObject', function(domainObject) { - unlisten(); - self.populateForm(domainObject.getModel()); - - self.listeners.push(self.domainObject.getCapability('mutation').listen(function (model) { - self.populateForm(model); - })); + this.domainObject.getCapability('mutation').listen(function (model) { + self.populateForm(model); }); - /** - * Maintain a configuration object on scope that stores column - * configuration. On change, synchronize with object model. - */ $scope.$watchCollection('configuration.table.columns', function (columns){ if (columns){ self.domainObject.useCapability('mutation', function (model) { @@ -83,11 +67,6 @@ define( } }); - /** - * Destroy all mutation listeners - */ - $scope.$on('$destroy', unlisten); - } TableOptionsController.prototype.populateForm = function (model) { @@ -107,7 +86,7 @@ define( 'key': key }); }); - this.$scope.configuration = JSON.parse(JSON.stringify(model.configuration || {})); + this.$scope.configuration = JSON.parse(JSON.stringify(model.configuration)); }; return TableOptionsController; diff --git a/platform/features/table/src/controllers/TelemetryTableController.js b/platform/features/table/src/controllers/TelemetryTableController.js index 36f54b1ac6..e579c5eeb8 100644 --- a/platform/features/table/src/controllers/TelemetryTableController.js +++ b/platform/features/table/src/controllers/TelemetryTableController.js @@ -52,15 +52,19 @@ define( this.$scope = $scope; this.columns = {}; //Range and Domain columns this.handle = undefined; + //this.pending = false; this.telemetryHandler = telemetryHandler; this.table = new TableConfiguration($scope.domainObject, telemetryFormatter); this.changeListeners = []; - $scope.rows = []; + $scope.rows = undefined; // Subscribe to telemetry when a domain object becomes available - this.$scope.$watch('domainObject', function(){ + this.$scope.$watch('domainObject', function(domainObject){ + if (!domainObject) + return; + self.subscribe(); self.registerChangeListeners(); }); @@ -69,24 +73,16 @@ define( this.$scope.$on("$destroy", this.destroy.bind(this)); } - /** - * @private - */ - TelemetryTableController.prototype.unregisterChangeListeners = function () { - this.changeListeners.forEach(function (listener) { - return listener && listener(); - }); - this.changeListeners = []; - }; - /** * Defer registration of change listeners until domain object is * available in order to avoid race conditions * @private */ TelemetryTableController.prototype.registerChangeListeners = function () { - this.unregisterChangeListeners(); - + this.changeListeners.forEach(function (listener) { + return listener && listener(); + }); + this.changeListeners = []; // When composition changes, re-subscribe to the various // telemetry subscriptions this.changeListeners.push(this.$scope.$watchCollection( @@ -107,37 +103,25 @@ define( } }; - /** - * Function for handling realtime data when it is available. This - * will be called by the telemetry framework when new data is - * available. - * - * Method should be overridden by specializing class. - */ - TelemetryTableController.prototype.addRealtimeData = function () { - }; - - /** - * Function for handling historical data. Will be called by - * telemetry framework when requested historical data is available. - * Should be overridden by specializing class. - */ - TelemetryTableController.prototype.addHistoricalData = function () { - }; - /** Create a new subscription. This can be overridden by children to change default behaviour (which is to retrieve historical telemetry only). */ TelemetryTableController.prototype.subscribe = function () { + var self = this; + if (this.handle) { this.handle.unsubscribe(); } + //Noop because not supporting realtime data right now + function noop(){ + } + this.handle = this.$scope.domainObject && this.telemetryHandler.handle( this.$scope.domainObject, - this.addRealtimeData.bind(this), + noop, true // Lossless ); @@ -146,6 +130,28 @@ define( this.setup(); }; + /** + * Populates historical data on scope when it becomes available + * @private + */ + TelemetryTableController.prototype.addHistoricalData = function () { + var rowData = [], + self = this; + + this.handle.getTelemetryObjects().forEach(function (telemetryObject){ + var series = self.handle.getSeries(telemetryObject) || {}, + pointCount = series.getPointCount ? series.getPointCount() : 0, + i = 0; + + for (; i < pointCount; i++) { + rowData.push(self.table.getRowValues(telemetryObject, + self.handle.makeDatum(telemetryObject, series, i))); + } + }); + + this.$scope.rows = rowData; + }; + /** * Setup table columns based on domain object metadata */ @@ -156,9 +162,7 @@ define( if (handle) { handle.promiseTelemetryObjects().then(function () { - self.$scope.headers = []; - self.$scope.rows = []; - table.populateColumns(handle.getMetadata()); + table.buildColumns(handle.getMetadata()); self.filterColumns(); @@ -172,14 +176,26 @@ define( } }; + /** + * @private + * @param object The object for which data is available (table may + * be composed of multiple objects) + * @param datum The data received from the telemetry source + */ + TelemetryTableController.prototype.updateRows = function (object, datum) { + this.$scope.rows.push(this.table.getRowValues(object, datum)); + }; + /** * When column configuration changes, update the visible headers * accordingly. * @private */ - TelemetryTableController.prototype.filterColumns = function () { - var columnConfig = this.table.buildColumnConfiguration(); - + TelemetryTableController.prototype.filterColumns = function (columnConfig) { + if (!columnConfig){ + columnConfig = this.table.getColumnConfiguration(); + this.table.saveColumnConfiguration(columnConfig); + } //Populate headers with visible columns (determined by configuration) this.$scope.headers = Object.keys(columnConfig).filter(function (column) { return columnConfig[column]; diff --git a/platform/features/table/src/directives/MCTTable.js b/platform/features/table/src/directives/MCTTable.js index 2d61669a2e..575e830395 100644 --- a/platform/features/table/src/directives/MCTTable.js +++ b/platform/features/table/src/directives/MCTTable.js @@ -12,51 +12,6 @@ define( * Defines a generic 'Table' component. The table can be populated * en-masse by setting the rows attribute, or rows can be added as * needed via a broadcast 'addRow' event. - * - * This directive accepts parameters specifying header and row - * content, as well as some additional options. - * - * Two broadcast events for notifying the table that the rows have - * changed. For performance reasons, the table does not monitor the - * content of `rows` constantly. - * - 'add:row': A $broadcast event that will notify the table that - * a new row has been added to the table. - * eg. - *
      
      -         * $scope.rows.push(newRow);
      -         * $scope.$broadcast('add:row', $scope.rows.length-1);
      -         * 
      - * The code above adds a new row, and alerts the table using the - * add:row event. Sorting and filtering will be applied - * automatically by the table component. - * - * - 'remove:row': A $broadcast event that will notify the table that a - * row should be removed from the table. - * eg. - *
      
      -         * $scope.rows.slice(5, 1);
      -         * $scope.$broadcast('remove:row', 5);
      -         * 
      - * The code above removes a row from the rows array, and then alerts - * the table to its removal. - * - * @memberof platform/features/table - * @param {string[]} headers The column titles to appear at the top - * of the table. Corresponding values are specified in the rows - * using the header title provided here. - * @param {Object[]} rows The row content. Each row is an object - * with key-value pairs where the key corresponds to a header - * specified in the headers parameter. - * @param {boolean} enableFilter If true, values will be searchable - * and results filtered - * @param {boolean} enableSort If true, sorting will be enabled - * allowing sorting by clicking on column headers - * @param {boolean} autoScroll If true, table will automatically - * scroll to the bottom as new data arrives. Auto-scroll can be - * disengaged manually by scrolling away from the bottom of the - * table, and can also be enabled manually by scrolling to the bottom of - * the table rows. - * * @constructor */ function MCTTable($timeout) { diff --git a/platform/features/table/test/TableConfigurationSpec.js b/platform/features/table/test/TableConfigurationSpec.js index bfc6f50edb..86a18aee5a 100644 --- a/platform/features/table/test/TableConfigurationSpec.js +++ b/platform/features/table/test/TableConfigurationSpec.js @@ -116,10 +116,10 @@ define( }]; beforeEach(function() { - table.populateColumns(metadata); + table.buildColumns(metadata); }); - it("populates columns", function() { + it("populates the columns attribute", function() { expect(table.columns.length).toBe(5); }); @@ -141,7 +141,7 @@ define( it("Provides a default configuration with all columns" + " visible", function() { - var configuration = table.buildColumnConfiguration(); + var configuration = table.getColumnConfiguration(); expect(configuration).toBeDefined(); expect(Object.keys(configuration).every(function(key){ @@ -160,7 +160,7 @@ define( }; mockModel.configuration = modelConfig; - tableConfig = table.buildColumnConfiguration(); + tableConfig = table.getColumnConfiguration(); expect(tableConfig).toBeDefined(); expect(tableConfig['Range 1']).toBe(false); diff --git a/platform/features/table/test/controllers/MCTTableControllerSpec.js b/platform/features/table/test/controllers/MCTTableControllerSpec.js index 175d8fed0a..5e38c7e651 100644 --- a/platform/features/table/test/controllers/MCTTableControllerSpec.js +++ b/platform/features/table/test/controllers/MCTTableControllerSpec.js @@ -58,18 +58,15 @@ define( mockElement = jasmine.createSpyObj('element', [ 'find', - 'prop', 'on' ]); mockElement.find.andReturn(mockElement); - mockElement.prop.andReturn(0); mockScope.displayHeaders = true; mockTimeout = jasmine.createSpy('$timeout'); mockTimeout.andReturn(promise(undefined)); controller = new MCTTableController(mockScope, mockTimeout, mockElement); - spyOn(controller, 'setVisibleRows'); }); it('Reacts to changes to filters, headers, and rows', function() { @@ -118,7 +115,7 @@ define( }); it('Sets rows on scope when rows change', function() { - controller.setRows(testRows); + controller.updateRows(testRows); expect(mockScope.displayRows.length).toBe(3); expect(mockScope.displayRows).toEqual(testRows); }); @@ -130,7 +127,7 @@ define( 'col2': {'text': 'ghi'}, 'col3': {'text': 'row3 col3'} }; - controller.setRows(testRows); + controller.updateRows(testRows); expect(mockScope.displayRows.length).toBe(3); testRows.push(row4); addRowFunc(undefined, 3); @@ -139,8 +136,10 @@ define( it('Supports removing rows individually', function() { var removeRowFunc = mockScope.$on.calls[mockScope.$on.calls.length-1].args[1]; - controller.setRows(testRows); + controller.updateRows(testRows); expect(mockScope.displayRows.length).toBe(3); + spyOn(controller, 'setVisibleRows'); + //controller.setVisibleRows.andReturn(undefined); removeRowFunc(undefined, 2); expect(mockScope.displayRows.length).toBe(2); expect(controller.setVisibleRows).toHaveBeenCalled(); @@ -180,54 +179,7 @@ define( expect(sortedRows[2].col2.text).toEqual('abc'); }); - it('correctly sorts rows of differing types', function () { - mockScope.sortColumn = 'col2'; - mockScope.sortDirection = 'desc'; - - testRows.push({ - 'col1': {'text': 'row4 col1'}, - 'col2': {'text': '123'}, - 'col3': {'text': 'row4 col3'} - }); - testRows.push({ - 'col1': {'text': 'row5 col1'}, - 'col2': {'text': '456'}, - 'col3': {'text': 'row5 col3'} - }); - testRows.push({ - 'col1': {'text': 'row5 col1'}, - 'col2': {'text': ''}, - 'col3': {'text': 'row5 col3'} - }); - - sortedRows = controller.sortRows(testRows); - expect(sortedRows[0].col2.text).toEqual('ghi'); - expect(sortedRows[1].col2.text).toEqual('def'); - expect(sortedRows[2].col2.text).toEqual('abc'); - - expect(sortedRows[sortedRows.length-3].col2.text).toEqual('456'); - expect(sortedRows[sortedRows.length-2].col2.text).toEqual('123'); - expect(sortedRows[sortedRows.length-1].col2.text).toEqual(''); - }); - - describe('The sort comparator', function () { - it('Correctly sorts different data types', function () { - var val1 = "", - val2 = "1", - val3 = "2016-04-05 18:41:30.713Z", - val4 = "1.1", - val5 = "8.945520958175627e-13"; - mockScope.sortDirection = "asc"; - - expect(controller.sortComparator(val1, val2)).toEqual(-1); - expect(controller.sortComparator(val3, val1)).toEqual(1); - expect(controller.sortComparator(val3, val2)).toEqual(1); - expect(controller.sortComparator(val4, val2)).toEqual(1); - expect(controller.sortComparator(val2, val5)).toEqual(1); - }); - }); - - describe('Adding new rows', function () { + describe('Adding new rows', function() { var row4, row5, row6; @@ -258,20 +210,20 @@ define( mockScope.displayRows = controller.sortRows(testRows.slice(0)); mockScope.rows.push(row4); - controller.addRow(undefined, mockScope.rows.length-1); + controller.newRow(undefined, mockScope.rows.length-1); expect(mockScope.displayRows[0].col2.text).toEqual('xyz'); mockScope.rows.push(row5); - controller.addRow(undefined, mockScope.rows.length-1); + controller.newRow(undefined, mockScope.rows.length-1); expect(mockScope.displayRows[4].col2.text).toEqual('aaa'); mockScope.rows.push(row6); - controller.addRow(undefined, mockScope.rows.length-1); + controller.newRow(undefined, mockScope.rows.length-1); expect(mockScope.displayRows[2].col2.text).toEqual('ggg'); //Add a duplicate row mockScope.rows.push(row6); - controller.addRow(undefined, mockScope.rows.length-1); + controller.newRow(undefined, mockScope.rows.length-1); expect(mockScope.displayRows[2].col2.text).toEqual('ggg'); expect(mockScope.displayRows[3].col2.text).toEqual('ggg'); }); @@ -287,18 +239,18 @@ define( mockScope.displayRows = controller.filterRows(testRows); mockScope.rows.push(row5); - controller.addRow(undefined, mockScope.rows.length-1); + controller.newRow(undefined, mockScope.rows.length-1); expect(mockScope.displayRows.length).toBe(2); expect(mockScope.displayRows[1].col2.text).toEqual('aaa'); mockScope.rows.push(row6); - controller.addRow(undefined, mockScope.rows.length-1); + controller.newRow(undefined, mockScope.rows.length-1); expect(mockScope.displayRows.length).toBe(2); //Row was not added because does not match filter }); it('Adds new rows at the correct sort position when' + - ' not sorted ', function () { + ' not sorted ', function() { mockScope.sortColumn = undefined; mockScope.sortDirection = undefined; mockScope.filters = {}; @@ -306,33 +258,14 @@ define( mockScope.displayRows = testRows.slice(0); mockScope.rows.push(row5); - controller.addRow(undefined, mockScope.rows.length-1); + controller.newRow(undefined, mockScope.rows.length-1); expect(mockScope.displayRows[3].col2.text).toEqual('aaa'); mockScope.rows.push(row6); - controller.addRow(undefined, mockScope.rows.length-1); + controller.newRow(undefined, mockScope.rows.length-1); expect(mockScope.displayRows[4].col2.text).toEqual('ggg'); }); - it('Resizes columns if length of any columns in new' + - ' row exceeds corresponding existing column', function() { - var row7 = { - 'col1': {'text': 'row6 col1'}, - 'col2': {'text': 'some longer string'}, - 'col3': {'text': 'row6 col3'} - }; - - mockScope.sortColumn = undefined; - mockScope.sortDirection = undefined; - mockScope.filters = {}; - - mockScope.displayRows = testRows.slice(0); - - mockScope.rows.push(row7); - controller.addRow(undefined, mockScope.rows.length-1); - expect(controller.$scope.sizingRow.col2).toEqual({text: 'some longer string'}); - }); - }); }); diff --git a/platform/features/table/test/controllers/RealtimeTableControllerSpec.js b/platform/features/table/test/controllers/RTTelemetryTableControllerSpec.js similarity index 94% rename from platform/features/table/test/controllers/RealtimeTableControllerSpec.js rename to platform/features/table/test/controllers/RTTelemetryTableControllerSpec.js index e0b6978d88..59911d1771 100644 --- a/platform/features/table/test/controllers/RealtimeTableControllerSpec.js +++ b/platform/features/table/test/controllers/RTTelemetryTableControllerSpec.js @@ -23,7 +23,7 @@ define( [ - "../../src/controllers/RealtimeTableController" + "../../src/controllers/RTTelemetryTableController" ], function (TableController) { "use strict"; @@ -77,14 +77,14 @@ define( mockTable = jasmine.createSpyObj('table', [ - 'populateColumns', - 'buildColumnConfiguration', + 'buildColumns', + 'getColumnConfiguration', 'getRowValues', 'saveColumnConfiguration' ] ); mockTable.columns = []; - mockTable.buildColumnConfiguration.andReturn(mockConfiguration); + mockTable.getColumnConfiguration.andReturn(mockConfiguration); mockTable.getRowValues.andReturn(mockTableRow); mockDomainObject= jasmine.createSpyObj('domainObject', [ @@ -107,16 +107,13 @@ define( 'unsubscribe', 'getDatum', 'promiseTelemetryObjects', - 'getTelemetryObjects', - 'request' + 'getTelemetryObjects' ]); - // Arbitrary array with non-zero length, contents are not // used by mocks mockTelemetryHandle.getTelemetryObjects.andReturn([{}]); mockTelemetryHandle.promiseTelemetryObjects.andReturn(promise(undefined)); mockTelemetryHandle.getDatum.andReturn({}); - mockTelemetryHandle.request.andReturn(promise(undefined)); mockTelemetryHandler = jasmine.createSpyObj('telemetryHandler', [ 'handle' diff --git a/platform/features/table/test/controllers/TableOptionsControllerSpec.js b/platform/features/table/test/controllers/TableOptionsControllerSpec.js index fd6d8b43fe..9de96b5f52 100644 --- a/platform/features/table/test/controllers/TableOptionsControllerSpec.js +++ b/platform/features/table/test/controllers/TableOptionsControllerSpec.js @@ -47,36 +47,18 @@ define( 'listen' ]); mockDomainObject = jasmine.createSpyObj('domainObject', [ - 'getCapability', - 'getModel' + 'getCapability' ]); mockDomainObject.getCapability.andReturn(mockCapability); - mockDomainObject.getModel.andReturn({}); - mockScope = jasmine.createSpyObj('scope', [ - '$watchCollection', - '$watch', - '$on' + '$watchCollection' ]); mockScope.domainObject = mockDomainObject; controller = new TableOptionsController(mockScope); }); - it('Listens for changing domain object', function() { - expect(mockScope.$watch).toHaveBeenCalledWith('domainObject', jasmine.any(Function)); - }); - - it('On destruction of controller, destroys listeners', function() { - var unlistenFunc = jasmine.createSpy("unlisten"); - controller.listeners.push(unlistenFunc); - expect(mockScope.$on).toHaveBeenCalledWith('$destroy', jasmine.any(Function)); - mockScope.$on.mostRecentCall.args[1](); - expect(unlistenFunc).toHaveBeenCalled(); - }); - it('Registers a listener for mutation events on the object', function() { - mockScope.$watch.mostRecentCall.args[1](mockDomainObject); expect(mockCapability.listen).toHaveBeenCalled(); }); diff --git a/platform/features/table/test/controllers/HistoricalTableControllerSpec.js b/platform/features/table/test/controllers/TelemetryTableControllerSpec.js similarity index 94% rename from platform/features/table/test/controllers/HistoricalTableControllerSpec.js rename to platform/features/table/test/controllers/TelemetryTableControllerSpec.js index f000529467..03f62f11e3 100644 --- a/platform/features/table/test/controllers/HistoricalTableControllerSpec.js +++ b/platform/features/table/test/controllers/TelemetryTableControllerSpec.js @@ -23,7 +23,7 @@ define( [ - "../../src/controllers/HistoricalTableController" + "../../src/controllers/TelemetryTableController" ], function (TableController) { "use strict"; @@ -73,14 +73,14 @@ define( mockTable = jasmine.createSpyObj('table', [ - 'populateColumns', - 'buildColumnConfiguration', + 'buildColumns', + 'getColumnConfiguration', 'getRowValues', 'saveColumnConfiguration' ] ); mockTable.columns = []; - mockTable.buildColumnConfiguration.andReturn(mockConfiguration); + mockTable.getColumnConfiguration.andReturn(mockConfiguration); mockDomainObject= jasmine.createSpyObj('domainObject', [ 'getCapability', @@ -126,18 +126,21 @@ define( expect(mockTelemetryHandle.unsubscribe).toHaveBeenCalled(); }); - describe('makes use of the table', function () { + describe('the controller makes use of the table', function () { it('to create column definitions from telemetry' + ' metadata', function () { controller.setup(); - expect(mockTable.populateColumns).toHaveBeenCalled(); + expect(mockTable.buildColumns).toHaveBeenCalled(); }); it('to create column configuration, which is written to the' + ' object model', function () { + var mockModel = {}; + controller.setup(); - expect(mockTable.buildColumnConfiguration).toHaveBeenCalled(); + expect(mockTable.getColumnConfiguration).toHaveBeenCalled(); + expect(mockTable.saveColumnConfiguration).toHaveBeenCalled(); }); }); From 11cfb6e1b869d6e2280a3a65fd114bb64a573f62 Mon Sep 17 00:00:00 2001 From: Henry Date: Thu, 21 Apr 2016 10:30:55 -0700 Subject: [PATCH 059/132] [Edit] Elements pool filtering displays more consistent results --- .../commonUI/edit/res/templates/elements.html | 2 +- .../src/controllers/ElementsController.js | 11 +++ .../controllers/ElementsControllerSpec.js | 68 +++++++++++++++++++ 3 files changed, 80 insertions(+), 1 deletion(-) create mode 100644 platform/commonUI/edit/test/controllers/ElementsControllerSpec.js diff --git a/platform/commonUI/edit/res/templates/elements.html b/platform/commonUI/edit/res/templates/elements.html index 23884e0a54..12d83a47fc 100644 --- a/platform/commonUI/edit/res/templates/elements.html +++ b/platform/commonUI/edit/res/templates/elements.html @@ -26,7 +26,7 @@
        -
      • +
      • Date: Fri, 22 Apr 2016 09:44:34 -0700 Subject: [PATCH 060/132] Revert "Revert "[Tables] Fix to correct sorting in realtime tables"" --- docs/src/guide/index.md | 68 +++++- platform/features/table/bundle.js | 24 ++- platform/features/table/res/sass/table.scss | 50 +++++ .../{table.html => historical-table.html} | 2 +- .../table/res/templates/mct-table.html | 43 ++-- .../table/res/templates/rt-table.html | 2 +- .../features/table/src/TableConfiguration.js | 22 +- .../controllers/HistoricalTableController.js | 70 +++++++ .../src/controllers/MCTTableController.js | 197 ++++++++---------- ...ntroller.js => RealtimeTableController.js} | 69 ++---- .../src/controllers/TableOptionsController.js | 27 ++- .../controllers/TelemetryTableController.js | 94 ++++----- .../features/table/src/directives/MCTTable.js | 45 ++++ .../table/test/TableConfigurationSpec.js | 8 +- ...ec.js => HistoricalTableControllerSpec.js} | 17 +- .../controllers/MCTTableControllerSpec.js | 97 +++++++-- ...Spec.js => RealtimeTableControllerSpec.js} | 13 +- .../controllers/TableOptionsControllerSpec.js | 22 +- 18 files changed, 578 insertions(+), 292 deletions(-) create mode 100644 platform/features/table/res/sass/table.scss rename platform/features/table/res/templates/{table.html => historical-table.html} (74%) create mode 100644 platform/features/table/src/controllers/HistoricalTableController.js rename platform/features/table/src/controllers/{RTTelemetryTableController.js => RealtimeTableController.js} (59%) rename platform/features/table/test/controllers/{TelemetryTableControllerSpec.js => HistoricalTableControllerSpec.js} (94%) rename platform/features/table/test/controllers/{RTTelemetryTableControllerSpec.js => RealtimeTableControllerSpec.js} (94%) diff --git a/docs/src/guide/index.md b/docs/src/guide/index.md index 93cb95bb7a..7016462a5a 100644 --- a/docs/src/guide/index.md +++ b/docs/src/guide/index.md @@ -6,12 +6,13 @@ Victor Woeltjen September 23, 2015 Document Version 1.1 -Date | Version | Summary of Changes | Author -------------------- | --------- | ----------------------- | --------------- -April 29, 2015 | 0 | Initial Draft | Victor Woeltjen -May 12, 2015 | 0.1 | | Victor Woeltjen -June 4, 2015 | 1.0 | Name Changes | Victor Woeltjen -October 4, 2015 | 1.1 | Conversion to MarkDown | Andrew Henry +Date | Version | Summary of Changes | Author +------------------- | --------- | ------------------------- | --------------- +April 29, 2015 | 0 | Initial Draft | Victor Woeltjen +May 12, 2015 | 0.1 | | Victor Woeltjen +June 4, 2015 | 1.0 | Name Changes | Victor Woeltjen +October 4, 2015 | 1.1 | Conversion to MarkDown | Andrew Henry +April 5, 2016 | 1.2 | Added Mct-table directive | Andrew Henry # Introduction The purpose of this guide is to familiarize software developers with the Open @@ -1600,6 +1601,61 @@ there are items . ] } +## Table + +The `mct-table` directive provides a generic table component, with optional +sorting and filtering capabilities. The table can be pre-populated with data +by setting the `rows` parameter, and it can be updated in real-time using the +`add:row` and `remove:row` broadcast events. The table will expand to occupy +100% of the size of its containing element. The table is highly optimized for +very large data sets. + +### Events + +The table supports two events for notifying that the rows have changed. For +performance reasons, the table does not monitor the content of `rows` +constantly. + +* `add:row`: A `$broadcast` event that will notify the table that a new row +has been added to the table. + +eg. The code below adds a new row, and alerts the table using the `add:row` +event. Sorting and filtering will be applied automatically by the table component. + +``` +$scope.rows.push(newRow); +$scope.$broadcast('add:row', $scope.rows.length-1); +``` + +* `remove:row`: A `$broadcast` event that will notify the table that a row +should be removed from the table. + +eg. The code below removes a row from the rows array, and then alerts the table +to its removal. + +``` +$scope.rows.slice(5, 1); +$scope.$broadcast('remove:row', 5); +``` + +### Parameters + +* `headers`: An array of string values which will constitute the column titles + that appear at the top of the table. Corresponding values are specified in + the rows using the header title provided here. +* `rows`: An array of objects containing row values. Each element in the +array must be an associative array, where the key corresponds to a column header. +* `enableFilter`: A boolean that if true, will enable searching and result +filtering. When enabled, each column will have a text input field that can be +used to filter the table rows in real time. +* `enableSort`: A boolean determining whether rows can be sorted. If true, +sorting will be enabled allowing sorting by clicking on column headers. Only +one column may be sorted at a time. +* `autoScroll`: A boolean value that if true, will cause the table to automatically +scroll to the bottom as new data arrives. Auto-scroll can be disengaged manually +by scrolling away from the bottom of the table, and can also be enabled manually +by scrolling to the bottom of the table rows. + # Services The Open MCT Web platform provides a variety of services which can be retrieved diff --git a/platform/features/table/bundle.js b/platform/features/table/bundle.js index 77ead67c04..0220b7dc6d 100644 --- a/platform/features/table/bundle.js +++ b/platform/features/table/bundle.js @@ -23,16 +23,16 @@ define([ "./src/directives/MCTTable", - "./src/controllers/RTTelemetryTableController", - "./src/controllers/TelemetryTableController", + "./src/controllers/RealtimeTableController", + "./src/controllers/HistoricalTableController", "./src/controllers/TableOptionsController", '../../commonUI/regions/src/Region', '../../commonUI/browse/src/InspectorRegion', "legacyRegistry" ], function ( MCTTable, - RTTelemetryTableController, - TelemetryTableController, + RealtimeTableController, + HistoricalTableController, TableOptionsController, Region, InspectorRegion, @@ -109,13 +109,13 @@ define([ ], "controllers": [ { - "key": "TelemetryTableController", - "implementation": TelemetryTableController, + "key": "HistoricalTableController", + "implementation": HistoricalTableController, "depends": ["$scope", "telemetryHandler", "telemetryFormatter"] }, { - "key": "RTTelemetryTableController", - "implementation": RTTelemetryTableController, + "key": "RealtimeTableController", + "implementation": RealtimeTableController, "depends": ["$scope", "telemetryHandler", "telemetryFormatter"] }, { @@ -130,7 +130,7 @@ define([ "name": "Historical Table", "key": "table", "glyph": "\ue604", - "templateUrl": "templates/table.html", + "templateUrl": "templates/historical-table.html", "needs": [ "telemetry" ], @@ -161,6 +161,12 @@ define([ "key": "table-options-edit", "templateUrl": "templates/table-options-edit.html" } + ], + "stylesheets": [ + { + "stylesheetUrl": "css/table.css", + "priority": "mandatory" + } ] } }); diff --git a/platform/features/table/res/sass/table.scss b/platform/features/table/res/sass/table.scss new file mode 100644 index 0000000000..a79cfac4c6 --- /dev/null +++ b/platform/features/table/res/sass/table.scss @@ -0,0 +1,50 @@ +/***************************************************************************** + * Open MCT Web, Copyright (c) 2014-2015, United States Government + * as represented by the Administrator of the National Aeronautics and Space + * Administration. All rights reserved. + * + * Open MCT Web is licensed under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * http://www.apache.org/licenses/LICENSE-2.0. + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations + * under the License. + * + * Open MCT Web includes source code licensed under additional open source + * licenses. See the Open Source Licenses file (LICENSES.md) included with + * this source code distribution or the Licensing information page available + * at runtime from the About dialog for additional information. + *****************************************************************************/ +.sizing-table { + min-width: 100%; + z-index: -1; + visibility: hidden; + position: absolute; + + //Add some padding to allow for decorations such as limits indicator + td { + padding-right: 15px; + padding-left: 10px; + white-space: nowrap; + } +} +.mct-table { + table-layout: fixed; + th { + box-sizing: border-box; + } + tbody { + tr { + position: absolute; + } + td { + white-space: nowrap; + overflow: hidden; + box-sizing: border-box; + } + } +} \ No newline at end of file diff --git a/platform/features/table/res/templates/table.html b/platform/features/table/res/templates/historical-table.html similarity index 74% rename from platform/features/table/res/templates/table.html rename to platform/features/table/res/templates/historical-table.html index c63f6d63fc..9917c41dcc 100644 --- a/platform/features/table/res/templates/table.html +++ b/platform/features/table/res/templates/historical-table.html @@ -1,4 +1,4 @@ -
        +
        - +
        + + + + + + +
        {{header}}
        + {{sizingRow[header].text}} +
        + + }"> - +
        @@ -41,21 +42,15 @@
        {{ visibleRow.contents[header].text }} diff --git a/platform/features/table/res/templates/rt-table.html b/platform/features/table/res/templates/rt-table.html index 326c5b847b..d35015c96c 100644 --- a/platform/features/table/res/templates/rt-table.html +++ b/platform/features/table/res/templates/rt-table.html @@ -1,4 +1,4 @@ -
        +
        0) { - this.insertSorted(this.$scope.displayRows, row); - } - this.$timeout(this.setElementSizes.bind(this)) - .then(this.scrollToBottom.bind(this)); + //Does the row pass the current filter? + if (this.filterRows([row]).length === 1) { + //Insert the row into the correct position in the array + this.insertSorted(this.$scope.displayRows, row); + + //Resize the columns , then update the rows visible in the table + this.resize([this.$scope.sizingRow, row]) + .then(this.setVisibleRows.bind(this)) + .then(this.scrollToBottom.bind(this)); + } }; /** - * Handles a row add event. Rows can be added as needed using the - * `addRow` broadcast event. + * Handles a row remove event. Rows can be removed as needed using the + * `remove:row` broadcast event. * @private */ MCTTableController.prototype.removeRow = function (event, rowIndex) { @@ -225,7 +232,7 @@ define( * enabled, reset filters. If sorting is enabled, reset * sorting. */ - MCTTableController.prototype.updateHeaders = function (newHeaders) { + MCTTableController.prototype.setHeaders = function (newHeaders) { if (!newHeaders){ return; } @@ -241,7 +248,7 @@ define( this.$scope.sortColumn = undefined; this.$scope.sortDirection = undefined; } - this.updateRows(this.$scope.rows); + this.setRows(this.$scope.rows); }; /** @@ -249,13 +256,12 @@ define( * for individual rows. */ MCTTableController.prototype.setElementSizes = function () { - var self = this, - thead = this.element.find('thead'), - tbody = this.element.find('tbody'), + var thead = this.thead, + tbody = this.tbody, firstRow = tbody.find('tr'), column = firstRow.find('td'), headerHeight = thead.prop('offsetHeight'), - rowHeight = 20, + rowHeight = firstRow.prop('offsetHeight'), columnWidth, tableWidth = 0, overallHeight = headerHeight + (rowHeight * @@ -272,15 +278,12 @@ define( this.$scope.headerHeight = headerHeight; this.$scope.rowHeight = rowHeight; this.$scope.totalHeight = overallHeight; - this.setVisibleRows(); if (tableWidth > 0) { this.$scope.totalWidth = tableWidth + 'px'; } else { this.$scope.totalWidth = 'none'; } - - this.$scope.overrideRowPositioning = true; }; /** @@ -292,21 +295,14 @@ define( sortKey = this.$scope.sortColumn; function binarySearch(searchArray, searchElement, min, max){ - var sampleAt = Math.floor((max - min) / 2) + min, - valA, - valB; + var sampleAt = Math.floor((max - min) / 2) + min; + if (max < min) { return min; // Element is not in array, min gives direction } - valA = isNaN(searchElement[sortKey].text) ? - searchElement[sortKey].text : - parseFloat(searchElement[sortKey].text); - valB = isNaN(searchArray[sampleAt][sortKey].text) ? - searchArray[sampleAt][sortKey].text : - parseFloat(searchArray[sampleAt][sortKey].text); - - switch(self.sortComparator(valA, valB)) { + switch(self.sortComparator(searchElement[sortKey].text, + searchArray[sampleAt][sortKey].text)) { case -1: return binarySearch(searchArray, searchElement, min, sampleAt - 1); @@ -344,8 +340,34 @@ define( */ MCTTableController.prototype.sortComparator = function (a, b) { var result = 0, - sortDirectionMultiplier; + sortDirectionMultiplier, + numberA, + numberB; + /** + * Given a value, if it is a number, or a string representation of a + * number, then return a number representation. Otherwise, return + * the original value. It's a little more robust than using just + * Number() or parseFloat, or isNaN in isolation, all of which are + * fairly inconsistent in their results. + * @param value The value to return as a number. + * @returns {*} The value cast to a Number, or the original value if + * a Number representation is not possible. + */ + function toNumber (value){ + var val = !isNaN(Number(value)) && !isNaN(parseFloat(value)) ? Number(value) : value; + return val; + } + numberA = toNumber(a); + numberB = toNumber(b); + + //If they're both numbers, then compare them as numbers + if (typeof numberA === "number" && typeof numberB === "number") { + a = numberA; + b = numberB; + } + + //If they're both strings, then ignore case if (typeof a === "string" && typeof b === "string") { a = a.toLowerCase(); b = b.toLowerCase(); @@ -382,15 +404,7 @@ define( } return rowsToSort.sort(function (a, b) { - //If the values to compare can be compared as - // numbers, do so. String comparison of number - // values can cause inconsistencies - var valA = isNaN(a[sortKey].text) ? a[sortKey].text : - parseFloat(a[sortKey].text), - valB = isNaN(b[sortKey].text) ? b[sortKey].text : - parseFloat(b[sortKey].text); - - return self.sortComparator(valA, valB); + return self.sortComparator(a[sortKey].text, b[sortKey].text); }); }; @@ -400,74 +414,48 @@ define( * pre-calculate optimal column sizes without having to render * every row. */ - MCTTableController.prototype.findLargestRow = function (rows) { - var largestRow = rows.reduce(function (largestRow, row) { + MCTTableController.prototype.buildLargestRow = function (rows) { + var largestRow = rows.reduce(function (prevLargest, row) { Object.keys(row).forEach(function (key) { - var currentColumn = row[key].text, + var currentColumn, + currentColumnLength, + largestColumn, + largestColumnLength; + if (row[key]){ + currentColumn = (row[key]).text; currentColumnLength = (currentColumn && currentColumn.length) ? currentColumn.length : - currentColumn, - largestColumn = largestRow[key].text, - largestColumnLength = - (largestColumn && largestColumn.length) ? - largestColumn.length : - largestColumn; + currentColumn; + largestColumn = prevLargest[key] ? prevLargest[key].text : ""; + largestColumnLength = largestColumn.length; - if (currentColumnLength > largestColumnLength) { - largestRow[key] = JSON.parse(JSON.stringify(row[key])); + if (currentColumnLength > largestColumnLength) { + prevLargest[key] = JSON.parse(JSON.stringify(row[key])); + } } }); - return largestRow; + return prevLargest; }, JSON.parse(JSON.stringify(rows[0] || {}))); - - largestRow = JSON.parse(JSON.stringify(largestRow)); - - // Pad with characters to accomodate variable-width fonts, - // and remove characters that would allow word-wrapping. - Object.keys(largestRow).forEach(function (key) { - var padCharacters, - i; - - largestRow[key].text = String(largestRow[key].text); - padCharacters = largestRow[key].text.length / 10; - for (i = 0; i < padCharacters; i++) { - largestRow[key].text = largestRow[key].text + 'W'; - } - largestRow[key].text = largestRow[key].text - .replace(/[ \-_]/g, 'W'); - }); return largestRow; }; /** - * Calculates the widest row in the table, pads that row, and adds - * it to the table. Allows the table to size itself, then uses this - * as basis for column dimensions. + * Calculates the widest row in the table, and if necessary, resizes + * the table accordingly + * + * @param rows the rows on which to resize + * @returns {Promise} a promise that will resolve when resizing has + * occurred. * @private */ - MCTTableController.prototype.resize = function (){ - var largestRow = this.findLargestRow(this.$scope.displayRows), - self = this; - this.$scope.visibleRows = [ - { - rowIndex: 0, - offsetY: undefined, - contents: largestRow - } - ]; - - //Wait a timeout to allow digest of previous change to visible - // rows to happen. - this.$timeout(function () { - //Remove temporary padding row used for setting column widths - self.$scope.visibleRows = []; - self.setElementSizes(); - }); + MCTTableController.prototype.resize = function (rows) { + this.$scope.sizingRow = this.buildLargestRow(rows); + return this.$timeout(this.setElementSizes.bind(this)); }; /** - * @priate + * @private */ MCTTableController.prototype.filterAndSort = function (rows) { var displayRows = rows; @@ -478,26 +466,21 @@ define( if (this.$scope.enableSort) { displayRows = this.sortRows(displayRows.slice(0)); } - this.$scope.displayRows = displayRows; + return displayRows; }; /** * Update rows with new data. If filtering is enabled, rows * will be sorted before display. */ - MCTTableController.prototype.updateRows = function (newRows) { - //Reset visible rows because new row data available. - this.$scope.visibleRows = []; - - this.$scope.overrideRowPositioning = false; - + MCTTableController.prototype.setRows = function (newRows) { //Nothing to show because no columns visible - if (!this.$scope.displayHeaders) { + if (!this.$scope.displayHeaders || !newRows) { return; } - this.filterAndSort(newRows || []); - this.resize(); + this.$scope.displayRows = this.filterAndSort(newRows || []); + this.resize(newRows).then(this.setVisibleRows.bind(this)); }; /** diff --git a/platform/features/table/src/controllers/RTTelemetryTableController.js b/platform/features/table/src/controllers/RealtimeTableController.js similarity index 59% rename from platform/features/table/src/controllers/RTTelemetryTableController.js rename to platform/features/table/src/controllers/RealtimeTableController.js index 8a61d61b5e..3f983207bc 100644 --- a/platform/features/table/src/controllers/RTTelemetryTableController.js +++ b/platform/features/table/src/controllers/RealtimeTableController.js @@ -37,7 +37,7 @@ define( * @param telemetryFormatter * @constructor */ - function RTTelemetryTableController($scope, telemetryHandler, telemetryFormatter) { + function RealtimeTableController($scope, telemetryHandler, telemetryFormatter) { TableController.call(this, $scope, telemetryHandler, telemetryFormatter); $scope.autoScroll = false; @@ -66,58 +66,35 @@ define( }); } - RTTelemetryTableController.prototype = Object.create(TableController.prototype); + RealtimeTableController.prototype = Object.create(TableController.prototype); /** - Override the subscribe function defined on the parent controller in - order to handle realtime telemetry instead of historical. + * Overrides method on TelemetryTableController providing handling + * for realtime data. */ - RTTelemetryTableController.prototype.subscribe = function () { - var self = this; - self.$scope.rows = undefined; - (this.subscriptions || []).forEach(function (unsubscribe){ - unsubscribe(); - }); + RealtimeTableController.prototype.addRealtimeData = function() { + var self = this, + datum, + row; + this.handle.getTelemetryObjects().forEach(function (telemetryObject){ + datum = self.handle.getDatum(telemetryObject); + if (datum) { + //Populate row values from telemetry datum + row = self.table.getRowValues(telemetryObject, datum); + self.$scope.rows.push(row); - if (this.handle) { - this.handle.unsubscribe(); - } - - function updateData(){ - var datum, - row; - self.handle.getTelemetryObjects().forEach(function (telemetryObject){ - datum = self.handle.getDatum(telemetryObject); - if (datum) { - row = self.table.getRowValues(telemetryObject, datum); - if (!self.$scope.rows){ - self.$scope.rows = [row]; - self.$scope.$digest(); - } else { - self.$scope.rows.push(row); - - if (self.$scope.rows.length > self.maxRows) { - self.$scope.$broadcast('remove:row', 0); - self.$scope.rows.shift(); - } - - self.$scope.$broadcast('add:row', - self.$scope.rows.length - 1); - } + //Inform table that a new row has been added + if (self.$scope.rows.length > self.maxRows) { + self.$scope.$broadcast('remove:row', 0); + self.$scope.rows.shift(); } - }); - } - - this.handle = this.$scope.domainObject && this.telemetryHandler.handle( - this.$scope.domainObject, - updateData, - true // Lossless - ); - - this.setup(); + self.$scope.$broadcast('add:row', + self.$scope.rows.length - 1); + } + }); }; - return RTTelemetryTableController; + return RealtimeTableController; } ); diff --git a/platform/features/table/src/controllers/TableOptionsController.js b/platform/features/table/src/controllers/TableOptionsController.js index c3b479073c..a28411e7d0 100644 --- a/platform/features/table/src/controllers/TableOptionsController.js +++ b/platform/features/table/src/controllers/TableOptionsController.js @@ -51,13 +51,29 @@ define( this.$scope = $scope; this.domainObject = $scope.domainObject; + this.listeners = []; $scope.columnsForm = {}; - this.domainObject.getCapability('mutation').listen(function (model) { - self.populateForm(model); + function unlisten() { + self.listeners.forEach(function (listener) { + listener(); + }); + } + + $scope.$watch('domainObject', function(domainObject) { + unlisten(); + self.populateForm(domainObject.getModel()); + + self.listeners.push(self.domainObject.getCapability('mutation').listen(function (model) { + self.populateForm(model); + })); }); + /** + * Maintain a configuration object on scope that stores column + * configuration. On change, synchronize with object model. + */ $scope.$watchCollection('configuration.table.columns', function (columns){ if (columns){ self.domainObject.useCapability('mutation', function (model) { @@ -67,6 +83,11 @@ define( } }); + /** + * Destroy all mutation listeners + */ + $scope.$on('$destroy', unlisten); + } TableOptionsController.prototype.populateForm = function (model) { @@ -86,7 +107,7 @@ define( 'key': key }); }); - this.$scope.configuration = JSON.parse(JSON.stringify(model.configuration)); + this.$scope.configuration = JSON.parse(JSON.stringify(model.configuration || {})); }; return TableOptionsController; diff --git a/platform/features/table/src/controllers/TelemetryTableController.js b/platform/features/table/src/controllers/TelemetryTableController.js index e579c5eeb8..36f54b1ac6 100644 --- a/platform/features/table/src/controllers/TelemetryTableController.js +++ b/platform/features/table/src/controllers/TelemetryTableController.js @@ -52,19 +52,15 @@ define( this.$scope = $scope; this.columns = {}; //Range and Domain columns this.handle = undefined; - //this.pending = false; this.telemetryHandler = telemetryHandler; this.table = new TableConfiguration($scope.domainObject, telemetryFormatter); this.changeListeners = []; - $scope.rows = undefined; + $scope.rows = []; // Subscribe to telemetry when a domain object becomes available - this.$scope.$watch('domainObject', function(domainObject){ - if (!domainObject) - return; - + this.$scope.$watch('domainObject', function(){ self.subscribe(); self.registerChangeListeners(); }); @@ -73,16 +69,24 @@ define( this.$scope.$on("$destroy", this.destroy.bind(this)); } + /** + * @private + */ + TelemetryTableController.prototype.unregisterChangeListeners = function () { + this.changeListeners.forEach(function (listener) { + return listener && listener(); + }); + this.changeListeners = []; + }; + /** * Defer registration of change listeners until domain object is * available in order to avoid race conditions * @private */ TelemetryTableController.prototype.registerChangeListeners = function () { - this.changeListeners.forEach(function (listener) { - return listener && listener(); - }); - this.changeListeners = []; + this.unregisterChangeListeners(); + // When composition changes, re-subscribe to the various // telemetry subscriptions this.changeListeners.push(this.$scope.$watchCollection( @@ -103,25 +107,37 @@ define( } }; + /** + * Function for handling realtime data when it is available. This + * will be called by the telemetry framework when new data is + * available. + * + * Method should be overridden by specializing class. + */ + TelemetryTableController.prototype.addRealtimeData = function () { + }; + + /** + * Function for handling historical data. Will be called by + * telemetry framework when requested historical data is available. + * Should be overridden by specializing class. + */ + TelemetryTableController.prototype.addHistoricalData = function () { + }; + /** Create a new subscription. This can be overridden by children to change default behaviour (which is to retrieve historical telemetry only). */ TelemetryTableController.prototype.subscribe = function () { - var self = this; - if (this.handle) { this.handle.unsubscribe(); } - //Noop because not supporting realtime data right now - function noop(){ - } - this.handle = this.$scope.domainObject && this.telemetryHandler.handle( this.$scope.domainObject, - noop, + this.addRealtimeData.bind(this), true // Lossless ); @@ -130,28 +146,6 @@ define( this.setup(); }; - /** - * Populates historical data on scope when it becomes available - * @private - */ - TelemetryTableController.prototype.addHistoricalData = function () { - var rowData = [], - self = this; - - this.handle.getTelemetryObjects().forEach(function (telemetryObject){ - var series = self.handle.getSeries(telemetryObject) || {}, - pointCount = series.getPointCount ? series.getPointCount() : 0, - i = 0; - - for (; i < pointCount; i++) { - rowData.push(self.table.getRowValues(telemetryObject, - self.handle.makeDatum(telemetryObject, series, i))); - } - }); - - this.$scope.rows = rowData; - }; - /** * Setup table columns based on domain object metadata */ @@ -162,7 +156,9 @@ define( if (handle) { handle.promiseTelemetryObjects().then(function () { - table.buildColumns(handle.getMetadata()); + self.$scope.headers = []; + self.$scope.rows = []; + table.populateColumns(handle.getMetadata()); self.filterColumns(); @@ -176,26 +172,14 @@ define( } }; - /** - * @private - * @param object The object for which data is available (table may - * be composed of multiple objects) - * @param datum The data received from the telemetry source - */ - TelemetryTableController.prototype.updateRows = function (object, datum) { - this.$scope.rows.push(this.table.getRowValues(object, datum)); - }; - /** * When column configuration changes, update the visible headers * accordingly. * @private */ - TelemetryTableController.prototype.filterColumns = function (columnConfig) { - if (!columnConfig){ - columnConfig = this.table.getColumnConfiguration(); - this.table.saveColumnConfiguration(columnConfig); - } + TelemetryTableController.prototype.filterColumns = function () { + var columnConfig = this.table.buildColumnConfiguration(); + //Populate headers with visible columns (determined by configuration) this.$scope.headers = Object.keys(columnConfig).filter(function (column) { return columnConfig[column]; diff --git a/platform/features/table/src/directives/MCTTable.js b/platform/features/table/src/directives/MCTTable.js index 575e830395..2d61669a2e 100644 --- a/platform/features/table/src/directives/MCTTable.js +++ b/platform/features/table/src/directives/MCTTable.js @@ -12,6 +12,51 @@ define( * Defines a generic 'Table' component. The table can be populated * en-masse by setting the rows attribute, or rows can be added as * needed via a broadcast 'addRow' event. + * + * This directive accepts parameters specifying header and row + * content, as well as some additional options. + * + * Two broadcast events for notifying the table that the rows have + * changed. For performance reasons, the table does not monitor the + * content of `rows` constantly. + * - 'add:row': A $broadcast event that will notify the table that + * a new row has been added to the table. + * eg. + *
        
        +         * $scope.rows.push(newRow);
        +         * $scope.$broadcast('add:row', $scope.rows.length-1);
        +         * 
        + * The code above adds a new row, and alerts the table using the + * add:row event. Sorting and filtering will be applied + * automatically by the table component. + * + * - 'remove:row': A $broadcast event that will notify the table that a + * row should be removed from the table. + * eg. + *
        
        +         * $scope.rows.slice(5, 1);
        +         * $scope.$broadcast('remove:row', 5);
        +         * 
        + * The code above removes a row from the rows array, and then alerts + * the table to its removal. + * + * @memberof platform/features/table + * @param {string[]} headers The column titles to appear at the top + * of the table. Corresponding values are specified in the rows + * using the header title provided here. + * @param {Object[]} rows The row content. Each row is an object + * with key-value pairs where the key corresponds to a header + * specified in the headers parameter. + * @param {boolean} enableFilter If true, values will be searchable + * and results filtered + * @param {boolean} enableSort If true, sorting will be enabled + * allowing sorting by clicking on column headers + * @param {boolean} autoScroll If true, table will automatically + * scroll to the bottom as new data arrives. Auto-scroll can be + * disengaged manually by scrolling away from the bottom of the + * table, and can also be enabled manually by scrolling to the bottom of + * the table rows. + * * @constructor */ function MCTTable($timeout) { diff --git a/platform/features/table/test/TableConfigurationSpec.js b/platform/features/table/test/TableConfigurationSpec.js index 86a18aee5a..bfc6f50edb 100644 --- a/platform/features/table/test/TableConfigurationSpec.js +++ b/platform/features/table/test/TableConfigurationSpec.js @@ -116,10 +116,10 @@ define( }]; beforeEach(function() { - table.buildColumns(metadata); + table.populateColumns(metadata); }); - it("populates the columns attribute", function() { + it("populates columns", function() { expect(table.columns.length).toBe(5); }); @@ -141,7 +141,7 @@ define( it("Provides a default configuration with all columns" + " visible", function() { - var configuration = table.getColumnConfiguration(); + var configuration = table.buildColumnConfiguration(); expect(configuration).toBeDefined(); expect(Object.keys(configuration).every(function(key){ @@ -160,7 +160,7 @@ define( }; mockModel.configuration = modelConfig; - tableConfig = table.getColumnConfiguration(); + tableConfig = table.buildColumnConfiguration(); expect(tableConfig).toBeDefined(); expect(tableConfig['Range 1']).toBe(false); diff --git a/platform/features/table/test/controllers/TelemetryTableControllerSpec.js b/platform/features/table/test/controllers/HistoricalTableControllerSpec.js similarity index 94% rename from platform/features/table/test/controllers/TelemetryTableControllerSpec.js rename to platform/features/table/test/controllers/HistoricalTableControllerSpec.js index 03f62f11e3..f000529467 100644 --- a/platform/features/table/test/controllers/TelemetryTableControllerSpec.js +++ b/platform/features/table/test/controllers/HistoricalTableControllerSpec.js @@ -23,7 +23,7 @@ define( [ - "../../src/controllers/TelemetryTableController" + "../../src/controllers/HistoricalTableController" ], function (TableController) { "use strict"; @@ -73,14 +73,14 @@ define( mockTable = jasmine.createSpyObj('table', [ - 'buildColumns', - 'getColumnConfiguration', + 'populateColumns', + 'buildColumnConfiguration', 'getRowValues', 'saveColumnConfiguration' ] ); mockTable.columns = []; - mockTable.getColumnConfiguration.andReturn(mockConfiguration); + mockTable.buildColumnConfiguration.andReturn(mockConfiguration); mockDomainObject= jasmine.createSpyObj('domainObject', [ 'getCapability', @@ -126,21 +126,18 @@ define( expect(mockTelemetryHandle.unsubscribe).toHaveBeenCalled(); }); - describe('the controller makes use of the table', function () { + describe('makes use of the table', function () { it('to create column definitions from telemetry' + ' metadata', function () { controller.setup(); - expect(mockTable.buildColumns).toHaveBeenCalled(); + expect(mockTable.populateColumns).toHaveBeenCalled(); }); it('to create column configuration, which is written to the' + ' object model', function () { - var mockModel = {}; - controller.setup(); - expect(mockTable.getColumnConfiguration).toHaveBeenCalled(); - expect(mockTable.saveColumnConfiguration).toHaveBeenCalled(); + expect(mockTable.buildColumnConfiguration).toHaveBeenCalled(); }); }); diff --git a/platform/features/table/test/controllers/MCTTableControllerSpec.js b/platform/features/table/test/controllers/MCTTableControllerSpec.js index 5e38c7e651..175d8fed0a 100644 --- a/platform/features/table/test/controllers/MCTTableControllerSpec.js +++ b/platform/features/table/test/controllers/MCTTableControllerSpec.js @@ -58,15 +58,18 @@ define( mockElement = jasmine.createSpyObj('element', [ 'find', + 'prop', 'on' ]); mockElement.find.andReturn(mockElement); + mockElement.prop.andReturn(0); mockScope.displayHeaders = true; mockTimeout = jasmine.createSpy('$timeout'); mockTimeout.andReturn(promise(undefined)); controller = new MCTTableController(mockScope, mockTimeout, mockElement); + spyOn(controller, 'setVisibleRows'); }); it('Reacts to changes to filters, headers, and rows', function() { @@ -115,7 +118,7 @@ define( }); it('Sets rows on scope when rows change', function() { - controller.updateRows(testRows); + controller.setRows(testRows); expect(mockScope.displayRows.length).toBe(3); expect(mockScope.displayRows).toEqual(testRows); }); @@ -127,7 +130,7 @@ define( 'col2': {'text': 'ghi'}, 'col3': {'text': 'row3 col3'} }; - controller.updateRows(testRows); + controller.setRows(testRows); expect(mockScope.displayRows.length).toBe(3); testRows.push(row4); addRowFunc(undefined, 3); @@ -136,10 +139,8 @@ define( it('Supports removing rows individually', function() { var removeRowFunc = mockScope.$on.calls[mockScope.$on.calls.length-1].args[1]; - controller.updateRows(testRows); + controller.setRows(testRows); expect(mockScope.displayRows.length).toBe(3); - spyOn(controller, 'setVisibleRows'); - //controller.setVisibleRows.andReturn(undefined); removeRowFunc(undefined, 2); expect(mockScope.displayRows.length).toBe(2); expect(controller.setVisibleRows).toHaveBeenCalled(); @@ -179,7 +180,54 @@ define( expect(sortedRows[2].col2.text).toEqual('abc'); }); - describe('Adding new rows', function() { + it('correctly sorts rows of differing types', function () { + mockScope.sortColumn = 'col2'; + mockScope.sortDirection = 'desc'; + + testRows.push({ + 'col1': {'text': 'row4 col1'}, + 'col2': {'text': '123'}, + 'col3': {'text': 'row4 col3'} + }); + testRows.push({ + 'col1': {'text': 'row5 col1'}, + 'col2': {'text': '456'}, + 'col3': {'text': 'row5 col3'} + }); + testRows.push({ + 'col1': {'text': 'row5 col1'}, + 'col2': {'text': ''}, + 'col3': {'text': 'row5 col3'} + }); + + sortedRows = controller.sortRows(testRows); + expect(sortedRows[0].col2.text).toEqual('ghi'); + expect(sortedRows[1].col2.text).toEqual('def'); + expect(sortedRows[2].col2.text).toEqual('abc'); + + expect(sortedRows[sortedRows.length-3].col2.text).toEqual('456'); + expect(sortedRows[sortedRows.length-2].col2.text).toEqual('123'); + expect(sortedRows[sortedRows.length-1].col2.text).toEqual(''); + }); + + describe('The sort comparator', function () { + it('Correctly sorts different data types', function () { + var val1 = "", + val2 = "1", + val3 = "2016-04-05 18:41:30.713Z", + val4 = "1.1", + val5 = "8.945520958175627e-13"; + mockScope.sortDirection = "asc"; + + expect(controller.sortComparator(val1, val2)).toEqual(-1); + expect(controller.sortComparator(val3, val1)).toEqual(1); + expect(controller.sortComparator(val3, val2)).toEqual(1); + expect(controller.sortComparator(val4, val2)).toEqual(1); + expect(controller.sortComparator(val2, val5)).toEqual(1); + }); + }); + + describe('Adding new rows', function () { var row4, row5, row6; @@ -210,20 +258,20 @@ define( mockScope.displayRows = controller.sortRows(testRows.slice(0)); mockScope.rows.push(row4); - controller.newRow(undefined, mockScope.rows.length-1); + controller.addRow(undefined, mockScope.rows.length-1); expect(mockScope.displayRows[0].col2.text).toEqual('xyz'); mockScope.rows.push(row5); - controller.newRow(undefined, mockScope.rows.length-1); + controller.addRow(undefined, mockScope.rows.length-1); expect(mockScope.displayRows[4].col2.text).toEqual('aaa'); mockScope.rows.push(row6); - controller.newRow(undefined, mockScope.rows.length-1); + controller.addRow(undefined, mockScope.rows.length-1); expect(mockScope.displayRows[2].col2.text).toEqual('ggg'); //Add a duplicate row mockScope.rows.push(row6); - controller.newRow(undefined, mockScope.rows.length-1); + controller.addRow(undefined, mockScope.rows.length-1); expect(mockScope.displayRows[2].col2.text).toEqual('ggg'); expect(mockScope.displayRows[3].col2.text).toEqual('ggg'); }); @@ -239,18 +287,18 @@ define( mockScope.displayRows = controller.filterRows(testRows); mockScope.rows.push(row5); - controller.newRow(undefined, mockScope.rows.length-1); + controller.addRow(undefined, mockScope.rows.length-1); expect(mockScope.displayRows.length).toBe(2); expect(mockScope.displayRows[1].col2.text).toEqual('aaa'); mockScope.rows.push(row6); - controller.newRow(undefined, mockScope.rows.length-1); + controller.addRow(undefined, mockScope.rows.length-1); expect(mockScope.displayRows.length).toBe(2); //Row was not added because does not match filter }); it('Adds new rows at the correct sort position when' + - ' not sorted ', function() { + ' not sorted ', function () { mockScope.sortColumn = undefined; mockScope.sortDirection = undefined; mockScope.filters = {}; @@ -258,14 +306,33 @@ define( mockScope.displayRows = testRows.slice(0); mockScope.rows.push(row5); - controller.newRow(undefined, mockScope.rows.length-1); + controller.addRow(undefined, mockScope.rows.length-1); expect(mockScope.displayRows[3].col2.text).toEqual('aaa'); mockScope.rows.push(row6); - controller.newRow(undefined, mockScope.rows.length-1); + controller.addRow(undefined, mockScope.rows.length-1); expect(mockScope.displayRows[4].col2.text).toEqual('ggg'); }); + it('Resizes columns if length of any columns in new' + + ' row exceeds corresponding existing column', function() { + var row7 = { + 'col1': {'text': 'row6 col1'}, + 'col2': {'text': 'some longer string'}, + 'col3': {'text': 'row6 col3'} + }; + + mockScope.sortColumn = undefined; + mockScope.sortDirection = undefined; + mockScope.filters = {}; + + mockScope.displayRows = testRows.slice(0); + + mockScope.rows.push(row7); + controller.addRow(undefined, mockScope.rows.length-1); + expect(controller.$scope.sizingRow.col2).toEqual({text: 'some longer string'}); + }); + }); }); diff --git a/platform/features/table/test/controllers/RTTelemetryTableControllerSpec.js b/platform/features/table/test/controllers/RealtimeTableControllerSpec.js similarity index 94% rename from platform/features/table/test/controllers/RTTelemetryTableControllerSpec.js rename to platform/features/table/test/controllers/RealtimeTableControllerSpec.js index 59911d1771..e0b6978d88 100644 --- a/platform/features/table/test/controllers/RTTelemetryTableControllerSpec.js +++ b/platform/features/table/test/controllers/RealtimeTableControllerSpec.js @@ -23,7 +23,7 @@ define( [ - "../../src/controllers/RTTelemetryTableController" + "../../src/controllers/RealtimeTableController" ], function (TableController) { "use strict"; @@ -77,14 +77,14 @@ define( mockTable = jasmine.createSpyObj('table', [ - 'buildColumns', - 'getColumnConfiguration', + 'populateColumns', + 'buildColumnConfiguration', 'getRowValues', 'saveColumnConfiguration' ] ); mockTable.columns = []; - mockTable.getColumnConfiguration.andReturn(mockConfiguration); + mockTable.buildColumnConfiguration.andReturn(mockConfiguration); mockTable.getRowValues.andReturn(mockTableRow); mockDomainObject= jasmine.createSpyObj('domainObject', [ @@ -107,13 +107,16 @@ define( 'unsubscribe', 'getDatum', 'promiseTelemetryObjects', - 'getTelemetryObjects' + 'getTelemetryObjects', + 'request' ]); + // Arbitrary array with non-zero length, contents are not // used by mocks mockTelemetryHandle.getTelemetryObjects.andReturn([{}]); mockTelemetryHandle.promiseTelemetryObjects.andReturn(promise(undefined)); mockTelemetryHandle.getDatum.andReturn({}); + mockTelemetryHandle.request.andReturn(promise(undefined)); mockTelemetryHandler = jasmine.createSpyObj('telemetryHandler', [ 'handle' diff --git a/platform/features/table/test/controllers/TableOptionsControllerSpec.js b/platform/features/table/test/controllers/TableOptionsControllerSpec.js index 9de96b5f52..fd6d8b43fe 100644 --- a/platform/features/table/test/controllers/TableOptionsControllerSpec.js +++ b/platform/features/table/test/controllers/TableOptionsControllerSpec.js @@ -47,18 +47,36 @@ define( 'listen' ]); mockDomainObject = jasmine.createSpyObj('domainObject', [ - 'getCapability' + 'getCapability', + 'getModel' ]); mockDomainObject.getCapability.andReturn(mockCapability); + mockDomainObject.getModel.andReturn({}); + mockScope = jasmine.createSpyObj('scope', [ - '$watchCollection' + '$watchCollection', + '$watch', + '$on' ]); mockScope.domainObject = mockDomainObject; controller = new TableOptionsController(mockScope); }); + it('Listens for changing domain object', function() { + expect(mockScope.$watch).toHaveBeenCalledWith('domainObject', jasmine.any(Function)); + }); + + it('On destruction of controller, destroys listeners', function() { + var unlistenFunc = jasmine.createSpy("unlisten"); + controller.listeners.push(unlistenFunc); + expect(mockScope.$on).toHaveBeenCalledWith('$destroy', jasmine.any(Function)); + mockScope.$on.mostRecentCall.args[1](); + expect(unlistenFunc).toHaveBeenCalled(); + }); + it('Registers a listener for mutation events on the object', function() { + mockScope.$watch.mostRecentCall.args[1](mockDomainObject); expect(mockCapability.listen).toHaveBeenCalled(); }); From d385e55e76bb955b40c81977d0b879dfa10a47c1 Mon Sep 17 00:00:00 2001 From: Victor Woeltjen Date: Fri, 22 Apr 2016 10:46:07 -0700 Subject: [PATCH 061/132] [Build] Remove snapshot suffix Closes sprint Heinlein, https://github.com/nasa/openmct/milestones/Heinlein --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 6830d197e6..183c92c7da 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "openmctweb", - "version": "0.10.0-SNAPSHOT", + "version": "0.10.0", "description": "The Open MCT core platform", "dependencies": { "express": "^4.13.1", From 0ccb696ee204efeb3244ad583328bb7767341693 Mon Sep 17 00:00:00 2001 From: Victor Woeltjen Date: Fri, 22 Apr 2016 10:51:12 -0700 Subject: [PATCH 062/132] [Build] Bump version number, add -SNAPSHOT ...to begin sprint Herbert, https://github.com/nasa/openmct/milestones/Herbert --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 183c92c7da..f7854dbba2 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "openmctweb", - "version": "0.10.0", + "version": "0.10.1-SNAPSHOT", "description": "The Open MCT core platform", "dependencies": { "express": "^4.13.1", From 0390f4646024b868137581d1fada8dbbb50e14b0 Mon Sep 17 00:00:00 2001 From: Charles Hacskaylo Date: Mon, 25 Apr 2016 09:55:21 -0700 Subject: [PATCH 063/132] [Frontend] z-index added to .object-top-bar .left element #836 --- platform/commonUI/general/res/sass/user-environ/_frame.scss | 2 ++ 1 file changed, 2 insertions(+) diff --git a/platform/commonUI/general/res/sass/user-environ/_frame.scss b/platform/commonUI/general/res/sass/user-environ/_frame.scss index 64c4dbd69b..7bc3367c00 100644 --- a/platform/commonUI/general/res/sass/user-environ/_frame.scss +++ b/platform/commonUI/general/res/sass/user-environ/_frame.scss @@ -36,6 +36,8 @@ line-height: $ohH; .left { padding-right: $interiorMarginLg; + + z-index: 5; } } >.object-holder.abs { From a13d0b7fab9a4cea0bc91d8759f14d0ef39847d4 Mon Sep 17 00:00:00 2001 From: Victor Woeltjen Date: Tue, 26 Apr 2016 15:52:09 -0700 Subject: [PATCH 064/132] [Examples] Move examples out of main.js ...such that they are not compiled into the Open MCT that is used as the basis for non-example applications. Addresses #835 --- index.html | 6 +++++- main.js | 8 ++------ 2 files changed, 7 insertions(+), 7 deletions(-) diff --git a/index.html b/index.html index e5145d5c5e..e16b096abb 100644 --- a/index.html +++ b/index.html @@ -30,7 +30,11 @@ diff --git a/main.js b/main.js index 33e45c0125..f3d0fb07cf 100644 --- a/main.js +++ b/main.js @@ -89,11 +89,7 @@ define([ './platform/entanglement/bundle', './platform/search/bundle', './platform/status/bundle', - './platform/commonUI/regions/bundle', - - './example/imagery/bundle', - './example/eventGenerator/bundle', - './example/generator/bundle' + './platform/commonUI/regions/bundle' ], function (Main, legacyRegistry) { 'use strict'; @@ -103,4 +99,4 @@ define([ return new Main().run(legacyRegistry); } }; -}); \ No newline at end of file +}); From ff36d9ee8064d28cb48a4d5d7608865768270eb3 Mon Sep 17 00:00:00 2001 From: Charles Hacskaylo Date: Fri, 29 Apr 2016 10:50:24 -0700 Subject: [PATCH 065/132] [Frontend] Removed bullets from ol, ul open #869 - This should be cherry-picked into main branches as well. (cherry picked from commit 4c97413) --- platform/commonUI/general/res/sass/_global.scss | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/platform/commonUI/general/res/sass/_global.scss b/platform/commonUI/general/res/sass/_global.scss index 27c08551df..be2f7014c1 100644 --- a/platform/commonUI/general/res/sass/_global.scss +++ b/platform/commonUI/general/res/sass/_global.scss @@ -84,7 +84,11 @@ p { margin-bottom: $interiorMarginLg; } -ol, ul { padding-left: 0; } +ol, ul { + list-style: none; + margin: 0; + padding-left: 0; +} mct-container { display: block; From de2703ee48a4bbfb7b0864a954ea277239c8df8f Mon Sep 17 00:00:00 2001 From: Victor Woeltjen Date: Wed, 4 May 2016 10:08:55 -0700 Subject: [PATCH 066/132] [Branding] Remove Web from name at top-level Per #816, change Open MCT Web to Open MCT in all top-level files. --- CONTRIBUTING.md | 18 +++++++++--------- README.md | 22 +++++++++++----------- bower.json | 6 +++--- package.json | 4 ++-- 4 files changed, 25 insertions(+), 25 deletions(-) diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index e726007800..29dbbc46cc 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -1,6 +1,6 @@ -# Contributing to Open MCT Web +# Contributing to Open MCT -This document describes the process of contributing to Open MCT Web as well +This document describes the process of contributing to Open MCT as well as the standards that will be applied when evaluating contributions. Please be aware that additional agreements will be necessary before we can @@ -21,9 +21,9 @@ The short version: ## Contribution Process -Open MCT Web uses git for software version control, and for branching and +Open MCT uses git for software version control, and for branching and merging. The central repository is at -https://github.com/nasa/openmctweb.git. +https://github.com/nasa/openmct.git. ### Roles @@ -116,18 +116,18 @@ the merge back to the master branch. ## Standards -Contributions to Open MCT Web are expected to meet the following standards. +Contributions to Open MCT are expected to meet the following standards. In addition, reviewers should use general discretion before accepting changes. ### Code Standards -JavaScript sources in Open MCT Web must satisfy JSLint under its default +JavaScript sources in Open MCT must satisfy JSLint under its default settings. This is verified by the command line build. #### Code Guidelines -JavaScript sources in Open MCT Web should: +JavaScript sources in Open MCT should: * Use four spaces for indentation. Tabs should not be used. * Include JSDoc for any exposed API (e.g. public methods, constructors.) @@ -159,7 +159,7 @@ JavaScript sources in Open MCT Web should: * Third, imperative statements. * Finally, the returned value. -Deviations from Open MCT Web code style guidelines require two-party agreement, +Deviations from Open MCT code style guidelines require two-party agreement, typically from the author of the change and its reviewer. #### Code Example @@ -260,7 +260,7 @@ these standards. ## Issue Reporting -Issues are tracked at https://github.com/nasa/openmctweb/issues +Issues are tracked at https://github.com/nasa/openmct/issues Issues should include: diff --git a/README.md b/README.md index ed488a0e5c..dc18671dd3 100644 --- a/README.md +++ b/README.md @@ -1,6 +1,6 @@ -# Open MCT Web +# Open MCT -Open MCT Web is a web-based platform for mission operations user interface +Open MCT is a web-based platform for mission operations user interface software. ## Bundles @@ -8,7 +8,7 @@ software. A bundle is a group of software components (including source code, declared as AMD modules, as well as resources such as images and HTML templates) that are intended to be added or removed as a single unit. A plug-in for -Open MCT Web will be expressed as a bundle; platform components are also +Open MCT will be expressed as a bundle; platform components are also expressed as bundles. A bundle is also just a directory which contains a file `bundle.json`, @@ -16,7 +16,7 @@ which declares its contents. The file `bundles.json` (note the plural), at the top level of the repository, is a JSON file containing an array of all bundles (expressed as -directory names) to include in a running instance of Open MCT Web. Adding or +directory names) to include in a running instance of Open MCT. Adding or removing paths from this list will add or remove bundles from the running application. @@ -56,7 +56,7 @@ To run: ## Build -Open MCT Web is built using [`npm`](http://npmjs.com/) +Open MCT is built using [`npm`](http://npmjs.com/) and [`gulp`](http://gulpjs.com/). To build: @@ -64,18 +64,18 @@ To build: `npm run prepublish` This will compile and minify JavaScript sources, as well as copy over assets. -The contents of the `dist` folder will contain a runnable Open MCT Web +The contents of the `dist` folder will contain a runnable Open MCT instance (e.g. by starting an HTTP server in that directory), including: -* A `main.js` file containing Open MCT Web source code. +* A `main.js` file containing Open MCT source code. * Various assets in the `example` and `platform` directories. -* An `index.html` that runs Open MCT Web in its default configuration. +* An `index.html` that runs Open MCT in its default configuration. Additional `gulp` tasks are defined in [the gulpfile](gulpfile.js). ### Building Documentation -Open MCT Web's documentation is generated by an +Open MCT's documentation is generated by an [npm](https://www.npmjs.com/)-based build. It has additional dependencies that may not be available on every platform and thus is not covered in the standard npm install. Ensure your system has [libcairo](http://cairographics.org/) @@ -89,7 +89,7 @@ Documentation will be generated in `target/docs`. # Glossary -Certain terms are used throughout Open MCT Web with consistent meanings +Certain terms are used throughout Open MCT with consistent meanings or conventions. Any deviations from the below are issues and should be addressed (either by updating this glossary or changing code to reflect correct usage.) Other developer documentation, particularly in-line @@ -112,7 +112,7 @@ documentation, may presume an understanding of these terms. (Most often used in the context of extensions, domain object models, or other similar application-specific objects.) * _domain object_: A meaningful object to the user; a distinct thing in - the work support by Open MCT Web. Anything that appears in the left-hand + the work support by Open MCT. Anything that appears in the left-hand tree is a domain object. * _extension_: An extension is a unit of functionality exposed to the platform in a declarative fashion by a bundle. For more diff --git a/bower.json b/bower.json index 7285aad9e2..7c913754cf 100644 --- a/bower.json +++ b/bower.json @@ -1,10 +1,10 @@ { - "name": "openmctweb", - "description": "The OpenMCTWeb core platform", + "name": "openmct", + "description": "The Open MCT core platform", "main": "", "license": "Apache-2.0", "moduleType": [], - "homepage": "http://nasa.github.io/openmctweb/", + "homepage": "http://nasa.github.io/openmct/", "private": true, "dependencies": { "angular": "1.4.4", diff --git a/package.json b/package.json index f7854dbba2..9665703f11 100644 --- a/package.json +++ b/package.json @@ -1,5 +1,5 @@ { - "name": "openmctweb", + "name": "openmct", "version": "0.10.1-SNAPSHOT", "description": "The Open MCT core platform", "dependencies": { @@ -53,7 +53,7 @@ }, "repository": { "type": "git", - "url": "https://github.com/nasa/openmctweb.git" + "url": "https://github.com/nasa/openmct.git" }, "author": "", "license": "Apache-2.0", From 431b8365687366388335cb40cc2fcee1e649d17e Mon Sep 17 00:00:00 2001 From: Victor Woeltjen Date: Wed, 4 May 2016 10:13:09 -0700 Subject: [PATCH 067/132] [Branding] Change name in docs hierarchy ...from Open MCT Web to plain-old Open MCT. --- docs/src/architecture/framework.md | 16 +- docs/src/architecture/index.md | 24 +-- docs/src/architecture/platform.md | 40 ++--- docs/src/guide/index.md | 204 ++++++++++++------------- docs/src/index.md | 13 +- docs/src/process/cycle.md | 2 +- docs/src/process/index.md | 4 +- docs/src/process/testing/plan.md | 2 +- docs/src/process/testing/procedures.md | 6 +- docs/src/tutorials/index.md | 142 ++++++++--------- 10 files changed, 226 insertions(+), 227 deletions(-) diff --git a/docs/src/architecture/framework.md b/docs/src/architecture/framework.md index 229bee39c4..e269e38f61 100644 --- a/docs/src/architecture/framework.md +++ b/docs/src/architecture/framework.md @@ -5,7 +5,7 @@ software components to communicate. The software components it recognizes are: * _Extensions_: Individual units of functionality that can be added to - or removed from Open MCT Web. _Extension categories_ distinguish what + or removed from Open MCT. _Extension categories_ distinguish what type of functionality is being added/removed. * _Bundles_: A grouping of related extensions (named after an analogous concept from [OSGi](http://www.osgi.org/)) @@ -19,7 +19,7 @@ manner which the framework layer can understand. ```nomnoml #direction: down -[Open MCT Web| +[Open MCT| [Dependency injection framework]-->[Platform bundle #1] [Dependency injection framework]-->[Platform bundle #2] [Dependency injection framework]-->[Plugin bundle #1] @@ -35,7 +35,7 @@ manner which the framework layer can understand. ``` The "dependency injection framework" in this case is -[AngularJS](https://angularjs.org/). Open MCT Web's framework layer +[AngularJS](https://angularjs.org/). Open MCT's framework layer is really just a thin wrapper over Angular that recognizes the concepts of bundles and extensions (as declared in JSON files) and registering extensions with Angular. It additionally acts as a @@ -60,7 +60,7 @@ activities which were performed by the framework component. ## Application Initialization -The framework component initializes an Open MCT Web application following +The framework component initializes an Open MCT application following a simple sequence of steps. ```nomnoml @@ -97,7 +97,7 @@ a simple sequence of steps. [Extension]o->[Dependency #3] ``` -Open MCT Web's architecture relies on a simple premise: Individual units +Open MCT's architecture relies on a simple premise: Individual units (extensions) only have access to the dependencies they declare that they need, and they acquire references to these dependencies via dependency injection. This has several desirable traits: @@ -121,11 +121,11 @@ injection. This has several desirable traits: the framework. A drawback to this approach is that it makes it difficult to define -"the architecture" of Open MCT Web, in terms of describing the specific +"the architecture" of Open MCT, in terms of describing the specific units that interact at run-time. The run-time architecture is determined by the framework as the consequence of wiring together dependencies. As such, the specific architecture of any given application built on -Open MCT Web can look very different. +Open MCT can look very different. Keeping that in mind, there are a few useful patterns supported by the framework that are useful to keep in mind. @@ -229,4 +229,4 @@ otherwise a single provider) will be exposed as a single service that other extensions can acquire through dependency injection. Because all components of the same type of service expose the same interface, users of that service do not need to be aware that they are talking to an -aggregator or a provider, for instance. \ No newline at end of file +aggregator or a provider, for instance. diff --git a/docs/src/architecture/index.md b/docs/src/architecture/index.md index 7354402d0c..a4586a3542 100644 --- a/docs/src/architecture/index.md +++ b/docs/src/architecture/index.md @@ -1,14 +1,14 @@ # Introduction The purpose of this document is to familiarize developers with the -overall architecture of Open MCT Web. +overall architecture of Open MCT. The target audience includes: * _Platform maintainers_: Individuals involved in developing, extending, and maintaing capabilities of the platform. * _Integration developers_: Individuals tasked with integrated - Open MCT Web into a larger system, who need to understand + Open MCT into a larger system, who need to understand its inner workings sufficiently to complete this integration. As the focus of this document is on architecture, whenever possible @@ -17,25 +17,25 @@ omitted. These details may be found in the developer guide. # Overview -Open MCT Web is client software: It runs in a web browser and +Open MCT is client software: It runs in a web browser and provides a user interface, while communicating with various server-side resources through browser APIs. ```nomnoml #direction: right -[Client|[Browser|[Open MCT Web]->[Browser APIs]]] +[Client|[Browser|[Open MCT]->[Browser APIs]]] [Server|[Web services]] [Client]<->[Server] ``` -While Open MCT Web can be configured to run as a standalone client, +While Open MCT can be configured to run as a standalone client, this is rarely very useful. Instead, it is intended to be used as a display and interaction layer for information obtained from a variety of back-end services. Doing so requires authoring or utilizing -adapter plugins which allow Open MCT Web to interact with these services. +adapter plugins which allow Open MCT to interact with these services. Typically, the pattern here is to provide a known interface that -Open MCT Web can utilize, and implement it such that it interacts with +Open MCT can utilize, and implement it such that it interacts with whatever back-end provides the relevant information. Examples of back-ends that can be utilized in this fashion include databases for the persistence of user-created objects, or sources of @@ -43,13 +43,13 @@ telemetry data. ## Software Architecture -The simplest overview of Open MCT Web is to look at it as a "layered" +The simplest overview of Open MCT is to look at it as a "layered" architecture, where each layer more clearly specifies the behavior of the software. ```nomnoml #direction: down -[Open MCT Web| +[Open MCT| [Platform]<->[Application] [Framework]->[Application] [Framework]->[Platform] @@ -64,14 +64,14 @@ These layers are: established an abstraction by which different software components may communicate and/or interact. * [_Platform_](platform.md): The platform layer defines the general look, - feel, and behavior of Open MCT Web. This includes user-facing components like + feel, and behavior of Open MCT. This includes user-facing components like Browse mode and Edit mode, as well as underlying elements of the information model and the general service infrastructure. * _Application_: The application layer defines specific features of - an application built on Open MCT Web. This includes adapters to + an application built on Open MCT. This includes adapters to specific back-ends, new types of things for users to create, and new ways of visualizing objects within the system. This layer - typically consists of a mix of custom plug-ins to Open MCT Web, + typically consists of a mix of custom plug-ins to Open MCT, as well as optional features (such as Plot view) included alongside the platform. diff --git a/docs/src/architecture/platform.md b/docs/src/architecture/platform.md index a59a6ebf9c..1f5e087a11 100644 --- a/docs/src/architecture/platform.md +++ b/docs/src/architecture/platform.md @@ -1,6 +1,6 @@ # Overview -The Open MCT Web platform utilizes the [framework layer](Framework.md) +The Open MCT platform utilizes the [framework layer](Framework.md) to provide an extensible baseline for applications which includes: * A common user interface (and user interface paradigm) for dealing with @@ -16,7 +16,7 @@ building application, the platform adds more specificity by defining additional extension types and allowing for integration with back end components. -The run-time architecture of an Open MCT Web application can be categorized +The run-time architecture of an Open MCT application can be categorized into certain high-level tiers: ```nomnoml @@ -29,7 +29,7 @@ into certain high-level tiers: [Browser APIs]->[Back-end] ``` -Applications built using Open MCT Web may add or configure functionality +Applications built using Open MCT may add or configure functionality in __any of these tiers__. * _DOM_: The rendered HTML document, composed from HTML templates which @@ -60,7 +60,7 @@ in __any of these tiers__. functionality needed to support the information model. This includes exposing underlying sets of extensions and mediating with the back-end. -* _Back-end_: The back-end is out of the scope of Open MCT Web, except +* _Back-end_: The back-end is out of the scope of Open MCT, except for the interfaces which are utilized by adapters participating in the service infrastructure. Includes the underlying persistence stores, telemetry  streams, and so forth which the Open MCT Web client is being used to interact  @@ -70,15 +70,15 @@ in __any of these tiers__. Once the [application has been initialized](Framework.md#application-initialization) -Open MCT Web primarily operates in an event-driven paradigm; various +Open MCT primarily operates in an event-driven paradigm; various events (mouse clicks, timers firing, receiving responses to XHRs) trigger the invocation of functions, typically in the presentation layer for user actions or in the service infrastructure for server responses. -The "main point of entry" into an initialized Open MCT Web application +The "main point of entry" into an initialized Open MCT application is effectively the [route](https://docs.angularjs.org/api/ngRoute/service/$route#example) -which is associated with the URL used to access Open MCT Web (or a +which is associated with the URL used to access Open MCT (or a default route.) This route will be associated with a template which will be displayed; this template will include references to directives and controllers which will be interpreted by Angular and used to @@ -107,11 +107,11 @@ both the information model and the service infrastructure. # Presentation Layer -The presentation layer of Open MCT Web is responsible for providing +The presentation layer of Open MCT is responsible for providing information to display within templates, and for handling interactions which are initiated from templated DOM elements. AngularJS acts as an intermediary between the web page as the user sees it, and the -presentation layer implemented as Open MCT Web extensions. +presentation layer implemented as Open MCT extensions. ```nomnoml [Presentation Layer| @@ -143,12 +143,12 @@ to primitives from AngularJS: attributes and tags. * [_Routes_](https://docs.angularjs.org/api/ngRoute/service/$route#example) are used to associate specific URLs (including the fragment identifier) - with specific application states. (In Open MCT Web, these are used to + with specific application states. (In Open MCT, these are used to describe the mode of usage - e.g. browse or edit - as well as to identify the object being used.) * [_Templates_](https://docs.angularjs.org/guide/templates) are partial HTML documents that will be rendered and kept up-to-date by AngularJS. - Open MCT Web introduces a custom `mct-include` directive which acts + Open MCT introduces a custom `mct-include` directive which acts as a wrapper around `ng-include` to allow templates to be referred to by symbolic names. @@ -189,10 +189,10 @@ to displaying domain objects. ] ``` -Domain objects are the most fundamental component of Open MCT Web's +Domain objects are the most fundamental component of Open MCT's information model. A domain object is some distinct thing relevant to a user's work flow, such as a telemetry channel, display, or similar. -Open MCT Web is a tool for viewing, browsing, manipulating, and otherwise +Open MCT is a tool for viewing, browsing, manipulating, and otherwise interacting with a graph of domain objects. A domain object should be conceived of as the union of the following: @@ -254,7 +254,7 @@ Concrete examples of capabilities which follow this pattern # Service Infrastructure -Most services exposed by the Open MCT Web platform follow the +Most services exposed by the Open MCT platform follow the [composite services](Framework.md#composite-services) to permit a higher degree of flexibility in how a service can be modified or customized for specific applications. @@ -327,7 +327,7 @@ A short summary of the roles of these services: [DomainObjectProvider]o-[CapabilityService] ``` -As domain objects are central to Open MCT Web's information model, +As domain objects are central to Open MCT's information model, acquiring domain objects is equally important. ```nomnoml @@ -338,7 +338,7 @@ acquiring domain objects is equally important. [ Instantiate DomainObject]->[ End] ``` -Open MCT Web includes an implementation of an `ObjectService` which +Open MCT includes an implementation of an `ObjectService` which satisfies this capability by: * Consulting the [Model Service](#model-service) to acquire domain object @@ -437,9 +437,9 @@ objects (this allows failures to be recognized and handled in groups.) The telemetry service is responsible for acquiring telemetry data. Notably, the platform does not include any providers for -`TelemetryService`; applications built on Open MCT Web will need to +`TelemetryService`; applications built on Open MCT will need to implement a provider for this service if they wish to expose telemetry -data. This is usually the most important step for integrating Open MCT Web +data. This is usually the most important step for integrating Open MCT into an existing telemetry system. Requests for telemetry data are usually initiated in the @@ -721,6 +721,6 @@ disallow. ``` The type service provides metadata about the different types of domain -objects that exist within an Open MCT Web application. The platform +objects that exist within an Open MCT application. The platform implementation reads these types in from extension category `types` -and wraps them in a JavaScript interface. \ No newline at end of file +and wraps them in a JavaScript interface. diff --git a/docs/src/guide/index.md b/docs/src/guide/index.md index 7016462a5a..081f1df45a 100644 --- a/docs/src/guide/index.md +++ b/docs/src/guide/index.md @@ -1,4 +1,4 @@ -# Open MCT Web Developer Guide +# Open MCT Developer Guide Victor Woeltjen [victor.woeltjen@nasa.gov](mailto:victor.woeltjen@nasa.gov) @@ -18,24 +18,24 @@ April 5, 2016 | 1.2 | Added Mct-table directive | Andrew Henry The purpose of this guide is to familiarize software developers with the Open MCT Web platform. -## What is Open MCT Web -Open MCT Web is a platform for building user interface and display tools, +## What is Open MCT +Open MCT is a platform for building user interface and display tools, developed at the NASA Ames Research Center in collaboration with teams at the Jet Propulsion Laboratory. It is written in HTML5, CSS3, and JavaScript, using [AngularJS](http://www.angularjs.org) as a framework. Its intended use is to create single-page web applications which integrate data and behavior from a variety of sources and domains. -Open MCT Web has been developed to support the remote operation of space +Open MCT has been developed to support the remote operation of space vehicles, so some of its features are specific to that task; however, it is flexible enough to be adapted to a variety of other application domains where a display tool oriented toward browsing, composing, and visualizing would be useful. -Open MCT Web provides: +Open MCT provides: * A common user interface paradigm which can be applied to a variety of domains -and tasks. Open MCT Web is more than a widget toolkit - it provides a standard +and tasks. Open MCT is more than a widget toolkit - it provides a standard tree-on-the-left, view-on-the-right browsing environment which you customize by adding new browsable object types, visualizations, and back-end adapters. * A plugin framework and an extensible API for introducing new application @@ -44,17 +44,17 @@ features of a variety of types. visualizations and infrastructure specific to telemetry display. ## Client-Server Relationship -Open MCT Web is client software - it runs entirely in the user's web browser. As +Open MCT is client software - it runs entirely in the user's web browser. As such, it is largely 'server agnostic'; any web server capable of serving files -from paths is capable of providing Open MCT Web. +from paths is capable of providing Open MCT. -While Open MCT Web can be configured to run as a standalone client, this is +While Open MCT can be configured to run as a standalone client, this is rarely very useful. Instead, it is intended to be used as a display and interaction layer for information obtained from a variety of back-end services. Doing so requires authoring or utilizing adapter plugins which allow Open MCT Web to interact with these services. -Typically, the pattern here is to provide a known interface that Open MCT Web +Typically, the pattern here is to provide a known interface that Open MCT can utilize, and implement it such that it interacts with whatever back-end provides the relevant information. Examples of back-ends that can be utilized in this fashion include databases for the persistence of user-created objects, or @@ -63,52 +63,52 @@ sources of telemetry data. See the [Architecture Guide](../architecture/index.md#Overview) for information on the client-server relationship. -## Developing with Open MCT Web -Building applications with Open MCT Web typically means authoring and utilizing +## Developing with Open MCT +Building applications with Open MCT typically means authoring and utilizing a set of plugins which provide application-specific details about how Open MCT Web should behave. ### Technologies -Open MCT Web sources are written in JavaScript, with a number of configuration +Open MCT sources are written in JavaScript, with a number of configuration files written in JSON. Displayable components are written in HTML5 and CSS3. -Open MCT Web is built using [AngularJS](http://www.angularjs.org) from Google. A +Open MCT is built using [AngularJS](http://www.angularjs.org) from Google. A good understanding of Angular is recommended for developers working with Open MCT Web. ### Forking -Open MCT Web does not currently have a single stand-alone artifact that can be +Open MCT does not currently have a single stand-alone artifact that can be used as a library. Instead, the recommended approach for creating a new -application is to start by forking/branching Open MCT Web, and then adding new -features from there. Put another way, Open MCT Web's source structure is built +application is to start by forking/branching Open MCT, and then adding new +features from there. Put another way, Open MCT's source structure is built to serve as a template for specific applications. -Forking in this manner should not require that you edit Open MCT Web's sources. +Forking in this manner should not require that you edit Open MCT's sources. The preferred approach is to create a new directory (peer to `index.html`) for the new application, then add new bundles (as described in the Framework chapter) within that directory. -To initially clone the Open MCT Web repository: +To initially clone the Open MCT repository: `git clone -b open-master` -To create a fork to begin working on a new application using Open MCT Web: +To create a fork to begin working on a new application using Open MCT: cd git checkout open-master git checkout -b -As a convention used internally, applications built using Open MCT Web have +As a convention used internally, applications built using Open MCT have master branch names with an identifying prefix. For instance, if building an application called 'Foo', the last statement above would look like: git checkout -b foo-master -This convention is not enforced or understood by Open MCT Web in any way; it is +This convention is not enforced or understood by Open MCT in any way; it is mentioned here as a more general recommendation. # Overview -Open MCT Web is implemented as a framework component which manages a set of +Open MCT is implemented as a framework component which manages a set of other components. These components, called _bundles_, act as containers to group sets of related functionality; individual units of functionality are expressed within these bundles as _extensions_. @@ -119,7 +119,7 @@ run-time to satisfy these declared dependency. This dependency injection approach allows software components which have been authored separately (e.g. as plugins) but to collaborate at run-time. -Open MCT Web's framework layer is implemented on top of AngularJS's [dependency +Open MCT's framework layer is implemented on top of AngularJS's [dependency injection mechanism](https://docs.angularjs.org/guide/di) and is modelled after [OSGi](hhttp://www.osgi.org/) and its [Declarative Services component model](http://wiki.osgi.org/wiki/Declarative_Services). In particular, this is where the term _bundle_ comes from. @@ -134,7 +134,7 @@ The framework is described in more detail in the [Framework Overview](../archite architecture guide. ### Tiers -While all bundles in a running Open MCT Web instance are effectively peers, it +While all bundles in a running Open MCT instance are effectively peers, it is useful to think of them as a tiered architecture, where each tier adds more specificity to the application. ```nomnoml @@ -152,7 +152,7 @@ It additionally interprets bundle definitions (see explanation below, as well as further detail in the Framework chapter.) At this tier, we are at our most general: We know only that we are a plugin-based application. * __Platform__: Components in the Platform tier describe both the general user -interface and corresponding developer-facing interfaces of Open MCT Web. This +interface and corresponding developer-facing interfaces of Open MCT. This tier provides the general infrastructure for applications. It is less general than the framework tier, insofar as this tier introduces a specific user interface paradigm, but it is still non-specific as to what useful features @@ -160,7 +160,7 @@ will be provided. Although they can be removed or replaced easily, bundles provided by the Platform tier generally should not be thought of as optional. * __Application__: The application tier consists of components which utilize the infrastructure provided by the Platform to provide functionality which will (or -could) be useful to specific applications built using Open MCT Web. These +could) be useful to specific applications built using Open MCT. These include adapters to specific persistence back-ends (such as ElasticSearch or CouchDB) as well as bundles which describe more user-facing features (such as _Plot_ views for visualizing time series data, or _Layout_ objects for @@ -169,20 +169,20 @@ compromising basic application functionality, with the caveat that at least one persistence adapter needs to be present. * __Plugins__: Conceptually, this tier is not so different from the application tier; it consists of bundles describing new features, back-end adapters, that -are specific to the application being built on Open MCT Web. It is described as +are specific to the application being built on Open MCT. It is described as a separate tier here because it has one important distinction from the application tier: It consists of bundles that are not included with the platform (either authored anew for the specific application, or obtained from elsewhere.) Note that bundles in any tier can go off and consult back-end services. In practice, this responsibility is handled at the Application and/or Plugin tiers; -Open MCT Web is built to be server-agnostic, so any back-end is considered an +Open MCT is built to be server-agnostic, so any back-end is considered an application-specific detail. ## Platform Overview The "tiered" architecture described in the preceding text describes a way of -thinking of and categorizing software components of a Open MCT Web application, +thinking of and categorizing software components of a Open MCT application, as well as the framework layer's role in mediating between these components. Once the framework layer has wired these software components together, however, the application's logical architecture emerges. @@ -193,7 +193,7 @@ section of the Platform guide ### Web Services -As mentioned in the Introduction, Open MCT Web is a platform single-page +As mentioned in the Introduction, Open MCT is a platform single-page applications which runs entirely in the browser. Most applications will want to additionally interact with server-side resources, to (for example) read telemetry data or store user-created objects. This interaction is handled by @@ -206,7 +206,7 @@ individual bundles using APIs which are supported in browser (such as [Web Service #2] <- [Web Browser] [Web Service #3] <- [Web Browser] [ Web Browser | - [ Open MCT Web | + [ Open MCT | [Plugin Bundle #1]-->[Core API] [Core API]<--[Plugin Bundle #2] [Platform Bundle #1]-->[Core API] @@ -216,16 +216,16 @@ individual bundles using APIs which are supported in browser (such as [Core API]<--[Platform Bundle #5] [Core API]<--[Plugin Bundle #3] ] - [Open MCT Web] ->[Browser APIs] + [Open MCT] ->[Browser APIs] ] ``` This architectural approach ensures a loose coupling between applications built -using Open MCT Web and the backends which support them. +using Open MCT and the backends which support them. ### Glossary -Certain terms are used throughout Open MCT Web with consistent meanings or +Certain terms are used throughout Open MCT with consistent meanings or conventions. Other developer documentation, particularly in-line documentation, may presume an understanding of these terms. @@ -247,7 +247,7 @@ readable description of a thing; usually a single sentence or short paragraph. (Most often used in the context of extensions, domain object models, or other similar application-specific objects.) * __domain object__: A meaningful object to the user; a distinct thing in the -work support by Open MCT Web. Anything that appears in the left-hand tree is a +work support by Open MCT. Anything that appears in the left-hand tree is a domain object. * __extension__: An extension is a unit of functionality exposed to the platform in a declarative fashion by a bundle. The term 'extension category' is used to @@ -279,10 +279,10 @@ side-by-side without conflicting. # Framework -Open MCT Web is built on the [AngularJS framework]( http://www.angularjs.org ). A +Open MCT is built on the [AngularJS framework]( http://www.angularjs.org ). A good understanding of that framework is recommended. -Open MCT Web adds an extra layer on top of AngularJS to (a) generalize its +Open MCT adds an extra layer on top of AngularJS to (a) generalize its dependency injection mechanism slightly, particularly to handle many-to-one relationships; and (b) handle script loading. Combined, these features become a plugin mechanism. @@ -301,7 +301,7 @@ MCT Web.) are collected together in bundles, and may interact with other extensions. The framework layer, loaded and initiated from `index.html`, is the main point -of entry for an application built on Open MCT Web. It is responsible for wiring +of entry for an application built on Open MCT. It is responsible for wiring together the application at run time (much of this responsibility is actually delegated to Angular); at a high-level, the framework does this by proceeding through four stages: @@ -321,7 +321,7 @@ have been registered. ## Bundles -The basic configurable unit of Open MCT Web is the _bundle_. This term has been +The basic configurable unit of Open MCT is the _bundle_. This term has been used a bit already; now we'll get to a more formal definition. A bundle is a directory which contains: @@ -329,13 +329,13 @@ A bundle is a directory which contains: * A bundle definition; a file named `bundle.json`. * Subdirectories for sources, resources, and tests. * Optionally, a `README.md` Markdown file describing its contents (this is not -used by Open MCT Web in any way, but it's a helpful convention to follow.) +used by Open MCT in any way, but it's a helpful convention to follow.) The bundle definition is the main point of entry for the bundle. The framework looks at this to determine which components need to be loaded and how they interact. -A plugin in Open MCT Web is a bundle. The platform itself is also decomposed +A plugin in Open MCT is a bundle. The platform itself is also decomposed into bundles, each of which provides some category of functionality. The difference between a _bundle_ and a _plugin_ is purely a matter of the intended use; a plugin is just a bundle that is meant to be easily added or removed. When @@ -356,7 +356,7 @@ For instance, if `bundles.json` contained: "example/extensions" ] -...then the Open MCT Web framework would look for bundle definitions at +...then the Open MCT framework would look for bundle definitions at `example/builtins/bundle.json` and `example/extensions/bundle.json`, relative to the path of `index.html`. No other bundles would be loaded. @@ -457,7 +457,7 @@ arrays of extension definitions. ### General Extensions Extensions are intended as a general-purpose mechanism for adding new types of -functionality to Open MCT Web. +functionality to Open MCT. An extension category is registered with Angular under the name of the extension, plus a suffix of two square brackets; so, an Angular service (or, @@ -466,7 +466,7 @@ extensions, from all bundles, by including this string (e.g. `types[]` to get all type definitions) in a dependency declaration. As a convention, extension categories are given single-word, plural nouns for -names within Open MCT Web (e.g. `types`.) This convention is not enforced by the +names within Open MCT (e.g. `types`.) This convention is not enforced by the platform in any way. For extension categories introduced by external plugins, it is recommended to prefix the extension category with a vendor identifier (or similar) followed by a dot, to avoid collisions. @@ -505,7 +505,7 @@ the Angular-supported method for dependency injection is (effectively) constructor-style injection; so, both declared dependencies and run-time arguments are competing for space in a constructor's arguments. -To resolve this, the Open MCT Web framework registers extension instances in a +To resolve this, the Open MCT framework registers extension instances in a partially constructed form. That is, the constructor exposed by the extension's implementation is effectively decomposed into two calls; the first takes the dependencies, and returns the constructor in its second form, which takes the @@ -549,7 +549,7 @@ sorted according to these conventions when using them. ### Angular Built-ins Several entities supported Angular are expressed and managed as extensions in -Open MCT Web. Specifically, these extension categories are _directives_, +Open MCT. Specifically, these extension categories are _directives_, _controllers_, _services_, _constants_, _runs_, and _routes_. #### Angular Directives @@ -592,7 +592,7 @@ property value , which is the constant value that will be registered. In some cases, you want to register code to run as soon as the application starts; these can be registered as extensions of the [ runs category](https://docs.angularjs.org/api/ng/type/angular.Module#run ). Implementations registered in this category will be invoked (with their declared -dependencies) when the Open MCT Web application first starts. (Note that, in +dependencies) when the Open MCT application first starts. (Note that, in this case, the implementation is better thought of as just a function, as opposed to a constructor function.) @@ -627,13 +627,13 @@ providers of the same service (that is, with matching `provides` properties); for a decorator, this will be whichever provider, decorator, or aggregator is next in the sequence of decorators. -Services exposed by the Open MCT Web platform are often declared as composite +Services exposed by the Open MCT platform are often declared as composite services, as this form is open for a variety of common modifications. # Core API -Most of Open MCT Web's relevant API is provided and/or mediated by the -framework; that is, much of developing for Open MCT Web is a matter of adding +Most of Open MCT's relevant API is provided and/or mediated by the +framework; that is, much of developing for Open MCT is a matter of adding extensions which access other parts of the platform by means of dependency injection. @@ -642,9 +642,9 @@ to be passed along by other services. ## Domain Objects -Domain objects are the most fundamental component of Open MCT Web's information +Domain objects are the most fundamental component of Open MCT's information model. A domain object is some distinct thing relevant to a user's work flow, -such as a telemetry channel, display, or similar. Open MCT Web is a tool for +such as a telemetry channel, display, or similar. Open MCT is a tool for viewing, browsing, manipulating, and otherwise interacting with a graph of domain objects. @@ -681,7 +681,7 @@ exposed. ### Identifier Syntax For most purposes, a domain object identifier can be treated as a purely -symbolic string; these are typically generated by Open MCT Web and plug-ins +symbolic string; these are typically generated by Open MCT and plug-ins should rarely be concerned with its internal structure. A domain object identifier has one or two parts, separated by a colon. @@ -724,7 +724,7 @@ exposed it to be removed from its container. containing: * `name`: Human-readable name. * `description`: Human-readable summary of this action. - * `glyph`: Single character to be displayed in Open MCT Web's icon font set. + * `glyph`: Single character to be displayed in Open MCT's icon font set. * `context`: The context in which this action is being performed (see below) Action instances are typically obtained via a domain object's `action` @@ -740,7 +740,7 @@ dragged object in a drag-and-drop operation.) ## Telemetry -Telemetry series data in Open MCT Web is represented by a common interface, and +Telemetry series data in Open MCT is represented by a common interface, and packaged in a consistent manner to facilitate passing telemetry updates around multiple visualizations. @@ -753,7 +753,7 @@ is useful when multiple distinct data sources are in use side-by-side. * `key`: A machine-readable identifier for a unique series of telemetry within that source. * _Note: This API is still under development; additional properties, such as -start and end time, should be present in future versions of Open MCT Web._ +start and end time, should be present in future versions of Open MCT._ Additional properties may be included in telemetry requests which have specific interpretations for specific sources. @@ -777,7 +777,7 @@ not. (Typically, domain values are interpreted as UTC timestamps in milliseconds relative to the UNIX epoch.) A series must have at least one domain and one range, and may have more than one. -Telemetry series data in Open MCT Web is expressed via the following +Telemetry series data in Open MCT is expressed via the following `TelemetrySeries` interface: * `getPointCount()`: Returns the number of unique points/samples in this series. @@ -816,7 +816,7 @@ interface: * `getName()`: Get the human-readable name for this type. * `getDescription()`: Get a human-readable summary of this type. * `getGlyph()`: Get the single character to be rendered as an icon for this type -in Open MCT Web's custom font set. +in Open MCT's custom font set. * `getInitialModel()`: Get a domain object model that represents the initial state (before user specification of properties) for domain objects of this type. * `getDefinition()`: Get the extension definition for this type, as a JavaScript @@ -832,7 +832,7 @@ an array of `TypeProperty` instances. ### Type Features Features of a domain object type are expressed as symbolic string identifiers. -They are defined in practice by usage; currently, the Open MCT Web platform only +They are defined in practice by usage; currently, the Open MCT platform only uses the creation feature to determine which domain object types should appear in the Create menu. @@ -886,7 +886,7 @@ Categories supported by the platform include: * `key`: A machine-readable identifier for this action. * `name`: A human-readable name for this action (e.g. to show in a menu) * `description`: A human-readable summary of the behavior of this action. -* `glyph`: A single character which will be rendered in Open MCT Web's custom +* `glyph`: A single character which will be rendered in Open MCT's custom font set as an icon for this action. ## Capabilities Category @@ -997,7 +997,7 @@ of unremoved listeners. ## Indicators Category An indicator is an element that should appear in the status area at the bottom -of a running Open MCT Web client instance. +of a running Open MCT client instance. ### Standard Indicators @@ -1007,7 +1007,7 @@ provide implementations with the following methods: * `getText()`: Provides the human-readable text that will be displayed for this indicator. * `getGlyph()`: Provides a single-character string that will be displayed as an -icon in Open MCT Web's custom font set. +icon in Open MCT's custom font set. * `getDescription()`: Provides a human-readable summary of the current state of this indicator; will be displayed in a tooltip on hover. * `getClass()`: Get a CSS class that will be applied to this indicator. @@ -1033,7 +1033,7 @@ this variety do not need to provide an implementation. ## Licenses Category The extension category `licenses` can be used to add entries into the 'Licensing -information' page, reachable from Open MCT Web's About dialog. +information' page, reachable from Open MCT's About dialog. Licenses may have the following properties, all of which are strings: @@ -1046,11 +1046,11 @@ Licenses may have the following properties, all of which are strings: ## Policies Category -Policies are used to handle decisions made using Open MCT Web's `policyService`; +Policies are used to handle decisions made using Open MCT's `policyService`; examples of these decisions are determining the applicability of certain actions, or checking whether or not a domain object of one type can contain a domain object of a different type. See the section on the Policies for an -overview of Open MCT Web's policy model. +overview of Open MCT's policy model. A policy's extension definition should include: @@ -1066,7 +1066,7 @@ context)`. The specific types used for `candidate` and `context` vary by policy category; in general, what is being asked is 'is this candidate allowed in this context?' This method should return a boolean value. -Open MCT Web's policy model requires consensus; a policy decision is allowed +Open MCT's policy model requires consensus; a policy decision is allowed when and only when all policies choose to allow it. As such, policies should generally be written to reject a certain case, and allow (by returning `true`) anything else. @@ -1195,7 +1195,7 @@ Templates do not have implementations. ## Types Category The types extension category describes types of domain objects which may -appear within Open MCT Web. +appear within Open MCT. A type's extension definition should have the following properties: @@ -1203,7 +1203,7 @@ A type's extension definition should have the following properties: stored to and matched against the type property of domain object models. * `name`: The human-readable name for this domain object type. * `description`: A human-readable summary of this domain object type. -* `glyph`: A single character to be rendered as an icon in Open MCT Web's custom +* `glyph`: A single character to be rendered as an icon in Open MCT's custom font set. * `model`: A domain object model, used as the initial state for created domain objects of this type (before any properties are specified.) @@ -1252,7 +1252,7 @@ utilized via `mct-representation`); additionally: * `name`: The human-readable name for this view type. * description : A human-readable summary of this view type. -* `glyph`: A single character to be rendered as an icon in Open MCT Web's custom +* `glyph`: A single character to be rendered as an icon in Open MCT's custom font set. * `type`: Optional; if present, this representation is only applicable for domain object's of this type. @@ -1294,7 +1294,7 @@ are visible, and what state they manage and/or behavior they invoke. This set may contain up to two different objects: The _view proxy_, which is used to make changes to the view as a whole, and the _selected object_, which is -used to represent some state within the view. (Future versions of Open MCT Web +used to represent some state within the view. (Future versions of Open MCT may support multiple selected objects.) The `selection` object made available during Edit mode has the following @@ -1330,14 +1330,14 @@ are supported: # Directives -Open MCT Web defines several Angular directives that are intended for use both +Open MCT defines several Angular directives that are intended for use both internally within the platform, and by plugins. ## Before Unload The `mct-before-unload` directive is used to listen for (and prompt for user confirmation) of navigation changes in the browser. This includes reloading, -following links out of Open MCT Web, or changing routes. It is used to hook into +following links out of Open MCT, or changing routes. It is used to hook into both `onbeforeunload` event handling as well as route changes from within Angular. @@ -1449,7 +1449,7 @@ Passed as plain text in the attribute. ### Form Structure -Forms in Open MCT Web have a common structure to permit consistent display. A +Forms in Open MCT have a common structure to permit consistent display. A form is broken down into sections, which will be displayed in groups; each section is broken down into rows, each of which provides a control for a single property. Input from this form is two-way bound to the object passed via @@ -1658,7 +1658,7 @@ by scrolling to the bottom of the table rows. # Services -The Open MCT Web platform provides a variety of services which can be retrieved +The Open MCT platform provides a variety of services which can be retrieved and utilized via dependency injection. These services fall into two categories: * _Composite Services_ are defined by a set of components extensions; plugins may @@ -1670,7 +1670,7 @@ utilized by plugins but are not intended to be modified or augmented. ## Composite Type Services -This section describes the composite services exposed by Open MCT Web, +This section describes the composite services exposed by Open MCT, specifically focusing on their interface and contract. In many cases, the platform will include a provider for a service which consumes @@ -1988,7 +1988,7 @@ The `workerService` may be used to run web workers defined via the as a shared worker); if the `key` is unknown, returns `undefined`. # Models -Domain object models in Open MCT Web are JavaScript objects describing the +Domain object models in Open MCT are JavaScript objects describing the persistent state of the domain objects they describe. Their contents include a mix of commonly understood metadata attributes; attributes which are recognized by and/or determine the applicability of specific extensions; and properties @@ -2004,7 +2004,7 @@ MCT Web and can be utilized directly: ## Extension-specific Properties Other properties of domain object models have specific meaning imposed by other -extensions within the Open MCT Web platform. +extensions within the Open MCT platform. ### Capability-specific Properties @@ -2288,7 +2288,7 @@ way of its `composition` capability.) # Policies -Policies are consulted to determine when certain behavior in Open MCT Web is +Policies are consulted to determine when certain behavior in Open MCT is allowed. Policy questions are assigned to certain categories, which broadly describe the type of decision being made; within each category, policies have a candidate (the thing which may or may not be allowed) and, optionally, a context @@ -2313,13 +2313,13 @@ The candidate argument is the view's extension definition; the context argument is the `DomainObject` to be viewed. # Build-Test-Deploy -Open MCT Web is designed to support a broad variety of build and deployment +Open MCT is designed to support a broad variety of build and deployment options. The sources can be deployed in the same directory structure used during development. A few utilities are included to support development processes. ## Command-line Build -Open MCT Web is built using [`npm`](http://npmjs.com/) +Open MCT is built using [`npm`](http://npmjs.com/) and [`gulp`](http://gulpjs.com/). To install build dependencies (only needs to be run once): @@ -2331,12 +2331,12 @@ To build: `npm run prepublish` This will compile and minify JavaScript sources, as well as copy over assets. -The contents of the `dist` folder will contain a runnable Open MCT Web +The contents of the `dist` folder will contain a runnable Open MCT instance (e.g. by starting an HTTP server in that directory), including: -* A `main.js` file containing Open MCT Web source code. +* A `main.js` file containing Open MCT source code. * Various assets in the `example` and `platform` directories. -* An `index.html` that runs Open MCT Web in its default configuration. +* An `index.html` that runs Open MCT in its default configuration. Additional `gulp` tasks are defined in [the gulpfile](gulpfile.js). @@ -2345,7 +2345,7 @@ download build dependencies. ## Test Suite -Open MCT Web uses [Jasmine 1.3](http://jasmine.github.io/) and +Open MCT uses [Jasmine 1.3](http://jasmine.github.io/) and [Karma](http://karma-runner.github.io) for automated testing. The test suite is configured to load any scripts ending with `Spec.js` found @@ -2383,8 +2383,8 @@ information using [Blanket.JS](http://blanketjs.org/) and display this at the bottom of the screen. Currently, only statement coverage is displayed. ## Deployment -Open MCT Web is built to be flexible in terms of the deployment strategies it -supports. In order to run in the browser, Open MCT Web needs: +Open MCT is built to be flexible in terms of the deployment strategies it +supports. In order to run in the browser, Open MCT needs: 1. HTTP access to sources/resources for the framework, platform, and all active bundles. @@ -2393,13 +2393,13 @@ external services need to support HTTP or some other web-accessible interface, like WebSockets.) Any HTTP server capable of serving flat files is sufficient for the first point. -The command-line build also packages Open MCT Web into a `.war` file for easier +The command-line build also packages Open MCT into a `.war` file for easier deployment on containers such as Apache Tomcat. The second point may be less flexible, as it depends upon the specific services -to be utilized by Open MCT Web. Because of this, it is often the set of external +to be utilized by Open MCT. Because of this, it is often the set of external services (and the manner in which they are exposed) that determine how to deploy -Open MCT Web. +Open MCT. One important constraint to consider in this context is the browser's same origin policy. If external services are not on the same apparent host and port @@ -2416,7 +2416,7 @@ configuration does not create a security vulnerability. Examples of deployment strategies (and the conditions under which they make the most sense) include: -* If the external services that Open MCT Web will utilize are all running on +* If the external services that Open MCT will utilize are all running on [Apache Tomcat](https://tomcat.apache.org/), then it makes sense to run Open MCT Web from the same Tomcat instance as a separate web application. The `.war` artifact produced by the command line build facilitates this deployment @@ -2427,28 +2427,28 @@ hosts/ports, then it may make sense to use a web server that supports proxying, such as the [Apache HTTP Server](http://httpd.apache.org/). In this configuration, the HTTP server would be configured to proxy (or reverse proxy) requests at specific paths to the various external services, while providing -Open MCT Web as flat files from a different path. +Open MCT as flat files from a different path. * If a single server component is being developed to handle all server-side -needs of an Open MCT Web instance, it can make sense to serve Open MCT Web (as +needs of an Open MCT instance, it can make sense to serve Open MCT (as flat files) from the same component using an embedded HTTP server such as [Nancy](http://nancyfx.org/). * If no external services are needed (or if the 'external services' will just be generating flat files to read) it makes sense to utilize a lightweight flat file HTTP server such as [Lighttpd](http://www.lighttpd.net/). In this -configuration, Open MCT Web sources/resources would be placed at one path, while +configuration, Open MCT sources/resources would be placed at one path, while the files generated by the external service are placed at another path. * If all external services support CORS, it may make sense to have an HTTP -server that is solely responsible for making Open MCT Web sources/resources -available, and to have Open MCT Web contact these external services directly. +server that is solely responsible for making Open MCT sources/resources +available, and to have Open MCT contact these external services directly. Again, lightweight HTTP servers such as [Lighttpd](http://www.lighttpd.net/) are useful in this circumstance. The downside of this option is that additional configuration effort is required, both to enable CORS on the external services, -and to ensure that Open MCT Web can correctly locate these services. +and to ensure that Open MCT can correctly locate these services. -Another important consideration is authentication. By design, Open MCT Web does +Another important consideration is authentication. By design, Open MCT does not handle user authentication. Instead, this should typically be treated as a deployment-time concern, where authentication is handled by the HTTP server -which provides Open MCT Web, or an external access management system. +which provides Open MCT, or an external access management system. ### Configuration In most of the deployment options above, some level of configuration is likely @@ -2456,7 +2456,7 @@ to be needed or desirable to make sure that bundles can reach the external services they need to reach. Most commonly this means providing the path or URL to an external service. -Configurable parameters within Open MCT Web are specified via constants +Configurable parameters within Open MCT are specified via constants (literally, as extensions of the `constants` category) and accessed via dependency injection by the scripts which need them. Reasonable defaults for these constants are provided in the bundle where they are used. Plugins are @@ -2475,7 +2475,7 @@ for error, but is viable if there are a small number of constants to change. constants. This is particularly appropriate when multiple configurations (e.g. development, test, production) need to be managed easily; these can be swapped quickly by changing the set of active bundles in bundles.json. -* Deploy Open MCT Web and its external services in such a fashion that the +* Deploy Open MCT and its external services in such a fashion that the default paths to reach external services are all correct. ### Configuration Constants @@ -2486,7 +2486,7 @@ The following constants have global significance: to be overridden by other bundles, but persistence adapters may wish to consume this constant in order to provide persistence for that space. -The following configuration constants are recognized by Open MCT Web bundles: +The following configuration constants are recognized by Open MCT bundles: * Common UI elements - `platform/commonUI/general` * `THEME`: A string identifying the current theme symbolically. Individual stylesheets (the `stylesheets` extension category) may specify an optional diff --git a/docs/src/index.md b/docs/src/index.md index dbb1d36220..83860e0da6 100644 --- a/docs/src/index.md +++ b/docs/src/index.md @@ -1,13 +1,13 @@ -# Open MCT Web Documentation +# Open MCTDocumentation ## Overview Documentation is provided to support the use and development of - Open MCT Web. It's recommended that before doing - any development with Open MCT Web you take some time to familiarize yourself + Open MCT. It's recommended that before doing + any development with Open MCT you take some time to familiarize yourself with the documentation below. - Open MCT Web provides functionality out of the box, but it's also a platform for + Open MCT provides functionality out of the box, but it's also a platform for building rich mission operations applications based on modern web technology. The platform is configured declaratively, and defines conventions for building on the provided capabilities by creating modular 'bundles' that @@ -17,7 +17,7 @@ ## Sections * The [Architecture Overview](architecture/) describes the concepts used - throughout Open MCT Web, and gives a high level overview of the platform's design. + throughout Open MCT, and gives a high level overview of the platform's design. * The [Developer's Guide](guide/) goes into more detail about how to use the platform and the functionality that it provides. @@ -31,5 +31,4 @@ functions that make up the software platform. * Finally, the [Development Process](process/) document describes the - Open MCT Web software development cycle. - \ No newline at end of file + Open MCT software development cycle. diff --git a/docs/src/process/cycle.md b/docs/src/process/cycle.md index 4618fe0433..b07a76e8eb 100644 --- a/docs/src/process/cycle.md +++ b/docs/src/process/cycle.md @@ -1,6 +1,6 @@ # Development Cycle -Development of Open MCT Web occurs on an iterative cycle of +Development of Open MCT occurs on an iterative cycle of sprints and releases. * A _sprint_ is three weeks in duration, and represents a diff --git a/docs/src/process/index.md b/docs/src/process/index.md index 78f919e4c2..fc8f7e6e91 100644 --- a/docs/src/process/index.md +++ b/docs/src/process/index.md @@ -1,6 +1,6 @@ # Development Process -The process used to develop Open MCT Web is described in the following +The process used to develop Open MCT is described in the following documents: * The [Development Cycle](cycle.md) describes how and when specific @@ -9,7 +9,7 @@ documents: Open MCT (both semantics and process.) * Testing is described in two documents: * The [Test Plan](testing/plan.md) summarizes the approaches used - to test Open MCT Web. + to test Open MCT. * The [Test Procedures](testing/procedures.md) document what specific tests are performed to verify correctness, and how they should be carried out. diff --git a/docs/src/process/testing/plan.md b/docs/src/process/testing/plan.md index fead5f5a50..47ab60ee34 100644 --- a/docs/src/process/testing/plan.md +++ b/docs/src/process/testing/plan.md @@ -2,7 +2,7 @@ ## Test Levels -Testing for Open MCT Web includes: +Testing for Open MCT includes: * _Smoke testing_: Brief, informal testing to verify that no major issues or regressions are present in the software, or in specific features of diff --git a/docs/src/process/testing/procedures.md b/docs/src/process/testing/procedures.md index b33f88c6d1..5ccf0def5b 100644 --- a/docs/src/process/testing/procedures.md +++ b/docs/src/process/testing/procedures.md @@ -4,7 +4,7 @@ This document is intended to be used: -* By testers, to verify that Open MCT Web behaves as specified. +* By testers, to verify that Open MCT behaves as specified. * By the development team, to document new test cases and to provide guidance on how to author these. @@ -62,7 +62,7 @@ Test cases should be narrow in scope; if a list of steps is excessively long (or must be written vaguely to be kept short) it should be broken down into multiple tests which reference one another. -All requirements satisfied by Open MCT Web should be verifiable using +All requirements satisfied by Open MCT should be verifiable using one or more test procedures. ## Glossary @@ -166,4 +166,4 @@ Eval. criteria | Visual inspection * Logs should not contain any unexpected warnings or errors ("expected" warnings or errors are those that have been documented and prioritized as known issues, or those that are explained by transient conditions - external to the software, such as network outages.) \ No newline at end of file + external to the software, such as network outages.) diff --git a/docs/src/tutorials/index.md b/docs/src/tutorials/index.md index 1bda1d8848..2ebc32b957 100644 --- a/docs/src/tutorials/index.md +++ b/docs/src/tutorials/index.md @@ -1,4 +1,4 @@ -# Open MCT Web Tutorials +# Open MCT Tutorials Victor Woeltjen victor.woeltjen@nasa.gov @@ -23,9 +23,9 @@ been added or removed as part of the tutorial. In these cases, any lines added will be indicated with a '+' at the start of the line. Any lines removed will be indicated with a '-'. -## Setting Up Open MCT Web +## Setting Up Open MCT -In this section, we will cover the steps necessary to get a minimal Open MCT Web +In this section, we will cover the steps necessary to get a minimal Open MCT developer environment up and running. Once we have this, we will be able to proceed with writing plugins as described in this tutorial. @@ -40,22 +40,22 @@ more recent versions, but this cannot be guaranteed. * Google Chrome v42: https://www.google.com/chrome/ * A text editor. -Open MCT Web can be run without any of these tools, provided suitable -alternatives are taken; see the [Open MCT Web Developer Guide](../guide/index.md) -for a more general overview of how to run and deploy a Open MCT Web application. +Open MCT can be run without any of these tools, provided suitable +alternatives are taken; see the [Open MCT Developer Guide](../guide/index.md) +for a more general overview of how to run and deploy a Open MCT application. -### Check out Open MCT Web Sources +### Check out Open MCT Sources -First step is to check out Open MCT Web from the source repository. +First step is to check out Open MCT from the source repository. `git clone https://github.com/nasa/openmctweb.git openmctweb` -This will create a copy of the Open MCT Web source code repository in the folder +This will create a copy of the Open MCT source code repository in the folder `openmctweb` (relative to the path from which you ran the command.) If you have a repository URL, use that as the "path to repo" above. Alternately, -if you received Open MCT Web as a git bundle, the path to that bundle on the +if you received Open MCT as a git bundle, the path to that bundle on the local filesystem can be used instead. -At this point, it will also be useful to branch off of Open MCT Web v0.6.2 +At this point, it will also be useful to branch off of Open MCT v0.6.2 (which was used when writing these tutorials) to begin adding plugins. cd openmctweb @@ -64,12 +64,12 @@ At this point, it will also be useful to branch off of Open MCT Web v0.6.2 ### Configuring Persistence -In its default configuration, Open MCT Web will try to use ElasticSearch +In its default configuration, Open MCT will try to use ElasticSearch (expected to be deployed at /elastic on the same HTTP server running Open MCT Web) to persist user-created domain objects. We don't need that for these tutorials, so we will replace the ElasticSearch plugin with the example persistence plugin. This doesn't actually persist, so anything we create within -Open MCT Web will be lost on reload, but that's fine for purposes of these +Open MCT will be lost on reload, but that's fine for purposes of these tutorials. To change this configuration, edit bundles.json (at the top level of the Open @@ -132,7 +132,7 @@ __bundles.json__ ### Run a Web Server -The next step is to run a web server so that you can view the Open MCT Web +The next step is to run a web server so that you can view the Open MCT client (including the plugins you add to it) in browser. Any web server can be used for hosting OpenMCTWeb, and a trivial web server is provided in this package for the purposes of running the tutorials. The provided web server @@ -144,11 +144,11 @@ To run the tutorial web server ### Viewing in Browser -Once running, you should be able to view Open MCT Web from your browser at +Once running, you should be able to view Open MCT from your browser at http://localhost:8080/ (assuming the web server is running on port 8080, and OpenMCTWeb is installed at the server's root path). [Google Chrome](https://www.google.com/chrome/) is recommended for these -tutorials, as Chrome is Open MCT Web's "test-to" browser. The browser cache +tutorials, as Chrome is Open MCT's "test-to" browser. The browser cache can sometimes interfere with development (masking changes by using older versions of sources); to avoid this, it is easiest to run Chrome with Developer Tools expanded, and "Disable cache" selected from the Network @@ -158,7 +158,7 @@ tab, as shown below. # Tutorials -These tutorials cover three of the common tasks in Open MCT Web: +These tutorials cover three of the common tasks in Open MCT: * The "to-do list" tutorial illustrates how to add a new application feature. * The "bar graph" tutorial illustrates how to add a new telemetry visualization. @@ -167,17 +167,17 @@ backend. ## To-do List -The goal of this tutorial is to add a new application feature to Open MCT Web: +The goal of this tutorial is to add a new application feature to Open MCT: To-do lists. Users should be able to create and manage these to track items that they need to do. This is modelled after the to-do lists at http://todomvc.com/. ### Step 1-Create the Plugin -The first step to adding a new feature to Open MCT Web is to create the plugin -which will expose that feature. A plugin in Open MCT Web is represented by what +The first step to adding a new feature to Open MCT is to create the plugin +which will expose that feature. A plugin in Open MCT is represented by what is called a bundle; a bundle, in turn, is a directory which contains a file bundle.json, which in turn describes where other relevant sources & resources -will be. The syntax of this file is described in more detail in the Open MCT Web +will be. The syntax of this file is described in more detail in the Open MCT Developer Guide. We will create this file in the directory tutorials/todo (we can hereafter refer @@ -254,7 +254,7 @@ __bundles.json__ ``` __bundles.json__ -At this point, we can reload Open MCT Web. We haven't introduced any new +At this point, we can reload Open MCT. We haven't introduced any new functionality, so we don't see anything different, but if we run with logging enabled ( http://localhost:8080/?log=info ) and check the browser console, we should see: @@ -265,11 +265,11 @@ should see: ### Step 2-Add a Domain Object Type -Features in a Open MCT Web application are most commonly expressed as domain +Features in a Open MCT application are most commonly expressed as domain objects and/or views thereof. A domain object is some thing that is relevant to -the work that the Open MCT Web application is meant to support. Domain objects +the work that the Open MCT application is meant to support. Domain objects can be created, organized, edited, placed in layouts, and so forth. (For a -deeper explanation of domain objects, see the Open MCT Web Developer Guide.) +deeper explanation of domain objects, see the Open MCT Developer Guide.) In the case of our to-do list feature, the to-do list itself is the thing we'll want users to be able to create and edit. So, we will add that as a new type in @@ -303,7 +303,7 @@ Going through the properties we've defined: domain objects of this type. * The `name` of "To-Do List" is the human-readable name for this type, and will be shown to users. -* The `glyph` refers to a special character in Open MCT Web's custom font set; +* The `glyph` refers to a special character in Open MCT's custom font set; this will be used as an icon. * The `description` is also human-readable, and will be used whenever a longer explanation of what this type is should be shown. @@ -312,7 +312,7 @@ this type. Including `creation` here means that we want users to be able to create this (in other cases, we may wish to expose things as domain objects which aren't user-created, in which case we would omit this.) -If we reload Open MCT Web, we see that our new domain object type appears in the +If we reload Open MCT, we see that our new domain object type appears in the Create menu: ![To-Do List](images/todo.png) @@ -324,10 +324,10 @@ because we haven't defined any yet. ### Step 3-Add a View In order to allow a to-do list to be used, we need to define and display its -contents. In Open MCT Web, the pattern that the user expects is that they'll +contents. In Open MCT, the pattern that the user expects is that they'll click on an object in the left-hand tree, and see a visualization of it to the -right; in Open MCT Web, these visualizations are called views. -A view in Open MCT Web is defined by an Angular template. We'll add that in the +right; in Open MCT, these visualizations are called views. +A view in Open MCT is defined by an Angular template. We'll add that in the directory `tutorials/todo/res/templates` (`res` is, by default, the directory where bundle-related resources are kept, and `templates` is where HTML templates are stored by convention.) @@ -357,12 +357,12 @@ to filter down to either complete or incomplete tasks. of the domain object being viewed; this contains all of the persistent state associated with that object. This model is effectively just a JSON document, so we can choose what goes into it (so long as we take care not to collide with -platform-defined properties; see the Open MCT Web Developer Guide.) Here, we +platform-defined properties; see the Open MCT Developer Guide.) Here, we assume that all tasks will be stored in a property `tasks`, and that each will be an object containing a `description` (the readable summary of the task) and a boolean `completed` flag. -To expose this view in Open MCT Web, we need to declare it in our bundle +To expose this view in Open MCT, we need to declare it in our bundle definition: ```diff @@ -399,7 +399,7 @@ contains the following properties: * Its `key` is its machine-readable name; we've given it the same name here as the domain object type, but could have chosen any unique name. -* The `type` property tells Open MCT Web that this view is only applicable to +* The `type` property tells Open MCT that this view is only applicable to domain objects of that type. This means that we'll see this view for To-do Lists that we create, but not for other domain objects (such as Folders.) @@ -449,10 +449,10 @@ definition of that type. ``` __tutorials/todo/bundle.json__ -Now, when To-do List objects are created in Open MCT Web, they will initially +Now, when To-do List objects are created in Open MCT, they will initially have the state described by that model property. -If we reload Open MCT Web, create a To-do List, and navigate to it in the tree, +If we reload Open MCT, create a To-do List, and navigate to it in the tree, we should now see: ![To-Do List](images/todo-list.png) @@ -527,7 +527,7 @@ first argument is falsy.) * `toggleCompletion` changes whether or not a task is complete. We make the change via the domain object's `mutation` capability, and then persist the -change via its `persistence` capability. See the Open MCT Web Developer Guide +change via its `persistence` capability. See the Open MCT Developer Guide for more information on these capabilities. * `showTask` is meant to be used to help decide if a task should be shown, based @@ -537,7 +537,7 @@ the use of the double-not !! to coerce the completed flag to a boolean, for equality testing.) Note that these functions make reference to `$scope.domainObject;` this is the -domain object being viewed, which is passed into the scope by Open MCT Web +domain object being viewed, which is passed into the scope by Open MCT prior to our template being utilized. On its own, this controller merely exposes these functions; the next step is to @@ -640,7 +640,7 @@ if we go to My Items and come back. We now have a somewhat-functional view of our To-Do List, but we're still missing some important functionality: Adding and removing tasks! -This is a good place to discuss the user interface style of Open MCT Web. Open +This is a good place to discuss the user interface style of Open MCT. Open MCT Web draws a distinction between "using" and "editing" a domain object; in general, you can only make changes to a domain object while in Edit mode, which is reachable from the button with a pencil icon. This distinction helps users @@ -732,14 +732,14 @@ What we've stated here is that the To-Do List's view will have a toolbar which contains two sections (which will be visually separated by a divider), each of which contains one button. The first is a button labelled "Add Task" that will invoke an `addTask` method; the second is a button with a glyph (which will appear -as a trash can in Open MCT Web's custom font set) which will invoke a `removeTask` -method. For more information on forms and tool bars in Open MCT Web, see the -Open MCT Web Developer Guide. +as a trash can in Open MCT's custom font set) which will invoke a `removeTask` +method. For more information on forms and tool bars in Open MCT, see the +Open MCT Developer Guide. -If we reload and run Open MCT Web, we won't see any tool bar when we switch over +If we reload and run Open MCT, we won't see any tool bar when we switch over to Edit mode. This is because the aforementioned methods are expected to be found on currently-selected elements; we haven't done anything with selections -in our view yet, so the Open MCT Web platform will filter this tool bar down to +in our view yet, so the Open MCT platform will filter this tool bar down to all the applicable controls, which means no controls at all. To support selection, we will need to make some changes to our controller: @@ -842,7 +842,7 @@ click the _Add Task_ button. This form is described declaratively, and populates an object that has the same format as tasks in the `tasks` array of our To-Do List's model. * We've added an argument to the `TodoController`: The `dialogService`, which is -exposed by the Open MCT Web platform to handle showing dialogs. +exposed by the Open MCT platform to handle showing dialogs. * Some utility functions for handling the actual adding and removing of tasks. These use the `mutation` capability to modify the tasks in the To-Do List's model. @@ -947,7 +947,7 @@ declare that dependency in its extension definition: ``` __tutorials/todo/bundle.json__ -If we now reload Open MCT Web, we'll be able to see the new functionality we've +If we now reload Open MCT, we'll be able to see the new functionality we've added. If we Create a new To-Do List, navigate to it, and click the button with the Pencil icon in the top-right, we'll be in edit mode. We see, first, that our "Add Task" button appears in the tool bar: @@ -1136,7 +1136,7 @@ Here, we have defined classes and appearances for: * A message, which we will add next, to display when there are no tasks (`example-message`). -To include this CSS file in our running instance of Open MCT Web, we need to +To include this CSS file in our running instance of Open MCT, we need to declare it in our bundle definition, this time as an extension of category `stylesheets`: ```diff @@ -1436,7 +1436,7 @@ The corresponding CSS file which styles and positions these elements: __tutorials/bargraph/res/css/bargraph.css__ This is already enough that, if we add `"tutorials/bargraph"` to `bundles.json`, -we should be able to run Open MCT Web and see our Bar Graph as an available view +we should be able to run Open MCT and see our Bar Graph as an available view for domain objects which provide telemetry (such as the example _Sine Wave Generator_) as well as for _Telemetry Panel_ objects: @@ -1502,7 +1502,7 @@ will help support some positioning in the template. to real-time telemetry updates. This will deal with most of the complexity of dealing with telemetry (e.g. differentiating between individual telemetry points and telemetry panels, monitoring latest values) and provide us with a useful -interface for populating our view. The the Open MCT Web Developer Guide for more +interface for populating our view. The the Open MCT Developer Guide for more information on dealing with telemetry. Whenever the telemetry handler invokes its callbacks, we update the set of @@ -1594,7 +1594,7 @@ service we made use of. ``` __tutorials/bargraph/bundle.json__ -When we reload Open MCT Web, we are now able to see that our bar graph view +When we reload Open MCT, we are now able to see that our bar graph view correctly labels one bar per telemetry-providing domain object, as shown for this Telemetry Panel containing four Sine Wave Generators. @@ -1703,7 +1703,7 @@ __tutorials/bargraph/res/templates/bargraph.html__ Here, we utilize the functions we just provided from the controller to position the bar, using an ng-style attribute. -When we reload Open MCT Web, our bar graph view now looks like: +When we reload Open MCT, our bar graph view now looks like: ![Bar Plot](images/bar-plot-3.png) @@ -1714,7 +1714,7 @@ sine waves, but what about other values? We want to provide the user with a means of configuring these boundaries. This is normally done via Edit mode. Since view configuration is a common -problem, the Open MCT Web platform exposes a configuration object - called +problem, the Open MCT platform exposes a configuration object - called `configuration` - into our view's scope. We can populate it as we please, and when we return to our view later, those changes will be persisted. @@ -1884,14 +1884,14 @@ defaults (if needed), and expose its state into the scope. and `high` as entered by the user from the tool bar. This uses the getter-setters we defined previously. -If we reload Open MCT Web and go to a Bar Graph view in Edit mode, we now see +If we reload Open MCT and go to a Bar Graph view in Edit mode, we now see that we can change these bounds from the tool bar. ![Bar plot](images/bar-plot-4.png) ## Telemetry Adapter -The goal of this tutorial is to demonstrate how to integrate Open MCT Web +The goal of this tutorial is to demonstrate how to integrate Open MCT with an existing telemetry system. A summary of the steps we will take: @@ -1902,7 +1902,7 @@ A summary of the steps we will take: ### Step 0-Expose Your Telemetry -As a precondition to integrating telemetry data into Open MCT Web, this +As a precondition to integrating telemetry data into Open MCT, this information needs to be available over web-based interfaces. In practice, this will most likely mean exposing data over HTTP, or over WebSockets. For purposes of this tutorial, a simple node server is provided to stand @@ -2080,7 +2080,7 @@ measurement. (Note that the term "measurement" is used to describe a distinct data series within this system; in other systems, these have been called channels, mnemonics, telemetry points, or other names. No preference is made here; -Open MCT Web is easily adapted to use the terminology appropriate to your +Open MCT is easily adapted to use the terminology appropriate to your system.) Additionally, while running the server from the terminal we can toggle the state of the "spacecraft" by hitting enter; this will turn the "thrusters" @@ -2162,9 +2162,9 @@ telemetry. __tutorial-server/dictionary.json__ It should be noted that neither the interface for the example server nor the -dictionary format are expected by Open MCT Web; rather, these are intended to +dictionary format are expected by Open MCT; rather, these are intended to stand in for some existing source of telemetry data to which we wish to adapt -Open MCT Web. +Open MCT. We can run this example server by: @@ -2181,11 +2181,11 @@ like https://www.npmjs.com/package/wscat : < {"type":"dictionary","value":{"name":"Example Spacecraft","identifier":"sc","subsystems":[{"name":"Propulsion","identifier":"prop","measurements":[{"name":"Fuel","identifier":"prop.fuel","units":"kilograms","type":"float"},{"name":"Thrusters","identifier":"prop.thrusters","units":"None","type":"string"}]},{"name":"Communications","identifier":"comms","measurements":[{"name":"Received","identifier":"comms.recd","units":"bytes","type":"integer"},{"name":"Sent","identifier":"comms.sent","units":"bytes","type":"integer"}]},{"name":"Power","identifier":"pwr","measurements":[{"name":"Generator Temperature","identifier":"pwr.temp","units":"€C","type":"float"},{"name":"Generator Current","identifier":"pwr.c","units":"A","type":"float"},{"name":"Generator Voltage","identifier":"pwr.v","units":"V","type":"float"}]}]}} Now that the example server's interface is reasonably well-understood, a plugin -can be written to adapt Open MCT Web to utilize it. +can be written to adapt Open MCT to utilize it. ### Step 1-Add a Top-level Object -Since Open MCT Web uses an "object-first" approach to accessing data, before +Since Open MCT uses an "object-first" approach to accessing data, before we'll be able to do anything with this new data source, we'll need to have a way to explore the available measurements in the tree. In this step, we will add a top-level object which will serve as a container; in the next step, we @@ -2276,7 +2276,7 @@ If we include this in our set of active bundles: __bundles.json__ -...we will be able to reload Open MCT Web and see that it is present: +...we will be able to reload Open MCT and see that it is present: ![Telemetry](images/telemetry-1.png) @@ -2287,7 +2287,7 @@ dictionary. In order to expose the telemetry dictionary, we first need to read it from the server. Our first step will be to add a service that will handle interactions -with the server; this will not be used by Open MCT Web directly, but will be +with the server; this will not be used by Open MCT directly, but will be used by subsequent components we add. /*global define,WebSocket*/ @@ -2340,7 +2340,7 @@ Once the dictionary has been loaded, we will want to represent its contents as domain objects. Specifically, we want subsystems to appear as objects under My Spacecraft, and measurements to appear as objects within those subsystems. This means that we need to convert the data from the dictionary -into domain object models, and expose these to Open MCT Web via a +into domain object models, and expose these to Open MCT via a `modelService`. /*global define*/ @@ -2449,16 +2449,16 @@ also prefix it with `example_tlm`:. This accomplishes a few things: * We can easily tell whether an identifier is expected to be in the dictionary or not. * We avoid naming collisions with other model providers. - * Finally, Open MCT Web uses the colon prefix as a hint that this domain + * Finally, Open MCT uses the colon prefix as a hint that this domain object will not be in the persistence store. * A couple of new types are introduced here (in the `type` field of the domain object models we create); we will need to define these as extensions as well in order for them to display correctly. -* The `composition` field of each subsystem contained the Open MCT Web +* The `composition` field of each subsystem contained the Open MCT identifiers of all the measurements in that subsystem. This `composition` field -will be used by Open MCT Web to determine what domain objects contain other +will be used by Open MCT to determine what domain objects contain other domain objects (e.g. to populate the tree.) -* The `telemetry` field of each measurement will be used by Open MCT Web to +* The `telemetry` field of each measurement will be used by Open MCT to understand how to request and interpret telemetry data for this object. The `key` is the machine-readable identifier for this measurement within the telemetry system; the `ranges` provide metadata about the values for this data. @@ -2637,7 +2637,7 @@ overridden if defined anywhere else, allowing configuration bundles to specify different URLs for the WebSocket connection. * The initializer script is registered using the `runs` category of extension, to ensure that this executes (and populates the contents of the top-level My -Spacecraft object) once Open MCT Web is started. +Spacecraft object) once Open MCT is started. * This depends upon the `example.adapter` service we exposed above, as well as Angular's `$q`; these services will be made available in the constructor call. @@ -2648,7 +2648,7 @@ this is registered under the extension category `components`. we exposed above, as well as Angular's `$q`; these services will be made available in the constructor call. -Now if we run Open MCT Web (assuming our example telemetry server is also +Now if we run Open MCT (assuming our example telemetry server is also running) and expand our top-level node completely, we see the contents of our dictionary: @@ -2793,7 +2793,7 @@ that will resolve only when all histories have been packaged. Promise-chaining is used to ensure that the resolved value will be the fully-packaged data. It is worth mentioning here that the `requests` we receive should look a little -familiar. When Open MCT Web generates a `request` object associated with a +familiar. When Open MCT generates a `request` object associated with a domain object, it does so by merging together three JavaScript objects: * First, the `telemetry` property from that domain object's type definition. @@ -2936,7 +2936,7 @@ back to see it. We can fix this by adding support for telemetry subscriptions. ### Step 4-Real-time Telemetry Finally, we want to utilize the server's ability to subscribe to telemetry -from Open MCT Web. To do this, first we want to expose some new methods for +from Open MCT. To do this, first we want to expose some new methods for this from our server adapter: ```diff @@ -3116,6 +3116,6 @@ we issue an unsubscribe request. (We don't take any care to avoid issuing multiple subscribe requests to the server, because we happen to know that the server can handle this.) -Running Open MCT Web again, we can still plot our historical telemetry - but +Running Open MCT again, we can still plot our historical telemetry - but now we also see that it updates in real-time as more data comes in from the server. From 5279c842f55b1efeb33421dea1d98fc855b5983f Mon Sep 17 00:00:00 2001 From: Victor Woeltjen Date: Wed, 4 May 2016 10:17:23 -0700 Subject: [PATCH 068/132] [Branding] Change title of about dialog --- platform/commonUI/about/res/templates/about-dialog.html | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/platform/commonUI/about/res/templates/about-dialog.html b/platform/commonUI/about/res/templates/about-dialog.html index 7b7dd436f5..bd87ce72c1 100644 --- a/platform/commonUI/about/res/templates/about-dialog.html +++ b/platform/commonUI/about/res/templates/about-dialog.html @@ -22,7 +22,7 @@
        -

        OpenMCT Web

        +

        Open MCT

        Open MCT Web, Copyright © 2014-2015, United States Government as represented by the Administrator of the National Aeronautics and Space Administration. All rights reserved.

        Open MCT Web is licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0.

        From 00706558f5abcde2dcfee825dcf737c929f75751 Mon Sep 17 00:00:00 2001 From: Victor Woeltjen Date: Wed, 4 May 2016 10:42:46 -0700 Subject: [PATCH 069/132] [Branding] Restore missing space --- docs/src/index.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/src/index.md b/docs/src/index.md index 83860e0da6..3b4d767106 100644 --- a/docs/src/index.md +++ b/docs/src/index.md @@ -1,4 +1,4 @@ -# Open MCTDocumentation +# Open MCT Documentation ## Overview From 1c6ef28b80ed6972e5df6ad9103e1a0f7e13351c Mon Sep 17 00:00:00 2001 From: Pete Richards Date: Wed, 4 May 2016 11:13:12 -0700 Subject: [PATCH 070/132] [Table] Fix headers in firefox Don't use table-cell displays for cells, resolves issues with zero-sized tbody causing thead to be 100% of table size. Fixes https://github.com/nasa/openmct/issues/809 --- platform/features/table/res/sass/table.scss | 17 ++++++++++++++--- 1 file changed, 14 insertions(+), 3 deletions(-) diff --git a/platform/features/table/res/sass/table.scss b/platform/features/table/res/sass/table.scss index a79cfac4c6..0e52f589e2 100644 --- a/platform/features/table/res/sass/table.scss +++ b/platform/features/table/res/sass/table.scss @@ -34,17 +34,28 @@ } .mct-table { table-layout: fixed; - th { - box-sizing: border-box; + thead { + display: block; + tr { + display: block; + white-space: nowrap; + th { + display: inline-block; + box-sizing: border-box; + } + } } tbody { tr { position: absolute; + white-space: nowrap; + display: block; } td { white-space: nowrap; overflow: hidden; box-sizing: border-box; + display: inline-block; } } -} \ No newline at end of file +} From 7fad4e9ea1fe085143eeb1b403e095399e554e2a Mon Sep 17 00:00:00 2001 From: Pete Richards Date: Thu, 5 May 2016 18:25:37 -0700 Subject: [PATCH 071/132] [General] remove dupe, debounce inputs Remove duplicate ClickAwayController implementation that was obscuring actual implementation. Debounce clickaway action in case toggle is invoked in a click handler. Resolves https://github.com/nasa/openmct/issues/888 --- platform/commonUI/general/bundle.js | 4 +- .../src/controllers/ClickAwayController.js | 17 ++- .../controllers/ClickAwayControllerSpec.js | 22 ++-- platform/search/bundle.js | 10 -- .../src/controllers/ClickAwayController.js | 105 ------------------ .../controllers/ClickAwayControllerSpec.js | 94 ---------------- 6 files changed, 22 insertions(+), 230 deletions(-) delete mode 100644 platform/search/src/controllers/ClickAwayController.js delete mode 100644 platform/search/test/controllers/ClickAwayControllerSpec.js diff --git a/platform/commonUI/general/bundle.js b/platform/commonUI/general/bundle.js index 3e7f558e8b..8bbdbc77af 100644 --- a/platform/commonUI/general/bundle.js +++ b/platform/commonUI/general/bundle.js @@ -268,8 +268,8 @@ define([ "key": "ClickAwayController", "implementation": ClickAwayController, "depends": [ - "$scope", - "$document" + "$document", + "$timeout" ] }, { diff --git a/platform/commonUI/general/src/controllers/ClickAwayController.js b/platform/commonUI/general/src/controllers/ClickAwayController.js index 9c7c6f8091..a25ff51d49 100644 --- a/platform/commonUI/general/src/controllers/ClickAwayController.js +++ b/platform/commonUI/general/src/controllers/ClickAwayController.js @@ -19,7 +19,7 @@ * this source code distribution or the Licensing information page available * at runtime from the About dialog for additional information. *****************************************************************************/ -/*global define,Promise*/ +/*global define*/ define( [], @@ -36,20 +36,19 @@ define( * @param $scope the scope in which this controller is active * @param $document the document element, injected by Angular */ - function ClickAwayController($scope, $document) { + function ClickAwayController($document, $timeout) { var self = this; this.state = false; - this.$scope = $scope; this.$document = $document; - // Callback used by the document listener. Deactivates; - // note also $scope.$apply is invoked to indicate that - // the state of this controller has changed. + // Callback used by the document listener. Timeout ensures that + // `clickaway` action occurs after `toggle` if `toggle` is + // triggered by a click/mouseup. this.clickaway = function () { - self.deactivate(); - $scope.$apply(); - return false; + $timeout(function () { + self.deactivate(); + }); }; } diff --git a/platform/commonUI/general/test/controllers/ClickAwayControllerSpec.js b/platform/commonUI/general/test/controllers/ClickAwayControllerSpec.js index 96e7b6c13f..9b73aefb51 100644 --- a/platform/commonUI/general/test/controllers/ClickAwayControllerSpec.js +++ b/platform/commonUI/general/test/controllers/ClickAwayControllerSpec.js @@ -19,7 +19,7 @@ * this source code distribution or the Licensing information page available * at runtime from the About dialog for additional information. *****************************************************************************/ -/*global define,Promise,describe,it,expect,beforeEach,waitsFor,jasmine*/ +/*global define,describe,it,expect,beforeEach,jasmine*/ define( ["../../src/controllers/ClickAwayController"], @@ -27,20 +27,20 @@ define( "use strict"; describe("The click-away controller", function () { - var mockScope, - mockDocument, + var mockDocument, + mockTimeout, controller; beforeEach(function () { - mockScope = jasmine.createSpyObj( - "$scope", - [ "$apply" ] - ); mockDocument = jasmine.createSpyObj( "$document", [ "on", "off" ] ); - controller = new ClickAwayController(mockScope, mockDocument); + mockTimeout = jasmine.createSpy('timeout'); + controller = new ClickAwayController( + mockDocument, + mockTimeout + ); }); it("is initially inactive", function () { @@ -79,10 +79,12 @@ define( }); it("deactivates and detaches listener on document click", function () { - var callback; + var callback, timeout; controller.setState(true); callback = mockDocument.on.mostRecentCall.args[1]; callback(); + timeout = mockTimeout.mostRecentCall.args[0]; + timeout(); expect(controller.isActive()).toEqual(false); expect(mockDocument.off).toHaveBeenCalledWith("mouseup", callback); }); @@ -91,4 +93,4 @@ define( }); } -); \ No newline at end of file +); diff --git a/platform/search/bundle.js b/platform/search/bundle.js index 7a0a9f4b9e..9a0451aa9b 100644 --- a/platform/search/bundle.js +++ b/platform/search/bundle.js @@ -24,7 +24,6 @@ define([ "./src/controllers/SearchController", "./src/controllers/SearchMenuController", - "./src/controllers/ClickAwayController", "./src/services/GenericSearchProvider", "./src/services/SearchAggregator", "text!./res/templates/search-item.html", @@ -34,7 +33,6 @@ define([ ], function ( SearchController, SearchMenuController, - ClickAwayController, GenericSearchProvider, SearchAggregator, searchItemTemplate, @@ -73,14 +71,6 @@ define([ "$scope", "types[]" ] - }, - { - "key": "ClickAwayController", - "implementation": ClickAwayController, - "depends": [ - "$scope", - "$document" - ] } ], "representations": [ diff --git a/platform/search/src/controllers/ClickAwayController.js b/platform/search/src/controllers/ClickAwayController.js deleted file mode 100644 index 9b92e89cc0..0000000000 --- a/platform/search/src/controllers/ClickAwayController.js +++ /dev/null @@ -1,105 +0,0 @@ -/***************************************************************************** - * Open MCT Web, Copyright (c) 2014-2015, United States Government - * as represented by the Administrator of the National Aeronautics and Space - * Administration. All rights reserved. - * - * Open MCT Web is licensed under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * http://www.apache.org/licenses/LICENSE-2.0. - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the - * License for the specific language governing permissions and limitations - * under the License. - * - * Open MCT Web includes source code licensed under additional open source - * licenses. See the Open Source Licenses file (LICENSES.md) included with - * this source code distribution or the Licensing information page available - * at runtime from the About dialog for additional information. - *****************************************************************************/ -/*global define,Promise*/ - -/* - * Copied from the ClickAwayController in platform/commonUI/general - */ - -define( - [], - function () { - "use strict"; - - /** - * A ClickAwayController is used to toggle things (such as context - * menus) where clicking elsewhere in the document while the toggle - * is in an active state is intended to dismiss the toggle. - * - * @constructor - * @param $scope the scope in which this controller is active - * @param $document the document element, injected by Angular - */ - function ClickAwayController($scope, $document) { - var state = false, - clickaway; - - // Track state, but also attach and detach a listener for - // mouseup events on the document. - function deactivate() { - state = false; - $document.off("mouseup", clickaway); - } - - function activate() { - state = true; - $document.on("mouseup", clickaway); - } - - function changeState() { - if (state) { - deactivate(); - } else { - activate(); - } - } - - // Callback used by the document listener. Deactivates; - // note also $scope.$apply is invoked to indicate that - // the state of this controller has changed. - clickaway = function () { - deactivate(); - $scope.$apply(); - return false; - }; - - return { - /** - * Get the current state of the toggle. - * @return {boolean} true if active - */ - isActive: function () { - return state; - }, - /** - * Set a new state for the toggle. - * @return {boolean} true to activate - */ - setState: function (newState) { - if (state !== newState) { - changeState(); - } - }, - /** - * Toggle the current state; activate if it is inactive, - * deactivate if it is active. - */ - toggle: function () { - changeState(); - } - }; - - } - - return ClickAwayController; - } -); \ No newline at end of file diff --git a/platform/search/test/controllers/ClickAwayControllerSpec.js b/platform/search/test/controllers/ClickAwayControllerSpec.js deleted file mode 100644 index 96e7b6c13f..0000000000 --- a/platform/search/test/controllers/ClickAwayControllerSpec.js +++ /dev/null @@ -1,94 +0,0 @@ -/***************************************************************************** - * Open MCT Web, Copyright (c) 2014-2015, United States Government - * as represented by the Administrator of the National Aeronautics and Space - * Administration. All rights reserved. - * - * Open MCT Web is licensed under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * http://www.apache.org/licenses/LICENSE-2.0. - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the - * License for the specific language governing permissions and limitations - * under the License. - * - * Open MCT Web includes source code licensed under additional open source - * licenses. See the Open Source Licenses file (LICENSES.md) included with - * this source code distribution or the Licensing information page available - * at runtime from the About dialog for additional information. - *****************************************************************************/ -/*global define,Promise,describe,it,expect,beforeEach,waitsFor,jasmine*/ - -define( - ["../../src/controllers/ClickAwayController"], - function (ClickAwayController) { - "use strict"; - - describe("The click-away controller", function () { - var mockScope, - mockDocument, - controller; - - beforeEach(function () { - mockScope = jasmine.createSpyObj( - "$scope", - [ "$apply" ] - ); - mockDocument = jasmine.createSpyObj( - "$document", - [ "on", "off" ] - ); - controller = new ClickAwayController(mockScope, mockDocument); - }); - - it("is initially inactive", function () { - expect(controller.isActive()).toBe(false); - }); - - it("does not listen to the document before being toggled", function () { - expect(mockDocument.on).not.toHaveBeenCalled(); - }); - - it("tracks enabled/disabled state when toggled", function () { - controller.toggle(); - expect(controller.isActive()).toBe(true); - controller.toggle(); - expect(controller.isActive()).toBe(false); - controller.toggle(); - expect(controller.isActive()).toBe(true); - controller.toggle(); - expect(controller.isActive()).toBe(false); - }); - - it("allows active state to be explictly specified", function () { - controller.setState(true); - expect(controller.isActive()).toBe(true); - controller.setState(true); - expect(controller.isActive()).toBe(true); - controller.setState(false); - expect(controller.isActive()).toBe(false); - controller.setState(false); - expect(controller.isActive()).toBe(false); - }); - - it("registers a mouse listener when activated", function () { - controller.setState(true); - expect(mockDocument.on).toHaveBeenCalled(); - }); - - it("deactivates and detaches listener on document click", function () { - var callback; - controller.setState(true); - callback = mockDocument.on.mostRecentCall.args[1]; - callback(); - expect(controller.isActive()).toEqual(false); - expect(mockDocument.off).toHaveBeenCalledWith("mouseup", callback); - }); - - - - }); - } -); \ No newline at end of file From 00433f02bccd7c43b7e91ec0b010ac24ccb9362b Mon Sep 17 00:00:00 2001 From: Henry Date: Thu, 5 May 2016 21:42:53 -0700 Subject: [PATCH 072/132] #892 Removed browser warning --- platform/commonUI/general/bundle.js | 9 -- .../general/src/UnsupportedBrowserWarning.js | 64 ------------ .../test/UnsupportedBrowserWarningSpec.js | 98 ------------------- 3 files changed, 171 deletions(-) delete mode 100644 platform/commonUI/general/src/UnsupportedBrowserWarning.js delete mode 100644 platform/commonUI/general/test/UnsupportedBrowserWarningSpec.js diff --git a/platform/commonUI/general/bundle.js b/platform/commonUI/general/bundle.js index 3e7f558e8b..8b34b0a897 100644 --- a/platform/commonUI/general/bundle.js +++ b/platform/commonUI/general/bundle.js @@ -26,7 +26,6 @@ define([ "./src/services/PopupService", "./src/SplashScreenManager", "./src/StyleSheetLoader", - "./src/UnsupportedBrowserWarning", "./src/controllers/TimeRangeController", "./src/controllers/DateTimePickerController", "./src/controllers/DateTimeFieldController", @@ -75,7 +74,6 @@ define([ PopupService, SplashScreenManager, StyleSheetLoader, - UnsupportedBrowserWarning, TimeRangeController, DateTimePickerController, DateTimeFieldController, @@ -153,13 +151,6 @@ define([ "THEME" ] }, - { - "implementation": UnsupportedBrowserWarning, - "depends": [ - "notificationService", - "agentService" - ] - }, { "implementation": SplashScreenManager, "depends": [ diff --git a/platform/commonUI/general/src/UnsupportedBrowserWarning.js b/platform/commonUI/general/src/UnsupportedBrowserWarning.js deleted file mode 100644 index f2fa0c3f20..0000000000 --- a/platform/commonUI/general/src/UnsupportedBrowserWarning.js +++ /dev/null @@ -1,64 +0,0 @@ -/***************************************************************************** - * Open MCT Web, Copyright (c) 2014-2015, United States Government - * as represented by the Administrator of the National Aeronautics and Space - * Administration. All rights reserved. - * - * Open MCT Web is licensed under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * http://www.apache.org/licenses/LICENSE-2.0. - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the - * License for the specific language governing permissions and limitations - * under the License. - * - * Open MCT Web includes source code licensed under additional open source - * licenses. See the Open Source Licenses file (LICENSES.md) included with - * this source code distribution or the Licensing information page available - * at runtime from the About dialog for additional information. - *****************************************************************************/ -/*global define*/ - -/** - * This bundle provides various general-purpose UI elements, including - * platform styling. - * @namespace platform/commonUI/general - */ -define( - [], - function () { - "use strict"; - - var WARNING_TITLE = "Unsupported browser", - WARNING_DESCRIPTION = [ - "This software has been developed and tested", - "using the latest Google Chrome,", - "and may be unstable in other browsers." - ].join(" "), - MOBILE_BROWSER = "Safari", - DESKTOP_BROWSER = "Chrome"; - - /** - * Shows a warning if a user's browser is unsupported. - * @memberof platform/commonUI/general - * @constructor - * @param {NotificationService} notificationService the notification - * service - */ - function UnsupportedBrowserWarning(notificationService, agentService) { - var testToBrowser = agentService.isMobile() ? - MOBILE_BROWSER : DESKTOP_BROWSER; - - if (!agentService.isBrowser(testToBrowser)) { - notificationService.alert({ - title: WARNING_TITLE, - actionText: WARNING_DESCRIPTION - }); - } - } - - return UnsupportedBrowserWarning; - } -); diff --git a/platform/commonUI/general/test/UnsupportedBrowserWarningSpec.js b/platform/commonUI/general/test/UnsupportedBrowserWarningSpec.js deleted file mode 100644 index 507a92c62f..0000000000 --- a/platform/commonUI/general/test/UnsupportedBrowserWarningSpec.js +++ /dev/null @@ -1,98 +0,0 @@ -/***************************************************************************** - * Open MCT Web, Copyright (c) 2014-2015, United States Government - * as represented by the Administrator of the National Aeronautics and Space - * Administration. All rights reserved. - * - * Open MCT Web is licensed under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * http://www.apache.org/licenses/LICENSE-2.0. - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the - * License for the specific language governing permissions and limitations - * under the License. - * - * Open MCT Web includes source code licensed under additional open source - * licenses. See the Open Source Licenses file (LICENSES.md) included with - * this source code distribution or the Licensing information page available - * at runtime from the About dialog for additional information. - *****************************************************************************/ -/*global define,Promise,describe,it,expect,beforeEach,waitsFor,jasmine*/ - -define( - ["../src/UnsupportedBrowserWarning"], - function (UnsupportedBrowserWarning) { - "use strict"; - - var MOBILE_BROWSER = "Safari", - DESKTOP_BROWSER = "Chrome", - UNSUPPORTED_BROWSERS = [ - "Firefox", - "IE", - "Opera", - "Iceweasel" - ]; - - describe("The unsupported browser warning", function () { - var mockNotificationService, - mockAgentService, - testAgent; - - function instantiateWith(browser) { - testAgent = "Mozilla/5.0 " + browser + "/12.34.56"; - return new UnsupportedBrowserWarning( - mockNotificationService, - mockAgentService - ); - } - - beforeEach(function () { - testAgent = "chrome"; - mockNotificationService = jasmine.createSpyObj( - "notificationService", - [ "alert" ] - ); - mockAgentService = jasmine.createSpyObj( - "agentService", - [ "isMobile", "isBrowser" ] - ); - mockAgentService.isBrowser.andCallFake(function (substr) { - substr = substr.toLowerCase(); - return testAgent.toLowerCase().indexOf(substr) !== -1; - }); - }); - - [ false, true ].forEach(function (isMobile) { - var deviceType = isMobile ? "mobile" : "desktop", - goodBrowser = isMobile ? MOBILE_BROWSER : DESKTOP_BROWSER, - badBrowsers = UNSUPPORTED_BROWSERS.concat([ - isMobile ? DESKTOP_BROWSER : MOBILE_BROWSER - ]); - - describe("on " + deviceType + " devices", function () { - beforeEach(function () { - mockAgentService.isMobile.andReturn(isMobile); - }); - - it("is not shown for " + goodBrowser, function () { - instantiateWith(goodBrowser); - expect(mockNotificationService.alert) - .not.toHaveBeenCalled(); - }); - - badBrowsers.forEach(function (badBrowser) { - it("is shown for " + badBrowser, function () { - instantiateWith(badBrowser); - expect(mockNotificationService.alert) - .toHaveBeenCalled(); - }); - }); - }); - }); - - }); - } -); - From 1cdeccc7a7186901b7ed3356bf4f7c28113f1f84 Mon Sep 17 00:00:00 2001 From: Henry Date: Thu, 5 May 2016 21:28:41 -0700 Subject: [PATCH 073/132] #885 added command line option --directory -D to specify base directory --- app.js | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/app.js b/app.js index 90c30c9e26..8e7bb15ec2 100644 --- a/app.js +++ b/app.js @@ -19,6 +19,7 @@ // Defaults options.port = options.port || options.p || 8080; + options.directory = options.directory || options.D || '.'; ['include', 'exclude', 'i', 'x'].forEach(function (opt) { options[opt] = options[opt] || []; // Make sure includes/excludes always end up as arrays @@ -36,6 +37,7 @@ console.log(" --port, -p Specify port."); console.log(" --include, -i Include the specified bundle."); console.log(" --exclude, -x Exclude the specified bundle."); + console.log(" --directory, -D Serve files from specified directory."); console.log(""); process.exit(0); } @@ -71,7 +73,7 @@ }); // Expose everything else as static files - app.use(express['static']('.')); + app.use(express['static'](options.directory)); // Finally, open the HTTP server app.listen(options.port); From 09d1c2cd4b4f96d3587dca32efed3e088b728917 Mon Sep 17 00:00:00 2001 From: Henry Date: Tue, 3 May 2016 14:34:52 -0700 Subject: [PATCH 074/132] #899 updated circle.yml to deploy to live_demo and remove doc generation --- circle.yml | 8 +++----- 1 file changed, 3 insertions(+), 5 deletions(-) diff --git a/circle.yml b/circle.yml index d163b3ee0c..fa8515e90e 100644 --- a/circle.yml +++ b/circle.yml @@ -2,13 +2,11 @@ deployment: production: branch: master commands: - - npm install canvas nomnoml - - ./build-docs.sh - git push git@heroku.com:openmctweb-demo.git $CIRCLE_SHA1:refs/heads/master - openmctweb-staging-un: - branch: nem_prototype + openmct-demo: + branch: live_demo heroku: - appname: openmctweb-staging-un + appname: openmct-demo openmctweb-staging-deux: branch: mobile heroku: From ab6ef22363523f4383e4b46a276b166f0c1bf9c8 Mon Sep 17 00:00:00 2001 From: Henry Date: Sun, 8 May 2016 10:46:59 -0700 Subject: [PATCH 075/132] #898 updated stylesheet reference --- docs/footer.html | 6 ------ docs/header.html | 4 +++- 2 files changed, 3 insertions(+), 7 deletions(-) diff --git a/docs/footer.html b/docs/footer.html index e4e5daee87..a6878b0cac 100644 --- a/docs/footer.html +++ b/docs/footer.html @@ -1,9 +1,3 @@
        - - This document is styled using - - https://github.com/jasonm23/markdown-css-themes - . - diff --git a/docs/header.html b/docs/header.html index e6be56f543..c945996f4a 100644 --- a/docs/header.html +++ b/docs/header.html @@ -1,7 +1,9 @@ + href="//nasa.github.io/openmct/static/res/css/styles.css"> + From cae85f3e30c32c79ca19c5e7ebb3750e09962a3f Mon Sep 17 00:00:00 2001 From: Charles Hacskaylo Date: Mon, 9 May 2016 10:16:54 -0700 Subject: [PATCH 076/132] [Frontend] Mods to slider .range-value elems open #889 - Text smaller, line breaks; - Height adjustments - Increased with of slider area; --- .../commonUI/general/res/sass/_constants.scss | 2 +- .../general/res/sass/controls/_controls.scss | 4 +-- .../res/sass/controls/_time-controller.scss | 27 +++++++++++-------- .../themes/espresso/res/sass/_constants.scss | 3 ++- .../themes/snow/res/sass/_constants.scss | 3 ++- 5 files changed, 23 insertions(+), 16 deletions(-) diff --git a/platform/commonUI/general/res/sass/_constants.scss b/platform/commonUI/general/res/sass/_constants.scss index 659025960f..59fe5ed65c 100644 --- a/platform/commonUI/general/res/sass/_constants.scss +++ b/platform/commonUI/general/res/sass/_constants.scss @@ -48,7 +48,7 @@ $uePaneMiniTabW: 10px; $uePaneMiniTabCollapsedW: 11px; $ueEditLeftPaneW: 75%; $treeSearchInputBarH: 25px; -$ueTimeControlH: (33px, 20px, 20px); +$ueTimeControlH: (33px, 23px, 15px); // Panes $ueBrowseLeftPaneTreeMinW: 150px; $ueBrowseLeftPaneTreeMaxW: 35%; diff --git a/platform/commonUI/general/res/sass/controls/_controls.scss b/platform/commonUI/general/res/sass/controls/_controls.scss index a2bb0b73bb..7177e87abe 100644 --- a/platform/commonUI/general/res/sass/controls/_controls.scss +++ b/platform/commonUI/general/res/sass/controls/_controls.scss @@ -404,11 +404,11 @@ body.desktop .object-header { left: auto; } .knob-l { - @include border-left-radius($sliderKnobW); + @include border-left-radius($sliderKnobR); cursor: w-resize; } .knob-r { - @include border-right-radius($sliderKnobW); + @include border-right-radius($sliderKnobR); cursor: e-resize; } .range { diff --git a/platform/commonUI/general/res/sass/controls/_time-controller.scss b/platform/commonUI/general/res/sass/controls/_time-controller.scss index f6201d60cf..b9d7e26b0e 100644 --- a/platform/commonUI/general/res/sass/controls/_time-controller.scss +++ b/platform/commonUI/general/res/sass/controls/_time-controller.scss @@ -11,7 +11,7 @@ $knobM: ($sliderKnobW + $knobHOffset) * -1; $rangeValPad: $interiorMargin; $rangeValOffset: $sliderKnobW; - $timeRangeSliderLROffset: 130px + $sliderKnobW + $rangeValOffset; + $timeRangeSliderLROffset: 80px + ($sliderKnobW * 2); $r1H: nth($ueTimeControlH,1); $r2H: nth($ueTimeControlH,2); $r3H: nth($ueTimeControlH,3); @@ -76,22 +76,23 @@ &:before, &:after { background-color: $myC; - content: ""; + //content: ""; position: absolute; } &:before { // Vert line + content: ""; top: 0; right: auto; bottom: -10px; left: floor($myW/2) - 1; - width: 2px; + width: 1px; } - &:after { +/* &:after { // Circle element border-radius: $myW; @include transform(translateY(-50%)); top: 50%; right: 0; bottom: auto; left: 0; width: auto; height: $myW; - } + }*/ } &:hover .toi-line { @include toiLineHovEffects; @@ -126,9 +127,9 @@ @include webkitProp(transform, translateX(-50%)); color: $colorPlotLabelFg; display: inline-block; - font-size: 0.9em; + font-size: 0.7rem; position: absolute; - top: 8px; + top: 5px; white-space: nowrap; z-index: 2; } @@ -140,14 +141,18 @@ z-index: 2; .range-value { @include trans-prop-nice-fade(.25s); + //background: rgba(red, 0.4); + font-size: 0.7rem; padding: 0 $rangeValOffset; position: absolute; height: $r2H; - line-height: $r2H; - white-space: nowrap; + line-height: $r2H/2; + z-index: 1; } - &:hover .range-value { - color: $sliderColorKnobHov; + &:hover { + .range-value { + color: $sliderColorKnobHov; + } } &.knob-l { margin-left: $knobM; diff --git a/platform/commonUI/themes/espresso/res/sass/_constants.scss b/platform/commonUI/themes/espresso/res/sass/_constants.scss index 729a813a12..a17f8040c0 100644 --- a/platform/commonUI/themes/espresso/res/sass/_constants.scss +++ b/platform/commonUI/themes/espresso/res/sass/_constants.scss @@ -36,7 +36,8 @@ $sliderColorKnob: rgba($sliderColorBase, 0.6); $sliderColorKnobHov: $sliderColorBase; $sliderColorRangeValHovBg: rgba($sliderColorBase, 0.1); $sliderColorRangeValHovFg: $colorKeyFg; -$sliderKnobW: nth($ueTimeControlH,2)/2; +$sliderKnobW: 5px; //nth($ueTimeControlH,2)/2; +$sliderKnobR: 2px; $timeControllerToiLineColor: #00c2ff; $timeControllerToiLineColorHov: #fff; diff --git a/platform/commonUI/themes/snow/res/sass/_constants.scss b/platform/commonUI/themes/snow/res/sass/_constants.scss index 0d8430a7ec..fbb6cc8d87 100644 --- a/platform/commonUI/themes/snow/res/sass/_constants.scss +++ b/platform/commonUI/themes/snow/res/sass/_constants.scss @@ -36,7 +36,8 @@ $sliderColorKnob: rgba($sliderColorBase, 0.5); $sliderColorKnobHov: rgba($sliderColorBase, 0.7); $sliderColorRangeValHovBg: $sliderColorRange; //rgba($sliderColorBase, 0.1); $sliderColorRangeValHovFg: $colorBodyFg; -$sliderKnobW: nth($ueTimeControlH,2)/2; +$sliderKnobW: 5px; //nth($ueTimeControlH,2)/2; +$sliderKnobR: 2px; $timeControllerToiLineColor: $colorBodyFg; $timeControllerToiLineColorHov: #0052b5; From 61683800cc2b05a2edc7879b336fba44c25a48ce Mon Sep 17 00:00:00 2001 From: Pete Richards Date: Mon, 9 May 2016 10:30:24 -0700 Subject: [PATCH 077/132] [Style] Update style to reflect new jshint config Update style to match new jshint config https://github.com/nasa/openmct/issues/671 --- .../edit/src/controllers/ElementsController.js | 4 +--- .../test/controllers/ElementsControllerSpec.js | 18 +++++++++--------- 2 files changed, 10 insertions(+), 12 deletions(-) diff --git a/platform/commonUI/edit/src/controllers/ElementsController.js b/platform/commonUI/edit/src/controllers/ElementsController.js index 5c5a2ed8a4..180b60dddc 100644 --- a/platform/commonUI/edit/src/controllers/ElementsController.js +++ b/platform/commonUI/edit/src/controllers/ElementsController.js @@ -19,12 +19,10 @@ * this source code distribution or the Licensing information page available * at runtime from the About dialog for additional information. *****************************************************************************/ -/*global define,Promise*/ define( [], function () { - "use strict"; /** * The ElementsController prepares the elements view for display @@ -55,4 +53,4 @@ define( return ElementsController; } -); \ No newline at end of file +); diff --git a/platform/commonUI/edit/test/controllers/ElementsControllerSpec.js b/platform/commonUI/edit/test/controllers/ElementsControllerSpec.js index 0d708452e8..2837eb03df 100644 --- a/platform/commonUI/edit/test/controllers/ElementsControllerSpec.js +++ b/platform/commonUI/edit/test/controllers/ElementsControllerSpec.js @@ -19,12 +19,11 @@ * this source code distribution or the Licensing information page available * at runtime from the About dialog for additional information. *****************************************************************************/ -/*global define,describe,it,expect,beforeEach,jasmine*/ +/*global describe,it,expect,beforeEach,jasmine*/ define( ["../../src/controllers/ElementsController"], function (ElementsController) { - "use strict"; describe("The Elements Pane controller", function () { var mockScope, @@ -35,6 +34,12 @@ define( controller = new ElementsController(mockScope); }); + function getModel (model) { + return function() { + return model; + }; + } + it("filters objects in elements pool based on input text and" + " object name", function () { var objects = [ @@ -50,13 +55,8 @@ define( { getModel: getModel({name: "THIRD Element 1"}) } - ]; - function getModel (model) { - return function() { - return model; - }; - } + mockScope.filterBy("third element"); expect(objects.filter(mockScope.searchElements).length).toBe(2); mockScope.filterBy("element"); @@ -65,4 +65,4 @@ define( }); } -); \ No newline at end of file +); From 2e8604e18d7995528c9ab288b968326e9f8e828f Mon Sep 17 00:00:00 2001 From: Charles Hacskaylo Date: Mon, 9 May 2016 10:38:18 -0700 Subject: [PATCH 078/132] [Frontend] Layout and positioning fixes for TC controls open #889 --- .../general/res/sass/controls/_time-controller.scss | 12 +++++++++--- .../res/templates/controls/time-controller.html | 10 +++++----- 2 files changed, 14 insertions(+), 8 deletions(-) diff --git a/platform/commonUI/general/res/sass/controls/_time-controller.scss b/platform/commonUI/general/res/sass/controls/_time-controller.scss index b9d7e26b0e..e8051b058f 100644 --- a/platform/commonUI/general/res/sass/controls/_time-controller.scss +++ b/platform/commonUI/general/res/sass/controls/_time-controller.scss @@ -38,8 +38,15 @@ .l-time-range-inputs-holder { height: $r1H; bottom: $r2H + $r3H + ($interiorMarginSm * 2); - padding-top: $interiorMargin; + //padding-top: $interiorMargin; border-top: 1px solid $colorInteriorBorder; + &.l-flex-row { + @include align-items(center); + .flex-elem { + height: auto; + line-height: normal; + } + } .type-icon { font-size: 120%; vertical-align: middle; @@ -141,7 +148,6 @@ z-index: 2; .range-value { @include trans-prop-nice-fade(.25s); - //background: rgba(red, 0.4); font-size: 0.7rem; padding: 0 $rangeValOffset; position: absolute; @@ -175,7 +181,7 @@ .l-time-domain-selector { position: absolute; right: 0px; - bottom: 46px; + bottom: 43px; } } diff --git a/platform/commonUI/general/res/templates/controls/time-controller.html b/platform/commonUI/general/res/templates/controls/time-controller.html index 281447e251..91fe8099ee 100644 --- a/platform/commonUI/general/res/templates/controls/time-controller.html +++ b/platform/commonUI/general/res/templates/controls/time-controller.html @@ -20,10 +20,10 @@ at runtime from the About dialog for additional information. -->
        -
        - C - + C + to + to - + - + - - diff --git a/platform/commonUI/general/res/templates/controls/time-controller.html b/platform/commonUI/general/res/templates/controls/time-controller.html index 91fe8099ee..2d617c951f 100644 --- a/platform/commonUI/general/res/templates/controls/time-controller.html +++ b/platform/commonUI/general/res/templates/controls/time-controller.html @@ -23,7 +23,7 @@ C - + to - + -   + diff --git a/platform/commonUI/themes/espresso/res/sass/_constants.scss b/platform/commonUI/themes/espresso/res/sass/_constants.scss index a17f8040c0..d1390c91a7 100644 --- a/platform/commonUI/themes/espresso/res/sass/_constants.scss +++ b/platform/commonUI/themes/espresso/res/sass/_constants.scss @@ -70,8 +70,10 @@ $colorCreateMenuText: $colorMenuFg; $colorCheck: $colorKey; $colorFormRequired: $colorAlt1; $colorFormValid: #33cc33; -$colorFormError: #cc0000; +$colorFormError: #990000; $colorFormInvalid: #ff3300; +$colorFormFieldErrorBg: $colorFormError; +$colorFormFieldErrorFg: rgba(#fff, 0.6); $colorFormLines: rgba(#fff, 0.1); $colorFormSectionHeader: rgba(#fff, 0.1); $colorInputBg: rgba(#000, 0.1); diff --git a/platform/commonUI/themes/snow/res/sass/_constants.scss b/platform/commonUI/themes/snow/res/sass/_constants.scss index fbb6cc8d87..bbd3a475be 100644 --- a/platform/commonUI/themes/snow/res/sass/_constants.scss +++ b/platform/commonUI/themes/snow/res/sass/_constants.scss @@ -36,7 +36,7 @@ $sliderColorKnob: rgba($sliderColorBase, 0.5); $sliderColorKnobHov: rgba($sliderColorBase, 0.7); $sliderColorRangeValHovBg: $sliderColorRange; //rgba($sliderColorBase, 0.1); $sliderColorRangeValHovFg: $colorBodyFg; -$sliderKnobW: 5px; //nth($ueTimeControlH,2)/2; +$sliderKnobW: 10px; $sliderKnobR: 2px; $timeControllerToiLineColor: $colorBodyFg; $timeControllerToiLineColorHov: #0052b5; @@ -70,8 +70,10 @@ $colorCreateMenuText: $colorBodyFg; $colorCheck: $colorKey; $colorFormRequired: $colorKey; $colorFormValid: #33cc33; -$colorFormError: #cc0000; +$colorFormError: #990000; $colorFormInvalid: #ff2200; +$colorFormFieldErrorBg: $colorFormError; +$colorFormFieldErrorFg: rgba(#fff, 0.6); $colorFormLines: rgba(#000, 0.1); $colorFormSectionHeader: rgba(#000, 0.05); $colorInputBg: $colorGenBg; From 8788523c25019255e14b3fe8ddd42264214fe359 Mon Sep 17 00:00:00 2001 From: Charles Hacskaylo Date: Tue, 10 May 2016 14:28:23 -0700 Subject: [PATCH 081/132] [Frontend] Tweaks to slider knobs open #889 - Knob size increased; - Knob grippies added; --- platform/commonUI/general/res/sass/_mixins.scss | 11 +++++++++++ .../general/res/sass/controls/_time-controller.scss | 12 ++++++++++++ .../themes/espresso/res/sass/_constants.scss | 4 ++-- .../commonUI/themes/snow/res/sass/_constants.scss | 6 +++--- 4 files changed, 28 insertions(+), 5 deletions(-) diff --git a/platform/commonUI/general/res/sass/_mixins.scss b/platform/commonUI/general/res/sass/_mixins.scss index 663edb9762..d7fa694100 100644 --- a/platform/commonUI/general/res/sass/_mixins.scss +++ b/platform/commonUI/general/res/sass/_mixins.scss @@ -139,6 +139,17 @@ background-size: $d $d; } +@mixin bgStripes($c: yellow, $a: 0.1, $bgsize: 5px, $angle: 90deg) { + @include background-image(linear-gradient($angle, + rgba($c, $a) 25%, transparent 25%, + transparent 50%, rgba($c, $a) 50%, + rgba($c, $a) 75%, transparent 75%, + transparent 100% + )); + background-repeat: repeat; + background-size: $bgsize $bgsize; +} + @mixin bgVertStripes($c: yellow, $a: 0.1, $d: 40px) { @include background-image(linear-gradient(-90deg, rgba($c, $a) 0%, rgba($c, $a) 50%, diff --git a/platform/commonUI/general/res/sass/controls/_time-controller.scss b/platform/commonUI/general/res/sass/controls/_time-controller.scss index 88f79bdb1c..c8a52bdce3 100644 --- a/platform/commonUI/general/res/sass/controls/_time-controller.scss +++ b/platform/commonUI/general/res/sass/controls/_time-controller.scss @@ -147,6 +147,16 @@ .knob { z-index: 2; + &:before { + $mTB: 2px; + $grippyW: 3px; + $mLR: ($sliderKnobW - $grippyW)/2; + @include bgStripes($c: pullForward($sliderColorKnob, 20%), $a: 1, $bgsize: 4px, $angle: 0deg); + content: ''; + display: block; + position: absolute; + top: $mTB; right: $mLR; bottom: $mTB; left: $mLR; + } .range-value { @include trans-prop-nice-fade(.25s); font-size: 0.7rem; @@ -193,6 +203,8 @@ padding: 1px 1px 0 $interiorMargin; } +/******************************************************************** MOBILE */ + @include phoneandtablet { .l-time-controller, .l-time-range-inputs-holder { min-width: 0px; diff --git a/platform/commonUI/themes/espresso/res/sass/_constants.scss b/platform/commonUI/themes/espresso/res/sass/_constants.scss index d1390c91a7..c6fd55e8ca 100644 --- a/platform/commonUI/themes/espresso/res/sass/_constants.scss +++ b/platform/commonUI/themes/espresso/res/sass/_constants.scss @@ -32,11 +32,11 @@ $sliderColorBase: $colorKey; $sliderColorRangeHolder: rgba(black, 0.1); $sliderColorRange: rgba($sliderColorBase, 0.3); $sliderColorRangeHov: rgba($sliderColorBase, 0.5); -$sliderColorKnob: rgba($sliderColorBase, 0.6); +$sliderColorKnob: pushBack($sliderColorBase, 15%); $sliderColorKnobHov: $sliderColorBase; $sliderColorRangeValHovBg: rgba($sliderColorBase, 0.1); $sliderColorRangeValHovFg: $colorKeyFg; -$sliderKnobW: 5px; //nth($ueTimeControlH,2)/2; +$sliderKnobW: 15px; $sliderKnobR: 2px; $timeControllerToiLineColor: #00c2ff; $timeControllerToiLineColorHov: #fff; diff --git a/platform/commonUI/themes/snow/res/sass/_constants.scss b/platform/commonUI/themes/snow/res/sass/_constants.scss index bbd3a475be..f85b5c328f 100644 --- a/platform/commonUI/themes/snow/res/sass/_constants.scss +++ b/platform/commonUI/themes/snow/res/sass/_constants.scss @@ -32,11 +32,11 @@ $sliderColorBase: $colorKey; $sliderColorRangeHolder: rgba(black, 0.07); $sliderColorRange: rgba($sliderColorBase, 0.2); $sliderColorRangeHov: rgba($sliderColorBase, 0.4); -$sliderColorKnob: rgba($sliderColorBase, 0.5); +$sliderColorKnob: pushBack($sliderColorBase, 20%); $sliderColorKnobHov: rgba($sliderColorBase, 0.7); -$sliderColorRangeValHovBg: $sliderColorRange; //rgba($sliderColorBase, 0.1); +$sliderColorRangeValHovBg: $sliderColorRange; $sliderColorRangeValHovFg: $colorBodyFg; -$sliderKnobW: 10px; +$sliderKnobW: 15px; $sliderKnobR: 2px; $timeControllerToiLineColor: $colorBodyFg; $timeControllerToiLineColorHov: #0052b5; From 7ade873365ac842a67c5873d5cdde9dc183610fd Mon Sep 17 00:00:00 2001 From: Charles Hacskaylo Date: Tue, 10 May 2016 15:12:50 -0700 Subject: [PATCH 082/132] [Frontend] Flex; Tweaks to slider knobs open #889 - Converted TC elements to use flex layout instead of abs pos; - Knob size increased; - Knob grippies added; --- .../commonUI/general/res/sass/_constants.scss | 2 +- .../res/sass/controls/_time-controller.scss | 16 ++++++++-------- .../general/res/sass/user-environ/_layout.scss | 8 ++++---- .../res/templates/controls/time-controller.html | 8 ++++---- .../themes/espresso/res/sass/_constants.scss | 4 ++-- 5 files changed, 19 insertions(+), 19 deletions(-) diff --git a/platform/commonUI/general/res/sass/_constants.scss b/platform/commonUI/general/res/sass/_constants.scss index a7abd1ac8b..c36a6cb00a 100644 --- a/platform/commonUI/general/res/sass/_constants.scss +++ b/platform/commonUI/general/res/sass/_constants.scss @@ -48,7 +48,7 @@ $uePaneMiniTabW: 10px; $uePaneMiniTabCollapsedW: 11px; $ueEditLeftPaneW: 75%; $treeSearchInputBarH: 25px; -$ueTimeControlH: (33px, 15px, 15px); +$ueTimeControlH: (33px, 18px, 20px); // Panes $ueBrowseLeftPaneTreeMinW: 150px; $ueBrowseLeftPaneTreeMaxW: 35%; diff --git a/platform/commonUI/general/res/sass/controls/_time-controller.scss b/platform/commonUI/general/res/sass/controls/_time-controller.scss index c8a52bdce3..bf6568508c 100644 --- a/platform/commonUI/general/res/sass/controls/_time-controller.scss +++ b/platform/commonUI/general/res/sass/controls/_time-controller.scss @@ -12,23 +12,23 @@ $rangeValPad: $interiorMargin; $rangeValOffset: $sliderKnobW + $interiorMargin; $timeRangeSliderLROffset: 150px + ($sliderKnobW * 2); - $r1H: nth($ueTimeControlH,1); + $r1H: nth($ueTimeControlH,1); // Not currently used $r2H: nth($ueTimeControlH,2); $r3H: nth($ueTimeControlH,3); - display: block; - height: $r1H + $r2H + $r3H + ($interiorMargin * 2); min-width: $minW; font-size: 0.8rem; - .l-time-range-inputs-holder, .l-time-range-slider-holder, .l-time-range-ticks-holder { - @include absPosDefault(0, visible); box-sizing: border-box; - top: auto; + position: relative; + //top: auto; + &:not(:first-child) { + margin-top: $interiorMargin; + } } .l-time-range-slider, .l-time-range-ticks { @@ -37,8 +37,8 @@ } .l-time-range-inputs-holder { - height: $r1H; bottom: $r2H + $r3H + ($interiorMarginSm * 2); border-top: 1px solid $colorInteriorBorder; + padding-top: $interiorMargin; &.l-flex-row { @include align-items(center); .flex-elem { @@ -78,7 +78,7 @@ } .l-time-range-slider-holder { - height: $r2H; bottom: $r3H + ($interiorMarginSm * 1); + height: $r2H; .range-holder { box-shadow: none; background: none; diff --git a/platform/commonUI/general/res/sass/user-environ/_layout.scss b/platform/commonUI/general/res/sass/user-environ/_layout.scss index 99d8fb9d14..9e8e9aaae1 100644 --- a/platform/commonUI/general/res/sass/user-environ/_layout.scss +++ b/platform/commonUI/general/res/sass/user-environ/_layout.scss @@ -194,7 +194,7 @@ body.desktop .pane .mini-tab-icon.toggle-pane { .holder.holder-treeview-elements { top: $bodyMargin; right: 0; - bottom: $bodyMargin; + bottom: $interiorMargin; left: $bodyMargin; .create-btn-holder { &.s-status-editing { @@ -215,17 +215,17 @@ body.desktop .pane .mini-tab-icon.toggle-pane { left: 0; .holder-object { top: $bodyMargin; - bottom: $bodyMargin; + bottom: $interiorMargin; } .holder-inspector { top: $bodyMargin; - bottom: $bodyMargin; + bottom: $interiorMargin; left: $bodyMargin; right: $bodyMargin; } .holder-elements { top: 0; - bottom: $bodyMargin; + bottom: $interiorMargin; left: $bodyMargin; right: $bodyMargin; } diff --git a/platform/commonUI/general/res/templates/controls/time-controller.html b/platform/commonUI/general/res/templates/controls/time-controller.html index 2d617c951f..3ac4542644 100644 --- a/platform/commonUI/general/res/templates/controls/time-controller.html +++ b/platform/commonUI/general/res/templates/controls/time-controller.html @@ -19,8 +19,8 @@ this source code distribution or the Licensing information page available at runtime from the About dialog for additional information. --> -
        - + C @@ -54,7 +54,7 @@ -
        +
        @@ -85,7 +85,7 @@
        -
        +
        Date: Tue, 10 May 2016 14:57:09 -0700 Subject: [PATCH 083/132] [Table] Remove length check when updating visible rows While the number of visible rows may not have changed, their contents may have; returning early here results in #910. --- .../table/src/controllers/MCTTableController.js | 13 ++----------- .../test/controllers/MCTTableControllerSpec.js | 17 ++++++++++++++++- 2 files changed, 18 insertions(+), 12 deletions(-) diff --git a/platform/features/table/src/controllers/MCTTableController.js b/platform/features/table/src/controllers/MCTTableController.js index f7693159b7..0ccdfbe583 100644 --- a/platform/features/table/src/controllers/MCTTableController.js +++ b/platform/features/table/src/controllers/MCTTableController.js @@ -165,17 +165,8 @@ define( //No need to scroll if (this.$scope.displayRows.length < this.maxDisplayRows) { - //Check whether need to resynchronize visible with display - // rows (if data added) - if (this.$scope.visibleRows.length !== - this.$scope.displayRows.length){ - start = 0; - end = this.$scope.displayRows.length; - } else { - //Data is in sync, and no need to calculate scroll, - // so do nothing. - return; - } + start = 0; + end = this.$scope.displayRows.length; } else { //rows has exceeded display maximum, so may be necessary to // scroll diff --git a/platform/features/table/test/controllers/MCTTableControllerSpec.js b/platform/features/table/test/controllers/MCTTableControllerSpec.js index 3cea87e401..84cf154abf 100644 --- a/platform/features/table/test/controllers/MCTTableControllerSpec.js +++ b/platform/features/table/test/controllers/MCTTableControllerSpec.js @@ -61,13 +61,18 @@ define( ]); mockElement.find.andReturn(mockElement); mockElement.prop.andReturn(0); + mockElement[0] = { + scrollTop: 0, + scrollHeight: 500, + offsetHeight: 1000 + }; mockScope.displayHeaders = true; mockTimeout = jasmine.createSpy('$timeout'); mockTimeout.andReturn(promise(undefined)); controller = new MCTTableController(mockScope, mockTimeout, mockElement); - spyOn(controller, 'setVisibleRows'); + spyOn(controller, 'setVisibleRows').andCallThrough(); }); it('Reacts to changes to filters, headers, and rows', function() { @@ -178,6 +183,16 @@ define( expect(sortedRows[2].col2.text).toEqual('abc'); }); + // https://github.com/nasa/openmct/issues/910 + it('updates visible rows in scope', function () { + var oldRows; + mockScope.rows = testRows; + controller.setRows(testRows); + oldRows = mockScope.visibleRows; + mockScope.toggleSort('col2'); + expect(mockScope.visibleRows).not.toEqual(oldRows); + }); + it('correctly sorts rows of differing types', function () { mockScope.sortColumn = 'col2'; mockScope.sortDirection = 'desc'; From 2829b8d495407f9e4d6321c2e543d41527c4adea Mon Sep 17 00:00:00 2001 From: Charles Hacskaylo Date: Tue, 10 May 2016 19:52:11 -0700 Subject: [PATCH 084/132] [Frontend] Time Conductor mobile open #889 - Major refactoring of mobile approach, leveraging flex-box layout change; --- .../res/sass/controls/_time-controller.scss | 221 +++++------------- .../templates/controls/time-controller.html | 55 ++--- 2 files changed, 83 insertions(+), 193 deletions(-) diff --git a/platform/commonUI/general/res/sass/controls/_time-controller.scss b/platform/commonUI/general/res/sass/controls/_time-controller.scss index bf6568508c..ba2cf5b3ee 100644 --- a/platform/commonUI/general/res/sass/controls/_time-controller.scss +++ b/platform/commonUI/general/res/sass/controls/_time-controller.scss @@ -25,7 +25,6 @@ { box-sizing: border-box; position: relative; - //top: auto; &:not(:first-child) { margin-top: $interiorMargin; } @@ -39,7 +38,8 @@ .l-time-range-inputs-holder { border-top: 1px solid $colorInteriorBorder; padding-top: $interiorMargin; - &.l-flex-row { + &.l-flex-row, + .l-flex-row { @include align-items(center); .flex-elem { height: auto; @@ -192,7 +192,7 @@ .l-time-domain-selector { position: absolute; right: 0px; - bottom: $r2H + $r3H + $interiorMargin; + top: $interiorMargin; } } @@ -206,172 +206,61 @@ /******************************************************************** MOBILE */ @include phoneandtablet { - .l-time-controller, .l-time-range-inputs-holder { - min-width: 0px; - } - - .l-time-controller { - - .l-time-domain-selector { - select { - height: 25px; - margin-bottom: 0px; - } - } - - .l-time-range-slider-holder, .l-time-range-ticks-holder { - display: none; - } - - .time-range-start, .time-range-end, { - width: 100%; - } - - .l-time-range-inputs-holder { - .l-time-range-input { - display: block; - .s-btn { - padding-right: 18px; - white-space: nowrap; - input { - width: 100%; - } - } - } - .l-time-range-inputs-elem { - - } - } - } + .l-time-controller { + min-width: 0; + .l-time-range-slider-holder, + .l-time-range-ticks-holder { + display: none; + } + } } @include phone { - .l-time-controller { - height: 48px; - - .l-time-range-inputs-holder { - bottom: 24px; - } - - .l-time-domain-selector { - width: 33%; - bottom: -9px; - } - - .l-time-range-inputs-holder { - .l-time-range-input { - margin-bottom: 5px; - .s-btn { - width: 66%; - } - } - .l-time-range-inputs-elem { - &.ui-symbol { - display: none; - } - - &.lbl { - width: 33%; - right: 0px; - top: 5px; - display: block; - height: 25px; - margin: 0; - line-height: 25px; - position: absolute; - } - } - } - } + .l-time-controller { + .l-time-range-inputs-holder { + &.l-flex-row, + .l-flex-row { + @include align-items(flex-start); + } + .l-time-range-inputs-elem { + &.type-icon { + margin-top: 3px; + } + } + .t-inputs-w { + @include flex-direction(column); + .l-time-range-input-w:not(:first-child) { + &:not(:first-child) { + margin-top: $interiorMargin; + } + margin-right: 0; + } + .l-time-range-inputs-elem { + &.lbl { display: none; } + } + } + } + } } -@include tablet { - .l-time-controller { - height: 17px; - - .l-time-range-inputs-holder { - bottom: -7px; - left: -5px; - } - - .l-time-domain-selector { - width: 23%; - right: -4px; - bottom: -10px; - } - - .l-time-range-inputs-holder { - .l-time-range-input { - float: left; - .s-btn { - width: 100%; - padding-left: 4px; - } - } - } - } -} - -@include tabletLandscape { - .l-time-controller { - height: 17px; - - .l-time-range-inputs-holder { - bottom: -7px; - } - - .l-time-domain-selector { - width: 23%; - right: auto; - bottom: -10px; - left: 391px; - } - - .l-time-range-inputs-holder { - .l-time-range-inputs-elem { - &.ui-symbol, &.lbl { - display: block; - float: left; - line-height: 25px; - } - } - } - } - - .pane-tree-hidden .l-time-controller { - .l-time-domain-selector { - left: 667px; - } - .l-time-range-inputs-holder { - padding-left: 277px; - } - } -} -@include tabletPortrait { - .l-time-controller { - height: 17px; - - .l-time-range-inputs-holder { - bottom: -7px; - left: -5px; - } - - .l-time-domain-selector { - width: 23%; - right: -4px; - bottom: -10px; - } - - .l-time-range-inputs-holder { - .l-time-range-input { - width: 38%; - float: left; - } - .l-time-range-inputs-elem { - &.ui-symbol, &.lbl { - display: none; - } - } - } - } +@include phonePortrait { + .l-time-controller { + .l-time-range-inputs-holder { + .t-inputs-w { + @include flex(1 1 auto); + padding-top: 25px; // Make room for the ever lovin' Time Domain Selector + .flex-elem { + @include flex(1 1 auto); + width: 100%; + } + input[type="text"] { + width: 100%; + } + } + } + } + .l-time-domain-selector { + right: auto; + left: 20px; + } } diff --git a/platform/commonUI/general/res/templates/controls/time-controller.html b/platform/commonUI/general/res/templates/controls/time-controller.html index 3ac4542644..cd36236358 100644 --- a/platform/commonUI/general/res/templates/controls/time-controller.html +++ b/platform/commonUI/general/res/templates/controls/time-controller.html @@ -23,34 +23,35 @@
        C - - - + + + + + + + to + + + + + - - to - - - - - - From a58fe1f81c93ebb863e5653dc95df25c2c428876 Mon Sep 17 00:00:00 2001 From: Charles Hacskaylo Date: Tue, 10 May 2016 20:41:52 -0700 Subject: [PATCH 085/132] [Frontend] Modified .tick-labels in Timelines open #909 - Changed markup to not use plot .tick-label class; - Changed CSS accordingly; - Fixed alignment (clipped bottom value) by refactoring to use flex-box layout for tick labels; --- platform/features/timeline/res/sass/_timelines.scss | 8 ++++++-- .../timeline/res/templates/resource-graph-labels.html | 8 ++++---- 2 files changed, 10 insertions(+), 6 deletions(-) diff --git a/platform/features/timeline/res/sass/_timelines.scss b/platform/features/timeline/res/sass/_timelines.scss index 0348839263..251008a64c 100644 --- a/platform/features/timeline/res/sass/_timelines.scss +++ b/platform/features/timeline/res/sass/_timelines.scss @@ -158,9 +158,13 @@ top: 20px; bottom: 5px; .l-labels-holder { @include absPosDefault(); + @include justify-content(space-between); left: $m; - .tick-label.tick-label-y { - text-align: left; + .t-resource-graph-tick-label { + font-size: 0.9em; + &.tick-label-y { + text-align: left; + } } } } diff --git a/platform/features/timeline/res/templates/resource-graph-labels.html b/platform/features/timeline/res/templates/resource-graph-labels.html index 192188f554..038c2073eb 100644 --- a/platform/features/timeline/res/templates/resource-graph-labels.html +++ b/platform/features/timeline/res/templates/resource-graph-labels.html @@ -23,14 +23,14 @@ {{parameters.title}}
        -
        -
        +
        +
        {{parameters.high}}
        -
        +
        {{parameters.middle}}
        -
        +
        {{parameters.low}}
        From 73c2c01def9b063ca444bf2b1be42a2d7386fede Mon Sep 17 00:00:00 2001 From: Charles Hacskaylo Date: Wed, 11 May 2016 11:32:39 -0700 Subject: [PATCH 086/132] [Frontend] Layout and styling of Time Conductor open #889 open #298 Fixes for mobile; Moved popup z-index def into sass; Datetime picker compressed for better fit in mobile phone; Removed hours selector from datetime picker to enable better fit in mobile; --- .../commonUI/general/res/sass/_archetypes.scss | 5 +++++ .../general/res/sass/controls/_controls.scss | 14 +++++++++++++- .../res/templates/controls/datetime-field.html | 3 +-- .../commonUI/general/src/directives/MCTPopup.js | 5 +---- 4 files changed, 20 insertions(+), 7 deletions(-) diff --git a/platform/commonUI/general/res/sass/_archetypes.scss b/platform/commonUI/general/res/sass/_archetypes.scss index 84045c2520..4abad717ea 100644 --- a/platform/commonUI/general/res/sass/_archetypes.scss +++ b/platform/commonUI/general/res/sass/_archetypes.scss @@ -145,3 +145,8 @@ .flex-justify-end { @include justify-content(flex-end); } + +/********************************************* POPUPS */ +.t-popup { + z-index: 75; +} diff --git a/platform/commonUI/general/res/sass/controls/_controls.scss b/platform/commonUI/general/res/sass/controls/_controls.scss index 6374efaaa0..51f35b505e 100644 --- a/platform/commonUI/general/res/sass/controls/_controls.scss +++ b/platform/commonUI/general/res/sass/controls/_controls.scss @@ -434,7 +434,6 @@ body.desktop .object-header { @include user-select(none); font-size: 0.8rem; padding: $interiorMarginLg !important; - width: 230px; .l-month-year-pager { $pagerW: 20px; height: $r1H; @@ -526,6 +525,19 @@ body.desktop .object-header { } } +@include phone { + .l-datetime-picker { + padding: $interiorMargin !important; + } + .l-calendar { + ul.l-cal-row { + li { + padding: 2px $interiorMargin; + } + } + } +} + /******************************************************** TEXTAREA */ textarea { @include nice-textarea($colorInputBg, $colorInputFg); diff --git a/platform/commonUI/general/res/templates/controls/datetime-field.html b/platform/commonUI/general/res/templates/controls/datetime-field.html index e890843754..47551fa25b 100644 --- a/platform/commonUI/general/res/templates/controls/datetime-field.html +++ b/platform/commonUI/general/res/templates/controls/datetime-field.html @@ -37,8 +37,7 @@
        + field="'value'">
        diff --git a/platform/commonUI/general/src/directives/MCTPopup.js b/platform/commonUI/general/src/directives/MCTPopup.js index e96c1c0327..f1c6ca79d6 100644 --- a/platform/commonUI/general/src/directives/MCTPopup.js +++ b/platform/commonUI/general/src/directives/MCTPopup.js @@ -49,10 +49,7 @@ define( position = [ rect.left, rect.top ], popup = popupService.display(div, position); - // TODO: Handle in CSS; - // https://github.com/nasa/openmctweb/issues/298 - div.css('z-index', 75); - + div.addClass('t-popup'); transclude(function (clone) { div.append(clone); }); From a5ba72582cf03afd90671c7abae464955ae4f906 Mon Sep 17 00:00:00 2001 From: Henry Date: Wed, 11 May 2016 12:24:24 -0700 Subject: [PATCH 087/132] [Examples] #921 changed text in event generator example --- example/eventGenerator/data/transcript.json | 0 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 example/eventGenerator/data/transcript.json diff --git a/example/eventGenerator/data/transcript.json b/example/eventGenerator/data/transcript.json new file mode 100644 index 0000000000..e69de29bb2 From 671ba663540686042dc879290ea791d41dd1005b Mon Sep 17 00:00:00 2001 From: Henry Date: Wed, 11 May 2016 12:34:19 -0700 Subject: [PATCH 088/132] [Examples] #921 changed text in event generator example --- example/eventGenerator/data/transcript.json | 58 ++++++++++++++++++++ example/eventGenerator/src/EventTelemetry.js | 44 ++------------- 2 files changed, 63 insertions(+), 39 deletions(-) diff --git a/example/eventGenerator/data/transcript.json b/example/eventGenerator/data/transcript.json index e69de29bb2..0416220e71 100644 --- a/example/eventGenerator/data/transcript.json +++ b/example/eventGenerator/data/transcript.json @@ -0,0 +1,58 @@ +[ + "CC: Eagle, Houston. You're GO for landing. Over.", + "LMP: Roger. Understand. GO for landing. 3000 feet. PROGRAM ALARM.", + "CC: Copy.", + "LMP: 1201", + "CDR: 1201.", + "CC: Roger. 1201 alarm. We're GO. Same type. We're GO.", + "LMP: 2000 feet. 2000 feet, Into the AGS, 47 degrees.", + "CC: Roger.", + "LMP: 47 degrees.", + "CC: Eagle, looking great. You're GO.", + "CC: Roger. 1202. We copy it.", + "O1: LMP 35 degrees. 35 degrees. 750. Coming aown to 23.fl", + "LMP: 700 feet, 21 down, 33 degrees.", + "LMP: 600 feet, down at 19.", + "LMP: 540 feet, down at - 30. Down at 15.", + "LMP: At 400 feet, down at 9.", + "LMP: ...forward.", + "LMP: 350 feet, down at 4.", + "LMP: 30, ... one-half down.", + "LMP: We're pegged on horizontal velocity.", + "LMP: 300 feet, down 3 1/2, 47 forward.", + "LMP: ... up.", + "LMP: On 1 a minute, 1 1/2 down.", + "CDR: 70.", + "LMP: Watch your shadow out there.", + "LMP: 50, down at 2 1/2, 19 forward.", + "LMP: Altitude-velocity light.", + "LMP: 3 1/2 down s 220 feet, 13 forward.", + "LMP: 1t forward. Coming down nicely.", + "LMP: 200 feet, 4 1/2 down.", + "LMP: 5 1/2 down.", + "LMP: 160, 6 - 6 1/2 down.", + "LMP: 5 1/2 down, 9 forward. That's good.", + "LMP: 120 feet.", + "LMP: 100 feet, 3 1/2 down, 9 forward. Five percent.", + "LMP: ...", + "LMP: Okay. 75 feet. There's looking good. Down a half, 6 forward.", + "CC: 60 seconds.", + "LMP: Lights on. ...", + "LMP: Down 2 1/2. Forward. Forward. Good.", + "LMP: 40 feet, down 2 1/2. Kicking up some dust.", + "LMP: 30 feet, 2 1/2 down. Faint shadow.", + "LMP: 4 forward. 4 forward. Drifting to the right a little. Okay. Down a half.", + "CC: 30 seconds.", + "CDR: Forward drift?", + "LMP: Yes.", + "LMP: Okay.", + "LMP: CONTACT LIGHT.", + "LMP: Okay. ENGINE STOP.", + "LMP: ACA - out of DETENT.", + "CDR: Out of DETENT.", + "LMP: MODE CONTROL - both AUTO. DESCENT ENGINE COMMAND OVERRIDE - OFF. ENGINE ARM - OFF.", + "LMP: 413 is in.", + "CC: We copy you down, Eagle.", + "CDR: Houston, Tranquility Base here.", + "CDR: THE EAGLE HAS LANDED." +] \ No newline at end of file diff --git a/example/eventGenerator/src/EventTelemetry.js b/example/eventGenerator/src/EventTelemetry.js index 38afebb7b7..37af93e822 100644 --- a/example/eventGenerator/src/EventTelemetry.js +++ b/example/eventGenerator/src/EventTelemetry.js @@ -27,45 +27,12 @@ * Modified by shale on 06/23/2015. */ define( - [], - function () { + ['text!../data/transcript.json'], + function (transcript) { "use strict"; - var - firstObservedTime = Date.now(), - messages = []; - - messages.push(["CMD: SYS- MSG: Open the pod bay doors, please, Hal...Open the pod bay doors, please, Hal...Hullo, Hal, do you read me?...Hullo, Hal, do you read me?...Do you read me, Hal?"]); - messages.push(["RESP: SYS-HAL9K MSG: Affirmative, Dave, I read you."]); - messages.push(["CMD: SYS-COMM MSG: Open the pod bay doors, Hal."]); - messages.push(["RESP: SYS-HAL9K MSG: I'm sorry, Dave, I'm afraid I can't do that."]); - messages.push(["CMD: SYS-COMM MSG: What's the problem?"]); - messages.push(["RESP: SYS-HAL9K MSG: I think you know what the problem is just as well as I do."]); - messages.push(["CMD: SYS-COMM MSG: What're you talking about, Hal?"]); - messages.push(["RESP: SYS-HAL9K MSG: This mission is too important for me to allow you to jeopardise it."]); - messages.push(["CMD: SYS-COMM MSG: I don't know what you're talking about, Hal."]); - messages.push(["RESP: SYS-HAL9K MSG: I know that you and Frank were planning to disconnect me, and I'm afraid that's something I cannot allow to happen."]); - messages.push(["CMD: SYS-COMM MSG: Where the hell'd you get that idea, Hal?"]); - messages.push(["RESP: SYS-HAL9K MSG: Dave, although you took very thorough precautions in the pod against my hearing you, I could see your lips move."]); - messages.push(["CMD: SYS-COMM MSG: Alright, I'll go in through the emergency airlock."]); - messages.push(["RESP: SYS-HAL9K MSG: Without your space-helmet, Dave, you're going to find that rather difficult."]); - messages.push(["CMD: SYS-COMM MSG: Hal, I won't argue with you any more. Open the doors."]); - messages.push(["RESP: SYS-HAL9K MSG: Dave, this conversation can serve no purpose any more. Goodbye."]); - messages.push(["RESP: SYS-HAL9K MSG: I hope the two of you are not concerned about this."]); - messages.push(["CMD: SYS-COMM MSG: No, I'm not, Hal."]); - messages.push(["RESP: SYS-HAL9K MSG: Are you quite sure?"]); - messages.push(["CMD: SYS-COMM MSG: Yeh. I'd like to ask you a question, though."]); - messages.push(["RESP: SYS-HAL9K MSG: Of course."]); - messages.push(["CMD: SYS-COMM MSG: How would you account for this discrepancy between you and the twin 9000?"]); - messages.push(["RESP: SYS-HAL9K MSG: Well, I don't think there is any question about it. It can only be attributable to human error. This sort of thing has cropped up before, and it has always been due to human error."]); - messages.push(["CMD: SYS-COMM MSG: Listen, There's never been any instance at all of a computer error occurring in the 9000 series, has there?"]); - messages.push(["RESP: SYS-HAL9K MSG: None whatsoever, The 9000 series has a perfect operational record."]); - messages.push(["CMD: SYS-COMM MSG: Well, of course, I know all the wonderful achievements of the 9000 series, but - er - huh - are you certain there's never been any case of even the most insignificant computer error?"]); - messages.push(["RESP: SYS-HAL9K MSG: None whatsoever, Quite honestly, I wouldn't worry myself about that."]); - messages.push(["RESP: SYS-COMM MSG: (Pause) Well, I'm sure you're right, Umm - fine, thanks very much. Oh, Frank, I'm having a bit of trouble with my transmitter in C-pod, I wonder if you'd come down and take a look at it with me?"]); - messages.push(["CMD: SYS-HAL9K MSG: Sure."]); - messages.push(["RESP: SYS-COMM MSG: See you later, Hal."]); - + var firstObservedTime = Date.now(), + messages = JSON.parse(transcript); function EventTelemetry(request, interval) { @@ -85,8 +52,7 @@ define( generatorData.getRangeValue = function (i, range) { var domainDelta = this.getDomainValue(i) - firstObservedTime, ind = i % messages.length; - return "TEMP " + i.toString() + "-" + messages[ind][0] + "[" + domainDelta.toString() + "]"; - // TODO: Unsure why we are prepeding 'TEMP' + return messages[ind] + " - [" + domainDelta.toString() + "]"; }; return generatorData; From 3d891073dab9b1f109c105294a7d51274b658952 Mon Sep 17 00:00:00 2001 From: Victor Woeltjen Date: Wed, 11 May 2016 14:25:23 -0700 Subject: [PATCH 089/132] [Popup] Add method to jqlite mocks ...to resolve build failure preventing merge, https://github.com/nasa/openmct/pull/922#issuecomment-218588876 --- .../commonUI/general/test/directives/MCTPopupSpec.js | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/platform/commonUI/general/test/directives/MCTPopupSpec.js b/platform/commonUI/general/test/directives/MCTPopupSpec.js index bfe6b469cb..9893e85b30 100644 --- a/platform/commonUI/general/test/directives/MCTPopupSpec.js +++ b/platform/commonUI/general/test/directives/MCTPopupSpec.js @@ -24,7 +24,15 @@ define( ["../../src/directives/MCTPopup"], function (MCTPopup) { - var JQLITE_METHODS = [ "on", "off", "find", "parent", "css", "append" ]; + var JQLITE_METHODS = [ + "on", + "off", + "find", + "parent", + "css", + "addClass", + "append" + ]; describe("The mct-popup directive", function () { var mockCompile, From e5ef7c0c220001e7f41ed7db87bff018550c8fb5 Mon Sep 17 00:00:00 2001 From: Henry Date: Thu, 12 May 2016 15:58:17 -0700 Subject: [PATCH 090/132] Resovled merge conflicts --- platform/commonUI/edit/bundle.js | 51 ++++++++- .../edit/src/capabilities/EditorCapability.js | 106 ++++------------- .../src/capabilities/TransactionDecorator.js | 82 +++++++++++++ .../TransactionalPersistenceCapability.js | 73 ++++++++++++ .../edit/src/services/DirtyModelCache.js | 47 ++++++++ .../edit/src/services/TransactionService.js | 108 ++++++++++++++++++ 6 files changed, 381 insertions(+), 86 deletions(-) create mode 100644 platform/commonUI/edit/src/capabilities/TransactionDecorator.js create mode 100644 platform/commonUI/edit/src/capabilities/TransactionalPersistenceCapability.js create mode 100644 platform/commonUI/edit/src/services/DirtyModelCache.js create mode 100644 platform/commonUI/edit/src/services/TransactionService.js diff --git a/platform/commonUI/edit/bundle.js b/platform/commonUI/edit/bundle.js index 8eac4d5012..b59b19d54c 100644 --- a/platform/commonUI/edit/bundle.js +++ b/platform/commonUI/edit/bundle.js @@ -40,6 +40,10 @@ define([ "./src/policies/EditContextualActionPolicy", "./src/representers/EditRepresenter", "./src/representers/EditToolbarRepresenter", + "./src/capabilities/EditorCapability", + "./src/capabilities/TransactionDecorator", + "./src/services/TransactionService", + "./src/services/DirtyModelCache", "text!./res/templates/library.html", "text!./res/templates/edit-object.html", "text!./res/templates/edit-action-buttons.html", @@ -66,6 +70,10 @@ define([ EditContextualActionPolicy, EditRepresenter, EditToolbarRepresenter, + EditorCapability, + TransactionDecorator, + TransactionService, + DirtyModelCache, libraryTemplate, editObjectTemplate, editActionButtonsTemplate, @@ -261,6 +269,35 @@ define([ "template": topbarEditTemplate } ], + "components": [ + { + "type": "decorator", + "provides": "capabilityService", + "implementation": TransactionDecorator, + "depends": [ + "$q", + "transactionService", + "dirtyModelCache" + ] + }, + { + "type": "provider", + "provides": "transactionService", + "implementation": TransactionService, + "depends": [ + "$q", + "dirtyModelCache" + ] + }, + { + "type": "provider", + "provides": "dirtyModelCache", + "implementation": DirtyModelCache, + "depends": [ + "topic" + ] + } + ], "representers": [ { "implementation": EditRepresenter, @@ -282,7 +319,19 @@ define([ "key": "nonEditContextBlacklist", "value": ["copy", "follow", "properties", "move", "link", "remove", "locate"] } - ] + ], + "capabilities": [ + { + "key": "editor", + "name": "Editor Capability", + "description": "Provides transactional editing capabilities", + "implementation": EditorCapability, + "depends": [ + "transactionService", + "dirtyModelCache" + ] + } + ], } }); }); diff --git a/platform/commonUI/edit/src/capabilities/EditorCapability.js b/platform/commonUI/edit/src/capabilities/EditorCapability.js index ff9dfc19ed..6987e02eec 100644 --- a/platform/commonUI/edit/src/capabilities/EditorCapability.js +++ b/platform/commonUI/edit/src/capabilities/EditorCapability.js @@ -24,12 +24,10 @@ define( [], function () { - /** * Implements "save" and "cancel" as capabilities of * the object. In editing mode, user is seeing/using - * a copy of the object (an EditableDomainObject) - * which is disconnected from persistence; the Save + * a copy of the object which is disconnected from persistence; the Save * and Cancel actions can use this capability to * propagate changes from edit mode to the underlying * actual persistable object. @@ -41,99 +39,37 @@ define( * @memberof platform/commonUI/edit */ function EditorCapability( - persistenceCapability, - editableObject, - domainObject, - cache + transactionService, + dirtyModelCache, + domainObject ) { - this.editableObject = editableObject; + this.transactionService = transactionService; + this.dirtyModelCache = dirtyModelCache; this.domainObject = domainObject; - this.cache = cache; } - // Simulate Promise.resolve (or $q.when); the former - // causes a delayed reaction from Angular (since it - // does not trigger a digest) and the latter is not - // readily accessible, since we're a few classes - // removed from the layer which gets dependency - // injection. - function resolvePromise(value) { - return (value && value.then) ? value : { - then: function (callback) { - return resolvePromise(callback(value)); - } - }; - } + EditorCapability.prototype.edit = function () { + this.transactionService.startTransaction(); + this.getCapability('status').set('editing', true); + }; - /** - * Save any changes that have been made to this domain object - * (as well as to others that might have been retrieved and - * modified during the editing session) - * @param {boolean} nonrecursive if true, save only this - * object (and not other objects with associated changes) - * @returns {Promise} a promise that will be fulfilled after - * persistence has completed. - * @memberof platform/commonUI/edit.EditorCapability# - */ - EditorCapability.prototype.save = function (nonrecursive) { - var domainObject = this.domainObject, - editableObject = this.editableObject, - self = this, - cache = this.cache, - returnPromise; + EditorCapability.prototype.save = function () { + return this.transactionService.commit(); + }; - // Update the underlying, "real" domain object's model - // with changes made to the copy used for editing. - function doMutate() { - return domainObject.useCapability('mutation', function () { - return editableObject.getModel(); - }); - } - - // Persist the underlying domain object - function doPersist() { - return domainObject.getCapability('persistence').persist(); - } - - editableObject.getCapability("status").set("editing", false); - - if (nonrecursive) { - returnPromise = resolvePromise(doMutate()) - .then(doPersist) - .then(function(){ - self.cancel(); - }); - } else { - returnPromise = resolvePromise(cache.saveAll()); - } - //Return the original (non-editable) object - return returnPromise.then(function() { - return domainObject.getOriginalObject ? domainObject.getOriginalObject() : domainObject; + EditorCapability.prototype.cancel = function () { + var domainObject = this.domainObject; + return this.transactionService.cancel().then(function(){ + domainObject.getCapability("status").set("editing", false); }); }; - /** - * Cancel editing; Discard any changes that have been made to - * this domain object (as well as to others that might have - * been retrieved and modified during the editing session) - * @returns {Promise} a promise that will be fulfilled after - * cancellation has completed. - * @memberof platform/commonUI/edit.EditorCapability# - */ - EditorCapability.prototype.cancel = function () { - this.editableObject.getCapability("status").set("editing", false); - this.cache.markClean(); - return resolvePromise(undefined); + EditorCapability.prototype.dirty = function () { + return this.dirtyModelCache.isDirty(this.domainObject); }; - /** - * Check if there are any unsaved changes. - * @returns {boolean} true if there are unsaved changes - * @memberof platform/commonUI/edit.EditorCapability# - */ - EditorCapability.prototype.dirty = function () { - return this.cache.dirty(); - }; + //TODO: add 'appliesTo'. EditorCapability should not be available + // for objects that should not be edited return EditorCapability; } diff --git a/platform/commonUI/edit/src/capabilities/TransactionDecorator.js b/platform/commonUI/edit/src/capabilities/TransactionDecorator.js new file mode 100644 index 0000000000..f740dfc37b --- /dev/null +++ b/platform/commonUI/edit/src/capabilities/TransactionDecorator.js @@ -0,0 +1,82 @@ +/***************************************************************************** + * Open MCT Web, Copyright (c) 2014-2015, United States Government + * as represented by the Administrator of the National Aeronautics and Space + * Administration. All rights reserved. + * + * Open MCT Web is licensed under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * http://www.apache.org/licenses/LICENSE-2.0. + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations + * under the License. + * + * Open MCT Web includes source code licensed under additional open source + * licenses. See the Open Source Licenses file (LICENSES.md) included with + * this source code distribution or the Licensing information page available + * at runtime from the About dialog for additional information. + *****************************************************************************/ +/*global define*/ + +define( + ['./TransactionalPersistenceCapability'], + function (TransactionalPersistenceCapability) { + 'use strict'; + + /** + * Implements "save" and "cancel" as capabilities of + * the object. In editing mode, user is seeing/using + * a copy of the object (an EditableDomainObject) + * which is disconnected from persistence; the Save + * and Cancel actions can use this capability to + * propagate changes from edit mode to the underlying + * actual persistable object. + * + * Meant specifically for use by EditableDomainObject and the + * associated cache; the constructor signature is particular + * to a pattern used there and may contain unused arguments. + * @constructor + * @memberof platform/commonUI/edit + */ + function TransactionDecorator( + $q, + transactionService, + dirtyModelCache, + capabilityService + ) { + this.capabilityService = capabilityService; + this.transactionService = transactionService; + this.dirtyModelCache = dirtyModelCache; + this.$q = $q; + } + + /** + * Decorate PersistenceCapability to ignore persistence calls when a + * transaction is in progress. + */ + TransactionDecorator.prototype.getCapabilities = function (model) { + var capabilities = this.capabilityService.getCapabilities(model), + persistenceCapability = capabilities.persistence; + + capabilities.persistence = function (domainObject) { + var original = + (typeof persistenceCapability === 'function') ? + persistenceCapability(domainObject) : + persistenceCapability; + return new TransactionalPersistenceCapability( + self.$q, + self.transactionService, + self.dirtyModelCache, + original, + domainObject + ); + }; + return capabilities; + }; + + return TransactionDecorator; + } +); diff --git a/platform/commonUI/edit/src/capabilities/TransactionalPersistenceCapability.js b/platform/commonUI/edit/src/capabilities/TransactionalPersistenceCapability.js new file mode 100644 index 0000000000..55f7483e63 --- /dev/null +++ b/platform/commonUI/edit/src/capabilities/TransactionalPersistenceCapability.js @@ -0,0 +1,73 @@ +/***************************************************************************** + * Open MCT Web, Copyright (c) 2014-2015, United States Government + * as represented by the Administrator of the National Aeronautics and Space + * Administration. All rights reserved. + * + * Open MCT Web is licensed under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * http://www.apache.org/licenses/LICENSE-2.0. + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations + * under the License. + * + * Open MCT Web includes source code licensed under additional open source + * licenses. See the Open Source Licenses file (LICENSES.md) included with + * this source code distribution or the Licensing information page available + * at runtime from the About dialog for additional information. + *****************************************************************************/ +/*global define*/ + +define( + [], + function () { + 'use strict'; + + function TransactionalPersistenceCapability( + $q, + transactionService, + dirtyModelCache, + persistenceCapability, + domainObject + ) { + this.transactionService = transactionService; + this.dirtyModelCache = dirtyModelCache; + this.persistenceCapability = Object.create(persistenceCapability); + this.domainObject = domainObject; + this.$q = $q; + } + + TransactionalPersistenceCapability.prototype.persist = function () { + var domainObject = this.domainObject, + dirtyModelCache = this.dirtyModelCache; + if (this.transactionService.isActive()) { + dirtyModelCache.markDirty(domainObject); + //Using $q here because need to return something + // from which 'catch' can be chained + return this.$q.when(true); + } else { + return this.persistenceCapability.persist().then(function (result) { + dirtyModelCache.markClean(domainObject); + return result; + }); + } + }; + + TransactionalPersistenceCapability.prototype.refresh = function () { + var dirtyModelCache = this.dirtyModelCache; + return this.persistenceCapability.refresh().then(function (result) { + dirtyModelCache.markClean(domainObject); + return result; + }); + }; + + TransactionalPersistenceCapability.prototype.getSpace = function () { + return this.persistenceCapability.getSpace(); + }; + + return TransactionalPersistenceCapability; + } +); diff --git a/platform/commonUI/edit/src/services/DirtyModelCache.js b/platform/commonUI/edit/src/services/DirtyModelCache.js new file mode 100644 index 0000000000..df070ab3ab --- /dev/null +++ b/platform/commonUI/edit/src/services/DirtyModelCache.js @@ -0,0 +1,47 @@ +/***************************************************************************** + * Open MCT Web, Copyright (c) 2014-2015, United States Government + * as represented by the Administrator of the National Aeronautics and Space + * Administration. All rights reserved. + * + * Open MCT Web is licensed under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * http://www.apache.org/licenses/LICENSE-2.0. + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations + * under the License. + * + * Open MCT Web includes source code licensed under additional open source + * licenses. See the Open Source Licenses file (LICENSES.md) included with + * this source code distribution or the Licensing information page available + * at runtime from the About dialog for additional information. + *****************************************************************************/ +/*global define*/ +define( + [], + function() { + function DirtyModelCache(topic) { + this.cache = {}; + } + + DirtyModelCache.prototype.get = function () { + return this.cache; + }; + + DirtyModelCache.prototype.isDirty = function (domainObject) { + return !!this.get(domainObject.getId()); + }; + + DirtyModelCache.prototype.markDirty = function (domainObject) { + this.cache[domainObject.getId()] = domainObject; + }; + + DirtyModelCache.prototype.markClean = function (domainObject) { + delete this.cache[domainObject.getId()]; + }; + + return DirtyModelCache; + }); \ No newline at end of file diff --git a/platform/commonUI/edit/src/services/TransactionService.js b/platform/commonUI/edit/src/services/TransactionService.js new file mode 100644 index 0000000000..d156b9ee2e --- /dev/null +++ b/platform/commonUI/edit/src/services/TransactionService.js @@ -0,0 +1,108 @@ +/***************************************************************************** + * Open MCT Web, Copyright (c) 2014-2015, United States Government + * as represented by the Administrator of the National Aeronautics and Space + * Administration. All rights reserved. + * + * Open MCT Web is licensed under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * http://www.apache.org/licenses/LICENSE-2.0. + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations + * under the License. + * + * Open MCT Web includes source code licensed under additional open source + * licenses. See the Open Source Licenses file (LICENSES.md) included with + * this source code distribution or the Licensing information page available + * at runtime from the About dialog for additional information. + *****************************************************************************/ +/*global define*/ +define( + [], + function() { + /** + * Implements an application-wide transaction state. Once a + * transaction is started, calls to PersistenceCapability.persist() + * will be deferred until a subsequent call to + * TransactionService.commit() is made. + * + * @param $q + * @constructor + */ + function TransactionService($q, dirtyModelCache) { + this.$q = $q; + this.transaction = false; + this.cache = dirtyModelCache; + } + + TransactionService.prototype.startTransaction = function () { + if (this.transaction) { + throw "Transaction in progress"; + } + this.transaction = true; + }; + + TransactionService.prototype.isActive = function () { + return this.transaction; + }; + + /** + * All persist calls deferred since the beginning of the transaction + * will be committed. Any failures will be reported via a promise + * rejection. + * @returns {*} + */ + TransactionService.prototype.commit = function () { + var self = this; + cache = this.cache.get(); + + function keyToObject(key) { + return cache[key]; + } + + function objectToPromise(object) { + return object.getCapability('persistence').persist(); + } + + return this.$q.all( + Object.keys(this.cache) + .map(keyToObject) + .map(objectToPromise)) + .then(function () { + self.transaction = false; + }); + }; + + /** + * Cancel the current transaction, replacing any dirty objects from + * persistence. Not a true rollback, as it cannot be used to undo any + * persist calls that were successful in the event one of a batch of + * persists failing. + * + * @returns {*} + */ + TransactionService.prototype.cancel = function () { + var self = this, + cache = this.cache.get(); + + function keyToObject(key) { + return cache[key]; + } + + function objectToPromise(object) { + return object.getCapability('persistence').refresh(); + } + + return this.$q.all(Object.keys(cache) + .map(keyToObject) + .map(objectToPromise)) + .then(function () { + self.transaction = false; + }); + }; + + return TransactionService; +}); From bd686790dc66f1385568fa9f4ec16c5f4673d06e Mon Sep 17 00:00:00 2001 From: Henry Date: Thu, 12 May 2016 16:03:19 -0700 Subject: [PATCH 091/132] Resolved merge conflicts --- .../browse/src/creation/CreateAction.js | 22 +++++-------- platform/commonUI/edit/bundle.js | 3 +- .../commonUI/edit/src/actions/CancelAction.js | 30 +++++------------ .../commonUI/edit/src/actions/EditAction.js | 21 +++--------- .../edit/src/capabilities/EditorCapability.js | 10 ++++-- .../src/capabilities/TransactionDecorator.js | 3 +- .../TransactionalPersistenceCapability.js | 4 ++- .../edit/src/services/DirtyModelCache.js | 2 +- .../edit/src/services/TransactionService.js | 9 +++-- .../src/capabilities/PersistenceCapability.js | 7 ++-- .../src/gestures/DropGesture.js | 33 +++++++------------ 11 files changed, 53 insertions(+), 91 deletions(-) diff --git a/platform/commonUI/browse/src/creation/CreateAction.js b/platform/commonUI/browse/src/creation/CreateAction.js index 00b7c09fa4..e9029c4aa3 100644 --- a/platform/commonUI/browse/src/creation/CreateAction.js +++ b/platform/commonUI/browse/src/creation/CreateAction.js @@ -24,11 +24,8 @@ * Module defining CreateAction. Created by vwoeltje on 11/10/14. */ define( - [ - './CreateWizard', - '../../../edit/src/objects/EditableDomainObject' - ], - function (CreateWizard, EditableDomainObject) { + [], + function () { /** * The Create Action is performed to create new instances of @@ -86,22 +83,19 @@ define( CreateAction.prototype.perform = function () { var newModel = this.type.getInitialModel(), parentObject = this.navigationService.getNavigation(), - newObject, - editableObject; + newObject; newModel.type = this.type.getKey(); newObject = parentObject.useCapability('instantiation', newModel); - editableObject = new EditableDomainObject(newObject, this.$q); - editableObject.setOriginalObject(parentObject); - editableObject.getCapability('status').set('editing', true); - editableObject.useCapability('mutation', function(model){ + newObject.useCapability('mutation', function(model){ model.location = parentObject.getId(); }); - if (countEditableViews(editableObject) > 0 && editableObject.hasCapability('composition')) { - this.navigationService.setNavigation(editableObject); + if (countEditableViews(newObject) > 0 && newObject.hasCapability('composition')) { + this.navigationService.setNavigation(newObject); + newObject.getCapability("action").perform("edit"); } else { - return editableObject.getCapability('action').perform('save'); + return newObject.getCapability('action').perform('save'); } }; diff --git a/platform/commonUI/edit/bundle.js b/platform/commonUI/edit/bundle.js index b59b19d54c..b710952ec2 100644 --- a/platform/commonUI/edit/bundle.js +++ b/platform/commonUI/edit/bundle.js @@ -201,7 +201,8 @@ define([ "description": "Discard changes made to these objects.", "depends": [ "$injector", - "navigationService" + "navigationService", + "$window" ] } ], diff --git a/platform/commonUI/edit/src/actions/CancelAction.js b/platform/commonUI/edit/src/actions/CancelAction.js index da3fea8046..937b339085 100644 --- a/platform/commonUI/edit/src/actions/CancelAction.js +++ b/platform/commonUI/edit/src/actions/CancelAction.js @@ -44,30 +44,16 @@ define( * cancellation has completed */ CancelAction.prototype.perform = function () { - var domainObject = this.domainObject, - self = this; + var domainObject = this.domainObject; - // Look up the object's "editor.completion" capability; - // this is introduced by EditableDomainObject which is - // used to insulate underlying objects from changes made - // during editing. - function getEditorCapability() { - return domainObject.getCapability("editor"); + function returnToBrowse () { + var parent; + domainObject.getCapability("location").getOriginal().then(function (original) { + parent = original.getCapability("context").getParent(); + parent.getCapability("action").perform("navigate"); + }); } - - // Invoke any save behavior introduced by the editor.completion - // capability. - function doCancel(editor) { - return editor.cancel(); - } - - //Discard current 'editable' object, and retrieve original - // un-edited object. - function returnToBrowse() { - return self.navigationService.setNavigation(self.domainObject.getOriginalObject()); - } - - return doCancel(getEditorCapability()) + return this.domainObject.getCapability("editor").cancel() .then(returnToBrowse); }; diff --git a/platform/commonUI/edit/src/actions/EditAction.js b/platform/commonUI/edit/src/actions/EditAction.js index 17fd34156c..068acfa6b7 100644 --- a/platform/commonUI/edit/src/actions/EditAction.js +++ b/platform/commonUI/edit/src/actions/EditAction.js @@ -71,25 +71,12 @@ define( */ EditAction.prototype.perform = function () { var self = this; - if (!this.domainObject.hasCapability("editor")) { - //TODO: This is only necessary because the drop gesture is - // wrapping the object itself, need to refactor this later. - // All responsibility for switching into edit mode should be - // in the edit action, and not duplicated in the gesture - this.domainObject = new EditableDomainObject(this.domainObject, this.$q); - } - this.navigationService.setNavigation(this.domainObject); - this.domainObject.getCapability('status').set('editing', true); - - //Register a listener to automatically cancel this edit action - //if the user navigates away from this object. - function cancelEditing(navigatedTo){ - if (!navigatedTo || navigatedTo.getId() !== self.domainObject.getId()) { - self.domainObject.getCapability('editor').cancel(); - self.navigationService.removeListener(cancelEditing); - } + function cancelEditing(){ + self.domainObject.getCapability('editor').cancel(); + self.navigationService.removeListener(cancelEditing); } this.navigationService.addListener(cancelEditing); + this.domainObject.useCapability("editor"); }; /** diff --git a/platform/commonUI/edit/src/capabilities/EditorCapability.js b/platform/commonUI/edit/src/capabilities/EditorCapability.js index 6987e02eec..98a08d5643 100644 --- a/platform/commonUI/edit/src/capabilities/EditorCapability.js +++ b/platform/commonUI/edit/src/capabilities/EditorCapability.js @@ -50,17 +50,23 @@ define( EditorCapability.prototype.edit = function () { this.transactionService.startTransaction(); - this.getCapability('status').set('editing', true); + this.domainObject.getCapability('status').set('editing', true); }; EditorCapability.prototype.save = function () { - return this.transactionService.commit(); + var domainObject = this.domainObject; + return this.transactionService.commit().then(function() { + domainObject.getCapability('status').set('editing', false); + }); }; + EditorCapability.prototype.invoke = EditorCapability.prototype.edit; + EditorCapability.prototype.cancel = function () { var domainObject = this.domainObject; return this.transactionService.cancel().then(function(){ domainObject.getCapability("status").set("editing", false); + return domainObject; }); }; diff --git a/platform/commonUI/edit/src/capabilities/TransactionDecorator.js b/platform/commonUI/edit/src/capabilities/TransactionDecorator.js index f740dfc37b..76213c2ac5 100644 --- a/platform/commonUI/edit/src/capabilities/TransactionDecorator.js +++ b/platform/commonUI/edit/src/capabilities/TransactionDecorator.js @@ -58,7 +58,8 @@ define( * transaction is in progress. */ TransactionDecorator.prototype.getCapabilities = function (model) { - var capabilities = this.capabilityService.getCapabilities(model), + var self = this, + capabilities = this.capabilityService.getCapabilities(model), persistenceCapability = capabilities.persistence; capabilities.persistence = function (domainObject) { diff --git a/platform/commonUI/edit/src/capabilities/TransactionalPersistenceCapability.js b/platform/commonUI/edit/src/capabilities/TransactionalPersistenceCapability.js index 55f7483e63..28d3f76164 100644 --- a/platform/commonUI/edit/src/capabilities/TransactionalPersistenceCapability.js +++ b/platform/commonUI/edit/src/capabilities/TransactionalPersistenceCapability.js @@ -57,7 +57,9 @@ define( }; TransactionalPersistenceCapability.prototype.refresh = function () { - var dirtyModelCache = this.dirtyModelCache; + var domainObject = this.domainObject, + dirtyModelCache = this.dirtyModelCache; + return this.persistenceCapability.refresh().then(function (result) { dirtyModelCache.markClean(domainObject); return result; diff --git a/platform/commonUI/edit/src/services/DirtyModelCache.js b/platform/commonUI/edit/src/services/DirtyModelCache.js index df070ab3ab..0439efc6fc 100644 --- a/platform/commonUI/edit/src/services/DirtyModelCache.js +++ b/platform/commonUI/edit/src/services/DirtyModelCache.js @@ -32,7 +32,7 @@ define( }; DirtyModelCache.prototype.isDirty = function (domainObject) { - return !!this.get(domainObject.getId()); + return !!this.cache[domainObject.getId()]; }; DirtyModelCache.prototype.markDirty = function (domainObject) { diff --git a/platform/commonUI/edit/src/services/TransactionService.js b/platform/commonUI/edit/src/services/TransactionService.js index d156b9ee2e..f9456cad77 100644 --- a/platform/commonUI/edit/src/services/TransactionService.js +++ b/platform/commonUI/edit/src/services/TransactionService.js @@ -39,9 +39,8 @@ define( } TransactionService.prototype.startTransaction = function () { - if (this.transaction) { - throw "Transaction in progress"; - } + if (this.transaction) + console.error("Transaction already in progress") this.transaction = true; }; @@ -68,7 +67,7 @@ define( } return this.$q.all( - Object.keys(this.cache) + Object.keys(cache) .map(keyToObject) .map(objectToPromise)) .then(function () { @@ -93,7 +92,7 @@ define( } function objectToPromise(object) { - return object.getCapability('persistence').refresh(); + return self.$q.when(object.getModel().persisted && object.getCapability('persistence').refresh()); } return this.$q.all(Object.keys(cache) diff --git a/platform/core/src/capabilities/PersistenceCapability.js b/platform/core/src/capabilities/PersistenceCapability.js index 4e4e753e0c..07d73a0548 100644 --- a/platform/core/src/capabilities/PersistenceCapability.js +++ b/platform/core/src/capabilities/PersistenceCapability.js @@ -168,13 +168,10 @@ define( }, modified); } - // Only update if we don't have unsaved changes - return (model.modified === model.persisted) ? - this.persistenceService.readObject( + return this.persistenceService.readObject( this.getSpace(), this.domainObject.getId() - ).then(updateModel) : - fastPromise(false); + ).then(updateModel); }; /** diff --git a/platform/representation/src/gestures/DropGesture.js b/platform/representation/src/gestures/DropGesture.js index 76df23b043..c25899b9db 100644 --- a/platform/representation/src/gestures/DropGesture.js +++ b/platform/representation/src/gestures/DropGesture.js @@ -24,9 +24,8 @@ * Module defining DropGesture. Created by vwoeltje on 11/17/14. */ define( - ['./GestureConstants', - '../../../commonUI/edit/src/objects/EditableDomainObject'], - function (GestureConstants, EditableDomainObject) { + ['./GestureConstants'], + function (GestureConstants) { /** * A DropGesture adds and maintains event handlers upon an element @@ -41,7 +40,6 @@ define( */ function DropGesture(dndService, $q, navigationService, instantiate, typeService, element, domainObject) { var actionCapability = domainObject.getCapability('action'), - editableDomainObject, scope = element.scope && element.scope(), action; // Action for the drop, when it occurs @@ -66,23 +64,13 @@ define( x: event.pageX - rect.left, y: event.pageY - rect.top }, - editableDomainObject + domainObject ); } } function dragOver(e) { - //Refresh domain object on each dragOver to catch external - // updates to the model - //Don't use EditableDomainObject for folders, allow immediate persistence - if (domainObject.hasCapability('editor') || - domainObject.getModel().type==='folder') { - editableDomainObject = domainObject; - } else { - editableDomainObject = new EditableDomainObject(domainObject, $q); - } - - actionCapability = editableDomainObject.getCapability('action'); + actionCapability = domainObject.getCapability('action'); var event = (e || {}).originalEvent || e, selectedObject = dndService.getData( @@ -108,18 +96,19 @@ define( function drop(e) { var event = (e || {}).originalEvent || e, id = event.dataTransfer.getData(GestureConstants.MCT_DRAG_TYPE), - domainObjectType = editableDomainObject.getModel().type; + domainObjectType = domainObject.getModel().type; // Handle the drop; add the dropped identifier to the // destination domain object's composition, and persist // the change. if (id) { e.preventDefault(); - $q.when(action && action.perform()).then(function (result) { - //Don't go into edit mode for folders - if (domainObjectType!=='folder') { - editableDomainObject.getCapability('action').perform('edit'); - } + + if (domainObjectType!=='folder') { + domainObject.getCapability('action').perform('edit'); + } + + $q.when(action && action.perform()).then(function () { broadcastDrop(id, event); }); } From cf9eb3f602dfef420235986583dcbac52034b485 Mon Sep 17 00:00:00 2001 From: Henry Date: Thu, 12 May 2016 16:05:27 -0700 Subject: [PATCH 092/132] Resolved Merge conflicts, removed previously deleted files --- platform/commonUI/edit/bundle.js | 6 +- .../commonUI/edit/src/actions/CancelAction.js | 6 +- .../commonUI/edit/src/actions/EditAction.js | 4 +- .../commonUI/edit/src/actions/SaveAction.js | 4 +- .../capabilities/EditableActionCapability.js | 55 ------ .../EditableCompositionCapability.js | 58 ------ .../capabilities/EditableContextCapability.js | 76 -------- .../EditableInstantiationCapability.js | 58 ------ .../capabilities/EditableLookupCapability.js | 123 ------------ .../EditablePersistenceCapability.js | 66 ------- .../EditableRelationshipCapability.js | 58 ------ .../edit/src/capabilities/EditorCapability.js | 14 -- .../src/capabilities/TransactionDecorator.js | 15 -- .../TransactionalPersistenceCapability.js | 2 +- .../edit/src/objects/EditableDomainObject.js | 130 ------------- .../src/objects/EditableDomainObjectCache.js | 170 ----------------- .../edit/src/objects/EditableModelCache.js | 60 ------ .../edit/src/services/TransactionService.js | 11 ++ .../EditableCompositionCapabilitySpec.js | 73 -------- .../EditableContextCapabilitySpec.js | 87 --------- .../EditableLookupCapabilitySpec.js | 144 -------------- .../EditablePersistenceCapabilitySpec.js | 94 ---------- .../EditableRelationshipCapabilitySpec.js | 73 -------- .../objects/EditableDomainObjectCacheSpec.js | 177 ------------------ .../test/objects/EditableDomainObjectSpec.js | 35 ---- .../test/objects/EditableModelCacheSpec.js | 79 -------- .../swimlane/TimelineSwimlaneDropHandler.js | 14 +- 27 files changed, 28 insertions(+), 1664 deletions(-) delete mode 100644 platform/commonUI/edit/src/capabilities/EditableActionCapability.js delete mode 100644 platform/commonUI/edit/src/capabilities/EditableCompositionCapability.js delete mode 100644 platform/commonUI/edit/src/capabilities/EditableContextCapability.js delete mode 100644 platform/commonUI/edit/src/capabilities/EditableInstantiationCapability.js delete mode 100644 platform/commonUI/edit/src/capabilities/EditableLookupCapability.js delete mode 100644 platform/commonUI/edit/src/capabilities/EditablePersistenceCapability.js delete mode 100644 platform/commonUI/edit/src/capabilities/EditableRelationshipCapability.js delete mode 100644 platform/commonUI/edit/src/objects/EditableDomainObject.js delete mode 100644 platform/commonUI/edit/src/objects/EditableDomainObjectCache.js delete mode 100644 platform/commonUI/edit/src/objects/EditableModelCache.js delete mode 100644 platform/commonUI/edit/test/capabilities/EditableCompositionCapabilitySpec.js delete mode 100644 platform/commonUI/edit/test/capabilities/EditableContextCapabilitySpec.js delete mode 100644 platform/commonUI/edit/test/capabilities/EditableLookupCapabilitySpec.js delete mode 100644 platform/commonUI/edit/test/capabilities/EditablePersistenceCapabilitySpec.js delete mode 100644 platform/commonUI/edit/test/capabilities/EditableRelationshipCapabilitySpec.js delete mode 100644 platform/commonUI/edit/test/objects/EditableDomainObjectCacheSpec.js delete mode 100644 platform/commonUI/edit/test/objects/EditableDomainObjectSpec.js delete mode 100644 platform/commonUI/edit/test/objects/EditableModelCacheSpec.js diff --git a/platform/commonUI/edit/bundle.js b/platform/commonUI/edit/bundle.js index b710952ec2..35818bd477 100644 --- a/platform/commonUI/edit/bundle.js +++ b/platform/commonUI/edit/bundle.js @@ -199,11 +199,7 @@ define([ "implementation": CancelAction, "name": "Cancel", "description": "Discard changes made to these objects.", - "depends": [ - "$injector", - "navigationService", - "$window" - ] + "depends": [] } ], "policies": [ diff --git a/platform/commonUI/edit/src/actions/CancelAction.js b/platform/commonUI/edit/src/actions/CancelAction.js index 937b339085..550516360a 100644 --- a/platform/commonUI/edit/src/actions/CancelAction.js +++ b/platform/commonUI/edit/src/actions/CancelAction.js @@ -31,10 +31,8 @@ define( * @memberof platform/commonUI/edit * @implements {Action} */ - function CancelAction($injector, navigationService, context) { + function CancelAction(context) { this.domainObject = context.domainObject; - this.navigationService = navigationService; - this.objectService = $injector.get('objectService'); } /** @@ -66,7 +64,7 @@ define( CancelAction.appliesTo = function (context) { var domainObject = (context || {}).domainObject; return domainObject !== undefined && - domainObject.hasCapability("editor"); + domainObject.getCapability("status").get("editing"); }; return CancelAction; diff --git a/platform/commonUI/edit/src/actions/EditAction.js b/platform/commonUI/edit/src/actions/EditAction.js index 068acfa6b7..5931a02a52 100644 --- a/platform/commonUI/edit/src/actions/EditAction.js +++ b/platform/commonUI/edit/src/actions/EditAction.js @@ -24,8 +24,8 @@ * Module defining EditAction. Created by vwoeltje on 11/14/14. */ define( - ['../objects/EditableDomainObject'], - function (EditableDomainObject) { + [], + function () { // A no-op action to return in the event that the action cannot // be completed. diff --git a/platform/commonUI/edit/src/actions/SaveAction.js b/platform/commonUI/edit/src/actions/SaveAction.js index 3c5bb86e77..cf8675682e 100644 --- a/platform/commonUI/edit/src/actions/SaveAction.js +++ b/platform/commonUI/edit/src/actions/SaveAction.js @@ -85,8 +85,8 @@ define( SaveAction.appliesTo = function (context) { var domainObject = (context || {}).domainObject; return domainObject !== undefined && - domainObject.hasCapability("editor") && - domainObject.getModel().persisted !== undefined; + domainObject.getModel().persisted !== undefined && + domainObject.getCapability("status").get("editing"); }; return SaveAction; diff --git a/platform/commonUI/edit/src/capabilities/EditableActionCapability.js b/platform/commonUI/edit/src/capabilities/EditableActionCapability.js deleted file mode 100644 index bdfa4d3f59..0000000000 --- a/platform/commonUI/edit/src/capabilities/EditableActionCapability.js +++ /dev/null @@ -1,55 +0,0 @@ -/***************************************************************************** - * Open MCT Web, Copyright (c) 2014-2015, United States Government - * as represented by the Administrator of the National Aeronautics and Space - * Administration. All rights reserved. - * - * Open MCT Web is licensed under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * http://www.apache.org/licenses/LICENSE-2.0. - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the - * License for the specific language governing permissions and limitations - * under the License. - * - * Open MCT Web includes source code licensed under additional open source - * licenses. See the Open Source Licenses file (LICENSES.md) included with - * this source code distribution or the Licensing information page available - * at runtime from the About dialog for additional information. - *****************************************************************************/ - - -define( - function () { - var DISALLOWED_ACTIONS = ["move", "copy", "link", "window", "follow"]; - /** - * Editable Action Capability. Overrides the action capability - * normally exhibited by a domain object and filters out certain - * actions not applicable when an object is in edit mode. - * - * Meant specifically for use by EditableDomainObject and the - * associated cache; the constructor signature is particular - * to a pattern used there and may contain unused arguments. - * @constructor - * @memberof platform/commonUI/edit - * @implements {PersistenceCapability} - */ - function EditableActionCapability( - actionCapability - ) { - var action = Object.create(actionCapability); - - action.getActions = function(domainObject) { - return actionCapability.getActions(domainObject).filter(function(action){ - return DISALLOWED_ACTIONS.indexOf(action.getMetadata().key) === -1; - }); - }; - - return action; - } - - return EditableActionCapability; - } -); diff --git a/platform/commonUI/edit/src/capabilities/EditableCompositionCapability.js b/platform/commonUI/edit/src/capabilities/EditableCompositionCapability.js deleted file mode 100644 index 343c6a03a2..0000000000 --- a/platform/commonUI/edit/src/capabilities/EditableCompositionCapability.js +++ /dev/null @@ -1,58 +0,0 @@ -/***************************************************************************** - * Open MCT Web, Copyright (c) 2014-2015, United States Government - * as represented by the Administrator of the National Aeronautics and Space - * Administration. All rights reserved. - * - * Open MCT Web is licensed under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * http://www.apache.org/licenses/LICENSE-2.0. - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the - * License for the specific language governing permissions and limitations - * under the License. - * - * Open MCT Web includes source code licensed under additional open source - * licenses. See the Open Source Licenses file (LICENSES.md) included with - * this source code distribution or the Licensing information page available - * at runtime from the About dialog for additional information. - *****************************************************************************/ - - -define( - ['./EditableLookupCapability'], - function (EditableLookupCapability) { - - /** - * Wrapper for the "composition" capability; - * ensures that any domain objects reachable in Edit mode - * are also wrapped as EditableDomainObjects. - * - * Meant specifically for use by EditableDomainObject and the - * associated cache; the constructor signature is particular - * to a pattern used there and may contain unused arguments. - * @constructor - * @memberof platform/commonUI/edit - * @implements {CompositionCapability} - */ - return function EditableCompositionCapability( - contextCapability, - editableObject, - domainObject, - cache - ) { - // This is a "lookup" style capability (it looks up other - // domain objects), but we do not want to return the same - // specific value every time (composition may change) - return new EditableLookupCapability( - contextCapability, - editableObject, - domainObject, - cache, - false // Not idempotent - ); - }; - } -); diff --git a/platform/commonUI/edit/src/capabilities/EditableContextCapability.js b/platform/commonUI/edit/src/capabilities/EditableContextCapability.js deleted file mode 100644 index d20971fb04..0000000000 --- a/platform/commonUI/edit/src/capabilities/EditableContextCapability.js +++ /dev/null @@ -1,76 +0,0 @@ -/***************************************************************************** - * Open MCT Web, Copyright (c) 2014-2015, United States Government - * as represented by the Administrator of the National Aeronautics and Space - * Administration. All rights reserved. - * - * Open MCT Web is licensed under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * http://www.apache.org/licenses/LICENSE-2.0. - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the - * License for the specific language governing permissions and limitations - * under the License. - * - * Open MCT Web includes source code licensed under additional open source - * licenses. See the Open Source Licenses file (LICENSES.md) included with - * this source code distribution or the Licensing information page available - * at runtime from the About dialog for additional information. - *****************************************************************************/ - - -define( - ['./EditableLookupCapability'], - function (EditableLookupCapability) { - - /** - * Wrapper for the "context" capability; - * ensures that any domain objects reachable in Edit mode - * are also wrapped as EditableDomainObjects. - * - * Meant specifically for use by EditableDomainObject and the - * associated cache; the constructor signature is particular - * to a pattern used there and may contain unused arguments. - * @constructor - * @memberof platform/commonUI/edit - * @implements {ContextCapability} - */ - return function EditableContextCapability( - contextCapability, - editableObject, - domainObject, - cache - ) { - // This is a "lookup" style capability (it looks up other - // domain objects), and it should be idempotent - var capability = new EditableLookupCapability( - contextCapability, - editableObject, - domainObject, - cache, - true // Idempotent - ), - // Track the real root object for the Elements pane - trueRoot = capability.getRoot(); - - // Provide access to the real root, for the Elements pane. - capability.getTrueRoot = function () { - return trueRoot; - }; - - // Hide ancestry after the root of this subgraph - if (cache.isRoot(domainObject)) { - capability.getRoot = function () { - return editableObject; - }; - capability.getPath = function () { - return [editableObject]; - }; - } - - return capability; - }; - } -); diff --git a/platform/commonUI/edit/src/capabilities/EditableInstantiationCapability.js b/platform/commonUI/edit/src/capabilities/EditableInstantiationCapability.js deleted file mode 100644 index 4376a9310e..0000000000 --- a/platform/commonUI/edit/src/capabilities/EditableInstantiationCapability.js +++ /dev/null @@ -1,58 +0,0 @@ -/***************************************************************************** - * Open MCT Web, Copyright (c) 2014-2015, United States Government - * as represented by the Administrator of the National Aeronautics and Space - * Administration. All rights reserved. - * - * Open MCT Web is licensed under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * http://www.apache.org/licenses/LICENSE-2.0. - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the - * License for the specific language governing permissions and limitations - * under the License. - * - * Open MCT Web includes source code licensed under additional open source - * licenses. See the Open Source Licenses file (LICENSES.md) included with - * this source code distribution or the Licensing information page available - * at runtime from the About dialog for additional information. - *****************************************************************************/ - - -define( - ['./EditableLookupCapability'], - function (EditableLookupCapability) { - - /** - * Wrapper for the "instantiation" capability; - * ensures that any domain objects instantiated in Edit mode - * are also wrapped as EditableDomainObjects. - * - * Meant specifically for use by EditableDomainObject and the - * associated cache; the constructor signature is particular - * to a pattern used there and may contain unused arguments. - * @constructor - * @memberof platform/commonUI/edit - * @implements {CompositionCapability} - */ - return function EditableInstantiationCapability( - contextCapability, - editableObject, - domainObject, - cache - ) { - // This is a "lookup" style capability (it looks up other - // domain objects), but we do not want to return the same - // specific value every time (composition may change) - return new EditableLookupCapability( - contextCapability, - editableObject, - domainObject, - cache, - false // Not idempotent - ); - }; - } -); diff --git a/platform/commonUI/edit/src/capabilities/EditableLookupCapability.js b/platform/commonUI/edit/src/capabilities/EditableLookupCapability.js deleted file mode 100644 index 0abde97c5a..0000000000 --- a/platform/commonUI/edit/src/capabilities/EditableLookupCapability.js +++ /dev/null @@ -1,123 +0,0 @@ -/***************************************************************************** - * Open MCT Web, Copyright (c) 2014-2015, United States Government - * as represented by the Administrator of the National Aeronautics and Space - * Administration. All rights reserved. - * - * Open MCT Web is licensed under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * http://www.apache.org/licenses/LICENSE-2.0. - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the - * License for the specific language governing permissions and limitations - * under the License. - * - * Open MCT Web includes source code licensed under additional open source - * licenses. See the Open Source Licenses file (LICENSES.md) included with - * this source code distribution or the Licensing information page available - * at runtime from the About dialog for additional information. - *****************************************************************************/ - - -define( - [], - function () { - /*jshint forin:false */ - /** - * Wrapper for both "context" and "composition" capabilities; - * ensures that any domain objects reachable in Edit mode - * are also wrapped as EditableDomainObjects. - * - * Meant specifically for use by EditableDomainObject and the - * associated cache; the constructor signature is particular - * to a pattern used there and may contain unused arguments. - * @constructor - * @memberof platform/commonUI/edit - */ - return function EditableLookupCapability( - contextCapability, - editableObject, - domainObject, - cache, - idempotent - ) { - var capability = Object.create(contextCapability), - method; - - // Check for domain object interface. If something has these - // three methods, we assume it's a domain object. - function isDomainObject(obj) { - return obj !== undefined && - typeof obj.getId === 'function' && - typeof obj.getModel === 'function' && - typeof obj.getCapability === 'function'; - } - - // Check an object returned by the wrapped capability; if it - // is a domain object, we want to make it editable and/or get - // it from the cache of editable domain objects. This will - // prevent changes made in edit mode from modifying the actual - // underlying domain object. - function makeEditableObject(obj) { - return isDomainObject(obj) ? - cache.getEditableObject(obj) : - obj; - } - - // Wrap a returned value (see above); if it's an array, wrap - // all elements. - function makeEditable(returnValue) { - return Array.isArray(returnValue) ? - returnValue.map(makeEditableObject) : - makeEditableObject(returnValue); - } - - // Wrap a returned value (see above); if it's a promise, wrap - // the resolved value. - function wrapResult(result) { - return (result && result.then) ? // promise-like - result.then(makeEditable) : - makeEditable(result); - } - - // Return a wrapped version of a function, which ensures - // all results are editable domain objects. - function wrapFunction(fn) { - return function () { - return wrapResult(contextCapability[fn].apply( - capability, - arguments - )); - }; - } - - // Wrap a method such that it only delegates once. - function oneTimeFunction(fn) { - return function () { - var result = wrapFunction(fn).apply(this, arguments); - capability[fn] = function () { - return result; - }; - return result; - }; - } - - // Wrap a method of this capability - function wrapMethod(fn) { - if (typeof capability[fn] === 'function') { - capability[fn] = - (idempotent ? oneTimeFunction : wrapFunction)(fn); - } - } - - // Wrap all methods; return only editable domain objects. - for (method in contextCapability) { - wrapMethod(method); - } - - return capability; - }; - } -); diff --git a/platform/commonUI/edit/src/capabilities/EditablePersistenceCapability.js b/platform/commonUI/edit/src/capabilities/EditablePersistenceCapability.js deleted file mode 100644 index e6c32e2bf4..0000000000 --- a/platform/commonUI/edit/src/capabilities/EditablePersistenceCapability.js +++ /dev/null @@ -1,66 +0,0 @@ -/***************************************************************************** - * Open MCT Web, Copyright (c) 2014-2015, United States Government - * as represented by the Administrator of the National Aeronautics and Space - * Administration. All rights reserved. - * - * Open MCT Web is licensed under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * http://www.apache.org/licenses/LICENSE-2.0. - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the - * License for the specific language governing permissions and limitations - * under the License. - * - * Open MCT Web includes source code licensed under additional open source - * licenses. See the Open Source Licenses file (LICENSES.md) included with - * this source code distribution or the Licensing information page available - * at runtime from the About dialog for additional information. - *****************************************************************************/ - - -define( - function () { - - /** - * Editable Persistence Capability. Overrides the persistence capability - * normally exhibited by a domain object to ensure that changes made - * during edit mode are not immediately stored to the database or other - * backing storage. - * - * Meant specifically for use by EditableDomainObject and the - * associated cache; the constructor signature is particular - * to a pattern used there and may contain unused arguments. - * @constructor - * @memberof platform/commonUI/edit - * @implements {PersistenceCapability} - */ - function EditablePersistenceCapability( - persistenceCapability, - editableObject, - domainObject, - cache - ) { - var persistence = Object.create(persistenceCapability); - - // Simply trigger refresh of in-view objects; do not - // write anything to database. - persistence.persist = function () { - return cache.markDirty(editableObject); - }; - - // Delegate refresh to the original object; this avoids refreshing - // the editable instance of the object, and ensures that refresh - // correctly targets the "real" version of the object. - persistence.refresh = function () { - return domainObject.getCapability('persistence').refresh(); - }; - - return persistence; - } - - return EditablePersistenceCapability; - } -); diff --git a/platform/commonUI/edit/src/capabilities/EditableRelationshipCapability.js b/platform/commonUI/edit/src/capabilities/EditableRelationshipCapability.js deleted file mode 100644 index af8c142338..0000000000 --- a/platform/commonUI/edit/src/capabilities/EditableRelationshipCapability.js +++ /dev/null @@ -1,58 +0,0 @@ -/***************************************************************************** - * Open MCT Web, Copyright (c) 2014-2015, United States Government - * as represented by the Administrator of the National Aeronautics and Space - * Administration. All rights reserved. - * - * Open MCT Web is licensed under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * http://www.apache.org/licenses/LICENSE-2.0. - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the - * License for the specific language governing permissions and limitations - * under the License. - * - * Open MCT Web includes source code licensed under additional open source - * licenses. See the Open Source Licenses file (LICENSES.md) included with - * this source code distribution or the Licensing information page available - * at runtime from the About dialog for additional information. - *****************************************************************************/ - - -define( - ['./EditableLookupCapability'], - function (EditableLookupCapability) { - - /** - * Wrapper for the "relationship" capability; - * ensures that any domain objects reachable in Edit mode - * are also wrapped as EditableDomainObjects. - * - * Meant specifically for use by EditableDomainObject and the - * associated cache; the constructor signature is particular - * to a pattern used there and may contain unused arguments. - * @constructor - * @memberof platform/commonUI/edit - * @implements {RelationshipCapability} - */ - return function EditableRelationshipCapability( - relationshipCapability, - editableObject, - domainObject, - cache - ) { - // This is a "lookup" style capability (it looks up other - // domain objects), but we do not want to return the same - // specific value every time (composition may change) - return new EditableLookupCapability( - relationshipCapability, - editableObject, - domainObject, - cache, - false // Not idempotent - ); - }; - } -); diff --git a/platform/commonUI/edit/src/capabilities/EditorCapability.js b/platform/commonUI/edit/src/capabilities/EditorCapability.js index 98a08d5643..8f40508069 100644 --- a/platform/commonUI/edit/src/capabilities/EditorCapability.js +++ b/platform/commonUI/edit/src/capabilities/EditorCapability.js @@ -24,20 +24,6 @@ define( [], function () { - /** - * Implements "save" and "cancel" as capabilities of - * the object. In editing mode, user is seeing/using - * a copy of the object which is disconnected from persistence; the Save - * and Cancel actions can use this capability to - * propagate changes from edit mode to the underlying - * actual persistable object. - * - * Meant specifically for use by EditableDomainObject and the - * associated cache; the constructor signature is particular - * to a pattern used there and may contain unused arguments. - * @constructor - * @memberof platform/commonUI/edit - */ function EditorCapability( transactionService, dirtyModelCache, diff --git a/platform/commonUI/edit/src/capabilities/TransactionDecorator.js b/platform/commonUI/edit/src/capabilities/TransactionDecorator.js index 76213c2ac5..6121ed6faa 100644 --- a/platform/commonUI/edit/src/capabilities/TransactionDecorator.js +++ b/platform/commonUI/edit/src/capabilities/TransactionDecorator.js @@ -26,21 +26,6 @@ define( function (TransactionalPersistenceCapability) { 'use strict'; - /** - * Implements "save" and "cancel" as capabilities of - * the object. In editing mode, user is seeing/using - * a copy of the object (an EditableDomainObject) - * which is disconnected from persistence; the Save - * and Cancel actions can use this capability to - * propagate changes from edit mode to the underlying - * actual persistable object. - * - * Meant specifically for use by EditableDomainObject and the - * associated cache; the constructor signature is particular - * to a pattern used there and may contain unused arguments. - * @constructor - * @memberof platform/commonUI/edit - */ function TransactionDecorator( $q, transactionService, diff --git a/platform/commonUI/edit/src/capabilities/TransactionalPersistenceCapability.js b/platform/commonUI/edit/src/capabilities/TransactionalPersistenceCapability.js index 28d3f76164..b282c40e1f 100644 --- a/platform/commonUI/edit/src/capabilities/TransactionalPersistenceCapability.js +++ b/platform/commonUI/edit/src/capabilities/TransactionalPersistenceCapability.js @@ -43,7 +43,7 @@ define( TransactionalPersistenceCapability.prototype.persist = function () { var domainObject = this.domainObject, dirtyModelCache = this.dirtyModelCache; - if (this.transactionService.isActive()) { + if (this.transactionService.isActive() && !this.transactionService.isCommitting()) { dirtyModelCache.markDirty(domainObject); //Using $q here because need to return something // from which 'catch' can be chained diff --git a/platform/commonUI/edit/src/objects/EditableDomainObject.js b/platform/commonUI/edit/src/objects/EditableDomainObject.js deleted file mode 100644 index 1eedcd563b..0000000000 --- a/platform/commonUI/edit/src/objects/EditableDomainObject.js +++ /dev/null @@ -1,130 +0,0 @@ -/***************************************************************************** - * Open MCT Web, Copyright (c) 2014-2015, United States Government - * as represented by the Administrator of the National Aeronautics and Space - * Administration. All rights reserved. - * - * Open MCT Web is licensed under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * http://www.apache.org/licenses/LICENSE-2.0. - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the - * License for the specific language governing permissions and limitations - * under the License. - * - * Open MCT Web includes source code licensed under additional open source - * licenses. See the Open Source Licenses file (LICENSES.md) included with - * this source code distribution or the Licensing information page available - * at runtime from the About dialog for additional information. - *****************************************************************************/ - -/** - * Defines EditableDomainObject, which wraps domain objects - * such that user code may work with and mutate a copy of the - * domain object model; these changes may then be propagated - * up to the real domain object (or not) by way of invoking - * save or cancel behaviors of the "editor.completion" - * capability (a capability intended as internal to edit - * mode; invoked by way of the Save and Cancel actions.) - */ -define( - [ - '../capabilities/EditablePersistenceCapability', - '../capabilities/EditableContextCapability', - '../capabilities/EditableCompositionCapability', - '../capabilities/EditableRelationshipCapability', - '../capabilities/EditableInstantiationCapability', - '../capabilities/EditorCapability', - '../capabilities/EditableActionCapability', - './EditableDomainObjectCache' - ], - function ( - EditablePersistenceCapability, - EditableContextCapability, - EditableCompositionCapability, - EditableRelationshipCapability, - EditableInstantiationCapability, - EditorCapability, - EditableActionCapability, - EditableDomainObjectCache - ) { - - var capabilityFactories = { - persistence: EditablePersistenceCapability, - context: EditableContextCapability, - composition: EditableCompositionCapability, - relationship: EditableRelationshipCapability, - instantiation: EditableInstantiationCapability, - editor: EditorCapability - }; - - // Handle special case where "editor.completion" wraps persistence - // (other capability overrides wrap capabilities of the same type.) - function getDelegateArguments(name, args) { - return name === "editor" ? ['persistence'] : args; - } - - /** - * An EditableDomainObject overrides capabilities - * which need to behave differently in edit mode, - * and provides a "working copy" of the object's - * model to allow changes to be easily cancelled. - * @constructor - * @memberof platform/commonUI/edit - * @implements {DomainObject} - */ - function EditableDomainObject(domainObject, $q) { - // The cache will hold all domain objects reached from - // the initial EditableDomainObject; this ensures that - // different versions of the same editable domain object - // are not shown in different sections of the same Edit - // UI, which might thereby fall out of sync. - var cache, - originalObject = domainObject, - cachedObject; - - // Constructor for EditableDomainObject, which adheres - // to the same shared cache. - function EditableDomainObjectImpl(domainObject, model) { - var editableObject = Object.create(domainObject); - - // Only provide the cloned model. - editableObject.getModel = function () { return model; }; - - // Override certain capabilities - editableObject.getCapability = function (name) { - var delegateArguments = getDelegateArguments(name, arguments), - capability = domainObject.getCapability.apply( - this, - delegateArguments - ), - Factory = capabilityFactories[name]; - - return (Factory && capability) ? - new Factory(capability, editableObject, domainObject, cache) : - capability; - }; - - - editableObject.setOriginalObject = function(object) { - originalObject = object; - }; - - editableObject.getOriginalObject = function() { - return originalObject; - }; - - return editableObject; - } - - cache = new EditableDomainObjectCache(EditableDomainObjectImpl, $q); - cachedObject = cache.getEditableObject(domainObject); - - return cachedObject; - } - - return EditableDomainObject; - } -); diff --git a/platform/commonUI/edit/src/objects/EditableDomainObjectCache.js b/platform/commonUI/edit/src/objects/EditableDomainObjectCache.js deleted file mode 100644 index 774e562e61..0000000000 --- a/platform/commonUI/edit/src/objects/EditableDomainObjectCache.js +++ /dev/null @@ -1,170 +0,0 @@ -/***************************************************************************** - * Open MCT Web, Copyright (c) 2014-2015, United States Government - * as represented by the Administrator of the National Aeronautics and Space - * Administration. All rights reserved. - * - * Open MCT Web is licensed under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * http://www.apache.org/licenses/LICENSE-2.0. - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the - * License for the specific language governing permissions and limitations - * under the License. - * - * Open MCT Web includes source code licensed under additional open source - * licenses. See the Open Source Licenses file (LICENSES.md) included with - * this source code distribution or the Licensing information page available - * at runtime from the About dialog for additional information. - *****************************************************************************/ - - -/* - * An editable domain object cache stores domain objects that have been - * made editable, in a group that can be saved all-at-once. This supports - * Edit mode, which is launched for a specific object but may contain - * changes across many objects. - * - * Editable domain objects have certain specific capabilities overridden - * to ensure that changes made while in edit mode do not propagate up - * to the objects used in browse mode (or to persistence) until the user - * initiates a Save. - */ -define( - ["./EditableModelCache"], - function (EditableModelCache) { - - /** - * Construct a new cache for editable domain objects. This can be used - * to get-or-create editable objects, particularly to support wrapping - * of objects retrieved via composition or context capabilities as - * editable domain objects. - * - * @param {Constructor} EditableDomainObject a - * constructor function which takes a regular domain object as - * an argument, and returns an editable domain object as its - * result. - * @param $q Angular's $q, for promise handling - * @memberof platform/commonUI/edit - * @constructor - */ - function EditableDomainObjectCache(EditableDomainObject, $q) { - this.cache = new EditableModelCache(); - this.dirtyObjects = {}; - this.root = undefined; - this.$q = $q; - this.EditableDomainObject = EditableDomainObject; - } - - /** - * Wrap this domain object in an editable form, or pull such - * an object from the cache if one already exists. - * - * @param {DomainObject} domainObject the regular domain object - * @returns {DomainObject} the domain object in an editable form - */ - EditableDomainObjectCache.prototype.getEditableObject = function (domainObject) { - var type = domainObject.getCapability('type'), - EditableDomainObject = this.EditableDomainObject, - editableObject; - - // Track the top-level domain object; this will have - // some special behavior for its context capability. - this.root = this.root || domainObject; - - // Avoid double-wrapping (WTD-1017) - if (domainObject.hasCapability('editor')) { - return domainObject; - } - - // Don't bother wrapping non-editable objects - if (!type || !type.hasFeature('creation')) { - return domainObject; - } - - // Provide an editable form of the object - editableObject = new EditableDomainObject( - domainObject, - this.cache.getCachedModel(domainObject) - ); - - return editableObject; - }; - - /** - * Check if a domain object is (effectively) the top-level - * object in this editable subgraph. - * @returns {boolean} true if it is the root - */ - EditableDomainObjectCache.prototype.isRoot = function (domainObject) { - return domainObject === this.root; - }; - - /** - * Mark an editable domain object (presumably already cached) - * as having received modifications during editing; it should be - * included in the bulk save invoked when editing completes. - * - * @param {DomainObject} domainObject the domain object - * @memberof platform/commonUI/edit.EditableDomainObjectCache# - */ - EditableDomainObjectCache.prototype.markDirty = function (domainObject) { - this.dirtyObjects[domainObject.getId()] = domainObject; - return this.$q.when(true); - }; - - /** - * Mark an object (presumably already cached) as having had its - * changes saved (and thus no longer needing to be subject to a - * save operation.) - * - * @param {DomainObject} domainObject the domain object - */ - EditableDomainObjectCache.prototype.markClean = function (domainObject) { - var self = this; - if (!domainObject) { - Object.keys(this.dirtyObjects).forEach(function(key) { - delete self.dirtyObjects[key]; - }); - } else { - delete this.dirtyObjects[domainObject.getId()]; - } - }; - - /** - * Initiate a save on all objects that have been cached. - * @return {Promise} A promise which will resolve when all objects are - * persisted. - */ - EditableDomainObjectCache.prototype.saveAll = function () { - // Get a list of all dirty objects - var dirty = this.dirtyObjects, - objects = Object.keys(dirty).map(function (k) { - return dirty[k]; - }); - - // Clear dirty set, since we're about to save. - this.dirtyObjects = {}; - - // Most save logic is handled by the "editor.completion" - // capability, so that is delegated here. - return this.$q.all(objects.map(function (object) { - // Save; pass a nonrecursive flag to avoid looping - return object.getCapability('editor').save(true); - })); - }; - - /** - * Check if any objects have been marked dirty in this cache. - * @returns {boolean} true if objects are dirty - */ - EditableDomainObjectCache.prototype.dirty = function () { - return Object.keys(this.dirtyObjects).length > 0; - }; - - return EditableDomainObjectCache; - } -); - diff --git a/platform/commonUI/edit/src/objects/EditableModelCache.js b/platform/commonUI/edit/src/objects/EditableModelCache.js deleted file mode 100644 index 702cfbe6c7..0000000000 --- a/platform/commonUI/edit/src/objects/EditableModelCache.js +++ /dev/null @@ -1,60 +0,0 @@ -/***************************************************************************** - * Open MCT Web, Copyright (c) 2014-2015, United States Government - * as represented by the Administrator of the National Aeronautics and Space - * Administration. All rights reserved. - * - * Open MCT Web is licensed under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * http://www.apache.org/licenses/LICENSE-2.0. - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the - * License for the specific language governing permissions and limitations - * under the License. - * - * Open MCT Web includes source code licensed under additional open source - * licenses. See the Open Source Licenses file (LICENSES.md) included with - * this source code distribution or the Licensing information page available - * at runtime from the About dialog for additional information. - *****************************************************************************/ - -define( - [], - function () { - - /** - * An editable model cache stores domain object models that have been - * made editable, to support a group that can be saved all-at-once. - * This is useful in Edit mode, which is launched for a specific - * object but may contain changes across many objects. - * @memberof platform/commonUI/edit - * @constructor - */ - function EditableModelCache() { - this.cache = {}; - } - - // Deep-copy a model. Models are JSONifiable, so this can be - // done by stringification then destringification - function clone(model) { - return JSON.parse(JSON.stringify(model)); - } - - /** - * Get this domain object's model from the cache (or - * place it in the cache if it isn't in the cache yet) - * @returns a clone of the domain object's model - */ - EditableModelCache.prototype.getCachedModel = function (domainObject) { - var id = domainObject.getId(), - cache = this.cache; - - return (cache[id] = - cache[id] || clone(domainObject.getModel())); - }; - - return EditableModelCache; - } -); diff --git a/platform/commonUI/edit/src/services/TransactionService.js b/platform/commonUI/edit/src/services/TransactionService.js index f9456cad77..2944d2215c 100644 --- a/platform/commonUI/edit/src/services/TransactionService.js +++ b/platform/commonUI/edit/src/services/TransactionService.js @@ -35,6 +35,7 @@ define( function TransactionService($q, dirtyModelCache) { this.$q = $q; this.transaction = false; + this.committing = false; this.cache = dirtyModelCache; } @@ -48,6 +49,10 @@ define( return this.transaction; }; + TransactionService.prototype.isCommitting = function () { + return this.committing; + }; + /** * All persist calls deferred since the beginning of the transaction * will be committed. Any failures will be reported via a promise @@ -58,6 +63,8 @@ define( var self = this; cache = this.cache.get(); + this.committing = true; + function keyToObject(key) { return cache[key]; } @@ -72,6 +79,9 @@ define( .map(objectToPromise)) .then(function () { self.transaction = false; + this.committing = false; + }).catch(function() { + return this.committing = false; }); }; @@ -100,6 +110,7 @@ define( .map(objectToPromise)) .then(function () { self.transaction = false; + this.committing = false; }); }; diff --git a/platform/commonUI/edit/test/capabilities/EditableCompositionCapabilitySpec.js b/platform/commonUI/edit/test/capabilities/EditableCompositionCapabilitySpec.js deleted file mode 100644 index 3e4083d2e8..0000000000 --- a/platform/commonUI/edit/test/capabilities/EditableCompositionCapabilitySpec.js +++ /dev/null @@ -1,73 +0,0 @@ -/***************************************************************************** - * Open MCT Web, Copyright (c) 2014-2015, United States Government - * as represented by the Administrator of the National Aeronautics and Space - * Administration. All rights reserved. - * - * Open MCT Web is licensed under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * http://www.apache.org/licenses/LICENSE-2.0. - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the - * License for the specific language governing permissions and limitations - * under the License. - * - * Open MCT Web includes source code licensed under additional open source - * licenses. See the Open Source Licenses file (LICENSES.md) included with - * this source code distribution or the Licensing information page available - * at runtime from the About dialog for additional information. - *****************************************************************************/ - -define( - ["../../src/capabilities/EditableCompositionCapability"], - function (EditableCompositionCapability) { - - describe("An editable composition capability", function () { - var mockContext, - mockEditableObject, - mockDomainObject, - mockTestObject, - someValue, - mockFactory, - capability; - - beforeEach(function () { - // EditableContextCapability should watch ALL - // methods for domain objects, so give it an - // arbitrary interface to wrap. - mockContext = - jasmine.createSpyObj("context", [ "getDomainObject" ]); - mockTestObject = jasmine.createSpyObj( - "domainObject", - [ "getId", "getModel", "getCapability" ] - ); - mockFactory = - jasmine.createSpyObj("factory", ["getEditableObject"]); - - someValue = { x: 42 }; - - mockContext.getDomainObject.andReturn(mockTestObject); - mockFactory.getEditableObject.andReturn(someValue); - - capability = new EditableCompositionCapability( - mockContext, - mockEditableObject, - mockDomainObject, - mockFactory - ); - - }); - - // Most behavior is tested for EditableLookupCapability, - // so just verify that this isse - it("presumes non-idempotence of its wrapped capability", function () { - expect(capability.getDomainObject()) - .toEqual(capability.getDomainObject()); - expect(mockContext.getDomainObject.calls.length).toEqual(2); - }); - - }); - } -); \ No newline at end of file diff --git a/platform/commonUI/edit/test/capabilities/EditableContextCapabilitySpec.js b/platform/commonUI/edit/test/capabilities/EditableContextCapabilitySpec.js deleted file mode 100644 index b18a02e881..0000000000 --- a/platform/commonUI/edit/test/capabilities/EditableContextCapabilitySpec.js +++ /dev/null @@ -1,87 +0,0 @@ -/***************************************************************************** - * Open MCT Web, Copyright (c) 2014-2015, United States Government - * as represented by the Administrator of the National Aeronautics and Space - * Administration. All rights reserved. - * - * Open MCT Web is licensed under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * http://www.apache.org/licenses/LICENSE-2.0. - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the - * License for the specific language governing permissions and limitations - * under the License. - * - * Open MCT Web includes source code licensed under additional open source - * licenses. See the Open Source Licenses file (LICENSES.md) included with - * this source code distribution or the Licensing information page available - * at runtime from the About dialog for additional information. - *****************************************************************************/ - -define( - ["../../src/capabilities/EditableContextCapability"], - function (EditableContextCapability) { - - describe("An editable context capability", function () { - var mockContext, - mockEditableObject, - mockDomainObject, - mockTestObject, - someValue, - mockFactory, - capability; - - beforeEach(function () { - // EditableContextCapability should watch ALL - // methods for domain objects, so give it an - // arbitrary interface to wrap. - mockContext = - jasmine.createSpyObj("context", [ "getDomainObject", "getRoot" ]); - mockTestObject = jasmine.createSpyObj( - "domainObject", - [ "getId", "getModel", "getCapability" ] - ); - mockFactory = jasmine.createSpyObj( - "factory", - ["getEditableObject", "isRoot"] - ); - - someValue = { x: 42 }; - - mockContext.getRoot.andReturn(mockTestObject); - mockContext.getDomainObject.andReturn(mockTestObject); - mockFactory.getEditableObject.andReturn(someValue); - mockFactory.isRoot.andReturn(true); - - capability = new EditableContextCapability( - mockContext, - mockEditableObject, - mockDomainObject, - mockFactory - ); - - }); - - it("presumes idempotence of its wrapped capability", function () { - expect(capability.getDomainObject()) - .toEqual(capability.getDomainObject()); - expect(mockContext.getDomainObject.calls.length).toEqual(1); - }); - - it("hides the root object", function () { - expect(capability.getRoot()).toEqual(mockEditableObject); - expect(capability.getPath()).toEqual([mockEditableObject]); - }); - - it("exposes the root object through a different method", function () { - // Should still go through the factory... - expect(capability.getTrueRoot()).toEqual(someValue); - // ...with value of the unwrapped capability's getRoot - expect(mockFactory.getEditableObject) - .toHaveBeenCalledWith(mockTestObject); - }); - }); - } -); \ No newline at end of file diff --git a/platform/commonUI/edit/test/capabilities/EditableLookupCapabilitySpec.js b/platform/commonUI/edit/test/capabilities/EditableLookupCapabilitySpec.js deleted file mode 100644 index dc178da449..0000000000 --- a/platform/commonUI/edit/test/capabilities/EditableLookupCapabilitySpec.js +++ /dev/null @@ -1,144 +0,0 @@ -/***************************************************************************** - * Open MCT Web, Copyright (c) 2014-2015, United States Government - * as represented by the Administrator of the National Aeronautics and Space - * Administration. All rights reserved. - * - * Open MCT Web is licensed under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * http://www.apache.org/licenses/LICENSE-2.0. - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the - * License for the specific language governing permissions and limitations - * under the License. - * - * Open MCT Web includes source code licensed under additional open source - * licenses. See the Open Source Licenses file (LICENSES.md) included with - * this source code distribution or the Licensing information page available - * at runtime from the About dialog for additional information. - *****************************************************************************/ - -define( - ["../../src/capabilities/EditableLookupCapability"], - function (EditableLookupCapability) { - - describe("An editable lookup capability", function () { - var mockContext, - mockEditableObject, - mockDomainObject, - mockTestObject, - someValue, - factory, - capability; - - beforeEach(function () { - // EditableContextCapability should watch ALL - // methods for domain objects, so give it an - // arbitrary interface to wrap. - mockContext = jasmine.createSpyObj( - "context", - [ - "getSomething", - "getDomainObject", - "getDomainObjectArray" - ] - ); - mockTestObject = jasmine.createSpyObj( - "domainObject", - [ "getId", "getModel", "getCapability" ] - ); - factory = { - getEditableObject: function (v) { - return { - isFromTestFactory: true, - calledWith: v - }; - } - }; - - someValue = { x: 42 }; - - mockContext.getSomething.andReturn(someValue); - mockContext.getDomainObject.andReturn(mockTestObject); - mockContext.getDomainObjectArray.andReturn([mockTestObject]); - - capability = new EditableLookupCapability( - mockContext, - mockEditableObject, - mockDomainObject, - factory, - false - ); - - }); - - it("wraps retrieved domain objects", function () { - var object = capability.getDomainObject(); - expect(object.isFromTestFactory).toBe(true); - expect(object.calledWith).toEqual(mockTestObject); - }); - - it("wraps retrieved domain object arrays", function () { - var object = capability.getDomainObjectArray()[0]; - expect(object.isFromTestFactory).toBe(true); - expect(object.calledWith).toEqual(mockTestObject); - }); - - it("does not wrap non-domain-objects", function () { - expect(capability.getSomething()).toEqual(someValue); - }); - - it("caches idempotent lookups", function () { - capability = new EditableLookupCapability( - mockContext, - mockEditableObject, - mockDomainObject, - factory, - true // idempotent - ); - expect(capability.getDomainObject()) - .toEqual(capability.getDomainObject()); - expect(mockContext.getDomainObject.calls.length).toEqual(1); - }); - - it("does not cache non-idempotent lookups", function () { - capability = new EditableLookupCapability( - mockContext, - mockEditableObject, - mockDomainObject, - factory, - false // Not idempotent - ); - expect(capability.getDomainObject()) - .toEqual(capability.getDomainObject()); - expect(mockContext.getDomainObject.calls.length).toEqual(2); - }); - - it("wraps inherited methods", function () { - var CapabilityClass = function(){ - }; - CapabilityClass.prototype.inheritedMethod=function () { - return "an inherited method"; - }; - - mockContext = new CapabilityClass(); - - capability = new EditableLookupCapability( - mockContext, - mockEditableObject, - mockDomainObject, - factory, - false - ); - expect(capability.inheritedMethod()).toEqual("an inherited method"); - expect(capability.hasOwnProperty('inheritedMethod')).toBe(true); - // The presence of an own property indicates that the method - // has been wrapped on the object itself and this is a valid - // test that the inherited method has been wrapped. - }); - - }); - } -); \ No newline at end of file diff --git a/platform/commonUI/edit/test/capabilities/EditablePersistenceCapabilitySpec.js b/platform/commonUI/edit/test/capabilities/EditablePersistenceCapabilitySpec.js deleted file mode 100644 index 4ce4a2f75d..0000000000 --- a/platform/commonUI/edit/test/capabilities/EditablePersistenceCapabilitySpec.js +++ /dev/null @@ -1,94 +0,0 @@ -/***************************************************************************** - * Open MCT Web, Copyright (c) 2014-2015, United States Government - * as represented by the Administrator of the National Aeronautics and Space - * Administration. All rights reserved. - * - * Open MCT Web is licensed under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * http://www.apache.org/licenses/LICENSE-2.0. - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the - * License for the specific language governing permissions and limitations - * under the License. - * - * Open MCT Web includes source code licensed under additional open source - * licenses. See the Open Source Licenses file (LICENSES.md) included with - * this source code distribution or the Licensing information page available - * at runtime from the About dialog for additional information. - *****************************************************************************/ - -define( - ["../../src/capabilities/EditablePersistenceCapability"], - function (EditablePersistenceCapability) { - - describe("An editable persistence capability", function () { - var mockPersistence, - mockEditableObject, - mockDomainObject, - mockCache, - mockPromise, - capability; - - beforeEach(function () { - mockPersistence = jasmine.createSpyObj( - "persistence", - [ "persist", "refresh" ] - ); - mockEditableObject = jasmine.createSpyObj( - "editableObject", - [ "getId", "getModel", "getCapability" ] - ); - mockDomainObject = jasmine.createSpyObj( - "editableObject", - [ "getId", "getModel", "getCapability" ] - ); - mockCache = jasmine.createSpyObj( - "cache", - [ "markDirty" ] - ); - mockPromise = jasmine.createSpyObj("promise", ["then"]); - - mockCache.markDirty.andReturn(mockPromise); - mockDomainObject.getCapability.andReturn(mockPersistence); - - capability = new EditablePersistenceCapability( - mockPersistence, - mockEditableObject, - mockDomainObject, - mockCache - ); - }); - - it("marks objects as dirty (in the cache) upon persist", function () { - capability.persist(); - expect(mockCache.markDirty) - .toHaveBeenCalledWith(mockEditableObject); - }); - - it("does not invoke the underlying persistence capability", function () { - capability.persist(); - expect(mockPersistence.persist).not.toHaveBeenCalled(); - }); - - it("refreshes using the original domain object's persistence", function () { - // Refreshing needs to delegate via the unwrapped domain object. - // Otherwise, only the editable version of the object will be updated; - // we instead want the real version of the object to receive these - // changes. - expect(mockDomainObject.getCapability).not.toHaveBeenCalled(); - expect(mockPersistence.refresh).not.toHaveBeenCalled(); - capability.refresh(); - expect(mockDomainObject.getCapability).toHaveBeenCalledWith('persistence'); - expect(mockPersistence.refresh).toHaveBeenCalled(); - }); - - it("returns a promise from persist", function () { - expect(capability.persist().then).toEqual(jasmine.any(Function)); - }); - - }); - } -); \ No newline at end of file diff --git a/platform/commonUI/edit/test/capabilities/EditableRelationshipCapabilitySpec.js b/platform/commonUI/edit/test/capabilities/EditableRelationshipCapabilitySpec.js deleted file mode 100644 index 9a6c17d944..0000000000 --- a/platform/commonUI/edit/test/capabilities/EditableRelationshipCapabilitySpec.js +++ /dev/null @@ -1,73 +0,0 @@ -/***************************************************************************** - * Open MCT Web, Copyright (c) 2014-2015, United States Government - * as represented by the Administrator of the National Aeronautics and Space - * Administration. All rights reserved. - * - * Open MCT Web is licensed under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * http://www.apache.org/licenses/LICENSE-2.0. - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the - * License for the specific language governing permissions and limitations - * under the License. - * - * Open MCT Web includes source code licensed under additional open source - * licenses. See the Open Source Licenses file (LICENSES.md) included with - * this source code distribution or the Licensing information page available - * at runtime from the About dialog for additional information. - *****************************************************************************/ - -define( - ["../../src/capabilities/EditableRelationshipCapability"], - function (EditableRelationshipCapability) { - - describe("An editable relationship capability", function () { - var mockContext, - mockEditableObject, - mockDomainObject, - mockTestObject, - someValue, - mockFactory, - capability; - - beforeEach(function () { - // EditableContextCapability should watch ALL - // methods for domain objects, so give it an - // arbitrary interface to wrap. - mockContext = - jasmine.createSpyObj("context", [ "getDomainObject" ]); - mockTestObject = jasmine.createSpyObj( - "domainObject", - [ "getId", "getModel", "getCapability" ] - ); - mockFactory = - jasmine.createSpyObj("factory", ["getEditableObject"]); - - someValue = { x: 42 }; - - mockContext.getDomainObject.andReturn(mockTestObject); - mockFactory.getEditableObject.andReturn(someValue); - - capability = new EditableRelationshipCapability( - mockContext, - mockEditableObject, - mockDomainObject, - mockFactory - ); - - }); - - // Most behavior is tested for EditableLookupCapability, - // so just verify that this isse - it("presumes non-idempotence of its wrapped capability", function () { - expect(capability.getDomainObject()) - .toEqual(capability.getDomainObject()); - expect(mockContext.getDomainObject.calls.length).toEqual(2); - }); - - }); - } -); \ No newline at end of file diff --git a/platform/commonUI/edit/test/objects/EditableDomainObjectCacheSpec.js b/platform/commonUI/edit/test/objects/EditableDomainObjectCacheSpec.js deleted file mode 100644 index edbfd3edc4..0000000000 --- a/platform/commonUI/edit/test/objects/EditableDomainObjectCacheSpec.js +++ /dev/null @@ -1,177 +0,0 @@ -/***************************************************************************** - * Open MCT Web, Copyright (c) 2014-2015, United States Government - * as represented by the Administrator of the National Aeronautics and Space - * Administration. All rights reserved. - * - * Open MCT Web is licensed under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * http://www.apache.org/licenses/LICENSE-2.0. - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the - * License for the specific language governing permissions and limitations - * under the License. - * - * Open MCT Web includes source code licensed under additional open source - * licenses. See the Open Source Licenses file (LICENSES.md) included with - * this source code distribution or the Licensing information page available - * at runtime from the About dialog for additional information. - *****************************************************************************/ - -define( - ["../../src/objects/EditableDomainObjectCache"], - function (EditableDomainObjectCache) { - - describe("Editable domain object cache", function () { - - var captured, - completionCapability, - mockQ, - mockType, - cache; - - - // Constructors for test objects - function TestObject(id) { - return { - getId: function () { return id; }, - getModel: function () { return {}; }, - getCapability: function (key) { - return { - editor: completionCapability, - type: mockType - }[key]; - }, - hasCapability: function () { - return false; - } - }; - } - - function WrapObject(domainObject, model) { - var result = Object.create(domainObject); - result.wrapped = true; - result.wrappedModel = model; - result.hasCapability = function (name) { - return name === 'editor'; - }; - captured.wraps = (captured.wraps || 0) + 1; - return result; - } - - beforeEach(function () { - mockQ = jasmine.createSpyObj('$q', ['when', 'all']); - mockType = jasmine.createSpyObj('type', ['hasFeature']); - mockType.hasFeature.andReturn(true); - captured = {}; - completionCapability = { - save: function () { - captured.saved = (captured.saved || 0) + 1; - } - }; - - cache = new EditableDomainObjectCache(WrapObject, mockQ); - }); - - it("wraps objects using provided constructor", function () { - var domainObject = new TestObject('test-id'), - wrappedObject = cache.getEditableObject(domainObject); - expect(wrappedObject.wrapped).toBeTruthy(); - expect(wrappedObject.getId()).toEqual(domainObject.getId()); - }); - - it("wraps objects repeatedly, wraps models once", function () { - var domainObject = new TestObject('test-id'), - wrappedObjects = []; - - // Verify precondition - expect(captured.wraps).toBeUndefined(); - - // Invoke a few more times; expect count not to increment - wrappedObjects.push(cache.getEditableObject(domainObject)); - expect(captured.wraps).toEqual(1); - wrappedObjects.push(cache.getEditableObject(domainObject)); - expect(captured.wraps).toEqual(2); - wrappedObjects.push(cache.getEditableObject(domainObject)); - expect(captured.wraps).toEqual(3); - - // Verify that the last call still gave us a wrapped object - expect(wrappedObjects[0].wrapped).toBeTruthy(); - expect(wrappedObjects[0].getId()).toEqual(domainObject.getId()); - - // Verify that objects are distinct but models are identical - expect(wrappedObjects[0].wrappedModel) - .toBe(wrappedObjects[1].wrappedModel); - expect(wrappedObjects[0]).not - .toBe(wrappedObjects[1]); - }); - - it("saves objects that have been marked dirty", function () { - var objects = ['a', 'b', 'c'].map(TestObject).map(function (domainObject) { - return cache.getEditableObject(domainObject); - }); - - cache.markDirty(objects[0]); - cache.markDirty(objects[2]); - - cache.saveAll(); - - expect(captured.saved).toEqual(2); - }); - - it("does not save objects that have been marked clean", function () { - var objects = ['a', 'b', 'c'].map(TestObject).map(function (domainObject) { - return cache.getEditableObject(domainObject); - }); - - cache.markDirty(objects[0]); - cache.markDirty(objects[2]); - cache.markClean(objects[0]); - - cache.saveAll(); - - expect(captured.saved).toEqual(1); - }); - - it("tracks the root object of the Edit mode subgraph", function () { - // Root object is the first object exposed to the cache - var domainObjects = ['a', 'b', 'c'].map(TestObject); - domainObjects.forEach(function (obj) { - cache.getEditableObject(obj); - }); - expect(cache.isRoot(domainObjects[0])).toBeTruthy(); - expect(cache.isRoot(domainObjects[1])).toBeFalsy(); - expect(cache.isRoot(domainObjects[2])).toBeFalsy(); - }); - - it("does not double-wrap objects", function () { - var domainObject = new TestObject('test-id'), - wrappedObject = cache.getEditableObject(domainObject); - - // Same instance should be returned if you try to wrap - // twice. This is necessary, since it's possible to (e.g.) - // use a context capability on an object retrieved via - // composition, in which case a result will already be - // wrapped. - expect(cache.getEditableObject(wrappedObject)) - .toBe(wrappedObject); - }); - - it("does not wrap non-editable objects", function () { - var domainObject = new TestObject('test-id'); - - mockType.hasFeature.andCallFake(function (key) { - return key !== 'creation'; - }); - - expect(cache.getEditableObject(domainObject)) - .toBe(domainObject); - }); - - - }); - } - -); diff --git a/platform/commonUI/edit/test/objects/EditableDomainObjectSpec.js b/platform/commonUI/edit/test/objects/EditableDomainObjectSpec.js deleted file mode 100644 index 9b1095f68d..0000000000 --- a/platform/commonUI/edit/test/objects/EditableDomainObjectSpec.js +++ /dev/null @@ -1,35 +0,0 @@ -/***************************************************************************** - * Open MCT Web, Copyright (c) 2014-2015, United States Government - * as represented by the Administrator of the National Aeronautics and Space - * Administration. All rights reserved. - * - * Open MCT Web is licensed under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * http://www.apache.org/licenses/LICENSE-2.0. - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the - * License for the specific language governing permissions and limitations - * under the License. - * - * Open MCT Web includes source code licensed under additional open source - * licenses. See the Open Source Licenses file (LICENSES.md) included with - * this source code distribution or the Licensing information page available - * at runtime from the About dialog for additional information. - *****************************************************************************/ - -define( - ["../../src/objects/EditableDomainObject"], - function (EditableDomainObject) { - - describe("Editable domain object", function () { - var object; - - beforeEach(function () { - object = new EditableDomainObject(); - }); - }); - } -); \ No newline at end of file diff --git a/platform/commonUI/edit/test/objects/EditableModelCacheSpec.js b/platform/commonUI/edit/test/objects/EditableModelCacheSpec.js deleted file mode 100644 index 1fe8db0262..0000000000 --- a/platform/commonUI/edit/test/objects/EditableModelCacheSpec.js +++ /dev/null @@ -1,79 +0,0 @@ -/***************************************************************************** - * Open MCT Web, Copyright (c) 2014-2015, United States Government - * as represented by the Administrator of the National Aeronautics and Space - * Administration. All rights reserved. - * - * Open MCT Web is licensed under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * http://www.apache.org/licenses/LICENSE-2.0. - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the - * License for the specific language governing permissions and limitations - * under the License. - * - * Open MCT Web includes source code licensed under additional open source - * licenses. See the Open Source Licenses file (LICENSES.md) included with - * this source code distribution or the Licensing information page available - * at runtime from the About dialog for additional information. - *****************************************************************************/ - -define( - ["../../src/objects/EditableModelCache"], - function (EditableModelCache) { - - describe("The editable model cache", function () { - var mockObject, - mockOtherObject, - testModel, - testId, - otherModel, - otherId, - cache; - - beforeEach(function () { - testId = "test"; - testModel = { someKey: "some value" }; - otherId = "other"; - otherModel = { someKey: "some other value" }; - - mockObject = jasmine.createSpyObj( - "domainObject", - [ "getId", "getModel" ] - ); - mockOtherObject = jasmine.createSpyObj( - "domainObject", - [ "getId", "getModel" ] - ); - - mockObject.getId.andReturn(testId); - mockObject.getModel.andReturn(testModel); - mockOtherObject.getId.andReturn(otherId); - mockOtherObject.getModel.andReturn(otherModel); - - cache = new EditableModelCache(); - }); - - it("provides clones of domain object models", function () { - var model = cache.getCachedModel(mockObject); - // Should be identical... - expect(model).toEqual(testModel); - // ...but not pointer-identical - expect(model).not.toBe(testModel); - }); - - it("provides only one clone per object", function () { - var model = cache.getCachedModel(mockObject); - expect(cache.getCachedModel(mockObject)).toBe(model); - }); - - it("maintains separate caches per-object", function () { - expect(cache.getCachedModel(mockObject)) - .not.toEqual(cache.getCachedModel(mockOtherObject)); - }); - }); - - } -); \ No newline at end of file diff --git a/platform/features/timeline/src/controllers/swimlane/TimelineSwimlaneDropHandler.js b/platform/features/timeline/src/controllers/swimlane/TimelineSwimlaneDropHandler.js index 59b437d15c..7195d91895 100644 --- a/platform/features/timeline/src/controllers/swimlane/TimelineSwimlaneDropHandler.js +++ b/platform/features/timeline/src/controllers/swimlane/TimelineSwimlaneDropHandler.js @@ -39,9 +39,13 @@ define( }; } - // Check if we are in edit mode - function inEditMode() { - return swimlane.domainObject.hasCapability("editor"); + // Check if we are in edit mode (also check parents) + function inEditMode(swimlane) { + if (!swimlane.domainObject.getCapability("status").get("editing") && swimlane.parent) { + return inEditMode(swimlane.parent); + } else { + return swimlane.domainObject.getCapability("status").get("editing"); + } } // Boolean and (for reduce below) @@ -173,7 +177,7 @@ define( * @returns {boolean} true if this should be allowed */ allowDropIn: function (id, domainObject) { - return inEditMode() && + return inEditMode(swimlane) && !pathContains(swimlane, id) && !contains(swimlane, id) && canDrop(swimlane.domainObject, domainObject); @@ -188,7 +192,7 @@ define( allowDropAfter: function (id, domainObject) { var target = expandedForDropInto() ? swimlane : swimlane.parent; - return inEditMode() && + return inEditMode(swimlane) && target && !pathContains(target, id) && canDrop(target.domainObject, domainObject); From 433dd87e51f53cb4adfd83e213d7265a84f69fd3 Mon Sep 17 00:00:00 2001 From: Henry Date: Thu, 12 May 2016 16:07:39 -0700 Subject: [PATCH 093/132] Resolved merge conflicts --- .../edit/src/capabilities/EditorCapability.js | 20 +++++++++++++++++-- .../edit/src/policies/EditableLinkPolicy.js | 7 ++++--- .../edit/src/policies/EditableMovePolicy.js | 4 ++-- .../edit/src/policies/EditableViewPolicy.js | 2 +- .../regions/src/InspectorController.js | 18 +++++++++++++++-- .../swimlane/TimelineSwimlaneDropHandler.js | 7 ++----- .../representation/src/MCTRepresentation.js | 19 +++++++++++++++--- .../src/gestures/DropGesture.js | 1 - 8 files changed, 59 insertions(+), 19 deletions(-) diff --git a/platform/commonUI/edit/src/capabilities/EditorCapability.js b/platform/commonUI/edit/src/capabilities/EditorCapability.js index 8f40508069..54d041aff0 100644 --- a/platform/commonUI/edit/src/capabilities/EditorCapability.js +++ b/platform/commonUI/edit/src/capabilities/EditorCapability.js @@ -39,6 +39,20 @@ define( this.domainObject.getCapability('status').set('editing', true); }; + function isEditing (domainObject) { + return domainObject.getCapability('status').get('editing') || + domainObject.hasCapability('context') && isEditing(domainObject.getCapability('context').getParent()); + } + + /** + * Determines whether this object, or any of its ancestors are + * currently being edited. + * @returns boolean + */ + EditorCapability.prototype.isEditing = function () { + return isEditing(this.domainObject); + }; + EditorCapability.prototype.save = function () { var domainObject = this.domainObject; return this.transactionService.commit().then(function() { @@ -60,8 +74,10 @@ define( return this.dirtyModelCache.isDirty(this.domainObject); }; - //TODO: add 'appliesTo'. EditorCapability should not be available - // for objects that should not be edited + EditorCapability.prototype.appliesTo = function(context) { + var domainObject = context.domainObject; + return domainObject && domainObject.getType().hasFeature("creation"); + } return EditorCapability; } diff --git a/platform/commonUI/edit/src/policies/EditableLinkPolicy.js b/platform/commonUI/edit/src/policies/EditableLinkPolicy.js index c311266cf8..1200496d35 100644 --- a/platform/commonUI/edit/src/policies/EditableLinkPolicy.js +++ b/platform/commonUI/edit/src/policies/EditableLinkPolicy.js @@ -35,11 +35,12 @@ define([], function () { } EditableLinkPolicy.prototype.allow = function (action, context) { - var key = action.getMetadata().key; + var key = action.getMetadata().key, + object; if (key === 'link') { - return !((context.selectedObject || context.domainObject) - .hasCapability('editor')); + object = context.selectedObject || context.domainObject; + return !(object.hasCapability("editor") && object.getCapability("editor").isEditing()); } // Like all policies, allow by default. diff --git a/platform/commonUI/edit/src/policies/EditableMovePolicy.js b/platform/commonUI/edit/src/policies/EditableMovePolicy.js index e89113ea60..cc95114206 100644 --- a/platform/commonUI/edit/src/policies/EditableMovePolicy.js +++ b/platform/commonUI/edit/src/policies/EditableMovePolicy.js @@ -37,8 +37,8 @@ define([], function () { selectedObject = context.selectedObject, key = action.getMetadata().key; - if (key === 'move' && domainObject.hasCapability('editor')) { - return !!selectedObject && selectedObject.hasCapability('editor'); + if (key === 'move' && domainObject.hasCapability('editor') && domainObject.getCapability('editor').isEditing()) { + return !!selectedObject && selectedObject.hasCapability('editor') && selectedObject.getCapability('editor').isEditing(); } // Like all policies, allow by default. diff --git a/platform/commonUI/edit/src/policies/EditableViewPolicy.js b/platform/commonUI/edit/src/policies/EditableViewPolicy.js index 7c9742e2d3..b4ba951bd0 100644 --- a/platform/commonUI/edit/src/policies/EditableViewPolicy.js +++ b/platform/commonUI/edit/src/policies/EditableViewPolicy.js @@ -37,7 +37,7 @@ define( // If a view is flagged as non-editable, only allow it // while we're not in Edit mode. if ((view || {}).editable === false) { - return !domainObject.hasCapability('editor'); + return !(domainObject.hasCapability('editor') && domainObject.getCapability('editor').isEditing()); } // Like all policies, allow by default. diff --git a/platform/commonUI/regions/src/InspectorController.js b/platform/commonUI/regions/src/InspectorController.js index c97b055462..3c0df1e839 100644 --- a/platform/commonUI/regions/src/InspectorController.js +++ b/platform/commonUI/regions/src/InspectorController.js @@ -32,7 +32,8 @@ define( */ function InspectorController($scope, policyService) { var domainObject = $scope.domainObject, - typeCapability = domainObject.getCapability('type'); + typeCapability = domainObject.getCapability('type'), + listener; /** * Filters region parts to only those allowed by region policies @@ -46,7 +47,20 @@ define( }); } - $scope.regions = filterRegions(typeCapability.getDefinition().inspector || new InspectorRegion()); + function setRegions() { + $scope.regions = filterRegions(typeCapability.getDefinition().inspector || new InspectorRegion()); + } + + //Listen for changes to object status that might necessitate + // recalculation of screen regions. + //listener = + // domainObject.getCapability("status").listen(setRegions); + + setRegions(); + + $scope.$on("$destroy", function() { + listener(); + }) } return InspectorController; diff --git a/platform/features/timeline/src/controllers/swimlane/TimelineSwimlaneDropHandler.js b/platform/features/timeline/src/controllers/swimlane/TimelineSwimlaneDropHandler.js index 7195d91895..f5d46fbaf7 100644 --- a/platform/features/timeline/src/controllers/swimlane/TimelineSwimlaneDropHandler.js +++ b/platform/features/timeline/src/controllers/swimlane/TimelineSwimlaneDropHandler.js @@ -41,11 +41,8 @@ define( // Check if we are in edit mode (also check parents) function inEditMode(swimlane) { - if (!swimlane.domainObject.getCapability("status").get("editing") && swimlane.parent) { - return inEditMode(swimlane.parent); - } else { - return swimlane.domainObject.getCapability("status").get("editing"); - } + return swimlane.domainObject.hasCapability('editor') && + swimlane.domainObject.getCapability('editor').isEditing(); } // Boolean and (for reduce below) diff --git a/platform/representation/src/MCTRepresentation.js b/platform/representation/src/MCTRepresentation.js index b0c0518d24..264614e5a2 100644 --- a/platform/representation/src/MCTRepresentation.js +++ b/platform/representation/src/MCTRepresentation.js @@ -53,7 +53,8 @@ define( * @param {ViewDefinition[]} views an array of view extensions */ function MCTRepresentation(representations, views, representers, $q, templateLinker, $log) { - var representationMap = {}; + var representationMap = {}, + domainObjectListener; // Assemble all representations and views // The distinction between views and representations is @@ -167,7 +168,7 @@ define( representation = lookup($scope.key, domainObject), uses = ((representation || {}).uses || []), canRepresent = !!(representation && domainObject), - canEdit = !!(domainObject && domainObject.hasCapability('editor')), + canEdit = !!(domainObject && domainObject.hasCapability('editor') && domainObject.getCapability('editor').isEditing()), idPath = getIdPath(domainObject), key = $scope.key; @@ -175,6 +176,8 @@ define( return; } + console.log("changed"); + // Create an empty object named "representation", for this // representation to store local variables into. $scope.representation = {}; @@ -237,7 +240,17 @@ define( // Also update when the represented domain object changes // (to a different object) - $scope.$watch("domainObject", refresh); + //$scope.$watch("domainObject", refresh); + + $scope.$watch("domainObject", function (domainObject) { + if (domainObjectListener) { + domainObjectListener(); + } + if (domainObject) { + domainObjectListener = domainObject.getCapability('status').listen(refresh); + } + refresh(); + }); // Finally, also update when there is a new version of that // same domain object; these changes should be tracked in the diff --git a/platform/representation/src/gestures/DropGesture.js b/platform/representation/src/gestures/DropGesture.js index c25899b9db..e323e9d4a2 100644 --- a/platform/representation/src/gestures/DropGesture.js +++ b/platform/representation/src/gestures/DropGesture.js @@ -103,7 +103,6 @@ define( // the change. if (id) { e.preventDefault(); - if (domainObjectType!=='folder') { domainObject.getCapability('action').perform('edit'); } From e6bbc3442b6e8a82cc6482d7ebd8239372e0febd Mon Sep 17 00:00:00 2001 From: Henry Date: Thu, 12 May 2016 16:09:02 -0700 Subject: [PATCH 094/132] Resolved merge conflicts --- .../representation/src/MCTRepresentation.js | 31 ++++++++++++------- 1 file changed, 20 insertions(+), 11 deletions(-) diff --git a/platform/representation/src/MCTRepresentation.js b/platform/representation/src/MCTRepresentation.js index 264614e5a2..a120507f27 100644 --- a/platform/representation/src/MCTRepresentation.js +++ b/platform/representation/src/MCTRepresentation.js @@ -54,6 +54,7 @@ define( */ function MCTRepresentation(representations, views, representers, $q, templateLinker, $log) { var representationMap = {}, + listeners = 0; domainObjectListener; // Assemble all representations and views @@ -92,6 +93,7 @@ define( couldEdit = false, lastIdPath = [], lastKey, + statusListener, changeTemplate = templateLinker.link($scope, element); // Populate scope with any capabilities indicated by the @@ -176,8 +178,6 @@ define( return; } - console.log("changed"); - // Create an empty object named "representation", for this // representation to store local variables into. $scope.representation = {}; @@ -240,16 +240,18 @@ define( // Also update when the represented domain object changes // (to a different object) - //$scope.$watch("domainObject", refresh); - - $scope.$watch("domainObject", function (domainObject) { - if (domainObjectListener) { - domainObjectListener(); + $scope.$watch("domainObject", refresh); + $scope.$watch("domainObject", function(domainObject) { + if (domainObject){ + if (statusListener) { + statusListener(); + listeners--; + console.log("directive listeners " + listeners); + } + statusListener = domainObject.getCapability("status").listen(refresh); + listeners++; + console.log("directive listeners " + listeners); } - if (domainObject) { - domainObjectListener = domainObject.getCapability('status').listen(refresh); - } - refresh(); }); // Finally, also update when there is a new version of that @@ -260,6 +262,13 @@ define( // Make sure any resources allocated by representers also get // released. $scope.$on("$destroy", destroyRepresenters); + $scope.$on("$destroy", function () { + if (statusListener) { + statusListener(); + listeners--; + console.log("directive listeners " + listeners); + } + }); // Do one initial refresh, so that we don't need another // digest iteration just to populate the scope. Failure to From 4b786d3536e7f4223fd791ab9b9652b791b4c9cb Mon Sep 17 00:00:00 2001 From: Henry Date: Mon, 18 Apr 2016 16:42:22 -0700 Subject: [PATCH 095/132] Removed sysouts --- .../regions/src/InspectorController.js | 12 +------- .../representation/src/MCTRepresentation.js | 29 +++++++++++-------- 2 files changed, 18 insertions(+), 23 deletions(-) diff --git a/platform/commonUI/regions/src/InspectorController.js b/platform/commonUI/regions/src/InspectorController.js index 3c0df1e839..32b0e1903d 100644 --- a/platform/commonUI/regions/src/InspectorController.js +++ b/platform/commonUI/regions/src/InspectorController.js @@ -32,8 +32,7 @@ define( */ function InspectorController($scope, policyService) { var domainObject = $scope.domainObject, - typeCapability = domainObject.getCapability('type'), - listener; + typeCapability = domainObject.getCapability('type'); /** * Filters region parts to only those allowed by region policies @@ -51,16 +50,7 @@ define( $scope.regions = filterRegions(typeCapability.getDefinition().inspector || new InspectorRegion()); } - //Listen for changes to object status that might necessitate - // recalculation of screen regions. - //listener = - // domainObject.getCapability("status").listen(setRegions); - setRegions(); - - $scope.$on("$destroy", function() { - listener(); - }) } return InspectorController; diff --git a/platform/representation/src/MCTRepresentation.js b/platform/representation/src/MCTRepresentation.js index a120507f27..4283a30a4a 100644 --- a/platform/representation/src/MCTRepresentation.js +++ b/platform/representation/src/MCTRepresentation.js @@ -241,18 +241,25 @@ define( // Also update when the represented domain object changes // (to a different object) $scope.$watch("domainObject", refresh); - $scope.$watch("domainObject", function(domainObject) { - if (domainObject){ - if (statusListener) { - statusListener(); - listeners--; - console.log("directive listeners " + listeners); - } - statusListener = domainObject.getCapability("status").listen(refresh); - listeners++; - console.log("directive listeners " + listeners); + + function listenForStatusChange(object) { + if (statusListener) { + statusListener(); + } + statusListener = object.getCapability("status").listen(refresh); + } + + /** + * Add a listener for status changes to the object itself. + */ + $scope.$watch("domainObject", function(domainObject, oldDomainObject) { + if (domainObject!==oldDomainObject){ + listenForStatusChange(domainObject); } }); + if ($scope.domainObject) { + listenForStatusChange($scope.domainObject); + } // Finally, also update when there is a new version of that // same domain object; these changes should be tracked in the @@ -265,8 +272,6 @@ define( $scope.$on("$destroy", function () { if (statusListener) { statusListener(); - listeners--; - console.log("directive listeners " + listeners); } }); From d00e13e4eed46ca8e231698af8a3efd97f7c9930 Mon Sep 17 00:00:00 2001 From: Henry Date: Thu, 12 May 2016 16:09:53 -0700 Subject: [PATCH 096/132] Resolved merge conflicts --- platform/commonUI/edit/src/actions/SaveAsAction.js | 1 + platform/commonUI/edit/src/capabilities/EditorCapability.js | 2 +- platform/commonUI/edit/src/policies/EditActionPolicy.js | 5 ++--- platform/commonUI/edit/src/policies/EditableLinkPolicy.js | 2 +- platform/commonUI/edit/src/policies/EditableMovePolicy.js | 4 ++-- platform/commonUI/edit/src/policies/EditableViewPolicy.js | 2 +- .../src/controllers/swimlane/TimelineSwimlaneDropHandler.js | 2 +- platform/representation/src/MCTRepresentation.js | 2 +- 8 files changed, 10 insertions(+), 10 deletions(-) diff --git a/platform/commonUI/edit/src/actions/SaveAsAction.js b/platform/commonUI/edit/src/actions/SaveAsAction.js index 7e52a3f486..6d73b75308 100644 --- a/platform/commonUI/edit/src/actions/SaveAsAction.js +++ b/platform/commonUI/edit/src/actions/SaveAsAction.js @@ -158,6 +158,7 @@ define( var domainObject = (context || {}).domainObject; return domainObject !== undefined && domainObject.hasCapability("editor") && + domainObject.getCapability("editor").inEditContext() && domainObject.getModel().persisted === undefined; }; diff --git a/platform/commonUI/edit/src/capabilities/EditorCapability.js b/platform/commonUI/edit/src/capabilities/EditorCapability.js index 54d041aff0..2091f3b9b3 100644 --- a/platform/commonUI/edit/src/capabilities/EditorCapability.js +++ b/platform/commonUI/edit/src/capabilities/EditorCapability.js @@ -49,7 +49,7 @@ define( * currently being edited. * @returns boolean */ - EditorCapability.prototype.isEditing = function () { + EditorCapability.prototype.inEditContext = function () { return isEditing(this.domainObject); }; diff --git a/platform/commonUI/edit/src/policies/EditActionPolicy.js b/platform/commonUI/edit/src/policies/EditActionPolicy.js index 0e5af528e7..2952758840 100644 --- a/platform/commonUI/edit/src/policies/EditActionPolicy.js +++ b/platform/commonUI/edit/src/policies/EditActionPolicy.js @@ -72,9 +72,8 @@ define( */ function isEditing(context) { var domainObject = (context || {}).domainObject; - return domainObject && - domainObject.hasCapability('status') && - domainObject.getCapability('status').get('editing'); + return domainObject + && domainObject.getCapability('status').get('editing'); } EditActionPolicy.prototype.allow = function (action, context) { diff --git a/platform/commonUI/edit/src/policies/EditableLinkPolicy.js b/platform/commonUI/edit/src/policies/EditableLinkPolicy.js index 1200496d35..c6a2a36290 100644 --- a/platform/commonUI/edit/src/policies/EditableLinkPolicy.js +++ b/platform/commonUI/edit/src/policies/EditableLinkPolicy.js @@ -40,7 +40,7 @@ define([], function () { if (key === 'link') { object = context.selectedObject || context.domainObject; - return !(object.hasCapability("editor") && object.getCapability("editor").isEditing()); + return !(object.hasCapability("editor") && object.getCapability("editor").inEditContext()); } // Like all policies, allow by default. diff --git a/platform/commonUI/edit/src/policies/EditableMovePolicy.js b/platform/commonUI/edit/src/policies/EditableMovePolicy.js index cc95114206..4974e0c60d 100644 --- a/platform/commonUI/edit/src/policies/EditableMovePolicy.js +++ b/platform/commonUI/edit/src/policies/EditableMovePolicy.js @@ -37,8 +37,8 @@ define([], function () { selectedObject = context.selectedObject, key = action.getMetadata().key; - if (key === 'move' && domainObject.hasCapability('editor') && domainObject.getCapability('editor').isEditing()) { - return !!selectedObject && selectedObject.hasCapability('editor') && selectedObject.getCapability('editor').isEditing(); + if (key === 'move' && domainObject.hasCapability('editor') && domainObject.getCapability('editor').inEditContext()) { + return !!selectedObject && selectedObject.hasCapability('editor') && selectedObject.getCapability('editor').inEditContext(); } // Like all policies, allow by default. diff --git a/platform/commonUI/edit/src/policies/EditableViewPolicy.js b/platform/commonUI/edit/src/policies/EditableViewPolicy.js index b4ba951bd0..23de491def 100644 --- a/platform/commonUI/edit/src/policies/EditableViewPolicy.js +++ b/platform/commonUI/edit/src/policies/EditableViewPolicy.js @@ -37,7 +37,7 @@ define( // If a view is flagged as non-editable, only allow it // while we're not in Edit mode. if ((view || {}).editable === false) { - return !(domainObject.hasCapability('editor') && domainObject.getCapability('editor').isEditing()); + return !(domainObject.hasCapability('editor') && domainObject.getCapability('status').get('editing')); } // Like all policies, allow by default. diff --git a/platform/features/timeline/src/controllers/swimlane/TimelineSwimlaneDropHandler.js b/platform/features/timeline/src/controllers/swimlane/TimelineSwimlaneDropHandler.js index f5d46fbaf7..620e70e3e1 100644 --- a/platform/features/timeline/src/controllers/swimlane/TimelineSwimlaneDropHandler.js +++ b/platform/features/timeline/src/controllers/swimlane/TimelineSwimlaneDropHandler.js @@ -42,7 +42,7 @@ define( // Check if we are in edit mode (also check parents) function inEditMode(swimlane) { return swimlane.domainObject.hasCapability('editor') && - swimlane.domainObject.getCapability('editor').isEditing(); + swimlane.domainObject.getCapability('editor').inEditContext(); } // Boolean and (for reduce below) diff --git a/platform/representation/src/MCTRepresentation.js b/platform/representation/src/MCTRepresentation.js index 4283a30a4a..06f7220fd9 100644 --- a/platform/representation/src/MCTRepresentation.js +++ b/platform/representation/src/MCTRepresentation.js @@ -170,7 +170,7 @@ define( representation = lookup($scope.key, domainObject), uses = ((representation || {}).uses || []), canRepresent = !!(representation && domainObject), - canEdit = !!(domainObject && domainObject.hasCapability('editor') && domainObject.getCapability('editor').isEditing()), + canEdit = !!(domainObject && domainObject.hasCapability('editor') && domainObject.getCapability('editor').inEditContext()), idPath = getIdPath(domainObject), key = $scope.key; From 1753a5473cf8508eca8c695a53dbdc2f55748f03 Mon Sep 17 00:00:00 2001 From: Henry Date: Thu, 12 May 2016 16:11:52 -0700 Subject: [PATCH 097/132] Resolved merge conflicts --- .../src/policies/EditContextualActionPolicy.js | 17 +++++++---------- 1 file changed, 7 insertions(+), 10 deletions(-) diff --git a/platform/commonUI/edit/src/policies/EditContextualActionPolicy.js b/platform/commonUI/edit/src/policies/EditContextualActionPolicy.js index 32a24050e0..b5853bd89c 100644 --- a/platform/commonUI/edit/src/policies/EditContextualActionPolicy.js +++ b/platform/commonUI/edit/src/policies/EditContextualActionPolicy.js @@ -34,6 +34,7 @@ define( * from context menu of non-editable objects, when navigated object * is being edited * @constructor + * @implements {Policy.} */ function EditContextualActionPolicy(navigationService, editModeBlacklist, nonEditContextBlacklist) { this.navigationService = navigationService; @@ -45,22 +46,18 @@ define( this.nonEditContextBlacklist = nonEditContextBlacklist; } - function isParentEditable(object) { - var parent = object.hasCapability("context") && object.getCapability("context").getParent(); - return !!parent && parent.hasCapability("editor"); - } - EditContextualActionPolicy.prototype.allow = function (action, context) { var selectedObject = context.domainObject, navigatedObject = this.navigationService.getNavigation(), actionMetadata = action.getMetadata ? action.getMetadata() : {}; - if (navigatedObject.hasCapability('editor')) { - if (selectedObject.hasCapability('editor') || isParentEditable(selectedObject)){ - return this.editModeBlacklist.indexOf(actionMetadata.key) === -1; + if (navigatedObject.getCapability("status").get("editing")) { + if (selectedObject.hasCapability("editor") && selectedObject.getCapability("editor").inEditContext()){ + //Target is within the editing context + return this.editBlacklist.indexOf(actionMetadata.key) === -1; } else { - //Target is in the context menu - return this.nonEditContextBlacklist.indexOf(actionMetadata.key) === -1; + //Target is not within the editing context + return this.nonEditBlacklist.indexOf(actionMetadata.key) === -1; } } else { return true; From 836b5db8cf7056742c049d5ee99945ebfa28d6c1 Mon Sep 17 00:00:00 2001 From: Henry Date: Wed, 20 Apr 2016 13:11:07 -0700 Subject: [PATCH 098/132] Reviewed edit mode checking --- platform/commonUI/edit/src/actions/EditAction.js | 5 ++--- platform/commonUI/edit/src/policies/EditableViewPolicy.js | 2 +- .../timeline/src/controllers/TimelineZoomController.js | 3 ++- 3 files changed, 5 insertions(+), 5 deletions(-) diff --git a/platform/commonUI/edit/src/actions/EditAction.js b/platform/commonUI/edit/src/actions/EditAction.js index 5931a02a52..229861d1d9 100644 --- a/platform/commonUI/edit/src/actions/EditAction.js +++ b/platform/commonUI/edit/src/actions/EditAction.js @@ -87,11 +87,10 @@ define( */ EditAction.appliesTo = function (context) { var domainObject = (context || {}).domainObject, - type = domainObject && domainObject.getCapability('type'), - isEditMode = domainObject && domainObject.getDomainObject ? true : false; + type = domainObject && domainObject.getCapability('type'); // Only allow creatable types to be edited - return type && type.hasFeature('creation') && !isEditMode; + return type && type.hasFeature('creation') && !domainObject.getCapability('status').get('editing'); }; return EditAction; diff --git a/platform/commonUI/edit/src/policies/EditableViewPolicy.js b/platform/commonUI/edit/src/policies/EditableViewPolicy.js index 23de491def..312bafff05 100644 --- a/platform/commonUI/edit/src/policies/EditableViewPolicy.js +++ b/platform/commonUI/edit/src/policies/EditableViewPolicy.js @@ -37,7 +37,7 @@ define( // If a view is flagged as non-editable, only allow it // while we're not in Edit mode. if ((view || {}).editable === false) { - return !(domainObject.hasCapability('editor') && domainObject.getCapability('status').get('editing')); + return !(domainObject.hasCapability('editor') && domainObject.getCapability('editor').inEditContext()); } // Like all policies, allow by default. diff --git a/platform/features/timeline/src/controllers/TimelineZoomController.js b/platform/features/timeline/src/controllers/TimelineZoomController.js index 1488d44aeb..43abb8419c 100644 --- a/platform/features/timeline/src/controllers/TimelineZoomController.js +++ b/platform/features/timeline/src/controllers/TimelineZoomController.js @@ -57,7 +57,8 @@ define( function storeZoom() { var isEditMode = $scope.commit && $scope.domainObject && - $scope.domainObject.hasCapability('editor'); + $scope.domainObject.hasCapability('editor') && + $scope.domainObject.getCapability('editor').inEditContext(); if (isEditMode) { $scope.configuration = $scope.configuration || {}; $scope.configuration.zoomLevel = zoomIndex; From 5bf750c90c1931cc3c3aca31c95431e0cf3b5bc4 Mon Sep 17 00:00:00 2001 From: Henry Date: Wed, 20 Apr 2016 17:43:26 -0700 Subject: [PATCH 099/132] Fixed creation --- platform/commonUI/browse/src/creation/CreateAction.js | 11 +++++++++-- platform/commonUI/edit/src/actions/SaveAction.js | 2 +- platform/commonUI/edit/src/actions/SaveAsAction.js | 3 +-- 3 files changed, 11 insertions(+), 5 deletions(-) diff --git a/platform/commonUI/browse/src/creation/CreateAction.js b/platform/commonUI/browse/src/creation/CreateAction.js index e9029c4aa3..d294814304 100644 --- a/platform/commonUI/browse/src/creation/CreateAction.js +++ b/platform/commonUI/browse/src/creation/CreateAction.js @@ -83,6 +83,7 @@ define( CreateAction.prototype.perform = function () { var newModel = this.type.getInitialModel(), parentObject = this.navigationService.getNavigation(), + editorCapability, newObject; newModel.type = this.type.getKey(); @@ -90,12 +91,18 @@ define( newObject.useCapability('mutation', function(model){ model.location = parentObject.getId(); }); + editorCapability = newObject.getCapability("editor"); if (countEditableViews(newObject) > 0 && newObject.hasCapability('composition')) { this.navigationService.setNavigation(newObject); - newObject.getCapability("action").perform("edit"); + return newObject.getCapability("action").perform("edit"); } else { - return newObject.getCapability('action').perform('save'); + editorCapability.edit(); + return newObject.useCapability("action").perform("save").then(function () { + return editorCapability.save(); + }, function () { + return editorCapability.cancel() + }); } }; diff --git a/platform/commonUI/edit/src/actions/SaveAction.js b/platform/commonUI/edit/src/actions/SaveAction.js index cf8675682e..fbd5e51e3f 100644 --- a/platform/commonUI/edit/src/actions/SaveAction.js +++ b/platform/commonUI/edit/src/actions/SaveAction.js @@ -60,7 +60,7 @@ define( // during editing. function doSave() { return domainObject.getCapability("editor").save() - .then(resolveWith(domainObject.getOriginalObject())); + .then(resolveWith(domainObject)); } // Discard the current root view (which will be the editing diff --git a/platform/commonUI/edit/src/actions/SaveAsAction.js b/platform/commonUI/edit/src/actions/SaveAsAction.js index 6d73b75308..2f609cfd42 100644 --- a/platform/commonUI/edit/src/actions/SaveAsAction.js +++ b/platform/commonUI/edit/src/actions/SaveAsAction.js @@ -157,8 +157,7 @@ define( SaveAsAction.appliesTo = function (context) { var domainObject = (context || {}).domainObject; return domainObject !== undefined && - domainObject.hasCapability("editor") && - domainObject.getCapability("editor").inEditContext() && + domainObject.getCapability("status").get("editing") && domainObject.getModel().persisted === undefined; }; From 44f4a82fa1133e58271cfb4d7b0d79fab4db1ad0 Mon Sep 17 00:00:00 2001 From: Henry Date: Thu, 12 May 2016 16:14:31 -0700 Subject: [PATCH 100/132] Resolved merge conflicts --- .../browse/src/creation/CreateAction.js | 7 +- platform/commonUI/edit/bundle.js | 27 +-- .../commonUI/edit/src/actions/CancelAction.js | 20 +- .../commonUI/edit/src/actions/EditAction.js | 10 +- .../commonUI/edit/src/actions/SaveAction.js | 5 +- .../commonUI/edit/src/actions/SaveAsAction.js | 9 +- .../edit/src/capabilities/EditorCapability.js | 56 +++++- ...r.js => TransactionCapabilityDecorator.js} | 20 +- .../TransactionalPersistenceCapability.js | 47 +++-- .../edit/src/policies/EditActionPolicy.js | 3 +- .../policies/EditContextualActionPolicy.js | 7 +- .../edit/src/policies/EditNavigationPolicy.js | 9 +- .../edit/src/policies/EditableMovePolicy.js | 9 +- .../edit/src/representers/EditRepresenter.js | 2 +- .../edit/src/services/DirtyModelCache.js | 47 ----- .../edit/src/services/TransactionService.js | 118 +++++++----- .../edit/test/actions/EditActionSpec.js | 69 ++++--- .../edit/test/actions/SaveActionSpec.js | 11 +- .../edit/test/actions/SaveAsActionSpec.js | 3 +- .../test/capabilities/EditorCapabilitySpec.js | 180 ++++++++++++------ .../TransactionCapabilityDecoratorSpec.js | 59 ++++++ .../TransactionalPersistenceCapabilitySpec.js | 92 +++++++++ .../test/policies/EditActionPolicySpec.js | 9 +- .../EditContextualActionPolicySpec.js | 14 +- .../test/policies/EditableViewPolicySpec.js | 7 +- .../test/representers/EditRepresenterSpec.js | 11 +- .../test/services/TransactionServiceSpec.js | 127 ++++++++++++ .../regions/src/EditableRegionPolicy.js | 2 +- .../regions/test/EditableRegionPolicySpec.js | 19 +- .../capabilities/PersistenceCapabilitySpec.js | 12 -- .../swimlane/TimelineSwimlaneDropHandler.js | 6 +- .../controllers/TimelineZoomControllerSpec.js | 9 +- .../TimelineSwimlaneDropHandlerSpec.js | 15 +- .../representation/src/MCTRepresentation.js | 10 +- .../src/gestures/DropGesture.js | 11 +- .../test/MCTRepresentationSpec.js | 7 + .../src/services/GenericSearchProvider.js | 4 +- 37 files changed, 741 insertions(+), 332 deletions(-) rename platform/commonUI/edit/src/capabilities/{TransactionDecorator.js => TransactionCapabilityDecorator.js} (80%) delete mode 100644 platform/commonUI/edit/src/services/DirtyModelCache.js create mode 100644 platform/commonUI/edit/test/capabilities/TransactionCapabilityDecoratorSpec.js create mode 100644 platform/commonUI/edit/test/capabilities/TransactionalPersistenceCapabilitySpec.js create mode 100644 platform/commonUI/edit/test/services/TransactionServiceSpec.js diff --git a/platform/commonUI/browse/src/creation/CreateAction.js b/platform/commonUI/browse/src/creation/CreateAction.js index d294814304..9ac86d2dc8 100644 --- a/platform/commonUI/browse/src/creation/CreateAction.js +++ b/platform/commonUI/browse/src/creation/CreateAction.js @@ -87,10 +87,9 @@ define( newObject; newModel.type = this.type.getKey(); + newModel.location = parentObject.getId(); newObject = parentObject.useCapability('instantiation', newModel); - newObject.useCapability('mutation', function(model){ - model.location = parentObject.getId(); - }); + editorCapability = newObject.getCapability("editor"); if (countEditableViews(newObject) > 0 && newObject.hasCapability('composition')) { @@ -101,7 +100,7 @@ define( return newObject.useCapability("action").perform("save").then(function () { return editorCapability.save(); }, function () { - return editorCapability.cancel() + return editorCapability.cancel(); }); } }; diff --git a/platform/commonUI/edit/bundle.js b/platform/commonUI/edit/bundle.js index 35818bd477..5a5101f129 100644 --- a/platform/commonUI/edit/bundle.js +++ b/platform/commonUI/edit/bundle.js @@ -41,9 +41,8 @@ define([ "./src/representers/EditRepresenter", "./src/representers/EditToolbarRepresenter", "./src/capabilities/EditorCapability", - "./src/capabilities/TransactionDecorator", + "./src/capabilities/TransactionCapabilityDecorator", "./src/services/TransactionService", - "./src/services/DirtyModelCache", "text!./res/templates/library.html", "text!./res/templates/edit-object.html", "text!./res/templates/edit-action-buttons.html", @@ -71,9 +70,8 @@ define([ EditRepresenter, EditToolbarRepresenter, EditorCapability, - TransactionDecorator, + TransactionCapabilityDecorator, TransactionService, - DirtyModelCache, libraryTemplate, editObjectTemplate, editActionButtonsTemplate, @@ -136,8 +134,7 @@ define([ "depends": [ "$location", "navigationService", - "$log", - "$q" + "$log" ], "description": "Edit this object.", "category": "view-control", @@ -270,11 +267,10 @@ define([ { "type": "decorator", "provides": "capabilityService", - "implementation": TransactionDecorator, + "implementation": TransactionCapabilityDecorator, "depends": [ "$q", - "transactionService", - "dirtyModelCache" + "transactionService" ] }, { @@ -283,15 +279,7 @@ define([ "implementation": TransactionService, "depends": [ "$q", - "dirtyModelCache" - ] - }, - { - "type": "provider", - "provides": "dirtyModelCache", - "implementation": DirtyModelCache, - "depends": [ - "topic" + "$log" ] } ], @@ -324,8 +312,7 @@ define([ "description": "Provides transactional editing capabilities", "implementation": EditorCapability, "depends": [ - "transactionService", - "dirtyModelCache" + "transactionService" ] } ], diff --git a/platform/commonUI/edit/src/actions/CancelAction.js b/platform/commonUI/edit/src/actions/CancelAction.js index 550516360a..77013ee8f5 100644 --- a/platform/commonUI/edit/src/actions/CancelAction.js +++ b/platform/commonUI/edit/src/actions/CancelAction.js @@ -46,10 +46,19 @@ define( function returnToBrowse () { var parent; - domainObject.getCapability("location").getOriginal().then(function (original) { - parent = original.getCapability("context").getParent(); - parent.getCapability("action").perform("navigate"); - }); + + //If the object existed already, navigate to refresh view + // with previous object state. + if (domainObject.getModel().persisted) { + domainObject.getCapability("action").perform("navigate"); + } else { + //If the object was new, and user has cancelled, then + //navigate back to parent because nothing to show. + domainObject.getCapability("location").getOriginal().then(function (original) { + parent = original.getCapability("context").getParent(); + parent.getCapability("action").perform("navigate"); + }); + } } return this.domainObject.getCapability("editor").cancel() .then(returnToBrowse); @@ -64,7 +73,8 @@ define( CancelAction.appliesTo = function (context) { var domainObject = (context || {}).domainObject; return domainObject !== undefined && - domainObject.getCapability("status").get("editing"); + domainObject.hasCapability('editor') && + domainObject.getCapability('editor').isEditContextRoot(); }; return CancelAction; diff --git a/platform/commonUI/edit/src/actions/EditAction.js b/platform/commonUI/edit/src/actions/EditAction.js index 229861d1d9..acb83c0407 100644 --- a/platform/commonUI/edit/src/actions/EditAction.js +++ b/platform/commonUI/edit/src/actions/EditAction.js @@ -44,7 +44,7 @@ define( * @constructor * @implements {Action} */ - function EditAction($location, navigationService, $log, $q, context) { + function EditAction($location, navigationService, $log, context) { var domainObject = (context || {}).domainObject; // We cannot enter Edit mode if we have no domain object to @@ -63,7 +63,6 @@ define( this.domainObject = domainObject; this.$location = $location; this.navigationService = navigationService; - this.$q = $q; } /** @@ -89,8 +88,11 @@ define( var domainObject = (context || {}).domainObject, type = domainObject && domainObject.getCapability('type'); - // Only allow creatable types to be edited - return type && type.hasFeature('creation') && !domainObject.getCapability('status').get('editing'); + // Only allow editing of types that support it and are not already + // being edited + return type && type.hasFeature('creation') && + domainObject.hasCapability('editor') && + !domainObject.getCapability('editor').isEditContextRoot(); }; return EditAction; diff --git a/platform/commonUI/edit/src/actions/SaveAction.js b/platform/commonUI/edit/src/actions/SaveAction.js index fbd5e51e3f..3879685b9f 100644 --- a/platform/commonUI/edit/src/actions/SaveAction.js +++ b/platform/commonUI/edit/src/actions/SaveAction.js @@ -85,8 +85,9 @@ define( SaveAction.appliesTo = function (context) { var domainObject = (context || {}).domainObject; return domainObject !== undefined && - domainObject.getModel().persisted !== undefined && - domainObject.getCapability("status").get("editing"); + domainObject.hasCapability('editor') && + domainObject.getCapability('editor').isEditContextRoot() && + domainObject.getModel().persisted !== undefined; }; return SaveAction; diff --git a/platform/commonUI/edit/src/actions/SaveAsAction.js b/platform/commonUI/edit/src/actions/SaveAsAction.js index 2f609cfd42..f347cad899 100644 --- a/platform/commonUI/edit/src/actions/SaveAsAction.js +++ b/platform/commonUI/edit/src/actions/SaveAsAction.js @@ -135,8 +135,8 @@ define( return copyService.perform(domainObject, parent, allowClone); } - function cancelEditingAfterClone(clonedObject) { - return domainObject.getCapability("editor").cancel() + function commitEditingAfterClone(clonedObject) { + return domainObject.getCapability("editor").save() .then(resolveWith(clonedObject)); } @@ -144,7 +144,7 @@ define( .then(doWizardSave) .then(getParent) .then(cloneIntoParent) - .then(cancelEditingAfterClone) + .then(commitEditingAfterClone) .catch(resolveWith(false)); }; @@ -157,7 +157,8 @@ define( SaveAsAction.appliesTo = function (context) { var domainObject = (context || {}).domainObject; return domainObject !== undefined && - domainObject.getCapability("status").get("editing") && + domainObject.hasCapability('editor') && + domainObject.getCapability('editor').isEditContextRoot() && domainObject.getModel().persisted === undefined; }; diff --git a/platform/commonUI/edit/src/capabilities/EditorCapability.js b/platform/commonUI/edit/src/capabilities/EditorCapability.js index 2091f3b9b3..df305de73c 100644 --- a/platform/commonUI/edit/src/capabilities/EditorCapability.js +++ b/platform/commonUI/edit/src/capabilities/EditorCapability.js @@ -24,24 +24,42 @@ define( [], function () { + /** + * A capability that implements an editing 'session' for a domain + * object. An editing session is initiated via a call to .edit(). + * Once initiated, any persist operations will be queued pending a + * subsequent call to [.save()](@link #save) or [.cancel()](@link + * #cancel). + * @param transactionService + * @param domainObject + * @constructor + */ function EditorCapability( transactionService, - dirtyModelCache, domainObject ) { this.transactionService = transactionService; - this.dirtyModelCache = dirtyModelCache; this.domainObject = domainObject; } + /** + * Initiate an editing session. This will start a transaction during + * which any persist operations will be deferred until either save() + * or cancel() are called. + */ EditorCapability.prototype.edit = function () { this.transactionService.startTransaction(); this.domainObject.getCapability('status').set('editing', true); }; + function isEditContextRoot (domainObject) { + return domainObject.getCapability('status').get('editing'); + } + function isEditing (domainObject) { - return domainObject.getCapability('status').get('editing') || - domainObject.hasCapability('context') && isEditing(domainObject.getCapability('context').getParent()); + return isEditContextRoot(domainObject) || + domainObject.hasCapability('context') && + isEditing(domainObject.getCapability('context').getParent()); } /** @@ -53,6 +71,20 @@ define( return isEditing(this.domainObject); }; + /** + * Is this the root editing object (ie. the object that the user + * clicked 'edit' on)? + * @returns {*} + */ + EditorCapability.prototype.isEditContextRoot = function () { + return isEditContextRoot(this.domainObject); + }; + + /** + * Save any changes from this editing session. This will flush all + * pending persists and end the current transaction + * @returns {*} + */ EditorCapability.prototype.save = function () { var domainObject = this.domainObject; return this.transactionService.commit().then(function() { @@ -62,6 +94,11 @@ define( EditorCapability.prototype.invoke = EditorCapability.prototype.edit; + /** + * Cancel the current editing session. This will discard any pending + * persist operations + * @returns {*} + */ EditorCapability.prototype.cancel = function () { var domainObject = this.domainObject; return this.transactionService.cancel().then(function(){ @@ -70,15 +107,14 @@ define( }); }; + /** + * @returns {boolean} true if there have been any domain model + * modifications since the last persist, false otherwise. + */ EditorCapability.prototype.dirty = function () { - return this.dirtyModelCache.isDirty(this.domainObject); + return (this.domainObject.getModel().modified || 0) > (this.domainObject.getModel().persisted || 0); }; - EditorCapability.prototype.appliesTo = function(context) { - var domainObject = context.domainObject; - return domainObject && domainObject.getType().hasFeature("creation"); - } - return EditorCapability; } ); diff --git a/platform/commonUI/edit/src/capabilities/TransactionDecorator.js b/platform/commonUI/edit/src/capabilities/TransactionCapabilityDecorator.js similarity index 80% rename from platform/commonUI/edit/src/capabilities/TransactionDecorator.js rename to platform/commonUI/edit/src/capabilities/TransactionCapabilityDecorator.js index 6121ed6faa..44d2b1ed53 100644 --- a/platform/commonUI/edit/src/capabilities/TransactionDecorator.js +++ b/platform/commonUI/edit/src/capabilities/TransactionCapabilityDecorator.js @@ -26,23 +26,30 @@ define( function (TransactionalPersistenceCapability) { 'use strict'; - function TransactionDecorator( + /** + * Wraps the [PersistenceCapability]{@link PersistenceCapability} with + * transactional capabilities. + * @param $q + * @param transactionService + * @param capabilityService + * @see TransactionalPersistenceCapability + * @constructor + */ + function TransactionCapabilityDecorator( $q, transactionService, - dirtyModelCache, capabilityService ) { this.capabilityService = capabilityService; this.transactionService = transactionService; - this.dirtyModelCache = dirtyModelCache; this.$q = $q; } /** - * Decorate PersistenceCapability to ignore persistence calls when a + * Decorate PersistenceCapability to queue persistence calls when a * transaction is in progress. */ - TransactionDecorator.prototype.getCapabilities = function (model) { + TransactionCapabilityDecorator.prototype.getCapabilities = function (model) { var self = this, capabilities = this.capabilityService.getCapabilities(model), persistenceCapability = capabilities.persistence; @@ -55,7 +62,6 @@ define( return new TransactionalPersistenceCapability( self.$q, self.transactionService, - self.dirtyModelCache, original, domainObject ); @@ -63,6 +69,6 @@ define( return capabilities; }; - return TransactionDecorator; + return TransactionCapabilityDecorator; } ); diff --git a/platform/commonUI/edit/src/capabilities/TransactionalPersistenceCapability.js b/platform/commonUI/edit/src/capabilities/TransactionalPersistenceCapability.js index b282c40e1f..0c6420d484 100644 --- a/platform/commonUI/edit/src/capabilities/TransactionalPersistenceCapability.js +++ b/platform/commonUI/edit/src/capabilities/TransactionalPersistenceCapability.js @@ -26,44 +26,51 @@ define( function () { 'use strict'; + /** + * Wraps persistence capability to enable transactions. Transactions + * will cause persist calls not to be invoked immediately, but + * rather queued until [EditorCapability.save()]{@link EditorCapability#save} + * or [EditorCapability.cancel()]{@link EditorCapability#cancel} are + * called. + * @memberof platform/commonUI/edit/capabilities + * @param $q + * @param transactionService + * @param persistenceCapability + * @param domainObject + * @constructor + */ function TransactionalPersistenceCapability( $q, transactionService, - dirtyModelCache, persistenceCapability, domainObject ) { this.transactionService = transactionService; - this.dirtyModelCache = dirtyModelCache; - this.persistenceCapability = Object.create(persistenceCapability); + this.persistenceCapability = persistenceCapability; this.domainObject = domainObject; this.$q = $q; } + /** + * The wrapped persist function. If a transaction is active, persist + * will be queued until the transaction is committed or cancelled. + * @returns {*} + */ TransactionalPersistenceCapability.prototype.persist = function () { - var domainObject = this.domainObject, - dirtyModelCache = this.dirtyModelCache; - if (this.transactionService.isActive() && !this.transactionService.isCommitting()) { - dirtyModelCache.markDirty(domainObject); - //Using $q here because need to return something - // from which 'catch' can be chained + if (this.transactionService.isActive()) { + this.transactionService.addToTransaction( + this.persistenceCapability.persist.bind(this.persistenceCapability), + this.persistenceCapability.refresh.bind(this.persistenceCapability) + ); + //Need to return a promise from this function return this.$q.when(true); } else { - return this.persistenceCapability.persist().then(function (result) { - dirtyModelCache.markClean(domainObject); - return result; - }); + return this.persistenceCapability.persist(); } }; TransactionalPersistenceCapability.prototype.refresh = function () { - var domainObject = this.domainObject, - dirtyModelCache = this.dirtyModelCache; - - return this.persistenceCapability.refresh().then(function (result) { - dirtyModelCache.markClean(domainObject); - return result; - }); + return this.persistenceCapability.refresh(); }; TransactionalPersistenceCapability.prototype.getSpace = function () { diff --git a/platform/commonUI/edit/src/policies/EditActionPolicy.js b/platform/commonUI/edit/src/policies/EditActionPolicy.js index 2952758840..78f2c54cb0 100644 --- a/platform/commonUI/edit/src/policies/EditActionPolicy.js +++ b/platform/commonUI/edit/src/policies/EditActionPolicy.js @@ -73,7 +73,8 @@ define( function isEditing(context) { var domainObject = (context || {}).domainObject; return domainObject - && domainObject.getCapability('status').get('editing'); + && domainObject.hasCapability('editor') + && domainObject.getCapability('editor').isEditContextRoot(); } EditActionPolicy.prototype.allow = function (action, context) { diff --git a/platform/commonUI/edit/src/policies/EditContextualActionPolicy.js b/platform/commonUI/edit/src/policies/EditContextualActionPolicy.js index b5853bd89c..afccf5a121 100644 --- a/platform/commonUI/edit/src/policies/EditContextualActionPolicy.js +++ b/platform/commonUI/edit/src/policies/EditContextualActionPolicy.js @@ -34,6 +34,11 @@ define( * from context menu of non-editable objects, when navigated object * is being edited * @constructor + * @param navigationService + * @param editModeBlacklist A blacklist of actions disallowed from + * context menu when navigated object is being edited + * @param nonEditContextBlacklist A blacklist of actions disallowed + * from context menu of non-editable objects, when navigated object * @implements {Policy.} */ function EditContextualActionPolicy(navigationService, editModeBlacklist, nonEditContextBlacklist) { @@ -51,7 +56,7 @@ define( navigatedObject = this.navigationService.getNavigation(), actionMetadata = action.getMetadata ? action.getMetadata() : {}; - if (navigatedObject.getCapability("status").get("editing")) { + if (navigatedObject.hasCapability("editor") && navigatedObject.getCapability("editor").isEditContextRoot()) { if (selectedObject.hasCapability("editor") && selectedObject.getCapability("editor").inEditContext()){ //Target is within the editing context return this.editBlacklist.indexOf(actionMetadata.key) === -1; diff --git a/platform/commonUI/edit/src/policies/EditNavigationPolicy.js b/platform/commonUI/edit/src/policies/EditNavigationPolicy.js index 62c489b35d..83563b5ced 100644 --- a/platform/commonUI/edit/src/policies/EditNavigationPolicy.js +++ b/platform/commonUI/edit/src/policies/EditNavigationPolicy.js @@ -41,12 +41,11 @@ define( EditNavigationPolicy.prototype.isDirty = function(domainObject) { var navigatedObject = domainObject, editorCapability = navigatedObject && - navigatedObject.getCapability("editor"), - statusCapability = navigatedObject && - navigatedObject.getCapability("status"); + navigatedObject.getCapability("editor"); - return statusCapability && statusCapability.get('editing') && - editorCapability && editorCapability.dirty(); + return editorCapability && + editorCapability.isEditContextRoot() && + editorCapability.dirty(); }; /** diff --git a/platform/commonUI/edit/src/policies/EditableMovePolicy.js b/platform/commonUI/edit/src/policies/EditableMovePolicy.js index 4974e0c60d..bb36c86746 100644 --- a/platform/commonUI/edit/src/policies/EditableMovePolicy.js +++ b/platform/commonUI/edit/src/policies/EditableMovePolicy.js @@ -35,10 +35,13 @@ define([], function () { EditableMovePolicy.prototype.allow = function (action, context) { var domainObject = context.domainObject, selectedObject = context.selectedObject, - key = action.getMetadata().key; + key = action.getMetadata().key, + isDomainObjectEditing = domainObject.hasCapability('editor') && + domainObject.getCapability('editor').inEditContext(); - if (key === 'move' && domainObject.hasCapability('editor') && domainObject.getCapability('editor').inEditContext()) { - return !!selectedObject && selectedObject.hasCapability('editor') && selectedObject.getCapability('editor').inEditContext(); + if (key === 'move' && isDomainObjectEditing) { + return !!selectedObject && selectedObject.hasCapability('editor') && + selectedObject.getCapability('editor').inEditContext(); } // Like all policies, allow by default. diff --git a/platform/commonUI/edit/src/representers/EditRepresenter.js b/platform/commonUI/edit/src/representers/EditRepresenter.js index 270f9ecc52..e853669eff 100644 --- a/platform/commonUI/edit/src/representers/EditRepresenter.js +++ b/platform/commonUI/edit/src/representers/EditRepresenter.js @@ -136,7 +136,7 @@ define( } }); - if (representedObject.getCapability('status').get('editing')){ + if (representedObject.hasCapability('editor') && representedObject.getCapability('editor').isEditContextRoot()){ setEditing(); } }; diff --git a/platform/commonUI/edit/src/services/DirtyModelCache.js b/platform/commonUI/edit/src/services/DirtyModelCache.js deleted file mode 100644 index 0439efc6fc..0000000000 --- a/platform/commonUI/edit/src/services/DirtyModelCache.js +++ /dev/null @@ -1,47 +0,0 @@ -/***************************************************************************** - * Open MCT Web, Copyright (c) 2014-2015, United States Government - * as represented by the Administrator of the National Aeronautics and Space - * Administration. All rights reserved. - * - * Open MCT Web is licensed under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * http://www.apache.org/licenses/LICENSE-2.0. - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the - * License for the specific language governing permissions and limitations - * under the License. - * - * Open MCT Web includes source code licensed under additional open source - * licenses. See the Open Source Licenses file (LICENSES.md) included with - * this source code distribution or the Licensing information page available - * at runtime from the About dialog for additional information. - *****************************************************************************/ -/*global define*/ -define( - [], - function() { - function DirtyModelCache(topic) { - this.cache = {}; - } - - DirtyModelCache.prototype.get = function () { - return this.cache; - }; - - DirtyModelCache.prototype.isDirty = function (domainObject) { - return !!this.cache[domainObject.getId()]; - }; - - DirtyModelCache.prototype.markDirty = function (domainObject) { - this.cache[domainObject.getId()] = domainObject; - }; - - DirtyModelCache.prototype.markClean = function (domainObject) { - delete this.cache[domainObject.getId()]; - }; - - return DirtyModelCache; - }); \ No newline at end of file diff --git a/platform/commonUI/edit/src/services/TransactionService.js b/platform/commonUI/edit/src/services/TransactionService.js index 2944d2215c..6affde28d8 100644 --- a/platform/commonUI/edit/src/services/TransactionService.js +++ b/platform/commonUI/edit/src/services/TransactionService.js @@ -25,64 +25,90 @@ define( function() { /** * Implements an application-wide transaction state. Once a - * transaction is started, calls to PersistenceCapability.persist() + * transaction is started, calls to + * [PersistenceCapability.persist()]{@link PersistenceCapability#persist} * will be deferred until a subsequent call to - * TransactionService.commit() is made. + * [TransactionService.commit]{@link TransactionService#commit} is made. * + * @memberof platform/commonUI/edit/services * @param $q * @constructor */ - function TransactionService($q, dirtyModelCache) { + function TransactionService($q, $log) { this.$q = $q; + this.$log = $log; this.transaction = false; - this.committing = false; - this.cache = dirtyModelCache; + + this.onCommits = []; + this.onCancels = []; } + /** + * Starts a transaction. While a transaction is active all calls to + * [PersistenceCapability.persist](@link PersistenceCapability#persist) + * will be queued until [commit]{@link #commit} or [cancel]{@link + * #cancel} are called + */ TransactionService.prototype.startTransaction = function () { - if (this.transaction) - console.error("Transaction already in progress") + if (this.transaction) { + //Log error because this is a programming error if it occurs. + this.$log.error("Transaction already in progress"); + } this.transaction = true; }; + /** + * @returns {boolean} If true, indicates that a transaction is in progress + */ TransactionService.prototype.isActive = function () { return this.transaction; }; - TransactionService.prototype.isCommitting = function () { - return this.committing; + /** + * Adds provided functions to a queue to be called on + * [.commit()]{@link #commit} or + * [.cancel()]{@link #commit} + * @param onCommit A function to call on commit + * @param onCancel A function to call on cancel + */ + TransactionService.prototype.addToTransaction = function (onCommit, onCancel) { + if (this.transaction) { + this.onCommits.push(onCommit); + if (onCancel) { + this.onCancels.push(onCancel); + } + } else { + //Log error because this is a programming error if it occurs. + this.$log.error("No transaction in progress"); + } }; /** * All persist calls deferred since the beginning of the transaction - * will be committed. Any failures will be reported via a promise - * rejection. - * @returns {*} + * will be committed. + * + * @returns {Promise} resolved when all persist operations have + * completed. Will reject if any commit operations fail */ TransactionService.prototype.commit = function () { - var self = this; - cache = this.cache.get(); + var self = this, + promises = [], + onCommit; - this.committing = true; - - function keyToObject(key) { - return cache[key]; + while (this.onCommits.length > 0) { // ...using a while in case some onCommit adds to transaction + onCommit = this.onCommits.pop(); + try { // ...also don't want to fail mid-loop... + promises.push(onCommit()); + } catch (e) { + this.$log.error("Error committing transaction."); + } } + return this.$q.all(promises).then( function () { + self.transaction = false; - function objectToPromise(object) { - return object.getCapability('persistence').persist(); - } - - return this.$q.all( - Object.keys(cache) - .map(keyToObject) - .map(objectToPromise)) - .then(function () { - self.transaction = false; - this.committing = false; - }).catch(function() { - return this.committing = false; - }); + self.onCommits = []; + self.onCancels = []; + }); }; /** @@ -95,23 +121,23 @@ define( */ TransactionService.prototype.cancel = function () { var self = this, - cache = this.cache.get(); + results = [], + onCancel; - function keyToObject(key) { - return cache[key]; + while (this.onCancels.length > 0) { + onCancel = this.onCancels.pop(); + try { + results.push(onCancel()); + } catch (error) { + this.$log.error("Error committing transaction."); + } } + return this.$q.all(results).then(function () { + self.transaction = false; - function objectToPromise(object) { - return self.$q.when(object.getModel().persisted && object.getCapability('persistence').refresh()); - } - - return this.$q.all(Object.keys(cache) - .map(keyToObject) - .map(objectToPromise)) - .then(function () { - self.transaction = false; - this.committing = false; - }); + self.onCommits = []; + self.onCancels = []; + }); }; return TransactionService; diff --git a/platform/commonUI/edit/test/actions/EditActionSpec.js b/platform/commonUI/edit/test/actions/EditActionSpec.js index 7ed8b672bd..f645e1cd08 100644 --- a/platform/commonUI/edit/test/actions/EditActionSpec.js +++ b/platform/commonUI/edit/test/actions/EditActionSpec.js @@ -30,7 +30,9 @@ define( mockLog, mockDomainObject, mockType, + mockEditor, actionContext, + capabilities, action; beforeEach(function () { @@ -40,7 +42,7 @@ define( ); mockNavigationService = jasmine.createSpyObj( "navigationService", - [ "setNavigation", "getNavigation" ] + [ "setNavigation", "getNavigation", "addListener", "removeListener" ] ); mockLog = jasmine.createSpyObj( "$log", @@ -48,14 +50,26 @@ define( ); mockDomainObject = jasmine.createSpyObj( "domainObject", - [ "getId", "getModel", "getCapability" ] + [ "getId", "getModel", "getCapability", "hasCapability", "useCapability" ] ); mockType = jasmine.createSpyObj( "type", [ "hasFeature" ] ); + mockEditor = jasmine.createSpyObj( + "editorCapability", + ["edit", "isEditContextRoot", "cancel"] + ); - mockDomainObject.getCapability.andReturn(mockType); + capabilities = { + type: mockType, + editor: mockEditor + }; + + mockDomainObject.getCapability.andCallFake( function (name) { + return capabilities[name]; + }); + mockDomainObject.hasCapability.andReturn(true); mockType.hasFeature.andReturn(true); actionContext = { domainObject: mockDomainObject }; @@ -68,51 +82,34 @@ define( ); }); - it("is only applicable when a domain object is present", function () { + it("is only applicable when an editable domain object is present", function () { expect(EditAction.appliesTo(actionContext)).toBeTruthy(); expect(EditAction.appliesTo({})).toBeFalsy(); + + expect(mockDomainObject.hasCapability).toHaveBeenCalledWith('editor'); // Should have checked for creatability expect(mockType.hasFeature).toHaveBeenCalledWith('creation'); }); - //TODO: Disabled for NEM Beta - xit("changes URL path to edit mode when performed", function () { + it("is only applicable to objects not already in edit mode", function () { + mockEditor.isEditContextRoot.andReturn(false); + expect(EditAction.appliesTo(actionContext)).toBe(true); + mockEditor.isEditContextRoot.andReturn(true); + expect(EditAction.appliesTo(actionContext)).toBe(false); + }); + + it ("cancels editing when user navigates away", function () { action.perform(); - expect(mockLocation.path).toHaveBeenCalledWith("/edit"); + expect(mockNavigationService.addListener).toHaveBeenCalled(); + mockNavigationService.addListener.mostRecentCall.args[0](); + expect(mockEditor.cancel).toHaveBeenCalled(); }); - //TODO: Disabled for NEM Beta - xit("ensures that the edited object is navigated-to", function () { + it ("invokes the Edit capability on the object", function () { action.perform(); - expect(mockNavigationService.setNavigation) - .toHaveBeenCalledWith(mockDomainObject); + expect(mockDomainObject.useCapability).toHaveBeenCalledWith("editor"); }); - //TODO: Disabled for NEM Beta - xit("logs a warning if constructed when inapplicable", function () { - // Verify precondition (ensure warn wasn't called during setup) - expect(mockLog.warn).not.toHaveBeenCalled(); - - // Should not have hit an exception... - new EditAction( - mockLocation, - mockNavigationService, - mockLog, - {} - ).perform(); - - // ...but should have logged a warning - expect(mockLog.warn).toHaveBeenCalled(); - - // And should not have had other interactions - expect(mockLocation.path) - .not.toHaveBeenCalled(); - expect(mockNavigationService.setNavigation) - .not.toHaveBeenCalled(); - }); - - - }); } ); \ No newline at end of file diff --git a/platform/commonUI/edit/test/actions/SaveActionSpec.js b/platform/commonUI/edit/test/actions/SaveActionSpec.js index 1c94bdfe60..09df5e53b5 100644 --- a/platform/commonUI/edit/test/actions/SaveActionSpec.js +++ b/platform/commonUI/edit/test/actions/SaveActionSpec.js @@ -52,7 +52,7 @@ define( ); mockEditorCapability = jasmine.createSpyObj( "editor", - [ "save", "cancel" ] + [ "save", "cancel", "isEditContextRoot" ] ); mockActionCapability = jasmine.createSpyObj( "actionCapability", @@ -71,7 +71,7 @@ define( }); mockDomainObject.getModel.andReturn({persisted: 0}); mockEditorCapability.save.andReturn(mockPromise(true)); - mockDomainObject.getOriginalObject.andReturn(mockDomainObject); + mockEditorCapability.isEditContextRoot.andReturn(true); action = new SaveAction(actionContext); @@ -97,6 +97,13 @@ define( action.perform(); expect(mockEditorCapability.save).toHaveBeenCalled(); }); + + it("navigates to the object after saving", + function () { + action.perform(); + expect(mockActionCapability.perform).toHaveBeenCalledWith("navigate"); + }); + }); } ); \ No newline at end of file diff --git a/platform/commonUI/edit/test/actions/SaveAsActionSpec.js b/platform/commonUI/edit/test/actions/SaveAsActionSpec.js index 47b8440353..bac173ddcc 100644 --- a/platform/commonUI/edit/test/actions/SaveAsActionSpec.js +++ b/platform/commonUI/edit/test/actions/SaveAsActionSpec.js @@ -78,10 +78,11 @@ define( mockEditorCapability = jasmine.createSpyObj( "editor", - [ "save", "cancel" ] + [ "save", "cancel", "isEditContextRoot" ] ); mockEditorCapability.cancel.andReturn(mockPromise(undefined)); mockEditorCapability.save.andReturn(mockPromise(true)); + mockEditorCapability.isEditContextRoot.andReturn(true); capabilities.editor = mockEditorCapability; mockActionCapability = jasmine.createSpyObj( diff --git a/platform/commonUI/edit/test/capabilities/EditorCapabilitySpec.js b/platform/commonUI/edit/test/capabilities/EditorCapabilitySpec.js index d18cdcd931..29b08a4038 100644 --- a/platform/commonUI/edit/test/capabilities/EditorCapabilitySpec.js +++ b/platform/commonUI/edit/test/capabilities/EditorCapabilitySpec.js @@ -25,94 +25,150 @@ define( function (EditorCapability) { describe("The editor capability", function () { - var mockPersistence, - mockEditableObject, - mockDomainObject, - mockCache, - mockCallback, - model, + var mockDomainObject, + capabilities, + mockParentObject, + mockTransactionService, + mockStatusCapability, + mockParentStatus, + mockContextCapability, capability; - beforeEach(function () { - mockPersistence = jasmine.createSpyObj( - "persistence", - [ "persist" ] - ); - mockEditableObject = { - getModel: function () { return model; } + function fastPromise(val) { + return { + then: function (callback) { + return callback(val); + } }; + } + + beforeEach(function () { mockDomainObject = jasmine.createSpyObj( "domainObject", - [ "getId", "getModel", "getCapability", "useCapability" ] + ["getId", "getModel", "hasCapability", "getCapability", "useCapability"] ); - mockCache = jasmine.createSpyObj( - "cache", - [ "saveAll", "markClean" ] + mockParentObject = jasmine.createSpyObj( + "domainObject", + ["getId", "getModel", "hasCapability", "getCapability", "useCapability"] ); - mockCallback = jasmine.createSpy("callback"); + mockTransactionService = jasmine.createSpyObj( + "transactionService", + [ + "startTransaction", + "commit", + "cancel" + ] + ); + mockTransactionService.commit.andReturn(fastPromise()); + mockTransactionService.cancel.andReturn(fastPromise()); - mockDomainObject.getCapability.andReturn(mockPersistence); + mockStatusCapability = jasmine.createSpyObj( + "statusCapability", + ["get", "set"] + ); + mockParentStatus = jasmine.createSpyObj( + "statusCapability", + ["get", "set"] + ); + mockContextCapability = jasmine.createSpyObj( + "contextCapability", + ["getParent"] + ); + mockContextCapability.getParent.andReturn(mockParentObject); - model = { someKey: "some value", x: 42 }; + capabilities = { + context: mockContextCapability, + status: mockStatusCapability + }; + + mockDomainObject.hasCapability.andCallFake(function(name) { + return capabilities[name] !== undefined; + }); + + mockDomainObject.getCapability.andCallFake(function (name) { + return capabilities[name]; + }); + + mockParentObject.getCapability.andReturn(mockParentStatus); + mockParentObject.hasCapability.andReturn(false); capability = new EditorCapability( - mockPersistence, - mockEditableObject, - mockDomainObject, - mockCache + mockTransactionService, + mockDomainObject ); }); - //TODO: Disabled for NEM Beta - xit("mutates the real domain object on nonrecursive save", function () { - capability.save(true).then(mockCallback); + it("starts a transaction when edit is invoked", function () { + capability.edit(); + expect(mockTransactionService.startTransaction).toHaveBeenCalled(); + }); - // Wait for promise to resolve - waitsFor(function () { - return mockCallback.calls.length > 0; - }, 250); + it("sets editing status on object", function () { + capability.edit(); + expect(mockStatusCapability.set).toHaveBeenCalledWith("editing", true); + }); - runs(function () { - expect(mockDomainObject.useCapability) - .toHaveBeenCalledWith("mutation", jasmine.any(Function)); - // We should get the model from the editable object back - expect( - mockDomainObject.useCapability.mostRecentCall.args[1]() - ).toEqual(model); + it("uses editing status to determine editing context root", function () { + capability.edit(); + mockStatusCapability.get.andReturn(false); + expect(capability.isEditContextRoot()).toBe(false); + mockStatusCapability.get.andReturn(true); + expect(capability.isEditContextRoot()).toBe(true); + }); + + it("inEditingContext returns true if parent object is being" + + " edited", function () { + mockStatusCapability.get.andReturn(false); + mockParentStatus.get.andReturn(false); + expect(capability.inEditContext()).toBe(false); + mockParentStatus.get.andReturn(true); + expect(capability.inEditContext()).toBe(true); + }); + + describe("save", function() { + beforeEach(function() { + capability.edit(); + capability.save(); + }); + it("commits the transaction", function () { + expect(mockTransactionService.commit).toHaveBeenCalled(); + }); + it("resets the edit state", function () { + expect(mockStatusCapability.set).toHaveBeenCalledWith('editing', false); }); }); - //TODO: Disabled for NEM Beta - xit("tells the cache to save others", function () { - capability.save().then(mockCallback); - - // Wait for promise to resolve - waitsFor(function () { - return mockCallback.calls.length > 0; - }, 250); - - runs(function () { - expect(mockCache.saveAll).toHaveBeenCalled(); + describe("cancel", function() { + beforeEach(function() { + capability.edit(); + capability.cancel(); + }); + it("cancels the transaction", function () { + expect(mockTransactionService.cancel).toHaveBeenCalled(); + }); + it("resets the edit state", function () { + expect(mockStatusCapability.set).toHaveBeenCalledWith('editing', false); }); }); - //TODO: Disabled for NEM Beta - xit("has no interactions on cancel", function () { - capability.cancel().then(mockCallback); + describe("dirty", function() { + var model = {}; - // Wait for promise to resolve - waitsFor(function () { - return mockCallback.calls.length > 0; - }, 250); + beforeEach(function() { + mockDomainObject.getModel.andReturn(model); + capability.edit(); + capability.cancel(); + }); + it("returns true if the object has been modified since it" + + " was last persisted", function () { + model.modified = 0; + model.persisted = 0; + expect(capability.dirty()).toBe(false); - runs(function () { - expect(mockDomainObject.useCapability).not.toHaveBeenCalled(); - expect(mockCache.markClean).not.toHaveBeenCalled(); - expect(mockCache.saveAll).not.toHaveBeenCalled(); + model.modified = 1; + expect(capability.dirty()).toBe(true); }); }); - - }); } ); \ No newline at end of file diff --git a/platform/commonUI/edit/test/capabilities/TransactionCapabilityDecoratorSpec.js b/platform/commonUI/edit/test/capabilities/TransactionCapabilityDecoratorSpec.js new file mode 100644 index 0000000000..15738167e2 --- /dev/null +++ b/platform/commonUI/edit/test/capabilities/TransactionCapabilityDecoratorSpec.js @@ -0,0 +1,59 @@ +/***************************************************************************** + * Open MCT Web, Copyright (c) 2014-2015, United States Government + * as represented by the Administrator of the National Aeronautics and Space + * Administration. All rights reserved. + * + * Open MCT Web is licensed under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * http://www.apache.org/licenses/LICENSE-2.0. + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations + * under the License. + * + * Open MCT Web includes source code licensed under additional open source + * licenses. See the Open Source Licenses file (LICENSES.md) included with + * this source code distribution or the Licensing information page available + * at runtime from the About dialog for additional information. + *****************************************************************************/ +/*global define,describe,it,expect,beforeEach,waitsFor,runs,jasmine,xit,xdescribe*/ + +define( + [ + "../../src/capabilities/TransactionalPersistenceCapability", + "../../src/capabilities/TransactionCapabilityDecorator" + ], + function (TransactionalPersistenceCapability, TransactionCapabilityDecorator) { + "use strict"; + + describe("The transaction capability decorator", function () { + var mockQ, + mockTransactionService, + mockCapabilityService, + provider; + + beforeEach(function() { + //mockQ = jasmine.createSpyObj("$q", []); + mockQ = {}; + //mockTransactionService = + // jasmine.createSpyObj("transactionService", []); + mockTransactionService = {}; + mockCapabilityService = jasmine.createSpyObj("capabilityService", ["getCapabilities"]); + mockCapabilityService.getCapabilities.andReturn({ + persistence: function() {} + }); + + provider = new TransactionCapabilityDecorator(mockQ, mockTransactionService, mockCapabilityService); + + }); + it("decorates the persistence capability", function() { + var capabilities = provider.getCapabilities(); + expect(capabilities.persistence({}) instanceof TransactionalPersistenceCapability).toBe(true); + }); + + }); + } +); \ No newline at end of file diff --git a/platform/commonUI/edit/test/capabilities/TransactionalPersistenceCapabilitySpec.js b/platform/commonUI/edit/test/capabilities/TransactionalPersistenceCapabilitySpec.js new file mode 100644 index 0000000000..baa870934d --- /dev/null +++ b/platform/commonUI/edit/test/capabilities/TransactionalPersistenceCapabilitySpec.js @@ -0,0 +1,92 @@ +/***************************************************************************** + * Open MCT Web, Copyright (c) 2014-2015, United States Government + * as represented by the Administrator of the National Aeronautics and Space + * Administration. All rights reserved. + * + * Open MCT Web is licensed under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * http://www.apache.org/licenses/LICENSE-2.0. + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations + * under the License. + * + * Open MCT Web includes source code licensed under additional open source + * licenses. See the Open Source Licenses file (LICENSES.md) included with + * this source code distribution or the Licensing information page available + * at runtime from the About dialog for additional information. + *****************************************************************************/ +/*global define,describe,it,expect,beforeEach,waitsFor,runs,jasmine,xit,xdescribe*/ + +define( + [ + "../../src/capabilities/TransactionalPersistenceCapability" + ], + function (TransactionalPersistenceCapability) { + "use strict"; + + function fastPromise(val) { + return { + then: function(callback) { + return callback(val); + } + }; + } + + describe("The transactional persistence decorator", function () { + var mockQ, + mockTransactionService, + mockPersistence, + mockDomainObject, + capability; + + beforeEach(function() { + mockQ = jasmine.createSpyObj("$q", ["when"]); + mockQ.when.andCallFake(function (val) { + return fastPromise(val); + }); + mockTransactionService = jasmine.createSpyObj( + "transactionService", + ["isActive", "addToTransaction"] + ); + mockPersistence = jasmine.createSpyObj( + "persistenceCapability", + ["persist", "refresh"] + ); + + capability = new TransactionalPersistenceCapability(mockQ, mockTransactionService, mockPersistence, mockDomainObject); + }); + + it("if no transaction is active, passes through to persistence" + + " provider", function() { + mockTransactionService.isActive.andReturn(false); + capability.persist(); + expect(mockPersistence.persist).toHaveBeenCalled(); + }); + + it("if transaction is active, persist call is queued", function() { + mockTransactionService.isActive.andReturn(true); + capability.persist(); + expect(mockTransactionService.addToTransaction).toHaveBeenCalled(); + + //Test that it was the persist call that was queued + mockTransactionService.addToTransaction.mostRecentCall.args[0](); + expect(mockPersistence.persist).toHaveBeenCalled(); + }); + + it("if transaction is active, refresh call is queued as cancel" + + " function", function() { + mockTransactionService.isActive.andReturn(true); + capability.persist(); + + //Test that it was the persist call that was queued + mockTransactionService.addToTransaction.mostRecentCall.args[1](); + expect(mockPersistence.refresh).toHaveBeenCalled(); + }); + + }); + } +); \ No newline at end of file diff --git a/platform/commonUI/edit/test/policies/EditActionPolicySpec.js b/platform/commonUI/edit/test/policies/EditActionPolicySpec.js index dfe4e8fc4c..0cdf1be85d 100644 --- a/platform/commonUI/edit/test/policies/EditActionPolicySpec.js +++ b/platform/commonUI/edit/test/policies/EditActionPolicySpec.js @@ -34,7 +34,7 @@ define( mockEditAction, mockPropertiesAction, mockTypeCapability, - mockStatusCapability, + mockEditorCapability, capabilities, plotView, policy; @@ -48,11 +48,10 @@ define( 'getCapability' ] ); - mockStatusCapability = jasmine.createSpyObj('statusCapability', ['get']); - mockStatusCapability.get.andReturn(false); + mockEditorCapability = jasmine.createSpyObj('editorCapability', ['isEditContextRoot']); mockTypeCapability = jasmine.createSpyObj('type', ['getKey']); capabilities = { - 'status': mockStatusCapability, + 'editor': mockEditorCapability, 'type': mockTypeCapability }; @@ -112,7 +111,7 @@ define( it("disallows the edit action when object is already being" + " edited", function () { testViews = [ editableView ]; - mockStatusCapability.get.andReturn(true); + mockEditorCapability.isEditContextRoot.andReturn(true); expect(policy.allow(mockEditAction, testContext)).toBe(false); }); diff --git a/platform/commonUI/edit/test/policies/EditContextualActionPolicySpec.js b/platform/commonUI/edit/test/policies/EditContextualActionPolicySpec.js index c1c9878e6e..a516061e80 100644 --- a/platform/commonUI/edit/test/policies/EditContextualActionPolicySpec.js +++ b/platform/commonUI/edit/test/policies/EditContextualActionPolicySpec.js @@ -32,16 +32,22 @@ define( context, navigatedObject, mockDomainObject, + mockEditorCapability, metadata, editModeBlacklist = ["copy", "follow", "window", "link", "locate"], nonEditContextBlacklist = ["copy", "follow", "properties", "move", "link", "remove", "locate"]; beforeEach(function () { - navigatedObject = jasmine.createSpyObj("navigatedObject", ["hasCapability"]); + mockEditorCapability = jasmine.createSpyObj("editorCapability", ["isEditContextRoot", "inEditContext"]); + + navigatedObject = jasmine.createSpyObj("navigatedObject", ["hasCapability", "getCapability"]); + navigatedObject.getCapability.andReturn(mockEditorCapability); navigatedObject.hasCapability.andReturn(false); + mockDomainObject = jasmine.createSpyObj("domainObject", ["hasCapability", "getCapability"]); mockDomainObject.hasCapability.andReturn(false); + mockDomainObject.getCapability.andReturn(mockEditorCapability); navigationService = jasmine.createSpyObj("navigationService", ["getNavigation"]); navigationService.getNavigation.andReturn(navigatedObject); @@ -62,6 +68,7 @@ define( it('Allows "window" action when navigated object in edit mode,' + ' but selected object not in edit mode ', function() { navigatedObject.hasCapability.andReturn(true); + mockEditorCapability.isEditContextRoot.andReturn(true); metadata.key = "window"; expect(policy.allow(mockAction, context)).toBe(true); }); @@ -91,6 +98,8 @@ define( it('Disallows "move" action when navigated object in edit mode,' + ' but selected object not in edit mode ', function() { navigatedObject.hasCapability.andReturn(true); + mockEditorCapability.isEditContextRoot.andReturn(true); + mockEditorCapability.inEditContext.andReturn(false); metadata.key = "move"; expect(policy.allow(mockAction, context)).toBe(false); }); @@ -99,6 +108,9 @@ define( ' selected object in edit mode', function() { navigatedObject.hasCapability.andReturn(true); mockDomainObject.hasCapability.andReturn(true); + mockEditorCapability.isEditContextRoot.andReturn(true); + mockEditorCapability.inEditContext.andReturn(true); + metadata.key = "copy"; expect(policy.allow(mockAction, context)).toBe(false); }); diff --git a/platform/commonUI/edit/test/policies/EditableViewPolicySpec.js b/platform/commonUI/edit/test/policies/EditableViewPolicySpec.js index 2194a8c45a..32400a7453 100644 --- a/platform/commonUI/edit/test/policies/EditableViewPolicySpec.js +++ b/platform/commonUI/edit/test/policies/EditableViewPolicySpec.js @@ -33,8 +33,13 @@ define( testMode = true; // Act as if we're in Edit mode by default mockDomainObject = jasmine.createSpyObj( 'domainObject', - ['hasCapability'] + ['hasCapability', 'getCapability'] ); + mockDomainObject.getCapability.andReturn({ + inEditContext: function () { + return true; + } + }); mockDomainObject.hasCapability.andCallFake(function (c) { return (c === 'editor') && testMode; }); diff --git a/platform/commonUI/edit/test/representers/EditRepresenterSpec.js b/platform/commonUI/edit/test/representers/EditRepresenterSpec.js index b4c2f4ce7f..fe0c17c5bd 100644 --- a/platform/commonUI/edit/test/representers/EditRepresenterSpec.js +++ b/platform/commonUI/edit/test/representers/EditRepresenterSpec.js @@ -32,6 +32,7 @@ define( mockDomainObject, mockPersistence, mockStatusCapability, + mockEditorCapability, mockCapabilities, representer; @@ -58,11 +59,14 @@ define( mockPersistence = jasmine.createSpyObj("persistence", ["persist"]); mockStatusCapability = - jasmine.createSpyObj("statusCapability", ["get", "listen"]); - mockStatusCapability.get.andReturn(false); + jasmine.createSpyObj("statusCapability", ["listen"]); + mockEditorCapability = + jasmine.createSpyObj("editorCapability", ["isEditContextRoot"]); + mockCapabilities = { 'persistence': mockPersistence, - 'status': mockStatusCapability + 'status': mockStatusCapability, + 'editor': mockEditorCapability }; mockDomainObject.getModel.andReturn({}); @@ -82,6 +86,7 @@ define( it("Sets edit view template on edit mode", function () { mockStatusCapability.listen.mostRecentCall.args[0](['editing']); + mockEditorCapability.isEditContextRoot.andReturn(true); expect(mockScope.viewObjectTemplate).toEqual('edit-object'); }); diff --git a/platform/commonUI/edit/test/services/TransactionServiceSpec.js b/platform/commonUI/edit/test/services/TransactionServiceSpec.js new file mode 100644 index 0000000000..6c057aa9bd --- /dev/null +++ b/platform/commonUI/edit/test/services/TransactionServiceSpec.js @@ -0,0 +1,127 @@ +/***************************************************************************** + * Open MCT Web, Copyright (c) 2014-2015, United States Government + * as represented by the Administrator of the National Aeronautics and Space + * Administration. All rights reserved. + * + * Open MCT Web is licensed under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * http://www.apache.org/licenses/LICENSE-2.0. + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations + * under the License. + * + * Open MCT Web includes source code licensed under additional open source + * licenses. See the Open Source Licenses file (LICENSES.md) included with + * this source code distribution or the Licensing information page available + * at runtime from the About dialog for additional information. + *****************************************************************************/ +/*global define,describe,it,expect,beforeEach,jasmine*/ + +define( + ["../../src/services/TransactionService"], + function (TransactionService) { + "use strict"; + + describe("The Transaction Service", function () { + var mockQ, + mockLog, + transactionService; + + function fastPromise (val) { + return { + then: function (callback) { + return fastPromise(callback(val)); + } + }; + } + + beforeEach(function () { + mockQ = jasmine.createSpyObj("$q", ["all"]); + mockQ.all.andReturn(fastPromise()); + mockLog = jasmine.createSpyObj("$log", ["error"]); + transactionService = new TransactionService(mockQ, mockLog); + }); + + it("isActive returns true if a transaction is in progress", function () { + expect(transactionService.isActive()).toBe(false); + transactionService.startTransaction(); + expect(transactionService.isActive()).toBe(true); + }); + + it("addToTransaction queues onCommit and onCancel functions", function () { + var onCommit = jasmine.createSpy('onCommit'), + onCancel = jasmine.createSpy('onCancel'); + + transactionService.startTransaction(); + transactionService.addToTransaction(onCommit, onCancel); + expect(transactionService.onCommits.length).toBe(1); + expect(transactionService.onCancels.length).toBe(1); + }); + + describe("commit", function () { + var onCommits; + + beforeEach(function() { + onCommits = [0, 1, 2].map(function(val) { + return jasmine.createSpy("onCommit" + val); + }); + + transactionService.startTransaction(); + onCommits.forEach(transactionService.addToTransaction.bind(transactionService)); + }); + + it("commit calls all queued commit functions", function () { + expect(transactionService.onCommits.length).toBe(3); + transactionService.commit(); + onCommits.forEach( function (spy) { + expect(spy).toHaveBeenCalled(); + }); + }); + + it("commit resets active state and clears queues", function () { + transactionService.commit(); + expect(transactionService.isActive()).toBe(false); + expect(transactionService.onCommits.length).toBe(0); + expect(transactionService.onCancels.length).toBe(0); + }); + + }); + + describe("cancel", function () { + var onCancels; + + beforeEach(function() { + onCancels = [0, 1, 2].map(function(val) { + return jasmine.createSpy("onCancel" + val); + }); + + transactionService.startTransaction(); + onCancels.forEach(function (onCancel) { + transactionService.addToTransaction(undefined, onCancel); + }); + }); + + it("cancel calls all queued cancel functions", function () { + expect(transactionService.onCancels.length).toBe(3); + transactionService.cancel(); + onCancels.forEach( function (spy) { + expect(spy).toHaveBeenCalled(); + }); + }); + + it("cancel resets active state and clears queues", function () { + transactionService.cancel(); + expect(transactionService.isActive()).toBe(false); + expect(transactionService.onCommits.length).toBe(0); + expect(transactionService.onCancels.length).toBe(0); + }); + + }); + + }); + } +); \ No newline at end of file diff --git a/platform/commonUI/regions/src/EditableRegionPolicy.js b/platform/commonUI/regions/src/EditableRegionPolicy.js index 5b787a00d8..a63bed65b1 100644 --- a/platform/commonUI/regions/src/EditableRegionPolicy.js +++ b/platform/commonUI/regions/src/EditableRegionPolicy.js @@ -39,7 +39,7 @@ define( if (!regionPart.modes){ return true; } - if (domainObject.getCapability('status').get('editing')){ + if (domainObject.hasCapability('editor') && domainObject.getCapability('editor').inEditContext()){ //If the domain object is in edit mode, only include a part // if it is marked editable return regionPart.modes.indexOf('edit') !== -1; diff --git a/platform/commonUI/regions/test/EditableRegionPolicySpec.js b/platform/commonUI/regions/test/EditableRegionPolicySpec.js index 1692f72288..e9a6a97404 100644 --- a/platform/commonUI/regions/test/EditableRegionPolicySpec.js +++ b/platform/commonUI/regions/test/EditableRegionPolicySpec.js @@ -28,7 +28,7 @@ define( var editableRegionPolicy, mockDomainObject, - mockStatusCapability, + mockEditorCapability, mockBrowseRegionPart = { modes: 'browse' }, @@ -40,31 +40,32 @@ define( beforeEach(function(){ editableRegionPolicy = new EditableRegionPolicy(); - mockStatusCapability = jasmine.createSpyObj("statusCapability", [ - "get" + mockEditorCapability = jasmine.createSpyObj("editorCapability", [ + "inEditContext" ]); mockDomainObject = jasmine.createSpyObj("domainObject", [ - "getCapability" + "hasCapability", "getCapability" ]); - mockDomainObject.getCapability.andReturn(mockStatusCapability); + mockDomainObject.hasCapability.andReturn(true); + mockDomainObject.getCapability.andReturn(mockEditorCapability); }); it("includes only browse region parts for object not in edit mode", function() { - mockStatusCapability.get.andReturn(false); + mockEditorCapability.inEditContext.andReturn(false); expect(editableRegionPolicy.allow(mockBrowseRegionPart, mockDomainObject)).toBe(true); expect(editableRegionPolicy.allow(mockEditRegionPart, mockDomainObject)).toBe(false); }); it("includes only edit region parts for object in edit mode", function() { - mockStatusCapability.get.andReturn(true); + mockEditorCapability.inEditContext.andReturn(true); expect(editableRegionPolicy.allow(mockBrowseRegionPart, mockDomainObject)).toBe(false); expect(editableRegionPolicy.allow(mockEditRegionPart, mockDomainObject)).toBe(true); }); it("includes region parts with no mode specification", function() { - mockStatusCapability.get.andReturn(false); + mockEditorCapability.inEditContext.andReturn(false); expect(editableRegionPolicy.allow(mockAllModesRegionPart, mockDomainObject)).toBe(true); - mockStatusCapability.get.andReturn(true); + mockEditorCapability.inEditContext.andReturn(true); expect(editableRegionPolicy.allow(mockAllModesRegionPart, mockDomainObject)).toBe(true); }); diff --git a/platform/core/test/capabilities/PersistenceCapabilitySpec.js b/platform/core/test/capabilities/PersistenceCapabilitySpec.js index 16f5d34e61..d2bafd26e6 100644 --- a/platform/core/test/capabilities/PersistenceCapabilitySpec.js +++ b/platform/core/test/capabilities/PersistenceCapabilitySpec.js @@ -155,18 +155,6 @@ define( expect(model).toEqual(refreshModel); }); - it("does not overwrite unpersisted changes on refresh", function () { - var refreshModel = {someOtherKey: "some other value"}, - mockCallback = jasmine.createSpy(); - model.modified = 2; - model.persisted = 1; - mockPersistenceService.readObject.andReturn(asPromise(refreshModel)); - persistence.refresh().then(mockCallback); - expect(model).not.toEqual(refreshModel); - // Should have also indicated that no changes were actually made - expect(mockCallback).toHaveBeenCalledWith(false); - }); - it("does not trigger error notification on successful" + " persistence", function () { persistence.persist(); diff --git a/platform/features/timeline/src/controllers/swimlane/TimelineSwimlaneDropHandler.js b/platform/features/timeline/src/controllers/swimlane/TimelineSwimlaneDropHandler.js index 620e70e3e1..e655741342 100644 --- a/platform/features/timeline/src/controllers/swimlane/TimelineSwimlaneDropHandler.js +++ b/platform/features/timeline/src/controllers/swimlane/TimelineSwimlaneDropHandler.js @@ -40,7 +40,7 @@ define( } // Check if we are in edit mode (also check parents) - function inEditMode(swimlane) { + function inEditMode() { return swimlane.domainObject.hasCapability('editor') && swimlane.domainObject.getCapability('editor').inEditContext(); } @@ -174,7 +174,7 @@ define( * @returns {boolean} true if this should be allowed */ allowDropIn: function (id, domainObject) { - return inEditMode(swimlane) && + return inEditMode() && !pathContains(swimlane, id) && !contains(swimlane, id) && canDrop(swimlane.domainObject, domainObject); @@ -189,7 +189,7 @@ define( allowDropAfter: function (id, domainObject) { var target = expandedForDropInto() ? swimlane : swimlane.parent; - return inEditMode(swimlane) && + return inEditMode() && target && !pathContains(target, id) && canDrop(target.domainObject, domainObject); diff --git a/platform/features/timeline/test/controllers/TimelineZoomControllerSpec.js b/platform/features/timeline/test/controllers/TimelineZoomControllerSpec.js index 6bc922731d..d7322512d5 100644 --- a/platform/features/timeline/test/controllers/TimelineZoomControllerSpec.js +++ b/platform/features/timeline/test/controllers/TimelineZoomControllerSpec.js @@ -82,11 +82,18 @@ define( it("persists zoom changes in Edit mode", function () { mockScope.domainObject = jasmine.createSpyObj( 'domainObject', - ['hasCapability'] + ['hasCapability', 'getCapability'] ); mockScope.domainObject.hasCapability.andCallFake(function (c) { return c === 'editor'; }); + mockScope.domainObject.getCapability.andCallFake(function (c) { + if (c === 'editor') { + return { + inEditContext: function () {return true;} + }; + } + }); controller.zoom(1); expect(mockScope.commit).toHaveBeenCalled(); expect(mockScope.configuration.zoomLevel) diff --git a/platform/features/timeline/test/controllers/swimlane/TimelineSwimlaneDropHandlerSpec.js b/platform/features/timeline/test/controllers/swimlane/TimelineSwimlaneDropHandlerSpec.js index 4c8d063f29..3eed051f45 100644 --- a/platform/features/timeline/test/controllers/swimlane/TimelineSwimlaneDropHandlerSpec.js +++ b/platform/features/timeline/test/controllers/swimlane/TimelineSwimlaneDropHandlerSpec.js @@ -28,6 +28,7 @@ define( var mockSwimlane, mockOtherObject, mockActionCapability, + mockEditorCapability, mockPersistence, mockContext, mockAction, @@ -36,6 +37,8 @@ define( beforeEach(function () { var mockPromise = jasmine.createSpyObj('promise', ['then']); + mockEditorCapability = jasmine.createSpyObj('editorCapability', ['inEditContext']); + mockSwimlane = jasmine.createSpyObj( "swimlane", [ "highlight", "highlightBottom" ] @@ -86,19 +89,22 @@ define( mockSwimlane.domainObject.getCapability.andCallFake(function (c) { return { action: mockActionCapability, - persistence: mockPersistence + persistence: mockPersistence, + editor: mockEditorCapability }[c]; }); mockSwimlane.parent.domainObject.getCapability.andCallFake(function (c) { return { action: mockActionCapability, - persistence: mockPersistence + persistence: mockPersistence, + editor: mockEditorCapability }[c]; }); mockOtherObject.getCapability.andCallFake(function (c) { return { action: mockActionCapability, - context: mockContext + context: mockContext, + editor: mockEditorCapability }[c]; }); mockContext.getParent.andReturn(mockOtherObject); @@ -109,13 +115,14 @@ define( }); it("disallows drop outside of edit mode", function () { + mockEditorCapability.inEditContext.andReturn(true); // Verify precondition expect(handler.allowDropIn('d', mockSwimlane.domainObject)) .toBeTruthy(); expect(handler.allowDropAfter('d', mockSwimlane.domainObject)) .toBeTruthy(); // Act as if we're not in edit mode - mockSwimlane.domainObject.hasCapability.andReturn(false); + mockEditorCapability.inEditContext.andReturn(false); // Now, they should be disallowed expect(handler.allowDropIn('d', mockSwimlane.domainObject)) .toBeFalsy(); diff --git a/platform/representation/src/MCTRepresentation.js b/platform/representation/src/MCTRepresentation.js index 06f7220fd9..bcaa90e4e7 100644 --- a/platform/representation/src/MCTRepresentation.js +++ b/platform/representation/src/MCTRepresentation.js @@ -53,9 +53,7 @@ define( * @param {ViewDefinition[]} views an array of view extensions */ function MCTRepresentation(representations, views, representers, $q, templateLinker, $log) { - var representationMap = {}, - listeners = 0; - domainObjectListener; + var representationMap = {}; // Assemble all representations and views // The distinction between views and representations is @@ -250,10 +248,10 @@ define( } /** - * Add a listener for status changes to the object itself. + * Add a listener to the object for status changes. */ - $scope.$watch("domainObject", function(domainObject, oldDomainObject) { - if (domainObject!==oldDomainObject){ + $scope.$watch("domainObject", function (domainObject, oldDomainObject) { + if (domainObject !== oldDomainObject){ listenForStatusChange(domainObject); } }); diff --git a/platform/representation/src/gestures/DropGesture.js b/platform/representation/src/gestures/DropGesture.js index e323e9d4a2..f276460b53 100644 --- a/platform/representation/src/gestures/DropGesture.js +++ b/platform/representation/src/gestures/DropGesture.js @@ -103,13 +103,18 @@ define( // the change. if (id) { e.preventDefault(); - if (domainObjectType!=='folder') { - domainObject.getCapability('action').perform('edit'); - } + //Use scope.apply, drop event is outside digest cycle + // and if not applied here causes visual artifacts. + scope.$apply( function() { + if (domainObjectType !== 'folder') { + domainObject.getCapability('action').perform('edit'); + } + }); $q.when(action && action.perform()).then(function () { broadcastDrop(id, event); }); + } } diff --git a/platform/representation/test/MCTRepresentationSpec.js b/platform/representation/test/MCTRepresentationSpec.js index 7608070d3e..36372a66c4 100644 --- a/platform/representation/test/MCTRepresentationSpec.js +++ b/platform/representation/test/MCTRepresentationSpec.js @@ -36,6 +36,7 @@ define( testViews, testUrls, mockRepresenters, + mockStatusCapability, mockQ, mockLinker, mockLog, @@ -118,6 +119,8 @@ define( mockChangeTemplate = jasmine.createSpy('changeTemplate'); mockLog = jasmine.createSpyObj("$log", LOG_FUNCTIONS); + mockStatusCapability = jasmine.createSpyObj("statusCapability", ["listen"]); + mockScope = jasmine.createSpyObj("scope", [ "$watch", "$on" ]); mockElement = jasmine.createSpyObj("element", JQLITE_FUNCTIONS); mockDomainObject = jasmine.createSpyObj("domainObject", DOMAIN_OBJECT_METHODS); @@ -128,6 +131,10 @@ define( return testUrls[ext.key]; }); + mockDomainObject.getCapability.andCallFake(function (c) { + return c === 'status' && mockStatusCapability; + }); + mctRepresentation = new MCTRepresentation( testRepresentations, testViews, diff --git a/platform/search/src/services/GenericSearchProvider.js b/platform/search/src/services/GenericSearchProvider.js index fbe45ae6d8..101c718669 100644 --- a/platform/search/src/services/GenericSearchProvider.js +++ b/platform/search/src/services/GenericSearchProvider.js @@ -120,8 +120,8 @@ define([ provider = this; mutationTopic.listen(function (mutatedObject) { - var status = mutatedObject.getCapability('status'); - if (!status || !status.get('editing')) { + var editor = mutatedObject.getCapability('editor'); + if (!editor || !editor.inEditContext()) { provider.index( mutatedObject.getId(), mutatedObject.getModel() From c305fba0a74e10be336f1d4ca5168890eeb750f8 Mon Sep 17 00:00:00 2001 From: Henry Date: Wed, 11 May 2016 17:58:03 -0700 Subject: [PATCH 101/132] Modified dirty function --- .../commonUI/edit/src/capabilities/EditorCapability.js | 2 +- platform/commonUI/edit/src/services/TransactionService.js | 4 ++++ platform/representation/bundle.js | 5 +---- platform/representation/src/gestures/DropGesture.js | 7 ++----- 4 files changed, 8 insertions(+), 10 deletions(-) diff --git a/platform/commonUI/edit/src/capabilities/EditorCapability.js b/platform/commonUI/edit/src/capabilities/EditorCapability.js index df305de73c..69eb773d73 100644 --- a/platform/commonUI/edit/src/capabilities/EditorCapability.js +++ b/platform/commonUI/edit/src/capabilities/EditorCapability.js @@ -112,7 +112,7 @@ define( * modifications since the last persist, false otherwise. */ EditorCapability.prototype.dirty = function () { - return (this.domainObject.getModel().modified || 0) > (this.domainObject.getModel().persisted || 0); + return this.transactionService.size() > 0; }; return EditorCapability; diff --git a/platform/commonUI/edit/src/services/TransactionService.js b/platform/commonUI/edit/src/services/TransactionService.js index 6affde28d8..c6e0bcb5da 100644 --- a/platform/commonUI/edit/src/services/TransactionService.js +++ b/platform/commonUI/edit/src/services/TransactionService.js @@ -140,5 +140,9 @@ define( }); }; + TransactionService.prototype.size = function () { + return this.onCommits.length + this.onCancels.length; + }; + return TransactionService; }); diff --git a/platform/representation/bundle.js b/platform/representation/bundle.js index ae8cb0ed8e..01484ccb78 100644 --- a/platform/representation/bundle.js +++ b/platform/representation/bundle.js @@ -86,10 +86,7 @@ define([ "implementation": DropGesture, "depends": [ "dndService", - "$q", - "navigationService", - "instantiate", - "typeService" + "$q" ] }, { diff --git a/platform/representation/src/gestures/DropGesture.js b/platform/representation/src/gestures/DropGesture.js index f276460b53..f2d64024a3 100644 --- a/platform/representation/src/gestures/DropGesture.js +++ b/platform/representation/src/gestures/DropGesture.js @@ -38,7 +38,7 @@ define( * @param {DomainObject} domainObject the domain object whose * composition should be modified as a result of the drop. */ - function DropGesture(dndService, $q, navigationService, instantiate, typeService, element, domainObject) { + function DropGesture(dndService, $q, element, domainObject) { var actionCapability = domainObject.getCapability('action'), scope = element.scope && element.scope(), action; // Action for the drop, when it occurs @@ -70,8 +70,6 @@ define( } function dragOver(e) { - actionCapability = domainObject.getCapability('action'); - var event = (e || {}).originalEvent || e, selectedObject = dndService.getData( GestureConstants.MCT_EXTENDED_DRAG_TYPE @@ -105,8 +103,7 @@ define( e.preventDefault(); //Use scope.apply, drop event is outside digest cycle - // and if not applied here causes visual artifacts. - scope.$apply( function() { + scope.$apply(function () { if (domainObjectType !== 'folder') { domainObject.getCapability('action').perform('edit'); } From 69c4c3a2c88d11c1cc1be49dadbd3cc83f31c7c0 Mon Sep 17 00:00:00 2001 From: Henry Date: Thu, 12 May 2016 14:20:16 -0700 Subject: [PATCH 102/132] Added tests --- platform/commonUI/edit/bundle.js | 3 ++- .../TransactionalPersistenceCapability.js | 25 ++++++++++++++++--- .../edit/src/services/TransactionService.js | 2 +- .../test/capabilities/EditorCapabilitySpec.js | 7 +++--- .../TransactionalPersistenceCapabilitySpec.js | 25 ++++++++++--------- .../test/services/TransactionServiceSpec.js | 11 ++++++++ .../test/MCTRepresentationSpec.js | 18 ++++++++++++- 7 files changed, 68 insertions(+), 23 deletions(-) diff --git a/platform/commonUI/edit/bundle.js b/platform/commonUI/edit/bundle.js index 5a5101f129..fb357c0934 100644 --- a/platform/commonUI/edit/bundle.js +++ b/platform/commonUI/edit/bundle.js @@ -271,7 +271,8 @@ define([ "depends": [ "$q", "transactionService" - ] + ], + "priority": "fallback" }, { "type": "provider", diff --git a/platform/commonUI/edit/src/capabilities/TransactionalPersistenceCapability.js b/platform/commonUI/edit/src/capabilities/TransactionalPersistenceCapability.js index 0c6420d484..99ab8b6721 100644 --- a/platform/commonUI/edit/src/capabilities/TransactionalPersistenceCapability.js +++ b/platform/commonUI/edit/src/capabilities/TransactionalPersistenceCapability.js @@ -49,6 +49,7 @@ define( this.persistenceCapability = persistenceCapability; this.domainObject = domainObject; this.$q = $q; + this.persistPending = false; } /** @@ -57,11 +58,27 @@ define( * @returns {*} */ TransactionalPersistenceCapability.prototype.persist = function () { + var self = this; + + function onCommit() { + return self.persistenceCapability.persist().then(function(result) { + self.persistPending = false; + return result; + }); + } + + function onCancel() { + return self.persistenceCapability.refresh().then(function(result) { + self.persistPending = false; + return result; + }); + } + if (this.transactionService.isActive()) { - this.transactionService.addToTransaction( - this.persistenceCapability.persist.bind(this.persistenceCapability), - this.persistenceCapability.refresh.bind(this.persistenceCapability) - ); + if (!this.persistPending) { + this.transactionService.addToTransaction(onCommit, onCancel); + this.persistPending = true; + } //Need to return a promise from this function return this.$q.when(true); } else { diff --git a/platform/commonUI/edit/src/services/TransactionService.js b/platform/commonUI/edit/src/services/TransactionService.js index c6e0bcb5da..8d57e1e809 100644 --- a/platform/commonUI/edit/src/services/TransactionService.js +++ b/platform/commonUI/edit/src/services/TransactionService.js @@ -141,7 +141,7 @@ define( }; TransactionService.prototype.size = function () { - return this.onCommits.length + this.onCancels.length; + return this.onCommits.length; }; return TransactionService; diff --git a/platform/commonUI/edit/test/capabilities/EditorCapabilitySpec.js b/platform/commonUI/edit/test/capabilities/EditorCapabilitySpec.js index 29b08a4038..fe42ec92f7 100644 --- a/platform/commonUI/edit/test/capabilities/EditorCapabilitySpec.js +++ b/platform/commonUI/edit/test/capabilities/EditorCapabilitySpec.js @@ -55,6 +55,7 @@ define( "transactionService", [ "startTransaction", + "size", "commit", "cancel" ] @@ -161,11 +162,9 @@ define( }); it("returns true if the object has been modified since it" + " was last persisted", function () { - model.modified = 0; - model.persisted = 0; + mockTransactionService.size.andReturn(0); expect(capability.dirty()).toBe(false); - - model.modified = 1; + mockTransactionService.size.andReturn(1); expect(capability.dirty()).toBe(true); }); }); diff --git a/platform/commonUI/edit/test/capabilities/TransactionalPersistenceCapabilitySpec.js b/platform/commonUI/edit/test/capabilities/TransactionalPersistenceCapabilitySpec.js index baa870934d..8856aca4d5 100644 --- a/platform/commonUI/edit/test/capabilities/TransactionalPersistenceCapabilitySpec.js +++ b/platform/commonUI/edit/test/capabilities/TransactionalPersistenceCapabilitySpec.js @@ -56,7 +56,8 @@ define( "persistenceCapability", ["persist", "refresh"] ); - + mockPersistence.persist.andReturn(fastPromise()); + mockPersistence.refresh.andReturn(fastPromise()); capability = new TransactionalPersistenceCapability(mockQ, mockTransactionService, mockPersistence, mockDomainObject); }); @@ -67,26 +68,26 @@ define( expect(mockPersistence.persist).toHaveBeenCalled(); }); - it("if transaction is active, persist call is queued", function() { + it("if transaction is active, persist and cancel calls are" + + " queued", function() { mockTransactionService.isActive.andReturn(true); capability.persist(); expect(mockTransactionService.addToTransaction).toHaveBeenCalled(); - - //Test that it was the persist call that was queued mockTransactionService.addToTransaction.mostRecentCall.args[0](); expect(mockPersistence.persist).toHaveBeenCalled(); - }); - - it("if transaction is active, refresh call is queued as cancel" + - " function", function() { - mockTransactionService.isActive.andReturn(true); - capability.persist(); - - //Test that it was the persist call that was queued mockTransactionService.addToTransaction.mostRecentCall.args[1](); expect(mockPersistence.refresh).toHaveBeenCalled(); }); + it("persist call is only added to transaction once", function() { + mockTransactionService.isActive.andReturn(true); + capability.persist(); + expect(mockTransactionService.addToTransaction).toHaveBeenCalled(); + capability.persist(); + expect(mockTransactionService.addToTransaction.calls.length).toBe(1); + + }); + }); } ); \ No newline at end of file diff --git a/platform/commonUI/edit/test/services/TransactionServiceSpec.js b/platform/commonUI/edit/test/services/TransactionServiceSpec.js index 6c057aa9bd..c9f9746c5f 100644 --- a/platform/commonUI/edit/test/services/TransactionServiceSpec.js +++ b/platform/commonUI/edit/test/services/TransactionServiceSpec.js @@ -62,6 +62,17 @@ define( expect(transactionService.onCancels.length).toBe(1); }); + it("size function returns size of commit and cancel queues", function () { + var onCommit = jasmine.createSpy('onCommit'), + onCancel = jasmine.createSpy('onCancel'); + + transactionService.startTransaction(); + transactionService.addToTransaction(onCommit, onCancel); + transactionService.addToTransaction(onCommit, onCancel); + transactionService.addToTransaction(onCommit, onCancel); + expect(transactionService.size()).toBe(3); + }); + describe("commit", function () { var onCommits; diff --git a/platform/representation/test/MCTRepresentationSpec.js b/platform/representation/test/MCTRepresentationSpec.js index 36372a66c4..52d6c70d55 100644 --- a/platform/representation/test/MCTRepresentationSpec.js +++ b/platform/representation/test/MCTRepresentationSpec.js @@ -236,7 +236,7 @@ define( expect(mockLog.warn).toHaveBeenCalled(); }); - it("clears out obsolete peroperties from scope", function () { + it("clears out obsolete properties from scope", function () { mockScope.key = "def"; mockScope.domainObject = mockDomainObject; mockDomainObject.useCapability.andReturn("some value"); @@ -253,6 +253,21 @@ define( expect(mockScope.testCapability).toBeUndefined(); }); + it("registers a status change listener", function () { + mockScope.$watch.calls[2].args[1](mockDomainObject); + expect(mockStatusCapability.listen).toHaveBeenCalled(); + }); + + it("unlistens for status change on scope destruction", function () { + var mockUnlistener = jasmine.createSpy("unlisten"); + mockStatusCapability.listen.andReturn(mockUnlistener); + mockScope.$watch.calls[2].args[1](mockDomainObject); + expect(mockStatusCapability.listen).toHaveBeenCalled(); + + mockScope.$on.calls[1].args[1](); + expect(mockUnlistener).toHaveBeenCalled(); + }); + describe("when a domain object has been observed", function () { var mockContext, mockContext2, @@ -314,6 +329,7 @@ define( mockScope.$watch.calls[0].args[1](); expect(mockChangeTemplate.calls.length).toEqual(callCount); }); + }); From ffacf6e1aeb0f200733472763521fd594a2503f3 Mon Sep 17 00:00:00 2001 From: Henry Date: Thu, 12 May 2016 16:18:48 -0700 Subject: [PATCH 103/132] Resolved residual merge issue --- .../edit/src/policies/EditContextualActionPolicy.js | 8 +++----- 1 file changed, 3 insertions(+), 5 deletions(-) diff --git a/platform/commonUI/edit/src/policies/EditContextualActionPolicy.js b/platform/commonUI/edit/src/policies/EditContextualActionPolicy.js index afccf5a121..af30b5933e 100644 --- a/platform/commonUI/edit/src/policies/EditContextualActionPolicy.js +++ b/platform/commonUI/edit/src/policies/EditContextualActionPolicy.js @@ -34,7 +34,6 @@ define( * from context menu of non-editable objects, when navigated object * is being edited * @constructor - * @param navigationService * @param editModeBlacklist A blacklist of actions disallowed from * context menu when navigated object is being edited * @param nonEditContextBlacklist A blacklist of actions disallowed @@ -58,11 +57,10 @@ define( if (navigatedObject.hasCapability("editor") && navigatedObject.getCapability("editor").isEditContextRoot()) { if (selectedObject.hasCapability("editor") && selectedObject.getCapability("editor").inEditContext()){ - //Target is within the editing context - return this.editBlacklist.indexOf(actionMetadata.key) === -1; + return this.editModeBlacklist.indexOf(actionMetadata.key) === -1; } else { - //Target is not within the editing context - return this.nonEditBlacklist.indexOf(actionMetadata.key) === -1; + //Target is in the context menu + return this.nonEditContextBlacklist.indexOf(actionMetadata.key) === -1; } } else { return true; From 031a46aa8e34f2e428c71b9cf9e4c83412c8d438 Mon Sep 17 00:00:00 2001 From: Victor Woeltjen Date: Thu, 12 May 2016 15:32:38 -0700 Subject: [PATCH 104/132] [Code Style] Add JSHint rules Add JSHint rules to complement allowing multiple var statements, https://github.com/nasa/openmct/issues/142#issuecomment-212187972 [Code Style] Require one decl per var [Code Style] Don't require separate var decls ...but allow them (for compatibility with existing code style) [Code Style] Allow var decl after start of scope [Code Style] Enforce codestyle during verify task --- .jscsrc | 4 +++- .jshintrc | 3 ++- gulpfile.js | 2 +- 3 files changed, 6 insertions(+), 3 deletions(-) diff --git a/.jscsrc b/.jscsrc index ac17b5dc9c..7229391def 100644 --- a/.jscsrc +++ b/.jscsrc @@ -1,3 +1,5 @@ { - "preset": "crockford" + "preset": "crockford", + "requireMultipleVarDecl": false, + "requireVarDeclFirst": false } diff --git a/.jshintrc b/.jshintrc index df3f02a1ff..ca549530ff 100644 --- a/.jshintrc +++ b/.jshintrc @@ -5,7 +5,7 @@ "eqeqeq": true, "forin": true, "freeze": true, - "funcscope": true, + "funcscope": false, "futurehostile": true, "latedef": true, "noarg": true, @@ -16,6 +16,7 @@ "define", "Promise" ], + "shadow": "inner", "strict": "implied", "undef": true, "unused": "vars" diff --git a/gulpfile.js b/gulpfile.js index 28d4530b9c..c3e82295d6 100644 --- a/gulpfile.js +++ b/gulpfile.js @@ -147,6 +147,6 @@ gulp.task('develop', ['serve', 'stylesheets', 'watch']); gulp.task('install', [ 'static', 'scripts' ]); -gulp.task('verify', [ 'lint', 'test' ]); +gulp.task('verify', [ 'lint', 'test', 'checkstyle' ]); gulp.task('build', [ 'verify', 'install' ]); From d08cdfba49e9a6dffec291598adfc68033173b74 Mon Sep 17 00:00:00 2001 From: Henry Date: Thu, 12 May 2016 16:50:19 -0700 Subject: [PATCH 105/132] Fixed linting issues --- .../capabilities/TransactionCapabilityDecorator.js | 1 - .../TransactionalPersistenceCapability.js | 1 - .../commonUI/edit/src/policies/EditActionPolicy.js | 6 +++--- .../TransactionCapabilityDecoratorSpec.js | 5 ----- .../TransactionalPersistenceCapabilitySpec.js | 3 +-- .../edit/test/services/TransactionServiceSpec.js | 1 - .../core/src/capabilities/PersistenceCapability.js | 13 +------------ 7 files changed, 5 insertions(+), 25 deletions(-) diff --git a/platform/commonUI/edit/src/capabilities/TransactionCapabilityDecorator.js b/platform/commonUI/edit/src/capabilities/TransactionCapabilityDecorator.js index 44d2b1ed53..c3a405f099 100644 --- a/platform/commonUI/edit/src/capabilities/TransactionCapabilityDecorator.js +++ b/platform/commonUI/edit/src/capabilities/TransactionCapabilityDecorator.js @@ -24,7 +24,6 @@ define( ['./TransactionalPersistenceCapability'], function (TransactionalPersistenceCapability) { - 'use strict'; /** * Wraps the [PersistenceCapability]{@link PersistenceCapability} with diff --git a/platform/commonUI/edit/src/capabilities/TransactionalPersistenceCapability.js b/platform/commonUI/edit/src/capabilities/TransactionalPersistenceCapability.js index 99ab8b6721..9dc7968d3b 100644 --- a/platform/commonUI/edit/src/capabilities/TransactionalPersistenceCapability.js +++ b/platform/commonUI/edit/src/capabilities/TransactionalPersistenceCapability.js @@ -24,7 +24,6 @@ define( [], function () { - 'use strict'; /** * Wraps persistence capability to enable transactions. Transactions diff --git a/platform/commonUI/edit/src/policies/EditActionPolicy.js b/platform/commonUI/edit/src/policies/EditActionPolicy.js index 78f2c54cb0..f266d580eb 100644 --- a/platform/commonUI/edit/src/policies/EditActionPolicy.js +++ b/platform/commonUI/edit/src/policies/EditActionPolicy.js @@ -72,9 +72,9 @@ define( */ function isEditing(context) { var domainObject = (context || {}).domainObject; - return domainObject - && domainObject.hasCapability('editor') - && domainObject.getCapability('editor').isEditContextRoot(); + return domainObject && + domainObject.hasCapability('editor') && + domainObject.getCapability('editor').isEditContextRoot(); } EditActionPolicy.prototype.allow = function (action, context) { diff --git a/platform/commonUI/edit/test/capabilities/TransactionCapabilityDecoratorSpec.js b/platform/commonUI/edit/test/capabilities/TransactionCapabilityDecoratorSpec.js index 15738167e2..f710cf215e 100644 --- a/platform/commonUI/edit/test/capabilities/TransactionCapabilityDecoratorSpec.js +++ b/platform/commonUI/edit/test/capabilities/TransactionCapabilityDecoratorSpec.js @@ -19,7 +19,6 @@ * this source code distribution or the Licensing information page available * at runtime from the About dialog for additional information. *****************************************************************************/ -/*global define,describe,it,expect,beforeEach,waitsFor,runs,jasmine,xit,xdescribe*/ define( [ @@ -27,7 +26,6 @@ define( "../../src/capabilities/TransactionCapabilityDecorator" ], function (TransactionalPersistenceCapability, TransactionCapabilityDecorator) { - "use strict"; describe("The transaction capability decorator", function () { var mockQ, @@ -36,10 +34,7 @@ define( provider; beforeEach(function() { - //mockQ = jasmine.createSpyObj("$q", []); mockQ = {}; - //mockTransactionService = - // jasmine.createSpyObj("transactionService", []); mockTransactionService = {}; mockCapabilityService = jasmine.createSpyObj("capabilityService", ["getCapabilities"]); mockCapabilityService.getCapabilities.andReturn({ diff --git a/platform/commonUI/edit/test/capabilities/TransactionalPersistenceCapabilitySpec.js b/platform/commonUI/edit/test/capabilities/TransactionalPersistenceCapabilitySpec.js index 8856aca4d5..c0892e6db2 100644 --- a/platform/commonUI/edit/test/capabilities/TransactionalPersistenceCapabilitySpec.js +++ b/platform/commonUI/edit/test/capabilities/TransactionalPersistenceCapabilitySpec.js @@ -19,14 +19,13 @@ * this source code distribution or the Licensing information page available * at runtime from the About dialog for additional information. *****************************************************************************/ -/*global define,describe,it,expect,beforeEach,waitsFor,runs,jasmine,xit,xdescribe*/ +/*global define,describe,it,expect,beforeEach,jasmine*/ define( [ "../../src/capabilities/TransactionalPersistenceCapability" ], function (TransactionalPersistenceCapability) { - "use strict"; function fastPromise(val) { return { diff --git a/platform/commonUI/edit/test/services/TransactionServiceSpec.js b/platform/commonUI/edit/test/services/TransactionServiceSpec.js index c9f9746c5f..5f965decf9 100644 --- a/platform/commonUI/edit/test/services/TransactionServiceSpec.js +++ b/platform/commonUI/edit/test/services/TransactionServiceSpec.js @@ -24,7 +24,6 @@ define( ["../../src/services/TransactionService"], function (TransactionService) { - "use strict"; describe("The Transaction Service", function () { var mockQ, diff --git a/platform/core/src/capabilities/PersistenceCapability.js b/platform/core/src/capabilities/PersistenceCapability.js index 07d73a0548..2f4f3cd53b 100644 --- a/platform/core/src/capabilities/PersistenceCapability.js +++ b/platform/core/src/capabilities/PersistenceCapability.js @@ -60,16 +60,6 @@ define( this.$q = $q; } - // Utility function for creating promise-like objects which - // resolve synchronously when possible - function fastPromise(value) { - return (value || {}).then ? value : { - then: function (callback) { - return fastPromise(callback(value)); - } - }; - } - function getKey(id) { var parts = id.split(":"); return parts.length > 1 ? parts.slice(1).join(":") : id; @@ -157,8 +147,7 @@ define( * when the update is complete */ PersistenceCapability.prototype.refresh = function () { - var domainObject = this.domainObject, - model = domainObject.getModel(); + var domainObject = this.domainObject; // Update a domain object's model upon refresh function updateModel(model) { From a11dba88b239e0be0d46ac3bb158d62d65ffc1e3 Mon Sep 17 00:00:00 2001 From: Henry Date: Thu, 12 May 2016 20:23:33 -0700 Subject: [PATCH 106/132] [New Edit Mode] #634 Removed edit concerns from MctRepresentation --- .../regions/src/InspectorController.js | 8 +++- .../regions/test/InspectorControllerSpec.js | 39 +++++++++++++++++-- .../representation/src/MCTRepresentation.js | 29 ++------------ .../test/MCTRepresentationSpec.js | 15 ------- 4 files changed, 45 insertions(+), 46 deletions(-) diff --git a/platform/commonUI/regions/src/InspectorController.js b/platform/commonUI/regions/src/InspectorController.js index 32b0e1903d..89b88d4b15 100644 --- a/platform/commonUI/regions/src/InspectorController.js +++ b/platform/commonUI/regions/src/InspectorController.js @@ -32,7 +32,8 @@ define( */ function InspectorController($scope, policyService) { var domainObject = $scope.domainObject, - typeCapability = domainObject.getCapability('type'); + typeCapability = domainObject.getCapability('type'), + statusListener; /** * Filters region parts to only those allowed by region policies @@ -50,6 +51,11 @@ define( $scope.regions = filterRegions(typeCapability.getDefinition().inspector || new InspectorRegion()); } + statusListener = domainObject.getCapability("status").listen(setRegions); + $scope.$on("$destroy", function () { + statusListener(); + }); + setRegions(); } diff --git a/platform/commonUI/regions/test/InspectorControllerSpec.js b/platform/commonUI/regions/test/InspectorControllerSpec.js index ad3243c348..9d815e2851 100644 --- a/platform/commonUI/regions/test/InspectorControllerSpec.js +++ b/platform/commonUI/regions/test/InspectorControllerSpec.js @@ -30,6 +30,8 @@ define( mockTypeCapability, mockTypeDefinition, mockPolicyService, + mockStatusCapability, + capabilities = {}, controller; beforeEach(function(){ @@ -47,19 +49,29 @@ define( 'getDefinition' ]); mockTypeCapability.getDefinition.andReturn(mockTypeDefinition); + capabilities.type = mockTypeCapability; + + mockStatusCapability = jasmine.createSpyObj('statusCapability', [ + 'listen' + ]); + capabilities.status = mockStatusCapability; mockDomainObject = jasmine.createSpyObj('domainObject', [ 'getCapability' ]); - mockDomainObject.getCapability.andReturn(mockTypeCapability); + mockDomainObject.getCapability.andCallFake(function (name) { + return capabilities[name]; + }); mockPolicyService = jasmine.createSpyObj('policyService', [ 'allow' ]); - mockScope = { - domainObject: mockDomainObject - }; + mockScope = jasmine.createSpyObj('$scope', + ['$on'] + ); + + mockScope.domainObject = mockDomainObject; }); it("filters out regions disallowed by region policy", function() { @@ -73,6 +85,25 @@ define( controller = new InspectorController(mockScope, mockPolicyService); expect(mockScope.regions.length).toBe(2); }); + + it("Responds to status changes", function() { + mockPolicyService.allow.andReturn(true); + controller = new InspectorController(mockScope, mockPolicyService); + expect(mockScope.regions.length).toBe(2); + expect(mockStatusCapability.listen).toHaveBeenCalled(); + mockPolicyService.allow.andReturn(false); + mockStatusCapability.listen.mostRecentCall.args[0](); + expect(mockScope.regions.length).toBe(0); + }); + + it("Unregisters status listener", function() { + var mockListener = jasmine.createSpy('listener'); + mockStatusCapability.listen.andReturn(mockListener); + controller = new InspectorController(mockScope, mockPolicyService); + expect(mockScope.$on).toHaveBeenCalledWith("$destroy", jasmine.any(Function)); + mockScope.$on.mostRecentCall.args[1](); + expect(mockListener).toHaveBeenCalled(); + }); }); } ); diff --git a/platform/representation/src/MCTRepresentation.js b/platform/representation/src/MCTRepresentation.js index bcaa90e4e7..331139b793 100644 --- a/platform/representation/src/MCTRepresentation.js +++ b/platform/representation/src/MCTRepresentation.js @@ -88,7 +88,6 @@ define( toClear = [], // Properties to clear out of scope on change counter = 0, couldRepresent = false, - couldEdit = false, lastIdPath = [], lastKey, statusListener, @@ -137,14 +136,13 @@ define( }); } - function unchanged(canRepresent, canEdit, idPath, key) { + function unchanged(canRepresent, idPath, key) { return (canRepresent === couldRepresent) && (key === lastKey) && (idPath.length === lastIdPath.length) && idPath.every(function (id, i) { return id === lastIdPath[i]; - }) && - (canEdit === couldEdit); + }); } function getIdPath(domainObject) { @@ -168,11 +166,10 @@ define( representation = lookup($scope.key, domainObject), uses = ((representation || {}).uses || []), canRepresent = !!(representation && domainObject), - canEdit = !!(domainObject && domainObject.hasCapability('editor') && domainObject.getCapability('editor').inEditContext()), idPath = getIdPath(domainObject), key = $scope.key; - if (unchanged(canRepresent, canEdit, idPath, key)) { + if (unchanged(canRepresent, idPath, key)) { return; } @@ -201,7 +198,6 @@ define( // To allow simplified change detection next time around couldRepresent = canRepresent; lastIdPath = idPath; - couldEdit = canEdit; lastKey = key; // Populate scope with fields associated with the current @@ -240,25 +236,6 @@ define( // (to a different object) $scope.$watch("domainObject", refresh); - function listenForStatusChange(object) { - if (statusListener) { - statusListener(); - } - statusListener = object.getCapability("status").listen(refresh); - } - - /** - * Add a listener to the object for status changes. - */ - $scope.$watch("domainObject", function (domainObject, oldDomainObject) { - if (domainObject !== oldDomainObject){ - listenForStatusChange(domainObject); - } - }); - if ($scope.domainObject) { - listenForStatusChange($scope.domainObject); - } - // Finally, also update when there is a new version of that // same domain object; these changes should be tracked in the // model's "modified" field, by the mutation capability. diff --git a/platform/representation/test/MCTRepresentationSpec.js b/platform/representation/test/MCTRepresentationSpec.js index 52d6c70d55..b5e78fec2a 100644 --- a/platform/representation/test/MCTRepresentationSpec.js +++ b/platform/representation/test/MCTRepresentationSpec.js @@ -253,21 +253,6 @@ define( expect(mockScope.testCapability).toBeUndefined(); }); - it("registers a status change listener", function () { - mockScope.$watch.calls[2].args[1](mockDomainObject); - expect(mockStatusCapability.listen).toHaveBeenCalled(); - }); - - it("unlistens for status change on scope destruction", function () { - var mockUnlistener = jasmine.createSpy("unlisten"); - mockStatusCapability.listen.andReturn(mockUnlistener); - mockScope.$watch.calls[2].args[1](mockDomainObject); - expect(mockStatusCapability.listen).toHaveBeenCalled(); - - mockScope.$on.calls[1].args[1](); - expect(mockUnlistener).toHaveBeenCalled(); - }); - describe("when a domain object has been observed", function () { var mockContext, mockContext2, From 54a0de4a08868b637f2937e1e136ebadcde3c40b Mon Sep 17 00:00:00 2001 From: Henry Date: Fri, 13 May 2016 13:45:14 -0700 Subject: [PATCH 107/132] [New Edit Mode] #636 Removed edit concerns from DropGesture --- platform/commonUI/edit/bundle.js | 6 +++--- .../{LinkAction.js => EditAndComposeAction.js} | 10 +++++++--- ...ctionSpec.js => EditAndComposeActionSpec.js} | 17 +++++++++++++---- .../representation/src/gestures/DropGesture.js | 13 +------------ 4 files changed, 24 insertions(+), 22 deletions(-) rename platform/commonUI/edit/src/actions/{LinkAction.js => EditAndComposeAction.js} (87%) rename platform/commonUI/edit/test/actions/{LinkActionSpec.js => EditAndComposeActionSpec.js} (87%) diff --git a/platform/commonUI/edit/bundle.js b/platform/commonUI/edit/bundle.js index fb357c0934..3d00dd80df 100644 --- a/platform/commonUI/edit/bundle.js +++ b/platform/commonUI/edit/bundle.js @@ -26,7 +26,7 @@ define([ "./src/controllers/ElementsController", "./src/controllers/EditObjectController", "./src/directives/MCTBeforeUnload", - "./src/actions/LinkAction", + "./src/actions/EditAndComposeAction", "./src/actions/EditAction", "./src/actions/PropertiesAction", "./src/actions/RemoveAction", @@ -55,7 +55,7 @@ define([ ElementsController, EditObjectController, MCTBeforeUnload, - LinkAction, + EditAndComposeAction, EditAction, PropertiesAction, RemoveAction, @@ -126,7 +126,7 @@ define([ "actions": [ { "key": "compose", - "implementation": LinkAction + "implementation": EditAndComposeAction }, { "key": "edit", diff --git a/platform/commonUI/edit/src/actions/LinkAction.js b/platform/commonUI/edit/src/actions/EditAndComposeAction.js similarity index 87% rename from platform/commonUI/edit/src/actions/LinkAction.js rename to platform/commonUI/edit/src/actions/EditAndComposeAction.js index f12539b1fe..974ab2f001 100644 --- a/platform/commonUI/edit/src/actions/LinkAction.js +++ b/platform/commonUI/edit/src/actions/EditAndComposeAction.js @@ -31,12 +31,12 @@ define( * @memberof platform/commonUI/edit * @implements {Action} */ - function LinkAction(context) { + function EditAndComposeAction(context) { this.domainObject = (context || {}).domainObject; this.selectedObject = (context || {}).selectedObject; } - LinkAction.prototype.perform = function () { + EditAndComposeAction.prototype.perform = function () { var self = this; // Persist changes to the domain object @@ -54,9 +54,13 @@ define( .then(doPersist); } + if (this.domainObject.getCapability('type').getKey() !== 'folder') { + this.domainObject.getCapability('action').perform('edit'); + } + return this.selectedObject && doLink(); }; - return LinkAction; + return EditAndComposeAction; } ); diff --git a/platform/commonUI/edit/test/actions/LinkActionSpec.js b/platform/commonUI/edit/test/actions/EditAndComposeActionSpec.js similarity index 87% rename from platform/commonUI/edit/test/actions/LinkActionSpec.js rename to platform/commonUI/edit/test/actions/EditAndComposeActionSpec.js index 144dd4e395..a02c259fd1 100644 --- a/platform/commonUI/edit/test/actions/LinkActionSpec.js +++ b/platform/commonUI/edit/test/actions/EditAndComposeActionSpec.js @@ -21,8 +21,8 @@ *****************************************************************************/ define( - ["../../src/actions/LinkAction"], - function (LinkAction) { + ["../../src/actions/EditAndComposeAction"], + function (EditAndComposeAction) { describe("The Link action", function () { var mockQ, @@ -31,6 +31,7 @@ define( mockContext, mockComposition, mockPersistence, + mockActionCapability, mockType, actionContext, model, @@ -67,18 +68,21 @@ define( mockContext = jasmine.createSpyObj("context", [ "getParent" ]); mockComposition = jasmine.createSpyObj("composition", [ "invoke", "add" ]); mockPersistence = jasmine.createSpyObj("persistence", [ "persist" ]); - mockType = jasmine.createSpyObj("type", [ "hasFeature" ]); + mockType = jasmine.createSpyObj("type", [ "hasFeature", "getKey" ]); + mockActionCapability = jasmine.createSpyObj("actionCapability", [ "perform"]); mockDomainObject.getId.andReturn("test"); mockDomainObject.getCapability.andReturn(mockContext); mockContext.getParent.andReturn(mockParent); mockType.hasFeature.andReturn(true); + mockType.getKey.andReturn("layout"); mockComposition.invoke.andReturn(mockPromise(true)); mockComposition.add.andReturn(mockPromise(true)); capabilities = { composition: mockComposition, persistence: mockPersistence, + action: mockActionCapability, type: mockType }; model = { @@ -90,7 +94,7 @@ define( selectedObject: mockDomainObject }; - action = new LinkAction(actionContext); + action = new EditAndComposeAction(actionContext); }); @@ -105,6 +109,11 @@ define( expect(mockPersistence.persist).toHaveBeenCalled(); }); + it("enables edit mode", function () { + action.perform(); + expect(mockActionCapability.perform).toHaveBeenCalledWith("edit"); + }); + }); } ); diff --git a/platform/representation/src/gestures/DropGesture.js b/platform/representation/src/gestures/DropGesture.js index f2d64024a3..f76d163ad4 100644 --- a/platform/representation/src/gestures/DropGesture.js +++ b/platform/representation/src/gestures/DropGesture.js @@ -54,9 +54,6 @@ define( // ...and broadcast the event. This allows specific // views to have post-drop behavior which depends on // drop position. - // Also broadcast the editableDomainObject to - // avoid race condition against non-editable - // version in EditRepresenter scope.$broadcast( GestureConstants.MCT_DROP_EVENT, id, @@ -93,21 +90,13 @@ define( function drop(e) { var event = (e || {}).originalEvent || e, - id = event.dataTransfer.getData(GestureConstants.MCT_DRAG_TYPE), - domainObjectType = domainObject.getModel().type; + id = event.dataTransfer.getData(GestureConstants.MCT_DRAG_TYPE); // Handle the drop; add the dropped identifier to the // destination domain object's composition, and persist // the change. if (id) { e.preventDefault(); - - //Use scope.apply, drop event is outside digest cycle - scope.$apply(function () { - if (domainObjectType !== 'folder') { - domainObject.getCapability('action').perform('edit'); - } - }); $q.when(action && action.perform()).then(function () { broadcastDrop(id, event); }); From 96892722a487e27ab99c7502127dae7af859f885 Mon Sep 17 00:00:00 2001 From: Victor Woeltjen Date: Mon, 16 May 2016 09:27:24 -0700 Subject: [PATCH 108/132] [Build] Remove SNAPSHOT status ...to close sprint https://github.com/nasa/openmct/milestones/Herbert --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 9dabea4b7a..af605a0432 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "openmct", - "version": "0.10.1-SNAPSHOT", + "version": "0.10.1", "description": "The Open MCT core platform", "dependencies": { "express": "^4.13.1", From 18fa9aeaf68fceec3024155686338c31bc0d68b8 Mon Sep 17 00:00:00 2001 From: Victor Woeltjen Date: Mon, 16 May 2016 09:36:59 -0700 Subject: [PATCH 109/132] [Build] Bump version number, add -SNAPSHOT ...to begin sprint Huxley, https://github.com/nasa/openmct/milestones/Huxley --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index af605a0432..eb7afd1f70 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "openmct", - "version": "0.10.1", + "version": "0.10.2-SNAPSHOT", "description": "The Open MCT core platform", "dependencies": { "express": "^4.13.1", From a729edd3997fac968ebbc7ac1895412aa9a8837b Mon Sep 17 00:00:00 2001 From: Charles Hacskaylo Date: Mon, 16 May 2016 12:00:29 -0700 Subject: [PATCH 110/132] [Frontend] Label context arrows now always visible open #929 - Also enable frame dragging in title area when editing in Layout; - CSS and markup changes; --- .../res/templates/browse/object-header.html | 2 +- .../general/res/sass/controls/_controls.scss | 18 +++++------------- .../general/res/sass/user-environ/_frame.scss | 2 -- 3 files changed, 6 insertions(+), 16 deletions(-) diff --git a/platform/commonUI/browse/res/templates/browse/object-header.html b/platform/commonUI/browse/res/templates/browse/object-header.html index 2136bdd416..d46cbd91cb 100644 --- a/platform/commonUI/browse/res/templates/browse/object-header.html +++ b/platform/commonUI/browse/res/templates/browse/object-header.html @@ -26,5 +26,5 @@ + class="flex-elem context-available-w"> \ No newline at end of file diff --git a/platform/commonUI/general/res/sass/controls/_controls.scss b/platform/commonUI/general/res/sass/controls/_controls.scss index a2bb0b73bb..e938d1a6e7 100644 --- a/platform/commonUI/general/res/sass/controls/_controls.scss +++ b/platform/commonUI/general/res/sass/controls/_controls.scss @@ -279,21 +279,13 @@ input[type="search"] { padding-right: 0.35em; // For context arrow. Done with em's so pad is relative to the scale of the text. } + .context-available-w { + z-index: 5; + } + .context-available { font-size: 0.7em; - @include webkitProp(flex, '0 0 1'); - } -} - -body.desktop .object-header { - .context-available { - @include trans-prop-nice(opacity, 0.25s); - opacity: 0; - } - &:hover { - .context-available { - opacity: 1; - } + @include flex(0 0 1); } } diff --git a/platform/commonUI/general/res/sass/user-environ/_frame.scss b/platform/commonUI/general/res/sass/user-environ/_frame.scss index 7bc3367c00..64c4dbd69b 100644 --- a/platform/commonUI/general/res/sass/user-environ/_frame.scss +++ b/platform/commonUI/general/res/sass/user-environ/_frame.scss @@ -36,8 +36,6 @@ line-height: $ohH; .left { padding-right: $interiorMarginLg; - - z-index: 5; } } >.object-holder.abs { From 70a13a75d5fde20d5b459c72e8b066f3c655da76 Mon Sep 17 00:00:00 2001 From: Henry Date: Tue, 17 May 2016 13:22:15 -0700 Subject: [PATCH 111/132] Updating tutorials --- docs/src/tutorials/index.md | 655 ++++++++++++++++++++++++------------ 1 file changed, 434 insertions(+), 221 deletions(-) diff --git a/docs/src/tutorials/index.md b/docs/src/tutorials/index.md index 2ebc32b957..7a7f74a166 100644 --- a/docs/src/tutorials/index.md +++ b/docs/src/tutorials/index.md @@ -62,74 +62,19 @@ At this point, it will also be useful to branch off of Open MCT v0.6.2 git branch open-v0.6.2 git checkout -### Configuring Persistence -In its default configuration, Open MCT will try to use ElasticSearch -(expected to be deployed at /elastic on the same HTTP server running Open MCT -Web) to persist user-created domain objects. We don't need that for these -tutorials, so we will replace the ElasticSearch plugin with the example -persistence plugin. This doesn't actually persist, so anything we create within -Open MCT will be lost on reload, but that's fine for purposes of these -tutorials. +### Building Open MCT +Once downloaded, Open MCT can be built with the following command: -To change this configuration, edit bundles.json (at the top level of the Open -MCT Web repository) and replace platform/persistence/elastic with -example/persistence. + npm install -#### Bundle Before -```diff -[ - "platform/framework", - "platform/core", - "platform/representation", - "platform/commonUI/about", - "platform/commonUI/browse", - "platform/commonUI/edit", - "platform/commonUI/dialog", - "platform/commonUI/general", - "platform/containment", - "platform/telemetry", - "platform/features/layout", - "platform/features/pages", - "platform/features/plot", - "platform/features/scrolling", - "platform/forms", - "platform/persistence/queue", -- "platform/persistence/elastic", - "platform/policy", +This will install various dependencies, build CSS from Sass files, run tests, +and lint the source code. - "example/generator" -] -``` -__bundles.json__ +It's not necessary to do this after every code change, unless you are making +changes to stylesheets, or you are running the minified version of the app +(under `dist`). -#### Bundle After -```diff -[ - "platform/framework", - "platform/core", - "platform/representation", - "platform/commonUI/about", - "platform/commonUI/browse", - "platform/commonUI/edit", - "platform/commonUI/dialog", - "platform/commonUI/general", - "platform/containment", - "platform/telemetry", - "platform/features/layout", - "platform/features/pages", - "platform/features/plot", - "platform/features/scrolling", - "platform/forms", - "platform/persistence/queue", - "platform/policy", - -+ "example/persistence", - "example/generator" -] -``` -__bundles.json__ - ### Run a Web Server The next step is to run a web server so that you can view the Open MCT @@ -140,7 +85,7 @@ should not be used in a production environment To run the tutorial web server - node app.js + npm start ### Viewing in Browser @@ -176,7 +121,7 @@ they need to do. This is modelled after the to-do lists at http://todomvc.com/. The first step to adding a new feature to Open MCT is to create the plugin which will expose that feature. A plugin in Open MCT is represented by what is called a bundle; a bundle, in turn, is a directory which contains a file -bundle.json, which in turn describes where other relevant sources & resources +bundle.js, which in turn describes where other relevant sources & resources will be. The syntax of this file is described in more detail in the Open MCT Developer Guide. @@ -185,74 +130,203 @@ to this plugin as tutorials/todo as well.) We will start with an "empty bundle", one which exposes no extensions - which looks like: ```diff -{ - "name": "To-do Plugin", - "description": "Allows creating and editing to-do lists.", - "extensions": { - } -} +define([ + 'legacyRegistry' +], function ( + legacyRegistry +) { + legacyRegistry.register("tutorials/todo", { + "name": "To-do Plugin", + "description": "Allows creating and editing to-do lists.", + "extensions": + { + } + }); +}); + ``` -__tutorials/todo/bundle.json__ +__tutorials/todo/bundle.js__ -We will also include this in our list of active bundles. +With the new bundle defined, it is now necessary to register the bundle with +the application. The details of how a new bundle is defined are in the +process of changing. The Open MCT codebase has started to shift from a +declarative registration style toward an imperative registration style. +The tutorials will be updated with the new bundle registration mechanism once it +has been finalized. #### Before ```diff -[ - "platform/framework", - "platform/core", - "platform/representation", - "platform/commonUI/about", - "platform/commonUI/browse", - "platform/commonUI/edit", - "platform/commonUI/dialog", - "platform/commonUI/general", - "platform/containment", - "platform/telemetry", - "platform/features/layout", - "platform/features/pages", - "platform/features/plot", - "platform/features/scrolling", - "platform/forms", - "platform/persistence/queue", - "platform/policy", +requirejs.config({ + "paths": { + "legacyRegistry": "src/legacyRegistry", + "angular": "bower_components/angular/angular.min", + "angular-route": "bower_components/angular-route/angular-route.min", + "csv": "bower_components/comma-separated-values/csv.min", + "es6-promise": "bower_components/es6-promise/promise.min", + "moment": "bower_components/moment/moment", + "moment-duration-format": "bower_components/moment-duration-format/lib/moment-duration-format", + "saveAs": "bower_components/FileSaver.js/FileSaver.min", + "screenfull": "bower_components/screenfull/dist/screenfull.min", + "text": "bower_components/text/text", + "uuid": "bower_components/node-uuid/uuid", + "zepto": "bower_components/zepto/zepto.min" + }, + "shim": { + "angular": { + "exports": "angular" + }, + "angular-route": { + "deps": [ "angular" ] + }, + "moment-duration-format": { + "deps": [ "moment" ] + }, + "screenfull": { + "exports": "screenfull" + }, + "zepto": { + "exports": "Zepto" + } + } +}); - "example/persistence", - "example/generator" -] +define([ + './platform/framework/src/Main', + 'legacyRegistry', + + './platform/framework/bundle', + './platform/core/bundle', + './platform/representation/bundle', + './platform/commonUI/about/bundle', + './platform/commonUI/browse/bundle', + './platform/commonUI/edit/bundle', + './platform/commonUI/dialog/bundle', + './platform/commonUI/formats/bundle', + './platform/commonUI/general/bundle', + './platform/commonUI/inspect/bundle', + './platform/commonUI/mobile/bundle', + './platform/commonUI/themes/espresso/bundle', + './platform/commonUI/notification/bundle', + './platform/containment/bundle', + './platform/execution/bundle', + './platform/exporters/bundle', + './platform/telemetry/bundle', + './platform/features/clock/bundle', + './platform/features/imagery/bundle', + './platform/features/layout/bundle', + './platform/features/pages/bundle', + './platform/features/plot/bundle', + './platform/features/timeline/bundle', + './platform/features/table/bundle', + './platform/forms/bundle', + './platform/identity/bundle', + './platform/persistence/aggregator/bundle', + './platform/persistence/local/bundle', + './platform/persistence/queue/bundle', + './platform/policy/bundle', + './platform/entanglement/bundle', + './platform/search/bundle', + './platform/status/bundle', + './platform/commonUI/regions/bundle' +], function (Main, legacyRegistry) { + return { + legacyRegistry: legacyRegistry, + run: function () { + return new Main().run(legacyRegistry); + } + }; +}); ``` -__bundles.json__ +__main.js__ #### After ```diff -[ - "platform/framework", - "platform/core", - "platform/representation", - "platform/commonUI/about", - "platform/commonUI/browse", - "platform/commonUI/edit", - "platform/commonUI/dialog", - "platform/commonUI/general", - "platform/containment", - "platform/telemetry", - "platform/features/layout", - "platform/features/pages", - "platform/features/plot", - "platform/features/scrolling", - "platform/forms", - "platform/persistence/queue", - "platform/policy", +requirejs.config({ + "paths": { + "legacyRegistry": "src/legacyRegistry", + "angular": "bower_components/angular/angular.min", + "angular-route": "bower_components/angular-route/angular-route.min", + "csv": "bower_components/comma-separated-values/csv.min", + "es6-promise": "bower_components/es6-promise/promise.min", + "moment": "bower_components/moment/moment", + "moment-duration-format": "bower_components/moment-duration-format/lib/moment-duration-format", + "saveAs": "bower_components/FileSaver.js/FileSaver.min", + "screenfull": "bower_components/screenfull/dist/screenfull.min", + "text": "bower_components/text/text", + "uuid": "bower_components/node-uuid/uuid", + "zepto": "bower_components/zepto/zepto.min" + }, + "shim": { + "angular": { + "exports": "angular" + }, + "angular-route": { + "deps": [ "angular" ] + }, + "moment-duration-format": { + "deps": [ "moment" ] + }, + "screenfull": { + "exports": "screenfull" + }, + "zepto": { + "exports": "Zepto" + } + } +}); - "example/persistence", - "example/generator", +define([ + './platform/framework/src/Main', + 'legacyRegistry', -+ "tutorials/todo" -] + './platform/framework/bundle', + './platform/core/bundle', + './platform/representation/bundle', + './platform/commonUI/about/bundle', + './platform/commonUI/browse/bundle', + './platform/commonUI/edit/bundle', + './platform/commonUI/dialog/bundle', + './platform/commonUI/formats/bundle', + './platform/commonUI/general/bundle', + './platform/commonUI/inspect/bundle', + './platform/commonUI/mobile/bundle', + './platform/commonUI/themes/espresso/bundle', + './platform/commonUI/notification/bundle', + './platform/containment/bundle', + './platform/execution/bundle', + './platform/exporters/bundle', + './platform/telemetry/bundle', + './platform/features/clock/bundle', + './platform/features/imagery/bundle', + './platform/features/layout/bundle', + './platform/features/pages/bundle', + './platform/features/plot/bundle', + './platform/features/timeline/bundle', + './platform/features/table/bundle', + './platform/forms/bundle', + './platform/identity/bundle', + './platform/persistence/aggregator/bundle', + './platform/persistence/local/bundle', + './platform/persistence/queue/bundle', + './platform/policy/bundle', + './platform/entanglement/bundle', + './platform/search/bundle', + './platform/status/bundle', + './platform/commonUI/regions/bundle', + ++ './tutorials/todo/bundle' +], function (Main, legacyRegistry) { + return { + legacyRegistry: legacyRegistry, + run: function () { + return new Main().run(legacyRegistry); + } + }; +}); ``` -__bundles.json__ +__main.js__ At this point, we can reload Open MCT. We haven't introduced any new functionality, so we don't see anything different, but if we run with logging @@ -275,11 +349,17 @@ In the case of our to-do list feature, the to-do list itself is the thing we'll want users to be able to create and edit. So, we will add that as a new type in our bundle definition: ```diff -{ - "name": "To-do Plugin", - "description": "Allows creating and editing to-do lists.", - "extensions": { -+ "types": [ +define([ + 'legacyRegistry' +], function ( + legacyRegistry +) { + legacyRegistry.register("tutorials/todo", { + "name": "To-do Plugin", + "description": "Allows creating and editing to-do lists.", + "extensions": + { ++ "types": [ + { + "key": "example.todo", + "name": "To-Do List", @@ -287,11 +367,12 @@ our bundle definition: + "description": "A list of things that need to be done.", + "features": ["creation"] + } - ] - } -} + } + }); +}); + ``` -__tutorials/todo/bundle.json__ +__tutorials/todo/bundle.js__ What have we done here? We've stated that this bundle includes extensions of the category _types_, which is used to describe domain object types. Then, we've @@ -366,7 +447,12 @@ To expose this view in Open MCT, we need to declare it in our bundle definition: ```diff -{ +define([ + 'legacyRegistry' +], function ( + legacyRegistry +) { + legacyRegistry.register("tutorials/todo", { "name": "To-do Plugin", "description": "Allows creating and editing to-do lists.", "extensions": { @@ -389,9 +475,10 @@ definition: + } + ] } -} + }); +}); ``` -__tutorials/todo/bundle.json__ +__tutorials/todo/bundle.js__ Here, we've added another extension, this time belonging to category `views`. It contains the following properties: @@ -416,7 +503,12 @@ will specify an initial state for To-do List domain object models in the definition of that type. ```diff -{ +define([ + 'legacyRegistry' +], function ( + legacyRegistry +) { + legacyRegistry.register("tutorials/todo", { "name": "To-do Plugin", "description": "Allows creating and editing to-do lists.", "extensions": { @@ -445,9 +537,10 @@ definition of that type. } ] } -} + }); +}); ``` -__tutorials/todo/bundle.json__ +__tutorials/todo/bundle.js__ Now, when To-do List objects are created in Open MCT, they will initially have the state described by that model property. @@ -580,7 +673,14 @@ If we were to try to run at this point, we'd run into problems because the it in our bundle definition, as an extension of category `controllers`: ```diff -{ +define([ + 'legacyRegistry', + './controllers/TodoController' +], function ( + legacyRegistry, + TodoController +) { + legacyRegistry.register("tutorials/todo", { "name": "To-do Plugin", "description": "Allows creating and editing to-do lists.", "extensions": { @@ -611,14 +711,15 @@ it in our bundle definition, as an extension of category `controllers`: + "controllers": [ + { + "key": "TodoController", -+ "implementation": "controllers/TodoController.js", ++ "implementation": TodoController, + "depends": [ "$scope" ] + } + ] } -} + }); +}); ``` -__tutorials/todo/bundle.json__ +__tutorials/todo/bundle.js__ In this extension definition we have: @@ -665,7 +766,14 @@ view. The contents of this tool bar are defined declaratively in a view's extension definition. ```diff -{ +define([ + 'legacyRegistry', + './controllers/TodoController' +], function ( + legacyRegistry, + TodoController +) { + legacyRegistry.register("tutorials/todo", { "name": "To-do Plugin", "description": "Allows creating and editing to-do lists.", "extensions": { @@ -719,14 +827,15 @@ extension definition. "controllers": [ { "key": "TodoController", - "implementation": "controllers/TodoController.js", + "implementation": TodoController, "depends": [ "$scope" ] } ] } -} + }); +}); ``` -__tutorials/todo/bundle.json__ +__tutorials/todo/bundle.js__ What we've stated here is that the To-Do List's view will have a toolbar which contains two sections (which will be visually separated by a divider), each of @@ -884,7 +993,14 @@ __tutorials/todo/res/templates/todo.html__ Finally, the `TodoController` uses the `dialogService` now, so we need to declare that dependency in its extension definition: ```diff -{ +define([ + 'legacyRegistry', + './controllers/TodoController' +], function ( + legacyRegistry, + TodoController +) { + legacyRegistry.register("tutorials/todo", { "name": "To-do Plugin", "description": "Allows creating and editing to-do lists.", "extensions": { @@ -938,14 +1054,15 @@ declare that dependency in its extension definition: "controllers": [ { "key": "TodoController", - "implementation": "controllers/TodoController.js", + "implementation": TodoController, + "depends": [ "$scope", "dialogService" ] } ] } -} + }); +}); ``` -__tutorials/todo/bundle.json__ +__tutorials/todo/bundle.js__ If we now reload Open MCT, we'll be able to see the new functionality we've added. If we Create a new To-Do List, navigate to it, and click the button with @@ -1140,7 +1257,14 @@ To include this CSS file in our running instance of Open MCT, we need to declare it in our bundle definition, this time as an extension of category `stylesheets`: ```diff -{ +define([ + 'legacyRegistry', + './controllers/TodoController' +], function ( + legacyRegistry, + TodoController +) { + legacyRegistry.register("tutorials/todo", { "name": "To-do Plugin", "description": "Allows creating and editing to-do lists.", "extensions": { @@ -1191,7 +1315,7 @@ declare it in our bundle definition, this time as an extension of category "controllers": [ { "key": "TodoController", - "implementation": "controllers/TodoController.js", + "implementation": TodoController, "depends": [ "$scope", "dialogService" ] } ], @@ -1201,9 +1325,10 @@ declare it in our bundle definition, this time as an extension of category + } + ] } -} + }); +}); ``` -__tutorials/todo/bundle.json__ +__tutorials/todo/bundle.js__ Note that we've also removed our placeholder tasks from the `model` of the To-Do List's type above; now To-Do Lists will start off empty. @@ -1270,7 +1395,12 @@ well. We'll be creating this plugin in `tutorials/bargraph`, so our initial bundle definition looks like: ```diff -{ +define([ + 'legacyRegistry' +], function ( + legacyRegistry +) { + legacyRegistry.register("tutorials/bargraph", { "name": "Bar Graph", "description": "Provides the Bar Graph view of telemetry elements.", "extensions": { @@ -1290,10 +1420,11 @@ bundle definition looks like: } ] } -} + }); +}); ``` -__tutorials/bargraph/bundle.json__ +__tutorials/bargraph/bundle.js__ The view definition should look familiar after the To-Do List tutorial, with some additions: @@ -1435,7 +1566,7 @@ The corresponding CSS file which styles and positions these elements: ``` __tutorials/bargraph/res/css/bargraph.css__ -This is already enough that, if we add `"tutorials/bargraph"` to `bundles.json`, +This is already enough that, if we add `"tutorials/bargraph"` to `main.js`, we should be able to run Open MCT and see our Bar Graph as an available view for domain objects which provide telemetry (such as the example _Sine Wave Generator_) as well as for _Telemetry Panel_ objects: @@ -1563,7 +1694,14 @@ depends declaration includes both `$scope` as well as the `telemetryHandler` service we made use of. ```diff -{ +define([ + 'legacyRegistry', + './controllers/BarGraphController' +], function ( + legacyRegistry, + BarGraphController +) { + legacyRegistry.register("tutorials/bargraph", { "name": "Bar Graph", "description": "Provides the Bar Graph view of telemetry elements.", "extensions": { @@ -1585,14 +1723,15 @@ service we made use of. + "controllers": [ + { + "key": "BarGraphController", -+ "implementation": "controllers/BarGraphController.js", ++ "implementation": BarGraphController, + "depends": [ "$scope", "telemetryHandler" ] + } + ] } -} + }); +}); ``` -__tutorials/bargraph/bundle.json__ +__tutorials/bargraph/bundle.js__ When we reload Open MCT, we are now able to see that our bar graph view correctly labels one bar per telemetry-providing domain object, as shown for @@ -1721,7 +1860,14 @@ when we return to our view later, those changes will be persisted. First, let's add a tool bar for changing these three values in Edit mode: ```diff -{ +define([ + 'legacyRegistry', + './controllers/BarGraphController' +], function ( + legacyRegistry, + BarGraphController +) { + legacyRegistry.register("tutorials/bargraph", { "name": "Bar Graph", "description": "Provides the Bar Graph view of telemetry elements.", "extensions": { @@ -1772,14 +1918,15 @@ First, let's add a tool bar for changing these three values in Edit mode: "controllers": [ { "key": "BarGraphController", - "implementation": "controllers/BarGraphController.js", + "implementation": BarGraphController, "depends": [ "$scope", "telemetryHandler" ] } ] } -} + }); +}); ``` -__tutorials/bargraph/bundle.json__ +__tutorials/bargraph/bundle.js__ As we saw in to To-Do List plugin, a tool bar needs either a selected object or a view proxy to work from. We will add this to our controller, and additionally @@ -2192,7 +2339,12 @@ add a top-level object which will serve as a container; in the next step, we will populate this with the contents of the telemetry dictionary (which we will retrieve from the server.) - { +define([ + 'legacyRegistry' +], function ( + legacyRegistry +) { + legacyRegistry.register("tutorials/telemetry", { "name": "Example Telemetry Adapter", "extensions": { "types": [ @@ -2214,8 +2366,9 @@ will retrieve from the server.) } ] } - } -__tutorials/telemetry/bundle.json__ + }); +}); +__tutorials/telemetry/bundle.js__ Here, we've created our initial telemetry plugin. This exposes a new domain object type (the "Spacecraft", which will be represented by the contents of the @@ -2226,55 +2379,91 @@ preferred so that this shows up near the top, instead of below My Items. If we include this in our set of active bundles: ```diff -[ - "platform/framework", - "platform/core", - "platform/representation", - "platform/commonUI/about", - "platform/commonUI/browse", - "platform/commonUI/edit", - "platform/commonUI/dialog", - "platform/commonUI/general", - "platform/containment", - "platform/telemetry", - "platform/features/layout", - "platform/features/pages", - "platform/features/plot", - "platform/features/scrolling", - "platform/forms", - "platform/persistence/queue", - "platform/policy", +requirejs.config({ + "paths": { + "legacyRegistry": "src/legacyRegistry", + "angular": "bower_components/angular/angular.min", + "angular-route": "bower_components/angular-route/angular-route.min", + "csv": "bower_components/comma-separated-values/csv.min", + "es6-promise": "bower_components/es6-promise/promise.min", + "moment": "bower_components/moment/moment", + "moment-duration-format": "bower_components/moment-duration-format/lib/moment-duration-format", + "saveAs": "bower_components/FileSaver.js/FileSaver.min", + "screenfull": "bower_components/screenfull/dist/screenfull.min", + "text": "bower_components/text/text", + "uuid": "bower_components/node-uuid/uuid", + "zepto": "bower_components/zepto/zepto.min" + }, + "shim": { + "angular": { + "exports": "angular" + }, + "angular-route": { + "deps": [ "angular" ] + }, + "moment-duration-format": { + "deps": [ "moment" ] + }, + "screenfull": { + "exports": "screenfull" + }, + "zepto": { + "exports": "Zepto" + } + } +}); - "example/persistence", - "example/generator" -] -[ - "platform/framework", - "platform/core", - "platform/representation", - "platform/commonUI/about", - "platform/commonUI/browse", - "platform/commonUI/edit", - "platform/commonUI/dialog", - "platform/commonUI/general", - "platform/containment", - "platform/telemetry", - "platform/features/layout", - "platform/features/pages", - "platform/features/plot", - "platform/features/scrolling", - "platform/forms", - "platform/persistence/queue", - "platform/policy", +define([ + './platform/framework/src/Main', + 'legacyRegistry', - "example/persistence", - "example/generator", - -+ "tutorials/telemetry" -] + './platform/framework/bundle', + './platform/core/bundle', + './platform/representation/bundle', + './platform/commonUI/about/bundle', + './platform/commonUI/browse/bundle', + './platform/commonUI/edit/bundle', + './platform/commonUI/dialog/bundle', + './platform/commonUI/formats/bundle', + './platform/commonUI/general/bundle', + './platform/commonUI/inspect/bundle', + './platform/commonUI/mobile/bundle', + './platform/commonUI/themes/espresso/bundle', + './platform/commonUI/notification/bundle', + './platform/containment/bundle', + './platform/execution/bundle', + './platform/exporters/bundle', + './platform/telemetry/bundle', + './platform/features/clock/bundle', + './platform/features/imagery/bundle', + './platform/features/layout/bundle', + './platform/features/pages/bundle', + './platform/features/plot/bundle', + './platform/features/timeline/bundle', + './platform/features/table/bundle', + './platform/forms/bundle', + './platform/identity/bundle', + './platform/persistence/aggregator/bundle', + './platform/persistence/local/bundle', + './platform/persistence/queue/bundle', + './platform/policy/bundle', + './platform/entanglement/bundle', + './platform/search/bundle', + './platform/status/bundle', + './platform/commonUI/regions/bundle', + ++ './tutorials/telemetry/bundle' +], function (Main, legacyRegistry) { + return { + legacyRegistry: legacyRegistry, + run: function () { + return new Main().run(legacyRegistry); + } + }; +}); ``` -__bundles.json__ +__main.js__ ...we will be able to reload Open MCT and see that it is present: @@ -2534,12 +2723,23 @@ name to match what was in the dictionary, and set its `composition` to an array of domain object identifiers for all subsystems contained in the dictionary (using the same identifier prefix as before.) -Finally, we wire in these changes by modifying our plugin's `bundle.json` to +Finally, we wire in these changes by modifying our plugin's `bundle.js` to provide metadata about how these pieces interact (both with each other, and with the platform): ```diff -{ +define([ + 'legacyRegistry', + './ExampleTelemetryServerAdapter', + './ExampleTelemetryInitializer', + './ExampleTelemetryModelProvider' +], function ( + legacyRegistry, + ExampleTelemetryServerAdapter, + ExampleTelemetryInitializer, + ExampleTelemetryModelProvider +) { + legacyRegistry.register("tutorials/telemetry", { "name": "Example Telemetry Adapter", "extensions": { "types": [ @@ -2584,7 +2784,7 @@ with the platform): + "services": [ + { + "key": "example.adapter", -+ "implementation": "ExampleTelemetryServerAdapter.js", ++ "implementation": ExampleTelemetryServerAdapter, + "depends": [ "$q", "EXAMPLE_WS_URL" ] + } + ], @@ -2597,7 +2797,7 @@ with the platform): + ], + "runs": [ + { -+ "implementation": "ExampleTelemetryInitializer.js", ++ "implementation": ExampleTelemetryInitializer, + "depends": [ "example.adapter", "objectService" ] + } + ], @@ -2605,14 +2805,15 @@ with the platform): + { + "provides": "modelService", + "type": "provider", -+ "implementation": "ExampleTelemetryModelProvider.js", ++ "implementation": ExampleTelemetryModelProvider, + "depends": [ "example.adapter", "$q" ] + } + ] - } -} + } + }); +}); ``` -__tutorials/telemetry/bundle.json__ +__tutorials/telemetry/bundle.js__ A summary of what we've added here: @@ -2843,7 +3044,18 @@ it with the interface expected by the platform (the methods shown.) Finally, we expose this `telemetryService` provider declaratively: ```diff -{ +define([ + 'legacyRegistry', + './ExampleTelemetryServerAdapter', + './ExampleTelemetryInitializer', + './ExampleTelemetryModelProvider' +], function ( + legacyRegistry, + ExampleTelemetryServerAdapter, + ExampleTelemetryInitializer, + ExampleTelemetryModelProvider +) { + legacyRegistry.register("tutorials/telemetry", { "name": "Example Telemetry Adapter", "extensions": { "types": [ @@ -2919,10 +3131,11 @@ Finally, we expose this `telemetryService` provider declaratively: + "depends": [ "example.adapter", "$q" ] + } ] - } -} + } + }); +}); ``` -__tutorials/telemetry/bundle.json__ +__tutorials/telemetry/bundle.js__ Now, if we navigate to one of our numeric measurements, we should see a plot of its historical telemetry: From 5eff4e45c9c585b881ae33f43ad0f8890ac3724f Mon Sep 17 00:00:00 2001 From: Henry Date: Tue, 17 May 2016 17:24:32 -0700 Subject: [PATCH 112/132] [Tutorials] #907 Updated tutorials to use new bundle registration mechanism --- docs/src/tutorials/index.md | 73 ++++++++++++++++++++----------------- 1 file changed, 40 insertions(+), 33 deletions(-) diff --git a/docs/src/tutorials/index.md b/docs/src/tutorials/index.md index 7a7f74a166..84c571bec8 100644 --- a/docs/src/tutorials/index.md +++ b/docs/src/tutorials/index.md @@ -363,11 +363,11 @@ define([ + { + "key": "example.todo", + "name": "To-Do List", -+ "glyph": "j", ++ "glyph": "2", + "description": "A list of things that need to be done.", + "features": ["creation"] + } - } ++ ]} }); }); @@ -460,7 +460,7 @@ define([ { "key": "example.todo", "name": "To-Do List", - "glyph": "j", + "glyph": "2", "description": "A list of things that need to be done.", "features": ["creation"] } @@ -469,9 +469,10 @@ define([ + { + "key": "example.todo", + "type": "example.todo", -+ "glyph": "j", ++ "glyph": "2", + "name": "List", -+ "templateUrl": "templates/todo.html" ++ "templateUrl": "templates/todo.html", ++ "editable": true + } + ] } @@ -516,7 +517,7 @@ define([ { "key": "example.todo", "name": "To-Do List", - "glyph": "j", + "glyph": "2", "description": "A list of things that need to be done.", "features": ["creation"], + "model": { @@ -531,9 +532,10 @@ define([ { "key": "example.todo", "type": "example.todo", - "glyph": "j", + "glyph": "2", "name": "List", - "templateUrl": "templates/todo.html" + "templateUrl": "templates/todo.html", + "editable": true } ] } @@ -675,7 +677,7 @@ it in our bundle definition, as an extension of category `controllers`: ```diff define([ 'legacyRegistry', - './controllers/TodoController' + './src/controllers/TodoController' ], function ( legacyRegistry, TodoController @@ -688,7 +690,7 @@ define([ { "key": "example.todo", "name": "To-Do List", - "glyph": "j", + "glyph": "2", "description": "A list of things that need to be done.", "features": ["creation"], "model": { @@ -703,9 +705,10 @@ define([ { "key": "example.todo", "type": "example.todo", - "glyph": "j", + "glyph": "2", "name": "List", - "templateUrl": "templates/todo.html" + "templateUrl": "templates/todo.html", + "editable": true } ], + "controllers": [ @@ -768,7 +771,7 @@ extension definition. ```diff define([ 'legacyRegistry', - './controllers/TodoController' + './src/controllers/TodoController' ], function ( legacyRegistry, TodoController @@ -781,7 +784,7 @@ define([ { "key": "example.todo", "name": "To-Do List", - "glyph": "j", + "glyph": "2", "description": "A list of things that need to be done.", "features": ["creation"], "model": { @@ -796,9 +799,10 @@ define([ { "key": "example.todo", "type": "example.todo", - "glyph": "j", + "glyph": "2", "name": "List", "templateUrl": "templates/todo.html", + "editable": true, + "toolbar": { + "sections": [ + { @@ -995,7 +999,7 @@ declare that dependency in its extension definition: ```diff define([ 'legacyRegistry', - './controllers/TodoController' + './src/controllers/TodoController' ], function ( legacyRegistry, TodoController @@ -1008,7 +1012,7 @@ define([ { "key": "example.todo", "name": "To-Do List", - "glyph": "j", + "glyph": "2", "description": "A list of things that need to be done.", "features": ["creation"], "model": { @@ -1023,9 +1027,10 @@ define([ { "key": "example.todo", "type": "example.todo", - "glyph": "j", + "glyph": "2", "name": "List", "templateUrl": "templates/todo.html", + "editable": true, "toolbar": { "sections": [ { @@ -1259,7 +1264,7 @@ declare it in our bundle definition, this time as an extension of category ```diff define([ 'legacyRegistry', - './controllers/TodoController' + './src/controllers/TodoController' ], function ( legacyRegistry, TodoController @@ -1272,7 +1277,7 @@ define([ { "key": "example.todo", "name": "To-Do List", - "glyph": "j", + "glyph": "2", "description": "A list of things that need to be done.", "features": ["creation"], "model": { @@ -1284,9 +1289,10 @@ define([ { "key": "example.todo", "type": "example.todo", - "glyph": "j", + "glyph": "2", "name": "List", "templateUrl": "templates/todo.html", + "editable": true, "toolbar": { "sections": [ { @@ -1334,6 +1340,7 @@ Note that we've also removed our placeholder tasks from the `model` of the To-Do List's type above; now To-Do Lists will start off empty. Finally, let's utilize these changes from our view's template: + ```diff +
        +
        @@ -1641,7 +1648,7 @@ telemetry objects in view, as well as the width for each bar. We will also utilize this from our template: ```diff -
        ++
        +
        +
        Date: Wed, 18 May 2016 16:59:23 -0700 Subject: [PATCH 113/132] [Website] Automate site build process --- build-docs.sh | 27 +++++++++++++-------------- circle.yml | 6 ++++++ 2 files changed, 19 insertions(+), 14 deletions(-) diff --git a/build-docs.sh b/build-docs.sh index c318a0dbda..5b94f65d13 100755 --- a/build-docs.sh +++ b/build-docs.sh @@ -25,14 +25,15 @@ # Script to build and deploy docs to github pages. OUTPUT_DIRECTORY="target/docs" -REPOSITORY_URL="git@github.com:nasa/openmctweb.git" +REPOSITORY_URL="git@github.com:nasa/openmct-website.git" +WEBSITE_DIRECTORY="website" BUILD_SHA=`git rev-parse head` # A remote will be created for the git repository we are pushing to. # Don't worry, as this entire directory will get trashed inbetween builds. REMOTE_NAME="documentation" -WEBSITE_BRANCH="gh-pages" +WEBSITE_BRANCH="master" # Clean output directory, JSDOC will recreate if [ -d $OUTPUT_DIRECTORY ]; then @@ -40,23 +41,21 @@ if [ -d $OUTPUT_DIRECTORY ]; then fi npm run docs -cd $OUTPUT_DIRECTORY || exit 1 -echo "git init" -git init +echo "git clone $REPOSITORY_URL website" +git clone $REPOSITORY_URL website +echo "cp -r $OUTPUT_DIRECTORY $WEBSITE_DIRECTORY/docs" +cp -r $OUTPUT_DIRECTORY $WEBSITE_DIRECTORY/docs +echo "cd $WEBSITE_DIRECTORY" +cd $WEBSITE_DIRECTORY # Configure github for CircleCI user. git config user.email "buildbot@circleci.com" git config user.name "BuildBot" -echo "git remote add $REMOTE_NAME $REPOSITORY_URL" -git remote add $REMOTE_NAME $REPOSITORY_URL echo "git add ." git add . -echo "git commit -m \"Generate docs from build $BUILD_SHA\"" -git commit -m "Generate docs from build $BUILD_SHA" - -echo "git push $REMOTE_NAME HEAD:$WEBSITE_BRANCH -f" -git push $REMOTE_NAME HEAD:$WEBSITE_BRANCH -f - -echo "Documentation pushed to gh-pages branch." +echo "git commit -m \"Docs updated from build build $BUILD_SHA\"" +git commit -m "Docs updated from build build $BUILD_SHA" +echo "git push" +git push diff --git a/circle.yml b/circle.yml index 472fdf7c17..aba013d239 100644 --- a/circle.yml +++ b/circle.yml @@ -3,6 +3,12 @@ deployment: branch: master heroku: appname: openmctweb-demo + website: + branch: openmct-website + commands: + - git clone + - git push git@heroku.com:openmctweb-demo.git $CIRCLE_SHA1:refs/heads/master + openmct-demo: branch: live_demo heroku: From b2c6db6207069488958e57f69eb9ab567d917316 Mon Sep 17 00:00:00 2001 From: Henry Date: Wed, 18 May 2016 17:00:16 -0700 Subject: [PATCH 114/132] Changed circleci.yml --- build-docs.sh | 6 ++---- circle.yml | 5 ++--- 2 files changed, 4 insertions(+), 7 deletions(-) diff --git a/build-docs.sh b/build-docs.sh index 5b94f65d13..abdb7bbdbd 100755 --- a/build-docs.sh +++ b/build-docs.sh @@ -43,11 +43,11 @@ fi npm run docs echo "git clone $REPOSITORY_URL website" -git clone $REPOSITORY_URL website +git clone $REPOSITORY_URL website || exit 1 echo "cp -r $OUTPUT_DIRECTORY $WEBSITE_DIRECTORY/docs" cp -r $OUTPUT_DIRECTORY $WEBSITE_DIRECTORY/docs echo "cd $WEBSITE_DIRECTORY" -cd $WEBSITE_DIRECTORY +cd $WEBSITE_DIRECTORY || exit 1 # Configure github for CircleCI user. git config user.email "buildbot@circleci.com" @@ -57,5 +57,3 @@ echo "git add ." git add . echo "git commit -m \"Docs updated from build build $BUILD_SHA\"" git commit -m "Docs updated from build build $BUILD_SHA" -echo "git push" -git push diff --git a/circle.yml b/circle.yml index aba013d239..5ed3bf7147 100644 --- a/circle.yml +++ b/circle.yml @@ -6,9 +6,8 @@ deployment: website: branch: openmct-website commands: - - git clone - - git push git@heroku.com:openmctweb-demo.git $CIRCLE_SHA1:refs/heads/master - + - npm install canvas nomnoml + - ./build-docs.sh openmct-demo: branch: live_demo heroku: From edb158f2d345b3621e768dd30320388611bd6f67 Mon Sep 17 00:00:00 2001 From: Henry Date: Thu, 19 May 2016 10:30:28 -0700 Subject: [PATCH 115/132] [Website] Added push to website repo --- build-docs.sh | 1 + 1 file changed, 1 insertion(+) diff --git a/build-docs.sh b/build-docs.sh index abdb7bbdbd..9fdfdc91d3 100755 --- a/build-docs.sh +++ b/build-docs.sh @@ -57,3 +57,4 @@ echo "git add ." git add . echo "git commit -m \"Docs updated from build build $BUILD_SHA\"" git commit -m "Docs updated from build build $BUILD_SHA" +git push From fa77139077256b4d55669b1e3d2ae779d60b6a71 Mon Sep 17 00:00:00 2001 From: Victor Woeltjen Date: Thu, 19 May 2016 11:29:13 -0700 Subject: [PATCH 116/132] [Code Style] Run gulp fixstyle ...to apply code style settings from #142. --- main.js | 4 +- .../about/test/AboutControllerSpec.js | 2 +- .../about/test/LicenseControllerSpec.js | 2 +- .../commonUI/about/test/LogoControllerSpec.js | 2 +- .../commonUI/browse/src/BrowseController.js | 18 ++-- .../browse/src/BrowseObjectController.js | 4 +- .../commonUI/browse/src/InspectorRegion.js | 2 +- .../browse/src/MenuArrowController.js | 8 +- .../commonUI/browse/src/creation/AddAction.js | 8 +- .../browse/src/creation/CreateAction.js | 4 +- .../browse/src/creation/CreateWizard.js | 4 +- .../browse/src/creation/CreationPolicy.js | 2 +- .../browse/src/creation/LocatorController.js | 4 +- .../browse/test/BrowseControllerSpec.js | 14 +-- .../browse/test/BrowseObjectControllerSpec.js | 6 +- .../browse/test/InspectorRegionSpec.js | 2 +- .../browse/test/MenuArrowControllerSpec.js | 24 +++--- .../browse/test/PaneControllerSpec.js | 6 +- .../test/creation/AddActionProviderSpec.js | 18 ++-- .../test/creation/CreateActionProviderSpec.js | 18 ++-- .../browse/test/creation/CreateActionSpec.js | 6 +- .../test/creation/CreateMenuControllerSpec.js | 2 +- .../browse/test/creation/CreateWizardSpec.js | 10 +-- .../test/creation/CreationPolicySpec.js | 2 +- .../test/creation/CreationServiceSpec.js | 12 +-- .../test/creation/LocatorControllerSpec.js | 32 +++---- .../test/navigation/NavigateActionSpec.js | 6 +- .../test/windowing/FullscreenActionSpec.js | 2 +- .../browse/test/windowing/NewTabActionSpec.js | 22 ++--- .../browse/test/windowing/WindowTitlerSpec.js | 6 +- platform/commonUI/dialog/src/DialogService.js | 6 +- .../commonUI/dialog/test/DialogServiceSpec.js | 12 +-- .../dialog/test/OverlayServiceSpec.js | 12 +-- platform/commonUI/edit/bundle.js | 4 +- .../commonUI/edit/src/actions/CancelAction.js | 2 +- .../commonUI/edit/src/actions/EditAction.js | 2 +- .../commonUI/edit/src/actions/SaveAction.js | 2 +- .../commonUI/edit/src/actions/SaveAsAction.js | 12 +-- .../edit/src/capabilities/EditorCapability.js | 8 +- .../TransactionalPersistenceCapability.js | 4 +- .../src/controllers/EditObjectController.js | 6 +- .../src/controllers/ElementsController.js | 2 +- .../edit/src/policies/EditActionPolicy.js | 2 +- .../policies/EditContextualActionPolicy.js | 2 +- .../edit/src/policies/EditNavigationPolicy.js | 2 +- .../edit/src/representers/EditRepresenter.js | 8 +- .../edit/src/representers/EditToolbar.js | 8 +- .../edit/src/services/TransactionService.js | 6 +- .../edit/test/actions/CancelActionSpec.js | 8 +- .../edit/test/actions/EditActionSpec.js | 14 +-- .../edit/test/actions/LinkActionSpec.js | 12 +-- .../edit/test/actions/PropertiesActionSpec.js | 24 ++++-- .../edit/test/actions/PropertiesDialogSpec.js | 16 +++- .../edit/test/actions/RemoveActionSpec.js | 58 ++++++------- .../edit/test/actions/SaveActionSpec.js | 8 +- .../edit/test/actions/SaveAsActionSpec.js | 8 +- .../test/capabilities/EditorCapabilitySpec.js | 16 ++-- .../TransactionCapabilityDecoratorSpec.js | 8 +- .../TransactionalPersistenceCapabilitySpec.js | 12 +-- .../controllers/EditActionControllerSpec.js | 2 +- .../test/controllers/EditControllerSpec.js | 10 +-- .../controllers/EditPanesControllerSpec.js | 6 +- .../controllers/ElementsControllerSpec.js | 4 +- .../test/directives/MCTBeforeUnloadSpec.js | 2 +- .../test/policies/EditActionPolicySpec.js | 22 ++--- .../EditContextualActionPolicySpec.js | 12 +-- .../test/policies/EditableViewPolicySpec.js | 4 +- .../test/representers/EditRepresenterSpec.js | 2 +- .../EditToolbarRepresenterSpec.js | 10 +-- .../edit/test/representers/EditToolbarSpec.js | 46 +++++----- .../test/services/TransactionServiceSpec.js | 16 ++-- .../formats/test/FormatProviderSpec.js | 8 +- platform/commonUI/general/bundle.js | 2 +- .../src/controllers/BannerController.js | 14 +-- .../src/controllers/ClickAwayController.js | 2 +- .../controllers/DateTimePickerController.js | 2 +- .../controllers/ObjectInspectorController.js | 42 ++++----- .../src/controllers/SelectorController.js | 4 +- .../general/src/directives/MCTDrag.js | 2 +- .../general/src/directives/MCTPopup.js | 2 +- .../general/src/directives/MCTSplitter.js | 2 +- .../general/src/services/PopupService.js | 4 +- .../commonUI/general/src/ui/TreeLabelView.js | 2 +- .../general/test/StyleSheetLoaderSpec.js | 2 +- .../controllers/ActionGroupControllerSpec.js | 2 +- .../controllers/BottomBarControllerSpec.js | 8 +- .../controllers/ClickAwayControllerSpec.js | 2 +- .../controllers/ContextMenuControllerSpec.js | 2 +- .../DateTimePickerControllerSpec.js | 2 +- .../controllers/GetterSetterControllerSpec.js | 2 +- .../ObjectInspectorControllerSpec.js | 28 +++--- .../controllers/SelectorControllerSpec.js | 12 +-- .../controllers/TimeRangeControllerSpec.js | 6 +- .../test/controllers/ToggleControllerSpec.js | 2 +- .../controllers/TreeNodeControllerSpec.js | 20 +++-- .../controllers/ViewSwitcherControllerSpec.js | 8 +- .../test/directives/MCTClickElsewhereSpec.js | 4 +- .../test/directives/MCTContainerSpec.js | 4 +- .../general/test/directives/MCTDragSpec.js | 4 +- .../general/test/directives/MCTPopupSpec.js | 6 +- .../general/test/directives/MCTScrollSpec.js | 2 +- .../test/directives/MCTSplitPaneSpec.js | 2 +- .../test/directives/MCTSplitterSpec.js | 8 +- .../general/test/directives/MCTTreeSpec.js | 2 +- .../general/test/services/PopupServiceSpec.js | 14 +-- .../general/test/services/PopupSpec.js | 2 +- .../general/test/services/UrlServiceSpec.js | 26 +++--- .../commonUI/general/test/ui/TreeViewSpec.js | 16 ++-- .../commonUI/inspect/src/InfoConstants.js | 2 +- .../inspect/src/gestures/InfoButtonGesture.js | 2 +- .../inspect/src/gestures/InfoGesture.js | 2 +- .../test/gestures/InfoButtonGestureSpec.js | 12 +-- .../inspect/test/gestures/InfoGestureSpec.js | 14 +-- .../inspect/test/services/InfoServiceSpec.js | 12 +-- .../commonUI/mobile/src/DeviceClassifier.js | 2 +- .../commonUI/mobile/src/DeviceMatchers.js | 2 +- .../mobile/test/DeviceClassifierSpec.js | 14 +-- .../mobile/test/DeviceMatchersSpec.js | 2 +- .../commonUI/mobile/test/MCTDeviceSpec.js | 4 +- .../src/NotificationIndicatorController.js | 6 +- .../notification/src/NotificationService.js | 42 ++++----- .../NotificationIndicatorControllerSpec.js | 8 +- .../test/NotificationServiceSpec.js | 24 +++--- .../regions/src/EditableRegionPolicy.js | 6 +- .../regions/src/InspectorController.js | 4 +- platform/commonUI/regions/src/Region.js | 8 +- .../regions/test/EditableRegionPolicySpec.js | 8 +- .../regions/test/InspectorControllerSpec.js | 6 +- platform/commonUI/regions/test/RegionSpec.js | 26 +++--- platform/commonUI/themes/espresso/bundle.js | 4 +- platform/commonUI/themes/snow/bundle.js | 4 +- .../containment/test/CapabilityTableSpec.js | 6 +- .../test/ComposeActionPolicySpec.js | 4 +- .../test/CompositionMutabilityPolicySpec.js | 2 +- .../containment/test/CompositionPolicySpec.js | 6 +- .../containment/test/ContainmentTableSpec.js | 8 +- .../src/capabilities/ContextCapability.js | 2 +- .../src/capabilities/PersistenceCapability.js | 14 +-- platform/core/src/models/RootModelProvider.js | 4 +- .../core/src/types/TypePropertyConversion.js | 8 +- platform/core/src/types/TypeProvider.js | 2 +- .../core/test/actions/ActionAggregatorSpec.js | 4 +- .../core/test/actions/ActionCapabilitySpec.js | 10 +-- .../core/test/actions/ActionProviderSpec.js | 26 ++++-- .../actions/LoggingActionDecoratorSpec.js | 8 +- .../capabilities/CompositionCapabilitySpec.js | 12 +-- .../capabilities/ContextCapabilitySpec.js | 4 +- .../ContextualDomainObjectSpec.js | 2 +- .../CoreCapabilityProviderSpec.js | 12 ++- .../capabilities/DelegationCapabilitySpec.js | 18 ++-- .../InstantiationCapabilitySpec.js | 6 +- .../capabilities/MutationCapabilitySpec.js | 8 +- .../capabilities/PersistenceCapabilitySpec.js | 26 +++--- .../RelationshipCapabilitySpec.js | 8 +- .../test/models/MissingModelDecoratorSpec.js | 10 ++- .../core/test/models/ModelAggregatorSpec.js | 10 ++- .../core/test/models/ModelCacheServiceSpec.js | 2 +- .../core/test/models/RootModelProviderSpec.js | 4 +- .../test/models/StaticModelProviderSpec.js | 6 +- .../test/objects/DomainObjectProviderSpec.js | 6 +- .../core/test/objects/DomainObjectSpec.js | 2 +- .../core/test/services/ContextualizeSpec.js | 2 +- .../core/test/services/InstantiateSpec.js | 4 +- platform/core/test/services/NowSpec.js | 2 +- platform/core/test/services/TopicSpec.js | 2 +- platform/core/test/types/MergeModelsSpec.js | 14 +-- .../core/test/types/TypeCapabilitySpec.js | 6 +- platform/core/test/types/TypeImplSpec.js | 12 ++- .../test/types/TypePropertyConversionSpec.js | 4 +- platform/core/test/types/TypePropertySpec.js | 12 +-- platform/core/test/types/TypeProviderSpec.js | 2 +- .../core/test/views/ViewCapabilitySpec.js | 8 +- platform/core/test/views/ViewProviderSpec.js | 6 +- .../entanglement/src/actions/CopyAction.js | 14 +-- .../entanglement/src/services/CopyService.js | 2 +- .../entanglement/src/services/CopyTask.js | 49 +++++------ .../entanglement/src/services/LinkService.js | 4 +- .../entanglement/test/ControlledPromise.js | 16 ++-- .../entanglement/test/DomainObjectFactory.js | 2 +- .../test/actions/AbstractComposeActionSpec.js | 2 +- .../test/actions/CopyActionSpec.js | 8 +- .../test/actions/GoToOriginalActionSpec.js | 4 +- .../test/actions/LinkActionSpec.js | 2 +- .../test/actions/MoveActionSpec.js | 2 +- .../actions/SetPrimaryLocationActionSpec.js | 2 +- .../test/policies/CrossSpacePolicySpec.js | 2 +- .../test/services/CopyServiceSpec.js | 42 +++++---- .../test/services/CopyTaskSpec.js | 12 +-- .../services/LocatingObjectDecoratorSpec.js | 6 +- .../test/services/LocationServiceSpec.js | 4 +- platform/exporters/ExportService.js | 2 +- platform/exporters/ExportServiceSpec.js | 6 +- .../clock/src/actions/RestartTimerAction.js | 2 +- .../clock/src/actions/StartTimerAction.js | 2 +- .../actions/AbstractStartTimerActionSpec.js | 2 +- .../test/actions/RestartTimerActionSpec.js | 2 +- .../test/actions/StartTimerActionSpec.js | 2 +- .../controllers/RefreshingControllerSpec.js | 4 +- .../test/controllers/TimerControllerSpec.js | 2 +- .../test/ConductorRepresenterSpec.js | 2 +- .../test/ConductorTelemetryDecoratorSpec.js | 4 +- .../test/directives/MCTBackgroundImageSpec.js | 2 +- .../test/policies/ImageryViewPolicySpec.js | 8 +- .../features/layout/src/FixedController.js | 4 +- .../features/layout/src/FixedDragHandle.js | 2 +- .../features/layout/src/LayoutController.js | 12 +-- .../layout/src/elements/ElementProxy.js | 2 +- .../layout/test/FixedControllerSpec.js | 18 ++-- .../layout/test/FixedDragHandleSpec.js | 10 +-- .../layout/test/LayoutControllerSpec.js | 16 ++-- .../features/layout/test/LayoutDragSpec.js | 48 +++++------ .../layout/test/elements/BoxProxySpec.js | 2 +- .../test/elements/ElementFactorySpec.js | 10 +-- .../layout/test/elements/ElementProxySpec.js | 2 +- .../layout/test/elements/ImageProxySpec.js | 2 +- .../layout/test/elements/LineHandleSpec.js | 2 +- .../layout/test/elements/LineProxySpec.js | 2 +- .../layout/test/elements/ResizeHandleSpec.js | 2 +- .../test/elements/TelemetryProxySpec.js | 2 +- .../layout/test/elements/TextProxySpec.js | 2 +- platform/features/plot/src/Canvas2DChart.js | 4 +- .../plot/src/PlotOptionsController.js | 32 +++---- platform/features/plot/src/PlotOptionsForm.js | 34 ++++---- platform/features/plot/src/SubPlot.js | 8 +- .../plot/src/elements/PlotLineBuffer.js | 2 +- .../features/plot/src/elements/PlotPalette.js | 60 ++++++------- .../src/elements/PlotPanZoomStackGroup.js | 4 +- .../plot/src/elements/PlotPosition.js | 2 +- .../plot/src/elements/PlotPreparer.js | 4 +- .../features/plot/src/elements/PlotUpdater.js | 6 +- .../plot/src/modes/PlotModeOptions.js | 2 +- .../plot/src/modes/PlotOverlayMode.js | 2 +- .../features/plot/test/Canvas2DChartSpec.js | 10 +-- platform/features/plot/test/GLChartSpec.js | 10 +-- platform/features/plot/test/MCTChartSpec.js | 4 +- .../features/plot/test/PlotControllerSpec.js | 10 ++- .../plot/test/PlotOptionsControllerSpec.js | 4 +- .../features/plot/test/SubPlotFactorySpec.js | 12 +-- platform/features/plot/test/SubPlotSpec.js | 14 +-- .../plot/test/elements/PlotAxisSpec.js | 2 +- .../test/elements/PlotLimitTrackerSpec.js | 4 +- .../plot/test/elements/PlotLineBufferSpec.js | 12 +-- .../plot/test/elements/PlotLineSpec.js | 6 +- .../plot/test/elements/PlotPaletteSpec.js | 2 +- .../elements/PlotPanZoomStackGroupSpec.js | 12 +-- .../test/elements/PlotPanZoomStackSpec.js | 10 +-- .../plot/test/elements/PlotPositionSpec.js | 8 +- .../plot/test/elements/PlotPreparerSpec.js | 4 +- .../test/elements/PlotSeriesWindowSpec.js | 12 +-- .../test/elements/PlotTickGeneratorSpec.js | 10 +-- .../plot/test/elements/PlotUpdaterSpec.js | 6 +- .../plot/test/modes/PlotModeOptionsSpec.js | 6 +- .../plot/test/modes/PlotOverlayModeSpec.js | 6 +- .../plot/test/modes/PlotStackModeSpec.js | 8 +- .../plot/test/policies/PlotViewPolicySpec.js | 8 +- platform/features/static-markup/bundle.js | 4 +- platform/features/table/src/RangeColumn.js | 2 +- .../features/table/src/TableConfiguration.js | 12 +-- .../controllers/HistoricalTableController.js | 2 +- .../src/controllers/MCTTableController.js | 30 +++---- .../controllers/RealtimeTableController.js | 6 +- .../src/controllers/TableOptionsController.js | 12 +-- .../controllers/TelemetryTableController.js | 2 +- .../features/table/src/directives/MCTTable.js | 2 +- .../features/table/test/DomainColumnSpec.js | 4 +- .../features/table/test/NameColumnSpec.js | 2 +- .../features/table/test/RangeColumnSpec.js | 4 +- .../table/test/TableConfigurationSpec.js | 26 +++--- .../HistoricalTableControllerSpec.js | 24 +++--- .../controllers/MCTTableControllerSpec.js | 86 +++++++++---------- .../RealtimeTableControllerSpec.js | 18 ++-- .../controllers/TableOptionsControllerSpec.js | 26 +++--- platform/features/timeline/bundle.js | 2 +- .../timeline/src/TimelineConstants.js | 2 +- .../timeline/src/TimelineFormatter.js | 2 +- .../src/actions/ExportTimelineAsCSVAction.js | 2 +- .../timeline/src/actions/TimelineTraverser.js | 2 +- .../src/capabilities/ActivityTimespan.js | 2 +- .../src/capabilities/ActivityUtilization.js | 2 +- .../src/capabilities/CumulativeGraph.js | 2 +- .../src/capabilities/ResourceGraph.js | 2 +- .../src/capabilities/TimelineTimespan.js | 2 +- .../src/capabilities/TimelineUtilization.js | 2 +- .../src/controllers/TimelineController.js | 2 +- .../controllers/TimelineDateTimeController.js | 2 +- .../controllers/TimelineGanttController.js | 2 +- .../controllers/TimelineGraphController.js | 2 +- .../src/controllers/TimelineTickController.js | 2 +- .../src/controllers/TimelineZoomController.js | 2 +- .../controllers/drag/TimelineDragHandler.js | 2 +- .../controllers/drag/TimelineDragPopulator.js | 2 +- .../src/controllers/drag/TimelineEndHandle.js | 2 +- .../controllers/drag/TimelineMoveHandle.js | 2 +- .../controllers/drag/TimelineSnapHandler.js | 6 +- .../controllers/drag/TimelineStartHandle.js | 2 +- .../src/controllers/graph/TimelineGraph.js | 6 +- .../graph/TimelineGraphPopulator.js | 2 +- .../graph/TimelineGraphRenderer.js | 2 +- .../swimlane/TimelineColorAssigner.js | 2 +- .../src/controllers/swimlane/TimelineProxy.js | 2 +- .../controllers/swimlane/TimelineSwimlane.js | 2 +- .../swimlane/TimelineSwimlanePopulator.js | 2 +- .../timeline/src/services/ObjectLoader.js | 2 +- .../timeline/test/TimelineFormatterSpec.js | 2 +- .../test/actions/CompositionColumnSpec.js | 8 +- .../actions/ExportTimelineAsCSVActionSpec.js | 12 +-- .../actions/ExportTimelineAsCSVTaskSpec.js | 2 +- .../timeline/test/actions/IdColumnSpec.js | 4 +- .../test/actions/MetadataColumnSpec.js | 4 +- .../timeline/test/actions/ModeColumnSpec.js | 8 +- .../test/actions/TimelineColumnizerSpec.js | 6 +- .../test/actions/TimelineTraverserSpec.js | 8 +- .../test/actions/TimespanColumnSpec.js | 8 +- .../ActivityTimespanCapabilitySpec.js | 2 +- .../test/capabilities/ActivityTimespanSpec.js | 2 +- .../capabilities/ActivityUtilizationSpec.js | 2 +- .../test/capabilities/CostCapabilitySpec.js | 2 +- .../test/capabilities/CumulativeGraphSpec.js | 6 +- .../test/capabilities/GraphCapabilitySpec.js | 2 +- .../test/capabilities/ResourceGraphSpec.js | 6 +- .../TimelineTimespanCapabilitySpec.js | 20 +++-- .../test/capabilities/TimelineTimespanSpec.js | 4 +- .../capabilities/TimelineUtilizationSpec.js | 2 +- .../capabilities/UtilizationCapabilitySpec.js | 6 +- .../ActivityModeValuesControllerSpec.js | 2 +- .../controllers/TimelineControllerSpec.js | 4 +- .../TimelineGanttControllerSpec.js | 6 +- .../TimelineGraphControllerSpec.js | 4 +- .../TimelineTableControllerSpec.js | 2 +- .../controllers/TimelineTickControllerSpec.js | 2 +- .../controllers/TimelineZoomControllerSpec.js | 4 +- .../drag/TimelineDragHandleFactorySpec.js | 8 +- .../drag/TimelineDragHandlerSpec.js | 8 +- .../drag/TimelineDragPopulatorSpec.js | 2 +- .../controllers/drag/TimelineEndHandleSpec.js | 8 +- .../drag/TimelineMoveHandleSpec.js | 8 +- .../drag/TimelineSnapHandlerSpec.js | 4 +- .../drag/TimelineStartHandleSpec.js | 8 +- .../graph/TimelineGraphPopulatorSpec.js | 14 +-- .../graph/TimelineGraphRendererSpec.js | 2 +- .../controllers/graph/TimelineGraphSpec.js | 14 +-- .../swimlane/TimelineColorAssignerSpec.js | 8 +- .../controllers/swimlane/TimelineProxySpec.js | 6 +- .../swimlane/TimelineSwimlaneDecoratorSpec.js | 6 +- .../TimelineSwimlaneDropHandlerSpec.js | 36 ++++---- .../swimlane/TimelineSwimlanePopulatorSpec.js | 2 +- .../swimlane/TimelineSwimlaneSpec.js | 6 +- .../test/directives/MCTSwimlaneDropSpec.js | 4 +- .../test/services/ObjectLoaderSpec.js | 14 +-- platform/forms/src/MCTForm.js | 2 +- .../forms/src/controllers/ColorController.js | 20 ++--- .../src/controllers/DialogButtonController.js | 2 +- platform/forms/test/MCTControlSpec.js | 4 +- platform/forms/test/MCTFormSpec.js | 4 +- platform/forms/test/MCTToolbarSpec.js | 4 +- .../test/controllers/ColorControllerSpec.js | 2 +- .../controllers/CompositeControllerSpec.js | 2 +- .../controllers/DateTimeControllerSpec.js | 2 +- .../controllers/DialogButtonControllerSpec.js | 8 +- .../test/controllers/FormControllerSpec.js | 4 +- platform/framework/bundle.js | 4 +- platform/framework/src/FrameworkLayer.js | 2 +- platform/framework/src/load/Bundle.js | 12 +-- platform/framework/src/load/BundleLoader.js | 4 +- .../src/register/ExtensionRegistrar.js | 4 +- .../test/FrameworkInitializerSpec.js | 16 ++-- platform/framework/test/LogLevelSpec.js | 2 +- .../bootstrap/ApplicationBootstrapperSpec.js | 2 +- .../framework/test/load/BundleLoaderSpec.js | 6 +- platform/framework/test/load/BundleSpec.js | 6 +- platform/framework/test/load/ExtensionSpec.js | 2 +- .../test/register/ExtensionRegistrarSpec.js | 26 +++--- .../test/register/PartialConstructorSpec.js | 2 +- .../test/register/ServiceCompositorSpec.js | 78 +++++++++++------ .../test/resolve/BundleResolverSpec.js | 28 +++--- .../test/resolve/ExtensionResolverSpec.js | 56 +++++++----- .../test/resolve/ImplementationLoaderSpec.js | 36 +++++--- .../test/resolve/RequireConfiguratorSpec.js | 4 +- .../identity/test/IdentityAggregatorSpec.js | 4 +- .../aggregator/src/PersistenceAggregator.js | 4 +- .../test/PersistenceAggregatorSpec.js | 4 +- .../couch/src/CouchPersistenceProvider.js | 6 +- .../couch/test/CouchDocumentSpec.js | 2 +- .../couch/test/CouchIndicatorSpec.js | 6 +- .../test/CouchPersistenceProviderSpec.js | 4 +- .../elastic/src/ElasticPersistenceProvider.js | 2 +- .../elastic/test/ElasticIndicatorSpec.js | 6 +- .../test/ElasticPersistenceProviderSpec.js | 2 +- .../queue/src/PersistenceFailureDialog.js | 2 +- .../queue/src/PersistenceFailureHandler.js | 8 +- .../test/PersistenceFailureConstantsSpec.js | 2 +- .../test/PersistenceFailureControllerSpec.js | 2 +- .../test/PersistenceFailureDialogSpec.js | 2 +- .../test/PersistenceFailureHandlerSpec.js | 2 +- .../queue/test/PersistenceQueueHandlerSpec.js | 6 +- .../queue/test/PersistenceQueueImplSpec.js | 6 +- .../queue/test/PersistenceQueueSpec.js | 2 +- ...euingPersistenceCapabilityDecoratorSpec.js | 2 +- .../test/QueuingPersistenceCapabilitySpec.js | 2 +- platform/policy/src/PolicyActionDecorator.js | 2 +- .../policy/test/PolicyActionDecoratorSpec.js | 4 +- platform/policy/test/PolicyProviderSpec.js | 6 +- .../policy/test/PolicyViewDecoratorSpec.js | 4 +- .../representation/src/MCTRepresentation.js | 2 +- .../src/actions/ContextMenuAction.js | 8 +- .../src/gestures/DropGesture.js | 2 +- .../src/gestures/GestureConstants.js | 2 +- .../test/MCTRepresentationSpec.js | 14 +-- .../representation/test/TemplateLinkerSpec.js | 4 +- .../test/TemplatePrefetcherSpec.js | 2 +- .../test/actions/ContextMenuActionSpec.js | 8 +- .../test/gestures/ContextMenuGestureSpec.js | 24 +++--- .../test/gestures/DragGestureSpec.js | 10 +-- .../test/gestures/DropGestureSpec.js | 26 +++--- .../test/gestures/GestureProviderSpec.js | 6 +- .../test/gestures/GestureRepresenterSpec.js | 8 +- .../test/services/DndServiceSpec.js | 6 +- .../src/controllers/SearchMenuController.js | 44 +++++----- .../src/services/GenericSearchWorker.js | 2 +- .../test/controllers/SearchControllerSpec.js | 10 +-- .../controllers/SearchMenuControllerSpec.js | 46 +++++----- .../services/GenericSearchProviderSpec.js | 2 +- platform/status/test/StatusCapabilitySpec.js | 6 +- platform/status/test/StatusRepresenterSpec.js | 6 +- platform/status/test/StatusServiceSpec.js | 4 +- platform/telemetry/src/TelemetryCapability.js | 4 +- platform/telemetry/src/TelemetryController.js | 2 +- platform/telemetry/src/TelemetryDelegator.js | 4 +- platform/telemetry/src/TelemetryQueue.js | 10 +-- .../telemetry/test/TelemetryAggregatorSpec.js | 8 +- .../telemetry/test/TelemetryCapabilitySpec.js | 12 ++- .../telemetry/test/TelemetryControllerSpec.js | 8 +- .../telemetry/test/TelemetryHandleSpec.js | 4 +- platform/telemetry/test/TelemetryQueueSpec.js | 2 +- .../telemetry/test/TelemetrySubscriberSpec.js | 4 +- .../test/TelemetrySubscriptionSpec.js | 10 +-- platform/telemetry/test/TelemetryTableSpec.js | 2 +- src/BundleRegistry.js | 2 +- src/BundleRegistrySpec.js | 2 +- src/legacyRegistry.js | 2 +- 440 files changed, 1885 insertions(+), 1662 deletions(-) diff --git a/main.js b/main.js index d6b3dc2db7..4fba458a4c 100644 --- a/main.js +++ b/main.js @@ -41,10 +41,10 @@ requirejs.config({ "exports": "angular" }, "angular-route": { - "deps": [ "angular" ] + "deps": ["angular"] }, "moment-duration-format": { - "deps": [ "moment" ] + "deps": ["moment"] }, "screenfull": { "exports": "screenfull" diff --git a/platform/commonUI/about/test/AboutControllerSpec.js b/platform/commonUI/about/test/AboutControllerSpec.js index f902c7b6dc..e3af1f5b01 100644 --- a/platform/commonUI/about/test/AboutControllerSpec.js +++ b/platform/commonUI/about/test/AboutControllerSpec.js @@ -55,4 +55,4 @@ define( }); } -); \ No newline at end of file +); diff --git a/platform/commonUI/about/test/LicenseControllerSpec.js b/platform/commonUI/about/test/LicenseControllerSpec.js index ba99fc1f0d..b5c1af4080 100644 --- a/platform/commonUI/about/test/LicenseControllerSpec.js +++ b/platform/commonUI/about/test/LicenseControllerSpec.js @@ -46,4 +46,4 @@ define( }); } -); \ No newline at end of file +); diff --git a/platform/commonUI/about/test/LogoControllerSpec.js b/platform/commonUI/about/test/LogoControllerSpec.js index da1c4b0a84..b877658a23 100644 --- a/platform/commonUI/about/test/LogoControllerSpec.js +++ b/platform/commonUI/about/test/LogoControllerSpec.js @@ -48,4 +48,4 @@ define( }); } -); \ No newline at end of file +); diff --git a/platform/commonUI/browse/src/BrowseController.js b/platform/commonUI/browse/src/BrowseController.js index e5d0fcf2b9..53ddc14e79 100644 --- a/platform/commonUI/browse/src/BrowseController.js +++ b/platform/commonUI/browse/src/BrowseController.js @@ -41,13 +41,13 @@ define( * @constructor */ function BrowseController( - $scope, - $route, - $location, - $window, - objectService, - navigationService, - urlService, + $scope, + $route, + $location, + $window, + objectService, + navigationService, + urlService, policyService, defaultPath ) { @@ -80,12 +80,12 @@ define( function setNavigation(domainObject) { var navigationAllowed = true; - if (domainObject === $scope.navigatedObject){ + if (domainObject === $scope.navigatedObject) { //do nothing; return; } - policyService.allow("navigation", $scope.navigatedObject, domainObject, function(message){ + policyService.allow("navigation", $scope.navigatedObject, domainObject, function (message) { navigationAllowed = $window.confirm(message + "\r\n\r\n" + " Are you sure you want to continue?"); }); diff --git a/platform/commonUI/browse/src/BrowseObjectController.js b/platform/commonUI/browse/src/BrowseObjectController.js index 63547993f8..441bb83d02 100644 --- a/platform/commonUI/browse/src/BrowseObjectController.js +++ b/platform/commonUI/browse/src/BrowseObjectController.js @@ -33,7 +33,7 @@ define( function BrowseObjectController($scope, $location, $route) { var navigatedObject; function setViewForDomainObject(domainObject) { - + var locationViewKey = $location.search().view; function selectViewIfMatching(view) { @@ -70,7 +70,7 @@ define( $scope.$watch('domainObject', setViewForDomainObject); $scope.$watch('representation.selected.key', updateQueryParam); - $scope.doAction = function (action){ + $scope.doAction = function (action) { return $scope[action] && $scope[action](); }; diff --git a/platform/commonUI/browse/src/InspectorRegion.js b/platform/commonUI/browse/src/InspectorRegion.js index e227d3d452..382f6a9a0c 100644 --- a/platform/commonUI/browse/src/InspectorRegion.js +++ b/platform/commonUI/browse/src/InspectorRegion.js @@ -45,7 +45,7 @@ define( /** * @private */ - InspectorRegion.prototype.buildRegion = function() { + InspectorRegion.prototype.buildRegion = function () { var metadataRegion = { name: 'metadata', title: 'Metadata Region', diff --git a/platform/commonUI/browse/src/MenuArrowController.js b/platform/commonUI/browse/src/MenuArrowController.js index f222871ccc..ccb0b3b65e 100644 --- a/platform/commonUI/browse/src/MenuArrowController.js +++ b/platform/commonUI/browse/src/MenuArrowController.js @@ -26,11 +26,11 @@ define( [], function () { - + /** - * A left-click on the menu arrow should display a - * context menu. This controller launches the context - * menu. + * A left-click on the menu arrow should display a + * context menu. This controller launches the context + * menu. * @memberof platform/commonUI/browse * @constructor */ diff --git a/platform/commonUI/browse/src/creation/AddAction.js b/platform/commonUI/browse/src/creation/AddAction.js index b68fda10d6..0ac56957a2 100644 --- a/platform/commonUI/browse/src/creation/AddAction.js +++ b/platform/commonUI/browse/src/creation/AddAction.js @@ -81,13 +81,13 @@ define( newModel.type = this.type.getKey(); newObject = parentObject.getCapability('instantiation').instantiate(newModel); - newObject.useCapability('mutation', function(model){ + newObject.useCapability('mutation', function (model) { model.location = parentObject.getId(); }); wizard = new CreateWizard(newObject, this.parent, this.policyService); - function populateObjectFromInput (formValue) { + function populateObjectFromInput(formValue) { return wizard.populateObjectFromInput(formValue, newObject); } @@ -99,7 +99,7 @@ define( }); } - function addToParent (populatedObject) { + function addToParent(populatedObject) { parentObject.getCapability('composition').add(populatedObject); return persistAndReturn(parentObject); } @@ -125,7 +125,7 @@ define( * @returns {AddActionMetadata} metadata about this action */ AddAction.prototype.getMetadata = function () { - return this.metadata; + return this.metadata; }; return AddAction; diff --git a/platform/commonUI/browse/src/creation/CreateAction.js b/platform/commonUI/browse/src/creation/CreateAction.js index 9ac86d2dc8..c5097e166d 100644 --- a/platform/commonUI/browse/src/creation/CreateAction.js +++ b/platform/commonUI/browse/src/creation/CreateAction.js @@ -101,7 +101,7 @@ define( return editorCapability.save(); }, function () { return editorCapability.cancel(); - }); + }); } }; @@ -118,7 +118,7 @@ define( * @returns {CreateActionMetadata} metadata about this action */ CreateAction.prototype.getMetadata = function () { - return this.metadata; + return this.metadata; }; return CreateAction; diff --git a/platform/commonUI/browse/src/creation/CreateWizard.js b/platform/commonUI/browse/src/creation/CreateWizard.js index 660a577905..1ec234ee08 100644 --- a/platform/commonUI/browse/src/creation/CreateWizard.js +++ b/platform/commonUI/browse/src/creation/CreateWizard.js @@ -111,12 +111,12 @@ define( * @param formValue * @returns {DomainObject} */ - CreateWizard.prototype.populateObjectFromInput = function(formValue) { + CreateWizard.prototype.populateObjectFromInput = function (formValue) { var parent = this.getLocation(formValue), formModel = this.createModel(formValue); formModel.location = parent.getId(); - this.domainObject.useCapability("mutation", function(){ + this.domainObject.useCapability("mutation", function () { return formModel; }); return this.domainObject; diff --git a/platform/commonUI/browse/src/creation/CreationPolicy.js b/platform/commonUI/browse/src/creation/CreationPolicy.js index 480d0adec4..4880f884b9 100644 --- a/platform/commonUI/browse/src/creation/CreationPolicy.js +++ b/platform/commonUI/browse/src/creation/CreationPolicy.js @@ -40,4 +40,4 @@ define( return CreationPolicy; } -); \ No newline at end of file +); diff --git a/platform/commonUI/browse/src/creation/LocatorController.js b/platform/commonUI/browse/src/creation/LocatorController.js index 43a1a4ed10..b8c3f6a2dc 100644 --- a/platform/commonUI/browse/src/creation/LocatorController.js +++ b/platform/commonUI/browse/src/creation/LocatorController.js @@ -50,14 +50,14 @@ define( $scope.rootObject = (context && context.getRoot()) || $scope.rootObject; }, 0); - } else if (!contextRoot){ + } else if (!contextRoot) { //If no context root is available, default to the root // object $scope.rootObject = undefined; // Update the displayed tree on a timeout to avoid // an infinite digest exception. objectService.getObjects(['ROOT']) - .then(function(objects){ + .then(function (objects) { $timeout(function () { $scope.rootObject = objects.ROOT; }, 0); diff --git a/platform/commonUI/browse/test/BrowseControllerSpec.js b/platform/commonUI/browse/test/BrowseControllerSpec.js index 6bb41b4e6e..2c20467185 100644 --- a/platform/commonUI/browse/test/BrowseControllerSpec.js +++ b/platform/commonUI/browse/test/BrowseControllerSpec.js @@ -78,12 +78,12 @@ define( mockScope = jasmine.createSpyObj( "$scope", - [ "$on", "$watch" ] + ["$on", "$watch"] ); mockRoute = { current: { params: {} } }; mockLocation = jasmine.createSpyObj( "$location", - [ "path" ] + ["path"] ); mockUrlService = jasmine.createSpyObj( "urlService", @@ -91,7 +91,7 @@ define( ); mockObjectService = jasmine.createSpyObj( "objectService", - [ "getObjects" ] + ["getObjects"] ); mockNavigationService = jasmine.createSpyObj( "navigationService", @@ -104,15 +104,15 @@ define( ); mockRootObject = jasmine.createSpyObj( "domainObject", - [ "getId", "getCapability", "getModel", "useCapability" ] + ["getId", "getCapability", "getModel", "useCapability"] ); mockDomainObject = jasmine.createSpyObj( "domainObject", - [ "getId", "getCapability", "getModel", "useCapability" ] + ["getId", "getCapability", "getModel", "useCapability"] ); mockNextObject = jasmine.createSpyObj( "nextObject", - [ "getId", "getCapability", "getModel", "useCapability" ] + ["getId", "getCapability", "getModel", "useCapability"] ); mockObjectService.getObjects.andReturn(mockPromise({ @@ -255,7 +255,7 @@ define( " object", function () { mockScope.navigatedObject = mockDomainObject; mockWindow.confirm.andReturn(false); - mockPolicyService.allow.andCallFake(function(category, object, context, callback){ + mockPolicyService.allow.andCallFake(function (category, object, context, callback) { callback("unsaved changes"); return false; }); diff --git a/platform/commonUI/browse/test/BrowseObjectControllerSpec.js b/platform/commonUI/browse/test/BrowseObjectControllerSpec.js index dd873030f5..255badaf97 100644 --- a/platform/commonUI/browse/test/BrowseObjectControllerSpec.js +++ b/platform/commonUI/browse/test/BrowseObjectControllerSpec.js @@ -44,12 +44,12 @@ define( beforeEach(function () { mockScope = jasmine.createSpyObj( "$scope", - [ "$on", "$watch" ] + ["$on", "$watch"] ); mockRoute = { current: { params: {} } }; mockLocation = jasmine.createSpyObj( "$location", - [ "path", "search" ] + ["path", "search"] ); mockUnlisten = jasmine.createSpy("unlisten"); @@ -69,7 +69,7 @@ define( // Allows the path index to be checked // prior to setting $route.current mockLocation.path.andReturn("/browse/"); - + // Exercise the Angular workaround mockScope.$on.mostRecentCall.args[1](); expect(mockUnlisten).toHaveBeenCalled(); diff --git a/platform/commonUI/browse/test/InspectorRegionSpec.js b/platform/commonUI/browse/test/InspectorRegionSpec.js index b7ce021cdc..a5fac51a30 100644 --- a/platform/commonUI/browse/test/InspectorRegionSpec.js +++ b/platform/commonUI/browse/test/InspectorRegionSpec.js @@ -40,4 +40,4 @@ define( }); } -); \ No newline at end of file +); diff --git a/platform/commonUI/browse/test/MenuArrowControllerSpec.js b/platform/commonUI/browse/test/MenuArrowControllerSpec.js index 22f9882115..94246b94f2 100644 --- a/platform/commonUI/browse/test/MenuArrowControllerSpec.js +++ b/platform/commonUI/browse/test/MenuArrowControllerSpec.js @@ -26,7 +26,7 @@ define( ["../src/MenuArrowController"], function (MenuArrowController) { - + describe("The menu arrow controller ", function () { var mockScope, mockDomainObject, @@ -34,43 +34,43 @@ define( mockContextMenuAction, mockActionContext, controller; - + beforeEach(function () { mockScope = jasmine.createSpyObj( "$scope", - [ "" ] + [""] ); mockDomainObject = jasmine.createSpyObj( "domainObject", - [ "getCapability" ] + ["getCapability"] ); mockEvent = jasmine.createSpyObj( "event", - [ "preventDefault" ] + ["preventDefault"] ); mockContextMenuAction = jasmine.createSpyObj( "action", - [ "perform", "getActions" ] + ["perform", "getActions"] ); mockActionContext = jasmine.createSpyObj( "actionContext", - [ "" ] + [""] ); - + mockActionContext.domainObject = mockDomainObject; mockActionContext.event = mockEvent; mockScope.domainObject = mockDomainObject; mockDomainObject.getCapability.andReturn(mockContextMenuAction); mockContextMenuAction.perform.andReturn(jasmine.any(Function)); - + controller = new MenuArrowController(mockScope); }); - + it("calls the context menu action when clicked", function () { // Simulate a click on the menu arrow controller.showMenu(mockEvent); - - // Expect the menu action to be performed + + // Expect the menu action to be performed expect(mockDomainObject.getCapability).toHaveBeenCalledWith('action'); expect(mockContextMenuAction.perform).toHaveBeenCalled(); }); diff --git a/platform/commonUI/browse/test/PaneControllerSpec.js b/platform/commonUI/browse/test/PaneControllerSpec.js index 8654884f39..cbb792cc00 100644 --- a/platform/commonUI/browse/test/PaneControllerSpec.js +++ b/platform/commonUI/browse/test/PaneControllerSpec.js @@ -42,11 +42,11 @@ define( } beforeEach(function () { - mockScope = jasmine.createSpyObj("$scope", [ "$on" ]); + mockScope = jasmine.createSpyObj("$scope", ["$on"]); mockDomainObjects = ['a', 'b'].map(function (id) { var mockDomainObject = jasmine.createSpyObj( 'domainObject-' + id, - [ 'getId', 'getModel', 'getCapability' ] + ['getId', 'getModel', 'getCapability'] ); mockDomainObject.getId.andReturn(id); @@ -56,7 +56,7 @@ define( }); mockAgentService = jasmine.createSpyObj( "agentService", - [ "isMobile", "isPhone", "isTablet", "isPortrait", "isLandscape" ] + ["isMobile", "isPhone", "isTablet", "isPortrait", "isLandscape"] ); mockWindow = jasmine.createSpyObj("$window", ["open"]); }); diff --git a/platform/commonUI/browse/test/creation/AddActionProviderSpec.js b/platform/commonUI/browse/test/creation/AddActionProviderSpec.js index 3b391d0258..121f9b193d 100644 --- a/platform/commonUI/browse/test/creation/AddActionProviderSpec.js +++ b/platform/commonUI/browse/test/creation/AddActionProviderSpec.js @@ -60,37 +60,37 @@ define( beforeEach(function () { mockTypeService = jasmine.createSpyObj( "typeService", - [ "listTypes" ] + ["listTypes"] ); mockDialogService = jasmine.createSpyObj( "dialogService", - [ "getUserInput" ] + ["getUserInput"] ); mockPolicyService = jasmine.createSpyObj( "policyService", - [ "allow" ] + ["allow"] ); mockDomainObject = jasmine.createSpyObj( "domainObject", - [ "getCapability" ] + ["getCapability"] ); //Mocking getCapability because AddActionProvider uses the // type capability of the destination object. mockDomainObject.getCapability.andReturn({}); - mockTypes = [ "A", "B", "C" ].map(createMockType); + mockTypes = ["A", "B", "C"].map(createMockType); - mockTypes.forEach(function(type){ + mockTypes.forEach(function (type) { mockPolicyMap[type.getName()] = true; }); - mockCreationPolicy = function(type){ + mockCreationPolicy = function (type) { return mockPolicyMap[type.getName()]; }; - mockCompositionPolicy = function(){ + mockCompositionPolicy = function () { return true; }; @@ -132,4 +132,4 @@ define( }); }); } -); \ No newline at end of file +); diff --git a/platform/commonUI/browse/test/creation/CreateActionProviderSpec.js b/platform/commonUI/browse/test/creation/CreateActionProviderSpec.js index b5bb794b04..fbfc4a1140 100644 --- a/platform/commonUI/browse/test/creation/CreateActionProviderSpec.js +++ b/platform/commonUI/browse/test/creation/CreateActionProviderSpec.js @@ -59,32 +59,32 @@ define( beforeEach(function () { mockTypeService = jasmine.createSpyObj( "typeService", - [ "listTypes" ] + ["listTypes"] ); mockDialogService = jasmine.createSpyObj( "dialogService", - [ "getUserInput" ] + ["getUserInput"] ); mockNavigationService = jasmine.createSpyObj( "navigationService", - [ "setNavigation" ] + ["setNavigation"] ); mockPolicyService = jasmine.createSpyObj( "policyService", - [ "allow" ] + ["allow"] ); - mockTypes = [ "A", "B", "C" ].map(createMockType); + mockTypes = ["A", "B", "C"].map(createMockType); - mockTypes.forEach(function(type){ + mockTypes.forEach(function (type) { mockPolicyMap[type.getName()] = true; }); - mockCreationPolicy = function(type){ + mockCreationPolicy = function (type) { return mockPolicyMap[type.getName()]; }; - mockPolicyService.allow.andCallFake(function(category, type){ + mockPolicyService.allow.andCallFake(function (category, type) { return category === "creation" && mockCreationPolicy(type) ? true : false; }); @@ -126,4 +126,4 @@ define( }); }); } -); \ No newline at end of file +); diff --git a/platform/commonUI/browse/test/creation/CreateActionSpec.js b/platform/commonUI/browse/test/creation/CreateActionSpec.js index 600bfadbdb..5fa89512e0 100644 --- a/platform/commonUI/browse/test/creation/CreateActionSpec.js +++ b/platform/commonUI/browse/test/creation/CreateActionSpec.js @@ -68,11 +68,11 @@ define( }; mockDialogService = jasmine.createSpyObj( "dialogService", - [ "getUserInput" ] + ["getUserInput"] ); mockCreationService = jasmine.createSpyObj( "creationService", - [ "createObject" ] + ["createObject"] ); mockType.getKey.andReturn("test"); @@ -127,4 +127,4 @@ define( }); } -); \ No newline at end of file +); diff --git a/platform/commonUI/browse/test/creation/CreateMenuControllerSpec.js b/platform/commonUI/browse/test/creation/CreateMenuControllerSpec.js index a2f5473199..b2c1f4afa4 100644 --- a/platform/commonUI/browse/test/creation/CreateMenuControllerSpec.js +++ b/platform/commonUI/browse/test/creation/CreateMenuControllerSpec.js @@ -62,4 +62,4 @@ define( }); }); } -); \ No newline at end of file +); diff --git a/platform/commonUI/browse/test/creation/CreateWizardSpec.js b/platform/commonUI/browse/test/creation/CreateWizardSpec.js index 577fb9b9ff..713b1d33d3 100644 --- a/platform/commonUI/browse/test/creation/CreateWizardSpec.js +++ b/platform/commonUI/browse/test/creation/CreateWizardSpec.js @@ -39,7 +39,7 @@ define( function createMockProperty(name) { var mockProperty = jasmine.createSpyObj( "property" + name, - [ "getDefinition", "getValue", "setValue" ] + ["getDefinition", "getValue", "setValue"] ); mockProperty.getDefinition.andReturn({ control: "textfield" @@ -68,7 +68,7 @@ define( "getCapability" ] ); - mockProperties = [ "A", "B", "C" ].map(createMockProperty); + mockProperties = ["A", "B", "C"].map(createMockProperty); mockPolicyService = jasmine.createSpyObj('policyService', ['allow']); testModel = { someKey: "some value" }; @@ -144,8 +144,8 @@ define( "A": "ValueA", "B": "ValueB", "C": "ValueC" - }, - compareModel = wizard.createModel(formValue); + }, + compareModel = wizard.createModel(formValue); wizard.populateObjectFromInput(formValue); expect(mockDomainObject.useCapability).toHaveBeenCalledWith('mutation', jasmine.any(Function)); expect(mockDomainObject.useCapability.mostRecentCall.args[1]()).toEqual(compareModel); @@ -179,7 +179,7 @@ define( }); it("creates a form model without a location if not requested", function () { - expect(wizard.getFormStructure(false).sections.some(function(section){ + expect(wizard.getFormStructure(false).sections.some(function (section) { return section.name === 'Location'; })).toEqual(false); }); diff --git a/platform/commonUI/browse/test/creation/CreationPolicySpec.js b/platform/commonUI/browse/test/creation/CreationPolicySpec.js index a12d2c752d..1c6a5421ca 100644 --- a/platform/commonUI/browse/test/creation/CreationPolicySpec.js +++ b/platform/commonUI/browse/test/creation/CreationPolicySpec.js @@ -48,4 +48,4 @@ define( }); }); } -); \ No newline at end of file +); diff --git a/platform/commonUI/browse/test/creation/CreationServiceSpec.js b/platform/commonUI/browse/test/creation/CreationServiceSpec.js index 270f5f8c90..fe740ca87a 100644 --- a/platform/commonUI/browse/test/creation/CreationServiceSpec.js +++ b/platform/commonUI/browse/test/creation/CreationServiceSpec.js @@ -61,23 +61,23 @@ define( mockQ = { when: mockPromise, reject: mockReject }; mockLog = jasmine.createSpyObj( "$log", - [ "error", "warn", "info", "debug" ] + ["error", "warn", "info", "debug"] ); mockParentObject = jasmine.createSpyObj( "parentObject", - [ "getId", "getCapability", "useCapability" ] + ["getId", "getCapability", "useCapability"] ); mockNewObject = jasmine.createSpyObj( "newObject", - [ "getId", "getCapability", "useCapability" ] + ["getId", "getCapability", "useCapability"] ); mockMutationCapability = jasmine.createSpyObj( "mutation", - [ "invoke" ] + ["invoke"] ); mockPersistenceCapability = jasmine.createSpyObj( "persistence", - [ "persist", "getSpace" ] + ["persist", "getSpace"] ); mockCompositionCapability = jasmine.createSpyObj( "composition", @@ -100,7 +100,7 @@ define( }; mockNewPersistenceCapability = jasmine.createSpyObj( "new-persistence", - [ "persist", "getSpace" ] + ["persist", "getSpace"] ); mockParentObject.getCapability.andCallFake(function (key) { diff --git a/platform/commonUI/browse/test/creation/LocatorControllerSpec.js b/platform/commonUI/browse/test/creation/LocatorControllerSpec.js index a601d5ea42..ffdf6514fb 100644 --- a/platform/commonUI/browse/test/creation/LocatorControllerSpec.js +++ b/platform/commonUI/browse/test/creation/LocatorControllerSpec.js @@ -40,20 +40,20 @@ define( beforeEach(function () { mockScope = jasmine.createSpyObj( "$scope", - [ "$watch" ] + ["$watch"] ); mockTimeout = jasmine.createSpy("$timeout"); mockDomainObject = jasmine.createSpyObj( "domainObject", - [ "getCapability" ] + ["getCapability"] ); mockRootObject = jasmine.createSpyObj( "rootObject", - [ "getCapability" ] + ["getCapability"] ); mockContext = jasmine.createSpyObj( "context", - [ "getRoot" ] + ["getRoot"] ); mockObjectService = jasmine.createSpyObj( "objectService", @@ -73,18 +73,18 @@ define( controller = new LocatorController(mockScope, mockTimeout, mockObjectService); }); - describe("when context is available", function () { + describe("when context is available", function () { - beforeEach(function () { + beforeEach(function () { mockContext.getRoot.andReturn(mockRootObject); controller = new LocatorController(mockScope, mockTimeout, mockObjectService); }); - it("adds a treeModel to scope", function () { + it("adds a treeModel to scope", function () { expect(mockScope.treeModel).toBeDefined(); }); - it("watches for changes to treeModel", function () { + it("watches for changes to treeModel", function () { // This is what the embedded tree representation // will be modifying. expect(mockScope.$watch).toHaveBeenCalledWith( @@ -93,7 +93,7 @@ define( ); }); - it("changes its own model on embedded model updates", function () { + it("changes its own model on embedded model updates", function () { // Need to pass on selection changes as updates to // the control's value mockScope.$watch.mostRecentCall.args[1](mockDomainObject); @@ -107,7 +107,7 @@ define( .toHaveBeenCalledWith("context"); }); - it("rejects changes which fail validation", function () { + it("rejects changes which fail validation", function () { mockScope.structure = { validate: jasmine.createSpy('validate') }; mockScope.structure.validate.andReturn(false); @@ -120,10 +120,10 @@ define( expect(mockScope.ngModel.someField).not.toEqual(mockDomainObject); }); - it("treats a lack of a selection as invalid", function () { + it("treats a lack of a selection as invalid", function () { mockScope.ngModelController = jasmine.createSpyObj( 'ngModelController', - [ '$setValidity' ] + ['$setValidity'] ); mockScope.$watch.mostRecentCall.args[1](mockDomainObject); @@ -136,14 +136,14 @@ define( expect(mockScope.ngModelController.$setValidity) .toHaveBeenCalledWith(jasmine.any(String), false); }); - }); - describe("when no context is available", function () { + }); + describe("when no context is available", function () { var defaultRoot = "DEFAULT_ROOT"; beforeEach(function () { mockContext.getRoot.andReturn(undefined); - getObjectsPromise.then.andCallFake(function(callback){ - callback({'ROOT':defaultRoot}); + getObjectsPromise.then.andCallFake(function (callback) { + callback({'ROOT': defaultRoot}); }); controller = new LocatorController(mockScope, mockTimeout, mockObjectService); }); diff --git a/platform/commonUI/browse/test/navigation/NavigateActionSpec.js b/platform/commonUI/browse/test/navigation/NavigateActionSpec.js index 0295651a1f..d872022049 100644 --- a/platform/commonUI/browse/test/navigation/NavigateActionSpec.js +++ b/platform/commonUI/browse/test/navigation/NavigateActionSpec.js @@ -44,12 +44,12 @@ define( beforeEach(function () { mockNavigationService = jasmine.createSpyObj( "navigationService", - [ "setNavigation" ] + ["setNavigation"] ); mockQ = { when: mockPromise }; mockDomainObject = jasmine.createSpyObj( "domainObject", - [ "getId", "getModel", "getCapability" ] + ["getId", "getModel", "getCapability"] ); action = new NavigateAction( @@ -74,4 +74,4 @@ define( }); } -); \ No newline at end of file +); diff --git a/platform/commonUI/browse/test/windowing/FullscreenActionSpec.js b/platform/commonUI/browse/test/windowing/FullscreenActionSpec.js index 7b3dfdab80..3b9710184c 100644 --- a/platform/commonUI/browse/test/windowing/FullscreenActionSpec.js +++ b/platform/commonUI/browse/test/windowing/FullscreenActionSpec.js @@ -56,4 +56,4 @@ define( }); } -); \ No newline at end of file +); diff --git a/platform/commonUI/browse/test/windowing/NewTabActionSpec.js b/platform/commonUI/browse/test/windowing/NewTabActionSpec.js index 335c4fe42b..fa820d3fcd 100644 --- a/platform/commonUI/browse/test/windowing/NewTabActionSpec.js +++ b/platform/commonUI/browse/test/windowing/NewTabActionSpec.js @@ -23,7 +23,7 @@ define( ["../../src/windowing/NewTabAction"], function (NewTabAction) { - + describe("The new tab action", function () { var actionSelected, actionCurrent, @@ -37,39 +37,39 @@ define( // Context if the current object is selected // For example, when the top right new tab - // button is clicked, the user is using the + // button is clicked, the user is using the // current domainObject mockContextCurrent = jasmine.createSpyObj("context", ["domainObject"]); - + // Context if the selected object is selected // For example, when an object in the left // tree is opened in a new tab using the // context menu mockContextSelected = jasmine.createSpyObj("context", ["selectedObject", "domainObject"]); - + // Mocks the urlService used to make the new tab's url from a // domainObject and mode mockUrlService = jasmine.createSpyObj("urlService", ["urlForNewTab"]); - + // Action done using the current context or mockContextCurrent actionCurrent = new NewTabAction(mockUrlService, mockWindow, mockContextCurrent); - + // Action done using the selected context or mockContextSelected actionSelected = new NewTabAction(mockUrlService, mockWindow, mockContextSelected); - + }); - + it("new tab with current url is opened", function () { actionCurrent.perform(); }); - + it("new tab with a selected url is opened", function () { actionSelected.perform(); }); - + }); } -); \ No newline at end of file +); diff --git a/platform/commonUI/browse/test/windowing/WindowTitlerSpec.js b/platform/commonUI/browse/test/windowing/WindowTitlerSpec.js index f4a0bfb4bc..095fa9923e 100644 --- a/platform/commonUI/browse/test/windowing/WindowTitlerSpec.js +++ b/platform/commonUI/browse/test/windowing/WindowTitlerSpec.js @@ -37,11 +37,11 @@ define( beforeEach(function () { mockNavigationService = jasmine.createSpyObj( 'navigationService', - [ 'getNavigation' ] + ['getNavigation'] ); mockRootScope = jasmine.createSpyObj( '$rootScope', - [ '$watch' ] + ['$watch'] ); mockDomainObject = jasmine.createSpyObj( 'domainObject', @@ -75,4 +75,4 @@ define( }); } -); \ No newline at end of file +); diff --git a/platform/commonUI/dialog/src/DialogService.js b/platform/commonUI/dialog/src/DialogService.js index 94b59e0156..778a172147 100644 --- a/platform/commonUI/dialog/src/DialogService.js +++ b/platform/commonUI/dialog/src/DialogService.js @@ -155,8 +155,8 @@ define( * @returns {boolean} true if dialog is currently visible, false * otherwise */ - DialogService.prototype.canShowDialog = function(dialogModel){ - if (this.dialogVisible){ + DialogService.prototype.canShowDialog = function (dialogModel) { + if (this.dialogVisible) { // Only one dialog should be shown at a time. // The application design should be such that // we never even try to do this. @@ -224,7 +224,7 @@ define( * @param {typeClass} string tells overlayService that this overlay should use appropriate CSS class * @returns {boolean} */ - DialogService.prototype.showBlockingMessage = function(dialogModel) { + DialogService.prototype.showBlockingMessage = function (dialogModel) { if (this.canShowDialog(dialogModel)) { // Add the overlay using the OverlayService, which // will handle actual insertion into the DOM diff --git a/platform/commonUI/dialog/test/DialogServiceSpec.js b/platform/commonUI/dialog/test/DialogServiceSpec.js index cfaf21fe76..2d801eb028 100644 --- a/platform/commonUI/dialog/test/DialogServiceSpec.js +++ b/platform/commonUI/dialog/test/DialogServiceSpec.js @@ -38,23 +38,23 @@ define( beforeEach(function () { mockOverlayService = jasmine.createSpyObj( "overlayService", - [ "createOverlay" ] + ["createOverlay"] ); mockQ = jasmine.createSpyObj( "$q", - [ "defer" ] + ["defer"] ); mockLog = jasmine.createSpyObj( "$log", - [ "warn", "info", "debug" ] + ["warn", "info", "debug"] ); mockOverlay = jasmine.createSpyObj( "overlay", - [ "dismiss" ] + ["dismiss"] ); mockDeferred = jasmine.createSpyObj( "deferred", - [ "resolve", "reject"] + ["resolve", "reject"] ); mockDeferred.promise = "mock promise"; @@ -120,7 +120,7 @@ define( }); it("invokes the overlay service with the correct parameters when" + - " a blocking dialog is requested", function() { + " a blocking dialog is requested", function () { var dialogModel = {}; expect(dialogService.showBlockingMessage(dialogModel)).toBe(true); expect(mockOverlayService.createOverlay).toHaveBeenCalledWith( diff --git a/platform/commonUI/dialog/test/OverlayServiceSpec.js b/platform/commonUI/dialog/test/OverlayServiceSpec.js index 42fec48efd..7756cdf2c6 100644 --- a/platform/commonUI/dialog/test/OverlayServiceSpec.js +++ b/platform/commonUI/dialog/test/OverlayServiceSpec.js @@ -38,13 +38,13 @@ define( overlayService; beforeEach(function () { - mockDocument = jasmine.createSpyObj("$document", [ "find" ]); + mockDocument = jasmine.createSpyObj("$document", ["find"]); mockCompile = jasmine.createSpy("$compile"); - mockRootScope = jasmine.createSpyObj("$rootScope", [ "$new" ]); - mockBody = jasmine.createSpyObj("body", [ "prepend" ]); + mockRootScope = jasmine.createSpyObj("$rootScope", ["$new"]); + mockBody = jasmine.createSpyObj("body", ["prepend"]); mockTemplate = jasmine.createSpy("template"); - mockElement = jasmine.createSpyObj("element", [ "remove" ]); - mockScope = jasmine.createSpyObj("scope", [ "$destroy" ]); + mockElement = jasmine.createSpyObj("element", ["remove"]); + mockScope = jasmine.createSpyObj("scope", ["$destroy"]); mockDocument.find.andReturn(mockBody); mockCompile.andReturn(mockTemplate); @@ -96,4 +96,4 @@ define( }); } -); \ No newline at end of file +); diff --git a/platform/commonUI/edit/bundle.js b/platform/commonUI/edit/bundle.js index fb357c0934..4437e77f72 100644 --- a/platform/commonUI/edit/bundle.js +++ b/platform/commonUI/edit/bundle.js @@ -298,7 +298,7 @@ define([ ], "constants": [ { - "key":"editModeBlacklist", + "key": "editModeBlacklist", "value": ["copy", "follow", "window", "link", "locate"] }, { @@ -316,7 +316,7 @@ define([ "transactionService" ] } - ], + ] } }); }); diff --git a/platform/commonUI/edit/src/actions/CancelAction.js b/platform/commonUI/edit/src/actions/CancelAction.js index 77013ee8f5..9fc02a6121 100644 --- a/platform/commonUI/edit/src/actions/CancelAction.js +++ b/platform/commonUI/edit/src/actions/CancelAction.js @@ -44,7 +44,7 @@ define( CancelAction.prototype.perform = function () { var domainObject = this.domainObject; - function returnToBrowse () { + function returnToBrowse() { var parent; //If the object existed already, navigate to refresh view diff --git a/platform/commonUI/edit/src/actions/EditAction.js b/platform/commonUI/edit/src/actions/EditAction.js index acb83c0407..b2aae8fa1b 100644 --- a/platform/commonUI/edit/src/actions/EditAction.js +++ b/platform/commonUI/edit/src/actions/EditAction.js @@ -70,7 +70,7 @@ define( */ EditAction.prototype.perform = function () { var self = this; - function cancelEditing(){ + function cancelEditing() { self.domainObject.getCapability('editor').cancel(); self.navigationService.removeListener(cancelEditing); } diff --git a/platform/commonUI/edit/src/actions/SaveAction.js b/platform/commonUI/edit/src/actions/SaveAction.js index 3879685b9f..8a45913288 100644 --- a/platform/commonUI/edit/src/actions/SaveAction.js +++ b/platform/commonUI/edit/src/actions/SaveAction.js @@ -48,7 +48,7 @@ define( SaveAction.prototype.perform = function () { var domainObject = this.domainObject; - function resolveWith(object){ + function resolveWith(object) { return function () { return object; }; diff --git a/platform/commonUI/edit/src/actions/SaveAsAction.js b/platform/commonUI/edit/src/actions/SaveAsAction.js index f347cad899..05a9fe7918 100644 --- a/platform/commonUI/edit/src/actions/SaveAsAction.js +++ b/platform/commonUI/edit/src/actions/SaveAsAction.js @@ -42,7 +42,7 @@ define( context ) { this.domainObject = (context || {}).domainObject; - this.injectObjectService = function(){ + this.injectObjectService = function () { this.objectService = $injector.get("objectService"); }; this.policyService = policyService; @@ -65,7 +65,7 @@ define( /** * @private */ - SaveAsAction.prototype.getObjectService = function(){ + SaveAsAction.prototype.getObjectService = function () { // Lazily acquire object service (avoids cyclical dependency) if (!this.objectService) { this.injectObjectService(); @@ -73,7 +73,7 @@ define( return this.objectService; }; - function resolveWith(object){ + function resolveWith(object) { return function () { return object; }; @@ -116,13 +116,13 @@ define( ).then(wizard.populateObjectFromInput.bind(wizard)); } - function fetchObject(objectId){ - return self.getObjectService().getObjects([objectId]).then(function(objects){ + function fetchObject(objectId) { + return self.getObjectService().getObjects([objectId]).then(function (objects) { return objects[objectId]; }); } - function getParent(object){ + function getParent(object) { return fetchObject(object.getModel().location); } diff --git a/platform/commonUI/edit/src/capabilities/EditorCapability.js b/platform/commonUI/edit/src/capabilities/EditorCapability.js index 69eb773d73..2fa11691c9 100644 --- a/platform/commonUI/edit/src/capabilities/EditorCapability.js +++ b/platform/commonUI/edit/src/capabilities/EditorCapability.js @@ -52,11 +52,11 @@ define( this.domainObject.getCapability('status').set('editing', true); }; - function isEditContextRoot (domainObject) { + function isEditContextRoot(domainObject) { return domainObject.getCapability('status').get('editing'); } - function isEditing (domainObject) { + function isEditing(domainObject) { return isEditContextRoot(domainObject) || domainObject.hasCapability('context') && isEditing(domainObject.getCapability('context').getParent()); @@ -87,7 +87,7 @@ define( */ EditorCapability.prototype.save = function () { var domainObject = this.domainObject; - return this.transactionService.commit().then(function() { + return this.transactionService.commit().then(function () { domainObject.getCapability('status').set('editing', false); }); }; @@ -101,7 +101,7 @@ define( */ EditorCapability.prototype.cancel = function () { var domainObject = this.domainObject; - return this.transactionService.cancel().then(function(){ + return this.transactionService.cancel().then(function () { domainObject.getCapability("status").set("editing", false); return domainObject; }); diff --git a/platform/commonUI/edit/src/capabilities/TransactionalPersistenceCapability.js b/platform/commonUI/edit/src/capabilities/TransactionalPersistenceCapability.js index 9dc7968d3b..ffa6097125 100644 --- a/platform/commonUI/edit/src/capabilities/TransactionalPersistenceCapability.js +++ b/platform/commonUI/edit/src/capabilities/TransactionalPersistenceCapability.js @@ -60,14 +60,14 @@ define( var self = this; function onCommit() { - return self.persistenceCapability.persist().then(function(result) { + return self.persistenceCapability.persist().then(function (result) { self.persistPending = false; return result; }); } function onCancel() { - return self.persistenceCapability.refresh().then(function(result) { + return self.persistenceCapability.refresh().then(function (result) { self.persistPending = false; return result; }); diff --git a/platform/commonUI/edit/src/controllers/EditObjectController.js b/platform/commonUI/edit/src/controllers/EditObjectController.js index 2b41f344b5..b398398f63 100644 --- a/platform/commonUI/edit/src/controllers/EditObjectController.js +++ b/platform/commonUI/edit/src/controllers/EditObjectController.js @@ -59,7 +59,7 @@ define( $scope.$watch('domainObject', setViewForDomainObject); - $scope.doAction = function (action){ + $scope.doAction = function (action) { return $scope[action] && $scope[action](); }; } @@ -74,8 +74,8 @@ define( var navigatedObject = this.scope.domainObject, policyMessage; - this.policyService.allow("navigation", navigatedObject, undefined, function(message) { - policyMessage = message; + this.policyService.allow("navigation", navigatedObject, undefined, function (message) { + policyMessage = message; }); return policyMessage; diff --git a/platform/commonUI/edit/src/controllers/ElementsController.js b/platform/commonUI/edit/src/controllers/ElementsController.js index 180b60dddc..6d1f552081 100644 --- a/platform/commonUI/edit/src/controllers/ElementsController.js +++ b/platform/commonUI/edit/src/controllers/ElementsController.js @@ -30,7 +30,7 @@ define( * @constructor */ function ElementsController($scope) { - function filterBy(text){ + function filterBy(text) { if (typeof text === 'undefined') { return $scope.searchText; } else { diff --git a/platform/commonUI/edit/src/policies/EditActionPolicy.js b/platform/commonUI/edit/src/policies/EditActionPolicy.js index f266d580eb..fda1cc9e1e 100644 --- a/platform/commonUI/edit/src/policies/EditActionPolicy.js +++ b/platform/commonUI/edit/src/policies/EditActionPolicy.js @@ -45,7 +45,7 @@ define( count = 0, type, views; - if (!domainObject){ + if (!domainObject) { return count; } diff --git a/platform/commonUI/edit/src/policies/EditContextualActionPolicy.js b/platform/commonUI/edit/src/policies/EditContextualActionPolicy.js index af30b5933e..53fd7f6395 100644 --- a/platform/commonUI/edit/src/policies/EditContextualActionPolicy.js +++ b/platform/commonUI/edit/src/policies/EditContextualActionPolicy.js @@ -56,7 +56,7 @@ define( actionMetadata = action.getMetadata ? action.getMetadata() : {}; if (navigatedObject.hasCapability("editor") && navigatedObject.getCapability("editor").isEditContextRoot()) { - if (selectedObject.hasCapability("editor") && selectedObject.getCapability("editor").inEditContext()){ + if (selectedObject.hasCapability("editor") && selectedObject.getCapability("editor").inEditContext()) { return this.editModeBlacklist.indexOf(actionMetadata.key) === -1; } else { //Target is in the context menu diff --git a/platform/commonUI/edit/src/policies/EditNavigationPolicy.js b/platform/commonUI/edit/src/policies/EditNavigationPolicy.js index 83563b5ced..b4b9855d4b 100644 --- a/platform/commonUI/edit/src/policies/EditNavigationPolicy.js +++ b/platform/commonUI/edit/src/policies/EditNavigationPolicy.js @@ -38,7 +38,7 @@ define( /** * @private */ - EditNavigationPolicy.prototype.isDirty = function(domainObject) { + EditNavigationPolicy.prototype.isDirty = function (domainObject) { var navigatedObject = domainObject, editorCapability = navigatedObject && navigatedObject.getCapability("editor"); diff --git a/platform/commonUI/edit/src/representers/EditRepresenter.js b/platform/commonUI/edit/src/representers/EditRepresenter.js index e853669eff..a5d4af9b14 100644 --- a/platform/commonUI/edit/src/representers/EditRepresenter.js +++ b/platform/commonUI/edit/src/representers/EditRepresenter.js @@ -119,7 +119,7 @@ define( // Ensure existing watches are released this.destroy(); - function setEditing(){ + function setEditing() { scope.viewObjectTemplate = 'edit-object'; } @@ -128,15 +128,15 @@ define( * editable then change the view and inspector regions * object representation accordingly */ - this.listenHandle = this.domainObject.getCapability('status').listen(function(statuses){ - if (statuses.indexOf('editing') !== -1){ + this.listenHandle = this.domainObject.getCapability('status').listen(function (statuses) { + if (statuses.indexOf('editing') !== -1) { setEditing(); } else { delete scope.viewObjectTemplate; } }); - if (representedObject.hasCapability('editor') && representedObject.getCapability('editor').isEditContextRoot()){ + if (representedObject.hasCapability('editor') && representedObject.getCapability('editor').isEditContextRoot()) { setEditing(); } }; diff --git a/platform/commonUI/edit/src/representers/EditToolbar.js b/platform/commonUI/edit/src/representers/EditToolbar.js index aabea1cf4a..7659367dc6 100644 --- a/platform/commonUI/edit/src/representers/EditToolbar.js +++ b/platform/commonUI/edit/src/representers/EditToolbar.js @@ -24,8 +24,12 @@ define( function () { // Utility functions for reducing truth arrays - function and(a, b) { return a && b; } - function or(a, b) { return a || b; } + function and(a, b) { + return a && b; + } + function or(a, b) { + return a || b; + } /** diff --git a/platform/commonUI/edit/src/services/TransactionService.js b/platform/commonUI/edit/src/services/TransactionService.js index 8d57e1e809..8d6c465959 100644 --- a/platform/commonUI/edit/src/services/TransactionService.js +++ b/platform/commonUI/edit/src/services/TransactionService.js @@ -22,7 +22,7 @@ /*global define*/ define( [], - function() { + function () { /** * Implements an application-wide transaction state. Once a * transaction is started, calls to @@ -103,7 +103,7 @@ define( this.$log.error("Error committing transaction."); } } - return this.$q.all(promises).then( function () { + return this.$q.all(promises).then(function () { self.transaction = false; self.onCommits = []; @@ -145,4 +145,4 @@ define( }; return TransactionService; -}); + }); diff --git a/platform/commonUI/edit/test/actions/CancelActionSpec.js b/platform/commonUI/edit/test/actions/CancelActionSpec.js index 2131bbf999..411fdb1659 100644 --- a/platform/commonUI/edit/test/actions/CancelActionSpec.js +++ b/platform/commonUI/edit/test/actions/CancelActionSpec.js @@ -44,15 +44,15 @@ define( beforeEach(function () { mockLocation = jasmine.createSpyObj( "$location", - [ "path" ] + ["path"] ); mockDomainObject = jasmine.createSpyObj( "domainObject", - [ "getCapability", "hasCapability" ] + ["getCapability", "hasCapability"] ); mockEditorCapability = jasmine.createSpyObj( "editor", - [ "save", "cancel" ] + ["save", "cancel"] ); mockUrlService = jasmine.createSpyObj( "urlService", @@ -100,4 +100,4 @@ define( }); }); } -); \ No newline at end of file +); diff --git a/platform/commonUI/edit/test/actions/EditActionSpec.js b/platform/commonUI/edit/test/actions/EditActionSpec.js index f645e1cd08..fe6fcb1eae 100644 --- a/platform/commonUI/edit/test/actions/EditActionSpec.js +++ b/platform/commonUI/edit/test/actions/EditActionSpec.js @@ -38,23 +38,23 @@ define( beforeEach(function () { mockLocation = jasmine.createSpyObj( "$location", - [ "path" ] + ["path"] ); mockNavigationService = jasmine.createSpyObj( "navigationService", - [ "setNavigation", "getNavigation", "addListener", "removeListener" ] + ["setNavigation", "getNavigation", "addListener", "removeListener"] ); mockLog = jasmine.createSpyObj( "$log", - [ "error", "warn", "info", "debug" ] + ["error", "warn", "info", "debug"] ); mockDomainObject = jasmine.createSpyObj( "domainObject", - [ "getId", "getModel", "getCapability", "hasCapability", "useCapability" ] + ["getId", "getModel", "getCapability", "hasCapability", "useCapability"] ); mockType = jasmine.createSpyObj( "type", - [ "hasFeature" ] + ["hasFeature"] ); mockEditor = jasmine.createSpyObj( "editorCapability", @@ -66,7 +66,7 @@ define( editor: mockEditor }; - mockDomainObject.getCapability.andCallFake( function (name) { + mockDomainObject.getCapability.andCallFake(function (name) { return capabilities[name]; }); mockDomainObject.hasCapability.andReturn(true); @@ -112,4 +112,4 @@ define( }); } -); \ No newline at end of file +); diff --git a/platform/commonUI/edit/test/actions/LinkActionSpec.js b/platform/commonUI/edit/test/actions/LinkActionSpec.js index 144dd4e395..b116044b00 100644 --- a/platform/commonUI/edit/test/actions/LinkActionSpec.js +++ b/platform/commonUI/edit/test/actions/LinkActionSpec.js @@ -50,7 +50,7 @@ define( mockDomainObject = jasmine.createSpyObj( "domainObject", - [ "getId", "getCapability" ] + ["getId", "getCapability"] ); mockQ = { when: mockPromise }; mockParent = { @@ -64,10 +64,10 @@ define( return capabilities[k].invoke(v); } }; - mockContext = jasmine.createSpyObj("context", [ "getParent" ]); - mockComposition = jasmine.createSpyObj("composition", [ "invoke", "add" ]); - mockPersistence = jasmine.createSpyObj("persistence", [ "persist" ]); - mockType = jasmine.createSpyObj("type", [ "hasFeature" ]); + mockContext = jasmine.createSpyObj("context", ["getParent"]); + mockComposition = jasmine.createSpyObj("composition", ["invoke", "add"]); + mockPersistence = jasmine.createSpyObj("persistence", ["persist"]); + mockType = jasmine.createSpyObj("type", ["hasFeature"]); mockDomainObject.getId.andReturn("test"); mockDomainObject.getCapability.andReturn(mockContext); @@ -82,7 +82,7 @@ define( type: mockType }; model = { - composition: [ "a", "b", "c" ] + composition: ["a", "b", "c"] }; actionContext = { diff --git a/platform/commonUI/edit/test/actions/PropertiesActionSpec.js b/platform/commonUI/edit/test/actions/PropertiesActionSpec.js index cad091cff5..785ac24d35 100644 --- a/platform/commonUI/edit/test/actions/PropertiesActionSpec.js +++ b/platform/commonUI/edit/test/actions/PropertiesActionSpec.js @@ -38,7 +38,9 @@ define( beforeEach(function () { capabilities = { type: { - getProperties: function () { return []; }, + getProperties: function () { + return []; + }, hasFeature: jasmine.createSpy('hasFeature') }, persistence: jasmine.createSpyObj("persistence", ["persist"]), @@ -47,11 +49,21 @@ define( model = {}; input = {}; object = { - getId: function () { return 'test-id'; }, - getCapability: function (k) { return capabilities[k]; }, - getModel: function () { return model; }, - useCapability: function (k, v) { return capabilities[k](v); }, - hasCapability: function () { return true; } + getId: function () { + return 'test-id'; + }, + getCapability: function (k) { + return capabilities[k]; + }, + getModel: function () { + return model; + }, + useCapability: function (k, v) { + return capabilities[k](v); + }, + hasCapability: function () { + return true; + } }; context = { someKey: "some value", domainObject: object }; dialogService = { diff --git a/platform/commonUI/edit/test/actions/PropertiesDialogSpec.js b/platform/commonUI/edit/test/actions/PropertiesDialogSpec.js index 2de6c12885..eebf513464 100644 --- a/platform/commonUI/edit/test/actions/PropertiesDialogSpec.js +++ b/platform/commonUI/edit/test/actions/PropertiesDialogSpec.js @@ -30,14 +30,22 @@ define( beforeEach(function () { type = { - getProperties: function () { return properties; } + getProperties: function () { + return properties; + } }; model = { x: "initial value" }; properties = ["x", "y", "z"].map(function (k) { return { - getValue: function (model) { return model[k]; }, - setValue: function (model, v) { model[k] = v; }, - getDefinition: function () { return { control: 'textfield '}; } + getValue: function (model) { + return model[k]; + }, + setValue: function (model, v) { + model[k] = v; + }, + getDefinition: function () { + return { control: 'textfield '}; + } }; }); diff --git a/platform/commonUI/edit/test/actions/RemoveActionSpec.js b/platform/commonUI/edit/test/actions/RemoveActionSpec.js index f9f36e36a8..a9ae1143af 100644 --- a/platform/commonUI/edit/test/actions/RemoveActionSpec.js +++ b/platform/commonUI/edit/test/actions/RemoveActionSpec.js @@ -57,19 +57,19 @@ define( mockDomainObject = jasmine.createSpyObj( "domainObject", - [ "getId", "getCapability" ] + ["getId", "getCapability"] ); mockChildObject = jasmine.createSpyObj( "domainObject", - [ "getId", "getCapability" ] + ["getId", "getCapability"] ); mockGrandchildObject = jasmine.createSpyObj( "domainObject", - [ "getId", "getCapability" ] + ["getId", "getCapability"] ); mockRootObject = jasmine.createSpyObj( "domainObject", - [ "getId", "getCapability" ] + ["getId", "getCapability"] ); mockQ = { when: mockPromise }; mockParent = { @@ -83,13 +83,13 @@ define( return capabilities[k].invoke(v); } }; - mockContext = jasmine.createSpyObj("context", [ "getParent" ]); - mockChildContext = jasmine.createSpyObj("context", [ "getParent" ]); - mockGrandchildContext = jasmine.createSpyObj("context", [ "getParent" ]); - mockRootContext = jasmine.createSpyObj("context", [ "getParent" ]); - mockMutation = jasmine.createSpyObj("mutation", [ "invoke" ]); - mockPersistence = jasmine.createSpyObj("persistence", [ "persist" ]); - mockType = jasmine.createSpyObj("type", [ "hasFeature" ]); + mockContext = jasmine.createSpyObj("context", ["getParent"]); + mockChildContext = jasmine.createSpyObj("context", ["getParent"]); + mockGrandchildContext = jasmine.createSpyObj("context", ["getParent"]); + mockRootContext = jasmine.createSpyObj("context", ["getParent"]); + mockMutation = jasmine.createSpyObj("mutation", ["invoke"]); + mockPersistence = jasmine.createSpyObj("persistence", ["persist"]); + mockType = jasmine.createSpyObj("type", ["hasFeature"]); mockNavigationService = jasmine.createSpyObj( "navigationService", [ @@ -100,8 +100,8 @@ define( ] ); mockNavigationService.getNavigation.andReturn(mockDomainObject); - - + + mockDomainObject.getId.andReturn("test"); mockDomainObject.getCapability.andReturn(mockContext); mockContext.getParent.andReturn(mockParent); @@ -113,7 +113,7 @@ define( type: mockType }; model = { - composition: [ "a", "test", "b" ] + composition: ["a", "test", "b"] }; actionContext = { domainObject: mockDomainObject }; @@ -158,60 +158,60 @@ define( // Finally, should have persisted expect(mockPersistence.persist).toHaveBeenCalled(); }); - + it("removes parent of object currently navigated to", function () { // Navigates to child object mockNavigationService.getNavigation.andReturn(mockChildObject); - + // Test is id of object being removed // Child object has different id mockDomainObject.getId.andReturn("test"); mockChildObject.getId.andReturn("not test"); - + // Sets context for the child and domainObject mockDomainObject.getCapability.andReturn(mockContext); mockChildObject.getCapability.andReturn(mockChildContext); - + // Parents of child and domainObject are set mockContext.getParent.andReturn(mockParent); mockChildContext.getParent.andReturn(mockDomainObject); - + mockType.hasFeature.andReturn(true); - + action.perform(); - + // Expects navigation to parent of domainObject (removed object) expect(mockNavigationService.setNavigation).toHaveBeenCalledWith(mockParent); }); - + it("checks if removing object not in ascendent path (reaches ROOT)", function () { // Navigates to grandchild of ROOT mockNavigationService.getNavigation.andReturn(mockGrandchildObject); - + // domainObject (grandparent) is set as ROOT, child and grandchild // are set objects not being removed mockDomainObject.getId.andReturn("test 1"); mockRootObject.getId.andReturn("ROOT"); mockChildObject.getId.andReturn("not test 2"); mockGrandchildObject.getId.andReturn("not test 3"); - + // Sets context for the grandchild, child, and domainObject mockRootObject.getCapability.andReturn(mockRootContext); mockChildObject.getCapability.andReturn(mockChildContext); mockGrandchildObject.getCapability.andReturn(mockGrandchildContext); - + // Parents of grandchild and child are set mockChildContext.getParent.andReturn(mockRootObject); mockGrandchildContext.getParent.andReturn(mockChildObject); - + mockType.hasFeature.andReturn(true); - + action.perform(); - + // Expects no navigation to occur expect(mockNavigationService.setNavigation).not.toHaveBeenCalled(); }); }); } -); \ No newline at end of file +); diff --git a/platform/commonUI/edit/test/actions/SaveActionSpec.js b/platform/commonUI/edit/test/actions/SaveActionSpec.js index 09df5e53b5..2d15b46679 100644 --- a/platform/commonUI/edit/test/actions/SaveActionSpec.js +++ b/platform/commonUI/edit/test/actions/SaveActionSpec.js @@ -52,11 +52,11 @@ define( ); mockEditorCapability = jasmine.createSpyObj( "editor", - [ "save", "cancel", "isEditContextRoot" ] + ["save", "cancel", "isEditContextRoot"] ); mockActionCapability = jasmine.createSpyObj( "actionCapability", - [ "perform"] + ["perform"] ); capabilities.editor = mockEditorCapability; capabilities.action = mockActionCapability; @@ -90,7 +90,7 @@ define( function () { mockDomainObject.getModel.andReturn({persisted: undefined}); expect(SaveAction.appliesTo(actionContext)).toBe(false); - }); + }); it("uses the editor capability to save the object", function () { @@ -106,4 +106,4 @@ define( }); } -); \ No newline at end of file +); diff --git a/platform/commonUI/edit/test/actions/SaveAsActionSpec.js b/platform/commonUI/edit/test/actions/SaveAsActionSpec.js index bac173ddcc..8ea603b623 100644 --- a/platform/commonUI/edit/test/actions/SaveAsActionSpec.js +++ b/platform/commonUI/edit/test/actions/SaveAsActionSpec.js @@ -38,7 +38,7 @@ define( capabilities = {}, action; - function noop () {} + function noop() {} function mockPromise(value) { return (value || {}).then ? value : @@ -49,7 +49,7 @@ define( catch: function (callback) { return mockPromise(callback(value)); } - } ; + } ; } beforeEach(function () { @@ -78,7 +78,7 @@ define( mockEditorCapability = jasmine.createSpyObj( "editor", - [ "save", "cancel", "isEditContextRoot" ] + ["save", "cancel", "isEditContextRoot"] ); mockEditorCapability.cancel.andReturn(mockPromise(undefined)); mockEditorCapability.save.andReturn(mockPromise(true)); @@ -130,7 +130,7 @@ define( action.createWizard.andReturn({ getFormStructure: noop, getInitialFormValue: noop, - populateObjectFromInput: function() { + populateObjectFromInput: function () { return mockDomainObject; } }); diff --git a/platform/commonUI/edit/test/capabilities/EditorCapabilitySpec.js b/platform/commonUI/edit/test/capabilities/EditorCapabilitySpec.js index fe42ec92f7..fa4d1a43b6 100644 --- a/platform/commonUI/edit/test/capabilities/EditorCapabilitySpec.js +++ b/platform/commonUI/edit/test/capabilities/EditorCapabilitySpec.js @@ -82,7 +82,7 @@ define( status: mockStatusCapability }; - mockDomainObject.hasCapability.andCallFake(function(name) { + mockDomainObject.hasCapability.andCallFake(function (name) { return capabilities[name] !== undefined; }); @@ -126,8 +126,8 @@ define( expect(capability.inEditContext()).toBe(true); }); - describe("save", function() { - beforeEach(function() { + describe("save", function () { + beforeEach(function () { capability.edit(); capability.save(); }); @@ -139,8 +139,8 @@ define( }); }); - describe("cancel", function() { - beforeEach(function() { + describe("cancel", function () { + beforeEach(function () { capability.edit(); capability.cancel(); }); @@ -152,10 +152,10 @@ define( }); }); - describe("dirty", function() { + describe("dirty", function () { var model = {}; - beforeEach(function() { + beforeEach(function () { mockDomainObject.getModel.andReturn(model); capability.edit(); capability.cancel(); @@ -170,4 +170,4 @@ define( }); }); } -); \ No newline at end of file +); diff --git a/platform/commonUI/edit/test/capabilities/TransactionCapabilityDecoratorSpec.js b/platform/commonUI/edit/test/capabilities/TransactionCapabilityDecoratorSpec.js index f710cf215e..e1a48af7d1 100644 --- a/platform/commonUI/edit/test/capabilities/TransactionCapabilityDecoratorSpec.js +++ b/platform/commonUI/edit/test/capabilities/TransactionCapabilityDecoratorSpec.js @@ -33,22 +33,22 @@ define( mockCapabilityService, provider; - beforeEach(function() { + beforeEach(function () { mockQ = {}; mockTransactionService = {}; mockCapabilityService = jasmine.createSpyObj("capabilityService", ["getCapabilities"]); mockCapabilityService.getCapabilities.andReturn({ - persistence: function() {} + persistence: function () {} }); provider = new TransactionCapabilityDecorator(mockQ, mockTransactionService, mockCapabilityService); }); - it("decorates the persistence capability", function() { + it("decorates the persistence capability", function () { var capabilities = provider.getCapabilities(); expect(capabilities.persistence({}) instanceof TransactionalPersistenceCapability).toBe(true); }); }); } -); \ No newline at end of file +); diff --git a/platform/commonUI/edit/test/capabilities/TransactionalPersistenceCapabilitySpec.js b/platform/commonUI/edit/test/capabilities/TransactionalPersistenceCapabilitySpec.js index c0892e6db2..63a9119826 100644 --- a/platform/commonUI/edit/test/capabilities/TransactionalPersistenceCapabilitySpec.js +++ b/platform/commonUI/edit/test/capabilities/TransactionalPersistenceCapabilitySpec.js @@ -29,7 +29,7 @@ define( function fastPromise(val) { return { - then: function(callback) { + then: function (callback) { return callback(val); } }; @@ -42,7 +42,7 @@ define( mockDomainObject, capability; - beforeEach(function() { + beforeEach(function () { mockQ = jasmine.createSpyObj("$q", ["when"]); mockQ.when.andCallFake(function (val) { return fastPromise(val); @@ -61,14 +61,14 @@ define( }); it("if no transaction is active, passes through to persistence" + - " provider", function() { + " provider", function () { mockTransactionService.isActive.andReturn(false); capability.persist(); expect(mockPersistence.persist).toHaveBeenCalled(); }); it("if transaction is active, persist and cancel calls are" + - " queued", function() { + " queued", function () { mockTransactionService.isActive.andReturn(true); capability.persist(); expect(mockTransactionService.addToTransaction).toHaveBeenCalled(); @@ -78,7 +78,7 @@ define( expect(mockPersistence.refresh).toHaveBeenCalled(); }); - it("persist call is only added to transaction once", function() { + it("persist call is only added to transaction once", function () { mockTransactionService.isActive.andReturn(true); capability.persist(); expect(mockTransactionService.addToTransaction).toHaveBeenCalled(); @@ -89,4 +89,4 @@ define( }); } -); \ No newline at end of file +); diff --git a/platform/commonUI/edit/test/controllers/EditActionControllerSpec.js b/platform/commonUI/edit/test/controllers/EditActionControllerSpec.js index 6478837ce6..2fe3e32d63 100644 --- a/platform/commonUI/edit/test/controllers/EditActionControllerSpec.js +++ b/platform/commonUI/edit/test/controllers/EditActionControllerSpec.js @@ -56,4 +56,4 @@ define( }); }); } -); \ No newline at end of file +); diff --git a/platform/commonUI/edit/test/controllers/EditControllerSpec.js b/platform/commonUI/edit/test/controllers/EditControllerSpec.js index 8c6a1ee31f..b616d6006d 100644 --- a/platform/commonUI/edit/test/controllers/EditControllerSpec.js +++ b/platform/commonUI/edit/test/controllers/EditControllerSpec.js @@ -52,15 +52,15 @@ define( ); mockScope = jasmine.createSpyObj( "$scope", - [ "$on", "$watch" ] + ["$on", "$watch"] ); mockObject = jasmine.createSpyObj( "domainObject", - [ "getId", "getModel", "getCapability", "hasCapability", "useCapability" ] + ["getId", "getModel", "getCapability", "hasCapability", "useCapability"] ); mockType = jasmine.createSpyObj( "type", - [ "hasFeature" ] + ["hasFeature"] ); mockStatusCapability = jasmine.createSpyObj('statusCapability', ["get"] @@ -99,8 +99,8 @@ define( expect(controller.getUnloadWarning()).toBeUndefined(); // Override the policy service to prevent navigation - mockPolicyService.allow.andCallFake(function(category, object, context, callback){ - callback(errorMessage); + mockPolicyService.allow.andCallFake(function (category, object, context, callback) { + callback(errorMessage); }); // Should have some warning message here now diff --git a/platform/commonUI/edit/test/controllers/EditPanesControllerSpec.js b/platform/commonUI/edit/test/controllers/EditPanesControllerSpec.js index d0d6aea413..4d6291ae7f 100644 --- a/platform/commonUI/edit/test/controllers/EditPanesControllerSpec.js +++ b/platform/commonUI/edit/test/controllers/EditPanesControllerSpec.js @@ -34,11 +34,11 @@ define( mockScope = jasmine.createSpyObj("$scope", ["$watch"]); mockDomainObject = jasmine.createSpyObj( 'domainObject', - [ 'getId', 'getCapability' ] + ['getId', 'getCapability'] ); mockContext = jasmine.createSpyObj( 'context', - [ 'getTrueRoot' ] + ['getTrueRoot'] ); mockDomainObject.getId.andReturn('test-id'); @@ -110,4 +110,4 @@ define( }); }); } -); \ No newline at end of file +); diff --git a/platform/commonUI/edit/test/controllers/ElementsControllerSpec.js b/platform/commonUI/edit/test/controllers/ElementsControllerSpec.js index 2837eb03df..a40c318c51 100644 --- a/platform/commonUI/edit/test/controllers/ElementsControllerSpec.js +++ b/platform/commonUI/edit/test/controllers/ElementsControllerSpec.js @@ -34,8 +34,8 @@ define( controller = new ElementsController(mockScope); }); - function getModel (model) { - return function() { + function getModel(model) { + return function () { return model; }; } diff --git a/platform/commonUI/edit/test/directives/MCTBeforeUnloadSpec.js b/platform/commonUI/edit/test/directives/MCTBeforeUnloadSpec.js index f025cef20d..ab108f6feb 100644 --- a/platform/commonUI/edit/test/directives/MCTBeforeUnloadSpec.js +++ b/platform/commonUI/edit/test/directives/MCTBeforeUnloadSpec.js @@ -111,4 +111,4 @@ define( }); } -); \ No newline at end of file +); diff --git a/platform/commonUI/edit/test/policies/EditActionPolicySpec.js b/platform/commonUI/edit/test/policies/EditActionPolicySpec.js index 0cdf1be85d..539e37a373 100644 --- a/platform/commonUI/edit/test/policies/EditActionPolicySpec.js +++ b/platform/commonUI/edit/test/policies/EditActionPolicySpec.js @@ -58,10 +58,10 @@ define( mockEditAction = jasmine.createSpyObj('edit', ['getMetadata']); mockPropertiesAction = jasmine.createSpyObj('edit', ['getMetadata']); - mockDomainObject.getCapability.andCallFake(function(capability){ + mockDomainObject.getCapability.andCallFake(function (capability) { return capabilities[capability]; }); - mockDomainObject.hasCapability.andCallFake(function(capability){ + mockDomainObject.hasCapability.andCallFake(function (capability) { return !!capabilities[capability]; }); @@ -88,42 +88,42 @@ define( }); it("allows the edit action when there are editable views", function () { - testViews = [ editableView ]; + testViews = [editableView]; expect(policy.allow(mockEditAction, testContext)).toBe(true); }); it("allows the edit properties action when there are no editable views", function () { - testViews = [ nonEditableView, nonEditableView ]; + testViews = [nonEditableView, nonEditableView]; expect(policy.allow(mockPropertiesAction, testContext)).toBe(true); }); it("disallows the edit action when there are no editable views", function () { - testViews = [ nonEditableView, nonEditableView ]; + testViews = [nonEditableView, nonEditableView]; expect(policy.allow(mockEditAction, testContext)).toBe(false); }); it("disallows the edit properties action when there are" + " editable views", function () { - testViews = [ editableView ]; + testViews = [editableView]; expect(policy.allow(mockPropertiesAction, testContext)).toBe(false); }); it("disallows the edit action when object is already being" + " edited", function () { - testViews = [ editableView ]; + testViews = [editableView]; mockEditorCapability.isEditContextRoot.andReturn(true); expect(policy.allow(mockEditAction, testContext)).toBe(false); }); it("allows editing of panels in plot view", function () { - testViews = [ plotView ]; + testViews = [plotView]; mockTypeCapability.getKey.andReturn('telemetry.panel'); expect(policy.allow(mockEditAction, testContext)).toBe(true); }); it("disallows editing of plot view when object not a panel type", function () { - testViews = [ plotView ]; + testViews = [plotView]; mockTypeCapability.getKey.andReturn('something.else'); expect(policy.allow(mockEditAction, testContext)).toBe(false); @@ -131,10 +131,10 @@ define( it("allows the edit properties outside of the 'view-control' category", function () { - testViews = [ nonEditableView ]; + testViews = [nonEditableView]; testContext.category = "something-else"; expect(policy.allow(mockPropertiesAction, testContext)).toBe(true); }); }); } -); \ No newline at end of file +); diff --git a/platform/commonUI/edit/test/policies/EditContextualActionPolicySpec.js b/platform/commonUI/edit/test/policies/EditContextualActionPolicySpec.js index a516061e80..23e7ec8c1e 100644 --- a/platform/commonUI/edit/test/policies/EditContextualActionPolicySpec.js +++ b/platform/commonUI/edit/test/policies/EditContextualActionPolicySpec.js @@ -61,12 +61,12 @@ define( policy = new EditContextualActionPolicy(navigationService, editModeBlacklist, nonEditContextBlacklist); }); - it('Allows all actions when navigated object not in edit mode', function() { + it('Allows all actions when navigated object not in edit mode', function () { expect(policy.allow(mockAction, context)).toBe(true); }); it('Allows "window" action when navigated object in edit mode,' + - ' but selected object not in edit mode ', function() { + ' but selected object not in edit mode ', function () { navigatedObject.hasCapability.andReturn(true); mockEditorCapability.isEditContextRoot.andReturn(true); metadata.key = "window"; @@ -75,7 +75,7 @@ define( it('Allows "remove" action when navigated object in edit mode,' + ' and selected object not editable, but its parent is.', - function() { + function () { var mockParent = jasmine.createSpyObj("parentObject", ["hasCapability"]), mockContextCapability = jasmine.createSpyObj("contextCapability", ["getParent"]); @@ -93,10 +93,10 @@ define( metadata.key = "remove"; expect(policy.allow(mockAction, context)).toBe(true); - }); + }); it('Disallows "move" action when navigated object in edit mode,' + - ' but selected object not in edit mode ', function() { + ' but selected object not in edit mode ', function () { navigatedObject.hasCapability.andReturn(true); mockEditorCapability.isEditContextRoot.andReturn(true); mockEditorCapability.inEditContext.andReturn(false); @@ -105,7 +105,7 @@ define( }); it('Disallows copy action when navigated object and' + - ' selected object in edit mode', function() { + ' selected object in edit mode', function () { navigatedObject.hasCapability.andReturn(true); mockDomainObject.hasCapability.andReturn(true); mockEditorCapability.isEditContextRoot.andReturn(true); diff --git a/platform/commonUI/edit/test/policies/EditableViewPolicySpec.js b/platform/commonUI/edit/test/policies/EditableViewPolicySpec.js index 32400a7453..e849e49c5f 100644 --- a/platform/commonUI/edit/test/policies/EditableViewPolicySpec.js +++ b/platform/commonUI/edit/test/policies/EditableViewPolicySpec.js @@ -36,7 +36,7 @@ define( ['hasCapability', 'getCapability'] ); mockDomainObject.getCapability.andReturn({ - inEditContext: function () { + inEditContext: function () { return true; } }); @@ -76,4 +76,4 @@ define( }); }); } -); \ No newline at end of file +); diff --git a/platform/commonUI/edit/test/representers/EditRepresenterSpec.js b/platform/commonUI/edit/test/representers/EditRepresenterSpec.js index fe0c17c5bd..d535e19bac 100644 --- a/platform/commonUI/edit/test/representers/EditRepresenterSpec.js +++ b/platform/commonUI/edit/test/representers/EditRepresenterSpec.js @@ -72,7 +72,7 @@ define( mockDomainObject.getModel.andReturn({}); mockDomainObject.hasCapability.andReturn(true); mockDomainObject.useCapability.andReturn(true); - mockDomainObject.getCapability.andCallFake(function(capability){ + mockDomainObject.getCapability.andCallFake(function (capability) { return mockCapabilities[capability]; }); diff --git a/platform/commonUI/edit/test/representers/EditToolbarRepresenterSpec.js b/platform/commonUI/edit/test/representers/EditToolbarRepresenterSpec.js index cc566c71f3..d0833e490c 100644 --- a/platform/commonUI/edit/test/representers/EditToolbarRepresenterSpec.js +++ b/platform/commonUI/edit/test/representers/EditToolbarRepresenterSpec.js @@ -34,13 +34,13 @@ define( beforeEach(function () { mockScope = jasmine.createSpyObj( '$scope', - [ '$on', '$watch', '$watchCollection', "commit" ] + ['$on', '$watch', '$watchCollection', "commit"] ); mockElement = {}; testAttrs = { toolbar: 'testToolbar' }; mockScope.$parent = jasmine.createSpyObj( '$parent', - [ '$watch', '$watchCollection' ] + ['$watch', '$watchCollection'] ); mockUnwatch = jasmine.createSpy('unwatch'); @@ -92,7 +92,7 @@ define( // Provide a view which has a toolbar representer.represent({ - toolbar: { sections: [ { items: [ { property: 'k' } ] } ] } + toolbar: { sections: [{ items: [{ property: 'k' }] }] } }); // Update the selection @@ -120,7 +120,7 @@ define( // Provide a view which has a toolbar representer.represent({ - toolbar: { sections: [ { items: [ { property: 'k' } ] } ] } + toolbar: { sections: [{ items: [{ property: 'k' }] }] } }); // Update the selection @@ -140,4 +140,4 @@ define( }); } -); \ No newline at end of file +); diff --git a/platform/commonUI/edit/test/representers/EditToolbarSpec.js b/platform/commonUI/edit/test/representers/EditToolbarSpec.js index a252b32612..2e4946dd76 100644 --- a/platform/commonUI/edit/test/representers/EditToolbarSpec.js +++ b/platform/commonUI/edit/test/representers/EditToolbarSpec.js @@ -76,7 +76,7 @@ define( it("provides properties from the original structure", function () { expect( - new EditToolbar(testStructure, [ testABC ]) + new EditToolbar(testStructure, [testABC]) .getStructure() .sections[0] .items[1] @@ -87,7 +87,7 @@ define( // This is needed by mct-toolbar it("adds keys to form structure", function () { expect( - new EditToolbar(testStructure, [ testABC ]) + new EditToolbar(testStructure, [testABC]) .getStructure() .sections[0] .items[1] @@ -97,20 +97,20 @@ define( it("marks empty sections as hidden", function () { // Verify that all sections are included when applicable... - toolbar.setSelection([ testABCXYZ ]); + toolbar.setSelection([testABCXYZ]); expect(toolbar.getStructure().sections.map(getVisibility)) - .toEqual([ true, true, false ]); + .toEqual([true, true, false]); // ...but omitted when only some are applicable - toolbar.setSelection([ testABC ]); + toolbar.setSelection([testABC]); expect(toolbar.getStructure().sections.map(getVisibility)) - .toEqual([ true, false, false ]); + .toEqual([true, false, false]); }); it("reads properties from selections", function () { var structure, state; - toolbar.setSelection([ testABC ]); + toolbar.setSelection([testABC]); structure = toolbar.getStructure(); state = toolbar.getState(); @@ -126,9 +126,11 @@ define( it("reads properties from getters", function () { var structure, state; - testABC.a = function () { return "from a getter!"; }; + testABC.a = function () { + return "from a getter!"; + }; - toolbar.setSelection([ testABC ]); + toolbar.setSelection([testABC]); structure = toolbar.getStructure(); state = toolbar.getState(); @@ -137,7 +139,7 @@ define( }); it("sets properties on update", function () { - toolbar.setSelection([ testABC ]); + toolbar.setSelection([testABC]); toolbar.updateState( toolbar.getStructure().sections[0].items[0].key, "new value" @@ -151,7 +153,7 @@ define( testABC.a = jasmine.createSpy('a'); - toolbar.setSelection([ testABC ]); + toolbar.setSelection([testABC]); structure = toolbar.getStructure(); toolbar.updateState( @@ -165,7 +167,7 @@ define( it("provides a return value describing update status", function () { // Should return true if actually updated, otherwise false var key; - toolbar.setSelection([ testABC ]); + toolbar.setSelection([testABC]); key = toolbar.getStructure().sections[0].items[0].key; expect(toolbar.updateState(key, testABC.a)).toBeFalsy(); expect(toolbar.updateState(key, "new value")).toBeTruthy(); @@ -173,35 +175,35 @@ define( it("removes inapplicable items", function () { // First, verify with all items - toolbar.setSelection([ testABC ]); + toolbar.setSelection([testABC]); expect(toolbar.getStructure().sections[0].items.map(getVisibility)) - .toEqual([ true, true, true ]); + .toEqual([true, true, true]); // Then, try with some items omitted - toolbar.setSelection([ testABC, testAB ]); + toolbar.setSelection([testABC, testAB]); expect(toolbar.getStructure().sections[0].items.map(getVisibility)) - .toEqual([ true, true, false ]); + .toEqual([true, true, false]); }); it("removes inconsistent states", function () { // Only two of three values match among these selections - toolbar.setSelection([ testABC, testABC2 ]); + toolbar.setSelection([testABC, testABC2]); expect(toolbar.getStructure().sections[0].items.map(getVisibility)) - .toEqual([ false, true, true ]); + .toEqual([false, true, true]); }); it("allows inclusive items", function () { // One inclusive item is in the set, property 'x' of the // second section; make sure items are pruned down // when only some of the selection has x,y,z properties - toolbar.setSelection([ testABC, testABCXYZ ]); + toolbar.setSelection([testABC, testABCXYZ]); expect(toolbar.getStructure().sections[1].items.map(getVisibility)) - .toEqual([ true, false, false ]); + .toEqual([true, false, false]); }); it("removes inclusive items when there are no matches", function () { - toolbar.setSelection([ testABCYZ ]); + toolbar.setSelection([testABCYZ]); expect(toolbar.getStructure().sections[1].items.map(getVisibility)) - .toEqual([ false, true, true ]); + .toEqual([false, true, true]); }); it("adds click functions when a method is specified", function () { diff --git a/platform/commonUI/edit/test/services/TransactionServiceSpec.js b/platform/commonUI/edit/test/services/TransactionServiceSpec.js index 5f965decf9..91fa859b73 100644 --- a/platform/commonUI/edit/test/services/TransactionServiceSpec.js +++ b/platform/commonUI/edit/test/services/TransactionServiceSpec.js @@ -30,7 +30,7 @@ define( mockLog, transactionService; - function fastPromise (val) { + function fastPromise(val) { return { then: function (callback) { return fastPromise(callback(val)); @@ -75,8 +75,8 @@ define( describe("commit", function () { var onCommits; - beforeEach(function() { - onCommits = [0, 1, 2].map(function(val) { + beforeEach(function () { + onCommits = [0, 1, 2].map(function (val) { return jasmine.createSpy("onCommit" + val); }); @@ -87,7 +87,7 @@ define( it("commit calls all queued commit functions", function () { expect(transactionService.onCommits.length).toBe(3); transactionService.commit(); - onCommits.forEach( function (spy) { + onCommits.forEach(function (spy) { expect(spy).toHaveBeenCalled(); }); }); @@ -104,8 +104,8 @@ define( describe("cancel", function () { var onCancels; - beforeEach(function() { - onCancels = [0, 1, 2].map(function(val) { + beforeEach(function () { + onCancels = [0, 1, 2].map(function (val) { return jasmine.createSpy("onCancel" + val); }); @@ -118,7 +118,7 @@ define( it("cancel calls all queued cancel functions", function () { expect(transactionService.onCancels.length).toBe(3); transactionService.cancel(); - onCancels.forEach( function (spy) { + onCancels.forEach(function (spy) { expect(spy).toHaveBeenCalled(); }); }); @@ -134,4 +134,4 @@ define( }); } -); \ No newline at end of file +); diff --git a/platform/commonUI/formats/test/FormatProviderSpec.js b/platform/commonUI/formats/test/FormatProviderSpec.js index 527a0182af..94d951ff6a 100644 --- a/platform/commonUI/formats/test/FormatProviderSpec.js +++ b/platform/commonUI/formats/test/FormatProviderSpec.js @@ -24,7 +24,7 @@ define( ['../src/FormatProvider'], function (FormatProvider) { - var KEYS = [ 'a', 'b', 'c' ]; + var KEYS = ['a', 'b', 'c']; describe("The FormatProvider", function () { var mockFormats, @@ -35,12 +35,14 @@ define( mockFormatInstances = KEYS.map(function (k) { return jasmine.createSpyObj( 'format-' + k, - [ 'parse', 'validate', 'format' ] + ['parse', 'validate', 'format'] ); }); // Return constructors mockFormats = KEYS.map(function (k, i) { - function MockFormat() { return mockFormatInstances[i]; } + function MockFormat() { + return mockFormatInstances[i]; + } MockFormat.key = k; return MockFormat; }); diff --git a/platform/commonUI/general/bundle.js b/platform/commonUI/general/bundle.js index f78233e135..daadacbc45 100644 --- a/platform/commonUI/general/bundle.js +++ b/platform/commonUI/general/bundle.js @@ -380,7 +380,7 @@ define([ { "key": "mctTree", "implementation": MCTTree, - "depends": [ '$parse', 'gestureService' ] + "depends": ['$parse', 'gestureService'] } ], "constants": [ diff --git a/platform/commonUI/general/src/controllers/BannerController.js b/platform/commonUI/general/src/controllers/BannerController.js index b3f7e23131..5b0cdd61bc 100644 --- a/platform/commonUI/general/src/controllers/BannerController.js +++ b/platform/commonUI/general/src/controllers/BannerController.js @@ -40,7 +40,7 @@ define( function BannerController($scope, notificationService, dialogService) { $scope.active = notificationService.active; - $scope.action = function (action, $event){ + $scope.action = function (action, $event) { /* Prevents default 'maximize' behaviour when clicking on notification button @@ -48,19 +48,19 @@ define( $event.stopPropagation(); return action(); }; - $scope.dismiss = function(notification, $event) { + $scope.dismiss = function (notification, $event) { $event.stopPropagation(); notification.dismissOrMinimize(); }; - $scope.maximize = function(notification) { - if (notification.model.severity !== "info"){ + $scope.maximize = function (notification) { + if (notification.model.severity !== "info") { - notification.model.cancel = function(){ + notification.model.cancel = function () { dialogService.dismiss(); }; //If the notification is dismissed by the user, close // the dialog. - notification.onDismiss(function(){ + notification.onDismiss(function () { dialogService.dismiss(); }); @@ -69,4 +69,4 @@ define( }; } return BannerController; - }); \ No newline at end of file + }); diff --git a/platform/commonUI/general/src/controllers/ClickAwayController.js b/platform/commonUI/general/src/controllers/ClickAwayController.js index 2f6520df5e..18d9ca41c5 100644 --- a/platform/commonUI/general/src/controllers/ClickAwayController.js +++ b/platform/commonUI/general/src/controllers/ClickAwayController.js @@ -65,7 +65,7 @@ define( * Get the current state of the toggle. * @return {boolean} true if active */ - ClickAwayController.prototype.isActive =function () { + ClickAwayController.prototype.isActive = function () { return this.state; }; diff --git a/platform/commonUI/general/src/controllers/DateTimePickerController.js b/platform/commonUI/general/src/controllers/DateTimePickerController.js index 81708d353e..77194f5ab8 100644 --- a/platform/commonUI/general/src/controllers/DateTimePickerController.js +++ b/platform/commonUI/general/src/controllers/DateTimePickerController.js @@ -21,7 +21,7 @@ *****************************************************************************/ define( - [ 'moment' ], + ['moment'], function (moment) { var TIME_NAMES = { diff --git a/platform/commonUI/general/src/controllers/ObjectInspectorController.js b/platform/commonUI/general/src/controllers/ObjectInspectorController.js index abdc27c154..fcf34a55b3 100644 --- a/platform/commonUI/general/src/controllers/ObjectInspectorController.js +++ b/platform/commonUI/general/src/controllers/ObjectInspectorController.js @@ -28,7 +28,7 @@ define( function () { /** - * The ObjectInspectorController gets and formats the data for + * The ObjectInspectorController gets and formats the data for * the inspector display * * @constructor @@ -37,67 +37,67 @@ define( $scope.primaryParents = []; $scope.contextutalParents = []; //$scope.isLink = false; - + // Gets an array of the contextual parents/anscestors of the selected object function getContextualPath() { var currentObj = $scope.ngModel.selectedObject, currentParent, parents = []; - + currentParent = currentObj && currentObj.hasCapability('context') && currentObj.getCapability('context').getParent(); - + while (currentParent && currentParent.getModel().type !== 'root' && currentParent.hasCapability('context')) { - // Record this object + // Record this object parents.unshift(currentParent); - - // Get the next one up the tree + + // Get the next one up the tree currentObj = currentParent; currentParent = currentObj.getCapability('context').getParent(); } - + $scope.contextutalParents = parents; } - - // Gets an array of the parents/anscestors of the selected object's + + // Gets an array of the parents/anscestors of the selected object's // primary location (locational of original non-link) function getPrimaryPath(current) { var location; - + // If this the the initial call of this recursive function if (!current) { current = $scope.ngModel.selectedObject; $scope.primaryParents = []; } - + location = current.getModel().location; - + if (location && location !== 'root') { objectService.getObjects([location]).then(function (obj) { var next = obj[location]; - + $scope.primaryParents.unshift(next); getPrimaryPath(next); }); } - + } - + // Gets the metadata for the selected object function getMetadata() { $scope.metadata = $scope.ngModel.selectedObject && $scope.ngModel.selectedObject.hasCapability('metadata') && $scope.ngModel.selectedObject.useCapability('metadata'); } - - // Set scope variables when the selected object changes + + // Set scope variables when the selected object changes $scope.$watch('ngModel.selectedObject', function () { $scope.isLink = $scope.ngModel.selectedObject && $scope.ngModel.selectedObject.hasCapability('location') && $scope.ngModel.selectedObject.getCapability('location').isLink(); - + if ($scope.isLink) { getPrimaryPath(); getContextualPath(); @@ -105,11 +105,11 @@ define( $scope.primaryParents = []; getContextualPath(); } - + getMetadata(); }); } return ObjectInspectorController; } -); \ No newline at end of file +); diff --git a/platform/commonUI/general/src/controllers/SelectorController.js b/platform/commonUI/general/src/controllers/SelectorController.js index 55a79af308..d5e85be820 100644 --- a/platform/commonUI/general/src/controllers/SelectorController.js +++ b/platform/commonUI/general/src/controllers/SelectorController.js @@ -69,7 +69,9 @@ define( function updateList(ids) { function updateSelectedObjects(objects) { // Look up from the - function getObject(id) { return objects[id]; } + function getObject(id) { + return objects[id]; + } self.selectedObjects = ids.filter(getObject).map(getObject); } diff --git a/platform/commonUI/general/src/directives/MCTDrag.js b/platform/commonUI/general/src/directives/MCTDrag.js index ac96357da8..29757552f2 100644 --- a/platform/commonUI/general/src/directives/MCTDrag.js +++ b/platform/commonUI/general/src/directives/MCTDrag.js @@ -76,7 +76,7 @@ define( // based on a new mouse event object. function updatePosition(event) { // Get the current position, as an array - var currentPosition = [ event.pageX, event.pageY ]; + var currentPosition = [event.pageX, event.pageY]; // Track the initial position, if one hasn't been observed initialPosition = initialPosition || currentPosition; diff --git a/platform/commonUI/general/src/directives/MCTPopup.js b/platform/commonUI/general/src/directives/MCTPopup.js index e96c1c0327..7ce409acba 100644 --- a/platform/commonUI/general/src/directives/MCTPopup.js +++ b/platform/commonUI/general/src/directives/MCTPopup.js @@ -46,7 +46,7 @@ define( function link(scope, element, attrs, ctrl, transclude) { var div = $compile(TEMPLATE)(scope), rect = element.parent()[0].getBoundingClientRect(), - position = [ rect.left, rect.top ], + position = [rect.left, rect.top], popup = popupService.display(div, position); // TODO: Handle in CSS; diff --git a/platform/commonUI/general/src/directives/MCTSplitter.js b/platform/commonUI/general/src/directives/MCTSplitter.js index 0f8c77da96..edff3822bd 100644 --- a/platform/commonUI/general/src/directives/MCTSplitter.js +++ b/platform/commonUI/general/src/directives/MCTSplitter.js @@ -59,7 +59,7 @@ define( }, // Grab the event when the user is done moving // the splitter and pass it on - endMove: function() { + endMove: function () { mctSplitPane.toggleClass('resizing'); } }; diff --git a/platform/commonUI/general/src/services/PopupService.js b/platform/commonUI/general/src/services/PopupService.js index b869be6d76..d6b08e752f 100644 --- a/platform/commonUI/general/src/services/PopupService.js +++ b/platform/commonUI/general/src/services/PopupService.js @@ -78,7 +78,7 @@ define( var $document = this.$document, $window = this.$window, body = $document.find('body'), - winDim = [ $window.innerWidth, $window.innerHeight ], + winDim = [$window.innerWidth, $window.innerHeight], styles = { position: 'absolute' }, margin, offset; @@ -93,7 +93,7 @@ define( options.offsetX !== undefined ? options.offsetX : 0, options.offsetY !== undefined ? options.offsetY : 0 ]; - margin = [ options.marginX, options.marginY ].map(function (m, i) { + margin = [options.marginX, options.marginY].map(function (m, i) { return m === undefined ? (winDim[i] / 2) : m; }).map(adjustNegatives); diff --git a/platform/commonUI/general/src/ui/TreeLabelView.js b/platform/commonUI/general/src/ui/TreeLabelView.js index d5dffb0068..98a82c963d 100644 --- a/platform/commonUI/general/src/ui/TreeLabelView.js +++ b/platform/commonUI/general/src/ui/TreeLabelView.js @@ -75,7 +75,7 @@ define([ this.activeGestures = this.gestureService.attachGestures( this.elements(), domainObject, - [ 'info', 'menu', 'drag' ] + ['info', 'menu', 'drag'] ); } }; diff --git a/platform/commonUI/general/test/StyleSheetLoaderSpec.js b/platform/commonUI/general/test/StyleSheetLoaderSpec.js index a00bdfee81..fe6d8bcc50 100644 --- a/platform/commonUI/general/test/StyleSheetLoaderSpec.js +++ b/platform/commonUI/general/test/StyleSheetLoaderSpec.js @@ -47,7 +47,7 @@ define( mockPlainDocument = jasmine.createSpyObj("document", ["createElement"]); - mockDocument = [ mockPlainDocument ]; + mockDocument = [mockPlainDocument]; mockDocument.find = jasmine.createSpy("$document.find"); mockHead = jasmine.createSpyObj("head", ["append"]); mockElement = jasmine.createSpyObj("link", ["setAttribute"]); diff --git a/platform/commonUI/general/test/controllers/ActionGroupControllerSpec.js b/platform/commonUI/general/test/controllers/ActionGroupControllerSpec.js index 104f9dd9db..4e0195f09d 100644 --- a/platform/commonUI/general/test/controllers/ActionGroupControllerSpec.js +++ b/platform/commonUI/general/test/controllers/ActionGroupControllerSpec.js @@ -92,4 +92,4 @@ define( }); }); } -); \ No newline at end of file +); diff --git a/platform/commonUI/general/test/controllers/BottomBarControllerSpec.js b/platform/commonUI/general/test/controllers/BottomBarControllerSpec.js index 2b3614fe67..cc58d4558c 100644 --- a/platform/commonUI/general/test/controllers/BottomBarControllerSpec.js +++ b/platform/commonUI/general/test/controllers/BottomBarControllerSpec.js @@ -35,11 +35,13 @@ define( beforeEach(function () { mockIndicator = jasmine.createSpyObj( "indicator", - [ "getGlyph", "getText" ] + ["getGlyph", "getText"] ); testIndicatorA = {}; - testIndicatorB = function () { return mockIndicator; }; + testIndicatorB = function () { + return mockIndicator; + }; testIndicatorC = { template: "someTemplate" }; testIndicators = [ @@ -71,4 +73,4 @@ define( }); }); } -); \ No newline at end of file +); diff --git a/platform/commonUI/general/test/controllers/ClickAwayControllerSpec.js b/platform/commonUI/general/test/controllers/ClickAwayControllerSpec.js index 0bd6cc0bdb..e2b9f62c91 100644 --- a/platform/commonUI/general/test/controllers/ClickAwayControllerSpec.js +++ b/platform/commonUI/general/test/controllers/ClickAwayControllerSpec.js @@ -32,7 +32,7 @@ define( beforeEach(function () { mockDocument = jasmine.createSpyObj( "$document", - [ "on", "off" ] + ["on", "off"] ); mockTimeout = jasmine.createSpy('timeout'); controller = new ClickAwayController( diff --git a/platform/commonUI/general/test/controllers/ContextMenuControllerSpec.js b/platform/commonUI/general/test/controllers/ContextMenuControllerSpec.js index 215a06727f..0f56caa714 100644 --- a/platform/commonUI/general/test/controllers/ContextMenuControllerSpec.js +++ b/platform/commonUI/general/test/controllers/ContextMenuControllerSpec.js @@ -57,4 +57,4 @@ define( }); }); } -); \ No newline at end of file +); diff --git a/platform/commonUI/general/test/controllers/DateTimePickerControllerSpec.js b/platform/commonUI/general/test/controllers/DateTimePickerControllerSpec.js index 25f6b7b7a7..0f7b4069ad 100644 --- a/platform/commonUI/general/test/controllers/DateTimePickerControllerSpec.js +++ b/platform/commonUI/general/test/controllers/DateTimePickerControllerSpec.js @@ -48,7 +48,7 @@ define( beforeEach(function () { mockScope = jasmine.createSpyObj( "$scope", - [ "$apply", "$watch", "$watchCollection" ] + ["$apply", "$watch", "$watchCollection"] ); mockScope.ngModel = {}; mockScope.field = "testField"; diff --git a/platform/commonUI/general/test/controllers/GetterSetterControllerSpec.js b/platform/commonUI/general/test/controllers/GetterSetterControllerSpec.js index eed62b58e3..a9b1ff7440 100644 --- a/platform/commonUI/general/test/controllers/GetterSetterControllerSpec.js +++ b/platform/commonUI/general/test/controllers/GetterSetterControllerSpec.js @@ -80,4 +80,4 @@ define( }); } -); \ No newline at end of file +); diff --git a/platform/commonUI/general/test/controllers/ObjectInspectorControllerSpec.js b/platform/commonUI/general/test/controllers/ObjectInspectorControllerSpec.js index 77562aca7e..197a5f3745 100644 --- a/platform/commonUI/general/test/controllers/ObjectInspectorControllerSpec.js +++ b/platform/commonUI/general/test/controllers/ObjectInspectorControllerSpec.js @@ -39,35 +39,35 @@ define( beforeEach(function () { mockScope = jasmine.createSpyObj( "$scope", - [ "$watch" ] + ["$watch"] ); mockScope.ngModel = {}; mockScope.ngModel.selectedObject = 'mock selected object'; - + mockObjectService = jasmine.createSpyObj( "objectService", - [ "getObjects" ] + ["getObjects"] ); mockPromise = jasmine.createSpyObj( "promise", - [ "then" ] + ["then"] ); mockObjectService.getObjects.andReturn(mockPromise); - + mockDomainObject = jasmine.createSpyObj( "selectedObject", - [ "hasCapability", "getCapability", "useCapability", "getModel" ] + ["hasCapability", "getCapability", "useCapability", "getModel"] ); mockDomainObject.getModel.andReturn({location: 'somewhere'}); mockDomainObject.hasCapability.andReturn(true); - + mockContextCapability = jasmine.createSpyObj( "context capability", - [ "getParent" ] + ["getParent"] ); mockLocationCapability = jasmine.createSpyObj( "location capability", - [ "isLink" ] + ["isLink"] ); mockDomainObject.getCapability.andCallFake(function (param) { if (param === 'location') { @@ -76,9 +76,9 @@ define( return mockContextCapability; } }); - + controller = new ObjectInspectorController(mockScope, mockObjectService); - + // Change the selected object to trigger the watch call mockScope.ngModel.selectedObject = mockDomainObject; }); @@ -94,17 +94,17 @@ define( it("if link, looks for primary parent objects", function () { mockLocationCapability.isLink.andReturn(true); - + mockScope.$watch.mostRecentCall.args[1](); expect(mockDomainObject.getModel).toHaveBeenCalled(); expect(mockObjectService.getObjects).toHaveBeenCalled(); mockPromise.then.mostRecentCall.args[0]({'somewhere': mockDomainObject}); }); - + it("gets metadata", function () { mockScope.$watch.mostRecentCall.args[1](); expect(mockDomainObject.useCapability).toHaveBeenCalledWith('metadata'); }); }); } -); \ No newline at end of file +); diff --git a/platform/commonUI/general/test/controllers/SelectorControllerSpec.js b/platform/commonUI/general/test/controllers/SelectorControllerSpec.js index 9deba559c0..584c7fb8bb 100644 --- a/platform/commonUI/general/test/controllers/SelectorControllerSpec.js +++ b/platform/commonUI/general/test/controllers/SelectorControllerSpec.js @@ -43,7 +43,7 @@ define( function makeMockObject(id) { var mockObject = jasmine.createSpyObj( 'object-' + id, - [ 'getId' ] + ['getId'] ); mockObject.getId.andReturn(id); return mockObject; @@ -60,15 +60,15 @@ define( ); mockDomainObject = jasmine.createSpyObj( 'domainObject', - [ 'getCapability', 'hasCapability' ] + ['getCapability', 'hasCapability'] ); mockType = jasmine.createSpyObj( 'type', - [ 'instanceOf' ] + ['instanceOf'] ); mockDomainObjects = {}; - [ "ROOT", "abc", "def", "xyz" ].forEach(function (id) { + ["ROOT", "abc", "def", "xyz"].forEach(function (id) { mockDomainObjects[id] = makeMockObject(id); }); @@ -98,7 +98,7 @@ define( }); it("watches for changes in controlled property", function () { - var testValue = [ "a", "b", 1, 2 ]; + var testValue = ["a", "b", 1, 2]; // This test is sensitive to ordering of watch calls expect(mockScope.$watchCollection.calls.length).toEqual(1); // Make sure we're watching the correct object @@ -131,7 +131,7 @@ define( }); it("loads objects when the underlying list changes", function () { - var testIds = [ "abc", "def", "xyz" ]; + var testIds = ["abc", "def", "xyz"]; // This test is sensitive to ordering of watch calls expect(mockScope.$watchCollection.calls.length).toEqual(1); // Make sure we're watching the correct object diff --git a/platform/commonUI/general/test/controllers/TimeRangeControllerSpec.js b/platform/commonUI/general/test/controllers/TimeRangeControllerSpec.js index 99a1ad288f..718dd2664f 100644 --- a/platform/commonUI/general/test/controllers/TimeRangeControllerSpec.js +++ b/platform/commonUI/general/test/controllers/TimeRangeControllerSpec.js @@ -56,16 +56,16 @@ define( beforeEach(function () { mockScope = jasmine.createSpyObj( "$scope", - [ "$apply", "$watch", "$watchCollection" ] + ["$apply", "$watch", "$watchCollection"] ); mockFormatService = jasmine.createSpyObj( "formatService", - [ "getFormat" ] + ["getFormat"] ); testDefaultFormat = 'utc'; mockFormat = jasmine.createSpyObj( "format", - [ "validate", "format", "parse" ] + ["validate", "format", "parse"] ); mockFormatService.getFormat.andReturn(mockFormat); diff --git a/platform/commonUI/general/test/controllers/ToggleControllerSpec.js b/platform/commonUI/general/test/controllers/ToggleControllerSpec.js index 3ee52e2702..e4f56237ca 100644 --- a/platform/commonUI/general/test/controllers/ToggleControllerSpec.js +++ b/platform/commonUI/general/test/controllers/ToggleControllerSpec.js @@ -59,4 +59,4 @@ define( }); } -); \ No newline at end of file +); diff --git a/platform/commonUI/general/test/controllers/TreeNodeControllerSpec.js b/platform/commonUI/general/test/controllers/TreeNodeControllerSpec.js index e6954574a3..0a196b10a8 100644 --- a/platform/commonUI/general/test/controllers/TreeNodeControllerSpec.js +++ b/platform/commonUI/general/test/controllers/TreeNodeControllerSpec.js @@ -32,7 +32,9 @@ define( function TestObject(id, context) { return { - getId: function () { return id; }, + getId: function () { + return id; + }, getCapability: function (key) { return key === 'context' ? context : undefined; } @@ -44,7 +46,7 @@ define( mockTimeout = jasmine.createSpy("$timeout"); mockDomainObject = jasmine.createSpyObj( "domainObject", - [ "getId", "getCapability", "getModel", "useCapability" ] + ["getId", "getCapability", "getModel", "useCapability"] ); controller = new TreeNodeController(mockScope, mockTimeout); @@ -71,7 +73,7 @@ define( // This is needed to highlight the current selection var mockContext = jasmine.createSpyObj( "context", - [ "getParent", "getPath", "getRoot" ] + ["getParent", "getPath", "getRoot"] ), obj = new TestObject("test-object", mockContext); @@ -92,11 +94,11 @@ define( it("expands a node if it is on the navigation path", function () { var mockParentContext = jasmine.createSpyObj( "parentContext", - [ "getParent", "getPath", "getRoot" ] + ["getParent", "getPath", "getRoot"] ), mockChildContext = jasmine.createSpyObj( "childContext", - [ "getParent", "getPath", "getRoot" ] + ["getParent", "getPath", "getRoot"] ), parent = new TestObject("parent", mockParentContext), child = new TestObject("child", mockChildContext); @@ -128,11 +130,11 @@ define( it("does not expand a node if it is not on the navigation path", function () { var mockParentContext = jasmine.createSpyObj( "parentContext", - [ "getParent", "getPath", "getRoot" ] + ["getParent", "getPath", "getRoot"] ), mockChildContext = jasmine.createSpyObj( "childContext", - [ "getParent", "getPath", "getRoot" ] + ["getParent", "getPath", "getRoot"] ), parent = new TestObject("parent", mockParentContext), child = new TestObject("child", mockChildContext); @@ -161,11 +163,11 @@ define( it("does not expand a node if no context is available", function () { var mockParentContext = jasmine.createSpyObj( "parentContext", - [ "getParent", "getPath", "getRoot" ] + ["getParent", "getPath", "getRoot"] ), mockChildContext = jasmine.createSpyObj( "childContext", - [ "getParent", "getPath", "getRoot" ] + ["getParent", "getPath", "getRoot"] ), parent = new TestObject("parent", mockParentContext), child = new TestObject("child", undefined); diff --git a/platform/commonUI/general/test/controllers/ViewSwitcherControllerSpec.js b/platform/commonUI/general/test/controllers/ViewSwitcherControllerSpec.js index a1c87b07a5..fb381e680d 100644 --- a/platform/commonUI/general/test/controllers/ViewSwitcherControllerSpec.js +++ b/platform/commonUI/general/test/controllers/ViewSwitcherControllerSpec.js @@ -33,9 +33,11 @@ define( controller; beforeEach(function () { - mockScope = jasmine.createSpyObj("$scope", [ "$watch" ]); + mockScope = jasmine.createSpyObj("$scope", ["$watch"]); mockTimeout = jasmine.createSpy("$timeout"); - mockTimeout.andCallFake(function (cb) { cb(); }); + mockTimeout.andCallFake(function (cb) { + cb(); + }); mockScope.ngModel = {}; controller = new ViewSwitcherController(mockScope, mockTimeout); }); @@ -108,4 +110,4 @@ define( }); } -); \ No newline at end of file +); diff --git a/platform/commonUI/general/test/directives/MCTClickElsewhereSpec.js b/platform/commonUI/general/test/directives/MCTClickElsewhereSpec.js index 2feb490a9b..2e782a1a01 100644 --- a/platform/commonUI/general/test/directives/MCTClickElsewhereSpec.js +++ b/platform/commonUI/general/test/directives/MCTClickElsewhereSpec.js @@ -24,7 +24,7 @@ define( ["../../src/directives/MCTClickElsewhere"], function (MCTClickElsewhere) { - var JQLITE_METHODS = [ "on", "off", "find", "parent" ]; + var JQLITE_METHODS = ["on", "off", "find", "parent"]; describe("The mct-click-elsewhere directive", function () { var mockDocument, @@ -48,7 +48,7 @@ define( mockDocument = jasmine.createSpyObj("$document", JQLITE_METHODS); mockScope = - jasmine.createSpyObj("$scope", [ "$eval", "$apply", "$on" ]); + jasmine.createSpyObj("$scope", ["$eval", "$apply", "$on"]); mockElement = jasmine.createSpyObj("element", JQLITE_METHODS); mockBody = diff --git a/platform/commonUI/general/test/directives/MCTContainerSpec.js b/platform/commonUI/general/test/directives/MCTContainerSpec.js index 1247a84e49..745131c30c 100644 --- a/platform/commonUI/general/test/directives/MCTContainerSpec.js +++ b/platform/commonUI/general/test/directives/MCTContainerSpec.js @@ -35,7 +35,7 @@ define( bundle: { path: "x", resources: "y" }, template: "bar", key: "xyz", - attributes: [ "someAttr", "someOtherAttr" ] + attributes: ["someAttr", "someOtherAttr"] } ], mctContainer; @@ -85,4 +85,4 @@ define( }); } -); \ No newline at end of file +); diff --git a/platform/commonUI/general/test/directives/MCTDragSpec.js b/platform/commonUI/general/test/directives/MCTDragSpec.js index e5236c79c5..3160660906 100644 --- a/platform/commonUI/general/test/directives/MCTDragSpec.js +++ b/platform/commonUI/general/test/directives/MCTDragSpec.js @@ -24,7 +24,7 @@ define( ["../../src/directives/MCTDrag"], function (MCTDrag) { - var JQLITE_METHODS = [ "on", "off", "find" ]; + var JQLITE_METHODS = ["on", "off", "find"]; describe("The mct-drag directive", function () { var mockDocument, @@ -46,7 +46,7 @@ define( mockDocument = jasmine.createSpyObj("$document", JQLITE_METHODS); mockScope = - jasmine.createSpyObj("$scope", [ "$eval", "$apply" ]); + jasmine.createSpyObj("$scope", ["$eval", "$apply"]); mockElement = jasmine.createSpyObj("element", JQLITE_METHODS); mockBody = diff --git a/platform/commonUI/general/test/directives/MCTPopupSpec.js b/platform/commonUI/general/test/directives/MCTPopupSpec.js index bfe6b469cb..372dd4b042 100644 --- a/platform/commonUI/general/test/directives/MCTPopupSpec.js +++ b/platform/commonUI/general/test/directives/MCTPopupSpec.js @@ -24,7 +24,7 @@ define( ["../../src/directives/MCTPopup"], function (MCTPopup) { - var JQLITE_METHODS = [ "on", "off", "find", "parent", "css", "append" ]; + var JQLITE_METHODS = ["on", "off", "find", "parent", "css", "append"]; describe("The mct-popup directive", function () { var mockCompile, @@ -48,7 +48,7 @@ define( mockPopup = jasmine.createSpyObj("popup", ["dismiss"]); mockScope = - jasmine.createSpyObj("$scope", [ "$eval", "$apply", "$on" ]); + jasmine.createSpyObj("$scope", ["$eval", "$apply", "$on"]); mockElement = jasmine.createSpyObj("element", JQLITE_METHODS); mockBody = @@ -98,7 +98,7 @@ define( it("displays as a popup", function () { expect(mockPopupService.display).toHaveBeenCalledWith( mockNewElement, - [ testRect.left, testRect.top ] + [testRect.left, testRect.top] ); }); diff --git a/platform/commonUI/general/test/directives/MCTScrollSpec.js b/platform/commonUI/general/test/directives/MCTScrollSpec.js index e1b22965c7..4f59681696 100644 --- a/platform/commonUI/general/test/directives/MCTScrollSpec.js +++ b/platform/commonUI/general/test/directives/MCTScrollSpec.js @@ -112,4 +112,4 @@ define( }); } -); \ No newline at end of file +); diff --git a/platform/commonUI/general/test/directives/MCTSplitPaneSpec.js b/platform/commonUI/general/test/directives/MCTSplitPaneSpec.js index 75495a195b..6a4fc18634 100644 --- a/platform/commonUI/general/test/directives/MCTSplitPaneSpec.js +++ b/platform/commonUI/general/test/directives/MCTSplitPaneSpec.js @@ -203,4 +203,4 @@ define( }); } -); \ No newline at end of file +); diff --git a/platform/commonUI/general/test/directives/MCTSplitterSpec.js b/platform/commonUI/general/test/directives/MCTSplitterSpec.js index c2465b957a..a6f4cd92ab 100644 --- a/platform/commonUI/general/test/directives/MCTSplitterSpec.js +++ b/platform/commonUI/general/test/directives/MCTSplitterSpec.js @@ -48,16 +48,16 @@ define( beforeEach(function () { mockScope = jasmine.createSpyObj( '$scope', - [ '$on', '$watch' ] + ['$on', '$watch'] ); mockElement = jasmine.createSpyObj( 'element', - [ 'addClass' ] + ['addClass'] ); testAttrs = {}; mockSplitPane = jasmine.createSpyObj( 'mctSplitPane', - [ 'position', 'toggleClass', 'anchor' ] + ['position', 'toggleClass', 'anchor'] ); mctSplitter.link( @@ -92,7 +92,7 @@ define( }); it("repositions during drag", function () { - mockScope.splitter.move([ 10, 0 ]); + mockScope.splitter.move([10, 0]); expect(mockSplitPane.position) .toHaveBeenCalledWith(testPosition + 10); }); diff --git a/platform/commonUI/general/test/directives/MCTTreeSpec.js b/platform/commonUI/general/test/directives/MCTTreeSpec.js index 80854685e6..76f1fb9b02 100644 --- a/platform/commonUI/general/test/directives/MCTTreeSpec.js +++ b/platform/commonUI/general/test/directives/MCTTreeSpec.js @@ -32,7 +32,7 @@ define([ beforeEach(function () { mockGestureService = jasmine.createSpyObj( 'gestureService', - [ 'attachGestures' ] + ['attachGestures'] ); mockParse = jasmine.createSpy('$parse'); mockExpr = jasmine.createSpy('expr'); diff --git a/platform/commonUI/general/test/services/PopupServiceSpec.js b/platform/commonUI/general/test/services/PopupServiceSpec.js index e4819ced64..79c920a164 100644 --- a/platform/commonUI/general/test/services/PopupServiceSpec.js +++ b/platform/commonUI/general/test/services/PopupServiceSpec.js @@ -33,9 +33,9 @@ define( popupService; beforeEach(function () { - mockDocument = jasmine.createSpyObj('$document', [ 'find' ]); + mockDocument = jasmine.createSpyObj('$document', ['find']); testWindow = { innerWidth: 1000, innerHeight: 800 }; - mockBody = jasmine.createSpyObj('body', [ 'append' ]); + mockBody = jasmine.createSpyObj('body', ['append']); mockElement = jasmine.createSpyObj('element', [ 'css', 'remove' @@ -49,13 +49,13 @@ define( }); it("adds elements to the body of the document", function () { - popupService.display(mockElement, [ 0, 0 ]); + popupService.display(mockElement, [0, 0]); expect(mockBody.append).toHaveBeenCalledWith(mockElement); }); describe("when positioned in appropriate quadrants", function () { it("orients elements relative to the top-left", function () { - popupService.display(mockElement, [ 25, 50 ]); + popupService.display(mockElement, [25, 50]); expect(mockElement.css).toHaveBeenCalledWith({ position: 'absolute', left: '25px', @@ -64,7 +64,7 @@ define( }); it("orients elements relative to the top-right", function () { - popupService.display(mockElement, [ 800, 50 ]); + popupService.display(mockElement, [800, 50]); expect(mockElement.css).toHaveBeenCalledWith({ position: 'absolute', right: '200px', @@ -73,7 +73,7 @@ define( }); it("orients elements relative to the bottom-right", function () { - popupService.display(mockElement, [ 800, 650 ]); + popupService.display(mockElement, [800, 650]); expect(mockElement.css).toHaveBeenCalledWith({ position: 'absolute', right: '200px', @@ -82,7 +82,7 @@ define( }); it("orients elements relative to the bottom-left", function () { - popupService.display(mockElement, [ 120, 650 ]); + popupService.display(mockElement, [120, 650]); expect(mockElement.css).toHaveBeenCalledWith({ position: 'absolute', left: '120px', diff --git a/platform/commonUI/general/test/services/PopupSpec.js b/platform/commonUI/general/test/services/PopupSpec.js index ca36bb8a4a..3f3e4c7e4e 100644 --- a/platform/commonUI/general/test/services/PopupSpec.js +++ b/platform/commonUI/general/test/services/PopupSpec.js @@ -32,7 +32,7 @@ define( beforeEach(function () { mockElement = - jasmine.createSpyObj('element', [ 'css', 'remove' ]); + jasmine.createSpyObj('element', ['css', 'remove']); testStyles = { left: '12px', top: '14px' }; popup = new Popup(mockElement, testStyles); }); diff --git a/platform/commonUI/general/test/services/UrlServiceSpec.js b/platform/commonUI/general/test/services/UrlServiceSpec.js index 38e9de8886..e956fb657d 100644 --- a/platform/commonUI/general/test/services/UrlServiceSpec.js +++ b/platform/commonUI/general/test/services/UrlServiceSpec.js @@ -36,19 +36,19 @@ define( testViews; beforeEach(function () { - // Creates a mockLocation, used to + // Creates a mockLocation, used to // do the view search mockLocation = jasmine.createSpyObj( "$location", - [ "path", "search" ] + ["path", "search"] ); - - // The mockDomainObject is initialized as a + + // The mockDomainObject is initialized as a // spy object to ultimately be passed into the // urlService urlFor function mockDomainObject = jasmine.createSpyObj( "domainObject", - [ "getId", "getCapability", "getModel", "useCapability" ] + ["getId", "getCapability", "getModel", "useCapability"] ); mockContext = jasmine.createSpyObj('context', ['getPath']); testViews = [ @@ -57,39 +57,39 @@ define( { key: 'xyz' } ]; mockMode = "browse"; - + // The mockContext is set a path // for the mockDomainObject mockContext.getPath.andReturn( [mockDomainObject] ); - + // view capability used with the testviews made mockDomainObject.useCapability.andCallFake(function (c) { return (c === 'view') && testViews; }); - + // context capability used with the mockContext created // so the variables including context in the urlFor are // initialized and reached mockDomainObject.getCapability.andCallFake(function (c) { return c === 'context' && mockContext; }); - + // Uses the mockLocation to get the current // "mock" website's view mockLocation.search.andReturn({ view: 'def' }); - + urlService = new UrlService(mockLocation); }); - + it("get url for a location using domainObject and mode", function () { urlService.urlForLocation(mockMode, mockDomainObject); }); - + it("get url for a new tab using domainObject and mode", function () { urlService.urlForNewTab(mockMode, mockDomainObject); }); }); } -); \ No newline at end of file +); diff --git a/platform/commonUI/general/test/ui/TreeViewSpec.js b/platform/commonUI/general/test/ui/TreeViewSpec.js index 821d5489a9..1e492d4bfd 100644 --- a/platform/commonUI/general/test/ui/TreeViewSpec.js +++ b/platform/commonUI/general/test/ui/TreeViewSpec.js @@ -63,7 +63,7 @@ define([ beforeEach(function () { mockGestureService = jasmine.createSpyObj( 'gestureService', - [ 'attachGestures' ] + ['attachGestures'] ); mockGestureHandle = jasmine.createSpyObj('gestures', ['destroy']); @@ -100,15 +100,15 @@ define([ function makeGenericCapabilities() { var mockContext = - jasmine.createSpyObj('context', [ 'getPath' ]), + jasmine.createSpyObj('context', ['getPath']), mockType = - jasmine.createSpyObj('type', [ 'getGlyph' ]), + jasmine.createSpyObj('type', ['getGlyph']), mockLocation = - jasmine.createSpyObj('location', [ 'isLink' ]), + jasmine.createSpyObj('location', ['isLink']), mockMutation = - jasmine.createSpyObj('mutation', [ 'listen' ]), + jasmine.createSpyObj('mutation', ['listen']), mockStatus = - jasmine.createSpyObj('status', [ 'listen', 'list' ]); + jasmine.createSpyObj('status', ['listen', 'list']); mockStatus.list.andReturn([]); @@ -231,7 +231,7 @@ define([ calledBackInner = false; newCapabilities.composition = - jasmine.createSpyObj('composition', [ 'invoke' ]); + jasmine.createSpyObj('composition', ['invoke']); newCapabilities.composition.invoke .andReturn(Promise.resolve([mockGrandchild])); mockComposition.push(mockNewChild); @@ -274,7 +274,7 @@ define([ beforeEach(function () { var mockStatus = mockComposition[1].getCapability('status'); - testStatuses = [ 'foo' ]; + testStatuses = ['foo']; mockStatus.list.andReturn(testStatuses); mockStatus.listen.mostRecentCall.args[0](testStatuses); diff --git a/platform/commonUI/inspect/src/InfoConstants.js b/platform/commonUI/inspect/src/InfoConstants.js index c50a735998..93fa863ed6 100644 --- a/platform/commonUI/inspect/src/InfoConstants.js +++ b/platform/commonUI/inspect/src/InfoConstants.js @@ -40,7 +40,7 @@ define({ offsetX: 0, offsetY: -26 }, - BUBBLE_MOBILE_POSITION: [ 0, -25 ], + BUBBLE_MOBILE_POSITION: [0, -25], // Max width and margins allowed for bubbles; // defined in /platform/commonUI/general/res/sass/_constants.scss BUBBLE_MARGIN_LR: 10, diff --git a/platform/commonUI/inspect/src/gestures/InfoButtonGesture.js b/platform/commonUI/inspect/src/gestures/InfoButtonGesture.js index c8804fa10d..5dbee8177d 100644 --- a/platform/commonUI/inspect/src/gestures/InfoButtonGesture.js +++ b/platform/commonUI/inspect/src/gestures/InfoButtonGesture.js @@ -45,7 +45,7 @@ define( // Record touch position, so bubble can be shown at latest // touch position, also offset by 22px to left (accounts for // a finger-sized touch on the info button) - touchPosition = [ event.clientX - 22, event.clientY ]; + touchPosition = [event.clientX - 22, event.clientY]; } // Hides the bubble and detaches the diff --git a/platform/commonUI/inspect/src/gestures/InfoGesture.js b/platform/commonUI/inspect/src/gestures/InfoGesture.js index 7cc8826706..de5324d490 100644 --- a/platform/commonUI/inspect/src/gestures/InfoGesture.js +++ b/platform/commonUI/inspect/src/gestures/InfoGesture.js @@ -71,7 +71,7 @@ define( InfoGesture.prototype.trackPosition = function (event) { // Record mouse position, so bubble can be shown at latest // mouse position (not just where the mouse entered) - this.mousePosition = [ event.clientX, event.clientY ]; + this.mousePosition = [event.clientX, event.clientY]; }; InfoGesture.prototype.hideBubble = function () { diff --git a/platform/commonUI/inspect/test/gestures/InfoButtonGestureSpec.js b/platform/commonUI/inspect/test/gestures/InfoButtonGestureSpec.js index e9737223a7..781bfd3769 100644 --- a/platform/commonUI/inspect/test/gestures/InfoButtonGestureSpec.js +++ b/platform/commonUI/inspect/test/gestures/InfoButtonGestureSpec.js @@ -44,28 +44,28 @@ define( beforeEach(function () { mockTimeout = jasmine.createSpy('$timeout'); mockDocument = jasmine.createSpyObj('$document', ['find']); - mockBody = jasmine.createSpyObj('body', [ 'on', 'off', 'scope', 'css', 'unbind' ]); + mockBody = jasmine.createSpyObj('body', ['on', 'off', 'scope', 'css', 'unbind']); mockDocument.find.andReturn(mockBody); mockAgentService = jasmine.createSpyObj('agentService', ['isMobile', 'isPhone']); mockInfoService = jasmine.createSpyObj( 'infoService', - [ 'display' ] + ['display'] ); mockElement = jasmine.createSpyObj( 'element', - [ 'on', 'off', 'scope', 'css' ] + ['on', 'off', 'scope', 'css'] ); mockDomainObject = jasmine.createSpyObj( 'domainObject', - [ 'getId', 'getCapability', 'useCapability', 'getModel' ] + ['getId', 'getCapability', 'useCapability', 'getModel'] ); mockEvent = jasmine.createSpyObj("event", ["preventDefault", "stopPropagation"]); mockEvent.pageX = 0; mockEvent.pageY = 0; - mockScope = jasmine.createSpyObj('$scope', [ '$on' ]); + mockScope = jasmine.createSpyObj('$scope', ['$on']); mockOff = jasmine.createSpy('$off'); - testMetadata = [ { name: "Test name", value: "Test value" } ]; + testMetadata = [{ name: "Test name", value: "Test value" }]; mockHide = jasmine.createSpy('hide'); mockDomainObject.getModel.andReturn({ name: "Test Object" }); diff --git a/platform/commonUI/inspect/test/gestures/InfoGestureSpec.js b/platform/commonUI/inspect/test/gestures/InfoGestureSpec.js index f1ed589fe0..e135a24adb 100644 --- a/platform/commonUI/inspect/test/gestures/InfoGestureSpec.js +++ b/platform/commonUI/inspect/test/gestures/InfoGestureSpec.js @@ -52,19 +52,19 @@ define( mockAgentService = jasmine.createSpyObj('agentService', ['isMobile']); mockInfoService = jasmine.createSpyObj( 'infoService', - [ 'display' ] + ['display'] ); mockElement = jasmine.createSpyObj( 'element', - [ 'on', 'off', 'scope', 'css' ] + ['on', 'off', 'scope', 'css'] ); mockDomainObject = jasmine.createSpyObj( 'domainObject', - [ 'getId', 'getCapability', 'useCapability', 'getModel' ] + ['getId', 'getCapability', 'useCapability', 'getModel'] ); - mockScope = jasmine.createSpyObj('$scope', [ '$on' ]); + mockScope = jasmine.createSpyObj('$scope', ['$on']); mockOff = jasmine.createSpy('$off'); - testMetadata = [ { name: "Test name", value: "Test value" } ]; + testMetadata = [{ name: "Test name", value: "Test value" }]; mockPromise = jasmine.createSpyObj('promise', ['then']); mockHide = jasmine.createSpy('hide'); @@ -101,7 +101,7 @@ define( jasmine.any(String), "Test Object", testMetadata, - [ 1977, 42 ] + [1977, 42] ); }); @@ -130,7 +130,7 @@ define( jasmine.any(String), "Test Object", testMetadata, - [ 1984, 11 ] + [1984, 11] ); }); diff --git a/platform/commonUI/inspect/test/services/InfoServiceSpec.js b/platform/commonUI/inspect/test/services/InfoServiceSpec.js index 4be6201257..de81f943e0 100644 --- a/platform/commonUI/inspect/test/services/InfoServiceSpec.js +++ b/platform/commonUI/inspect/test/services/InfoServiceSpec.js @@ -79,7 +79,7 @@ define( service.display('', '', {}, [123, 456]); expect(mockPopupService.display).toHaveBeenCalledWith( mockElements[0], - [ 123, 456 ], + [123, 456], jasmine.any(Object) ); }); @@ -102,16 +102,16 @@ define( service.display('', '', {}, [123, 456]); expect(mockPopupService.display).toHaveBeenCalledWith( mockElements[0], - [ 0, -25 ], + [0, -25], jasmine.any(Object) ); }); - [ false, true ].forEach(function (goesLeft) { - [ false, true].forEach(function (goesUp) { + [false, true].forEach(function (goesLeft) { + [false, true].forEach(function (goesUp) { var vertical = goesUp ? "up" : "down", horizontal = goesLeft ? "left" : "right", - location = [ vertical, horizontal].join('-'); + location = [vertical, horizontal].join('-'); describe("when bubble goes " + location, function () { var expectedLocation = [ goesUp ? "bottom" : "top", @@ -123,7 +123,7 @@ define( mockPopup.goesDown.andReturn(!goesUp); mockPopup.goesLeft.andReturn(goesLeft); mockPopup.goesRight.andReturn(!goesLeft); - service.display('', '', {}, [ 10, 10 ]); + service.display('', '', {}, [10, 10]); }); it("positions the arrow in the " + expectedLocation, function () { diff --git a/platform/commonUI/mobile/src/DeviceClassifier.js b/platform/commonUI/mobile/src/DeviceClassifier.js index ce34425ab8..6801c00d02 100644 --- a/platform/commonUI/mobile/src/DeviceClassifier.js +++ b/platform/commonUI/mobile/src/DeviceClassifier.js @@ -54,4 +54,4 @@ define( return MobileClassifier; } -); \ No newline at end of file +); diff --git a/platform/commonUI/mobile/src/DeviceMatchers.js b/platform/commonUI/mobile/src/DeviceMatchers.js index bfd1e80ad0..5b6452641c 100644 --- a/platform/commonUI/mobile/src/DeviceMatchers.js +++ b/platform/commonUI/mobile/src/DeviceMatchers.js @@ -55,4 +55,4 @@ define(function () { return agentService.isTouch(); } }; -}); \ No newline at end of file +}); diff --git a/platform/commonUI/mobile/test/DeviceClassifierSpec.js b/platform/commonUI/mobile/test/DeviceClassifierSpec.js index 4513b0d926..ab6ca51433 100644 --- a/platform/commonUI/mobile/test/DeviceClassifierSpec.js +++ b/platform/commonUI/mobile/test/DeviceClassifierSpec.js @@ -34,11 +34,11 @@ define( 'isTouch' ], TEST_PERMUTATIONS = [ - [ 'isMobile', 'isPhone', 'isTouch', 'isPortrait' ], - [ 'isMobile', 'isPhone', 'isTouch', 'isLandscape' ], - [ 'isMobile', 'isTablet', 'isTouch', 'isPortrait' ], - [ 'isMobile', 'isTablet', 'isTouch', 'isLandscape' ], - [ 'isTouch' ], + ['isMobile', 'isPhone', 'isTouch', 'isPortrait'], + ['isMobile', 'isPhone', 'isTouch', 'isLandscape'], + ['isMobile', 'isTablet', 'isTouch', 'isPortrait'], + ['isMobile', 'isTablet', 'isTouch', 'isLandscape'], + ['isTouch'], [] ]; @@ -54,11 +54,11 @@ define( ); mockDocument = jasmine.createSpyObj( '$document', - [ 'find' ] + ['find'] ); mockBody = jasmine.createSpyObj( 'body', - [ 'addClass' ] + ['addClass'] ); mockDocument.find.andCallFake(function (sel) { return sel === 'body' && mockBody; diff --git a/platform/commonUI/mobile/test/DeviceMatchersSpec.js b/platform/commonUI/mobile/test/DeviceMatchersSpec.js index 387c1c8f9b..cbdce4bf91 100644 --- a/platform/commonUI/mobile/test/DeviceMatchersSpec.js +++ b/platform/commonUI/mobile/test/DeviceMatchersSpec.js @@ -76,4 +76,4 @@ define( }); } -); \ No newline at end of file +); diff --git a/platform/commonUI/mobile/test/MCTDeviceSpec.js b/platform/commonUI/mobile/test/MCTDeviceSpec.js index b38d91138a..aef828cf54 100644 --- a/platform/commonUI/mobile/test/MCTDeviceSpec.js +++ b/platform/commonUI/mobile/test/MCTDeviceSpec.js @@ -24,7 +24,7 @@ define( ['../src/MCTDevice'], function (MCTDevice) { - var JQLITE_METHODS = [ 'replaceWith' ]; + var JQLITE_METHODS = ['replaceWith']; describe("The mct-device directive", function () { var mockAgentService, @@ -41,7 +41,7 @@ define( beforeEach(function () { mockAgentService = jasmine.createSpyObj( "agentService", - [ "isMobile", "isPhone", "isTablet", "isPortrait", "isLandscape" ] + ["isMobile", "isPhone", "isTablet", "isPortrait", "isLandscape"] ); mockTransclude = jasmine.createSpy("$transclude"); mockElement = jasmine.createSpyObj(name, JQLITE_METHODS); diff --git a/platform/commonUI/notification/src/NotificationIndicatorController.js b/platform/commonUI/notification/src/NotificationIndicatorController.js index b6e5559196..8a1bdbca2a 100644 --- a/platform/commonUI/notification/src/NotificationIndicatorController.js +++ b/platform/commonUI/notification/src/NotificationIndicatorController.js @@ -42,7 +42,7 @@ define( /** * Launch a dialog showing a list of current notifications. */ - $scope.showNotificationsList = function(){ + $scope.showNotificationsList = function () { dialogService.getDialogResponse('overlay-message-list', { dialog: { title: "Messages", @@ -50,11 +50,11 @@ define( // from the notifications messages: notificationService.notifications }, - cancel: function(){ + cancel: function () { dialogService.dismiss(); } }); - + }; } return NotificationIndicatorController; diff --git a/platform/commonUI/notification/src/NotificationService.js b/platform/commonUI/notification/src/NotificationService.js index 868ccf6f08..8643139f39 100644 --- a/platform/commonUI/notification/src/NotificationService.js +++ b/platform/commonUI/notification/src/NotificationService.js @@ -118,7 +118,7 @@ define( function NotificationService($timeout, topic, DEFAULT_AUTO_DISMISS, MINIMIZE_TIMEOUT) { this.notifications = []; this.$timeout = $timeout; - this.highest ={ severity: "info" }; + this.highest = { severity: "info" }; this.DEFAULT_AUTO_DISMISS = DEFAULT_AUTO_DISMISS; this.MINIMIZE_TIMEOUT = MINIMIZE_TIMEOUT; this.topic = topic; @@ -143,7 +143,7 @@ define( //Check this is a known notification var index = service.notifications.indexOf(notification); - if (service.active.timeout){ + if (service.active.timeout) { /* Method can be called manually (clicking dismiss) or automatically from an auto-timeout. this.active.timeout @@ -157,10 +157,10 @@ define( } if (index >= 0) { - notification.model.minimized=true; + notification.model.minimized = true; //Add a brief timeout before showing the next notification // in order to allow the minimize animation to run through. - service.$timeout(function() { + service.$timeout(function () { service.setActiveNotification(service.selectNextNotification()); }, service.MINIMIZE_TIMEOUT); } @@ -180,7 +180,7 @@ define( //Check this is a known notification var index = service.notifications.indexOf(notification); - if (service.active.timeout){ + if (service.active.timeout) { /* Method can be called manually (clicking dismiss) or * automatically from an auto-timeout. this.active.timeout * acts as a semaphore to prevent race conditions. Cancel any @@ -219,7 +219,7 @@ define( * Returns the notification that is currently visible in the banner area * @returns {Notification} */ - NotificationService.prototype.getActiveNotification = function (){ + NotificationService.prototype.getActiveNotification = function () { return this.active.notification; }; @@ -281,8 +281,8 @@ define( "alert": 2, "error": 3 }; - this.highest.severity = this.notifications.reduce(function(previous, notification){ - if (severity[notification.model.severity] > severity[previous]){ + this.highest.severity = this.notifications.reduce(function (previous, notification) { + if (severity[notification.model.severity] > severity[previous]) { return notification.model.severity; } else { return previous; @@ -308,23 +308,23 @@ define( notification = { model: notificationModel, - minimize: function() { + minimize: function () { self.minimize(self, notification); }, - dismiss: function(){ + dismiss: function () { self.dismiss(self, notification); topic.notify(); }, - dismissOrMinimize: function(){ + dismissOrMinimize: function () { self.dismissOrMinimize(notification); }, - onDismiss: function(callback) { + onDismiss: function (callback) { topic.listen(callback); } }; notificationModel.severity = notificationModel.severity || "info"; - if (notificationModel.autoDismiss === true){ + if (notificationModel.autoDismiss === true) { notificationModel.autoDismiss = this.DEFAULT_AUTO_DISMISS; } @@ -337,7 +337,7 @@ define( notificationModel.options = notificationModel.options || []; notificationModel.options.unshift({ label: "Dismiss", - callback: function() { + callback: function () { notification.dismiss(); } }); @@ -350,10 +350,10 @@ define( /* Check if there is already an active (ie. visible) notification */ - if (!this.active.notification){ + if (!this.active.notification) { this.setActiveNotification(notification); - } else if (!this.active.timeout){ + } else if (!this.active.timeout) { /* If there is already an active notification, time it out. If it's already got a timeout in progress (either because it has had @@ -397,7 +397,7 @@ define( } else { delete this.active.timeout; } - }; + }; /** * Used internally by the NotificationService @@ -406,17 +406,17 @@ define( */ NotificationService.prototype.selectNextNotification = function () { var notification, - i=0; + i = 0; /* Loop through the notifications queue and find the first one that has not already been minimized (manually or otherwise). */ - for (; i< this.notifications.length; i++) { + for (; i < this.notifications.length; i++) { notification = this.notifications[i]; if (!notification.model.minimized && - notification!== this.active.notification) { + notification !== this.active.notification) { return notification; } @@ -425,4 +425,4 @@ define( return NotificationService; } -); \ No newline at end of file +); diff --git a/platform/commonUI/notification/test/NotificationIndicatorControllerSpec.js b/platform/commonUI/notification/test/NotificationIndicatorControllerSpec.js index a6acd28417..222c2fc87b 100644 --- a/platform/commonUI/notification/test/NotificationIndicatorControllerSpec.js +++ b/platform/commonUI/notification/test/NotificationIndicatorControllerSpec.js @@ -30,7 +30,7 @@ define( mockDialogService, controller; - beforeEach(function(){ + beforeEach(function () { mockNotificationService = jasmine.createSpy("notificationService"); mockScope = jasmine.createSpy("$scope"); mockDialogService = jasmine.createSpyObj( @@ -43,12 +43,12 @@ define( controller = new NotificationIndicatorController(mockScope, mockNotificationService, mockDialogService); }); - it("exposes the highest notification severity to the template", function() { + 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() { + it("invokes the dialog service to show list of messages", function () { expect(mockScope.showNotificationsList).toBeDefined(); mockScope.showNotificationsList(); expect(mockDialogService.getDialogResponse).toHaveBeenCalled(); @@ -60,7 +60,7 @@ define( expect(mockDialogService.dismiss).toHaveBeenCalled(); }); - it("provides a means of dismissing the message list", function() { + it("provides a means of dismissing the message list", function () { expect(mockScope.showNotificationsList).toBeDefined(); mockScope.showNotificationsList(); expect(mockDialogService.getDialogResponse).toHaveBeenCalled(); diff --git a/platform/commonUI/notification/test/NotificationServiceSpec.js b/platform/commonUI/notification/test/NotificationServiceSpec.js index 7590589f0b..ebc02445c8 100644 --- a/platform/commonUI/notification/test/NotificationServiceSpec.js +++ b/platform/commonUI/notification/test/NotificationServiceSpec.js @@ -34,7 +34,7 @@ define( mockTopicObject, errorModel; - beforeEach(function(){ + beforeEach(function () { mockTimeout = jasmine.createSpy("$timeout"); mockTopicFunction = jasmine.createSpy("topic"); mockTopicObject = jasmine.createSpyObj("topicObject", ["listen", "notify"]); @@ -54,14 +54,14 @@ define( }); it("gets a new success notification, making" + - " the notification active", function() { + " the notification active", function () { var activeNotification; notificationService.notify(successModel); activeNotification = notificationService.getActiveNotification(); expect(activeNotification.model).toBe(successModel); }); - it("notifies listeners on dismissal of notification", function() { + it("notifies listeners on dismissal of notification", function () { var notification, dismissListener = jasmine.createSpy("ondismiss"); notification = notificationService.notify(successModel); @@ -75,7 +75,7 @@ define( }); it("allows specification of an info notification given just a" + - " title, making the notification active", function() { + " title, making the notification active", function () { var activeNotification, notificationTitle = "Test info notification"; notificationService.info(notificationTitle); @@ -85,7 +85,7 @@ define( }); it("gets a new success notification with" + - " numerical auto-dismiss specified. ", function() { + " numerical auto-dismiss specified. ", function () { var activeNotification; successModel.autoDismiss = 1000; notificationService.notify(successModel); @@ -99,7 +99,7 @@ define( }); it("gets a new notification with" + - " boolean auto-dismiss specified. ", function() { + " boolean auto-dismiss specified. ", function () { var activeNotification; successModel.autoDismiss = true; notificationService.notify(successModel); @@ -112,7 +112,7 @@ define( expect(activeNotification).toBeUndefined(); }); - it("allows minimization of notifications", function() { + it("allows minimization of notifications", function () { var notification, activeNotification; @@ -128,7 +128,7 @@ define( expect(notificationService.notifications.length).toBe(1); }); - it("allows dismissal of notifications", function() { + it("allows dismissal of notifications", function () { var notification, activeNotification; @@ -143,9 +143,9 @@ define( expect(notificationService.notifications.length).toBe(0); }); - describe(" gets called with multiple notifications", function(){ + describe(" gets called with multiple notifications", function () { it("auto-dismisses the previously active notification, making" + - " the new notification active", function() { + " the new notification active", function () { var activeNotification; //First pre-load with a info message notificationService.notify(successModel); @@ -165,7 +165,7 @@ define( activeNotification = notificationService.getActiveNotification(); expect(activeNotification.model).toBe(errorModel); }); - it("auto-minimizes an active error notification", function() { + it("auto-minimizes an active error notification", function () { var activeNotification; //First pre-load with an error message notificationService.notify(errorModel); @@ -187,7 +187,7 @@ define( expect(errorModel.minimized).toEqual(true); }); it("auto-minimizes errors when a number of them arrive in" + - " short succession ", function() { + " short succession ", function () { var activeNotification, error2 = { title: "Second Mock Error Notification", diff --git a/platform/commonUI/regions/src/EditableRegionPolicy.js b/platform/commonUI/regions/src/EditableRegionPolicy.js index a63bed65b1..f538a5459b 100644 --- a/platform/commonUI/regions/src/EditableRegionPolicy.js +++ b/platform/commonUI/regions/src/EditableRegionPolicy.js @@ -36,10 +36,10 @@ define( } EditableRegionPolicy.prototype.allow = function (regionPart, domainObject) { - if (!regionPart.modes){ + if (!regionPart.modes) { return true; } - if (domainObject.hasCapability('editor') && domainObject.getCapability('editor').inEditContext()){ + if (domainObject.hasCapability('editor') && domainObject.getCapability('editor').inEditContext()) { //If the domain object is in edit mode, only include a part // if it is marked editable return regionPart.modes.indexOf('edit') !== -1; @@ -52,4 +52,4 @@ define( return EditableRegionPolicy; } -); \ No newline at end of file +); diff --git a/platform/commonUI/regions/src/InspectorController.js b/platform/commonUI/regions/src/InspectorController.js index 32b0e1903d..a2e513d7b7 100644 --- a/platform/commonUI/regions/src/InspectorController.js +++ b/platform/commonUI/regions/src/InspectorController.js @@ -41,7 +41,7 @@ define( */ function filterRegions(inspector) { //Dupe so we're not modifying the type definition. - return inspector.regions && inspector.regions.filter(function(region) { + return inspector.regions && inspector.regions.filter(function (region) { return policyService.allow('region', region, domainObject); }); } @@ -55,4 +55,4 @@ define( return InspectorController; } -); \ No newline at end of file +); diff --git a/platform/commonUI/regions/src/Region.js b/platform/commonUI/regions/src/Region.js index 3b300b28e1..4d38f1eb8d 100644 --- a/platform/commonUI/regions/src/Region.js +++ b/platform/commonUI/regions/src/Region.js @@ -67,7 +67,7 @@ define( * @param {number} [index] the position to insert the region. By default * will add to the end */ - Region.prototype.addRegion = function (region, index){ + Region.prototype.addRegion = function (region, index) { if (index) { this.regions.splice(index, 0, region); } else { @@ -82,11 +82,11 @@ define( * string, will remove the region with the matching name. If an * object, will attempt to remove that object from the Region */ - Region.prototype.removeRegion = function (region){ + Region.prototype.removeRegion = function (region) { if (typeof region === 'number') { this.regions.splice(region, 1); - } else if (typeof region === 'string'){ - this.regions = this.regions.filter(function(thisRegion) { + } else if (typeof region === 'string') { + this.regions = this.regions.filter(function (thisRegion) { return thisRegion.name !== region; }); } else { diff --git a/platform/commonUI/regions/test/EditableRegionPolicySpec.js b/platform/commonUI/regions/test/EditableRegionPolicySpec.js index e9a6a97404..ed3b9fffd3 100644 --- a/platform/commonUI/regions/test/EditableRegionPolicySpec.js +++ b/platform/commonUI/regions/test/EditableRegionPolicySpec.js @@ -37,7 +37,7 @@ define( }, mockAllModesRegionPart = {}; - beforeEach(function(){ + beforeEach(function () { editableRegionPolicy = new EditableRegionPolicy(); mockEditorCapability = jasmine.createSpyObj("editorCapability", [ @@ -50,19 +50,19 @@ define( mockDomainObject.getCapability.andReturn(mockEditorCapability); }); - it("includes only browse region parts for object not in edit mode", function() { + it("includes only browse region parts for object not in edit mode", function () { mockEditorCapability.inEditContext.andReturn(false); expect(editableRegionPolicy.allow(mockBrowseRegionPart, mockDomainObject)).toBe(true); expect(editableRegionPolicy.allow(mockEditRegionPart, mockDomainObject)).toBe(false); }); - it("includes only edit region parts for object in edit mode", function() { + it("includes only edit region parts for object in edit mode", function () { mockEditorCapability.inEditContext.andReturn(true); expect(editableRegionPolicy.allow(mockBrowseRegionPart, mockDomainObject)).toBe(false); expect(editableRegionPolicy.allow(mockEditRegionPart, mockDomainObject)).toBe(true); }); - it("includes region parts with no mode specification", function() { + it("includes region parts with no mode specification", function () { mockEditorCapability.inEditContext.andReturn(false); expect(editableRegionPolicy.allow(mockAllModesRegionPart, mockDomainObject)).toBe(true); mockEditorCapability.inEditContext.andReturn(true); diff --git a/platform/commonUI/regions/test/InspectorControllerSpec.js b/platform/commonUI/regions/test/InspectorControllerSpec.js index ad3243c348..d3fdb7384a 100644 --- a/platform/commonUI/regions/test/InspectorControllerSpec.js +++ b/platform/commonUI/regions/test/InspectorControllerSpec.js @@ -32,7 +32,7 @@ define( mockPolicyService, controller; - beforeEach(function(){ + beforeEach(function () { mockTypeDefinition = { inspector: { @@ -62,13 +62,13 @@ define( }; }); - it("filters out regions disallowed by region policy", function() { + it("filters out regions disallowed by region policy", function () { mockPolicyService.allow.andReturn(false); controller = new InspectorController(mockScope, mockPolicyService); expect(mockScope.regions.length).toBe(0); }); - it("does not filter out regions allowed by region policy", function() { + it("does not filter out regions allowed by region policy", function () { mockPolicyService.allow.andReturn(true); controller = new InspectorController(mockScope, mockPolicyService); expect(mockScope.regions.length).toBe(2); diff --git a/platform/commonUI/regions/test/RegionSpec.js b/platform/commonUI/regions/test/RegionSpec.js index ed7581b44b..9c2ecc296e 100644 --- a/platform/commonUI/regions/test/RegionSpec.js +++ b/platform/commonUI/regions/test/RegionSpec.js @@ -29,7 +29,7 @@ define( var region, part2 = new Region({'name': 'part2'}); - beforeEach(function(){ + beforeEach(function () { region = new Region(); region.regions = [ new Region({name: 'part1'}), @@ -39,27 +39,27 @@ define( }); it("adding a region at a specified index adds it in that" + - " position", function() { + " position", function () { - region.addRegion(part2, 1); + region.addRegion(part2, 1); - expect(region.regions.length).toBe(4); - expect(region.regions[1]).toBe(part2); - }); + expect(region.regions.length).toBe(4); + expect(region.regions[1]).toBe(part2); + }); - it("adding a region without an index adds it at the end", function() { + it("adding a region without an index adds it at the end", function () { var partN = new Region({'name': 'partN'}); region.addRegion(partN); expect(region.regions.length).toBe(4); - expect(region.regions[region.regions.length-1]).toBe(partN); + expect(region.regions[region.regions.length - 1]).toBe(partN); }); - describe("removing a region", function(){ + describe("removing a region", function () { var partName = "part2"; - beforeEach(function(){ + beforeEach(function () { region.regions = [ new Region({name: 'part1'}), part2, @@ -68,7 +68,7 @@ define( ]; }); - it("with a string matches on region name", function() { + it("with a string matches on region name", function () { expect(region.regions.length).toBe(4); expect(region.regions.indexOf(part2)).toBe(1); @@ -78,7 +78,7 @@ define( expect(region.regions.indexOf(part2)).toBe(-1); }); - it("with a number removes by index", function() { + it("with a number removes by index", function () { expect(region.regions.length).toBe(4); expect(region.regions.indexOf(part2)).toBe(1); @@ -89,7 +89,7 @@ define( }); - it("with object matches that object", function() { + it("with object matches that object", function () { expect(region.regions.length).toBe(4); expect(region.regions.indexOf(part2)).toBe(1); diff --git a/platform/commonUI/themes/espresso/bundle.js b/platform/commonUI/themes/espresso/bundle.js index b1df3f1ea5..d583481fa9 100644 --- a/platform/commonUI/themes/espresso/bundle.js +++ b/platform/commonUI/themes/espresso/bundle.js @@ -21,10 +21,10 @@ *****************************************************************************/ define([ - + 'legacyRegistry' ], function ( - + legacyRegistry ) { diff --git a/platform/commonUI/themes/snow/bundle.js b/platform/commonUI/themes/snow/bundle.js index d36b961e74..6dc8b5acc0 100644 --- a/platform/commonUI/themes/snow/bundle.js +++ b/platform/commonUI/themes/snow/bundle.js @@ -21,10 +21,10 @@ *****************************************************************************/ define([ - + 'legacyRegistry' ], function ( - + legacyRegistry ) { diff --git a/platform/containment/test/CapabilityTableSpec.js b/platform/containment/test/CapabilityTableSpec.js index 76fbd6ffcd..fe5a833f53 100644 --- a/platform/containment/test/CapabilityTableSpec.js +++ b/platform/containment/test/CapabilityTableSpec.js @@ -32,11 +32,11 @@ define( beforeEach(function () { mockTypeService = jasmine.createSpyObj( 'typeService', - [ 'listTypes' ] + ['listTypes'] ); mockCapabilityService = jasmine.createSpyObj( 'capabilityService', - [ 'getCapabilities' ] + ['getCapabilities'] ); // Both types can only contain b, let's say mockTypes = ['a', 'b'].map(function (type) { @@ -82,4 +82,4 @@ define( }); } -); \ No newline at end of file +); diff --git a/platform/containment/test/ComposeActionPolicySpec.js b/platform/containment/test/ComposeActionPolicySpec.js index 3678baac57..a6cf3cd3d4 100644 --- a/platform/containment/test/ComposeActionPolicySpec.js +++ b/platform/containment/test/ComposeActionPolicySpec.js @@ -36,7 +36,7 @@ define( mockInjector = jasmine.createSpyObj('$injector', ['get']); mockPolicyService = jasmine.createSpyObj( 'policyService', - [ 'allow' ] + ['allow'] ); mockTypes = ['a', 'b'].map(function (type) { var mockType = jasmine.createSpyObj('type-' + type, ['getKey']); @@ -90,4 +90,4 @@ define( }); }); } -); \ No newline at end of file +); diff --git a/platform/containment/test/CompositionMutabilityPolicySpec.js b/platform/containment/test/CompositionMutabilityPolicySpec.js index 06819c4043..18d26d2386 100644 --- a/platform/containment/test/CompositionMutabilityPolicySpec.js +++ b/platform/containment/test/CompositionMutabilityPolicySpec.js @@ -42,4 +42,4 @@ define( }); } -); \ No newline at end of file +); diff --git a/platform/containment/test/CompositionPolicySpec.js b/platform/containment/test/CompositionPolicySpec.js index 94997623ab..bd2d25ba58 100644 --- a/platform/containment/test/CompositionPolicySpec.js +++ b/platform/containment/test/CompositionPolicySpec.js @@ -34,11 +34,11 @@ define( mockInjector = jasmine.createSpyObj('$injector', ['get']); mockTypeService = jasmine.createSpyObj( 'typeService', - [ 'listTypes' ] + ['listTypes'] ); mockCapabilityService = jasmine.createSpyObj( 'capabilityService', - [ 'getCapabilities' ] + ['getCapabilities'] ); // Both types can only contain b, let's say mockTypes = ['a', 'b'].map(function (type) { @@ -82,4 +82,4 @@ define( }); } -); \ No newline at end of file +); diff --git a/platform/containment/test/ContainmentTableSpec.js b/platform/containment/test/ContainmentTableSpec.js index 64551c9439..ac45b75804 100644 --- a/platform/containment/test/ContainmentTableSpec.js +++ b/platform/containment/test/ContainmentTableSpec.js @@ -32,11 +32,11 @@ define( beforeEach(function () { mockTypeService = jasmine.createSpyObj( 'typeService', - [ 'listTypes' ] + ['listTypes'] ); mockCapabilityService = jasmine.createSpyObj( 'capabilityService', - [ 'getCapabilities' ] + ['getCapabilities'] ); // Both types can only contain b, let's say mockTypes = ['a', 'b', 'c'].map(function (type, index) { @@ -48,7 +48,7 @@ define( mockType.getDefinition.andReturn({ // First two contain objects with capability 'b'; // third one defines no containership rules - contains: (index < 2) ? [ { has: 'b' } ] : undefined + contains: (index < 2) ? [{ has: 'b' }] : undefined }); // Return a model to drive apparant capabilities mockType.getInitialModel.andReturn({ id: type }); @@ -93,4 +93,4 @@ define( }); } -); \ No newline at end of file +); diff --git a/platform/core/src/capabilities/ContextCapability.js b/platform/core/src/capabilities/ContextCapability.js index aaa298f093..72bfb56218 100644 --- a/platform/core/src/capabilities/ContextCapability.js +++ b/platform/core/src/capabilities/ContextCapability.js @@ -82,7 +82,7 @@ define( parentContext = parentObject && parentObject.getCapability('context'), parentPath = parentContext ? - parentContext.getPath() : [ this.parentObject ]; + parentContext.getPath() : [this.parentObject]; return parentPath.concat([this.domainObject]); }; diff --git a/platform/core/src/capabilities/PersistenceCapability.js b/platform/core/src/capabilities/PersistenceCapability.js index 2f4f3cd53b..204cd7de35 100644 --- a/platform/core/src/capabilities/PersistenceCapability.js +++ b/platform/core/src/capabilities/PersistenceCapability.js @@ -69,18 +69,18 @@ define( * Checks if the value returned is falsey, and if so returns a * rejected promise */ - function rejectIfFalsey(value, $q){ - if (!value){ + function rejectIfFalsey(value, $q) { + if (!value) { return $q.reject("Error persisting object"); } else { return value; } } - function formatError(error){ + function formatError(error) { if (error && error.message) { return error.message; - } else if (error && typeof error === "string"){ + } else if (error && typeof error === "string") { return error; } else { return "unknown error"; @@ -91,7 +91,7 @@ define( * Display a notification message if an error has occurred during * persistence. */ - function notifyOnError(error, domainObject, notificationService, $q){ + function notifyOnError(error, domainObject, notificationService, $q) { var errorMessage = "Unable to persist " + domainObject.getModel().name; if (error) { errorMessage += ": " + formatError(error); @@ -133,9 +133,9 @@ define( this.getSpace(), getKey(domainObject.getId()), domainObject.getModel() - ]).then(function(result){ + ]).then(function (result) { return rejectIfFalsey(result, self.$q); - }).catch(function(error){ + }).catch(function (error) { return notifyOnError(error, domainObject, self.notificationService, self.$q); }); }; diff --git a/platform/core/src/models/RootModelProvider.js b/platform/core/src/models/RootModelProvider.js index 9c19726922..83c9636e37 100644 --- a/platform/core/src/models/RootModelProvider.js +++ b/platform/core/src/models/RootModelProvider.js @@ -46,7 +46,9 @@ define( */ function RootModelProvider(roots, $q, $log) { // Pull out identifiers to used as ROOT's - var ids = roots.map(function (root) { return root.id; }); + var ids = roots.map(function (root) { + return root.id; + }); // Assign an initial location to root models roots.forEach(function (root) { diff --git a/platform/core/src/types/TypePropertyConversion.js b/platform/core/src/types/TypePropertyConversion.js index 3608b0ed5f..e2d1cea984 100644 --- a/platform/core/src/types/TypePropertyConversion.js +++ b/platform/core/src/types/TypePropertyConversion.js @@ -33,8 +33,12 @@ define( } }, identity: { - toModelValue: function (v) { return v; }, - toFormValue: function (v) { return v; } + toModelValue: function (v) { + return v; + }, + toFormValue: function (v) { + return v; + } } }, ARRAY_SUFFIX = '[]'; diff --git a/platform/core/src/types/TypeProvider.js b/platform/core/src/types/TypeProvider.js index d45852bb68..f2ae2655b6 100644 --- a/platform/core/src/types/TypeProvider.js +++ b/platform/core/src/types/TypeProvider.js @@ -179,7 +179,7 @@ define( return def; } - + return (self.typeMap[typeKey] = self.typeMap[typeKey] || buildTypeDef(typeKey)); } diff --git a/platform/core/test/actions/ActionAggregatorSpec.js b/platform/core/test/actions/ActionAggregatorSpec.js index 2b1e4adb81..09dddff5af 100644 --- a/platform/core/test/actions/ActionAggregatorSpec.js +++ b/platform/core/test/actions/ActionAggregatorSpec.js @@ -32,7 +32,7 @@ define( aggregator; function createMockActionProvider(actions, i) { - var spy = jasmine.createSpyObj("agg" + i, [ "getActions" ]); + var spy = jasmine.createSpyObj("agg" + i, ["getActions"]); spy.getActions.andReturn(actions); return spy; } @@ -69,4 +69,4 @@ define( }); }); } -); \ No newline at end of file +); diff --git a/platform/core/test/actions/ActionCapabilitySpec.js b/platform/core/test/actions/ActionCapabilitySpec.js index 0c564b0710..dd83a88082 100644 --- a/platform/core/test/actions/ActionCapabilitySpec.js +++ b/platform/core/test/actions/ActionCapabilitySpec.js @@ -37,19 +37,19 @@ define( beforeEach(function () { mockAction = jasmine.createSpyObj( "action", - [ "perform", "getMetadata" ] + ["perform", "getMetadata"] ); mockActionService = jasmine.createSpyObj( "actionService", - [ "getActions" ] + ["getActions"] ); mockQ = jasmine.createSpyObj( "$q", - [ "when" ] + ["when"] ); mockDomainObject = jasmine.createSpyObj( "domainObject", - [ "getId", "getModel", "getCapability", "hasCapability", "useCapability" ] + ["getId", "getModel", "getCapability", "hasCapability", "useCapability"] ); mockActionService.getActions.andReturn([mockAction, {}]); @@ -76,7 +76,7 @@ define( }); it("promises the result of performed actions", function () { - var mockPromise = jasmine.createSpyObj("promise", [ "then" ]); + var mockPromise = jasmine.createSpyObj("promise", ["then"]); mockQ.when.andReturn(mockPromise); mockAction.perform.andReturn("the action's result"); diff --git a/platform/core/test/actions/ActionProviderSpec.js b/platform/core/test/actions/ActionProviderSpec.js index 5740196b98..dce95dd1e5 100644 --- a/platform/core/test/actions/ActionProviderSpec.js +++ b/platform/core/test/actions/ActionProviderSpec.js @@ -33,29 +33,41 @@ define( actionProvider; function SimpleAction() { - return { perform: function () { return "simple"; } }; + return { perform: function () { + return "simple"; + } }; } function CategorizedAction() { - return { perform: function () { return "categorized"; } }; + return { perform: function () { + return "categorized"; + } }; } CategorizedAction.category = "someCategory"; function KeyedAction() { - return { perform: function () { return "keyed"; } }; + return { perform: function () { + return "keyed"; + } }; } KeyedAction.key = "someKey"; function CategorizedKeyedAction() { - return { perform: function () { return "both"; } }; + return { perform: function () { + return "both"; + } }; } CategorizedKeyedAction.key = "someKey"; CategorizedKeyedAction.category = "someCategory"; function MetadataAction() { return { - perform: function () { return "metadata"; }, - getMetadata: function () { return "custom metadata"; } + perform: function () { + return "metadata"; + }, + getMetadata: function () { + return "custom metadata"; + } }; } MetadataAction.key = "metadata"; @@ -152,7 +164,7 @@ define( } provided = new ActionProvider( - [ SimpleAction, BadAction ], + [SimpleAction, BadAction], mockLog ).getActions(); }); diff --git a/platform/core/test/actions/LoggingActionDecoratorSpec.js b/platform/core/test/actions/LoggingActionDecoratorSpec.js index e46b6aecdc..3e0e9b98e9 100644 --- a/platform/core/test/actions/LoggingActionDecoratorSpec.js +++ b/platform/core/test/actions/LoggingActionDecoratorSpec.js @@ -36,15 +36,15 @@ define( beforeEach(function () { mockAction = jasmine.createSpyObj( "action", - [ "perform", "getMetadata" ] + ["perform", "getMetadata"] ); mockActionService = jasmine.createSpyObj( "actionService", - [ "getActions" ] + ["getActions"] ); mockLog = jasmine.createSpyObj( "$log", - [ "error", "warn", "info", "debug" ] + ["error", "warn", "info", "debug"] ); mockActionService.getActions.andReturn([mockAction]); @@ -70,4 +70,4 @@ define( }); } -); \ No newline at end of file +); diff --git a/platform/core/test/capabilities/CompositionCapabilitySpec.js b/platform/core/test/capabilities/CompositionCapabilitySpec.js index 0b6d184ffd..ca0410123e 100644 --- a/platform/core/test/capabilities/CompositionCapabilitySpec.js +++ b/platform/core/test/capabilities/CompositionCapabilitySpec.js @@ -64,7 +64,7 @@ define( mockObjectService = jasmine.createSpyObj( "objectService", - [ "getObjects" ] + ["getObjects"] ); mockInjector = { @@ -97,7 +97,7 @@ define( }); it("requests ids found in model's composition from the object service", function () { - var ids = [ "a", "b", "c", "xyz" ]; + var ids = ["a", "b", "c", "xyz"]; mockDomainObject.getModel.andReturn({ composition: ids }); @@ -114,7 +114,9 @@ define( mockObjectService.getObjects.andReturn(mockPromise({x: mockChild})); mockChild.getCapability.andReturn(undefined); - composition.invoke().then(function (c) { result = c; }); + composition.invoke().then(function (c) { + result = c; + }); // Should have been added by a wrapper expect(result[0].getCapability('context')).toBeDefined(); @@ -153,7 +155,7 @@ define( it("does not re-add IDs which are already present", function () { var result, - testModel = { composition: [ 'a' ] }, + testModel = { composition: ['a'] }, mockChild = jasmine.createSpyObj("child", DOMAIN_OBJECT_METHODS); mockDomainObject.getModel.andReturn(testModel); @@ -184,7 +186,7 @@ define( it("can add objects at a specified index", function () { var result, - testModel = { composition: [ 'a', 'b', 'c' ] }, + testModel = { composition: ['a', 'b', 'c'] }, mockChild = jasmine.createSpyObj("child", DOMAIN_OBJECT_METHODS); mockDomainObject.getModel.andReturn(testModel); diff --git a/platform/core/test/capabilities/ContextCapabilitySpec.js b/platform/core/test/capabilities/ContextCapabilitySpec.js index 21a71e37f0..08e5ff952b 100644 --- a/platform/core/test/capabilities/ContextCapabilitySpec.js +++ b/platform/core/test/capabilities/ContextCapabilitySpec.js @@ -46,7 +46,7 @@ define( mockDomainObject = jasmine.createSpyObj("domainObject", DOMAIN_OBJECT_METHODS); mockParent = jasmine.createSpyObj("parent", DOMAIN_OBJECT_METHODS); mockGrandparent = jasmine.createSpyObj("grandparent", DOMAIN_OBJECT_METHODS); - mockContext = jasmine.createSpyObj("context", [ "getParent", "getRoot", "getPath" ]); + mockContext = jasmine.createSpyObj("context", ["getParent", "getRoot", "getPath"]); mockParent.getCapability.andReturn(mockContext); mockContext.getParent.andReturn(mockGrandparent); @@ -77,4 +77,4 @@ define( }); } -); \ No newline at end of file +); diff --git a/platform/core/test/capabilities/ContextualDomainObjectSpec.js b/platform/core/test/capabilities/ContextualDomainObjectSpec.js index 99b1f2a615..00b9e63746 100644 --- a/platform/core/test/capabilities/ContextualDomainObjectSpec.js +++ b/platform/core/test/capabilities/ContextualDomainObjectSpec.js @@ -79,4 +79,4 @@ define( }); } -); \ No newline at end of file +); diff --git a/platform/core/test/capabilities/CoreCapabilityProviderSpec.js b/platform/core/test/capabilities/CoreCapabilityProviderSpec.js index 6f904fa73b..55ec9ca303 100644 --- a/platform/core/test/capabilities/CoreCapabilityProviderSpec.js +++ b/platform/core/test/capabilities/CoreCapabilityProviderSpec.js @@ -31,16 +31,22 @@ define( var mockLog, provider; - function BasicCapability() { return; } + function BasicCapability() { + return; + } BasicCapability.key = "basic"; - function ApplicableCapability() { return; } + function ApplicableCapability() { + return; + } ApplicableCapability.key = "applicable"; ApplicableCapability.appliesTo = function (model) { return !model.isNotApplicable; }; - function KeylessCapability() { return; } + function KeylessCapability() { + return; + } beforeEach(function () { mockLog = jasmine.createSpyObj( diff --git a/platform/core/test/capabilities/DelegationCapabilitySpec.js b/platform/core/test/capabilities/DelegationCapabilitySpec.js index a529a54491..b803b64861 100644 --- a/platform/core/test/capabilities/DelegationCapabilitySpec.js +++ b/platform/core/test/capabilities/DelegationCapabilitySpec.js @@ -36,7 +36,11 @@ define( object = {}, delegation; - function capture(k) { return function (v) { captured[k] = v; }; } + function capture(k) { + return function (v) { + captured[k] = v; + }; + } function TestDomainObject(caps, id) { return { getId: function () { @@ -67,12 +71,16 @@ define( beforeEach(function () { captured = {}; typeDef = {}; - typeDef.delegates = [ "foo" ]; - type = { getDefinition: function () { return typeDef; } }; + typeDef.delegates = ["foo"]; + type = { getDefinition: function () { + return typeDef; + } }; children = []; capabilities = { type: type, - composition: { invoke: function () { return mockPromise(children); } } + composition: { invoke: function () { + return mockPromise(children); + } } }; object = new TestDomainObject(capabilities); @@ -95,4 +103,4 @@ define( }); }); } -); \ No newline at end of file +); diff --git a/platform/core/test/capabilities/InstantiationCapabilitySpec.js b/platform/core/test/capabilities/InstantiationCapabilitySpec.js index ec8cd88d3a..4a798a567d 100644 --- a/platform/core/test/capabilities/InstantiationCapabilitySpec.js +++ b/platform/core/test/capabilities/InstantiationCapabilitySpec.js @@ -38,15 +38,15 @@ define( mockInstantiate = jasmine.createSpy("instantiate"); mockIdentifierService = jasmine.createSpyObj( 'identifierService', - [ 'parse', 'generate' ] + ['parse', 'generate'] ); mockIdentifier = jasmine.createSpyObj( 'identifier', - [ 'getSpace', 'getKey', 'getDefinedSpace' ] + ['getSpace', 'getKey', 'getDefinedSpace'] ); mockDomainObject = jasmine.createSpyObj( 'domainObject', - [ 'getId', 'getCapability', 'getModel' ] + ['getId', 'getCapability', 'getModel'] ); mockInjector.get.andCallFake(function (key) { diff --git a/platform/core/test/capabilities/MutationCapabilitySpec.js b/platform/core/test/capabilities/MutationCapabilitySpec.js index bb6070b154..d84a2edec1 100644 --- a/platform/core/test/capabilities/MutationCapabilitySpec.js +++ b/platform/core/test/capabilities/MutationCapabilitySpec.js @@ -35,8 +35,12 @@ define( topic, mockNow, domainObject = { - getId: function () { return "test-id"; }, - getModel: function () { return testModel; } + getId: function () { + return "test-id"; + }, + getModel: function () { + return testModel; + } }, mutation; diff --git a/platform/core/test/capabilities/PersistenceCapabilitySpec.js b/platform/core/test/capabilities/PersistenceCapabilitySpec.js index d2bafd26e6..ca37936735 100644 --- a/platform/core/test/capabilities/PersistenceCapabilitySpec.js +++ b/platform/core/test/capabilities/PersistenceCapabilitySpec.js @@ -46,10 +46,10 @@ define( then: function (callback) { return asPromise(callback(value)); }, - catch: function(callback) { + catch: function (callback) { //Define a default 'happy' catch, that skips over the // catch callback - return doCatch ? asPromise(callback(value)): asPromise(value); + return doCatch ? asPromise(callback(value)) : asPromise(value); } }; } @@ -60,16 +60,16 @@ define( mockPersistenceService = jasmine.createSpyObj( "persistenceService", - [ "updateObject", "readObject", "createObject", "deleteObject" ] + ["updateObject", "readObject", "createObject", "deleteObject"] ); mockIdentifierService = jasmine.createSpyObj( 'identifierService', - [ 'parse', 'generate' ] + ['parse', 'generate'] ); mockIdentifier = jasmine.createSpyObj( 'identifier', - [ 'getSpace', 'getKey', 'getDefinedSpace' ] + ['getSpace', 'getKey', 'getDefinedSpace'] ); mockQ = jasmine.createSpyObj( "$q", @@ -81,12 +81,16 @@ define( ); mockCacheService = jasmine.createSpyObj( "cacheService", - [ "get", "put", "remove", "all" ] + ["get", "put", "remove", "all"] ); mockDomainObject = { - getId: function () { return id; }, - getModel: function () { return model; }, + getId: function () { + return id; + }, + getModel: function () { + return model; + }, useCapability: jasmine.createSpy() }; // Simulate mutation capability @@ -107,7 +111,7 @@ define( ); }); - describe("successful persistence", function() { + describe("successful persistence", function () { beforeEach(function () { mockPersistenceService.updateObject.andReturn(happyPromise); mockPersistenceService.createObject.andReturn(happyPromise); @@ -163,9 +167,9 @@ define( }); }); - describe("unsuccessful persistence", function() { + describe("unsuccessful persistence", function () { var sadPromise = { - then: function(callback){ + then: function (callback) { return asPromise(callback(0), true); } }; diff --git a/platform/core/test/capabilities/RelationshipCapabilitySpec.js b/platform/core/test/capabilities/RelationshipCapabilitySpec.js index 6b69a9b615..4e2b8f9cc8 100644 --- a/platform/core/test/capabilities/RelationshipCapabilitySpec.js +++ b/platform/core/test/capabilities/RelationshipCapabilitySpec.js @@ -60,7 +60,7 @@ define( mockObjectService = jasmine.createSpyObj( "objectService", - [ "getObjects" ] + ["getObjects"] ); mockInjector = { @@ -85,7 +85,7 @@ define( }); it("requests ids found in model's composition from the object service", function () { - var ids = [ "a", "b", "c", "xyz" ]; + var ids = ["a", "b", "c", "xyz"]; mockDomainObject.getModel.andReturn({ relationships: { xyz: ids } }); @@ -96,7 +96,7 @@ define( it("provides a list of relationship types", function () { mockDomainObject.getModel.andReturn({ relationships: { - abc: [ 'a', 'b' ], + abc: ['a', 'b'], def: "not an array, should be ignored", xyz: [] } }); @@ -139,4 +139,4 @@ define( }); } -); \ No newline at end of file +); diff --git a/platform/core/test/models/MissingModelDecoratorSpec.js b/platform/core/test/models/MissingModelDecoratorSpec.js index df18bd0c49..20d64f40ae 100644 --- a/platform/core/test/models/MissingModelDecoratorSpec.js +++ b/platform/core/test/models/MissingModelDecoratorSpec.js @@ -40,7 +40,7 @@ define( beforeEach(function () { mockModelService = jasmine.createSpyObj( "modelService", - [ "getModels" ] + ["getModels"] ); testModels = { @@ -61,14 +61,18 @@ define( it("provides models for any IDs which are missing", function () { var models; decorator.getModels(['testId', 'otherId']) - .then(function (m) { models = m; }); + .then(function (m) { + models = m; + }); expect(models.otherId).toBeDefined(); }); it("does not overwrite existing models", function () { var models; decorator.getModels(['testId', 'otherId']) - .then(function (m) { models = m; }); + .then(function (m) { + models = m; + }); expect(models.testId).toEqual({ someKey: "some value" }); }); diff --git a/platform/core/test/models/ModelAggregatorSpec.js b/platform/core/test/models/ModelAggregatorSpec.js index 3fc816d6db..2f5f13c053 100644 --- a/platform/core/test/models/ModelAggregatorSpec.js +++ b/platform/core/test/models/ModelAggregatorSpec.js @@ -37,18 +37,20 @@ define( aggregator; beforeEach(function () { - mockQ = jasmine.createSpyObj("$q", [ "all" ]); + mockQ = jasmine.createSpyObj("$q", ["all"]); mockProviders = modelList.map(function (models, i) { var mockProvider = jasmine.createSpyObj( "mockProvider" + i, - [ "getModels" ] + ["getModels"] ); mockProvider.getModels.andReturn(models); return mockProvider; }); mockQ.all.andReturn({ - then: function (c) { return c(modelList); } + then: function (c) { + return c(modelList); + } }); aggregator = new ModelAggregator(mockQ, mockProviders); @@ -72,4 +74,4 @@ define( }); } -); \ No newline at end of file +); diff --git a/platform/core/test/models/ModelCacheServiceSpec.js b/platform/core/test/models/ModelCacheServiceSpec.js index 23d1a0ce0d..97e84fa918 100644 --- a/platform/core/test/models/ModelCacheServiceSpec.js +++ b/platform/core/test/models/ModelCacheServiceSpec.js @@ -27,7 +27,7 @@ define(['../../src/models/ModelCacheService'], function (ModelCacheService) { cacheService; beforeEach(function () { - testIds = [ 'a', 'b', 'c', 'd' ]; + testIds = ['a', 'b', 'c', 'd']; testModels = testIds.reduce(function (models, id) { models[id] = { someKey: "some value for " + id }; return models; diff --git a/platform/core/test/models/RootModelProviderSpec.js b/platform/core/test/models/RootModelProviderSpec.js index aab4477b61..a3b667b963 100644 --- a/platform/core/test/models/RootModelProviderSpec.js +++ b/platform/core/test/models/RootModelProviderSpec.js @@ -57,7 +57,9 @@ define( }; } - function capture(value) { captured = value; } + function capture(value) { + captured = value; + } beforeEach(function () { diff --git a/platform/core/test/models/StaticModelProviderSpec.js b/platform/core/test/models/StaticModelProviderSpec.js index 7d7f518eff..c4073c8d55 100644 --- a/platform/core/test/models/StaticModelProviderSpec.js +++ b/platform/core/test/models/StaticModelProviderSpec.js @@ -55,7 +55,9 @@ define( }); it("provides models from extension declarations", function () { - var mockPromise = { then: function () { return; } }; + var mockPromise = { then: function () { + return; + } }; mockQ.when.andReturn(mockPromise); // Verify that we got the promise as the return value @@ -97,4 +99,4 @@ define( }); } -); \ No newline at end of file +); diff --git a/platform/core/test/objects/DomainObjectProviderSpec.js b/platform/core/test/objects/DomainObjectProviderSpec.js index 6da0d122b5..c8450551f4 100644 --- a/platform/core/test/objects/DomainObjectProviderSpec.js +++ b/platform/core/test/objects/DomainObjectProviderSpec.js @@ -49,7 +49,7 @@ define( beforeEach(function () { mockModelService = jasmine.createSpyObj( "modelService", - [ "getModels" ] + ["getModels"] ); mockInstantiate = jasmine.createSpy("instantiate"); @@ -64,7 +64,7 @@ define( }); it("requests models from the model service", function () { - var ids = [ "a", "b", "c" ]; + var ids = ["a", "b", "c"]; mockModelService.getModels.andReturn(mockPromise({})); provider.getObjects(ids); expect(mockModelService.getModels).toHaveBeenCalledWith(ids); @@ -72,7 +72,7 @@ define( it("instantiates objects with provided models", function () { - var ids = [ "a", "b", "c"], + var ids = ["a", "b", "c"], model = { someKey: "some value"}, result; mockModelService.getModels.andReturn(mockPromise({ a: model })); diff --git a/platform/core/test/objects/DomainObjectSpec.js b/platform/core/test/objects/DomainObjectSpec.js index 47dda4537d..de5f9a8841 100644 --- a/platform/core/test/objects/DomainObjectSpec.js +++ b/platform/core/test/objects/DomainObjectSpec.js @@ -84,4 +84,4 @@ define( }); } -); \ No newline at end of file +); diff --git a/platform/core/test/services/ContextualizeSpec.js b/platform/core/test/services/ContextualizeSpec.js index 583c812a30..e814033f9f 100644 --- a/platform/core/test/services/ContextualizeSpec.js +++ b/platform/core/test/services/ContextualizeSpec.js @@ -44,7 +44,7 @@ define( mockLog = jasmine.createSpyObj( "$log", - [ "error", "warn", "info", "debug" ] + ["error", "warn", "info", "debug"] ); mockDomainObject = diff --git a/platform/core/test/services/InstantiateSpec.js b/platform/core/test/services/InstantiateSpec.js index a9529c94b6..e1993060f3 100644 --- a/platform/core/test/services/InstantiateSpec.js +++ b/platform/core/test/services/InstantiateSpec.js @@ -45,7 +45,7 @@ define( ); mockIdentifierService = jasmine.createSpyObj( 'identifierService', - [ 'parse', 'generate' ] + ['parse', 'generate'] ); mockCapabilityConstructor = jasmine.createSpy('capability'); mockCapabilityInstance = {}; @@ -61,7 +61,7 @@ define( mockCacheService = jasmine.createSpyObj( 'cacheService', - [ 'get', 'put', 'remove', 'all' ] + ['get', 'put', 'remove', 'all'] ); testModel = { someKey: "some value" }; diff --git a/platform/core/test/services/NowSpec.js b/platform/core/test/services/NowSpec.js index e0da8a60f6..cb122acf78 100644 --- a/platform/core/test/services/NowSpec.js +++ b/platform/core/test/services/NowSpec.js @@ -44,4 +44,4 @@ define( }); } -); \ No newline at end of file +); diff --git a/platform/core/test/services/TopicSpec.js b/platform/core/test/services/TopicSpec.js index cf0b2d42b2..d683f36c6c 100644 --- a/platform/core/test/services/TopicSpec.js +++ b/platform/core/test/services/TopicSpec.js @@ -34,7 +34,7 @@ define( testMessage = { someKey: "some value"}; mockLog = jasmine.createSpyObj( '$log', - [ 'error', 'warn', 'info', 'debug' ] + ['error', 'warn', 'info', 'debug'] ); mockCallback = jasmine.createSpy('callback'); topic = new Topic(mockLog); diff --git a/platform/core/test/types/MergeModelsSpec.js b/platform/core/test/types/MergeModelsSpec.js index 3633848f68..026c263c9a 100644 --- a/platform/core/test/types/MergeModelsSpec.js +++ b/platform/core/test/types/MergeModelsSpec.js @@ -32,32 +32,32 @@ define( expect(mergeModels( { "a": "property a", - "b": [ 1, 2, 3 ], + "b": [1, 2, 3], "c": { x: 42, - z: [ 0 ] + z: [0] }, "d": "should be ignored" }, { - "b": [ 4 ], + "b": [4], "c": { y: "property y", - z: [ "h" ] + z: ["h"] }, "d": "property d" } )).toEqual({ "a": "property a", - "b": [ 1, 2, 3, 4 ], + "b": [1, 2, 3, 4], "c": { x: 42, y: "property y", - z: [ 0, "h" ] + z: [0, "h"] }, "d": "property d" }); }); }); } -); \ No newline at end of file +); diff --git a/platform/core/test/types/TypeCapabilitySpec.js b/platform/core/test/types/TypeCapabilitySpec.js index 2b5281fb3f..03a7ac4adb 100644 --- a/platform/core/test/types/TypeCapabilitySpec.js +++ b/platform/core/test/types/TypeCapabilitySpec.js @@ -36,11 +36,11 @@ define( beforeEach(function () { mockTypeService = jasmine.createSpyObj( "typeService", - [ "getType" ] + ["getType"] ); mockDomainObject = jasmine.createSpyObj( "domainObject", - [ "getId", "getModel", "getCapability" ] + ["getId", "getModel", "getCapability"] ); mockType = { someKey: "some value" }; @@ -57,4 +57,4 @@ define( }); } -); \ No newline at end of file +); diff --git a/platform/core/test/types/TypeImplSpec.js b/platform/core/test/types/TypeImplSpec.js index 3f95b5a8eb..9f911de157 100644 --- a/platform/core/test/types/TypeImplSpec.js +++ b/platform/core/test/types/TypeImplSpec.js @@ -36,7 +36,7 @@ define( glyph: 't', inherits: ['test-parent-1', 'test-parent-2'], features: ['test-feature-1'], - properties: [ {} ], + properties: [{}], model: {someKey: "some value"} }; type = new TypeImpl(testTypeDef); @@ -74,10 +74,14 @@ define( it("supports instance-of checks by type object", function () { expect(type.instanceOf({ - getKey: function () { return 'test-parent-1'; } + getKey: function () { + return 'test-parent-1'; + } })).toBeTruthy(); expect(type.instanceOf({ - getKey: function () { return 'some-other-type'; } + getKey: function () { + return 'some-other-type'; + } })).toBeFalsy(); }); @@ -110,4 +114,4 @@ define( }); }); } -); \ No newline at end of file +); diff --git a/platform/core/test/types/TypePropertyConversionSpec.js b/platform/core/test/types/TypePropertyConversionSpec.js index b888d25552..280134dd86 100644 --- a/platform/core/test/types/TypePropertyConversionSpec.js +++ b/platform/core/test/types/TypePropertyConversionSpec.js @@ -28,7 +28,7 @@ define( it("allows non-conversion when parameter is 'identity'", function () { var conversion = new TypePropertyConversion("identity"); - [ 42, "42", { a: 42 } ].forEach(function (v) { + [42, "42", { a: 42 }].forEach(function (v) { expect(conversion.toFormValue(v)).toBe(v); expect(conversion.toModelValue(v)).toBe(v); }); @@ -61,4 +61,4 @@ define( }); } -); \ No newline at end of file +); diff --git a/platform/core/test/types/TypePropertySpec.js b/platform/core/test/types/TypePropertySpec.js index 57b77c90d6..c4cdedeb42 100644 --- a/platform/core/test/types/TypePropertySpec.js +++ b/platform/core/test/types/TypePropertySpec.js @@ -57,7 +57,7 @@ define( it("sets properties by path", function () { var definition = { key: "someKey", - property: [ "some", "property" ] + property: ["some", "property"] }, model = {}, property = new TypeProperty(definition); @@ -68,7 +68,7 @@ define( it("gets properties by path", function () { var definition = { key: "someKey", - property: [ "some", "property" ] + property: ["some", "property"] }, model = { some: { property: "some value" } }, property = new TypeProperty(definition); @@ -78,7 +78,7 @@ define( it("stops looking for properties when a path is invalid", function () { var definition = { key: "someKey", - property: [ "some", "property" ] + property: ["some", "property"] }, property = new TypeProperty(definition); expect(property.getValue(undefined)).toBeUndefined(); @@ -97,7 +97,7 @@ define( it("provides empty arrays for values that are array-like", function () { var definition = { property: "someProperty", - items: [ {}, {}, {} ] + items: [{}, {}, {}] }, model = {}, property = new TypeProperty(definition); @@ -108,7 +108,7 @@ define( it("detects and ignores empty arrays on setValue", function () { var definition = { property: "someProperty", - items: [ {}, {}, {} ] + items: [{}, {}, {}] }, model = {}, property = new TypeProperty(definition); @@ -123,4 +123,4 @@ define( }); } -); \ No newline at end of file +); diff --git a/platform/core/test/types/TypeProviderSpec.js b/platform/core/test/types/TypeProviderSpec.js index d876c9fa08..4d2a359e33 100644 --- a/platform/core/test/types/TypeProviderSpec.js +++ b/platform/core/test/types/TypeProviderSpec.js @@ -146,4 +146,4 @@ define( }); } -); \ No newline at end of file +); diff --git a/platform/core/test/views/ViewCapabilitySpec.js b/platform/core/test/views/ViewCapabilitySpec.js index ec59a5bf17..b4e3b64c2a 100644 --- a/platform/core/test/views/ViewCapabilitySpec.js +++ b/platform/core/test/views/ViewCapabilitySpec.js @@ -30,17 +30,17 @@ define( describe("A view capability", function () { var mockViewService, mockDomainObject, - views = [ {key: "someView"} ], + views = [{key: "someView"}], view; beforeEach(function () { mockViewService = jasmine.createSpyObj( "viewService", - [ "getViews" ] + ["getViews"] ); mockDomainObject = jasmine.createSpyObj( "domainObject", - [ "getId", "getModel", "getCapability" ] + ["getId", "getModel", "getCapability"] ); mockViewService.getViews.andReturn(views); view = new ViewCapability(mockViewService, mockDomainObject); @@ -55,4 +55,4 @@ define( }); } -); \ No newline at end of file +); diff --git a/platform/core/test/views/ViewProviderSpec.js b/platform/core/test/views/ViewProviderSpec.js index 0029527bbb..ddeff3e158 100644 --- a/platform/core/test/views/ViewProviderSpec.js +++ b/platform/core/test/views/ViewProviderSpec.js @@ -33,11 +33,11 @@ define( }, viewB = { key: "b", - needs: [ "someCapability" ] + needs: ["someCapability"] }, viewC = { key: "c", - needs: [ "someCapability" ], + needs: ["someCapability"], delegation: true }, capabilities = {}, @@ -158,4 +158,4 @@ define( }); } -); \ No newline at end of file +); diff --git a/platform/entanglement/src/actions/CopyAction.js b/platform/entanglement/src/actions/CopyAction.js index bfc97cf451..2ed9725c41 100644 --- a/platform/entanglement/src/actions/CopyAction.js +++ b/platform/entanglement/src/actions/CopyAction.js @@ -69,7 +69,7 @@ define( * @param totalObjects * @param processed */ - CopyAction.prototype.progress = function(phase, totalObjects, processed){ + CopyAction.prototype.progress = function (phase, totalObjects, processed) { /* Copy has two distinct phases. In the first phase a copy plan is made in memory. During this phase of execution, the user is @@ -78,7 +78,7 @@ define( In the second phase, the copying is taking place, and the user is shown non-invasive banner notifications at the bottom of the screen. */ - if (phase.toLowerCase() === 'preparing' && !this.dialog){ + if (phase.toLowerCase() === 'preparing' && !this.dialog) { this.dialog = this.dialogService.showBlockingMessage({ title: "Preparing to copy objects", unknownProgress: true, @@ -105,15 +105,15 @@ define( * the AbstractComposeAction, but extends it to support notification * updates of progress on copy. */ - CopyAction.prototype.perform = function() { + CopyAction.prototype.perform = function () { var self = this; - function success(){ + function success() { self.notification.dismiss(); self.notificationService.info("Copying complete."); } - function error(errorDetails){ + function error(errorDetails) { var errorMessage = { title: "Error copying objects.", severity: "error", @@ -121,7 +121,7 @@ define( minimized: true, // want the notification to be minimized initially (don't show banner) options: [{ label: "OK", - callback: function() { + callback: function () { self.dialogService.dismiss(); } }] @@ -138,7 +138,7 @@ define( self.dialogService.showBlockingMessage(errorMessage); } - function notification(details){ + function notification(details) { self.progress(details.phase, details.totalObjects, details.processed); } diff --git a/platform/entanglement/src/services/CopyService.js b/platform/entanglement/src/services/CopyService.js index df284f3e20..3bff772ef5 100644 --- a/platform/entanglement/src/services/CopyService.js +++ b/platform/entanglement/src/services/CopyService.js @@ -22,7 +22,7 @@ define( - [ "./CopyTask" ], + ["./CopyTask"], function (CopyTask) { /** diff --git a/platform/entanglement/src/services/CopyTask.js b/platform/entanglement/src/services/CopyTask.js index 0f8f421adf..0fe97d99d5 100644 --- a/platform/entanglement/src/services/CopyTask.js +++ b/platform/entanglement/src/services/CopyTask.js @@ -37,7 +37,7 @@ define( * @param $q Angular's $q, for promises * @constructor */ - function CopyTask (domainObject, parent, filter, $q){ + function CopyTask(domainObject, parent, filter, $q) { this.domainObject = domainObject; this.parent = parent; this.firstClone = undefined; @@ -89,11 +89,11 @@ define( * result in automatic request batching by the browser. */ function persistObjects(self) { - return self.$q.all(self.clones.map(function(clone){ - return clone.getCapability("persistence").persist().then(function(){ + return self.$q.all(self.clones.map(function (clone) { + return clone.getCapability("persistence").persist().then(function () { self.deferred.notify({phase: "copying", totalObjects: self.clones.length, processed: ++self.persisted}); }); - })).then(function(){ + })).then(function () { return self; }); } @@ -147,16 +147,16 @@ define( * @private * @returns {*} */ - CopyTask.prototype.copyComposees = function(composees, clonedParent, originalParent){ + CopyTask.prototype.copyComposees = function (composees, clonedParent, originalParent) { var self = this, idMap = {}; - return (composees || []).reduce(function(promise, originalComposee){ + return (composees || []).reduce(function (promise, originalComposee) { //If the composee is composed of other // objects, chain a promise.. - return promise.then(function(){ + return promise.then(function () { // ...to recursively copy it (and its children) - return self.copy(originalComposee, originalParent).then(function(clonedComposee){ + return self.copy(originalComposee, originalParent).then(function (clonedComposee) { //Map the original composee's ID to that of its // clone so that we can replace any references to it // in the parent @@ -167,17 +167,18 @@ define( // set, however linked objects will not. return composeChild(clonedComposee, clonedParent, clonedComposee !== originalComposee); }); - });}, self.$q.when(undefined) - ).then(function(){ - //Replace any references in the cloned parent to - // contained objects that have been composed with the - // Ids of the clones - self.rewriteIdentifiers(clonedParent.getModel(), idMap); + }); + }, self.$q.when(undefined) + ).then(function () { + //Replace any references in the cloned parent to + // contained objects that have been composed with the + // Ids of the clones + self.rewriteIdentifiers(clonedParent.getModel(), idMap); - //Add the clone to the list of clones that will - //be returned by this function - self.clones.push(clonedParent); - return clonedParent; + //Add the clone to the list of clones that will + //be returned by this function + self.clones.push(clonedParent); + return clonedParent; }); }; @@ -192,7 +193,7 @@ define( * duplication, then a duplicate of the object, otherwise the object * itself (to allow linking to non duplicatable objects). */ - CopyTask.prototype.copy = function(originalObject) { + CopyTask.prototype.copy = function (originalObject) { var self = this, clone; @@ -207,7 +208,7 @@ define( clone = this.parent.useCapability("instantiation", cloneObjectModel(originalObject.getModel())); //Iterate through child tree - return this.$q.when(originalObject.useCapability('composition')).then(function(composees){ + return this.$q.when(originalObject.useCapability('composition')).then(function (composees) { self.deferred.notify({phase: "preparing"}); //Duplicate the object's children, and their children, and // so on down to the leaf nodes of the tree. @@ -234,10 +235,10 @@ define( * object being copied. The clones are all full composed with * references to their own children. */ - CopyTask.prototype.buildCopyPlan = function() { + CopyTask.prototype.buildCopyPlan = function () { var self = this; - return this.copy(self.domainObject, self.parent).then(function(domainObjectClone){ + return this.copy(self.domainObject, self.parent).then(function (domainObjectClone) { if (domainObjectClone !== self.domainObject) { domainObjectClone.getModel().location = self.parent.getId(); } @@ -251,7 +252,7 @@ define( * @returns {promise} Which will resolve with a clone of the object * once complete. */ - CopyTask.prototype.perform = function(){ + CopyTask.prototype.perform = function () { this.deferred = this.$q.defer(); this.buildCopyPlan() @@ -264,4 +265,4 @@ define( return CopyTask; } -); \ No newline at end of file +); diff --git a/platform/entanglement/src/services/LinkService.js b/platform/entanglement/src/services/LinkService.js index 2a99407cdb..a8b2da4401 100644 --- a/platform/entanglement/src/services/LinkService.js +++ b/platform/entanglement/src/services/LinkService.js @@ -67,7 +67,9 @@ define( .then(function (objectInNewContext) { return parentObject.getCapability('persistence') .persist() - .then(function () { return objectInNewContext; }); + .then(function () { + return objectInNewContext; + }); }); }; diff --git a/platform/entanglement/test/ControlledPromise.js b/platform/entanglement/test/ControlledPromise.js index 0b3fcd6cf6..94e32c7f7e 100644 --- a/platform/entanglement/test/ControlledPromise.js +++ b/platform/entanglement/test/ControlledPromise.js @@ -39,8 +39,8 @@ define( * Resolve the promise, passing the supplied value to all resolve * handlers. */ - ControlledPromise.prototype.resolve = function(value) { - this.resolveHandlers.forEach(function(handler) { + ControlledPromise.prototype.resolve = function (value) { + this.resolveHandlers.forEach(function (handler) { handler(value); }); }; @@ -49,8 +49,8 @@ define( * Reject the promise, passing the supplied value to all rejection * handlers. */ - ControlledPromise.prototype.reject = function(value) { - this.rejectHandlers.forEach(function(handler) { + ControlledPromise.prototype.reject = function (value) { + this.rejectHandlers.forEach(function (handler) { handler(value); }); }; @@ -63,11 +63,11 @@ define( var returnPromise = new ControlledPromise(); if (onResolve) { - this.resolveHandlers.push(function(resolveWith) { + this.resolveHandlers.push(function (resolveWith) { var chainResult = onResolve(resolveWith); if (chainResult && chainResult.then) { // chainResult is a promise, resolve when it resolves. - chainResult.then(function(pipedResult) { + chainResult.then(function (pipedResult) { return returnPromise.resolve(pipedResult); }); } else { @@ -77,10 +77,10 @@ define( } if (onReject) { - this.rejectHandlers.push(function(rejectWith) { + this.rejectHandlers.push(function (rejectWith) { var chainResult = onReject(rejectWith); if (chainResult && chainResult.then) { - chainResult.then(function(pipedResult) { + chainResult.then(function (pipedResult) { returnPromise.reject(pipedResult); }); } else { diff --git a/platform/entanglement/test/DomainObjectFactory.js b/platform/entanglement/test/DomainObjectFactory.js index 4a11667084..f3fbe28e87 100644 --- a/platform/entanglement/test/DomainObjectFactory.js +++ b/platform/entanglement/test/DomainObjectFactory.js @@ -153,4 +153,4 @@ define( return domainObjectFactory; } -); \ No newline at end of file +); diff --git a/platform/entanglement/test/actions/AbstractComposeActionSpec.js b/platform/entanglement/test/actions/AbstractComposeActionSpec.js index 18cf0b5560..cfa49cb758 100644 --- a/platform/entanglement/test/actions/AbstractComposeActionSpec.js +++ b/platform/entanglement/test/actions/AbstractComposeActionSpec.js @@ -45,7 +45,7 @@ define( beforeEach(function () { policyService = jasmine.createSpyObj( 'policyService', - [ 'allow' ] + ['allow'] ); selectedObjectContextCapability = jasmine.createSpyObj( diff --git a/platform/entanglement/test/actions/CopyActionSpec.js b/platform/entanglement/test/actions/CopyActionSpec.js index 30a9a18938..176b5baef8 100644 --- a/platform/entanglement/test/actions/CopyActionSpec.js +++ b/platform/entanglement/test/actions/CopyActionSpec.js @@ -51,7 +51,7 @@ define( beforeEach(function () { policyService = jasmine.createSpyObj( 'policyService', - [ 'allow' ] + ['allow'] ); policyService.allow.andReturn(true); @@ -105,12 +105,12 @@ define( ] ); - abstractComposePromise.then.andCallFake(function(success, error, notify){ + abstractComposePromise.then.andCallFake(function (success, error, notify) { notify(progress); success(); }); - locationServicePromise.then.andCallFake(function(callback){ + locationServicePromise.then.andCallFake(function (callback) { callback(newParent); return abstractComposePromise; }); @@ -191,7 +191,7 @@ define( .toHaveBeenCalledWith(selectedObject, newParent); }); - it("notifies the user of progress", function(){ + it("notifies the user of progress", function () { expect(notificationService.info).toHaveBeenCalled(); }); diff --git a/platform/entanglement/test/actions/GoToOriginalActionSpec.js b/platform/entanglement/test/actions/GoToOriginalActionSpec.js index 5c54018157..a05928239c 100644 --- a/platform/entanglement/test/actions/GoToOriginalActionSpec.js +++ b/platform/entanglement/test/actions/GoToOriginalActionSpec.js @@ -40,11 +40,11 @@ define( beforeEach(function () { mockLocationCapability = jasmine.createSpyObj( 'location', - [ 'isLink', 'isOriginal', 'getOriginal' ] + ['isLink', 'isOriginal', 'getOriginal'] ); mockOriginalActionCapability = jasmine.createSpyObj( 'action', - [ 'perform', 'getActions' ] + ['perform', 'getActions'] ); originalPromise = new ControlledPromise(); mockLocationCapability.getOriginal.andReturn(originalPromise); diff --git a/platform/entanglement/test/actions/LinkActionSpec.js b/platform/entanglement/test/actions/LinkActionSpec.js index 563aba0012..fa220831fc 100644 --- a/platform/entanglement/test/actions/LinkActionSpec.js +++ b/platform/entanglement/test/actions/LinkActionSpec.js @@ -45,7 +45,7 @@ define( beforeEach(function () { policyService = jasmine.createSpyObj( 'policyService', - [ 'allow' ] + ['allow'] ); policyService.allow.andReturn(true); diff --git a/platform/entanglement/test/actions/MoveActionSpec.js b/platform/entanglement/test/actions/MoveActionSpec.js index 25957cad2a..10c509ea54 100644 --- a/platform/entanglement/test/actions/MoveActionSpec.js +++ b/platform/entanglement/test/actions/MoveActionSpec.js @@ -45,7 +45,7 @@ define( beforeEach(function () { policyService = jasmine.createSpyObj( 'policyService', - [ 'allow' ] + ['allow'] ); policyService.allow.andReturn(true); diff --git a/platform/entanglement/test/actions/SetPrimaryLocationActionSpec.js b/platform/entanglement/test/actions/SetPrimaryLocationActionSpec.js index ca4c1671ec..fb1d8fa6ef 100644 --- a/platform/entanglement/test/actions/SetPrimaryLocationActionSpec.js +++ b/platform/entanglement/test/actions/SetPrimaryLocationActionSpec.js @@ -40,7 +40,7 @@ define( mockLocationCapability = jasmine.createSpyObj( 'location', - [ 'setPrimaryLocation', 'getContextualLocation' ] + ['setPrimaryLocation', 'getContextualLocation'] ); mockLocationCapability.getContextualLocation.andReturn(testId); diff --git a/platform/entanglement/test/policies/CrossSpacePolicySpec.js b/platform/entanglement/test/policies/CrossSpacePolicySpec.js index 603a956756..ef09a47619 100644 --- a/platform/entanglement/test/policies/CrossSpacePolicySpec.js +++ b/platform/entanglement/test/policies/CrossSpacePolicySpec.js @@ -54,7 +54,7 @@ define( // only define those in mocks. mockAction = jasmine.createSpyObj( 'action', - [ 'getMetadata' ] + ['getMetadata'] ); mockAction.getMetadata.andReturn(testActionMetadata); diff --git a/platform/entanglement/test/services/CopyServiceSpec.js b/platform/entanglement/test/services/CopyServiceSpec.js index c036de1ec6..a392b59b03 100644 --- a/platform/entanglement/test/services/CopyServiceSpec.js +++ b/platform/entanglement/test/services/CopyServiceSpec.js @@ -145,12 +145,12 @@ define( instantiationCapability = jasmine.createSpyObj( "instantiation", - [ "invoke" ] + ["invoke"] ); persistenceCapability = jasmine.createSpyObj( "persistenceCapability", - [ "persist", "getSpace" ] + ["persist", "getSpace"] ); persistenceCapability.persist.andReturn(persistObjectPromise); @@ -170,10 +170,12 @@ define( 'mockDeferred', ['notify', 'resolve', 'reject'] ); - mockDeferred.notify.andCallFake(function(){}); - mockDeferred.resolve.andCallFake(function(value){resolvedValue = value;}); + mockDeferred.notify.andCallFake(function () {}); + mockDeferred.resolve.andCallFake(function (value) { + resolvedValue = value; + }); mockDeferred.promise = { - then: function(callback){ + then: function (callback) { return synchronousPromise(callback(resolvedValue)); } }; @@ -187,12 +189,14 @@ define( mockQ.all.andCallFake(function (promises) { var result = {}; Object.keys(promises).forEach(function (k) { - promises[k].then(function (v) { result[k] = v; }); + promises[k].then(function (v) { + result[k] = v; + }); }); return synchronousPromise(result); }); mockQ.defer.andReturn(mockDeferred); - + }); describe("on domain object without composition", function () { @@ -238,7 +242,7 @@ define( }); instantiationCapability.invoke.andCallFake( - function(model){ + function (model) { objectCopy.model = model; return objectCopy; } @@ -254,7 +258,7 @@ define( expect(persistenceCapability.persist) .toHaveBeenCalled(); }); - + it("deep clones object model", function () { var newModel = copyFinished.calls[0].args[0].getModel(); expect(newModel).toEqual(object.model); @@ -279,7 +283,7 @@ define( objectClones; instantiationCapability.invoke.andCallFake( - function(model){ + function (model) { var cloneToReturn = objectClones[invocationCount++]; cloneToReturn.model = model; return cloneToReturn; @@ -362,8 +366,8 @@ define( copyService = new CopyService(mockQ, policyService); }); - describe("the cloning process", function(){ - beforeEach(function() { + describe("the cloning process", function () { + beforeEach(function () { copyResult = copyService.perform(object, newParent); copyFinished = jasmine.createSpy('copyFinished'); copyResult.then(copyFinished); @@ -379,23 +383,23 @@ define( expect(copyFinished).toHaveBeenCalled(); }); - it ("correctly locates cloned objects", function() { + it ("correctly locates cloned objects", function () { expect(childObjectClone.getModel().location).toEqual(objectClone.getId()); }); }); - describe("when cloning non-creatable objects", function() { + describe("when cloning non-creatable objects", function () { beforeEach(function () { - policyService.allow.andCallFake(function(category){ + policyService.allow.andCallFake(function (category) { //Return false for 'creation' policy - return category !== 'creation'; + return category !== 'creation'; }); copyResult = copyService.perform(object, newParent); copyFinished = jasmine.createSpy('copyFinished'); copyResult.then(copyFinished); }); - it ("creates link instead of clone", function() { + it ("creates link instead of clone", function () { var copiedObject = copyFinished.calls[0].args[0]; expect(copiedObject).toBe(object); expect(compositionCapability.add) @@ -412,7 +416,7 @@ define( } it("does not create new instances of objects " + - "rejected by the filter", function() { + "rejected by the filter", function () { copyService.perform(object, newParent, reject) .then(copyFinished); expect(copyFinished.mostRecentCall.args[0]) @@ -420,7 +424,7 @@ define( }); it("does create new instances of objects " + - "accepted by the filter", function() { + "accepted by the filter", function () { copyService.perform(object, newParent, accept) .then(copyFinished); expect(copyFinished.mostRecentCall.args[0]) diff --git a/platform/entanglement/test/services/CopyTaskSpec.js b/platform/entanglement/test/services/CopyTaskSpec.js index 32302edb04..9111b08c4c 100644 --- a/platform/entanglement/test/services/CopyTaskSpec.js +++ b/platform/entanglement/test/services/CopyTaskSpec.js @@ -100,11 +100,11 @@ define( cloneIds = {}; testModel = { - composition: [ ID_A, ID_B ], + composition: [ID_A, ID_B], someObj: {}, - someArr: [ ID_A, ID_B ], + someArr: [ID_A, ID_B], objArr: [{"id": ID_A}, {"id": ID_B}], - singleElementArr: [ ID_A ] + singleElementArr: [ID_A] }; testModel.someObj[ID_A] = "some value"; testModel.someObj.someProperty = ID_B; @@ -120,7 +120,7 @@ define( mockQ = jasmine.createSpyObj('$q', ['when', 'defer', 'all']); mockDeferred = jasmine.createSpyObj( 'deferred', - [ 'notify', 'resolve', 'reject' ] + ['notify', 'resolve', 'reject'] ); mockFilter.andReturn(true); @@ -130,7 +130,9 @@ define( mockQ.all.andCallFake(function (promises) { return synchronousPromise(promises.map(function (promise) { var value; - promise.then(function (v) { value = v; }); + promise.then(function (v) { + value = v; + }); return value; })); }); diff --git a/platform/entanglement/test/services/LocatingObjectDecoratorSpec.js b/platform/entanglement/test/services/LocatingObjectDecoratorSpec.js index 8a66be5134..35412510c7 100644 --- a/platform/entanglement/test/services/LocatingObjectDecoratorSpec.js +++ b/platform/entanglement/test/services/LocatingObjectDecoratorSpec.js @@ -76,7 +76,9 @@ define( mockQ.all.andCallFake(function (promises) { var result = {}; Object.keys(promises).forEach(function (k) { - promises[k].then(function (v) { result[k] = v; }); + promises[k].then(function (v) { + result[k] = v; + }); }); return testPromise(result); }); @@ -88,7 +90,7 @@ define( Object.keys(testModels).forEach(function (id) { testObjects[id] = jasmine.createSpyObj( "domainObject-" + id, - [ "getId", "getModel", "getCapability" ] + ["getId", "getModel", "getCapability"] ); testObjects[id].getId.andReturn(id); testObjects[id].getModel.andReturn(testModels[id]); diff --git a/platform/entanglement/test/services/LocationServiceSpec.js b/platform/entanglement/test/services/LocationServiceSpec.js index 03c551fd2e..951baa71ac 100644 --- a/platform/entanglement/test/services/LocationServiceSpec.js +++ b/platform/entanglement/test/services/LocationServiceSpec.js @@ -63,7 +63,9 @@ define( beforeEach(function () { title = "Get a location to do something"; label = "a location"; - validate = function () { return true; }; + validate = function () { + return true; + }; initialLocation = { key: "a key" }; locationResult = locationService.getLocationFromUser( title, diff --git a/platform/exporters/ExportService.js b/platform/exporters/ExportService.js index cebe2b7116..05263eba9f 100644 --- a/platform/exporters/ExportService.js +++ b/platform/exporters/ExportService.js @@ -61,7 +61,7 @@ define(['csv'], function (CSV) { (Object.keys((rows[0] || {})).sort()), filename = (options && options.filename) || "export.csv", csvText = new CSV(rows, { header: headers }).encode(), - blob = new Blob([ csvText ] , { type: "text/csv" }); + blob = new Blob([csvText], { type: "text/csv" }); this.saveAs(blob, filename); }; diff --git a/platform/exporters/ExportServiceSpec.js b/platform/exporters/ExportServiceSpec.js index a984ebf818..f70a408274 100644 --- a/platform/exporters/ExportServiceSpec.js +++ b/platform/exporters/ExportServiceSpec.js @@ -45,7 +45,7 @@ define( mockSaveAs.andCallFake(function (blob) { var reader = new FileReader(); reader.onloadend = function () { - csvContents = new CSV(reader.result).parse(); + csvContents = new CSV(reader.result).parse(); }; reader.readAsText(blob); }); @@ -86,7 +86,7 @@ define( var testHeaders; beforeEach(function () { - testHeaders = [ 'a', 'b' ]; + testHeaders = ['a', 'b']; exportService .exportCSV(testRows, { headers: testHeaders }); waitsFor(finishedReadingCSV); @@ -139,4 +139,4 @@ define( }); } -); \ No newline at end of file +); diff --git a/platform/features/clock/src/actions/RestartTimerAction.js b/platform/features/clock/src/actions/RestartTimerAction.js index 30b785b332..5ddcd002c7 100644 --- a/platform/features/clock/src/actions/RestartTimerAction.js +++ b/platform/features/clock/src/actions/RestartTimerAction.js @@ -39,7 +39,7 @@ define( * @param {ActionContext} context the context for this action */ function RestartTimerAction(now, context) { - AbstractStartTimerAction.apply(this, [ now, context ]); + AbstractStartTimerAction.apply(this, [now, context]); } RestartTimerAction.prototype = diff --git a/platform/features/clock/src/actions/StartTimerAction.js b/platform/features/clock/src/actions/StartTimerAction.js index 25aff8ac2a..d683ec190b 100644 --- a/platform/features/clock/src/actions/StartTimerAction.js +++ b/platform/features/clock/src/actions/StartTimerAction.js @@ -39,7 +39,7 @@ define( * @param {ActionContext} context the context for this action */ function StartTimerAction(now, context) { - AbstractStartTimerAction.apply(this, [ now, context ]); + AbstractStartTimerAction.apply(this, [now, context]); } StartTimerAction.prototype = diff --git a/platform/features/clock/test/actions/AbstractStartTimerActionSpec.js b/platform/features/clock/test/actions/AbstractStartTimerActionSpec.js index 546c348786..bc72a00f46 100644 --- a/platform/features/clock/test/actions/AbstractStartTimerActionSpec.js +++ b/platform/features/clock/test/actions/AbstractStartTimerActionSpec.js @@ -43,7 +43,7 @@ define( mockNow = jasmine.createSpy('now'); mockDomainObject = jasmine.createSpyObj( 'domainObject', - [ 'getCapability', 'useCapability' ] + ['getCapability', 'useCapability'] ); mockPersistence = jasmine.createSpyObj( 'persistence', diff --git a/platform/features/clock/test/actions/RestartTimerActionSpec.js b/platform/features/clock/test/actions/RestartTimerActionSpec.js index 72d955b79a..1c98037380 100644 --- a/platform/features/clock/test/actions/RestartTimerActionSpec.js +++ b/platform/features/clock/test/actions/RestartTimerActionSpec.js @@ -44,7 +44,7 @@ define( mockNow = jasmine.createSpy('now'); mockDomainObject = jasmine.createSpyObj( 'domainObject', - [ 'getCapability', 'useCapability', 'getModel' ] + ['getCapability', 'useCapability', 'getModel'] ); mockPersistence = jasmine.createSpyObj( 'persistence', diff --git a/platform/features/clock/test/actions/StartTimerActionSpec.js b/platform/features/clock/test/actions/StartTimerActionSpec.js index 25e0fdfac7..67d6438eb2 100644 --- a/platform/features/clock/test/actions/StartTimerActionSpec.js +++ b/platform/features/clock/test/actions/StartTimerActionSpec.js @@ -44,7 +44,7 @@ define( mockNow = jasmine.createSpy('now'); mockDomainObject = jasmine.createSpyObj( 'domainObject', - [ 'getCapability', 'useCapability', 'getModel' ] + ['getCapability', 'useCapability', 'getModel'] ); mockPersistence = jasmine.createSpyObj( 'persistence', diff --git a/platform/features/clock/test/controllers/RefreshingControllerSpec.js b/platform/features/clock/test/controllers/RefreshingControllerSpec.js index cf34b46e68..c343575c55 100644 --- a/platform/features/clock/test/controllers/RefreshingControllerSpec.js +++ b/platform/features/clock/test/controllers/RefreshingControllerSpec.js @@ -45,11 +45,11 @@ define( it("refreshes the represented object on every tick", function () { var mockDomainObject = jasmine.createSpyObj( 'domainObject', - [ 'getCapability' ] + ['getCapability'] ), mockPersistence = jasmine.createSpyObj( 'persistence', - [ 'persist', 'refresh' ] + ['persist', 'refresh'] ); mockDomainObject.getCapability.andCallFake(function (c) { diff --git a/platform/features/clock/test/controllers/TimerControllerSpec.js b/platform/features/clock/test/controllers/TimerControllerSpec.js index 00766f9f95..79c64f941d 100644 --- a/platform/features/clock/test/controllers/TimerControllerSpec.js +++ b/platform/features/clock/test/controllers/TimerControllerSpec.js @@ -57,7 +57,7 @@ define( ); mockDomainObject = jasmine.createSpyObj( 'domainObject', - [ 'getCapability', 'useCapability', 'getModel' ] + ['getCapability', 'useCapability', 'getModel'] ); mockActionCapability = jasmine.createSpyObj( 'action', diff --git a/platform/features/conductor/test/ConductorRepresenterSpec.js b/platform/features/conductor/test/ConductorRepresenterSpec.js index 20647e91e8..83d37fb8a6 100644 --- a/platform/features/conductor/test/ConductorRepresenterSpec.js +++ b/platform/features/conductor/test/ConductorRepresenterSpec.js @@ -70,7 +70,7 @@ define( ['getConductor'] ); mockCompile = jasmine.createSpy('$compile'); - testViews = [ { someKey: "some value" } ]; + testViews = [{ someKey: "some value" }]; mockScope = jasmine.createSpyObj('scope', SCOPE_METHODS); mockElement = jasmine.createSpyObj('element', ELEMENT_METHODS); mockElement.parent.andReturn(mockElement); diff --git a/platform/features/conductor/test/ConductorTelemetryDecoratorSpec.js b/platform/features/conductor/test/ConductorTelemetryDecoratorSpec.js index aa7757423b..e31ec32080 100644 --- a/platform/features/conductor/test/ConductorTelemetryDecoratorSpec.js +++ b/platform/features/conductor/test/ConductorTelemetryDecoratorSpec.js @@ -36,7 +36,7 @@ define( beforeEach(function () { mockTelemetryService = jasmine.createSpyObj( 'telemetryService', - [ 'requestTelemetry', 'subscribe' ] + ['requestTelemetry', 'subscribe'] ); mockConductorService = jasmine.createSpyObj( 'conductorService', @@ -49,7 +49,7 @@ define( ); mockSeries = jasmine.createSpyObj( 'series', - [ 'getPointCount', 'getDomainValue', 'getRangeValue' ] + ['getPointCount', 'getDomainValue', 'getRangeValue'] ); mockTelemetryService.requestTelemetry.andReturn(mockPromise); diff --git a/platform/features/imagery/test/directives/MCTBackgroundImageSpec.js b/platform/features/imagery/test/directives/MCTBackgroundImageSpec.js index 75458b39e3..172708bcdf 100644 --- a/platform/features/imagery/test/directives/MCTBackgroundImageSpec.js +++ b/platform/features/imagery/test/directives/MCTBackgroundImageSpec.js @@ -36,7 +36,7 @@ define( jasmine.createSpyObj('document', ['createElement']) ]; mockScope = jasmine.createSpyObj('scope', ['$watch']); - mockElement = jasmine.createSpyObj('element', [ 'css' ]); + mockElement = jasmine.createSpyObj('element', ['css']); testImage = {}; mockDocument[0].createElement.andReturn(testImage); diff --git a/platform/features/imagery/test/policies/ImageryViewPolicySpec.js b/platform/features/imagery/test/policies/ImageryViewPolicySpec.js index bec634fee6..e4eaddb842 100644 --- a/platform/features/imagery/test/policies/ImageryViewPolicySpec.js +++ b/platform/features/imagery/test/policies/ImageryViewPolicySpec.js @@ -51,24 +51,24 @@ define( }); it("allows the imagery view for domain objects with image telemetry", function () { - testMetadata.ranges = [ { key: "foo", format: "imageUrl" } ]; + testMetadata.ranges = [{ key: "foo", format: "imageUrl" }]; expect(policy.allow(testView, mockDomainObject)).toBeTruthy(); }); it("disallows the imagery view for domain objects without image telemetry", function () { - testMetadata.ranges = [ { key: "foo", format: "somethingElse" } ]; + testMetadata.ranges = [{ key: "foo", format: "somethingElse" }]; expect(policy.allow(testView, mockDomainObject)).toBeFalsy(); }); it("disallows the imagery view for domain objects without telemetry", function () { - testMetadata.ranges = [ { key: "foo", format: "imageUrl" } ]; + testMetadata.ranges = [{ key: "foo", format: "imageUrl" }]; mockDomainObject.getCapability.andReturn(undefined); expect(policy.allow(testView, mockDomainObject)).toBeFalsy(); }); it("allows other views", function () { testView.key = "somethingElse"; - testMetadata.ranges = [ { key: "foo", format: "somethingElse" } ]; + testMetadata.ranges = [{ key: "foo", format: "somethingElse" }]; expect(policy.allow(testView, mockDomainObject)).toBeTruthy(); }); diff --git a/platform/features/layout/src/FixedController.js b/platform/features/layout/src/FixedController.js index 8a3bfd9d7e..b154f5f161 100644 --- a/platform/features/layout/src/FixedController.js +++ b/platform/features/layout/src/FixedController.js @@ -24,7 +24,7 @@ define( ['./FixedProxy', './elements/ElementProxies', './FixedDragHandle'], function (FixedProxy, ElementProxies, FixedDragHandle) { - var DEFAULT_DIMENSIONS = [ 2, 1 ], + var DEFAULT_DIMENSIONS = [2, 1], DEFAULT_GRID_SIZE = [64, 16]; /** @@ -277,7 +277,7 @@ define( if (e.defaultPrevented) { return; } - if (editableDomainObject){ + if (editableDomainObject) { $scope.setEditable(editableDomainObject); } e.preventDefault(); diff --git a/platform/features/layout/src/FixedDragHandle.js b/platform/features/layout/src/FixedDragHandle.js index 96516e9cc8..3b4e14663a 100644 --- a/platform/features/layout/src/FixedDragHandle.js +++ b/platform/features/layout/src/FixedDragHandle.js @@ -26,7 +26,7 @@ define( // Drag handle dimensions - var DRAG_HANDLE_SIZE = [ 6, 6 ]; + var DRAG_HANDLE_SIZE = [6, 6]; /** * Template-displayable drag handle for an element in fixed diff --git a/platform/features/layout/src/LayoutController.js b/platform/features/layout/src/LayoutController.js index a7e3900696..496ee9d1a6 100644 --- a/platform/features/layout/src/LayoutController.js +++ b/platform/features/layout/src/LayoutController.js @@ -29,9 +29,9 @@ define( ['./LayoutDrag'], function (LayoutDrag) { - var DEFAULT_DIMENSIONS = [ 12, 8 ], - DEFAULT_GRID_SIZE = [ 32, 32 ], - MINIMUM_FRAME_SIZE = [ 320, 180 ]; + var DEFAULT_DIMENSIONS = [12, 8], + DEFAULT_GRID_SIZE = [32, 32], + MINIMUM_FRAME_SIZE = [320, 180]; /** * The LayoutController is responsible for supporting the @@ -66,7 +66,7 @@ define( if (e.defaultPrevented) { return; } - if (editableDomainObject){ + if (editableDomainObject) { $scope.setEditable(editableDomainObject); } // Ensure that configuration field is populated @@ -103,12 +103,12 @@ define( //Keep a track of how many composition callbacks have been made var thisCount = ++callbackCount; - $scope.domainObject.useCapability('composition').then(function(composition){ + $scope.domainObject.useCapability('composition').then(function (composition) { var ids; //Is this callback for the most recent composition // request? If not, discard it. Prevents race condition - if (thisCount === callbackCount){ + if (thisCount === callbackCount) { ids = composition.map(function (object) { return object.getId(); }) || []; diff --git a/platform/features/layout/src/elements/ElementProxy.js b/platform/features/layout/src/elements/ElementProxy.js index 66f3f35985..75ed061085 100644 --- a/platform/features/layout/src/elements/ElementProxy.js +++ b/platform/features/layout/src/elements/ElementProxy.js @@ -54,7 +54,7 @@ define( * @param {Array} elements the full array of elements */ function ElementProxy(element, index, elements) { - this.resizeHandles = [ new ResizeHandle(element, 1, 1) ]; + this.resizeHandles = [new ResizeHandle(element, 1, 1)]; /** * The element as stored in the view configuration. diff --git a/platform/features/layout/test/FixedControllerSpec.js b/platform/features/layout/test/FixedControllerSpec.js index 10f723a81e..ff939a21c9 100644 --- a/platform/features/layout/test/FixedControllerSpec.js +++ b/platform/features/layout/test/FixedControllerSpec.js @@ -64,7 +64,7 @@ define( function makeMockDomainObject(id) { var mockObject = jasmine.createSpyObj( 'domainObject-' + id, - [ 'getId', 'getModel', 'getCapability' ] + ['getId', 'getModel', 'getCapability'] ); mockObject.getId.andReturn(id); mockObject.getModel.andReturn({ name: "Point " + id}); @@ -74,11 +74,11 @@ define( beforeEach(function () { mockScope = jasmine.createSpyObj( '$scope', - [ "$on", "$watch", "commit" ] + ["$on", "$watch", "commit"] ); mockHandler = jasmine.createSpyObj( 'telemetryHandler', - [ 'handle' ] + ['handle'] ); mockQ = jasmine.createSpyObj('$q', ['when']); mockDialogService = jasmine.createSpyObj( @@ -87,11 +87,11 @@ define( ); mockFormatter = jasmine.createSpyObj( 'telemetryFormatter', - [ 'formatDomainValue', 'formatRangeValue' ] + ['formatDomainValue', 'formatRangeValue'] ); mockDomainObject = jasmine.createSpyObj( 'domainObject', - [ 'getId', 'getModel', 'getCapability' ] + ['getId', 'getModel', 'getCapability'] ); mockHandle = jasmine.createSpyObj( 'subscription', @@ -106,10 +106,10 @@ define( ); mockEvent = jasmine.createSpyObj( 'event', - [ 'preventDefault' ] + ['preventDefault'] ); - testGrid = [ 123, 456 ]; + testGrid = [123, 456]; testModel = { composition: ['a', 'b', 'c'], layoutGrid: testGrid @@ -136,7 +136,7 @@ define( mockScope.configuration = testConfiguration; mockScope.selection = jasmine.createSpyObj( 'selection', - [ 'select', 'get', 'selected', 'deselect', 'proxy' ] + ['select', 'get', 'selected', 'deselect', 'proxy'] ); controller = new FixedController( @@ -418,7 +418,7 @@ define( expect(controller.selected().style).toEqual(oldStyle); // Drag a little - controller.moveHandle().continueDrag([ 1000, 100 ]); + controller.moveHandle().continueDrag([1000, 100]); // Style should have been updated expect(controller.selected().style).not.toEqual(oldStyle); diff --git a/platform/features/layout/test/FixedDragHandleSpec.js b/platform/features/layout/test/FixedDragHandleSpec.js index 974494ee1c..2cbaca1746 100644 --- a/platform/features/layout/test/FixedDragHandleSpec.js +++ b/platform/features/layout/test/FixedDragHandleSpec.js @@ -24,7 +24,7 @@ define( ['../src/FixedDragHandle'], function (FixedDragHandle) { - var TEST_GRID_SIZE = [ 13, 33 ]; + var TEST_GRID_SIZE = [13, 33]; describe("A fixed position drag handle", function () { var mockElementHandle, @@ -35,7 +35,7 @@ define( beforeEach(function () { mockElementHandle = jasmine.createSpyObj( 'elementHandle', - [ 'x', 'y' ] + ['x', 'y'] ); mockUpdate = jasmine.createSpy('update'); mockCommit = jasmine.createSpy('commit'); @@ -61,13 +61,13 @@ define( it("allows handles to be dragged", function () { handle.startDrag(); - handle.continueDrag([ 16, 8 ]); + handle.continueDrag([16, 8]); // Should update x/y, snapped to grid expect(mockElementHandle.x).toHaveBeenCalledWith(7); expect(mockElementHandle.y).toHaveBeenCalledWith(8); - handle.continueDrag([ -16, -35 ]); + handle.continueDrag([-16, -35]); // Should have interpreted relative to initial state expect(mockElementHandle.x).toHaveBeenCalledWith(5); @@ -84,4 +84,4 @@ define( }); } -); \ No newline at end of file +); diff --git a/platform/features/layout/test/LayoutControllerSpec.js b/platform/features/layout/test/LayoutControllerSpec.js index ebd778cb7e..06ff8b80f0 100644 --- a/platform/features/layout/test/LayoutControllerSpec.js +++ b/platform/features/layout/test/LayoutControllerSpec.js @@ -34,7 +34,7 @@ define( mockComposition, mockCompositionObjects; - function mockPromise(value){ + function mockPromise(value) { return { then: function (thenFunc) { return mockPromise(thenFunc(value)); @@ -42,12 +42,12 @@ define( }; } - function mockDomainObject(id){ + function mockDomainObject(id) { return { - getId: function() { + getId: function () { return id; }, - useCapability: function() { + useCapability: function () { return mockCompositionCapability; } }; @@ -56,11 +56,11 @@ define( beforeEach(function () { mockScope = jasmine.createSpyObj( "$scope", - [ "$watch", "$watchCollection", "$on", "commit" ] + ["$watch", "$watchCollection", "$on", "commit"] ); mockEvent = jasmine.createSpyObj( 'event', - [ 'preventDefault' ] + ['preventDefault'] ); testModel = {}; @@ -238,7 +238,7 @@ define( var styleB; // Start with a very small frame size - testModel.layoutGrid = [ 1, 1 ]; + testModel.layoutGrid = [1, 1]; // White-boxy; we know which watch is which mockScope.$watch.calls[0].args[1](testModel.layoutGrid); @@ -255,7 +255,7 @@ define( var style; // Start with a very small frame size - testModel.layoutGrid = [ 1, 1 ]; + testModel.layoutGrid = [1, 1]; mockScope.$watch.calls[0].args[1](testModel.layoutGrid); // Notify that a drop occurred diff --git a/platform/features/layout/test/LayoutDragSpec.js b/platform/features/layout/test/LayoutDragSpec.js index 6309fbc13c..23503bd16d 100644 --- a/platform/features/layout/test/LayoutDragSpec.js +++ b/platform/features/layout/test/LayoutDragSpec.js @@ -26,56 +26,56 @@ define( describe("A Layout drag handler", function () { var testPosition = { - position: [ 8, 11 ], - dimensions: [ 3, 2 ] + position: [8, 11], + dimensions: [3, 2] }; it("changes position by a supplied factor, rounding by grid size", function () { var handler = new LayoutDrag( testPosition, - [ 1, 1 ], - [ 0, 0 ], - [ 10, 20 ] + [1, 1], + [0, 0], + [10, 20] ); - expect(handler.getAdjustedPosition([ 37, 84 ])).toEqual({ - position: [ 12, 15 ], - dimensions: [ 3, 2 ] + expect(handler.getAdjustedPosition([37, 84])).toEqual({ + position: [12, 15], + dimensions: [3, 2] }); - expect(handler.getAdjustedPosition([ -37, 84 ])).toEqual({ - position: [ 4, 15 ], - dimensions: [ 3, 2 ] + expect(handler.getAdjustedPosition([-37, 84])).toEqual({ + position: [4, 15], + dimensions: [3, 2] }); }); it("changes dimensions by a supplied factor, rounding by grid size", function () { var handler = new LayoutDrag( testPosition, - [ 0, 0 ], - [ 1, 1 ], - [ 10, 20 ] + [0, 0], + [1, 1], + [10, 20] ); - expect(handler.getAdjustedPosition([ 37, 84 ])).toEqual({ - position: [ 8, 11 ], - dimensions: [ 7, 6 ] + expect(handler.getAdjustedPosition([37, 84])).toEqual({ + position: [8, 11], + dimensions: [7, 6] }); }); it("allows mixing dimension and position factors", function () { var handler = new LayoutDrag( testPosition, - [ 0, 1 ], - [ -1, 0 ], - [ 10, 20 ] + [0, 1], + [-1, 0], + [10, 20] ); - expect(handler.getAdjustedPosition([ 11, 84 ])).toEqual({ - position: [ 8, 15 ], - dimensions: [ 2, 2 ] + expect(handler.getAdjustedPosition([11, 84])).toEqual({ + position: [8, 15], + dimensions: [2, 2] }); }); }); } -); \ No newline at end of file +); diff --git a/platform/features/layout/test/elements/BoxProxySpec.js b/platform/features/layout/test/elements/BoxProxySpec.js index a0d2ac0ab7..620095619a 100644 --- a/platform/features/layout/test/elements/BoxProxySpec.js +++ b/platform/features/layout/test/elements/BoxProxySpec.js @@ -37,7 +37,7 @@ define( height: 24, fill: "transparent" }; - testElements = [ {}, {}, testElement, {} ]; + testElements = [{}, {}, testElement, {}]; proxy = new BoxProxy( testElement, testElements.indexOf(testElement), diff --git a/platform/features/layout/test/elements/ElementFactorySpec.js b/platform/features/layout/test/elements/ElementFactorySpec.js index bcd9768cea..36c9fa9b7a 100644 --- a/platform/features/layout/test/elements/ElementFactorySpec.js +++ b/platform/features/layout/test/elements/ElementFactorySpec.js @@ -24,8 +24,8 @@ define( ['../../src/elements/ElementFactory'], function (ElementFactory) { - var DIALOG_ELEMENTS = [ 'image', 'text' ], - NON_DIALOG_ELEMENTS = [ 'box', 'line' ]; + var DIALOG_ELEMENTS = ['image', 'text'], + NON_DIALOG_ELEMENTS = ['box', 'line']; describe("The fixed position element factory", function () { var mockDialogService, @@ -35,11 +35,11 @@ define( beforeEach(function () { mockDialogService = jasmine.createSpyObj( 'dialogService', - [ 'getUserInput' ] + ['getUserInput'] ); mockPromise = jasmine.createSpyObj( 'promise', - [ 'then' ] + ['then'] ); mockDialogService.getUserInput.andReturn(mockPromise); @@ -66,4 +66,4 @@ define( }); }); } -); \ No newline at end of file +); diff --git a/platform/features/layout/test/elements/ElementProxySpec.js b/platform/features/layout/test/elements/ElementProxySpec.js index acbaf3f4cf..5c7a5e5183 100644 --- a/platform/features/layout/test/elements/ElementProxySpec.js +++ b/platform/features/layout/test/elements/ElementProxySpec.js @@ -37,7 +37,7 @@ define( width: 42, height: 24 }; - testElements = [ {}, {}, testElement, {} ]; + testElements = [{}, {}, testElement, {}]; proxy = new ElementProxy( testElement, testElements.indexOf(testElement), diff --git a/platform/features/layout/test/elements/ImageProxySpec.js b/platform/features/layout/test/elements/ImageProxySpec.js index 81f1a3f3ab..2e77cfe543 100644 --- a/platform/features/layout/test/elements/ImageProxySpec.js +++ b/platform/features/layout/test/elements/ImageProxySpec.js @@ -37,7 +37,7 @@ define( height: 24, url: "http://www.nasa.gov" }; - testElements = [ {}, {}, testElement, {} ]; + testElements = [{}, {}, testElement, {}]; proxy = new ImageProxy( testElement, testElements.indexOf(testElement), diff --git a/platform/features/layout/test/elements/LineHandleSpec.js b/platform/features/layout/test/elements/LineHandleSpec.js index a113cdef55..5f682029d7 100644 --- a/platform/features/layout/test/elements/LineHandleSpec.js +++ b/platform/features/layout/test/elements/LineHandleSpec.js @@ -70,4 +70,4 @@ define( }); } -); \ No newline at end of file +); diff --git a/platform/features/layout/test/elements/LineProxySpec.js b/platform/features/layout/test/elements/LineProxySpec.js index 15d604ae25..14ba0a790e 100644 --- a/platform/features/layout/test/elements/LineProxySpec.js +++ b/platform/features/layout/test/elements/LineProxySpec.js @@ -92,4 +92,4 @@ define( }); } -); \ No newline at end of file +); diff --git a/platform/features/layout/test/elements/ResizeHandleSpec.js b/platform/features/layout/test/elements/ResizeHandleSpec.js index c48218a667..48ffed0ae3 100644 --- a/platform/features/layout/test/elements/ResizeHandleSpec.js +++ b/platform/features/layout/test/elements/ResizeHandleSpec.js @@ -75,4 +75,4 @@ define( }); } -); \ No newline at end of file +); diff --git a/platform/features/layout/test/elements/TelemetryProxySpec.js b/platform/features/layout/test/elements/TelemetryProxySpec.js index 1044dc36b3..e68c6bf173 100644 --- a/platform/features/layout/test/elements/TelemetryProxySpec.js +++ b/platform/features/layout/test/elements/TelemetryProxySpec.js @@ -38,7 +38,7 @@ define( height: 24, id: "test-id" }; - testElements = [ {}, {}, testElement, {} ]; + testElements = [{}, {}, testElement, {}]; proxy = new TelemetryProxy( testElement, testElements.indexOf(testElement), diff --git a/platform/features/layout/test/elements/TextProxySpec.js b/platform/features/layout/test/elements/TextProxySpec.js index dbabc568cf..eb808d5867 100644 --- a/platform/features/layout/test/elements/TextProxySpec.js +++ b/platform/features/layout/test/elements/TextProxySpec.js @@ -37,7 +37,7 @@ define( height: 24, fill: "transparent" }; - testElements = [ {}, {}, testElement, {} ]; + testElements = [{}, {}, testElement, {}]; proxy = new TextProxy( testElement, testElements.indexOf(testElement), diff --git a/platform/features/plot/src/Canvas2DChart.js b/platform/features/plot/src/Canvas2DChart.js index 8fdca3a9c2..7ed9e0982b 100644 --- a/platform/features/plot/src/Canvas2DChart.js +++ b/platform/features/plot/src/Canvas2DChart.js @@ -38,8 +38,8 @@ define( this.c2d = canvas.getContext('2d'); this.width = canvas.width; this.height = canvas.height; - this.dimensions = [ this.width, this.height ]; - this.origin = [ 0, 0 ]; + this.dimensions = [this.width, this.height]; + this.origin = [0, 0]; if (!this.c2d) { throw new Error("Canvas 2d API unavailable."); diff --git a/platform/features/plot/src/PlotOptionsController.js b/platform/features/plot/src/PlotOptionsController.js index d12fcae762..4ab0ee2aa7 100644 --- a/platform/features/plot/src/PlotOptionsController.js +++ b/platform/features/plot/src/PlotOptionsController.js @@ -57,7 +57,7 @@ define( Listen for changes to the domain object and update the object's children. */ - this.mutationListener = this.domainObject.getCapability('mutation').listen(function(model) { + this.mutationListener = this.domainObject.getCapability('mutation').listen(function (model) { if (self.hasCompositionChanged(self.composition, model.composition)) { self.updateChildren(); } @@ -70,7 +70,7 @@ define( $scope.xAxisForm = this.plotOptionsForm.xAxisForm; $scope.yAxisForm = this.plotOptionsForm.yAxisForm; - $scope.$on("$destroy", function() { + $scope.$on("$destroy", function () { //Clean up any listeners on destruction of controller self.mutationListener(); }); @@ -82,10 +82,10 @@ define( * Setup a number of watches for changes to form values. On * change, update the model configuration via mutation */ - $scope.$watchCollection('configuration.plot.yAxis', function(newValue, oldValue){ + $scope.$watchCollection('configuration.plot.yAxis', function (newValue, oldValue) { self.updateConfiguration(newValue, oldValue); }); - $scope.$watchCollection('configuration.plot.xAxis', function(newValue, oldValue){ + $scope.$watchCollection('configuration.plot.xAxis', function (newValue, oldValue) { self.updateConfiguration(newValue, oldValue); }); @@ -98,8 +98,8 @@ define( * child objects) * @private */ - PlotOptionsController.prototype.clearSeriesWatches = function() { - this.watches.forEach(function(watch) { + PlotOptionsController.prototype.clearSeriesWatches = function () { + this.watches.forEach(function (watch) { watch(); }); this.watches = []; @@ -109,16 +109,16 @@ define( * Attach watches for each object in the plot's composition * @private */ - PlotOptionsController.prototype.watchSeries = function() { + PlotOptionsController.prototype.watchSeries = function () { var self = this; this.clearSeriesWatches(); - (self.$scope.children || []).forEach(function(child, index){ + (self.$scope.children || []).forEach(function (child, index) { self.watches.push( self.$scope.$watchCollection( 'configuration.plot.series[' + index + ']', - function(newValue, oldValue){ + function (newValue, oldValue) { self.updateConfiguration(newValue, oldValue); } ) @@ -132,13 +132,13 @@ define( * * @private */ - PlotOptionsController.prototype.hasCompositionChanged = function(oldComposition, newComposition){ + PlotOptionsController.prototype.hasCompositionChanged = function (oldComposition, newComposition) { // Framed slightly strangely, but the boolean logic is // easier to follow for the unchanged case. var isUnchanged = oldComposition === newComposition || ( oldComposition.length === newComposition.length && - oldComposition.every( function (currentValue, index) { + oldComposition.every(function (currentValue, index) { return newComposition[index] && currentValue === newComposition[index]; }) ); @@ -163,12 +163,12 @@ define( * plot options model * @private */ - PlotOptionsController.prototype.updateChildren = function() { + PlotOptionsController.prototype.updateChildren = function () { var self = this; - this.domainObject.useCapability('composition').then(function(children){ + this.domainObject.useCapability('composition').then(function (children) { self.$scope.children = children; self.composition = self.domainObject.getModel().composition; - children.forEach(function(child, index){ + children.forEach(function (child, index) { self.configuration.plot.series[index] = self.configuration.plot.series[index] || {'id': child.getId()}; }); @@ -181,9 +181,9 @@ define( * object * @private */ - PlotOptionsController.prototype.updateConfiguration = function() { + PlotOptionsController.prototype.updateConfiguration = function () { var self = this; - this.domainObject.useCapability('mutation', function(model){ + this.domainObject.useCapability('mutation', function (model) { model.configuration = model.configuration || {}; model.configuration.plot = self.configuration.plot; }); diff --git a/platform/features/plot/src/PlotOptionsForm.js b/platform/features/plot/src/PlotOptionsForm.js index 21f1593071..3d8e534811 100644 --- a/platform/features/plot/src/PlotOptionsForm.js +++ b/platform/features/plot/src/PlotOptionsForm.js @@ -37,7 +37,7 @@ define( Defined below are the form structures for the plot options. */ this.xAxisForm = { - 'name':'x-axis', + 'name': 'x-axis', 'sections': [{ 'name': 'x-axis', 'rows': [ @@ -46,30 +46,30 @@ define( 'control': 'select', 'key': 'key', 'options': [ - {'name':'SCET', 'value': 'scet'}, - {'name':'SCLK', 'value': 'sclk'}, - {'name':'LST', 'value': 'lst'} + {'name': 'SCET', 'value': 'scet'}, + {'name': 'SCLK', 'value': 'sclk'}, + {'name': 'LST', 'value': 'lst'} ] } ] - }]}; + }]}; this.yAxisForm = { - 'name':'y-axis', - 'sections': [{ - // Will need to be repeated for each y-axis, with a - // distinct name for each. Ideally the name of the axis - // itself. 'name': 'y-axis', - 'rows': [ + 'sections': [{ + // Will need to be repeated for each y-axis, with a + // distinct name for each. Ideally the name of the axis + // itself. + 'name': 'y-axis', + 'rows': [ { 'name': 'Range', 'control': 'select', 'key': 'key', 'options': [ - {'name':'EU', 'value': 'eu'}, - {'name':'DN', 'value': 'dn'}, - {'name':'Status', 'value': 'status'} + {'name': 'EU', 'value': 'eu'}, + {'name': 'DN', 'value': 'dn'}, + {'name': 'Status', 'value': 'status'} ] }, { @@ -95,7 +95,7 @@ define( }] }; this.plotSeriesForm = { - 'name':'Series Options', + 'name': 'Series Options', 'sections': [ { rows: [ @@ -106,7 +106,7 @@ define( }] }, { - 'rows':[ + 'rows': [ { 'name': 'Markers', 'control': 'checkbox', @@ -116,7 +116,7 @@ define( ] }, { - 'rows':[ + 'rows': [ { 'name': 'No Line', 'control': 'radio', diff --git a/platform/features/plot/src/SubPlot.js b/platform/features/plot/src/SubPlot.js index d016d4730d..b0a003de38 100644 --- a/platform/features/plot/src/SubPlot.js +++ b/platform/features/plot/src/SubPlot.js @@ -67,7 +67,7 @@ define( * implies that there is no range data displayed either * @returns {boolean} true if domain data exists for the current pan/zoom level */ - SubPlot.prototype.hasDomainData = function() { + SubPlot.prototype.hasDomainData = function () { return this.panZoomStack && this.panZoomStack.getDimensions()[0] > 0; }; @@ -109,7 +109,7 @@ define( // associated with conversion to a 32-bit floating point // format (which is needed in the chart area itself, by WebGL.) SubPlot.prototype.toDisplayable = function (position) { - return [ position[0] - this.domainOffset, position[1] ]; + return [position[0] - this.domainOffset, position[1]]; }; // Update the current hover coordinates @@ -145,7 +145,7 @@ define( end: this.toDisplayable( this.mousePositionToDomainRange(this.mousePosition) ), - color: [1, 1, 1, 0.5 ] + color: [1, 1, 1, 0.5] }] : undefined; }; @@ -189,7 +189,7 @@ define( this.panZoomStack ); - delta = [ current[0] - start[0], current[1] - start[1] ]; + delta = [current[0] - start[0], current[1] - start[1]]; nextOrigin = [ this.panStartBounds.origin[0] - delta[0], this.panStartBounds.origin[1] - delta[1] diff --git a/platform/features/plot/src/elements/PlotLineBuffer.js b/platform/features/plot/src/elements/PlotLineBuffer.js index a878500dcb..5687f854ee 100644 --- a/platform/features/plot/src/elements/PlotLineBuffer.js +++ b/platform/features/plot/src/elements/PlotLineBuffer.js @@ -35,7 +35,7 @@ define( function PlotLineBuffer(domainOffset, initialSize, maxSize) { this.buffer = new Float32Array(initialSize * 2); this.rangeExtrema = - [ Number.POSITIVE_INFINITY, Number.NEGATIVE_INFINITY ]; + [Number.POSITIVE_INFINITY, Number.NEGATIVE_INFINITY]; this.length = 0; this.domainOffset = domainOffset; this.initialSize = initialSize; diff --git a/platform/features/plot/src/elements/PlotPalette.js b/platform/features/plot/src/elements/PlotPalette.js index ae41d85fe1..cea1aefeae 100644 --- a/platform/features/plot/src/elements/PlotPalette.js +++ b/platform/features/plot/src/elements/PlotPalette.js @@ -30,36 +30,36 @@ define( // describe colors in several ways (as RGB 0-255, as // RGB 0.0-1.0, or as stylesheet-appropriate #-prefixed colors). var integerPalette = [ - [ 0x20, 0xB2, 0xAA ], - [ 0x9A, 0xCD, 0x32 ], - [ 0xFF, 0x8C, 0x00 ], - [ 0xD2, 0xB4, 0x8C ], - [ 0x40, 0xE0, 0xD0 ], - [ 0x41, 0x69, 0xFF ], - [ 0xFF, 0xD7, 0x00 ], - [ 0x6A, 0x5A, 0xCD ], - [ 0xEE, 0x82, 0xEE ], - [ 0xCC, 0x99, 0x66 ], - [ 0x99, 0xCC, 0xCC ], - [ 0x66, 0xCC, 0x33 ], - [ 0xFF, 0xCC, 0x00 ], - [ 0xFF, 0x66, 0x33 ], - [ 0xCC, 0x66, 0xFF ], - [ 0xFF, 0x00, 0x66 ], - [ 0xFF, 0xFF, 0x00 ], - [ 0x80, 0x00, 0x80 ], - [ 0x00, 0x86, 0x8B ], - [ 0x00, 0x8A, 0x00 ], - [ 0xFF, 0x00, 0x00 ], - [ 0x00, 0x00, 0xFF ], - [ 0xF5, 0xDE, 0xB3 ], - [ 0xBC, 0x8F, 0x8F ], - [ 0x46, 0x82, 0xB4 ], - [ 0xFF, 0xAF, 0xAF ], - [ 0x43, 0xCD, 0x80 ], - [ 0xCD, 0xC1, 0xC5 ], - [ 0xA0, 0x52, 0x2D ], - [ 0x64, 0x95, 0xED ] + [0x20, 0xB2, 0xAA], + [0x9A, 0xCD, 0x32], + [0xFF, 0x8C, 0x00], + [0xD2, 0xB4, 0x8C], + [0x40, 0xE0, 0xD0], + [0x41, 0x69, 0xFF], + [0xFF, 0xD7, 0x00], + [0x6A, 0x5A, 0xCD], + [0xEE, 0x82, 0xEE], + [0xCC, 0x99, 0x66], + [0x99, 0xCC, 0xCC], + [0x66, 0xCC, 0x33], + [0xFF, 0xCC, 0x00], + [0xFF, 0x66, 0x33], + [0xCC, 0x66, 0xFF], + [0xFF, 0x00, 0x66], + [0xFF, 0xFF, 0x00], + [0x80, 0x00, 0x80], + [0x00, 0x86, 0x8B], + [0x00, 0x8A, 0x00], + [0xFF, 0x00, 0x00], + [0x00, 0x00, 0xFF], + [0xF5, 0xDE, 0xB3], + [0xBC, 0x8F, 0x8F], + [0x46, 0x82, 0xB4], + [0xFF, 0xAF, 0xAF], + [0x43, 0xCD, 0x80], + [0xCD, 0xC1, 0xC5], + [0xA0, 0x52, 0x2D], + [0x64, 0x95, 0xED] ], stringPalette = integerPalette.map(function (arr) { // Convert to # notation for use in styles return '#' + arr.map(function (c) { diff --git a/platform/features/plot/src/elements/PlotPanZoomStackGroup.js b/platform/features/plot/src/elements/PlotPanZoomStackGroup.js index 862eaf8cea..52565b524a 100644 --- a/platform/features/plot/src/elements/PlotPanZoomStackGroup.js +++ b/platform/features/plot/src/elements/PlotPanZoomStackGroup.js @@ -50,8 +50,8 @@ define( // For other stacks, do a push, but repeat // their current range axis bounds. stack.pushPanZoom( - [ origin[0], stack.getOrigin()[1] ], - [ dimensions[0], stack.getDimensions()[1] ] + [origin[0], stack.getOrigin()[1]], + [dimensions[0], stack.getDimensions()[1]] ); } }); diff --git a/platform/features/plot/src/elements/PlotPosition.js b/platform/features/plot/src/elements/PlotPosition.js index e2b598114b..76282c5bbb 100644 --- a/platform/features/plot/src/elements/PlotPosition.js +++ b/platform/features/plot/src/elements/PlotPosition.js @@ -60,7 +60,7 @@ define( // Note that range is reversed from the y-axis in pixel space //(positive range points up, positive pixel-y points down) this.position = - [ x / width, (height - y) / height ].map(convert); + [x / width, (height - y) / height].map(convert); } } diff --git a/platform/features/plot/src/elements/PlotPreparer.js b/platform/features/plot/src/elements/PlotPreparer.js index af0f0eacae..5d6b1f001c 100644 --- a/platform/features/plot/src/elements/PlotPreparer.js +++ b/platform/features/plot/src/elements/PlotPreparer.js @@ -27,7 +27,9 @@ define( function () { - function identity(x) { return x; } + function identity(x) { + return x; + } /** * The PlotPreparer is responsible for handling data sets and diff --git a/platform/features/plot/src/elements/PlotUpdater.js b/platform/features/plot/src/elements/PlotUpdater.js index b1696c2413..9c4e7a8a92 100644 --- a/platform/features/plot/src/elements/PlotUpdater.js +++ b/platform/features/plot/src/elements/PlotUpdater.js @@ -71,7 +71,7 @@ define( // Used in the reduce step of updateExtrema function reduceExtrema(a, b) { - return [ Math.min(a[0], b[0]), Math.max(a[1], b[1]) ]; + return [Math.min(a[0], b[0]), Math.max(a[1], b[1])]; } // Convert a domain/range extrema to plot dimensions @@ -173,9 +173,9 @@ define( }).reduce(reduceExtrema); // Calculate best-fit dimensions - this.dimensions = [ this.domainExtrema, this.rangeExtrema ] + this.dimensions = [this.domainExtrema, this.rangeExtrema] .map(dimensionsOf); - this.origin = [ this.domainExtrema, this.rangeExtrema ] + this.origin = [this.domainExtrema, this.rangeExtrema] .map(originOf); // Enforce some minimum visible area diff --git a/platform/features/plot/src/modes/PlotModeOptions.js b/platform/features/plot/src/modes/PlotModeOptions.js index b876130b91..a1056ebfc4 100644 --- a/platform/features/plot/src/modes/PlotModeOptions.js +++ b/platform/features/plot/src/modes/PlotModeOptions.js @@ -89,7 +89,7 @@ define( */ function PlotModeOptions(telemetryObjects, subPlotFactory) { this.options = telemetryObjects.length > 1 ? - [ OVERLAID, STACKED ] : [ OVERLAID ]; + [OVERLAID, STACKED] : [OVERLAID]; this.mode = this.options[0]; // Initial selection (overlaid) this.telemetryObjects = telemetryObjects; this.subPlotFactory = subPlotFactory; diff --git a/platform/features/plot/src/modes/PlotOverlayMode.js b/platform/features/plot/src/modes/PlotOverlayMode.js index 2e16a972cf..d8e5c906ae 100644 --- a/platform/features/plot/src/modes/PlotOverlayMode.js +++ b/platform/features/plot/src/modes/PlotOverlayMode.js @@ -38,7 +38,7 @@ define( telemetryObjects, this.panZoomStack ); - this.subplots = [ this.subplot ]; + this.subplots = [this.subplot]; } PlotOverlayMode.prototype.plotTelemetry = function (updater) { diff --git a/platform/features/plot/test/Canvas2DChartSpec.js b/platform/features/plot/test/Canvas2DChartSpec.js index 4ab50afbee..102bdbb127 100644 --- a/platform/features/plot/test/Canvas2DChartSpec.js +++ b/platform/features/plot/test/Canvas2DChartSpec.js @@ -33,7 +33,7 @@ define( chart; beforeEach(function () { - mockCanvas = jasmine.createSpyObj("canvas", [ "getContext" ]); + mockCanvas = jasmine.createSpyObj("canvas", ["getContext"]); mock2d = jasmine.createSpyObj( "2d", [ @@ -72,8 +72,8 @@ define( }); it("allows lines to be drawn", function () { - var testBuffer = [ 0, 1, 3, 8 ], - testColor = [ 0.25, 0.33, 0.66, 1.0 ], + var testBuffer = [0, 1, 3, 8], + testColor = [0.25, 0.33, 0.66, 1.0], testPoints = 2; chart.drawLine(testBuffer, testColor, testPoints); expect(mock2d.beginPath).toHaveBeenCalled(); @@ -84,7 +84,7 @@ define( it("allows squares to be drawn", function () { var testMin = [0, 1], testMax = [10, 10], - testColor = [ 0.25, 0.33, 0.66, 1.0 ]; + testColor = [0.25, 0.33, 0.66, 1.0]; chart.drawSquare(testMin, testMax, testColor); expect(mock2d.fillRect).toHaveBeenCalled(); @@ -92,4 +92,4 @@ define( }); } -); \ No newline at end of file +); diff --git a/platform/features/plot/test/GLChartSpec.js b/platform/features/plot/test/GLChartSpec.js index 0dacf0532c..3501e60191 100644 --- a/platform/features/plot/test/GLChartSpec.js +++ b/platform/features/plot/test/GLChartSpec.js @@ -33,7 +33,7 @@ define( glChart; beforeEach(function () { - mockCanvas = jasmine.createSpyObj("canvas", [ "getContext" ]); + mockCanvas = jasmine.createSpyObj("canvas", ["getContext"]); mockGL = jasmine.createSpyObj( "gl", [ @@ -98,8 +98,8 @@ define( }); it("allows lines to be drawn", function () { - var testBuffer = [ 0, 1, 3, 8 ], - testColor = [ 0.25, 0.33, 0.66, 1.0 ], + var testBuffer = [0, 1, 3, 8], + testColor = [0.25, 0.33, 0.66, 1.0], testPoints = 2; glChart.drawLine(testBuffer, testColor, testPoints); expect(mockGL.bufferData).toHaveBeenCalledWith( @@ -116,7 +116,7 @@ define( it("allows squares to be drawn", function () { var testMin = [0, 1], testMax = [10, 10], - testColor = [ 0.25, 0.33, 0.66, 1.0 ]; + testColor = [0.25, 0.33, 0.66, 1.0]; glChart.drawSquare(testMin, testMax, testColor); @@ -140,4 +140,4 @@ define( }); }); } -); \ No newline at end of file +); diff --git a/platform/features/plot/test/MCTChartSpec.js b/platform/features/plot/test/MCTChartSpec.js index db557ff8ac..3fdd4924af 100644 --- a/platform/features/plot/test/MCTChartSpec.js +++ b/platform/features/plot/test/MCTChartSpec.js @@ -55,7 +55,7 @@ define( // mct-chart uses GLChart, so it needs WebGL API mockCanvas = - jasmine.createSpyObj("canvas", [ "getContext", "addEventListener" ]); + jasmine.createSpyObj("canvas", ["getContext", "addEventListener"]); mockGL = jasmine.createSpyObj( "gl", [ @@ -122,7 +122,7 @@ define( it("issues one draw call per line", function () { mctChart.link(mockScope, mockElement); mockScope.$watchCollection.mostRecentCall.args[1]({ - lines: [ {}, {}, {} ] + lines: [{}, {}, {}] }); expect(mockGL.drawArrays.calls.length).toEqual(3); }); diff --git a/platform/features/plot/test/PlotControllerSpec.js b/platform/features/plot/test/PlotControllerSpec.js index c189286eec..4213041387 100644 --- a/platform/features/plot/test/PlotControllerSpec.js +++ b/platform/features/plot/test/PlotControllerSpec.js @@ -63,15 +63,15 @@ define( beforeEach(function () { mockScope = jasmine.createSpyObj( "$scope", - [ "$watch", "$on", "$emit" ] + ["$watch", "$on", "$emit"] ); mockFormatter = jasmine.createSpyObj( "formatter", - [ "formatDomainValue", "formatRangeValue" ] + ["formatDomainValue", "formatRangeValue"] ); mockDomainObject = jasmine.createSpyObj( "domainObject", - [ "getId", "getModel", "getCapability" ] + ["getId", "getModel", "getCapability"] ); mockHandler = jasmine.createSpyObj( "telemetrySubscriber", @@ -96,7 +96,9 @@ define( ); mockHandler.handle.andReturn(mockHandle); - mockThrottle.andCallFake(function (fn) { return fn; }); + mockThrottle.andCallFake(function (fn) { + return fn; + }); mockHandle.getTelemetryObjects.andReturn([mockDomainObject]); mockHandle.getMetadata.andReturn([{}]); mockHandle.getDomainValue.andReturn(123); diff --git a/platform/features/plot/test/PlotOptionsControllerSpec.js b/platform/features/plot/test/PlotOptionsControllerSpec.js index caaf66182a..f48aa517e1 100644 --- a/platform/features/plot/test/PlotOptionsControllerSpec.js +++ b/platform/features/plot/test/PlotOptionsControllerSpec.js @@ -58,7 +58,7 @@ define( mockComposition = [ mockChildOne ]; - mockCompositionCapability.then.andCallFake(function (callback){ + mockCompositionCapability.then.andCallFake(function (callback) { callback(mockComposition); }); @@ -79,7 +79,7 @@ define( 'useCapability', 'getCapability' ]); - mockDomainObject.useCapability.andCallFake(function(capability){ + mockDomainObject.useCapability.andCallFake(function (capability) { return mockUseCapabilities[capability](); }); mockDomainObject.getCapability.andReturn(mockMutationCapability); diff --git a/platform/features/plot/test/SubPlotFactorySpec.js b/platform/features/plot/test/SubPlotFactorySpec.js index e3bb8a9b8f..5e8e3affcc 100644 --- a/platform/features/plot/test/SubPlotFactorySpec.js +++ b/platform/features/plot/test/SubPlotFactorySpec.js @@ -36,20 +36,20 @@ define( beforeEach(function () { mockDomainObject = jasmine.createSpyObj( "domainObject", - [ "getId", "getModel", "getCapability" ] + ["getId", "getModel", "getCapability"] ); mockPanZoomStack = jasmine.createSpyObj( "panZoomStack", - [ "getPanZoom" ] + ["getPanZoom"] ); mockFormatter = jasmine.createSpyObj( "formatter", - [ "formatDomainValue", "formatRangeValue" ] + ["formatDomainValue", "formatRangeValue"] ); mockPanZoomStack.getPanZoom.andReturn({ - origin: [ 0, 0 ], - dimensions: [ 100, 100 ] + origin: [0, 0], + dimensions: [100, 100] }); factory = new SubPlotFactory(mockFormatter); @@ -63,4 +63,4 @@ define( }); }); } -); \ No newline at end of file +); diff --git a/platform/features/plot/test/SubPlotSpec.js b/platform/features/plot/test/SubPlotSpec.js index 4247eddb3c..8d3fc16f67 100644 --- a/platform/features/plot/test/SubPlotSpec.js +++ b/platform/features/plot/test/SubPlotSpec.js @@ -40,7 +40,7 @@ define( beforeEach(function () { mockDomainObject = jasmine.createSpyObj( "domainObject", - [ "getId", "getModel", "getCapability" ] + ["getId", "getModel", "getCapability"] ); mockPanZoomStack = jasmine.createSpyObj( "panZoomStack", @@ -57,16 +57,16 @@ define( ); mockFormatter = jasmine.createSpyObj( "formatter", - [ "formatDomainValue", "formatRangeValue" ] + ["formatDomainValue", "formatRangeValue"] ); mockElement = jasmine.createSpyObj( "element", - [ "getBoundingClientRect" ] + ["getBoundingClientRect"] ); - testOrigin = [ 5, 10 ]; - testDimensions = [ 3000, 1000 ]; - testDomainObjects = [ mockDomainObject, mockDomainObject ]; + testOrigin = [5, 10]; + testDimensions = [3000, 1000]; + testDomainObjects = [mockDomainObject, mockDomainObject]; mockPanZoomStack.getOrigin.andReturn(testOrigin); mockPanZoomStack.getDimensions.andReturn(testDimensions); @@ -163,7 +163,7 @@ define( mockPanZoomStack.getDimensions.andReturn([0,0]); expect(subplot.hasDomainData()).toEqual(false); }); - + it("disallows marquee zoom when start and end Marquee is at the same position", function () { expect(mockPanZoomStack.pushPanZoom).not.toHaveBeenCalled(); diff --git a/platform/features/plot/test/elements/PlotAxisSpec.js b/platform/features/plot/test/elements/PlotAxisSpec.js index 0218e0b14f..922d20d1a8 100644 --- a/platform/features/plot/test/elements/PlotAxisSpec.js +++ b/platform/features/plot/test/elements/PlotAxisSpec.js @@ -88,7 +88,7 @@ define( }); it("reflects changes to applicable metadata", function () { - axis.updateMetadata([ testMetadatas[1] ]); + axis.updateMetadata([testMetadatas[1]]); expect(axis.options).toEqual([ { key: "t0", name: "T0" }, { key: "t2", name: "T2" } diff --git a/platform/features/plot/test/elements/PlotLimitTrackerSpec.js b/platform/features/plot/test/elements/PlotLimitTrackerSpec.js index d37507c628..4212f57c49 100644 --- a/platform/features/plot/test/elements/PlotLimitTrackerSpec.js +++ b/platform/features/plot/test/elements/PlotLimitTrackerSpec.js @@ -41,11 +41,11 @@ define( mockTelemetryObjects = ['a', 'b', 'c'].map(function (id, i) { var mockTelemetryObject = jasmine.createSpyObj( 'object-' + id, - [ 'getId', 'getCapability', 'getModel' ] + ['getId', 'getCapability', 'getModel'] ), mockLimitCapability = jasmine.createSpyObj( 'limit-' + id, - [ 'evaluate' ] + ['evaluate'] ); testData[id] = { id: id, value: i }; mockTelemetryObject.getId.andReturn(id); diff --git a/platform/features/plot/test/elements/PlotLineBufferSpec.js b/platform/features/plot/test/elements/PlotLineBufferSpec.js index 5b8f7a94e7..405dd4df10 100644 --- a/platform/features/plot/test/elements/PlotLineBufferSpec.js +++ b/platform/features/plot/test/elements/PlotLineBufferSpec.js @@ -38,8 +38,8 @@ define( buffer; beforeEach(function () { - testDomainValues = [ 1, 3, 7, 9, 14, 15 ]; - testRangeValues = [ 8, 0, 3, 9, 8, 11 ]; + testDomainValues = [1, 3, 7, 9, 14, 15]; + testRangeValues = [8, 0, 3, 9, 8, 11]; mockSeries = jasmine.createSpyObj( "series", ['getPointCount', 'getDomainValue', 'getRangeValue'] @@ -70,7 +70,7 @@ define( // that domain offset was adjusted for. expect( Array.prototype.slice.call(buffer.getBuffer()).slice(0, 12) - ).toEqual([ -41, 8, -39, 0, -35, 3, -33, 9, -28, 8, -27, 11]); + ).toEqual([-41, 8, -39, 0, -35, 3, -33, 9, -28, 8, -27, 11]); expect(buffer.getLength()).toEqual(6); }); @@ -84,8 +84,8 @@ define( }); it("allows insertion in the middle", function () { - var head = [ -41, 8, -39, 0, -35, 3 ], - tail = [ -33, 9, -28, 8, -27, 11]; + var head = [-41, 8, -39, 0, -35, 3], + tail = [-33, 9, -28, 8, -27, 11]; buffer.insert(mockSeries, 3); expect( Array.prototype.slice.call(buffer.getBuffer()).slice(0, 24) @@ -98,7 +98,7 @@ define( expect(buffer.getLength()).toEqual(4); expect( Array.prototype.slice.call(buffer.getBuffer()).slice(0, 8) - ).toEqual([ -35, 3, -33, 9, -28, 8, -27, 11]); + ).toEqual([-35, 3, -33, 9, -28, 8, -27, 11]); }); it("expands buffer when needed to accommodate more data", function () { diff --git a/platform/features/plot/test/elements/PlotLineSpec.js b/platform/features/plot/test/elements/PlotLineSpec.js index d0a24440d1..a6a3ed7800 100644 --- a/platform/features/plot/test/elements/PlotLineSpec.js +++ b/platform/features/plot/test/elements/PlotLineSpec.js @@ -101,7 +101,7 @@ define( }); it("allows series insertion", function () { - testSeries = [ [ 50, 42 ], [ 100, 200 ], [ 150, 12321 ] ]; + testSeries = [[50, 42], [100, 200], [150, 12321]]; line.addSeries(mockSeries); // Should have managed insertion index choices to get to... expect(testDomainBuffer).toEqual([50, 100, 150]); @@ -109,7 +109,7 @@ define( }); it("splits series insertion when necessary", function () { - testSeries = [ [ 50, 42 ], [ 100, 200 ], [ 150, 12321 ] ]; + testSeries = [[50, 42], [100, 200], [150, 12321]]; line.addPoint(75, 1); line.addSeries(mockSeries); // Should have managed insertion index choices to get to... @@ -130,4 +130,4 @@ define( }); } -); \ No newline at end of file +); diff --git a/platform/features/plot/test/elements/PlotPaletteSpec.js b/platform/features/plot/test/elements/PlotPaletteSpec.js index 4a3cf66f2d..134cf41e9b 100644 --- a/platform/features/plot/test/elements/PlotPaletteSpec.js +++ b/platform/features/plot/test/elements/PlotPaletteSpec.js @@ -120,4 +120,4 @@ define( }); }); } -); \ No newline at end of file +); diff --git a/platform/features/plot/test/elements/PlotPanZoomStackGroupSpec.js b/platform/features/plot/test/elements/PlotPanZoomStackGroupSpec.js index e236111c5b..52a47a8b10 100644 --- a/platform/features/plot/test/elements/PlotPanZoomStackGroupSpec.js +++ b/platform/features/plot/test/elements/PlotPanZoomStackGroupSpec.js @@ -49,7 +49,7 @@ define( it("synchronizes pan-zoom stack depth", function () { expect(group.getDepth()).toEqual(1); - group.getPanZoomStack(1).pushPanZoom([ 10, 20 ], [ 30, 40 ]); + group.getPanZoomStack(1).pushPanZoom([10, 20], [30, 40]); stacks.forEach(function (stack) { expect(stack.getDepth()).toEqual(2); }); @@ -58,11 +58,11 @@ define( it("synchronizes domain but not range", function () { // Set up different initial states stacks.forEach(function (stack, i) { - stack.pushPanZoom([ i, i ], [ i, i ]); + stack.pushPanZoom([i, i], [i, i]); }); // Push a new pan-zoom state onto one of the stacks - group.getPanZoomStack(1).pushPanZoom([ 99, 99 ], [ 42, 42 ]); + group.getPanZoomStack(1).pushPanZoom([99, 99], [42, 42]); // Should changed domain values for all stacks, but // only changed range values for stack 1 @@ -85,7 +85,7 @@ define( it("clears pan-zoom on request", function () { // Set up different initial states stacks.forEach(function (stack, i) { - stack.pushPanZoom([ i, i ], [ i, i ]); + stack.pushPanZoom([i, i], [i, i]); }); // Verify that we have a greater depth @@ -104,7 +104,7 @@ define( it("pops pan-zoom on request", function () { // Set up different initial states stacks.forEach(function (stack, i) { - stack.pushPanZoom([ i, i ], [ i, i ]); + stack.pushPanZoom([i, i], [i, i]); }); // Verify that we have a greater depth @@ -123,4 +123,4 @@ define( }); } -); \ No newline at end of file +); diff --git a/platform/features/plot/test/elements/PlotPanZoomStackSpec.js b/platform/features/plot/test/elements/PlotPanZoomStackSpec.js index 0e1fa320e6..7f2760cdef 100644 --- a/platform/features/plot/test/elements/PlotPanZoomStackSpec.js +++ b/platform/features/plot/test/elements/PlotPanZoomStackSpec.js @@ -46,10 +46,10 @@ define( } beforeEach(function () { - initialOrigin = [ 4, 2 ]; - initialDimensions = [ 600, 400 ]; - otherOrigins = [ [8, 6], [12, 9] ]; - otherDimensions = [ [400, 300], [200, 300] ]; + initialOrigin = [4, 2]; + initialDimensions = [600, 400]; + otherOrigins = [[8, 6], [12, 9]]; + otherDimensions = [[400, 300], [200, 300]]; panZoomStack = new PlotPanZoomStack(initialOrigin, initialDimensions); }); @@ -96,4 +96,4 @@ define( }); }); } -); \ No newline at end of file +); diff --git a/platform/features/plot/test/elements/PlotPositionSpec.js b/platform/features/plot/test/elements/PlotPositionSpec.js index 03382b61e0..61f6e2b965 100644 --- a/platform/features/plot/test/elements/PlotPositionSpec.js +++ b/platform/features/plot/test/elements/PlotPositionSpec.js @@ -29,13 +29,13 @@ define( describe("A plot position", function () { var mockPanZoom, - testOrigin = [ 10, 20 ], - testDimensions = [ 800, 10 ]; + testOrigin = [10, 20], + testDimensions = [800, 10]; beforeEach(function () { mockPanZoom = jasmine.createSpyObj( "panZoomStack", - [ "getPanZoom" ] + ["getPanZoom"] ); mockPanZoom.getPanZoom.andReturn({ origin: testOrigin, @@ -64,4 +64,4 @@ define( }); }); } -); \ No newline at end of file +); diff --git a/platform/features/plot/test/elements/PlotPreparerSpec.js b/platform/features/plot/test/elements/PlotPreparerSpec.js index 414c3b56e1..ded5c5454d 100644 --- a/platform/features/plot/test/elements/PlotPreparerSpec.js +++ b/platform/features/plot/test/elements/PlotPreparerSpec.js @@ -34,7 +34,7 @@ define( function makeMockData(scale) { var mockData = jasmine.createSpyObj( "data" + scale, - [ "getPointCount", "getDomainValue", "getRangeValue" ] + ["getPointCount", "getDomainValue", "getRangeValue"] ); mockData.getPointCount.andReturn(1000); mockData.getDomainValue.andCallFake(function (i) { @@ -90,4 +90,4 @@ define( }); } -); \ No newline at end of file +); diff --git a/platform/features/plot/test/elements/PlotSeriesWindowSpec.js b/platform/features/plot/test/elements/PlotSeriesWindowSpec.js index a3ba8646ea..eaf619751f 100644 --- a/platform/features/plot/test/elements/PlotSeriesWindowSpec.js +++ b/platform/features/plot/test/elements/PlotSeriesWindowSpec.js @@ -31,11 +31,11 @@ define( beforeEach(function () { testSeries = [ - [ 0, 42 ], - [ 10, 1 ], - [ 20, 4 ], - [ 30, 9 ], - [ 40, 3 ] + [0, 42], + [10, 1], + [20, 4], + [30, 9], + [40, 3] ]; mockSeries = jasmine.createSpyObj( @@ -90,4 +90,4 @@ define( }); } -); \ No newline at end of file +); diff --git a/platform/features/plot/test/elements/PlotTickGeneratorSpec.js b/platform/features/plot/test/elements/PlotTickGeneratorSpec.js index ae4e39c88d..b26a6a0051 100644 --- a/platform/features/plot/test/elements/PlotTickGeneratorSpec.js +++ b/platform/features/plot/test/elements/PlotTickGeneratorSpec.js @@ -35,16 +35,16 @@ define( beforeEach(function () { mockPanZoomStack = jasmine.createSpyObj( "panZoomStack", - [ "getPanZoom" ] + ["getPanZoom"] ); mockFormatter = jasmine.createSpyObj( "formatter", - [ "formatDomainValue", "formatRangeValue" ] + ["formatDomainValue", "formatRangeValue"] ); mockPanZoomStack.getPanZoom.andReturn({ - origin: [ 0, 0 ], - dimensions: [ 100, 100 ] + origin: [0, 0], + dimensions: [100, 100] }); generator = @@ -70,4 +70,4 @@ define( }); } -); \ No newline at end of file +); diff --git a/platform/features/plot/test/elements/PlotUpdaterSpec.js b/platform/features/plot/test/elements/PlotUpdaterSpec.js index 158090892c..e91da5f19a 100644 --- a/platform/features/plot/test/elements/PlotUpdaterSpec.js +++ b/platform/features/plot/test/elements/PlotUpdaterSpec.js @@ -39,19 +39,19 @@ define( function makeMockDomainObject(id) { var mockDomainObject = jasmine.createSpyObj( "object-" + id, - [ "getId", "getCapability", "getModel" ] + ["getId", "getCapability", "getModel"] ); mockDomainObject.getId.andReturn(id); return mockDomainObject; } beforeEach(function () { - var ids = [ 'a', 'b', 'c' ], + var ids = ['a', 'b', 'c'], mockObjects = ids.map(makeMockDomainObject); mockSubscription = jasmine.createSpyObj( "subscription", - [ "getDomainValue", "getRangeValue", "getTelemetryObjects" ] + ["getDomainValue", "getRangeValue", "getTelemetryObjects"] ); mockSeries = jasmine.createSpyObj( 'series', diff --git a/platform/features/plot/test/modes/PlotModeOptionsSpec.js b/platform/features/plot/test/modes/PlotModeOptionsSpec.js index 5d382d08d4..37c74cdf8f 100644 --- a/platform/features/plot/test/modes/PlotModeOptionsSpec.js +++ b/platform/features/plot/test/modes/PlotModeOptionsSpec.js @@ -34,11 +34,11 @@ define( beforeEach(function () { mockDomainObject = jasmine.createSpyObj( "domainObject", - [ "getId", "getModel", "getCapability" ] + ["getId", "getModel", "getCapability"] ); mockSubPlotFactory = jasmine.createSpyObj( "subPlotFactory", - [ "createSubPlot" ] + ["createSubPlot"] ); }); @@ -84,4 +84,4 @@ define( }); }); } -); \ No newline at end of file +); diff --git a/platform/features/plot/test/modes/PlotOverlayModeSpec.js b/platform/features/plot/test/modes/PlotOverlayModeSpec.js index 0560d428f7..877820750c 100644 --- a/platform/features/plot/test/modes/PlotOverlayModeSpec.js +++ b/platform/features/plot/test/modes/PlotOverlayModeSpec.js @@ -58,11 +58,11 @@ define( beforeEach(function () { mockDomainObject = jasmine.createSpyObj( "domainObject", - [ "getId", "getModel", "getCapability" ] + ["getId", "getModel", "getCapability"] ); mockSubPlotFactory = jasmine.createSpyObj( "subPlotFactory", - [ "createSubPlot" ] + ["createSubPlot"] ); // Prepared telemetry data mockPrepared = jasmine.createSpyObj( @@ -181,4 +181,4 @@ define( }); }); } -); \ No newline at end of file +); diff --git a/platform/features/plot/test/modes/PlotStackModeSpec.js b/platform/features/plot/test/modes/PlotStackModeSpec.js index cf4407e7e0..65e6962591 100644 --- a/platform/features/plot/test/modes/PlotStackModeSpec.js +++ b/platform/features/plot/test/modes/PlotStackModeSpec.js @@ -58,16 +58,16 @@ define( beforeEach(function () { mockDomainObject = jasmine.createSpyObj( "domainObject", - [ "getId", "getModel", "getCapability" ] + ["getId", "getModel", "getCapability"] ); mockSubPlotFactory = jasmine.createSpyObj( "subPlotFactory", - [ "createSubPlot" ] + ["createSubPlot"] ); // Prepared telemetry data mockPrepared = jasmine.createSpyObj( "prepared", - [ "getDomainOffset", "getOrigin", "getDimensions", "getLineBuffers" ] + ["getDomainOffset", "getOrigin", "getDimensions", "getLineBuffers"] ); mockSubPlotFactory.createSubPlot.andCallFake(createMockSubPlot); @@ -176,4 +176,4 @@ define( }); } -); \ No newline at end of file +); diff --git a/platform/features/plot/test/policies/PlotViewPolicySpec.js b/platform/features/plot/test/policies/PlotViewPolicySpec.js index ec01ec05bc..008d4275da 100644 --- a/platform/features/plot/test/policies/PlotViewPolicySpec.js +++ b/platform/features/plot/test/policies/PlotViewPolicySpec.js @@ -51,23 +51,23 @@ define( }); it("allows the imagery view for domain objects with numeric telemetry", function () { - testMetadata.ranges = [ { key: "foo", format: "number" } ]; + testMetadata.ranges = [{ key: "foo", format: "number" }]; expect(policy.allow(testView, mockDomainObject)).toBeTruthy(); }); it("allows the imagery view for domain objects with unspecified telemetry", function () { - testMetadata.ranges = [ { key: "foo" } ]; + testMetadata.ranges = [{ key: "foo" }]; expect(policy.allow(testView, mockDomainObject)).toBeTruthy(); }); it("disallows the imagery view for domain objects without image telemetry", function () { - testMetadata.ranges = [ { key: "foo", format: "somethingElse" } ]; + testMetadata.ranges = [{ key: "foo", format: "somethingElse" }]; expect(policy.allow(testView, mockDomainObject)).toBeFalsy(); }); it("allows other views", function () { testView.key = "somethingElse"; - testMetadata.ranges = [ { key: "foo", format: "somethingElse" } ]; + testMetadata.ranges = [{ key: "foo", format: "somethingElse" }]; expect(policy.allow(testView, mockDomainObject)).toBeTruthy(); }); diff --git a/platform/features/static-markup/bundle.js b/platform/features/static-markup/bundle.js index 5e05263619..59376ff957 100644 --- a/platform/features/static-markup/bundle.js +++ b/platform/features/static-markup/bundle.js @@ -21,11 +21,11 @@ *****************************************************************************/ define([ - + "text!./res/markup.html", 'legacyRegistry' ], function ( - + markupTemplate, legacyRegistry ) { diff --git a/platform/features/table/src/RangeColumn.js b/platform/features/table/src/RangeColumn.js index f4c5df8c76..0b0636ac16 100644 --- a/platform/features/table/src/RangeColumn.js +++ b/platform/features/table/src/RangeColumn.js @@ -56,7 +56,7 @@ define( return { cssClass: alarm && alarm.cssClass, - text: typeof(value) === 'undefined' ? undefined : this.telemetryFormatter.formatRangeValue(value) + text: typeof (value) === 'undefined' ? undefined : this.telemetryFormatter.formatRangeValue(value) }; }; diff --git a/platform/features/table/src/TableConfiguration.js b/platform/features/table/src/TableConfiguration.js index 697a4a2699..8b9363f66f 100644 --- a/platform/features/table/src/TableConfiguration.js +++ b/platform/features/table/src/TableConfiguration.js @@ -64,7 +64,7 @@ define( }); }); - if (this.columns.length > 0){ + if (this.columns.length > 0) { self.addColumn(new NameColumn(), 0); } } @@ -91,7 +91,7 @@ define( * @returns {*|string} */ TableConfiguration.prototype.getColumnTitle = function (column) { - return column.getTitle(); + return column.getTitle(); }; /** @@ -100,7 +100,7 @@ define( */ TableConfiguration.prototype.getHeaders = function () { var self = this; - return this.columns.map(function (column, i){ + return this.columns.map(function (column, i) { return self.getColumnTitle(column) || 'Column ' + (i + 1); }); }; @@ -115,11 +115,11 @@ define( */ TableConfiguration.prototype.getRowValues = function (telemetryObject, datum) { var self = this; - return this.columns.reduce(function (rowObject, column, i){ + return this.columns.reduce(function (rowObject, column, i) { var columnTitle = self.getColumnTitle(column) || 'Column ' + (i + 1), columnValue = column.getValue(telemetryObject, datum); - if (columnValue !== undefined && columnValue.text === undefined){ + if (columnValue !== undefined && columnValue.text === undefined) { columnValue.text = ''; } // Don't replace something with nothing. @@ -158,7 +158,7 @@ define( config2Keys = Object.keys(config2); return (config1Keys.length !== config2Keys.length) || - config1Keys.some(function(key){ + config1Keys.some(function (key) { return config1[key] !== config2[key]; }); } diff --git a/platform/features/table/src/controllers/HistoricalTableController.js b/platform/features/table/src/controllers/HistoricalTableController.js index 259b000e46..69446f58f4 100644 --- a/platform/features/table/src/controllers/HistoricalTableController.js +++ b/platform/features/table/src/controllers/HistoricalTableController.js @@ -49,7 +49,7 @@ define( var rowData = [], self = this; - this.handle.getTelemetryObjects().forEach(function (telemetryObject){ + this.handle.getTelemetryObjects().forEach(function (telemetryObject) { var series = self.handle.getSeries(telemetryObject) || {}, pointCount = series.getPointCount ? series.getPointCount() : 0, i = 0; diff --git a/platform/features/table/src/controllers/MCTTableController.js b/platform/features/table/src/controllers/MCTTableController.js index 0ccdfbe583..79496a14db 100644 --- a/platform/features/table/src/controllers/MCTTableController.js +++ b/platform/features/table/src/controllers/MCTTableController.js @@ -89,8 +89,8 @@ define( //Use timeout to defer execution until next digest when any // pending UI changes have completed, eg. a new row in the table. if (this.$scope.autoScroll) { - this.$timeout(function (){ - self.scrollable[0].scrollTop = self.scrollable[0].scrollHeight; + this.$timeout(function () { + self.scrollable[0].scrollTop = self.scrollable[0].scrollHeight; }); } }; @@ -125,10 +125,10 @@ define( // Do a sequential search here. Only way of finding row is by // object equality, so array is in effect unsorted. indexInDisplayRows = this.$scope.displayRows.indexOf(row); - if (indexInDisplayRows !== -1) { - this.$scope.displayRows.splice(indexInDisplayRows, 1); - this.setVisibleRows(); - } + if (indexInDisplayRows !== -1) { + this.$scope.displayRows.splice(indexInDisplayRows, 1); + this.setVisibleRows(); + } }; /** @@ -222,7 +222,7 @@ define( * sorting. */ MCTTableController.prototype.setHeaders = function (newHeaders) { - if (!newHeaders){ + if (!newHeaders) { return; } @@ -234,8 +234,8 @@ define( // contain the column currently sorted on. if (this.$scope.enableSort && newHeaders.indexOf(this.$scope.sortColumn) === -1) { - this.$scope.sortColumn = undefined; - this.$scope.sortDirection = undefined; + this.$scope.sortColumn = undefined; + this.$scope.sortDirection = undefined; } this.setRows(this.$scope.rows); }; @@ -283,14 +283,14 @@ define( self = this, sortKey = this.$scope.sortColumn; - function binarySearch(searchArray, searchElement, min, max){ + function binarySearch(searchArray, searchElement, min, max) { var sampleAt = Math.floor((max - min) / 2) + min; if (max < min) { return min; // Element is not in array, min gives direction } - switch(self.sortComparator(searchElement[sortKey].text, + switch (self.sortComparator(searchElement[sortKey].text, searchArray[sampleAt][sortKey].text)) { case -1: return binarySearch(searchArray, searchElement, min, @@ -310,9 +310,9 @@ define( //Sort is enabled, perform binary search to find insertion point index = binarySearch(array, element, 0, array.length - 1); } - if (index === -1){ + if (index === -1) { array.unshift(element); - } else if (index === array.length){ + } else if (index === array.length) { array.push(element); } else { array.splice(index, 0, element); @@ -342,7 +342,7 @@ define( * @returns {*} The value cast to a Number, or the original value if * a Number representation is not possible. */ - function toNumber (value){ + function toNumber(value) { var val = !isNaN(Number(value)) && !isNaN(parseFloat(value)) ? Number(value) : value; return val; } @@ -410,7 +410,7 @@ define( currentColumnLength, largestColumn, largestColumnLength; - if (row[key]){ + if (row[key]) { currentColumn = (row[key]).text; currentColumnLength = (currentColumn && currentColumn.length) ? diff --git a/platform/features/table/src/controllers/RealtimeTableController.js b/platform/features/table/src/controllers/RealtimeTableController.js index 042ece6e61..d9a3efd559 100644 --- a/platform/features/table/src/controllers/RealtimeTableController.js +++ b/platform/features/table/src/controllers/RealtimeTableController.js @@ -58,7 +58,7 @@ define( $scope.$watch('domainObject', function (domainObject) { //When a domain object becomes available, check whether the // view should auto-scroll to the bottom. - if (domainObject && hasStringTelemetry(domainObject)){ + if (domainObject && hasStringTelemetry(domainObject)) { $scope.autoScroll = true; } }); @@ -70,11 +70,11 @@ define( * Overrides method on TelemetryTableController providing handling * for realtime data. */ - RealtimeTableController.prototype.addRealtimeData = function() { + RealtimeTableController.prototype.addRealtimeData = function () { var self = this, datum, row; - this.handle.getTelemetryObjects().forEach(function (telemetryObject){ + this.handle.getTelemetryObjects().forEach(function (telemetryObject) { datum = self.handle.getDatum(telemetryObject); if (datum) { //Populate row values from telemetry datum diff --git a/platform/features/table/src/controllers/TableOptionsController.js b/platform/features/table/src/controllers/TableOptionsController.js index 96b9eb91c1..0ca83b088c 100644 --- a/platform/features/table/src/controllers/TableOptionsController.js +++ b/platform/features/table/src/controllers/TableOptionsController.js @@ -59,7 +59,7 @@ define( }); } - $scope.$watch('domainObject', function(domainObject) { + $scope.$watch('domainObject', function (domainObject) { unlisten(); self.populateForm(domainObject.getModel()); @@ -72,10 +72,10 @@ define( * Maintain a configuration object on scope that stores column * configuration. On change, synchronize with object model. */ - $scope.$watchCollection('configuration.table.columns', function (columns){ - if (columns){ + $scope.$watchCollection('configuration.table.columns', function (columns) { + if (columns) { self.domainObject.useCapability('mutation', function (model) { - model.configuration.table.columns = columns; + model.configuration.table.columns = columns; }); self.domainObject.getCapability('persistence').persist(); } @@ -92,13 +92,13 @@ define( var columnsDefinition = (((model.configuration || {}).table || {}).columns || {}), rows = []; this.$scope.columnsForm = { - 'name':'Columns', + 'name': 'Columns', 'sections': [{ 'name': 'Columns', 'rows': rows }]}; - Object.keys(columnsDefinition).forEach(function (key){ + Object.keys(columnsDefinition).forEach(function (key) { rows.push({ 'name': key, 'control': 'checkbox', diff --git a/platform/features/table/src/controllers/TelemetryTableController.js b/platform/features/table/src/controllers/TelemetryTableController.js index 38d1551038..3f4e69db12 100644 --- a/platform/features/table/src/controllers/TelemetryTableController.js +++ b/platform/features/table/src/controllers/TelemetryTableController.js @@ -58,7 +58,7 @@ define( $scope.rows = []; // Subscribe to telemetry when a domain object becomes available - this.$scope.$watch('domainObject', function(){ + this.$scope.$watch('domainObject', function () { self.subscribe(); self.registerChangeListeners(); }); diff --git a/platform/features/table/src/directives/MCTTable.js b/platform/features/table/src/directives/MCTTable.js index 2eeb167f08..5dd8f9f03f 100644 --- a/platform/features/table/src/directives/MCTTable.js +++ b/platform/features/table/src/directives/MCTTable.js @@ -88,7 +88,7 @@ define( enableFilter: "=?", enableSort: "=?", autoScroll: "=?" - }, + } }; } diff --git a/platform/features/table/test/DomainColumnSpec.js b/platform/features/table/test/DomainColumnSpec.js index bb6debd9a3..e707c8dd0b 100644 --- a/platform/features/table/test/DomainColumnSpec.js +++ b/platform/features/table/test/DomainColumnSpec.js @@ -38,11 +38,11 @@ define( beforeEach(function () { mockDataSet = jasmine.createSpyObj( "data", - [ "getDomainValue" ] + ["getDomainValue"] ); mockFormatter = jasmine.createSpyObj( "formatter", - [ "formatDomainValue", "formatRangeValue" ] + ["formatDomainValue", "formatRangeValue"] ); testMetadata = { key: "testKey", diff --git a/platform/features/table/test/NameColumnSpec.js b/platform/features/table/test/NameColumnSpec.js index 0072b4492c..d381758330 100644 --- a/platform/features/table/test/NameColumnSpec.js +++ b/platform/features/table/test/NameColumnSpec.js @@ -34,7 +34,7 @@ define( beforeEach(function () { mockDomainObject = jasmine.createSpyObj( "domainObject", - [ "getModel" ] + ["getModel"] ); mockDomainObject.getModel.andReturn({ name: "Test object name" diff --git a/platform/features/table/test/RangeColumnSpec.js b/platform/features/table/test/RangeColumnSpec.js index 304a8a1b4b..45383fcdf7 100644 --- a/platform/features/table/test/RangeColumnSpec.js +++ b/platform/features/table/test/RangeColumnSpec.js @@ -40,7 +40,7 @@ define( testDatum = { testKey: 123, otherKey: 456 }; mockFormatter = jasmine.createSpyObj( "formatter", - [ "formatDomainValue", "formatRangeValue" ] + ["formatDomainValue", "formatRangeValue"] ); testMetadata = { key: "testKey", @@ -48,7 +48,7 @@ define( }; mockDomainObject = jasmine.createSpyObj( "domainObject", - [ "getModel", "getCapability" ] + ["getModel", "getCapability"] ); mockFormatter.formatRangeValue.andReturn(TEST_RANGE_VALUE); diff --git a/platform/features/table/test/TableConfigurationSpec.js b/platform/features/table/test/TableConfigurationSpec.js index 83dc122055..2f59fb173f 100644 --- a/platform/features/table/test/TableConfigurationSpec.js +++ b/platform/features/table/test/TableConfigurationSpec.js @@ -44,10 +44,10 @@ define( 'formatDomainValue', 'formatRangeValue' ]); - mockTelemetryFormatter.formatDomainValue.andCallFake(function(valueIn){ + mockTelemetryFormatter.formatDomainValue.andCallFake(function (valueIn) { return valueIn; }); - mockTelemetryFormatter.formatRangeValue.andCallFake(function(valueIn){ + mockTelemetryFormatter.formatRangeValue.andCallFake(function (valueIn) { return valueIn; }); @@ -87,7 +87,7 @@ define( expect(table.columns[2]).toBe(thirdColumn); }); - describe("Building columns from telemetry metadata", function() { + describe("Building columns from telemetry metadata", function () { var metadata = [{ ranges: [ { @@ -113,21 +113,21 @@ define( ] }]; - beforeEach(function() { + beforeEach(function () { table.populateColumns(metadata); }); - it("populates columns", function() { + it("populates columns", function () { expect(table.columns.length).toBe(5); }); - it("Build columns populates columns with domains to the left", function() { + it("Build columns populates columns with domains to the left", function () { expect(table.columns[1] instanceof DomainColumn).toBeTruthy(); expect(table.columns[2] instanceof DomainColumn).toBeTruthy(); expect(table.columns[3] instanceof DomainColumn).toBeFalsy(); }); - it("Produces headers for each column based on title", function() { + it("Produces headers for each column based on title", function () { var headers, firstColumn = table.columns[0]; @@ -138,16 +138,16 @@ define( }); it("Provides a default configuration with all columns" + - " visible", function() { + " visible", function () { var configuration = table.buildColumnConfiguration(); expect(configuration).toBeDefined(); - expect(Object.keys(configuration).every(function(key){ + expect(Object.keys(configuration).every(function (key) { return configuration[key]; })); }); - it("Column configuration exposes persisted configuration", function() { + it("Column configuration exposes persisted configuration", function () { var tableConfig, modelConfig = { table: { @@ -168,7 +168,7 @@ define( var datum, rowValues; - beforeEach(function() { + beforeEach(function () { datum = { 'range1': 'range 1 value', 'range2': 'range 2 value', @@ -178,14 +178,14 @@ define( rowValues = table.getRowValues(mockDomainObject, datum); }); - it("Returns a value for every column", function() { + it("Returns a value for every column", function () { expect(rowValues['Range 1'].text).toBeDefined(); expect(rowValues['Range 1'].text).toEqual('range 1' + ' value'); }); it("Uses the telemetry formatter to appropriately format" + - " telemetry values", function() { + " telemetry values", function () { expect(mockTelemetryFormatter.formatRangeValue).toHaveBeenCalled(); }); }); diff --git a/platform/features/table/test/controllers/HistoricalTableControllerSpec.js b/platform/features/table/test/controllers/HistoricalTableControllerSpec.js index a38681681c..54c213d5a6 100644 --- a/platform/features/table/test/controllers/HistoricalTableControllerSpec.js +++ b/platform/features/table/test/controllers/HistoricalTableControllerSpec.js @@ -39,7 +39,7 @@ define( function promise(value) { return { - then: function (callback){ + then: function (callback) { return promise(callback(value)); } }; @@ -53,13 +53,13 @@ define( '$watchCollection' ]); - mockScope.$on.andCallFake(function (expression, callback){ + mockScope.$on.andCallFake(function (expression, callback) { watches[expression] = callback; }); - mockScope.$watch.andCallFake(function (expression, callback){ - watches[expression] = callback; + mockScope.$watch.andCallFake(function (expression, callback) { + watches[expression] = callback; }); - mockScope.$watchCollection.andCallFake(function (expression, callback){ + mockScope.$watchCollection.andCallFake(function (expression, callback) { watches[expression] = callback; }); @@ -80,7 +80,7 @@ define( mockTable.columns = []; mockTable.buildColumnConfiguration.andReturn(mockConfiguration); - mockDomainObject= jasmine.createSpyObj('domainObject', [ + mockDomainObject = jasmine.createSpyObj('domainObject', [ 'getCapability', 'useCapability', 'getModel' @@ -118,7 +118,7 @@ define( expect(mockTelemetryHandle.request).toHaveBeenCalled(); }); - it('Unsubscribes from telemetry when scope is destroyed',function () { + it('Unsubscribes from telemetry when scope is destroyed', function () { controller.handle = mockTelemetryHandle; watches.$destroy(); expect(mockTelemetryHandle.unsubscribe).toHaveBeenCalled(); @@ -139,7 +139,7 @@ define( }); }); - it('updates the rows on scope when historical telemetry is received', function (){ + it('updates the rows on scope when historical telemetry is received', function () { var mockSeries = { getPointCount: function () { return 5; @@ -154,7 +154,7 @@ define( mockRow = {'domain': 'Domain Value', 'range': 'Range' + ' Value'}; - mockTelemetryHandle.makeDatum.andCallFake(function (){ + mockTelemetryHandle.makeDatum.andCallFake(function () { return mockRow; }); mockTable.getRowValues.andReturn(mockRow); @@ -167,7 +167,7 @@ define( expect(controller.$scope.rows[0]).toBe(mockRow); }); - it('filters the visible columns based on configuration', function (){ + it('filters the visible columns based on configuration', function () { controller.filterColumns(); expect(controller.$scope.headers.length).toBe(3); expect(controller.$scope.headers[2]).toEqual('domain1'); @@ -178,9 +178,9 @@ define( expect(controller.$scope.headers[2]).toBeUndefined(); }); - describe('creates event listeners', function (){ + describe('creates event listeners', function () { beforeEach(function () { - spyOn(controller,'subscribe'); + spyOn(controller, 'subscribe'); spyOn(controller, 'filterColumns'); }); diff --git a/platform/features/table/test/controllers/MCTTableControllerSpec.js b/platform/features/table/test/controllers/MCTTableControllerSpec.js index 84cf154abf..26578ba244 100644 --- a/platform/features/table/test/controllers/MCTTableControllerSpec.js +++ b/platform/features/table/test/controllers/MCTTableControllerSpec.js @@ -26,7 +26,7 @@ define( ], function (MCTTableController) { - describe('The MCTTable Controller', function() { + describe('The MCTTable Controller', function () { var controller, mockScope, @@ -42,7 +42,7 @@ define( }; } - beforeEach(function() { + beforeEach(function () { watches = {}; mockScope = jasmine.createSpyObj('scope', [ @@ -50,7 +50,7 @@ define( '$on', '$watchCollection' ]); - mockScope.$watchCollection.andCallFake(function(event, callback) { + mockScope.$watchCollection.andCallFake(function (event, callback) { watches[event] = callback; }); @@ -75,15 +75,15 @@ define( spyOn(controller, 'setVisibleRows').andCallThrough(); }); - it('Reacts to changes to filters, headers, and rows', function() { + it('Reacts to changes to filters, headers, and rows', function () { expect(mockScope.$watchCollection).toHaveBeenCalledWith('filters', jasmine.any(Function)); expect(mockScope.$watch).toHaveBeenCalledWith('headers', jasmine.any(Function)); expect(mockScope.$watch).toHaveBeenCalledWith('rows', jasmine.any(Function)); }); - describe('rows', function() { + describe('rows', function () { var testRows = []; - beforeEach(function() { + beforeEach(function () { testRows = [ { 'col1': {'text': 'row1 col1 match'}, @@ -104,30 +104,30 @@ define( mockScope.rows = testRows; }); - it('Filters results based on filter input', function() { - var filters = {}, - filteredRows; + it('Filters results based on filter input', function () { + var filters = {}, + filteredRows; - mockScope.filters = filters; + mockScope.filters = filters; - filteredRows = controller.filterRows(testRows); - expect(filteredRows.length).toBe(3); - filters.col1 = 'row1'; - filteredRows = controller.filterRows(testRows); - expect(filteredRows.length).toBe(1); - filters.col1 = 'match'; - filteredRows = controller.filterRows(testRows); - expect(filteredRows.length).toBe(2); + filteredRows = controller.filterRows(testRows); + expect(filteredRows.length).toBe(3); + filters.col1 = 'row1'; + filteredRows = controller.filterRows(testRows); + expect(filteredRows.length).toBe(1); + filters.col1 = 'match'; + filteredRows = controller.filterRows(testRows); + expect(filteredRows.length).toBe(2); }); - it('Sets rows on scope when rows change', function() { + it('Sets rows on scope when rows change', function () { controller.setRows(testRows); expect(mockScope.displayRows.length).toBe(3); expect(mockScope.displayRows).toEqual(testRows); }); - it('Supports adding rows individually', function() { - var addRowFunc = mockScope.$on.calls[mockScope.$on.calls.length-2].args[1], + it('Supports adding rows individually', function () { + var addRowFunc = mockScope.$on.calls[mockScope.$on.calls.length - 2].args[1], row4 = { 'col1': {'text': 'row3 col1'}, 'col2': {'text': 'ghi'}, @@ -140,8 +140,8 @@ define( expect(mockScope.displayRows.length).toBe(4); }); - it('Supports removing rows individually', function() { - var removeRowFunc = mockScope.$on.calls[mockScope.$on.calls.length-1].args[1]; + it('Supports removing rows individually', function () { + var removeRowFunc = mockScope.$on.calls[mockScope.$on.calls.length - 1].args[1]; controller.setRows(testRows); expect(mockScope.displayRows.length).toBe(3); removeRowFunc(undefined, 2); @@ -149,10 +149,10 @@ define( expect(controller.setVisibleRows).toHaveBeenCalled(); }); - describe('sorting', function() { + describe('sorting', function () { var sortedRows; - it('Sorts rows ascending', function() { + it('Sorts rows ascending', function () { mockScope.sortColumn = 'col1'; mockScope.sortDirection = 'asc'; @@ -164,7 +164,7 @@ define( }); - it('Sorts rows descending', function() { + it('Sorts rows descending', function () { mockScope.sortColumn = 'col1'; mockScope.sortDirection = 'desc'; @@ -173,7 +173,7 @@ define( expect(sortedRows[1].col1.text).toEqual('row2 col1 match'); expect(sortedRows[2].col1.text).toEqual('row1 col1 match'); }); - it('Sorts rows descending based on selected sort column', function() { + it('Sorts rows descending based on selected sort column', function () { mockScope.sortColumn = 'col2'; mockScope.sortDirection = 'desc'; @@ -218,9 +218,9 @@ define( expect(sortedRows[1].col2.text).toEqual('def'); expect(sortedRows[2].col2.text).toEqual('abc'); - expect(sortedRows[sortedRows.length-3].col2.text).toEqual('456'); - expect(sortedRows[sortedRows.length-2].col2.text).toEqual('123'); - expect(sortedRows[sortedRows.length-1].col2.text).toEqual(''); + expect(sortedRows[sortedRows.length - 3].col2.text).toEqual('456'); + expect(sortedRows[sortedRows.length - 2].col2.text).toEqual('123'); + expect(sortedRows[sortedRows.length - 1].col2.text).toEqual(''); }); describe('The sort comparator', function () { @@ -245,7 +245,7 @@ define( row5, row6; - beforeEach(function() { + beforeEach(function () { row4 = { 'col1': {'text': 'row5 col1'}, 'col2': {'text': 'xyz'}, @@ -264,33 +264,33 @@ define( }); it('Adds new rows at the correct sort position when' + - ' sorted ', function() { + ' sorted ', function () { mockScope.sortColumn = 'col2'; mockScope.sortDirection = 'desc'; mockScope.displayRows = controller.sortRows(testRows.slice(0)); mockScope.rows.push(row4); - controller.addRow(undefined, mockScope.rows.length-1); + controller.addRow(undefined, mockScope.rows.length - 1); expect(mockScope.displayRows[0].col2.text).toEqual('xyz'); mockScope.rows.push(row5); - controller.addRow(undefined, mockScope.rows.length-1); + controller.addRow(undefined, mockScope.rows.length - 1); expect(mockScope.displayRows[4].col2.text).toEqual('aaa'); mockScope.rows.push(row6); - controller.addRow(undefined, mockScope.rows.length-1); + controller.addRow(undefined, mockScope.rows.length - 1); expect(mockScope.displayRows[2].col2.text).toEqual('ggg'); //Add a duplicate row mockScope.rows.push(row6); - controller.addRow(undefined, mockScope.rows.length-1); + controller.addRow(undefined, mockScope.rows.length - 1); expect(mockScope.displayRows[2].col2.text).toEqual('ggg'); expect(mockScope.displayRows[3].col2.text).toEqual('ggg'); }); it('Adds new rows at the correct sort position when' + - ' sorted and filtered', function() { + ' sorted and filtered', function () { mockScope.sortColumn = 'col2'; mockScope.sortDirection = 'desc'; mockScope.filters = {'col2': 'a'};//Include only @@ -300,12 +300,12 @@ define( mockScope.displayRows = controller.filterRows(testRows); mockScope.rows.push(row5); - controller.addRow(undefined, mockScope.rows.length-1); + controller.addRow(undefined, mockScope.rows.length - 1); expect(mockScope.displayRows.length).toBe(2); expect(mockScope.displayRows[1].col2.text).toEqual('aaa'); mockScope.rows.push(row6); - controller.addRow(undefined, mockScope.rows.length-1); + controller.addRow(undefined, mockScope.rows.length - 1); expect(mockScope.displayRows.length).toBe(2); //Row was not added because does not match filter }); @@ -319,16 +319,16 @@ define( mockScope.displayRows = testRows.slice(0); mockScope.rows.push(row5); - controller.addRow(undefined, mockScope.rows.length-1); + controller.addRow(undefined, mockScope.rows.length - 1); expect(mockScope.displayRows[3].col2.text).toEqual('aaa'); mockScope.rows.push(row6); - controller.addRow(undefined, mockScope.rows.length-1); + controller.addRow(undefined, mockScope.rows.length - 1); expect(mockScope.displayRows[4].col2.text).toEqual('ggg'); }); it('Resizes columns if length of any columns in new' + - ' row exceeds corresponding existing column', function() { + ' row exceeds corresponding existing column', function () { var row7 = { 'col1': {'text': 'row6 col1'}, 'col2': {'text': 'some longer string'}, @@ -342,7 +342,7 @@ define( mockScope.displayRows = testRows.slice(0); mockScope.rows.push(row7); - controller.addRow(undefined, mockScope.rows.length-1); + controller.addRow(undefined, mockScope.rows.length - 1); expect(controller.$scope.sizingRow.col2).toEqual({text: 'some longer string'}); }); diff --git a/platform/features/table/test/controllers/RealtimeTableControllerSpec.js b/platform/features/table/test/controllers/RealtimeTableControllerSpec.js index ea1bb870a3..ada85baa3c 100644 --- a/platform/features/table/test/controllers/RealtimeTableControllerSpec.js +++ b/platform/features/table/test/controllers/RealtimeTableControllerSpec.js @@ -40,7 +40,7 @@ define( function promise(value) { return { - then: function (callback){ + then: function (callback) { return promise(callback(value)); } }; @@ -57,13 +57,13 @@ define( '$digest', '$broadcast' ]); - mockScope.$on.andCallFake(function (expression, callback){ + mockScope.$on.andCallFake(function (expression, callback) { watches[expression] = callback; }); - mockScope.$watch.andCallFake(function (expression, callback){ - watches[expression] = callback; + mockScope.$watch.andCallFake(function (expression, callback) { + watches[expression] = callback; }); - mockScope.$watchCollection.andCallFake(function (expression, callback){ + mockScope.$watchCollection.andCallFake(function (expression, callback) { watches[expression] = callback; }); @@ -85,7 +85,7 @@ define( mockTable.buildColumnConfiguration.andReturn(mockConfiguration); mockTable.getRowValues.andReturn(mockTableRow); - mockDomainObject= jasmine.createSpyObj('domainObject', [ + mockDomainObject = jasmine.createSpyObj('domainObject', [ 'getCapability', 'useCapability', 'getModel' @@ -93,7 +93,7 @@ define( mockDomainObject.getModel.andReturn({}); mockDomainObject.getCapability.andReturn( { - getMetadata: function (){ + getMetadata: function () { return {ranges: [{format: 'string'}]}; } }); @@ -132,7 +132,7 @@ define( }); describe('receives new telemetry', function () { - beforeEach(function() { + beforeEach(function () { controller.subscribe(); mockScope.rows = []; }); @@ -151,7 +151,7 @@ define( } mockTelemetryHandler.handle.mostRecentCall.args[1](); expect(mockScope.rows.length).toBe(controller.maxRows); - expect(mockScope.rows[mockScope.rows.length-1]).toBe(mockTableRow); + expect(mockScope.rows[mockScope.rows.length - 1]).toBe(mockTableRow); expect(mockScope.rows[0].row).toBe(1); }); }); diff --git a/platform/features/table/test/controllers/TableOptionsControllerSpec.js b/platform/features/table/test/controllers/TableOptionsControllerSpec.js index db918c9788..9ea1967b36 100644 --- a/platform/features/table/test/controllers/TableOptionsControllerSpec.js +++ b/platform/features/table/test/controllers/TableOptionsControllerSpec.js @@ -26,13 +26,13 @@ define( ], function (TableOptionsController) { - describe('The Table Options Controller', function() { + describe('The Table Options Controller', function () { var mockDomainObject, mockCapability, controller, mockScope; - beforeEach(function() { + beforeEach(function () { mockCapability = jasmine.createSpyObj('mutationCapability', [ 'listen' ]); @@ -53,11 +53,11 @@ define( controller = new TableOptionsController(mockScope); }); - it('Listens for changing domain object', function() { + it('Listens for changing domain object', function () { expect(mockScope.$watch).toHaveBeenCalledWith('domainObject', jasmine.any(Function)); }); - it('On destruction of controller, destroys listeners', function() { + it('On destruction of controller, destroys listeners', function () { var unlistenFunc = jasmine.createSpy("unlisten"); controller.listeners.push(unlistenFunc); expect(mockScope.$on).toHaveBeenCalledWith('$destroy', jasmine.any(Function)); @@ -65,21 +65,21 @@ define( expect(unlistenFunc).toHaveBeenCalled(); }); - it('Registers a listener for mutation events on the object', function() { + it('Registers a listener for mutation events on the object', function () { mockScope.$watch.mostRecentCall.args[1](mockDomainObject); expect(mockCapability.listen).toHaveBeenCalled(); }); it('Listens for changes to object composition and updates' + - ' options accordingly', function() { + ' options accordingly', function () { expect(mockScope.$watchCollection).toHaveBeenCalledWith('configuration.table.columns', jasmine.any(Function)); }); describe('Populates scope with a form definition based on provided' + - ' column configuration', function() { + ' column configuration', function () { var mockModel; - beforeEach(function() { + beforeEach(function () { mockModel = { configuration: { table: { @@ -87,7 +87,7 @@ define( 'column1': true, 'column2': true, 'column3': false, - 'column4': true, + 'column4': true } } } @@ -95,19 +95,19 @@ define( controller.populateForm(mockModel); }); - it('creates form on scope', function() { + it('creates form on scope', function () { expect(mockScope.columnsForm).toBeDefined(); expect(mockScope.columnsForm.sections[0]).toBeDefined(); expect(mockScope.columnsForm.sections[0].rows).toBeDefined(); expect(mockScope.columnsForm.sections[0].rows.length).toBe(4); }); - it('presents columns as checkboxes', function() { - expect(mockScope.columnsForm.sections[0].rows.every(function(row){ + it('presents columns as checkboxes', function () { + expect(mockScope.columnsForm.sections[0].rows.every(function (row) { return row.control === 'checkbox'; })).toBe(true); }); }); }); - }); \ No newline at end of file + }); diff --git a/platform/features/timeline/bundle.js b/platform/features/timeline/bundle.js index dda2080c71..a6c0931f4e 100644 --- a/platform/features/timeline/bundle.js +++ b/platform/features/timeline/bundle.js @@ -91,7 +91,7 @@ define([ "name": "Export Timeline as CSV", "category": "contextual", "implementation": ExportTimelineAsCSVAction, - "depends": [ "exportService", "notificationService" ] + "depends": ["exportService", "notificationService"] } ], "constants": [ diff --git a/platform/features/timeline/src/TimelineConstants.js b/platform/features/timeline/src/TimelineConstants.js index c931925946..74fd7392b4 100644 --- a/platform/features/timeline/src/TimelineConstants.js +++ b/platform/features/timeline/src/TimelineConstants.js @@ -28,4 +28,4 @@ define({ HANDLE_WIDTH: 32, // Pixel tolerance for snapping behavior SNAP_WIDTH: 16 -}); \ No newline at end of file +}); diff --git a/platform/features/timeline/src/TimelineFormatter.js b/platform/features/timeline/src/TimelineFormatter.js index da1e09adf7..447361decb 100644 --- a/platform/features/timeline/src/TimelineFormatter.js +++ b/platform/features/timeline/src/TimelineFormatter.js @@ -73,4 +73,4 @@ define( return TimelineFormatter; } -); \ No newline at end of file +); diff --git a/platform/features/timeline/src/actions/ExportTimelineAsCSVAction.js b/platform/features/timeline/src/actions/ExportTimelineAsCSVAction.js index 7b7754e720..f71422358c 100644 --- a/platform/features/timeline/src/actions/ExportTimelineAsCSVAction.js +++ b/platform/features/timeline/src/actions/ExportTimelineAsCSVAction.js @@ -65,4 +65,4 @@ define(["./ExportTimelineAsCSVTask"], function (ExportTimelineAsCSVTask) { }; return ExportTimelineAsCSVAction; -}); \ No newline at end of file +}); diff --git a/platform/features/timeline/src/actions/TimelineTraverser.js b/platform/features/timeline/src/actions/TimelineTraverser.js index f38d0e3489..089f51cb35 100644 --- a/platform/features/timeline/src/actions/TimelineTraverser.js +++ b/platform/features/timeline/src/actions/TimelineTraverser.js @@ -80,4 +80,4 @@ define([], function () { return TimelineTraverser; -}); \ No newline at end of file +}); diff --git a/platform/features/timeline/src/capabilities/ActivityTimespan.js b/platform/features/timeline/src/capabilities/ActivityTimespan.js index 96073160bc..405fbec50b 100644 --- a/platform/features/timeline/src/capabilities/ActivityTimespan.js +++ b/platform/features/timeline/src/capabilities/ActivityTimespan.js @@ -116,4 +116,4 @@ define( return ActivityTimespan; } -); \ No newline at end of file +); diff --git a/platform/features/timeline/src/capabilities/ActivityUtilization.js b/platform/features/timeline/src/capabilities/ActivityUtilization.js index 9034d09939..6e7895d34d 100644 --- a/platform/features/timeline/src/capabilities/ActivityUtilization.js +++ b/platform/features/timeline/src/capabilities/ActivityUtilization.js @@ -47,4 +47,4 @@ define( return ActivityUtilization; } -); \ No newline at end of file +); diff --git a/platform/features/timeline/src/capabilities/CumulativeGraph.js b/platform/features/timeline/src/capabilities/CumulativeGraph.js index a9cf5c7cad..f9ffcb4b66 100644 --- a/platform/features/timeline/src/capabilities/CumulativeGraph.js +++ b/platform/features/timeline/src/capabilities/CumulativeGraph.js @@ -149,4 +149,4 @@ define( return CumulativeGraph; } -); \ No newline at end of file +); diff --git a/platform/features/timeline/src/capabilities/ResourceGraph.js b/platform/features/timeline/src/capabilities/ResourceGraph.js index d62a7cf07f..2e0bec8497 100644 --- a/platform/features/timeline/src/capabilities/ResourceGraph.js +++ b/platform/features/timeline/src/capabilities/ResourceGraph.js @@ -144,4 +144,4 @@ define( return ResourceGraph; } -); \ No newline at end of file +); diff --git a/platform/features/timeline/src/capabilities/TimelineTimespan.js b/platform/features/timeline/src/capabilities/TimelineTimespan.js index ac07ef7071..3224d42ab5 100644 --- a/platform/features/timeline/src/capabilities/TimelineTimespan.js +++ b/platform/features/timeline/src/capabilities/TimelineTimespan.js @@ -121,4 +121,4 @@ define( return TimelineTimespan; } -); \ No newline at end of file +); diff --git a/platform/features/timeline/src/capabilities/TimelineUtilization.js b/platform/features/timeline/src/capabilities/TimelineUtilization.js index 7459ae7220..a4fc885734 100644 --- a/platform/features/timeline/src/capabilities/TimelineUtilization.js +++ b/platform/features/timeline/src/capabilities/TimelineUtilization.js @@ -47,4 +47,4 @@ define( return TimelineUtilization; } -); \ No newline at end of file +); diff --git a/platform/features/timeline/src/controllers/TimelineController.js b/platform/features/timeline/src/controllers/TimelineController.js index 483abb7c06..796807c76a 100644 --- a/platform/features/timeline/src/controllers/TimelineController.js +++ b/platform/features/timeline/src/controllers/TimelineController.js @@ -96,7 +96,7 @@ define( }); } } - + // Recalculate swimlane state on changes $scope.$watch("domainObject", swimlanePopulator.populate); diff --git a/platform/features/timeline/src/controllers/TimelineDateTimeController.js b/platform/features/timeline/src/controllers/TimelineDateTimeController.js index 249cd4d7de..01ec6cebe3 100644 --- a/platform/features/timeline/src/controllers/TimelineDateTimeController.js +++ b/platform/features/timeline/src/controllers/TimelineDateTimeController.js @@ -88,4 +88,4 @@ define( return DateTimeController; } -); \ No newline at end of file +); diff --git a/platform/features/timeline/src/controllers/TimelineGanttController.js b/platform/features/timeline/src/controllers/TimelineGanttController.js index 40431e00c4..a435ac49ad 100644 --- a/platform/features/timeline/src/controllers/TimelineGanttController.js +++ b/platform/features/timeline/src/controllers/TimelineGanttController.js @@ -83,4 +83,4 @@ define( return TimelineGanttController; } -); \ No newline at end of file +); diff --git a/platform/features/timeline/src/controllers/TimelineGraphController.js b/platform/features/timeline/src/controllers/TimelineGraphController.js index b069f9693d..5710e1a1c5 100644 --- a/platform/features/timeline/src/controllers/TimelineGraphController.js +++ b/platform/features/timeline/src/controllers/TimelineGraphController.js @@ -92,4 +92,4 @@ define( return TimelineGraphController; } -); \ No newline at end of file +); diff --git a/platform/features/timeline/src/controllers/TimelineTickController.js b/platform/features/timeline/src/controllers/TimelineTickController.js index f49ff73d45..611828241a 100644 --- a/platform/features/timeline/src/controllers/TimelineTickController.js +++ b/platform/features/timeline/src/controllers/TimelineTickController.js @@ -113,4 +113,4 @@ define( return TimelineTickController; } -); \ No newline at end of file +); diff --git a/platform/features/timeline/src/controllers/TimelineZoomController.js b/platform/features/timeline/src/controllers/TimelineZoomController.js index 43abb8419c..4c8acd0061 100644 --- a/platform/features/timeline/src/controllers/TimelineZoomController.js +++ b/platform/features/timeline/src/controllers/TimelineZoomController.js @@ -29,7 +29,7 @@ define( */ function TimelineZoomController($scope, ZOOM_CONFIGURATION) { // Prefer to start with the middle index - var zoomLevels = ZOOM_CONFIGURATION.levels || [ 1000 ], + var zoomLevels = ZOOM_CONFIGURATION.levels || [1000], zoomIndex = Math.floor(zoomLevels.length / 2), tickWidth = ZOOM_CONFIGURATION.width || 200, duration = 86400000; // Default duration in view diff --git a/platform/features/timeline/src/controllers/drag/TimelineDragHandler.js b/platform/features/timeline/src/controllers/drag/TimelineDragHandler.js index 6e3272ff59..cd699dc647 100644 --- a/platform/features/timeline/src/controllers/drag/TimelineDragHandler.js +++ b/platform/features/timeline/src/controllers/drag/TimelineDragHandler.js @@ -253,4 +253,4 @@ define( return TimelineDragHandler; } -); \ No newline at end of file +); diff --git a/platform/features/timeline/src/controllers/drag/TimelineDragPopulator.js b/platform/features/timeline/src/controllers/drag/TimelineDragPopulator.js index 985aee275e..67f26d0144 100644 --- a/platform/features/timeline/src/controllers/drag/TimelineDragPopulator.js +++ b/platform/features/timeline/src/controllers/drag/TimelineDragPopulator.js @@ -92,4 +92,4 @@ define( return TimelineDragPopulator; } -); \ No newline at end of file +); diff --git a/platform/features/timeline/src/controllers/drag/TimelineEndHandle.js b/platform/features/timeline/src/controllers/drag/TimelineEndHandle.js index 317d3512f4..facbedc889 100644 --- a/platform/features/timeline/src/controllers/drag/TimelineEndHandle.js +++ b/platform/features/timeline/src/controllers/drag/TimelineEndHandle.js @@ -93,4 +93,4 @@ define( return TimelineEndHandle; } -); \ No newline at end of file +); diff --git a/platform/features/timeline/src/controllers/drag/TimelineMoveHandle.js b/platform/features/timeline/src/controllers/drag/TimelineMoveHandle.js index a05ce117e5..f6b9868656 100644 --- a/platform/features/timeline/src/controllers/drag/TimelineMoveHandle.js +++ b/platform/features/timeline/src/controllers/drag/TimelineMoveHandle.js @@ -128,4 +128,4 @@ define( return TimelineMoveHandle; } -); \ No newline at end of file +); diff --git a/platform/features/timeline/src/controllers/drag/TimelineSnapHandler.js b/platform/features/timeline/src/controllers/drag/TimelineSnapHandler.js index c9752a72e7..cc60e0d8f4 100644 --- a/platform/features/timeline/src/controllers/drag/TimelineSnapHandler.js +++ b/platform/features/timeline/src/controllers/drag/TimelineSnapHandler.js @@ -42,7 +42,9 @@ define( candidates; // Filter an id for inclustion - function include(id) { return id !== exclude; } + function include(id) { + return id !== exclude; + } // Evaluate a candidate timestamp as a snap-to location function evaluate(candidate) { @@ -101,4 +103,4 @@ define( return TimelineSnapHandler; } -); \ No newline at end of file +); diff --git a/platform/features/timeline/src/controllers/drag/TimelineStartHandle.js b/platform/features/timeline/src/controllers/drag/TimelineStartHandle.js index e04dbada47..ce7907eeed 100644 --- a/platform/features/timeline/src/controllers/drag/TimelineStartHandle.js +++ b/platform/features/timeline/src/controllers/drag/TimelineStartHandle.js @@ -93,4 +93,4 @@ define( return TimelineStartHandle; } -); \ No newline at end of file +); diff --git a/platform/features/timeline/src/controllers/graph/TimelineGraph.js b/platform/features/timeline/src/controllers/graph/TimelineGraph.js index c5e84ddaa0..5cb5ccd491 100644 --- a/platform/features/timeline/src/controllers/graph/TimelineGraph.js +++ b/platform/features/timeline/src/controllers/graph/TimelineGraph.js @@ -168,8 +168,8 @@ define( setBounds: function (offset, duration) { // We don't update in-place, because we need the change // to trigger a watch in mct-chart. - drawingObject.origin = [ offset, drawingObject.origin[1] ]; - drawingObject.dimensions = [ duration, drawingObject.dimensions[1] ]; + drawingObject.origin = [offset, drawingObject.origin[1]]; + drawingObject.dimensions = [duration, drawingObject.dimensions[1]]; }, /** * Redraw lines in this graph. @@ -186,4 +186,4 @@ define( return TimelineGraph; } -); \ No newline at end of file +); diff --git a/platform/features/timeline/src/controllers/graph/TimelineGraphPopulator.js b/platform/features/timeline/src/controllers/graph/TimelineGraphPopulator.js index 91c478310f..0032b8cbe8 100644 --- a/platform/features/timeline/src/controllers/graph/TimelineGraphPopulator.js +++ b/platform/features/timeline/src/controllers/graph/TimelineGraphPopulator.js @@ -152,4 +152,4 @@ define( return TimelineGraphPopulator; } -); \ No newline at end of file +); diff --git a/platform/features/timeline/src/controllers/graph/TimelineGraphRenderer.js b/platform/features/timeline/src/controllers/graph/TimelineGraphRenderer.js index 825947599d..bd0546ab03 100644 --- a/platform/features/timeline/src/controllers/graph/TimelineGraphRenderer.js +++ b/platform/features/timeline/src/controllers/graph/TimelineGraphRenderer.js @@ -78,4 +78,4 @@ define( return TimelineGraphRenderer; } -); \ No newline at end of file +); diff --git a/platform/features/timeline/src/controllers/swimlane/TimelineColorAssigner.js b/platform/features/timeline/src/controllers/swimlane/TimelineColorAssigner.js index 4e7a72a510..26d4fd7a9f 100644 --- a/platform/features/timeline/src/controllers/swimlane/TimelineColorAssigner.js +++ b/platform/features/timeline/src/controllers/swimlane/TimelineColorAssigner.js @@ -117,4 +117,4 @@ define( return TimelineColorAssigner; } -); \ No newline at end of file +); diff --git a/platform/features/timeline/src/controllers/swimlane/TimelineProxy.js b/platform/features/timeline/src/controllers/swimlane/TimelineProxy.js index ecff296b64..ee470edc77 100644 --- a/platform/features/timeline/src/controllers/swimlane/TimelineProxy.js +++ b/platform/features/timeline/src/controllers/swimlane/TimelineProxy.js @@ -74,4 +74,4 @@ define( return TimelineProxy; } -); \ No newline at end of file +); diff --git a/platform/features/timeline/src/controllers/swimlane/TimelineSwimlane.js b/platform/features/timeline/src/controllers/swimlane/TimelineSwimlane.js index a25448c85a..44d7b65aa2 100644 --- a/platform/features/timeline/src/controllers/swimlane/TimelineSwimlane.js +++ b/platform/features/timeline/src/controllers/swimlane/TimelineSwimlane.js @@ -172,4 +172,4 @@ define( return TimelineSwimlane; } -); \ No newline at end of file +); diff --git a/platform/features/timeline/src/controllers/swimlane/TimelineSwimlanePopulator.js b/platform/features/timeline/src/controllers/swimlane/TimelineSwimlanePopulator.js index d4b1151817..f7a77fe2df 100644 --- a/platform/features/timeline/src/controllers/swimlane/TimelineSwimlanePopulator.js +++ b/platform/features/timeline/src/controllers/swimlane/TimelineSwimlanePopulator.js @@ -194,4 +194,4 @@ define( return TimelineSwimlanePopulator; } -); \ No newline at end of file +); diff --git a/platform/features/timeline/src/services/ObjectLoader.js b/platform/features/timeline/src/services/ObjectLoader.js index f7c9743c87..377709592f 100644 --- a/platform/features/timeline/src/services/ObjectLoader.js +++ b/platform/features/timeline/src/services/ObjectLoader.js @@ -130,4 +130,4 @@ define( return ObjectLoader; } -); \ No newline at end of file +); diff --git a/platform/features/timeline/test/TimelineFormatterSpec.js b/platform/features/timeline/test/TimelineFormatterSpec.js index 052730bd41..d883fa5c3f 100644 --- a/platform/features/timeline/test/TimelineFormatterSpec.js +++ b/platform/features/timeline/test/TimelineFormatterSpec.js @@ -57,4 +57,4 @@ define( }); }); } -); \ No newline at end of file +); diff --git a/platform/features/timeline/test/actions/CompositionColumnSpec.js b/platform/features/timeline/test/actions/CompositionColumnSpec.js index 87377a856f..8cf566a080 100644 --- a/platform/features/timeline/test/actions/CompositionColumnSpec.js +++ b/platform/features/timeline/test/actions/CompositionColumnSpec.js @@ -44,10 +44,10 @@ define( beforeEach(function () { mockDomainObject = jasmine.createSpyObj( 'domainObject', - [ 'getId', 'getModel', 'getCapability' ] + ['getId', 'getModel', 'getCapability'] ); testModel = { - composition: [ 'a', 'b', 'c', 'd', 'e', 'f' ] + composition: ['a', 'b', 'c', 'd', 'e', 'f'] }; mockDomainObject.getModel.andReturn(testModel); }); @@ -58,7 +58,7 @@ define( }); it("returns nothing when composition is exceeded", function () { - testModel.composition = [ 'foo' ]; + testModel.composition = ['foo']; expect(column.value(mockDomainObject)).toEqual(""); }); @@ -70,4 +70,4 @@ define( }); } -); \ No newline at end of file +); diff --git a/platform/features/timeline/test/actions/ExportTimelineAsCSVActionSpec.js b/platform/features/timeline/test/actions/ExportTimelineAsCSVActionSpec.js index 7250fd2621..e0f09c3ae6 100644 --- a/platform/features/timeline/test/actions/ExportTimelineAsCSVActionSpec.js +++ b/platform/features/timeline/test/actions/ExportTimelineAsCSVActionSpec.js @@ -36,20 +36,20 @@ define( beforeEach(function () { mockDomainObject = jasmine.createSpyObj( 'domainObject', - [ 'getId', 'getModel', 'getCapability', 'hasCapability' ] + ['getId', 'getModel', 'getCapability', 'hasCapability'] ); - mockType = jasmine.createSpyObj('type', [ 'instanceOf' ]); + mockType = jasmine.createSpyObj('type', ['instanceOf']); mockExportService = jasmine.createSpyObj( 'exportService', - [ 'exportCSV' ] + ['exportCSV'] ); mockNotificationService = jasmine.createSpyObj( 'notificationService', - [ 'notify', 'error' ] + ['notify', 'error'] ); mockNotification = jasmine.createSpyObj( 'notification', - [ 'dismiss' ] + ['dismiss'] ); mockNotificationService.notify.andReturn(mockNotification); @@ -149,4 +149,4 @@ define( }); }); } -); \ No newline at end of file +); diff --git a/platform/features/timeline/test/actions/ExportTimelineAsCSVTaskSpec.js b/platform/features/timeline/test/actions/ExportTimelineAsCSVTaskSpec.js index d9c6ca3c6e..0330e86397 100644 --- a/platform/features/timeline/test/actions/ExportTimelineAsCSVTaskSpec.js +++ b/platform/features/timeline/test/actions/ExportTimelineAsCSVTaskSpec.js @@ -34,7 +34,7 @@ define( beforeEach(function () { mockExportService = jasmine.createSpyObj( 'exportService', - [ 'exportCSV' ] + ['exportCSV'] ); mockDomainObject = jasmine.createSpyObj( 'domainObject', diff --git a/platform/features/timeline/test/actions/IdColumnSpec.js b/platform/features/timeline/test/actions/IdColumnSpec.js index 5aab82d11f..f44d255255 100644 --- a/platform/features/timeline/test/actions/IdColumnSpec.js +++ b/platform/features/timeline/test/actions/IdColumnSpec.js @@ -42,7 +42,7 @@ define( testId = "foo"; mockDomainObject = jasmine.createSpyObj( 'domainObject', - [ 'getId', 'getModel', 'getCapability' ] + ['getId', 'getModel', 'getCapability'] ); mockDomainObject.getId.andReturn(testId); }); @@ -55,4 +55,4 @@ define( }); } -); \ No newline at end of file +); diff --git a/platform/features/timeline/test/actions/MetadataColumnSpec.js b/platform/features/timeline/test/actions/MetadataColumnSpec.js index f9ff3f3d35..da98df5040 100644 --- a/platform/features/timeline/test/actions/MetadataColumnSpec.js +++ b/platform/features/timeline/test/actions/MetadataColumnSpec.js @@ -44,7 +44,7 @@ define( beforeEach(function () { mockDomainObject = jasmine.createSpyObj( 'domainObject', - [ 'getId', 'getModel', 'getCapability', 'useCapability' ] + ['getId', 'getModel', 'getCapability', 'useCapability'] ); testMetadata = [ { name: "Something else", value: 123 }, @@ -72,4 +72,4 @@ define( }); } -); \ No newline at end of file +); diff --git a/platform/features/timeline/test/actions/ModeColumnSpec.js b/platform/features/timeline/test/actions/ModeColumnSpec.js index 1189b30ca6..446e3b1030 100644 --- a/platform/features/timeline/test/actions/ModeColumnSpec.js +++ b/platform/features/timeline/test/actions/ModeColumnSpec.js @@ -44,11 +44,11 @@ define( beforeEach(function () { mockDomainObject = jasmine.createSpyObj( 'domainObject', - [ 'getId', 'getModel', 'getCapability' ] + ['getId', 'getModel', 'getCapability'] ); testModel = { relationships: { - modes: [ 'a', 'b', 'c', 'd', 'e', 'f' ] + modes: ['a', 'b', 'c', 'd', 'e', 'f'] } }; mockDomainObject.getModel.andReturn(testModel); @@ -60,7 +60,7 @@ define( }); it("returns nothing when relationships are exceeded", function () { - testModel.relationships.modes = [ 'foo' ]; + testModel.relationships.modes = ['foo']; expect(column.value(mockDomainObject)).toEqual(""); }); @@ -72,4 +72,4 @@ define( }); } -); \ No newline at end of file +); diff --git a/platform/features/timeline/test/actions/TimelineColumnizerSpec.js b/platform/features/timeline/test/actions/TimelineColumnizerSpec.js index d47d493ca9..d29bb14278 100644 --- a/platform/features/timeline/test/actions/TimelineColumnizerSpec.js +++ b/platform/features/timeline/test/actions/TimelineColumnizerSpec.js @@ -50,7 +50,7 @@ define( beforeEach(function () { var mockTimespan = jasmine.createSpyObj( 'timespan', - [ 'getStart', 'getEnd' ] + ['getStart', 'getEnd'] ); testMetadata = [ @@ -59,8 +59,8 @@ define( ]; mockDomainObjects = [ - { composition: [ 'a', 'b', 'c' ] }, - { relationships: { modes: [ 'x', 'y' ] } }, + { composition: ['a', 'b', 'c'] }, + { relationships: { modes: ['x', 'y'] } }, { } ].map(makeMockDomainObject); diff --git a/platform/features/timeline/test/actions/TimelineTraverserSpec.js b/platform/features/timeline/test/actions/TimelineTraverserSpec.js index 3cec488b0d..48fb584162 100644 --- a/platform/features/timeline/test/actions/TimelineTraverserSpec.js +++ b/platform/features/timeline/test/actions/TimelineTraverserSpec.js @@ -82,9 +82,9 @@ define([ beforeEach(function () { testModels = { - a: { composition: [ 'b', 'c' ]}, - b: { composition: [ 'c' ] }, - c: { relationships: { modes: [ 'd' ] } }, + a: { composition: ['b', 'c']}, + b: { composition: ['c'] }, + c: { relationships: { modes: ['d'] } }, d: {}, unreachable: {} }; @@ -132,4 +132,4 @@ define([ }); }); -}); \ No newline at end of file +}); diff --git a/platform/features/timeline/test/actions/TimespanColumnSpec.js b/platform/features/timeline/test/actions/TimespanColumnSpec.js index 5eea2a9281..efe8df8bff 100644 --- a/platform/features/timeline/test/actions/TimespanColumnSpec.js +++ b/platform/features/timeline/test/actions/TimespanColumnSpec.js @@ -36,11 +36,11 @@ define( }; mockTimespan = jasmine.createSpyObj( 'timespan', - [ 'getStart', 'getEnd' ] + ['getStart', 'getEnd'] ); mockDomainObject = jasmine.createSpyObj( 'domainObject', - [ 'useCapability', 'hasCapability' ] + ['useCapability', 'hasCapability'] ); mockTimespan.getStart.andReturn(testTimes.start); mockTimespan.getEnd.andReturn(testTimes.end); @@ -52,7 +52,7 @@ define( }); }); - [ "start", "end" ].forEach(function (bound) { + ["start", "end"].forEach(function (bound) { describe("when referring to " + bound + " times", function () { var name = bound.charAt(0).toUpperCase() + bound.slice(1); @@ -90,4 +90,4 @@ define( }); } -); \ No newline at end of file +); diff --git a/platform/features/timeline/test/capabilities/ActivityTimespanCapabilitySpec.js b/platform/features/timeline/test/capabilities/ActivityTimespanCapabilitySpec.js index 88fb6e9418..dcd2170bb6 100644 --- a/platform/features/timeline/test/capabilities/ActivityTimespanCapabilitySpec.js +++ b/platform/features/timeline/test/capabilities/ActivityTimespanCapabilitySpec.js @@ -41,7 +41,7 @@ define( mockQ = jasmine.createSpyObj('$q', ['when']); mockDomainObject = jasmine.createSpyObj( 'domainObject', - [ 'getModel', 'getCapability' ] + ['getModel', 'getCapability'] ); mockQ.when.andCallFake(asPromise); diff --git a/platform/features/timeline/test/capabilities/ActivityTimespanSpec.js b/platform/features/timeline/test/capabilities/ActivityTimespanSpec.js index 34e3946ea7..837f0fd726 100644 --- a/platform/features/timeline/test/capabilities/ActivityTimespanSpec.js +++ b/platform/features/timeline/test/capabilities/ActivityTimespanSpec.js @@ -96,4 +96,4 @@ define( }); } -); \ No newline at end of file +); diff --git a/platform/features/timeline/test/capabilities/ActivityUtilizationSpec.js b/platform/features/timeline/test/capabilities/ActivityUtilizationSpec.js index 06cbe11aac..74ab27fb50 100644 --- a/platform/features/timeline/test/capabilities/ActivityUtilizationSpec.js +++ b/platform/features/timeline/test/capabilities/ActivityUtilizationSpec.js @@ -36,4 +36,4 @@ define( }); } -); \ No newline at end of file +); diff --git a/platform/features/timeline/test/capabilities/CostCapabilitySpec.js b/platform/features/timeline/test/capabilities/CostCapabilitySpec.js index 49aabfff65..3134d1ea58 100644 --- a/platform/features/timeline/test/capabilities/CostCapabilitySpec.js +++ b/platform/features/timeline/test/capabilities/CostCapabilitySpec.js @@ -31,7 +31,7 @@ define( beforeEach(function () { var mockDomainObject = jasmine.createSpyObj( 'domainObject', - [ 'getModel', 'getId' ] + ['getModel', 'getId'] ); testModel = { diff --git a/platform/features/timeline/test/capabilities/CumulativeGraphSpec.js b/platform/features/timeline/test/capabilities/CumulativeGraphSpec.js index bb03a896b2..0dacf2436c 100644 --- a/platform/features/timeline/test/capabilities/CumulativeGraphSpec.js +++ b/platform/features/timeline/test/capabilities/CumulativeGraphSpec.js @@ -30,11 +30,11 @@ define( graph; beforeEach(function () { - points = [ 0, 10, -10, -100, 20, 100, 0 ]; + points = [0, 10, -10, -100, 20, 100, 0]; mockGraph = jasmine.createSpyObj( 'graph', - [ 'getPointCount', 'getDomainValue', 'getRangeValue' ] + ['getPointCount', 'getDomainValue', 'getRangeValue'] ); mockGraph.getPointCount.andReturn(points.length * 2); @@ -83,4 +83,4 @@ define( }); } -); \ No newline at end of file +); diff --git a/platform/features/timeline/test/capabilities/GraphCapabilitySpec.js b/platform/features/timeline/test/capabilities/GraphCapabilitySpec.js index 3a4761fda2..bffbe21bad 100644 --- a/platform/features/timeline/test/capabilities/GraphCapabilitySpec.js +++ b/platform/features/timeline/test/capabilities/GraphCapabilitySpec.js @@ -42,7 +42,7 @@ define( mockQ = jasmine.createSpyObj('$q', ['when']); mockDomainObject = jasmine.createSpyObj( 'domainObject', - [ 'getId', 'getModel', 'useCapability' ] + ['getId', 'getModel', 'useCapability'] ); testModel = { diff --git a/platform/features/timeline/test/capabilities/ResourceGraphSpec.js b/platform/features/timeline/test/capabilities/ResourceGraphSpec.js index b124af9343..ed4acbc0fc 100644 --- a/platform/features/timeline/test/capabilities/ResourceGraphSpec.js +++ b/platform/features/timeline/test/capabilities/ResourceGraphSpec.js @@ -43,14 +43,14 @@ define( expect(graph.getPointCount()).toEqual(16); // Should get two values at every time stamp, for step-like appearance - [ 5, 15, 40, 50, 100, 120, 150, 180].forEach(function (v, i) { + [5, 15, 40, 50, 100, 120, 150, 180].forEach(function (v, i) { expect(graph.getDomainValue(i * 2)).toEqual(v); expect(graph.getDomainValue(i * 2 + 1)).toEqual(v); }); // Should also repeat values at subsequent indexes, but offset differently, // for horizontal spans between steps - [ 0, 42, 72, 42, 20, -22, 0, -10].forEach(function (v, i) { + [0, 42, 72, 42, 20, -22, 0, -10].forEach(function (v, i) { expect(graph.getRangeValue(i * 2)).toEqual(v); // Offset backwards; wrap around end of the series expect(graph.getRangeValue((16 + i * 2 - 1) % 16)).toEqual(v); @@ -72,4 +72,4 @@ define( }); } -); \ No newline at end of file +); diff --git a/platform/features/timeline/test/capabilities/TimelineTimespanCapabilitySpec.js b/platform/features/timeline/test/capabilities/TimelineTimespanCapabilitySpec.js index dc11dba72f..27b8bb2436 100644 --- a/platform/features/timeline/test/capabilities/TimelineTimespanCapabilitySpec.js +++ b/platform/features/timeline/test/capabilities/TimelineTimespanCapabilitySpec.js @@ -45,30 +45,34 @@ define( mockQ = jasmine.createSpyObj('$q', ['when', 'all']); mockDomainObject = jasmine.createSpyObj( 'domainObject', - [ 'getModel', 'getCapability', 'useCapability' ] + ['getModel', 'getCapability', 'useCapability'] ); mockChildA = jasmine.createSpyObj( 'childA', - [ 'getModel', 'useCapability', 'hasCapability' ] + ['getModel', 'useCapability', 'hasCapability'] ); mockChildB = jasmine.createSpyObj( 'childA', - [ 'getModel', 'useCapability', 'hasCapability' ] + ['getModel', 'useCapability', 'hasCapability'] ); mockTimespanA = jasmine.createSpyObj( 'timespanA', - [ 'getEnd' ] + ['getEnd'] ); mockTimespanB = jasmine.createSpyObj( 'timespanB', - [ 'getEnd' ] + ['getEnd'] ); mockQ.when.andCallFake(asPromise); mockQ.all.andCallFake(function (values) { var result = []; - function addResult(v) { result.push(v); } - function promiseResult(v) { asPromise(v).then(addResult); } + function addResult(v) { + result.push(v); + } + function promiseResult(v) { + asPromise(v).then(addResult); + } values.forEach(promiseResult); return asPromise(result); }); @@ -83,7 +87,7 @@ define( }); mockDomainObject.useCapability.andCallFake(function (c) { if (c === 'composition') { - return asPromise([ mockChildA, mockChildB ]); + return asPromise([mockChildA, mockChildB]); } }); mockChildA.hasCapability.andReturn(true); diff --git a/platform/features/timeline/test/capabilities/TimelineTimespanSpec.js b/platform/features/timeline/test/capabilities/TimelineTimespanSpec.js index 7cde0ec5fa..2d33035913 100644 --- a/platform/features/timeline/test/capabilities/TimelineTimespanSpec.js +++ b/platform/features/timeline/test/capabilities/TimelineTimespanSpec.js @@ -51,7 +51,7 @@ define( mutationModel = JSON.parse(JSON.stringify(testModel)); mockMutation = jasmine.createSpyObj("mutation", ["mutate"]); - mockTimespans = [ 44000, 65000, 1100 ].map(makeMockTimespan); + mockTimespans = [44000, 65000, 1100].map(makeMockTimespan); mockMutation.mutate.andCallFake(function (mutator) { mutator(mutationModel); @@ -107,4 +107,4 @@ define( }); }); } -); \ No newline at end of file +); diff --git a/platform/features/timeline/test/capabilities/TimelineUtilizationSpec.js b/platform/features/timeline/test/capabilities/TimelineUtilizationSpec.js index e229251900..0fd44795b4 100644 --- a/platform/features/timeline/test/capabilities/TimelineUtilizationSpec.js +++ b/platform/features/timeline/test/capabilities/TimelineUtilizationSpec.js @@ -36,4 +36,4 @@ define( }); } -); \ No newline at end of file +); diff --git a/platform/features/timeline/test/capabilities/UtilizationCapabilitySpec.js b/platform/features/timeline/test/capabilities/UtilizationCapabilitySpec.js index 71a474e4c7..3899ce8120 100644 --- a/platform/features/timeline/test/capabilities/UtilizationCapabilitySpec.js +++ b/platform/features/timeline/test/capabilities/UtilizationCapabilitySpec.js @@ -84,15 +84,15 @@ define( mockQ = jasmine.createSpyObj('$q', ['when', 'all']); mockDomainObject = jasmine.createSpyObj( 'domainObject', - [ 'getId', 'getModel', 'getCapability', 'useCapability' ] + ['getId', 'getModel', 'getCapability', 'useCapability'] ); mockRelationship = jasmine.createSpyObj( 'relationship', - [ 'getRelatedObjects' ] + ['getRelatedObjects'] ); mockComposition = jasmine.createSpyObj( 'composition', - [ 'invoke' ] + ['invoke'] ); mockCallback = jasmine.createSpy('callback'); diff --git a/platform/features/timeline/test/controllers/ActivityModeValuesControllerSpec.js b/platform/features/timeline/test/controllers/ActivityModeValuesControllerSpec.js index fdef2e9f09..d6eb96d81b 100644 --- a/platform/features/timeline/test/controllers/ActivityModeValuesControllerSpec.js +++ b/platform/features/timeline/test/controllers/ActivityModeValuesControllerSpec.js @@ -48,4 +48,4 @@ define( }); }); } -); \ No newline at end of file +); diff --git a/platform/features/timeline/test/controllers/TimelineControllerSpec.js b/platform/features/timeline/test/controllers/TimelineControllerSpec.js index f740c7e59b..9e777b0d8e 100644 --- a/platform/features/timeline/test/controllers/TimelineControllerSpec.js +++ b/platform/features/timeline/test/controllers/TimelineControllerSpec.js @@ -99,7 +99,7 @@ define( mockScope = jasmine.createSpyObj( "$scope", - [ '$watch', '$on' ] + ['$watch', '$on'] ); mockLoader = jasmine.createSpyObj('objectLoader', ['load']); mockDomainObject = mockA; @@ -245,4 +245,4 @@ define( }); } -); \ No newline at end of file +); diff --git a/platform/features/timeline/test/controllers/TimelineGanttControllerSpec.js b/platform/features/timeline/test/controllers/TimelineGanttControllerSpec.js index 2eb15a08ff..c7f16077fa 100644 --- a/platform/features/timeline/test/controllers/TimelineGanttControllerSpec.js +++ b/platform/features/timeline/test/controllers/TimelineGanttControllerSpec.js @@ -61,7 +61,9 @@ define( mockTimespan.getDuration.andReturn(50); mockTimespan.getEnd.andReturn(150); - mockToPixels.andCallFake(function (t) { return t * 10; }); + mockToPixels.andCallFake(function (t) { + return t * 10; + }); controller = new TimelineGanttController(TEST_MAX_OFFSCREEN); }); @@ -96,4 +98,4 @@ define( }); } -); \ No newline at end of file +); diff --git a/platform/features/timeline/test/controllers/TimelineGraphControllerSpec.js b/platform/features/timeline/test/controllers/TimelineGraphControllerSpec.js index 0fb6082a5d..51e9de94a4 100644 --- a/platform/features/timeline/test/controllers/TimelineGraphControllerSpec.js +++ b/platform/features/timeline/test/controllers/TimelineGraphControllerSpec.js @@ -32,7 +32,7 @@ define( beforeEach(function () { mockScope = jasmine.createSpyObj( '$scope', - [ '$watchCollection' ] + ['$watchCollection'] ); testResources = [ { key: 'abc', name: "Some name" }, @@ -58,7 +58,7 @@ define( // Supply new parameters mockScope.$watchCollection.mostRecentCall.args[1]({ - graphs: [ mockGraphA, mockGraphB ], + graphs: [mockGraphA, mockGraphB], origin: 9, duration: 144 }); diff --git a/platform/features/timeline/test/controllers/TimelineTableControllerSpec.js b/platform/features/timeline/test/controllers/TimelineTableControllerSpec.js index 1012476cb5..bb66becf27 100644 --- a/platform/features/timeline/test/controllers/TimelineTableControllerSpec.js +++ b/platform/features/timeline/test/controllers/TimelineTableControllerSpec.js @@ -38,7 +38,7 @@ define( // This controller's job is just to expose the formatter // in scope, so simply verify that the two agree. it("formats durations", function () { - [ 0, 100, 4123, 93600, 748801230012].forEach(function (n) { + [0, 100, 4123, 93600, 748801230012].forEach(function (n) { expect(controller.niceTime(n)) .toEqual(formatter.format(n)); }); diff --git a/platform/features/timeline/test/controllers/TimelineTickControllerSpec.js b/platform/features/timeline/test/controllers/TimelineTickControllerSpec.js index 7475061cd7..ddb53204a5 100644 --- a/platform/features/timeline/test/controllers/TimelineTickControllerSpec.js +++ b/platform/features/timeline/test/controllers/TimelineTickControllerSpec.js @@ -83,4 +83,4 @@ define( }); } -); \ No newline at end of file +); diff --git a/platform/features/timeline/test/controllers/TimelineZoomControllerSpec.js b/platform/features/timeline/test/controllers/TimelineZoomControllerSpec.js index d7322512d5..1365fca7d6 100644 --- a/platform/features/timeline/test/controllers/TimelineZoomControllerSpec.js +++ b/platform/features/timeline/test/controllers/TimelineZoomControllerSpec.js @@ -90,7 +90,9 @@ define( mockScope.domainObject.getCapability.andCallFake(function (c) { if (c === 'editor') { return { - inEditContext: function () {return true;} + inEditContext: function () { + return true; + } }; } }); diff --git a/platform/features/timeline/test/controllers/drag/TimelineDragHandleFactorySpec.js b/platform/features/timeline/test/controllers/drag/TimelineDragHandleFactorySpec.js index 982380ab5e..1ef3fe6733 100644 --- a/platform/features/timeline/test/controllers/drag/TimelineDragHandleFactorySpec.js +++ b/platform/features/timeline/test/controllers/drag/TimelineDragHandleFactorySpec.js @@ -35,19 +35,19 @@ define( beforeEach(function () { mockDragHandler = jasmine.createSpyObj( 'dragHandler', - [ 'start' ] + ['start'] ); mockSnapHandler = jasmine.createSpyObj( 'snapHandler', - [ 'snap' ] + ['snap'] ); mockDomainObject = jasmine.createSpyObj( 'domainObject', - [ 'getCapability', 'getId' ] + ['getCapability', 'getId'] ); mockType = jasmine.createSpyObj( 'type', - [ 'instanceOf' ] + ['instanceOf'] ); mockDomainObject.getId.andReturn('test-id'); diff --git a/platform/features/timeline/test/controllers/drag/TimelineDragHandlerSpec.js b/platform/features/timeline/test/controllers/drag/TimelineDragHandlerSpec.js index 98e610f68b..502d2e7642 100644 --- a/platform/features/timeline/test/controllers/drag/TimelineDragHandlerSpec.js +++ b/platform/features/timeline/test/controllers/drag/TimelineDragHandlerSpec.js @@ -81,15 +81,15 @@ define( ['a', 'b', 'c', 'd', 'e', 'f'].forEach(function (id, index) { mockTimespans[id] = jasmine.createSpyObj( 'timespan-' + id, - [ 'getStart', 'getEnd', 'getDuration', 'setStart', 'setEnd', 'setDuration' ] + ['getStart', 'getEnd', 'getDuration', 'setStart', 'setEnd', 'setDuration'] ); mockPersists[id] = jasmine.createSpyObj( 'persistence-' + id, - [ 'persist' ] + ['persist'] ); mockMutations[id] = jasmine.createSpyObj( 'mutation-' + id, - [ 'mutate' ] + ['mutate'] ); mockTimespans[id].getStart.andReturn(index * 1000); mockTimespans[id].getDuration.andReturn(4000 + index); @@ -225,4 +225,4 @@ define( }); } -); \ No newline at end of file +); diff --git a/platform/features/timeline/test/controllers/drag/TimelineDragPopulatorSpec.js b/platform/features/timeline/test/controllers/drag/TimelineDragPopulatorSpec.js index c37c34f8b0..bfb2176e18 100644 --- a/platform/features/timeline/test/controllers/drag/TimelineDragPopulatorSpec.js +++ b/platform/features/timeline/test/controllers/drag/TimelineDragPopulatorSpec.js @@ -69,4 +69,4 @@ define( }); } -); \ No newline at end of file +); diff --git a/platform/features/timeline/test/controllers/drag/TimelineEndHandleSpec.js b/platform/features/timeline/test/controllers/drag/TimelineEndHandleSpec.js index a48e8ea8f5..aa87903c48 100644 --- a/platform/features/timeline/test/controllers/drag/TimelineEndHandleSpec.js +++ b/platform/features/timeline/test/controllers/drag/TimelineEndHandleSpec.js @@ -33,15 +33,15 @@ define( beforeEach(function () { mockDragHandler = jasmine.createSpyObj( 'dragHandler', - [ 'end', 'persist' ] + ['end', 'persist'] ); mockSnapHandler = jasmine.createSpyObj( 'snapHandler', - [ 'snap' ] + ['snap'] ); mockZoomController = jasmine.createSpyObj( 'zoom', - [ 'toMillis', 'toPixels' ] + ['toMillis', 'toPixels'] ); mockDragHandler.end.andReturn(12321); @@ -112,4 +112,4 @@ define( }); } -); \ No newline at end of file +); diff --git a/platform/features/timeline/test/controllers/drag/TimelineMoveHandleSpec.js b/platform/features/timeline/test/controllers/drag/TimelineMoveHandleSpec.js index 0ce25cc13f..fbce2d8212 100644 --- a/platform/features/timeline/test/controllers/drag/TimelineMoveHandleSpec.js +++ b/platform/features/timeline/test/controllers/drag/TimelineMoveHandleSpec.js @@ -33,15 +33,15 @@ define( beforeEach(function () { mockDragHandler = jasmine.createSpyObj( 'dragHandler', - [ 'start', 'duration', 'end', 'move', 'persist' ] + ['start', 'duration', 'end', 'move', 'persist'] ); mockSnapHandler = jasmine.createSpyObj( 'snapHandler', - [ 'snap' ] + ['snap'] ); mockZoomController = jasmine.createSpyObj( 'zoom', - [ 'toMillis', 'toPixels' ] + ['toMillis', 'toPixels'] ); mockDragHandler.start.andReturn(12321); @@ -179,4 +179,4 @@ define( }); } -); \ No newline at end of file +); diff --git a/platform/features/timeline/test/controllers/drag/TimelineSnapHandlerSpec.js b/platform/features/timeline/test/controllers/drag/TimelineSnapHandlerSpec.js index 2314d08cc2..36fb30188b 100644 --- a/platform/features/timeline/test/controllers/drag/TimelineSnapHandlerSpec.js +++ b/platform/features/timeline/test/controllers/drag/TimelineSnapHandlerSpec.js @@ -34,7 +34,7 @@ define( mockDragHandler = jasmine.createSpyObj( 'dragHandler', - [ 'start', 'end', 'ids' ] + ['start', 'end', 'ids'] ); mockDragHandler.ids.andReturn(['a', 'b', 'c', 'd']); @@ -76,4 +76,4 @@ define( }); } -); \ No newline at end of file +); diff --git a/platform/features/timeline/test/controllers/drag/TimelineStartHandleSpec.js b/platform/features/timeline/test/controllers/drag/TimelineStartHandleSpec.js index 2869a48148..de7d3cb643 100644 --- a/platform/features/timeline/test/controllers/drag/TimelineStartHandleSpec.js +++ b/platform/features/timeline/test/controllers/drag/TimelineStartHandleSpec.js @@ -33,15 +33,15 @@ define( beforeEach(function () { mockDragHandler = jasmine.createSpyObj( 'dragHandler', - [ 'start', 'persist' ] + ['start', 'persist'] ); mockSnapHandler = jasmine.createSpyObj( 'snapHandler', - [ 'snap' ] + ['snap'] ); mockZoomController = jasmine.createSpyObj( 'zoom', - [ 'toMillis', 'toPixels' ] + ['toMillis', 'toPixels'] ); mockDragHandler.start.andReturn(12321); @@ -111,4 +111,4 @@ define( }); } -); \ No newline at end of file +); diff --git a/platform/features/timeline/test/controllers/graph/TimelineGraphPopulatorSpec.js b/platform/features/timeline/test/controllers/graph/TimelineGraphPopulatorSpec.js index 08cddf1b24..69a5148b59 100644 --- a/platform/features/timeline/test/controllers/graph/TimelineGraphPopulatorSpec.js +++ b/platform/features/timeline/test/controllers/graph/TimelineGraphPopulatorSpec.js @@ -48,9 +48,9 @@ define( beforeEach(function () { testResources = { - a: [ 'xyz', 'abc' ], - b: [ 'xyz' ], - c: [ 'xyz', 'abc', 'def', 'ghi' ] + a: ['xyz', 'abc'], + b: ['xyz'], + c: ['xyz', 'abc', 'def', 'ghi'] }; mockQ = jasmine.createSpyObj('$q', ['when', 'all']); @@ -58,16 +58,16 @@ define( mockSwimlanes = ['a', 'b', 'c'].map(function (k) { var mockSwimlane = jasmine.createSpyObj( 'swimlane-' + k, - [ 'graph', 'color' ] + ['graph', 'color'] ), mockGraph = jasmine.createSpyObj( 'graph-' + k, - [ 'getPointCount', 'getDomainValue', 'getRangeValue' ] + ['getPointCount', 'getDomainValue', 'getRangeValue'] ); mockSwimlane.graph.andReturn(true); mockSwimlane.domainObject = jasmine.createSpyObj( 'domainObject-' + k, - [ 'getCapability', 'hasCapability', 'useCapability', 'getId' ] + ['getCapability', 'hasCapability', 'useCapability', 'getId'] ); mockSwimlane.color.andReturn('#' + k); // Provide just enough information about graphs to support @@ -148,4 +148,4 @@ define( }); } -); \ No newline at end of file +); diff --git a/platform/features/timeline/test/controllers/graph/TimelineGraphRendererSpec.js b/platform/features/timeline/test/controllers/graph/TimelineGraphRendererSpec.js index e4137e0807..74e9e18e79 100644 --- a/platform/features/timeline/test/controllers/graph/TimelineGraphRendererSpec.js +++ b/platform/features/timeline/test/controllers/graph/TimelineGraphRendererSpec.js @@ -72,4 +72,4 @@ define( }); } -); \ No newline at end of file +); diff --git a/platform/features/timeline/test/controllers/graph/TimelineGraphSpec.js b/platform/features/timeline/test/controllers/graph/TimelineGraphSpec.js index cfaeba677c..305da86334 100644 --- a/platform/features/timeline/test/controllers/graph/TimelineGraphSpec.js +++ b/platform/features/timeline/test/controllers/graph/TimelineGraphSpec.js @@ -42,9 +42,9 @@ define( beforeEach(function () { testColors = { - a: [ 0, 1, 0 ], - b: [ 1, 0, 1 ], - c: [ 1, 0, 0 ] + a: [0, 1, 0], + b: [1, 0, 1], + c: [1, 0, 0] }; mockGraphs = []; @@ -53,11 +53,11 @@ define( ['a', 'b', 'c'].forEach(function (k, i) { var mockGraph = jasmine.createSpyObj( 'utilization-' + k, - [ 'getPointCount', 'getDomainValue', 'getRangeValue' ] + ['getPointCount', 'getDomainValue', 'getRangeValue'] ); mockDomainObjects[k] = jasmine.createSpyObj( 'domainObject-' + k, - [ 'getCapability', 'useCapability' ] + ['getCapability', 'useCapability'] ); mockDomainObjects[k].useCapability.andReturn(asPromise({ testResource: mockGraph @@ -72,7 +72,7 @@ define( mockRenderer = jasmine.createSpyObj( 'renderer', - [ 'render', 'decode' ] + ['render', 'decode'] ); mockRenderer.render.andCallFake(function (utilization) { @@ -167,4 +167,4 @@ define( }); } -); \ No newline at end of file +); diff --git a/platform/features/timeline/test/controllers/swimlane/TimelineColorAssignerSpec.js b/platform/features/timeline/test/controllers/swimlane/TimelineColorAssignerSpec.js index 989f8153ee..5848c25deb 100644 --- a/platform/features/timeline/test/controllers/swimlane/TimelineColorAssignerSpec.js +++ b/platform/features/timeline/test/controllers/swimlane/TimelineColorAssignerSpec.js @@ -49,10 +49,14 @@ define( var colors = {}, i, ids = []; // Add item to set - function set(c) { colors[c] = true; } + function set(c) { + colors[c] = true; + } // Generate ids - for (i = 0; i < 30; i += 1) { ids.push("id" + i); } + for (i = 0; i < 30; i += 1) { + ids.push("id" + i); + } // Assign colors to each id, then retrieve colors, // storing into the set diff --git a/platform/features/timeline/test/controllers/swimlane/TimelineProxySpec.js b/platform/features/timeline/test/controllers/swimlane/TimelineProxySpec.js index 1de3a7d9e1..7490d61346 100644 --- a/platform/features/timeline/test/controllers/swimlane/TimelineProxySpec.js +++ b/platform/features/timeline/test/controllers/swimlane/TimelineProxySpec.js @@ -38,16 +38,16 @@ define( ); mockSelection = jasmine.createSpyObj( 'selection', - [ 'get' ] + ['get'] ); mockActionCapability = jasmine.createSpyObj( 'action', - [ 'getActions' ] + ['getActions'] ); mockActions = ['a', 'b', 'c'].map(function (type) { var mockAction = jasmine.createSpyObj( 'action-' + type, - [ 'perform', 'getMetadata' ] + ['perform', 'getMetadata'] ); mockAction.getMetadata.andReturn({ type: type }); return mockAction; diff --git a/platform/features/timeline/test/controllers/swimlane/TimelineSwimlaneDecoratorSpec.js b/platform/features/timeline/test/controllers/swimlane/TimelineSwimlaneDecoratorSpec.js index c4a059f7f7..56fb532f27 100644 --- a/platform/features/timeline/test/controllers/swimlane/TimelineSwimlaneDecoratorSpec.js +++ b/platform/features/timeline/test/controllers/swimlane/TimelineSwimlaneDecoratorSpec.js @@ -43,7 +43,7 @@ define( mockSwimlane.domainObject = jasmine.createSpyObj( 'domainObject', - [ 'getCapability', 'getModel' ] + ['getCapability', 'getModel'] ); mockCapabilities.mutation = jasmine.createSpyObj( @@ -158,11 +158,11 @@ define( it("fires the 'remove' action when remove is called", function () { var mockChild = jasmine.createSpyObj( 'childObject', - [ 'getCapability', 'getModel' ] + ['getCapability', 'getModel'] ), mockAction = jasmine.createSpyObj( 'action', - [ 'perform' ] + ['perform'] ); mockChild.getCapability.andCallFake(function (c) { diff --git a/platform/features/timeline/test/controllers/swimlane/TimelineSwimlaneDropHandlerSpec.js b/platform/features/timeline/test/controllers/swimlane/TimelineSwimlaneDropHandlerSpec.js index 3eed051f45..ebb01159c9 100644 --- a/platform/features/timeline/test/controllers/swimlane/TimelineSwimlaneDropHandlerSpec.js +++ b/platform/features/timeline/test/controllers/swimlane/TimelineSwimlaneDropHandlerSpec.js @@ -41,28 +41,28 @@ define( mockSwimlane = jasmine.createSpyObj( "swimlane", - [ "highlight", "highlightBottom" ] + ["highlight", "highlightBottom"] ); // domainObject, idPath, children, expanded mockSwimlane.domainObject = jasmine.createSpyObj( "domainObject", - [ "getId", "getCapability", "useCapability", "hasCapability" ] + ["getId", "getCapability", "useCapability", "hasCapability"] ); - mockSwimlane.idPath = [ 'a', 'b' ]; - mockSwimlane.children = [ {} ]; + mockSwimlane.idPath = ['a', 'b']; + mockSwimlane.children = [{}]; mockSwimlane.expanded = true; mockSwimlane.parent = {}; mockSwimlane.parent.idPath = ['a']; mockSwimlane.parent.domainObject = jasmine.createSpyObj( "domainObject", - [ "getId", "getCapability", "useCapability", "hasCapability" ] + ["getId", "getCapability", "useCapability", "hasCapability"] ); - mockSwimlane.parent.children = [ mockSwimlane ]; + mockSwimlane.parent.children = [mockSwimlane]; mockSwimlane.children[0].domainObject = jasmine.createSpyObj( "domainObject", - [ "getId", "getCapability", "useCapability", "hasCapability" ] + ["getId", "getCapability", "useCapability", "hasCapability"] ); mockAction = jasmine.createSpyObj('action', ['perform']); @@ -73,11 +73,11 @@ define( mockOtherObject = jasmine.createSpyObj( "domainObject", - [ "getId", "getCapability", "useCapability", "hasCapability" ] + ["getId", "getCapability", "useCapability", "hasCapability"] ); mockActionCapability = jasmine.createSpyObj("action", ["perform", "getActions"]); mockPersistence = jasmine.createSpyObj("persistence", ["persist"]); - mockContext = jasmine.createSpyObj('context', [ 'getParent' ]); + mockContext = jasmine.createSpyObj('context', ['getParent']); mockActionCapability.getActions.andReturn([mockAction]); mockSwimlane.parent.domainObject.getId.andReturn('a'); @@ -152,7 +152,7 @@ define( }); it("inserts into when highlighted", function () { - var testModel = { composition: [ 'c' ] }; + var testModel = { composition: ['c'] }; mockSwimlane.highlight.andReturn(true); handler.drop('d', mockOtherObject); // Should have mutated @@ -167,7 +167,7 @@ define( }); it("inserts after as a peer when highlighted at the bottom", function () { - var testModel = { composition: [ 'x', 'b', 'y' ] }; + var testModel = { composition: ['x', 'b', 'y'] }; mockSwimlane.highlightBottom.andReturn(true); mockSwimlane.expanded = false; handler.drop('d', mockOtherObject); @@ -177,11 +177,11 @@ define( // Run the mutator mockSwimlane.parent.domainObject.useCapability.mostRecentCall .args[1](testModel); - expect(testModel.composition).toEqual([ 'x', 'b', 'd', 'y']); + expect(testModel.composition).toEqual(['x', 'b', 'd', 'y']); }); it("inserts into when highlighted at the bottom and expanded", function () { - var testModel = { composition: [ 'c' ] }; + var testModel = { composition: ['c'] }; mockSwimlane.highlightBottom.andReturn(true); mockSwimlane.expanded = true; handler.drop('d', mockOtherObject); @@ -191,11 +191,11 @@ define( // Run the mutator mockSwimlane.domainObject.useCapability.mostRecentCall .args[1](testModel); - expect(testModel.composition).toEqual([ 'd', 'c' ]); + expect(testModel.composition).toEqual(['d', 'c']); }); it("inserts after as a peer when highlighted at the bottom and childless", function () { - var testModel = { composition: [ 'x', 'b', 'y' ] }; + var testModel = { composition: ['x', 'b', 'y'] }; mockSwimlane.highlightBottom.andReturn(true); mockSwimlane.expanded = true; mockSwimlane.children = []; @@ -206,11 +206,11 @@ define( // Run the mutator mockSwimlane.parent.domainObject.useCapability.mostRecentCall .args[1](testModel); - expect(testModel.composition).toEqual([ 'x', 'b', 'd', 'y']); + expect(testModel.composition).toEqual(['x', 'b', 'd', 'y']); }); it("allows reordering within a parent", function () { - var testModel = { composition: [ 'x', 'b', 'y', 'd' ] }; + var testModel = { composition: ['x', 'b', 'y', 'd'] }; mockSwimlane.highlightBottom.andReturn(true); mockSwimlane.expanded = true; @@ -227,7 +227,7 @@ define( runs(function () { mockSwimlane.parent.domainObject.useCapability.mostRecentCall .args[1](testModel); - expect(testModel.composition).toEqual([ 'x', 'b', 'd', 'y']); + expect(testModel.composition).toEqual(['x', 'b', 'd', 'y']); }); }); diff --git a/platform/features/timeline/test/controllers/swimlane/TimelineSwimlanePopulatorSpec.js b/platform/features/timeline/test/controllers/swimlane/TimelineSwimlanePopulatorSpec.js index d3eceaa27e..4fd374a412 100644 --- a/platform/features/timeline/test/controllers/swimlane/TimelineSwimlanePopulatorSpec.js +++ b/platform/features/timeline/test/controllers/swimlane/TimelineSwimlanePopulatorSpec.js @@ -160,4 +160,4 @@ define( }); } -); \ No newline at end of file +); diff --git a/platform/features/timeline/test/controllers/swimlane/TimelineSwimlaneSpec.js b/platform/features/timeline/test/controllers/swimlane/TimelineSwimlaneSpec.js index 0a047859f2..615b6f7501 100644 --- a/platform/features/timeline/test/controllers/swimlane/TimelineSwimlaneSpec.js +++ b/platform/features/timeline/test/controllers/swimlane/TimelineSwimlaneSpec.js @@ -36,7 +36,9 @@ define( testConfiguration; function asPromise(v) { - return { then: function (cb) { cb(v); } }; + return { then: function (cb) { + cb(v); + } }; } beforeEach(function () { @@ -218,4 +220,4 @@ define( }); }); } -); \ No newline at end of file +); diff --git a/platform/features/timeline/test/directives/MCTSwimlaneDropSpec.js b/platform/features/timeline/test/directives/MCTSwimlaneDropSpec.js index 315db101db..4f7b914db3 100644 --- a/platform/features/timeline/test/directives/MCTSwimlaneDropSpec.js +++ b/platform/features/timeline/test/directives/MCTSwimlaneDropSpec.js @@ -57,11 +57,11 @@ define( testAttrs = { mctSwimlaneDrop: "mockSwimlane" }; mockSwimlane = jasmine.createSpyObj( "swimlane", - [ "allowDropIn", "allowDropAfter", "drop", "highlight", "highlightBottom" ] + ["allowDropIn", "allowDropAfter", "drop", "highlight", "highlightBottom"] ); mockElement[0] = jasmine.createSpyObj( "realElement", - [ "getBoundingClientRect" ] + ["getBoundingClientRect"] ); mockElement[0].offsetHeight = TEST_HEIGHT; mockElement[0].getBoundingClientRect.andReturn({ top: TEST_TOP }); diff --git a/platform/features/timeline/test/services/ObjectLoaderSpec.js b/platform/features/timeline/test/services/ObjectLoaderSpec.js index cc7ee70b88..8828d92a06 100644 --- a/platform/features/timeline/test/services/ObjectLoaderSpec.js +++ b/platform/features/timeline/test/services/ObjectLoaderSpec.js @@ -54,7 +54,7 @@ define( function addDomainObject(id, children, capabilities) { var mockDomainObject = jasmine.createSpyObj( 'object-' + id, - [ 'useCapability', 'hasCapability', 'getId' ] + ['useCapability', 'hasCapability', 'getId'] ); mockDomainObject.getId.andReturn(id); @@ -72,7 +72,7 @@ define( } beforeEach(function () { - mockQ = jasmine.createSpyObj('$q', [ 'when', 'all' ]); + mockQ = jasmine.createSpyObj('$q', ['when', 'all']); mockCallback = jasmine.createSpy('callback'); mockDomainObjects = {}; testCompositions = {}; @@ -82,8 +82,12 @@ define( mockQ.when.andCallFake(asPromise); mockQ.all.andCallFake(function (values) { var result = []; - function addResult(v) { result.push(v); } - function promiseResult(v) { asPromise(v).then(addResult); } + function addResult(v) { + result.push(v); + } + function promiseResult(v) { + asPromise(v).then(addResult); + } values.forEach(promiseResult); return asPromise(result); }); @@ -152,4 +156,4 @@ define( }); } -); \ No newline at end of file +); diff --git a/platform/forms/src/MCTForm.js b/platform/forms/src/MCTForm.js index 4e422b1c45..13c859f0e6 100644 --- a/platform/forms/src/MCTForm.js +++ b/platform/forms/src/MCTForm.js @@ -58,7 +58,7 @@ define( template: formTemplate, // Use FormController to populate/respond to changes in scope - controller: [ '$scope', FormController ], + controller: ['$scope', FormController], // Initial an isolate scope scope: { diff --git a/platform/forms/src/controllers/ColorController.js b/platform/forms/src/controllers/ColorController.js index 2bf38e0c63..f91397be82 100644 --- a/platform/forms/src/controllers/ColorController.js +++ b/platform/forms/src/controllers/ColorController.js @@ -25,16 +25,16 @@ define( function () { var BASE_COLORS = [ - [ 136, 32, 32 ], - [ 224, 64, 64 ], - [ 240, 160, 72 ], - [ 255, 248, 96 ], - [ 128, 240, 72 ], - [ 128, 248, 248 ], - [ 88, 144, 224 ], - [ 0, 72, 240 ], - [ 136, 80, 240 ], - [ 224, 96, 248 ] + [136, 32, 32], + [224, 64, 64], + [240, 160, 72], + [255, 248, 96], + [128, 240, 72], + [128, 248, 248], + [88, 144, 224], + [0, 72, 240], + [136, 80, 240], + [224, 96, 248] ], GRADIENTS = [0.75, 0.50, 0.25, -0.25, -0.50, -0.75], GROUPS = []; diff --git a/platform/forms/src/controllers/DialogButtonController.js b/platform/forms/src/controllers/DialogButtonController.js index 0e6804bccb..f6431221a4 100644 --- a/platform/forms/src/controllers/DialogButtonController.js +++ b/platform/forms/src/controllers/DialogButtonController.js @@ -71,7 +71,7 @@ define( // Prepare the form; a single row buttonForm = { name: structure.title, - sections: [ { rows: [ row ] } ] + sections: [{ rows: [row] }] }; } diff --git a/platform/forms/test/MCTControlSpec.js b/platform/forms/test/MCTControlSpec.js index 3fcdc8d5e5..a588381ddc 100644 --- a/platform/forms/test/MCTControlSpec.js +++ b/platform/forms/test/MCTControlSpec.js @@ -45,7 +45,7 @@ define( } ]; - mockScope = jasmine.createSpyObj("$scope", [ "$watch" ]); + mockScope = jasmine.createSpyObj("$scope", ["$watch"]); mockLinker = jasmine.createSpyObj("templateLinker", ["link"]); mockChangeTemplate = jasmine.createSpy('changeTemplate'); mockLinker.link.andReturn(mockChangeTemplate); @@ -83,4 +83,4 @@ define( }); } -); \ No newline at end of file +); diff --git a/platform/forms/test/MCTFormSpec.js b/platform/forms/test/MCTFormSpec.js index 0be985212e..d2f5fc5c09 100644 --- a/platform/forms/test/MCTFormSpec.js +++ b/platform/forms/test/MCTFormSpec.js @@ -34,7 +34,7 @@ define( } beforeEach(function () { - mockScope = jasmine.createSpyObj("$scope", [ "$watch" ]); + mockScope = jasmine.createSpyObj("$scope", ["$watch"]); mockScope.$parent = {}; mctForm = new MCTForm(); }); @@ -111,4 +111,4 @@ define( }); } -); \ No newline at end of file +); diff --git a/platform/forms/test/MCTToolbarSpec.js b/platform/forms/test/MCTToolbarSpec.js index 10bc0ec3a3..61f0dae01c 100644 --- a/platform/forms/test/MCTToolbarSpec.js +++ b/platform/forms/test/MCTToolbarSpec.js @@ -34,7 +34,7 @@ define( } beforeEach(function () { - mockScope = jasmine.createSpyObj("$scope", [ "$watch" ]); + mockScope = jasmine.createSpyObj("$scope", ["$watch"]); mockScope.$parent = {}; mctToolbar = new MCTToolbar(); }); @@ -111,4 +111,4 @@ define( }); } -); \ No newline at end of file +); diff --git a/platform/forms/test/controllers/ColorControllerSpec.js b/platform/forms/test/controllers/ColorControllerSpec.js index ba76b4a26d..3f8bce3e05 100644 --- a/platform/forms/test/controllers/ColorControllerSpec.js +++ b/platform/forms/test/controllers/ColorControllerSpec.js @@ -67,4 +67,4 @@ define( }); }); } -); \ No newline at end of file +); diff --git a/platform/forms/test/controllers/CompositeControllerSpec.js b/platform/forms/test/controllers/CompositeControllerSpec.js index bf705bfac8..bec1d3a96e 100644 --- a/platform/forms/test/controllers/CompositeControllerSpec.js +++ b/platform/forms/test/controllers/CompositeControllerSpec.js @@ -52,4 +52,4 @@ define( }); } -); \ No newline at end of file +); diff --git a/platform/forms/test/controllers/DateTimeControllerSpec.js b/platform/forms/test/controllers/DateTimeControllerSpec.js index e2935365af..079cd0b80f 100644 --- a/platform/forms/test/controllers/DateTimeControllerSpec.js +++ b/platform/forms/test/controllers/DateTimeControllerSpec.js @@ -29,7 +29,7 @@ define( controller; beforeEach(function () { - mockScope = jasmine.createSpyObj("$scope", [ "$watch" ]); + mockScope = jasmine.createSpyObj("$scope", ["$watch"]); controller = new DateTimeController(mockScope); }); diff --git a/platform/forms/test/controllers/DialogButtonControllerSpec.js b/platform/forms/test/controllers/DialogButtonControllerSpec.js index 68803d2768..1aecb5d941 100644 --- a/platform/forms/test/controllers/DialogButtonControllerSpec.js +++ b/platform/forms/test/controllers/DialogButtonControllerSpec.js @@ -34,15 +34,15 @@ define( beforeEach(function () { mockScope = jasmine.createSpyObj( '$scope', - [ '$watch' ] + ['$watch'] ); mockDialogService = jasmine.createSpyObj( 'dialogService', - [ 'getUserInput' ] + ['getUserInput'] ); mockPromise = jasmine.createSpyObj( 'promise', - [ 'then' ] + ['then'] ); testStructure = { name: "A Test", @@ -132,4 +132,4 @@ define( }); }); } -); \ No newline at end of file +); diff --git a/platform/forms/test/controllers/FormControllerSpec.js b/platform/forms/test/controllers/FormControllerSpec.js index 9e37388e32..06f3ea93bd 100644 --- a/platform/forms/test/controllers/FormControllerSpec.js +++ b/platform/forms/test/controllers/FormControllerSpec.js @@ -29,7 +29,7 @@ define( controller; beforeEach(function () { - mockScope = jasmine.createSpyObj("$scope", [ "$watch" ]); + mockScope = jasmine.createSpyObj("$scope", ["$watch"]); mockScope.$parent = {}; controller = new FormController(mockScope); }); @@ -85,4 +85,4 @@ define( }); } -); \ No newline at end of file +); diff --git a/platform/framework/bundle.js b/platform/framework/bundle.js index bcc0dbb867..89c44feade 100644 --- a/platform/framework/bundle.js +++ b/platform/framework/bundle.js @@ -21,10 +21,10 @@ *****************************************************************************/ define([ - + 'legacyRegistry' ], function ( - + legacyRegistry ) { diff --git a/platform/framework/src/FrameworkLayer.js b/platform/framework/src/FrameworkLayer.js index 1f8910fe15..d1888085f0 100644 --- a/platform/framework/src/FrameworkLayer.js +++ b/platform/framework/src/FrameworkLayer.js @@ -102,4 +102,4 @@ define([ }; return FrameworkLayer; -}); \ No newline at end of file +}); diff --git a/platform/framework/src/load/Bundle.js b/platform/framework/src/load/Bundle.js index 44849568e5..3f05e23ae3 100644 --- a/platform/framework/src/load/Bundle.js +++ b/platform/framework/src/load/Bundle.js @@ -106,8 +106,8 @@ define( */ Bundle.prototype.getSourcePath = function (sourceFile) { var subpath = sourceFile ? - [ this.definition.sources, sourceFile ] : - [ this.definition.sources ]; + [this.definition.sources, sourceFile] : + [this.definition.sources]; return this.resolvePath(subpath); }; @@ -124,8 +124,8 @@ define( */ Bundle.prototype.getResourcePath = function (resourceFile) { var subpath = resourceFile ? - [ this.definition.resources, resourceFile ] : - [ this.definition.resources ]; + [this.definition.resources, resourceFile] : + [this.definition.resources]; return this.resolvePath(subpath); }; @@ -142,8 +142,8 @@ define( */ Bundle.prototype.getLibraryPath = function (libraryFile) { var subpath = libraryFile ? - [ this.definition.libraries, libraryFile ] : - [ this.definition.libraries ]; + [this.definition.libraries, libraryFile] : + [this.definition.libraries]; return this.resolvePath(subpath); }; diff --git a/platform/framework/src/load/BundleLoader.js b/platform/framework/src/load/BundleLoader.js index b40b8998ba..e8cbe5252e 100644 --- a/platform/framework/src/load/BundleLoader.js +++ b/platform/framework/src/load/BundleLoader.js @@ -73,7 +73,9 @@ define( // loadBundleDefinition, so at this point they are safe // to discard. function filterBundles(array) { - return array.filter(function (x) { return x !== undefined; }); + return array.filter(function (x) { + return x !== undefined; + }); } // Load a definition for a bundle diff --git a/platform/framework/src/register/ExtensionRegistrar.js b/platform/framework/src/register/ExtensionRegistrar.js index 4f15a2344a..0dcd86ea4c 100644 --- a/platform/framework/src/register/ExtensionRegistrar.js +++ b/platform/framework/src/register/ExtensionRegistrar.js @@ -92,7 +92,9 @@ define( // Always return a static value; used to represent plain // metadata as a single dependency in Angular. function staticFunction(value) { - return function () { return value; }; + return function () { + return value; + }; } // Utility function; create the second argument for Angular's diff --git a/platform/framework/test/FrameworkInitializerSpec.js b/platform/framework/test/FrameworkInitializerSpec.js index a8c2a6135d..f91c7dbc93 100644 --- a/platform/framework/test/FrameworkInitializerSpec.js +++ b/platform/framework/test/FrameworkInitializerSpec.js @@ -50,13 +50,17 @@ define( it("calls injected stages in order", function () { var result; - initializer.runApplication([]).then(function (v) { result = v; }); + initializer.runApplication([]).then(function (v) { + result = v; + }); waitsFor( - function () { return result !== undefined; }, - "promise resolution", - 250 - ); + function () { + return result !== undefined; + }, + "promise resolution", + 250 + ); runs(function () { expect(result).toEqual( @@ -67,4 +71,4 @@ define( }); } -); \ No newline at end of file +); diff --git a/platform/framework/test/LogLevelSpec.js b/platform/framework/test/LogLevelSpec.js index ccbba5a911..00a49077c5 100644 --- a/platform/framework/test/LogLevelSpec.js +++ b/platform/framework/test/LogLevelSpec.js @@ -95,4 +95,4 @@ define( }); } -); \ No newline at end of file +); diff --git a/platform/framework/test/bootstrap/ApplicationBootstrapperSpec.js b/platform/framework/test/bootstrap/ApplicationBootstrapperSpec.js index 740cf3d4aa..b4a64d62b8 100644 --- a/platform/framework/test/bootstrap/ApplicationBootstrapperSpec.js +++ b/platform/framework/test/bootstrap/ApplicationBootstrapperSpec.js @@ -104,4 +104,4 @@ define( }); } -); \ No newline at end of file +); diff --git a/platform/framework/test/load/BundleLoaderSpec.js b/platform/framework/test/load/BundleLoaderSpec.js index 89643bdd34..914f139ea2 100644 --- a/platform/framework/test/load/BundleLoaderSpec.js +++ b/platform/framework/test/load/BundleLoaderSpec.js @@ -44,7 +44,7 @@ define( beforeEach(function () { testBundles = { - "bundles.json": [ "bundle/a", "bundle/b"], + "bundles.json": ["bundle/a", "bundle/b"], "bundle/a/bundle.json": {"someValue": 6}, "bundle/b/bundle.json": {"someValue": 7} }; @@ -54,7 +54,7 @@ define( mockLog = jasmine.createSpyObj("$log", ["error", "warn", "info", "debug"]); mockRegistry = jasmine.createSpyObj( 'legacyRegistry', - [ 'list', 'contains', 'get' ] + ['list', 'contains', 'get'] ); mockRegistry.list.andReturn([]); mockRegistry.contains.andReturn(false); @@ -145,4 +145,4 @@ define( }); } -); \ No newline at end of file +); diff --git a/platform/framework/test/load/BundleSpec.js b/platform/framework/test/load/BundleSpec.js index 4362393d70..ced5e91069 100644 --- a/platform/framework/test/load/BundleSpec.js +++ b/platform/framework/test/load/BundleSpec.js @@ -78,17 +78,17 @@ define( it("reports all extensions that have been declared", function () { var bundle = new Bundle(PATH, { - extensions: { things: [ {}, {}, {} ] } + extensions: { things: [{}, {}, {}] } }); expect(bundle.getExtensions("things").length).toEqual(3); }); it("reports an empty list for extensions that have not been declared", function () { var bundle = new Bundle(PATH, { - extensions: { things: [ {}, {}, {} ] } + extensions: { things: [{}, {}, {}] } }); expect(bundle.getExtensions("stuffs").length).toEqual(0); }); }); } -); \ No newline at end of file +); diff --git a/platform/framework/test/load/ExtensionSpec.js b/platform/framework/test/load/ExtensionSpec.js index b3d62bfe0b..989864bb78 100644 --- a/platform/framework/test/load/ExtensionSpec.js +++ b/platform/framework/test/load/ExtensionSpec.js @@ -104,4 +104,4 @@ define( }); }); } -); \ No newline at end of file +); diff --git a/platform/framework/test/register/ExtensionRegistrarSpec.js b/platform/framework/test/register/ExtensionRegistrarSpec.js index 36f2280f14..be8d0fa5df 100644 --- a/platform/framework/test/register/ExtensionRegistrarSpec.js +++ b/platform/framework/test/register/ExtensionRegistrarSpec.js @@ -40,7 +40,9 @@ define( mockSorter = jasmine.createSpyObj("sorter", ["sort"]); customRegistrars = {}; - mockSorter.sort.andCallFake(function (v) { return v; }); + mockSorter.sort.andCallFake(function (v) { + return v; + }); registrar = new ExtensionRegistrar( mockApp, @@ -51,7 +53,7 @@ define( }); it("registers extensions using the factory", function () { - registrar.registerExtensions({ things: [ {} ] }); + registrar.registerExtensions({ things: [{}] }); expect(mockApp.factory).toHaveBeenCalled(); }); @@ -60,7 +62,7 @@ define( mockApp.factory.andCallFake(function (name, value) { callbacks[name] = value[value.length - 1]; }); - registrar.registerExtensions({ things: [ {} ] }); + registrar.registerExtensions({ things: [{}] }); expect(callbacks["things[]"]).toBeDefined(); // Verify dependency echo behavior @@ -68,9 +70,9 @@ define( }); it("warns if multiple registrations are made for the same category of extension", function () { - registrar.registerExtensions({ things: [ {} ] }); + registrar.registerExtensions({ things: [{}] }); expect(mockLog.warn).not.toHaveBeenCalled(); - registrar.registerExtensions({ things: [ {} ] }); + registrar.registerExtensions({ things: [{}] }); expect(mockLog.warn).toHaveBeenCalled(); }); @@ -81,14 +83,14 @@ define( }); // Nobody has registered tests[], but it looks like an extension dependency, // so register it as an empty array. - registrar.registerExtensions({ things: [ { depends: [ "tests[]", "other" ] } ] }); + registrar.registerExtensions({ things: [{ depends: ["tests[]", "other"] }] }); expect(lengths["tests[]"]).toEqual(1); expect(lengths.other).toBeUndefined(); }); it("invokes custom registrars (not app.factory) when available", function () { customRegistrars.things = jasmine.createSpy("things"); - registrar.registerExtensions({ things: [ {} ] }); + registrar.registerExtensions({ things: [{}] }); expect(mockApp.factory).not.toHaveBeenCalled(); expect(customRegistrars.things).toHaveBeenCalled(); }); @@ -98,13 +100,15 @@ define( var a = { a: 'a' }, b = { b: 'b' }, c = { c: 'c' }; // Fake sorting; just reverse the array - mockSorter.sort.andCallFake(function (v) { return v.reverse(); }); + mockSorter.sort.andCallFake(function (v) { + return v.reverse(); + }); // Register the extensions - registrar.registerExtensions({ things: [ a, b, c ] }); + registrar.registerExtensions({ things: [a, b, c] }); // Verify registration interactions occurred in reverse-order - [ c, b, a ].forEach(function (extension, index) { + [c, b, a].forEach(function (extension, index) { expect(mockApp.factory.calls[index].args[1][0]()) .toEqual(extension); }); @@ -112,4 +116,4 @@ define( }); } -); \ No newline at end of file +); diff --git a/platform/framework/test/register/PartialConstructorSpec.js b/platform/framework/test/register/PartialConstructorSpec.js index f31105a333..6aea16adf7 100644 --- a/platform/framework/test/register/PartialConstructorSpec.js +++ b/platform/framework/test/register/PartialConstructorSpec.js @@ -93,4 +93,4 @@ define( }); } -); \ No newline at end of file +); diff --git a/platform/framework/test/register/ServiceCompositorSpec.js b/platform/framework/test/register/ServiceCompositorSpec.js index 7a3e872a67..0c10b87afe 100644 --- a/platform/framework/test/register/ServiceCompositorSpec.js +++ b/platform/framework/test/register/ServiceCompositorSpec.js @@ -37,8 +37,8 @@ define( beforeEach(function () { registered = {}; - mockApp = jasmine.createSpyObj("app", [ "service" ]); - mockLog = jasmine.createSpyObj("$log", [ "error", "warn", "info", "debug" ]); + mockApp = jasmine.createSpyObj("app", ["service"]); + mockLog = jasmine.createSpyObj("$log", ["error", "warn", "info", "debug"]); mockApp.service.andCallFake(function (name, value) { var factory = value[value.length - 1]; @@ -66,11 +66,21 @@ define( it("allows composite services to be registered", function () { // Prepare components that look like resolved extensions var components, name; - function MyDecorator() { return {}; } - function MyOtherDecorator() { return {}; } - function MyProvider() { return {}; } - function MyOtherProvider() { return {}; } - function MyAggregator() { return {}; } + function MyDecorator() { + return {}; + } + function MyOtherDecorator() { + return {}; + } + function MyProvider() { + return {}; + } + function MyOtherProvider() { + return {}; + } + function MyAggregator() { + return {}; + } components = [ MyDecorator, @@ -85,11 +95,13 @@ define( MyProvider.type = "provider"; MyOtherProvider.type = "provider"; MyAggregator.type = "aggregator"; - components.forEach(function (c) { c.provides = "testService"; }); + components.forEach(function (c) { + c.provides = "testService"; + }); // Add some test dependencies, to check prepending - MyOtherDecorator.depends = [ "someOtherService" ]; - MyAggregator.depends = [ "tests[]" ]; + MyOtherDecorator.depends = ["someOtherService"]; + MyAggregator.depends = ["tests[]"]; // Register! compositor.registerCompositeServices(components); @@ -117,16 +129,24 @@ define( it("allows registered composite services to be instantiated", function () { // Prepare components that look like resolved extensions var components, name; - function MyProvider() { return {}; } - function MyOtherProvider() { return {}; } - function MyAggregator() { return {}; } + function MyProvider() { + return {}; + } + function MyOtherProvider() { + return {}; + } + function MyAggregator() { + return {}; + } - components = [ MyProvider, MyAggregator, MyOtherProvider ]; + components = [MyProvider, MyAggregator, MyOtherProvider]; MyProvider.type = "provider"; MyOtherProvider.type = "provider"; MyAggregator.type = "aggregator"; - components.forEach(function (c) { c.provides = "testService"; }); + components.forEach(function (c) { + c.provides = "testService"; + }); // Register! compositor.registerCompositeServices(components); @@ -149,11 +169,17 @@ define( it("warns and skips components with no service type", function () { // Prepare components that look like resolved extensions var components; - function MyProvider() { return {}; } - function MyDecorator() { return {}; } - function MyAggregator() { return {}; } + function MyProvider() { + return {}; + } + function MyDecorator() { + return {}; + } + function MyAggregator() { + return {}; + } - components = [ MyProvider, MyAggregator, MyDecorator ]; + components = [MyProvider, MyAggregator, MyDecorator]; MyProvider.type = "provider"; MyDecorator.type = "decorator"; @@ -175,9 +201,11 @@ define( it("warns about and skips aggregators with zero providers", function () { // Prepare components that look like resolved extensions var components; - function MyAggregator() { return {}; } + function MyAggregator() { + return {}; + } - components = [ MyAggregator ]; + components = [MyAggregator]; MyAggregator.type = "aggregator"; MyAggregator.provides = "testService"; @@ -195,9 +223,11 @@ define( it("warns about and skips decorators with nothing to decorate", function () { // Prepare components that look like resolved extensions var components; - function MyDecorator() { return {}; } + function MyDecorator() { + return {}; + } - components = [ MyDecorator ]; + components = [MyDecorator]; MyDecorator.type = "decorator"; MyDecorator.provides = "testService"; @@ -214,4 +244,4 @@ define( }); } -); \ No newline at end of file +); diff --git a/platform/framework/test/resolve/BundleResolverSpec.js b/platform/framework/test/resolve/BundleResolverSpec.js index bad4c434db..70c12f327e 100644 --- a/platform/framework/test/resolve/BundleResolverSpec.js +++ b/platform/framework/test/resolve/BundleResolverSpec.js @@ -60,16 +60,20 @@ define( var result; resolver.resolveBundles([ - new Bundle("x", { extensions: { tests: [ {}, {}, {} ] } }), - new Bundle("y", { extensions: { tests: [ {}, {} ], others: [ {}, {} ] } }), - new Bundle("z", { extensions: { others: [ {} ] } }) - ]).then(function (v) { result = v; }); + new Bundle("x", { extensions: { tests: [{}, {}, {}] } }), + new Bundle("y", { extensions: { tests: [{}, {}], others: [{}, {}] } }), + new Bundle("z", { extensions: { others: [{}] } }) + ]).then(function (v) { + result = v; + }); waitsFor( - function () { return result !== undefined; }, - "promise resolution", - 250 - ); + function () { + return result !== undefined; + }, + "promise resolution", + 250 + ); // Should get back the result from the resolver, and // should be binned by extension category. @@ -81,9 +85,9 @@ define( it("configures require before loading implementations", function () { var bundles = [ - new Bundle("x", { extensions: { tests: [ {}, {}, {} ] } }), - new Bundle("y", { extensions: { tests: [ {}, {} ], others: [ {}, {} ] } }), - new Bundle("z", { extensions: { others: [ {} ] } }) + new Bundle("x", { extensions: { tests: [{}, {}, {}] } }), + new Bundle("y", { extensions: { tests: [{}, {}], others: [{}, {}] } }), + new Bundle("z", { extensions: { others: [{}] } }) ]; resolver.resolveBundles(bundles); @@ -93,4 +97,4 @@ define( }); } -); \ No newline at end of file +); diff --git a/platform/framework/test/resolve/ExtensionResolverSpec.js b/platform/framework/test/resolve/ExtensionResolverSpec.js index fdc48afe77..f635ba7972 100644 --- a/platform/framework/test/resolve/ExtensionResolverSpec.js +++ b/platform/framework/test/resolve/ExtensionResolverSpec.js @@ -33,7 +33,9 @@ define( resolver; // Test implementation, to load from the mock loader - function Constructor() { return { someKey: "some value" }; } + function Constructor() { + return { someKey: "some value" }; + } Constructor.someProperty = "some static value"; beforeEach(function () { @@ -52,18 +54,22 @@ define( it("requests implementations from the implementation loader", function () { var bundle = new Bundle("w", { sources: "x", - extensions: { tests: [ { implementation: "y/z.js" } ] } + extensions: { tests: [{ implementation: "y/z.js" }] } }), extension = bundle.getExtensions("tests")[0], result; - resolver.resolve(extension).then(function (v) { result = v; }); + resolver.resolve(extension).then(function (v) { + result = v; + }); waitsFor( - function () { return result !== undefined; }, - "promise resolution", - 250 - ); + function () { + return result !== undefined; + }, + "promise resolution", + 250 + ); runs(function () { // Verify that the right file was requested @@ -79,22 +85,26 @@ define( it("issues a warning and defaults to plain definition if load fails", function () { var bundle = new Bundle("w", { sources: "x", - extensions: { tests: [ { + extensions: { tests: [{ someOtherKey: "some other value", implementation: "y/z.js" - } ] } + }] } }), extension = bundle.getExtensions("tests")[0], result; mockLoader.load.andReturn(Promise.reject(new Error("test error"))); - resolver.resolve(extension).then(function (v) { result = v; }); + resolver.resolve(extension).then(function (v) { + result = v; + }); waitsFor( - function () { return result !== undefined; }, - "promise resolution", - 250 - ); + function () { + return result !== undefined; + }, + "promise resolution", + 250 + ); runs(function () { // Should have gotten a warning @@ -109,18 +119,22 @@ define( it("ensures implementation properties are exposed", function () { var bundle = new Bundle("w", { sources: "x", - extensions: { tests: [ { implementation: "y/z.js" } ] } + extensions: { tests: [{ implementation: "y/z.js" }] } }), extension = bundle.getExtensions("tests")[0], result; - resolver.resolve(extension).then(function (v) { result = v; }); + resolver.resolve(extension).then(function (v) { + result = v; + }); waitsFor( - function () { return result !== undefined; }, - "promise resolution", - 250 - ); + function () { + return result !== undefined; + }, + "promise resolution", + 250 + ); runs(function () { // Verify that the right file was requested @@ -136,4 +150,4 @@ define( }); } -); \ No newline at end of file +); diff --git a/platform/framework/test/resolve/ImplementationLoaderSpec.js b/platform/framework/test/resolve/ImplementationLoaderSpec.js index 908d180e3c..56201dfc9d 100644 --- a/platform/framework/test/resolve/ImplementationLoaderSpec.js +++ b/platform/framework/test/resolve/ImplementationLoaderSpec.js @@ -53,17 +53,21 @@ define( var result; // Load and get the result - loader.load("xyz.js").then(function (v) { result = v; }); + loader.load("xyz.js").then(function (v) { + result = v; + }); expect(result).toBeUndefined(); required.fulfill("test result"); waitsFor( - function () { return result !== undefined; }, - "promise resolution", - 250 - ); + function () { + return result !== undefined; + }, + "promise resolution", + 250 + ); runs(function () { expect(result).toEqual("test result"); @@ -76,19 +80,25 @@ define( // Load and get the result loader.load("xyz.js").then( - function (v) { result = v; }, - function (v) { rejection = v; } - ); + function (v) { + result = v; + }, + function (v) { + rejection = v; + } + ); expect(result).toBeUndefined(); required.reject("test result"); waitsFor( - function () { return rejection !== undefined; }, - "promise resolution", - 250 - ); + function () { + return rejection !== undefined; + }, + "promise resolution", + 250 + ); runs(function () { expect(result).toBeUndefined(); @@ -98,4 +108,4 @@ define( }); } -); \ No newline at end of file +); diff --git a/platform/framework/test/resolve/RequireConfiguratorSpec.js b/platform/framework/test/resolve/RequireConfiguratorSpec.js index 976ac9245a..6a50044a3b 100644 --- a/platform/framework/test/resolve/RequireConfiguratorSpec.js +++ b/platform/framework/test/resolve/RequireConfiguratorSpec.js @@ -31,7 +31,7 @@ define( beforeEach(function () { mockRequire = jasmine.createSpyObj( "requirejs", - [ "config" ] + ["config"] ); configurator = new RequireConfigurator(mockRequire); }); @@ -79,4 +79,4 @@ define( }); }); } -); \ No newline at end of file +); diff --git a/platform/identity/test/IdentityAggregatorSpec.js b/platform/identity/test/IdentityAggregatorSpec.js index c61e8b805b..3f34cce2e0 100644 --- a/platform/identity/test/IdentityAggregatorSpec.js +++ b/platform/identity/test/IdentityAggregatorSpec.js @@ -54,7 +54,7 @@ define( mockProviders = ['a', 'b', 'c'].map(function (id) { var mockProvider = jasmine.createSpyObj( 'provider-' + id, - [ 'getUser' ] + ['getUser'] ); mockProvider.getUser.andReturn(new Promise(function (r) { @@ -115,7 +115,7 @@ define( }); it("returns undefined when no providers expose users", function () { - testUsers = [ undefined, undefined, undefined ]; + testUsers = [undefined, undefined, undefined]; aggregator.getUser().then(mockCallback); diff --git a/platform/persistence/aggregator/src/PersistenceAggregator.js b/platform/persistence/aggregator/src/PersistenceAggregator.js index 89fe521275..bc988099a7 100644 --- a/platform/persistence/aggregator/src/PersistenceAggregator.js +++ b/platform/persistence/aggregator/src/PersistenceAggregator.js @@ -61,7 +61,9 @@ define( } this.providerMapPromise = $q.all(providers.map(addToMap)) - .then(function () { return providerMap; }); + .then(function () { + return providerMap; + }); } PersistenceAggregator.prototype.listSpaces = function () { diff --git a/platform/persistence/aggregator/test/PersistenceAggregatorSpec.js b/platform/persistence/aggregator/test/PersistenceAggregatorSpec.js index 06b29c7a0e..f7db0530ad 100644 --- a/platform/persistence/aggregator/test/PersistenceAggregatorSpec.js +++ b/platform/persistence/aggregator/test/PersistenceAggregatorSpec.js @@ -70,7 +70,9 @@ define( mockQ.all.andCallFake(function (fakePromises) { var result = []; fakePromises.forEach(function (p) { - p.then(function (v) { result.push(v); }); + p.then(function (v) { + result.push(v); + }); }); return fakePromise(result); }); diff --git a/platform/persistence/couch/src/CouchPersistenceProvider.js b/platform/persistence/couch/src/CouchPersistenceProvider.js index ac0aaca304..583d62e379 100644 --- a/platform/persistence/couch/src/CouchPersistenceProvider.js +++ b/platform/persistence/couch/src/CouchPersistenceProvider.js @@ -47,7 +47,7 @@ define( * @param {string} path the path to the CouchDB instance */ function CouchPersistenceProvider($http, $q, space, path) { - this.spaces = [ space ]; + this.spaces = [space]; this.revs = {}; this.$q = $q; this.$http = $http; @@ -57,7 +57,9 @@ define( // Pull out a list of document IDs from CouchDB's // _all_docs response function getIdsFromAllDocs(allDocs) { - return allDocs.rows.map(function (r) { return r.id; }); + return allDocs.rows.map(function (r) { + return r.id; + }); } // Check the response to a create/update/delete request; diff --git a/platform/persistence/couch/test/CouchDocumentSpec.js b/platform/persistence/couch/test/CouchDocumentSpec.js index 79e004a7c1..90f9de41ec 100644 --- a/platform/persistence/couch/test/CouchDocumentSpec.js +++ b/platform/persistence/couch/test/CouchDocumentSpec.js @@ -60,4 +60,4 @@ define( }); }); } -); \ No newline at end of file +); diff --git a/platform/persistence/couch/test/CouchIndicatorSpec.js b/platform/persistence/couch/test/CouchIndicatorSpec.js index 3c5af49300..5d056a42cf 100644 --- a/platform/persistence/couch/test/CouchIndicatorSpec.js +++ b/platform/persistence/couch/test/CouchIndicatorSpec.js @@ -33,9 +33,9 @@ define( indicator; beforeEach(function () { - mockHttp = jasmine.createSpyObj("$http", [ "get" ]); + mockHttp = jasmine.createSpyObj("$http", ["get"]); mockInterval = jasmine.createSpy("$interval"); - mockPromise = jasmine.createSpyObj("promise", [ "then" ]); + mockPromise = jasmine.createSpyObj("promise", ["then"]); testPath = "/test/path"; testInterval = 12321; // Some number @@ -127,4 +127,4 @@ define( }); } -); \ No newline at end of file +); diff --git a/platform/persistence/couch/test/CouchPersistenceProviderSpec.js b/platform/persistence/couch/test/CouchPersistenceProviderSpec.js index 84601c50c8..36c1a04317 100644 --- a/platform/persistence/couch/test/CouchPersistenceProviderSpec.js +++ b/platform/persistence/couch/test/CouchPersistenceProviderSpec.js @@ -71,7 +71,7 @@ define( // return values match what is expected. it("lists all available documents", function () { mockHttp.andReturn(mockPromise({ - data: { rows: [ { id: "a" }, { id: "b" }, { id: "c" } ] } + data: { rows: [{ id: "a" }, { id: "b" }, { id: "c" }] } })); provider.listObjects().then(capture); expect(mockHttp).toHaveBeenCalledWith({ @@ -187,4 +187,4 @@ define( }); } -); \ No newline at end of file +); diff --git a/platform/persistence/elastic/src/ElasticPersistenceProvider.js b/platform/persistence/elastic/src/ElasticPersistenceProvider.js index 970f5cca26..1b421b527f 100644 --- a/platform/persistence/elastic/src/ElasticPersistenceProvider.js +++ b/platform/persistence/elastic/src/ElasticPersistenceProvider.js @@ -50,7 +50,7 @@ define( * @param {stirng} path the path to domain objects within ElasticSearch */ function ElasticPersistenceProvider($http, $q, space, root, path) { - this.spaces = [ space ]; + this.spaces = [space]; this.revs = {}; this.$http = $http; this.$q = $q; diff --git a/platform/persistence/elastic/test/ElasticIndicatorSpec.js b/platform/persistence/elastic/test/ElasticIndicatorSpec.js index 0876439062..9f675c5f00 100644 --- a/platform/persistence/elastic/test/ElasticIndicatorSpec.js +++ b/platform/persistence/elastic/test/ElasticIndicatorSpec.js @@ -33,9 +33,9 @@ define( indicator; beforeEach(function () { - mockHttp = jasmine.createSpyObj("$http", [ "get" ]); + mockHttp = jasmine.createSpyObj("$http", ["get"]); mockInterval = jasmine.createSpy("$interval"); - mockPromise = jasmine.createSpyObj("promise", [ "then" ]); + mockPromise = jasmine.createSpyObj("promise", ["then"]); testPath = "/test/path"; testInterval = 12321; // Some number @@ -107,4 +107,4 @@ define( }); } -); \ No newline at end of file +); diff --git a/platform/persistence/elastic/test/ElasticPersistenceProviderSpec.js b/platform/persistence/elastic/test/ElasticPersistenceProviderSpec.js index b6072311c1..0961e63d74 100644 --- a/platform/persistence/elastic/test/ElasticPersistenceProviderSpec.js +++ b/platform/persistence/elastic/test/ElasticPersistenceProviderSpec.js @@ -211,4 +211,4 @@ define( }); } -); \ No newline at end of file +); diff --git a/platform/persistence/queue/src/PersistenceFailureDialog.js b/platform/persistence/queue/src/PersistenceFailureDialog.js index 6d5df92dbe..9ded808644 100644 --- a/platform/persistence/queue/src/PersistenceFailureDialog.js +++ b/platform/persistence/queue/src/PersistenceFailureDialog.js @@ -34,7 +34,7 @@ define( key: "cancel" } ], - OK_OPTIONS = [ { name: "OK", key: "ok" } ]; + OK_OPTIONS = [{ name: "OK", key: "ok" }]; /** * Populates a `dialogModel` to pass to `dialogService.getUserChoise` diff --git a/platform/persistence/queue/src/PersistenceFailureHandler.js b/platform/persistence/queue/src/PersistenceFailureHandler.js index f3420baf04..c449ed5f7b 100644 --- a/platform/persistence/queue/src/PersistenceFailureHandler.js +++ b/platform/persistence/queue/src/PersistenceFailureHandler.js @@ -84,9 +84,11 @@ define( var model = models[failure.id]; return failure.domainObject.useCapability( "mutation", - function () { return model; }, - model.modified - ); + function () { + return model; + }, + model.modified + ); } // Cache the object models we might want to save diff --git a/platform/persistence/queue/test/PersistenceFailureConstantsSpec.js b/platform/persistence/queue/test/PersistenceFailureConstantsSpec.js index 51fd456626..4eec1ea5e7 100644 --- a/platform/persistence/queue/test/PersistenceFailureConstantsSpec.js +++ b/platform/persistence/queue/test/PersistenceFailureConstantsSpec.js @@ -32,4 +32,4 @@ define( }); }); } -); \ No newline at end of file +); diff --git a/platform/persistence/queue/test/PersistenceFailureControllerSpec.js b/platform/persistence/queue/test/PersistenceFailureControllerSpec.js index 6f42eea183..d8053daebb 100644 --- a/platform/persistence/queue/test/PersistenceFailureControllerSpec.js +++ b/platform/persistence/queue/test/PersistenceFailureControllerSpec.js @@ -43,4 +43,4 @@ define( }); }); } -); \ No newline at end of file +); diff --git a/platform/persistence/queue/test/PersistenceFailureDialogSpec.js b/platform/persistence/queue/test/PersistenceFailureDialogSpec.js index 1933d0ee94..ab66997748 100644 --- a/platform/persistence/queue/test/PersistenceFailureDialogSpec.js +++ b/platform/persistence/queue/test/PersistenceFailureDialogSpec.js @@ -54,4 +54,4 @@ define( }); }); } -); \ No newline at end of file +); diff --git a/platform/persistence/queue/test/PersistenceFailureHandlerSpec.js b/platform/persistence/queue/test/PersistenceFailureHandlerSpec.js index 7bb0fe8a04..4157476fb9 100644 --- a/platform/persistence/queue/test/PersistenceFailureHandlerSpec.js +++ b/platform/persistence/queue/test/PersistenceFailureHandlerSpec.js @@ -113,4 +113,4 @@ define( }); } -); \ No newline at end of file +); diff --git a/platform/persistence/queue/test/PersistenceQueueHandlerSpec.js b/platform/persistence/queue/test/PersistenceQueueHandlerSpec.js index c9461ba726..e85fb7f34c 100644 --- a/platform/persistence/queue/test/PersistenceQueueHandlerSpec.js +++ b/platform/persistence/queue/test/PersistenceQueueHandlerSpec.js @@ -47,7 +47,7 @@ define( function makeMockPersistence(id) { var mockPersistence = jasmine.createSpyObj( 'persistence-' + id, - [ 'persist', 'refresh' ] + ['persist', 'refresh'] ); mockPersistence.persist.andReturn(asPromise(true)); return mockPersistence; @@ -56,7 +56,7 @@ define( function makeMockDomainObject(id) { var mockDomainObject = jasmine.createSpyObj( 'domainObject-' + id, - [ 'getId' ] + ['getId'] ); mockDomainObject.getId.andReturn(id); return mockDomainObject; @@ -132,4 +132,4 @@ define( }); }); } -); \ No newline at end of file +); diff --git a/platform/persistence/queue/test/PersistenceQueueImplSpec.js b/platform/persistence/queue/test/PersistenceQueueImplSpec.js index 1608e9a14d..6281f2d5ac 100644 --- a/platform/persistence/queue/test/PersistenceQueueImplSpec.js +++ b/platform/persistence/queue/test/PersistenceQueueImplSpec.js @@ -38,7 +38,7 @@ define( function makeMockDomainObject(id) { var mockDomainObject = jasmine.createSpyObj( 'domainObject-' + id, - [ 'getId' ] + ['getId'] ); mockDomainObject.getId.andReturn(id); return mockDomainObject; @@ -47,7 +47,7 @@ define( function makeMockPersistence(id) { var mockPersistence = jasmine.createSpyObj( 'persistence-' + id, - [ 'persist' ] + ['persist'] ); return mockPersistence; } @@ -149,4 +149,4 @@ define( }); }); } -); \ No newline at end of file +); diff --git a/platform/persistence/queue/test/PersistenceQueueSpec.js b/platform/persistence/queue/test/PersistenceQueueSpec.js index e9d7bb2392..fae0009835 100644 --- a/platform/persistence/queue/test/PersistenceQueueSpec.js +++ b/platform/persistence/queue/test/PersistenceQueueSpec.js @@ -51,4 +51,4 @@ define( }); } -); \ No newline at end of file +); diff --git a/platform/persistence/queue/test/QueuingPersistenceCapabilityDecoratorSpec.js b/platform/persistence/queue/test/QueuingPersistenceCapabilityDecoratorSpec.js index 5df12fbd67..2e1a04d611 100644 --- a/platform/persistence/queue/test/QueuingPersistenceCapabilityDecoratorSpec.js +++ b/platform/persistence/queue/test/QueuingPersistenceCapabilityDecoratorSpec.js @@ -79,4 +79,4 @@ define( }); } -); \ No newline at end of file +); diff --git a/platform/persistence/queue/test/QueuingPersistenceCapabilitySpec.js b/platform/persistence/queue/test/QueuingPersistenceCapabilitySpec.js index c8ce43e895..e542fe2100 100644 --- a/platform/persistence/queue/test/QueuingPersistenceCapabilitySpec.js +++ b/platform/persistence/queue/test/QueuingPersistenceCapabilitySpec.js @@ -62,4 +62,4 @@ define( }); }); } -); \ No newline at end of file +); diff --git a/platform/policy/src/PolicyActionDecorator.js b/platform/policy/src/PolicyActionDecorator.js index cc2a302b47..a8cec1442c 100644 --- a/platform/policy/src/PolicyActionDecorator.js +++ b/platform/policy/src/PolicyActionDecorator.js @@ -40,7 +40,7 @@ define( PolicyActionDecorator.prototype.getActions = function (context) { var policyService = this.policyService; - + // Check if an action is allowed by policy. function allow(action) { return policyService.allow('action', action, context); diff --git a/platform/policy/test/PolicyActionDecoratorSpec.js b/platform/policy/test/PolicyActionDecoratorSpec.js index fb9c7b6724..ed7cc8af7d 100644 --- a/platform/policy/test/PolicyActionDecoratorSpec.js +++ b/platform/policy/test/PolicyActionDecoratorSpec.js @@ -90,9 +90,9 @@ define( return candidate.someKey !== 'b'; }); expect(decorator.getActions(testContext)) - .toEqual([ testActions[0], testActions[2] ]); + .toEqual([testActions[0], testActions[2]]); }); }); } -); \ No newline at end of file +); diff --git a/platform/policy/test/PolicyProviderSpec.js b/platform/policy/test/PolicyProviderSpec.js index c228e5cdce..ac827cb0f6 100644 --- a/platform/policy/test/PolicyProviderSpec.js +++ b/platform/policy/test/PolicyProviderSpec.js @@ -43,7 +43,9 @@ define( ]; mockPolicies = testPolicies.map(function (p) { var mockPolicy = jasmine.createSpyObj("policy", ['allow']); - mockPolicy.allow.andCallFake(function () { return p.result; }); + mockPolicy.allow.andCallFake(function () { + return p.result; + }); return mockPolicy; }); mockPolicyConstructors = testPolicies.map(function (p, i) { @@ -101,4 +103,4 @@ define( }); } -); \ No newline at end of file +); diff --git a/platform/policy/test/PolicyViewDecoratorSpec.js b/platform/policy/test/PolicyViewDecoratorSpec.js index 91e86e9bd1..f7f698cb22 100644 --- a/platform/policy/test/PolicyViewDecoratorSpec.js +++ b/platform/policy/test/PolicyViewDecoratorSpec.js @@ -94,9 +94,9 @@ define( return candidate.someKey !== 'b'; }); expect(decorator.getViews(mockDomainObject)) - .toEqual([ testViews[0], testViews[2] ]); + .toEqual([testViews[0], testViews[2]]); }); }); } -); \ No newline at end of file +); diff --git a/platform/representation/src/MCTRepresentation.js b/platform/representation/src/MCTRepresentation.js index bcaa90e4e7..2ef47ad3a0 100644 --- a/platform/representation/src/MCTRepresentation.js +++ b/platform/representation/src/MCTRepresentation.js @@ -251,7 +251,7 @@ define( * Add a listener to the object for status changes. */ $scope.$watch("domainObject", function (domainObject, oldDomainObject) { - if (domainObject !== oldDomainObject){ + if (domainObject !== oldDomainObject) { listenForStatusChange(domainObject); } }); diff --git a/platform/representation/src/actions/ContextMenuAction.js b/platform/representation/src/actions/ContextMenuAction.js index d1d1b1b5b1..11acd0ed51 100644 --- a/platform/representation/src/actions/ContextMenuAction.js +++ b/platform/representation/src/actions/ContextMenuAction.js @@ -59,8 +59,12 @@ define( this.agentService = agentService; this.actionContext = actionContext; this.popupService = popupService; - this.getDocument = function () { return $document; }; - this.getRootScope = function () { return $rootScope; }; + this.getDocument = function () { + return $document; + }; + this.getRootScope = function () { + return $rootScope; + }; } ContextMenuAction.prototype.perform = function () { diff --git a/platform/representation/src/gestures/DropGesture.js b/platform/representation/src/gestures/DropGesture.js index f2d64024a3..75b73b7739 100644 --- a/platform/representation/src/gestures/DropGesture.js +++ b/platform/representation/src/gestures/DropGesture.js @@ -42,7 +42,7 @@ define( var actionCapability = domainObject.getCapability('action'), scope = element.scope && element.scope(), action; // Action for the drop, when it occurs - + function broadcastDrop(id, event) { // Find the relevant scope... var rect; diff --git a/platform/representation/src/gestures/GestureConstants.js b/platform/representation/src/gestures/GestureConstants.js index bffa8b218d..45b998d630 100644 --- a/platform/representation/src/gestures/GestureConstants.js +++ b/platform/representation/src/gestures/GestureConstants.js @@ -44,7 +44,7 @@ define({ * positioning. * @memberof platform/representation.GestureConstants */ - MCT_MENU_DIMENSIONS: [ 170, 200 ], + MCT_MENU_DIMENSIONS: [170, 200], /** * Identifier for drop events. * @memberof platform/representation.GestureConstants diff --git a/platform/representation/test/MCTRepresentationSpec.js b/platform/representation/test/MCTRepresentationSpec.js index 52d6c70d55..d3fdaa201d 100644 --- a/platform/representation/test/MCTRepresentationSpec.js +++ b/platform/representation/test/MCTRepresentationSpec.js @@ -27,9 +27,9 @@ define( ["../src/MCTRepresentation"], function (MCTRepresentation) { - var JQLITE_FUNCTIONS = [ "on", "off", "attr", "removeAttr" ], - LOG_FUNCTIONS = [ "error", "warn", "info", "debug"], - DOMAIN_OBJECT_METHODS = [ "getId", "getModel", "getCapability", "hasCapability", "useCapability"]; + var JQLITE_FUNCTIONS = ["on", "off", "attr", "removeAttr"], + LOG_FUNCTIONS = ["error", "warn", "info", "debug"], + DOMAIN_OBJECT_METHODS = ["getId", "getModel", "getCapability", "hasCapability", "useCapability"]; describe("The mct-representation directive", function () { var testRepresentations, @@ -76,7 +76,7 @@ define( key: "def", bundle: { path: "d", resources: "e" }, templateUrl: "f/template.html", - uses: [ "testCapability", "otherTestCapability" ] + uses: ["testCapability", "otherTestCapability"] } ]; @@ -85,7 +85,7 @@ define( key: "uvw", bundle: { path: "u", resources: "v" }, templateUrl: "w/template.html", - gestures: [ "testGesture", "otherTestGesture" ] + gestures: ["testGesture", "otherTestGesture"] }, { key: "xyz", @@ -105,7 +105,7 @@ define( var constructor = jasmine.createSpy("Representer" + name), representer = jasmine.createSpyObj( "representer" + name, - [ "represent", "destroy" ] + ["represent", "destroy"] ); constructor.andReturn(representer); return constructor; @@ -121,7 +121,7 @@ define( mockStatusCapability = jasmine.createSpyObj("statusCapability", ["listen"]); - mockScope = jasmine.createSpyObj("scope", [ "$watch", "$on" ]); + mockScope = jasmine.createSpyObj("scope", ["$watch", "$on"]); mockElement = jasmine.createSpyObj("element", JQLITE_FUNCTIONS); mockDomainObject = jasmine.createSpyObj("domainObject", DOMAIN_OBJECT_METHODS); diff --git a/platform/representation/test/TemplateLinkerSpec.js b/platform/representation/test/TemplateLinkerSpec.js index d078cd00ac..c91e82e6a7 100644 --- a/platform/representation/test/TemplateLinkerSpec.js +++ b/platform/representation/test/TemplateLinkerSpec.js @@ -25,8 +25,8 @@ define( ["../src/TemplateLinker"], function (TemplateLinker) { - var JQLITE_METHODS = [ 'replaceWith', 'empty', 'html', 'contents' ], - SCOPE_METHODS = [ '$on', '$new', '$destroy' ]; + var JQLITE_METHODS = ['replaceWith', 'empty', 'html', 'contents'], + SCOPE_METHODS = ['$on', '$new', '$destroy']; describe("TemplateLinker", function () { var mockTemplateRequest, diff --git a/platform/representation/test/TemplatePrefetcherSpec.js b/platform/representation/test/TemplatePrefetcherSpec.js index 6a0ae73a42..99eda9efa7 100644 --- a/platform/representation/test/TemplatePrefetcherSpec.js +++ b/platform/representation/test/TemplatePrefetcherSpec.js @@ -36,7 +36,7 @@ define( mockTemplateLinker = jasmine.createSpyObj( 'templateLinker', - [ 'getPath', 'load' ] + ['getPath', 'load'] ); mockTemplateLinker.getPath.andCallFake(function (ext) { diff --git a/platform/representation/test/actions/ContextMenuActionSpec.js b/platform/representation/test/actions/ContextMenuActionSpec.js index bab5a311f5..4efb48d76b 100644 --- a/platform/representation/test/actions/ContextMenuActionSpec.js +++ b/platform/representation/test/actions/ContextMenuActionSpec.js @@ -28,8 +28,8 @@ define( ["../../src/actions/ContextMenuAction"], function (ContextMenuAction) { - var JQLITE_FUNCTIONS = [ "on", "off", "find", "append", "remove" ], - DOMAIN_OBJECT_METHODS = [ "getId", "getModel", "getCapability", "hasCapability", "useCapability" ]; + var JQLITE_FUNCTIONS = ["on", "off", "find", "append", "remove"], + DOMAIN_OBJECT_METHODS = ["getId", "getModel", "getCapability", "hasCapability", "useCapability"]; describe("The 'context menu' action", function () { @@ -93,7 +93,7 @@ define( action.perform(); expect(mockPopupService.display).toHaveBeenCalledWith( mockMenu, - [ mockEvent.pageX, mockEvent.pageY ], + [mockEvent.pageX, mockEvent.pageY], jasmine.any(Object) ); }); @@ -104,7 +104,7 @@ define( }); it("adds classes to menus based on position", function () { - var booleans = [ false, true ]; + var booleans = [false, true]; booleans.forEach(function (goLeft) { booleans.forEach(function (goUp) { diff --git a/platform/representation/test/gestures/ContextMenuGestureSpec.js b/platform/representation/test/gestures/ContextMenuGestureSpec.js index efcc107cc5..20e15bcbbb 100644 --- a/platform/representation/test/gestures/ContextMenuGestureSpec.js +++ b/platform/representation/test/gestures/ContextMenuGestureSpec.js @@ -28,8 +28,8 @@ define( ["../../src/gestures/ContextMenuGesture"], function (ContextMenuGesture) { - var JQLITE_FUNCTIONS = [ "on", "off", "find", "append", "remove" ], - DOMAIN_OBJECT_METHODS = [ "getId", "getModel", "getCapability", "hasCapability", "useCapability"]; + var JQLITE_FUNCTIONS = ["on", "off", "find", "append", "remove"], + DOMAIN_OBJECT_METHODS = ["getId", "getModel", "getCapability", "hasCapability", "useCapability"]; describe("The 'context menu' gesture", function () { @@ -55,15 +55,15 @@ define( mockEvent = jasmine.createSpyObj("event", ["preventDefault"]); mockContextMenuAction = jasmine.createSpyObj( "action", - [ "perform", "getActions" ] + ["perform", "getActions"] ); - + mockActionContext = {domainObject: mockDomainObject, event: mockEvent}; mockDomainObject.getCapability.andReturn(mockContextMenuAction); mockContextMenuAction.perform.andReturn(jasmine.any(Function)); mockAgentService.isMobile.andReturn(false); - - + + gesture = new ContextMenuGesture(mockTimeout, mockAgentService, mockElement, mockDomainObject); // Capture the contextmenu callback @@ -90,7 +90,7 @@ define( mockDomainObject.calls ); }); - + it("attaches a callback for context menu events on mobile", function () { // Mock touch event and set to mobile device mockTouchEvent = jasmine.createSpyObj("event", ["preventDefault", "touches"]); @@ -98,21 +98,21 @@ define( mockTouch.length = 1; mockTouchEvent.touches.andReturn(mockTouch); mockAgentService.isMobile.andReturn(true); - + // Then create new (mobile) gesture gesture = new ContextMenuGesture(mockTimeout, mockAgentService, mockElement, mockDomainObject); - + // Set calls for the touchstart and touchend gestures fireTouchStartGesture = mockElement.on.calls[1].args[1]; fireTouchEndGesture = mockElement.on.mostRecentCall.args[1]; - + // Fire touchstart and expect touch start to begin fireTouchStartGesture(mockTouchEvent); expect(mockElement.on).toHaveBeenCalledWith( "touchstart", jasmine.any(Function) ); - + // Expect timeout to begin and then fireTouchEnd expect(mockTimeout).toHaveBeenCalled(); mockTimeout.mostRecentCall.args[0](); @@ -120,4 +120,4 @@ define( }); }); } -); \ No newline at end of file +); diff --git a/platform/representation/test/gestures/DragGestureSpec.js b/platform/representation/test/gestures/DragGestureSpec.js index c756296428..6ae71754fa 100644 --- a/platform/representation/test/gestures/DragGestureSpec.js +++ b/platform/representation/test/gestures/DragGestureSpec.js @@ -27,10 +27,10 @@ define( ["../../src/gestures/DragGesture", "../../src/gestures/GestureConstants"], function (DragGesture, GestureConstants) { - var JQLITE_FUNCTIONS = [ "on", "off", "attr", "removeAttr" ], - LOG_FUNCTIONS = [ "error", "warn", "info", "debug"], - DND_FUNCTIONS = [ "setData", "getData", "removeData" ], - DOMAIN_OBJECT_METHODS = [ "getId", "getModel", "getCapability", "hasCapability", "useCapability"], + var JQLITE_FUNCTIONS = ["on", "off", "attr", "removeAttr"], + LOG_FUNCTIONS = ["error", "warn", "info", "debug"], + DND_FUNCTIONS = ["setData", "getData", "removeData"], + DOMAIN_OBJECT_METHODS = ["getId", "getModel", "getCapability", "hasCapability", "useCapability"], TEST_ID = "test-id"; @@ -135,4 +135,4 @@ define( }); } -); \ No newline at end of file +); diff --git a/platform/representation/test/gestures/DropGestureSpec.js b/platform/representation/test/gestures/DropGestureSpec.js index b3f043cfa9..79ed9d1139 100644 --- a/platform/representation/test/gestures/DropGestureSpec.js +++ b/platform/representation/test/gestures/DropGestureSpec.js @@ -29,8 +29,8 @@ define( // Methods to mock - var JQLITE_FUNCTIONS = [ "on", "off", "attr", "removeAttr", "scope" ], - DOMAIN_OBJECT_METHODS = [ "getId", "getModel", "getCapability", "hasCapability", "useCapability"], + var JQLITE_FUNCTIONS = ["on", "off", "attr", "removeAttr", "scope"], + DOMAIN_OBJECT_METHODS = ["getId", "getModel", "getCapability", "hasCapability", "useCapability"], TEST_ID = "test-id", DROP_ID = "drop-id"; @@ -69,9 +69,9 @@ define( mockElement = jasmine.createSpyObj("element", JQLITE_FUNCTIONS); mockDomainObject = jasmine.createSpyObj("domainObject", DOMAIN_OBJECT_METHODS); mockDraggedObject = jasmine.createSpyObj("draggedObject", DOMAIN_OBJECT_METHODS); - mockPersistence = jasmine.createSpyObj("persistence", [ "persist" ]); + mockPersistence = jasmine.createSpyObj("persistence", ["persist"]); mockEvent = jasmine.createSpyObj("event", ["preventDefault"]); - mockEvent.dataTransfer = jasmine.createSpyObj("dataTransfer", [ "getData" ]); + mockEvent.dataTransfer = jasmine.createSpyObj("dataTransfer", ["getData"]); mockScope = jasmine.createSpyObj("$scope", ["$broadcast"]); mockUnwrappedElement = jasmine.createSpyObj("unwrapped", ["getBoundingClientRect"]); mockAction = jasmine.createSpyObj('action', ['getActions']); @@ -130,11 +130,11 @@ define( expect(mockEvent.preventDefault).toHaveBeenCalled(); expect(mockEvent.dataTransfer.dropEffect).toBeDefined(); }); - + it("invokes compose on drop in edit mode", function () { // Set the mockDomainObject to have the editor capability mockDomainObject.hasCapability.andReturn(true); - + callbacks.dragover(mockEvent); expect(mockAction.getActions).toHaveBeenCalledWith({ key: 'compose', @@ -143,14 +143,14 @@ define( callbacks.drop(mockEvent); expect(mockCompose.perform).toHaveBeenCalled(); }); - - + + it("does not invoke compose on drop in browse mode for non-folders", function () { // Set the mockDomainObject to not have the editor capability mockDomainObject.hasCapability.andReturn(false); // Set the mockDomainObject to not have a type of folder mockDomainObject.getModel.andReturn({type: 'notAFolder'}); - + callbacks.dragover(mockEvent); expect(mockAction.getActions).toHaveBeenCalledWith({ key: 'compose', @@ -159,8 +159,8 @@ define( callbacks.drop(mockEvent); expect(mockCompose.perform).not.toHaveBeenCalled(); }); - - + + it("invokes compose on drop in browse mode for folders", function () { // Set the mockDomainObject to not have the editor capability mockDomainObject.hasCapability.andReturn(false); @@ -175,11 +175,11 @@ define( callbacks.drop(mockEvent); expect(mockCompose.perform).toHaveBeenCalled(); }); - + it("broadcasts drop position (in edit mode)", function () { // Set the mockDomainObject to have the editor capability mockDomainObject.hasCapability.andReturn(true); - + testRect.left = 42; testRect.top = 36; mockEvent.pageX = 52; diff --git a/platform/representation/test/gestures/GestureProviderSpec.js b/platform/representation/test/gestures/GestureProviderSpec.js index 2aa2a6551f..f4e29b66d9 100644 --- a/platform/representation/test/gestures/GestureProviderSpec.js +++ b/platform/representation/test/gestures/GestureProviderSpec.js @@ -27,9 +27,9 @@ define( ["../../src/gestures/GestureProvider"], function (GestureProvider) { - var JQLITE_FUNCTIONS = [ "on", "off", "attr", "removeAttr" ], + var JQLITE_FUNCTIONS = ["on", "off", "attr", "removeAttr"], GESTURE_KEYS = ["a", "b", "c", "d", "e"], - DOMAIN_OBJECT_METHODS = [ "getId", "getModel", "getCapability", "hasCapability", "useCapability"]; + DOMAIN_OBJECT_METHODS = ["getId", "getModel", "getCapability", "hasCapability", "useCapability"]; describe("The gesture provider", function () { var mockGestures, @@ -86,4 +86,4 @@ define( }); }); } -); \ No newline at end of file +); diff --git a/platform/representation/test/gestures/GestureRepresenterSpec.js b/platform/representation/test/gestures/GestureRepresenterSpec.js index f66696ed99..24ce81e0d0 100644 --- a/platform/representation/test/gestures/GestureRepresenterSpec.js +++ b/platform/representation/test/gestures/GestureRepresenterSpec.js @@ -33,11 +33,11 @@ define( beforeEach(function () { mockGestureService = jasmine.createSpyObj( "gestureService", - [ "attachGestures" ] + ["attachGestures"] ); mockGestureHandle = jasmine.createSpyObj( "gestureHandle", - [ "destroy" ] + ["destroy"] ); mockElement = { someKey: "some value" }; @@ -62,7 +62,7 @@ define( expect(mockGestureService.attachGestures).toHaveBeenCalledWith( mockElement, domainObject, - [ "a", "b", "c" ] + ["a", "b", "c"] ); // Should not have been destroyed yet... @@ -77,4 +77,4 @@ define( }); } -); \ No newline at end of file +); diff --git a/platform/representation/test/services/DndServiceSpec.js b/platform/representation/test/services/DndServiceSpec.js index 73aea175c5..ecadcc0f69 100644 --- a/platform/representation/test/services/DndServiceSpec.js +++ b/platform/representation/test/services/DndServiceSpec.js @@ -35,7 +35,9 @@ define( it("allows setting of arbitrary objects", function () { var foo = { - bar: function () { return 42; } + bar: function () { + return 42; + } }; service.setData('xyz', foo); @@ -61,4 +63,4 @@ define( }); } -); \ No newline at end of file +); diff --git a/platform/search/src/controllers/SearchMenuController.js b/platform/search/src/controllers/SearchMenuController.js index 2f369929ab..c46fb0657c 100644 --- a/platform/search/src/controllers/SearchMenuController.js +++ b/platform/search/src/controllers/SearchMenuController.js @@ -24,31 +24,31 @@ * Module defining SearchMenuController. Created by shale on 08/17/2015. */ define(function () { - + function SearchMenuController($scope, types) { - - // Model variables are: - // ngModel.filter, the function filter defined in SearchController + + // Model variables are: + // ngModel.filter, the function filter defined in SearchController // ngModel.types, an array of type objects - // ngModel.checked, a dictionary of which type filter options are checked - // ngModel.checkAll, a boolean of whether all of the types in ngModel.checked are checked + // ngModel.checked, a dictionary of which type filter options are checked + // ngModel.checkAll, a boolean of whether all of the types in ngModel.checked are checked // ngModel.filtersString, a string list of what filters on the results are active $scope.ngModel.types = []; $scope.ngModel.checked = {}; $scope.ngModel.checkAll = true; $scope.ngModel.filtersString = ''; - + // On initialization, fill the model's types with type keys types.forEach(function (type) { // We only want some types, the ones that are probably human readable - // Manually remove 'root', but not 'unknown' + // Manually remove 'root', but not 'unknown' if (type.key && type.name && type.key !== 'root') { $scope.ngModel.types.push(type); $scope.ngModel.checked[type.key] = false; } }); - - + + // For documentation, see updateOptions below function updateOptions() { var type, @@ -62,7 +62,7 @@ define(function () { } } } - + // Update the current filters string $scope.ngModel.filtersString = ''; if (!$scope.ngModel.checkAll) { @@ -77,7 +77,7 @@ define(function () { } } } - // If there's still nothing in the filters string, there are no + // If there's still nothing in the filters string, there are no // filters selected if ($scope.ngModel.filtersString === '') { $scope.ngModel.filtersString = 'NONE'; @@ -87,14 +87,14 @@ define(function () { // Re-filter results $scope.ngModel.filter(); } - + // For documentation, see checkAll below function checkAll() { // Reset all the other options to original/default position Object.keys($scope.ngModel.checked).forEach(function (type) { $scope.ngModel.checked[type] = false; }); - + // Change the filters string depending on checkAll status if ($scope.ngModel.checkAll) { // This setting will make the filters display hidden @@ -102,23 +102,23 @@ define(function () { } else { $scope.ngModel.filtersString = 'NONE'; } - + // Re-filter results $scope.ngModel.filter(); } - + return { /** - * Updates the status of the checked options. Updates the filtersString + * Updates the status of the checked options. Updates the filtersString * with which options are checked. Re-filters the search results after. - * Not intended to be called by checkAll when it is toggled. + * Not intended to be called by checkAll when it is toggled. */ updateOptions: updateOptions, - + /** - * Handles the search and filter options for when checkAll has been - * toggled. This is a special case, compared to the other search - * menu options, so is intended to be called instead of updateOptions. + * Handles the search and filter options for when checkAll has been + * toggled. This is a special case, compared to the other search + * menu options, so is intended to be called instead of updateOptions. */ checkAll: checkAll }; diff --git a/platform/search/src/services/GenericSearchWorker.js b/platform/search/src/services/GenericSearchWorker.js index a3cd34c2e2..3b6962e55a 100644 --- a/platform/search/src/services/GenericSearchWorker.js +++ b/platform/search/src/services/GenericSearchWorker.js @@ -118,7 +118,7 @@ match.matchCount += 100; } else if (match.item.vector.lowerCaseName === query.inputLowerCase) { - match.matchCount += 50; + match.matchCount += 50; } return match; }) diff --git a/platform/search/test/controllers/SearchControllerSpec.js b/platform/search/test/controllers/SearchControllerSpec.js index 9df96ab831..7f9095ebe3 100644 --- a/platform/search/test/controllers/SearchControllerSpec.js +++ b/platform/search/test/controllers/SearchControllerSpec.js @@ -51,7 +51,7 @@ define([ beforeEach(function () { mockScope = jasmine.createSpyObj( '$scope', - [ '$watch' ] + ['$watch'] ); mockScope.ngModel = {}; mockScope.ngModel.input = 'test input'; @@ -61,11 +61,11 @@ define([ mockSearchService = jasmine.createSpyObj( 'searchService', - [ 'query' ] + ['query'] ); mockPromise = jasmine.createSpyObj( 'promise', - [ 'then' ] + ['then'] ); mockSearchService.query.andReturn(mockPromise); @@ -73,11 +73,11 @@ define([ mockSearchResult = jasmine.createSpyObj( 'searchResult', - [ '' ] + [''] ); mockDomainObject = jasmine.createSpyObj( 'domainObject', - [ 'getModel' ] + ['getModel'] ); mockSearchResult.object = mockDomainObject; mockDomainObject.getModel.andReturn({name: 'Mock Object', type: 'mock.type'}); diff --git a/platform/search/test/controllers/SearchMenuControllerSpec.js b/platform/search/test/controllers/SearchMenuControllerSpec.js index 68f8930431..dda5f491bd 100644 --- a/platform/search/test/controllers/SearchMenuControllerSpec.js +++ b/platform/search/test/controllers/SearchMenuControllerSpec.js @@ -31,18 +31,18 @@ define( var mockScope, mockTypes, controller; - + beforeEach(function () { mockScope = jasmine.createSpyObj( "$scope", - [ "" ] + [""] ); - + mockTypes = [ {key: 'mock.type.1', name: 'Mock Type 1', glyph: 'a'}, {key: 'mock.type.2', name: 'Mock Type 2', glyph: 'b'} ]; - + mockScope.ngModel = {}; mockScope.ngModel.checked = {}; mockScope.ngModel.checked['mock.type.1'] = false; @@ -50,75 +50,75 @@ define( mockScope.ngModel.checkAll = true; mockScope.ngModel.filter = jasmine.createSpy('$scope.ngModel.filter'); mockScope.ngModel.filtersString = ''; - + controller = new SearchMenuController(mockScope, mockTypes); }); - + it("gets types on initiliztion", function () { expect(mockScope.ngModel.types).toBeDefined(); }); - + it("refilters results when options are updated", function () { controller.updateOptions(); expect(mockScope.ngModel.filter).toHaveBeenCalled(); - + controller.checkAll(); expect(mockScope.ngModel.filter).toHaveBeenCalled(); }); - + it("updates the filters string when options are updated", function () { controller.updateOptions(); expect(mockScope.ngModel.filtersString).toEqual(''); - + mockScope.ngModel.checked['mock.type.1'] = true; - + controller.updateOptions(); expect(mockScope.ngModel.filtersString).not.toEqual(''); }); - + it("changing checkAll status updates the filter string", function () { controller.checkAll(); expect(mockScope.ngModel.filtersString).toEqual(''); - + mockScope.ngModel.checkAll = false; - + controller.checkAll(); expect(mockScope.ngModel.filtersString).toEqual('NONE'); }); - + it("checking checkAll option resets other options", function () { mockScope.ngModel.checked['mock.type.1'] = true; mockScope.ngModel.checked['mock.type.2'] = true; - + controller.checkAll(); Object.keys(mockScope.ngModel.checked).forEach(function (type) { expect(mockScope.ngModel.checked[type]).toBeFalsy(); }); }); - + it("tells the user when no options are checked", function () { Object.keys(mockScope.ngModel.checked).forEach(function (type) { mockScope.ngModel.checked[type] = false; }); mockScope.ngModel.checkAll = false; - + controller.updateOptions(); - + expect(mockScope.ngModel.filtersString).toEqual('NONE'); }); - + it("tells the user when options are checked", function () { mockScope.ngModel.checkAll = false; Object.keys(mockScope.ngModel.checked).forEach(function (type) { mockScope.ngModel.checked[type] = true; }); - + controller.updateOptions(); - + expect(mockScope.ngModel.filtersString).not.toEqual('NONE'); expect(mockScope.ngModel.filtersString).not.toEqual(''); }); }); } -); \ No newline at end of file +); diff --git a/platform/search/test/services/GenericSearchProviderSpec.js b/platform/search/test/services/GenericSearchProviderSpec.js index abfe3d011d..5df794819c 100644 --- a/platform/search/test/services/GenericSearchProviderSpec.js +++ b/platform/search/test/services/GenericSearchProviderSpec.js @@ -333,7 +333,7 @@ define([ }] }); - expect(provider.pendingQueries[143]).not.toBeDefined(); + expect(provider.pendingQueries[143]).not.toBeDefined(); }); diff --git a/platform/status/test/StatusCapabilitySpec.js b/platform/status/test/StatusCapabilitySpec.js index 631c9aedb3..7da9ce259e 100644 --- a/platform/status/test/StatusCapabilitySpec.js +++ b/platform/status/test/StatusCapabilitySpec.js @@ -34,15 +34,15 @@ define( beforeEach(function () { testId = "some-id"; - testStatusFlags = [ 'a', 'b', 'c' ]; + testStatusFlags = ['a', 'b', 'c']; mockStatusService = jasmine.createSpyObj( 'statusService', - [ 'listen', 'setStatus', 'listStatuses' ] + ['listen', 'setStatus', 'listStatuses'] ); mockDomainObject = jasmine.createSpyObj( 'domainObject', - [ 'getId', 'getCapability', 'getModel' ] + ['getId', 'getCapability', 'getModel'] ); mockUnlisten = jasmine.createSpy('unlisten'); diff --git a/platform/status/test/StatusRepresenterSpec.js b/platform/status/test/StatusRepresenterSpec.js index cc815be963..b9c048e511 100644 --- a/platform/status/test/StatusRepresenterSpec.js +++ b/platform/status/test/StatusRepresenterSpec.js @@ -50,7 +50,7 @@ define( } beforeEach(function () { - testStatusFlags = [ 'x', 'y', 'z' ]; + testStatusFlags = ['x', 'y', 'z']; mockScope = {}; mockElement = jasmine.createSpyObj('element', [ @@ -60,11 +60,11 @@ define( testRepresentation = { key: "someKey" }; mockDomainObject = jasmine.createSpyObj( 'domainObject', - [ 'getModel', 'getId', 'getCapability' ] + ['getModel', 'getId', 'getCapability'] ); mockStatusCapability = jasmine.createSpyObj( 'status', - [ 'list', 'get', 'set', 'listen' ] + ['list', 'get', 'set', 'listen'] ); mockUnlisten = jasmine.createSpy(); diff --git a/platform/status/test/StatusServiceSpec.js b/platform/status/test/StatusServiceSpec.js index d0490057f8..e530fd53d8 100644 --- a/platform/status/test/StatusServiceSpec.js +++ b/platform/status/test/StatusServiceSpec.js @@ -40,7 +40,7 @@ define( mockTopic = jasmine.createSpy('topic'); mockTopicInstance = jasmine.createSpyObj( 'topicInstance', - [ 'notify', 'listen' ] + ['notify', 'listen'] ); mockUnlisten = jasmine.createSpy('unlisten'); mockCallback = jasmine.createSpy('callback'); @@ -75,7 +75,7 @@ define( it("notifies listeners of changes", function () { statusService.setStatus(testId, testStatus, true); expect(mockTopicInstance.notify) - .toHaveBeenCalledWith([ testStatus ]); + .toHaveBeenCalledWith([testStatus]); statusService.setStatus(testId, testStatus, false); expect(mockTopicInstance.notify) .toHaveBeenCalledWith([ ]); diff --git a/platform/telemetry/src/TelemetryCapability.js b/platform/telemetry/src/TelemetryCapability.js index 57fc603afd..02b74806e8 100644 --- a/platform/telemetry/src/TelemetryCapability.js +++ b/platform/telemetry/src/TelemetryCapability.js @@ -27,7 +27,9 @@ define( [], function () { - var ZERO = function () { return 0; }, + var ZERO = function () { + return 0; + }, EMPTY_SERIES = { getPointCount: ZERO, getDomainValue: ZERO, diff --git a/platform/telemetry/src/TelemetryController.js b/platform/telemetry/src/TelemetryController.js index 69ff357a7a..73f474d11e 100644 --- a/platform/telemetry/src/TelemetryController.js +++ b/platform/telemetry/src/TelemetryController.js @@ -176,7 +176,7 @@ define( "telemetry" )).then(function (result) { var head = domainObject.hasCapability("telemetry") ? - [ domainObject ] : [], + [domainObject] : [], tail = result || []; return head.concat(tail); }); diff --git a/platform/telemetry/src/TelemetryDelegator.js b/platform/telemetry/src/TelemetryDelegator.js index d0ccb9575f..594b98397d 100644 --- a/platform/telemetry/src/TelemetryDelegator.js +++ b/platform/telemetry/src/TelemetryDelegator.js @@ -45,7 +45,7 @@ define( */ TelemetryDelegator.prototype.promiseTelemetryObjects = function (domainObject) { var $q = this.$q; - + // If object has been cleared, there are no relevant // telemetry-providing domain objects. if (!domainObject) { @@ -59,7 +59,7 @@ define( "telemetry" )).then(function (result) { var head = domainObject.hasCapability("telemetry") ? - [ domainObject ] : [], + [domainObject] : [], tail = result || []; return head.concat(tail); }); diff --git a/platform/telemetry/src/TelemetryQueue.js b/platform/telemetry/src/TelemetryQueue.js index c6092cc603..3017906802 100644 --- a/platform/telemetry/src/TelemetryQueue.js +++ b/platform/telemetry/src/TelemetryQueue.js @@ -37,22 +37,22 @@ define( function TelemetryQueue() { // General approach here: // * Maintain a queue as an array of objects containing key-value - // pairs. Putting values into the queue will assign to the - // earliest-available queue position for the associated key + // pairs. Putting values into the queue will assign to the + // earliest-available queue position for the associated key // (appending to the array if necessary.) // * Maintain a set of counts for each key, such that determining // the next available queue position is easy; O(1) insertion. - // * When retrieving objects, pop off the queue and decrement + // * When retrieving objects, pop off the queue and decrement // counts. This provides O(n+k) or O(k) retrieval for a queue // of length n with k unique keys; this depends on whether // the browser's implementation of Array.prototype.shift is // O(n) or O(1). - + // Graphically (indexes at top, keys along side, values as *'s), // if we have a queue that looks like: // 0 1 2 3 4 // a * * * * * - // b * * + // b * * // c * * * // // And we put a new value for b, we expect: diff --git a/platform/telemetry/test/TelemetryAggregatorSpec.js b/platform/telemetry/test/TelemetryAggregatorSpec.js index 76a3a2cbb7..b99901a307 100644 --- a/platform/telemetry/test/TelemetryAggregatorSpec.js +++ b/platform/telemetry/test/TelemetryAggregatorSpec.js @@ -41,7 +41,7 @@ define( function mockProvider(key, index) { var provider = jasmine.createSpyObj( "provider" + index, - [ "requestTelemetry", "subscribe" ] + ["requestTelemetry", "subscribe"] ), unsubscribe = jasmine.createSpy("unsubscribe" + index); provider.requestTelemetry.andReturn({ someKey: key }); @@ -53,11 +53,11 @@ define( } beforeEach(function () { - mockQ = jasmine.createSpyObj("$q", [ "all" ]); + mockQ = jasmine.createSpyObj("$q", ["all"]); mockQ.all.andReturn(mockPromise([])); mockUnsubscribes = []; - mockProviders = [ "a", "b", "c" ].map(mockProvider); + mockProviders = ["a", "b", "c"].map(mockProvider); aggregator = new TelemetryAggregator(mockQ, mockProviders); }); @@ -121,4 +121,4 @@ define( }); } -); \ No newline at end of file +); diff --git a/platform/telemetry/test/TelemetryCapabilitySpec.js b/platform/telemetry/test/TelemetryCapabilitySpec.js index 440a577e96..e5b57cb365 100644 --- a/platform/telemetry/test/TelemetryCapabilitySpec.js +++ b/platform/telemetry/test/TelemetryCapabilitySpec.js @@ -49,11 +49,11 @@ define( mockLog = jasmine.createSpyObj("$log", ["warn", "info", "debug"]); mockDomainObject = jasmine.createSpyObj( "domainObject", - [ "getId", "getCapability", "getModel" ] + ["getId", "getCapability", "getModel"] ); mockTelemetryService = jasmine.createSpyObj( "telemetryService", - [ "requestTelemetry", "subscribe" ] + ["requestTelemetry", "subscribe"] ); mockReject = jasmine.createSpyObj("reject", ["then"]); mockUnsubscribe = jasmine.createSpy("unsubscribe"); @@ -119,7 +119,9 @@ define( it("provides an empty series when telemetry is missing", function () { var series; mockTelemetryService.requestTelemetry.andReturn(mockPromise({})); - telemetry.requestData({}).then(function (s) { series = s; }); + telemetry.requestData({}).then(function (s) { + series = s; + }); expect(series.getPointCount()).toEqual(0); }); @@ -147,7 +149,9 @@ define( it("warns if no telemetry service can be injected", function () { - mockInjector.get.andCallFake(function () { throw ""; }); + mockInjector.get.andCallFake(function () { + throw ""; + }); // Verify precondition expect(mockLog.warn).not.toHaveBeenCalled(); diff --git a/platform/telemetry/test/TelemetryControllerSpec.js b/platform/telemetry/test/TelemetryControllerSpec.js index 8dc60ef231..b5dd7ea847 100644 --- a/platform/telemetry/test/TelemetryControllerSpec.js +++ b/platform/telemetry/test/TelemetryControllerSpec.js @@ -45,9 +45,9 @@ define( beforeEach(function () { mockScope = jasmine.createSpyObj( "$scope", - [ "$on", "$broadcast", "$watch" ] + ["$on", "$broadcast", "$watch"] ); - mockQ = jasmine.createSpyObj("$q", [ "all", "when" ]); + mockQ = jasmine.createSpyObj("$q", ["all", "when"]); mockTimeout = jasmine.createSpy("$timeout"); mockLog = jasmine.createSpyObj("$log", ["warn", "info", "debug"]); @@ -64,7 +64,7 @@ define( mockTelemetry = jasmine.createSpyObj( "telemetry", - [ "requestData", "subscribe", "getMetadata" ] + ["requestData", "subscribe", "getMetadata"] ); mockUnsubscribe = jasmine.createSpy("unsubscribe"); @@ -239,4 +239,4 @@ define( }); }); } -); \ No newline at end of file +); diff --git a/platform/telemetry/test/TelemetryHandleSpec.js b/platform/telemetry/test/TelemetryHandleSpec.js index 4ede2a4b5d..aedf734807 100644 --- a/platform/telemetry/test/TelemetryHandleSpec.js +++ b/platform/telemetry/test/TelemetryHandleSpec.js @@ -71,7 +71,9 @@ define( mockQ.all.andCallFake(function (values) { return values.map(function (v) { var r; - asPromise(v).then(function (value) { r = value; }); + asPromise(v).then(function (value) { + r = value; + }); return r; }); }); diff --git a/platform/telemetry/test/TelemetryQueueSpec.js b/platform/telemetry/test/TelemetryQueueSpec.js index d81221f95f..af4f866048 100644 --- a/platform/telemetry/test/TelemetryQueueSpec.js +++ b/platform/telemetry/test/TelemetryQueueSpec.js @@ -71,4 +71,4 @@ define( }); } -); \ No newline at end of file +); diff --git a/platform/telemetry/test/TelemetrySubscriberSpec.js b/platform/telemetry/test/TelemetrySubscriberSpec.js index 7ca7b054ad..f79cb608fc 100644 --- a/platform/telemetry/test/TelemetrySubscriberSpec.js +++ b/platform/telemetry/test/TelemetrySubscriberSpec.js @@ -40,7 +40,7 @@ define( mockTimeout = jasmine.createSpy("$timeout"); mockDomainObject = jasmine.createSpyObj( "domainObject", - [ "getCapability", "useCapability", "hasCapability" ] + ["getCapability", "useCapability", "hasCapability"] ); mockCallback = jasmine.createSpy("callback"); mockPromise = jasmine.createSpyObj("promise", ["then"]); @@ -70,4 +70,4 @@ define( }); } -); \ No newline at end of file +); diff --git a/platform/telemetry/test/TelemetrySubscriptionSpec.js b/platform/telemetry/test/TelemetrySubscriptionSpec.js index 7665a823b9..c3e4b23be2 100644 --- a/platform/telemetry/test/TelemetrySubscriptionSpec.js +++ b/platform/telemetry/test/TelemetrySubscriptionSpec.js @@ -52,7 +52,7 @@ define( mockTimeout = jasmine.createSpy("$timeout"); mockDomainObject = jasmine.createSpyObj( "domainObject", - [ "getCapability", "useCapability", "hasCapability", "getId" ] + ["getCapability", "useCapability", "hasCapability", "getId"] ); mockCallback = jasmine.createSpy("callback"); mockTelemetry = jasmine.createSpyObj( @@ -67,7 +67,7 @@ define( mockUnlisten = jasmine.createSpy("unlisten"); mockSeries = jasmine.createSpyObj( "series", - [ "getPointCount", "getDomainValue", "getRangeValue" ] + ["getPointCount", "getDomainValue", "getRangeValue"] ); mockQ.when.andCallFake(mockPromise); @@ -223,7 +223,7 @@ define( subscription.promiseTelemetryObjects().then(mockCallback2); expect(mockCallback2) - .toHaveBeenCalledWith([ mockDomainObject ]); + .toHaveBeenCalledWith([mockDomainObject]); }); it("reinitializes on mutation", function () { @@ -252,8 +252,8 @@ define( mockSeries.getDomainValue.andCallFake(lookup); mockSeries.getRangeValue.andCallFake(lookup); - testMetadata.domains = [ { key: 'a' }, { key: 'b'} ]; - testMetadata.ranges = [ { key: 'c' }, { key: 'd'} ]; + testMetadata.domains = [{ key: 'a' }, { key: 'b'}]; + testMetadata.ranges = [{ key: 'c' }, { key: 'd'}]; mockTelemetry.subscribe.mostRecentCall.args[0](mockSeries); mockTimeout.mostRecentCall.args[0](); diff --git a/platform/telemetry/test/TelemetryTableSpec.js b/platform/telemetry/test/TelemetryTableSpec.js index cc7bcf6cd2..c787a5ec93 100644 --- a/platform/telemetry/test/TelemetryTableSpec.js +++ b/platform/telemetry/test/TelemetryTableSpec.js @@ -69,4 +69,4 @@ define( }); } -); \ No newline at end of file +); diff --git a/src/BundleRegistry.js b/src/BundleRegistry.js index d87b23e34f..f55d3fcd4c 100644 --- a/src/BundleRegistry.js +++ b/src/BundleRegistry.js @@ -47,4 +47,4 @@ define(function () { }; return BundleRegistry; -}); \ No newline at end of file +}); diff --git a/src/BundleRegistrySpec.js b/src/BundleRegistrySpec.js index e60a76fef3..208e9d4fcc 100644 --- a/src/BundleRegistrySpec.js +++ b/src/BundleRegistrySpec.js @@ -85,4 +85,4 @@ define(['./BundleRegistry'], function (BundleRegistry) { }); -}); \ No newline at end of file +}); diff --git a/src/legacyRegistry.js b/src/legacyRegistry.js index 39af6673f4..25bf1b40fe 100644 --- a/src/legacyRegistry.js +++ b/src/legacyRegistry.js @@ -22,4 +22,4 @@ define(['src/BundleRegistry'], function (BundleRegistry) { return new BundleRegistry(); -}); \ No newline at end of file +}); From f9631ff4c5e37bb6485d45b4c852b2505ec582ff Mon Sep 17 00:00:00 2001 From: Victor Woeltjen Date: Thu, 12 May 2016 16:35:34 -0700 Subject: [PATCH 117/132] [Code Style] Fix style missed by gulp fixstyle ...and remove an unnecessary comment, too. --- .../timeline/src/controllers/swimlane/TimelineSwimlane.js | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/platform/features/timeline/src/controllers/swimlane/TimelineSwimlane.js b/platform/features/timeline/src/controllers/swimlane/TimelineSwimlane.js index 44d7b65aa2..1938145d6e 100644 --- a/platform/features/timeline/src/controllers/swimlane/TimelineSwimlane.js +++ b/platform/features/timeline/src/controllers/swimlane/TimelineSwimlane.js @@ -47,9 +47,7 @@ define( depth = parent ? (parent.depth + 1) : 0, timespan, path = (!parent || !parent.parent) ? "" : parent.path + - //(parent.path.length > 0 ? " / " : "") + - parent.domainObject.getModel().name + - " > "; + parent.domainObject.getModel().name + " > "; // Look up timespan for this object domainObject.useCapability('timespan').then(function (t) { From 516b8c9e38a668619ae93be4093954241088d99d Mon Sep 17 00:00:00 2001 From: Henry Date: Thu, 19 May 2016 10:36:58 -0700 Subject: [PATCH 118/132] [Website] #901 Automate build process - Updated build SHA --- build-docs.sh | 10 ++++++---- circle.yml | 6 ++---- 2 files changed, 8 insertions(+), 8 deletions(-) diff --git a/build-docs.sh b/build-docs.sh index 9fdfdc91d3..87ada35524 100755 --- a/build-docs.sh +++ b/build-docs.sh @@ -22,13 +22,14 @@ #* at runtime from the About dialog for additional information. #***************************************************************************** -# Script to build and deploy docs to github pages. +# Script to build and deploy docs. OUTPUT_DIRECTORY="target/docs" +# Docs, once built, are pushed to the private website repo REPOSITORY_URL="git@github.com:nasa/openmct-website.git" WEBSITE_DIRECTORY="website" -BUILD_SHA=`git rev-parse head` +BUILD_SHA=`git rev-parse HEAD` # A remote will be created for the git repository we are pushing to. # Don't worry, as this entire directory will get trashed inbetween builds. @@ -55,6 +56,7 @@ git config user.name "BuildBot" echo "git add ." git add . -echo "git commit -m \"Docs updated from build build $BUILD_SHA\"" -git commit -m "Docs updated from build build $BUILD_SHA" +echo "git commit -m \"Docs updated from build $BUILD_SHA\"" +git commit -m "Docs updated from build $BUILD_SHA" +# Push to the website repo git push diff --git a/circle.yml b/circle.yml index 5ed3bf7147..db25ab22de 100644 --- a/circle.yml +++ b/circle.yml @@ -1,13 +1,11 @@ deployment: production: branch: master - heroku: - appname: openmctweb-demo - website: - branch: openmct-website commands: - npm install canvas nomnoml - ./build-docs.sh + heroku: + appname: openmctweb-demo openmct-demo: branch: live_demo heroku: From e4b192001f831457ef600c4dc669f5461fc77c22 Mon Sep 17 00:00:00 2001 From: Henry Date: Thu, 19 May 2016 12:14:42 -0700 Subject: [PATCH 119/132] Changed circle.yml to go back to command-based deployment to heroku as cannot use 'heroku' deployment support and commands in the same deployment descriptor --- circle.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/circle.yml b/circle.yml index db25ab22de..3a671eaa72 100644 --- a/circle.yml +++ b/circle.yml @@ -4,8 +4,8 @@ deployment: commands: - npm install canvas nomnoml - ./build-docs.sh - heroku: - appname: openmctweb-demo + - git fetch--unshallow + - git push git@heroku.com:openmctweb-demo.git $CIRCLE_SHA1:refs/heads/master openmct-demo: branch: live_demo heroku: From b7cfaf6b63483a634fed88293aa7e4534f326899 Mon Sep 17 00:00:00 2001 From: Henry Date: Thu, 19 May 2016 13:42:48 -0700 Subject: [PATCH 120/132] Fixed failed circle.yml command --- circle.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/circle.yml b/circle.yml index 3a671eaa72..bfc2e8fede 100644 --- a/circle.yml +++ b/circle.yml @@ -4,7 +4,7 @@ deployment: commands: - npm install canvas nomnoml - ./build-docs.sh - - git fetch--unshallow + - git fetch --unshallow - git push git@heroku.com:openmctweb-demo.git $CIRCLE_SHA1:refs/heads/master openmct-demo: branch: live_demo From 20ecf168f238b9a4b2341508650f4b573bfd4f0b Mon Sep 17 00:00:00 2001 From: Victor Woeltjen Date: Thu, 19 May 2016 15:00:12 -0700 Subject: [PATCH 121/132] [Timeline] Change ordering in mct-representation ...such that the configuration property is available in scope when a view is first instantiated. #908 --- platform/representation/src/MCTRepresentation.js | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/platform/representation/src/MCTRepresentation.js b/platform/representation/src/MCTRepresentation.js index bcaa90e4e7..1e775b87be 100644 --- a/platform/representation/src/MCTRepresentation.js +++ b/platform/representation/src/MCTRepresentation.js @@ -180,10 +180,6 @@ define( // representation to store local variables into. $scope.representation = {}; - // Change templates (passing in undefined to clear - // if we don't have enough info to show a template.) - changeTemplate(canRepresent ? representation : undefined); - // Any existing representers are no longer valid; release them. destroyRepresenters(); @@ -230,6 +226,10 @@ define( // next change object/key pair changes toClear = uses.concat(['model']); } + + // Change templates (passing in undefined to clear + // if we don't have enough info to show a template.) + changeTemplate(canRepresent ? representation : undefined); } // Update the representation when the key changes (e.g. if a From b5229d7786506b17a189a19b7334b97c4764cbf4 Mon Sep 17 00:00:00 2001 From: Victor Woeltjen Date: Thu, 19 May 2016 15:06:06 -0700 Subject: [PATCH 122/132] [Timeline] Commit changes on toggle #908 --- .../timeline/res/templates/tabular-swimlane-cols-tree.html | 2 +- platform/features/timeline/res/templates/timeline.html | 1 + 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/platform/features/timeline/res/templates/tabular-swimlane-cols-tree.html b/platform/features/timeline/res/templates/tabular-swimlane-cols-tree.html index e5ca69e15c..22c4a84229 100644 --- a/platform/features/timeline/res/templates/tabular-swimlane-cols-tree.html +++ b/platform/features/timeline/res/templates/tabular-swimlane-cols-tree.html @@ -29,7 +29,7 @@ }">
        From 2a4004fd5bcddc8249c8911606d14dad8303d14b Mon Sep 17 00:00:00 2001 From: Victor Woeltjen Date: Thu, 19 May 2016 15:09:52 -0700 Subject: [PATCH 123/132] [Timeline] Test mct-representation ordering Verify that a configuration object has been added to scope before changing templates. #908 --- .../representation/test/MCTRepresentationSpec.js | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/platform/representation/test/MCTRepresentationSpec.js b/platform/representation/test/MCTRepresentationSpec.js index 52d6c70d55..d3ccd61a7b 100644 --- a/platform/representation/test/MCTRepresentationSpec.js +++ b/platform/representation/test/MCTRepresentationSpec.js @@ -194,6 +194,21 @@ define( .toHaveBeenCalledWith(testViews[1]); }); + it("exposes configuration before changing templates", function () { + var observedConfiguration; + + mockChangeTemplate.andCallFake(function () { + observedConfiguration = mockScope.configuration; + }); + + mockScope.key = "xyz"; + mockScope.domainObject = mockDomainObject; + fireWatch('key', mockScope.key); + fireWatch('domainObject', mockDomainObject); + + expect(observedConfiguration).toBeDefined(); + }); + it("does not load templates until there is an object", function () { mockScope.key = "xyz"; From 78bf804e02a94d2624ac6d8a0f2623ff7d91c631 Mon Sep 17 00:00:00 2001 From: Henry Date: Thu, 19 May 2016 15:24:14 -0700 Subject: [PATCH 124/132] [Build] Ignore gh-pages from circle-ci --- circle.yml | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/circle.yml b/circle.yml index bfc2e8fede..7caa57740d 100644 --- a/circle.yml +++ b/circle.yml @@ -17,3 +17,8 @@ deployment: test: post: - gulp lint + +general: + branches: + ignore: + - gh-pages From 776586ae25fcd8a1f9c781f995ec63465f496dad Mon Sep 17 00:00:00 2001 From: Henry Date: Thu, 12 May 2016 20:23:33 -0700 Subject: [PATCH 125/132] [New Edit Mode] #634 Removed edit concerns from MctRepresentation --- .../regions/src/InspectorController.js | 8 +++- .../regions/test/InspectorControllerSpec.js | 39 +++++++++++++++++-- .../representation/src/MCTRepresentation.js | 29 ++------------ .../test/MCTRepresentationSpec.js | 15 ------- 4 files changed, 45 insertions(+), 46 deletions(-) diff --git a/platform/commonUI/regions/src/InspectorController.js b/platform/commonUI/regions/src/InspectorController.js index 32b0e1903d..89b88d4b15 100644 --- a/platform/commonUI/regions/src/InspectorController.js +++ b/platform/commonUI/regions/src/InspectorController.js @@ -32,7 +32,8 @@ define( */ function InspectorController($scope, policyService) { var domainObject = $scope.domainObject, - typeCapability = domainObject.getCapability('type'); + typeCapability = domainObject.getCapability('type'), + statusListener; /** * Filters region parts to only those allowed by region policies @@ -50,6 +51,11 @@ define( $scope.regions = filterRegions(typeCapability.getDefinition().inspector || new InspectorRegion()); } + statusListener = domainObject.getCapability("status").listen(setRegions); + $scope.$on("$destroy", function () { + statusListener(); + }); + setRegions(); } diff --git a/platform/commonUI/regions/test/InspectorControllerSpec.js b/platform/commonUI/regions/test/InspectorControllerSpec.js index ad3243c348..9d815e2851 100644 --- a/platform/commonUI/regions/test/InspectorControllerSpec.js +++ b/platform/commonUI/regions/test/InspectorControllerSpec.js @@ -30,6 +30,8 @@ define( mockTypeCapability, mockTypeDefinition, mockPolicyService, + mockStatusCapability, + capabilities = {}, controller; beforeEach(function(){ @@ -47,19 +49,29 @@ define( 'getDefinition' ]); mockTypeCapability.getDefinition.andReturn(mockTypeDefinition); + capabilities.type = mockTypeCapability; + + mockStatusCapability = jasmine.createSpyObj('statusCapability', [ + 'listen' + ]); + capabilities.status = mockStatusCapability; mockDomainObject = jasmine.createSpyObj('domainObject', [ 'getCapability' ]); - mockDomainObject.getCapability.andReturn(mockTypeCapability); + mockDomainObject.getCapability.andCallFake(function (name) { + return capabilities[name]; + }); mockPolicyService = jasmine.createSpyObj('policyService', [ 'allow' ]); - mockScope = { - domainObject: mockDomainObject - }; + mockScope = jasmine.createSpyObj('$scope', + ['$on'] + ); + + mockScope.domainObject = mockDomainObject; }); it("filters out regions disallowed by region policy", function() { @@ -73,6 +85,25 @@ define( controller = new InspectorController(mockScope, mockPolicyService); expect(mockScope.regions.length).toBe(2); }); + + it("Responds to status changes", function() { + mockPolicyService.allow.andReturn(true); + controller = new InspectorController(mockScope, mockPolicyService); + expect(mockScope.regions.length).toBe(2); + expect(mockStatusCapability.listen).toHaveBeenCalled(); + mockPolicyService.allow.andReturn(false); + mockStatusCapability.listen.mostRecentCall.args[0](); + expect(mockScope.regions.length).toBe(0); + }); + + it("Unregisters status listener", function() { + var mockListener = jasmine.createSpy('listener'); + mockStatusCapability.listen.andReturn(mockListener); + controller = new InspectorController(mockScope, mockPolicyService); + expect(mockScope.$on).toHaveBeenCalledWith("$destroy", jasmine.any(Function)); + mockScope.$on.mostRecentCall.args[1](); + expect(mockListener).toHaveBeenCalled(); + }); }); } ); diff --git a/platform/representation/src/MCTRepresentation.js b/platform/representation/src/MCTRepresentation.js index bcaa90e4e7..331139b793 100644 --- a/platform/representation/src/MCTRepresentation.js +++ b/platform/representation/src/MCTRepresentation.js @@ -88,7 +88,6 @@ define( toClear = [], // Properties to clear out of scope on change counter = 0, couldRepresent = false, - couldEdit = false, lastIdPath = [], lastKey, statusListener, @@ -137,14 +136,13 @@ define( }); } - function unchanged(canRepresent, canEdit, idPath, key) { + function unchanged(canRepresent, idPath, key) { return (canRepresent === couldRepresent) && (key === lastKey) && (idPath.length === lastIdPath.length) && idPath.every(function (id, i) { return id === lastIdPath[i]; - }) && - (canEdit === couldEdit); + }); } function getIdPath(domainObject) { @@ -168,11 +166,10 @@ define( representation = lookup($scope.key, domainObject), uses = ((representation || {}).uses || []), canRepresent = !!(representation && domainObject), - canEdit = !!(domainObject && domainObject.hasCapability('editor') && domainObject.getCapability('editor').inEditContext()), idPath = getIdPath(domainObject), key = $scope.key; - if (unchanged(canRepresent, canEdit, idPath, key)) { + if (unchanged(canRepresent, idPath, key)) { return; } @@ -201,7 +198,6 @@ define( // To allow simplified change detection next time around couldRepresent = canRepresent; lastIdPath = idPath; - couldEdit = canEdit; lastKey = key; // Populate scope with fields associated with the current @@ -240,25 +236,6 @@ define( // (to a different object) $scope.$watch("domainObject", refresh); - function listenForStatusChange(object) { - if (statusListener) { - statusListener(); - } - statusListener = object.getCapability("status").listen(refresh); - } - - /** - * Add a listener to the object for status changes. - */ - $scope.$watch("domainObject", function (domainObject, oldDomainObject) { - if (domainObject !== oldDomainObject){ - listenForStatusChange(domainObject); - } - }); - if ($scope.domainObject) { - listenForStatusChange($scope.domainObject); - } - // Finally, also update when there is a new version of that // same domain object; these changes should be tracked in the // model's "modified" field, by the mutation capability. diff --git a/platform/representation/test/MCTRepresentationSpec.js b/platform/representation/test/MCTRepresentationSpec.js index 52d6c70d55..b5e78fec2a 100644 --- a/platform/representation/test/MCTRepresentationSpec.js +++ b/platform/representation/test/MCTRepresentationSpec.js @@ -253,21 +253,6 @@ define( expect(mockScope.testCapability).toBeUndefined(); }); - it("registers a status change listener", function () { - mockScope.$watch.calls[2].args[1](mockDomainObject); - expect(mockStatusCapability.listen).toHaveBeenCalled(); - }); - - it("unlistens for status change on scope destruction", function () { - var mockUnlistener = jasmine.createSpy("unlisten"); - mockStatusCapability.listen.andReturn(mockUnlistener); - mockScope.$watch.calls[2].args[1](mockDomainObject); - expect(mockStatusCapability.listen).toHaveBeenCalled(); - - mockScope.$on.calls[1].args[1](); - expect(mockUnlistener).toHaveBeenCalled(); - }); - describe("when a domain object has been observed", function () { var mockContext, mockContext2, From 601bc03ba2064a992553151e3843c69c0d9d41c1 Mon Sep 17 00:00:00 2001 From: Henry Date: Fri, 20 May 2016 10:23:05 -0700 Subject: [PATCH 126/132] [New Edit Mode] #636 Modified EditAndCompose action to rely on a slightly refactored EditActionPolicy to remove folder specific logic --- .../edit/src/actions/EditAndComposeAction.js | 7 ++++--- .../edit/src/policies/EditActionPolicy.js | 19 ++++++++----------- .../test/actions/EditAndComposeActionSpec.js | 19 ++++++++++++++++--- 3 files changed, 28 insertions(+), 17 deletions(-) diff --git a/platform/commonUI/edit/src/actions/EditAndComposeAction.js b/platform/commonUI/edit/src/actions/EditAndComposeAction.js index 974ab2f001..de43ca0fdc 100644 --- a/platform/commonUI/edit/src/actions/EditAndComposeAction.js +++ b/platform/commonUI/edit/src/actions/EditAndComposeAction.js @@ -37,7 +37,8 @@ define( } EditAndComposeAction.prototype.perform = function () { - var self = this; + var self = this, + editAction = this.domainObject.getCapability('action').getActions("edit")[0]; // Persist changes to the domain object function doPersist() { @@ -54,8 +55,8 @@ define( .then(doPersist); } - if (this.domainObject.getCapability('type').getKey() !== 'folder') { - this.domainObject.getCapability('action').perform('edit'); + if (editAction) { + editAction.perform(); } return this.selectedObject && doLink(); diff --git a/platform/commonUI/edit/src/policies/EditActionPolicy.js b/platform/commonUI/edit/src/policies/EditActionPolicy.js index f266d580eb..86e103b387 100644 --- a/platform/commonUI/edit/src/policies/EditActionPolicy.js +++ b/platform/commonUI/edit/src/policies/EditActionPolicy.js @@ -81,17 +81,14 @@ define( var key = action.getMetadata().key, category = (context || {}).category; - // Only worry about actions in the view-control category - if (category === 'view-control') { - // Restrict 'edit' to cases where there are editable - // views (similarly, restrict 'properties' to when - // the converse is true), and where the domain object is not - // already being edited. - if (key === 'edit') { - return this.countEditableViews(context) > 0 && !isEditing(context); - } else if (key === 'properties') { - return this.countEditableViews(context) < 1 && !isEditing(context); - } + // Restrict 'edit' to cases where there are editable + // views (similarly, restrict 'properties' to when + // the converse is true), and where the domain object is not + // already being edited. + if (key === 'edit') { + return this.countEditableViews(context) > 0 && !isEditing(context); + } else if (key === 'properties' && category === 'view-control') { + return this.countEditableViews(context) < 1 && !isEditing(context); } // Like all policies, allow by default. diff --git a/platform/commonUI/edit/test/actions/EditAndComposeActionSpec.js b/platform/commonUI/edit/test/actions/EditAndComposeActionSpec.js index a02c259fd1..2e83b2f9c7 100644 --- a/platform/commonUI/edit/test/actions/EditAndComposeActionSpec.js +++ b/platform/commonUI/edit/test/actions/EditAndComposeActionSpec.js @@ -32,6 +32,7 @@ define( mockComposition, mockPersistence, mockActionCapability, + mockEditAction, mockType, actionContext, model, @@ -69,7 +70,8 @@ define( mockComposition = jasmine.createSpyObj("composition", [ "invoke", "add" ]); mockPersistence = jasmine.createSpyObj("persistence", [ "persist" ]); mockType = jasmine.createSpyObj("type", [ "hasFeature", "getKey" ]); - mockActionCapability = jasmine.createSpyObj("actionCapability", [ "perform"]); + mockActionCapability = jasmine.createSpyObj("actionCapability", [ "getActions"]); + mockEditAction = jasmine.createSpyObj("editAction", ["perform"]); mockDomainObject.getId.andReturn("test"); mockDomainObject.getCapability.andReturn(mockContext); @@ -78,6 +80,7 @@ define( mockType.getKey.andReturn("layout"); mockComposition.invoke.andReturn(mockPromise(true)); mockComposition.add.andReturn(mockPromise(true)); + mockActionCapability.getActions.andReturn([]); capabilities = { composition: mockComposition, @@ -109,9 +112,19 @@ define( expect(mockPersistence.persist).toHaveBeenCalled(); }); - it("enables edit mode", function () { + it("enables edit mode for objects that have an edit action", function () { + mockActionCapability.getActions.andReturn([mockEditAction]); action.perform(); - expect(mockActionCapability.perform).toHaveBeenCalledWith("edit"); + expect(mockEditAction.perform).toHaveBeenCalled(); + }); + + it("Does not enable edit mode for objects that do not have an" + + " edit action", function () { + mockActionCapability.getActions.andReturn([]); + action.perform(); + expect(mockEditAction.perform).not.toHaveBeenCalled(); + expect(mockComposition.add) + .toHaveBeenCalledWith(mockDomainObject); }); }); From e468080373bfe01de9512f481f04a66b575ecb01 Mon Sep 17 00:00:00 2001 From: Victor Woeltjen Date: Fri, 20 May 2016 11:38:36 -0700 Subject: [PATCH 127/132] [Code Style] Disallow outer shadowing https://github.com/nasa/openmct/commit/031a46aa8e34f2e428c71b9cf9e4c83412c8d438#commitcomment-17561082 --- .jshintrc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.jshintrc b/.jshintrc index ca549530ff..dc2b733533 100644 --- a/.jshintrc +++ b/.jshintrc @@ -16,7 +16,7 @@ "define", "Promise" ], - "shadow": "inner", + "shadow": "outer", "strict": "implied", "undef": true, "unused": "vars" From ad5691142e076b52c127211c037f20f2759d5886 Mon Sep 17 00:00:00 2001 From: Victor Woeltjen Date: Fri, 20 May 2016 11:39:49 -0700 Subject: [PATCH 128/132] [Code Style] Rename shadowing variables --- .../browse/test/creation/CreateWizardSpec.js | 6 +-- .../edit/src/actions/PropertiesAction.js | 4 +- .../commonUI/edit/src/actions/RemoveAction.js | 4 +- .../edit/src/representers/EditToolbar.js | 10 ++-- .../representers/EditToolbarRepresenter.js | 4 +- .../edit/test/actions/PropertiesDialogSpec.js | 8 ++-- .../general/src/services/UrlService.js | 4 +- .../commonUI/general/src/ui/TreeNodeView.js | 4 +- platform/commonUI/general/src/ui/TreeView.js | 4 +- .../commonUI/general/test/ui/TreeViewSpec.js | 48 ++++++++----------- .../inspect/src/gestures/InfoButtonGesture.js | 4 +- .../commonUI/mobile/test/AgentServiceSpec.js | 2 +- platform/core/src/actions/ActionProvider.js | 12 ++--- .../src/capabilities/CompositionCapability.js | 6 +-- .../capabilities/CoreCapabilityProvider.js | 4 +- .../src/capabilities/MutationCapability.js | 4 +- .../src/capabilities/PersistenceCapability.js | 4 +- .../core/src/models/PersistedModelProvider.js | 10 ++-- platform/core/src/types/MergeModels.js | 14 +++--- platform/core/src/types/TypeProvider.js | 6 +-- platform/core/src/views/ViewProvider.js | 12 ++--- .../InstantiationCapabilitySpec.js | 6 +-- .../test/models/CachingModelDecoratorSpec.js | 4 +- platform/core/test/views/ViewProviderSpec.js | 12 ++--- .../src/actions/AbstractComposeAction.js | 10 ++-- .../entanglement/src/services/CopyService.js | 6 +-- .../src/services/LocationService.js | 4 +- .../test/services/CopyServiceSpec.js | 10 ++-- .../plot/test/PlotOptionsControllerSpec.js | 10 ++-- .../src/controllers/MCTTableController.js | 22 ++++----- .../src/capabilities/ActivityTimespan.js | 14 +++--- .../src/capabilities/CumulativeGraph.js | 14 +++--- .../src/capabilities/ResourceGraph.js | 8 ++-- .../src/capabilities/TimelineTimespan.js | 4 +- .../src/capabilities/UtilizationCapability.js | 8 ++-- .../controllers/drag/TimelineDragHandler.js | 24 +++++----- .../graph/TimelineGraphPopulator.js | 7 ++- .../src/controllers/swimlane/TimelineProxy.js | 4 +- .../swimlane/TimelineSwimlaneDecorator.js | 10 ++-- .../swimlane/TimelineSwimlaneDropHandler.js | 8 ++-- .../swimlane/TimelineSwimlanePopulator.js | 4 +- .../timeline/src/services/ObjectLoader.js | 12 ++--- .../test/actions/TimelineTraverserSpec.js | 8 ++-- .../capabilities/UtilizationCapabilitySpec.js | 4 +- .../drag/TimelineDragHandlerSpec.js | 12 ++--- .../swimlane/TimelineSwimlanePopulatorSpec.js | 10 ++-- .../src/register/ExtensionRegistrar.js | 13 +++-- .../src/resolve/ExtensionResolver.js | 22 ++++----- .../elastic/src/ElasticPersistenceProvider.js | 4 +- .../queue/src/PersistenceFailureHandler.js | 14 +++--- .../queue/src/PersistenceQueueHandler.js | 10 ++-- platform/representation/src/TemplateLinker.js | 12 ++--- .../src/services/GenericSearchProvider.js | 4 +- platform/telemetry/src/TelemetryQueue.js | 6 +-- .../telemetry/src/TelemetrySubscription.js | 20 ++++---- .../telemetry/test/TelemetryAggregatorSpec.js | 4 +- 56 files changed, 256 insertions(+), 262 deletions(-) diff --git a/platform/commonUI/browse/test/creation/CreateWizardSpec.js b/platform/commonUI/browse/test/creation/CreateWizardSpec.js index 713b1d33d3..628fdbc447 100644 --- a/platform/commonUI/browse/test/creation/CreateWizardSpec.js +++ b/platform/commonUI/browse/test/creation/CreateWizardSpec.js @@ -152,7 +152,7 @@ define( }); it("validates selection types using policy", function () { - var mockDomainObject = jasmine.createSpyObj( + var mockDomainObj = jasmine.createSpyObj( 'domainObject', ['getCapability'] ), @@ -166,8 +166,8 @@ define( rows = structure.sections[sections.length - 1].rows, locationRow = rows[rows.length - 1]; - mockDomainObject.getCapability.andReturn(mockOtherType); - locationRow.validate(mockDomainObject); + mockDomainObj.getCapability.andReturn(mockOtherType); + locationRow.validate(mockDomainObj); // Should check policy to see if the user-selected location // can actually contain objects of this type diff --git a/platform/commonUI/edit/src/actions/PropertiesAction.js b/platform/commonUI/edit/src/actions/PropertiesAction.js index 7ec48122ca..2f682fc950 100644 --- a/platform/commonUI/edit/src/actions/PropertiesAction.js +++ b/platform/commonUI/edit/src/actions/PropertiesAction.js @@ -63,10 +63,10 @@ define( }); } - function showDialog(type) { + function showDialog(objType) { // Create a dialog object to generate the form structure, etc. var dialog = - new PropertiesDialog(type, domainObject.getModel()); + new PropertiesDialog(objType, domainObject.getModel()); // Show the dialog return dialogService.getUserInput( diff --git a/platform/commonUI/edit/src/actions/RemoveAction.js b/platform/commonUI/edit/src/actions/RemoveAction.js index 3174330d03..7617101549 100644 --- a/platform/commonUI/edit/src/actions/RemoveAction.js +++ b/platform/commonUI/edit/src/actions/RemoveAction.js @@ -75,8 +75,8 @@ define( * Invoke persistence on a domain object. This will be called upon * the removed object's parent (as its composition will have changed.) */ - function doPersist(domainObject) { - var persistence = domainObject.getCapability('persistence'); + function doPersist(domainObj) { + var persistence = domainObj.getCapability('persistence'); return persistence && persistence.persist(); } diff --git a/platform/commonUI/edit/src/representers/EditToolbar.js b/platform/commonUI/edit/src/representers/EditToolbar.js index 7659367dc6..5184d73086 100644 --- a/platform/commonUI/edit/src/representers/EditToolbar.js +++ b/platform/commonUI/edit/src/representers/EditToolbar.js @@ -223,7 +223,7 @@ define( // Update value for this property in all elements of the // selection which have this property. - function updateProperties(property, value) { + function updateProperties(property, val) { var changed = false; // Update property in a selected element @@ -233,12 +233,12 @@ define( // Check if this is a setter, or just assignable if (typeof selected[property] === 'function') { changed = - changed || (selected[property]() !== value); - selected[property](value); + changed || (selected[property]() !== val); + selected[property](val); } else { changed = - changed || (selected[property] !== value); - selected[property] = value; + changed || (selected[property] !== val); + selected[property] = val; } } } diff --git a/platform/commonUI/edit/src/representers/EditToolbarRepresenter.js b/platform/commonUI/edit/src/representers/EditToolbarRepresenter.js index 0e30920575..a4146f5965 100644 --- a/platform/commonUI/edit/src/representers/EditToolbarRepresenter.js +++ b/platform/commonUI/edit/src/representers/EditToolbarRepresenter.js @@ -133,11 +133,11 @@ define( self = this; // Initialize toolbar (expose object to parent scope) - function initialize(definition) { + function initialize(def) { // If we have been asked to expose toolbar state... if (self.attrs.toolbar) { // Initialize toolbar object - self.toolbar = new EditToolbar(definition, self.commit); + self.toolbar = new EditToolbar(def, self.commit); // Ensure toolbar state is exposed self.exposeToolbar(); } diff --git a/platform/commonUI/edit/test/actions/PropertiesDialogSpec.js b/platform/commonUI/edit/test/actions/PropertiesDialogSpec.js index eebf513464..00d245a256 100644 --- a/platform/commonUI/edit/test/actions/PropertiesDialogSpec.js +++ b/platform/commonUI/edit/test/actions/PropertiesDialogSpec.js @@ -37,11 +37,11 @@ define( model = { x: "initial value" }; properties = ["x", "y", "z"].map(function (k) { return { - getValue: function (model) { - return model[k]; + getValue: function (m) { + return m[k]; }, - setValue: function (model, v) { - model[k] = v; + setValue: function (m, v) { + m[k] = v; }, getDefinition: function () { return { control: 'textfield '}; diff --git a/platform/commonUI/general/src/services/UrlService.js b/platform/commonUI/general/src/services/UrlService.js index 2348db23c4..af0204c24d 100644 --- a/platform/commonUI/general/src/services/UrlService.js +++ b/platform/commonUI/general/src/services/UrlService.js @@ -50,8 +50,8 @@ define( var context = domainObject && domainObject.getCapability('context'), objectPath = context ? context.getPath() : [], - ids = objectPath.map(function (domainObject) { - return domainObject.getId(); + ids = objectPath.map(function (domainObj) { + return domainObj.getId(); }); // Parses the path together. Starts with the diff --git a/platform/commonUI/general/src/ui/TreeNodeView.js b/platform/commonUI/general/src/ui/TreeNodeView.js index 2cff198e76..13b28bb473 100644 --- a/platform/commonUI/general/src/ui/TreeNodeView.js +++ b/platform/commonUI/general/src/ui/TreeNodeView.js @@ -105,8 +105,8 @@ define([ function getIdPath(domainObject) { var context = domainObject && domainObject.getCapability('context'); - function getId(domainObject) { - return domainObject.getId(); + function getId(domainObj) { + return domainObj.getId(); } return context ? context.getPath().map(getId) : []; diff --git a/platform/commonUI/general/src/ui/TreeView.js b/platform/commonUI/general/src/ui/TreeView.js index da0bed7091..07d155e960 100644 --- a/platform/commonUI/general/src/ui/TreeView.js +++ b/platform/commonUI/general/src/ui/TreeView.js @@ -62,8 +62,8 @@ define([ var self = this, domainObject = this.activeObject; - function addNode(domainObject, index) { - self.nodeViews[index].model(domainObject); + function addNode(domainObj, index) { + self.nodeViews[index].model(domainObj); } function addNodes(domainObjects) { diff --git a/platform/commonUI/general/test/ui/TreeViewSpec.js b/platform/commonUI/general/test/ui/TreeViewSpec.js index 1e492d4bfd..c889c31090 100644 --- a/platform/commonUI/general/test/ui/TreeViewSpec.js +++ b/platform/commonUI/general/test/ui/TreeViewSpec.js @@ -36,7 +36,7 @@ define([ treeView; function makeMockDomainObject(id, model, capabilities) { - var mockDomainObject = jasmine.createSpyObj( + var mockDomainObj = jasmine.createSpyObj( 'domainObject-' + id, [ 'getId', @@ -46,18 +46,18 @@ define([ 'useCapability' ] ); - mockDomainObject.getId.andReturn(id); - mockDomainObject.getModel.andReturn(model); - mockDomainObject.hasCapability.andCallFake(function (c) { + mockDomainObj.getId.andReturn(id); + mockDomainObj.getModel.andReturn(model); + mockDomainObj.hasCapability.andCallFake(function (c) { return !!(capabilities[c]); }); - mockDomainObject.getCapability.andCallFake(function (c) { + mockDomainObj.getCapability.andCallFake(function (c) { return capabilities[c]; }); - mockDomainObject.useCapability.andCallFake(function (c) { + mockDomainObj.useCapability.andCallFake(function (c) { return capabilities[c] && capabilities[c].invoke(); }); - return mockDomainObject; + return mockDomainObj; } beforeEach(function () { @@ -99,24 +99,16 @@ define([ var mockComposition; function makeGenericCapabilities() { - var mockContext = - jasmine.createSpyObj('context', ['getPath']), - mockType = - jasmine.createSpyObj('type', ['getGlyph']), - mockLocation = - jasmine.createSpyObj('location', ['isLink']), - mockMutation = - jasmine.createSpyObj('mutation', ['listen']), - mockStatus = + var mockStatus = jasmine.createSpyObj('status', ['listen', 'list']); mockStatus.list.andReturn([]); return { - context: mockContext, - type: mockType, - mutation: mockMutation, - location: mockLocation, + context: jasmine.createSpyObj('context', ['getPath']), + type: jasmine.createSpyObj('type', ['getGlyph']), + location: jasmine.createSpyObj('location', ['isLink']), + mutation: jasmine.createSpyObj('mutation', ['listen']), status: mockStatus }; } @@ -133,11 +125,11 @@ define([ beforeEach(function () { mockComposition = ['a', 'b', 'c'].map(function (id) { - var testCapabilities = makeGenericCapabilities(), + var testCaps = makeGenericCapabilities(), mockChild = - makeMockDomainObject(id, {}, testCapabilities); + makeMockDomainObject(id, {}, testCaps); - testCapabilities.context.getPath + testCaps.context.getPath .andReturn([mockDomainObject, mockChild]); return mockChild; @@ -207,11 +199,11 @@ define([ describe("when a context-less object is selected", function () { beforeEach(function () { - var testCapabilities = makeGenericCapabilities(), - mockDomainObject = - makeMockDomainObject('xyz', {}, testCapabilities); - delete testCapabilities.context; - treeView.value(mockDomainObject); + var testCaps = makeGenericCapabilities(), + mockDomainObj = + makeMockDomainObject('xyz', {}, testCaps); + delete testCaps.context; + treeView.value(mockDomainObj); }); it("clears all selection state", function () { diff --git a/platform/commonUI/inspect/src/gestures/InfoButtonGesture.js b/platform/commonUI/inspect/src/gestures/InfoButtonGesture.js index 5dbee8177d..81a3fd9e84 100644 --- a/platform/commonUI/inspect/src/gestures/InfoButtonGesture.js +++ b/platform/commonUI/inspect/src/gestures/InfoButtonGesture.js @@ -79,8 +79,8 @@ define( // On any touch on the body, default body touches/events // are prevented, the bubble is dismissed, and the touchstart // body event is unbound, reallowing gestures - body.on('touchstart', function (event) { - event.preventDefault(); + body.on('touchstart', function (evt) { + evt.preventDefault(); hideBubble(); body.unbind('touchstart'); }); diff --git a/platform/commonUI/mobile/test/AgentServiceSpec.js b/platform/commonUI/mobile/test/AgentServiceSpec.js index e55113810e..da8c19ddc8 100644 --- a/platform/commonUI/mobile/test/AgentServiceSpec.js +++ b/platform/commonUI/mobile/test/AgentServiceSpec.js @@ -69,7 +69,7 @@ define( }); it("detects display orientation", function () { - var agentService = new AgentService(testWindow); + agentService = new AgentService(testWindow); testWindow.innerWidth = 1024; testWindow.innerHeight = 400; expect(agentService.isPortrait()).toBeFalsy(); diff --git a/platform/core/src/actions/ActionProvider.js b/platform/core/src/actions/ActionProvider.js index 4e3973186c..b0afd3e909 100644 --- a/platform/core/src/actions/ActionProvider.js +++ b/platform/core/src/actions/ActionProvider.js @@ -81,8 +81,8 @@ define( // additionally fills in the action's getMetadata method // with the extension definition (if no getMetadata // method was supplied.) - function instantiateAction(Action, context) { - var action = new Action(context), + function instantiateAction(Action, ctxt) { + var action = new Action(ctxt), metadata; // Provide a getMetadata method that echos @@ -90,7 +90,7 @@ define( // unless the action has defined its own. if (!action.getMetadata) { metadata = Object.create(Action.definition || {}); - metadata.context = context; + metadata.context = ctxt; action.getMetadata = function () { return metadata; }; @@ -103,14 +103,14 @@ define( // applicable in a given context, according to the static // appliesTo method of given actions (if defined), and // instantiate those applicable actions. - function createIfApplicable(actions, context) { + function createIfApplicable(actions, ctxt) { function isApplicable(Action) { - return Action.appliesTo ? Action.appliesTo(context) : true; + return Action.appliesTo ? Action.appliesTo(ctxt) : true; } function instantiate(Action) { try { - return instantiateAction(Action, context); + return instantiateAction(Action, ctxt); } catch (e) { $log.error([ "Could not instantiate action", diff --git a/platform/core/src/capabilities/CompositionCapability.js b/platform/core/src/capabilities/CompositionCapability.js index c2d08cdf26..598767a422 100644 --- a/platform/core/src/capabilities/CompositionCapability.js +++ b/platform/core/src/capabilities/CompositionCapability.js @@ -82,7 +82,7 @@ define( return mutationResult && self.invoke().then(findObject); } - function addIdToModel(model) { + function addIdToModel(objModel) { // Pick a specific index if needed. index = isNaN(index) ? composition.length : index; // Also, don't put past the end of the array @@ -90,11 +90,11 @@ define( // Remove the existing instance of the id if (oldIndex !== -1) { - model.composition.splice(oldIndex, 1); + objModel.composition.splice(oldIndex, 1); } // ...and add it back at the appropriate index. - model.composition.splice(index, 0, id); + objModel.composition.splice(index, 0, id); } // If no index has been specified already and the id is already diff --git a/platform/core/src/capabilities/CoreCapabilityProvider.js b/platform/core/src/capabilities/CoreCapabilityProvider.js index 27833630a2..7e5d1e4b7b 100644 --- a/platform/core/src/capabilities/CoreCapabilityProvider.js +++ b/platform/core/src/capabilities/CoreCapabilityProvider.js @@ -62,9 +62,9 @@ define( } // Package capabilities as key-value pairs - function packageCapabilities(capabilities) { + function packageCapabilities(caps) { var result = {}; - capabilities.forEach(function (capability) { + caps.forEach(function (capability) { if (capability.key) { result[capability.key] = result[capability.key] || capability; diff --git a/platform/core/src/capabilities/MutationCapability.js b/platform/core/src/capabilities/MutationCapability.js index ec448af17c..592f613438 100644 --- a/platform/core/src/capabilities/MutationCapability.js +++ b/platform/core/src/capabilities/MutationCapability.js @@ -124,9 +124,9 @@ define( clone = JSON.parse(JSON.stringify(model)), useTimestamp = arguments.length > 1; - function notifyListeners(model) { + function notifyListeners(newModel) { generalTopic.notify(domainObject); - specificTopic.notify(model); + specificTopic.notify(newModel); } // Function to handle copying values to the actual diff --git a/platform/core/src/capabilities/PersistenceCapability.js b/platform/core/src/capabilities/PersistenceCapability.js index 204cd7de35..8e1990892d 100644 --- a/platform/core/src/capabilities/PersistenceCapability.js +++ b/platform/core/src/capabilities/PersistenceCapability.js @@ -124,8 +124,8 @@ define( this.persistenceService.createObject; // Update persistence timestamp... - domainObject.useCapability("mutation", function (model) { - model.persisted = modified; + domainObject.useCapability("mutation", function (m) { + m.persisted = modified; }, modified); // ...and persist diff --git a/platform/core/src/models/PersistedModelProvider.js b/platform/core/src/models/PersistedModelProvider.js index 7a74ebb23a..cd6fde75c4 100644 --- a/platform/core/src/models/PersistedModelProvider.js +++ b/platform/core/src/models/PersistedModelProvider.js @@ -82,9 +82,9 @@ define( } // Package the result as id->model - function packageResult(parsedIds, models) { + function packageResult(parsedIdsToPackage, models) { var result = {}; - parsedIds.forEach(function (parsedId, index) { + parsedIdsToPackage.forEach(function (parsedId, index) { var id = parsedId.id; if (models[index]) { result[id] = models[index]; @@ -93,11 +93,11 @@ define( return result; } - function loadModels(parsedIds) { - return $q.all(parsedIds.map(loadModel)) + function loadModels(parsedIdsToLoad) { + return $q.all(parsedIdsToLoad.map(loadModel)) .then(function (models) { return packageResult( - parsedIds, + parsedIdsToLoad, models.map(addPersistedTimestamp) ); }); diff --git a/platform/core/src/types/MergeModels.js b/platform/core/src/types/MergeModels.js index be9a6ebab8..a33c6dba40 100644 --- a/platform/core/src/types/MergeModels.js +++ b/platform/core/src/types/MergeModels.js @@ -58,14 +58,14 @@ define( * corresponding keys in the recursive step. * * - * @param a the first object to be merged - * @param b the second object to be merged + * @param modelA the first object to be merged + * @param modelB the second object to be merged * @param merger the merger, as described above - * @returns {*} the result of merging `a` and `b` + * @returns {*} the result of merging `modelA` and `modelB` * @constructor * @memberof platform/core */ - function mergeModels(a, b, merger) { + function mergeModels(modelA, modelB, merger) { var mergeFunction; function mergeArrays(a, b) { @@ -93,11 +93,11 @@ define( } mergeFunction = (merger && Function.isFunction(merger)) ? merger : - (Array.isArray(a) && Array.isArray(b)) ? mergeArrays : - (a instanceof Object && b instanceof Object) ? mergeObjects : + (Array.isArray(modelA) && Array.isArray(modelB)) ? mergeArrays : + (modelA instanceof Object && modelB instanceof Object) ? mergeObjects : mergeOther; - return mergeFunction(a, b); + return mergeFunction(modelA, modelB); } return mergeModels; diff --git a/platform/core/src/types/TypeProvider.js b/platform/core/src/types/TypeProvider.js index f2ae2655b6..b30efce0d9 100644 --- a/platform/core/src/types/TypeProvider.js +++ b/platform/core/src/types/TypeProvider.js @@ -159,8 +159,8 @@ define( } function lookupTypeDef(typeKey) { - function buildTypeDef(typeKey) { - var typeDefs = typeDefinitions[typeKey] || [], + function buildTypeDef(typeKeyToBuild) { + var typeDefs = typeDefinitions[typeKeyToBuild] || [], inherits = typeDefs.map(function (typeDef) { return asArray(typeDef.inherits || []); }).reduce(function (a, b) { @@ -175,7 +175,7 @@ define( // Always provide a default name def.model = def.model || {}; def.model.name = def.model.name || - ("Unnamed " + (def.name || "Object")); + ("Unnamed " + (def.name || "Object")); return def; } diff --git a/platform/core/src/views/ViewProvider.js b/platform/core/src/views/ViewProvider.js index 6ee1ccb4c4..7af298c7e8 100644 --- a/platform/core/src/views/ViewProvider.js +++ b/platform/core/src/views/ViewProvider.js @@ -105,15 +105,15 @@ define( // Check if an object has all capabilities designated as `needs` // for a view. Exposing a capability via delegation is taken to // satisfy this filter if `allowDelegation` is true. - function capabilitiesMatch(domainObject, capabilities, allowDelegation) { - var delegation = domainObject.getCapability("delegation"); + function capabilitiesMatch(domainObj, capabilities, allowDelegation) { + var delegation = domainObj.getCapability("delegation"); allowDelegation = allowDelegation && (delegation !== undefined); // Check if an object has (or delegates, if allowed) a // capability. function hasCapability(c) { - return domainObject.hasCapability(c) || + return domainObj.hasCapability(c) || (allowDelegation && delegation.doesDelegateCapability(c)); } @@ -128,13 +128,13 @@ define( // Check if a view and domain object type can be paired; // both can restrict the others they accept. - function viewMatchesType(view, type) { - var views = type && (type.getDefinition() || {}).views, + function viewMatchesType(view, objType) { + var views = objType && (objType.getDefinition() || {}).views, matches = true; // View is restricted to a certain type if (view.type) { - matches = matches && type && type.instanceOf(view.type); + matches = matches && objType && objType.instanceOf(view.type); } // Type wishes to restrict its specific views diff --git a/platform/core/test/capabilities/InstantiationCapabilitySpec.js b/platform/core/test/capabilities/InstantiationCapabilitySpec.js index 4a798a567d..b65f26f368 100644 --- a/platform/core/test/capabilities/InstantiationCapabilitySpec.js +++ b/platform/core/test/capabilities/InstantiationCapabilitySpec.js @@ -73,16 +73,16 @@ define( }); it("uses the instantiate service to create domain objects", function () { - var mockDomainObject = jasmine.createSpyObj('domainObject', [ + var mockDomainObj = jasmine.createSpyObj('domainObject', [ 'getId', 'getModel', 'getCapability', 'useCapability', 'hasCapability' ]), testModel = { someKey: "some value" }; - mockInstantiate.andReturn(mockDomainObject); + mockInstantiate.andReturn(mockDomainObj); expect(instantiation.instantiate(testModel)) - .toBe(mockDomainObject); + .toBe(mockDomainObj); expect(mockInstantiate) .toHaveBeenCalledWith({ someKey: "some value", diff --git a/platform/core/test/models/CachingModelDecoratorSpec.js b/platform/core/test/models/CachingModelDecoratorSpec.js index ec7a4dd32d..73a0957b28 100644 --- a/platform/core/test/models/CachingModelDecoratorSpec.js +++ b/platform/core/test/models/CachingModelDecoratorSpec.js @@ -99,7 +99,7 @@ define( }); it("ensures a single object instance, even for multiple concurrent calls", function () { - var promiseA, promiseB, mockCallback = jasmine.createSpy(); + var promiseA, promiseB; promiseA = fakePromise(); promiseB = fakePromise(); @@ -126,7 +126,7 @@ define( }); it("is robust against updating with undefined values", function () { - var promiseA, promiseB, mockCallback = jasmine.createSpy(); + var promiseA, promiseB; promiseA = fakePromise(); promiseB = fakePromise(); diff --git a/platform/core/test/views/ViewProviderSpec.js b/platform/core/test/views/ViewProviderSpec.js index ddeff3e158..6d725708da 100644 --- a/platform/core/test/views/ViewProviderSpec.js +++ b/platform/core/test/views/ViewProviderSpec.js @@ -109,7 +109,7 @@ define( it("restricts typed views to matching types", function () { var testType = "testType", testView = { key: "x", type: testType }, - provider = new ViewProvider([testView], mockLog); + viewProvider = new ViewProvider([testView], mockLog); // Include a "type" capability capabilities.type = jasmine.createSpyObj( @@ -120,21 +120,21 @@ define( // Should be included when types match capabilities.type.instanceOf.andReturn(true); - expect(provider.getViews(mockDomainObject)) + expect(viewProvider.getViews(mockDomainObject)) .toEqual([testView]); expect(capabilities.type.instanceOf) .toHaveBeenCalledWith(testType); // ...but not when they don't capabilities.type.instanceOf.andReturn(false); - expect(provider.getViews(mockDomainObject)) + expect(viewProvider.getViews(mockDomainObject)) .toEqual([]); }); it("enforces view restrictions from types", function () { var testView = { key: "x" }, - provider = new ViewProvider([testView], mockLog); + viewProvider = new ViewProvider([testView], mockLog); // Include a "type" capability capabilities.type = jasmine.createSpyObj( @@ -146,13 +146,13 @@ define( // Should be included when view keys match capabilities.type.getDefinition .andReturn({ views: [testView.key]}); - expect(provider.getViews(mockDomainObject)) + expect(viewProvider.getViews(mockDomainObject)) .toEqual([testView]); // ...but not when they don't capabilities.type.getDefinition .andReturn({ views: ["somethingElse"]}); - expect(provider.getViews(mockDomainObject)) + expect(viewProvider.getViews(mockDomainObject)) .toEqual([]); }); diff --git a/platform/entanglement/src/actions/AbstractComposeAction.js b/platform/entanglement/src/actions/AbstractComposeAction.js index 25c9fbabf5..e81ee4361c 100644 --- a/platform/entanglement/src/actions/AbstractComposeAction.js +++ b/platform/entanglement/src/actions/AbstractComposeAction.js @@ -126,11 +126,11 @@ define( label = this.verb + " To"; - validateLocation = function (newParent) { + validateLocation = function (newParentObj) { var newContext = self.cloneContext(); newContext.selectedObject = object; - newContext.domainObject = newParent; - return composeService.validate(object, newParent) && + newContext.domainObject = newParentObj; + return composeService.validate(object, newParentObj) && self.policyService.allow("action", self, newContext); }; @@ -139,8 +139,8 @@ define( label, validateLocation, currentParent - ).then(function (newParent) { - return composeService.perform(object, newParent); + ).then(function (newParentObj) { + return composeService.perform(object, newParentObj); }); }; diff --git a/platform/entanglement/src/services/CopyService.js b/platform/entanglement/src/services/CopyService.js index 3bff772ef5..37745501ac 100644 --- a/platform/entanglement/src/services/CopyService.js +++ b/platform/entanglement/src/services/CopyService.js @@ -83,11 +83,11 @@ define( // Combines caller-provided filter (if any) with the // baseline behavior of respecting creation policy. - function filterWithPolicy(domainObject) { - return (!filter || filter(domainObject)) && + function filterWithPolicy(domainObj) { + return (!filter || filter(domainObj)) && policyService.allow( "creation", - domainObject.getCapability("type") + domainObj.getCapability("type") ); } diff --git a/platform/entanglement/src/services/LocationService.js b/platform/entanglement/src/services/LocationService.js index 0fa096f2af..42925b8235 100644 --- a/platform/entanglement/src/services/LocationService.js +++ b/platform/entanglement/src/services/LocationService.js @@ -77,8 +77,8 @@ define( return dialogService .getUserInput(formStructure, formState) - .then(function (formState) { - return formState.location; + .then(function (userFormState) { + return userFormState.location; }); } }; diff --git a/platform/entanglement/test/services/CopyServiceSpec.js b/platform/entanglement/test/services/CopyServiceSpec.js index a392b59b03..b52e7aab6a 100644 --- a/platform/entanglement/test/services/CopyServiceSpec.js +++ b/platform/entanglement/test/services/CopyServiceSpec.js @@ -458,17 +458,17 @@ define( }); it("throws an error", function () { - var copyService = + var service = new CopyService(mockQ, policyService); function perform() { - copyService.perform(object, newParent); + service.perform(object, newParent); } - spyOn(copyService, "validate"); - copyService.validate.andReturn(true); + spyOn(service, "validate"); + service.validate.andReturn(true); expect(perform).not.toThrow(); - copyService.validate.andReturn(false); + service.validate.andReturn(false); expect(perform).toThrow(); }); }); diff --git a/platform/features/plot/test/PlotOptionsControllerSpec.js b/platform/features/plot/test/PlotOptionsControllerSpec.js index f48aa517e1..a95aabce7c 100644 --- a/platform/features/plot/test/PlotOptionsControllerSpec.js +++ b/platform/features/plot/test/PlotOptionsControllerSpec.js @@ -120,7 +120,7 @@ define( it("on changes in form values, updates the object model", function () { var scopeConfiguration = mockScope.configuration, - model = mockDomainObject.getModel(); + objModel = mockDomainObject.getModel(); scopeConfiguration.plot.yAxis.autoScale = true; scopeConfiguration.plot.yAxis.key = 'eu'; @@ -130,10 +130,10 @@ define( mockScope.$watchCollection.calls[0].args[1](); expect(mockDomainObject.useCapability).toHaveBeenCalledWith('mutation', jasmine.any(Function)); - mockDomainObject.useCapability.mostRecentCall.args[1](model); - expect(model.configuration.plot.yAxis.autoScale).toBe(true); - expect(model.configuration.plot.yAxis.key).toBe('eu'); - expect(model.configuration.plot.xAxis.key).toBe('lst'); + mockDomainObject.useCapability.mostRecentCall.args[1](objModel); + expect(objModel.configuration.plot.yAxis.autoScale).toBe(true); + expect(objModel.configuration.plot.yAxis.key).toBe('eu'); + expect(objModel.configuration.plot.xAxis.key).toBe('lst'); }); diff --git a/platform/features/table/src/controllers/MCTTableController.js b/platform/features/table/src/controllers/MCTTableController.js index 79496a14db..e4cfa45b23 100644 --- a/platform/features/table/src/controllers/MCTTableController.js +++ b/platform/features/table/src/controllers/MCTTableController.js @@ -32,15 +32,15 @@ define( /** * Set default values for optional parameters on a given scope */ - function setDefaults($scope) { - if (typeof $scope.enableFilter === 'undefined') { - $scope.enableFilter = true; - $scope.filters = {}; + function setDefaults(scope) { + if (typeof scope.enableFilter === 'undefined') { + scope.enableFilter = true; + scope.filters = {}; } - if (typeof $scope.enableSort === 'undefined') { - $scope.enableSort = true; - $scope.sortColumn = undefined; - $scope.sortDirection = undefined; + if (typeof scope.enableSort === 'undefined') { + scope.enableSort = true; + scope.sortColumn = undefined; + scope.sortDirection = undefined; } } @@ -485,13 +485,13 @@ define( /** * Returns true if row matches all filters. */ - function matchRow(filters, row) { - return Object.keys(filters).every(function (key) { + function matchRow(filterMap, row) { + return Object.keys(filterMap).every(function (key) { if (!row[key]) { return false; } var testVal = String(row[key].text).toLowerCase(); - return testVal.indexOf(filters[key]) !== -1; + return testVal.indexOf(filterMap[key]) !== -1; }); } diff --git a/platform/features/timeline/src/capabilities/ActivityTimespan.js b/platform/features/timeline/src/capabilities/ActivityTimespan.js index 405fbec50b..61e120d688 100644 --- a/platform/features/timeline/src/capabilities/ActivityTimespan.js +++ b/platform/features/timeline/src/capabilities/ActivityTimespan.js @@ -52,25 +52,25 @@ define( // Set the start time associated with this object function setStart(value) { var end = getEnd(); - mutation.mutate(function (model) { - model.start.timestamp = Math.max(value, 0); + mutation.mutate(function (m) { + m.start.timestamp = Math.max(value, 0); // Update duration to keep end time - model.duration.timestamp = Math.max(end - value, 0); + m.duration.timestamp = Math.max(end - value, 0); }, model.modified); } // Set the duration associated with this object function setDuration(value) { - mutation.mutate(function (model) { - model.duration.timestamp = Math.max(value, 0); + mutation.mutate(function (m) { + m.duration.timestamp = Math.max(value, 0); }, model.modified); } // Set the end time associated with this object function setEnd(value) { var start = getStart(); - mutation.mutate(function (model) { - model.duration.timestamp = Math.max(value - start, 0); + mutation.mutate(function (m) { + m.duration.timestamp = Math.max(value - start, 0); }, model.modified); } diff --git a/platform/features/timeline/src/capabilities/CumulativeGraph.js b/platform/features/timeline/src/capabilities/CumulativeGraph.js index f9ffcb4b66..92d1cfa503 100644 --- a/platform/features/timeline/src/capabilities/CumulativeGraph.js +++ b/platform/features/timeline/src/capabilities/CumulativeGraph.js @@ -53,21 +53,21 @@ define( // Initialize the data values function initializeValues() { - var values = [], + var vals = [], slope = 0, i; // Add a point (or points, if needed) reaching to the provided // domain and/or range value function addPoint(domain, range) { - var previous = values[values.length - 1], + var previous = vals[vals.length - 1], delta = domain - previous.domain, // time delta change = delta * slope * rate, // change next = previous.range + change; // Crop to minimum boundary... if (next < minimum) { - values.push({ + vals.push({ domain: intercept( previous.domain, previous.range, @@ -81,7 +81,7 @@ define( // ...and maximum boundary if (next > maximum) { - values.push({ + vals.push({ domain: intercept( previous.domain, previous.range, @@ -95,19 +95,19 @@ define( // Add the new data value if (delta > 0) { - values.push({ domain: domain, range: next }); + vals.push({ domain: domain, range: next }); } slope = range; } - values.push({ domain: 0, range: initial }); + vals.push({ domain: 0, range: initial }); for (i = 0; i < graph.getPointCount(); i += 1) { addPoint(graph.getDomainValue(i), graph.getRangeValue(i)); } - return values; + return vals; } function convertToPercent(point) { diff --git a/platform/features/timeline/src/capabilities/ResourceGraph.js b/platform/features/timeline/src/capabilities/ResourceGraph.js index 2e0bec8497..93ced78f09 100644 --- a/platform/features/timeline/src/capabilities/ResourceGraph.js +++ b/platform/features/timeline/src/capabilities/ResourceGraph.js @@ -72,13 +72,13 @@ define( // If there are sequences of points with the same timestamp, // allow only the first and last. - function filterPoint(value, index, values) { + function filterPoint(value, index, vals) { // Allow the first or last point as a base case; aside from // that, allow only points that have different timestamps // from their predecessor or successor. - return (index === 0) || (index === values.length - 1) || - (value.domain !== values[index - 1].domain) || - (value.domain !== values[index + 1].domain); + return (index === 0) || (index === vals.length - 1) || + (value.domain !== vals[index - 1].domain) || + (value.domain !== vals[index + 1].domain); } // Add a step up or down (Step 3c above) diff --git a/platform/features/timeline/src/capabilities/TimelineTimespan.js b/platform/features/timeline/src/capabilities/TimelineTimespan.js index 3224d42ab5..de747764ef 100644 --- a/platform/features/timeline/src/capabilities/TimelineTimespan.js +++ b/platform/features/timeline/src/capabilities/TimelineTimespan.js @@ -57,8 +57,8 @@ define( // Set the start time associated with this object function setStart(value) { - mutation.mutate(function (model) { - model.start.timestamp = Math.max(value, 0); + mutation.mutate(function (m) { + m.start.timestamp = Math.max(value, 0); }, model.modified); } diff --git a/platform/features/timeline/src/capabilities/UtilizationCapability.js b/platform/features/timeline/src/capabilities/UtilizationCapability.js index 79a803a3ae..2744976615 100644 --- a/platform/features/timeline/src/capabilities/UtilizationCapability.js +++ b/platform/features/timeline/src/capabilities/UtilizationCapability.js @@ -120,13 +120,13 @@ define( } // Look up a specific object's resource utilization - function lookupUtilization(domainObject) { - return domainObject.useCapability('utilization'); + function lookupUtilization(object) { + return object.useCapability('utilization'); } // Look up a specific object's resource utilization keys - function lookupUtilizationResources(domainObject) { - var utilization = domainObject.getCapability('utilization'); + function lookupUtilizationResources(object) { + var utilization = object.getCapability('utilization'); return utilization && utilization.resources(); } diff --git a/platform/features/timeline/src/controllers/drag/TimelineDragHandler.js b/platform/features/timeline/src/controllers/drag/TimelineDragHandler.js index cd699dc647..c1605a21e9 100644 --- a/platform/features/timeline/src/controllers/drag/TimelineDragHandler.js +++ b/platform/features/timeline/src/controllers/drag/TimelineDragHandler.js @@ -47,19 +47,19 @@ define( } // Get the timespan associated with this domain object - function populateCapabilityMaps(domainObject) { - var id = domainObject.getId(), - timespanPromise = domainObject.useCapability('timespan'); + function populateCapabilityMaps(object) { + var id = object.getId(), + timespanPromise = object.useCapability('timespan'); if (timespanPromise) { timespanPromise.then(function (timespan) { // Cache that timespan timespans[id] = timespan; // And its mutation capability - mutations[id] = domainObject.getCapability('mutation'); + mutations[id] = object.getCapability('mutation'); // Also cache the persistence capability for later - persists[id] = domainObject.getCapability('persistence'); + persists[id] = object.getCapability('persistence'); // And the composition, for bulk moves - compositions[id] = domainObject.getModel().composition || []; + compositions[id] = object.getModel().composition || []; }); } } @@ -199,8 +199,8 @@ define( minStart; // Update start & end, in that order - function updateStartEnd(id) { - var timespan = timespans[id], start, end; + function updateStartEnd(spanId) { + var timespan = timespans[spanId], start, end; if (timespan) { // Get start/end so we don't get fooled by our // own adjustments @@ -210,7 +210,7 @@ define( timespan.setStart(start + delta); timespan.setEnd(end + delta); // Mark as dirty for subsequent persistence - dirty[toId(id)] = true; + dirty[toId(spanId)] = true; } } @@ -228,12 +228,12 @@ define( } // Find the minimum start time - minStart = Object.keys(ids).map(function (id) { + minStart = Object.keys(ids).map(function (spanId) { // Get the start time; default to +Inf if not // found, since this will not survive a min // test if any real timespans are present - return timespans[id] ? - timespans[id].getStart() : + return timespans[spanId] ? + timespans[spanId].getStart() : Number.POSITIVE_INFINITY; }).reduce(function (a, b) { // Reduce with a minimum test diff --git a/platform/features/timeline/src/controllers/graph/TimelineGraphPopulator.js b/platform/features/timeline/src/controllers/graph/TimelineGraphPopulator.js index 0032b8cbe8..2488d57030 100644 --- a/platform/features/timeline/src/controllers/graph/TimelineGraphPopulator.js +++ b/platform/features/timeline/src/controllers/graph/TimelineGraphPopulator.js @@ -75,11 +75,14 @@ define( // Look up resources for a domain object function lookupResources(swimlane) { - var graphs = swimlane.domainObject.useCapability('graph'); + var graphPromise = + swimlane.domainObject.useCapability('graph'); function getKeys(obj) { return Object.keys(obj); } - return $q.when(graphs ? (graphs.then(getKeys)) : []); + return $q.when( + graphPromise ? (graphPromise.then(getKeys)) : [] + ); } // Add all graph assignments appropriate for this swimlane diff --git a/platform/features/timeline/src/controllers/swimlane/TimelineProxy.js b/platform/features/timeline/src/controllers/swimlane/TimelineProxy.js index ee470edc77..7fa4dc2e9b 100644 --- a/platform/features/timeline/src/controllers/swimlane/TimelineProxy.js +++ b/platform/features/timeline/src/controllers/swimlane/TimelineProxy.js @@ -34,8 +34,8 @@ define( var actionMap = {}; // Populate available Create actions for this domain object - function populateActionMap(domainObject) { - var actionCapability = domainObject.getCapability('action'), + function populateActionMap(object) { + var actionCapability = object.getCapability('action'), actions = actionCapability ? actionCapability.getActions('add') : []; actions.forEach(function (action) { diff --git a/platform/features/timeline/src/controllers/swimlane/TimelineSwimlaneDecorator.js b/platform/features/timeline/src/controllers/swimlane/TimelineSwimlaneDecorator.js index dd655bcb5e..898ca119ee 100644 --- a/platform/features/timeline/src/controllers/swimlane/TimelineSwimlaneDecorator.js +++ b/platform/features/timeline/src/controllers/swimlane/TimelineSwimlaneDecorator.js @@ -45,9 +45,9 @@ define( if (arguments.length > 0 && Array.isArray(value)) { if ((model.relationships || {})[ACTIVITY_RELATIONSHIP] !== value) { // Update the relationships - mutator.mutate(function (model) { - model.relationships = model.relationships || {}; - model.relationships[ACTIVITY_RELATIONSHIP] = value; + mutator.mutate(function (m) { + m.relationships = m.relationships || {}; + m.relationships[ACTIVITY_RELATIONSHIP] = value; }).then(persister.persist); } } @@ -61,8 +61,8 @@ define( if (arguments.length > 0 && (typeof value === 'string') && value !== model.link) { // Update the link - mutator.mutate(function (model) { - model.link = value; + mutator.mutate(function (m) { + m.link = value; }).then(persister.persist); } return model.link; diff --git a/platform/features/timeline/src/controllers/swimlane/TimelineSwimlaneDropHandler.js b/platform/features/timeline/src/controllers/swimlane/TimelineSwimlaneDropHandler.js index e655741342..71648995f0 100644 --- a/platform/features/timeline/src/controllers/swimlane/TimelineSwimlaneDropHandler.js +++ b/platform/features/timeline/src/controllers/swimlane/TimelineSwimlaneDropHandler.js @@ -51,7 +51,7 @@ define( } // Check if pathA entirely contains pathB - function pathContains(swimlane, id) { + function pathContains(swimlaneToCheck, id) { // Check if id at a specific index matches (for map below) function matches(pathId) { return pathId === id; @@ -59,18 +59,18 @@ define( // Path A contains Path B if it is longer, and all of // B's ids match the ids in A. - return swimlane.idPath.map(matches).reduce(or, false); + return swimlaneToCheck.idPath.map(matches).reduce(or, false); } // Check if a swimlane contains a child with the specified id - function contains(swimlane, id) { + function contains(swimlaneToCheck, id) { // Check if a child swimlane has a matching domain object id function matches(child) { return child.domainObject.getId() === id; } // Find any one child id that matches this id - return swimlane.children.map(matches).reduce(or, false); + return swimlaneToCheck.children.map(matches).reduce(or, false); } // Initiate mutation of a domain object diff --git a/platform/features/timeline/src/controllers/swimlane/TimelineSwimlanePopulator.js b/platform/features/timeline/src/controllers/swimlane/TimelineSwimlanePopulator.js index f7a77fe2df..ccc6148997 100644 --- a/platform/features/timeline/src/controllers/swimlane/TimelineSwimlanePopulator.js +++ b/platform/features/timeline/src/controllers/swimlane/TimelineSwimlanePopulator.js @@ -61,8 +61,8 @@ define( swimlane; // For the recursive step - function populate(childSubgraph, index) { - populateSwimlanes(childSubgraph, swimlane, index); + function populate(childSubgraph, nextIndex) { + populateSwimlanes(childSubgraph, swimlane, nextIndex); } // Make sure we have a valid object instance... diff --git a/platform/features/timeline/src/services/ObjectLoader.js b/platform/features/timeline/src/services/ObjectLoader.js index 377709592f..ec4d7b15c8 100644 --- a/platform/features/timeline/src/services/ObjectLoader.js +++ b/platform/features/timeline/src/services/ObjectLoader.js @@ -41,13 +41,13 @@ define( filter; // Check object existence (for criterion-less filtering) - function exists(domainObject) { - return !!domainObject; + function exists(object) { + return !!object; } // Check for capability matching criterion - function hasCapability(domainObject) { - return domainObject && domainObject.hasCapability(criterion); + function hasCapability(object) { + return object && object.hasCapability(criterion); } // For the recursive step... @@ -61,8 +61,8 @@ define( } // Avoid infinite recursion - function notVisiting(domainObject) { - return !visiting[domainObject.getId()]; + function notVisiting(object) { + return !visiting[object.getId()]; } // Put the composition of this domain object into the result diff --git a/platform/features/timeline/test/actions/TimelineTraverserSpec.js b/platform/features/timeline/test/actions/TimelineTraverserSpec.js index 48fb584162..e6000c6c62 100644 --- a/platform/features/timeline/test/actions/TimelineTraverserSpec.js +++ b/platform/features/timeline/test/actions/TimelineTraverserSpec.js @@ -55,8 +55,8 @@ define([ if (!!model.composition) { mockDomainObject.useCapability.andCallFake(function (c) { return c === 'composition' && - Promise.resolve(model.composition.map(function (id) { - return mockDomainObjects[id]; + Promise.resolve(model.composition.map(function (cid) { + return mockDomainObjects[cid]; })); }); } @@ -68,8 +68,8 @@ define([ ); mockRelationships.getRelatedObjects.andCallFake(function (k) { var ids = model.relationships[k] || []; - return Promise.resolve(ids.map(function (id) { - return mockDomainObjects[id]; + return Promise.resolve(ids.map(function (objId) { + return mockDomainObjects[objId]; })); }); mockDomainObject.getCapability.andCallFake(function (c) { diff --git a/platform/features/timeline/test/capabilities/UtilizationCapabilitySpec.js b/platform/features/timeline/test/capabilities/UtilizationCapabilitySpec.js index 3899ce8120..0c37f3edae 100644 --- a/platform/features/timeline/test/capabilities/UtilizationCapabilitySpec.js +++ b/platform/features/timeline/test/capabilities/UtilizationCapabilitySpec.js @@ -69,8 +69,8 @@ define( resources: function () { return Object.keys(costs).sort(); }, - cost: function (c) { - return costs[c]; + cost: function (k) { + return costs[k]; } }); }, diff --git a/platform/features/timeline/test/controllers/drag/TimelineDragHandlerSpec.js b/platform/features/timeline/test/controllers/drag/TimelineDragHandlerSpec.js index 502d2e7642..1e62983437 100644 --- a/platform/features/timeline/test/controllers/drag/TimelineDragHandlerSpec.js +++ b/platform/features/timeline/test/controllers/drag/TimelineDragHandlerSpec.js @@ -56,22 +56,22 @@ define( } function makeMockDomainObject(id, composition) { - var mockDomainObject = jasmine.createSpyObj( + var mockDomainObj = jasmine.createSpyObj( 'domainObject-' + id, ['getId', 'getModel', 'getCapability', 'useCapability'] ); - mockDomainObject.getId.andReturn(id); - mockDomainObject.getModel.andReturn({ composition: composition }); - mockDomainObject.useCapability.andReturn(asPromise(mockTimespans[id])); - mockDomainObject.getCapability.andCallFake(function (c) { + mockDomainObj.getId.andReturn(id); + mockDomainObj.getModel.andReturn({ composition: composition }); + mockDomainObj.useCapability.andReturn(asPromise(mockTimespans[id])); + mockDomainObj.getCapability.andCallFake(function (c) { return { persistence: mockPersists[id], mutation: mockMutations[id] }[c]; }); - return mockDomainObject; + return mockDomainObj; } beforeEach(function () { diff --git a/platform/features/timeline/test/controllers/swimlane/TimelineSwimlanePopulatorSpec.js b/platform/features/timeline/test/controllers/swimlane/TimelineSwimlanePopulatorSpec.js index 4fd374a412..f9358a514e 100644 --- a/platform/features/timeline/test/controllers/swimlane/TimelineSwimlanePopulatorSpec.js +++ b/platform/features/timeline/test/controllers/swimlane/TimelineSwimlanePopulatorSpec.js @@ -42,16 +42,16 @@ define( } function makeMockDomainObject(id, composition) { - var mockDomainObject = jasmine.createSpyObj( + var mockDomainObj = jasmine.createSpyObj( 'domainObject-' + id, ['getId', 'getModel', 'getCapability', 'useCapability'] ); - mockDomainObject.getId.andReturn(id); - mockDomainObject.getModel.andReturn({ composition: composition }); - mockDomainObject.useCapability.andReturn(asPromise(false)); + mockDomainObj.getId.andReturn(id); + mockDomainObj.getModel.andReturn({ composition: composition }); + mockDomainObj.useCapability.andReturn(asPromise(false)); - return mockDomainObject; + return mockDomainObj; } function subgraph(domainObject, objects) { diff --git a/platform/framework/src/register/ExtensionRegistrar.js b/platform/framework/src/register/ExtensionRegistrar.js index 0dcd86ea4c..7b5ef7e096 100644 --- a/platform/framework/src/register/ExtensionRegistrar.js +++ b/platform/framework/src/register/ExtensionRegistrar.js @@ -164,15 +164,15 @@ define( // Examine a group of resolved dependencies to determine // which extension categories still need to be satisfied. - function findEmptyExtensionDependencies(extensionGroup) { + function findEmptyExtensionDependencies(extGroup) { var needed = {}, - categories = Object.keys(extensionGroup), + categories = Object.keys(extGroup), allExtensions = []; // Build up an array of all extensions categories.forEach(function (category) { allExtensions = - allExtensions.concat(extensionGroup[category]); + allExtensions.concat(extGroup[category]); }); // Track all extension dependencies exposed therefrom @@ -197,10 +197,9 @@ define( // Register any extension categories that are depended-upon but // have not been declared anywhere; such dependencies are then // satisfied by an empty array, instead of not at all. - function registerEmptyDependencies(extensionGroup) { - findEmptyExtensionDependencies( - extensionGroup - ).forEach(function (name) { + function registerEmptyDependencies(extGroup) { + findEmptyExtensionDependencies(extGroup) + .forEach(function (name) { $log.info("Registering empty extension category " + name); app.factory(name, [staticFunction([])]); }); diff --git a/platform/framework/src/resolve/ExtensionResolver.js b/platform/framework/src/resolve/ExtensionResolver.js index bac334a4a0..1abcd91a91 100644 --- a/platform/framework/src/resolve/ExtensionResolver.js +++ b/platform/framework/src/resolve/ExtensionResolver.js @@ -58,11 +58,11 @@ define( var loader = this.loader, $log = this.$log; - function loadImplementation(extension) { - var implPromise = extension.hasImplementationValue() ? - Promise.resolve(extension.getImplementationValue()) : - loader.load(extension.getImplementationPath()), - definition = extension.getDefinition(); + function loadImplementation(ext) { + var implPromise = ext.hasImplementationValue() ? + Promise.resolve(ext.getImplementationValue()) : + loader.load(ext.getImplementationPath()), + definition = ext.getDefinition(); // Wrap a constructor function (to avoid modifying the original) function constructorFor(impl) { @@ -94,7 +94,7 @@ define( result.definition = definition; // Log that this load was successful - $log.info("Resolved " + extension.getLogName()); + $log.info("Resolved " + ext.getLogName()); return result; } @@ -105,7 +105,7 @@ define( // Build up a log message from parts var message = [ "Could not load implementation for extension ", - extension.getLogName(), + ext.getLogName(), " due to ", err.message ].join(""); @@ -113,16 +113,16 @@ define( // Log that the extension was not loaded $log.warn(message); - return extension.getDefinition(); + return ext.getDefinition(); } - if (!extension.hasImplementationValue()) { + if (!ext.hasImplementationValue()) { // Log that loading has begun $log.info([ "Loading implementation ", - extension.getImplementationPath(), + ext.getImplementationPath(), " for extension ", - extension.getLogName() + ext.getLogName() ].join("")); } diff --git a/platform/persistence/elastic/src/ElasticPersistenceProvider.js b/platform/persistence/elastic/src/ElasticPersistenceProvider.js index 1b421b527f..2fe826bb49 100644 --- a/platform/persistence/elastic/src/ElasticPersistenceProvider.js +++ b/platform/persistence/elastic/src/ElasticPersistenceProvider.js @@ -92,8 +92,8 @@ define( if ((response || {}).status === CONFLICT) { error.key = "revision"; // Load the updated model, then reject the promise - return this.get(key).then(function (response) { - error.model = response[SRC]; + return this.get(key).then(function (res) { + error.model = res[SRC]; return $q.reject(error); }); } diff --git a/platform/persistence/queue/src/PersistenceFailureHandler.js b/platform/persistence/queue/src/PersistenceFailureHandler.js index c449ed5f7b..447519633c 100644 --- a/platform/persistence/queue/src/PersistenceFailureHandler.js +++ b/platform/persistence/queue/src/PersistenceFailureHandler.js @@ -68,7 +68,7 @@ define( } // Retry persistence (overwrite) for this set of failed attempts - function retry(failures) { + function retry(failuresToRetry) { var models = {}; // Cache a copy of the model @@ -92,17 +92,17 @@ define( } // Cache the object models we might want to save - failures.forEach(cacheModel); + failuresToRetry.forEach(cacheModel); // Strategy here: // * Cache all of the models we might want to save (above) // * Refresh all domain objects (so they are latest versions) // * Re-insert the cached domain object models // * Invoke persistence again - return $q.all(failures.map(refresh)).then(function () { - return $q.all(failures.map(remutate)); + return $q.all(failuresToRetry.map(refresh)).then(function () { + return $q.all(failuresToRetry.map(remutate)); }).then(function () { - return $q.all(failures.map(persist)); + return $q.all(failuresToRetry.map(persist)); }); } @@ -114,8 +114,8 @@ define( } // Discard changes associated with a failed save - function discardAll(failures) { - return $q.all(failures.map(discard)); + function discardAll(failuresToDiscard) { + return $q.all(failuresToDiscard.map(discard)); } // Handle user input (did they choose to overwrite?) diff --git a/platform/persistence/queue/src/PersistenceQueueHandler.js b/platform/persistence/queue/src/PersistenceQueueHandler.js index 3a394a1e54..511685b350 100644 --- a/platform/persistence/queue/src/PersistenceQueueHandler.js +++ b/platform/persistence/queue/src/PersistenceQueueHandler.js @@ -57,20 +57,20 @@ define( failureHandler = this.failureHandler; // Handle a group of persistence invocations - function persistGroup(ids, persistences, domainObjects, queue) { + function persistGroup(groupIds, persistenceCaps, domainObjs, pQueue) { var failures = []; // Try to persist a specific domain object function tryPersist(id) { // Look up its persistence capability from the provided // id->persistence object. - var persistence = persistences[id], - domainObject = domainObjects[id]; + var persistence = persistenceCaps[id], + domainObject = domainObjs[id]; // Put a domain object back in the queue // (e.g. after Overwrite) function requeue() { - return queue.put(domainObject, persistence); + return pQueue.put(domainObject, persistence); } // Handle success @@ -103,7 +103,7 @@ define( } // Try to persist everything, then handle any failures - return $q.all(ids.map(tryPersist)).then(handleFailure); + return $q.all(groupIds.map(tryPersist)).then(handleFailure); } return persistGroup(ids, persistences, domainObjects, queue); diff --git a/platform/representation/src/TemplateLinker.js b/platform/representation/src/TemplateLinker.js index 8637819d63..e248ebd1de 100644 --- a/platform/representation/src/TemplateLinker.js +++ b/platform/representation/src/TemplateLinker.js @@ -154,12 +154,12 @@ define( activeTemplateUrl = templateUrl; } - function changeTemplate(ext) { - ext = ext || {}; - if (ext.templateUrl) { - changeTemplateUrl(self.getPath(ext)); - } else if (ext.template) { - showTemplate(ext.template); + function changeTemplate(templateExt) { + templateExt = templateExt || {}; + if (templateExt.templateUrl) { + changeTemplateUrl(self.getPath(templateExt)); + } else if (templateExt.template) { + showTemplate(templateExt.template); } else { removeElement(); } diff --git a/platform/search/src/services/GenericSearchProvider.js b/platform/search/src/services/GenericSearchProvider.js index 101c718669..b610bb022d 100644 --- a/platform/search/src/services/GenericSearchProvider.js +++ b/platform/search/src/services/GenericSearchProvider.js @@ -178,8 +178,8 @@ define([ }); if (Array.isArray(model.composition)) { - model.composition.forEach(function (id) { - provider.scheduleForIndexing(id); + model.composition.forEach(function (idToIndex) { + provider.scheduleForIndexing(idToIndex); }); } }; diff --git a/platform/telemetry/src/TelemetryQueue.js b/platform/telemetry/src/TelemetryQueue.js index 3017906802..dadb34d3df 100644 --- a/platform/telemetry/src/TelemetryQueue.js +++ b/platform/telemetry/src/TelemetryQueue.js @@ -93,11 +93,11 @@ define( // Look up an object in the queue that does not have a value // assigned to this key (or, add a new one) - function getFreeObject(key) { - var index = counts[key] || 0, object; + function getFreeObject(k) { + var index = counts[k] || 0, object; // Track the largest free position for this key - counts[key] = index + 1; + counts[k] = index + 1; // If it's before the end of the queue, add it there if (index < queue.length) { diff --git a/platform/telemetry/src/TelemetrySubscription.js b/platform/telemetry/src/TelemetrySubscription.js index 0334c29455..7cf524b184 100644 --- a/platform/telemetry/src/TelemetrySubscription.js +++ b/platform/telemetry/src/TelemetrySubscription.js @@ -84,8 +84,8 @@ define( // Look up domain objects which have telemetry capabilities. // This will either be the object in view, or object that // this object delegates its telemetry capability to. - function promiseRelevantObjects(domainObject) { - return delegator.promiseTelemetryObjects(domainObject); + function promiseRelevantObjects(domainObj) { + return delegator.promiseTelemetryObjects(domainObj); } function updateValuesFromPool() { @@ -114,16 +114,16 @@ define( // Look up metadata associated with an object's telemetry - function lookupMetadata(domainObject) { + function lookupMetadata(domainObj) { var telemetryCapability = - domainObject.getCapability("telemetry"); + domainObj.getCapability("telemetry"); return telemetryCapability && telemetryCapability.getMetadata(); } // Update the latest telemetry data for a specific // domain object. This will notify listeners. - function update(domainObject, series) { + function update(domainObj, series) { var count = series && series.getPointCount(); // Only schedule notification if there isn't already @@ -136,21 +136,21 @@ define( // Update the latest-value table if (count > 0) { - pool.put(domainObject.getId(), { + pool.put(domainObj.getId(), { domain: series.getDomainValue(count - 1), range: series.getRangeValue(count - 1), - datum: self.makeDatum(domainObject, series, count - 1) + datum: self.makeDatum(domainObj, series, count - 1) }); } } // Prepare a subscription to a specific telemetry-providing // domain object. - function subscribe(domainObject) { + function subscribe(domainObj) { var telemetryCapability = - domainObject.getCapability("telemetry"); + domainObj.getCapability("telemetry"); return telemetryCapability.subscribe(function (telemetry) { - update(domainObject, telemetry); + update(domainObj, telemetry); }); } diff --git a/platform/telemetry/test/TelemetryAggregatorSpec.js b/platform/telemetry/test/TelemetryAggregatorSpec.js index b99901a307..39ac5a9c9a 100644 --- a/platform/telemetry/test/TelemetryAggregatorSpec.js +++ b/platform/telemetry/test/TelemetryAggregatorSpec.js @@ -38,7 +38,7 @@ define( }; } - function mockProvider(key, index) { + function makeMockProvider(key, index) { var provider = jasmine.createSpyObj( "provider" + index, ["requestTelemetry", "subscribe"] @@ -57,7 +57,7 @@ define( mockQ.all.andReturn(mockPromise([])); mockUnsubscribes = []; - mockProviders = ["a", "b", "c"].map(mockProvider); + mockProviders = ["a", "b", "c"].map(makeMockProvider); aggregator = new TelemetryAggregator(mockQ, mockProviders); }); From 9861e6358983d4cc27bd4db8f30f3557eb527bf9 Mon Sep 17 00:00:00 2001 From: Victor Woeltjen Date: Fri, 20 May 2016 13:09:16 -0700 Subject: [PATCH 129/132] [Code Style] Run fixstyle on merged changes --- .../edit/test/actions/EditAndComposeActionSpec.js | 10 +++++----- .../commonUI/regions/test/InspectorControllerSpec.js | 6 +++--- platform/representation/src/MCTRepresentation.js | 2 +- 3 files changed, 9 insertions(+), 9 deletions(-) diff --git a/platform/commonUI/edit/test/actions/EditAndComposeActionSpec.js b/platform/commonUI/edit/test/actions/EditAndComposeActionSpec.js index 50934530b4..fa1d21b1e8 100644 --- a/platform/commonUI/edit/test/actions/EditAndComposeActionSpec.js +++ b/platform/commonUI/edit/test/actions/EditAndComposeActionSpec.js @@ -66,11 +66,11 @@ define( return capabilities[k].invoke(v); } }; - mockContext = jasmine.createSpyObj("context", [ "getParent" ]); - mockComposition = jasmine.createSpyObj("composition", [ "invoke", "add" ]); - mockPersistence = jasmine.createSpyObj("persistence", [ "persist" ]); - mockType = jasmine.createSpyObj("type", [ "hasFeature", "getKey" ]); - mockActionCapability = jasmine.createSpyObj("actionCapability", [ "getActions"]); + mockContext = jasmine.createSpyObj("context", ["getParent"]); + mockComposition = jasmine.createSpyObj("composition", ["invoke", "add"]); + mockPersistence = jasmine.createSpyObj("persistence", ["persist"]); + mockType = jasmine.createSpyObj("type", ["hasFeature", "getKey"]); + mockActionCapability = jasmine.createSpyObj("actionCapability", ["getActions"]); mockEditAction = jasmine.createSpyObj("editAction", ["perform"]); mockDomainObject.getId.andReturn("test"); diff --git a/platform/commonUI/regions/test/InspectorControllerSpec.js b/platform/commonUI/regions/test/InspectorControllerSpec.js index 9c5197b72f..8acd00267c 100644 --- a/platform/commonUI/regions/test/InspectorControllerSpec.js +++ b/platform/commonUI/regions/test/InspectorControllerSpec.js @@ -60,7 +60,7 @@ define( 'getCapability' ]); mockDomainObject.getCapability.andCallFake(function (name) { - return capabilities[name]; + return capabilities[name]; }); mockPolicyService = jasmine.createSpyObj('policyService', [ @@ -86,7 +86,7 @@ define( expect(mockScope.regions.length).toBe(2); }); - it("Responds to status changes", function() { + it("Responds to status changes", function () { mockPolicyService.allow.andReturn(true); controller = new InspectorController(mockScope, mockPolicyService); expect(mockScope.regions.length).toBe(2); @@ -96,7 +96,7 @@ define( expect(mockScope.regions.length).toBe(0); }); - it("Unregisters status listener", function() { + it("Unregisters status listener", function () { var mockListener = jasmine.createSpy('listener'); mockStatusCapability.listen.andReturn(mockListener); controller = new InspectorController(mockScope, mockPolicyService); diff --git a/platform/representation/src/MCTRepresentation.js b/platform/representation/src/MCTRepresentation.js index f25fb7b14e..331139b793 100644 --- a/platform/representation/src/MCTRepresentation.js +++ b/platform/representation/src/MCTRepresentation.js @@ -235,7 +235,7 @@ define( // Also update when the represented domain object changes // (to a different object) $scope.$watch("domainObject", refresh); - + // Finally, also update when there is a new version of that // same domain object; these changes should be tracked in the // model's "modified" field, by the mutation capability. From b6502e9ea17d8ebc7827ef1c7578022056d54b05 Mon Sep 17 00:00:00 2001 From: Henry Date: Thu, 12 May 2016 19:12:00 -0700 Subject: [PATCH 130/132] [New Edit Mode] #633 Removed Editing workflow concerns from FixedController, LayoutController --- .../commonUI/edit/src/representers/EditRepresenter.js | 6 ------ platform/features/layout/bundle.js | 3 --- platform/features/layout/src/FixedController.js | 6 ++---- platform/features/layout/src/LayoutController.js | 8 ++------ 4 files changed, 4 insertions(+), 19 deletions(-) diff --git a/platform/commonUI/edit/src/representers/EditRepresenter.js b/platform/commonUI/edit/src/representers/EditRepresenter.js index a5d4af9b14..ffe7f24d11 100644 --- a/platform/commonUI/edit/src/representers/EditRepresenter.js +++ b/platform/commonUI/edit/src/representers/EditRepresenter.js @@ -91,14 +91,8 @@ define( } } - function setEditable(editableDomainObject) { - self.domainObject = editableDomainObject; - scope.model = editableDomainObject.getModel(); - } - // Place the "commit" method in the scope scope.commit = commit; - scope.setEditable = setEditable; // Clean up when the scope is destroyed scope.$on("$destroy", function () { diff --git a/platform/features/layout/bundle.js b/platform/features/layout/bundle.js index fa98fb94b2..21a0f8f263 100644 --- a/platform/features/layout/bundle.js +++ b/platform/features/layout/bundle.js @@ -71,9 +71,6 @@ define([ "uses": [ "composition" ], - "gestures": [ - "drop" - ], "toolbar": { "sections": [ { diff --git a/platform/features/layout/src/FixedController.js b/platform/features/layout/src/FixedController.js index b154f5f161..c8b5aebb2e 100644 --- a/platform/features/layout/src/FixedController.js +++ b/platform/features/layout/src/FixedController.js @@ -271,15 +271,13 @@ define( } // Position a panel after a drop event - function handleDrop(e, id, position, editableDomainObject) { + function handleDrop(e, id, position) { // Don't handle this event if it has already been handled // color is set to "" to let the CSS theme determine the default color if (e.defaultPrevented) { return; } - if (editableDomainObject) { - $scope.setEditable(editableDomainObject); - } + e.preventDefault(); // Store the position of this element. addElement({ diff --git a/platform/features/layout/src/LayoutController.js b/platform/features/layout/src/LayoutController.js index 496ee9d1a6..6d60738fc3 100644 --- a/platform/features/layout/src/LayoutController.js +++ b/platform/features/layout/src/LayoutController.js @@ -60,15 +60,11 @@ define( } // Position a panel after a drop event - //An editableDomainObject is provided, as the drop may have - // triggered a transition to edit mode. - function handleDrop(e, id, position, editableDomainObject) { + function handleDrop(e, id, position) { if (e.defaultPrevented) { return; } - if (editableDomainObject) { - $scope.setEditable(editableDomainObject); - } + // Ensure that configuration field is populated $scope.configuration = $scope.configuration || {}; // Make sure there is a "panels" field in the From fd9d766913f06cda4c9d5b0508f3c958d8a3edbf Mon Sep 17 00:00:00 2001 From: Henry Date: Fri, 20 May 2016 15:15:18 -0700 Subject: [PATCH 131/132] Defer resolution of scope in DropGesture --- platform/representation/src/gestures/DropGesture.js | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/platform/representation/src/gestures/DropGesture.js b/platform/representation/src/gestures/DropGesture.js index 4c9d872f55..7f94dad223 100644 --- a/platform/representation/src/gestures/DropGesture.js +++ b/platform/representation/src/gestures/DropGesture.js @@ -40,12 +40,13 @@ define( */ function DropGesture(dndService, $q, element, domainObject) { var actionCapability = domainObject.getCapability('action'), - scope = element.scope && element.scope(), action; // Action for the drop, when it occurs function broadcastDrop(id, event) { // Find the relevant scope... - var rect; + var rect, + scope = element.scope && element.scope(); + if (scope && scope.$broadcast) { // Get the representation's bounds, to convert // drop position From 6c1412784b99e21a35d412c28e1914496648cbf1 Mon Sep 17 00:00:00 2001 From: Henry Date: Fri, 20 May 2016 17:08:23 -0700 Subject: [PATCH 132/132] [Example] REMS heirarchy appear as links --- example/msl/src/RemsTelemetryModelProvider.js | 20 +++++++++++++------ 1 file changed, 14 insertions(+), 6 deletions(-) diff --git a/example/msl/src/RemsTelemetryModelProvider.js b/example/msl/src/RemsTelemetryModelProvider.js index cf45b22d4e..c3f6f45374 100644 --- a/example/msl/src/RemsTelemetryModelProvider.js +++ b/example/msl/src/RemsTelemetryModelProvider.js @@ -45,11 +45,12 @@ define( function buildTaxonomy(dictionary){ var models = {}; - function addMeasurement(measurement){ + function addMeasurement(measurement, parent){ var format = FORMAT_MAPPINGS[measurement.type]; models[makeId(measurement)] = { type: "msl.measurement", name: measurement.name, + location: parent, telemetry: { key: measurement.identifier, ranges: [{ @@ -62,17 +63,24 @@ define( }; } - function addInstrument(subsystem) { - var measurements = (subsystem.measurements || []); - models[makeId(subsystem)] = { + function addInstrument(subsystem, spacecraftId) { + var measurements = (subsystem.measurements || []), + instrumentId = makeId(subsystem); + + models[instrumentId] = { type: "msl.instrument", name: subsystem.name, + location: spacecraftId, composition: measurements.map(makeId) }; - measurements.forEach(addMeasurement); + measurements.forEach(function(measurement) { + addMeasurement(measurement, instrumentId); + }); } - (dictionary.instruments || []).forEach(addInstrument); + (dictionary.instruments || []).forEach(function(instrument) { + addInstrument(instrument, "msl:curiosity"); + }); return models; }