2016-07-20 11:03:13 +00:00
/ *
Copyright 2016 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 .
* /
2017-07-12 12:58:14 +00:00
import Promise from 'bluebird' ;
2016-07-20 11:03:13 +00:00
var React = require ( 'react' ) ;
var MatrixClientPeg = require ( '../../../MatrixClientPeg' ) ;
var sdk = require ( "../../../index" ) ;
var Modal = require ( "../../../Modal" ) ;
var UserSettingsStore = require ( '../../../UserSettingsStore' ) ;
2017-06-02 09:18:31 +00:00
import { _t , _tJsx } from '../../../languageHandler' ;
2016-07-20 11:03:13 +00:00
module . exports = React . createClass ( {
displayName : 'UrlPreviewSettings' ,
propTypes : {
room : React . PropTypes . object ,
} ,
getInitialState : function ( ) {
var cli = MatrixClientPeg . get ( ) ;
var roomState = this . props . room . currentState ;
var roomPreviewUrls = this . props . room . currentState . getStateEvents ( 'org.matrix.room.preview_urls' , '' ) ;
var userPreviewUrls = this . props . room . getAccountData ( "org.matrix.room.preview_urls" ) ;
return {
globalDisableUrlPreview : ( roomPreviewUrls && roomPreviewUrls . getContent ( ) . disable ) || false ,
userDisableUrlPreview : ( userPreviewUrls && ( userPreviewUrls . getContent ( ) . disable === true ) ) || false ,
userEnableUrlPreview : ( userPreviewUrls && ( userPreviewUrls . getContent ( ) . disable === false ) ) || false ,
} ;
} ,
componentDidMount : function ( ) {
this . originalState = Object . assign ( { } , this . state ) ;
} ,
saveSettings : function ( ) {
var promises = [ ] ;
if ( this . state . globalDisableUrlPreview !== this . originalState . globalDisableUrlPreview ) {
console . log ( "UrlPreviewSettings: Updating room's preview_urls state event" ) ;
promises . push (
MatrixClientPeg . get ( ) . sendStateEvent (
this . props . room . roomId , "org.matrix.room.preview_urls" , {
disable : this . state . globalDisableUrlPreview
} , ""
)
) ;
}
var content = undefined ;
if ( this . state . userDisableUrlPreview !== this . originalState . userDisableUrlPreview ) {
console . log ( "UrlPreviewSettings: Disabling user's per-room preview_urls" ) ;
content = this . state . userDisableUrlPreview ? { disable : true } : { } ;
}
if ( this . state . userEnableUrlPreview !== this . originalState . userEnableUrlPreview ) {
console . log ( "UrlPreviewSettings: Enabling user's per-room preview_urls" ) ;
if ( ! content || content . disable === undefined ) {
content = this . state . userEnableUrlPreview ? { disable : false } : { } ;
}
}
if ( content ) {
promises . push (
MatrixClientPeg . get ( ) . setRoomAccountData (
this . props . room . roomId , "org.matrix.room.preview_urls" , content
)
) ;
}
console . log ( "UrlPreviewSettings: saveSettings: " + JSON . stringify ( promises ) ) ;
return promises ;
} ,
onGlobalDisableUrlPreviewChange : function ( ) {
this . setState ( {
globalDisableUrlPreview : this . refs . globalDisableUrlPreview . checked ? true : false ,
} ) ;
} ,
onUserEnableUrlPreviewChange : function ( ) {
this . setState ( {
userDisableUrlPreview : false ,
userEnableUrlPreview : this . refs . userEnableUrlPreview . checked ? true : false ,
} ) ;
} ,
onUserDisableUrlPreviewChange : function ( ) {
this . setState ( {
userDisableUrlPreview : this . refs . userDisableUrlPreview . checked ? true : false ,
userEnableUrlPreview : false ,
} ) ;
} ,
render : function ( ) {
var self = this ;
var roomState = this . props . room . currentState ;
var cli = MatrixClientPeg . get ( ) ;
var maySetRoomPreviewUrls = roomState . mayClientSendStateEvent ( 'org.matrix.room.preview_urls' , cli ) ;
var disableRoomPreviewUrls ;
if ( maySetRoomPreviewUrls ) {
disableRoomPreviewUrls =
< label >
< input type = "checkbox" ref = "globalDisableUrlPreview"
onChange = { this . onGlobalDisableUrlPreviewChange }
checked = { this . state . globalDisableUrlPreview } / >
2017-05-30 14:09:57 +00:00
{ _t ( "Disable URL previews by default for participants in this room" ) }
2017-01-20 14:22:27 +00:00
< / l a b e l > ;
2016-07-20 11:03:13 +00:00
}
else {
disableRoomPreviewUrls =
< label >
2017-05-30 14:09:57 +00:00
{ _t ( "URL previews are %(globalDisableUrlPreview)s by default for participants in this room." , { globalDisableUrlPreview : this . state . globalDisableUrlPreview ? _t ( "disabled" ) : _t ( "enabled" ) } ) }
2017-01-20 14:22:27 +00:00
< / l a b e l > ;
2016-07-20 11:03:13 +00:00
}
2017-06-02 09:18:31 +00:00
let urlPreviewText = null ;
if ( UserSettingsStore . getUrlPreviewsDisabled ( ) ) {
urlPreviewText = (
_tJsx ( "You have <a>disabled</a> URL previews by default." , /<a>(.*?)<\/a>/ , ( sub ) => < a href = "#/settings" > { sub } < / a > )
) ;
}
else {
urlPreviewText = (
_tJsx ( "You have <a>enabled</a> URL previews by default." , /<a>(.*?)<\/a>/ , ( sub ) => < a href = "#/settings" > { sub } < / a > )
) ;
}
2016-07-20 11:03:13 +00:00
return (
< div className = "mx_RoomSettings_toggles" >
2017-05-30 14:09:57 +00:00
< h3 > { _t ( "URL Previews" ) } < / h 3 >
2016-07-20 11:03:13 +00:00
< label >
2017-06-02 09:18:31 +00:00
{ urlPreviewText }
2016-07-20 11:03:13 +00:00
< / l a b e l >
{ disableRoomPreviewUrls }
< label >
< input type = "checkbox" ref = "userEnableUrlPreview"
onChange = { this . onUserEnableUrlPreviewChange }
checked = { this . state . userEnableUrlPreview } / >
2017-05-30 14:09:57 +00:00
{ _t ( "Enable URL previews for this room (affects only you)" ) }
2016-07-20 11:03:13 +00:00
< / l a b e l >
< label >
< input type = "checkbox" ref = "userDisableUrlPreview"
onChange = { this . onUserDisableUrlPreviewChange }
checked = { this . state . userDisableUrlPreview } / >
2017-05-30 14:09:57 +00:00
{ _t ( "Disable URL previews for this room (affects only you)" ) }
2016-07-20 11:03:13 +00:00
< / l a b e l >
< / d i v >
) ;
}
2017-01-20 14:22:27 +00:00
} ) ;