mirror of
https://github.com/nasa/openmct.git
synced 2025-06-25 18:50:11 +00:00
Compare commits
7 Commits
fix-plot-s
...
clock-comp
Author | SHA1 | Date | |
---|---|---|---|
38c1a981e8 | |||
50944cfed0 | |||
27b236ffe4 | |||
b7e75bcc22 | |||
210a23dfe2 | |||
84bfb9e8cc | |||
fd749253d9 |
@ -1,6 +1,6 @@
|
|||||||
<span class="h-indicator" ng-controller="DialogLaunchController">
|
<span class="h-indicator" ng-controller="DialogLaunchController">
|
||||||
<!-- DO NOT ADD SPACES BETWEEN THE SPANS - IT ADDS WHITE SPACE!! -->
|
<!-- DO NOT ADD SPACES BETWEEN THE SPANS - IT ADDS WHITE SPACE!! -->
|
||||||
<div class="ls-indicator icon-box-with-arrow s-status-available"><span class="label">
|
<div class="c-indicator c-indicator--clickable icon-box-with-arrow s-status-available"><span class="label">
|
||||||
<a ng-click="launchProgress(true)">Known</a>
|
<a ng-click="launchProgress(true)">Known</a>
|
||||||
<a ng-click="launchProgress(false)">Unknown</a>
|
<a ng-click="launchProgress(false)">Unknown</a>
|
||||||
<a ng-click="launchError()">Error</a>
|
<a ng-click="launchError()">Error</a>
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
<span class="h-indicator" ng-controller="NotificationLaunchController">
|
<span class="h-indicator" ng-controller="NotificationLaunchController">
|
||||||
<!-- DO NOT ADD SPACES BETWEEN THE SPANS - IT ADDS WHITE SPACE!! -->
|
<!-- DO NOT ADD SPACES BETWEEN THE SPANS - IT ADDS WHITE SPACE!! -->
|
||||||
<div class="ls-indicator icon-bell s-status-available"><span class="label">
|
<div class="c-indicator c-indicator--clickable icon-bell s-status-available"><span class="label">
|
||||||
<a ng-click="newInfo()">Success</a>
|
<a ng-click="newInfo()">Success</a>
|
||||||
<a ng-click="newError()">Error</a>
|
<a ng-click="newError()">Error</a>
|
||||||
<a ng-click="newAlert()">Alert</a>
|
<a ng-click="newAlert()">Alert</a>
|
||||||
|
@ -87,6 +87,7 @@
|
|||||||
openmct.install(openmct.plugins.Filters(['table', 'telemetry.plot.overlay']));
|
openmct.install(openmct.plugins.Filters(['table', 'telemetry.plot.overlay']));
|
||||||
openmct.install(openmct.plugins.ObjectMigration());
|
openmct.install(openmct.plugins.ObjectMigration());
|
||||||
openmct.install(openmct.plugins.GoToOriginalAction());
|
openmct.install(openmct.plugins.GoToOriginalAction());
|
||||||
|
openmct.install(openmct.plugins.GlobalClearIndicator());
|
||||||
openmct.start();
|
openmct.start();
|
||||||
</script>
|
</script>
|
||||||
</html>
|
</html>
|
||||||
|
@ -20,7 +20,7 @@
|
|||||||
at runtime from the About dialog for additional information.
|
at runtime from the About dialog for additional information.
|
||||||
-->
|
-->
|
||||||
<!-- DO NOT ADD SPACES BETWEEN THE SPANS - IT ADDS WHITE SPACE!! -->
|
<!-- DO NOT ADD SPACES BETWEEN THE SPANS - IT ADDS WHITE SPACE!! -->
|
||||||
<div class="ls-indicator {{ngModel.getCssClass()}}"
|
<div class="c-indicator {{ngModel.getCssClass()}}"
|
||||||
title="{{ngModel.getDescription()}}"
|
title="{{ngModel.getDescription()}}"
|
||||||
ng-show="ngModel.getText().length > 0">
|
ng-show="ngModel.getText().length > 0">
|
||||||
<span class="label">{{ngModel.getText()}}</span>
|
<span class="label">{{ngModel.getText()}}</span>
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
<!-- DO NOT ADD SPACES BETWEEN THE SPANS - IT ADDS WHITE SPACE!! -->
|
<!-- DO NOT ADD SPACES BETWEEN THE SPANS - IT ADDS WHITE SPACE!! -->
|
||||||
<div ng-show="notifications.length > 0" class="ls-indicator s-status-{{highest.severity}} icon-bell"
|
<div ng-show="notifications.length > 0" class="c-indicator c-indicator--clickable s-status-{{highest.severity}} icon-bell"
|
||||||
ng-controller="NotificationIndicatorController">
|
ng-controller="NotificationIndicatorController">
|
||||||
<span class="label">
|
<span class="label">
|
||||||
<a ng-click="showNotificationsList()">
|
<a ng-click="showNotificationsList()">
|
||||||
|
@ -49,7 +49,7 @@ define(
|
|||||||
};
|
};
|
||||||
|
|
||||||
ClockIndicator.prototype.getCssClass = function () {
|
ClockIndicator.prototype.getCssClass = function () {
|
||||||
return "t-indicator-clock icon-clock no-collapse float-right";
|
return "t-indicator-clock icon-clock no-collapse c-indicator--not-clickable";
|
||||||
};
|
};
|
||||||
|
|
||||||
ClockIndicator.prototype.getText = function () {
|
ClockIndicator.prototype.getText = function () {
|
||||||
|
@ -100,7 +100,7 @@ define(
|
|||||||
}
|
}
|
||||||
|
|
||||||
CouchIndicator.prototype.getCssClass = function () {
|
CouchIndicator.prototype.getCssClass = function () {
|
||||||
return "icon-database " + this.state.statusClass;
|
return "c-indicator--clickable icon-database " + this.state.statusClass;
|
||||||
};
|
};
|
||||||
|
|
||||||
CouchIndicator.prototype.getGlyphClass = function () {
|
CouchIndicator.prototype.getGlyphClass = function () {
|
||||||
|
@ -84,7 +84,7 @@ define(
|
|||||||
}
|
}
|
||||||
|
|
||||||
ElasticIndicator.prototype.getCssClass = function () {
|
ElasticIndicator.prototype.getCssClass = function () {
|
||||||
return "icon-database";
|
return "c-indicator--clickable icon-database";
|
||||||
};
|
};
|
||||||
ElasticIndicator.prototype.getGlyphClass = function () {
|
ElasticIndicator.prototype.getGlyphClass = function () {
|
||||||
return this.state.glyphClass;
|
return this.state.glyphClass;
|
||||||
|
@ -41,7 +41,7 @@ define(
|
|||||||
}
|
}
|
||||||
|
|
||||||
LocalStorageIndicator.prototype.getCssClass = function () {
|
LocalStorageIndicator.prototype.getCssClass = function () {
|
||||||
return "icon-database s-status-caution";
|
return "c-indicator--clickable icon-database s-status-caution";
|
||||||
};
|
};
|
||||||
LocalStorageIndicator.prototype.getGlyphClass = function () {
|
LocalStorageIndicator.prototype.getGlyphClass = function () {
|
||||||
return 'caution';
|
return 'caution';
|
||||||
|
@ -1,3 +1,3 @@
|
|||||||
<div class="ls-indicator" title="">
|
<div class="c-indicator c-indicator--clickable c-indicator--simple" title="">
|
||||||
<span class="label indicator-text"></span>
|
<span class="label indicator-text"></span>
|
||||||
</div>
|
</div>
|
||||||
|
@ -0,0 +1,18 @@
|
|||||||
|
<template>
|
||||||
|
<div class="c-indicator c-indicator--clickable icon-session">
|
||||||
|
<span class="label">
|
||||||
|
<button @click="globalClearEmit">Clear All Data</button>
|
||||||
|
</span>
|
||||||
|
</div>
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<script>
|
||||||
|
export default {
|
||||||
|
inject: ['openmct'],
|
||||||
|
methods: {
|
||||||
|
globalClearEmit() {
|
||||||
|
this.openmct.notifications.emit('clear');
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
</script>
|
48
src/plugins/globalClearIndicator/plugin.js
Normal file
48
src/plugins/globalClearIndicator/plugin.js
Normal file
@ -0,0 +1,48 @@
|
|||||||
|
/*****************************************************************************
|
||||||
|
* Open MCT, Copyright (c) 2014-2019, 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/globalClearIndicator.vue',
|
||||||
|
'vue'
|
||||||
|
], function (
|
||||||
|
GlobaClearIndicator,
|
||||||
|
Vue
|
||||||
|
) {
|
||||||
|
return function plugin() {
|
||||||
|
return function install(openmct) {
|
||||||
|
let component = new Vue ({
|
||||||
|
provide: {
|
||||||
|
openmct
|
||||||
|
},
|
||||||
|
components: {
|
||||||
|
GlobalClearIndicator: GlobaClearIndicator.default
|
||||||
|
},
|
||||||
|
template: '<GlobalClearIndicator></GlobalClearIndicator>'
|
||||||
|
}),
|
||||||
|
indicator = {
|
||||||
|
element: component.$mount().$el
|
||||||
|
};
|
||||||
|
|
||||||
|
openmct.indicators.add(indicator);
|
||||||
|
};
|
||||||
|
};
|
||||||
|
});
|
@ -377,6 +377,19 @@ define([
|
|||||||
delete this.unsubscribe;
|
delete this.unsubscribe;
|
||||||
}
|
}
|
||||||
this.fetch();
|
this.fetch();
|
||||||
|
},
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Clears the plot series, unsubscribes and resubscribes
|
||||||
|
* @public
|
||||||
|
*/
|
||||||
|
refresh: function () {
|
||||||
|
this.reset();
|
||||||
|
if (this.unsubscribe) {
|
||||||
|
this.unsubscribe();
|
||||||
|
delete this.unsubscribe;
|
||||||
|
}
|
||||||
|
this.fetch();
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
|
@ -80,6 +80,10 @@ define([
|
|||||||
'configuration.filters',
|
'configuration.filters',
|
||||||
this.updateFiltersAndResubscribe.bind(this)
|
this.updateFiltersAndResubscribe.bind(this)
|
||||||
);
|
);
|
||||||
|
|
||||||
|
this.refresh = this.refresh.bind(this);
|
||||||
|
|
||||||
|
this.openmct.notifications.on('clear', this.refresh);
|
||||||
}
|
}
|
||||||
|
|
||||||
eventHelpers.extend(PlotController.prototype);
|
eventHelpers.extend(PlotController.prototype);
|
||||||
@ -166,6 +170,8 @@ define([
|
|||||||
if (this.filterObserver) {
|
if (this.filterObserver) {
|
||||||
this.filterObserver();
|
this.filterObserver();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
this.openmct.notifications.off('clear', this.refresh);
|
||||||
};
|
};
|
||||||
|
|
||||||
PlotController.prototype.loadMoreData = function (range, purge) {
|
PlotController.prototype.loadMoreData = function (range, purge) {
|
||||||
@ -263,6 +269,12 @@ define([
|
|||||||
});
|
});
|
||||||
};
|
};
|
||||||
|
|
||||||
|
PlotController.prototype.refresh = function (updatedFilters) {
|
||||||
|
this.config.series.forEach(function (series) {
|
||||||
|
series.refresh();
|
||||||
|
});
|
||||||
|
};
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Export view as JPG.
|
* Export view as JPG.
|
||||||
*/
|
*/
|
||||||
|
@ -43,7 +43,8 @@ define([
|
|||||||
'./LADTable/plugin',
|
'./LADTable/plugin',
|
||||||
'./filters/plugin',
|
'./filters/plugin',
|
||||||
'./objectMigration/plugin',
|
'./objectMigration/plugin',
|
||||||
'./goToOriginalAction/plugin'
|
'./goToOriginalAction/plugin',
|
||||||
|
'./globalClearIndicator/plugin'
|
||||||
], function (
|
], function (
|
||||||
_,
|
_,
|
||||||
UTCTimeSystem,
|
UTCTimeSystem,
|
||||||
@ -67,7 +68,8 @@ define([
|
|||||||
LADTable,
|
LADTable,
|
||||||
Filters,
|
Filters,
|
||||||
ObjectMigration,
|
ObjectMigration,
|
||||||
GoToOriginalAction
|
GoToOriginalAction,
|
||||||
|
GlobalClearIndicator
|
||||||
) {
|
) {
|
||||||
var bundleMap = {
|
var bundleMap = {
|
||||||
LocalStorage: 'platform/persistence/local',
|
LocalStorage: 'platform/persistence/local',
|
||||||
@ -166,6 +168,7 @@ define([
|
|||||||
plugins.Filters = Filters;
|
plugins.Filters = Filters;
|
||||||
plugins.ObjectMigration = ObjectMigration.default;
|
plugins.ObjectMigration = ObjectMigration.default;
|
||||||
plugins.GoToOriginalAction = GoToOriginalAction.default;
|
plugins.GoToOriginalAction = GoToOriginalAction.default;
|
||||||
|
plugins.GlobalClearIndicator = GlobalClearIndicator;
|
||||||
|
|
||||||
return plugins;
|
return plugins;
|
||||||
});
|
});
|
||||||
|
@ -62,6 +62,7 @@ define([
|
|||||||
|
|
||||||
openmct.time.on('bounds', this.refreshData);
|
openmct.time.on('bounds', this.refreshData);
|
||||||
openmct.time.on('timeSystem', this.refreshData);
|
openmct.time.on('timeSystem', this.refreshData);
|
||||||
|
openmct.notifications.on('clear', this.refreshData);
|
||||||
}
|
}
|
||||||
|
|
||||||
initialize() {
|
initialize() {
|
||||||
@ -240,6 +241,7 @@ define([
|
|||||||
Object.keys(this.subscriptions).forEach(this.unsubscribe, this);
|
Object.keys(this.subscriptions).forEach(this.unsubscribe, this);
|
||||||
this.openmct.time.off('bounds', this.refreshData);
|
this.openmct.time.off('bounds', this.refreshData);
|
||||||
this.openmct.time.off('timeSystem', this.refreshData);
|
this.openmct.time.off('timeSystem', this.refreshData);
|
||||||
|
this.openmct.notifications.off('clear', this.refreshData);
|
||||||
if (this.filterObserver) {
|
if (this.filterObserver) {
|
||||||
this.filterObserver();
|
this.filterObserver();
|
||||||
}
|
}
|
||||||
|
@ -49,6 +49,21 @@ button {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
&[class*='__collapse-button'] {
|
||||||
|
box-shadow: none;
|
||||||
|
background: $splitterBtnColorBg;
|
||||||
|
color: $splitterBtnColorFg;
|
||||||
|
border-radius: $smallCr;
|
||||||
|
font-size: 6px;
|
||||||
|
line-height: 90%;
|
||||||
|
padding: 3px 15px;
|
||||||
|
|
||||||
|
@include hover() {
|
||||||
|
background: $colorBtnBgHov;
|
||||||
|
color: $colorBtnFgHov;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
&.is-active {
|
&.is-active {
|
||||||
background: $colorBtnActiveBg;
|
background: $colorBtnActiveBg;
|
||||||
color: $colorBtnActiveFg;
|
color: $colorBtnActiveFg;
|
||||||
@ -70,13 +85,7 @@ button {
|
|||||||
@include cClickIconButton();
|
@include cClickIconButton();
|
||||||
|
|
||||||
&--menu {
|
&--menu {
|
||||||
&:after {
|
@include hasMenu();
|
||||||
content: $glyph-icon-arrow-down;
|
|
||||||
font-family: symbolsfont;
|
|
||||||
font-size: 0.7em;
|
|
||||||
margin-left: floor($interiorMarginSm * 0.8);
|
|
||||||
opacity: 0.5;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -126,7 +135,7 @@ button {
|
|||||||
|
|
||||||
/******************************************************** DISCLOSURE CONTROLS */
|
/******************************************************** DISCLOSURE CONTROLS */
|
||||||
/********* Disclosure Button */
|
/********* Disclosure Button */
|
||||||
// Provides a downward arrow icon that when clicked displays a context menu
|
// Provides a downward arrow icon that when clicked displays additional options and/or info.
|
||||||
// Always placed AFTER an element
|
// Always placed AFTER an element
|
||||||
.c-disclosure-button {
|
.c-disclosure-button {
|
||||||
@include cClickIcon();
|
@include cClickIcon();
|
||||||
|
@ -782,6 +782,10 @@ mct-indicators mct-include {
|
|||||||
display: contents;
|
display: contents;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
|
||||||
|
// MOVED TO INDICATORS.VUE
|
||||||
|
|
||||||
.ls-indicator {
|
.ls-indicator {
|
||||||
$bg: rgba(white, 0.2) !important;
|
$bg: rgba(white, 0.2) !important;
|
||||||
$hbg: $colorStatusBarBg;
|
$hbg: $colorStatusBarBg;
|
||||||
@ -859,7 +863,7 @@ mct-indicators mct-include {
|
|||||||
border-radius: $br;
|
border-radius: $br;
|
||||||
font-size: .6rem;
|
font-size: .6rem;
|
||||||
left: 0;
|
left: 0;
|
||||||
bottom: 140%;
|
top: 140%;
|
||||||
opacity: 0;
|
opacity: 0;
|
||||||
padding: $interiorMarginSm $interiorMargin;
|
padding: $interiorMarginSm $interiorMargin;
|
||||||
position: absolute;
|
position: absolute;
|
||||||
@ -873,8 +877,8 @@ mct-indicators mct-include {
|
|||||||
content: '';
|
content: '';
|
||||||
display: block;
|
display: block;
|
||||||
position: absolute;
|
position: absolute;
|
||||||
top: 100%;
|
bottom: 100%;
|
||||||
@include triangle('down', $size: 4px, $ratio: 1, $color: $hbg);
|
@include triangle('up', $size: 4px, $ratio: 1, $color: $hbg);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -894,7 +898,8 @@ mct-indicators mct-include {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Mobile */
|
|
||||||
|
|
||||||
// Hide the clock indicator when we're phone portrait
|
// Hide the clock indicator when we're phone portrait
|
||||||
body.phone.portrait {
|
body.phone.portrait {
|
||||||
.ls-indicator.t-indicator-clock {
|
.ls-indicator.t-indicator-clock {
|
||||||
@ -902,6 +907,8 @@ body.phone.portrait {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
*/
|
||||||
|
|
||||||
/************************************************* DATETIME UI */
|
/************************************************* DATETIME UI */
|
||||||
@mixin complexFieldHolder($myW) {
|
@mixin complexFieldHolder($myW) {
|
||||||
width: $myW + $interiorMargin;
|
width: $myW + $interiorMargin;
|
||||||
|
@ -420,20 +420,9 @@
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@mixin cClickIconButton() {
|
@mixin cClickIconButtonLayout() {
|
||||||
// A clickable element that just includes the icon
|
|
||||||
// Background is displayed on hover
|
|
||||||
// Padding is included to facilitate a bigger hit area
|
|
||||||
// Make the icon bigger relative to its container
|
|
||||||
$pLR: 4px;
|
$pLR: 4px;
|
||||||
$pTB: 4px;
|
$pTB: 4px;
|
||||||
|
|
||||||
@include cControl();
|
|
||||||
background: none;
|
|
||||||
box-shadow: none;
|
|
||||||
cursor: pointer;
|
|
||||||
transition: $transOut;
|
|
||||||
border-radius: $controlCr;
|
|
||||||
padding: $pTB $pLR;
|
padding: $pTB $pLR;
|
||||||
|
|
||||||
&:before,
|
&:before,
|
||||||
@ -442,6 +431,20 @@
|
|||||||
// Needed for c-togglebutton.
|
// Needed for c-togglebutton.
|
||||||
font-size: 1.25em;
|
font-size: 1.25em;
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@mixin cClickIconButton() {
|
||||||
|
// A clickable element that just includes the icon
|
||||||
|
// Background is displayed on hover
|
||||||
|
// Padding is included to facilitate a bigger hit area
|
||||||
|
// Make the icon bigger relative to its container
|
||||||
|
@include cControl();
|
||||||
|
@include cClickIconButtonLayout();
|
||||||
|
background: none;
|
||||||
|
box-shadow: none;
|
||||||
|
cursor: pointer;
|
||||||
|
transition: $transOut;
|
||||||
|
border-radius: $controlCr;
|
||||||
|
|
||||||
@include hover() {
|
@include hover() {
|
||||||
transition: $transIn;
|
transition: $transIn;
|
||||||
@ -478,6 +481,16 @@
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@mixin hasMenu() {
|
||||||
|
&:after {
|
||||||
|
content: $glyph-icon-arrow-down;
|
||||||
|
font-family: symbolsfont;
|
||||||
|
font-size: 0.7em;
|
||||||
|
margin-left: floor($interiorMarginSm * 0.8);
|
||||||
|
opacity: 0.5;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
@mixin cSelect($bg, $fg, $arwClr, $shdw) {
|
@mixin cSelect($bg, $fg, $arwClr, $shdw) {
|
||||||
$svgArwClr: str-slice(inspect($arwClr), 2, str-length(inspect($arwClr))); // Remove initial # in color value
|
$svgArwClr: str-slice(inspect($arwClr), 2, str-length(inspect($arwClr))); // Remove initial # in color value
|
||||||
background: url("data:image/svg+xml;charset=UTF-8,%3csvg xmlns='http://www.w3.org/2000/svg' width='10' height='10'%3e%3cpath fill='%23#{$svgArwClr}' d='M5 5l5-5H0z'/%3e%3c/svg%3e"), $bg;
|
background: url("data:image/svg+xml;charset=UTF-8,%3csvg xmlns='http://www.w3.org/2000/svg' width='10' height='10'%3e%3cpath fill='%23#{$svgArwClr}' d='M5 5l5-5H0z'/%3e%3c/svg%3e"), $bg;
|
||||||
|
@ -127,7 +127,7 @@ tr {
|
|||||||
.s-status-icon-ok:before { content: $glyph-icon-check; }
|
.s-status-icon-ok:before { content: $glyph-icon-check; }
|
||||||
|
|
||||||
/*************************************************** INDICATOR COLORING */
|
/*************************************************** INDICATOR COLORING */
|
||||||
.ls-indicator {
|
.c-indicator {
|
||||||
&.s-status-info {
|
&.s-status-info {
|
||||||
@include indicatorStatusColors($colorInfo);
|
@include indicatorStatusColors($colorInfo);
|
||||||
}
|
}
|
||||||
|
@ -25,8 +25,8 @@
|
|||||||
// Do not include anything that renders to CSS!
|
// Do not include anything that renders to CSS!
|
||||||
@import "constants";
|
@import "constants";
|
||||||
@import "constants-mobile.scss";
|
@import "constants-mobile.scss";
|
||||||
//@import "constants-espresso"; // TEMP
|
@import "constants-espresso"; // TEMP
|
||||||
@import "constants-snow"; // TEMP
|
//@import "constants-snow"; // TEMP
|
||||||
//@import "constants-maelstrom";
|
//@import "constants-maelstrom";
|
||||||
@import "mixins";
|
@import "mixins";
|
||||||
@import "animations";
|
@import "animations";
|
22
src/ui/components/CurrentDateTime.vue
Normal file
22
src/ui/components/CurrentDateTime.vue
Normal file
@ -0,0 +1,22 @@
|
|||||||
|
<template>
|
||||||
|
<div class="c-indicator no-collapse icon-clock c-current-datetime">
|
||||||
|
<span class="label">{{ currentDateTime }} UTC</span>
|
||||||
|
</div>
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<script>
|
||||||
|
import moment from 'moment';
|
||||||
|
|
||||||
|
export default {
|
||||||
|
data() {
|
||||||
|
return {
|
||||||
|
currentDateTime: moment.utc().format('LTS')
|
||||||
|
}
|
||||||
|
},
|
||||||
|
mounted: function() {
|
||||||
|
setInterval(()=>{
|
||||||
|
this.currentDateTime = moment.utc().format('YYYY/MM/DD HH:mm:ss')
|
||||||
|
},100)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
</script>
|
@ -4,7 +4,9 @@
|
|||||||
}">
|
}">
|
||||||
<div class="l-shell__head">
|
<div class="l-shell__head">
|
||||||
<CreateButton class="l-shell__create-button"></CreateButton>
|
<CreateButton class="l-shell__create-button"></CreateButton>
|
||||||
<div class="l-shell__controls">
|
<indicators class="l-shell__head-section l-shell__indicators"></indicators>
|
||||||
|
<notification-banner></notification-banner> <!-- TODO: MAKE SURE THIS PLACEMENT WORKS PROPERLY -->
|
||||||
|
<div class="l-shell__head-section l-shell__controls">
|
||||||
<button class="c-icon-button c-icon-button--major icon-new-window" title="Open in a new browser tab"
|
<button class="c-icon-button c-icon-button--major icon-new-window" title="Open in a new browser tab"
|
||||||
@click="openInNewTab"
|
@click="openInNewTab"
|
||||||
target="_blank">
|
target="_blank">
|
||||||
@ -15,6 +17,8 @@
|
|||||||
</button>
|
</button>
|
||||||
</div>
|
</div>
|
||||||
<app-logo></app-logo>
|
<app-logo></app-logo>
|
||||||
|
<!--button class="l-shell__head__collapse-button c-button"
|
||||||
|
@click="toggleShellHead"></button-->
|
||||||
</div>
|
</div>
|
||||||
<multipane class="l-shell__main"
|
<multipane class="l-shell__main"
|
||||||
type="horizontal">
|
type="horizontal">
|
||||||
@ -44,9 +48,6 @@
|
|||||||
<Inspector :isEditing="isEditing" ref="inspector"></Inspector>
|
<Inspector :isEditing="isEditing" ref="inspector"></Inspector>
|
||||||
</pane>
|
</pane>
|
||||||
</multipane>
|
</multipane>
|
||||||
<div class="l-shell__status">
|
|
||||||
<StatusBar></StatusBar>
|
|
||||||
</div>
|
|
||||||
</div>
|
</div>
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
@ -61,11 +62,13 @@
|
|||||||
flex-flow: column nowrap;
|
flex-flow: column nowrap;
|
||||||
overflow: hidden;
|
overflow: hidden;
|
||||||
|
|
||||||
&__status {
|
/* &__status {
|
||||||
|
min-width: 95%;
|
||||||
|
margin-right: 1%;
|
||||||
background: $colorStatusBarBg;
|
background: $colorStatusBarBg;
|
||||||
color: $colorStatusBarFg;
|
color: $colorStatusBarFg;
|
||||||
padding: $interiorMarginSm;
|
padding: $interiorMarginSm;
|
||||||
}
|
}*/
|
||||||
|
|
||||||
&__pane-tree {
|
&__pane-tree {
|
||||||
width: 40%;
|
width: 40%;
|
||||||
@ -163,11 +166,25 @@
|
|||||||
align-items: center;
|
align-items: center;
|
||||||
background: $colorHeadBg;
|
background: $colorHeadBg;
|
||||||
justify-content: space-between;
|
justify-content: space-between;
|
||||||
padding: $interiorMargin;
|
padding: $interiorMargin $interiorMargin + 2;
|
||||||
|
|
||||||
> [class*="__"] + [class*="__"] {
|
> [class*="__"] + [class*="__"] {
|
||||||
margin-left: $interiorMargin;
|
margin-left: $interiorMargin;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
[class*='__collapse-button']:before {
|
||||||
|
content: $glyph-icon-arrow-down;
|
||||||
|
font-size: 1.1em;
|
||||||
|
}
|
||||||
|
|
||||||
|
&-section {
|
||||||
|
// Subdivides elements across the head
|
||||||
|
@include ellipsize();
|
||||||
|
border-right: 1px solid $colorInteriorBorder;
|
||||||
|
display: flex;
|
||||||
|
flex: 0 1 auto;
|
||||||
|
padding-right: $interiorMargin;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
&__create-button,
|
&__create-button,
|
||||||
@ -175,11 +192,11 @@
|
|||||||
flex: 0 0 auto;
|
flex: 0 0 auto;
|
||||||
}
|
}
|
||||||
|
|
||||||
&__controls {
|
&__create-button { margin-right: $interiorMarginLg; }
|
||||||
flex: 1 1 100%;
|
|
||||||
display: flex;
|
&__indicators {
|
||||||
justify-content: flex-end;
|
flex: 1 1 auto;
|
||||||
margin-right: 2.5%;
|
[class*='indicator-clock'] { order: 99; }
|
||||||
}
|
}
|
||||||
|
|
||||||
/******************************* MAIN AREA */
|
/******************************* MAIN AREA */
|
||||||
@ -266,9 +283,10 @@
|
|||||||
import multipane from './multipane.vue';
|
import multipane from './multipane.vue';
|
||||||
import pane from './pane.vue';
|
import pane from './pane.vue';
|
||||||
import BrowseBar from './BrowseBar.vue';
|
import BrowseBar from './BrowseBar.vue';
|
||||||
import StatusBar from './status-bar/StatusBar.vue';
|
|
||||||
import Toolbar from '../toolbar/Toolbar.vue';
|
import Toolbar from '../toolbar/Toolbar.vue';
|
||||||
import AppLogo from './AppLogo.vue';
|
import AppLogo from './AppLogo.vue';
|
||||||
|
import Indicators from './status-bar/Indicators.vue';
|
||||||
|
import NotificationBanner from './status-bar/NotificationBanner.vue';
|
||||||
|
|
||||||
var enterFullScreen = () => {
|
var enterFullScreen = () => {
|
||||||
var docElm = document.documentElement;
|
var docElm = document.documentElement;
|
||||||
@ -309,9 +327,10 @@
|
|||||||
multipane,
|
multipane,
|
||||||
pane,
|
pane,
|
||||||
BrowseBar,
|
BrowseBar,
|
||||||
StatusBar,
|
|
||||||
Toolbar,
|
Toolbar,
|
||||||
AppLogo
|
AppLogo,
|
||||||
|
Indicators,
|
||||||
|
NotificationBanner
|
||||||
},
|
},
|
||||||
mounted() {
|
mounted() {
|
||||||
this.openmct.editor.on('isEditing', (isEditing)=>{
|
this.openmct.editor.on('isEditing', (isEditing)=>{
|
||||||
@ -356,6 +375,9 @@
|
|||||||
}
|
}
|
||||||
|
|
||||||
this.hasToolbar = structure.length > 0;
|
this.hasToolbar = structure.length > 0;
|
||||||
|
},
|
||||||
|
toggleShellHead() {
|
||||||
|
return true;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -148,21 +148,6 @@
|
|||||||
font-size: floor(12px * .9);
|
font-size: floor(12px * .9);
|
||||||
}
|
}
|
||||||
|
|
||||||
&__collapse-button {
|
|
||||||
box-shadow: none;
|
|
||||||
background: $splitterBtnColorBg;
|
|
||||||
color: $splitterBtnColorFg;
|
|
||||||
border-radius: $smallCr;
|
|
||||||
font-size: 6px;
|
|
||||||
line-height: 90%;
|
|
||||||
padding: 3px 15px;
|
|
||||||
|
|
||||||
@include hover() {
|
|
||||||
background: $colorBtnBgHov;
|
|
||||||
color: $colorBtnFgHov;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
&__label {
|
&__label {
|
||||||
// Name of the pane
|
// Name of the pane
|
||||||
@include ellipsize();
|
@include ellipsize();
|
||||||
|
@ -17,10 +17,132 @@
|
|||||||
at runtime from the About dialog for additional information.
|
at runtime from the About dialog for additional information.
|
||||||
-->
|
-->
|
||||||
<template>
|
<template>
|
||||||
<span id='status' class='status-holder'></span>
|
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
<style lang="scss">
|
<style lang="scss">
|
||||||
|
@import "~styles/sass-base";
|
||||||
|
|
||||||
|
.l-indicators {
|
||||||
|
display: flex;
|
||||||
|
align-items: center;
|
||||||
|
}
|
||||||
|
|
||||||
|
.c-indicator {
|
||||||
|
@include cClickIconButtonLayout();
|
||||||
|
|
||||||
|
&--clickable {
|
||||||
|
@include cClickIconButton();
|
||||||
|
@include hasMenu();
|
||||||
|
}
|
||||||
|
|
||||||
|
$bg: rgba(white, 0.2) !important;
|
||||||
|
$hbg: $colorStatusBarBg;
|
||||||
|
$hshdw: rgba(white, 0.4) 0 0 3px;
|
||||||
|
$br: $controlCr;
|
||||||
|
$hoverYOffset: -35px;
|
||||||
|
/*background: transparent !important;*/
|
||||||
|
border-radius: $br;
|
||||||
|
/*display: inline-block;*/
|
||||||
|
/*position: relative;*/
|
||||||
|
//padding: 1px $interiorMarginSm; // Use padding instead of margin to keep hover chatter to a minimum
|
||||||
|
text-transform: uppercase;
|
||||||
|
|
||||||
|
&:before {
|
||||||
|
/*display: inline-block;*/
|
||||||
|
}
|
||||||
|
|
||||||
|
.label {
|
||||||
|
// Hover bubbles that appear when hovering on an Indicator
|
||||||
|
display: inline-block;
|
||||||
|
|
||||||
|
a,
|
||||||
|
button,
|
||||||
|
s-button,
|
||||||
|
.c-button {
|
||||||
|
// Make <a> in label look like buttons
|
||||||
|
transition: $transIn;
|
||||||
|
background: transparent;
|
||||||
|
border: 1px solid rgba($colorStatusBarFg, 0.5);
|
||||||
|
border-radius: $br;
|
||||||
|
box-sizing: border-box;
|
||||||
|
color: inherit;
|
||||||
|
font-size: inherit;
|
||||||
|
height: auto;
|
||||||
|
line-height: normal;
|
||||||
|
padding: 0 2px;
|
||||||
|
&:hover {
|
||||||
|
background: $bg;
|
||||||
|
color: #fff;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
[class*='icon-'] {
|
||||||
|
// If any elements within label include the class 'icon-*' then deal with their :before's
|
||||||
|
&:before {
|
||||||
|
font-size: 0.8em;
|
||||||
|
margin-right: $interiorMarginSm;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
&.no-collapse {
|
||||||
|
display: flex;
|
||||||
|
flex-flow: row nowrap;
|
||||||
|
align-items: center;
|
||||||
|
|
||||||
|
> *,
|
||||||
|
&:before {
|
||||||
|
flex: 1 1 auto;
|
||||||
|
}
|
||||||
|
|
||||||
|
&:before {
|
||||||
|
margin-right: $interiorMarginSm;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
&:not(.no-collapse) {
|
||||||
|
&:before {
|
||||||
|
margin-right: 0 !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
.label {
|
||||||
|
transition: all 250ms ease-in 100ms;
|
||||||
|
background: $hbg;
|
||||||
|
border-radius: $br;
|
||||||
|
font-size: .6rem;
|
||||||
|
left: 0;
|
||||||
|
top: 140%;
|
||||||
|
opacity: 0;
|
||||||
|
padding: $interiorMarginSm $interiorMargin;
|
||||||
|
position: absolute;
|
||||||
|
transform-origin: 10px 100%;
|
||||||
|
transform: scale(0.0);
|
||||||
|
white-space: nowrap;
|
||||||
|
z-index: 50;
|
||||||
|
|
||||||
|
&:before {
|
||||||
|
// Infobubble-style arrow element
|
||||||
|
content: '';
|
||||||
|
display: block;
|
||||||
|
position: absolute;
|
||||||
|
bottom: 100%;
|
||||||
|
@include triangle('up', $size: 4px, $ratio: 1, $color: $hbg);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
&.float-right {
|
||||||
|
float: right;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Mobile */
|
||||||
|
// Hide the clock indicator when we're phone portrait
|
||||||
|
body.phone.portrait {
|
||||||
|
.c-indicator.t-indicator-clock {
|
||||||
|
display: none;
|
||||||
|
}
|
||||||
|
}
|
||||||
</style>
|
</style>
|
||||||
|
|
||||||
<script>
|
<script>
|
||||||
@ -31,10 +153,11 @@
|
|||||||
this.openmct.indicators.indicatorObjects.forEach((indicator) => {
|
this.openmct.indicators.indicatorObjects.forEach((indicator) => {
|
||||||
// So that we can consistently position indicator elements,
|
// So that we can consistently position indicator elements,
|
||||||
// guarantee that they are wrapped in an element we control
|
// guarantee that they are wrapped in an element we control
|
||||||
var wrapperNode = document.createElement('span');
|
// CH: fuck that...
|
||||||
wrapperNode.className = 'l-indicator';
|
// var wrapperNode = document.createElement('span');
|
||||||
wrapperNode.appendChild(indicator.element);
|
// wrapperNode.className = 'u-contents';
|
||||||
this.$el.appendChild(wrapperNode);
|
// wrapperNode.appendChild(indicator.element);
|
||||||
|
this.$el.appendChild(indicator.element);
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -1,42 +0,0 @@
|
|||||||
<!--
|
|
||||||
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>
|
|
||||||
<span class="c-status">
|
|
||||||
<indicators></indicators>
|
|
||||||
<notification-banner></notification-banner>
|
|
||||||
</span>
|
|
||||||
</template>
|
|
||||||
|
|
||||||
<style lang="scss">
|
|
||||||
.c-status {
|
|
||||||
width: 100%;
|
|
||||||
}
|
|
||||||
</style>
|
|
||||||
|
|
||||||
<script>
|
|
||||||
import Indicators from './Indicators.vue';
|
|
||||||
import NotificationBanner from './NotificationBanner.vue';
|
|
||||||
|
|
||||||
export default {
|
|
||||||
components: {
|
|
||||||
Indicators,
|
|
||||||
NotificationBanner
|
|
||||||
}
|
|
||||||
}
|
|
||||||
</script>
|
|
Reference in New Issue
Block a user