Skip to content

Commit 38a9954

Browse files
authored
fix: Address feedback, improve design, performance, interaction (#5)
1 parent 7c9fe44 commit 38a9954

File tree

15 files changed

+16661
-919
lines changed

15 files changed

+16661
-919
lines changed

public/luts/vintage.cube

Lines changed: 15633 additions & 0 deletions
Large diffs are not rendered by default.

src/components/Controls.astro

Lines changed: 37 additions & 31 deletions
Original file line numberDiff line numberDiff line change
@@ -38,7 +38,7 @@ const { prev, next } = await getPagination(channelId);
3838
</div>
3939
<div class="control-group">
4040
<div class="label">Menu</div>
41-
<button class="button" aria-label="Open Menu" id="menu"></button>
41+
<button class="button" aria-label="Open Menu" id="menu-button"></button>
4242
</div>
4343
</div>
4444
<ChannelDisplay channelId={channelId} activeProgram={activeProgram} />
@@ -64,7 +64,7 @@ const { prev, next } = await getPagination(channelId);
6464
const screen = document.querySelector(".screen");
6565
const powerIndicator = document.querySelector(".power-indicator");
6666
const channelDisplay = document.querySelector("channel-display");
67-
const menuButton = document.getElementById("menu");
67+
const menuButton = document.getElementById("menu-button");
6868
const channelButtons = document.querySelectorAll(".channel-button");
6969

7070
function updateButtonStates(powerState: string) {
@@ -90,6 +90,38 @@ const { prev, next } = await getPagination(channelId);
9090
}
9191
}
9292

93+
function handlePowerButtonClick(event: Event) {
94+
// Prevent default behavior to avoid any conflicts
95+
event.preventDefault();
96+
97+
if (!screen) return;
98+
99+
const isTurningOff = screen.getAttribute("data-power") === "on";
100+
101+
Fathom.trackEvent(`controls: click power ${isTurningOff ? "off" : "on"}`);
102+
103+
if (isTurningOff) {
104+
screen.setAttribute("data-powering-off", "true");
105+
updateButtonStates(screen.getAttribute("data-power") || "on");
106+
} else {
107+
screen.setAttribute("data-power", "on");
108+
screen.setAttribute("data-booting", "true");
109+
localStorage.setItem("power", "on");
110+
updateButtonStates("on");
111+
}
112+
113+
const newPowerState = isTurningOff ? "off" : "on";
114+
powerIndicator?.setAttribute("data-power", newPowerState);
115+
channelDisplay?.setAttribute("data-power", newPowerState);
116+
}
117+
118+
function handleChannelButtonClick(event: Event) {
119+
const button = event.currentTarget as HTMLAnchorElement;
120+
const direction =
121+
button.getAttribute("data-arrow") === "up" ? "next" : "previous";
122+
Fathom.trackEvent(`controls: click channel ${direction}`);
123+
}
124+
93125
function init() {
94126
const savedPowerState = localStorage.getItem("power") || "on";
95127

@@ -116,40 +148,12 @@ const { prev, next } = await getPagination(channelId);
116148
});
117149

118150
powerButton?.addEventListener("click", handlePowerButtonClick);
151+
119152
channelButtons.forEach((button) => {
120153
button.addEventListener("click", handleChannelButtonClick);
121154
});
122155
}
123156

124-
function handleChannelButtonClick(event: Event) {
125-
const button = event.currentTarget as HTMLAnchorElement;
126-
const direction =
127-
button.getAttribute("data-arrow") === "up" ? "next" : "previous";
128-
Fathom.trackEvent(`controls: click channel ${direction}`);
129-
}
130-
131-
function handlePowerButtonClick() {
132-
if (!screen) return;
133-
134-
const isTurningOff = screen.getAttribute("data-power") === "on";
135-
136-
Fathom.trackEvent(`controls: click power ${isTurningOff ? "off" : "on"}`);
137-
138-
if (isTurningOff) {
139-
screen.setAttribute("data-powering-off", "true");
140-
updateButtonStates(screen.getAttribute("data-power") || "on");
141-
} else {
142-
screen.setAttribute("data-power", "on");
143-
screen.setAttribute("data-booting", "true");
144-
localStorage.setItem("power", "on");
145-
updateButtonStates("on");
146-
}
147-
148-
const newPowerState = isTurningOff ? "off" : "on";
149-
powerIndicator?.setAttribute("data-power", newPowerState);
150-
channelDisplay?.setAttribute("data-power", newPowerState);
151-
}
152-
153157
init();
154158
</script>
155159

@@ -165,6 +169,7 @@ const { prev, next } = await getPagination(channelId);
165169
grid-template-columns: auto;
166170
grid-template-areas: "buttons display logo";
167171
width: 100%;
172+
user-select: none;
168173
align-items: center;
169174
justify-items: space-between;
170175
gap: 1rem;
@@ -309,6 +314,7 @@ const { prev, next } = await getPagination(channelId);
309314

310315
.button {
311316
--shadow-color: 0deg 0% 0%;
317+
touch-action: manipulation; /* Prevent double-tap zoom on iOS */
312318
width: 4rem;
313319
height: 1.5rem;
314320
background-color: #333333;

0 commit comments

Comments
 (0)