From 8c08a9a30eede398460d1b4091767e69d62d4b07 Mon Sep 17 00:00:00 2001 From: Jason De Lanerolle Date: Fri, 23 Oct 2026 14:31:21 -0400 Subject: [PATCH 1/4] yes --- CHANGELOG.md | 3 +++ app/Svg/Parser.hs | 10 +++++----- style/app.scss | 24 ++++++++++++++++++++---- 3 files changed, 28 insertions(+), 9 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 127278024..6394b99b4 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -6,6 +6,8 @@ ### ✨ New features/enhancements +- Changed the colour of hybrid nodes to avoid a visual clash with the darkened background when selecting a focus + ### 🐛 Bug fixes ### 🔧 Internal changes @@ -36,6 +38,7 @@ - Refactored `Database.Tables.MeetTime` into `Models.Meeting` and renamed it to `MeetingParsedData`; consolidated and refactored timetable JSON parsing helpers - Restructured `courseography.cabal` to separate executable from library, extract shared settings, and remove `hlint` - Refactored `createReqBody` in `app/Config.hs` to use session field from `config.yaml` +- Changed SVG parsing to leave the `fill` column empty when inserting hybrid nodes into the database ## [0.8.1] - 2026-08-10 diff --git a/app/Svg/Parser.hs b/app/Svg/Parser.hs index d11fcb319..ad0f9c7ae 100644 --- a/app/Svg/Parser.hs +++ b/app/Svg/Parser.hs @@ -161,7 +161,7 @@ parseGraph key tags = ( not . \s -> shapePos s `elem` map shapePos shapes && isEdge s - && elem (shapeType_ s) [Node, Hybrid] + && shapeType_ s == Node ) shapes @@ -735,10 +735,10 @@ updateShape :: Shape updateShape fill r = r - { shapeFill = - if T.null (shapeFill r) || shapeFill r == "none" - then fill - else shapeFill r + { shapeFill = let fill' = (if T.null (shapeFill r) || shapeFill r == "none" + then fill + else shapeFill r) + in if fill' == "#888888" then "" else fill' , shapeType_ = if fill == "#888888" then Hybrid diff --git a/style/app.scss b/style/app.scss index 4d610265a..b0773cac3 100644 --- a/style/app.scss +++ b/style/app.scss @@ -60,7 +60,8 @@ $graph-overlay-side-margin: 15px; // Base neutrals --color-white: #fff; --color-black: #000; - --background-color: #f0f5f8; + --background-color: + #f0f5f8; // Brand theme (header, buttons, focus graph) --primary-color: #5c497e; @@ -84,7 +85,7 @@ $graph-overlay-side-margin: 15px; // Graph / course-map paths and nodes --main-path-color: var(--color-black); --missing-path-color: #c01; - --hybrid-node-fill-color: #888; + --hybrid-node-fill-color: #b7b7b7; --node-inactive-fill-color: #ccc; // Course/timetable status colors @@ -882,8 +883,9 @@ g.hybrid { } g.hybrid > text { - fill: var(--color-white); + fill: var(--color-black); font-size: 9pt; + font-style: italic; stroke: none; text-anchor: middle; } @@ -893,8 +895,22 @@ g.hybrid > rect { stroke: var(--color-black); } +g.hybrid.active > rect { + opacity: 1; +} + +g.hybrid.active > text { + opacity: 1; +} + g.hybrid.inactive > rect { - stroke-width: 0; + opacity: 0.4; + stroke-width: 1; + stroke-dasharray: none; +} + +g.hybrid.inactive > text { + opacity: 0.45; } g.active > rect { From a6e86e5510337419552bc13983dbcc550df3f42d Mon Sep 17 00:00:00 2001 From: Jason De Lanerolle Date: Fri, 23 Oct 2026 14:50:29 -0400 Subject: [PATCH 2/4] revert accidental newline --- style/app.scss | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/style/app.scss b/style/app.scss index b0773cac3..388c0a830 100644 --- a/style/app.scss +++ b/style/app.scss @@ -60,8 +60,7 @@ $graph-overlay-side-margin: 15px; // Base neutrals --color-white: #fff; --color-black: #000; - --background-color: - #f0f5f8; + --background-color: #f0f5f8; // Brand theme (header, buttons, focus graph) --primary-color: #5c497e; From a38c00eb31768995edf87c9ea3f4926c5eec0bf7 Mon Sep 17 00:00:00 2001 From: Jason De Lanerolle Date: Fri, 23 Oct 2026 14:52:35 -0400 Subject: [PATCH 3/4] fourmolu --- app/Svg/Parser.hs | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) diff --git a/app/Svg/Parser.hs b/app/Svg/Parser.hs index ad0f9c7ae..7aaeec15e 100644 --- a/app/Svg/Parser.hs +++ b/app/Svg/Parser.hs @@ -735,10 +735,13 @@ updateShape :: Shape updateShape fill r = r - { shapeFill = let fill' = (if T.null (shapeFill r) || shapeFill r == "none" - then fill - else shapeFill r) - in if fill' == "#888888" then "" else fill' + { shapeFill = + let fill' = + ( if T.null (shapeFill r) || shapeFill r == "none" + then fill + else shapeFill r + ) + in if fill' == "#888888" then "" else fill' , shapeType_ = if fill == "#888888" then Hybrid From b7e543f14faf6cd421adbf8567d98b1a6505749e Mon Sep 17 00:00:00 2001 From: Jason De Lanerolle Date: Fri, 23 Oct 2026 14:58:38 -0400 Subject: [PATCH 4/4] remove redundant css rule --- style/app.scss | 1 - 1 file changed, 1 deletion(-) diff --git a/style/app.scss b/style/app.scss index 388c0a830..c932f7ac8 100644 --- a/style/app.scss +++ b/style/app.scss @@ -903,7 +903,6 @@ g.hybrid.active > text { } g.hybrid.inactive > rect { - opacity: 0.4; stroke-width: 1; stroke-dasharray: none; }