93 lines
		
	
	
		
			4.3 KiB
		
	
	
	
		
			HTML
		
	
	
			
		
		
	
	
			93 lines
		
	
	
		
			4.3 KiB
		
	
	
	
		
			HTML
		
	
	
| <div ng-controller="RoomController" data-ng-init="onInit()" class="room">
 | |
| 
 | |
|     <div class="page">
 | |
|     <div class="wrapper">
 | |
| 
 | |
|     <div class="roomName">
 | |
|         {{ room_alias || room_id }}
 | |
|     </div>
 | |
|     
 | |
|     <div class="usersTableWrapper">
 | |
|         <table class="usersTable">
 | |
|             <tr ng-repeat="(name, info) in members">
 | |
|                 <td class="userAvatar">
 | |
|                     <img class="userAvatarImage" ng-src="{{info.avatar_url || 'img/default-profile.jpg'}}" width="80" height="80"/>
 | |
|                     <img class="userAvatarGradient" src="img/gradient.png" width="80" height="24"/>
 | |
|                     <!-- FIXME: does allowing <wbr/> to be unescaped introduce HTML injections from user IDs and display names? -->
 | |
|                     <div class="userName" ng-bind-html="info.displayname || (name.substr(0, name.indexOf(':')) + '<wbr/>' + name.substr(name.indexOf(':'))) | to_trusted"></div>
 | |
|                 </td>
 | |
|                 <td class="userPresence" ng-class="info.presenceState === 'online' ? 'online' : (info.presenceState === 'unavailable' ? 'unavailable' : '')" />
 | |
|         </table>
 | |
|     </div>
 | |
|     
 | |
|     <div class="messageTableWrapper">
 | |
|         <table class="messageTable">
 | |
|             <tr ng-repeat="msg in messages" ng-class="msg.user_id === state.user_id ? 'mine' : ''">
 | |
|                 <td class="leftBlock">
 | |
|                     <div class="sender" ng-hide="messages[$index - 1].user_id === msg.user_id">{{ members[msg.user_id].displayname || msg.user_id }}</div>
 | |
|                     <div class="timestamp">{{ msg.content.hsob_ts | date:'MMM d HH:mm:ss' }}</div>
 | |
|                 </td>
 | |
|                 <td class="avatar">
 | |
|                     <img ng-src="{{ members[msg.user_id].avatar_url || 'img/default-profile.jpg' }}" width="32" height="32"
 | |
|                          ng-hide="messages[$index - 1].user_id === msg.user_id || msg.user_id === state.user_id"/>
 | |
|                 </td>
 | |
|                 <td ng-class="!msg.content.membership_target ? (msg.content.msgtype === 'm.emote' ? 'emote text' : 'text') : ''">
 | |
|                     <div class="bubble">
 | |
|                         {{ msg.content.msgtype === "m.emote" ? ("* " + (members[msg.user_id].displayname || msg.user_id) + " " + msg.content.body) : "" }}
 | |
|                         {{ msg.content.msgtype === "m.text" ? msg.content.body : "" }}
 | |
|                         <img class="image" ng-hide='msg.content.msgtype !== "m.image"' src="{{ msg.content.url }}" alt="{{ msg.content.body }}"/>
 | |
|                     </div>
 | |
|                 </td>
 | |
|                 <td class="rightBlock">
 | |
|                     <img ng-src="{{ members[msg.user_id].avatar_url || 'img/default-profile.jpg' }}" width="32" height="32"
 | |
|                          ng-hide="messages[$index - 1].user_id === msg.user_id || msg.user_id !== state.user_id"/>
 | |
|                 </td>
 | |
|             </tr>
 | |
|         </table>
 | |
|     </div>
 | |
|     
 | |
|     </div>
 | |
|     </div>
 | |
| 
 | |
|     <div class="controlPanel">
 | |
|         <div class="controls">
 | |
|             <table class="inputBarTable">
 | |
|                 <tr>
 | |
|                     <td width="1">
 | |
|                         {{ state.user_id }} 
 | |
|                     </td>
 | |
|                     <td width="*" style="min-width: 100px">
 | |
|                         <input class="mainInput" ng-model="textInput" ng-enter="send()" ng-focus="true"/>
 | |
|                     </td>
 | |
|                     <td width="1">
 | |
|                         <button ng-click="send()">Send</button>
 | |
|                     </td>
 | |
|                     <td width="1">
 | |
|                         {{ feedback }}
 | |
|                     </td>
 | |
|                 </tr>
 | |
|                 <tr>
 | |
|                     <td>
 | |
|                     </td>
 | |
|                     <td>
 | |
|                         <input class="mainInput" ng-model="imageURLToSend" ng-enter="sendImage()" placeholder="Image URL"/>
 | |
|                     </td>
 | |
|                     <td  width="100px">
 | |
|                         <button ng-click="sendImage(imageURLToSend)">Send Image</button>
 | |
|                     </td>
 | |
|                     <td>
 | |
|                     </td>
 | |
|                 </tr>
 | |
|             </table>
 | |
| 
 | |
|             <span>
 | |
|                Invite a user: 
 | |
|                     <input ng-model="userIDToInvite" size="32" type="text" placeholder="User ID (ex:@user:homeserver)"/>     
 | |
|                     <button ng-click="inviteUser(userIDToInvite)">Invite</button>
 | |
|             </span>
 | |
|             <button ng-click="leaveRoom()">Leave</button>
 | |
|         </div>
 | |
|     </div>
 | |
| 
 | |
|  </div>
 |