diff --git a/bskyweb/cmd/bskyweb/server.go b/bskyweb/cmd/bskyweb/server.go index c7350d37da..ec5261dee8 100644 --- a/bskyweb/cmd/bskyweb/server.go +++ b/bskyweb/cmd/bskyweb/server.go @@ -223,7 +223,7 @@ func serve(cctx *cli.Context) error { e.GET("/robots.txt", echo.WrapHandler(staticHandler)) } - e.GET("/iframe/youtube.html", echo.WrapHandler(staticHandler)) + e.GET("/iframe/*", echo.WrapHandler(staticHandler)) e.GET("/static/*", echo.WrapHandler(http.StripPrefix("/static/", staticHandler)), func(next echo.HandlerFunc) echo.HandlerFunc { return func(c echo.Context) error { c.Response().Before(func() { diff --git a/bskyweb/static/iframe/youtube.html b/bskyweb/static/iframe/youtube.html index a717a67c6f..483f5f5280 100644 --- a/bskyweb/static/iframe/youtube.html +++ b/bskyweb/static/iframe/youtube.html @@ -16,40 +16,4 @@ }
- + diff --git a/bskyweb/static/iframe/youtube.js b/bskyweb/static/iframe/youtube.js new file mode 100644 index 0000000000..149b950cdb --- /dev/null +++ b/bskyweb/static/iframe/youtube.js @@ -0,0 +1,35 @@ +const url = new URL(window.location) +const viewport = document.querySelector("meta[name=viewport]") + +const tag = document.createElement("script") +tag.src = "https://www.youtube.com/iframe_api" +const firstScriptTag = document.getElementsByTagName('script')[0]; +firstScriptTag.parentNode.insertBefore(tag, firstScriptTag); + +let player +function onYouTubeIframeAPIReady() { + let videoId = url.searchParams.get('videoId') + videoId = decodeURIComponent(videoId) + videoId = videoId.replace(/[^a-zA-Z0-9_-]/g, "") + if (videoId.length !== 11) throw new Error("Invalid video ID") + + let start = url.searchParams.get('start') + start = start.replace(/[^0-9]/g, "") + + player = new YT.Player('player', { + width: "1000", + height: "1000", + videoId, + playerVars: { + autoplay: 1, + start, + rel: 0, + loop: 0, + playsinline: 1, + origin: url.origin + }, + }); +} +function onPlayerReady(event) { + event.target.playVideo(); +}