diff --git a/platform/commonUI/edit/bundle.json b/platform/commonUI/edit/bundle.json index 4341d7830d..f291629c55 100644 --- a/platform/commonUI/edit/bundle.json +++ b/platform/commonUI/edit/bundle.json @@ -90,14 +90,6 @@ { "category": "action", "implementation": "policies/EditActionPolicy.js" - }, - { - "category": "view", - "implementation": "policies/EditableViewPolicy.js" - }, - { - "category": "view", - "implementation": "policies/EditablePanelPolicy.js" } ], "templates": [ diff --git a/platform/commonUI/edit/src/policies/EditActionPolicy.js b/platform/commonUI/edit/src/policies/EditActionPolicy.js index 4db62d8ab2..943f467327 100644 --- a/platform/commonUI/edit/src/policies/EditActionPolicy.js +++ b/platform/commonUI/edit/src/policies/EditActionPolicy.js @@ -34,18 +34,42 @@ define( * @constructor * @implements {Policy.} */ - function EditActionPolicy() { + function EditActionPolicy(policyService) { + this.policyService = policyService; } - // Get a count of views which are not flagged as non-editable. - function countEditableViews(context) { - var domainObject = (context || {}).domainObject, - views = domainObject && domainObject.useCapability('view'), - count = 0; + function applicableView(key){ + return ['plot', 'scrolling'].indexOf(key) >= 0; + } + + function editableType(key){ + return key === 'telemetry.panel'; + } + + /** + * Get a count of views which are not flagged as non-editable. + * @private + */ + EditActionPolicy.prototype.countEditableViews = function (context) { + var domainObject = context.domainObject, + count = 0, + type, views; + + if (!domainObject){ + return count; + } + + type = domainObject.getCapability('type'); + views = domainObject.useCapability('view'); + // A view is editable unless explicitly flagged as not (views || []).forEach(function (view) { - count += (view.editable !== false) ? 1 : 0; + if (view.editable===false || (applicableView(view.key) && !editableType(type.getKey()))){ + // Do nothing + } else { + count++; + } }); return count; @@ -75,9 +99,9 @@ define( // the converse is true), and where the domain object is not // already being edited. if (key === 'edit') { - return countEditableViews(context) > 0 && !isEditing(context); + return this.countEditableViews(context) > 0 && !isEditing(context); } else if (key === 'properties') { - return countEditableViews(context) < 1 && !isEditing(context); + return this.countEditableViews(context) < 1 && !isEditing(context); } } diff --git a/platform/commonUI/edit/src/policies/EditablePanelPolicy.js b/platform/commonUI/edit/src/policies/EditablePanelPolicy.js deleted file mode 100644 index 46468b35f2..0000000000 --- a/platform/commonUI/edit/src/policies/EditablePanelPolicy.js +++ /dev/null @@ -1,63 +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 () { - "use strict"; - - /** - * Policy controlling which views should be visible in Edit mode. - * @memberof platform/commonUI/edit - * @constructor - * @implements {Policy.} - */ - function EditablePanelPolicy() { - } - - function applicableView(key){ - return ['plot', 'scrolling'].indexOf(key) >= 0; - } - - function editableType(key){ - return key === 'telemetry.panel'; - } - - EditablePanelPolicy.prototype.allow = function (view, domainObject) { - // If a view is flagged as non-editable, only allow it - // while we're not in Edit mode. - if (view && view.editable != false) { - //But show the view if the domain object is in edit mode, - // but is not the object being edited. - if (applicableView(view.key) && !editableType(domainObject.getCapability('type').getKey())){ - return false; - } - } - - // Like all policies, allow by default. - return true; - }; - - return EditablePanelPolicy; - } -); diff --git a/platform/commonUI/edit/src/policies/EditableViewPolicy.js b/platform/commonUI/edit/src/policies/EditableViewPolicy.js index fed287cded..17194064b0 100644 --- a/platform/commonUI/edit/src/policies/EditableViewPolicy.js +++ b/platform/commonUI/edit/src/policies/EditableViewPolicy.js @@ -36,11 +36,10 @@ define( } EditableViewPolicy.prototype.allow = function (view, domainObject) { - // If a view is flagged as non-editable, allow it if the object - // itself is not being edited. For example if we are in browse - // mode, or edit mode and the object is within a layout. + // If a view is flagged as non-editable, only allow it + // while we're not in Edit mode. if ((view || {}).editable === false) { - return !domainObject.getCapability('status').get('editing'); + return !domainObject.hasCapability('editor'); } // Like all policies, allow by default.