Compare commits

...

95 Commits

Author SHA1 Message Date
352fe8ea7c Merge branch 'plotly-test' of https://github.com/nasa/openmct into plotly-test 2020-07-13 10:23:02 -07:00
29650f54de add unique id to plotElement 2020-07-13 10:22:31 -07:00
02d00aeb07 resolved conflict 2020-07-09 13:00:10 -07:00
fd21594e4a resolved conflict 2020-07-09 11:17:34 -07:00
5d0beb4351 reverted commit 2020-07-09 11:13:29 -07:00
f88d3bcaf3 Merge branch 'master' into plotly-test 2020-07-01 09:51:27 -07:00
c1102ed4b1 resolved merge conflict 2020-07-01 09:31:09 -07:00
fcd8a9a9c9 hide y-axis on empty plot, purge and recreate plot after removing only telemetry object 2020-07-01 09:28:48 -07:00
5f729640b2 added removeTelemetryObject 2020-06-30 13:59:59 -07:00
5fc12c771a fixed yaxis title, trace names in legend, markers 2020-06-30 11:39:35 -07:00
7931177497 resolved merge 2020-06-30 10:18:44 -07:00
195aa0a95b Remove composition listeners on destroy 2020-06-30 09:30:49 -07:00
c252d435bf Clear data on bounds change. Clean up on destroy. 2020-06-29 18:21:57 -07:00
87aa5a4342 Cleaning up unused code 2020-06-29 17:16:57 -07:00
bd98b81339 some code reorg 2020-06-29 16:47:47 -07:00
56794b0ed5 using smaller plotly bundle 2020-06-29 12:10:32 -07:00
0398679abc Merge branch 'master' of https://github.com/nasa/openmct into plotly-test 2020-06-29 11:52:48 -07:00
1bc60f8108 wip: refactoring 2020-06-25 13:26:00 -07:00
122f3efa1f removed extend argument 2020-06-25 10:41:59 -07:00
32791b442d wip: refactor 2020-06-24 14:55:00 -07:00
7aaccdb286 wip: refactoring 2020-06-24 11:34:03 -07:00
f49556adad wip: functional with single trace, but debugging problems with changing bounds with multiple traces 2020-06-23 12:32:47 -07:00
f726bfa31a wip: refactoring 2020-06-22 14:56:22 -07:00
e9c6c5760e resolve conflicts 2020-06-19 13:42:23 -07:00
07c3dd6cfa wip: changes for bounds events 2020-06-19 13:40:20 -07:00
651a369391 refactored for multiple telemetry types 2020-06-18 15:36:38 -07:00
ae67a2f438 wip: refactoring for multiple telemetry types 2020-06-18 08:53:24 -07:00
1acda469a9 fixed value formatting, removed listeners 2020-06-16 15:51:12 -07:00
d5b0ef735c Merge branch 'master' of https://github.com/nasa/openmct into plotly-test 2020-06-16 12:25:58 -07:00
a6cac13dfc removed duplicate function 2020-06-16 12:25:30 -07:00
3d058151f2 imported and used telemetry table components, removed console logs from telemetryTable.js 2020-06-16 12:16:17 -07:00
76817193eb minor color changes 2020-06-15 12:33:25 -07:00
35ef4407be changed way index is tracked mostly, other small changes 2020-06-15 11:16:01 -07:00
f3526f9185 refactored to follow telemetry tables pattern 2020-06-12 16:24:10 -07:00
70649b0657 added js-plotly-container class 2020-06-10 10:29:36 -07:00
3b89bf0b8c Merge branch 'plotly-test' of https://github.com/nasa/openmct into plotly-test 2020-06-09 11:08:03 -07:00
a314aa3c95 Merge branch 'master' of https://github.com/nasa/openmct into plotly-test 2020-06-09 11:07:27 -07:00
dc5723c227 tweaked margins 2020-06-09 11:07:14 -07:00
61fd7d4e4e mostly styling changes, removed isFixed arg from getLayout 2020-06-09 09:31:54 -07:00
32fc871e67 correct usage of node_options 2020-06-04 09:28:43 -07:00
6b74a133d8 Upgraded karma 2020-06-03 17:41:42 -07:00
ceaf4c2ef0 Cleared circle cache 2020-06-03 16:29:55 -07:00
982b69e7e1 Don't rebuild sass every time 2020-06-03 16:25:08 -07:00
8e5182732d Used cross-platform instead of export 2020-06-03 16:24:13 -07:00
2d0b92cc38 Removed no-sandbox flag 2020-06-03 16:23:17 -07:00
75e846ea3f Added missing new line 2020-06-03 16:22:08 -07:00
1b5dee981d Reverted resource class change 2020-06-03 16:20:49 -07:00
4fee7f73e7 Fixed circle config 2020-06-03 16:19:49 -07:00
4308a4c9cf Removed report files 2020-06-03 16:17:23 -07:00
abbffcfbf1 Merge branch 'plotly-test' of https://github.com/nasa/openmct into plotly-test 2020-06-03 16:16:00 -07:00
01710876fb Increase circle resource class 2020-06-03 16:15:52 -07:00
9e3d97c85d added no-sandbox flag 2020-06-03 13:33:59 -07:00
519075001e bumped docker config to node 13 2020-06-03 13:12:45 -07:00
96a48dd9ee moved rebuild node-sass later 2020-06-03 13:08:00 -07:00
550daae76f add rebuild node-sass to config 2020-06-03 13:03:36 -07:00
b8fcb8ff14 change circleci config to node12 2020-06-03 12:45:46 -07:00
373ddd0bf5 updated circleci to use node13 2020-06-03 11:47:00 -07:00
d62cc6b3ee bumped karma-jasmine to ^2.0.0 2020-06-03 11:11:07 -07:00
5116d38437 added test memory increase 2020-06-03 11:03:36 -07:00
29771f2722 Merge branch 'master' of https://github.com/nasa/openmct into plotly-test 2020-06-02 16:52:34 -07:00
7bfe4bb25c restored karma-jasmine to original 2020-06-02 16:31:04 -07:00
510c637081 locked karma-jasmine dependency 2020-06-02 16:01:02 -07:00
d7c65fec4c changed jasmine-core to ^2.0.0 2020-06-02 13:11:18 -07:00
626e2d8e80 changed jasmine-core to 2.0.0 to test circle-ci specfilter issue 2020-06-02 12:56:51 -07:00
1fe673c1f5 Merge branch 'plotly-test' of https://github.com/nasa/openmct into plotly-test 2020-06-02 12:44:35 -07:00
d9b00574e7 Merge branch 'master' of https://github.com/nasa/openmct into plotly-test 2020-06-02 12:38:39 -07:00
7c48b3ba9a Merge branch 'master' into plotly-test 2020-06-02 12:29:46 -07:00
b6e589eed4 removed telemetry from initialization config 2020-06-01 14:46:54 -07:00
fb1813c14b change in legend position, trace names 2020-06-01 07:40:24 -07:00
cce834f873 changed colors, added legend, fixed removeTelemetry 2020-05-29 15:14:05 -07:00
ca60d02614 added name to plugin function, changed colors 2020-05-29 13:38:52 -07:00
9520c09b49 fixed updateData so plot is extended in fixed timespan 2020-05-29 12:02:31 -07:00
0d70717b35 addressed review comments 2020-05-29 09:55:37 -07:00
f18da542d6 added updateRange function, removed length arg from updateData, fixed unsubscribe 2020-05-29 09:37:56 -07:00
e7c38d473b added unsubscribe, subscribeTo methods 2020-05-28 15:26:30 -07:00
2f8db31a33 added dynamic layout for fixed, local clock 2020-05-28 15:25:30 -07:00
1c58d8c85f implemented Plotly.relayout to set x-axis correctly for local clock 2020-05-28 15:25:05 -07:00
baf426055c added back if in updateData 2020-05-28 15:23:04 -07:00
aa3af520ea refactor of refreshData 2020-05-28 15:21:15 -07:00
4a43893ccc debugging local clock issues 2020-05-28 15:21:01 -07:00
77f50a41c9 added some comments 2020-05-28 15:20:38 -07:00
e4cd5f441f added requestHistory 2020-05-28 15:19:44 -07:00
a9cfb002fb added listeners and bounds methods 2020-05-28 15:15:39 -07:00
b603a5b722 WIP... 2020-05-28 15:13:35 -07:00
be165761c7 WIP: adding bounds functions 2020-05-28 15:13:10 -07:00
da88cf58cc add, remove multiple traces, remove hover effects 2020-05-28 15:12:48 -07:00
bc2bd53f9b WIP 2020-05-28 15:12:11 -07:00
6b7fd5f22a import RemoveAction 2020-05-28 15:09:01 -07:00
4ee214a142 add code to set Y-axis and plot multiple telemetry types 2020-05-28 15:07:35 -07:00
4af24db38a changed mode and type, dropped old data as data extends 2020-05-28 15:06:24 -07:00
8db27809ef rendering a plotly plot from SWG 2020-05-28 15:04:36 -07:00
3116b1addd wip: added telemetry provider 2020-05-28 14:58:24 -07:00
5f67c45b50 working on viewProvider 2020-05-28 14:57:52 -07:00
8158afc29a added hardcoded test plot 2020-05-28 14:57:13 -07:00
13b3acb7e0 basic plotly plugin structure 2020-05-28 14:55:06 -07:00
10 changed files with 421 additions and 5 deletions

1
.gitignore vendored
View File

@ -38,3 +38,4 @@ protractor/logs
npm-debug.log npm-debug.log
package-lock.json package-lock.json
report.*.json

View File

@ -2,7 +2,6 @@
"name": "openmct", "name": "openmct",
"version": "1.0.0-snapshot", "version": "1.0.0-snapshot",
"description": "The Open MCT core platform", "description": "The Open MCT core platform",
"dependencies": {},
"devDependencies": { "devDependencies": {
"angular": ">=1.8.0", "angular": ">=1.8.0",
"angular-route": "1.4.14", "angular-route": "1.4.14",
@ -39,13 +38,13 @@
"istanbul-instrumenter-loader": "^3.0.1", "istanbul-instrumenter-loader": "^3.0.1",
"jasmine-core": "^3.1.0", "jasmine-core": "^3.1.0",
"jsdoc": "^3.3.2", "jsdoc": "^3.3.2",
"karma": "^2.0.3", "karma": "5.0.9",
"karma-chrome-launcher": "^2.2.0", "karma-chrome-launcher": "3.1.0",
"karma-cli": "^1.0.1", "karma-cli": "^1.0.1",
"karma-coverage": "^1.1.2", "karma-coverage": "^1.1.2",
"karma-coverage-istanbul-reporter": "^2.1.1", "karma-coverage-istanbul-reporter": "^2.1.1",
"karma-html-reporter": "^0.2.7", "karma-html-reporter": "^0.2.7",
"karma-jasmine": "^1.1.2", "karma-jasmine": "^2.0.0",
"karma-sourcemap-loader": "^0.3.7", "karma-sourcemap-loader": "^0.3.7",
"karma-webpack": "^3.0.0", "karma-webpack": "^3.0.0",
"location-bar": "^3.0.1", "location-bar": "^3.0.1",
@ -60,6 +59,8 @@
"node-bourbon": "^4.2.3", "node-bourbon": "^4.2.3",
"node-sass": "^4.9.2", "node-sass": "^4.9.2",
"painterro": "^0.2.65", "painterro": "^0.2.65",
"plotly.js-basic-dist-min": "^1.54.6",
"plotly.js-gl2d-dist-min": "^1.54.5",
"printj": "^1.2.1", "printj": "^1.2.1",
"raw-loader": "^0.5.1", "raw-loader": "^0.5.1",
"request": "^2.69.0", "request": "^2.69.0",

View File

@ -252,6 +252,7 @@ define([
// Plugins that are installed by default // Plugins that are installed by default
this.install(this.plugins.Plot()); this.install(this.plugins.Plot());
this.install(this.plugins.PlotlyPlot());
this.install(this.plugins.TelemetryTable()); this.install(this.plugins.TelemetryTable());
this.install(PreviewPlugin.default()); this.install(PreviewPlugin.default());
this.install(LegacyIndicatorsPlugin()); this.install(LegacyIndicatorsPlugin());

View File

@ -0,0 +1,72 @@
/*****************************************************************************
* 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.
*****************************************************************************/
import PlotlyViewLayout from './components/PlotlyViewLayout.vue';
import Vue from 'vue';
export default function PlotlyViewProvider(openmct) {
return {
key: 'plotlyPlot',
name: 'Plotly Plot',
cssClass: 'icon-plot-overlay',
canView: function (domainObject) {
return domainObject.type === 'plotlyPlot';
},
canEdit: function (domainObject) {
return domainObject.type === 'plotlyPlot';
},
view: function (domainObject) {
let component;
return {
show: function (element, isEditing) {
component = new Vue({
provide: {
openmct,
domainObject
},
el: element,
components: {
PlotlyViewLayout
},
data() {
return {
isEditing
}
},
template: '<plotly-view-layout :isEditing="isEditing"></plotly-view-layout>'
});
},
onEditModeChange: function (isEditing) {
component.isEditing = isEditing;
},
destroy: function (element) {
component.$destroy();
component = undefined;
}
};
},
priority: function () {
return 1;
}
};
}

View File

@ -0,0 +1,317 @@
<template>
<div :id="plotId"
class="l-view-section">
</div>
</template>
<script>
// import Plotly from 'plotly.js-gl2d-dist-min';
import Plotly from 'plotly.js-basic-dist-min';
import BoundedTableRowCollection from '../../telemetryTable/collections/BoundedTableRowCollection';
import TelemetryTableRow from '../../telemetryTable/TelemetryTableRow';
import TelemetryTableColumn from '../../telemetryTable/TelemetryTableColumn';
export default {
inject: ['openmct', 'domainObject'],
data: function () {
return {
bounds: this.openmct.time.bounds(),
plotData: {},
outstandingRequests: 0,
subscriptions: {},
plotComposition: undefined,
timestampKey: this.openmct.time.timeSystem().key,
yAxisLabel: '',
plotId: this.openmct.objects.makeKeyString(this.domainObject.identifier)
}
},
computed: {
getContainerHeight: function () {
return this.plotElement.parentNode.offsetHeight - 5;
},
getContainerWidth: function () {
return this.plotElement.parentNode.offsetWidth - 5;
}
},
mounted() {
this.plotElement = document.getElementById(this.plotId);
this.openmct.time.on('bounds', this.updateDomain);
this.openmct.time.on('bounds', this.updateData);
this.loadComposition();
this.createPlot();
this.boundedRows = {};
this.limitEvaluators = {};
this.columnMaps = {};
this.drawBuffers = {};
this.telemetryObjects = [];
this.subscriptions = {};
this.boundedRowsUnlisteners = {};
this.traceIndices = {};
},
destroyed() {
Object.values(this.subscriptions)
.forEach(subscription => subscription());
this.openmct.time.off('bounds', this.updateDomain);
this.openmct.time.off('bounds', this.updateData);
Object.values(this.boundedRowsUnlisteners).forEach((unlisteners) => {
unlisteners.forEach(unlistener => unlistener());
});
this.plotComposition.off('add', this.addTelemetryObject);
this.plotComposition.off('remove', this.removeTelemetryObject);
},
methods: {
loadComposition() {
this.plotComposition = this.openmct.composition.get(this.domainObject);
this.plotComposition.on('add', this.addTelemetryObject);
this.plotComposition.on('remove', this.removeTelemetryObject);
this.plotComposition.load()
},
addTelemetryObject(telemetryObject) {
this.telemetryObjects.push(telemetryObject);
let keyString = this.openmct.objects.makeKeyString(telemetryObject.identifier);
this.addTraceForObject(telemetryObject);
this.requestData(telemetryObject);
let subscription = this.subscribe(telemetryObject);
this.subscriptions[keyString] = subscription;
},
removeTelemetryObject(identifier) {
const keyString = this.openmct.objects.makeKeyString(identifier);
const index = this.telemetryObjects.findIndex(object => identifier.key === object.identifier.key);
this.unsubscribe(keyString);
this.removeTraceForObject(this.telemetryObjects[index]);
this.telemetryObjects = this.telemetryObjects.filter(object => !(identifier.key === object.identifier.key));
if (!this.telemetryObjects.length) {
Plotly.purge(this.plotElement);
this.createPlot();
}
},
updateDomain(bounds, isTick) {
let newDomain = {
'xaxis.range': [
bounds.start,
bounds.end
]
};
Plotly.relayout(this.plotElement, newDomain);
},
updateData(bounds, isTick) {
if (!isTick) {
this.clearData();
this.telemetryObjects.forEach(telemetryObject => this.requestData(telemetryObject));
}
},
clearData() {
this.telemetryObjects.forEach(telemetryObject => this.resetTraceForObject(telemetryObject));
},
requestData(telemetryObject) {
return this.openmct.telemetry.request(telemetryObject)
.then(telemetryData => {
const keyString = this.openmct.objects.makeKeyString(telemetryObject.identifier);
let columnMap = this.columnMaps[keyString];
let limitEvaluator = this.limitEvaluators[keyString];
const telemetryRows = telemetryData.map(datum => new TelemetryTableRow(datum, columnMap, keyString, limitEvaluator));
this.boundedRows[keyString].add(telemetryRows);
});
},
subscribe(telemetryObject) {
const keyString = this.openmct.objects.makeKeyString(telemetryObject.identifier);
let columnMap = this.columnMaps[keyString];
let limitEvaluator = this.limitEvaluators[keyString];
return this.openmct.telemetry.subscribe(telemetryObject, (datum) => {
let newRow = new TelemetryTableRow(datum, columnMap, keyString, limitEvaluator);
this.boundedRows[keyString].add(newRow);
});
},
unsubscribe(keyString) {
this.subscriptions[keyString]();
delete this.subscriptions[keyString];
},
createPlot() {
let timeSystem = this.openmct.time.timeSystem();
let bounds = this.openmct.time.bounds();
let formatMetadata = {
key: timeSystem.key,
name: timeSystem.name,
format: timeSystem.timeFormat
}
this.timeFormatter = this.openmct.telemetry.getValueFormatter(formatMetadata);
let xRange = [
bounds.start,
bounds.end
];
let layout = {
hovermode: 'compare',
hoverdistance: -1,
autosize: true,
showlegend: true,
legend: {
y: 1.07,
"orientation": "h"
},
height: this.getContainerHeight,
font: {
family: "'Helvetica Neue', Helvetica, Arial, sans-serif",
size: "12px",
color: "#aaa"
},
xaxis: {
title: timeSystem.name,
type: 'date',
zeroline: false,
showgrid: false,
range: xRange
},
yaxis: {
zeroline: false,
showgrid: false,
tickwidth: 3,
tickcolor: 'transparent',
autorange: true,
visible: false
},
margin: {
l: 40,
r: 5,
b: 40,
t: 0
},
paper_bgcolor: 'transparent',
plot_bgcolor: 'transparent'
};
Plotly.newPlot(
this.plotElement,
[],
layout,
{
displayModeBar: true, // turns off hover-activated toolbar
staticPlot: false // turns off hover effects on datapoints
}
);
},
resetTraceForObject(telemetryObject) {
this.removeTraceForObject(telemetryObject);
this.addTraceForObject(telemetryObject);
},
removeTraceForObject(telemetryObject) {
let keyString = this.openmct.objects.makeKeyString(telemetryObject.identifier);
let index = this.traceIndices[keyString];
Plotly.deleteTraces(this.plotElement, index);
delete this.traceIndices[keyString];
this.recalculateTraceIndices();
this.boundedRowsUnlisteners[keyString].forEach((unlistener) => unlistener());
},
addTraceForObject(telemetryObject) {
let keyString = this.openmct.objects.makeKeyString(telemetryObject.identifier);
let boundedRows = new BoundedTableRowCollection(this.openmct);
this.boundedRows[keyString] = boundedRows;
this.traceIndices[keyString] = Object.keys(this.traceIndices).length;
this.recalculateTraceIndices();
Plotly.addTraces(this.plotElement, {
x: [],
y: [],
name: telemetryObject.name,
type: "scattergl",
mode: 'lines+markers',
marker: {
size: 5
},
line: {
shape: 'linear',
width: 1.5
}
});
const metadataValues = this.openmct.telemetry.getMetadata(telemetryObject).values();
let columnMap = metadataValues.reduce((map, metadatum) => {
let column = new TelemetryTableColumn(this.openmct, metadatum);
map[metadatum.key] = column;
return map;
}, {});
const limitEvaluator = this.openmct.telemetry.limitEvaluator(telemetryObject);
const valueFormatter = this.openmct.telemetry.getValueFormatter(this.openmct.telemetry.getMetadata(telemetryObject).valuesForHints(['range'])[0]);
let layout_update = {
yaxis: {title: valueFormatter.valueMetadata.name, visible: true}
};
Plotly.update(this.plotElement, {}, layout_update)
this.columnMaps[keyString] = columnMap;
this.limitEvaluators[keyString] = limitEvaluator;
let timeSystemKey = this.openmct.time.timeSystem().key;
let drawBuffer = {
keyString,
x: [],
y: []
};
this.drawBuffers[keyString] = drawBuffer;
const addRow = (rows) => {
if (rows instanceof Array) {
rows.forEach(row => {
drawBuffer.x.push(row.datum[timeSystemKey]);
drawBuffer.y.push(valueFormatter.format(row.datum));
})
} else {
drawBuffer.x.push(rows.datum[timeSystemKey]);
drawBuffer.y.push(valueFormatter.format(rows.datum));
}
this.scheduleDraw();
}
boundedRows.on('add', addRow);
this.boundedRowsUnlisteners[keyString] = [];
this.boundedRowsUnlisteners[keyString].push(() => {
boundedRows.off('add', addRow);
})
},
recalculateTraceIndices() {
Object.keys(this.traceIndices).forEach((key, indexOfKey) => {
this.traceIndices[key] = indexOfKey;
});
},
scheduleDraw() {
if (!this.drawing) {
this.drawing = true;
requestAnimationFrame(() => {
let dataForXAxes = [];
let dataForYAxes = [];
let traceIndices = [];
Object.values(this.drawBuffers).forEach((drawBuffer) => {
dataForXAxes.push(drawBuffer.x);
dataForYAxes.push(drawBuffer.y);
traceIndices.push(this.traceIndices[drawBuffer.keyString]);
drawBuffer.x = [];
drawBuffer.y = [];
});
Plotly.extendTraces(
this.plotElement,
{
x: dataForXAxes,
y: dataForYAxes
},
traceIndices
);
this.drawing = false;
});
}
}
}
}
</script>

View File

@ -0,0 +1,3 @@
.plot svg {
}

View File

@ -0,0 +1,17 @@
import PlotlyViewProvider from './PlotlyViewProvider';
export default function plugin() {
return function install(openmct) {
openmct.objectViews.addProvider(new PlotlyViewProvider(openmct));
openmct.types.addType('plotlyPlot', {
name: "Plotly Plot",
description: "Simple plot rendered by plotly.js",
creatable: true,
cssClass: 'icon-plot-overlay',
initialize: function (domainObject) {
domainObject.composition = [];
}
});
};
}

View File

@ -34,6 +34,7 @@ define([
'./URLIndicatorPlugin/URLIndicatorPlugin', './URLIndicatorPlugin/URLIndicatorPlugin',
'./telemetryMean/plugin', './telemetryMean/plugin',
'./plot/plugin', './plot/plugin',
'./plotlyPlot/plugin',
'./telemetryTable/plugin', './telemetryTable/plugin',
'./staticRootPlugin/plugin', './staticRootPlugin/plugin',
'./notebook/plugin', './notebook/plugin',
@ -69,6 +70,7 @@ define([
URLIndicatorPlugin, URLIndicatorPlugin,
TelemetryMean, TelemetryMean,
PlotPlugin, PlotPlugin,
PlotlyPlotPlugin,
TelemetryTablePlugin, TelemetryTablePlugin,
StaticRootPlugin, StaticRootPlugin,
Notebook, Notebook,
@ -177,8 +179,8 @@ define([
plugins.ExampleImagery = ExampleImagery; plugins.ExampleImagery = ExampleImagery;
plugins.ImageryPlugin = ImageryPlugin; plugins.ImageryPlugin = ImageryPlugin;
plugins.Plot = PlotPlugin; plugins.Plot = PlotPlugin;
plugins.PlotlyPlot = PlotlyPlotPlugin.default;
plugins.TelemetryTable = TelemetryTablePlugin; plugins.TelemetryTable = TelemetryTablePlugin;
plugins.SummaryWidget = SummaryWidget; plugins.SummaryWidget = SummaryWidget;
plugins.TelemetryMean = TelemetryMean; plugins.TelemetryMean = TelemetryMean;
plugins.URLIndicator = URLIndicatorPlugin; plugins.URLIndicator = URLIndicatorPlugin;

View File

@ -73,6 +73,7 @@ define(
* @private * @private
*/ */
addOne(row) { addOne(row) {
// console.log('SortedTableRowCollection addOne', row);
if (this.sortOptions === undefined) { if (this.sortOptions === undefined) {
throw 'Please specify sort options'; throw 'Please specify sort options';
} }

View File

@ -18,6 +18,7 @@
@import "../plugins/folderView/components/list-item.scss"; @import "../plugins/folderView/components/list-item.scss";
@import "../plugins/folderView/components/list-view.scss"; @import "../plugins/folderView/components/list-view.scss";
@import "../plugins/imagery/components/imagery-view-layout.scss"; @import "../plugins/imagery/components/imagery-view-layout.scss";
@import "../plugins/plotlyPlot/components/plotly.scss";
@import "../plugins/telemetryTable/components/table-row.scss"; @import "../plugins/telemetryTable/components/table-row.scss";
@import "../plugins/telemetryTable/components/telemetry-filter-indicator.scss"; @import "../plugins/telemetryTable/components/telemetry-filter-indicator.scss";
@import "../plugins/tabs/components/tabs.scss"; @import "../plugins/tabs/components/tabs.scss";