diff --git a/src/TextForEvent.js b/src/TextForEvent.js index de12cec502..f99cf7bde5 100644 --- a/src/TextForEvent.js +++ b/src/TextForEvent.js @@ -248,6 +248,28 @@ function textForPowerEvent(event) { }); } +function textForWidgetEvent(event) { + const senderName = event.sender ? event.sender.name : event.getSender(); + const previousContent = event.getPrevContent() || {}; + const {name, type, url} = event.getContent() || {}; + let widgetName = widgetName || name || type || previousContent.type || ''; + + // Apply sentence case + widgetName = widgetName ? widgetName[0].toUpperCase() + widgetName.slice(1).toLowerCase() + ' ' : ''; + + // If the widget was removed, its content should be {}, but this is sufficiently + // equivalent to that condition. + if (url) { + return _t('%(senderName)s added a %(widgetName)swidget', { + senderName, widgetName, + }); + } else { + return _t('%(senderName)s removed a %(widgetName)swidget', { + senderName, widgetName, + }); + } +} + var handlers = { 'm.room.message': textForMessageEvent, 'm.room.name': textForRoomNameEvent, @@ -260,6 +282,8 @@ var handlers = { 'm.room.history_visibility': textForHistoryVisibilityEvent, 'm.room.encryption': textForEncryptionEvent, 'm.room.power_levels': textForPowerEvent, + + 'im.vector.modular.widgets': textForWidgetEvent, }; module.exports = { diff --git a/src/components/views/rooms/EventTile.js b/src/components/views/rooms/EventTile.js index 776d8a264b..a6f8ed5542 100644 --- a/src/components/views/rooms/EventTile.js +++ b/src/components/views/rooms/EventTile.js @@ -44,6 +44,8 @@ var eventTileTypes = { 'm.room.history_visibility' : 'messages.TextualEvent', 'm.room.encryption' : 'messages.TextualEvent', 'm.room.power_levels' : 'messages.TextualEvent', + + 'im.vector.modular.widgets': 'messages.TextualEvent', }; var MAX_READ_AVATARS = 5; diff --git a/src/i18n/strings/en_EN.json b/src/i18n/strings/en_EN.json index be1f9e994d..d175984e50 100644 --- a/src/i18n/strings/en_EN.json +++ b/src/i18n/strings/en_EN.json @@ -970,5 +970,7 @@ "Failed to upload image": "Failed to upload image", "Failed to update group": "Failed to update group", "Hide avatars in user and room mentions": "Hide avatars in user and room mentions", + "%(senderName)s added a %(widgetName)swidget": "%(senderName)s added a %(widgetName)swidget", + "%(senderName)s removed a %(widgetName)swidget": "%(senderName)s removed a %(widgetName)swidget", "Robot check is currently unavailable on desktop - please use a web browser": "Robot check is currently unavailable on desktop - please use a web browser" }