diff --git a/src/components/views/context_menus/NotificationStateContextMenu.js b/src/components/views/context_menus/NotificationStateContextMenu.js index 51ab3de8ba..6b8852730b 100644 --- a/src/components/views/context_menus/NotificationStateContextMenu.js +++ b/src/components/views/context_menus/NotificationStateContextMenu.js @@ -48,26 +48,27 @@ module.exports = React.createClass({ }; }, - _save: function( isMuted ) { + _save: function( areNotifsMuted ) { var self = this; const roomId = this.props.room.roomId; var cli = MatrixClientPeg.get(); if (!cli.isGuest()) { - cli.setRoomMutePushRule( - "global", roomId, isMuted - ).then(function() { - self.setState({areNotifsMuted: isMuted}); + // Wrapping this in a q promise, as setRoomMutePushRule can return + // a promise or a value + q(cli.setRoomMutePushRule("global", roomId, areNotifsMuted)) + .then(function(s) { + self.setState({areNotifsMuted: areNotifsMuted}); // delay slightly so that the user can see their state change // before closing the menu - q.delay(500).then(function() { + return q.delay(500).then(function() { // tell everyone that wants to know of the change in // notification state dis.dispatch({ action: 'notification_change', roomId: self.props.room.roomId, - isMuted: isMuted, + areNotifsMuted: areNotifsMuted, }); // Close the context menu @@ -91,11 +92,11 @@ module.exports = React.createClass({ }, _onClickMentions: function() { - // Placeholder + this._save(true); }, _onClickMute: function() { - this._save(true); + // Placeholder }, render: function() { @@ -113,12 +114,12 @@ module.exports = React.createClass({ var mentionsClasses = classNames({ 'mx_NotificationStateContextMenu_field': true, - 'mx_NotificationStateContextMenu_fieldDisabled': true, + 'mx_NotificationStateContextMenu_fieldSet': this.state.areNotifsMuted, }); var muteNotifsClasses = classNames({ 'mx_NotificationStateContextMenu_field': true, - 'mx_NotificationStateContextMenu_fieldSet': this.state.areNotifsMuted, + 'mx_NotificationStateContextMenu_fieldDisabled': true, }); return ( @@ -127,6 +128,7 @@ module.exports = React.createClass({
+ All messages (loud)
@@ -136,6 +138,7 @@ module.exports = React.createClass({ All messages
+ Mentions only
diff --git a/src/skins/vector/css/common.css b/src/skins/vector/css/common.css index cacf8f8d2d..fb87668a8b 100644 --- a/src/skins/vector/css/common.css +++ b/src/skins/vector/css/common.css @@ -52,6 +52,10 @@ a:visited { color: #76cfa6; } +input[type=text].error, input[type=password].error { + border: 1px solid red; +} + input[type=text]:focus, textarea:focus { border: 1px solid #76CFA6; outline: none; @@ -189,6 +193,17 @@ input[type=text]:focus, textarea:focus { background-color: #76cfa6; } +.mx_Dialog button.danger, .mx_Dialog input[type="submit"].danger { + background-color: #ff0064; + border: solid 1px #ff0064; +} + +.mx_Dialog button:disabled, .mx_Dialog input[type="submit"]:disabled { + background-color: #777777; + border: solid 1px #777777; + opacity: 0.7; +} + .mx_Dialog_title { min-height: 16px; padding-top: 40px; @@ -198,6 +213,10 @@ input[type=text]:focus, textarea:focus { color: #454545; } +.mx_Dialog_title.danger { + color: #ff0064; +} + .mx_TextInputDialog_label { text-align: left; padding-bottom: 12px; diff --git a/src/skins/vector/css/matrix-react-sdk/structures/UserSettings.css b/src/skins/vector/css/matrix-react-sdk/structures/UserSettings.css index 66d81f9c0e..7d0e4badd6 100644 --- a/src/skins/vector/css/matrix-react-sdk/structures/UserSettings.css +++ b/src/skins/vector/css/matrix-react-sdk/structures/UserSettings.css @@ -94,6 +94,10 @@ limitations under the License. cursor: pointer; } +.mx_UserSettings_button.danger { + background-color: #ff0064; +} + .mx_UserSettings_section { margin-left: 63px; margin-top: 28px; diff --git a/src/skins/vector/css/matrix-react-sdk/views/rooms/RoomTile.css b/src/skins/vector/css/matrix-react-sdk/views/rooms/RoomTile.css index 3eca1f76dd..eca63c782b 100644 --- a/src/skins/vector/css/matrix-react-sdk/views/rooms/RoomTile.css +++ b/src/skins/vector/css/matrix-react-sdk/views/rooms/RoomTile.css @@ -22,10 +22,6 @@ limitations under the License. height: 34px; } -.mx_RoomTile .mx_RoomTile_mute { - opacity: 0.4; -} - .mx_RoomTile_nameContainer { display: inline-block; width: 180px; @@ -85,30 +81,13 @@ limitations under the License. z-index: 200; } -/* Position mute icon when room muted and collapsed - invisible at the moment */ -.collapsed .mx_RoomTile .mx_RoomTile_badge.mx_RoomTile_badgeMute { - background-color: rgba(0,0,0,0); - opacity: 0; - top: -2px; -} - -/* Position menu icon when room muted and collapsed */ -.collapsed .mx_RoomTile .mx_RoomTile_badge.mx_RoomTile_badgeButton.mx_RoomTile_badgeMute, -.collapsed .mx_RoomTile .mx_RoomTile_badge.mx_RoomTile_badgeButton.mx_RoomTile_badgeMute { - display: inline-block; - background-color: rgb(214, 214, 214); - letter-spacing: 0.1em; - opacity: 1; - top: -2px; -} - /* Hide the bottom of speech bubble */ -.collapsed .mx_RoomTile_highlight .mx_RoomTile_badge:not(.mx_RoomTile_badgeMute):after { +.collapsed .mx_RoomTile_highlight .mx_RoomTile_badge:after { display: none; } -/* This is the bottom of the speech bubble - not drawn when room muted */ -.mx_RoomTile_highlight .mx_RoomTile_badge:not(.mx_RoomTile_badgeMute):after { +/* This is the bottom of the speech bubble */ +.mx_RoomTile_highlight .mx_RoomTile_badge:after { content: ""; position: absolute; display: block; @@ -142,22 +121,9 @@ limitations under the License. opacity: 1; } -/* Position menu icon when room muted */ -.mx_RoomTile .mx_RoomTile_badge.mx_RoomTile_badgeButton.mx_RoomTile_badgeMute, -.mx_RoomTile .mx_RoomTile_badge.mx_RoomTile_badgeButton.mx_RoomTile_badgeMute { +.mx_RoomTile.mx_RoomTile_noBadges .mx_RoomTile_badge.mx_RoomTile_badgeButton, +.mx_RoomTile.mx_RoomTile_menu.mx_RoomTile_noBadges .mx_RoomTile_badge { background-color: rgb(214, 214, 214); - letter-spacing: 0.1em; - opacity: 1; - top: 9px; - right: 8px; /* gutter */ -} - -/* Position mute icon when room muted */ -.mx_RoomTile .mx_RoomTile_badge.mx_RoomTile_badgeMute { - background-color: rgba(0,0,0,0); - opacity: 1; - top: 11px; - right: 6px; } .mx_RoomTile_unreadNotify .mx_RoomTile_badge { @@ -168,11 +134,6 @@ limitations under the License. background-color: #ff0064; } -.mx_RoomTile_read .mx_RoomTile_badge { - background-color: rgb(214, 214, 214); - opacity: 0; -} - .mx_RoomTile_unread, .mx_RoomTile_highlight { font-weight: 800; } @@ -182,7 +143,7 @@ limitations under the License. } .mx_RoomTile .mx_RoomTile_name.mx_RoomTile_badgeShown { - width: 144px; + width: 140px; } .mx_RoomTile_arrow { diff --git a/src/skins/vector/css/vector-web/views/context_menus/NotificationStateContextMenu.css b/src/skins/vector/css/vector-web/views/context_menus/NotificationStateContextMenu.css index 1a186178e1..1f0685264b 100644 --- a/src/skins/vector/css/vector-web/views/context_menus/NotificationStateContextMenu.css +++ b/src/skins/vector/css/vector-web/views/context_menus/NotificationStateContextMenu.css @@ -24,7 +24,7 @@ limitations under the License. padding-top: 4px; padding-right: 6px; padding-bottom: 10px; - padding-left: 20px; + padding-left: 8px; /* 20px */ cursor: pointer; white-space: nowrap; display: flex; @@ -33,7 +33,6 @@ limitations under the License. .mx_NotificationStateContextMenu_field.mx_NotificationStateContextMenu_fieldSet { font-weight: bold; - padding-left: 8px; } .mx_NotificationStateContextMenu_field.mx_NotificationStateContextMenu_fieldDisabled { @@ -46,11 +45,12 @@ limitations under the License. } .mx_NotificationStateContextMenu_activeIcon { - display: none; + display: inline-block; + opacity: 0; position: relative; left: -5px; } .mx_NotificationStateContextMenu_fieldSet .mx_NotificationStateContextMenu_activeIcon { - display: inline-block; + opacity: 1; } diff --git a/test/app-tests/joining.js b/test/app-tests/joining.js index 37a3e9e650..6580161b9b 100644 --- a/test/app-tests/joining.js +++ b/test/app-tests/joining.js @@ -80,7 +80,13 @@ describe('joining a room', function () { httpBackend.when('GET', '/directory/room/'+encodeURIComponent(ROOM_ALIAS)).respond(200, { room_id: ROOM_ID }); // start with a logged-in client - peg.replaceUsingAccessToken(HS_URL, IS_URL, USER_ID, ACCESS_TOKEN); + peg.replaceUsingCreds({ + homeserverUrl: HS_URL, + identityServerUrl: IS_URL, + userId: USER_ID, + accessToken: ACCESS_TOKEN, + guest: false, + }); var mc = ; matrixChat = ReactDOM.render(mc, parentDiv);