1
0
Fork 0
tooty/src/View/Common.elm

248 lines
7.2 KiB
Elm
Raw Normal View History

module View.Common
exposing
2021-12-01 08:50:51 +00:00
( accountAcctView
, accountAvatar
2022-06-26 17:31:49 +00:00
, accountAvatarFallback
, accountAvatarLink
2022-01-19 06:11:07 +00:00
, accountDisplayName
2022-03-30 05:18:18 +00:00
, accountDisplayNameRich
, accountLink
, accountLinkSmall
, accountLinkLarge
2021-12-01 08:50:51 +00:00
, instanceIconsView
2017-05-22 22:25:28 +00:00
, appLink
, closeablePanelheading
, icon
, justifiedButtonGroup
, loadMoreBtn
2017-05-12 20:41:11 +00:00
, confirmView
, formatDate
)
import Date
2021-01-11 22:55:40 +00:00
import Date.Extra.Config.Config_en_us as DateEn
import Date.Extra.Format as DateFormat
import Html exposing (..)
import Html.Attributes exposing (..)
2017-05-12 20:41:11 +00:00
import Html.Events exposing (..)
import Mastodon.Http exposing (Links)
import Mastodon.Model exposing (..)
import Types exposing (..)
import View.Events exposing (..)
2022-03-30 05:18:18 +00:00
import View.Formatter exposing (formatContent)
accountAvatar : String -> Account -> Html Msg
accountAvatar avatarClass account =
2022-06-26 17:31:49 +00:00
img [ class avatarClass, src account.avatar, accountAvatarFallback account ] []
accountAvatarFallback : Account -> Attribute msg
accountAvatarFallback account =
attribute "onerror" ("this.src='https://ui-avatars.com/api/?size=128&background=ffffff&color=2e3338&uppercase=false&name="++account.display_name++"'")
2021-12-01 08:50:51 +00:00
accountDisplayName : Account -> String
accountDisplayName account =
if account.display_name == "" then
account.username
else
account.display_name
2022-03-30 05:18:18 +00:00
accountDisplayNameRich : Account -> List (Html Msg)
accountDisplayNameRich account =
formatContent (accountDisplayName account) [] account.emojis
accountLink : Bool -> Account -> Html Msg
accountLink external account =
2021-12-01 08:50:51 +00:00
if external then
a
[ href account.url
2021-12-01 08:50:51 +00:00
, target "_blank"
]
[ text <| "@" ++ account.acct
, instanceIconsView <| account.url
]
else
a
[ href account.url
, href <| "#account/" ++ account.id
]
2022-03-30 05:18:18 +00:00
[ span [ class "display-name" ] <| accountDisplayNameRich account
2021-12-01 08:50:51 +00:00
, accountAcctView False account
]
accountLinkSmall : Bool -> Account -> Html Msg
accountLinkSmall external account =
let
accountHref =
if external then
target "_blank"
else
href <| "#account/" ++ account.id
in
a
[ href account.url
, accountHref
]
2022-03-30 05:18:18 +00:00
[ span [ class "display-name" ] <| accountDisplayNameRich account
]
accountLinkLarge : Bool -> Account -> Html Msg
accountLinkLarge external account =
let
accountHref =
if external then
target "_blank"
else
href <| "#account/" ++ account.id
in
a
[ href <| "#account/" ++ account.id
]
2022-03-30 05:18:18 +00:00
[ span [ class "display-name" ] <| accountDisplayNameRich account
, br [] []
2021-12-01 08:50:51 +00:00
, accountAcctView True account
]
2021-12-01 08:50:51 +00:00
instanceIconsView : String -> Html Msg
instanceIconsView url =
let
instUrl = String.join "/" ( List.take 3 ( String.split "/" url ) )
instIcon = img [ class "acct-instance-icon", src ( instUrl ++ "/favicon.png" ), alt "" ] []
instIcon2 = img [ class "acct-instance-icon", src ( instUrl ++ "/favicon.ico" ), alt "" ] []
in
span [] [ instIcon, instIcon2 ]
accountAcctView : Bool -> Account -> Html Msg
accountAcctView showIcons account =
let
2022-01-19 06:11:07 +00:00
acctText = text <| "@" ++ account.acct
2021-12-01 08:50:51 +00:00
icons =
if showIcons then
instanceIconsView <| account.url
else
text ""
in
span [ class "acct" ] [ acctText, icons ]
accountAvatarLink : Bool -> Account -> Html Msg
accountAvatarLink external account =
let
accountHref =
if external then
target "_blank"
else
href <| "#account/" ++ account.id
avatarClass = "avatar"
in
a
[ href account.url
, accountHref
, title <| "@" ++ account.username
]
[ accountAvatar avatarClass account ]
2017-05-22 22:25:28 +00:00
appLink : String -> Maybe Application -> Html Msg
appLink classes app =
case app of
Nothing ->
text ""
Just { name, website } ->
case website of
Nothing ->
span [ class classes ] [ text name ]
Just website ->
a [ href website, target "_blank", class classes ] [ text name ]
2017-05-29 14:28:01 +00:00
closeablePanelheading : String -> String -> String -> Html Msg
closeablePanelheading context iconName label =
div [ class "panel-heading" ]
[ div [ class "row" ]
[ a
[ href "", onClickWithPreventAndStop <| ScrollColumn ScrollTop context ]
[ div [ class "col-xs-9 heading" ] [ icon iconName, text label ] ]
, div [ class "col-xs-3 text-right" ]
[ a
2017-05-29 14:28:01 +00:00
[ href "", onClickWithPreventAndStop Back ]
[ icon "remove" ]
]
]
]
icon : String -> Html Msg
icon name =
i [ class <| "glyphicon glyphicon-" ++ name ] []
2017-05-03 15:24:31 +00:00
justifiedButtonGroup : String -> List (Html Msg) -> Html Msg
justifiedButtonGroup cls buttons =
div [ class <| "btn-group btn-group-justified " ++ cls ] <|
List.map (\b -> div [ class "btn-group" ] [ b ]) buttons
2017-05-06 09:38:56 +00:00
loadMoreBtn : { timeline | id : String, links : Links, loading : Bool } -> Html Msg
loadMoreBtn { id, links, loading } =
if loading then
li [ class "list-group-item load-more text-center" ]
[ text "Loading..." ]
else
case links.next of
Just next ->
a
[ class "list-group-item load-more text-center"
, href next
, onClickWithPreventAndStop <| TimelineLoadNext id next
]
[ text "Load more" ]
2017-05-06 09:38:56 +00:00
Nothing ->
text ""
2017-05-12 20:41:11 +00:00
confirmView : Confirm -> Html Msg
confirmView { message, onConfirm, onCancel } =
div []
[ div [ class "modal-backdrop" ] []
, div
[ class "modal fade in", style [ ( "display", "block" ) ], tabindex -1 ]
[ div
[ class "modal-dialog" ]
[ div
[ class "modal-content" ]
[ div [ class "modal-header" ] [ h4 [] [ text "Confirmation required" ] ]
, div [ class "modal-body" ] [ p [] [ text message ] ]
, div
[ class "modal-footer" ]
[ button
[ type_ "button", class "btn btn-default", onClick (ConfirmCancelled onCancel) ]
[ text "Cancel" ]
, button
[ type_ "button", class "btn btn-primary", onClick (Confirmed onConfirm) ]
[ text "OK" ]
]
]
]
]
]
formatDate : String -> String
formatDate dateString =
Date.fromString dateString
|> Result.withDefault (Date.fromTime 0)
2021-01-11 22:55:40 +00:00
|> DateFormat.format DateEn.config "%Y-%m-%d %H:%M"