* add context menu capability to table rows, add view switcher to preview * add an option to limit context menu actions to the ones requested, and modify preview action to also include a view historical data action * extend preview action into view historical data action * add context menu to LAD Table * add keys to context menu actions, allow tables to conditionally attach context menu handler * working switch y axis label * New vertical select element for Y axis configuration in plots - CSS for vertically rotated selects for Y axis label selection; - New theme constants; - Removed themedSelect theme mixins; - New SASS svgColorFromHex function; * use keys in lad table context menu options * show historical view context menu on alpha-numerics * make reviewer requested changes * pass contextual object path from object view down etc * made reviewer requested changes: removed options object, pass in object path instead * remove redundant function from LADRow.vue
193 lines
5.9 KiB
Vue
193 lines
5.9 KiB
Vue
/*****************************************************************************
|
|
* 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.
|
|
*****************************************************************************/
|
|
<template>
|
|
<div class="c-so-view has-local-controls"
|
|
:class="{
|
|
'c-so-view--no-frame': !hasFrame,
|
|
'has-complex-content': complexContent
|
|
}">
|
|
<div class="c-so-view__header">
|
|
<div class="c-so-view__header__icon" :class="cssClass"></div>
|
|
<div class="c-so-view__header__name">
|
|
{{ domainObject && domainObject.name }}
|
|
</div>
|
|
<context-menu-drop-down
|
|
:object-path="objectPath">
|
|
</context-menu-drop-down>
|
|
</div>
|
|
<div class="c-so-view__local-controls c-so-view__view-large h-local-controls c-local-controls--show-on-hover">
|
|
<button class="c-button icon-expand"
|
|
title="View Large"
|
|
@click="expand">
|
|
</button>
|
|
</div>
|
|
<object-view
|
|
class="c-so-view__object-view"
|
|
ref="objectView"
|
|
:object="domainObject"
|
|
:show-edit-view="showEditView"
|
|
:object-path="objectPath">
|
|
</object-view>
|
|
</div>
|
|
</template>
|
|
|
|
<style lang="scss">
|
|
@import "~styles/sass-base";
|
|
|
|
.c-so-view {
|
|
display: flex;
|
|
flex-direction: column;
|
|
|
|
/*************************** HEADER */
|
|
&__header {
|
|
flex: 0 0 auto;
|
|
display: flex;
|
|
align-items: center;
|
|
margin-bottom: $interiorMargin;
|
|
|
|
&__icon {
|
|
flex: 0 0 auto;
|
|
margin-right: $interiorMarginSm;
|
|
opacity: 0.5;
|
|
}
|
|
|
|
&__name {
|
|
@include headerFont(1em);
|
|
@include ellipsize();
|
|
flex: 0 1 auto;
|
|
}
|
|
}
|
|
|
|
&:not(.c-so-view--no-frame) {
|
|
background: $colorBodyBg;
|
|
border: $browseFrameBorder;
|
|
padding: $interiorMargin;
|
|
}
|
|
|
|
&--no-frame {
|
|
> .c-so-view__header {
|
|
display: none;
|
|
}
|
|
|
|
> .c-so-view__local-controls {
|
|
top: $interiorMarginSm; right: $interiorMarginSm;
|
|
}
|
|
}
|
|
|
|
&__local-controls {
|
|
position: absolute;
|
|
top: $interiorMargin; right: $interiorMargin;
|
|
z-index: 2;
|
|
}
|
|
|
|
&__view-large {
|
|
display: none;
|
|
}
|
|
|
|
&.has-complex-content {
|
|
> .c-so-view__view-large { display: block; }
|
|
}
|
|
|
|
/*************************** OBJECT VIEW */
|
|
&__object-view {
|
|
flex: 1 1 auto;
|
|
height: 0; // Chrome 73 overflow bug fix
|
|
overflow: auto;
|
|
|
|
.c-object-view {
|
|
.u-fills-container {
|
|
// Expand component types that fill a container
|
|
@include abs();
|
|
}
|
|
}
|
|
}
|
|
|
|
.c-click-icon,
|
|
.c-button {
|
|
// Shrink buttons a bit when they appear in a frame
|
|
align-items: baseline;
|
|
font-size: 0.85em;
|
|
padding: 3px 5px;
|
|
&:before {
|
|
font-size: 0.8em;
|
|
}
|
|
}
|
|
}
|
|
</style>
|
|
|
|
<script>
|
|
import ObjectView from './ObjectView.vue'
|
|
import ContextMenuDropDown from './contextMenuDropDown.vue';
|
|
|
|
const SIMPLE_CONTENT_TYPES = [
|
|
'clock',
|
|
'timer',
|
|
'summary-widget',
|
|
'hyperlink'
|
|
];
|
|
|
|
export default {
|
|
inject: ['openmct'],
|
|
props: {
|
|
domainObject: Object,
|
|
objectPath: Array,
|
|
hasFrame: Boolean,
|
|
showEditView: {
|
|
type: Boolean,
|
|
default: () => true
|
|
}
|
|
},
|
|
components: {
|
|
ObjectView,
|
|
ContextMenuDropDown,
|
|
},
|
|
methods: {
|
|
expand() {
|
|
let objectView = this.$refs.objectView,
|
|
parentElement = objectView.$el,
|
|
childElement = parentElement.children[0];
|
|
|
|
this.openmct.overlays.overlay({
|
|
element: childElement,
|
|
size: 'large',
|
|
onDestroy() {
|
|
parentElement.append(childElement);
|
|
}
|
|
});
|
|
},
|
|
getSelectionContext() {
|
|
return this.$refs.objectView.getSelectionContext();
|
|
}
|
|
},
|
|
data() {
|
|
let objectType = this.openmct.types.get(this.domainObject.type),
|
|
cssClass = objectType && objectType.definition ? objectType.definition.cssClass : 'icon-object-unknown',
|
|
complexContent = !SIMPLE_CONTENT_TYPES.includes(this.domainObject.type);
|
|
|
|
return {
|
|
cssClass,
|
|
complexContent
|
|
}
|
|
}
|
|
}
|
|
</script>
|