Add proper styling to usernames.
This commit is contained in:
parent
27634bf766
commit
d15cc437b7
9
src/Scylla/Fnv.elm
Normal file
9
src/Scylla/Fnv.elm
Normal file
|
@ -0,0 +1,9 @@
|
||||||
|
module Scylla.Fnv exposing (..)
|
||||||
|
import Bitwise
|
||||||
|
|
||||||
|
hash : String -> Int
|
||||||
|
hash = String.foldl hashChar 2166136261
|
||||||
|
|
||||||
|
hashChar : Char -> Int -> Int
|
||||||
|
hashChar char h = modBy 4294967295
|
||||||
|
<| (Bitwise.xor h <| Char.toCode char) * 16777619
|
|
@ -2,13 +2,30 @@ module Scylla.Views exposing (..)
|
||||||
import Scylla.Model exposing (..)
|
import Scylla.Model exposing (..)
|
||||||
import Scylla.Sync exposing (..)
|
import Scylla.Sync exposing (..)
|
||||||
import Scylla.Route exposing (..)
|
import Scylla.Route exposing (..)
|
||||||
|
import Scylla.Fnv as Fnv
|
||||||
import Url.Builder
|
import Url.Builder
|
||||||
import Json.Decode as Decode
|
import Json.Decode as Decode
|
||||||
import Html exposing (Html, div, input, text, button, div, span, a, h2)
|
import Html exposing (Html, div, input, text, button, div, span, a, h2, table, td, tr)
|
||||||
import Html.Attributes exposing (type_, value, href, class)
|
import Html.Attributes exposing (type_, value, href, class, style)
|
||||||
import Html.Events exposing (onInput, onClick)
|
import Html.Events exposing (onInput, onClick)
|
||||||
import Dict
|
import Dict
|
||||||
|
|
||||||
|
stringColor : String -> String
|
||||||
|
stringColor s =
|
||||||
|
let
|
||||||
|
hue = String.fromFloat <| (toFloat (Fnv.hash s)) / 4294967296 * 360
|
||||||
|
in
|
||||||
|
"hsl(" ++ hue ++ ", 82%, 71%)"
|
||||||
|
|
||||||
|
senderName : String -> String
|
||||||
|
senderName s =
|
||||||
|
let
|
||||||
|
colonIndex = Maybe.withDefault -1
|
||||||
|
<| List.head
|
||||||
|
<| String.indexes ":" s
|
||||||
|
in
|
||||||
|
String.slice 1 colonIndex s
|
||||||
|
|
||||||
viewFull : Model -> List (Html Msg)
|
viewFull : Model -> List (Html Msg)
|
||||||
viewFull model =
|
viewFull model =
|
||||||
let
|
let
|
||||||
|
@ -91,12 +108,25 @@ joinedRoomView m roomId jr =
|
||||||
]
|
]
|
||||||
|
|
||||||
eventWrapperView : Model -> List (Html Msg) -> Html Msg
|
eventWrapperView : Model -> List (Html Msg) -> Html Msg
|
||||||
eventWrapperView m = div []
|
eventWrapperView m = table [ class "events-wrapper" ]
|
||||||
|
|
||||||
eventView : Model -> RoomEvent -> Maybe (Html Msg)
|
eventView : Model -> RoomEvent -> Maybe (Html Msg)
|
||||||
eventView m re = case re.type_ of
|
eventView m re =
|
||||||
"m.room.message" -> messageView m re
|
let
|
||||||
|
viewFunction = case re.type_ of
|
||||||
|
"m.room.message" -> Just messageView
|
||||||
_ -> Nothing
|
_ -> Nothing
|
||||||
|
createRow mhtml = tr []
|
||||||
|
[ td [] [ eventSenderView re.sender ]
|
||||||
|
, td [] [ mhtml ]
|
||||||
|
]
|
||||||
|
in
|
||||||
|
Maybe.map createRow
|
||||||
|
<| Maybe.andThen (\f -> f m re) viewFunction
|
||||||
|
|
||||||
|
eventSenderView : String -> Html Msg
|
||||||
|
eventSenderView s =
|
||||||
|
span [ style "background-color" <| stringColor s, class "sender-wrapper" ] [ text <| senderName s ]
|
||||||
|
|
||||||
messageView : Model -> RoomEvent -> Maybe (Html Msg)
|
messageView : Model -> RoomEvent -> Maybe (Html Msg)
|
||||||
messageView m re =
|
messageView m re =
|
||||||
|
@ -111,9 +141,6 @@ messageTextView : Model -> RoomEvent -> Maybe (Html Msg)
|
||||||
messageTextView m re =
|
messageTextView m re =
|
||||||
let
|
let
|
||||||
body = Decode.decodeValue (Decode.field "body" Decode.string) re.content
|
body = Decode.decodeValue (Decode.field "body" Decode.string) re.content
|
||||||
wrap mtext = div []
|
wrap mtext = span [] [ text mtext ]
|
||||||
[ span [] [ text re.sender ]
|
|
||||||
, span [] [ text mtext ]
|
|
||||||
]
|
|
||||||
in
|
in
|
||||||
Maybe.map wrap <| Result.toMaybe body
|
Maybe.map wrap <| Result.toMaybe body
|
||||||
|
|
|
@ -118,3 +118,16 @@ div.message-wrapper {
|
||||||
margin: 3px;
|
margin: 3px;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
table.events-wrapper {
|
||||||
|
td {
|
||||||
|
padding-left: 5px;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
span.sender-wrapper {
|
||||||
|
border-radius: 2px;
|
||||||
|
padding-left: 5px;
|
||||||
|
padding-right: 5px;
|
||||||
|
float: right;
|
||||||
|
}
|
||||||
|
|
Loading…
Reference in New Issue
Block a user