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