diff --git a/platform/commonUI/edit/bundle.js b/platform/commonUI/edit/bundle.js index 9151775cfd..695ca2aab3 100644 --- a/platform/commonUI/edit/bundle.js +++ b/platform/commonUI/edit/bundle.js @@ -34,6 +34,7 @@ define([ "./src/actions/SaveAction", "./src/actions/CancelAction", "./src/policies/EditActionPolicy", + "./src/policies/EditableLinkPolicy", "./src/policies/EditableMovePolicy", "./src/policies/EditNavigationPolicy", "./src/representers/EditRepresenter", @@ -57,6 +58,7 @@ define([ SaveAction, CancelAction, EditActionPolicy, + EditableLinkPolicy, EditableMovePolicy, EditNavigationPolicy, EditRepresenter, @@ -193,6 +195,10 @@ define([ "category": "action", "implementation": EditableMovePolicy }, + { + "category": "action", + "implementation": EditableLinkPolicy + }, { "category": "navigation", "message": "There are unsaved changes.", diff --git a/platform/commonUI/edit/src/policies/EditableLinkPolicy.js b/platform/commonUI/edit/src/policies/EditableLinkPolicy.js new file mode 100644 index 0000000000..ad3043df2d --- /dev/null +++ b/platform/commonUI/edit/src/policies/EditableLinkPolicy.js @@ -0,0 +1,52 @@ +/***************************************************************************** + * 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 suppressing links when the linked-to domain object is in + * edit mode. Domain objects being edited may not have been persisted, + * so creating links to these can result in inconsistent state. + * + * @memberof platform/commonUI/edit + * @constructor + * @implements {Policy.} + */ + function EditableLinkPolicy() { + } + + EditableLinkPolicy.prototype.allow = function (action, context) { + var key = action.getMetadata().key; + + if (key === 'link') { + return !((context.selectedObject || context.domainObject) + .hasCapability('editor')); + } + + // Like all policies, allow by default. + return true; + }; + + return EditableLinkPolicy; +}); diff --git a/platform/core/src/actions/ActionCapability.js b/platform/core/src/actions/ActionCapability.js index cd7ab77480..7caf5c0ecc 100644 --- a/platform/core/src/actions/ActionCapability.js +++ b/platform/core/src/actions/ActionCapability.js @@ -28,7 +28,8 @@ define( [], function () { "use strict"; - var DISALLOWED_ACTIONS = ["copy", "link", "window", "follow"]; + var DISALLOWED_ACTIONS = ["copy", "window", "follow"]; + /** * The ActionCapability allows applicable Actions to be retrieved and * performed for specific domain objects, e.g.: