diff options
-rw-r--r-- | webclient/app.js | 1 | ||||
-rw-r--r-- | webclient/home/home-controller.js | 68 | ||||
-rw-r--r-- | webclient/home/home.html | 54 | ||||
-rw-r--r-- | webclient/index.html | 1 | ||||
-rw-r--r-- | webclient/recents/recents-controller.js | 66 | ||||
-rw-r--r-- | webclient/recents/recents.html | 53 |
6 files changed, 126 insertions, 117 deletions
diff --git a/webclient/app.js b/webclient/app.js index 6cd50c5e54..1d5503ebc0 100644 --- a/webclient/app.js +++ b/webclient/app.js @@ -20,6 +20,7 @@ var matrixWebClient = angular.module('matrixWebClient', [ 'LoginController', 'RoomController', 'HomeController', + 'RecentsController', 'SettingsController', 'UserController', 'matrixService', diff --git a/webclient/home/home-controller.js b/webclient/home/home-controller.js index f882801e76..e8e91eede7 100644 --- a/webclient/home/home-controller.js +++ b/webclient/home/home-controller.js @@ -16,12 +16,11 @@ limitations under the License. 'use strict'; -angular.module('HomeController', ['matrixService', 'eventHandlerService']) +angular.module('HomeController', ['matrixService', 'eventHandlerService', 'RecentsController']) .controller('HomeController', ['$scope', '$location', 'matrixService', 'eventHandlerService', 'eventStreamService', function($scope, $location, matrixService, eventHandlerService, eventStreamService) { $scope.config = matrixService.config(); - $scope.rooms = {}; $scope.public_rooms = []; $scope.newRoomId = ""; $scope.feedback = ""; @@ -32,77 +31,18 @@ angular.module('HomeController', ['matrixService', 'eventHandlerService']) }; $scope.goToRoom = { - room_id: "", + room_id: "" }; $scope.joinAlias = { - room_alias: "", - }; - - $scope.$on(eventHandlerService.MEMBER_EVENT, function(ngEvent, event, isLive) { - var config = matrixService.config(); - if (event.state_key === config.user_id && event.content.membership === "invite") { - console.log("Invited to room " + event.room_id); - // FIXME push membership to top level key to match /im/sync - event.membership = event.content.membership; - // FIXME bodge a nicer name than the room ID for this invite. - event.room_display_name = event.user_id + "'s room"; - $scope.rooms[event.room_id] = event; - } - }); - - var assignRoomAliases = function(data) { - for (var i=0; i<data.length; i++) { - var alias = matrixService.getRoomIdToAliasMapping(data[i].room_id); - if (alias) { - // use the existing alias from storage - data[i].room_alias = alias; - data[i].room_display_name = alias; - } - else if (data[i].aliases && data[i].aliases[0]) { - // save the mapping - // TODO: select the smarter alias from the array - matrixService.createRoomIdToAliasMapping(data[i].room_id, data[i].aliases[0]); - data[i].room_display_name = data[i].aliases[0]; - } - else if (data[i].membership == "invite" && "inviter" in data[i]) { - data[i].room_display_name = data[i].inviter + "'s room" - } - else { - // last resort use the room id - data[i].room_display_name = data[i].room_id; - } - } - return data; + room_alias: "" }; var refresh = function() { - // List all rooms joined or been invited to - matrixService.rooms(1, false).then( - function(response) { - var data = assignRoomAliases(response.data.rooms); - $scope.feedback = "Success"; - for (var i=0; i<data.length; i++) { - $scope.rooms[data[i].room_id] = data[i]; - - // Create a shortcut for the last message of this room - if (data[i].messages && data[i].messages.chunk && data[i].messages.chunk[0]) { - $scope.rooms[data[i].room_id].lastMsg = data[i].messages.chunk[0]; - } - } - - var presence = response.data.presence; - for (var i = 0; i < presence.length; ++i) { - eventHandlerService.handleEvent(presence[i], false); - } - }, - function(error) { - $scope.feedback = "Failure: " + error.data; - }); matrixService.publicRooms().then( function(response) { - $scope.public_rooms = assignRoomAliases(response.data.chunk); + $scope.public_rooms = matrixService.assignRoomAliases(response.data.chunk); } ); diff --git a/webclient/home/home.html b/webclient/home/home.html index 49eb56a602..d38b843d83 100644 --- a/webclient/home/home.html +++ b/webclient/home/home.html @@ -24,59 +24,7 @@ </div> <h3>Recents</h3> - - <div class="recentsTableWrapper"> - <table class="recentsTable"> - <tbody ng-repeat="(rm_id, room) in rooms" ng-click="goToPage('room/' + (room.room_alias ? room.room_alias : rm_id) )" class ="recentsRoom" > - <tr> - <td class="recentsRoomName"> - {{ room.room_display_name }} - </td> - <td class="recentsRoomSummaryTS"> - {{ (room.lastMsg.ts) | date:'MMM d HH:mm' }} - </td> - </tr> - - <tr> - <td colspan="2" class="recentsRoomSummary"> - - <div ng-show="room.membership === 'invite'" > - {{ room.inviter }} invited you - </div> - - <div ng-hide="room.membership === 'invite'" ng-switch="room.lastMsg.type" > - <div ng-switch-when="m.room.member"> - {{ room.lastMsg.user_id }} - {{ {"join": "joined", "leave": "left", "invite": "invited"}[room.lastMsg.content.membership] }} - {{ room.lastMsg.content.membership === "invite" ? (room.lastMsg.state_key || '') : '' }} - </div> - - <div ng-switch-when="m.room.message"> - <div ng-switch="room.lastMsg.content.msgtype"> - <div ng-switch-when="m.text"> - {{ room.lastMsg.user_id }} : - <span ng-bind-html="(room.lastMsg.content.body) | linky:'_blank'"> - </span> - </div> - - <div ng-switch-when="m.image"> - {{ room.lastMsg.user_id }} sent an image - </div> - - <div ng-switch-default> - {{ room.lastMsg.content }} - </div> - </div> - </div> - - <div ng-switch-default> - {{ room.lastMsg }} - </div> - </div> - </td> - </tr> - </tbody> - </table> + <div ng-include="'recents/recents.html'"></div> <br/> <h3>Public rooms</h3> diff --git a/webclient/index.html b/webclient/index.html index 86dbb65e1e..f6d3744419 100644 --- a/webclient/index.html +++ b/webclient/index.html @@ -19,6 +19,7 @@ <script src="app-filter.js"></script> <script src="home/home-controller.js"></script> <script src="login/login-controller.js"></script> + <script src="recents/recents-controller.js"></script> <script src="room/room-controller.js"></script> <script src="room/room-directive.js"></script> <script src="settings/settings-controller.js"></script> diff --git a/webclient/recents/recents-controller.js b/webclient/recents/recents-controller.js new file mode 100644 index 0000000000..a9805fc38a --- /dev/null +++ b/webclient/recents/recents-controller.js @@ -0,0 +1,66 @@ +/* + Copyright 2014 matrix.org + + 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'; + +angular.module('RecentsController', ['matrixService', 'eventHandlerService']) +.controller('RecentsController', ['$scope', 'matrixService', 'eventHandlerService', 'eventStreamService', + function($scope, matrixService, eventHandlerService, eventStreamService) { + $scope.rooms = {}; + + $scope.$on(eventHandlerService.MEMBER_EVENT, function(ngEvent, event, isLive) { + var config = matrixService.config(); + if (event.state_key === config.user_id && event.content.membership === "invite") { + console.log("Invited to room " + event.room_id); + // FIXME push membership to top level key to match /im/sync + event.membership = event.content.membership; + // FIXME bodge a nicer name than the room ID for this invite. + event.room_display_name = event.user_id + "'s room"; + $scope.rooms[event.room_id] = event; + } + }); + + var refresh = function() { + // List all rooms joined or been invited to + matrixService.rooms(1, false).then( + function(response) { + var data = matrixService.assignRoomAliases(response.data.rooms); + for (var i=0; i<data.length; i++) { + $scope.rooms[data[i].room_id] = data[i]; + + // Create a shortcut for the last message of this room + if (data[i].messages && data[i].messages.chunk && data[i].messages.chunk[0]) { + $scope.rooms[data[i].room_id].lastMsg = data[i].messages.chunk[0]; + } + } + + var presence = response.data.presence; + for (var i = 0; i < presence.length; ++i) { + eventHandlerService.handleEvent(presence[i], false); + } + }, + function(error) { + $scope.feedback = "Failure: " + error.data; + } + ); + }; + + $scope.onInit = function() { + refresh(); + }; + +}]); + diff --git a/webclient/recents/recents.html b/webclient/recents/recents.html new file mode 100644 index 0000000000..9817d1acee --- /dev/null +++ b/webclient/recents/recents.html @@ -0,0 +1,53 @@ +<div ng-controller="RecentsController" data-ng-init="onInit()"> + <table class="recentsTable"> + <tbody ng-repeat="(rm_id, room) in rooms" ng-click="goToPage('room/' + (room.room_alias ? room.room_alias : rm_id) )" class ="recentsRoom" > + <tr> + <td class="recentsRoomName"> + {{ room.room_display_name }} + </td> + <td class="recentsRoomSummaryTS"> + {{ (room.lastMsg.ts) | date:'MMM d HH:mm' }} + </td> + </tr> + + <tr> + <td colspan="2" class="recentsRoomSummary"> + + <div ng-show="room.membership === 'invite'" > + {{ room.inviter }} invited you + </div> + + <div ng-hide="room.membership === 'invite'" ng-switch="room.lastMsg.type" > + <div ng-switch-when="m.room.member"> + {{ room.lastMsg.user_id }} + {{ {"join": "joined", "leave": "left", "invite": "invited"}[room.lastMsg.content.membership] }} + {{ room.lastMsg.content.membership === "invite" ? (room.lastMsg.state_key || '') : '' }} + </div> + + <div ng-switch-when="m.room.message"> + <div ng-switch="room.lastMsg.content.msgtype"> + <div ng-switch-when="m.text"> + {{ room.lastMsg.user_id }} : + <span ng-bind-html="(room.lastMsg.content.body) | linky:'_blank'"> + </span> + </div> + + <div ng-switch-when="m.image"> + {{ room.lastMsg.user_id }} sent an image + </div> + + <div ng-switch-default> + {{ room.lastMsg.content }} + </div> + </div> + </div> + + <div ng-switch-default> + {{ room.lastMsg }} + </div> + </div> + </td> + </tr> + </tbody> + </table> +</div> |