絵文字ピッカーの 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:
		
							parent
							
								
									9f5a763c69
								
							
						
					
					
						commit
						60d2558ed6
					
				
					 10 changed files with 1691 additions and 38 deletions
				
			
		|  | @ -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/**/*' | ||||
|  |  | |||
|  | @ -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", | ||||
|  |  | |||
|  | @ -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[] | ||||
| 		} | ||||
| 	}, | ||||
|  |  | |||
|  | @ -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'), | ||||
|  |  | |||
|  | @ -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
									
								
							
							
						
						
									
										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
									
								
							
							
						
						
									
										7
									
								
								src/misc/emojilist.ts
									
										
									
									
									
										Normal 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'; | ||||
| }[]; | ||||
|  | @ -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'; | ||||
|  |  | |||
|  | @ -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" | ||||
|  |  | |||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue