絵文字ピッカーの Unicode 12.0 対応など (#5441)

* Twemoji 12.1

* 絵文字ライブラリを持つように

* Fix chess_pawn emoji

* Add Unicode 12.0 emojis

* Add transgender flag/symbol emoji

* Add some japanese emoji keywords

* format emojilist.json

* fix emojilist order

* Add missing flags
This commit is contained in:
MeiMei 2019-09-21 21:31:38 +09:00 committed by syuilo
parent 9f5a763c69
commit 60d2558ed6
10 changed files with 1691 additions and 38 deletions

View file

@ -54,6 +54,7 @@ gulp.task('build:copy:fonts', () =>
gulp.task('build:copy', gulp.parallel('build:copy:views', 'build:copy:fonts', () =>
gulp.src([
'./src/const.json',
'./src/emojilist.json',
'./src/server/web/views/**/*',
'./src/**/assets/**/*',
'!./src/client/app/**/assets/**/*'

View file

@ -123,7 +123,6 @@
"deep-equal": "1.1.0",
"diskusage": "1.1.3",
"double-ended-queue": "2.1.0-0",
"emojilib": "2.4.0",
"eslint": "6.1.0",
"eslint-plugin-vue": "5.2.3",
"eventemitter3": "4.0.0",

View file

@ -28,9 +28,9 @@
<script lang="ts">
import Vue from 'vue';
import * as emojilib from 'emojilib';
import { emojilist } from '../../../../../misc/emojilist';
import contains from '../../../common/scripts/contains';
import { twemojiBase } from '../../../../../misc/twemoji-base';
import { twemojiSvgBase } from '../../../../../misc/twemoji-base';
import { getStaticImageUrl } from '../../../common/scripts/get-static-image-url';
type EmojiDef = {
@ -41,9 +41,7 @@ type EmojiDef = {
isCustomEmoji?: boolean;
};
const lib = Object.entries(emojilib.lib).filter((x: any) => {
return x[1].category != 'flags';
});
const lib = emojilist.filter(x => x.category !== 'flags');
const char2file = (char: string) => {
let codes = Array.from(char).map(x => x.codePointAt(0).toString(16));
@ -52,21 +50,21 @@ const char2file = (char: string) => {
return codes.join('-');
};
const emjdb: EmojiDef[] = lib.map((x: any) => ({
emoji: x[1].char,
name: x[0],
const emjdb: EmojiDef[] = lib.map(x => ({
emoji: x.char,
name: x.name,
aliasOf: null,
url: `${twemojiBase}/2/svg/${char2file(x[1].char)}.svg`
url: `${twemojiSvgBase}/${char2file(x.char)}.svg`
}));
for (const x of lib as any) {
if (x[1].keywords) {
for (const k of x[1].keywords) {
for (const x of lib) {
if (x.keywords) {
for (const k of x.keywords) {
emjdb.push({
emoji: x[1].char,
emoji: x.char,
name: k,
aliasOf: x[0],
url: `${twemojiBase}/2/svg/${char2file(x[1].char)}.svg`
aliasOf: x.name,
url: `${twemojiSvgBase}/${char2file(x.char)}.svg`
});
}
}
@ -85,7 +83,7 @@ export default Vue.extend({
hashtags: [],
emojis: [],
select: -1,
emojilib,
emojilist,
emojiDb: [] as EmojiDef[]
}
},

View file

@ -5,6 +5,7 @@
:title="category.text"
@click="go(category)"
:class="{ active: category.isActive }"
:key="category.text"
>
<fa :icon="category.icon" fixed-width/>
</button>
@ -12,18 +13,19 @@
<div class="emojis">
<header><fa :icon="categories.find(x => x.isActive).icon" fixed-width/> {{ categories.find(x => x.isActive).text }}</header>
<div v-if="categories.find(x => x.isActive).name">
<button v-for="emoji in Object.entries(lib).filter(([k, v]) => v.category === categories.find(x => x.isActive).name)"
:title="emoji[0]"
@click="chosen(emoji[1].char)"
:key="emoji[0]"
<button v-for="emoji in emojilist.filter(e => e.category === categories.find(x => x.isActive).name)"
:title="emoji.name"
@click="chosen(emoji.char)"
:key="emoji.name"
>
<mk-emoji :emoji="emoji[1].char"/>
<mk-emoji :emoji="emoji.char"/>
</button>
</div>
<div v-else>
<button v-for="emoji in customEmojis"
:title="emoji.name"
@click="chosen(`:${emoji.name}:`)"
:key="emoji.name"
>
<img :src="emoji.url" :alt="emoji.name"/>
</button>
@ -35,7 +37,7 @@
<script lang="ts">
import Vue from 'vue';
import i18n from '../../../i18n';
import { lib } from 'emojilib';
import { emojilist } from '../../../../../misc/emojilist';
import { faAsterisk, faLeaf, faUtensils, faFutbol, faCity, faDice } from '@fortawesome/free-solid-svg-icons';
import { faHeart, faFlag } from '@fortawesome/free-regular-svg-icons';
@ -44,7 +46,7 @@ export default Vue.extend({
data() {
return {
lib,
emojilist,
customEmojis: [],
categories: [{
text: this.$t('custom-emoji'),

View file

@ -7,10 +7,8 @@
<script lang="ts">
import Vue from 'vue';
//
//import { lib } from 'emojilib';
import { getStaticImageUrl } from '../../../common/scripts/get-static-image-url';
import { twemojiBase } from '../../../../../misc/twemoji-base';
import { twemojiSvgBase } from '../../../../../misc/twemoji-base';
export default Vue.extend({
props: {
@ -92,7 +90,7 @@ export default Vue.extend({
if (!codes.includes('200d')) codes = codes.filter(x => x != 'fe0f');
codes = codes.filter(x => x && x.length);
this.url = `${twemojiBase}/2/svg/${codes.join('-')}.svg`;
this.url = `${twemojiSvgBase}/${codes.join('-')}.svg`;
}
},
});

1655
src/emojilist.json Normal file

File diff suppressed because it is too large Load diff

File diff suppressed because one or more lines are too long

7
src/misc/emojilist.ts Normal file
View file

@ -0,0 +1,7 @@
// initial converted from https://github.com/muan/emojilib/commit/242fe68be86ed6536843b83f7e32f376468b38fb
export const emojilist = require('../emojilist.json') as {
name: string;
keywords: string[];
char: string;
category: 'people' | 'animals_and_nature' | 'food_and_drink' | 'activity' | 'travel_and_places' | 'objects' | 'symbols' | 'flags';
}[];

View file

@ -1,4 +1 @@
export const twemojiBase = 'https://cdn.jsdelivr.net/npm/twemoji@12.0.1';
// https://cdn.jsdelivr.net/npm/twemoji@12.0.1
// https://cdnjs.cloudflare.com/ajax/libs/twemoji/12.0.1
// https://twemoji.maxcdn.com
export const twemojiSvgBase = 'https://twemoji.maxcdn.com/v/latest/svg';

View file

@ -3712,11 +3712,6 @@ emoji-regex@^7.0.1:
resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-7.0.3.tgz#933a04052860c85e83c122479c4748a8e4c72156"
integrity sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA==
emojilib@2.4.0:
version "2.4.0"
resolved "https://registry.yarnpkg.com/emojilib/-/emojilib-2.4.0.tgz#ac518a8bb0d5f76dda57289ccb2fdf9d39ae721e"
integrity sha512-5U0rVMU5Y2n2+ykNLQqMoqklN9ICBT/KsvC1Gz6vqHbz2AXXGkG+Pm5rMWk/8Vjrr/mY9985Hi8DYzn1F09Nyw==
emojis-list@^2.0.0:
version "2.1.0"
resolved "https://registry.yarnpkg.com/emojis-list/-/emojis-list-2.1.0.tgz#4daa4d9db00f9819880c79fa457ae5b09a1fd389"