mirror of
https://github.com/nasa/openmct.git
synced 2025-01-17 02:10:17 +00:00
8847c862fa
* initial telemetry api updates for staleness support * modifying staleness to a subsription style * fixing variable name * debuggin * put the subscribe in the wrong place * stale class for object views * temp cyan border for testing * added staleness to swg, working on stacked plot staleness * WIP: stacked plot staleness * reverting, going a different route * staleness on stacked plots * plot legend staleness * remove debug code * staleness for alphanumerics * lad table and table set staleness * overlay plot staleness * remove debug code * hardened lad staleness functionality fixed plots without composition bug * adding staleness to gauges * renaming telemetry age check functionality so it does not conflict with new staleness functionality * couple one-off fixes here and there, and WIP for condition sets, moving to telemetry tables to facilitate styling of completed components * small fix on lad tables, added staleness functionality to tables * finishing up condition sets * some cleaning up * adding border to condition sets when an item is stale * fixing dub sub * addressing PR comment, moving repeated code to a function * robustified the SWG stalenes provider, little fixes here and there as far as cleaning up listeners and... whatnot * removing debug code * typo fixes * cleanin up debug code * created a simple stalenes mixin for more basic usage in components * more robustification, if a new staleness subscription happens, will now send the current staleness value if we have it, beefed up example stalenes swg provider * beefed up staleness mixin a bit to give it more use * copyright * cleanin up ladtable code * cleanin up ladtable code * cleaning up lad table sets * some minor updates * Closes #6109 - New staleness glyph and font CSS added. * Closes #6109 - Normalized staleness colors as theme constants. - New mixins for staleness application to view elements. - Applied staleness styling to all relevant view elements. - TODO: smoke-test in Show theme. * adding staleness utils helper, mixin and isStale functionalirty for telemtry api * Closes #6109 - Refined style for Snow theme. * need to have one domainObject per stalenes utility * making sure we handle domains correctly while dealing with staleness * couple fixes * moving abort controller logic to a spot where it makes more sense * added some more info for the StalenesProvider interface docs * returning undefinded for ifStale requests with no provider * debuggin * debuggin * missed "isStale" call in condtioncollections * removing debug code and using mixin unsubscribe in gauge * fixing tests * more targeted tree item click Co-authored-by: Charles Hacskaylo <charlesh88@gmail.com> Co-authored-by: Andrew Henry <akhenry@gmail.com> Co-authored-by: Scott Bell <scott@traclabs.com>
498 lines
12 KiB
SCSS
498 lines
12 KiB
SCSS
/*****************************************************************************
|
|
* Open MCT, Copyright (c) 2014-2022, 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.
|
|
*****************************************************************************/
|
|
/******************************* SHELL */
|
|
.l-shell {
|
|
position: absolute;
|
|
top: 0; right: 0; bottom: 0; left: 0;
|
|
display: flex;
|
|
flex-flow: column nowrap;
|
|
overflow: hidden;
|
|
|
|
&__drawer {
|
|
background: $drawerBg;
|
|
display: flex;
|
|
flex-direction: column;
|
|
height: 0;
|
|
min-height: 0;
|
|
max-height: 15%;
|
|
overflow: hidden;
|
|
transition: $transIn;
|
|
|
|
&.is-expanded {
|
|
min-height: 100px;
|
|
}
|
|
}
|
|
|
|
&__pane-tree {
|
|
width: 40%;
|
|
|
|
[class*="collapse-button"] {
|
|
// For mobile, collapse button becomes menu icon
|
|
body.mobile & {
|
|
@include cClickIconButton();
|
|
color: $colorKey !important;
|
|
position: absolute;
|
|
right: -18px;
|
|
top: $interiorMarginSm;
|
|
transform: translateX(100%);
|
|
width: $mobileMenuIconD;
|
|
z-index: 2;
|
|
|
|
&:before {
|
|
content: $glyph-icon-menu-hamburger;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
&__pane-tree,
|
|
&__pane-inspector,
|
|
&__pane-main {
|
|
.l-pane__contents {
|
|
display: flex;
|
|
flex-flow: column nowrap;
|
|
overflow-x: hidden;
|
|
}
|
|
}
|
|
|
|
&__pane-tree,
|
|
&__pane-main {
|
|
.l-pane__contents {
|
|
> * {
|
|
flex: 0 0 auto;
|
|
|
|
+ * {
|
|
margin-top: $interiorMargin;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
&__pane-main {
|
|
.l-pane__header { display: none; }
|
|
}
|
|
|
|
body.mobile & {
|
|
&__pane-main,
|
|
&__pane-tree {
|
|
padding: $interiorMarginLg;
|
|
}
|
|
|
|
&__pane-tree {
|
|
background: linear-gradient(90deg, transparent 70%, rgba(black, 0.2) 99%, rgba(black, 0.3));
|
|
|
|
.l-pane__header {
|
|
// Hide all buttons except the collapse button
|
|
> :not(.l-pane__collapse-button) {
|
|
display: none;
|
|
}
|
|
}
|
|
|
|
[class*="expand-button"] {
|
|
display: none;
|
|
}
|
|
|
|
&[class*="--collapsed"] {
|
|
[class*="collapse-button"] {
|
|
right: -8px;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
body.phone.portrait & {
|
|
&__pane-tree {
|
|
width: calc(100% - #{$mobileMenuIconD + (2 * nth($shellPanePad, 2))});
|
|
|
|
+ .l-pane {
|
|
// Hide pane-main when this pane is expanded
|
|
opacity: 0;
|
|
pointer-events: none;
|
|
}
|
|
|
|
&[class*="--collapsed"] + .l-pane {
|
|
// Show pane-main when tree is collapsed
|
|
opacity: 1;
|
|
pointer-events: inherit;
|
|
transition: opacity 250ms ease 250ms;
|
|
}
|
|
}
|
|
}
|
|
|
|
&__head,
|
|
&__pane-inspector {
|
|
body.mobile & {
|
|
display: none;
|
|
}
|
|
}
|
|
|
|
&__head,
|
|
&__status {
|
|
flex: 0 0 auto;
|
|
display: flex;
|
|
}
|
|
|
|
/******************************* HEAD */
|
|
&__main-view-browse-bar {
|
|
flex: 0 0 auto;
|
|
margin-bottom: $interiorMargin; // Needs some additional visual separation
|
|
}
|
|
|
|
body.mobile & .l-shell__main-view-browse-bar {
|
|
margin-left: $mobileMenuIconD; // Make room for the hamburger!
|
|
.c-button[class*='__actions__edit'] {
|
|
display: none; // Hide the main view edit button when in mobile context
|
|
}
|
|
}
|
|
|
|
&__head {
|
|
align-items: center;
|
|
background: $colorHeadBg;
|
|
justify-content: space-between;
|
|
padding: $interiorMargin $interiorMargin + 2;
|
|
|
|
> [class*="__"] + [class*="__"] {
|
|
margin-left: $interiorMargin;
|
|
}
|
|
|
|
.l-shell__head__collapse-button {
|
|
color: $colorBtnMajorBg;
|
|
flex: 0 0 auto;
|
|
font-size: 0.9em;
|
|
|
|
&--collapse {
|
|
&:before {
|
|
content: $glyph-icon-items-collapse;
|
|
}
|
|
}
|
|
|
|
&--expand {
|
|
&:before {
|
|
content: $glyph-icon-items-expand;
|
|
}
|
|
}
|
|
}
|
|
|
|
&-section {
|
|
// Subdivides elements across the head
|
|
display: flex;
|
|
flex: 0 1 auto;
|
|
padding: 0 $interiorMargin;
|
|
}
|
|
|
|
&--expanded {
|
|
.c-indicator__label {
|
|
transition: none !important;
|
|
}
|
|
}
|
|
}
|
|
|
|
&__controls {
|
|
$brdr: 1px solid $colorInteriorBorder;
|
|
border-right: $brdr;
|
|
border-left: $brdr;
|
|
align-items: start;
|
|
}
|
|
|
|
&__create-button,
|
|
&__app-logo {
|
|
flex: 0 0 auto;
|
|
}
|
|
|
|
&__create-button { margin-right: $interiorMarginLg; }
|
|
|
|
&__indicators {
|
|
flex: 1 1 auto;
|
|
flex-wrap: wrap;
|
|
justify-content: flex-end;
|
|
|
|
.c-indicator .label {
|
|
font-size: 0.9em;
|
|
}
|
|
}
|
|
|
|
/******************************* MAIN AREA */
|
|
&__main-container {
|
|
// Wrapper for main views
|
|
display: flex;
|
|
flex-direction: column;
|
|
flex: 1 1 auto !important;
|
|
height: 100%; // Chrome 73 overflow bug fix
|
|
overflow: auto;
|
|
|
|
> * + * {
|
|
margin-top: $interiorMargin;
|
|
}
|
|
|
|
> .c-object-view {
|
|
flex: 1 1 auto;
|
|
overflow: auto;
|
|
}
|
|
}
|
|
|
|
&__tree {
|
|
// Tree component within __pane-tree
|
|
flex: 1 1 auto !important;
|
|
}
|
|
|
|
&__time-conductor {
|
|
border-top: 1px solid $colorInteriorBorder;
|
|
display: flex;
|
|
flex-direction: column;
|
|
padding-top: $interiorMargin;
|
|
|
|
> * + * {
|
|
margin-top: $interiorMargin;
|
|
}
|
|
}
|
|
|
|
&__main {
|
|
> .l-pane {
|
|
padding: nth($shellPanePad, 1) 0;
|
|
}
|
|
}
|
|
|
|
body.desktop & {
|
|
&__main {
|
|
// Top and bottom padding in container that holds tree, __pane-main and Inspector
|
|
padding: nth($shellPanePad, 1) 0;
|
|
min-height: 0;
|
|
|
|
> .l-pane {
|
|
padding-top: 0;
|
|
padding-bottom: 0;
|
|
}
|
|
}
|
|
|
|
&__pane-tree,
|
|
&__pane-inspector {
|
|
max-width: 70%;
|
|
}
|
|
|
|
&__pane-tree {
|
|
width: 100%;
|
|
padding-left: nth($shellPanePad, 2);
|
|
}
|
|
|
|
&__pane-inspector {
|
|
width: 200px;
|
|
padding-right: nth($shellPanePad, 2);
|
|
}
|
|
}
|
|
|
|
&__toolbar {
|
|
// Toolbar in the main shell, used by Display Layouts
|
|
$p: $interiorMargin;
|
|
background: $editUIBaseColor;
|
|
border-radius: $basicCr;
|
|
height: $p + 24px; // Need to standardize the height
|
|
justify-content: space-between;
|
|
padding: $p;
|
|
}
|
|
|
|
&__resizing {
|
|
iframe {
|
|
pointer-events: none;
|
|
}
|
|
}
|
|
}
|
|
|
|
.c-object-view {
|
|
display: block;
|
|
height: 100%;
|
|
overflow: auto;
|
|
|
|
&.is-stale {
|
|
@include isStaleHolder();
|
|
}
|
|
}
|
|
|
|
.is-editing {
|
|
.l-shell__main-container {
|
|
$m: 3px;
|
|
box-shadow: $colorBodyBg 0 0 0 1px, $editUIAreaShdw;
|
|
margin-left: $m;
|
|
margin-right: $m;
|
|
|
|
&[s-selected] {
|
|
// Provide a clearer selection context articulation for the main edit area
|
|
box-shadow: $colorBodyBg 0 0 0 1px, $editUIAreaShdwSelected;
|
|
}
|
|
}
|
|
}
|
|
|
|
/************************** BROWSE BAR */
|
|
.l-browse-bar {
|
|
display: flex;
|
|
align-items: center;
|
|
justify-content: space-between;
|
|
|
|
[class*="__"] {
|
|
// Removes extraneous horizontal white space
|
|
display: inline-flex;
|
|
}
|
|
|
|
> * + * {
|
|
margin-left: $interiorMarginSm;
|
|
}
|
|
|
|
&__start,
|
|
&__end,
|
|
&__actions {
|
|
display: flex;
|
|
align-items: center;
|
|
}
|
|
|
|
&__actions,
|
|
&__end {
|
|
.c-button {
|
|
&[class*='icon-']:before {
|
|
min-width: 1em;
|
|
text-align: center;
|
|
}
|
|
}
|
|
|
|
> * + * {
|
|
margin-left: $interiorMarginSm;
|
|
}
|
|
}
|
|
|
|
&__start {
|
|
flex: 1 1 auto;
|
|
min-width: 0; // Forces interior to compress when pushed on
|
|
|
|
[class*='button'] {
|
|
flex: 0 0 auto;
|
|
}
|
|
}
|
|
|
|
&__end {
|
|
flex: 0 0 auto;
|
|
}
|
|
|
|
&__nav-to-parent-button,
|
|
&__disclosure-button {
|
|
//flex: 0 0 auto;
|
|
}
|
|
|
|
&__nav-to-parent-button {
|
|
// This is an icon-button
|
|
margin-right: $interiorMargin;
|
|
|
|
.is-editing & {
|
|
display: none;
|
|
}
|
|
}
|
|
|
|
&__object-name--w,
|
|
&__object-name {
|
|
flex: 0 1 auto;
|
|
}
|
|
|
|
.c-object-label__name {
|
|
filter: $objectLabelNameFilter;
|
|
}
|
|
|
|
.c-object-label__type-icon {
|
|
opacity: $objectLabelTypeIconOpacity;
|
|
}
|
|
|
|
&__object-name--w {
|
|
@include headerFont(1.5em);
|
|
min-width: 0;
|
|
|
|
.is-status__indicator {
|
|
right: -5px !important;
|
|
top: -4px !important;
|
|
}
|
|
}
|
|
|
|
&__object-details {
|
|
opacity: 0.5;
|
|
}
|
|
}
|
|
|
|
/************************** DRAWER */
|
|
.c-drawer {
|
|
/* New sliding overlay or push element to contain things
|
|
* Designed for mobile and compact desktop scenarios
|
|
* Variations:
|
|
* --overlays: position absolute, overlays neighboring elements
|
|
* --push: position relative, pushs/collapses neighboring elements
|
|
* --align-left, align-top: opens from left or top respectively
|
|
* &.is-expanded: applied when expanded.
|
|
*/
|
|
|
|
transition: $transOut;
|
|
min-height: 0;
|
|
min-width: 0;
|
|
overflow: hidden;
|
|
|
|
&:not(.is-expanded) {
|
|
// When collapsed, hide internal elements
|
|
> * {
|
|
display: none;
|
|
}
|
|
}
|
|
|
|
&.c-drawer--align-left {
|
|
height: 100%;
|
|
}
|
|
|
|
&.c-drawer--align-top {
|
|
// Need anything here?
|
|
}
|
|
|
|
&.c-drawer--overlays {
|
|
position: absolute;
|
|
z-index: 3;
|
|
|
|
&.is-expanded {
|
|
// Height and width must be set per usage
|
|
&.c-drawer--align-left {
|
|
box-shadow: rgba(black, 0.7) 3px 0 20px;
|
|
}
|
|
|
|
&.c-drawer--align-top {
|
|
box-shadow: rgba(black, 0.7) 0 3px 20px;
|
|
}
|
|
}
|
|
}
|
|
|
|
&.c-drawer--push {
|
|
position: relative;
|
|
|
|
&.is-expanded {
|
|
// Height and width must be set per usage
|
|
&.c-drawer--align-left {
|
|
box-shadow: rgba(black, 0.2) 3px 0 20px;
|
|
margin-right: $interiorMarginLg;
|
|
}
|
|
|
|
&.c-drawer--align-top {
|
|
box-shadow: rgba(black, 0.2) 0 3px 20px;
|
|
margin-bottom: $interiorMarginLg; // Not sure this is desired here
|
|
}
|
|
}
|
|
}
|
|
}
|