mirror of
https://github.com/nasa/openmct.git
synced 2025-01-22 12:28:09 +00:00
e07cfc9394
* - Show "Add" button in the toolbar when a display layout object is selected. - Add a flag to object view's show() method to indicate immediate selection of the view. If the view implements getSelectionContext() use it, otherwise set to default context. * Create a component for each element. * Saving work * Add element factory for creating new instances of elements. * Mutate element when a new one added and get elements when the component is mounted. * Add create() method for creating a new telemetry and element in their respective view configuration. * Add some of the toolbar controls for box, text, image and line elements. Also, add X, Y, Width and Height controls for alhpanumeric elements. * Pass name to addElement as type. * Add c-frame-inspectable class if item is inspectable. * Clean up * Hide frame for summary widgets by default. * Better styling for editing - s-selected on shell__main-container; - Better edit grid coloring for espresso; * - Update toolbar-button to support dialogs. - Update toolbar to construct a value object based on form keys if a toolbar item has a dialogi, and mutate the form keys. - Add toolbar controls for editing text and url for 'Text' and 'Image' elements respectively. * Editing-related changes - Removed hard-coded .is-selectable and .is-moveable from LayoutItem.vue, updates accordingly to _global.scss; - Theme constants updated; - TODO: apply changes to Flexible Layouts; * Better defaults - Better default grid size and object size; * - Fix toolbar-input to read value as a number if type is 'number'. - Remove rawPosition from view configuration and instead get the position and dimensions from the properties (x, y, width and height) directly. - Set the style property on the view configuration instead of the layout item. - Move the logic for updating the style to the view configuration. * Fix default dimensions for telemetry items and subobjects since the default grid size is changed. * Remove form definition for display layout type. * Reword the comment * Let subobject view configuration handle new panel creation. * Add default grid size back and remove unused code. * Pass in only the needed method. * Define default position in case the object is not added via drag 'n drop.
205 lines
7.0 KiB
JavaScript
205 lines
7.0 KiB
JavaScript
/*****************************************************************************
|
|
* Open MCT, Copyright (c) 2014-2018, United States Government
|
|
* as represented by the Administrator of the National Aeronautics and Space
|
|
* Administration. All rights reserved.
|
|
*
|
|
* Open MCT 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 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 console */
|
|
|
|
define([], function () {
|
|
const DEFAULT_VIEW_PRIORITY = 100;
|
|
|
|
/**
|
|
* A ViewRegistry maintains the definitions for different kinds of views
|
|
* that may occur in different places in the user interface.
|
|
* @interface ViewRegistry
|
|
* @memberof module:openmct
|
|
*/
|
|
function ViewRegistry() {
|
|
this.providers = {};
|
|
}
|
|
|
|
|
|
/**
|
|
* @private for platform-internal use
|
|
* @param {*} item the object to be viewed
|
|
* @returns {module:openmct.ViewProvider[]} any providers
|
|
* which can provide views of this object
|
|
*/
|
|
ViewRegistry.prototype.get = function (item) {
|
|
function byPriority(providerA, providerB) {
|
|
let priorityA = providerA.priority ? providerA.priority(item) : DEFAULT_VIEW_PRIORITY;
|
|
let priorityB = providerB.priority ? providerB.priority(item) : DEFAULT_VIEW_PRIORITY;
|
|
|
|
return priorityB - priorityA;
|
|
}
|
|
|
|
return this.getAllProviders()
|
|
.filter(function (provider) {
|
|
return provider.canView(item);
|
|
}).sort(byPriority);
|
|
};
|
|
|
|
/**
|
|
* @private
|
|
*/
|
|
ViewRegistry.prototype.getAllProviders = function () {
|
|
return Object.values(this.providers);
|
|
};
|
|
|
|
/**
|
|
* Register a new type of view.
|
|
*
|
|
* @param {module:openmct.ViewProvider} provider the provider for this view
|
|
* @method addProvider
|
|
* @memberof module:openmct.ViewRegistry#
|
|
*/
|
|
ViewRegistry.prototype.addProvider = function (provider) {
|
|
var key = provider.key;
|
|
if (key === undefined) {
|
|
throw "View providers must have a unique 'key' property defined";
|
|
}
|
|
if (this.providers[key] !== undefined) {
|
|
console.warn("Provider already defined for key '%s'. Provider keys must be unique.", key);
|
|
}
|
|
|
|
this.providers[key] = provider;
|
|
};
|
|
|
|
/**
|
|
* @private
|
|
*/
|
|
ViewRegistry.prototype.getByProviderKey = function (key) {
|
|
return this.providers[key];
|
|
};
|
|
|
|
/**
|
|
* Used internally to support seamless usage of new views with old
|
|
* views.
|
|
* @private
|
|
*/
|
|
ViewRegistry.prototype.getByVPID = function (vpid) {
|
|
return this.providers.filter(function (p) {
|
|
return p.vpid === vpid;
|
|
})[0];
|
|
};
|
|
|
|
/**
|
|
* A View is used to provide displayable content, and to react to
|
|
* associated life cycle events.
|
|
*
|
|
* @name View
|
|
* @interface
|
|
* @memberof module:openmct
|
|
*/
|
|
|
|
/**
|
|
* Populate the supplied DOM element with the contents of this view.
|
|
*
|
|
* View implementations should use this method to attach any
|
|
* listeners or acquire other resources that are necessary to keep
|
|
* the contents of this view up-to-date.
|
|
*
|
|
* @param {HTMLElement} container the DOM element to populate
|
|
* @method show
|
|
* @memberof module:openmct.View#
|
|
*/
|
|
|
|
/**
|
|
* Release any resources associated with this view.
|
|
*
|
|
* View implementations should use this method to detach any
|
|
* listeners or release other resources that are no longer necessary
|
|
* once a view is no longer used.
|
|
*
|
|
* @method destroy
|
|
* @memberof module:openmct.View#
|
|
*/
|
|
|
|
/**
|
|
* Returns the selection context.
|
|
*
|
|
* View implementations should use this method to customize
|
|
* the selection context.
|
|
*
|
|
* @method getSelectionContext
|
|
* @memberof module:openmct.View#
|
|
*/
|
|
|
|
/**
|
|
* Exposes types of views in Open MCT.
|
|
*
|
|
* @interface ViewProvider
|
|
* @property {string} key a unique identifier for this view
|
|
* @property {string} name the human-readable name of this view
|
|
* @property {string} [description] a longer-form description (typically
|
|
* a single sentence or short paragraph) of this kind of view
|
|
* @property {string} [cssClass] the CSS class to apply to labels for this
|
|
* view (to add icons, for instance)
|
|
* @memberof module:openmct
|
|
*/
|
|
|
|
/**
|
|
* Check if this provider can supply views for a domain object.
|
|
*
|
|
* When called by Open MCT, this may include additional arguments
|
|
* which are on the path to the object to be viewed; for instance,
|
|
* when viewing "A Folder" within "My Items", this method will be
|
|
* invoked with "A Folder" (as a domain object) as the first argument
|
|
*
|
|
* @method canView
|
|
* @memberof module:openmct.ViewProvider#
|
|
* @param {module:openmct.DomainObject} domainObject the domain object
|
|
* to be viewed
|
|
* @returns {boolean} 'true' if the view applies to the provided object,
|
|
* otherwise 'false'.
|
|
*/
|
|
|
|
/**
|
|
* Optional method determining the priority of a given view. If this
|
|
* function is not defined on a view provider, then a default priority
|
|
* of 100 will be applicable for all objects supported by this view.
|
|
*
|
|
* @method priority
|
|
* @memberof module:openmct.ViewProvider#
|
|
* @param {module:openmct.DomainObject} domainObject the domain object
|
|
* to be viewed
|
|
* @returns {number} The priority of the view. If multiple views could apply
|
|
* to an object, the view that returns the lowest number will be
|
|
* the default view.
|
|
*/
|
|
|
|
/**
|
|
* Provide a view of this object.
|
|
*
|
|
* When called by Open MCT, this may include additional arguments
|
|
* which are on the path to the object to be viewed; for instance,
|
|
* when viewing "A Folder" within "My Items", this method will be
|
|
* invoked with "A Folder" (as a domain object) as the first argument,
|
|
* and "My Items" as the second argument.
|
|
*
|
|
* @method view
|
|
* @memberof module:openmct.ViewProvider#
|
|
* @param {*} object the object to be viewed
|
|
* @returns {module:openmct.View} a view of this domain object
|
|
*/
|
|
|
|
return ViewRegistry;
|
|
|
|
});
|