mirror of
https://github.com/nasa/openmct.git
synced 2025-06-25 02:29:24 +00:00
Compare commits
75 Commits
eval-sourc
...
maelstrom2
Author | SHA1 | Date | |
---|---|---|---|
25ec6b6943 | |||
b628814f78 | |||
a15ad6fc4c | |||
767aa78b06 | |||
43b7efa775 | |||
ac18548b42 | |||
ed3c226909 | |||
261e8e8759 | |||
cb6a8629d3 | |||
9eead672d8 | |||
5da6b2c969 | |||
4780cde3b5 | |||
1960215fc1 | |||
d06e3e12fc | |||
365998ad4f | |||
15cfa79106 | |||
6857e15a83 | |||
f1294f3e73 | |||
d4a1f6eb35 | |||
4c7fb0d3eb | |||
b9017329cd | |||
b08834a53b | |||
eb7330522e | |||
0c1cdf1d8e | |||
8dedf52910 | |||
0420eac159 | |||
715e3419a0 | |||
e6ab3ccf85 | |||
edf748d4a1 | |||
84ba444eb5 | |||
6d9f3f1e3e | |||
ae32b902a7 | |||
660bf805d0 | |||
2f58ea9c1f | |||
ba09a17b29 | |||
5063fa1fb1 | |||
543b4dab4c | |||
ef310a8777 | |||
7d07a9e21f | |||
ada18faa98 | |||
95d40aaeed | |||
b59f5c70dc | |||
94e7351e22 | |||
50ee7353b1 | |||
df524c4f48 | |||
aa59692585 | |||
0bf82956ab | |||
f102158ba0 | |||
9a51bb71b9 | |||
12b9aa75a3 | |||
5bedfc2efd | |||
212d7c3eae | |||
d7a3510f34 | |||
9cc44dcc4e | |||
f42a5e19f0 | |||
102cfc33c4 | |||
957c7102fe | |||
0519824109 | |||
4380f88a08 | |||
20d5db6e44 | |||
5978b8e19d | |||
a0b71f92b8 | |||
7c3f7ff384 | |||
6f2a567299 | |||
746badd065 | |||
7d99877eb9 | |||
3eac91a6d9 | |||
4d426580ae | |||
9270f02ca4 | |||
815b1449f4 | |||
0874ada4d2 | |||
03812437d3 | |||
2b8272cf05 | |||
71a2f27e0c | |||
5460ca2009 |
487
configuration_json/MaelstromDictionary.js
Normal file
487
configuration_json/MaelstromDictionary.js
Normal file
@ -0,0 +1,487 @@
|
||||
export default {
|
||||
'telemetry': {
|
||||
type: 'folder',
|
||||
name: 'Maelstrom Telemetry',
|
||||
type: 'folder',
|
||||
location: 'ROOT',
|
||||
composition: [
|
||||
{
|
||||
namespace: 'maelstrom',
|
||||
key: 'velocity'
|
||||
},{
|
||||
namespace: 'maelstrom',
|
||||
key: 'acceleration-ms-2'
|
||||
},{
|
||||
namespace: 'maelstrom',
|
||||
key: 'acceleration-g'
|
||||
},{
|
||||
namespace: 'maelstrom',
|
||||
key: 'distance'
|
||||
},{
|
||||
namespace: 'maelstrom',
|
||||
key: 'distance-m'
|
||||
},{
|
||||
namespace: 'maelstrom',
|
||||
key: 'roll'
|
||||
},{
|
||||
namespace: 'maelstrom',
|
||||
key: 'pitch'
|
||||
},{
|
||||
namespace: 'maelstrom',
|
||||
key: 'yaw'
|
||||
},{
|
||||
namespace: 'maelstrom',
|
||||
key: 'event-index'
|
||||
},{
|
||||
namespace: 'maelstrom',
|
||||
key: 'event-time-str'
|
||||
},{
|
||||
namespace: 'maelstrom',
|
||||
key: 'ring'
|
||||
},{
|
||||
namespace: 'maelstrom',
|
||||
key: 'next-los'
|
||||
},{
|
||||
namespace: 'maelstrom',
|
||||
key: 'evr-1'
|
||||
},{
|
||||
namespace: 'maelstrom',
|
||||
key: 'evr-2'
|
||||
},{
|
||||
namespace: 'maelstrom',
|
||||
key: 'evr-3'
|
||||
},{
|
||||
namespace: 'maelstrom',
|
||||
key: 'evr-4'
|
||||
},{
|
||||
namespace: 'maelstrom',
|
||||
key: 'evr-5'
|
||||
}
|
||||
]
|
||||
},
|
||||
'velocity': {
|
||||
type: 'maelstrom-telemetry',
|
||||
location: 'maelstrom:telemetry',
|
||||
name: 'Velocity',
|
||||
telemetry: {
|
||||
values: [{
|
||||
"key": "value",
|
||||
"name": "Velocity",
|
||||
"units": "ms",
|
||||
"format": "float",
|
||||
"source": "velocity",
|
||||
"hints": {
|
||||
"range": 1
|
||||
}
|
||||
}, {
|
||||
"key": "utc",
|
||||
"source": "event_time",
|
||||
"name": "Time",
|
||||
"format": "utc-diy",
|
||||
"hints": {
|
||||
"domain": 1
|
||||
}
|
||||
}
|
||||
]}
|
||||
},
|
||||
'acceleration-ms-2': {
|
||||
type: 'maelstrom-telemetry',
|
||||
location: 'maelstrom:telemetry',
|
||||
name: 'Acceleration (ms^-2)',
|
||||
telemetry: {
|
||||
values: [{
|
||||
"key": "value",
|
||||
"name": "Acceleration",
|
||||
"units": "ms^-2",
|
||||
"format": "float",
|
||||
"source": "acceleration-ms-2",
|
||||
"hints": {
|
||||
"range": 1
|
||||
}
|
||||
}, {
|
||||
"key": "utc",
|
||||
"source": "event_time",
|
||||
"name": "Time",
|
||||
"format": "utc-diy",
|
||||
"hints": {
|
||||
"domain": 1
|
||||
}
|
||||
}
|
||||
]}
|
||||
},
|
||||
'acceleration-g': {
|
||||
type: 'maelstrom-telemetry',
|
||||
location: 'maelstrom:telemetry',
|
||||
name: 'Acceleration (G)',
|
||||
telemetry: {
|
||||
values: [{
|
||||
"key": "value",
|
||||
"name": "Acceleration",
|
||||
"units": "ms^-2",
|
||||
"format": "float",
|
||||
"source": "acceleration-g",
|
||||
"hints": {
|
||||
"range": 1
|
||||
}
|
||||
}, {
|
||||
"key": "utc",
|
||||
"source": "event_time",
|
||||
"name": "Time",
|
||||
"format": "utc-diy",
|
||||
"hints": {
|
||||
"domain": 1
|
||||
}
|
||||
}
|
||||
]}
|
||||
},
|
||||
'distance': {
|
||||
type: 'maelstrom-telemetry',
|
||||
location: 'maelstrom:telemetry',
|
||||
name: 'Distance (km)',
|
||||
telemetry: {
|
||||
values: [{
|
||||
"key": "value",
|
||||
"name": "Distance",
|
||||
"units": "km",
|
||||
"format": "float",
|
||||
"source": "distance-km",
|
||||
"hints": {
|
||||
"range": 1
|
||||
}
|
||||
}, {
|
||||
"key": "utc",
|
||||
"source": "event_time",
|
||||
"name": "Time",
|
||||
"format": "utc-diy",
|
||||
"hints": {
|
||||
"domain": 1
|
||||
}
|
||||
}
|
||||
]}
|
||||
},
|
||||
'distance-m': {
|
||||
type: 'maelstrom-telemetry',
|
||||
location: 'maelstrom:telemetry',
|
||||
name: 'Distance (m)',
|
||||
telemetry: {
|
||||
values: [{
|
||||
"key": "value",
|
||||
"name": "Distance Meters",
|
||||
"units": "m",
|
||||
"format": "float",
|
||||
"source": "distance-m",
|
||||
"hints": {
|
||||
"range": 1
|
||||
}
|
||||
}, {
|
||||
"key": "utc",
|
||||
"source": "event_time",
|
||||
"name": "Time",
|
||||
"format": "utc-diy",
|
||||
"hints": {
|
||||
"domain": 1
|
||||
}
|
||||
}
|
||||
]}
|
||||
},
|
||||
'roll': {
|
||||
type: 'maelstrom-telemetry',
|
||||
location: 'maelstrom:telemetry',
|
||||
name: 'Roll',
|
||||
telemetry: {
|
||||
values: [{
|
||||
"key": "value",
|
||||
"name": "Roll",
|
||||
"units": "degrees",
|
||||
"format": "float",
|
||||
"source": "roll",
|
||||
"hints": {
|
||||
"range": 1
|
||||
}
|
||||
}, {
|
||||
"key": "utc",
|
||||
"source": "event_time",
|
||||
"name": "Time",
|
||||
"format": "utc-diy",
|
||||
"hints": {
|
||||
"domain": 1
|
||||
}
|
||||
}
|
||||
]}
|
||||
},
|
||||
'pitch': {
|
||||
type: 'maelstrom-telemetry',
|
||||
location: 'maelstrom:telemetry',
|
||||
name: 'Pitch',
|
||||
telemetry: {
|
||||
values: [{
|
||||
"key": "value",
|
||||
"name": "Pitch",
|
||||
"units": "degrees",
|
||||
"format": "float",
|
||||
"source": "pitch",
|
||||
"hints": {
|
||||
"range": 1
|
||||
}
|
||||
}, {
|
||||
"key": "utc",
|
||||
"source": "event_time",
|
||||
"name": "Time",
|
||||
"format": "utc-diy",
|
||||
"hints": {
|
||||
"domain": 1
|
||||
}
|
||||
}
|
||||
]}
|
||||
},
|
||||
'yaw': {
|
||||
type: 'maelstrom-telemetry',
|
||||
location: 'maelstrom:telemetry',
|
||||
name: 'Yaw',
|
||||
telemetry: {
|
||||
values: [{
|
||||
"key": "value",
|
||||
"name": "Yaw",
|
||||
"units": "degrees",
|
||||
"format": "float",
|
||||
"source": "yaw",
|
||||
"hints": {
|
||||
"range": 1
|
||||
}
|
||||
}, {
|
||||
"key": "utc",
|
||||
"source": "event_time",
|
||||
"name": "Time",
|
||||
"format": "utc-diy",
|
||||
"hints": {
|
||||
"domain": 1
|
||||
}
|
||||
}
|
||||
]}
|
||||
},
|
||||
'event-index': {
|
||||
type: 'maelstrom-telemetry',
|
||||
location: 'maelstrom:telemetry',
|
||||
name: 'Event Index',
|
||||
telemetry: {
|
||||
values: [{
|
||||
"key": "value",
|
||||
"name": "Event Index",
|
||||
"units": "i",
|
||||
"format": "float",
|
||||
"source": "event-index",
|
||||
"hints": {
|
||||
"range": 1
|
||||
}
|
||||
}, {
|
||||
"key": "utc",
|
||||
"source": "event_time",
|
||||
"name": "Time",
|
||||
"format": "utc-diy",
|
||||
"hints": {
|
||||
"domain": 1
|
||||
}
|
||||
}
|
||||
]}
|
||||
},
|
||||
'event-time-str': {
|
||||
type: 'maelstrom-telemetry',
|
||||
location: 'maelstrom:telemetry',
|
||||
name: 'Event Time Str',
|
||||
telemetry: {
|
||||
values: [{
|
||||
"key": "value",
|
||||
"name": "Event Time Str",
|
||||
"units": "",
|
||||
"format": "string",
|
||||
"source": "event-time-str",
|
||||
"hints": {
|
||||
"range": 1
|
||||
}
|
||||
}, {
|
||||
"key": "utc",
|
||||
"source": "event_time",
|
||||
"name": "Time",
|
||||
"format": "utc-diy",
|
||||
"hints": {
|
||||
"domain": 1
|
||||
}
|
||||
}
|
||||
]}
|
||||
},
|
||||
'ring': {
|
||||
type: 'maelstrom-telemetry',
|
||||
location: 'maelstrom:telemetry',
|
||||
name: 'Ring',
|
||||
telemetry: {
|
||||
values: [{
|
||||
"key": "value",
|
||||
"name": "Ring",
|
||||
"units": "",
|
||||
"format": "int",
|
||||
"source": "ring",
|
||||
"hints": {
|
||||
"range": 24
|
||||
}
|
||||
}, {
|
||||
"key": "utc",
|
||||
"source": "event_time",
|
||||
"name": "Time",
|
||||
"format": "utc-diy",
|
||||
"hints": {
|
||||
"domain": 1
|
||||
}
|
||||
}
|
||||
]}
|
||||
},
|
||||
'next-los': {
|
||||
type: 'maelstrom-telemetry',
|
||||
location: 'maelstrom:telemetry',
|
||||
name: 'Next LOS',
|
||||
telemetry: {
|
||||
values: [{
|
||||
"key": "value",
|
||||
"name": "Next LOS",
|
||||
"units": "",
|
||||
"format": "string",
|
||||
"source": "next-los",
|
||||
"hints": {
|
||||
"range": 1
|
||||
}
|
||||
}, {
|
||||
"key": "utc",
|
||||
"source": "event_time",
|
||||
"name": "Time",
|
||||
"format": "utc-diy",
|
||||
"hints": {
|
||||
"domain": 1
|
||||
}
|
||||
}
|
||||
]}
|
||||
},
|
||||
'evr-1': {
|
||||
type: 'maelstrom-telemetry',
|
||||
location: 'maelstrom:telemetry',
|
||||
name: 'EVR 1',
|
||||
telemetry: {
|
||||
values: [{
|
||||
"key": "value",
|
||||
"name": "EVR-1",
|
||||
"units": "",
|
||||
"format": "string",
|
||||
"source": "evr-1",
|
||||
"hints": {
|
||||
"range": 1
|
||||
}
|
||||
}, {
|
||||
"key": "utc",
|
||||
"source": "event_time",
|
||||
"name": "Time",
|
||||
"format": "utc-diy",
|
||||
"hints": {
|
||||
"domain": 1
|
||||
}
|
||||
}
|
||||
]}
|
||||
},
|
||||
'evr-2': {
|
||||
type: 'maelstrom-telemetry',
|
||||
location: 'maelstrom:telemetry',
|
||||
name: 'EVR 2',
|
||||
telemetry: {
|
||||
values: [{
|
||||
"key": "value",
|
||||
"name": "EVR-2",
|
||||
"units": "",
|
||||
"format": "string",
|
||||
"source": "evr-2",
|
||||
"hints": {
|
||||
"range": 1
|
||||
}
|
||||
}, {
|
||||
"key": "utc",
|
||||
"source": "event_time",
|
||||
"name": "Time",
|
||||
"format": "utc-diy",
|
||||
"hints": {
|
||||
"domain": 1
|
||||
}
|
||||
}
|
||||
]}
|
||||
},
|
||||
'evr-3': {
|
||||
type: 'maelstrom-telemetry',
|
||||
location: 'maelstrom:telemetry',
|
||||
name: 'EVR 3',
|
||||
telemetry: {
|
||||
values: [{
|
||||
"key": "value",
|
||||
"name": "EVR-3",
|
||||
"units": "",
|
||||
"format": "string",
|
||||
"source": "evr-3",
|
||||
"hints": {
|
||||
"range": 1
|
||||
}
|
||||
}, {
|
||||
"key": "utc",
|
||||
"source": "event_time",
|
||||
"name": "Time",
|
||||
"format": "utc-diy",
|
||||
"hints": {
|
||||
"domain": 1
|
||||
}
|
||||
}
|
||||
]}
|
||||
},
|
||||
'evr-4': {
|
||||
type: 'maelstrom-telemetry',
|
||||
location: 'maelstrom:telemetry',
|
||||
name: 'EVR 4',
|
||||
telemetry: {
|
||||
values: [{
|
||||
"key": "value",
|
||||
"name": "EVR-4",
|
||||
"units": "",
|
||||
"format": "string",
|
||||
"source": "evr-4",
|
||||
"hints": {
|
||||
"range": 1
|
||||
}
|
||||
}, {
|
||||
"key": "utc",
|
||||
"source": "event_time",
|
||||
"name": "Time",
|
||||
"format": "utc-diy",
|
||||
"hints": {
|
||||
"domain": 1
|
||||
}
|
||||
}
|
||||
]}
|
||||
},
|
||||
'evr-5': {
|
||||
type: 'maelstrom-telemetry',
|
||||
location: 'maelstrom:telemetry',
|
||||
name: 'EVR 5',
|
||||
telemetry: {
|
||||
values: [{
|
||||
"key": "value",
|
||||
"name": "EVR-5",
|
||||
"units": "",
|
||||
"format": "string",
|
||||
"source": "evr-5",
|
||||
"hints": {
|
||||
"range": 1
|
||||
}
|
||||
}, {
|
||||
"key": "utc",
|
||||
"source": "event_time",
|
||||
"name": "Time",
|
||||
"format": "utc-diy",
|
||||
"hints": {
|
||||
"domain": 1
|
||||
}
|
||||
}
|
||||
]}
|
||||
}
|
||||
}
|
1
configuration_json/maelstrom2-final-v1-my-items.json
Normal file
1
configuration_json/maelstrom2-final-v1-my-items.json
Normal file
File diff suppressed because one or more lines are too long
@ -45,6 +45,8 @@
|
||||
].forEach(
|
||||
openmct.legacyRegistry.enable.bind(openmct.legacyRegistry)
|
||||
);
|
||||
openmct.install(openmct.plugins.Bignumbers());
|
||||
openmct.install(openmct.plugins.Gauge());
|
||||
openmct.install(openmct.plugins.MyItems());
|
||||
openmct.install(openmct.plugins.LocalStorage());
|
||||
openmct.install(openmct.plugins.Generator());
|
||||
|
@ -5,7 +5,7 @@
|
||||
*
|
||||
* 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
|
||||
* You may obtain a copy of the License atw
|
||||
* http://www.apache.org/licenses/LICENSE-2.0.
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
|
71
src/plugins/bignumbers/bignumbers.js
Normal file
71
src/plugins/bignumbers/bignumbers.js
Normal file
@ -0,0 +1,71 @@
|
||||
/*****************************************************************************
|
||||
* 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.
|
||||
*****************************************************************************/
|
||||
|
||||
define([
|
||||
'./components/bignumbers.vue',
|
||||
'vue'
|
||||
], function (
|
||||
BignumbersComponent,
|
||||
Vue
|
||||
) {
|
||||
function Bignumbers(openmct) {
|
||||
return {
|
||||
key: 'bignumbers',
|
||||
name: 'Bignumbers',
|
||||
cssClass: 'icon-telemetry',
|
||||
canView: function (domainObject) {
|
||||
return domainObject.type === 'bignumbers';
|
||||
},
|
||||
canEdit: function (domainObject) {
|
||||
return domainObject.type === 'bignumbers';
|
||||
},
|
||||
view: function (domainObject) {
|
||||
let component;
|
||||
|
||||
return {
|
||||
show: function (element) {
|
||||
component = new Vue({
|
||||
components: {
|
||||
BignumbersComponent: BignumbersComponent.default
|
||||
},
|
||||
provide: {
|
||||
openmct,
|
||||
domainObject,
|
||||
composition: openmct.composition.get(domainObject)
|
||||
},
|
||||
el: element,
|
||||
template: '<bignumbers-component></bignumbers-component>'
|
||||
});
|
||||
},
|
||||
destroy: function (element) {
|
||||
component.$destroy();
|
||||
component = undefined;
|
||||
}
|
||||
};
|
||||
},
|
||||
priority: function () {
|
||||
return 1;
|
||||
}
|
||||
};
|
||||
}
|
||||
return Bignumbers;
|
||||
});
|
131
src/plugins/bignumbers/components/bignumbers.vue
Normal file
131
src/plugins/bignumbers/components/bignumbers.vue
Normal file
@ -0,0 +1,131 @@
|
||||
<template>
|
||||
<div class="c-bignumbers">
|
||||
<svg class="c-bignumbers__int" viewBox="0 0 52 32">
|
||||
<text textLength=100% lengthAdjust=spacingAndGlyphs x="0" y="32">{{ this.curValInt }}</text>
|
||||
</svg>
|
||||
<svg class="c-bignumbers__dec" viewBox="0 0 40 20">
|
||||
<text textLength=100% lengthAdjust=spacing x="0" y="20">.{{ this.curValDec }}</text>
|
||||
</svg>
|
||||
<svg class="c-bignumbers__units" viewBox="0 0 45 11">
|
||||
<text textLength=100% lengthAdjust=spacingAndGlyphs x="0" y="11">{{ this.units }}</text>
|
||||
</svg>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<style lang="scss">
|
||||
@import "~styles/sass-base";
|
||||
|
||||
.c-bignumbers {
|
||||
$w1: 53%;
|
||||
|
||||
@include abs();
|
||||
bottom: auto;
|
||||
padding-bottom: 33%;
|
||||
|
||||
&__int,
|
||||
&__dec,
|
||||
&__units {
|
||||
position: absolute;
|
||||
fill: #fff;
|
||||
}
|
||||
|
||||
&__int,
|
||||
&__dec {
|
||||
font-family: $heroFont;
|
||||
}
|
||||
|
||||
&__int {
|
||||
font-size: 51px;
|
||||
opacity: 0.8;
|
||||
width: $w1;
|
||||
}
|
||||
|
||||
&__dec {
|
||||
left: $w1;
|
||||
font-size: 32px;
|
||||
opacity: 0.4;
|
||||
width: 100% - $w1;
|
||||
}
|
||||
|
||||
&__units {
|
||||
font-size: 9px;
|
||||
font-family: $headerFont;
|
||||
left: $w1;
|
||||
bottom: 0;
|
||||
opacity: 0.2;
|
||||
width: 99% - $w1; // Font has different char spacing, so use reduced width
|
||||
}
|
||||
}
|
||||
|
||||
</style>
|
||||
|
||||
<script>
|
||||
export default {
|
||||
name: "bignumbers",
|
||||
inject: ['openmct', 'domainObject', 'composition'],
|
||||
data: function () {
|
||||
let config = this.domainObject.configuration,
|
||||
units = config.units;
|
||||
console.log(config);
|
||||
return {
|
||||
curValInt: 0,
|
||||
curValDec: 0,
|
||||
units: units
|
||||
|
||||
}
|
||||
},
|
||||
methods: {
|
||||
getInt: function(val, digits) {
|
||||
// Extract integer portion of val and zero-pad it if its length < digits
|
||||
return this.zeroPad(Math.floor(val), digits);
|
||||
},
|
||||
getDec: function(val, digits) {
|
||||
// Extract decimal portion of val to the specified number of digits
|
||||
return Number.parseFloat(val).toFixed(digits).split('.')[1];
|
||||
},
|
||||
zeroPad: function(val, length) {
|
||||
// Zero pads an integer and returns it as a string
|
||||
let s = Math.abs(val).toString();
|
||||
if (s.length < length) {
|
||||
for (let i = 0; i <= (length - s.length); i++) {
|
||||
s = '0' + s;
|
||||
}
|
||||
}
|
||||
if (val < 0) {
|
||||
s = '-' + s;
|
||||
}
|
||||
return s;
|
||||
},
|
||||
updateValue(datum) {
|
||||
let cv = this.formats[this.valueKey].format(datum);
|
||||
this.curValInt = this.getInt(cv, 3);
|
||||
this.curValDec = this.getDec(cv, 3);
|
||||
},
|
||||
subscribe(domainObject) {
|
||||
this.metadata = this.openmct.telemetry.getMetadata(domainObject);
|
||||
this.formats = this.openmct.telemetry.getFormatMap(this.metadata);
|
||||
|
||||
this.valueKey = this
|
||||
.metadata
|
||||
.valuesForHints(['range'])[0].key;
|
||||
this.unsubscribe = this.openmct
|
||||
.telemetry
|
||||
.subscribe(domainObject, this.updateValue.bind(this), {});
|
||||
this.openmct
|
||||
.telemetry
|
||||
.request(domainObject, {strategy: 'latest'})
|
||||
.then((values) => values.forEach(this.updateValue));
|
||||
}
|
||||
},
|
||||
computed: {
|
||||
},
|
||||
mounted() {
|
||||
this.composition.on('add', this.subscribe);
|
||||
this.composition.load();
|
||||
},
|
||||
destroyed() {
|
||||
this.composition.off('add', this.subscribe);
|
||||
this.unsubscribe();
|
||||
}
|
||||
}
|
||||
</script>
|
58
src/plugins/bignumbers/plugin.js
Normal file
58
src/plugins/bignumbers/plugin.js
Normal file
@ -0,0 +1,58 @@
|
||||
/*****************************************************************************
|
||||
* 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.
|
||||
*****************************************************************************/
|
||||
|
||||
define([
|
||||
'./bignumbers'
|
||||
], function (
|
||||
Bignumbers
|
||||
) {
|
||||
return function plugin() {
|
||||
return function install(openmct) {
|
||||
openmct.objectViews.addProvider(new Bignumbers(openmct));
|
||||
|
||||
openmct.types.addType('bignumbers', {
|
||||
name: "Big Numbers",
|
||||
creatable: true,
|
||||
description: "Display the value of a telemetry element with units in a stylized numeric view.",
|
||||
cssClass: 'icon-telemetry',
|
||||
initialize(domainObject) {
|
||||
domainObject.composition = [];
|
||||
domainObject.configuration = {
|
||||
units: ''
|
||||
};
|
||||
},
|
||||
form: [
|
||||
{
|
||||
name: "Units",
|
||||
control: "textfield",
|
||||
cssClass: "",
|
||||
key: "units",
|
||||
property: [
|
||||
"configuration",
|
||||
"units"
|
||||
]
|
||||
}
|
||||
]
|
||||
});
|
||||
};
|
||||
};
|
||||
});
|
202
src/plugins/gauge/components/gaugeRadial.vue
Normal file
202
src/plugins/gauge/components/gaugeRadial.vue
Normal file
@ -0,0 +1,202 @@
|
||||
<template>
|
||||
<div class="c-gauge">
|
||||
<div class="c-gauge__wrapper">
|
||||
<svg class="c-gauge__range" viewBox="0 0 512 512">
|
||||
<text class="c-gauge__curval" transform="translate(256 310)" text-anchor="middle">{{ this.curVal }}</text>
|
||||
<text font-size="35" transform="translate(105 455) rotate(-45)"
|
||||
v-if="displayMinMax">{{ this.rangeLow }}</text>
|
||||
<text font-size="35" transform="translate(407 455) rotate(45)" text-anchor="end"
|
||||
v-if="displayMinMax">{{ this.rangeHigh }}</text>
|
||||
</svg>
|
||||
|
||||
<div class="c-dial">
|
||||
<svg class="c-dial__bg" viewBox="0 0 512 512">
|
||||
<g>
|
||||
<path d="M256,0C114.6,0,0,114.6,0,256S114.6,512,256,512,512,397.4,512,256,397.4,0,256,0Zm0,412A156,156,0,1,1,412,256,155.9,155.9,0,0,1,256,412Z"/>
|
||||
</g>
|
||||
</svg>
|
||||
|
||||
<svg class="c-dial__limit" viewBox="0 0 512 512"
|
||||
v-if="degLimit < 270"
|
||||
:class="{
|
||||
'c-limit-clip--90': this.degLimit > 90,
|
||||
'c-limit-clip--180': this.degLimit >= 180
|
||||
}">
|
||||
<path d="M100,256A156,156,0,1,1,366.3,366.3L437,437a255.2,255.2,0,0,0,75-181C512,114.6,397.4,0,256,0S0,114.6,0,256A255.2,255.2,0,0,0,75,437l70.7-70.7A155.5,155.5,0,0,1,100,256Z"
|
||||
:style="`transform: rotate(${this.degLimit}deg)`"/>
|
||||
</svg>
|
||||
|
||||
<svg class="c-dial__value" viewBox="0 0 512 512"
|
||||
v-if="this.degValue > 0"
|
||||
:class="{
|
||||
'c-dial-clip--90': this.degValue < 90,
|
||||
'c-dial-clip--180': this.degValue >= 90 && this.degValue < 180
|
||||
}">
|
||||
<path d="M256,31A224.3,224.3,0,0,0,98.3,95.5l48.4,49.2a156,156,0,1,1-1,221.6L96.9,415.1A224.4,224.4,0,0,0,256,481c124.3,0,225-100.7,225-225S380.3,31,256,31Z"
|
||||
:style="`transform: rotate(${this.degValue}deg)`"/>
|
||||
</svg>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<style lang="scss">
|
||||
@import "~styles/sass-base";
|
||||
|
||||
.c-gauge {
|
||||
@include abs();
|
||||
overflow: hidden;
|
||||
|
||||
&__wrapper {
|
||||
position: absolute;
|
||||
width: 100%;
|
||||
padding-bottom: 100%;
|
||||
overflow: hidden;
|
||||
}
|
||||
|
||||
&__value {
|
||||
position: absolute;
|
||||
top: 50%; left: 50%;
|
||||
transform: translate(-50%, -50%);
|
||||
font-size: 3vw;
|
||||
}
|
||||
|
||||
&__range {
|
||||
$o: 21%;
|
||||
position: absolute;
|
||||
fill: rgba(#fff, 0.8);
|
||||
}
|
||||
|
||||
&__curval {
|
||||
font-family: $heroFont;
|
||||
font-size: 170px;
|
||||
}
|
||||
}
|
||||
|
||||
.c-dial {
|
||||
// Dial elements
|
||||
@include abs();
|
||||
clip-path: polygon(0 0, 100% 0, 100% 100%, 50% 50%, 0 100%);
|
||||
|
||||
svg,
|
||||
&__ticks,
|
||||
&__bg,
|
||||
&__limit,
|
||||
&__value {
|
||||
@include abs();
|
||||
}
|
||||
|
||||
svg {
|
||||
path {
|
||||
transform-origin: center;
|
||||
}
|
||||
}
|
||||
|
||||
&__limit {
|
||||
&.c-limit-clip--90 {
|
||||
clip-path: polygon(0 0, 100% 0, 100% 100%);
|
||||
}
|
||||
|
||||
&.c-limit-clip--180 {
|
||||
clip-path: polygon(100% 0, 100% 100%, 0 100%);
|
||||
}
|
||||
|
||||
path {
|
||||
fill: rgba(orange, 0.4);
|
||||
}
|
||||
}
|
||||
|
||||
&__value {
|
||||
&.c-dial-clip--90 {
|
||||
clip-path: polygon(0 0, 50% 50%, 0 100%);
|
||||
}
|
||||
|
||||
&.c-dial-clip--180 {
|
||||
clip-path: polygon(0 0, 100% 0, 0 100%);
|
||||
}
|
||||
|
||||
path {
|
||||
fill: rgba(#fff, 0.8);
|
||||
}
|
||||
}
|
||||
|
||||
&__bg {
|
||||
g {
|
||||
fill: rgba(#fff, 0.1);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
</style>
|
||||
|
||||
<script>
|
||||
export default {
|
||||
name: "gaugeRadial",
|
||||
inject: ['openmct', 'domainObject', 'composition'],
|
||||
data: function () {
|
||||
let config = this.domainObject.configuration,
|
||||
rangeLow = config.min,
|
||||
rangeHigh = config.max,
|
||||
displayMinMax = config.displayMinMax,
|
||||
limit = config.limit,
|
||||
decimals = config.decimals;
|
||||
|
||||
return {
|
||||
rangeLow,
|
||||
rangeHigh,
|
||||
displayMinMax: displayMinMax.indexOf('Yes') !== -1,
|
||||
limit1: limit,
|
||||
decimals,
|
||||
curVal: 0
|
||||
}
|
||||
},
|
||||
methods: {
|
||||
round: function(val, decimals) {
|
||||
let precision = Math.pow(10, decimals);
|
||||
return Math.round(val * precision)/precision;
|
||||
},
|
||||
valToPercent: function(vValue) {
|
||||
// Don't let the current value exceed the high range, or the dial won't display right
|
||||
if (vValue >= this.rangeHigh) { return 100; }
|
||||
return ((vValue - this.rangeLow) / (this.rangeHigh - this.rangeLow)) * 100;
|
||||
},
|
||||
percentToDegrees: function(vPercent) {
|
||||
return this.round((vPercent/100)*270, 2);
|
||||
},
|
||||
updateValue(datum) {
|
||||
this.curVal = this.round(this.formats[this.valueKey].format(datum), this.decimals);
|
||||
},
|
||||
subscribe(domainObject) {
|
||||
this.metadata = this.openmct.telemetry.getMetadata(domainObject);
|
||||
this.formats = this.openmct.telemetry.getFormatMap(this.metadata);
|
||||
|
||||
this.valueKey = this
|
||||
.metadata
|
||||
.valuesForHints(['range'])[0].key;
|
||||
this.unsubscribe = this.openmct
|
||||
.telemetry
|
||||
.subscribe(domainObject, this.updateValue.bind(this), {});
|
||||
this.openmct
|
||||
.telemetry
|
||||
.request(domainObject, {strategy: 'latest'})
|
||||
.then((values) => values.forEach(this.updateValue));
|
||||
}
|
||||
},
|
||||
computed: {
|
||||
degValue: function() {
|
||||
return this.percentToDegrees(this.valToPercent(this.curVal));
|
||||
},
|
||||
degLimit: function() {
|
||||
return this.percentToDegrees(this.valToPercent(this.limit1));
|
||||
}
|
||||
},
|
||||
mounted() {
|
||||
this.composition.on('add', this.subscribe);
|
||||
this.composition.load();
|
||||
},
|
||||
destroyed() {
|
||||
this.composition.off('add', this.subscribe);
|
||||
this.unsubscribe();
|
||||
}
|
||||
}
|
||||
</script>
|
71
src/plugins/gauge/gauge.js
Normal file
71
src/plugins/gauge/gauge.js
Normal file
@ -0,0 +1,71 @@
|
||||
/*****************************************************************************
|
||||
* 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.
|
||||
*****************************************************************************/
|
||||
|
||||
define([
|
||||
'./components/gaugeRadial.vue',
|
||||
'vue'
|
||||
], function (
|
||||
GaugeComponent,
|
||||
Vue
|
||||
) {
|
||||
function Gauge(openmct) {
|
||||
return {
|
||||
key: 'gauge',
|
||||
name: 'Gauge',
|
||||
cssClass: 'icon-gauge',
|
||||
canView: function (domainObject) {
|
||||
return domainObject.type === 'gauge';
|
||||
},
|
||||
canEdit: function (domainObject) {
|
||||
return domainObject.type === 'gauge';
|
||||
},
|
||||
view: function (domainObject) {
|
||||
let component;
|
||||
|
||||
return {
|
||||
show: function (element) {
|
||||
component = new Vue({
|
||||
components: {
|
||||
GaugeComponent: GaugeComponent.default
|
||||
},
|
||||
provide: {
|
||||
openmct,
|
||||
domainObject,
|
||||
composition: openmct.composition.get(domainObject)
|
||||
},
|
||||
el: element,
|
||||
template: '<gauge-component></gauge-component>'
|
||||
});
|
||||
},
|
||||
destroy: function (element) {
|
||||
component.$destroy();
|
||||
component = undefined;
|
||||
}
|
||||
};
|
||||
},
|
||||
priority: function () {
|
||||
return 1;
|
||||
}
|
||||
};
|
||||
}
|
||||
return Gauge;
|
||||
});
|
102
src/plugins/gauge/plugin.js
Normal file
102
src/plugins/gauge/plugin.js
Normal file
@ -0,0 +1,102 @@
|
||||
/*****************************************************************************
|
||||
* 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.
|
||||
*****************************************************************************/
|
||||
|
||||
define([
|
||||
'./gauge'
|
||||
], function (
|
||||
Gauge
|
||||
) {
|
||||
return function plugin() {
|
||||
return function install(openmct) {
|
||||
openmct.objectViews.addProvider(new Gauge(openmct));
|
||||
|
||||
openmct.types.addType('gauge', {
|
||||
name: "Gauge",
|
||||
creatable: true,
|
||||
description: "Graphically visualize a telemetry element's current value between a minimum and maximum.",
|
||||
cssClass: 'icon-gauge',
|
||||
initialize(domainObject) {
|
||||
domainObject.composition = [];
|
||||
domainObject.configuration = {
|
||||
min: 0,
|
||||
max: 100,
|
||||
displayMinMax: 'Yes',
|
||||
limit: 90,
|
||||
decimals: 1
|
||||
};
|
||||
},
|
||||
form: [
|
||||
{
|
||||
name: "Minimum Value",
|
||||
control: "numberfield",
|
||||
cssClass: "l-input-sm l-numeric",
|
||||
key: "min",
|
||||
property: [
|
||||
"configuration",
|
||||
"min"
|
||||
]
|
||||
},
|
||||
{
|
||||
name: "Maximum Value",
|
||||
control: "numberfield",
|
||||
cssClass: "l-input-sm l-numeric",
|
||||
key: "max",
|
||||
property: [
|
||||
"configuration",
|
||||
"max"
|
||||
]
|
||||
},
|
||||
{
|
||||
name: "Display Min/Max",
|
||||
control: "textfield",
|
||||
cssClass: "l-input-sm",
|
||||
key: "displayMinMax",
|
||||
property: [
|
||||
"configuration",
|
||||
"displayMinMax"
|
||||
]
|
||||
},
|
||||
{
|
||||
name: "Limit",
|
||||
control: "numberfield",
|
||||
cssClass: "l-input-sm l-numeric",
|
||||
key: "min",
|
||||
property: [
|
||||
"configuration",
|
||||
"limit"
|
||||
]
|
||||
},
|
||||
{
|
||||
name: "Decimals",
|
||||
control: "numberfield",
|
||||
cssClass: "l-input-sm l-numeric",
|
||||
key: "decimals",
|
||||
property: [
|
||||
"configuration",
|
||||
"decimals"
|
||||
]
|
||||
}
|
||||
]
|
||||
});
|
||||
};
|
||||
};
|
||||
});
|
@ -44,7 +44,9 @@ define([
|
||||
'./filters/plugin',
|
||||
'./objectMigration/plugin',
|
||||
'./goToOriginalAction/plugin',
|
||||
'./clearData/plugin'
|
||||
'./clearData/plugin',
|
||||
'./gauge/plugin',
|
||||
'./bignumbers/plugin'
|
||||
], function (
|
||||
_,
|
||||
UTCTimeSystem,
|
||||
@ -69,7 +71,9 @@ define([
|
||||
Filters,
|
||||
ObjectMigration,
|
||||
GoToOriginalAction,
|
||||
ClearData
|
||||
ClearData,
|
||||
Gauge,
|
||||
Bignumbers
|
||||
) {
|
||||
var bundleMap = {
|
||||
LocalStorage: 'platform/persistence/local',
|
||||
@ -101,7 +105,6 @@ define([
|
||||
* to exclusively.
|
||||
*/
|
||||
plugins.AutoflowView = AutoflowPlugin;
|
||||
|
||||
plugins.Conductor = TimeConductorPlugin.default;
|
||||
|
||||
plugins.CouchDB = function (url) {
|
||||
@ -169,6 +172,8 @@ define([
|
||||
plugins.ObjectMigration = ObjectMigration.default;
|
||||
plugins.GoToOriginalAction = GoToOriginalAction.default;
|
||||
plugins.ClearData = ClearData;
|
||||
plugins.Gauge = Gauge;
|
||||
plugins.Bignumbers = Bignumbers;
|
||||
|
||||
return plugins;
|
||||
});
|
||||
|
@ -36,9 +36,10 @@ $bodyFont: 'Chakra Petch', sans-serif;
|
||||
|
||||
@mixin headerFont($size: 1em) {
|
||||
font-family: $headerFont;
|
||||
font-size: $size * 0.8; // This font is comparatively large, so reduce it a bit
|
||||
font-size: $size;
|
||||
line-height: $size;
|
||||
text-transform: uppercase;
|
||||
word-spacing: 0.25em;
|
||||
word-spacing: 0.4em;
|
||||
}
|
||||
|
||||
@mixin bodyFont($size: 1em) {
|
||||
@ -68,12 +69,15 @@ $shdwBtns: rgba(black, 0.2) 0 1px 2px;
|
||||
$shdwBtnsOverlay: rgba(black, 0.5) 0 1px 5px;
|
||||
|
||||
// Base colors
|
||||
$colorBodyBg: #393939;
|
||||
$colorBodyBg: #000000;
|
||||
$colorBodyFg: #ccc;
|
||||
$colorBodyFgEm: #fff;
|
||||
$colorGenBg: #222;
|
||||
$colorHeadBg: #262626;
|
||||
$colorHeadBg: transparent;
|
||||
$colorHeadFg: $colorBodyFg;
|
||||
$colorStatusBarBg: $colorHeadBg;
|
||||
$colorStatusBarFg: rgba(white, 0.5);
|
||||
$colorStatusBarFgHov: #aaa;
|
||||
$colorKey: #0099cc;
|
||||
$colorKeyFg: #fff;
|
||||
$colorKeyHov: #26d8ff;
|
||||
@ -185,7 +189,7 @@ $colorIconAliasForKeyFilter: #aaa;
|
||||
$colorTabsHolderBg: rgba(black, 0.2);
|
||||
|
||||
// Buttons and Controls
|
||||
$colorBtnBg: pullForward($colorBodyBg, 10%);
|
||||
$colorBtnBg: pullForward($colorBodyBg, 30%);
|
||||
$colorBtnBgHov: pullForward($colorBtnBg, 10%);
|
||||
$colorBtnFg: pullForward($colorBodyFg, 10%);
|
||||
$colorBtnReverseFg: pullForward($colorBtnFg, 10%);
|
||||
|
@ -42,6 +42,31 @@ $bodyFont: $heroFont;
|
||||
font-size: $size;
|
||||
}
|
||||
|
||||
// FONTS
|
||||
@import url('https://fonts.googleapis.com/css?family=Chakra+Petch:400,600,700|Michroma|Teko:400,700');
|
||||
|
||||
$heroFont: "Helvetica Neue", Helvetica, Arial, sans-serif;
|
||||
$headerFont: $heroFont;
|
||||
$bodyFont: $heroFont;
|
||||
|
||||
@mixin heroFont($size: 1em) {
|
||||
$mult: 1;
|
||||
font-family: $heroFont;
|
||||
font-size: $size * $mult;
|
||||
}
|
||||
|
||||
@mixin headerFont($size: 1em) {
|
||||
$mult: 1;
|
||||
font-family: $headerFont;
|
||||
font-size: $size * $mult;
|
||||
}
|
||||
|
||||
@mixin bodyFont($size: 1em) {
|
||||
$mult: 1;
|
||||
font-family: $bodyFont;
|
||||
font-size: $size * $mult;
|
||||
}
|
||||
|
||||
// Functions
|
||||
@function buttonBg($c: $colorBtnBg) {
|
||||
@return $c;
|
||||
|
@ -50,14 +50,14 @@
|
||||
}
|
||||
|
||||
/************************** EFFECTS */
|
||||
@mixin pulse($animName: pulse, $dur: 500ms, $iteration: infinite, $opacity0: 0.5, $opacity100: 1) {
|
||||
@keyframes pulse {
|
||||
0% { opacity: $opacity0; }
|
||||
100% { opacity: $opacity100; }
|
||||
@mixin pulse($animName: 'pulse', $dur: 500ms, $iteration: infinite, $prop: opacity, $val0: 0, $val100: 1, $direction: alternate) {
|
||||
@keyframes #{$animName} {
|
||||
0% { #{$prop}: $val0; }
|
||||
100% { #{$prop}: $val100; }
|
||||
}
|
||||
animation-name: $animName;
|
||||
animation-duration: $dur;
|
||||
animation-direction: alternate;
|
||||
animation-direction: $direction;
|
||||
animation-iteration-count: $iteration;
|
||||
animation-timing-function: ease-in-out;
|
||||
}
|
||||
|
447
src/styles-new/_movie-maelstrom.scss
Normal file
447
src/styles-new/_movie-maelstrom.scss
Normal file
@ -0,0 +1,447 @@
|
||||
/**************************************************** CONSTANTS, MIXINS */
|
||||
$bgKey: #222632;
|
||||
$redKeyBg: #990000;
|
||||
$redKeyBrdr: #ff0000;
|
||||
$redKeyFg: rgba(white, 0.8);
|
||||
$ylwKeyBg: #cc6b36;
|
||||
$ylwKeyBrdr: #ffbf1a;
|
||||
$ylwKeyFg: rgba(white, 0.8);
|
||||
|
||||
@mixin widgetOk() {
|
||||
background-color: #bbb !important;
|
||||
border-color: #fff !important;
|
||||
color: #333 !important;
|
||||
}
|
||||
|
||||
@mixin widgetRed() {
|
||||
background-color: $redKeyBg !important;
|
||||
border-color: $redKeyBrdr !important;
|
||||
color: $redKeyFg !important;
|
||||
}
|
||||
|
||||
@mixin widgetYellow() {
|
||||
$c: $ylwKeyFg;
|
||||
background-color: $ylwKeyBg !important;
|
||||
border-color: $ylwKeyBrdr !important;
|
||||
color: $ylwKeyFg !important;
|
||||
}
|
||||
|
||||
/**************************************************** OVERRIDES */
|
||||
body {
|
||||
font-size: 1em;
|
||||
}
|
||||
|
||||
.c-telemetry-view__value {
|
||||
justify-content: center;
|
||||
&[class*='is-limit'] {
|
||||
background: transparent !important;
|
||||
color: inherit !important;
|
||||
&:before { display: none; }
|
||||
}
|
||||
}
|
||||
|
||||
/**************************************************** CONVENIENCE */
|
||||
.u-inspectable[s-selected] {
|
||||
border: none !important;
|
||||
}
|
||||
|
||||
.c-table.c-telemetry-table {
|
||||
font-size: 0.7em;
|
||||
}
|
||||
|
||||
.widget-rule-content .t-rule-message-input {
|
||||
width: 100%;
|
||||
}
|
||||
|
||||
/**************************************************** TIME CONDUCTOR */
|
||||
.c-conductor {
|
||||
&__controls {
|
||||
display: none !important;
|
||||
}
|
||||
|
||||
&:hover {
|
||||
.c-conductor__controls { display: flex !important; }
|
||||
}
|
||||
|
||||
[class*='__label'] {
|
||||
display: none;
|
||||
}
|
||||
|
||||
&__end-fixed {
|
||||
display: none;
|
||||
}
|
||||
|
||||
&__end-delta {
|
||||
&:after {
|
||||
content: '';
|
||||
display: block;
|
||||
background: url('../ui/layout/assets/images/logo-app.svg') center no-repeat;
|
||||
background-size: contain;
|
||||
width: 100px;
|
||||
height: 24px;
|
||||
}
|
||||
}
|
||||
|
||||
&-input {
|
||||
input {
|
||||
&.c-input--datetime,
|
||||
&.c-input--hrs-min-sec {
|
||||
color: $colorTime;
|
||||
width: 200px;
|
||||
}
|
||||
|
||||
&.c-input--hrs-min-sec {
|
||||
width: 80px;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/**************************************************** MAIN LAYOUT */
|
||||
.l-shell {
|
||||
&:not(.is-editing) {
|
||||
.l-shell__head,
|
||||
.l-shell__main-view-browse-bar {
|
||||
background: none !important;
|
||||
height: $interiorMargin;
|
||||
overflow: hidden;
|
||||
padding: 0 !important;
|
||||
position: absolute;
|
||||
width: 30%;
|
||||
z-index: 100;
|
||||
|
||||
* { opacity: 0; }
|
||||
|
||||
&:hover {
|
||||
background: #666 !important;
|
||||
height: auto;
|
||||
overflow: visible;
|
||||
padding: $interiorMargin !important;
|
||||
|
||||
* { opacity: 1; }
|
||||
}
|
||||
}
|
||||
|
||||
.l-shell__pane-main .l-pane__contents > * + * {
|
||||
margin-top: 0;
|
||||
}
|
||||
|
||||
.l-shell__main-container {
|
||||
margin-top: 0 !important;
|
||||
}
|
||||
}
|
||||
|
||||
.l-shell__main-view-browse-bar {
|
||||
top: -3px; right: 0;
|
||||
}
|
||||
|
||||
&__main > .l-pane {
|
||||
padding-left: $interiorMargin !important;
|
||||
padding-right: $interiorMargin !important;
|
||||
}
|
||||
|
||||
&__status { display: none !important; }
|
||||
}
|
||||
|
||||
.l-pane {
|
||||
&__contents {
|
||||
overflow: visible !important;
|
||||
}
|
||||
|
||||
&--collapsed {
|
||||
$d: 5px;
|
||||
flex-basis: $d !important;
|
||||
min-width: $d !important;
|
||||
min-height: $d !important;
|
||||
|
||||
.l-pane__label {
|
||||
display: none !important;
|
||||
}
|
||||
|
||||
.l-pane__collapse-button {
|
||||
&:before { display: none !important; }
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/**************************************************** STYLING BY TITLE */
|
||||
*[title*='font-euro'] {
|
||||
@include headerFont();
|
||||
}
|
||||
|
||||
*[title*='key-widget'] {
|
||||
font-size: 24px;
|
||||
}
|
||||
|
||||
*[title*='alert-red'] {
|
||||
.c-sw__icon {
|
||||
color: red !important;
|
||||
}
|
||||
}
|
||||
|
||||
*[title*='alert-yellow'] {
|
||||
.c-sw__icon {
|
||||
color: $ylwKeyBg !important;
|
||||
}
|
||||
}
|
||||
|
||||
*[title*='widget-ok'] {
|
||||
@include widgetOk();
|
||||
}
|
||||
|
||||
*[title*='widget-yellow'] {
|
||||
@include widgetYellow();
|
||||
}
|
||||
|
||||
*[title*='widget-red'] {
|
||||
@include widgetRed();
|
||||
}
|
||||
|
||||
*[title*='pulse-slow'] {
|
||||
@include pulse($animName: pulseSlow, $dur: 1000ms, $prop: filter, $val0: brightness(1.2), $val100: brightness(0.6), $direction: normal);
|
||||
.c-sw__icon {
|
||||
@include pulse($animName: pulseWarningIcon, $dur: 500ms, $prop: opacity, $val0: 0.1, $val100: 1, $direction: normal);
|
||||
}
|
||||
}
|
||||
|
||||
*[title*='pulse-fast'] {
|
||||
@include pulse($animName: pulseSlow, $dur: 250ms, $prop: filter, $val0: brightness(1.5), $val100: brightness(0.9), $direction: normal);
|
||||
}
|
||||
|
||||
*[title*='pulse-warning'] {
|
||||
@include pulse($animName: pulseWarning, $dur: 1500ms, $prop: filter, $val0: brightness(1.2), $val100: brightness(0.7), $direction: normal);
|
||||
}
|
||||
|
||||
*[title*='Bg Widget'] {
|
||||
// Widgets that provide a flashing red bg for components
|
||||
.c-summary-widget {
|
||||
$b: 5px;
|
||||
border: none !important;
|
||||
border-radius: $b * 4;
|
||||
&[title*='widget-yellow'] {
|
||||
opacity: 0.3;
|
||||
box-shadow: $ylwKeyBg 0px 0px $b $b;
|
||||
}
|
||||
|
||||
&[title*='widget-red'] {
|
||||
opacity: 0.4;
|
||||
box-shadow: $redKeyBg 0px 0px $b $b;
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
/**************************************************** SECTIONS */
|
||||
/************* SYS OVW WIDGETS */
|
||||
*[title*='Sys Ovw'] {
|
||||
*[title*='Widget'] {
|
||||
font-size: 1.4em;
|
||||
}
|
||||
|
||||
*[title*='sys-ok'] {
|
||||
@include widgetOk();
|
||||
}
|
||||
|
||||
*[title*='post-ring'] {
|
||||
@include widgetRed();
|
||||
}
|
||||
}
|
||||
|
||||
/************* ATTITUDE */
|
||||
*[title*='Attitude'] {
|
||||
*[title*='RPY'] {
|
||||
background: black;
|
||||
padding: 3px;
|
||||
border-radius: 5px;
|
||||
|
||||
.l-control-bar {
|
||||
display: none;
|
||||
}
|
||||
|
||||
.l-view-section {
|
||||
top: 0;
|
||||
}
|
||||
|
||||
.gl-plot-axis-area.gl-plot-y {
|
||||
width: 22px !important;
|
||||
}
|
||||
|
||||
.gl-plot-wrapper-display-area-and-x-axis {
|
||||
left: 24px !important;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/************* VELOCITY COMPONENT */
|
||||
*[title*='-not-attained'] {
|
||||
@include widgetRed();
|
||||
}
|
||||
|
||||
/************* ACCELERATION COMPONENT */
|
||||
|
||||
/************* BOOST PHASE WIDGETS */
|
||||
*[title*='boost-phase-widget'] {
|
||||
.c-summary-widget {
|
||||
border-width: 2px;
|
||||
padding: 5px 0;
|
||||
|
||||
&:before,
|
||||
&:after {
|
||||
content: '';
|
||||
display: block;
|
||||
position: absolute;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
*[title*='boost-phase-widget-left'] {
|
||||
.c-summary-widget {
|
||||
$c: #999;
|
||||
align-items: start;
|
||||
background: rgba($c, 0.1) !important;
|
||||
border-left: none;
|
||||
border-top-left-radius: 0;
|
||||
border-bottom-left-radius: 0;
|
||||
|
||||
&:before,
|
||||
&:after {
|
||||
top: 25px; right: 0; bottom: 3%; left: 40%;
|
||||
}
|
||||
|
||||
&:before {
|
||||
@include bgStripes($c: $c, $a: 0.1, $bgsize: 20px, $angle: 0deg);
|
||||
}
|
||||
|
||||
&:after {
|
||||
@include bgStripes($c: $c, $a: 0.1, $bgsize: 63px, $angle: 0deg);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
*[title*='boost-phase-widget-right'] {
|
||||
.c-summary-widget {
|
||||
$c: #555;
|
||||
border-right: none;
|
||||
border-top-right-radius: 0;
|
||||
border-bottom-right-radius: 0;
|
||||
|
||||
&:before {
|
||||
//background: deeppink;
|
||||
@include bgTicks($c: $c, $repeatDir: 'y');
|
||||
background-size: 100% 45px;
|
||||
top: 0px; right: 0; bottom: 0; left: 2px;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
*[title*='Boost Phase Ring Widgets'] {
|
||||
*[title*='Ring Widget'] {
|
||||
//filter: saturate(0.7);
|
||||
}
|
||||
|
||||
*[title*='ring-ok'] {
|
||||
@include widgetOk();
|
||||
}
|
||||
|
||||
*[title*='bad-ring'] {
|
||||
@include widgetRed();
|
||||
}
|
||||
|
||||
*[title*='post-ring'] {
|
||||
@include widgetYellow();
|
||||
}
|
||||
}
|
||||
|
||||
/************* BOTTOM SYSTEM WIDGETS */
|
||||
*[title*='system-widget'] {
|
||||
background: $bgKey !important;
|
||||
border-width: 2px !important;
|
||||
justify-content: left !important;
|
||||
|
||||
.c-sw__icon {
|
||||
$m: $interiorMarginSm;
|
||||
position: absolute;
|
||||
bottom: $m;
|
||||
right: $m;
|
||||
}
|
||||
}
|
||||
|
||||
*[title*="Bottom System Widgets"] {
|
||||
transform: translateY(-2px);
|
||||
}
|
||||
|
||||
*[title*='system-widget--hero'] {
|
||||
// Current "tab" in interface
|
||||
border-top-left-radius: 0;
|
||||
border-top-right-radius: 0;
|
||||
border-top: none;
|
||||
}
|
||||
|
||||
*[title*='system-widget--subtle'] {
|
||||
opacity: 0.7;
|
||||
}
|
||||
|
||||
/**************************************************** INDIVIDUAL ELEMENTS */
|
||||
/************* PASSENGER NOTICE */
|
||||
*[title*='passenger-notice'] {
|
||||
font-size: 1.4em;
|
||||
.c-sw__icon {
|
||||
font-size: 2.1em;
|
||||
margin-right: $interiorMarginLg;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
*[title*='pulse-passenger-notice--nominal'] {
|
||||
@include pulse($animName: pulseNominal, $dur: 1000ms, $prop: filter, $val0: brightness(1.4), $val100:brightness(1.0), $direction: alternate);
|
||||
}
|
||||
|
||||
*[title*='pulse-passenger-notice--warning'] {
|
||||
@include pulse($animName: pulseWarning, $dur: 750ms, $prop: background-color, $val0: #aa0000, $val100: #340000, $direction: normal);
|
||||
}
|
||||
|
||||
*[title*='Main Console'] {
|
||||
$r: $basicCr;
|
||||
background: $bgKey;
|
||||
border-radius: $r;
|
||||
border-bottom: 2px solid rgb(102,102,102);
|
||||
}
|
||||
|
||||
*[title*='Event Time Str'] {
|
||||
@include heroFont(1.2em);
|
||||
line-height: .8em;
|
||||
}
|
||||
|
||||
|
||||
*[title*="Sys Ovw LAD Table"] {
|
||||
.c-lad-table {
|
||||
tr {
|
||||
background-color: black;
|
||||
color: rgba(white, 0.3);
|
||||
display: block;
|
||||
font-weight: bold;
|
||||
align-items: center;
|
||||
height: 41px;
|
||||
border-radius: 5px;
|
||||
font-size: 0.75em;
|
||||
margin-bottom: 4px;
|
||||
overflow: hidden;
|
||||
padding: 3px;
|
||||
text-transform: uppercase;
|
||||
}
|
||||
thead,
|
||||
tr td:nth-child(1),
|
||||
tr td:nth-child(2) {
|
||||
display: none;
|
||||
}
|
||||
|
||||
td {
|
||||
display: block;
|
||||
width: auto;
|
||||
white-space: normal;
|
||||
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -34,3 +34,5 @@
|
||||
@import "legacy";
|
||||
@import "legacy-plots";
|
||||
@import "legacy-messages";
|
||||
@import "theme-maelstrom";
|
||||
@import "movie-maelstrom";
|
||||
|
@ -26,7 +26,7 @@
|
||||
@import "constants";
|
||||
@import "constants-mobile.scss";
|
||||
//@import "constants-espresso"; // TEMP
|
||||
@import "constants-snow"; // TEMP
|
||||
//@import "constants-maelstrom";
|
||||
//@import "constants-snow"; // TEMP
|
||||
@import "constants-maelstrom";
|
||||
@import "mixins";
|
||||
@import "animations";
|
19
src/styles-new/theme-maelstrom.scss
Normal file
19
src/styles-new/theme-maelstrom.scss
Normal file
@ -0,0 +1,19 @@
|
||||
/************* FRAMES */
|
||||
.c-so-view {
|
||||
&__header {
|
||||
transform: translateY(3px);
|
||||
}
|
||||
|
||||
&__header__name {
|
||||
transform: translateY(-2px);
|
||||
}
|
||||
|
||||
&:not(.c-so-view--no-frame) {
|
||||
$bc: #666;
|
||||
$bLR: 3px solid transparent;
|
||||
$br: 20px;
|
||||
background: none !important;
|
||||
border: none !important;
|
||||
padding: 0 !important;
|
||||
}
|
||||
}
|
Reference in New Issue
Block a user