From 489bd99803cde976d78c312b0079d8de50f3617c Mon Sep 17 00:00:00 2001 From: Eugen Rochko Date: Tue, 15 Nov 2016 18:38:57 +0100 Subject: Support emojis in display name, bio --- .../javascripts/components/components/display_name.jsx | 13 ++++++------- .../javascripts/components/components/status_content.jsx | 8 ++------ app/assets/javascripts/components/emoji.jsx | 9 +++++++++ .../components/features/account/components/header.jsx | 11 +++++++---- 4 files changed, 24 insertions(+), 17 deletions(-) create mode 100644 app/assets/javascripts/components/emoji.jsx (limited to 'app/assets/javascripts/components') diff --git a/app/assets/javascripts/components/components/display_name.jsx b/app/assets/javascripts/components/components/display_name.jsx index a6e4ed996..053b5290c 100644 --- a/app/assets/javascripts/components/components/display_name.jsx +++ b/app/assets/javascripts/components/components/display_name.jsx @@ -1,5 +1,7 @@ import ImmutablePropTypes from 'react-immutable-proptypes'; import PureRenderMixin from 'react-addons-pure-render-mixin'; +import escapeTextContentForBrowser from 'react/lib/escapeTextContentForBrowser'; +import emojify from '../emoji'; const DisplayName = React.createClass({ @@ -10,15 +12,12 @@ const DisplayName = React.createClass({ mixins: [PureRenderMixin], render () { - let displayName = this.props.account.get('display_name'); - - if (displayName.length === 0) { - displayName = this.props.account.get('username'); - } + const displayName = this.props.account.get('display_name').length === 0 ? this.props.account.get('username') : this.props.account.get('display_name'); + const displayNameHTML = { __html: emojify(escapeTextContentForBrowser(displayName)) }; return ( - - {displayName} @{this.props.account.get('acct')} + + @{this.props.account.get('acct')} ); } diff --git a/app/assets/javascripts/components/components/status_content.jsx b/app/assets/javascripts/components/components/status_content.jsx index 583f4cec6..eeb43a12c 100644 --- a/app/assets/javascripts/components/components/status_content.jsx +++ b/app/assets/javascripts/components/components/status_content.jsx @@ -1,10 +1,6 @@ import ImmutablePropTypes from 'react-immutable-proptypes'; import PureRenderMixin from 'react-addons-pure-render-mixin'; -import emojione from 'emojione'; - -emojione.imageType = 'png'; -emojione.sprites = false; -emojione.imagePathPNG = '/emoji/'; +import emojify from '../emoji'; const StatusContent = React.createClass({ @@ -61,7 +57,7 @@ const StatusContent = React.createClass({ }, render () { - const content = { __html: emojione.unicodeToImage(this.props.status.get('content')) }; + const content = { __html: emojify(this.props.status.get('content')) }; return
; }, diff --git a/app/assets/javascripts/components/emoji.jsx b/app/assets/javascripts/components/emoji.jsx new file mode 100644 index 000000000..a06c75953 --- /dev/null +++ b/app/assets/javascripts/components/emoji.jsx @@ -0,0 +1,9 @@ +import emojione from 'emojione'; + +emojione.imageType = 'png'; +emojione.sprites = false; +emojione.imagePathPNG = '/emoji/'; + +export default function emojify(text) { + return emojione.unicodeToImage(text); +}; diff --git a/app/assets/javascripts/components/features/account/components/header.jsx b/app/assets/javascripts/components/features/account/components/header.jsx index 062f4a0f2..7a086c99a 100644 --- a/app/assets/javascripts/components/features/account/components/header.jsx +++ b/app/assets/javascripts/components/features/account/components/header.jsx @@ -1,5 +1,7 @@ -import PureRenderMixin from 'react-addons-pure-render-mixin'; +import PureRenderMixin from 'react-addons-pure-render-mixin'; import ImmutablePropTypes from 'react-immutable-proptypes'; +import emojify from '../../../emoji'; +import escapeTextContentForBrowser from 'react/lib/escapeTextContentForBrowser'; const Header = React.createClass({ @@ -14,7 +16,7 @@ const Header = React.createClass({ const { account, me } = this.props; let displayName = account.get('display_name'); - let info = ''; + let info = ''; if (displayName.length === 0) { displayName = account.get('username'); @@ -24,7 +26,8 @@ const Header = React.createClass({ info = Follows you } - const content = { __html: account.get('note') }; + const content = { __html: emojify(account.get('note')) }; + const displayNameHTML = { __html: emojify(escapeTextContentForBrowser(displayName)) }; return (
@@ -34,7 +37,7 @@ const Header = React.createClass({
- {displayName} + @{account.get('acct')} -- cgit