Skip to content
This repository was archived by the owner on Sep 11, 2024. It is now read-only.

Commit 020f1f4

Browse files
committed
feat: emojify ALL THE THINGS!
1 parent 9c0dc74 commit 020f1f4

File tree

6 files changed

+29
-13
lines changed

6 files changed

+29
-13
lines changed

src/HtmlUtils.js

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -233,5 +233,11 @@ module.exports = {
233233
}
234234
},
235235

236-
}
236+
emojifyText: function(text) {
237+
emojione.imageType = 'svg';
238+
return {
239+
__html: emojione.unicodeToImage(escape(text)),
240+
};
241+
},
242+
};
237243

src/components/views/avatars/BaseAvatar.js

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@ limitations under the License.
1818

1919
var React = require('react');
2020
var AvatarLogic = require("../../../Avatar");
21+
import {emojifyText} from '../../../HtmlUtils';
2122

2223
module.exports = React.createClass({
2324
displayName: 'BaseAvatar',
@@ -137,14 +138,14 @@ module.exports = React.createClass({
137138
var imageUrl = this.state.imageUrls[this.state.urlsIndex];
138139

139140
if (imageUrl === this.state.defaultImageUrl) {
140-
var initialLetter = this._getInitialLetter(this.props.name);
141+
var initialLetter = emojifyText(this._getInitialLetter(this.props.name));
141142
return (
142143
<span className="mx_BaseAvatar" {...this.props}>
143144
<span className="mx_BaseAvatar_initial" aria-hidden="true"
144145
style={{ fontSize: (this.props.width * 0.65) + "px",
145146
width: this.props.width + "px",
146-
lineHeight: this.props.height + "px" }}>
147-
{ initialLetter }
147+
lineHeight: this.props.height + "px" }}
148+
dangerouslySetInnerHTML={initialLetter}>
148149
</span>
149150
<img className="mx_BaseAvatar_image" src={imageUrl}
150151
alt="" title={this.props.title} onError={this.onError}

src/components/views/messages/TextualEvent.js

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@ limitations under the License.
1919
var React = require('react');
2020

2121
var TextForEvent = require('../../../TextForEvent');
22+
import {emojifyText} from '../../../HtmlUtils';
2223

2324
module.exports = React.createClass({
2425
displayName: 'TextualEvent',
@@ -31,11 +32,11 @@ module.exports = React.createClass({
3132

3233
render: function() {
3334
var text = TextForEvent.textForEvent(this.props.mxEvent);
34-
if (text == null || text.length == 0) return null;
35+
if (text == null || text.length === 0) return null;
36+
let textHTML = emojifyText(TextForEvent.textForEvent(this.props.mxEvent));
3537

3638
return (
37-
<div className="mx_TextualEvent">
38-
{TextForEvent.textForEvent(this.props.mxEvent)}
39+
<div className="mx_TextualEvent" dangerouslySetInnerHTML={textHTML}>
3940
</div>
4041
);
4142
},

src/components/views/rooms/EntityTile.js

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@ var React = require('react');
2020

2121
var MatrixClientPeg = require('../../../MatrixClientPeg');
2222
var sdk = require('../../../index');
23+
import {emojifyText} from '../../../HtmlUtils';
2324

2425

2526
var PRESENCE_CLASS = {
@@ -82,6 +83,7 @@ module.exports = React.createClass({
8283
var mainClassName = "mx_EntityTile ";
8384
mainClassName += presenceClass + (this.props.className ? (" " + this.props.className) : "");
8485
var nameEl;
86+
let nameHTML = emojifyText(this.props.name);
8587

8688
if (this.state.hover && !this.props.suppressOnHover) {
8789
var activeAgo = this.props.presenceLastActiveAgo ?
@@ -92,7 +94,7 @@ module.exports = React.createClass({
9294
nameEl = (
9395
<div className="mx_EntityTile_details">
9496
<img className="mx_EntityTile_chevron" src="img/member_chevron.png" width="8" height="12"/>
95-
<div className="mx_EntityTile_name_hover">{ this.props.name }</div>
97+
<div className="mx_EntityTile_name_hover" dangerouslySetInnerHTML={nameHTML}></div>
9698
<PresenceLabel activeAgo={ activeAgo }
9799
currentlyActive={this.props.presenceCurrentlyActive}
98100
presenceState={this.props.presenceState} />
@@ -101,8 +103,7 @@ module.exports = React.createClass({
101103
}
102104
else {
103105
nameEl = (
104-
<div className="mx_EntityTile_name">
105-
{ this.props.name }
106+
<div className="mx_EntityTile_name" dangerouslySetInnerHTML={nameHTML}>
106107
</div>
107108
);
108109
}

src/components/views/rooms/RoomHeader.js

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,7 @@ var Modal = require("../../../Modal");
2424
var linkify = require('linkifyjs');
2525
var linkifyElement = require('linkifyjs/element');
2626
var linkifyMatrix = require('../../../linkify-matrix');
27+
import {emojifyText} from '../../../HtmlUtils';
2728

2829
linkifyMatrix(linkify);
2930

@@ -211,9 +212,11 @@ module.exports = React.createClass({
211212
roomName = this.props.room.name;
212213
}
213214

215+
let roomNameHTML = emojifyText(roomName);
216+
214217
name =
215218
<div className="mx_RoomHeader_name" onClick={this.props.onSettingsClick}>
216-
<div className={ "mx_RoomHeader_nametext " + (settingsHint ? "mx_RoomHeader_settingsHint" : "") } title={ roomName }>{ roomName }</div>
219+
<div className={ "mx_RoomHeader_nametext " + (settingsHint ? "mx_RoomHeader_settingsHint" : "") } title={ roomName } dangerouslySetInnerHTML={roomNameHTML}></div>
217220
{ searchStatus }
218221
<div className="mx_RoomHeader_settingsButton" title="Settings">
219222
<TintableSvg src="img/settings.svg" width="12" height="12"/>

src/components/views/rooms/RoomTile.js

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@ var classNames = require('classnames');
2121
var dis = require("../../../dispatcher");
2222
var MatrixClientPeg = require('../../../MatrixClientPeg');
2323
var sdk = require('../../../index');
24+
import {emojifyText} from '../../../HtmlUtils';
2425

2526
module.exports = React.createClass({
2627
displayName: 'RoomTile',
@@ -104,10 +105,13 @@ module.exports = React.createClass({
104105
var label;
105106
if (!this.props.collapsed) {
106107
var className = 'mx_RoomTile_name' + (this.props.isInvite ? ' mx_RoomTile_invite' : '');
108+
let nameHTML = emojifyText(name);
107109
if (this.props.selected) {
108-
name = <span>{ name }</span>;
110+
name = <span dangerouslySetInnerHTML={nameHTML}></span>;
111+
label = <div className={ className }>{ name }</div>;
112+
} else {
113+
label = <div className={ className } dangerouslySetInnerHTML={nameHTML}></div>;
109114
}
110-
label = <div className={ className }>{ name }</div>;
111115
}
112116
else if (this.state.hover) {
113117
var RoomTooltip = sdk.getComponent("rooms.RoomTooltip");

0 commit comments

Comments
 (0)