forked from Mirrors/elk
feat(ui): display post language
This commit is contained in:
parent
8d792d003d
commit
2a4862fb42
3 changed files with 26 additions and 21 deletions
|
@ -10,17 +10,7 @@ const { t } = useI18n()
|
||||||
|
|
||||||
const languageKeyword = $ref('')
|
const languageKeyword = $ref('')
|
||||||
|
|
||||||
const languageList: {
|
const fuse = new Fuse(languagesNameList, {
|
||||||
code: string
|
|
||||||
nativeName: string
|
|
||||||
name: string
|
|
||||||
}[] = ISO6391.getAllCodes().map(code => ({
|
|
||||||
code,
|
|
||||||
nativeName: ISO6391.getNativeName(code),
|
|
||||||
name: ISO6391.getName(code),
|
|
||||||
}))
|
|
||||||
|
|
||||||
const fuse = new Fuse(languageList, {
|
|
||||||
keys: ['code', 'nativeName', 'name'],
|
keys: ['code', 'nativeName', 'name'],
|
||||||
shouldSort: true,
|
shouldSort: true,
|
||||||
})
|
})
|
||||||
|
@ -28,7 +18,7 @@ const fuse = new Fuse(languageList, {
|
||||||
const languages = $computed(() =>
|
const languages = $computed(() =>
|
||||||
languageKeyword.trim()
|
languageKeyword.trim()
|
||||||
? fuse.search(languageKeyword).map(r => r.item)
|
? fuse.search(languageKeyword).map(r => r.item)
|
||||||
: [...languageList].sort(({ code: a }, { code: b }) => {
|
: [...languagesNameList].sort(({ code: a }, { code: b }) => {
|
||||||
return a === modelValue ? -1 : b === modelValue ? 1 : a.localeCompare(b)
|
return a === modelValue ? -1 : b === modelValue ? 1 : a.localeCompare(b)
|
||||||
}),
|
}),
|
||||||
)
|
)
|
||||||
|
|
|
@ -62,6 +62,7 @@ const { editor } = useTiptap({
|
||||||
},
|
},
|
||||||
onPaste: handlePaste,
|
onPaste: handlePaste,
|
||||||
})
|
})
|
||||||
|
|
||||||
const characterCount = $computed(() => {
|
const characterCount = $computed(() => {
|
||||||
let length = stringLength(htmlToText(editor.value?.getHTML() || ''))
|
let length = stringLength(htmlToText(editor.value?.getHTML() || ''))
|
||||||
|
|
||||||
|
@ -76,6 +77,8 @@ const characterCount = $computed(() => {
|
||||||
return length
|
return length
|
||||||
})
|
})
|
||||||
|
|
||||||
|
const postLanguageDisplay = $computed(() => languagesNameList.find(i => i.code === draft.params.language)?.nativeName)
|
||||||
|
|
||||||
async function handlePaste(evt: ClipboardEvent) {
|
async function handlePaste(evt: ClipboardEvent) {
|
||||||
const files = evt.clipboardData?.files
|
const files = evt.clipboardData?.files
|
||||||
if (!files || files.length === 0)
|
if (!files || files.length === 0)
|
||||||
|
@ -278,17 +281,11 @@ defineExpose({
|
||||||
{{ characterCount ?? 0 }}<span text-secondary-light>/</span><span text-secondary-light>{{ characterLimit }}</span>
|
{{ characterCount ?? 0 }}<span text-secondary-light>/</span><span text-secondary-light>{{ characterLimit }}</span>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<CommonTooltip placement="top" :content="$t('tooltip.add_content_warning')">
|
|
||||||
<button btn-action-icon :aria-label="$t('tooltip.add_content_warning')" @click="toggleSensitive">
|
|
||||||
<div v-if="draft.params.sensitive" i-ri:alarm-warning-fill text-orange />
|
|
||||||
<div v-else i-ri:alarm-warning-line />
|
|
||||||
</button>
|
|
||||||
</CommonTooltip>
|
|
||||||
|
|
||||||
<CommonTooltip placement="top" :content="$t('tooltip.change_language')">
|
<CommonTooltip placement="top" :content="$t('tooltip.change_language')">
|
||||||
<CommonDropdown placement="bottom" auto-boundary-max-size>
|
<CommonDropdown placement="bottom" auto-boundary-max-size>
|
||||||
<button btn-action-icon :aria-label="$t('tooltip.change_language')" w-12 mr--1>
|
<button btn-action-icon :aria-label="$t('tooltip.change_language')" w-max mr1>
|
||||||
<div i-ri:translate-2 />
|
<span v-if="postLanguageDisplay" text-secondary text-sm ml1>{{ postLanguageDisplay }}</span>
|
||||||
|
<div v-else i-ri:translate-2 />
|
||||||
<div i-ri:arrow-down-s-line text-sm text-secondary me--1 />
|
<div i-ri:arrow-down-s-line text-sm text-secondary me--1 />
|
||||||
</button>
|
</button>
|
||||||
|
|
||||||
|
@ -298,6 +295,13 @@ defineExpose({
|
||||||
</CommonDropdown>
|
</CommonDropdown>
|
||||||
</CommonTooltip>
|
</CommonTooltip>
|
||||||
|
|
||||||
|
<CommonTooltip placement="top" :content="$t('tooltip.add_content_warning')">
|
||||||
|
<button btn-action-icon :aria-label="$t('tooltip.add_content_warning')" @click="toggleSensitive">
|
||||||
|
<div v-if="draft.params.sensitive" i-ri:alarm-warning-fill text-orange />
|
||||||
|
<div v-else i-ri:alarm-warning-line />
|
||||||
|
</button>
|
||||||
|
</CommonTooltip>
|
||||||
|
|
||||||
<PublishVisibilityPicker v-model="draft.params.visibility" :editing="!!draft.editingStatus">
|
<PublishVisibilityPicker v-model="draft.params.visibility" :editing="!!draft.editingStatus">
|
||||||
<template #default="{ visibility }">
|
<template #default="{ visibility }">
|
||||||
<button :disabled="!!draft.editingStatus" :aria-label="$t('tooltip.change_content_visibility')" btn-action-icon :class="{ 'w-12': !draft.editingStatus }">
|
<button :disabled="!!draft.editingStatus" :aria-label="$t('tooltip.change_content_visibility')" btn-action-icon :class="{ 'w-12': !draft.editingStatus }">
|
||||||
|
|
11
composables/langugage.ts
Normal file
11
composables/langugage.ts
Normal file
|
@ -0,0 +1,11 @@
|
||||||
|
import ISO6391 from 'iso-639-1'
|
||||||
|
|
||||||
|
export const languagesNameList: {
|
||||||
|
code: string
|
||||||
|
nativeName: string
|
||||||
|
name: string
|
||||||
|
}[] = ISO6391.getAllCodes().map(code => ({
|
||||||
|
code,
|
||||||
|
nativeName: ISO6391.getNativeName(code),
|
||||||
|
name: ISO6391.getName(code),
|
||||||
|
}))
|
Loading…
Reference in a new issue