From aef9813590fd5423e42b867c72762f8d2ff36bd9 Mon Sep 17 00:00:00 2001 From: l_samenv Date: Thu, 8 Aug 2024 16:19:21 +0200 Subject: [PATCH] Removed live indicator + began to write graphics menu --- client/SEAWebClient.html | 4 ++ .../components/divider/horizontal_divider.css | 12 +++++ .../components/divider/horizontal_divider.js | 20 ++++++++ client/components/help_entry/help_entry.css | 21 +++++++++ client/components/help_entry/help_entry.js | 44 ++++++++++++++++++ client/components/help_popup/help_popup.css | 20 ++++++++ client/components/help_popup/help_popup.js | 22 +++++++++ client/components/menu_popup/menu_popup.css | 33 +++++++++++++ client/components/menu_popup/menu_popup.js | 42 +++++++++++++++++ client/jsFiles/SEAWebClientGraphics.js | 9 +--- client/res/arrow.png | Bin 0 -> 21100 bytes client/res/close.png | Bin 0 -> 28752 bytes client/res/menu_white.png | Bin 0 -> 17925 bytes seaweb.py | 3 ++ 14 files changed, 222 insertions(+), 8 deletions(-) create mode 100644 client/components/divider/horizontal_divider.css create mode 100644 client/components/divider/horizontal_divider.js create mode 100644 client/components/help_entry/help_entry.css create mode 100644 client/components/help_entry/help_entry.js create mode 100644 client/components/help_popup/help_popup.css create mode 100644 client/components/help_popup/help_popup.js create mode 100644 client/components/menu_popup/menu_popup.css create mode 100644 client/components/menu_popup/menu_popup.js create mode 100644 client/res/arrow.png create mode 100644 client/res/close.png create mode 100644 client/res/menu_white.png diff --git a/client/SEAWebClient.html b/client/SEAWebClient.html index 7eaf6ef..a893a81 100644 --- a/client/SEAWebClient.html +++ b/client/SEAWebClient.html @@ -12,6 +12,10 @@ SEAWebClient + + + + diff --git a/client/components/divider/horizontal_divider.css b/client/components/divider/horizontal_divider.css new file mode 100644 index 0000000..b48661a --- /dev/null +++ b/client/components/divider/horizontal_divider.css @@ -0,0 +1,12 @@ +.horizontal-divider-container{ + width: 100%; + height: 10px; + display: flex; +} + +.horizontal-divider{ + height: 2px; + width: 80%; + background-color:black; + margin: auto; +} \ No newline at end of file diff --git a/client/components/divider/horizontal_divider.js b/client/components/divider/horizontal_divider.js new file mode 100644 index 0000000..36f478a --- /dev/null +++ b/client/components/divider/horizontal_divider.js @@ -0,0 +1,20 @@ +class HorizontalDivider extends HTMLElement{ + constructor(){ + super(); + } + + connectedCallback(){ + this.render() + } + + render(){ + this.innerHTML = ` + +
+
+
+ ` + } +} + +customElements.define("sea-horizontal-divider", HorizontalDivider) \ No newline at end of file diff --git a/client/components/help_entry/help_entry.css b/client/components/help_entry/help_entry.css new file mode 100644 index 0000000..e266a65 --- /dev/null +++ b/client/components/help_entry/help_entry.css @@ -0,0 +1,21 @@ +.help-entry{ + height: 28px; + display: flex; + margin-left: 10px; + margin-right: 10px; +} + +.help-entry-title{ + text-align: center; + vertical-align: middle; + line-height: 28px; +} + +.help-entry-arrow{ + width: 15px; + height: 15px; + margin-left: auto; + margin-top: auto; + margin-bottom: auto; + cursor: pointer; +} \ No newline at end of file diff --git a/client/components/help_entry/help_entry.js b/client/components/help_entry/help_entry.js new file mode 100644 index 0000000..fc7ce3c --- /dev/null +++ b/client/components/help_entry/help_entry.js @@ -0,0 +1,44 @@ +class HelpEntry extends HTMLElement{ + constructor(title, description){ + super(); + this.title = title; + this.description = description; + } + + displayPopup(){ + this.getElementsByTagName("sea-help-popup")[0].style.visibility = "visible"; + } + + hidePopup(){ + this.getElementsByTagName("sea-help-popup")[0].style.visibility = "hidden"; + } + + toggleVisibility(){ + if (this.getElementsByTagName("sea-help-popup")[0].style.visibility == "visible") + this.hidePopup(); + else + this.displayPopup(); + } + + connectedCallback(){ + this.render(); + this.getElementsByTagName("img")[0].onmouseenter = () => {this.displayPopup();}; + this.getElementsByTagName("img")[0].onmouseleave = () => {this.hidePopup();}; + // For mobile phones + this.getElementsByTagName("img")[0].onclick = () => {this.toggleVisibility();}; + } + + render(){ + this.innerHTML = ` + + +
+ ${this.title} + +
+ + `; + } +} + +customElements.define("sea-help-entry", HelpEntry); \ No newline at end of file diff --git a/client/components/help_popup/help_popup.css b/client/components/help_popup/help_popup.css new file mode 100644 index 0000000..26286e5 --- /dev/null +++ b/client/components/help_popup/help_popup.css @@ -0,0 +1,20 @@ +.help-popup{ + width: 300px; + height: 200px; + border: 2px solid black; + background-color: white; + border-radius: 10px; + z-index: 2; + position: absolute; + box-sizing: border-box; +} + +.help-popup-description-container{ + margin-left: 10px; + margin-right: 10px; + padding-top: 10px; +} + +.help-popup-description{ + overflow-wrap: break-word; +} \ No newline at end of file diff --git a/client/components/help_popup/help_popup.js b/client/components/help_popup/help_popup.js new file mode 100644 index 0000000..b609aa2 --- /dev/null +++ b/client/components/help_popup/help_popup.js @@ -0,0 +1,22 @@ +class HelpPopup extends HTMLElement{ + constructor(){ + super(); + } + + connectedCallback(){ + this.render(); + } + + render(){ + this.innerHTML = ` + +
+
+ ${this.getAttribute("helpdescription")} +
+
+ ` + } +} + +customElements.define("sea-help-popup", HelpPopup); \ No newline at end of file diff --git a/client/components/menu_popup/menu_popup.css b/client/components/menu_popup/menu_popup.css new file mode 100644 index 0000000..16d71de --- /dev/null +++ b/client/components/menu_popup/menu_popup.css @@ -0,0 +1,33 @@ +#menu{ + width: 300px; + height: 200px; + background-color: white; + position: absolute; + top: 28px; + right: 50%; + z-index: 1; + border: 2px solid black; +} + +#menu_title_container{ + display: flex; + width: 100%; + height: 20px; +} + +#menu_title_container span{ + margin-top: auto; + margin-bottom: auto; + margin-left: 5px; + +} + +#menu-popup-close{ + margin-left: auto; + margin-right: 2px; + margin-top: auto; + margin-bottom: auto; + height: 15px; + width: 15px; + cursor: pointer; +} diff --git a/client/components/menu_popup/menu_popup.js b/client/components/menu_popup/menu_popup.js new file mode 100644 index 0000000..5765ebc --- /dev/null +++ b/client/components/menu_popup/menu_popup.js @@ -0,0 +1,42 @@ +class MenuPopup extends HTMLElement{ + constructor(){ + super(); + } + + hide(){ + this.style.visibility = "hidden"; + } + + show(){ + this.style.visibility = "visible"; + } + + connectedCallback(){ + this.render(); + this.hide(); + document.getElementById("menu-popup-close").onclick = () => {this.hide()}; + } + + render(){ + this.innerHTML = ` + + `; + let cursorDescription = ` + To remove the cursor, you can double click on any graph. + ` + let menuContainer = document.getElementById("menu"); + + menuContainer.appendChild(new HorizontalDivider()); + + let cursorHelp = new HelpEntry("How to remove the cursor", cursorDescription); + + menuContainer.appendChild(cursorHelp); + } +} + +customElements.define("sea-menu", MenuPopup); \ No newline at end of file diff --git a/client/jsFiles/SEAWebClientGraphics.js b/client/jsFiles/SEAWebClientGraphics.js index bdad279..1d6dc66 100644 --- a/client/jsFiles/SEAWebClientGraphics.js +++ b/client/jsFiles/SEAWebClientGraphics.js @@ -270,7 +270,6 @@ let globalControls = (function (){ })(); let datesKey = "dates-indicator"; -let liveKey = "live-indicator"; let globalIndicators = (function (){ @@ -279,16 +278,12 @@ let globalIndicators = (function (){ function loadIndicators(panel){ let leftDate = Date.now() - 30*60*1000; let datesIndicator = new DatesIndicator(leftDate); - let liveIndicator = new LiveStateIndicator(); panel.appendChild(datesIndicator); - panel.appendChild(liveIndicator); - liveIndicator.changeToDisable(); - liveIndicator.style.marginLeft = "auto"; //sticks element to the right datesIndicator.style.marginLeft = "auto"; + datesIndicator.style.marginRight = "auto"; indicatorsMap[datesKey] = datesIndicator; - indicatorsMap[liveKey] = liveIndicator; } function getIndicatorsMap(){ @@ -424,8 +419,6 @@ let graphs = (function (){ function setLiveMode(mode=null) { if (mode !== null){ liveMode = mode; - if(mode) globalIndicators.getIndicatorsMap()[liveKey].changeToEnable(); - else globalIndicators.getIndicatorsMap()[liveKey].changeToDisable(); } if (liveMode && cursorLinePos === null) // gotoNowElm.innerHTML = ''; diff --git a/client/res/arrow.png b/client/res/arrow.png new file mode 100644 index 0000000000000000000000000000000000000000..c9b5c00153cadcaa33382f09ee3896d7dcf411ae GIT binary patch literal 21100 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 E9}aDKJ^%m! literal 0 HcmV?d00001 diff --git a/client/res/close.png b/client/res/close.png new file mode 100644 index 0000000000000000000000000000000000000000..a2961e784c6d3ca983932ed81cb74197934ce74d GIT binary patch literal 28752 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 EA4-D4#Q*>R literal 0 HcmV?d00001 diff --git a/client/res/menu_white.png b/client/res/menu_white.png new file mode 100644 index 0000000000000000000000000000000000000000..f2e853bce10d47017ae269066eec51283e1e81ae GIT binary patch literal 17925 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 K*Td_&#QXzytERUA literal 0 HcmV?d00001 diff --git a/seaweb.py b/seaweb.py index 7bfcd98..42d7b21 100755 --- a/seaweb.py +++ b/seaweb.py @@ -149,6 +149,9 @@ def subdir_test_file(file): resp = flask.send_file("client/test/"+file, mimetype=guess_mimetype(file)) return resp +@app.route('/components/menu_popup/') +@app.route('/components/help_popup/') +@app.route('/components/help_entry/') @app.route('/components/control/') @app.route('/components/divider/') @app.route('/components/states_indicator/dates/')