Something went wrong. Try again.
self-hosted listenbrainz and last.fm proxy
Something went wrong. Try again.
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130module View exposing (view)
import Browserimport Html exposing (Html, a, button, div, h2, header, li, p, span, text, ul)import Html.Attributes as Attr exposing (class, href, target)import Html.Events exposing (onClick)import Page.Adminimport Page.Listensimport Page.Registerimport Page.Statsimport Types exposing (Model, Msg(..), Page(..), Tab(..), UserInfo)
view : Model -> Browser.Document Msgview model = { title = "scrobbler" , body = [ div [ class "container" ] (header [] [ renderNav model ] :: (case model.page of RegisterPage -> [ Page.Register.renderRegister model ]
AdminPage -> [ Page.Admin.renderAdmin model ]
MainPage -> [ renderMain model ] ) ) ] }
renderNav : Model -> Html MsgrenderNav model = let navClass : Bool -> Html.Attribute Msg navClass active = class (if active then "tab-btn active"
else "tab-btn" )
navLink : String -> Bool -> String -> Html Msg navLink label active href_ = a [ navClass active, href href_ ] [ text label ]
navTab : String -> Tab -> Html Msg navTab label tab = button [ navClass (model.page == MainPage && model.activeTab == tab), onClick (SwitchTab tab) ] [ text label ] in div [ class "bar" ] [ navTab "listens" ListensTab , navTab "stats" StatsTab , navTab "about" AboutTab , if model.registrationEnabled then navLink "join" (model.page == RegisterPage) "/register"
else text "" ]
renderMain : Model -> Html MsgrenderMain model = div [] [ case model.activeTab of ListensTab -> Page.Listens.renderMain model
StatsTab -> div [] [ Page.Stats.renderPeriodSelector model.statsPeriod model.showCustomInput model.customInput model.customError model.stats , case model.error of Just err -> div [ class "error" ] [ text err ]
Nothing -> text "" , Page.Stats.renderStatsView model.expandedSections model.loadedSections model.stats ]
AboutTab -> renderAboutView model.userSlug model.allUsers ]
renderAboutView : String -> List UserInfo -> Html MsgrenderAboutView currentSlug allUsers = let otherUsers = List.filter (\u -> u.slug /= currentSlug) allUsers
userLink { slug, name } = let url = if slug == "" then "/"
else "/u/" ++ slug in li [] [ a [ href url ] [ text name ] ]
extLink url label = a [ href url, target "_blank", class "about-link" ] [ text label ] in div [] [ p [ class "about-lead" ] [ extLink "https://github.com/mtmn/corpus" "corpus" , text " is a self-hosted proxy that syncs scrobbles from " , extLink "https://listenbrainz.org" "ListenBrainz" , text " and " , extLink "https://www.last.fm" "Last.fm." ] , if List.isEmpty otherUsers then text ""
else div [ class "stats-section" ] [ h2 [] [ text "users" ] , ul [ class "about-users" ] (List.map userLink otherUsers) ] ]