diff --git a/webclient/room/room-controller.js b/webclient/room/room-controller.js
index da77864017..9f15b61e10 100644
--- a/webclient/room/room-controller.js
+++ b/webclient/room/room-controller.js
@@ -27,6 +27,7 @@ angular.module('RoomController', ['ngSanitize', 'matrixFilter', 'mFileInput'])
$scope.state = {
user_id: matrixService.config().user_id,
+ permission_denied: undefined, // If defined, this string contains the reason why the user cannot join the room
first_pagination: true, // this is toggled off when the first pagination is done
can_paginate: false, // this is toggled off when we are not ready yet to paginate or when we run out of items
paginating: false, // used to avoid concurrent pagination requests pulling in dup contents
@@ -129,6 +130,28 @@ angular.module('RoomController', ['ngSanitize', 'matrixFilter', 'mFileInput'])
$scope.state.waiting_for_joined_event = false;
onInit3();
}
+ else if (event.state_key === $scope.state.user_id && "invite" !== event.membership && "join" !== event.membership) {
+ var user;
+
+ if ($scope.members[event.user_id]) {
+ user = $scope.members[event.user_id].displayname;
+ }
+ if (user) {
+ user = user + " (" + event.user_id + ")";
+ }
+ else {
+ user = event.user_id;
+ }
+
+
+ if ("ban" === event.membership) {
+ $scope.state.permission_denied = "You have been banned by " + user;
+ }
+ else {
+ $scope.state.permission_denied = "You have been kicked by " + user;
+ }
+
+ }
else {
scrollToBottom();
updateMemberList(event);
@@ -654,7 +677,7 @@ angular.module('RoomController', ['ngSanitize', 'matrixFilter', 'mFileInput'])
},
function(reason) {
console.log("Can't join room: " + JSON.stringify(reason));
- $scope.feedback = "You do not have permission to join this room";
+ $scope.state.permission_denied = "You do not have permission to join this room";
});
}
else {
diff --git a/webclient/room/room.html b/webclient/room/room.html
index 530545da53..25a8e65b97 100644
--- a/webclient/room/room.html
+++ b/webclient/room/room.html
@@ -30,7 +30,7 @@
<div ng-include="'recents/recents.html'"></div>
</div>
- <div id="usersTableWrapper">
+ <div id="usersTableWrapper" ng-hide="state.permission_denied">
<table id="usersTable">
<tr ng-repeat="member in members | orderMembersList">
<td class="userAvatar mouse-pointer" ng-click="$parent.goToUserPage(member.id)" ng-class="member.membership == 'invite' ? 'invited' : ''">
@@ -49,7 +49,7 @@
</table>
</div>
- <div id="messageTableWrapper" keep-scroll>
+ <div id="messageTableWrapper" ng-hide="state.permission_denied" keep-scroll>
<!-- FIXME: need to have better timestamp semantics than the (msg.content.hsob_ts || msg.ts) hack below -->
<table id="messageTable" infinite-scroll="paginateMore()">
<tr ng-repeat="msg in events.rooms[room_id].messages"
@@ -127,6 +127,10 @@
</tr>
</table>
</div>
+
+ <div ng-show="state.permission_denied">
+ {{ state.permission_denied }}
+ </div>
</div>
</div>
@@ -139,11 +143,13 @@
{{ state.user_id }}
</td>
<td width="*">
- <textarea id="mainInput" rows="1" ng-model="textInput" ng-enter="send()" ng-focus="true" autocomplete="off" tab-complete/>
+ <textarea id="mainInput" rows="1" ng-model="textInput" ng-enter="send()"
+ ng-disabled="state.permission_denied"
+ ng-focus="true" autocomplete="off" tab-complete/>
</td>
<td id="buttonsCell">
- <button ng-click="send()">Send</button>
- <button m-file-input="imageFileToSend" class="extraControls">Image</button>
+ <button ng-click="send()" ng-disabled="state.permission_denied">Send</button>
+ <button m-file-input="imageFileToSend" class="extraControls" ng-disabled="state.permission_denied">Image</button>
</td>
</tr>
</table>
@@ -151,11 +157,11 @@
<div class="extraControls">
<span>
Invite a user:
- <input ng-model="userIDToInvite" size="32" type="text" ng-enter="inviteUser()" placeholder="User ID (ex:@user:homeserver)"/>
- <button ng-click="inviteUser()">Invite</button>
+ <input ng-model="userIDToInvite" size="32" type="text" ng-enter="inviteUser()" ng-disabled="state.permission_denied" placeholder="User ID (ex:@user:homeserver)"/>
+ <button ng-click="inviteUser()" ng-disabled="state.permission_denied">Invite</button>
</span>
- <button ng-click="leaveRoom()">Leave</button>
- <button ng-click="startVoiceCall()" ng-show="(currentCall == undefined || currentCall.state == 'ended') && memberCount() == 2">Voice Call</button>
+ <button ng-click="leaveRoom()" ng-disabled="state.permission_denied">Leave</button>
+ <button ng-click="startVoiceCall()" ng-show="(currentCall == undefined || currentCall.state == 'ended') && memberCount() == 2" ng-disabled="state.permission_denied">Voice Call</button>
</div>
{{ feedback }}
|