github.com/pf-qiu/concourse/v6@v6.7.3-0.20201207032516-1f455d73275f/web/elm/src/SideBar/Views.elm (about)

     1  module SideBar.Views exposing (Pipeline, Team, viewTeam)
     2  
     3  import Assets
     4  import HoverState exposing (TooltipPosition(..))
     5  import Html exposing (Html)
     6  import Html.Attributes exposing (class, href, id)
     7  import Html.Events exposing (onClick, onMouseEnter, onMouseLeave)
     8  import Message.Effects exposing (toHtmlID)
     9  import Message.Message exposing (DomID(..), Message(..))
    10  import SideBar.Styles as Styles
    11  import StrictEvents exposing (onLeftClickStopPropagation)
    12  
    13  
    14  type alias Team =
    15      { icon : Styles.Opacity
    16      , collapseIcon :
    17          { asset : Assets.Asset
    18          , opacity : Styles.Opacity
    19          }
    20      , name :
    21          { text : String
    22          , teamColor : Styles.SidebarElementColor
    23          , domID : DomID
    24          }
    25      , isExpanded : Bool
    26      , pipelines : List Pipeline
    27      , background : Styles.Background
    28      }
    29  
    30  
    31  viewTeam : Team -> Html Message
    32  viewTeam team =
    33      Html.div
    34          (class "side-bar-team" :: Styles.team)
    35          [ Html.div
    36              (Styles.teamHeader team
    37                  ++ [ onClick <| Click <| team.name.domID
    38                     , onMouseEnter <| Hover <| Just <| team.name.domID
    39                     , onMouseLeave <| Hover Nothing
    40                     ]
    41              )
    42              [ Styles.collapseIcon team.collapseIcon
    43              , Styles.teamIcon
    44              , Html.div
    45                  (Styles.teamName team.name
    46                      ++ [ id <| toHtmlID team.name.domID ]
    47                  )
    48                  [ Html.text team.name.text ]
    49              ]
    50          , if team.isExpanded then
    51              Html.div Styles.column <| List.map viewPipeline team.pipelines
    52  
    53            else
    54              Html.text ""
    55          ]
    56  
    57  
    58  type alias Pipeline =
    59      { icon : Assets.Asset
    60      , name :
    61          { pipelineColor : Styles.SidebarElementColor
    62          , text : String
    63          , weight : Styles.FontWeight
    64          }
    65      , background : Styles.Background
    66      , href : String
    67      , domID : DomID
    68      , starIcon :
    69          { filled : Bool
    70          , isBright : Bool
    71          }
    72      , id : Int
    73      }
    74  
    75  
    76  viewPipeline : Pipeline -> Html Message
    77  viewPipeline p =
    78      Html.a
    79          (Styles.pipeline p
    80              ++ [ href <| p.href
    81                 , onMouseEnter <| Hover <| Just <| p.domID
    82                 , onMouseLeave <| Hover Nothing
    83                 ]
    84          )
    85          [ Html.div
    86              (Styles.pipelineIcon p.icon)
    87              []
    88          , Html.div
    89              (id (toHtmlID p.domID)
    90                  :: Styles.pipelineName p.name
    91              )
    92              [ Html.text p.name.text ]
    93          , Html.div
    94              (Styles.pipelineFavorite p.starIcon
    95                  ++ [ onLeftClickStopPropagation <| Click <| SideBarFavoritedIcon p.id ]
    96              )
    97              []
    98          ]