FEATURE: Add support for inline emoji translation.

This commit is contained in:
Bianca Nenciu 2018-11-26 16:26:59 +02:00 committed by Régis Hanol
parent 0c88052641
commit e9bbdef156
4 changed files with 36 additions and 4 deletions

View File

@ -57,7 +57,7 @@ function imageFor(code, opts) {
}
}
function getEmojiName(content, pos, state) {
function getEmojiName(content, pos, state, inlineEmoji) {
if (content.charCodeAt(pos) !== 58) {
return;
}
@ -65,6 +65,7 @@ function getEmojiName(content, pos, state) {
if (pos > 0) {
let prev = content.charCodeAt(pos - 1);
if (
!inlineEmoji &&
!state.md.utils.isSpace(prev) &&
!state.md.utils.isPunctChar(String.fromCharCode(prev))
) {
@ -173,7 +174,13 @@ function getEmojiTokenByTranslation(content, pos, state) {
}
}
function applyEmoji(content, state, emojiUnicodeReplacer, enableShortcuts) {
function applyEmoji(
content,
state,
emojiUnicodeReplacer,
enableShortcuts,
inlineEmoji
) {
let i;
let result = null;
let contentToken = null;
@ -188,7 +195,7 @@ function applyEmoji(content, state, emojiUnicodeReplacer, enableShortcuts) {
for (i = 0; i < content.length - 1; i++) {
let offset = 0;
let emojiName = getEmojiName(content, i, state);
let emojiName = getEmojiName(content, i, state, inlineEmoji);
let token = null;
if (emojiName) {
@ -235,6 +242,7 @@ export function setup(helper) {
helper.registerOptions((opts, siteSettings, state) => {
opts.features.emoji = !!siteSettings.enable_emoji;
opts.features.emojiShortcuts = !!siteSettings.enable_emoji_shortcuts;
opts.features.inlineEmoji = !!siteSettings.enable_inline_emoji_translation;
opts.emojiSet = siteSettings.emoji_set || "";
opts.customEmoji = state.customEmoji;
});
@ -246,7 +254,8 @@ export function setup(helper) {
c,
s,
md.options.discourse.emojiUnicodeReplacer,
md.options.discourse.features.emojiShortcuts
md.options.discourse.features.emojiShortcuts,
md.options.discourse.features.inlineEmoji
)
)
);

View File

@ -1780,6 +1780,7 @@ en:
enable_emoji_shortcuts: "Common smiley text such as :) :p :( will be converted to emojis"
emoji_set: "How would you like your emoji?"
emoji_autocomplete_min_chars: "Minimum number of characters required to trigger autocomplete emoji popup"
enable_inline_emoji_translation: "Enables translation for inline emojis (without any space or punctuation before)"
approve_post_count: "The amount of posts from a new or basic user that must be approved"
approve_unless_trust_level: "Posts for users below this trust level must be approved"

View File

@ -746,6 +746,14 @@ posting:
default: 0
locale_default:
fr: 1
enable_inline_emoji_translation:
client: true
default: false
locale_default:
zh_CN: true
zh_TW: true
ja: true
ko: true
approve_post_count:
default: 0
approve_unless_trust_level:

View File

@ -1354,6 +1354,20 @@ QUnit.test("emoji", assert => {
);
});
QUnit.test("emoji - enable_inline_emoji_translation", assert => {
assert.cookedOptions(
"test:smile:test",
{ siteSettings: { enable_inline_emoji_translation: false } },
`<p>test:smile:test</p>`
);
assert.cookedOptions(
"test:smile:test",
{ siteSettings: { enable_inline_emoji_translation: true } },
`<p>test<img src="/images/emoji/twitter/smile.png?v=${v}" title=":smile:" class="emoji" alt=":smile:">test</p>`
);
});
QUnit.test("emoji - emojiSet", assert => {
assert.cookedOptions(
":smile:",