@@ -19,10 +19,18 @@ limitations under the License.
1919var React = require ( 'react' ) ;
2020
2121var MatrixClientPeg = require ( 'matrix-react-sdk/lib/MatrixClientPeg' ) ;
22+ var ContentRepo = require ( "matrix-js-sdk" ) . ContentRepo ;
2223var Modal = require ( 'matrix-react-sdk/lib/Modal' ) ;
2324var sdk = require ( 'matrix-react-sdk' )
2425var dis = require ( 'matrix-react-sdk/lib/dispatcher' ) ;
2526
27+ var linkify = require ( 'linkifyjs' ) ;
28+ var linkifyString = require ( 'linkifyjs/string' ) ;
29+ var linkifyMatrix = require ( 'matrix-react-sdk/lib/linkify-matrix' ) ;
30+ var sanitizeHtml = require ( 'sanitize-html' ) ;
31+
32+ linkifyMatrix ( linkify ) ;
33+
2634module . exports = React . createClass ( {
2735 displayName : 'RoomDirectory' ,
2836
@@ -64,6 +72,8 @@ module.exports = React.createClass({
6472 } ,
6573
6674 getRows : function ( filter ) {
75+ var BaseAvatar = sdk . getComponent ( 'avatars.BaseAvatar' ) ;
76+
6777 if ( ! this . state . publicRooms ) return [ ] ;
6878
6979 var rooms = this . state . publicRooms . filter ( function ( a ) {
@@ -83,36 +93,44 @@ module.exports = React.createClass({
8393
8494 if ( rooms [ i ] . world_readable ) {
8595 guestRead = (
86- < span > [world readable] </ span >
96+ < div className = "mx_RoomDirectory_perm" > World readable</ div >
8797 ) ;
88- // <img src="img/members.svg"
89- // alt="World Readable" title="World Readable" width="12" height="12" />
9098 }
9199 if ( rooms [ i ] . guest_can_join ) {
92100 guestJoin = (
93- < span > [guests allowed] </ span >
101+ < div className = "mx_RoomDirectory_perm" > Guests can join </ div >
94102 ) ;
95- // <img src="img/leave.svg"
96- // alt="Guests can join" title="Guests can join" width="12" height="12" />
97103 }
98104
99105 perms = null ;
100106 if ( guestRead || guestJoin ) {
101- perms = < div > { guestRead } { guestJoin } </ div > ;
107+ perms = < div className = "mx_RoomDirectory_perms" > { guestRead } { guestJoin } </ div > ;
102108 }
103109
104- // <img src={ MatrixClientPeg.get().getAvatarUrlForRoom(rooms[i].room_id, 40, 40, "crop") } width="40" height="40" alt=""/>
110+ var topic = rooms [ i ] . topic || '' ;
111+ topic = linkifyString ( sanitizeHtml ( topic ) ) ;
112+
105113 rows . unshift (
106- < tbody key = { rooms [ i ] . room_id } >
107- < tr onClick = { self . showRoom . bind ( null , rooms [ i ] . room_id ) } >
108- < td className = "mx_RoomDirectory_name" > { name } </ td >
109- < td > { rooms [ i ] . aliases [ 0 ] } </ td >
110- < td > { rooms [ i ] . num_joined_members } </ td >
111- </ tr >
112- < tr onClick = { self . showRoom . bind ( null , rooms [ i ] . room_id ) } >
113- < td className = "mx_RoomDirectory_topic" colSpan = "3" > { perms } { rooms [ i ] . topic } </ td >
114- </ tr >
115- </ tbody >
114+ < tr key = { rooms [ i ] . room_id } onClick = { self . showRoom . bind ( null , rooms [ i ] . room_id ) } >
115+ < td className = "mx_RoomDirectory_roomAvatar" >
116+ < BaseAvatar width = { 24 } height = { 24 } resizeMethod = 'crop'
117+ name = { name } idName = { name }
118+ url = { ContentRepo . getHttpUriForMxc (
119+ MatrixClientPeg . get ( ) . getHomeserverUrl ( ) ,
120+ rooms [ i ] . avatar_url , 24 , 24 , "crop" ) } />
121+ </ td >
122+ < td className = "mx_RoomDirectory_roomDescription" >
123+ < div className = "mx_RoomDirectory_name" > { name } </ div >
124+ { perms }
125+ < div className = "mx_RoomDirectory_topic"
126+ onClick = { function ( e ) { e . stopPropagation ( ) } }
127+ dangerouslySetInnerHTML = { { __html : topic } } />
128+ < div className = "mx_RoomDirectory_alias" > { rooms [ i ] . aliases [ 0 ] } </ div >
129+ </ td >
130+ < td className = "mx_RoomDirectory_roomMemberCount" >
131+ { rooms [ i ] . num_joined_members }
132+ </ td >
133+ </ tr >
116134 ) ;
117135 }
118136 return rows ;
@@ -139,15 +157,14 @@ module.exports = React.createClass({
139157 var RoomHeader = sdk . getComponent ( 'rooms.RoomHeader' ) ;
140158 return (
141159 < div className = "mx_RoomDirectory" >
142- < RoomHeader simpleHeader = "Public Rooms " />
160+ < RoomHeader simpleHeader = "Directory " />
143161 < div className = "mx_RoomDirectory_list" >
144162 < input ref = "roomAlias" placeholder = "Join a room (e.g. #foo:domain.com)" className = "mx_RoomDirectory_input" size = "64" onKeyUp = { this . onKeyUp } />
145163 < div className = "mx_RoomDirectory_tableWrapper" >
146- < table className = "mx_RoomDirectory_table" >
147- < thead >
148- < tr > < th width = "45%" > Room</ th > < th width = "45%" > Alias</ th > < th width = "10%" > Members</ th > </ tr >
149- </ thead >
150- { this . getRows ( this . state . roomAlias ) }
164+ < table ref = "directory_table" className = "mx_RoomDirectory_table" >
165+ < tbody >
166+ { this . getRows ( this . state . roomAlias ) }
167+ </ tbody >
151168 </ table >
152169 </ div >
153170 </ div >
0 commit comments