Skip to content

Commit 60a7c55

Browse files
version 1.2.1
Refactor styles for improved responsive layouts. Update player controls: added pause icon; added fullscreen button; and updated styles for improve responsive layouts. Update Open Graph image url.
1 parent 0fda508 commit 60a7c55

9 files changed

Lines changed: 163 additions & 70 deletions

File tree

CHANGELOG.md

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,18 @@
11
# Changelog
22

3+
## [1.2.1] - 2026-01-17
4+
5+
## Added
6+
7+
- Fullscreen button to mini-player controls
8+
9+
10+
### Changed
11+
12+
- Refactor styles for improved responsive layouts
13+
- Change player controls stop button to pause button
14+
- Update Open Graph image url
15+
316
## [1.2.0] - 2026-01-13
417

518
### Added

index.html

Lines changed: 13 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,7 @@
2020
<meta property="og:description" content="A PWA remix of musicforprogramming.net" />
2121
<meta property="og:image:width" content="512" />
2222
<meta property="og:image:height" content="512" />
23-
<meta property="og:image" content="https://mfp-app.pages.dev/mfp.png" />
23+
<meta property="og:image" content="https://mfp-app.netlify.app//mfp.png" />
2424
<meta name="apple-mobile-web-app-capable" content="yes">
2525
<link rel="apple-touch-startup-image" href="/splash/apple-splash-2048-2732.png"
2626
media="(device-width: 1024px) and (device-height: 1366px) and (-webkit-device-pixel-ratio: 2) and (orientation: portrait)">
@@ -106,11 +106,10 @@
106106
<main>
107107
<header>
108108
<div class="header-nav">
109-
<div style="display: inline; width:24px; height: 24px;"></div>
109+
<div class="header-button header-button-spacer"></div>
110110
<p class="ibm-plex-mono-semibold">mfp;</p>
111111
<div class="stacked-button-container">
112-
<img id="about-button" src="about.svg" alt="About Screen Open Button" width="24" height="24">
113-
112+
<img class="header-button" id="about-button" src="about.svg" alt="About Screen Open Button">
114113
</div>
115114
</div>
116115
</header>
@@ -901,10 +900,12 @@
901900
<img id="mp-button-seek-back" class="player-button-small player-controls-disabled" src="seek_back.svg"
902901
alt="Seek back 30s">
903902
<img id="mp-button-play" class="player-button-large player-controls-disabled" src="play.svg" alt="Play">
904-
<img id="mp-button-stop" class="player-button-large hidden" src="stop.svg" alt="Stop">
903+
<img id="mp-button-pause" class="player-button-large hidden" src="pause_circle.svg" alt="Pause">
905904
<img id="mp-button-seek-forward" class="player-button-small player-controls-disabled" src="seek_forward.svg"
906905
alt="Seek back 30s">
907906
<img id="mp-button-random" class="player-button-small" src="random.svg" alt="Pick Random Episode">
907+
<img id="mp-button-fullscreen" src="keyboard_arrow_up.svg" class="player-button-small"
908+
alt="Open Fullscreen Player">
908909
</div>
909910
</div>
910911
</footer>
@@ -917,7 +918,7 @@
917918
</div>
918919

919920
<h2>About</h2>
920-
<h4>mfp; version: 1.2.0</h4>
921+
<h4>mfp; version: 1.2.1</h4>
921922

922923
<p>
923924
mfp; is a PWA remix of
@@ -947,9 +948,11 @@ <h4>mfp; version: 1.2.0</h4>
947948

948949
<div id="fullscreen-player">
949950
<div class="fullscreen-container">
950-
<div id="fullscreen-player-header">
951-
<img id="fullscreen-close-button" src="keyboard_arrow_down.svg" alt="Fullscreen Close Button" width="24"
952-
height="24">
951+
952+
<div class="fullscreen-header">
953+
<img class="header-button" id="fullscreen-close-button" src="keyboard_arrow_down.svg"
954+
alt="Fullscreen Close Button">
955+
<div class="header-button header-button-spacer"></div>
953956
</div>
954957

955958
<div id="fullscreen-player-main">
@@ -972,7 +975,7 @@ <h4>mfp; version: 1.2.0</h4>
972975
<img id="fs-button-seek-back" class="player-button-small player-controls-disabled" src="seek_back.svg"
973976
alt="Seek back 30s">
974977
<img id="fs-button-play" class="player-button-large player-controls-disabled" src="play.svg" alt="Play">
975-
<img id="fs-button-stop" class="player-button-large hidden" src="stop.svg" alt="Stop">
978+
<img id="fs-button-pause" class="player-button-large hidden" src="pause_circle.svg" alt="Pause">
976979
<img id="fs-button-seek-forward" class="player-button-small player-controls-disabled" src="seek_forward.svg"
977980
alt="Seek back 30s">
978981
<img id="fs-button-skip-next" class="player-button-small player-controls-disabled" src="skip_next.svg"

package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
{
22
"name": "mfp-app",
33
"private": true,
4-
"version": "1.2.0",
4+
"version": "1.2.1",
55
"type": "module",
66
"scripts": {
77
"dev": "vite --host",

public/keyboard_arrow_up.svg

Lines changed: 1 addition & 0 deletions
Loading

public/open_in_full.svg

Lines changed: 1 addition & 0 deletions
Loading

public/pause_circle.svg

Lines changed: 1 addition & 0 deletions
Loading

src/main.ts

Lines changed: 29 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -22,10 +22,11 @@ const episodes = episodesContainer.querySelectorAll('A')
2222
const about = document.querySelector<HTMLDialogElement>('#about')!
2323
const mfpAudioPlayer = document.querySelector<HTMLAudioElement>('#mfp-audio-player')!
2424
const miniPlayerPlayButton = document.querySelector<HTMLButtonElement>('#mp-button-play')!
25-
const miniPlayerStopButton = document.querySelector<HTMLButtonElement>('#mp-button-stop')!
25+
const miniPlayerPauseButton = document.querySelector<HTMLButtonElement>('#mp-button-pause')!
2626
const miniPlayerSeekBackButton = document.querySelector<HTMLButtonElement>('#mp-button-seek-back')!
2727
const miniPlayerSeekForwardButton = document.querySelector<HTMLButtonElement>('#mp-button-seek-forward')!
2828
const miniPlayerRandomEpisodeButton = document.querySelector<HTMLButtonElement>('#mp-button-random')!
29+
const miniPlayerFullscreenButton = document.querySelector<HTMLButtonElement>('#mp-button-fullscreen')!
2930

3031
const miniPlayerTitle = document.querySelector<HTMLParagraphElement>('#mini-player-title')!
3132
const miniPlayerDuration = document.querySelector<HTMLParagraphElement>('#mini-player-duration')!
@@ -38,7 +39,7 @@ const fullscreenPlayerDuration = document.querySelector<HTMLParagraphElement>('#
3839
const fullscreenPlayerPlaylistButton = document.querySelector<HTMLButtonElement>('#fs-button-playlist')!
3940

4041
const fullscreenPlayerPlayButton = document.querySelector<HTMLButtonElement>('#fs-button-play')!
41-
const fullscreenPlayerStopButton = document.querySelector<HTMLButtonElement>('#fs-button-stop')!
42+
const fullscreenPlayerPauseButton = document.querySelector<HTMLButtonElement>('#fs-button-pause')!
4243
const fullscreenPlayerSeekBackButton = document.querySelector<HTMLButtonElement>('#fs-button-seek-back')!
4344
const fullscreenPlayerSeekForwardButton = document.querySelector<HTMLButtonElement>('#fs-button-seek-forward')!
4445
const fullscreenPlayerSkipPrevButton = document.querySelector<HTMLButtonElement>('#fs-button-skip-prev')!
@@ -60,16 +61,16 @@ const hasMediaSession = (): boolean => {
6061

6162
const showPlayButton = () => {
6263
miniPlayerPlayButton.classList.remove(HIDDEN_CLASS)
63-
miniPlayerStopButton.classList.add(HIDDEN_CLASS)
64+
miniPlayerPauseButton.classList.add(HIDDEN_CLASS)
6465
fullscreenPlayerPlayButton.classList.remove(HIDDEN_CLASS)
65-
fullscreenPlayerStopButton.classList.add(HIDDEN_CLASS)
66+
fullscreenPlayerPauseButton.classList.add(HIDDEN_CLASS)
6667
}
6768

68-
const showStopButton = () => {
69+
const showPauseButton = () => {
6970
miniPlayerPlayButton.classList.add(HIDDEN_CLASS)
70-
miniPlayerStopButton.classList.remove(HIDDEN_CLASS)
71+
miniPlayerPauseButton.classList.remove(HIDDEN_CLASS)
7172
fullscreenPlayerPlayButton.classList.add(HIDDEN_CLASS)
72-
fullscreenPlayerStopButton.classList.remove(HIDDEN_CLASS)
73+
fullscreenPlayerPauseButton.classList.remove(HIDDEN_CLASS)
7374
}
7475

7576
mfpAudioPlayer.addEventListener('play', () => {
@@ -119,24 +120,24 @@ mfpAudioPlayer.addEventListener('timeupdate', () => {
119120
//console.log('Audio player time update:', mfpAudioPlayer.currentTime, duration.textContent)
120121
})
121122

122-
const _handlePlayerStop = (e: MouseEvent, button: HTMLButtonElement) => {
123+
const _handlePlayerPause = (e: MouseEvent, button: HTMLButtonElement) => {
123124
e.preventDefault()
124125

125126
if (button.classList.contains(PLAYER_CONTROLS_DISABLED_CLASS)) {
126127
console.log('Play button is disabled, ignoring click')
127128
return
128129
}
129-
console.log('Stop button clicked')
130+
console.log('Pause button clicked')
130131
mfpAudioPlayer.pause()
131132
showPlayButton()
132133
}
133134

134-
miniPlayerStopButton.addEventListener('click', (e: MouseEvent) => {
135-
_handlePlayerStop(e, miniPlayerPlayButton)
135+
miniPlayerPauseButton.addEventListener('click', (e: MouseEvent) => {
136+
_handlePlayerPause(e, miniPlayerPlayButton)
136137
})
137138

138-
fullscreenPlayerStopButton.addEventListener('click', (e: MouseEvent) => {
139-
_handlePlayerStop(e, fullscreenPlayerStopButton)
139+
fullscreenPlayerPauseButton.addEventListener('click', (e: MouseEvent) => {
140+
_handlePlayerPause(e, fullscreenPlayerPauseButton)
140141
})
141142

142143
const _handlePlayerPlay = (e: MouseEvent, button: HTMLButtonElement) => {
@@ -145,7 +146,7 @@ const _handlePlayerPlay = (e: MouseEvent, button: HTMLButtonElement) => {
145146
return
146147
}
147148
mfpAudioPlayer.play()
148-
showStopButton()
149+
showPauseButton()
149150
}
150151

151152
miniPlayerPlayButton.addEventListener('click', (e: MouseEvent) => {
@@ -276,18 +277,18 @@ const _enablePlayerControls = () => {
276277
miniPlayerSeekBackButton.classList.remove(PLAYER_CONTROLS_DISABLED_CLASS)
277278
miniPlayerSeekForwardButton.classList.remove(PLAYER_CONTROLS_DISABLED_CLASS)
278279
miniPlayerPlayButton.classList.remove(PLAYER_CONTROLS_DISABLED_CLASS)
279-
miniPlayerStopButton.classList.remove(PLAYER_CONTROLS_DISABLED_CLASS)
280+
miniPlayerPauseButton.classList.remove(PLAYER_CONTROLS_DISABLED_CLASS)
280281
miniPlayerPlayButton.classList.add(HIDDEN_CLASS)
281-
miniPlayerStopButton.classList.remove(HIDDEN_CLASS)
282+
miniPlayerPauseButton.classList.remove(HIDDEN_CLASS)
282283

283284
fullscreenPlayerSeekBackButton.classList.remove(PLAYER_CONTROLS_DISABLED_CLASS)
284285
fullscreenPlayerSeekForwardButton.classList.remove(PLAYER_CONTROLS_DISABLED_CLASS)
285286
fullscreenPlayerSkipPrevButton.classList.remove(PLAYER_CONTROLS_DISABLED_CLASS)
286287
fullscreenPlayerSkipNextButton.classList.remove(PLAYER_CONTROLS_DISABLED_CLASS)
287288
fullscreenPlayerPlayButton.classList.remove(PLAYER_CONTROLS_DISABLED_CLASS)
288-
fullscreenPlayerStopButton.classList.remove(PLAYER_CONTROLS_DISABLED_CLASS)
289+
fullscreenPlayerPauseButton.classList.remove(PLAYER_CONTROLS_DISABLED_CLASS)
289290
fullscreenPlayerPlayButton.classList.add(HIDDEN_CLASS)
290-
fullscreenPlayerStopButton.classList.remove(HIDDEN_CLASS)
291+
fullscreenPlayerPauseButton.classList.remove(HIDDEN_CLASS)
291292
fullscreenPlayerPlaylistButton.classList.remove(PLAYER_CONTROLS_DISABLED_CLASS)
292293
}
293294

@@ -400,7 +401,7 @@ if (hasMediaSession()) {
400401

401402
navigator.mediaSession.setActionHandler('play', async () => {
402403
await mfpAudioPlayer.play()
403-
showStopButton()
404+
showPauseButton()
404405
})
405406

406407
navigator.mediaSession.setActionHandler('pause', async () => {
@@ -443,11 +444,19 @@ fullscreenCloseButton.addEventListener('click', (e: MouseEvent) => {
443444
}
444445
})
445446

446-
miniPlayerTitle.addEventListener('click', (e: MouseEvent) => {
447+
const _handleFullscreenOpen = (e: MouseEvent) => {
447448
e.preventDefault()
448449
if (fullscreenPlayer) {
449450
fullscreenPlayer.style.display = "grid"
450451
}
452+
}
453+
454+
miniPlayerTitle.addEventListener('click', (e: MouseEvent) => {
455+
_handleFullscreenOpen(e)
456+
})
457+
458+
miniPlayerFullscreenButton.addEventListener('click', (e: MouseEvent) => {
459+
_handleFullscreenOpen(e)
451460
})
452461

453462
header.addEventListener('click', (e: MouseEvent) => {

0 commit comments

Comments
 (0)