@@ -238,42 +238,60 @@ userMessagesView ud apiUrl (u, ms) =
238
238
in
239
239
tr []
240
240
[ 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
242
242
]
243
243
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
246
246
Sending t -> Just <| sendingMessageView t
247
- Received re -> roomEventView apiUrl re
247
+ Received re -> roomEventView ud apiUrl re
248
248
249
249
sendingMessageView : SendingMessage -> Html Msg
250
250
sendingMessageView msg = case msg. body of
251
251
TextMessage t -> span [ class " sending" ] [ text t ]
252
252
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 =
255
255
let
256
256
msgtype = Decode . decodeValue ( Decode . field " msgtype" Decode . string) re. content
257
257
in
258
258
case msgtype of
259
259
Ok " m.text" -> roomEventTextView re
260
+ Ok " m.notice" -> roomEventNoticeView re
261
+ Ok " m.emote" -> roomEventEmoteView ud re
260
262
Ok " m.image" -> roomEventImageView apiUrl re
261
263
Ok " m.file" -> roomEventFileView apiUrl re
262
264
Ok " m.video" -> roomEventVideoView apiUrl re
263
265
_ -> Nothing
264
266
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 =
267
275
let
268
276
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
273
278
in
274
279
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 [] )
277
295
278
296
roomEventImageView : ApiUrl -> RoomEvent -> Maybe (Html Msg )
279
297
roomEventImageView apiUrl re =
0 commit comments