* Change the mount utility to use Vue's createApp and defineComponent methods * Fix display layout memory leaks caused by `getSelectionContext` * fix some display layout leaks due to use of slots * Fix imagery memory leak (removed span tag). NOTE: CompassRose svg leaks memory - must test on firefox to see if this is a Chrome leak. * Fix ActionsAPI action collection and applicable actions leak. * Fix flexible layout memory leaks - remove listeners on unmount. NOTE: One type of overlay plot (Rover Yaw) is still leaking. * pass in the el on mount * e2e test config and spec changes * Remove mounting of limit lines. Use components directly * test: remove `.only()` * Fix display layout memory leaks * Enable passing tests * e2e README and appActions should be what master has. * lint: add word to cspell list * lint: fixes * lint:fix * fix: revert `el` change * fix: remove empty span * fix: creating shapes in displayLayout * fix: avoid `splice` as it loses reactivity * test: reduce timeout time * quick fixes * add prod mode and convert the test config to select the correct mode * Fix webpack prod config * Add launch flag for exposing window.gc * never worked * explicit naming * rename * We don't need to destroy view providers * test: increase timeout time * test: unskip all mem tests * fix(vue-loader): disable static hoisting * chore: run `test:perf:memory` * Don't destroy view providers * Move context menu once listener to beforeUnmount instead. * Disconnect all resize observers on unmount * Delete Test vue component * Use beforeUnmount and remove splice(0) in favor of [] for emptying arrays * re-structure * fix: unregister listener in pane.vue * test: tweak timeouts * chore: lint:fix * test: unskip perf tests * fix: unregister events properly * fix: unregister listener * fix: unregister listener * fix: unregister listener * fix: use `unmounted()` * fix: unregister listeners * fix: unregister listener properly * chore: lint:fix * test: fix imagery layer toggle test * test: increase timeout * Don't use anonymous functions for listeners * Destroy objects and event listeners properly * Delete config stores that are created by components * Use the right unmount hook. Destroy mounted view on unmount. * Use unmounted, not beforeUnmounted * Lint fixes * Fix time strip memory leak * Undo unneeded change for memory leaks. * chore: combine common webpack configs --------- Co-authored-by: Shefali Joshi <simplyrender@gmail.com> Co-authored-by: John Hill <john.c.hill@nasa.gov>
147 lines
3.3 KiB
Vue
147 lines
3.3 KiB
Vue
<!--
|
|
Open MCT, Copyright (c) 2014-2023, 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>
|
|
<layout-frame
|
|
:item="item"
|
|
:grid-size="gridSize"
|
|
:is-editing="isEditing"
|
|
@move="move"
|
|
@endMove="endMove"
|
|
>
|
|
<template #content>
|
|
<div
|
|
class="c-text-view u-style-receiver js-style-receiver"
|
|
:data-font-size="item.fontSize"
|
|
:data-font="item.font"
|
|
:class="[styleClass]"
|
|
:style="style"
|
|
>
|
|
<div class="c-text-view__text">{{ item.text }}</div>
|
|
</div>
|
|
</template>
|
|
</layout-frame>
|
|
</template>
|
|
|
|
<script>
|
|
import LayoutFrame from './LayoutFrame.vue';
|
|
import conditionalStylesMixin from '../mixins/objectStyles-mixin';
|
|
|
|
export default {
|
|
makeDefinition(openmct, gridSize, element) {
|
|
return {
|
|
fill: '',
|
|
stroke: '',
|
|
color: '',
|
|
x: 1,
|
|
y: 1,
|
|
width: 10,
|
|
height: 5,
|
|
text: element.text,
|
|
fontSize: 'default',
|
|
font: 'default'
|
|
};
|
|
},
|
|
components: {
|
|
LayoutFrame
|
|
},
|
|
mixins: [conditionalStylesMixin],
|
|
inject: ['openmct'],
|
|
props: {
|
|
item: {
|
|
type: Object,
|
|
required: true
|
|
},
|
|
gridSize: {
|
|
type: Array,
|
|
required: true,
|
|
validator: (arr) => arr && arr.length === 2 && arr.every((el) => typeof el === 'number')
|
|
},
|
|
index: {
|
|
type: Number,
|
|
required: true
|
|
},
|
|
initSelect: Boolean,
|
|
isEditing: {
|
|
type: Boolean,
|
|
required: true
|
|
}
|
|
},
|
|
computed: {
|
|
style() {
|
|
let size;
|
|
//legacy size support
|
|
if (!this.item.fontSize) {
|
|
size = this.item.size;
|
|
}
|
|
|
|
return Object.assign(
|
|
{
|
|
size
|
|
},
|
|
this.itemStyle
|
|
);
|
|
}
|
|
},
|
|
watch: {
|
|
index(newIndex) {
|
|
if (!this.context) {
|
|
return;
|
|
}
|
|
|
|
this.context.index = newIndex;
|
|
},
|
|
item(newItem) {
|
|
if (!this.context) {
|
|
return;
|
|
}
|
|
|
|
this.context.layoutItem = newItem;
|
|
}
|
|
},
|
|
mounted() {
|
|
this.context = {
|
|
layoutItem: this.item,
|
|
index: this.index
|
|
};
|
|
this.removeSelectable = this.openmct.selection.selectable(
|
|
this.$el,
|
|
this.context,
|
|
this.initSelect
|
|
);
|
|
},
|
|
beforeUnmount() {
|
|
if (this.removeSelectable) {
|
|
this.removeSelectable();
|
|
}
|
|
},
|
|
methods: {
|
|
move(gridDelta) {
|
|
this.$emit('move', gridDelta);
|
|
},
|
|
endMove() {
|
|
this.$emit('endMove');
|
|
}
|
|
}
|
|
};
|
|
</script>
|