summary refs log tree commit diff
diff options
context:
space:
mode:
authorEmmanuel ROHEE <erohee@amdocs.com>2014-08-18 17:40:05 +0200
committerEmmanuel ROHEE <erohee@amdocs.com>2014-08-18 17:40:05 +0200
commit43772d0b15f749e2e4356097560cca3c86e1e4e6 (patch)
treeb2069355d72e6a55c33c52d8cc917adeede5b4b6
parentIf possible, use href with room alias in rooms list (diff)
downloadsynapse-43772d0b15f749e2e4356097560cca3c86e1e4e6.tar.xz
Support urlencoded room aliases in room URL
-rw-r--r--webclient/app.js4
-rw-r--r--webclient/room/room-controller.js42
2 files changed, 29 insertions, 17 deletions
diff --git a/webclient/app.js b/webclient/app.js
index 193c11d461..a3d1505f81 100644
--- a/webclient/app.js
+++ b/webclient/app.js
@@ -33,13 +33,13 @@ matrixWebClient.config(['$routeProvider', '$provide', '$httpProvider',
                 templateUrl: 'login/login.html',
                 controller: 'LoginController'
             }).
-            when('/room/:room_id', {
+            when('/room/:room_id_or_alias', {
                 templateUrl: 'room/room.html',
                 controller: 'RoomController'
             }).
             when('/room/', {    // room URL with room alias in it (ex: http://127.0.0.1:8000/#/room/#public:localhost:8080) will come here.
                                 // The reason is that 2nd hash key breaks routeProvider parameters cutting so that the URL will not match with 
-                                // the previous '/room/:room_id' URL rule
+                                // the previous '/room/:room_id_or_alias' URL rule
                 templateUrl: 'room/room.html',
                 controller: 'RoomController'
             }).
diff --git a/webclient/room/room-controller.js b/webclient/room/room-controller.js
index 999c48f02d..d130a28fd7 100644
--- a/webclient/room/room-controller.js
+++ b/webclient/room/room-controller.js
@@ -109,8 +109,8 @@ angular.module('RoomController', ['ngSanitize'])
    'use strict';
     var MESSAGES_PER_PAGINATION = 30;
 
-    // Room ids. Checked, computed and resolved in onInit
-    $scope.room_id = $routeParams.room_id;
+    // Room ids. Computed and resolved in onInit
+    $scope.room_id = undefined;
     $scope.room_alias = undefined;
 
     $scope.state = {
@@ -347,27 +347,39 @@ angular.module('RoomController', ['ngSanitize'])
         console.log("onInit");
         
         // Does the room ID provided in the URL?
-        if ($scope.room_id) {
-            // Yes, we can start right now
+        var room_id_or_alias;
+        if ($routeParams.room_id_or_alias) {
+            room_id_or_alias = decodeURIComponent($routeParams.room_id_or_alias);
+        }
+
+        if (room_id_or_alias && '!' === room_id_or_alias[0]) {
+            // Yes. We can start right now
+            $scope.room_id = room_id_or_alias;
             $scope.room_alias = matrixService.getRoomIdToAliasMapping($scope.room_id);
             onInit2();
         }
         else {
-            // No, the URL contains the room alias. Get this alias.
-            // ie: extract #public:localhost:8080 from http://127.0.0.1:8000/#/room/#public:localhost:8080
-            if (3 === location.hash.split("#").length) {
-                $scope.room_alias = "#" + location.hash.split("#")[2];
+            // No. The URL contains the room alias. Get this alias.
+            if (room_id_or_alias) {
+                // The room alias was passed urlencoded, use it as is
+                $scope.room_alias = room_id_or_alias;
             }
-            else {
-                // In case of issue, go to the default page
-                console.log("Error: cannot extract room alias");
-                $location.path("/");
-                return;
+            else  {
+                // Else get the room alias by hand from the URL
+                // ie: extract #public:localhost:8080 from http://127.0.0.1:8000/#/room/#public:localhost:8080
+                if (3 === location.hash.split("#").length) {
+                    $scope.room_alias = "#" + location.hash.split("#")[2];
+                }
+                else {
+                    // In case of issue, go to the default page
+                    console.log("Error: cannot extract room alias");
+                    $location.path("/");
+                    return;
+                }
             }
             
-            console.log("Resolving alias: " + $scope.room_alias);
-
             // Need a room ID required in Matrix API requests
+            console.log("Resolving alias: " + $scope.room_alias);
             matrixService.resolveRoomAlias($scope.room_alias).then(function(response) {
                 $scope.room_id = response.data.room_id;
                 console.log("   -> Room ID: " + $scope.room_id);