From a262b5f16ebdcb82448e053912cbd3b8fb5c8472 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Julian=20K=C3=B6pke?= Date: Tue, 15 Jul 2025 00:01:24 +0200 Subject: [PATCH] fullscreen mode --- lib/alchemy_pub_web/page_live.ex | 24 ++++++++++++++++-------- lib/alchemy_pub_web/page_live.html.heex | 14 +++++++++++--- 2 files changed, 27 insertions(+), 11 deletions(-) diff --git a/lib/alchemy_pub_web/page_live.ex b/lib/alchemy_pub_web/page_live.ex index b89b4ab..c778758 100644 --- a/lib/alchemy_pub_web/page_live.ex +++ b/lib/alchemy_pub_web/page_live.ex @@ -36,7 +36,8 @@ defmodule AlchemyPubWeb.PageLive do post_title: "Loading", viewers: 0, track_valid: false, - subpage: nil + subpage: nil, + fullscreen: false ) |> stream_configure(:deck, []) |> stream(:deck, [])} @@ -58,17 +59,23 @@ defmodule AlchemyPubWeb.PageLive do @impl true def handle_event("key", param, socket) do p = get_in(socket.assigns.subpage) || 0 + f = get_in(socket.assigns.fullscreen) || false - p = - case param do - %{"key" => "ArrowRight"} -> p + 1 - %{"key" => "ArrowLeft"} -> max(0, p - 1) + params = + case param["key"] do + "f" -> %{p: p, f: not f} + "ArrowRight" -> %{p: p + 1, f: f} + "ArrowLeft" -> %{p: max(0, p - 1), f: f} _ -> nil end socket = - if p && socket.assigns.meta["rank"] == :deck do - socket |> push_patch(to: "/#{socket.assigns.title}?p=#{p}", replace: true) + if params && socket.assigns.meta["rank"] == :deck do + socket + |> push_patch( + to: "/#{socket.assigns.title}?p=#{params[:p]}&f=#{params[:f]}", + replace: true + ) else socket end @@ -137,7 +144,8 @@ defmodule AlchemyPubWeb.PageLive do content: "", tag: nil, track_valid: true, - subpage: subpage + subpage: subpage, + fullscreen: params["f"] == "true" ) |> stream_insert(:deck, paginate(content, subpage, direction), at: -1, limit: -2) diff --git a/lib/alchemy_pub_web/page_live.html.heex b/lib/alchemy_pub_web/page_live.html.heex index 807f962..3e4f75e 100644 --- a/lib/alchemy_pub_web/page_live.html.heex +++ b/lib/alchemy_pub_web/page_live.html.heex @@ -140,15 +140,23 @@ :if={@meta["rank"] == :deck} id="deck" phx-update="stream" - class="relative md:w-[34rem] lg:min-w-[42rem] print:min-w-[50rem] aspect-16/10 deck" + class={ + if @fullscreen do + "absolute top-0 left-0 w-full h-full z-1 deck overflow-hidden" + else + "relative md:w-[34rem] lg:min-w-[42rem] print:min-w-[50rem] aspect-16/10 deck" + end + } phx-window-keyup="key" + phx-hook >