module Cover exposing (..) import Browser import Html exposing (..) import Html.Events exposing (onInput, onClick) import Html.Attributes exposing (..) main = Browser.document { init = init, update = update, view = view, subscriptions = (\m -> Sub.none)} type alias Model = (String, Int, String) init : String -> (Model, Cmd Msg) init baseurl = (("", 10, baseurl), Cmd.none) type Msg = Change String | SlideInc | SlideDec update : Msg -> Model -> (Model, Cmd Msg) update msg (prefix,m,b) = let model = case msg of Change new -> (new, m, b) SlideInc -> (prefix, m + 1, b) SlideDec -> (prefix, Basics.max (m - 1) 1, b) in (model, Cmd.none) view : Model -> Browser.Document Msg view model = { title = "Picarones" , body = [body model] } body : Model -> Html Msg body (prefix, max, baseurl) = div [class "input-form"] [ h1 [] [text "Create new slide session:"], div [] [] , div [ class "grid" ] [ divtext "enter slide uri:", input [ placeholder "https://yourdomain.tld/path-to-slides", value prefix, onInput Change ] [] , divtext "number of slides:", mkNumberInput max , divtext "your link:", mkLink (prefix, max, baseurl) ] , mkRemark prefix ] divtext : String -> Html Msg divtext str = div [class "gridentry"] [text str] mkNumberInput : Int -> Html Msg mkNumberInput i = span [] [ button [onClick SlideDec] [text "-"] , text (String.fromInt i) , button [onClick SlideInc] [text "+"] ] mkLink : Model -> Html Msg mkLink (p, max, baseurl) = case p of "" -> text "(none yet)" prefix -> let link = baseurl ++ "/slide#" ++ prefix ++ "#" ++ (String.fromInt max) in a [ href link ] [ text link ] mkRemark : String -> Html Msg mkRemark prefix = let example = case prefix of "" -> "https://yourdomain.tld/path-to-slides/01.png" _ -> prefix ++ "01.png" in div [class "remark"] [ text ("""Your slides should be available at the above uri, postfixed with a double-digit number and a .png extension, e.g. """ ++ example ++ " should contain an image.") ]