summary refs log tree commit diff
path: root/syweb/webclient/app.js
diff options
context:
space:
mode:
authorMark Haines <mark.haines@matrix.org>2014-11-04 15:57:23 +0000
committerMark Haines <mark.haines@matrix.org>2014-11-04 15:57:23 +0000
commit89ba802b23bf1fd22afbc5e9a4b3b732264e3c18 (patch)
tree34b7803cf8dfb570165c1b1c6f674dc5ca4476c7 /syweb/webclient/app.js
parentMerge pull request #11 from matrix-org/webclient-room-data-restructure (diff)
downloadsynapse-89ba802b23bf1fd22afbc5e9a4b3b732264e3c18.tar.xz
Move webclient to a python module so that it can be installed
Diffstat (limited to 'syweb/webclient/app.js')
-rw-r--r--syweb/webclient/app.js114
1 files changed, 114 insertions, 0 deletions
diff --git a/syweb/webclient/app.js b/syweb/webclient/app.js
new file mode 100644
index 0000000000..17b2bb6e8f
--- /dev/null
+++ b/syweb/webclient/app.js
@@ -0,0 +1,114 @@
+/*
+Copyright 2014 OpenMarket Ltd
+
+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.
+*/
+
+var matrixWebClient = angular.module('matrixWebClient', [
+    'ngRoute',
+    'ngAnimate',
+    'MatrixWebClientController',
+    'LoginController',
+    'RegisterController',
+    'RoomController',
+    'HomeController',
+    'RecentsController',
+    'SettingsController',
+    'UserController',
+    'matrixService',
+    'matrixPhoneService',
+    'MatrixCall',
+    'eventStreamService',
+    'eventHandlerService',
+    'notificationService',
+    'modelService',
+    'infinite-scroll',
+    'ui.bootstrap',
+    'monospaced.elastic'
+]);
+
+matrixWebClient.config(['$routeProvider', '$provide', '$httpProvider',
+    function($routeProvider, $provide, $httpProvider) {
+        $routeProvider.
+            when('/login', {
+                templateUrl: 'login/login.html'
+            }).
+            when('/register', {
+                templateUrl: 'login/register.html'
+            }).
+            when('/room/:room_id_or_alias', {
+                templateUrl: 'room/room.html'
+            }).
+            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_or_alias' URL rule
+                templateUrl: 'room/room.html'
+            }).
+            when('/', {
+                templateUrl: 'home/home.html'
+            }).
+            when('/settings', {
+                templateUrl: 'settings/settings.html'
+            }).
+            when('/user/:user_matrix_id', {
+                templateUrl: 'user/user.html'
+            }).
+            otherwise({
+                redirectTo: '/'
+            });
+            
+        $provide.factory('AccessTokenInterceptor', ['$q', '$rootScope', 
+            function ($q, $rootScope) {
+            return {
+                responseError: function(rejection) {
+                    if (rejection.status === 403 && "data" in rejection && 
+                            "errcode" in rejection.data && 
+                            rejection.data.errcode === "M_UNKNOWN_TOKEN") {
+                        console.log("Got a 403 with an unknown token. Logging out.")
+                        $rootScope.$broadcast("M_UNKNOWN_TOKEN");
+                    }
+                    return $q.reject(rejection);
+                }
+            };
+        }]);
+        $httpProvider.interceptors.push('AccessTokenInterceptor');
+    }]);
+
+matrixWebClient.run(['$location', '$rootScope', 'matrixService', function($location, $rootScope, matrixService) {
+
+    // Check browser support
+    // Support IE from 9.0. AngularJS needs some tricks to run on IE8 and below
+    var version = parseFloat($.browser.version);
+    if ($.browser.msie && version < 9.0) {
+        $rootScope.unsupportedBrowser = {
+            browser: navigator.userAgent,
+            reason: "Internet Explorer is supported from version 9"
+        };
+    }
+    // The app requires localStorage
+    if(typeof(Storage) === "undefined") {
+        $rootScope.unsupportedBrowser = {
+            browser: navigator.userAgent,
+            reason: "It does not support HTML local storage"
+        };
+    }
+
+    // If user auth details are not in cache, go to the login page
+    if (!matrixService.isUserLoggedIn() &&
+        $location.path() !== "/login" &&
+        $location.path() !== "/register")
+    {
+        $location.path("login");
+    }
+
+}]);