bf09b87215
* Part 1: Refactor views. I'm in the middle of nowhere. It's cold, but I distinguish lights. It's dark, but my good ol' Elm keeps barking when something looks wrong or dangerous. I'm not afraid. * Part 2: More views refactoring. The night is deep, but I can see clear. The truth is at the end of this path. Perhaps. * Part 3: The sun is rising. The darkness is gently fading over, dawn is near. I can now see mountains drawing in the horizon. Elm is rather quiet, but keeps scrutating the shadows. * Part 4: Moaar view splitting. I follow some wrong path, but I'm back on track. The sun is shining. * Epilogue That was actually fun.
54 lines
1.6 KiB
Elm
54 lines
1.6 KiB
Elm
module View.Viewer exposing (viewerView)
|
||
|
||
import Html exposing (..)
|
||
import Html.Attributes exposing (..)
|
||
import List.Extra exposing (find, elemIndex, getAt)
|
||
import Types exposing (..)
|
||
import View.Events exposing (..)
|
||
|
||
|
||
viewerView : Viewer -> Html Msg
|
||
viewerView { attachments, attachment } =
|
||
let
|
||
index =
|
||
Maybe.withDefault -1 <| elemIndex attachment attachments
|
||
|
||
( prev, next ) =
|
||
( getAt (index - 1) attachments, getAt (index + 1) attachments )
|
||
|
||
navLink label className target =
|
||
case target of
|
||
Nothing ->
|
||
text ""
|
||
|
||
Just target ->
|
||
a
|
||
[ href ""
|
||
, class className
|
||
, onClickWithPreventAndStop <|
|
||
ViewerEvent (OpenViewer attachments target)
|
||
]
|
||
[ text label ]
|
||
in
|
||
div
|
||
[ class "viewer"
|
||
, tabindex -1
|
||
, onClickWithPreventAndStop <| ViewerEvent CloseViewer
|
||
]
|
||
[ span [ class "close" ] [ text "×" ]
|
||
, navLink "❮" "prev" prev
|
||
, case attachment.type_ of
|
||
"image" ->
|
||
img [ class "viewer-content", src attachment.url ] []
|
||
|
||
_ ->
|
||
video
|
||
[ class "viewer-content"
|
||
, preload "auto"
|
||
, autoplay True
|
||
, loop True
|
||
]
|
||
[ source [ src attachment.url ] [] ]
|
||
, navLink "❯" "next" next
|
||
]
|