aboutsummaryrefslogtreecommitdiff
path: root/picarones-elm/src
diff options
context:
space:
mode:
authorstuebinm2021-03-07 18:37:10 +0100
committerstuebinm2021-03-07 18:37:10 +0100
commit8b3ca704c66d7815e6f932e92a493f9aae44d74b (patch)
tree6cb42002509a116b66b66388637e6b6ad1d600a5 /picarones-elm/src
parent090041fadec2e2896c3b82ef518096313d452c13 (diff)
Load slides from url given in uri fragment
Syntax is: https://domain-to-app#<prefix-for-slides>#<number-of-slides> Slides must be .png image files numbered as 01.png, 02.png ...
Diffstat (limited to 'picarones-elm/src')
-rw-r--r--picarones-elm/src/Main.elm18
1 files changed, 11 insertions, 7 deletions
diff --git a/picarones-elm/src/Main.elm b/picarones-elm/src/Main.elm
index 5066ad6..56cf48f 100644
--- a/picarones-elm/src/Main.elm
+++ b/picarones-elm/src/Main.elm
@@ -6,6 +6,7 @@ import Html.Attributes exposing (style, class, value, placeholder, src)
import Html.Events exposing (onInput, onClick)
import Html.Lazy exposing (lazy)
import List exposing (foldr)
+import Url.Parser exposing (Parser, (</>), string, fragment)
import Protocol exposing (decodeState, encodeState)
import Json.Decode as D
@@ -27,14 +28,15 @@ port recvPort : (String -> msg) -> Sub msg
port sendPort : String -> Cmd msg
+
{- STATE AND STATE TRANSITIONS -}
-- the main client state
-type alias Model = { slide : Int, max : Int }
+type alias Model = { slide : Int, max : Int, prefix : String }
-- start at the first slide, for now just assume that we have ten slides
-init : () -> (Model, Cmd Msg)
-init f = ( { slide = 0, max = 10 }, Cmd.none)
+init : (String, Int) -> (Model, Cmd Msg)
+init (url, max) = ( { slide = 0, max = max, prefix = url ++ "/"}, Cmd.none)
-- possible state transitions:
type Msg = GotMessage String
@@ -66,7 +68,7 @@ updateSlide f model =
-- our body consists of a slide container and a couple controls
body : Model -> Html Msg
body model = div []
- [ div [class "slides"] (slideView model.slide model.max)
+ [ div [class "slides"] (slideView model.slide model.max model.prefix)
, div [class "controls"]
[ button [ onClick PrevSlide ] [ text "←" ]
, text (String.fromInt (model.slide+1))
@@ -74,12 +76,14 @@ body model = div []
]
]
+
+
-- the slide view is just a list of img tags, one for each slide; note
-- that these are all loaded on startup, with visibility done through
-- z indices so we won't have lags while switching between them.
-slideView : Int -> Int -> List (Html Msg)
-slideView i max = List.range 0 (max - 1)
- |> List.map (\x -> ("example/" ++ (padNum 2 (x+1)) ++ ".png", x == i))
+slideView : Int -> Int -> String -> List (Html Msg)
+slideView i max prefix = List.range 0 (max - 1)
+ |> List.map (\x -> (prefix ++ (padNum 2 (x+1)) ++ ".png", x == i))
|> List.map (\(path,t) -> img [src path, onTop t] [])
onTop t = style "z-index" (String.fromInt (if t then 10 else 0))