commit
96f75842de
5 changed files with 30 additions and 2 deletions
|
@ -82,6 +82,7 @@
|
||||||
"deepcopy": "0.6.3",
|
"deepcopy": "0.6.3",
|
||||||
"download": "5.0.3",
|
"download": "5.0.3",
|
||||||
"elasticsearch": "12.1.3",
|
"elasticsearch": "12.1.3",
|
||||||
|
"emojinize": "1.0.0",
|
||||||
"escape-html": "1.0.3",
|
"escape-html": "1.0.3",
|
||||||
"escape-regexp": "0.0.1",
|
"escape-regexp": "0.0.1",
|
||||||
"event-stream": "3.3.4",
|
"event-stream": "3.3.4",
|
||||||
|
|
14
src/common/text/elements/emoji.js
Normal file
14
src/common/text/elements/emoji.js
Normal file
|
@ -0,0 +1,14 @@
|
||||||
|
/**
|
||||||
|
* Emoji
|
||||||
|
*/
|
||||||
|
|
||||||
|
module.exports = text => {
|
||||||
|
const match = text.match(/^:[a-zA-Z0-9+-_]+:/);
|
||||||
|
if (!match) return null;
|
||||||
|
const emoji = match[0];
|
||||||
|
return {
|
||||||
|
type: 'emoji',
|
||||||
|
content: emoji,
|
||||||
|
emoji: emoji.substr(1, emoji.length - 2)
|
||||||
|
};
|
||||||
|
};
|
|
@ -8,7 +8,8 @@ const elements = [
|
||||||
require('./elements/mention'),
|
require('./elements/mention'),
|
||||||
require('./elements/hashtag'),
|
require('./elements/hashtag'),
|
||||||
require('./elements/code'),
|
require('./elements/code'),
|
||||||
require('./elements/inline-code')
|
require('./elements/inline-code'),
|
||||||
|
require('./elements/emoji')
|
||||||
];
|
];
|
||||||
|
|
||||||
function analyze(source) {
|
function analyze(source) {
|
||||||
|
|
|
@ -1,5 +1,6 @@
|
||||||
const riot = require('riot');
|
const riot = require('riot');
|
||||||
const nyaize = require('nyaize').default;
|
const nyaize = require('nyaize').default;
|
||||||
|
const emojinize = require('emojinize');
|
||||||
const CONFIG = require('./config');
|
const CONFIG = require('./config');
|
||||||
|
|
||||||
const escape = function(text) {
|
const escape = function(text) {
|
||||||
|
@ -35,6 +36,8 @@ module.exports = function(tokens, shouldBreak, shouldEscape) {
|
||||||
return '<pre><code>' + token.html + '</code></pre>';
|
return '<pre><code>' + token.html + '</code></pre>';
|
||||||
case 'inline-code':
|
case 'inline-code':
|
||||||
return '<code>' + token.html + '</code>';
|
return '<code>' + token.html + '</code>';
|
||||||
|
case 'emoji':
|
||||||
|
return emojinize.encode(token.content)
|
||||||
}
|
}
|
||||||
}).join('');
|
}).join('');
|
||||||
|
|
||||||
|
|
11
test/text.ts
11
test/text.ts
|
@ -9,10 +9,12 @@ const syntaxhighlighter = require('../src/common/text/core/syntax-highlighter');
|
||||||
|
|
||||||
describe('Text', () => {
|
describe('Text', () => {
|
||||||
it('is correctly analyzed', () => {
|
it('is correctly analyzed', () => {
|
||||||
const tokens = analyze('@himawari お腹ペコい #yryr');
|
const tokens = analyze('@himawari お腹ペコい :cat: #yryr');
|
||||||
assert.deepEqual([
|
assert.deepEqual([
|
||||||
{ type: 'mention', content: '@himawari', username: 'himawari' },
|
{ type: 'mention', content: '@himawari', username: 'himawari' },
|
||||||
{ type: 'text', content: ' お腹ペコい ' },
|
{ type: 'text', content: ' お腹ペコい ' },
|
||||||
|
{ type: 'emoji', content: ':cat:', emoji: 'cat'},
|
||||||
|
{ type: 'text', content: ' '},
|
||||||
{ type: 'hashtag', content: '#yryr', hashtag: 'yryr' }
|
{ type: 'hashtag', content: '#yryr', hashtag: 'yryr' }
|
||||||
], tokens);
|
], tokens);
|
||||||
});
|
});
|
||||||
|
@ -48,6 +50,13 @@ describe('Text', () => {
|
||||||
], tokens);
|
], tokens);
|
||||||
});
|
});
|
||||||
|
|
||||||
|
it('emoji', () => {
|
||||||
|
const tokens = analyze(':cat:');
|
||||||
|
assert.deepEqual([
|
||||||
|
{ type: 'emoji', content: ':cat:', emoji: 'cat'}
|
||||||
|
], tokens);
|
||||||
|
});
|
||||||
|
|
||||||
it('block code', () => {
|
it('block code', () => {
|
||||||
const tokens = analyze('```\nvar x = "Strawberry Pasta";\n```');
|
const tokens = analyze('```\nvar x = "Strawberry Pasta";\n```');
|
||||||
assert.equal(tokens[0].type, 'code');
|
assert.equal(tokens[0].type, 'code');
|
||||||
|
|
Loading…
Reference in a new issue