From 933088fd0831be924d2fffccb755547aebe6cfaf Mon Sep 17 00:00:00 2001 From: l_samenv Date: Tue, 3 Sep 2024 16:28:47 +0200 Subject: [PATCH] Curves settings UI --- client/SEAWebClient.html | 3 + .../color_selector/color_selector.css | 3 + .../color_selector/color_selector.js | 49 ++++ .../curves_settings_popup.css | 119 +++++++++ .../curves_settings_popup.js | 250 ++++++++++++++++++ client/jsFiles/SEAWebClientGraphics.js | 17 ++ client/res/bin.png | Bin 0 -> 52120 bytes seaweb.py | 2 + 8 files changed, 443 insertions(+) create mode 100644 client/components/curves_settings_popup/color_selector/color_selector.css create mode 100644 client/components/curves_settings_popup/color_selector/color_selector.js create mode 100644 client/components/curves_settings_popup/curves_settings_popup.css create mode 100644 client/components/curves_settings_popup/curves_settings_popup.js create mode 100644 client/res/bin.png diff --git a/client/SEAWebClient.html b/client/SEAWebClient.html index 5d23faf..06687bf 100644 --- a/client/SEAWebClient.html +++ b/client/SEAWebClient.html @@ -13,6 +13,9 @@ + + + diff --git a/client/components/curves_settings_popup/color_selector/color_selector.css b/client/components/curves_settings_popup/color_selector/color_selector.css new file mode 100644 index 0000000..d8c25d4 --- /dev/null +++ b/client/components/curves_settings_popup/color_selector/color_selector.css @@ -0,0 +1,3 @@ +.color-selector-select{ + width:57px; +} \ No newline at end of file diff --git a/client/components/curves_settings_popup/color_selector/color_selector.js b/client/components/curves_settings_popup/color_selector/color_selector.js new file mode 100644 index 0000000..bfd0d07 --- /dev/null +++ b/client/components/curves_settings_popup/color_selector/color_selector.js @@ -0,0 +1,49 @@ +class ColorSelector extends HTMLElement{ + constructor(){ + super(); + } + + connectedCallback(){ + this.render(); + } + + setValue(value){ + let options = this.querySelectorAll("select option"); + + for(let option of options){ + if(option.value == value){ + option.selected = true; + } + } + } + + getValue(){ + return this.getElementsByTagName("select")[0].value; + } + + render(){ + this.innerHTML = ` + + + `; + } +} + +customElements.define("sea-color-selector", ColorSelector); \ No newline at end of file diff --git a/client/components/curves_settings_popup/curves_settings_popup.css b/client/components/curves_settings_popup/curves_settings_popup.css new file mode 100644 index 0000000..d5ad891 --- /dev/null +++ b/client/components/curves_settings_popup/curves_settings_popup.css @@ -0,0 +1,119 @@ +#curves-settings-popup{ + width: 100%; + height: 100%; + z-index: 53; + position: absolute; + top: 0; + box-sizing: border-box; + background-color: rgba(0, 0, 0, 0.2); + margin-top: 30px; + padding-bottom: 60px; +} + +#curves-settings-popup-container{ + width: 380px; + height: 100%; + border: 2px solid black; + margin: auto; + background-color: white; +} + +#curves-settings-popup-header{ + height: 40px; + display: flex; + border-bottom: 2px solid black; + box-sizing: border-box; +} + +#curves-settings-popup-header span{ + margin-top: auto; + margin-bottom: auto; + margin-left: 10px; +} + +#curves-settings-popup-header img{ + width: 15px; + height: 15px; + margin-left: auto; + margin-right: 10px; + margin-top: auto; + margin-bottom: auto; + cursor: pointer; +} + +#curves-settings-popup-content{ + padding: 10px; + height: calc(100% - 80px); +} + +.button-center-wrapper{ + width: 100%; + height: 20px; + padding-top: 5px; + padding-bottom: 5px; + display: flex; + justify-content: center; + align-items: center; +} + +.scrollable-content{ + height: 100%; + overflow-y: auto; +} + +#curves-settings-popup-table{ + width: 335px; +} +#curves-settings-popup-table, +#curves-settings-popup-table tr th, +#curves-settings-popup-table tr td +{ + border-collapse: collapse; + border: 1px solid black; + padding: 0; +} + +#curves-settings-popup-table th { + text-align: left; +} + +.text-input{ + padding: 0; + border: 0; +} + +.bin-cell{ + width: 15px; +} + +td img{ + width: 15px; + height: 15px; +} + +.variable-cell, .parameter-cell, .cat-cell{ + width: 73px; +} +.color-cell{ + width: 57px; +} + +.unit-cell{ + width: 37px; +} + +#curves-settings-popup-footer{ + height: 40px; + display: flex; + border-top: 2px solid black; + box-sizing: border-box; + justify-content: flex-end; + display: flex; + +} + +#curves-settings-popup-footer button{ + margin-top: auto; + margin-bottom: auto; + margin-right: 10px; +} diff --git a/client/components/curves_settings_popup/curves_settings_popup.js b/client/components/curves_settings_popup/curves_settings_popup.js new file mode 100644 index 0000000..aca89e4 --- /dev/null +++ b/client/components/curves_settings_popup/curves_settings_popup.js @@ -0,0 +1,250 @@ +class CurvesSettingsPopup extends HTMLElement{ + + constructor(applySettingsCallback){ + super(); + this.applySettingsCallback = applySettingsCallback; + } + + initTable(){ + + let userConfiguration = this.getUserConfiguration(); + let tbody = this.querySelector("#curves-settings-popup-table tbody"); + tbody.innerHTML = ""; + + for(let lineConfiguration of userConfiguration){ + this.createRow(tbody, lineConfiguration); + } + + this.createRow(tbody); // we add another row by default at the end + } + + doApplySettingsCallback(){ + + try{ + let localStorageBuffer = []; + let formattedUserConfiguration = this.getFormattedUserConfiguration(localStorageBuffer); + + localStorage.clear(); + this.saveUserConfiguration(localStorageBuffer); + + this.hide(); + this.applySettingsCallback(formattedUserConfiguration); + }catch{} + + } + + /** + * Feeds localStorageBuffer with user rows to save, while formatting each row for later API call + * Throws an error if a row is invalid (no variable is given for a non empty line) + * @param {[]} localStorageBuffer an array feeded by this method, that contains the JS object representing the data out of a line + * @returns the formatted user configuration object to be passed as the payload to the server + */ + getFormattedUserConfiguration(localStorageBuffer){ + let formatedUserConfiguration = {}; + + let rows = this.querySelectorAll("tbody tr"); + for(let row of rows){ + + let configurationLineObject = this.getRowValues(row); + let formmatedLineConfiguration = {...configurationLineObject}; + + if(!formmatedLineConfiguration.hasOwnProperty("variable") && Object.keys(formmatedLineConfiguration).length > 0){ + alertify.error("Variable not defined for some row(s)."); + throw Error; + }else{ + let key = formmatedLineConfiguration["variable"]; + delete formmatedLineConfiguration["variable"]; + if(formmatedLineConfiguration.hasOwnProperty("parameter")){ + key += "." + formmatedLineConfiguration["parameter"]; + delete formmatedLineConfiguration["parameter"]; + } + if(Object.keys(formmatedLineConfiguration).length > 0){ + formatedUserConfiguration[key] = formmatedLineConfiguration; + localStorageBuffer.push(configurationLineObject); + } + } + } + return formatedUserConfiguration; + } + + /** + * Gets the data out of the given HTML row as a JSON object + * @param {*} row An HTML tr element of the table + * @returns A JS object containing the data out of the HTML element : there is a key if the value is not an empty string + */ + getRowValues(row){ + let configuration = {}; + + for(let cell of row.children){ + let content = cell.children[0]; //there is only one child per cell + if(content.nodeName == "INPUT" && content.value !== ""){ + configuration[content.name] = content.value; + } + else if (content.nodeName == "SEA-COLOR-SELECTOR" && content.getValue() !== ""){ + configuration["color"] = content.getValue(); + } + } + return configuration; + } + + getUserConfiguration(){ + let userConfiguration = []; + for(let i = 0; i < localStorage.length; i++){ + userConfiguration.push(JSON.parse(localStorage.getItem(localStorage.key(i)))); + } + return userConfiguration; + } + + saveUserConfiguration(userConfiguration){ + for(let i = 0; i < userConfiguration.length; i++){ + localStorage.setItem(i, JSON.stringify(userConfiguration[i])); + } + } + + addNewRowIfEmpty(){ + let tbody = this.querySelector("#curves-settings-popup-table tbody"); + if(tbody.childNodes.length == 0){ + this.createRow(tbody); + } + } + + addRow(){ + let tbody = this.querySelector("#curves-settings-popup-table tbody"); + this.createRow(tbody); + } + + show(){ + this.style.visibility = "visible"; + this.initTable(); + window.addEventListener("click", this.backgroundClickCallback); + } + + hide(){ + this.style.visibility = "hidden"; + window.removeEventListener("click", this.backgroundClickCallback); + } + + backgroundClickCallback = ({target}) => { + if(target.id == "curves-settings-popup"){ + this.doApplySettingsCallback(); + } + } + + connectedCallback(){ + this.render(); + this.hide(); + this.getElementsByTagName("img")[0].onclick = () => {this.doApplySettingsCallback();}; + this.getElementsByClassName("add-row-button")[0].onclick = () => {this.addRow();}; + this.getElementsByClassName("cancel-button")[0].onclick = () => {this.hide();}; + this.getElementsByClassName("apply-button")[0].onclick = () => {this.doApplySettingsCallback();}; + } + + // + /** + * Adds a row to tbody + * The process is disigned in this way because seaColorSelector.setValue is called, and its content has to be + * generated before calling this method, that is why we need to append the newly created HTML element + * as soon as possible. + * If lineConfiguration == null, an empty row is added to the table + * @param {*} tbody - The HTML element of the table body + * @param {*} lineConfiguration - The object representing one line of configuration on the client side + * @returns + */ + createRow(tbody, lineConfiguration = null){ + + let row = document.createElement("tr"); + tbody.appendChild(row) + let binCell = document.createElement("td"); + + let binImg = document.createElement("img"); + binImg.src = "res/bin.png"; + binImg.classList.add("bin-cell"); + binImg.onclick = () => { + binImg.parentNode.parentNode.remove(); + this.addNewRowIfEmpty(); + } + binCell.appendChild(binImg); + row.append(binCell) + + this.createTextInput(row, lineConfiguration, "variable") + + this.createTextInput(row, lineConfiguration, "parameter") + + this.createTextInput(row, lineConfiguration, "cat") + + let colorCell = document.createElement("td"); + let seaColorSelector = new ColorSelector(); + row.append(colorCell) + colorCell.appendChild(seaColorSelector); //need to first append it before calling setValue + seaColorSelector.setValue(""); + if(lineConfiguration != null && lineConfiguration.hasOwnProperty('color')){ + seaColorSelector.setValue(lineConfiguration['color']); + } + + this.createTextInput(row, lineConfiguration, "unit") + + return row; + } + + createTextInput(row, lineConfiguration, type){ + let cell = document.createElement("td"); + let input = document.createElement("input"); + input.type = "text"; + input.spellcheck = false + input.autocorrect = "off" + input.name = type; + input.classList.add(`${type}-cell`, "text-input"); + input.value = ""; + if(lineConfiguration != null && lineConfiguration.hasOwnProperty(type)){ + input.value = lineConfiguration[type]; + } + cell.appendChild(input); + row.append(cell) + } + + render(){ + this.innerHTML = ` + +
+
+ +
+ Curves settings + +
+ +
+ +
+ + + + + + + + + + + + + +
VariableParameterCategoryColorUnit
+
+ +
+
+
+ + + +
+
+ `; + } +} + +customElements.define("sea-curves-settings-popup", CurvesSettingsPopup); \ No newline at end of file diff --git a/client/jsFiles/SEAWebClientGraphics.js b/client/jsFiles/SEAWebClientGraphics.js index 69238bc..c979eae 100644 --- a/client/jsFiles/SEAWebClientGraphics.js +++ b/client/jsFiles/SEAWebClientGraphics.js @@ -249,6 +249,7 @@ let globalIndicators = (function (){ let datesIndicator = new DateIndicator(leftDate); datesIndicator.addEventListener("click", function () { exportPopup.hide(); + curvesSettingsPopup.hide(); menuGraphicsPopup.hide(); datesPopup.show(); }) @@ -277,14 +278,17 @@ function loadGraphicsMenu(panel){ menuGraphicsPopup = new MenuPopup(); let exportActionEntry = new ActionEntry("Export", graphs.displayExportPopup, () => {menuGraphicsPopup.hide()}); + let curvesSettingsActionEntry = new ActionEntry("Curves settings", () => {curvesSettingsPopup.show();}, () => {menuGraphicsPopup.hide()}); let removeCursorHelpEntry = new HelpEntry("How to remove the cursor", "You can double click/tap on any graph."); menuGraphicsPopup.addEntry(exportActionEntry) + menuGraphicsPopup.addEntry(curvesSettingsActionEntry); menuGraphicsPopup.addHorizontalDivider(); menuGraphicsPopup.addEntry(removeCursorHelpEntry); let graphicsMenuControl = new Control("res/menu_white.png", "res/menu_white.png", "Menu", () => { datesPopup.hide(); exportPopup.hide(); + curvesSettingsPopup.hide(); menuGraphicsPopup.show(); }); panel.appendChild(menuGraphicsPopup); @@ -315,6 +319,18 @@ function exportCallback(selectedVariables, startDateTimeMs, endDateTimeMs, nan, a.click() } +let curvesSettingsPopup = undefined; + +function loadCurvesSettingsPopup(){ + let graphsContainer = document.getElementsByClassName("graphs-container")[0]; + curvesSettingsPopup = new CurvesSettingsPopup(applySettingsCallback); + graphsContainer.appendChild(curvesSettingsPopup); +} + +function applySettingsCallback(userConfiguration){ + console.log(JSON.stringify(userConfiguration)); +} + let graphs = (function (){ let dataset_to_graph_map = {}; // a dictionnary mapping a variable name to a two values array, containing its graph index and its position inside the graph let blocks, liveMode=true, top_vars=[], bottom_vars=[]; @@ -937,6 +953,7 @@ let graphs = (function (){ }); loadExportPopup(); + loadCurvesSettingsPopup(); loadDatesPopup(); globalIndicators.loadIndicators(graphicsPanel); globalControls.loadControls(graphicsPanel); diff --git a/client/res/bin.png b/client/res/bin.png new file mode 100644 index 0000000000000000000000000000000000000000..0a8b5abc579e9b146eb9f9ce9ce24b6420bd6eec GIT binary patch literal 52120 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
A!^u*Cs>9(9F4KD~&g$b7 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') +@app.route('/components/curves_settings_popup/') @app.route('/components/action_entry/') @app.route('/components/export_popup/') @app.route('/components/dates_popup/')