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

97 lines
3.0 KiB
Elm

module View.Timeline
exposing
( contextualTimelineView
, contextualTimelineMenu
, homeTimelineView
)
import Html exposing (..)
import Html.Attributes exposing (..)
import Html.Events exposing (..)
import Html.Keyed as Keyed
import Html.Lazy as Lazy
import Mastodon.Model exposing (..)
import Types exposing (..)
import View.Common as Common
import View.Events exposing (..)
import View.Status exposing (statusView, statusActionsView, statusEntryView)
type alias CurrentUser =
Account
type alias CurrentUserRelation =
Maybe Relationship
topScrollableColumn : ( String, String, String ) -> Html Msg -> Html Msg
topScrollableColumn ( label, iconName, timelineId ) content =
div [ class "col-md-3 column" ]
[ div [ class "panel panel-default" ]
[ a
[ href "", onClickWithPreventAndStop <| ScrollColumn ScrollTop timelineId ]
[ div [ class "panel-heading" ] [ Common.icon iconName, text label ] ]
, content
]
]
timelineView : CurrentUser -> Timeline Status -> Html Msg
timelineView currentUser timeline =
let
keyedEntry status =
( toString id, statusEntryView timeline.id "" currentUser status )
entries =
List.map keyedEntry timeline.entries
in
Keyed.ul [ id timeline.id, class "list-group timeline" ] <|
(entries ++ [ ( "load-more", Common.loadMoreBtn timeline ) ])
homeTimelineView : CurrentUser -> Timeline Status -> Html Msg
homeTimelineView currentUser timeline =
Lazy.lazy2 topScrollableColumn
( "Home timeline"
, "home"
, timeline.id
)
(timelineView currentUser timeline)
contextualTimelineMenu : CurrentView -> Html Msg
contextualTimelineMenu currentView =
let
btnView tooltip iconName view =
button
[ class <|
"btn "
++ (if currentView == view then
"btn-primary active"
else
"btn-default"
)
, onClick <| SetView view
, Html.Attributes.title tooltip
]
[ Common.icon iconName ]
in
Common.justifiedButtonGroup "column-menu"
[ btnView "Local timeline" "th-large" LocalTimelineView
, btnView "Global timeline" "globe" GlobalTimelineView
, btnView "Favorites" "star" FavoriteTimelineView
, btnView "Blocks" "ban-circle" BlocksView
, btnView "Mutes" "volume-off" MutesView
, btnView "Accounts" "user" AccountSelectorView
]
contextualTimelineView : CurrentView -> String -> String -> CurrentUser -> Timeline Status -> Html Msg
contextualTimelineView currentView title iconName currentUser timeline =
div []
[ contextualTimelineMenu currentView
, timelineView currentUser timeline
]
|> Lazy.lazy2 topScrollableColumn ( title, iconName, timeline.id )