From 1342bcedaf1ddf0f45009e7f771f51ee0c32ca6f Mon Sep 17 00:00:00 2001 From: Matthew Hodgson Date: Fri, 24 Oct 2014 16:14:47 +0100 Subject: switch from the deprecated msg.content.prev to msg.prev_content.membership, and fix the bug where kicks of unjoined users aren't displayed sensibly in the history --- webclient/room/room.html | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) (limited to 'webclient/room/room.html') diff --git a/webclient/room/room.html b/webclient/room/room.html index a3f8aee7ab..ce2c581903 100644 --- a/webclient/room/room.html +++ b/webclient/room/room.html @@ -91,11 +91,11 @@ {{ members[msg.state_key].displayname || msg.state_key }} left - + {{ members[msg.user_id].displayname || msg.user_id }} - {{ {"join": "kicked", "ban": "unbanned"}[msg.content.prev] }} + {{ {"invite": "kicked", "join": "kicked", "ban": "unbanned"}[msg.prev_content.membership] }} {{ members[msg.state_key].displayname || msg.state_key }} - + : {{ msg.content.reason }} @@ -105,7 +105,7 @@ {{ members[msg.user_id].displayname || msg.user_id }} {{ {"invite": "invited", "ban": "banned"}[msg.content.membership] }} {{ members[msg.state_key].displayname || msg.state_key }} - + : {{ msg.content.reason }} -- cgit 1.5.1 From da87990bd6e23380cdd5b46809fb80fb619f988c Mon Sep 17 00:00:00 2001 From: Kegan Dougal Date: Mon, 27 Oct 2014 16:28:33 +0000 Subject: Implement SYWEB-121 : Display JSON when clicking messages. JSON is displayed as a modal dialog via AngularJS' bootstrap module, "ui.bootstrap". --- webclient/app.js | 3 ++- webclient/index.html | 2 ++ webclient/room/room-controller.js | 11 +++++++++-- webclient/room/room.html | 20 +++++++++++--------- 4 files changed, 24 insertions(+), 12 deletions(-) (limited to 'webclient/room/room.html') diff --git a/webclient/app.js b/webclient/app.js index 31118304c6..099e2170a0 100644 --- a/webclient/app.js +++ b/webclient/app.js @@ -30,7 +30,8 @@ var matrixWebClient = angular.module('matrixWebClient', [ 'MatrixCall', 'eventStreamService', 'eventHandlerService', - 'infinite-scroll' + 'infinite-scroll', + 'ui.bootstrap' ]); matrixWebClient.config(['$routeProvider', '$provide', '$httpProvider', diff --git a/webclient/index.html b/webclient/index.html index f233919e3d..35c8051298 100644 --- a/webclient/index.html +++ b/webclient/index.html @@ -5,6 +5,7 @@ + @@ -16,6 +17,7 @@ + diff --git a/webclient/room/room-controller.js b/webclient/room/room-controller.js index a1d2e87039..e6149989ea 100644 --- a/webclient/room/room-controller.js +++ b/webclient/room/room-controller.js @@ -15,8 +15,8 @@ limitations under the License. */ angular.module('RoomController', ['ngSanitize', 'matrixFilter', 'mFileInput']) -.controller('RoomController', ['$filter', '$scope', '$timeout', '$routeParams', '$location', '$rootScope', 'matrixService', 'mPresence', 'eventHandlerService', 'mFileUpload', 'matrixPhoneService', 'MatrixCall', - function($filter, $scope, $timeout, $routeParams, $location, $rootScope, matrixService, mPresence, eventHandlerService, mFileUpload, matrixPhoneService, MatrixCall) { +.controller('RoomController', ['$modal', '$filter', '$scope', '$timeout', '$routeParams', '$location', '$rootScope', 'matrixService', 'mPresence', 'eventHandlerService', 'mFileUpload', 'matrixPhoneService', 'MatrixCall', + function($modal, $filter, $scope, $timeout, $routeParams, $location, $rootScope, matrixService, mPresence, eventHandlerService, mFileUpload, matrixPhoneService, MatrixCall) { 'use strict'; var MESSAGES_PER_PAGINATION = 30; var THUMBNAIL_SIZE = 320; @@ -982,4 +982,11 @@ angular.module('RoomController', ['ngSanitize', 'matrixFilter', 'mFileInput']) } }; + $scope.openJson = function(content) { + console.log("Displaying modal dialog for " + JSON.stringify(content)); + var modalInstance = $modal.open({ + template: "
" + angular.toJson(content, true) + "
" + }); + }; + }]); diff --git a/webclient/room/room.html b/webclient/room/room.html index ce2c581903..e753b037fe 100644 --- a/webclient/room/room.html +++ b/webclient/room/room.html @@ -84,10 +84,10 @@
- + {{ members[msg.state_key].displayname || msg.state_key }} joined - + {{ members[msg.state_key].displayname || msg.state_key }} left @@ -101,7 +101,7 @@ + 'ban' === msg.content.membership && msg.changedKey === 'membership'" ng-click="openJson(msg)"> {{ members[msg.user_id].displayname || msg.user_id }} {{ {"invite": "invited", "ban": "banned"}[msg.content.membership] }} {{ members[msg.state_key].displayname || msg.state_key }} @@ -109,23 +109,25 @@ : {{ msg.content.reason }} - + {{ msg.user_id }} changed their display name from {{ msg.prev_content.displayname }} to {{ msg.content.displayname }} + ng-bind-html="'* ' + (members[msg.user_id].displayname || msg.user_id) + ' ' + msg.content.body | linky:'_blank'" + ng-click="openJson(msg)"/> - Outgoing Call{{ isWebRTCSupported ? '' : ' (But your browser does not support VoIP)' }} - Incoming Call{{ isWebRTCSupported ? '' : ' (But your browser does not support VoIP)' }} + Outgoing Call{{ isWebRTCSupported ? '' : ' (But your browser does not support VoIP)' }} + Incoming Call{{ isWebRTCSupported ? '' : ' (But your browser does not support VoIP)' }}
@@ -137,11 +139,11 @@
- + {{ members[msg.user_id].displayname || msg.user_id }} changed the topic to: {{ msg.content.topic }} - + {{ members[msg.user_id].displayname || msg.user_id }} changed the room name to: {{ msg.content.name }} -- cgit 1.5.1 From 70137409ed13da80fe1722f1bd0638936a14bff1 Mon Sep 17 00:00:00 2001 From: Kegan Dougal Date: Wed, 29 Oct 2014 15:02:30 +0000 Subject: SYWEB-98: Add a 'Redact' button to the event info modal dialog. I think this is better than overriding the right-click contextual menu. Currently clicking this button does nothing. --- webclient/room/room-controller.js | 21 ++++++++++++++++++--- webclient/room/room.html | 13 +++++++++++++ 2 files changed, 31 insertions(+), 3 deletions(-) (limited to 'webclient/room/room.html') diff --git a/webclient/room/room-controller.js b/webclient/room/room-controller.js index 31aed71d7f..c4014b2fe0 100644 --- a/webclient/room/room-controller.js +++ b/webclient/room/room-controller.js @@ -985,10 +985,25 @@ angular.module('RoomController', ['ngSanitize', 'matrixFilter', 'mFileInput']) }; $scope.openJson = function(content) { - console.log("Displaying modal dialog for " + JSON.stringify(content)); + $scope.event_selected = content; + // scope this so the template can check power levels and enable/disable + // buttons + $scope.pow = matrixService.getUserPowerLevel; + var modalInstance = $modal.open({ - template: "
" + angular.toJson(content, true) + "
" + templateUrl: 'eventInfoTemplate.html', + controller: 'EventInfoController', + scope: $scope }); }; -}]); +}]) +.controller('EventInfoController', function($scope, $modalInstance) { + console.log("Displaying modal dialog for >>>> " + JSON.stringify($scope.event_selected)); + $scope.redact = function() { + console.log("User level = "+$scope.pow($scope.room_id, $scope.state.user_id)+ + " Redact level = "+$scope.events.rooms[$scope.room_id]["m.room.ops_levels"].content.redact_level); + console.log("Redact event >> " + JSON.stringify($scope.event_selected)); + $modalInstance.dismiss(); + }; +}); diff --git a/webclient/room/room.html b/webclient/room/room.html index e753b037fe..5293a579d3 100644 --- a/webclient/room/room.html +++ b/webclient/room/room.html @@ -1,5 +1,18 @@
+ +
[matrix]
-- cgit 1.5.1 From 6d4617960d0223c13f8145b31df86e1f1f8d43ec Mon Sep 17 00:00:00 2001 From: Kegan Dougal Date: Wed, 29 Oct 2014 15:31:50 +0000 Subject: SYWEB-98: Add redactEvent matrix API call. --- webclient/components/matrix/matrix-service.js | 8 ++++++++ webclient/room/room-controller.js | 22 +++++++++++++++++++++- webclient/room/room.html | 2 +- 3 files changed, 30 insertions(+), 2 deletions(-) (limited to 'webclient/room/room.html') diff --git a/webclient/components/matrix/matrix-service.js b/webclient/components/matrix/matrix-service.js index a4f0568bce..1840cf46c0 100644 --- a/webclient/components/matrix/matrix-service.js +++ b/webclient/components/matrix/matrix-service.js @@ -438,6 +438,14 @@ angular.module('matrixService', []) return this.sendMessage(room_id, msg_id, content); }, + redactEvent: function(room_id, event_id) { + var path = "/rooms/$room_id/redact/$event_id"; + path = path.replace("$room_id", room_id); + path = path.replace("$event_id", event_id); + var content = {}; + return doRequest("POST", path, undefined, content); + }, + // get a snapshot of the members in a room. getMemberList: function(room_id) { // Like the cmd client, escape room ids diff --git a/webclient/room/room-controller.js b/webclient/room/room-controller.js index c4014b2fe0..841b5cccdd 100644 --- a/webclient/room/room-controller.js +++ b/webclient/room/room-controller.js @@ -995,6 +995,26 @@ angular.module('RoomController', ['ngSanitize', 'matrixFilter', 'mFileInput']) controller: 'EventInfoController', scope: $scope }); + + modalInstance.result.then(function(action) { + if (action === "redact") { + var eventId = $scope.event_selected.event_id; + console.log("Redacting event ID " + eventId); + matrixService.redactEvent( + $scope.event_selected.room_id, + eventId + ).then(function(response) { + console.log("Redaction = " + JSON.stringify(response)); + }, function(error) { + console.error("Failed to redact event: "+JSON.stringify(error)); + if (error.data.error) { + $scope.feedback = error.data.error; + } + }); + } + }, function() { + // any dismiss code + }); }; }]) @@ -1004,6 +1024,6 @@ angular.module('RoomController', ['ngSanitize', 'matrixFilter', 'mFileInput']) console.log("User level = "+$scope.pow($scope.room_id, $scope.state.user_id)+ " Redact level = "+$scope.events.rooms[$scope.room_id]["m.room.ops_levels"].content.redact_level); console.log("Redact event >> " + JSON.stringify($scope.event_selected)); - $modalInstance.dismiss(); + $modalInstance.close("redact"); }; }); diff --git a/webclient/room/room.html b/webclient/room/room.html index 5293a579d3..85ae0eeca4 100644 --- a/webclient/room/room.html +++ b/webclient/room/room.html @@ -6,7 +6,7 @@