From ee5b31881ba70d2108252ea6e2fc5b03fcd17449 Mon Sep 17 00:00:00 2001 From: demvlad Date: Tue, 22 Oct 2024 12:43:10 +0300 Subject: [PATCH 01/16] The 'Convert to Csv' button is added at the spectrum analyzer chart --- index.html | 4 +++- src/css/main.css | 29 +++++++++++++++++++++++++---- 2 files changed, 28 insertions(+), 5 deletions(-) diff --git a/index.html b/index.html index d551e4f3..11fd7e35 100644 --- a/index.html +++ b/index.html @@ -472,7 +472,9 @@

Workspace

- +
+ +
diff --git a/src/css/main.css b/src/css/main.css index e70d55b2..55cafe0f 100644 --- a/src/css/main.css +++ b/src/css/main.css @@ -629,12 +629,33 @@ html.has-analyser-fullscreen.has-analyser color: black; } -.analyser #analyserResize:hover { - color: white; - cursor: pointer; - animation: ease-in 500ms; +.analyser:hover .non-shift #spectrumExport { + opacity: 1; + height: auto; + transition: opacity 500ms ease-in; } +.analyser #spectrumExport { + height: 0; + width: 200px; + overflow: hidden; + opacity: 0; + left: 270px; + float: left; + z-index: 9; + position: absolute; + font-size: 9px; +} + +.analyser #spectrumExport select { + border-radius: 3px; + padding: 0px 5px; + color: black; +} + + + + .analyser input#analyserZoomX { width: 100px; height: 10px; From 841f91e03d3ff7f176c8fbcc1819c8782b720ed4 Mon Sep 17 00:00:00 2001 From: demvlad Date: Tue, 22 Oct 2024 12:44:34 +0300 Subject: [PATCH 02/16] The spectrum export Worker is added --- public/js/webworkers/spectrum-export-worker.js | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) create mode 100644 public/js/webworkers/spectrum-export-worker.js diff --git a/public/js/webworkers/spectrum-export-worker.js b/public/js/webworkers/spectrum-export-worker.js new file mode 100644 index 00000000..724eb578 --- /dev/null +++ b/public/js/webworkers/spectrum-export-worker.js @@ -0,0 +1,16 @@ +importScripts("/js/lodash.min.js"); + +onmessage = function(event) { + const columnDelimiter = event.data.opts.columnDelimiter; + const fftOutput = event.data.fftOutput; + const spectrumDataLength = fftOutput.length / 2; + const frequencyStep = 0.5 * event.data.blackBoxRate / spectrumDataLength; + + let outText = "freq" + columnDelimiter + "value" + "\n" + for (let index = 0; index < spectrumDataLength; index += 10) { + const frequency = frequencyStep * index; + outText += frequency.toString() + columnDelimiter + fftOutput[index].toString() + "\n"; + } + + postMessage(outText); +}; From 25441560cfc2e9e700c2eafc8fc86538aae9be36 Mon Sep 17 00:00:00 2001 From: demvlad Date: Tue, 22 Oct 2024 12:45:30 +0300 Subject: [PATCH 03/16] The spectrum exporter is added --- src/spectrum-exporter.js | 42 ++++++++++++++++++++++++++++++++++++++++ 1 file changed, 42 insertions(+) create mode 100644 src/spectrum-exporter.js diff --git a/src/spectrum-exporter.js b/src/spectrum-exporter.js new file mode 100644 index 00000000..bf5e2ed0 --- /dev/null +++ b/src/spectrum-exporter.js @@ -0,0 +1,42 @@ +/** + * @typedef {object} ExportOptions + * @property {string} columnDelimiter + * @property {string} stringDelimiter + * @property {boolean} quoteStrings + */ + +/** + * @constructor + * @param {object} fftOutput + * @param {ExportOptions} [opts={}] + */ +export function SpectrumExporter(fftData, opts = {}) { + var opts = _.merge( + { + columnDelimiter: ",", + quoteStrings: true, + }, + opts + ); + + /** + * @param {function} success is a callback triggered when export is done + */ + function dump(success) { + const worker = new Worker("/js/webworkers/spectrum-export-worker.js"); + + worker.onmessage = (event) => { + success(event.data); + worker.terminate(); + }; + + worker.postMessage({fftOutput: fftData.fftOutput, + blackBoxRate: fftData.blackBoxRate, + opts: opts}); + } + + // exposed functions + return { + dump: dump, + }; +} From e2e0f3bf58227e893d480a4085666b5634f8da1e Mon Sep 17 00:00:00 2001 From: demvlad Date: Tue, 22 Oct 2024 12:47:58 +0300 Subject: [PATCH 04/16] The exportSpectrumToCSV method is added into graph_spectrum --- src/graph_spectrum.js | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/src/graph_spectrum.js b/src/graph_spectrum.js index 85ea7c7a..380fd510 100644 --- a/src/graph_spectrum.js +++ b/src/graph_spectrum.js @@ -6,6 +6,7 @@ import { SPECTRUM_OVERDRAW_TYPE, } from "./graph_spectrum_plot"; import { PrefStorage } from "./pref_storage"; +import { SpectrumExporter } from "./spectrum-exporter"; export function FlightLogAnalyser(flightLog, canvas, analyserCanvas) { const ANALYSER_LARGE_LEFT_MARGIN = 10, @@ -95,7 +96,7 @@ export function FlightLogAnalyser(flightLog, canvas, analyserCanvas) { left: `${newSize.width - 20}px`, }); $("#analyserResize", parentElem).css({ - left: `${newSize.width - 28}px`, + left: `${newSize.width - 20}px`, }); }; @@ -282,6 +283,10 @@ export function FlightLogAnalyser(flightLog, canvas, analyserCanvas) { prefs.set("userSettings", data); }); } + + this.exportSpectrumToCSV = function(onSuccess, options) { + SpectrumExporter(fftData, options).dump(onSuccess); + } } catch (e) { console.log(`Failed to create analyser... error:${e}`); } From b91a0744a28a6f2d67414d1a257578179152cd9e Mon Sep 17 00:00:00 2001 From: demvlad Date: Tue, 22 Oct 2024 12:50:06 +0300 Subject: [PATCH 05/16] The action handler is addedto spectrum export button --- src/main.js | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) diff --git a/src/main.js b/src/main.js index 86d732f2..139c2298 100644 --- a/src/main.js +++ b/src/main.js @@ -1148,6 +1148,16 @@ function BlackboxLogViewer() { CsvExporter(flightLog, options).dump(onSuccess); } + function exportSpectrumToCsv(file, options = {}) { + const onSuccess = createExportCallback( + "csv", + "text/csv", + file, + performance.now() + ); + graph.getAnalyser().exportSpectrumToCSV(onSuccess, options); + } + function exportGpx(file) { const onSuccess = createExportCallback( "gpx", @@ -1719,6 +1729,13 @@ function BlackboxLogViewer() { exportCsv(); e.preventDefault(); }); + + $("#btn-spectrum-export").click(function (e) { + setGraphState(GRAPH_STATE_PAUSED); + exportSpectrumToCsv("bf_spectrum"); + e.preventDefault(); + }); + $(".btn-gpx-export").click(function (e) { setGraphState(GRAPH_STATE_PAUSED); exportGpx(); From 726ba1731b42d2e74882393f7119d31ccf2befac Mon Sep 17 00:00:00 2001 From: demvlad Date: Tue, 22 Oct 2024 13:18:28 +0300 Subject: [PATCH 06/16] The spectrum export button is enabled for spectrum by frequency only --- src/graph_spectrum.js | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/graph_spectrum.js b/src/graph_spectrum.js index 380fd510..c3f7fe3f 100644 --- a/src/graph_spectrum.js +++ b/src/graph_spectrum.js @@ -202,7 +202,7 @@ export function FlightLogAnalyser(flightLog, canvas, analyserCanvas) { spectrumTypeElem .change(function () { - let optionSelected = parseInt(spectrumTypeElem.val(), 10); + const optionSelected = parseInt(spectrumTypeElem.val(), 10); if (optionSelected != userSettings.spectrumType) { userSettings.spectrumType = optionSelected; @@ -225,6 +225,8 @@ export function FlightLogAnalyser(flightLog, canvas, analyserCanvas) { "onlyFullScreenException", pidErrorVsSetpointSelected ); + + $("#btn-spectrum-export").attr("disabled", optionSelected != 0); }) .change(); From 2ba1a0ad91384619c525f260966bb78e9641bf62 Mon Sep 17 00:00:00 2001 From: demvlad Date: Tue, 22 Oct 2024 13:23:02 +0300 Subject: [PATCH 07/16] The 4 spaces tabs are replaced to 2 space tab --- public/js/webworkers/csv-export-worker.js | 102 +++++++++--------- .../js/webworkers/spectrum-export-worker.js | 24 ++--- 2 files changed, 63 insertions(+), 63 deletions(-) diff --git a/public/js/webworkers/csv-export-worker.js b/public/js/webworkers/csv-export-worker.js index 3790e961..e09b436e 100644 --- a/public/js/webworkers/csv-export-worker.js +++ b/public/js/webworkers/csv-export-worker.js @@ -2,59 +2,59 @@ importScripts("/js/lodash.min.js"); onmessage = function(event) { - /** - * Converts `null` and other empty non-numeric values to empty string. - * - * @param {object} value is not a number - * @returns {string} - */ - function normalizeEmpty(value) { - return !!value ? value : ""; - } + /** + * Converts `null` and other empty non-numeric values to empty string. + * + * @param {object} value is not a number + * @returns {string} + */ + function normalizeEmpty(value) { + return !!value ? value : ""; + } - /** - * @param {array} columns - * @returns {string} - */ - function joinColumns(columns) { - return _(columns) - .map(value => - _.isNumber(value) - ? value - : stringDelim + normalizeEmpty(value) + stringDelim) - .join(opts.columnDelimiter); - } + /** + * @param {array} columns + * @returns {string} + */ + function joinColumns(columns) { + return _(columns) + .map(value => + _.isNumber(value) + ? value + : stringDelim + normalizeEmpty(value) + stringDelim) + .join(opts.columnDelimiter); + } - /** - * Converts `null` entries in columns and other empty non-numeric values to NaN value string. - * - * @param {array} columns - * @returns {string} - */ - function joinColumnValues(columns) { - return _(columns) - .map(value => - (_.isNumber(value) || _.value) - ? value - : "NaN") - .join(opts.columnDelimiter); - } + /** + * Converts `null` entries in columns and other empty non-numeric values to NaN value string. + * + * @param {array} columns + * @returns {string} + */ + function joinColumnValues(columns) { + return _(columns) + .map(value => + (_.isNumber(value) || _.value) + ? value + : "NaN") + .join(opts.columnDelimiter); + } - let opts = event.data.opts, - stringDelim = opts.quoteStrings - ? opts.stringDelimiter - : "", - mainFields = _([joinColumns(event.data.fieldNames)]) - .concat(_(event.data.frames) - .flatten() - .map(row => joinColumnValues(row)) - .value()) - .join("\n"), - headers = _(event.data.sysConfig) - .map((value, key) => joinColumns([key, value])) - .join("\n"), - result = headers + "\n" + mainFields; + let opts = event.data.opts, + stringDelim = opts.quoteStrings + ? opts.stringDelimiter + : "", + mainFields = _([joinColumns(event.data.fieldNames)]) + .concat(_(event.data.frames) + .flatten() + .map(row => joinColumnValues(row)) + .value()) + .join("\n"), + headers = _(event.data.sysConfig) + .map((value, key) => joinColumns([key, value])) + .join("\n"), + result = headers + "\n" + mainFields; + + postMessage(result); - postMessage(result); - }; diff --git a/public/js/webworkers/spectrum-export-worker.js b/public/js/webworkers/spectrum-export-worker.js index 724eb578..b4ca808d 100644 --- a/public/js/webworkers/spectrum-export-worker.js +++ b/public/js/webworkers/spectrum-export-worker.js @@ -1,16 +1,16 @@ importScripts("/js/lodash.min.js"); onmessage = function(event) { - const columnDelimiter = event.data.opts.columnDelimiter; - const fftOutput = event.data.fftOutput; - const spectrumDataLength = fftOutput.length / 2; - const frequencyStep = 0.5 * event.data.blackBoxRate / spectrumDataLength; - - let outText = "freq" + columnDelimiter + "value" + "\n" - for (let index = 0; index < spectrumDataLength; index += 10) { - const frequency = frequencyStep * index; - outText += frequency.toString() + columnDelimiter + fftOutput[index].toString() + "\n"; - } - - postMessage(outText); + const columnDelimiter = event.data.opts.columnDelimiter; + const fftOutput = event.data.fftOutput; + const spectrumDataLength = fftOutput.length / 2; + const frequencyStep = 0.5 * event.data.blackBoxRate / spectrumDataLength; + + let outText = "freq" + columnDelimiter + "value" + "\n" + for (let index = 0; index < spectrumDataLength; index += 10) { + const frequency = frequencyStep * index; + outText += frequency.toString() + columnDelimiter + fftOutput[index].toString() + "\n"; + } + + postMessage(outText); }; From 10b83456f6086fc49dd423a4b54b3851c209e59a Mon Sep 17 00:00:00 2001 From: demvlad Date: Tue, 22 Oct 2024 13:28:13 +0300 Subject: [PATCH 08/16] unused library link is removed --- public/js/webworkers/spectrum-export-worker.js | 2 -- 1 file changed, 2 deletions(-) diff --git a/public/js/webworkers/spectrum-export-worker.js b/public/js/webworkers/spectrum-export-worker.js index b4ca808d..9fcb88d9 100644 --- a/public/js/webworkers/spectrum-export-worker.js +++ b/public/js/webworkers/spectrum-export-worker.js @@ -1,5 +1,3 @@ -importScripts("/js/lodash.min.js"); - onmessage = function(event) { const columnDelimiter = event.data.opts.columnDelimiter; const fftOutput = event.data.fftOutput; From 3fbbe3c9772580fc7f9cd4d3f332b6691700c848 Mon Sep 17 00:00:00 2001 From: demvlad Date: Tue, 22 Oct 2024 17:46:32 +0300 Subject: [PATCH 09/16] Code issues are resolved --- public/js/webworkers/spectrum-export-worker.js | 2 +- src/graph_spectrum.js | 2 +- src/main.js | 6 +++--- src/spectrum-exporter.js | 4 ++-- 4 files changed, 7 insertions(+), 7 deletions(-) diff --git a/public/js/webworkers/spectrum-export-worker.js b/public/js/webworkers/spectrum-export-worker.js index 9fcb88d9..124ba8b7 100644 --- a/public/js/webworkers/spectrum-export-worker.js +++ b/public/js/webworkers/spectrum-export-worker.js @@ -4,7 +4,7 @@ onmessage = function(event) { const spectrumDataLength = fftOutput.length / 2; const frequencyStep = 0.5 * event.data.blackBoxRate / spectrumDataLength; - let outText = "freq" + columnDelimiter + "value" + "\n" + let outText = "freq" + columnDelimiter + "value" + "\n"; for (let index = 0; index < spectrumDataLength; index += 10) { const frequency = frequencyStep * index; outText += frequency.toString() + columnDelimiter + fftOutput[index].toString() + "\n"; diff --git a/src/graph_spectrum.js b/src/graph_spectrum.js index c3f7fe3f..1591d681 100644 --- a/src/graph_spectrum.js +++ b/src/graph_spectrum.js @@ -288,7 +288,7 @@ export function FlightLogAnalyser(flightLog, canvas, analyserCanvas) { this.exportSpectrumToCSV = function(onSuccess, options) { SpectrumExporter(fftData, options).dump(onSuccess); - } + }; } catch (e) { console.log(`Failed to create analyser... error:${e}`); } diff --git a/src/main.js b/src/main.js index 139c2298..2011ccc2 100644 --- a/src/main.js +++ b/src/main.js @@ -1143,7 +1143,7 @@ function BlackboxLogViewer() { "csv", "text/csv", file, - performance.now() + performance.now(), ); CsvExporter(flightLog, options).dump(onSuccess); } @@ -1153,7 +1153,7 @@ function BlackboxLogViewer() { "csv", "text/csv", file, - performance.now() + performance.now(), ); graph.getAnalyser().exportSpectrumToCSV(onSuccess, options); } @@ -1163,7 +1163,7 @@ function BlackboxLogViewer() { "gpx", "GPX File", file, - performance.now() + performance.now(), ); GpxExporter(flightLog).dump(onSuccess); } diff --git a/src/spectrum-exporter.js b/src/spectrum-exporter.js index bf5e2ed0..2a979e60 100644 --- a/src/spectrum-exporter.js +++ b/src/spectrum-exporter.js @@ -11,12 +11,12 @@ * @param {ExportOptions} [opts={}] */ export function SpectrumExporter(fftData, opts = {}) { - var opts = _.merge( + opts = _.merge( { columnDelimiter: ",", quoteStrings: true, }, - opts + opts, ); /** From 3cb27e3ecf859aafc19b4760c424217d862d0ee8 Mon Sep 17 00:00:00 2001 From: demvlad Date: Tue, 22 Oct 2024 17:50:30 +0300 Subject: [PATCH 10/16] Code issues are resolved --- src/spectrum-exporter.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/spectrum-exporter.js b/src/spectrum-exporter.js index 2a979e60..cd9ff0b8 100644 --- a/src/spectrum-exporter.js +++ b/src/spectrum-exporter.js @@ -11,7 +11,7 @@ * @param {ExportOptions} [opts={}] */ export function SpectrumExporter(fftData, opts = {}) { - opts = _.merge( + opts = _.merge( { columnDelimiter: ",", quoteStrings: true, From e3ca994701af9c8201c897c7b55cfea12759aa08 Mon Sep 17 00:00:00 2001 From: demvlad Date: Tue, 22 Oct 2024 17:53:59 +0300 Subject: [PATCH 11/16] Code style improvement --- src/main.js | 1 - 1 file changed, 1 deletion(-) diff --git a/src/main.js b/src/main.js index 2011ccc2..8540a6d3 100644 --- a/src/main.js +++ b/src/main.js @@ -4,7 +4,6 @@ import { throttle } from "throttle-debounce"; import { MapGrapher } from "./graph_map.js"; import { FlightLogGrapher } from "./grapher.js"; import { FlightLogVideoRenderer } from "./flightlog_video_renderer.js"; -import { VideoExportDialog } from "./video_export_dialog.js"; import { UserSettingsDialog } from "./user_settings_dialog.js"; import { GraphConfigurationDialog } from "./graph_config_dialog.js"; import { HeaderDialog } from "./header_dialog.js"; From 6cf481cb2bb5861f76ec96efefdb29d5af7e6899 Mon Sep 17 00:00:00 2001 From: Vladimir Demidov Date: Tue, 22 Oct 2024 20:16:17 +0300 Subject: [PATCH 12/16] The export buttons tooltip text is changed Co-authored-by: Mark Haslinghuis --- index.html | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/index.html b/index.html index 11fd7e35..2e38937c 100644 --- a/index.html +++ b/index.html @@ -472,7 +472,7 @@

Workspace

-
+
From a932979dda504cb5c35b5eb79f24dffbb0121fab Mon Sep 17 00:00:00 2001 From: Vladimir Demidov Date: Tue, 22 Oct 2024 20:16:59 +0300 Subject: [PATCH 13/16] Code style improvement Co-authored-by: Mark Haslinghuis --- src/css/main.css | 3 --- 1 file changed, 3 deletions(-) diff --git a/src/css/main.css b/src/css/main.css index 55cafe0f..c1a9163f 100644 --- a/src/css/main.css +++ b/src/css/main.css @@ -653,9 +653,6 @@ html.has-analyser-fullscreen.has-analyser color: black; } - - - .analyser input#analyserZoomX { width: 100px; height: 10px; From 3a61a8692b19960d9f66c5e1c3c7c2ff3c77663d Mon Sep 17 00:00:00 2001 From: Vladimir Demidov Date: Tue, 22 Oct 2024 20:18:09 +0300 Subject: [PATCH 14/16] Code style improvement Co-authored-by: Mark Haslinghuis --- src/spectrum-exporter.js | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/src/spectrum-exporter.js b/src/spectrum-exporter.js index cd9ff0b8..5e8b9105 100644 --- a/src/spectrum-exporter.js +++ b/src/spectrum-exporter.js @@ -33,10 +33,10 @@ export function SpectrumExporter(fftData, opts = {}) { worker.postMessage({fftOutput: fftData.fftOutput, blackBoxRate: fftData.blackBoxRate, opts: opts}); - } + } - // exposed functions - return { - dump: dump, - }; + // exposed functions + return { + dump: dump, + }; } From a5ddb07a558ffdde83c2bd92acfbcff0e0e1a0f5 Mon Sep 17 00:00:00 2001 From: demvlad Date: Tue, 22 Oct 2024 20:46:23 +0300 Subject: [PATCH 15/16] Code style improvement --- src/spectrum-exporter.js | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/src/spectrum-exporter.js b/src/spectrum-exporter.js index 5e8b9105..cd9ff0b8 100644 --- a/src/spectrum-exporter.js +++ b/src/spectrum-exporter.js @@ -33,10 +33,10 @@ export function SpectrumExporter(fftData, opts = {}) { worker.postMessage({fftOutput: fftData.fftOutput, blackBoxRate: fftData.blackBoxRate, opts: opts}); - } + } - // exposed functions - return { - dump: dump, - }; + // exposed functions + return { + dump: dump, + }; } From 3b4a0e04749e146f9190096a8d682f4730ca4c4f Mon Sep 17 00:00:00 2001 From: Mark Haslinghuis Date: Tue, 22 Oct 2024 19:51:09 +0200 Subject: [PATCH 16/16] Update index.html --- index.html | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/index.html b/index.html index 2e38937c..69c5ed09 100644 --- a/index.html +++ b/index.html @@ -473,7 +473,7 @@

Workspace

- +