Fixed edit action and editable view policies for NEM

This commit is contained in:
Henry 2015-12-10 16:53:25 -08:00
parent 02e89f9c73
commit b32eb363f1
4 changed files with 36 additions and 84 deletions

View File

@ -90,14 +90,6 @@
{
"category": "action",
"implementation": "policies/EditActionPolicy.js"
},
{
"category": "view",
"implementation": "policies/EditableViewPolicy.js"
},
{
"category": "view",
"implementation": "policies/EditablePanelPolicy.js"
}
],
"templates": [

View File

@ -34,18 +34,42 @@ define(
* @constructor
* @implements {Policy.<Action, ActionContext>}
*/
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);
}
}

View File

@ -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.<View, DomainObject>}
*/
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;
}
);

View File

@ -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.