Add regional indicators

This commit is contained in:
Tusooa Zhu 2022-09-20 21:50:40 -04:00
parent 980241c1ac
commit cc58b9b93d
No known key found for this signature in database
GPG Key ID: 7B467EDE43A08224
3 changed files with 38 additions and 9 deletions

View File

@ -47,8 +47,8 @@ const UNICODE_EMOJI_GROUP_ICON = {
flags: 'flag' flags: 'flag'
} }
const maybeLocalizedKeywords = (emoji, languages) => { const maybeLocalizedKeywords = (emoji, languages, nameLocalizer) => {
const res = [emoji.displayText] const res = [emoji.displayText, nameLocalizer(emoji)]
if (emoji.annotations) { if (emoji.annotations) {
languages.forEach(lang => { languages.forEach(lang => {
const keywords = emoji.annotations[lang]?.keywords || [] const keywords = emoji.annotations[lang]?.keywords || []
@ -59,13 +59,13 @@ const maybeLocalizedKeywords = (emoji, languages) => {
return res return res
} }
const filterByKeyword = (list, keyword = '', languages) => { const filterByKeyword = (list, keyword = '', languages, nameLocalizer) => {
if (keyword === '') return list if (keyword === '') return list
const keywordLowercase = keyword.toLowerCase() const keywordLowercase = keyword.toLowerCase()
const orderedEmojiList = [] const orderedEmojiList = []
for (const emoji of list) { for (const emoji of list) {
const indices = maybeLocalizedKeywords(emoji, languages) const indices = maybeLocalizedKeywords(emoji, languages, nameLocalizer)
.map(k => k.toLowerCase().indexOf(keywordLowercase)) .map(k => k.toLowerCase().indexOf(keywordLowercase))
.filter(k => k > -1) .filter(k => k > -1)
@ -189,7 +189,7 @@ const EmojiPicker = {
this.showingStickers = value this.showingStickers = value
}, },
filterByKeyword (list, keyword) { filterByKeyword (list, keyword) {
return filterByKeyword(list, keyword, this.languages) return filterByKeyword(list, keyword, this.languages, this.maybeLocalizedEmojiName)
}, },
initializeLazyLoad () { initializeLazyLoad () {
this.destroyLazyLoad() this.destroyLazyLoad()
@ -305,7 +305,6 @@ const EmojiPicker = {
}, 500) }, 500)
}, },
languages () { languages () {
console.log('languages:', ensureFinalFallback(this.$store.getters.mergedConfig.interfaceLanguage))
return ensureFinalFallback(this.$store.getters.mergedConfig.interfaceLanguage) return ensureFinalFallback(this.$store.getters.mergedConfig.interfaceLanguage)
}, },
maybeLocalizedEmojiName () { maybeLocalizedEmojiName () {
@ -314,6 +313,10 @@ const EmojiPicker = {
return emoji.displayText return emoji.displayText
} }
if (emoji.displayTextI18n) {
return this.$t(emoji.displayTextI18n.key, emoji.displayTextI18n.args)
}
for (const lang of this.languages) { for (const lang of this.languages) {
if (emoji.annotations[lang]?.name) { if (emoji.annotations[lang]?.name) {
return emoji.annotations[lang].name return emoji.annotations[lang].name

View File

@ -211,7 +211,8 @@
"travel-and-places": "Travel & Places" "travel-and-places": "Travel & Places"
}, },
"load_all_hint": "Loaded first {saneAmount} emoji, loading all emoji may cause performance issues.", "load_all_hint": "Loaded first {saneAmount} emoji, loading all emoji may cause performance issues.",
"load_all": "Loading all {emojiAmount} emoji" "load_all": "Loading all {emojiAmount} emoji",
"regional_indicator": "Regional indicator {letter}"
}, },
"errors": { "errors": {
"storage_unavailable": "Pleroma could not access browser storage. Your login or your local settings won't be saved and you might encounter unexpected issues. Try enabling cookies." "storage_unavailable": "Pleroma could not access browser storage. Your login or your local settings won't be saved and you might encounter unexpected issues. Try enabling cookies."

View File

@ -16,6 +16,26 @@ const SORTED_EMOJI_GROUP_IDS = [
'flags' 'flags'
] ]
const REGIONAL_INDICATORS = (() => {
const start = 0x1F1E6
const end = 0x1F1FF
const A = 'A'.codePointAt(0)
const res = new Array(end - start + 1)
for (let i = start; i <= end; ++i) {
const letter = String.fromCodePoint(A + i - start)
res[i - start] = {
replacement: String.fromCodePoint(i),
imageUrl: false,
displayText: 'regional_indicator_' + letter,
displayTextI18n: {
key: 'emoji.regional_indicator',
args: { letter }
}
}
}
return res
})()
const defaultState = { const defaultState = {
// Stuff from apiConfig // Stuff from apiConfig
name: 'Pleroma FE', name: 'Pleroma FE',
@ -129,6 +149,11 @@ const injectAnnotations = (emoji, annotations) => {
} }
} }
const injectRegionalIndicators = groups => {
groups.symbols.push(...REGIONAL_INDICATORS)
return groups
}
const instance = { const instance = {
state: defaultState, state: defaultState,
mutations: { mutations: {
@ -219,7 +244,7 @@ const instance = {
})) }))
return res return res
}, {}) }, {})
commit('setInstanceOption', { name: 'emoji', value: emoji }) commit('setInstanceOption', { name: 'emoji', value: injectRegionalIndicators(emoji) })
} else { } else {
throw (res) throw (res)
} }
@ -234,7 +259,7 @@ const instance = {
return Promise.all( return Promise.all(
langList langList
.forEach(async lang => { .map(async lang => {
if (!state.unicodeEmojiAnnotations[lang]) { if (!state.unicodeEmojiAnnotations[lang]) {
const annotations = await loadAnnotations(lang) const annotations = await loadAnnotations(lang)
commit('setUnicodeEmojiAnnotations', { lang, annotations }) commit('setUnicodeEmojiAnnotations', { lang, annotations })