From 14903274c0b9992a641d80876399837a3140abb0 Mon Sep 17 00:00:00 2001 From: Michael Telatynski <7t3chguy@gmail.com> Date: Wed, 16 Aug 2017 13:20:32 +0100 Subject: [PATCH 01/15] Change OOO so that MELS generation will continue over hidden events this fixes the scenario of N Member events, then an invisible event e.g. (m.room.aliases) then more Member events. Pre hide-join-parts this is how it worked. Signed-off-by: Michael Telatynski <7t3chguy@gmail.com> --- src/components/structures/MessagePanel.js | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/src/components/structures/MessagePanel.js b/src/components/structures/MessagePanel.js index 02f224e942..a9a14c0870 100644 --- a/src/components/structures/MessagePanel.js +++ b/src/components/structures/MessagePanel.js @@ -339,6 +339,11 @@ module.exports = React.createClass({ for (;i + 1 < this.props.events.length; i++) { const collapsedMxEv = this.props.events[i + 1]; + // Ignore redacted/hidden member events + if (!this._shouldShowEvent(collapsedMxEv)) { + continue; + } + if (!isMembershipChange(collapsedMxEv) || this._wantsDateSeparator(this.props.events[i], collapsedMxEv.getDate())) { break; @@ -349,11 +354,6 @@ module.exports = React.createClass({ readMarkerInMels = true; } - // Ignore redacted/hidden member events - if (!this._shouldShowEvent(collapsedMxEv)) { - continue; - } - summarisedEvents.push(collapsedMxEv); } From 7c336cd00afbe0487cbacb05d8fe22a2349ea0c1 Mon Sep 17 00:00:00 2001 From: Luke Barnard Date: Wed, 16 Aug 2017 17:46:20 +0100 Subject: [PATCH 02/15] Implement TextualEvent tiles for im.vector.modular.widgets E.g. "Bob added a Acme widget", "Susan removed a Giraffe widget" --- src/TextForEvent.js | 21 +++++++++++++++++++++ src/components/views/rooms/EventTile.js | 2 ++ src/i18n/strings/en_EN.json | 4 +++- 3 files changed, 26 insertions(+), 1 deletion(-) diff --git a/src/TextForEvent.js b/src/TextForEvent.js index de12cec502..ed06cc2199 100644 --- a/src/TextForEvent.js +++ b/src/TextForEvent.js @@ -248,6 +248,25 @@ function textForPowerEvent(event) { }); } +function textForWidgetEvent(event) { + const senderName = event.sender ? event.sender.name : event.getSender(); + const prevWidgetName = event.getPrevContent() ? event.getPrevContent().name : null; + let widgetName = event.getContent() ? event.getContent().name : prevWidgetName; + + // Apply sentence case + widgetName = widgetName ? widgetName[0].toUpperCase() + widgetName.slice(1).toLowerCase() + ' ' : ''; + + if (event.getContent().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 +279,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 83be31de4b..0cd463fe8b 100644 --- a/src/i18n/strings/en_EN.json +++ b/src/i18n/strings/en_EN.json @@ -969,5 +969,7 @@ "Automatically replace plain text Emoji": "Automatically replace plain text Emoji", "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" + "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" } From 38f45bc40d6a247fcb914ffb7e40594d4d1909db Mon Sep 17 00:00:00 2001 From: Luke Barnard Date: Wed, 16 Aug 2017 18:19:12 +0100 Subject: [PATCH 03/15] [WIP] app tile click to hide app bodies --- src/components/views/elements/AppTile.js | 13 ++++++++++-- src/components/views/rooms/AppsDrawer.js | 25 ++++++++++++++++-------- src/components/views/rooms/AuxPanel.js | 6 ++++-- 3 files changed, 32 insertions(+), 12 deletions(-) diff --git a/src/components/views/elements/AppTile.js b/src/components/views/elements/AppTile.js index a78b802ad7..dfbb39cb23 100644 --- a/src/components/views/elements/AppTile.js +++ b/src/components/views/elements/AppTile.js @@ -28,6 +28,7 @@ import AppPermission from './AppPermission'; import AppWarning from './AppWarning'; import MessageSpinner from './MessageSpinner'; import WidgetUtils from '../../../WidgetUtils'; +import dis from '../../../dispatcher'; const ALLOWED_APP_URL_SCHEMES = ['https:', 'http:']; const betaHelpMsg = 'This feature is currently experimental and is intended for beta testing only'; @@ -182,6 +183,14 @@ export default React.createClass({ return appTileName; }, + onClickMenuBar: function(e) { + e.preventDefault(); + dis.dispatch({ + action: 'appsDrawer', + show: !this.props.show, + }); + }, + render: function() { let appTileBody; @@ -218,7 +227,7 @@ export default React.createClass({ /> ); - } else { + } else if (this.props.show) { appTileBody = (