@@ -1827,16 +1834,18 @@ module.exports = React.createClass({
onLeaveClick={(myMember && myMember.membership === "join") ? this.onLeaveClick : null}
/>
{ auxPanel }
- { topUnreadMessagesBar }
- { messagePanel }
- { searchResultsPanel }
-
-
-
- { statusBar }
+
+ { topUnreadMessagesBar }
+ { messagePanel }
+ { searchResultsPanel }
+
+ { messageComposer }
- { messageComposer }
);
},
diff --git a/src/components/structures/TimelinePanel.js b/src/components/structures/TimelinePanel.js
index e3b3b66f97..2bf8a08b98 100644
--- a/src/components/structures/TimelinePanel.js
+++ b/src/components/structures/TimelinePanel.js
@@ -89,9 +89,6 @@ var TimelinePanel = React.createClass({
// callback which is called when the read-up-to mark is updated.
onReadMarkerUpdated: React.PropTypes.func,
- // opacity for dynamic UI fading effects
- opacity: React.PropTypes.number,
-
// maximum number of events to show in a timeline
timelineCap: React.PropTypes.number,
@@ -1157,7 +1154,6 @@ var TimelinePanel = React.createClass({
onScroll={this.onMessageListScroll}
onFillRequest={this.onMessageListFillRequest}
onUnfillRequest={this.onMessageListUnfillRequest}
- opacity={this.props.opacity}
isTwelveHour={this.state.isTwelveHour}
alwaysShowTimestamps={this.state.alwaysShowTimestamps}
className={this.props.className}
diff --git a/src/components/structures/UserSettings.js b/src/components/structures/UserSettings.js
index b69bea9282..7704cce0c7 100644
--- a/src/components/structures/UserSettings.js
+++ b/src/components/structures/UserSettings.js
@@ -271,9 +271,9 @@ module.exports = React.createClass({
MatrixClientPeg.get().on("RoomMember.membership", this._onInviteStateChange);
dis.dispatch({
- action: 'ui_opacity',
- sideOpacity: 0.3,
- middleOpacity: 0.3,
+ action: 'panel_disable',
+ sideDisabled: true,
+ middleDisabled: true,
});
this._refreshFromServer();
@@ -311,9 +311,9 @@ module.exports = React.createClass({
componentWillUnmount: function() {
this._unmounted = true;
dis.dispatch({
- action: 'ui_opacity',
- sideOpacity: 1.0,
- middleOpacity: 1.0,
+ action: 'panel_disable',
+ sideDisabled: false,
+ middleDisabled: false,
});
dis.unregister(this.dispatcherRef);
const cli = MatrixClientPeg.get();
diff --git a/src/components/views/dialogs/AddressPickerDialog.js b/src/components/views/dialogs/AddressPickerDialog.js
index 8c6f033bdc..5796e60cc9 100644
--- a/src/components/views/dialogs/AddressPickerDialog.js
+++ b/src/components/views/dialogs/AddressPickerDialog.js
@@ -272,20 +272,27 @@ module.exports = React.createClass({
const topicEvent = room.currentState.getStateEvents('m.room.topic', '');
const name = nameEvent ? nameEvent.getContent().name : '';
const canonicalAlias = room.getCanonicalAlias();
+ const aliasEvents = room.currentState.getStateEvents('m.room.aliases');
+ const aliases = aliasEvents.map((ev) => ev.getContent().aliases).reduce((a, b) => {
+ return a.concat(b);
+ }, []);
const topic = topicEvent ? topicEvent.getContent().topic : '';
const nameMatch = (name || '').toLowerCase().includes(lowerCaseQuery);
- const aliasMatch = (canonicalAlias || '').toLowerCase().includes(lowerCaseQuery);
+ const aliasMatch = aliases.some((alias) =>
+ (alias || '').toLowerCase().includes(lowerCaseQuery),
+ );
const topicMatch = (topic || '').toLowerCase().includes(lowerCaseQuery);
if (!(nameMatch || topicMatch || aliasMatch)) {
return;
}
const avatarEvent = room.currentState.getStateEvents('m.room.avatar', '');
const avatarUrl = avatarEvent ? avatarEvent.getContent().url : undefined;
+
results.push({
room_id: room.roomId,
avatar_url: avatarUrl,
- name: name || canonicalAlias,
+ name: name || canonicalAlias || aliases[0] || _t('Unnamed Room'),
});
});
this._processResults(results, query);
diff --git a/src/components/views/elements/AppTile.js b/src/components/views/elements/AppTile.js
index 3e343e098c..0070af1fb2 100644
--- a/src/components/views/elements/AppTile.js
+++ b/src/components/views/elements/AppTile.js
@@ -172,18 +172,29 @@ export default React.createClass({
*/
_onDeleteClick: function() {
if (this._canUserModify()) {
- console.log("Delete widget %s", this.props.id);
- this.setState({deleting: true});
- MatrixClientPeg.get().sendStateEvent(
- this.props.room.roomId,
- 'im.vector.modular.widgets',
- {}, // empty content
- this.props.id,
- ).then(() => {
- console.log('Deleted widget');
- }, (e) => {
- console.error('Failed to delete widget', e);
- this.setState({deleting: false});
+ // Show delete confirmation dialog
+ const QuestionDialog = sdk.getComponent("dialogs.QuestionDialog");
+ Modal.createTrackedDialog('Delete Widget', '', QuestionDialog, {
+ title: _t("Delete Widget"),
+ description: _t(
+ "Deleting a widget removes it for all users in this room." +
+ " Are you sure you want to delete this widget?"),
+ button: _t("Delete widget"),
+ onFinished: (confirmed) => {
+ if (!confirmed) {
+ return;
+ }
+ this.setState({deleting: true});
+ MatrixClientPeg.get().sendStateEvent(
+ this.props.room.roomId,
+ 'im.vector.modular.widgets',
+ {}, // empty content
+ this.props.id,
+ ).catch((e) => {
+ console.error('Failed to delete widget', e);
+ this.setState({deleting: false});
+ });
+ },
});
} else {
console.log("Revoke widget permissions - %s", this.props.id);
@@ -305,7 +316,7 @@ export default React.createClass({
let deleteIcon = 'img/cancel.svg';
let deleteClasses = 'mx_filterFlipColor mx_AppTileMenuBarWidget';
if(this._canUserModify()) {
- deleteIcon = 'img/cancel-red.svg';
+ deleteIcon = 'img/icon-delete-pink.svg';
deleteClasses += ' mx_AppTileMenuBarWidgetDelete';
}
diff --git a/src/components/views/elements/EditableItemList.js b/src/components/views/elements/EditableItemList.js
index 35e207daef..05ae625515 100644
--- a/src/components/views/elements/EditableItemList.js
+++ b/src/components/views/elements/EditableItemList.js
@@ -84,7 +84,9 @@ module.exports = React.createClass({
onNewItemChanged: PropTypes.func,
onItemAdded: PropTypes.func,
onItemEdited: PropTypes.func,
- onItemRemoved: PropTypes. func,
+ onItemRemoved: PropTypes.func,
+
+ canEdit: PropTypes.bool,
},
getDefaultProps: function() {
@@ -136,14 +138,16 @@ module.exports = React.createClass({
{ label }