diff --git a/src/components/structures/RoomStatusBar.js b/src/components/structures/RoomStatusBar.js index 245117387e..670fbe44da 100644 --- a/src/components/structures/RoomStatusBar.js +++ b/src/components/structures/RoomStatusBar.js @@ -19,7 +19,7 @@ var sdk = require('../../index'); var dis = require("../../dispatcher"); var WhoIsTyping = require("../../WhoIsTyping"); var MatrixClientPeg = require("../../MatrixClientPeg"); -import {emojifyText} from '../../HtmlUtils'; +import EmojiText from '../views/elements/EmojiText'; module.exports = React.createClass({ displayName: 'RoomStatusBar', @@ -260,11 +260,10 @@ module.exports = React.createClass({ } var typingString = this.state.whoisTypingString; - const typingHtml = emojifyText(typingString); if (typingString) { return (
- + {typingString}
); } diff --git a/src/components/views/avatars/BaseAvatar.js b/src/components/views/avatars/BaseAvatar.js index f0a36c6608..ef20c46461 100644 --- a/src/components/views/avatars/BaseAvatar.js +++ b/src/components/views/avatars/BaseAvatar.js @@ -18,7 +18,7 @@ limitations under the License. var React = require('react'); var AvatarLogic = require("../../../Avatar"); -import {emojifyText} from '../../../HtmlUtils'; +import EmojiText from '../../views/elements/EmojiText'; module.exports = React.createClass({ displayName: 'BaseAvatar', @@ -142,15 +142,13 @@ module.exports = React.createClass({ } = this.props; if (imageUrl === this.state.defaultImageUrl) { - var initialLetter = emojifyText(this._getInitialLetter(name)); + const initialLetter = this._getInitialLetter(name); return ( - + lineHeight: height + "px" }}>{initialLetter} diff --git a/src/components/views/elements/EmojiText.js b/src/components/views/elements/EmojiText.js new file mode 100644 index 0000000000..cb6cd2ef5e --- /dev/null +++ b/src/components/views/elements/EmojiText.js @@ -0,0 +1,33 @@ +/* + Copyright 2016 Aviral Dasgupta + + 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. + */ + +import React from 'react'; +import {emojifyText} from '../../../HtmlUtils'; + +export default function EmojiText(props) { + const {element, children, ...restProps} = props; + restProps.dangerouslySetInnerHTML = emojifyText(children); + return React.createElement(element, restProps); +} + +EmojiText.propTypes = { + element: React.PropTypes.string, + children: React.PropTypes.string.isRequired, +}; + +EmojiText.defaultProps = { + element: 'span', +}; diff --git a/src/components/views/messages/SenderProfile.js b/src/components/views/messages/SenderProfile.js index e331e9843c..10957f87a9 100644 --- a/src/components/views/messages/SenderProfile.js +++ b/src/components/views/messages/SenderProfile.js @@ -17,7 +17,7 @@ 'use strict'; import React from 'react'; -import {emojifyText} from '../../../HtmlUtils'; +import EmojiText from '../elements/EmojiText'; export default function SenderProfile(props) { const {mxEvent} = props; @@ -29,10 +29,8 @@ export default function SenderProfile(props) { } return ( - - + {`${name || ''} ${props.aux || ''}`} ); } diff --git a/src/components/views/messages/TextualBody.js b/src/components/views/messages/TextualBody.js index 3c5d173e33..1ed41b025a 100644 --- a/src/components/views/messages/TextualBody.js +++ b/src/components/views/messages/TextualBody.js @@ -23,7 +23,7 @@ var linkify = require('linkifyjs'); var linkifyElement = require('linkifyjs/element'); var linkifyMatrix = require('../../../linkify-matrix'); var sdk = require('../../../index'); -import {emojifyText} from '../../../HtmlUtils'; +import EmojiText from '../../views/elements/EmojiText'; linkifyMatrix(linkify); @@ -202,10 +202,9 @@ module.exports = React.createClass({ switch (content.msgtype) { case "m.emote": const name = mxEvent.sender ? mxEvent.sender.name : mxEvent.getSender(); - const nameHtml = emojifyText(name); return ( - * { body } + * {name} { body } { widgets } ); diff --git a/src/components/views/messages/TextualEvent.js b/src/components/views/messages/TextualEvent.js index 251a44a30a..32870f5dd4 100644 --- a/src/components/views/messages/TextualEvent.js +++ b/src/components/views/messages/TextualEvent.js @@ -19,7 +19,7 @@ limitations under the License. var React = require('react'); var TextForEvent = require('../../../TextForEvent'); -import {emojifyText} from '../../../HtmlUtils'; +import EmojiText from '../elements/EmojiText'; module.exports = React.createClass({ displayName: 'TextualEvent', @@ -33,11 +33,8 @@ module.exports = React.createClass({ render: function() { var text = TextForEvent.textForEvent(this.props.mxEvent); if (text == null || text.length === 0) return null; - let textHTML = emojifyText(TextForEvent.textForEvent(this.props.mxEvent)); - return ( -
-
+ {text} ); }, }); diff --git a/src/components/views/rooms/EntityTile.js b/src/components/views/rooms/EntityTile.js index 8a99b4c565..9e03e18d79 100644 --- a/src/components/views/rooms/EntityTile.js +++ b/src/components/views/rooms/EntityTile.js @@ -20,7 +20,7 @@ var React = require('react'); var MatrixClientPeg = require('../../../MatrixClientPeg'); var sdk = require('../../../index'); -import {emojifyText} from '../../../HtmlUtils'; +import EmojiText from '../elements/EmojiText'; var PRESENCE_CLASS = { @@ -103,7 +103,7 @@ module.exports = React.createClass({ var mainClassName = "mx_EntityTile "; mainClassName += presenceClass + (this.props.className ? (" " + this.props.className) : ""); var nameEl; - let nameHTML = emojifyText(this.props.name); + const {name} = this.props; if (this.state.hover && !this.props.suppressOnHover) { var activeAgo = this.props.presenceLastActiveAgo ? @@ -114,7 +114,7 @@ module.exports = React.createClass({ nameEl = (
-
+ {name} @@ -123,8 +123,7 @@ module.exports = React.createClass({ } else { nameEl = ( -
-
+ {name} ); } diff --git a/src/components/views/rooms/MemberInfo.js b/src/components/views/rooms/MemberInfo.js index c087e7dc71..77a0aae1d9 100644 --- a/src/components/views/rooms/MemberInfo.js +++ b/src/components/views/rooms/MemberInfo.js @@ -32,7 +32,7 @@ var Modal = require("../../../Modal"); var sdk = require('../../../index'); var UserSettingsStore = require('../../../UserSettingsStore'); var createRoom = require('../../../createRoom'); -import {emojifyText} from '../../../HtmlUtils'; +import EmojiText from '../elements/EmojiText'; module.exports = React.createClass({ displayName: 'MemberInfo', @@ -637,7 +637,7 @@ module.exports = React.createClass({
} - let memberNameHTML = emojifyText(this.props.member.name); + const memberName = this.props.member.name; var MemberAvatar = sdk.getComponent('avatars.MemberAvatar'); var PowerSelector = sdk.getComponent('elements.PowerSelector'); @@ -648,7 +648,7 @@ module.exports = React.createClass({ -

+ {memberNameHTML}
diff --git a/src/components/views/rooms/RoomHeader.js b/src/components/views/rooms/RoomHeader.js index 8c1b2aaff8..7c842da97a 100644 --- a/src/components/views/rooms/RoomHeader.js +++ b/src/components/views/rooms/RoomHeader.js @@ -24,7 +24,7 @@ var Modal = require("../../../Modal"); var linkify = require('linkifyjs'); var linkifyElement = require('linkifyjs/element'); var linkifyMatrix = require('../../../linkify-matrix'); -import {emojifyText} from '../../../HtmlUtils'; +import EmojiText from '../elements/EmojiText'; linkifyMatrix(linkify); @@ -212,13 +212,12 @@ module.exports = React.createClass({ roomName = this.props.room.name; } - let roomNameHTML = emojifyText(roomName); name =
-
+ {roomName} { searchStatus } -
+
; } if (can_set_room_topic) { diff --git a/src/components/views/rooms/RoomTile.js b/src/components/views/rooms/RoomTile.js index 111ead05b7..95a5981eb0 100644 --- a/src/components/views/rooms/RoomTile.js +++ b/src/components/views/rooms/RoomTile.js @@ -22,7 +22,7 @@ var dis = require("../../../dispatcher"); var MatrixClientPeg = require('../../../MatrixClientPeg'); var sdk = require('../../../index'); var ContextualMenu = require('../../structures/ContextualMenu'); -import {emojifyText} from '../../../HtmlUtils'; +import EmojiText from '../elements/EmojiText'; module.exports = React.createClass({ displayName: 'RoomTile', @@ -196,13 +196,12 @@ module.exports = React.createClass({ 'mx_RoomTile_badgeShown': this.props.highlight || (notificationCount > 0 && !this.state.areNotifsMuted) || this.state.badgeHover || this.state.menu, }); - let nameHTML = emojifyText(name); if (this.props.selected) { - let nameSelected = ; + let nameSelected = {name}; label =
{ nameSelected }
; } else { - label =
; + label = {name}; } } else if (this.state.hover) {