Merge pull request #1900 from vector-im/wmwragg/mention-state-menu
Wmwragg/mention state menupull/1929/head
						commit
						70754db27a
					
				|  | @ -34,6 +34,8 @@ module.exports.components['structures.RoomDirectory'] = require('./components/st | |||
| module.exports.components['structures.RoomSubList'] = require('./components/structures/RoomSubList'); | ||||
| module.exports.components['structures.SearchBox'] = require('./components/structures/SearchBox'); | ||||
| module.exports.components['structures.ViewSource'] = require('./components/structures/ViewSource'); | ||||
| module.exports.components['views.context_menus.MessageContextMenu'] = require('./components/views/context_menus/MessageContextMenu'); | ||||
| module.exports.components['views.context_menus.NotificationStateContextMenu'] = require('./components/views/context_menus/NotificationStateContextMenu'); | ||||
| module.exports.components['views.elements.ImageView'] = require('./components/views/elements/ImageView'); | ||||
| module.exports.components['views.elements.Spinner'] = require('./components/views/elements/Spinner'); | ||||
| module.exports.components['views.globals.GuestWarningBar'] = require('./components/views/globals/GuestWarningBar'); | ||||
|  | @ -46,7 +48,6 @@ module.exports.components['views.messages.DateSeparator'] = require('./component | |||
| module.exports.components['views.messages.MessageTimestamp'] = require('./components/views/messages/MessageTimestamp'); | ||||
| module.exports.components['views.messages.SenderProfile'] = require('./components/views/messages/SenderProfile'); | ||||
| module.exports.components['views.rooms.BottomLeftMenuTile'] = require('./components/views/rooms/BottomLeftMenuTile'); | ||||
| module.exports.components['views.rooms.MessageContextMenu'] = require('./components/views/rooms/MessageContextMenu'); | ||||
| module.exports.components['views.rooms.RoomDNDView'] = require('./components/views/rooms/RoomDNDView'); | ||||
| module.exports.components['views.rooms.RoomDropTarget'] = require('./components/views/rooms/RoomDropTarget'); | ||||
| module.exports.components['views.rooms.RoomTooltip'] = require('./components/views/rooms/RoomTooltip'); | ||||
|  |  | |||
|  | @ -95,7 +95,7 @@ module.exports = React.createClass({ | |||
| 
 | ||||
|         if (eventStatus === 'not_sent') { | ||||
|             resendButton = ( | ||||
|                 <div className="mx_ContextualMenu_field" onClick={this.onResendClick}> | ||||
|                 <div className="mx_MessageContextMenu_field" onClick={this.onResendClick}> | ||||
|                     Resend | ||||
|                 </div> | ||||
|             ); | ||||
|  | @ -103,7 +103,7 @@ module.exports = React.createClass({ | |||
| 
 | ||||
|         if (!eventStatus) { // sent
 | ||||
|             redactButton = ( | ||||
|                 <div className="mx_ContextualMenu_field" onClick={this.onRedactClick}> | ||||
|                 <div className="mx_MessageContextMenu_field" onClick={this.onRedactClick}> | ||||
|                     Redact | ||||
|                 </div> | ||||
|             ); | ||||
|  | @ -111,14 +111,14 @@ module.exports = React.createClass({ | |||
| 
 | ||||
|         if (eventStatus === "queued" || eventStatus === "not_sent") { | ||||
|             cancelButton = ( | ||||
|                 <div className="mx_ContextualMenu_field" onClick={this.onCancelSendClick}> | ||||
|                 <div className="mx_MessageContextMenu_field" onClick={this.onCancelSendClick}> | ||||
|                     Cancel Sending | ||||
|                 </div> | ||||
|             ); | ||||
|         } | ||||
| 
 | ||||
|         viewSourceButton = ( | ||||
|             <div className="mx_ContextualMenu_field" onClick={this.onViewSourceClick}> | ||||
|             <div className="mx_MessageContextMenu_field" onClick={this.onViewSourceClick}> | ||||
|                 View Source | ||||
|             </div> | ||||
|         ); | ||||
|  | @ -126,7 +126,7 @@ module.exports = React.createClass({ | |||
|         if (this.props.eventTileOps) { | ||||
|             if (this.props.eventTileOps.isWidgetHidden()) { | ||||
|                 unhidePreviewButton = ( | ||||
|                     <div className="mx_ContextualMenu_field" onClick={this.onUnhidePreviewClick}> | ||||
|                     <div className="mx_MessageContextMenu_field" onClick={this.onUnhidePreviewClick}> | ||||
|                         Unhide Preview | ||||
|                     </div> | ||||
|                 ) | ||||
|  | @ -136,7 +136,7 @@ module.exports = React.createClass({ | |||
|         // XXX: this should be https://matrix.to.
 | ||||
|         // XXX: if we use room ID, we should also include a server where the event can be found (other than in the domain of the event ID)
 | ||||
|         permalinkButton = ( | ||||
|             <div className="mx_ContextualMenu_field"> | ||||
|             <div className="mx_MessageContextMenu_field"> | ||||
|                 <a href={ "#/room/" + this.props.mxEvent.getRoomId() +"/"+ this.props.mxEvent.getId() } | ||||
|                    onClick={ this.onPermalinkClick }>Permalink</a> | ||||
|             </div> | ||||
|  | @ -0,0 +1,150 @@ | |||
| /* | ||||
| Copyright 2015, 2016 OpenMarket Ltd | ||||
| 
 | ||||
| Licensed under the Apache License, Version 2.0 (the "License"); | ||||
| you may not use this file except in compliance with the License. | ||||
| You may obtain a copy of the License at | ||||
| 
 | ||||
|     http://www.apache.org/licenses/LICENSE-2.0
 | ||||
| 
 | ||||
| Unless required by applicable law or agreed to in writing, software | ||||
| distributed under the License is distributed on an "AS IS" BASIS, | ||||
| WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | ||||
| See the License for the specific language governing permissions and | ||||
| limitations under the License. | ||||
| */ | ||||
| 
 | ||||
| 'use strict'; | ||||
| 
 | ||||
| var q = require("q"); | ||||
| var React = require('react'); | ||||
| var classNames = require('classnames'); | ||||
| var MatrixClientPeg = require('matrix-react-sdk/lib/MatrixClientPeg'); | ||||
| var dis = require('matrix-react-sdk/lib/dispatcher'); | ||||
| 
 | ||||
| module.exports = React.createClass({ | ||||
|     displayName: 'NotificationStateContextMenu', | ||||
| 
 | ||||
|     propTypes: { | ||||
|         room: React.PropTypes.object.isRequired, | ||||
|         /* callback called when the menu is dismissed */ | ||||
|         onFinished: React.PropTypes.func, | ||||
|     }, | ||||
| 
 | ||||
|     getInitialState: function() { | ||||
|         var areNotifsMuted = false; | ||||
|         var cli = MatrixClientPeg.get(); | ||||
|         if (!cli.isGuest()) { | ||||
|             var roomPushRule = cli.getRoomPushRule("global", this.props.room.roomId); | ||||
|             if (roomPushRule) { | ||||
|                 if (0 <= roomPushRule.actions.indexOf("dont_notify")) { | ||||
|                     areNotifsMuted = true; | ||||
|                 } | ||||
|             } | ||||
|         } | ||||
| 
 | ||||
|         return { | ||||
|             areNotifsMuted: areNotifsMuted, | ||||
|         }; | ||||
|     }, | ||||
| 
 | ||||
|     _save: function( isMuted ) { | ||||
|         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}); | ||||
| 
 | ||||
|                 // delay slightly so that the user can see their state change
 | ||||
|                 // before closing the menu
 | ||||
|                 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, | ||||
|                     }); | ||||
| 
 | ||||
|                     // Close the context menu
 | ||||
|                     if (self.props.onFinished) { | ||||
|                         self.props.onFinished(); | ||||
|                     }; | ||||
|                 }); | ||||
|             }).fail(function(error) { | ||||
|                 // TODO: some form of error notification to the user
 | ||||
|                 // to inform them that their state change failed.
 | ||||
|             }); | ||||
|         } | ||||
|     }, | ||||
| 
 | ||||
|     _onClickAlertMe: function() { | ||||
|         // Placeholder
 | ||||
|     }, | ||||
| 
 | ||||
|     _onClickAllNotifs: function() { | ||||
|         this._save(false); | ||||
|     }, | ||||
| 
 | ||||
|     _onClickMentions: function() { | ||||
|         // Placeholder
 | ||||
|     }, | ||||
| 
 | ||||
|     _onClickMute: function() { | ||||
|         this._save(true); | ||||
|     }, | ||||
| 
 | ||||
|     render: function() { | ||||
|         var cli = MatrixClientPeg.get(); | ||||
| 
 | ||||
|         var alertMeClasses = classNames({ | ||||
|             'mx_NotificationStateContextMenu_field': true, | ||||
|             'mx_NotificationStateContextMenu_fieldDisabled': true, | ||||
|         }); | ||||
| 
 | ||||
|         var allNotifsClasses = classNames({ | ||||
|             'mx_NotificationStateContextMenu_field': true, | ||||
|             'mx_NotificationStateContextMenu_fieldSet': !this.state.areNotifsMuted, | ||||
|         }); | ||||
| 
 | ||||
|         var mentionsClasses = classNames({ | ||||
|             'mx_NotificationStateContextMenu_field': true, | ||||
|             'mx_NotificationStateContextMenu_fieldDisabled': true, | ||||
|         }); | ||||
| 
 | ||||
|         var muteNotifsClasses = classNames({ | ||||
|             'mx_NotificationStateContextMenu_field': true, | ||||
|             'mx_NotificationStateContextMenu_fieldSet': this.state.areNotifsMuted, | ||||
|         }); | ||||
| 
 | ||||
|         return ( | ||||
|             <div> | ||||
|                 <div className="mx_NotificationStateContextMenu_picker" > | ||||
|                     <img src="img/notif-slider.svg" width="20" height="107" /> | ||||
|                 </div> | ||||
|                 <div className={ alertMeClasses } onClick={this._onClickAlertMe} > | ||||
|                     <img className="mx_NotificationStateContextMenu_icon" src="img/icon-context-mute-off-copy.svg" width="16" height="12" /> | ||||
|                     Alert me | ||||
|                 </div> | ||||
|                 <div className={ allNotifsClasses } onClick={this._onClickAllNotifs} > | ||||
|                     <img className="mx_NotificationStateContextMenu_activeIcon" src="img/notif-active.svg" width="12" height="12" /> | ||||
|                     <img className="mx_NotificationStateContextMenu_icon" src="img/icon-context-mute-off.svg" width="16" height="12" /> | ||||
|                     All notifications | ||||
|                 </div> | ||||
|                 <div className={ mentionsClasses } onClick={this._onClickMentions} > | ||||
|                     <img className="mx_NotificationStateContextMenu_icon" src="img/icon-context-mute-mentions.svg" width="16" height="12" /> | ||||
|                     Mentions only | ||||
|                 </div> | ||||
|                 <div className={ muteNotifsClasses } onClick={this._onClickMute} > | ||||
|                     <img className="mx_NotificationStateContextMenu_activeIcon" src="img/notif-active.svg" width="12" height="12" /> | ||||
|                     <img className="mx_NotificationStateContextMenu_icon" src="img/icon-context-mute.svg" width="16" height="12" /> | ||||
|                     Mute | ||||
|                 </div> | ||||
|             </div> | ||||
|         ); | ||||
|     } | ||||
| }); | ||||
|  | @ -85,50 +85,6 @@ input[type=text]:focus, textarea:focus { | |||
|     border-left: 6px solid transparent; | ||||
| } | ||||
| 
 | ||||
| .mx_ContextualMenu_background { | ||||
|     position: fixed; | ||||
|     top: 0; | ||||
|     left: 0; | ||||
|     width: 100%; | ||||
|     height: 100%; | ||||
|     opacity: 1.0; | ||||
|     z-index: 2000; | ||||
| } | ||||
| 
 | ||||
| .mx_ContextualMenu { | ||||
|     border: 1px solid #a4a4a4; | ||||
|     border-radius: 8px; | ||||
|     background-color: #fff; | ||||
|     color: #747474; | ||||
|     position: fixed; | ||||
|     z-index: 2001; | ||||
|     padding: 6px; | ||||
| } | ||||
| 
 | ||||
| .mx_ContextualMenu_chevron_right { | ||||
|     padding: 12px; | ||||
|     position: absolute; | ||||
|     right: -21px; | ||||
|     top: 0px; | ||||
| } | ||||
| 
 | ||||
| .mx_ContextualMenu_chevron_left { | ||||
|     padding: 12px; | ||||
|     position: absolute; | ||||
|     left: -21px; | ||||
|     top: 0px; | ||||
| } | ||||
| 
 | ||||
| .mx_ContextualMenu_field { | ||||
|     padding: 3px 6px 3px 6px; | ||||
|     cursor: pointer; | ||||
| } | ||||
| 
 | ||||
| .mx_ContextualMenu_spinner { | ||||
|     display: block; | ||||
|     margin: 0 auto; | ||||
| } | ||||
| 
 | ||||
| .mx_Dialog_wrapper { | ||||
|     position: fixed; | ||||
|     z-index: 4000; | ||||
|  |  | |||
|  | @ -0,0 +1,106 @@ | |||
| /* | ||||
| Copyright 2015, 2016 OpenMarket Ltd | ||||
| 
 | ||||
| Licensed under the Apache License, Version 2.0 (the "License"); | ||||
| you may not use this file except in compliance with the License. | ||||
| You may obtain a copy of the License at | ||||
| 
 | ||||
|     http://www.apache.org/licenses/LICENSE-2.0 | ||||
| 
 | ||||
| Unless required by applicable law or agreed to in writing, software | ||||
| distributed under the License is distributed on an "AS IS" BASIS, | ||||
| WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | ||||
| See the License for the specific language governing permissions and | ||||
| limitations under the License. | ||||
| */ | ||||
| 
 | ||||
| .mx_ContextualMenu_wrapper { | ||||
|     position: fixed; | ||||
|     z-index: 2000; | ||||
| } | ||||
| 
 | ||||
| .mx_ContextualMenu_background { | ||||
|     position: fixed; | ||||
|     top: 0; | ||||
|     left: 0; | ||||
|     width: 100%; | ||||
|     height: 100%; | ||||
|     opacity: 1.0; | ||||
|     z-index: 2000; | ||||
| } | ||||
| 
 | ||||
| .mx_ContextualMenu { | ||||
|     border: solid 1px rgba(187, 187, 187, 0.5); | ||||
|     border-radius: 4px; | ||||
|     background-color: #f6f6f6; | ||||
|     color: #4a4a4a; | ||||
|     position: absolute; | ||||
|     padding: 6px; | ||||
| 	font-size: 14px; | ||||
|     z-index: 2001; | ||||
| } | ||||
| 
 | ||||
| .mx_ContextualMenu.mx_ContextualMenu_right { | ||||
|     right: 8px; | ||||
| } | ||||
| 
 | ||||
| .mx_ContextualMenu_chevron_right { | ||||
|     position: absolute; | ||||
|     right: -8px; | ||||
|     top: 0px; | ||||
|     width: 0; | ||||
|     height: 0; | ||||
|     border-top: 8px solid transparent; | ||||
|     border-left: 8px solid rgba(187, 187, 187, 0.5); | ||||
|     border-bottom: 8px solid transparent; | ||||
| } | ||||
| 
 | ||||
| .mx_ContextualMenu_chevron_right:after{ | ||||
|     content:''; | ||||
|     width: 0; | ||||
|     height: 0; | ||||
|     border-top: 7px solid transparent; | ||||
|     border-left: 7px solid #f6f6f6; | ||||
|     border-bottom: 7px solid transparent; | ||||
|     position:absolute; | ||||
|     top: -7px; | ||||
|     right: 1px; | ||||
| } | ||||
| 
 | ||||
| .mx_ContextualMenu.mx_ContextualMenu_left { | ||||
|     left: 8px; | ||||
| } | ||||
| 
 | ||||
| .mx_ContextualMenu_chevron_left { | ||||
|     position: absolute; | ||||
|     left: -8px; | ||||
|     top: 0px; | ||||
|     width: 0; | ||||
|     height: 0; | ||||
|     border-top: 8px solid transparent; | ||||
|     border-right: 8px solid rgba(187, 187, 187, 0.5); | ||||
|     border-bottom: 8px solid transparent; | ||||
| } | ||||
| 
 | ||||
| .mx_ContextualMenu_chevron_left:after{ | ||||
|     content:''; | ||||
|     width: 0; | ||||
|     height: 0; | ||||
|     border-top: 7px solid transparent; | ||||
|     border-right: 7px solid #f6f6f6; | ||||
|     border-bottom: 7px solid transparent; | ||||
|     position:absolute; | ||||
|     top: -7px; | ||||
|     left: 1px; | ||||
| } | ||||
| 
 | ||||
| .mx_ContextualMenu_field { | ||||
|     padding: 3px 6px 3px 6px; | ||||
|     cursor: pointer; | ||||
|     white-space: nowrap; | ||||
| } | ||||
| 
 | ||||
| .mx_ContextualMenu_spinner { | ||||
|     display: block; | ||||
|     margin: 0 auto; | ||||
| } | ||||
|  | @ -93,8 +93,8 @@ limitations under the License. | |||
| 
 | ||||
|     background-color: #eaf5f0; | ||||
| 
 | ||||
|     -webkit-flex: 0 0 210px; | ||||
|     flex: 0 0 210px; | ||||
|     -webkit-flex: 0 0 235px; | ||||
|     flex: 0 0 235px; | ||||
| } | ||||
| 
 | ||||
| .mx_MatrixChat .mx_LeftPanel.collapsed { | ||||
|  |  | |||
|  | @ -16,8 +16,8 @@ limitations under the License. | |||
| 
 | ||||
| .mx_SearchBox { | ||||
|     height: 24px; | ||||
|     margin-left: 16px; | ||||
|     margin-right: 20px; | ||||
|     margin-left: 18px; | ||||
|     margin-right: 18px; | ||||
|     padding-top: 24px; | ||||
|     padding-bottom: 22px; | ||||
|     border-bottom: 1px solid rgba(0, 0, 0, 0.1); | ||||
|  |  | |||
|  | @ -15,18 +15,29 @@ limitations under the License. | |||
| */ | ||||
| 
 | ||||
| .mx_RoomTile { | ||||
|     position: relative; | ||||
|     cursor: pointer; | ||||
|     /* This fixes wrapping of long room names, but breaks drag & drop previews */ | ||||
|     /* display: table-row; */ | ||||
|     font-size: 13px; | ||||
|     display: block; | ||||
|     height: 34px; | ||||
| } | ||||
| 
 | ||||
| .mx_RoomTile .mx_RoomTile_mute { | ||||
|     opacity: 0.4; | ||||
| } | ||||
| 
 | ||||
| .mx_RoomTile_nameContainer { | ||||
|     display: inline-block; | ||||
|     width: 180px; | ||||
|     height: 24px; | ||||
| } | ||||
| 
 | ||||
| .mx_RoomTile_avatar { | ||||
|     display: inline-block; | ||||
|     padding-top: 6px; | ||||
|     padding-bottom: 6px; | ||||
|     padding-top: 5px; | ||||
|     padding-bottom: 5px; | ||||
|     padding-left: 18px; | ||||
|     padding-right: 6px; | ||||
|     width: 24px; | ||||
|     height: 24px; | ||||
|     vertical-align: middle; | ||||
|  | @ -34,13 +45,17 @@ limitations under the License. | |||
| 
 | ||||
| .mx_RoomTile_name { | ||||
|     display: inline-block; | ||||
|     width: 100px; | ||||
|     position: relative; | ||||
|     width: 165px; | ||||
|     vertical-align: middle; | ||||
|     overflow: hidden; | ||||
|     word-break: break-word; | ||||
|     padding-left: 11px; | ||||
|     padding-right: 15px; | ||||
|     padding-left: 6px; | ||||
|     padding-right: 6px; | ||||
|     padding-top: 2px; | ||||
|     padding-bottom: 3px; | ||||
|     color: rgba(69, 69, 69, 0.8); | ||||
|     white-space: nowrap; | ||||
|     overflow: hidden; | ||||
|     text-overflow: ellipsis; | ||||
| } | ||||
| 
 | ||||
| .mx_RoomTile_ellipsis .mx_RoomTile_name { | ||||
|  | @ -53,17 +68,16 @@ limitations under the License. | |||
| */ | ||||
| } | ||||
| 
 | ||||
| .collapsed .mx_RoomTile_nameContainer { | ||||
|     height: 0; | ||||
| } | ||||
| 
 | ||||
| .collapsed .mx_RoomTile_name { | ||||
|     display: none; | ||||
| } | ||||
| 
 | ||||
| .collapsed .mx_RoomTile { | ||||
|     height: 36px; | ||||
| } | ||||
| 
 | ||||
| .collapsed .mx_RoomTile_badge { | ||||
|     top: -40px; | ||||
|     left: 30px; | ||||
|     top: -2px; | ||||
|     min-width: 12px; | ||||
|     height: 16px; | ||||
|     border-radius: 16px; | ||||
|  | @ -71,46 +85,81 @@ limitations under the License. | |||
|     z-index: 200; | ||||
| } | ||||
| 
 | ||||
| /* This is the bottom of the speech bubble */ | ||||
| .mx_RoomTile_highlight .mx_RoomTile_badge:after { | ||||
| /* 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 { | ||||
|     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 { | ||||
|     content: ""; | ||||
|     position: absolute; | ||||
|     display: block; | ||||
|     width: 0; | ||||
|     height: 0; | ||||
|     margin-left: 4px; | ||||
|     margin-left: 6px; | ||||
|     border-top: 8px solid #ff0064; | ||||
|     border-right: 10px solid transparent; | ||||
| } | ||||
| 
 | ||||
| /* Because the specificity of this and the above ".mx_RoomTile_highlight .mx_RoomTile_badge:after" | ||||
| style are the same, this style needs to be AFTER it to take effect when matched */ | ||||
| .collapsed .mx_RoomTile_badge:after { | ||||
|     display: none; | ||||
| } | ||||
| 
 | ||||
| .mx_RoomTile_badge { | ||||
|     display: inline-block; | ||||
|     min-width: 14px; | ||||
|     height: 18px; | ||||
|     position: relative; | ||||
|     left: 8px; | ||||
|     top: 2px; | ||||
|     border-radius: 18px; | ||||
|     min-width: 19px; | ||||
|     height: 17px; | ||||
|     position: absolute; | ||||
|     right: 8px; /*gutter */ | ||||
|     top: 9px; | ||||
|     border-radius: 14px; | ||||
|     color: #fff; | ||||
|     font-weight: bold; | ||||
|     font-weight: 600; | ||||
|     font-size: 11px; | ||||
|     text-align: center; | ||||
|     padding-top: 2px; | ||||
|     padding-top: 1px; | ||||
|     padding-left: 4px; | ||||
|     padding-right: 4px; | ||||
| } | ||||
| 
 | ||||
| .mx_RoomTile_badge:hover { | ||||
| .mx_RoomTile .mx_RoomTile_badge.mx_RoomTile_badgeButton, | ||||
| .mx_RoomTile.mx_RoomTile_menu .mx_RoomTile_badge { | ||||
|     letter-spacing: 0.1em; | ||||
|     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 { | ||||
|     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 { | ||||
|     background-color: #76cfa6; | ||||
| } | ||||
|  | @ -119,26 +168,23 @@ style are the same, this style needs to be AFTER it to take effect when matched | |||
|     background-color: #ff0064; | ||||
| } | ||||
| 
 | ||||
| .mx_RoomTile_badge_no_unread { | ||||
| .mx_RoomTile_read .mx_RoomTile_badge { | ||||
|     background-color: rgb(214, 214, 214); | ||||
|     opacity: 0; | ||||
| } | ||||
| 
 | ||||
| .mx_RoomTile_unread, .mx_RoomTile_highlight { | ||||
|     font-weight: bold; | ||||
|     font-weight: 600; | ||||
| } | ||||
| 
 | ||||
| .mx_RoomTile_selected .mx_RoomTile_name span { | ||||
|     display: inline-block; | ||||
|     position: relative; | ||||
|     width: 100%; | ||||
|     padding: 4px; | ||||
|     margin-top: -4px; | ||||
|     margin-bottom: -4px; | ||||
|     border-radius: 2px; | ||||
| .mx_RoomTile_selected { | ||||
|     background-color: rgba(118,207,166,0.2); | ||||
| } | ||||
| 
 | ||||
| .mx_RoomTile .mx_RoomTile_name.mx_RoomTile_badgeShown { | ||||
|     width: 144px; | ||||
| } | ||||
| 
 | ||||
| .mx_RoomTile_arrow { | ||||
|     position: absolute; | ||||
|     right: 0px; | ||||
|  |  | |||
|  | @ -51,6 +51,10 @@ limitations under the License. | |||
|     overflow-y: auto; | ||||
| } | ||||
| 
 | ||||
| .mx_LeftPanel.collapsed .mx_BottomLeftMenu { | ||||
|    flex: 0 0 120px; | ||||
| } | ||||
| 
 | ||||
| .mx_LeftPanel .mx_BottomLeftMenu { | ||||
|     -webkit-box-ordinal-group: 3; | ||||
|     -moz-box-ordinal-group: 3; | ||||
|  | @ -59,10 +63,11 @@ limitations under the License. | |||
|     order: 3; | ||||
| 
 | ||||
|     border-top: 1px solid rgba(0, 0, 0, 0.1); | ||||
|     margin-left: 18px; | ||||
|     margin-right: 18px; | ||||
|     margin-left: 16px; /* gutter */ | ||||
|     margin-right: 16px; /* gutter */ | ||||
|     -webkit-flex: 0 0 60px; | ||||
|     flex: 0 0 60px; | ||||
|     z-index: 1; | ||||
| } | ||||
| 
 | ||||
| .mx_LeftPanel .mx_BottomLeftMenu_options { | ||||
|  | @ -95,3 +100,7 @@ limitations under the License. | |||
| .mx_LeftPanel .mx_BottomLeftMenu_settings { | ||||
|     float: right; | ||||
| } | ||||
| 
 | ||||
| .mx_LeftPanel.collapsed .mx_BottomLeftMenu_settings { | ||||
|     float: none; | ||||
| } | ||||
|  |  | |||
|  | @ -25,8 +25,8 @@ limitations under the License. | |||
|     color: #3d3b39; | ||||
|     font-weight: 600; | ||||
|     font-size: 13px; | ||||
|     padding-left: 12px; | ||||
|     padding-right: 12px; | ||||
|     padding-left: 16px; /* gutter */ | ||||
|     padding-right: 16px; /* gutter */ | ||||
|     margin-top: 8px; | ||||
|     margin-bottom: 4px; | ||||
|     cursor: pointer; | ||||
|  |  | |||
|  | @ -0,0 +1,25 @@ | |||
| /* | ||||
| Copyright 2015, 2016 OpenMarket Ltd | ||||
| 
 | ||||
| Licensed under the Apache License, Version 2.0 (the "License"); | ||||
| you may not use this file except in compliance with the License. | ||||
| You may obtain a copy of the License at | ||||
| 
 | ||||
|     http://www.apache.org/licenses/LICENSE-2.0 | ||||
| 
 | ||||
| Unless required by applicable law or agreed to in writing, software | ||||
| distributed under the License is distributed on an "AS IS" BASIS, | ||||
| WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | ||||
| See the License for the specific language governing permissions and | ||||
| limitations under the License. | ||||
| */ | ||||
| 
 | ||||
| .mx_MessageContextMenu_field { | ||||
|     padding: 3px 6px 3px 6px; | ||||
|     cursor: pointer; | ||||
|     white-space: nowrap; | ||||
| } | ||||
| 
 | ||||
| .mx_MessageContextMenu_field.mx_MessageContextMenu_fieldSet { | ||||
|     font-weight: bold; | ||||
| } | ||||
|  | @ -0,0 +1,56 @@ | |||
| /* | ||||
| Copyright 2015, 2016 OpenMarket Ltd | ||||
| 
 | ||||
| Licensed under the Apache License, Version 2.0 (the "License"); | ||||
| you may not use this file except in compliance with the License. | ||||
| You may obtain a copy of the License at | ||||
| 
 | ||||
|     http://www.apache.org/licenses/LICENSE-2.0 | ||||
| 
 | ||||
| Unless required by applicable law or agreed to in writing, software | ||||
| distributed under the License is distributed on an "AS IS" BASIS, | ||||
| WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | ||||
| See the License for the specific language governing permissions and | ||||
| limitations under the License. | ||||
| */ | ||||
| 
 | ||||
| .mx_NotificationStateContextMenu_picker { | ||||
|     position: absolute; | ||||
|     top: 16px; | ||||
|     left: 5px; | ||||
| } | ||||
| 
 | ||||
| .mx_NotificationStateContextMenu_field { | ||||
|     padding-top: 4px; | ||||
|     padding-right: 6px; | ||||
|     padding-bottom: 10px; | ||||
|     padding-left: 20px; | ||||
|     cursor: pointer; | ||||
|     white-space: nowrap; | ||||
|     display: flex; | ||||
|     align-items: center; | ||||
| } | ||||
| 
 | ||||
| .mx_NotificationStateContextMenu_field.mx_NotificationStateContextMenu_fieldSet { | ||||
|     font-weight: bold; | ||||
|     padding-left: 8px; | ||||
| } | ||||
| 
 | ||||
| .mx_NotificationStateContextMenu_field.mx_NotificationStateContextMenu_fieldDisabled { | ||||
|     color: rgba(0, 0, 0, 0.2); | ||||
| } | ||||
| 
 | ||||
| .mx_NotificationStateContextMenu_icon { | ||||
|     padding-right: 4px; | ||||
|     padding-left: 4px; | ||||
| } | ||||
| 
 | ||||
| .mx_NotificationStateContextMenu_activeIcon { | ||||
|     display: none; | ||||
|     position: relative; | ||||
|     left: -5px; | ||||
| } | ||||
| 
 | ||||
| .mx_NotificationStateContextMenu_fieldSet .mx_NotificationStateContextMenu_activeIcon { | ||||
|     display: inline-block; | ||||
| } | ||||
|  | @ -16,8 +16,8 @@ limitations under the License. | |||
| 
 | ||||
| .mx_RoomDropTarget { | ||||
|     font-size: 13px; | ||||
|     margin-left: 10px; | ||||
|     margin-right: 15px; | ||||
|     margin-left: 18px; | ||||
|     margin-right: 18px; | ||||
|     padding-top: 5px; | ||||
|     padding-bottom: 5px; | ||||
|     border: 1px dashed #76cfa6; | ||||
|  | @ -28,6 +28,7 @@ limitations under the License. | |||
| 
 | ||||
| .collapsed .mx_RoomDropTarget { | ||||
|     margin-right: 10px; | ||||
|     margin-left: 10px; | ||||
| } | ||||
| 
 | ||||
| .mx_RoomDropTarget_placeholder { | ||||
|  |  | |||
|  | @ -14,19 +14,19 @@ See the License for the specific language governing permissions and | |||
| limitations under the License. | ||||
| */ | ||||
| 
 | ||||
| .mx_RoomTooltip_chevron { | ||||
|     position: absolute; | ||||
|     left: -9px; | ||||
|     top: 7px; | ||||
| } | ||||
| 
 | ||||
| .mx_RoomTooltip { | ||||
|     display: none; | ||||
|     position: fixed; | ||||
|     border: 1px solid #a4a4a4; | ||||
|     border-radius: 8px; | ||||
|     background-color: #fff; | ||||
|     z-index: 1000; | ||||
|     left: 64px; | ||||
|     z-index: 2000; | ||||
|     left: 52px; | ||||
|     padding: 6px; | ||||
| } | ||||
| 
 | ||||
| .mx_RoomTooltip_chevron { | ||||
|     position: absolute; | ||||
|     left: -9px; | ||||
|     top: 8px; | ||||
| } | ||||
|  |  | |||
|  | @ -0,0 +1,11 @@ | |||
| <?xml version="1.0" encoding="UTF-8"?> | ||||
| <!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"> | ||||
| <svg version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0" y="0" width="16" height="12" viewBox="0, 0, 16, 12"> | ||||
|   <g id="Screens-revised" opacity="0.2"> | ||||
|     <g> | ||||
|       <path d="M7.142,0.009 C7.687,0.152 7.921,0.47 8,1 L8,11 C8,11.866 6.974,12.323 6.33,11.743 L3.288,9 L1,9 C0.448,9 0,8.552 0,8 L0,4 C0,3.448 0.448,3 1,3 L3.278,3 L6.332,0.256 C6.744,-0.016 6.487,0.101 7.142,0.009 z M7,1 L3.661,4 L1,4 L1,8 L3.672,8 L7,11 L7,1 z" fill="#000000" id="path-1"/> | ||||
|       <path d="M13,3.928 C13,4.757 12.328,5.428 11.5,5.428 C10.672,5.428 10,4.757 10,3.928 C10,3.1 10.672,2.428 11.5,2.428 C12.328,2.428 13,3.1 13,3.928 z" fill-opacity="0" stroke="#000000" stroke-width="1" stroke-linecap="round" stroke-linejoin="round" id="path-3"/> | ||||
|       <path d="M14,9.5 C14,6.84 12.881,6 11.5,6 C10.119,6 9,6.884 9,9.5 L14,9.5 z" fill-opacity="0" stroke="#000000" stroke-width="1" stroke-linecap="round" stroke-linejoin="round" id="path-5"/> | ||||
|     </g> | ||||
|   </g> | ||||
| </svg> | ||||
| After Width: | Height: | Size: 1.1 KiB | 
|  | @ -0,0 +1,10 @@ | |||
| <?xml version="1.0" encoding="UTF-8"?> | ||||
| <!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"> | ||||
| <svg version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0" y="0" width="16" height="12" viewBox="0, 0, 16, 12"> | ||||
|   <g id="Screens-revised" opacity="0.2"> | ||||
|     <path d="M7.142,0.009 C7.687,0.152 7.921,0.47 8,1 L8,11 C8,11.866 6.974,12.323 6.33,11.743 L3.288,9 L1,9 C0.448,9 0,8.552 0,8 L0,4 C0,3.448 0.448,3 1,3 L3.278,3 L6.332,0.256 C6.744,-0.016 6.487,0.101 7.142,0.009 z M7,1 L3.661,4 L1,4 L1,8 L3.672,8 L7,11 L7,1 z" fill="#000000" id="path-1"/> | ||||
|     <path d="M9.878,7.667 C10.82,7.667 11.584,6.92 11.584,6 C11.584,5.08 10.82,4.333 9.878,4.333" fill-opacity="0" stroke="#000000" stroke-width="1" stroke-linecap="round" id="Oval-50"/> | ||||
|     <path d="M10.055,9.333 C11.939,9.333 13.466,7.841 13.466,6 C13.466,4.159 11.939,2.667 10.055,2.667" fill-opacity="0" stroke="#000000" stroke-width="1" stroke-linecap="round" id="Oval-50-Copy"/> | ||||
|     <path d="M10.055,11 C12.881,11 15.172,8.761 15.172,6 C15.172,3.239 12.881,1 10.055,1" fill-opacity="0" stroke="#000000" stroke-width="1" stroke-linecap="round" id="Oval-50-Copy-2"/> | ||||
|   </g> | ||||
| </svg> | ||||
| After Width: | Height: | Size: 1.2 KiB | 
|  | @ -0,0 +1,9 @@ | |||
| <?xml version="1.0" encoding="UTF-8"?> | ||||
| <!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"> | ||||
| <svg version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0" y="0" width="16" height="12" viewBox="0, 0, 16, 12"> | ||||
|   <g id="Screens-revised" opacity="0.2"> | ||||
|     <path d="M7.142,0.009 C7.687,0.152 7.921,0.47 8,1 L8,11 C8,11.866 6.974,12.323 6.33,11.743 L3.288,9 L1,9 C0.448,9 0,8.552 0,8 L0,4 C0,3.448 0.448,3 1,3 L3.278,3 L6.332,0.256 C6.744,-0.016 6.487,0.101 7.142,0.009 z M7,1 L3.661,4 L1,4 L1,8 L3.672,8 L7,11 L7,1 z" fill="#000000" id="path-1"/> | ||||
|     <path d="M10,8 C11.105,8 12,7.105 12,6 C12,4.895 11.105,4 10,4" fill-opacity="0" stroke="#000000" stroke-width="1" stroke-linecap="round" id="Oval-50"/> | ||||
|     <path d="M10.207,10 C12.416,10 14.207,8.209 14.207,6 C14.207,3.791 12.416,2 10.207,2" fill-opacity="0" stroke="#000000" stroke-width="1" stroke-linecap="round" id="Oval-50-Copy"/> | ||||
|   </g> | ||||
| </svg> | ||||
| After Width: | Height: | Size: 984 B | 
|  | @ -0,0 +1,9 @@ | |||
| <?xml version="1.0" encoding="UTF-8"?> | ||||
| <!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"> | ||||
| <svg version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0" y="0" width="16" height="12" viewBox="0, 0, 16, 12"> | ||||
|   <g id="Screens-revised" opacity="0.2"> | ||||
|     <path d="M7.142,0.009 C7.687,0.152 7.921,0.47 8,1 L8,11 C8,11.866 6.974,12.323 6.33,11.743 L3.288,9 L1,9 C0.448,9 0,8.552 0,8 L0,4 C0,3.448 0.448,3 1,3 L3.278,3 L6.332,0.256 C6.744,-0.016 6.487,0.101 7.142,0.009 z M7,1 L3.661,4 L1,4 L1,8 L3.672,8 L7,11 L7,1 z" fill="#000000" id="path-1"/> | ||||
|     <path d="M12.55,4.45 L9.722,7.278" fill-opacity="0" stroke="#000000" stroke-width="1" stroke-linecap="round" id="Line-Copy-2"/> | ||||
|     <path d="M12.55,7.278 L9.722,4.45" fill-opacity="0" stroke="#000000" stroke-width="1" stroke-linecap="round" id="Line-Copy-5"/> | ||||
|   </g> | ||||
| </svg> | ||||
| After Width: | Height: | Size: 907 B | 
|  | @ -0,0 +1,20 @@ | |||
| <?xml version="1.0" encoding="UTF-8" standalone="no"?> | ||||
| <svg width="13px" height="13px" viewBox="0 0 13 13" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"> | ||||
|     <!-- Generator: sketchtool 39.1 (31720) - http://www.bohemiancoding.com/sketch --> | ||||
|     <title>E15782FC-B5FA-472A-AE12-CFFF484E7253</title> | ||||
|     <desc>Created with sketchtool.</desc> | ||||
|     <defs></defs> | ||||
|     <g id="Screens-revised" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd"> | ||||
|         <g id="Left-Panel-mention-states" transform="translate(-221.000000, -165.000000)"> | ||||
|             <g id="notification-shortcuts" transform="translate(206.000000, 119.000000)"> | ||||
|                 <g id="slider" transform="translate(16.000000, 16.000000)"> | ||||
|                     <g id="notif_active" transform="translate(0.000000, 31.000000)"> | ||||
|                         <circle id="Oval-190" stroke="#62A887" fill="#76CFA6" cx="5.5" cy="5.5" r="5.5"></circle> | ||||
|                         <path d="M2.5,6.5 L4,8" id="Line" stroke="#FFFFFF" stroke-linecap="round"></path> | ||||
|                         <path d="M4,2.97753906 L8.30664062,8" id="Line-Copy" stroke="#FFFFFF" stroke-linecap="round" transform="translate(6.153320, 5.488770) scale(-1, 1) translate(-6.153320, -5.488770) "></path> | ||||
|                     </g> | ||||
|                 </g> | ||||
|             </g> | ||||
|         </g> | ||||
|     </g> | ||||
| </svg> | ||||
| After Width: | Height: | Size: 1.3 KiB | 
|  | @ -0,0 +1,22 @@ | |||
| <?xml version="1.0" encoding="UTF-8" standalone="no"?> | ||||
| <svg width="7px" height="109px" viewBox="0 0 7 109" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"> | ||||
|     <!-- Generator: sketchtool 39.1 (31720) - http://www.bohemiancoding.com/sketch --> | ||||
|     <title>16CB4618-0BD3-4568-BB20-FC56EBC46046</title> | ||||
|     <desc>Created with sketchtool.</desc> | ||||
|     <defs></defs> | ||||
|     <g id="Screens-revised" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd" opacity="0.2"> | ||||
|         <g id="Left-Panel-mention-states" transform="translate(-224.000000, -134.000000)" stroke="#000000"> | ||||
|             <g id="notification-shortcuts" transform="translate(206.000000, 119.000000)"> | ||||
|                 <g id="slider" transform="translate(16.000000, 16.000000)"> | ||||
|                     <g id="notif_slider" transform="translate(3.000000, 0.000000)"> | ||||
|                         <path d="M2.5,3.49505001 L2.5,104.507355" id="Line" stroke-linecap="square"></path> | ||||
|                         <circle id="Oval-187" fill="#F7F7F7" cx="2.5" cy="36.5" r="2.5"></circle> | ||||
|                         <path d="M2.5,73 C3.88071187,73 5,71.8807119 5,70.5 C5,69.1192881 3.88071187,68 2.5,68 C1.11928813,68 0,69.1192881 0,70.5 C0,71.8807119 1.11928813,73 2.5,73 Z" id="Oval-187-Copy" fill="#F7F7F7"></path> | ||||
|                         <path d="M2.5,5 C3.88071187,5 5,3.88071187 5,2.5 C5,1.11928813 3.88071187,0 2.5,0 C1.11928813,0 0,1.11928813 0,2.5 C0,3.88071187 1.11928813,5 2.5,5 Z" id="Oval-187-Copy-3" fill="#F7F7F7"></path> | ||||
|                         <circle id="Oval-187-Copy-2" fill="#F7F7F7" cx="2.5" cy="104.5" r="2.5"></circle> | ||||
|                     </g> | ||||
|                 </g> | ||||
|             </g> | ||||
|         </g> | ||||
|     </g> | ||||
| </svg> | ||||
| After Width: | Height: | Size: 1.7 KiB | 
		Loading…
	
		Reference in New Issue
	
	 Matthew Hodgson
						Matthew Hodgson