2014-08-12 08:10:52 -06:00
<!doctype html>
< html xmlns:ng = "http://angularjs.org" ng-app = "matrixWebClient" ng-controller = "MatrixWebClientController" >
< head >
< title > [matrix]< / title >
2014-08-23 13:45:00 -06:00
2014-08-12 08:10:52 -06:00
< link rel = "stylesheet" href = "app.css" >
2014-08-30 17:40:42 -06:00
< link rel = "stylesheet" href = "mobile.css" >
2014-10-27 10:28:33 -06:00
< link rel = "stylesheet" href = "bootstrap.css" >
2014-08-30 17:40:42 -06:00
2014-08-12 08:10:52 -06:00
< link rel = "icon" href = "favicon.ico" >
2014-08-15 10:42:02 -06:00
2014-08-23 13:45:00 -06:00
< meta name = "viewport" content = "width=device-width" >
2014-09-05 14:31:47 -06:00
< script type = 'text/javascript' src = 'js/jquery-1.8.3.min.js' > < / script >
2014-09-06 10:47:30 -06:00
< script type = "text/javascript" src = "https://www.google.com/recaptcha/api/js/recaptcha_ajax.js" > < / script >
2014-10-31 10:22:15 -06:00
< script src = "js/angular.js" > < / script >
2014-08-16 15:09:42 -06:00
< script src = "js/angular-route.min.js" > < / script >
2014-08-16 15:21:52 -06:00
< script src = "js/angular-sanitize.min.js" > < / script >
2014-09-10 08:45:09 -06:00
< script src = "js/angular-animate.min.js" > < / script >
2014-10-27 10:28:33 -06:00
< script type = 'text/javascript' src = "js/ui-bootstrap-tpls-0.11.2.js" > < / script >
2014-08-15 10:42:02 -06:00
< script type = 'text/javascript' src = 'js/ng-infinite-scroll-matrix.js' > < / script >
2014-09-11 07:07:44 -06:00
< script type = 'text/javascript' src = 'js/autofill-event.js' > < / script >
2014-10-30 10:21:27 -06:00
< script type = 'text/javascript' src = 'js/elastic.js' > < / script >
2014-08-12 08:10:52 -06:00
< script src = "app.js" > < / script >
2014-09-05 18:36:09 -06:00
< script src = "config.js" > < / script >
2014-08-12 08:10:52 -06:00
< script src = "app-controller.js" > < / script >
2014-08-20 03:28:36 -06:00
< script src = "app-directive.js" > < / script >
< script src = "app-filter.js" > < / script >
2014-08-22 10:08:03 -06:00
< script src = "home/home-controller.js" > < / script >
2014-08-12 08:10:52 -06:00
< script src = "login/login-controller.js" > < / script >
2014-08-30 17:40:42 -06:00
< script src = "login/register-controller.js" > < / script >
2014-08-27 07:09:16 -06:00
< script src = "recents/recents-controller.js" > < / script >
2014-08-27 07:50:07 -06:00
< script src = "recents/recents-filter.js" > < / script >
2014-08-12 08:10:52 -06:00
< script src = "room/room-controller.js" > < / script >
2014-08-20 03:28:36 -06:00
< script src = "room/room-directive.js" > < / script >
2014-08-22 09:11:39 -06:00
< script src = "settings/settings-controller.js" > < / script >
2014-08-18 10:05:42 -06:00
< script src = "user/user-controller.js" > < / script >
2014-08-12 08:10:52 -06:00
< script src = "components/matrix/matrix-service.js" > < / script >
2014-09-04 03:19:28 -06:00
< script src = "components/matrix/matrix-filter.js" > < / script >
2014-08-27 11:57:54 -06:00
< script src = "components/matrix/matrix-call.js" > < / script >
< script src = "components/matrix/matrix-phone-service.js" > < / script >
2014-08-15 03:20:14 -06:00
< script src = "components/matrix/event-stream-service.js" > < / script >
2014-08-15 04:31:13 -06:00
< script src = "components/matrix/event-handler-service.js" > < / script >
2014-10-31 05:20:07 -06:00
< script src = "components/matrix/notification-service.js" > < / script >
2014-10-31 08:26:51 -06:00
< script src = "components/matrix/model-service.js" > < / script >
2014-08-26 08:25:27 -06:00
< script src = "components/matrix/presence-service.js" > < / script >
2014-08-14 03:36:11 -06:00
< script src = "components/fileInput/file-input-directive.js" > < / script >
2014-08-14 10:39:23 -06:00
< script src = "components/fileUpload/file-upload-service.js" > < / script >
2014-08-20 08:18:50 -06:00
< script src = "components/utilities/utilities-service.js" > < / script >
2014-08-12 08:10:52 -06:00
< / head >
< body >
2014-09-18 08:51:30 -06:00
< div id = "videoBackground" ng-class = "videoMode" >
< div id = "videoContainer" ng-class = "videoMode" >
2014-09-19 09:18:15 -06:00
< div id = "videoContainerPadding" > < / div >
2014-09-18 08:51:30 -06:00
< video id = "localVideo" ng-class = "[videoMode, currentCall.state]" ng-show = "currentCall && currentCall.type == 'video' && (currentCall.state == 'connected' || currentCall.state == 'connecting' || currentCall.state == 'invite_sent' || currentCall.state == 'ended')" > < / video >
2014-09-19 09:18:15 -06:00
< video id = "remoteVideo" ng-class = "[videoMode, currentCall.state]" ng-show = "currentCall && currentCall.type == 'video' && (currentCall.state == 'connected' || (currentCall.state == 'ended' && currentCall.didConnect))" > < / video >
2014-09-18 08:51:30 -06:00
< / div >
< / div >
2014-08-12 08:10:52 -06:00
2014-08-30 17:40:42 -06:00
< div id = "header" >
2014-08-12 08:10:52 -06:00
<!-- Do not show buttons on the login page -->
2014-08-30 17:40:42 -06:00
< div id = "headerContent" ng-hide = "'/login' == location || '/register' == location" >
2014-09-05 17:14:02 -06:00
< div id = "callBar" ng-show = "currentCall" >
< img id = "callPeerImage" ng-show = "currentCall.userProfile.avatar_url" ngSrc = "{{ currentCall.userProfile.avatar_url }}" / >
< img class = "callIcon" src = "img/green_phone.png" ng-show = "currentCall.state != 'ended'" / >
< img class = "callIcon" id = "callEndedIcon" src = "img/red_phone.png" ng-show = "currentCall.state == 'ended'" / >
< div id = "callPeerNameAndState" >
< span id = "callPeerName" > {{ currentCall.userProfile.displayname }}< / span >
< br / >
< span id = "callState" >
< span ng-show = "currentCall.state == 'invite_sent'" > Calling...< / span >
2014-09-18 08:51:30 -06:00
< span ng-show = "currentCall.state == 'ringing' && currentCall && currentCall.type == 'video'" > Incoming Video Call< / span >
< span ng-show = "currentCall.state == 'ringing' && currentCall && currentCall.type == 'voice'" > Incoming Voice Call< / span >
2014-09-05 17:14:02 -06:00
< span ng-show = "currentCall.state == 'connecting'" > Call Connecting...< / span >
< span ng-show = "currentCall.state == 'connected'" > Call Connected< / span >
2014-09-25 04:13:32 -06:00
< span ng-show = "currentCall.state == 'ended' && currentCall.hangupReason == 'ice_failed'" > Media Connection Failed{{ haveTurn ? "" : " (VoIP relaying unsupported by Home Server)" }}< / span >
2014-09-22 03:54:14 -06:00
< span ng-show = "currentCall.state == 'ended' && !currentCall.hangupReason && !currentCall.didConnect && currentCall.direction == 'outbound' && currentCall.hangupParty == 'remote'" > Call Rejected< / span >
< span ng-show = "currentCall.state == 'ended' && !currentCall.hangupReason && !currentCall.didConnect && currentCall.direction == 'outbound' && currentCall.hangupParty == 'local'" > Call Canceled< / span >
< span ng-show = "currentCall.state == 'ended' && currentCall.hangupReason == 'invite_timeout' && !currentCall.didConnect && currentCall.direction == 'outbound' && currentCall.hangupParty == 'local'" > User Not Responding< / span >
< span ng-show = "currentCall.state == 'ended' && !currentCall.hangupReason && currentCall.didConnect && currentCall.direction == 'outbound'" > Call Ended< / span >
< span ng-show = "currentCall.state == 'ended' && !currentCall.hangupReason && !currentCall.didConnect && currentCall.direction == 'inbound'" > Call Canceled< / span >
< span ng-show = "currentCall.state == 'ended' && !currentCall.hangupReason && currentCall.didConnect && currentCall.direction == 'inbound'" > Call Ended< / span >
2014-09-05 17:14:02 -06:00
< span ng-show = "currentCall.state == 'wait_local_media'" > Waiting for media permission...< / span >
< / span >
2014-09-01 10:15:26 -06:00
< / div >
2014-09-05 17:14:02 -06:00
< span ng-show = "currentCall.state == 'ringing'" >
2014-11-06 09:48:01 -07:00
< button ng-click = "answerCall()" ng-disabled = "!isWebRTCSupported()" title = "{{isWebRTCSupported() ? '' : 'Your browser does not support VoIP' }}" > Answer {{ currentCall.type }} call< / button >
2014-09-05 17:14:02 -06:00
< button ng-click = "hangupCall()" > Reject< / button >
< / span >
2014-09-01 10:15:26 -06:00
< button ng-click = "hangupCall()" ng-show = "currentCall && currentCall.state != 'ringing' && currentCall.state != 'ended' && currentCall.state != 'fledgling'" > Hang up< / button >
2014-09-08 09:10:36 -06:00
< audio id = "ringAudio" loop >
< source src = "media/ring.ogg" type = "audio/ogg" / >
< source src = "media/ring.mp3" type = "audio/mpeg" / >
< / audio >
< audio id = "ringbackAudio" loop >
< source src = "media/ringback.ogg" type = "audio/ogg" / >
< source src = "media/ringback.mp3" type = "audio/mpeg" / >
< / audio >
< audio id = "callendAudio" >
< source src = "media/callend.ogg" type = "audio/ogg" / >
< source src = "media/callend.mp3" type = "audio/mpeg" / >
< / audio >
< audio id = "busyAudio" >
< source src = "media/busy.ogg" type = "audio/ogg" / >
< source src = "media/busy.mp3" type = "audio/mpeg" / >
< / audio >
2014-09-01 10:15:26 -06:00
< / div >
2014-09-17 09:26:35 -06:00
2014-08-30 17:40:42 -06:00
< a href id = "headerUserId" ng-click = 'goToUserPage(user_id)' > {{ user_id }}< / a >
2014-08-29 17:44:56 -06:00
< button ng-click = 'goToPage("/")' > Home< / button >
2014-08-27 02:25:27 -06:00
< button ng-click = 'goToPage("settings")' > Settings< / button >
2014-08-12 08:10:52 -06:00
< button ng-click = "logout()" > Log out< / button >
< / div >
2014-08-30 17:40:42 -06:00
< / div >
2014-08-12 08:10:52 -06:00
2014-09-19 07:18:30 -06:00
< div class = "page" ng-hide = "unsupportedBrowser" ng-view > < / div >
2014-08-12 08:10:52 -06:00
2014-09-19 07:18:30 -06:00
< div class = "page" ng-show = "unsupportedBrowser" >
< div id = "unsupportedBrowser" ng-show = "unsupportedBrowser" >
Sorry, your browser is not supported. < br / >
Reason: {{ unsupportedBrowser.reason }}
< br / > < br / >
Your browser: < br / >
{{ unsupportedBrowser.browser }}
< / div >
< / div >
< div id = "footer" ng-hide = "location.indexOf('/room') === 0" >
2014-08-30 17:40:42 -06:00
< div id = "footerContent" >
2014-09-01 09:22:57 -06:00
© 2014 Matrix.org
2014-08-30 17:40:42 -06:00
< / div >
< / div >
2014-08-12 08:10:52 -06:00
< / body >
< / html >