wowtoken.app

git clone https://git.emily.sh/wowtoken-app/wowtoken.app.git
Log | Files | Refs | README | LICENSE

commit 5abf6fe132264c4b26224b95a40c06dbe15783b8
parent 487bb86a29f1f457ddf52db9c338ab399e87aadd
Author: Emily Doherty <git@emily.sh>
Date:   Wed, 16 Oct 2024 23:53:53 -0700

Adds a high and low price data callout

Diffstat:
Asrc/highTime.js | 19+++++++++++++++++++
Msrc/index.html | 9+++++++--
Msrc/index.js | 21++++++++++-----------
Asrc/lowTime.js | 18++++++++++++++++++
Msrc/style.css | 16++++++++++++++++
Msrc/tokenChart.js | 70++++++++++++++++++++++++++++++++++++++++++++++++++++++++++------------
6 files changed, 128 insertions(+), 25 deletions(-)

diff --git a/src/highTime.js b/src/highTime.js @@ -0,0 +1,18 @@ +import Datum from "./datum"; + + +function updateHighTime() { + const highTime= document.getElementById("high-time"); + + const currentTime = document.getElementById("time").selectedOptions[0].innerText; + if (currentTime.toLowerCase() !== highTime.innerText) { + highTime.innerText = currentTime.toLowerCase(); + } +} + +function updateHighVal(datum) { + const highVal = document.getElementById("high-val"); + highVal.innerHTML = datum.getPrice().toLocaleString(); +} + +export {updateHighTime, updateHighVal}; +\ No newline at end of file diff --git a/src/index.html b/src/index.html @@ -12,7 +12,13 @@ </head> <body> <div class="flex-container"> - <div><h1>1 Token = <u id="token">0</u> Gold</h1></div> + <div class="data-header"> + <h1>1 Token = <u id="token">0</u> Gold</h1> + <div class="high-low"> + <p>Highest in last <em id="high-time">3 days</em>: <u id="high-val">0</u></p> + <p>Lowest in last <em id="low-time">3 days</em>: <u id="low-val">0</u></p> + </div> + </div> <div id="chart-frame"> <div class="lds-ripple" id="loader"><div></div><div></div></div> <canvas id="token-chart"></canvas> @@ -54,7 +60,6 @@ <select name="aggregate" id="aggregate"> <option id='agg_none' value="none">None</option> <option id='agg_davg' value="daily_mean">Daily Average</option> - <option id='agg_wavg' value="weekly_mean" disabled>Weekly Average</option> </select> </fieldset> <fieldset id="y-start-options"> diff --git a/src/index.js b/src/index.js @@ -14,23 +14,14 @@ import "./style.css" import fetchCurrent from "./fetchCurrent"; import fetchData from "./fetchData"; +import {updateHighTime} from "./highTime"; +import {updateLowTime} from "./lowTime"; import {addLoader, removeLoader} from "./loader"; import TokenChart from "./tokenChart"; import Datum from "./datum"; // TODO: This file should be seperated into multiple with better ownership -Chart.register( - LineElement, - PointElement, - LineController, - LinearScale, - TimeSeriesScale, - Legend, - Title, - Tooltip -) - let currentRegionSelection = ''; let currentTimeSelection = ''; let currentAggregateSelection = ''; @@ -104,6 +95,7 @@ async function updateRegionPreference(newRegion) { currentRegionSelection = newRegion; } formatToken(); + chart = new TokenChart(); await pullChartData(); } @@ -114,7 +106,10 @@ async function updateTimePreference(newTime) { currentTimeSelection = newTime; await aggregateFunctionToggle(); } + chart = new TokenChart(); await pullChartData(); + updateHighTime(); + updateLowTime(); } async function updateAggregatePreference(newAggregate) { @@ -123,6 +118,7 @@ async function updateAggregatePreference(newAggregate) { addLoader(); currentAggregateSelection = newAggregate; } + chart = new TokenChart(); await pullChartData(); } @@ -151,6 +147,7 @@ async function pullChartData() { else { for (let i = 0; i < chartData[currentRegionSelection].length; i++) { await chart.addDataToChart(chartData[currentRegionSelection][i]); + console.warn("This should never hit, and should be okay to remove"); } } removeLoader(); @@ -190,6 +187,8 @@ function detectTimeQuery(urlSearchParams) { timeDDL.options[i].selected = true; } } + updateHighTime(); + updateLowTime(); } else { console.warn("An incorrect or malformed time selection was made in the query string"); } diff --git a/src/lowTime.js b/src/lowTime.js @@ -0,0 +1,17 @@ +import Datum from "./datum"; + +function updateLowTime() { + const lowTime= document.getElementById("low-time"); + + const currentTime = document.getElementById("time").selectedOptions[0].innerText; + if (currentTime.toLowerCase() !== lowTime.innerText) { + lowTime.innerText = currentTime.toLowerCase(); + } +} + +function updateLowVal(datum) { + const lowVal = document.getElementById("low-val"); + lowVal.innerHTML = datum.getPrice().toLocaleString(); +} + +export {updateLowTime, updateLowVal}; +\ No newline at end of file diff --git a/src/style.css b/src/style.css @@ -367,6 +367,7 @@ details[open] summary { margin-bottom: 0.5em; } + #option_select { font-size: 20px; line-height: 40px; @@ -419,6 +420,21 @@ details[open] summary { margin: 10px; } +.data-header h1 { + margin-top: 24px; + margin-bottom: 24px; +} + +.high-low { + display: flex; + justify-content: space-evenly; +} + +.high-low p { + line-height: 1em; + font-size: 24px; +} + .lds-ripple { position: relative; align-self: center; diff --git a/src/tokenChart.js b/src/tokenChart.js @@ -11,6 +11,20 @@ import { } from 'chart.js'; import 'chartjs-adapter-dayjs-3'; +Chart.register( + LineElement, + PointElement, + LineController, + LinearScale, + TimeSeriesScale, + Legend, + Title, + Tooltip +) + +import {updateHighVal} from "./highTime"; +import {updateLowVal} from "./lowTime"; + function lookupTimeUnit(query){ const lookup = { 'h': 'day', @@ -27,31 +41,41 @@ export default class TokenChart { this._context = document.getElementById("token-chart").getContext('2d'); this._chartActive = false; this._lastDatum = null; - this._lateUpdate = true + this._highDatum = null; + this._lowDatum = null; + this._lateUpdate = false; + } + + get highDatum() { + return this._highDatum; + } + + get lowDatum() { + return this._lowDatum; } - async createChart(region, time, yLevel, data = []) { + async createChart(region, time, yLevel, data) { const chartData = []; let lateUpdateData = this._lastDatum; for (let i = 0; i < data.length; i++) { this._lastDatum = data[i]; + if (this._highDatum === null || this._lastDatum.getPrice() > this._highDatum.getPrice()) { + this._highDatum = data[i]; + } + + if (this._lowDatum === null || this._lowDatum.getPrice() > this._lastDatum.getPrice()) { + this._lowDatum = data[i]; + } + chartData.push({ x: data[i].getX(), y: data[i].getY(), }) } - if (this._lateUpdate) { - if (this._lastDatum.getPrice() !== lateUpdateData.getPrice() && - this._lastDatum.getTime() < lateUpdateData.getTime()) { - chartData.push({ - x: lateUpdateData.getX(), - y: lateUpdateData.getY(), - }) - } - this._lateUpdate = false - } + updateHighVal(this.highDatum); + updateLowVal(this.lowDatum); this._chart = new Chart(this._context, { type: 'line', @@ -100,12 +124,25 @@ export default class TokenChart { }, } }); + + if (this._lateUpdate) { + if (this._lastDatum.getPrice() !== lateUpdateData.getPrice() && + this._lastDatum.getTime() < lateUpdateData.getTime()) { + await this.addDataToChart(lateUpdateData); + } + this._lateUpdate = false + } + this._chartActive = true; } async destroyChart() { await this._chart.destroy(); this._chartActive = false; + this._lastDatum = null; + this._highDatum = null; + this._lowDatum = null; + this._lateUpdate = false; } async lateUpdate(datum){ @@ -114,6 +151,15 @@ export default class TokenChart { } async addDataToChart(datum) { + this._lastDatum = datum; + if (datum.getPrice() > this._highDatum.getPrice()) { + this._highDatum = datum; + updateHighVal(this.highDatum); + } + else if (datum.getPrice() < this._lowDatum.getPrice()) { + this._lowDatum = datum; + updateLowVal(this.lowDatum); + } this._chart.data.datasets.forEach((dataset) => { dataset.data.push({ x: datum.getX(),