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"
}