From 00ee710246450ab41686a6229b4e1e1f78fb6742 Mon Sep 17 00:00:00 2001 From: ekzyis Date: Sun, 8 Sep 2024 17:16:08 +0200 Subject: [PATCH] Show line chart with sample data --- .gitignore | 4 ++ package-lock.json | 51 +++++++++++++++++++ package.json | 10 ++++ public/js/chart.js | 66 +++++++++++++++++++++++++ server/router/pages/components/qr.templ | 2 +- server/router/pages/market.templ | 7 ++- 6 files changed, 135 insertions(+), 5 deletions(-) create mode 100644 package-lock.json create mode 100644 package.json create mode 100644 public/js/chart.js diff --git a/.gitignore b/.gitignore index b220c76..6696b31 100644 --- a/.gitignore +++ b/.gitignore @@ -13,3 +13,7 @@ public/hotreload # tailwindcss public/css/tailwind.css + +# js +node_modules +public/js/*.min.js diff --git a/package-lock.json b/package-lock.json new file mode 100644 index 0000000..01b447e --- /dev/null +++ b/package-lock.json @@ -0,0 +1,51 @@ +{ + "name": "delphi.market", + "lockfileVersion": 3, + "requires": true, + "packages": { + "": { + "dependencies": { + "chart.js": "^4.4.4", + "chartjs-adapter-dayjs-4": "^1.0.4", + "dayjs": "^1.11.13" + } + }, + "node_modules/@kurkle/color": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/@kurkle/color/-/color-0.3.2.tgz", + "integrity": "sha512-fuscdXJ9G1qb7W8VdHi+IwRqij3lBkosAm4ydQtEmbY58OzHXqQhvlxqEkoz0yssNVn38bcpRWgA9PP+OGoisw==", + "license": "MIT" + }, + "node_modules/chart.js": { + "version": "4.4.4", + "resolved": "https://registry.npmjs.org/chart.js/-/chart.js-4.4.4.tgz", + "integrity": "sha512-emICKGBABnxhMjUjlYRR12PmOXhJ2eJjEHL2/dZlWjxRAZT1D8xplLFq5M0tMQK8ja+wBS/tuVEJB5C6r7VxJA==", + "license": "MIT", + "dependencies": { + "@kurkle/color": "^0.3.0" + }, + "engines": { + "pnpm": ">=8" + } + }, + "node_modules/chartjs-adapter-dayjs-4": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/chartjs-adapter-dayjs-4/-/chartjs-adapter-dayjs-4-1.0.4.tgz", + "integrity": "sha512-yy9BAYW4aNzPVrCWZetbILegTRb7HokhgospPoC3b5iZ5qdlqNmXts2KdSp6AqnjkPAp/YWyHDxLvIvwt5x81w==", + "license": "MIT", + "engines": { + "node": ">=10" + }, + "peerDependencies": { + "chart.js": ">=4.0.1", + "dayjs": "^1.9.7" + } + }, + "node_modules/dayjs": { + "version": "1.11.13", + "resolved": "https://registry.npmjs.org/dayjs/-/dayjs-1.11.13.tgz", + "integrity": "sha512-oaMBel6gjolK862uaPQOVTA7q3TZhuSvuMQAAglQDOWYO9A91IrAOUJEyKVlqJlHE0vq5p5UXxzdPfMH/x6xNg==", + "license": "MIT" + } + } +} diff --git a/package.json b/package.json new file mode 100644 index 0000000..53666b2 --- /dev/null +++ b/package.json @@ -0,0 +1,10 @@ +{ + "scripts": { + "build": "esbuild public/js/chart.js --bundle --minify --outfile=public/js/bundle.min.js" + }, + "dependencies": { + "chart.js": "^4.4.4", + "chartjs-adapter-dayjs-4": "^1.0.4", + "dayjs": "^1.11.13" + } +} diff --git a/public/js/chart.js b/public/js/chart.js new file mode 100644 index 0000000..116f1e0 --- /dev/null +++ b/public/js/chart.js @@ -0,0 +1,66 @@ +import { + Chart, + LineController, + TimeScale, + LinearScale, + PointElement, + LineElement, +} from 'chart.js' +import 'chartjs-adapter-dayjs-4/dist/chartjs-adapter-dayjs-4.esm'; + +Chart.register( + LineController, + TimeScale, + LinearScale, + PointElement, + LineElement, +); + +const element = document.getElementById('chart') + +// TODO: get data from server +const yes = [ + { x: new Date('2024-01-01'), y: 20 }, + { x: new Date('2024-02-01'), y: 41 }, + { x: new Date('2024-03-01'), y: 53 } +] + +const no = yes.map(({ x, y }) => ({ x, y: 100 - y })) + +const config = { + type: 'line', + data: { + datasets: [ + { + data: yes, + backgroundColor: '#149e613d', + borderColor: '#149e613d', + borderWidth: 5, + tension: 0, // draw straight lines instead of bezier curves + pointStyle: false + }, + { + data: no, + backgroundColor: '#f5395e3d', + borderColor: '#f5395e3d', + borderWidth: 5, + tension: 0, + pointStyle: false + } + ] + }, + options: { + scales: { + x: { + type: 'time', + time: { unit: 'month' } + }, + y: { + min: 0, + max: 100 + } + } + } +} + +new Chart(element, config); \ No newline at end of file diff --git a/server/router/pages/components/qr.templ b/server/router/pages/components/qr.templ index e181a8b..bcdf273 100644 --- a/server/router/pages/components/qr.templ +++ b/server/router/pages/components/qr.templ @@ -13,7 +13,7 @@ templ Qr(value string, href string) { > - + { value } diff --git a/server/router/pages/market.templ b/server/router/pages/market.templ index 6e27efd..d24def1 100644 --- a/server/router/pages/market.templ +++ b/server/router/pages/market.templ @@ -17,12 +17,11 @@ templ Market(m types.Market, q0 types.MarketQuote, q1 types.MarketQuote, uQ0 int > @components.Nav()
- - @components.Figlet("random", "market") - -
{ m.Question }
+
{ m.Question }
{ humanize.Time(m.EndDate) }
+
+
if m.Description != "" { { m.Description }