Skip to content

Commit 911e46c

Browse files
committed
Add support for m.notice and m.emote
1 parent 266c421 commit 911e46c

File tree

2 files changed

+36
-14
lines changed

2 files changed

+36
-14
lines changed

src/Scylla/Views.elm

+32-14
Original file line numberDiff line numberDiff line change
@@ -238,42 +238,60 @@ userMessagesView ud apiUrl (u, ms) =
238238
in
239239
tr []
240240
[ td [] [ senderView ud u ]
241-
, td [] <| List.map wrap <| List.filterMap (messageView apiUrl) ms
241+
, td [] <| List.map wrap <| List.filterMap (messageView ud apiUrl) ms
242242
]
243243

244-
messageView : ApiUrl -> Message -> Maybe (Html Msg)
245-
messageView apiUrl msg = case msg of
244+
messageView : Dict String UserData -> ApiUrl -> Message -> Maybe (Html Msg)
245+
messageView ud apiUrl msg = case msg of
246246
Sending t -> Just <| sendingMessageView t
247-
Received re -> roomEventView apiUrl re
247+
Received re -> roomEventView ud apiUrl re
248248

249249
sendingMessageView : SendingMessage -> Html Msg
250250
sendingMessageView msg = case msg.body of
251251
TextMessage t -> span [ class "sending"] [ text t ]
252252

253-
roomEventView : ApiUrl -> RoomEvent -> Maybe (Html Msg)
254-
roomEventView apiUrl re =
253+
roomEventView : Dict String UserData -> ApiUrl -> RoomEvent -> Maybe (Html Msg)
254+
roomEventView ud apiUrl re =
255255
let
256256
msgtype = Decode.decodeValue (Decode.field "msgtype" Decode.string) re.content
257257
in
258258
case msgtype of
259259
Ok "m.text" -> roomEventTextView re
260+
Ok "m.notice" -> roomEventNoticeView re
261+
Ok "m.emote" -> roomEventEmoteView ud re
260262
Ok "m.image" -> roomEventImageView apiUrl re
261263
Ok "m.file" -> roomEventFileView apiUrl re
262264
Ok "m.video" -> roomEventVideoView apiUrl re
263265
_ -> Nothing
264266

265-
roomEventTextView : RoomEvent -> Maybe (Html Msg)
266-
roomEventTextView re =
267+
roomEventFormattedContent : RoomEvent -> Maybe (List (Html Msg))
268+
roomEventFormattedContent re = Maybe.map Html.Parser.Util.toVirtualDom
269+
<| Maybe.andThen (Result.toMaybe << Html.Parser.run )
270+
<| Result.toMaybe
271+
<| Decode.decodeValue (Decode.field "formatted_body" Decode.string) re.content
272+
273+
roomEventContent : (List (Html Msg) -> Html Msg) -> RoomEvent -> Maybe (Html Msg)
274+
roomEventContent f re =
267275
let
268276
body = Decode.decodeValue (Decode.field "body" Decode.string) re.content
269-
customHtml = Maybe.map Html.Parser.Util.toVirtualDom
270-
<| Maybe.andThen (Result.toMaybe << Html.Parser.run )
271-
<| Result.toMaybe
272-
<| Decode.decodeValue (Decode.field "formatted_body" Decode.string) re.content
277+
customHtml = roomEventFormattedContent re
273278
in
274279
case customHtml of
275-
Just c -> Just <| div [] c
276-
Nothing -> Maybe.map (p [] << List.singleton << text) <| Result.toMaybe body
280+
Just c -> Just <| f c
281+
Nothing -> Maybe.map (f << List.singleton << text) <| Result.toMaybe body
282+
283+
roomEventEmoteView : Dict String UserData -> RoomEvent -> Maybe (Html Msg)
284+
roomEventEmoteView ud re =
285+
let
286+
emoteText = "* " ++ displayName ud re.sender ++ " "
287+
in
288+
roomEventContent (\cs -> span [] (text emoteText :: cs)) re
289+
290+
roomEventNoticeView : RoomEvent -> Maybe (Html Msg)
291+
roomEventNoticeView = roomEventContent (span [ class "message-notice" ])
292+
293+
roomEventTextView : RoomEvent -> Maybe (Html Msg)
294+
roomEventTextView = roomEventContent (span [])
277295

278296
roomEventImageView : ApiUrl -> RoomEvent -> Maybe (Html Msg)
279297
roomEventImageView apiUrl re =

static/scss/style.scss

+4
Original file line numberDiff line numberDiff line change
@@ -333,6 +333,10 @@ a.file-wrapper {
333333
}
334334
}
335335

336+
.message-notice {
337+
text-transform: uppercase;
338+
}
339+
336340

337341
/**
338342
* Icons

0 commit comments

Comments
 (0)