aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authormetamuffin <metamuffin@disroot.org>2023-08-03 16:24:54 +0200
committermetamuffin <metamuffin@disroot.org>2023-08-03 16:24:54 +0200
commitf4dd27f910213e2786d776621b738f1d2c32a7c7 (patch)
treeea3d6a4550253438811303443437c61e1441de33
parent9898998344f9897d59b629ce643a0e243f5e7b09 (diff)
downloadjellything-f4dd27f910213e2786d776621b738f1d2c32a7c7.tar
jellything-f4dd27f910213e2786d776621b738f1d2c32a7c7.tar.bz2
jellything-f4dd27f910213e2786d776621b738f1d2c32a7c7.tar.zst
progress indicator in jsplayer
-rw-r--r--server/src/routes/ui/style/js-player.css21
-rw-r--r--server/src/routes/ui/style/js-player.js30
2 files changed, 46 insertions, 5 deletions
diff --git a/server/src/routes/ui/style/js-player.css b/server/src/routes/ui/style/js-player.css
index 65fb770..303ed96 100644
--- a/server/src/routes/ui/style/js-player.css
+++ b/server/src/routes/ui/style/js-player.css
@@ -3,20 +3,37 @@
which is licensed under the GNU Affero General Public License (version 3); see /COPYING.
Copyright (C) 2023 metamuffin <metamuffin.org>
*/
+
+.js-player {
+ --csize: 50px;
+}
+
.js-player .controls {
position: absolute;
bottom: 0px;
left: 0px;
width: 100%;
- height: 50px;
+ height: var(--csize);
background-color: #1d1d1d99;
transition: opacity 0.2s;
}
.js-player .controls button {
padding: 0px;
- width: 50px;
+ width: var(--csize);
height: 100%;
border: none;
background-color: #ffffff10;
}
+
+.pri {
+ padding: 0px;
+ display: inline-block;
+ margin: 0px;
+ width: calc(100% - var(--csize) * 2 - 2px);
+ height: var(--csize);
+}
+.pri-current {
+ height: var(--csize);
+ background-color: #ffffff20;
+}
diff --git a/server/src/routes/ui/style/js-player.js b/server/src/routes/ui/style/js-player.js
index 5f05c7e..d42e7d5 100644
--- a/server/src/routes/ui/style/js-player.js
+++ b/server/src/routes/ui/style/js-player.js
@@ -25,13 +25,31 @@ function patch_video(e) {
const pause_button = document.createElement("button")
pause_button.textContent = "|>"
+
const fullscreen_button = document.createElement("button")
fullscreen_button.style.float = "right"
fullscreen_button.textContent = "X"
- controls.append(pause_button, fullscreen_button)
+ const pri = document.createElement("div")
+ pri.classList.add("pri")
+ const pri_current = document.createElement("div")
+ pri_current.style.width = "0px"
+ pri_current.classList.add("pri-current")
+ pri.append(pri_current)
+
+ controls.append(pause_button, pri, fullscreen_button)
d.append(controls)
+
+ e.onloadedmetadata = () => {
+
+ }
+ e.ondurationchange = () => {
+
+ }
+ e.ontimeupdate = () => {
+ pri_current.style.width = (e.currentTime / e.duration * 100) + "%"
+ }
e.onplay = () => {
pause_button.textContent = "..."
}
@@ -44,7 +62,6 @@ function patch_video(e) {
e.onpause = () => {
pause_button.textContent = "|>"
}
-
const toggle_playing = () => e.paused ? e.play() : e.pause()
mouse_idle(e, 1000, idle => {
@@ -54,7 +71,14 @@ function patch_video(e) {
e.addEventListener("click", toggle_playing)
pause_button.addEventListener("click", toggle_playing)
- fullscreen_button.addEventListener("click", () => document.body.requestFullscreen())
+ fullscreen_button.addEventListener("click", () => {
+ if (document.fullscreenElement) document.exitFullscreen()
+ else document.documentElement.requestFullscreen()
+ })
+ document.body.addEventListener("keypress", k => {
+ if (k.code == "Period") e.seekToNextFrame()
+ if (k.code == "Space") toggle_playing()
+ })
}
function mouse_idle(e, timeout, cb) {