diff --git a/platform/commonUI/browse/src/BrowseController.js b/platform/commonUI/browse/src/BrowseController.js index 9f1834f80d..f65333870d 100644 --- a/platform/commonUI/browse/src/BrowseController.js +++ b/platform/commonUI/browse/src/BrowseController.js @@ -27,10 +27,9 @@ */ define( [ - '../../../representation/src/gestures/GestureConstants', - '../../edit/src/objects/EditableDomainObject' + '../../../representation/src/gestures/GestureConstants' ], - function (GestureConstants, EditableDomainObject) { + 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 b0a93a991a..daf157e2c3 100644 --- a/platform/commonUI/browse/src/BrowseObjectController.js +++ b/platform/commonUI/browse/src/BrowseObjectController.js @@ -22,11 +22,8 @@ /*global define,Promise*/ define( - [ - '../../../representation/src/gestures/GestureConstants', - '../../edit/src/objects/EditableDomainObject' - ], - function (GestureConstants, EditableDomainObject) { + [], + function () { "use strict"; /** @@ -57,10 +54,9 @@ define( function updateQueryParam(viewKey) { var unlisten, - priorRoute = $route.current, - isEditMode = $scope.domainObject && $scope.domainObject.hasCapability('editor'); + priorRoute = $route.current; - if (viewKey && !isEditMode) { + if (viewKey) { $location.search('view', viewKey); unlisten = $scope.$on('$locationChangeSuccess', function () { // Checks path to make sure /browse/ is at front @@ -76,10 +72,6 @@ define( $scope.$watch('domainObject', setViewForDomainObject); $scope.$watch('representation.selected.key', updateQueryParam); - $scope.cancelEditing = function() { - navigationService.setNavigation($scope.domainObject.getDomainObject()); - }; - $scope.doAction = function (action){ return $scope[action] && $scope[action](); }; diff --git a/platform/commonUI/browse/src/navigation/NavigationService.js b/platform/commonUI/browse/src/navigation/NavigationService.js index e2b7168b3c..1d43971166 100644 --- a/platform/commonUI/browse/src/navigation/NavigationService.js +++ b/platform/commonUI/browse/src/navigation/NavigationService.js @@ -50,6 +50,8 @@ define( /** * Set the current navigation state. This will invoke listeners. + * Changing the navigation state will be blocked if any of the + * 'before' navigation state change listeners return 'false'. * @param {DomainObject} domainObject the domain object to navigate to */ NavigationService.prototype.setNavigation = function (value) { @@ -57,7 +59,11 @@ define( if (this.navigated !== value) { canNavigate = (this.callbacks['before'] || []) .reduce(function (previous, callback) { - return callback(value) && previous; + //Check whether the callback returned a value of + // 'false' indicating that navigation should not + // continue. All other return values will allow + // navigation to continue + return (callback(value)!==false) && previous; }, true); if (canNavigate) { this.navigated = value; @@ -72,7 +78,11 @@ define( /** * Listen for changes in navigation. The passed callback will * be invoked with the new domain object of navigation when - * this changes. + * this changes. Callbacks can be registered to listen to pre or + * post-navigation events. The event to listen to is specified using + * the event parameter. In the case of pre-navigation events + * returning a false value will prevent the navigation event from + * going ahead. * @param {function} callback the callback to invoke when * navigation state changes * @param {string} [event=after] the navigation event to listen to. @@ -89,7 +99,7 @@ define( * @param {function} callback the callback which should * no longer be invoked when navigation state * changes - * @param {string} [event=after] the navigation event to the + * @param {string} [event=after] the navigation event that the * callback is registered to. One of 'before' or 'after'. */ NavigationService.prototype.removeListener = function (callback, event) { diff --git a/platform/commonUI/edit/bundle.js b/platform/commonUI/edit/bundle.js index 9fc0c98939..e4b0953267 100644 --- a/platform/commonUI/edit/bundle.js +++ b/platform/commonUI/edit/bundle.js @@ -22,7 +22,6 @@ /*global define*/ define([ - "./src/controllers/EditController", "./src/controllers/EditActionController", "./src/controllers/EditPanesController", "./src/controllers/ElementsController", @@ -37,7 +36,6 @@ define([ "./src/policies/EditActionPolicy", "./src/representers/EditRepresenter", "./src/representers/EditToolbarRepresenter", - "text!./res/templates/edit.html", "text!./res/templates/library.html", "text!./res/templates/edit-object.html", "text!./res/templates/edit-action-buttons.html", @@ -45,7 +43,6 @@ define([ "text!./res/templates/topbar-edit.html", 'legacyRegistry' ], function ( - EditController, EditActionController, EditPanesController, ElementsController, @@ -60,7 +57,6 @@ define([ EditActionPolicy, EditRepresenter, EditToolbarRepresenter, - editTemplate, libraryTemplate, editObjectTemplate, editActionButtonsTemplate, @@ -72,22 +68,7 @@ define([ legacyRegistry.register("platform/commonUI/edit", { "extensions": { - "routes": [ - { - "when": "/edit", - "template": editTemplate - } - ], "controllers": [ - { - "key": "EditController", - "implementation": EditController, - "depends": [ - "$scope", - "$q", - "navigationService" - ] - }, { "key": "EditActionController", "implementation": EditActionController, diff --git a/platform/commonUI/edit/res/templates/edit-object.html b/platform/commonUI/edit/res/templates/edit-object.html index 7b2f32e1b3..9da28714a7 100644 --- a/platform/commonUI/edit/res/templates/edit-object.html +++ b/platform/commonUI/edit/res/templates/edit-object.html @@ -19,9 +19,8 @@ this source code distribution or the Licensing information page available at runtime from the About dialog for additional information. --> -
-
+
-
- - - - - - -
diff --git a/platform/commonUI/edit/src/controllers/EditController.js b/platform/commonUI/edit/src/controllers/EditController.js deleted file mode 100644 index eaffe02186..0000000000 --- a/platform/commonUI/edit/src/controllers/EditController.js +++ /dev/null @@ -1,84 +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*/ - -/** - * This bundle implements Edit mode. - * @namespace platform/commonUI/edit - */ -define( - ["../objects/EditableDomainObject"], - function (EditableDomainObject) { - "use strict"; - - /** - * Controller which is responsible for populating the scope for - * Edit mode; introduces an editable version of the currently - * navigated domain object into the scope. - * @memberof platform/commonUI/edit - * @constructor - */ - function EditController($scope, $q, navigationService) { - var self = this; - - function setNavigation(domainObject) { - // Wrap the domain object such that all mutation is - // confined to edit mode (until Save) - self.navigatedDomainObject = - domainObject && new EditableDomainObject(domainObject, $q); - } - - setNavigation(navigationService.getNavigation()); - navigationService.addListener(setNavigation); - $scope.$on("$destroy", function () { - navigationService.removeListener(setNavigation); - }); - } - - /** - * Get the domain object which is navigated-to. - * @returns {DomainObject} the domain object that is navigated-to - */ - EditController.prototype.navigatedObject = function () { - return this.navigatedDomainObject; - }; - - /** - * Get the warning to show if the user attempts to navigate - * away from Edit mode while unsaved changes are present. - * @returns {string} the warning to show, or undefined if - * there are no unsaved changes - */ - EditController.prototype.getUnloadWarning = function () { - var navigatedObject = this.navigatedDomainObject, - editorCapability = navigatedObject && - navigatedObject.getCapability("editor"), - hasChanges = editorCapability && editorCapability.dirty(); - - return hasChanges ? - "Unsaved changes will be lost if you leave this page." : - undefined; - }; - - return EditController; - } -); diff --git a/platform/commonUI/edit/src/controllers/EditObjectController.js b/platform/commonUI/edit/src/controllers/EditObjectController.js index eb5d494cac..96c843b6ea 100644 --- a/platform/commonUI/edit/src/controllers/EditObjectController.js +++ b/platform/commonUI/edit/src/controllers/EditObjectController.js @@ -38,6 +38,31 @@ define( */ function EditObjectController($scope) { this.scope = $scope; + + var navigatedObject; + function setViewForDomainObject(domainObject) { + + var locationViewKey = $location.search().view; + + function selectViewIfMatching(view) { + if (view.key === locationViewKey) { + $scope.representation = $scope.representation || {}; + $scope.representation.selected = view; + } + } + + if (locationViewKey) { + ((domainObject && domainObject.useCapability('view')) || []) + .forEach(selectViewIfMatching); + } + navigatedObject = domainObject; + } + + $scope.$watch('domainObject', setViewForDomainObject); + + $scope.doAction = function (action){ + return $scope[action] && $scope[action](); + }; } /** diff --git a/platform/commonUI/edit/src/representers/EditRepresenter.js b/platform/commonUI/edit/src/representers/EditRepresenter.js index e53318c1b0..c062e6387f 100644 --- a/platform/commonUI/edit/src/representers/EditRepresenter.js +++ b/platform/commonUI/edit/src/representers/EditRepresenter.js @@ -118,6 +118,11 @@ define( // Ensure existing watches are released this.destroy(); + function setEditing(){ + scope.viewRegionTemplate = 'edit-object'; + scope.inspectorRegionTemplate = 'inspector-edit' + } + /** * Listen for changes in object state. If the object becomes * editable then change the view and inspector regions @@ -125,12 +130,15 @@ define( */ this.listenHandle = this.domainObject.getCapability('status').listen(function(statuses){ if (statuses.indexOf('editing')!=-1){ - scope.viewRegionTemplate = 'edit-object'; - scope.inspectorRegionTemplate = 'inspector-edit' + setEditing(); } else { delete scope.viewRegionTemplate; } }); + + if (representedObject.getCapability('status').get('editing')){ + setEditing(); + } }; // Respond to the destruction of the current representation.