mirror of
https://iceshrimp.dev/limepotato/jormungandr-bite.git
synced 2024-11-29 21:37:34 -07:00
icons
This commit is contained in:
parent
7157d54fbd
commit
1979a60ff8
257 changed files with 1056 additions and 1056 deletions
|
@ -242,7 +242,7 @@ export async function openAccountMenu(
|
||||||
...accountItemPromises,
|
...accountItemPromises,
|
||||||
{
|
{
|
||||||
type: "parent",
|
type: "parent",
|
||||||
icon: "ph-plus-bold ph-lg",
|
icon: "ph-plus ph-bold ph-lg",
|
||||||
text: i18n.ts.addAccount,
|
text: i18n.ts.addAccount,
|
||||||
children: [
|
children: [
|
||||||
{
|
{
|
||||||
|
@ -261,13 +261,13 @@ export async function openAccountMenu(
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
type: "link",
|
type: "link",
|
||||||
icon: "ph-users-bold ph-lg",
|
icon: "ph-users ph-bold ph-lg",
|
||||||
text: i18n.ts.manageAccounts,
|
text: i18n.ts.manageAccounts,
|
||||||
to: "/settings/accounts",
|
to: "/settings/accounts",
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
type: "button",
|
type: "button",
|
||||||
icon: "ph-sign-out-bold ph-lg",
|
icon: "ph-sign-out ph-bold ph-lg",
|
||||||
text: i18n.ts.logout,
|
text: i18n.ts.logout,
|
||||||
action: () => {
|
action: () => {
|
||||||
signout();
|
signout();
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
<template>
|
<template>
|
||||||
<XWindow ref="uiWindow" :initial-width="400" :initial-height="500" :can-resize="true" @closed="emit('closed')">
|
<XWindow ref="uiWindow" :initial-width="400" :initial-height="500" :can-resize="true" @closed="emit('closed')">
|
||||||
<template #header>
|
<template #header>
|
||||||
<i class="ph-warning-circle-bold ph-lg" style="margin-right: 0.5em;"></i>
|
<i class="ph-warning-circle ph-bold ph-lg" style="margin-right: 0.5em;"></i>
|
||||||
<I18n :src="i18n.ts.reportAbuseOf" tag="span">
|
<I18n :src="i18n.ts.reportAbuseOf" tag="span">
|
||||||
<template #name>
|
<template #name>
|
||||||
<b><MkAcct :user="user"/></b>
|
<b><MkAcct :user="user"/></b>
|
||||||
|
|
|
@ -6,14 +6,14 @@
|
||||||
>
|
>
|
||||||
<template v-if="!wait">
|
<template v-if="!wait">
|
||||||
<template v-if="isFollowing">
|
<template v-if="isFollowing">
|
||||||
<span v-if="full">{{ i18n.ts.unfollow }}</span><i class="ph-minus-bold ph-lg"></i>
|
<span v-if="full">{{ i18n.ts.unfollow }}</span><i class="ph-minus ph-bold ph-lg"></i>
|
||||||
</template>
|
</template>
|
||||||
<template v-else>
|
<template v-else>
|
||||||
<span v-if="full">{{ i18n.ts.follow }}</span><i class="ph-plus-bold ph-lg"></i>
|
<span v-if="full">{{ i18n.ts.follow }}</span><i class="ph-plus ph-bold ph-lg"></i>
|
||||||
</template>
|
</template>
|
||||||
</template>
|
</template>
|
||||||
<template v-else>
|
<template v-else>
|
||||||
<span v-if="full">{{ i18n.ts.processing }}</span><i class="ph-circle-notch-bold ph-lg fa-pulse ph-fw ph-lg"></i>
|
<span v-if="full">{{ i18n.ts.processing }}</span><i class="ph-circle-notch ph-bold ph-lg fa-pulse ph-fw ph-lg"></i>
|
||||||
</template>
|
</template>
|
||||||
</button>
|
</button>
|
||||||
</template>
|
</template>
|
||||||
|
|
|
@ -2,10 +2,10 @@
|
||||||
<MkA :to="`/channels/${channel.id}`" class="eftoefju _panel" tabindex="-1">
|
<MkA :to="`/channels/${channel.id}`" class="eftoefju _panel" tabindex="-1">
|
||||||
<div class="banner" :style="bannerStyle">
|
<div class="banner" :style="bannerStyle">
|
||||||
<div class="fade"></div>
|
<div class="fade"></div>
|
||||||
<div class="name"><i class="ph-television-bold ph-lg"></i> {{ channel.name }}</div>
|
<div class="name"><i class="ph-television ph-bold ph-lg"></i> {{ channel.name }}</div>
|
||||||
<div class="status">
|
<div class="status">
|
||||||
<div>
|
<div>
|
||||||
<i class="ph-users-bold ph-lg ph-fw ph-lg"></i>
|
<i class="ph-users ph-bold ph-lg ph-fw ph-lg"></i>
|
||||||
<I18n :src="i18n.ts._channel.usersCount" tag="span" style="margin-left: 4px;">
|
<I18n :src="i18n.ts._channel.usersCount" tag="span" style="margin-left: 4px;">
|
||||||
<template #n>
|
<template #n>
|
||||||
<b>{{ channel.usersCount }}</b>
|
<b>{{ channel.usersCount }}</b>
|
||||||
|
@ -13,7 +13,7 @@
|
||||||
</I18n>
|
</I18n>
|
||||||
</div>
|
</div>
|
||||||
<div>
|
<div>
|
||||||
<i class="ph-pencil-bold ph-lg ph-fw ph-lg"></i>
|
<i class="ph-pencil ph-bold ph-lg ph-fw ph-lg"></i>
|
||||||
<I18n :src="i18n.ts._channel.notesCount" tag="span" style="margin-left: 4px;">
|
<I18n :src="i18n.ts._channel.notesCount" tag="span" style="margin-left: 4px;">
|
||||||
<template #n>
|
<template #n>
|
||||||
<b>{{ channel.notesCount }}</b>
|
<b>{{ channel.notesCount }}</b>
|
||||||
|
|
|
@ -5,8 +5,8 @@
|
||||||
<div class="sub">
|
<div class="sub">
|
||||||
<slot name="func"></slot>
|
<slot name="func"></slot>
|
||||||
<button v-if="foldable" class="_button" @click="() => showBody = !showBody">
|
<button v-if="foldable" class="_button" @click="() => showBody = !showBody">
|
||||||
<template v-if="showBody"><i class="ph-caret-up-bold ph-lg"></i></template>
|
<template v-if="showBody"><i class="ph-caret-up ph-bold ph-lg"></i></template>
|
||||||
<template v-else><i class="ph-caret-down-bold ph-lg"></i></template>
|
<template v-else><i class="ph-caret-down ph-bold ph-lg"></i></template>
|
||||||
</button>
|
</button>
|
||||||
</div>
|
</div>
|
||||||
</header>
|
</header>
|
||||||
|
|
|
@ -64,14 +64,14 @@ export default defineComponent({
|
||||||
}, [
|
}, [
|
||||||
h('span', [
|
h('span', [
|
||||||
h('i', {
|
h('i', {
|
||||||
class: 'ph-caret-up-bold ph-lg icon',
|
class: 'ph-caret-up ph-bold ph-lg icon',
|
||||||
}),
|
}),
|
||||||
getDateText(item.createdAt),
|
getDateText(item.createdAt),
|
||||||
]),
|
]),
|
||||||
h('span', [
|
h('span', [
|
||||||
getDateText(props.items[i + 1].createdAt),
|
getDateText(props.items[i + 1].createdAt),
|
||||||
h('i', {
|
h('i', {
|
||||||
class: 'ph-caret-down-bold ph-lg icon',
|
class: 'ph-caret-down ph-bold ph-lg icon',
|
||||||
}),
|
}),
|
||||||
]),
|
]),
|
||||||
]));
|
]));
|
||||||
|
|
|
@ -5,17 +5,17 @@
|
||||||
<i :class="icon"></i>
|
<i :class="icon"></i>
|
||||||
</div>
|
</div>
|
||||||
<div v-else-if="!input && !select" :class="[$style.icon, $style['type_' + type]]">
|
<div v-else-if="!input && !select" :class="[$style.icon, $style['type_' + type]]">
|
||||||
<i v-if="type === 'success'" :class="$style.iconInner" class="ph-check-bold ph-lg"></i>
|
<i v-if="type === 'success'" :class="$style.iconInner" class="ph-check ph-bold ph-lg"></i>
|
||||||
<i v-else-if="type === 'error'" :class="$style.iconInner" class="ph-circle-wavy-warning-bold ph-lg"></i>
|
<i v-else-if="type === 'error'" :class="$style.iconInner" class="ph-circle-wavy-warning ph-bold ph-lg"></i>
|
||||||
<i v-else-if="type === 'warning'" :class="$style.iconInner" class="ph-warning-bold ph-lg"></i>
|
<i v-else-if="type === 'warning'" :class="$style.iconInner" class="ph-warning ph-bold ph-lg"></i>
|
||||||
<i v-else-if="type === 'info'" :class="$style.iconInner" class="ph-info-bold ph-lg"></i>
|
<i v-else-if="type === 'info'" :class="$style.iconInner" class="ph-info ph-bold ph-lg"></i>
|
||||||
<i v-else-if="type === 'question'" :class="$style.iconInner" class="ph-circle-question-bold ph-lg"></i>
|
<i v-else-if="type === 'question'" :class="$style.iconInner" class="ph-circle-question ph-bold ph-lg"></i>
|
||||||
<MkLoading v-else-if="type === 'waiting'" :class="$style.iconInner" :em="true"/>
|
<MkLoading v-else-if="type === 'waiting'" :class="$style.iconInner" :em="true"/>
|
||||||
</div>
|
</div>
|
||||||
<header v-if="title" :class="$style.title"><Mfm :text="title"/></header>
|
<header v-if="title" :class="$style.title"><Mfm :text="title"/></header>
|
||||||
<div v-if="text" :class="$style.text"><Mfm :text="text"/></div>
|
<div v-if="text" :class="$style.text"><Mfm :text="text"/></div>
|
||||||
<MkInput v-if="input" v-model="inputValue" autofocus :type="input.type || 'text'" :placeholder="input.placeholder || undefined" @keydown="onInputKeydown">
|
<MkInput v-if="input" v-model="inputValue" autofocus :type="input.type || 'text'" :placeholder="input.placeholder || undefined" @keydown="onInputKeydown">
|
||||||
<template v-if="input.type === 'password'" #prefix><i class="ph-password-bold ph-lg"></i></template>
|
<template v-if="input.type === 'password'" #prefix><i class="ph-password ph-bold ph-lg"></i></template>
|
||||||
</MkInput>
|
</MkInput>
|
||||||
<MkSelect v-if="select" v-model="selectedValue" autofocus>
|
<MkSelect v-if="select" v-model="selectedValue" autofocus>
|
||||||
<template v-if="select.items">
|
<template v-if="select.items">
|
||||||
|
|
|
@ -63,30 +63,30 @@ const title = computed(() => `${props.file.name}\n${props.file.type} ${bytes(pro
|
||||||
function getMenu() {
|
function getMenu() {
|
||||||
return [{
|
return [{
|
||||||
text: i18n.ts.rename,
|
text: i18n.ts.rename,
|
||||||
icon: 'ph-cursor-text-bold ph-lg',
|
icon: 'ph-cursor-text ph-bold ph-lg',
|
||||||
action: rename,
|
action: rename,
|
||||||
}, {
|
}, {
|
||||||
text: props.file.isSensitive ? i18n.ts.unmarkAsSensitive : i18n.ts.markAsSensitive,
|
text: props.file.isSensitive ? i18n.ts.unmarkAsSensitive : i18n.ts.markAsSensitive,
|
||||||
icon: props.file.isSensitive ? 'ph-eye-bold ph-lg' : 'ph-eye-slash-bold ph-lg',
|
icon: props.file.isSensitive ? 'ph-eye-bold ph-lg' : 'ph-eye-slash ph-bold ph-lg',
|
||||||
action: toggleSensitive,
|
action: toggleSensitive,
|
||||||
}, {
|
}, {
|
||||||
text: i18n.ts.describeFile,
|
text: i18n.ts.describeFile,
|
||||||
icon: 'ph-cursor-text-bold ph-lg',
|
icon: 'ph-cursor-text ph-bold ph-lg',
|
||||||
action: describe,
|
action: describe,
|
||||||
}, null, {
|
}, null, {
|
||||||
text: i18n.ts.copyUrl,
|
text: i18n.ts.copyUrl,
|
||||||
icon: 'ph-link-simple-bold ph-lg',
|
icon: 'ph-link-simple ph-bold ph-lg',
|
||||||
action: copyUrl,
|
action: copyUrl,
|
||||||
}, {
|
}, {
|
||||||
type: 'a',
|
type: 'a',
|
||||||
href: props.file.url,
|
href: props.file.url,
|
||||||
target: '_blank',
|
target: '_blank',
|
||||||
text: i18n.ts.download,
|
text: i18n.ts.download,
|
||||||
icon: 'ph-download-simple-bold ph-lg',
|
icon: 'ph-download-simple ph-bold ph-lg',
|
||||||
download: props.file.name,
|
download: props.file.name,
|
||||||
}, null, {
|
}, null, {
|
||||||
text: i18n.ts.delete,
|
text: i18n.ts.delete,
|
||||||
icon: 'ph-trash-bold ph-lg',
|
icon: 'ph-trash ph-bold ph-lg',
|
||||||
danger: true,
|
danger: true,
|
||||||
action: deleteFile,
|
action: deleteFile,
|
||||||
}];
|
}];
|
||||||
|
|
|
@ -16,8 +16,8 @@
|
||||||
@dragend="onDragend"
|
@dragend="onDragend"
|
||||||
>
|
>
|
||||||
<p class="name">
|
<p class="name">
|
||||||
<template v-if="hover"><i class="ph-folder-notch-open-bold ph-lg ph-fw ph-lg"></i></template>
|
<template v-if="hover"><i class="ph-folder-notch-open ph-bold ph-lg ph-fw ph-lg"></i></template>
|
||||||
<template v-if="!hover"><i class="ph-folder-notch-bold ph-lg ph-fw ph-lg"></i></template>
|
<template v-if="!hover"><i class="ph-folder-notch ph-bold ph-lg ph-fw ph-lg"></i></template>
|
||||||
{{ folder.name }}
|
{{ folder.name }}
|
||||||
</p>
|
</p>
|
||||||
<p v-if="defaultStore.state.uploadFolder == folder.id" class="upload">
|
<p v-if="defaultStore.state.uploadFolder == folder.id" class="upload">
|
||||||
|
@ -229,7 +229,7 @@ function setAsUploadFolder() {
|
||||||
function onContextmenu(ev: MouseEvent) {
|
function onContextmenu(ev: MouseEvent) {
|
||||||
os.contextMenu([{
|
os.contextMenu([{
|
||||||
text: i18n.ts.openInWindow,
|
text: i18n.ts.openInWindow,
|
||||||
icon: 'ph-copy-bold ph-lg',
|
icon: 'ph-copy ph-bold ph-lg',
|
||||||
action: () => {
|
action: () => {
|
||||||
os.popup(defineAsyncComponent(() => import('@/components/MkDriveWindow.vue')), {
|
os.popup(defineAsyncComponent(() => import('@/components/MkDriveWindow.vue')), {
|
||||||
initialFolder: props.folder,
|
initialFolder: props.folder,
|
||||||
|
@ -238,11 +238,11 @@ function onContextmenu(ev: MouseEvent) {
|
||||||
},
|
},
|
||||||
}, null, {
|
}, null, {
|
||||||
text: i18n.ts.rename,
|
text: i18n.ts.rename,
|
||||||
icon: 'ph-cursor-text-bold ph-lg',
|
icon: 'ph-cursor-text ph-bold ph-lg',
|
||||||
action: rename,
|
action: rename,
|
||||||
}, null, {
|
}, null, {
|
||||||
text: i18n.ts.delete,
|
text: i18n.ts.delete,
|
||||||
icon: 'ph-trash-bold ph-lg',
|
icon: 'ph-trash ph-bold ph-lg',
|
||||||
danger: true,
|
danger: true,
|
||||||
action: deleteFolder,
|
action: deleteFolder,
|
||||||
}], ev);
|
}], ev);
|
||||||
|
|
|
@ -7,7 +7,7 @@
|
||||||
@dragleave="onDragleave"
|
@dragleave="onDragleave"
|
||||||
@drop.stop="onDrop"
|
@drop.stop="onDrop"
|
||||||
>
|
>
|
||||||
<i v-if="folder == null" class="ph-cloud-bold ph-lg"></i>
|
<i v-if="folder == null" class="ph-cloud ph-bold ph-lg"></i>
|
||||||
<span>{{ folder == null ? i18n.ts.drive : folder.name }}</span>
|
<span>{{ folder == null ? i18n.ts.drive : folder.name }}</span>
|
||||||
</div>
|
</div>
|
||||||
</template>
|
</template>
|
||||||
|
|
|
@ -11,7 +11,7 @@
|
||||||
@removeFolder="removeFolder"
|
@removeFolder="removeFolder"
|
||||||
/>
|
/>
|
||||||
<template v-for="f in hierarchyFolders">
|
<template v-for="f in hierarchyFolders">
|
||||||
<span class="separator"><i class="ph-caret-right-bold ph-lg"></i></span>
|
<span class="separator"><i class="ph-caret-right ph-bold ph-lg"></i></span>
|
||||||
<XNavFolder
|
<XNavFolder
|
||||||
:folder="f"
|
:folder="f"
|
||||||
:parent-folder="folder"
|
:parent-folder="folder"
|
||||||
|
@ -21,10 +21,10 @@
|
||||||
@removeFolder="removeFolder"
|
@removeFolder="removeFolder"
|
||||||
/>
|
/>
|
||||||
</template>
|
</template>
|
||||||
<span v-if="folder != null" class="separator"><i class="ph-caret-right-bold ph-lg"></i></span>
|
<span v-if="folder != null" class="separator"><i class="ph-caret-right ph-bold ph-lg"></i></span>
|
||||||
<span v-if="folder != null" class="folder current">{{ folder.name }}</span>
|
<span v-if="folder != null" class="folder current">{{ folder.name }}</span>
|
||||||
</div>
|
</div>
|
||||||
<button class="menu _button" @click="showMenu"><i class="ph-dots-three-outline-bold ph-lg"></i></button>
|
<button class="menu _button" @click="showMenu"><i class="ph-dots-three-outline ph-bold ph-lg"></i></button>
|
||||||
</nav>
|
</nav>
|
||||||
<div
|
<div
|
||||||
ref="main" class="main"
|
ref="main" class="main"
|
||||||
|
@ -573,26 +573,26 @@ function getMenu() {
|
||||||
type: 'label',
|
type: 'label',
|
||||||
}, {
|
}, {
|
||||||
text: i18n.ts.upload,
|
text: i18n.ts.upload,
|
||||||
icon: 'ph-upload-simple-bold ph-lg',
|
icon: 'ph-upload-simple ph-bold ph-lg',
|
||||||
action: () => { selectLocalFile(); },
|
action: () => { selectLocalFile(); },
|
||||||
}, {
|
}, {
|
||||||
text: i18n.ts.fromUrl,
|
text: i18n.ts.fromUrl,
|
||||||
icon: 'ph-link-simple-bold ph-lg',
|
icon: 'ph-link-simple ph-bold ph-lg',
|
||||||
action: () => { urlUpload(); },
|
action: () => { urlUpload(); },
|
||||||
}, null, {
|
}, null, {
|
||||||
text: folder.value ? folder.value.name : i18n.ts.drive,
|
text: folder.value ? folder.value.name : i18n.ts.drive,
|
||||||
type: 'label',
|
type: 'label',
|
||||||
}, folder.value ? {
|
}, folder.value ? {
|
||||||
text: i18n.ts.renameFolder,
|
text: i18n.ts.renameFolder,
|
||||||
icon: 'ph-cursor-text-bold ph-lg',
|
icon: 'ph-cursor-text ph-bold ph-lg',
|
||||||
action: () => { renameFolder(folder.value); },
|
action: () => { renameFolder(folder.value); },
|
||||||
} : undefined, folder.value ? {
|
} : undefined, folder.value ? {
|
||||||
text: i18n.ts.deleteFolder,
|
text: i18n.ts.deleteFolder,
|
||||||
icon: 'ph-trash-bold ph-lg',
|
icon: 'ph-trash ph-bold ph-lg',
|
||||||
action: () => { deleteFolder(folder.value as Misskey.entities.DriveFolder); },
|
action: () => { deleteFolder(folder.value as Misskey.entities.DriveFolder); },
|
||||||
} : undefined, {
|
} : undefined, {
|
||||||
text: i18n.ts.createFolder,
|
text: i18n.ts.createFolder,
|
||||||
icon: 'ph-folder-notch-plus-bold ph-lg',
|
icon: 'ph-folder-notch-plus ph-bold ph-lg',
|
||||||
action: () => { createFolder(); },
|
action: () => { createFolder(); },
|
||||||
}];
|
}];
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,16 +1,16 @@
|
||||||
<template>
|
<template>
|
||||||
<div ref="thumbnail" class="zdjebgpv">
|
<div ref="thumbnail" class="zdjebgpv">
|
||||||
<ImgWithBlurhash v-if="isThumbnailAvailable" :hash="file.blurhash" :src="file.thumbnailUrl" :alt="file.name" :title="file.name" :cover="fit !== 'contain'"/>
|
<ImgWithBlurhash v-if="isThumbnailAvailable" :hash="file.blurhash" :src="file.thumbnailUrl" :alt="file.name" :title="file.name" :cover="fit !== 'contain'"/>
|
||||||
<i v-else-if="is === 'image'" class="ph-file-image-bold ph-lg icon"></i>
|
<i v-else-if="is === 'image'" class="ph-file-image ph-bold ph-lg icon"></i>
|
||||||
<i v-else-if="is === 'video'" class="ph-file-video-bold ph-lg icon"></i>
|
<i v-else-if="is === 'video'" class="ph-file-video ph-bold ph-lg icon"></i>
|
||||||
<i v-else-if="is === 'audio' || is === 'midi'" class="ph-file-audio-bold ph-lg icon"></i>
|
<i v-else-if="is === 'audio' || is === 'midi'" class="ph-file-audio ph-bold ph-lg icon"></i>
|
||||||
<i v-else-if="is === 'csv'" class="ph-file-csv-bold ph-lg icon"></i>
|
<i v-else-if="is === 'csv'" class="ph-file-csv ph-bold ph-lg icon"></i>
|
||||||
<i v-else-if="is === 'pdf'" class="ph-file-pdf-bold ph-lg icon"></i>
|
<i v-else-if="is === 'pdf'" class="ph-file-pdf ph-bold ph-lg icon"></i>
|
||||||
<i v-else-if="is === 'textfile'" class="ph-file-text-bold ph-lg icon"></i>
|
<i v-else-if="is === 'textfile'" class="ph-file-text ph-bold ph-lg icon"></i>
|
||||||
<i v-else-if="is === 'archive'" class="ph-file-zip-bold ph-lg icon"></i>
|
<i v-else-if="is === 'archive'" class="ph-file-zip ph-bold ph-lg icon"></i>
|
||||||
<i v-else class="ph-file-bold ph-lg icon"></i>
|
<i v-else class="ph-file ph-bold ph-lg icon"></i>
|
||||||
|
|
||||||
<i v-if="isThumbnailAvailable && is === 'video'" class="ph-file-video-bold ph-lg icon-sub"></i>
|
<i v-if="isThumbnailAvailable && is === 'video'" class="ph-file-video ph-bold ph-lg icon-sub"></i>
|
||||||
</div>
|
</div>
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
|
|
|
@ -2,7 +2,7 @@
|
||||||
<!-- このコンポーネントの要素のclassは親から利用されるのでむやみに弄らないこと -->
|
<!-- このコンポーネントの要素のclassは親から利用されるのでむやみに弄らないこと -->
|
||||||
<section>
|
<section>
|
||||||
<header class="_acrylic" @click="shown = !shown">
|
<header class="_acrylic" @click="shown = !shown">
|
||||||
<i class="toggle ph-fw ph-lg" :class="shown ? 'ph-caret-down-bold ph-lg' : 'ph-caret-up-bold ph-lg'"></i> <slot></slot> ({{ emojis.length }})
|
<i class="toggle ph-fw ph-lg" :class="shown ? 'ph-caret-down-bold ph-lg' : 'ph-caret-up ph-bold ph-lg'"></i> <slot></slot> ({{ emojis.length }})
|
||||||
</header>
|
</header>
|
||||||
<div v-if="shown" class="body">
|
<div v-if="shown" class="body">
|
||||||
<button
|
<button
|
||||||
|
|
|
@ -46,7 +46,7 @@
|
||||||
</section>
|
</section>
|
||||||
|
|
||||||
<section>
|
<section>
|
||||||
<header><i class="ph-alarm-bold ph-fw ph-lg"></i> {{ i18n.ts.recentUsed }}</header>
|
<header><i class="ph-alarm ph-bold ph-fw ph-lg"></i> {{ i18n.ts.recentUsed }}</header>
|
||||||
<div class="body">
|
<div class="body">
|
||||||
<button
|
<button
|
||||||
v-for="emoji in recentlyUsedEmojis"
|
v-for="emoji in recentlyUsedEmojis"
|
||||||
|
@ -69,10 +69,10 @@
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="tabs">
|
<div class="tabs">
|
||||||
<button class="_button tab" :class="{ active: tab === 'index' }" @click="tab = 'index'"><i class="ph-asterisk-bold ph-lg ph-fw ph-lg"></i></button>
|
<button class="_button tab" :class="{ active: tab === 'index' }" @click="tab = 'index'"><i class="ph-asterisk ph-bold ph-lg ph-fw ph-lg"></i></button>
|
||||||
<button class="_button tab" :class="{ active: tab === 'custom' }" @click="tab = 'custom'"><i class="ph-smiley-bold ph-lg ph-fw ph-lg"></i></button>
|
<button class="_button tab" :class="{ active: tab === 'custom' }" @click="tab = 'custom'"><i class="ph-smiley ph-bold ph-lg ph-fw ph-lg"></i></button>
|
||||||
<button class="_button tab" :class="{ active: tab === 'unicode' }" @click="tab = 'unicode'"><i class="ph-leaf-bold ph-lg ph-fw ph-lg"></i></button>
|
<button class="_button tab" :class="{ active: tab === 'unicode' }" @click="tab = 'unicode'"><i class="ph-leaf ph-bold ph-lg ph-fw ph-lg"></i></button>
|
||||||
<button class="_button tab" :class="{ active: tab === 'tags' }" @click="tab = 'tags'"><i class="ph-hash-bold ph-lg ph-fw ph-lg"></i></button>
|
<button class="_button tab" :class="{ active: tab === 'tags' }" @click="tab = 'tags'"><i class="ph-hash ph-bold ph-lg ph-fw ph-lg"></i></button>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</template>
|
</template>
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
<template>
|
<template>
|
||||||
<span class="mk-file-type-icon">
|
<span class="mk-file-type-icon">
|
||||||
<template v-if="kind == 'image'"><i class="ph-file-image-bold ph-lg"></i></template>
|
<template v-if="kind == 'image'"><i class="ph-file-image ph-bold ph-lg"></i></template>
|
||||||
</span>
|
</span>
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
|
|
|
@ -4,8 +4,8 @@
|
||||||
<div class="title"><slot name="header"></slot></div>
|
<div class="title"><slot name="header"></slot></div>
|
||||||
<div class="divider"></div>
|
<div class="divider"></div>
|
||||||
<button class="_button">
|
<button class="_button">
|
||||||
<template v-if="showBody"><i class="ph-caret-up-bold ph-lg"></i></template>
|
<template v-if="showBody"><i class="ph-caret-up ph-bold ph-lg"></i></template>
|
||||||
<template v-else><i class="ph-caret-down-bold ph-lg"></i></template>
|
<template v-else><i class="ph-caret-down ph-bold ph-lg"></i></template>
|
||||||
</button>
|
</button>
|
||||||
</header>
|
</header>
|
||||||
<transition
|
<transition
|
||||||
|
|
|
@ -13,27 +13,27 @@
|
||||||
>
|
>
|
||||||
<template v-if="!wait">
|
<template v-if="!wait">
|
||||||
<template v-if="isBlocking">
|
<template v-if="isBlocking">
|
||||||
<span v-if="full">{{ i18n.ts.blocked }}</span><i class="ph-prohibit-bold ph-lg"></i>
|
<span v-if="full">{{ i18n.ts.blocked }}</span><i class="ph-prohibit ph-bold ph-lg"></i>
|
||||||
</template>
|
</template>
|
||||||
<template v-else-if="hasPendingFollowRequestFromYou && user.isLocked">
|
<template v-else-if="hasPendingFollowRequestFromYou && user.isLocked">
|
||||||
<span v-if="full">{{ i18n.ts.followRequestPending }}</span><i class="ph-hourglass-medium-bold ph-lg"></i>
|
<span v-if="full">{{ i18n.ts.followRequestPending }}</span><i class="ph-hourglass-medium ph-bold ph-lg"></i>
|
||||||
</template>
|
</template>
|
||||||
<template v-else-if="hasPendingFollowRequestFromYou && !user.isLocked">
|
<template v-else-if="hasPendingFollowRequestFromYou && !user.isLocked">
|
||||||
<!-- つまりリモートフォローの場合。 -->
|
<!-- つまりリモートフォローの場合。 -->
|
||||||
<span v-if="full">{{ i18n.ts.processing }}</span><i class="ph-circle-notch-bold ph-lg fa-pulse"></i>
|
<span v-if="full">{{ i18n.ts.processing }}</span><i class="ph-circle-notch ph-bold ph-lg fa-pulse"></i>
|
||||||
</template>
|
</template>
|
||||||
<template v-else-if="isFollowing">
|
<template v-else-if="isFollowing">
|
||||||
<span v-if="full">{{ i18n.ts.unfollow }}</span><i class="ph-minus-bold ph-lg"></i>
|
<span v-if="full">{{ i18n.ts.unfollow }}</span><i class="ph-minus ph-bold ph-lg"></i>
|
||||||
</template>
|
</template>
|
||||||
<template v-else-if="!isFollowing && user.isLocked">
|
<template v-else-if="!isFollowing && user.isLocked">
|
||||||
<span v-if="full">{{ i18n.ts.followRequest }}</span><i class="ph-plus-bold ph-lg"></i>
|
<span v-if="full">{{ i18n.ts.followRequest }}</span><i class="ph-plus ph-bold ph-lg"></i>
|
||||||
</template>
|
</template>
|
||||||
<template v-else-if="!isFollowing && !user.isLocked">
|
<template v-else-if="!isFollowing && !user.isLocked">
|
||||||
<span v-if="full">{{ i18n.ts.follow }}</span><i class="ph-plus-bold ph-lg"></i>
|
<span v-if="full">{{ i18n.ts.follow }}</span><i class="ph-plus ph-bold ph-lg"></i>
|
||||||
</template>
|
</template>
|
||||||
</template>
|
</template>
|
||||||
<template v-else>
|
<template v-else>
|
||||||
<span v-if="full">{{ i18n.ts.processing }}</span><i class="ph-circle-notch-bold ph-lg fa-pulse ph-fw ph-lg"></i>
|
<span v-if="full">{{ i18n.ts.processing }}</span><i class="ph-circle-notch ph-bold ph-lg fa-pulse ph-fw ph-lg"></i>
|
||||||
</template>
|
</template>
|
||||||
</button>
|
</button>
|
||||||
</template>
|
</template>
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
<template>
|
<template>
|
||||||
<div class="mk-google">
|
<div class="mk-google">
|
||||||
<input v-model="query" type="search" :placeholder="q">
|
<input v-model="query" type="search" :placeholder="q">
|
||||||
<button @click="search"><i class="ph-magnifying-glass-bold ph-lg"></i> {{ i18n.ts.searchByGoogle }}</button>
|
<button @click="search"><i class="ph-magnifying-glass ph-bold ph-lg"></i> {{ i18n.ts.searchByGoogle }}</button>
|
||||||
</div>
|
</div>
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
<template>
|
<template>
|
||||||
<div class="fpezltsf" :class="{ warn }">
|
<div class="fpezltsf" :class="{ warn }">
|
||||||
<i v-if="warn" class="ph-warning-bold ph-lg"></i>
|
<i v-if="warn" class="ph-warning ph-bold ph-lg"></i>
|
||||||
<i v-else class="ph-info-bold ph-lg"></i>
|
<i v-else class="ph-info ph-bold ph-lg"></i>
|
||||||
<slot></slot>
|
<slot></slot>
|
||||||
</div>
|
</div>
|
||||||
</template>
|
</template>
|
||||||
|
|
|
@ -5,7 +5,7 @@
|
||||||
</div>
|
</div>
|
||||||
<div class="value">
|
<div class="value">
|
||||||
<slot name="value"></slot>
|
<slot name="value"></slot>
|
||||||
<button v-if="copy" v-tooltip="i18n.ts.copy" class="_textButton" style="margin-left: 0.5em;" @click="copy_"><i class="ph-clipboard-text-bold"></i></button>
|
<button v-if="copy" v-tooltip="i18n.ts.copy" class="_textButton" style="margin-left: 0.5em;" @click="copy_"><i class="ph-clipboard-text ph-bold"></i></button>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</template>
|
</template>
|
||||||
|
|
|
@ -3,7 +3,7 @@
|
||||||
:title="url"
|
:title="url"
|
||||||
>
|
>
|
||||||
<slot></slot>
|
<slot></slot>
|
||||||
<i v-if="target === '_blank'" class="ph-arrow-square-out-bold ph-lg icon"></i>
|
<i v-if="target === '_blank'" class="ph-arrow-square-out ph-bold ph-lg icon"></i>
|
||||||
</component>
|
</component>
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
<template>
|
<template>
|
||||||
<div class="mk-media-banner">
|
<div class="mk-media-banner">
|
||||||
<div v-if="media.isSensitive && hide" class="sensitive" @click="hide = false">
|
<div v-if="media.isSensitive && hide" class="sensitive" @click="hide = false">
|
||||||
<span class="icon"><i class="ph-warning-bold ph-lg"></i></span>
|
<span class="icon"><i class="ph-warning ph-bold ph-lg"></i></span>
|
||||||
<b>{{ i18n.ts.sensitive }}</b>
|
<b>{{ i18n.ts.sensitive }}</b>
|
||||||
<span>{{ i18n.ts.clickToShow }}</span>
|
<span>{{ i18n.ts.clickToShow }}</span>
|
||||||
</div>
|
</div>
|
||||||
|
@ -37,7 +37,7 @@
|
||||||
:title="media.name"
|
:title="media.name"
|
||||||
:download="media.name"
|
:download="media.name"
|
||||||
>
|
>
|
||||||
<span class="icon"><i class="ph-download-simple-bold ph-lg"></i></span>
|
<span class="icon"><i class="ph-download-simple ph-bold ph-lg"></i></span>
|
||||||
<b>{{ media.name }}</b>
|
<b>{{ media.name }}</b>
|
||||||
</a>
|
</a>
|
||||||
</div>
|
</div>
|
||||||
|
|
|
@ -3,7 +3,7 @@
|
||||||
<ImgWithBlurhash class="bg" :hash="image.blurhash" :title="image.comment" :alt="image.comment"/>
|
<ImgWithBlurhash class="bg" :hash="image.blurhash" :title="image.comment" :alt="image.comment"/>
|
||||||
<div class="text">
|
<div class="text">
|
||||||
<div class="wrapper">
|
<div class="wrapper">
|
||||||
<b style="display: block;"><i class="ph-warning-bold ph-lg"></i> {{ i18n.ts.sensitive }}</b>
|
<b style="display: block;"><i class="ph-warning ph-bold ph-lg"></i> {{ i18n.ts.sensitive }}</b>
|
||||||
<span style="display: block;">{{ i18n.ts.clickToShow }}</span>
|
<span style="display: block;">{{ i18n.ts.clickToShow }}</span>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
@ -16,7 +16,7 @@
|
||||||
<ImgWithBlurhash :hash="image.blurhash" :src="url" :alt="image.comment" :type="image.type" :title="image.comment" :cover="false"/>
|
<ImgWithBlurhash :hash="image.blurhash" :src="url" :alt="image.comment" :type="image.type" :title="image.comment" :cover="false"/>
|
||||||
<div v-if="image.type === 'image/gif'" class="gif">GIF</div>
|
<div v-if="image.type === 'image/gif'" class="gif">GIF</div>
|
||||||
</a>
|
</a>
|
||||||
<button v-tooltip="i18n.ts.hide" class="_button hide" @click="hide = true"><i class="ph-eye-slash-bold ph-lg"></i></button>
|
<button v-tooltip="i18n.ts.hide" class="_button hide" @click="hide = true"><i class="ph-eye-slash ph-bold ph-lg"></i></button>
|
||||||
</div>
|
</div>
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
<template>
|
<template>
|
||||||
<div v-if="hide" class="icozogqfvdetwohsdglrbswgrejoxbdj" @click="hide = false">
|
<div v-if="hide" class="icozogqfvdetwohsdglrbswgrejoxbdj" @click="hide = false">
|
||||||
<div>
|
<div>
|
||||||
<b><i class="ph-warning-bold ph-lg"></i> {{ i18n.ts.sensitive }}</b>
|
<b><i class="ph-warning ph-bold ph-lg"></i> {{ i18n.ts.sensitive }}</b>
|
||||||
<span>{{ i18n.ts.clickToShow }}</span>
|
<span>{{ i18n.ts.clickToShow }}</span>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
@ -36,7 +36,7 @@
|
||||||
>
|
>
|
||||||
</video>
|
</video>
|
||||||
</VuePlyr>
|
</VuePlyr>
|
||||||
<i class="ph-eye-slash-bold ph-lg" @click="hide = true"></i>
|
<i class="ph-eye-slash ph-bold ph-lg" @click="hide = true"></i>
|
||||||
</div>
|
</div>
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
|
|
|
@ -36,7 +36,7 @@
|
||||||
<button v-else-if="item.type === 'parent'" :tabindex="i" class="_button item parent" :class="{ childShowing: childShowingItem === item }" @mouseenter="showChildren(item, $event)">
|
<button v-else-if="item.type === 'parent'" :tabindex="i" class="_button item parent" :class="{ childShowing: childShowingItem === item }" @mouseenter="showChildren(item, $event)">
|
||||||
<i v-if="item.icon" class="ph-fw ph-lg" :class="item.icon"></i>
|
<i v-if="item.icon" class="ph-fw ph-lg" :class="item.icon"></i>
|
||||||
<span>{{ item.text }}</span>
|
<span>{{ item.text }}</span>
|
||||||
<span class="caret"><i class="ph-caret-right-bold ph-lg ph-fw ph-lg"></i></span>
|
<span class="caret"><i class="ph-caret-right ph-bold ph-lg ph-fw ph-lg"></i></span>
|
||||||
</button>
|
</button>
|
||||||
<button v-else-if="!item.hidden" :tabindex="i" class="_button item" :class="{ danger: item.danger, active: item.active }" :disabled="item.active" @click="clicked(item.action, $event)" @mouseenter.passive="onItemMouseEnter(item)" @mouseleave.passive="onItemMouseLeave(item)">
|
<button v-else-if="!item.hidden" :tabindex="i" class="_button item" :class="{ danger: item.danger, active: item.active }" :disabled="item.active" @click="clicked(item.action, $event)" @mouseenter.passive="onItemMouseEnter(item)" @mouseleave.passive="onItemMouseLeave(item)">
|
||||||
<i v-if="item.icon" class="ph-fw ph-lg" :class="item.icon"></i>
|
<i v-if="item.icon" class="ph-fw ph-lg" :class="item.icon"></i>
|
||||||
|
|
|
@ -2,13 +2,13 @@
|
||||||
<MkModal ref="modal" @click="$emit('click')" @closed="$emit('closed')">
|
<MkModal ref="modal" @click="$emit('click')" @closed="$emit('closed')">
|
||||||
<div ref="rootEl" class="hrmcaedk _narrow_" :style="{ width: `${width}px`, height: (height ? `min(${height}px, 100%)` : '100%') }">
|
<div ref="rootEl" class="hrmcaedk _narrow_" :style="{ width: `${width}px`, height: (height ? `min(${height}px, 100%)` : '100%') }">
|
||||||
<div class="header" @contextmenu="onContextmenu">
|
<div class="header" @contextmenu="onContextmenu">
|
||||||
<button v-if="history.length > 0" v-tooltip="i18n.ts.goBack" class="_button" @click="back()"><i class="ph-caret-left-bold ph-lg"></i></button>
|
<button v-if="history.length > 0" v-tooltip="i18n.ts.goBack" class="_button" @click="back()"><i class="ph-caret-left ph-bold ph-lg"></i></button>
|
||||||
<span v-else style="display: inline-block; width: 20px"></span>
|
<span v-else style="display: inline-block; width: 20px"></span>
|
||||||
<span v-if="pageMetadata?.value" class="title">
|
<span v-if="pageMetadata?.value" class="title">
|
||||||
<i v-if="pageMetadata?.value.icon" class="icon" :class="pageMetadata?.value.icon"></i>
|
<i v-if="pageMetadata?.value.icon" class="icon" :class="pageMetadata?.value.icon"></i>
|
||||||
<span>{{ pageMetadata?.value.title }}</span>
|
<span>{{ pageMetadata?.value.title }}</span>
|
||||||
</span>
|
</span>
|
||||||
<button class="_button" @click="$refs.modal.close()"><i class="ph-x-bold ph-lg"></i></button>
|
<button class="_button" @click="$refs.modal.close()"><i class="ph-x ph-bold ph-lg"></i></button>
|
||||||
</div>
|
</div>
|
||||||
<div class="body">
|
<div class="body">
|
||||||
<MkStickyContainer>
|
<MkStickyContainer>
|
||||||
|
@ -68,22 +68,22 @@ const contextmenu = $computed(() => {
|
||||||
type: 'label',
|
type: 'label',
|
||||||
text: path,
|
text: path,
|
||||||
}, {
|
}, {
|
||||||
icon: 'ph-arrows-out-simple-bold ph-lg',
|
icon: 'ph-arrows-out-simple ph-bold ph-lg',
|
||||||
text: i18n.ts.showInPage,
|
text: i18n.ts.showInPage,
|
||||||
action: expand,
|
action: expand,
|
||||||
}, {
|
}, {
|
||||||
icon: 'ph-arrow-square-out-bold ph-lg',
|
icon: 'ph-arrow-square-out ph-bold ph-lg',
|
||||||
text: i18n.ts.popout,
|
text: i18n.ts.popout,
|
||||||
action: popout,
|
action: popout,
|
||||||
}, null, {
|
}, null, {
|
||||||
icon: 'ph-arrow-square-out-bold ph-lg',
|
icon: 'ph-arrow-square-out ph-bold ph-lg',
|
||||||
text: i18n.ts.openInNewTab,
|
text: i18n.ts.openInNewTab,
|
||||||
action: () => {
|
action: () => {
|
||||||
window.open(pageUrl, '_blank');
|
window.open(pageUrl, '_blank');
|
||||||
modal.close();
|
modal.close();
|
||||||
},
|
},
|
||||||
}, {
|
}, {
|
||||||
icon: 'ph-link-simple-bold ph-lg',
|
icon: 'ph-link-simple ph-bold ph-lg',
|
||||||
text: i18n.ts.copyLink,
|
text: i18n.ts.copyLink,
|
||||||
action: () => {
|
action: () => {
|
||||||
copyToClipboard(pageUrl);
|
copyToClipboard(pageUrl);
|
||||||
|
|
|
@ -2,12 +2,12 @@
|
||||||
<MkModal ref="modal" :prefer-type="'dialog'" @click="onBgClick" @closed="$emit('closed')">
|
<MkModal ref="modal" :prefer-type="'dialog'" @click="onBgClick" @closed="$emit('closed')">
|
||||||
<div ref="rootEl" class="ebkgoccj" :style="{ width: `${width}px`, height: scroll ? (height ? `${height}px` : null) : (height ? `min(${height}px, 100%)` : '100%') }" @keydown="onKeydown">
|
<div ref="rootEl" class="ebkgoccj" :style="{ width: `${width}px`, height: scroll ? (height ? `${height}px` : null) : (height ? `min(${height}px, 100%)` : '100%') }" @keydown="onKeydown">
|
||||||
<div ref="headerEl" class="header">
|
<div ref="headerEl" class="header">
|
||||||
<button v-if="withOkButton" class="_button" @click="$emit('close')"><i class="ph-x-bold ph-lg"></i></button>
|
<button v-if="withOkButton" class="_button" @click="$emit('close')"><i class="ph-x ph-bold ph-lg"></i></button>
|
||||||
<span class="title">
|
<span class="title">
|
||||||
<slot name="header"></slot>
|
<slot name="header"></slot>
|
||||||
</span>
|
</span>
|
||||||
<button v-if="!withOkButton" class="_button" @click="$emit('close')"><i class="ph-x-bold ph-lg"></i></button>
|
<button v-if="!withOkButton" class="_button" @click="$emit('close')"><i class="ph-x ph-bold ph-lg"></i></button>
|
||||||
<button v-if="withOkButton" class="_button" :disabled="okButtonDisabled" @click="$emit('ok')"><i class="ph-check-bold ph-lg"></i></button>
|
<button v-if="withOkButton" class="_button" :disabled="okButtonDisabled" @click="$emit('ok')"><i class="ph-check ph-bold ph-lg"></i></button>
|
||||||
</div>
|
</div>
|
||||||
<div class="body">
|
<div class="body">
|
||||||
<slot :width="bodyWidth" :height="bodyHeight"></slot>
|
<slot :width="bodyWidth" :height="bodyHeight"></slot>
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
<template>
|
<template>
|
||||||
<div class="msjugskd _block">
|
<div class="msjugskd _block">
|
||||||
<i class="ph-airplane-takeoff-bold ph-lg" style="margin-right: 8px;"/>
|
<i class="ph-airplane-takeoff ph-bold ph-lg" style="margin-right: 8px;"/>
|
||||||
{{ i18n.ts.accountMoved }}
|
{{ i18n.ts.accountMoved }}
|
||||||
<MkMention class="link" :username="acct" :host="host"/>
|
<MkMention class="link" :username="acct" :host="host"/>
|
||||||
</div>
|
</div>
|
||||||
|
|
|
@ -12,11 +12,11 @@
|
||||||
<MkNoteSub v-if="appearNote.reply" :note="appearNote.reply" class="reply-to"/>
|
<MkNoteSub v-if="appearNote.reply" :note="appearNote.reply" class="reply-to"/>
|
||||||
<div class="note-context">
|
<div class="note-context">
|
||||||
<div class="line"></div>
|
<div class="line"></div>
|
||||||
<div v-if="appearNote._prId_" class="info"><i class="ph-megaphone-simple-bold ph-lg"></i> {{ i18n.ts.promotion }}<button class="_textButton hide" @click="readPromo()">{{ i18n.ts.hideThisNote }} <i class="ph-x-bold ph-lg"></i></button></div>
|
<div v-if="appearNote._prId_" class="info"><i class="ph-megaphone-simple-bold ph-lg"></i> {{ i18n.ts.promotion }}<button class="_textButton hide" @click="readPromo()">{{ i18n.ts.hideThisNote }} <i class="ph-x ph-bold ph-lg"></i></button></div>
|
||||||
<div v-if="appearNote._featuredId_" class="info"><i class="ph-lightning-bold ph-lg"></i> {{ i18n.ts.featured }}</div>
|
<div v-if="appearNote._featuredId_" class="info"><i class="ph-lightning ph-bold ph-lg"></i> {{ i18n.ts.featured }}</div>
|
||||||
<div v-if="pinned" class="info"><i class="ph-push-pin-bold ph-lg"></i>{{ i18n.ts.pinnedNote }}</div>
|
<div v-if="pinned" class="info"><i class="ph-push-pin ph-bold ph-lg"></i>{{ i18n.ts.pinnedNote }}</div>
|
||||||
<div v-if="isRenote" class="renote">
|
<div v-if="isRenote" class="renote">
|
||||||
<i class="ph-repeat-bold ph-lg"></i>
|
<i class="ph-repeat ph-bold ph-lg"></i>
|
||||||
<I18n :src="i18n.ts.renotedBy" tag="span">
|
<I18n :src="i18n.ts.renotedBy" tag="span">
|
||||||
<template #user>
|
<template #user>
|
||||||
<MkA v-user-preview="note.userId" class="name" :to="userPage(note.user)">
|
<MkA v-user-preview="note.userId" class="name" :to="userPage(note.user)">
|
||||||
|
@ -26,7 +26,7 @@
|
||||||
</I18n>
|
</I18n>
|
||||||
<div class="info">
|
<div class="info">
|
||||||
<button ref="renoteTime" class="_button time" @click="showRenoteMenu()">
|
<button ref="renoteTime" class="_button time" @click="showRenoteMenu()">
|
||||||
<i v-if="isMyRenote" class="ph-dots-three-outline-bold ph-lg dropdownIcon"></i>
|
<i v-if="isMyRenote" class="ph-dots-three-outline ph-bold ph-lg dropdownIcon"></i>
|
||||||
<MkTime :time="note.createdAt"/>
|
<MkTime :time="note.createdAt"/>
|
||||||
</button>
|
</button>
|
||||||
<MkVisibility :note="note"/>
|
<MkVisibility :note="note"/>
|
||||||
|
@ -69,26 +69,26 @@
|
||||||
<span>{{ i18n.ts.showLess }}</span>
|
<span>{{ i18n.ts.showLess }}</span>
|
||||||
</button>
|
</button>
|
||||||
</div>
|
</div>
|
||||||
<MkA v-if="appearNote.channel && !inChannel" class="channel" :to="`/channels/${appearNote.channel.id}`"><i class="ph-television-bold ph-lg"></i> {{ appearNote.channel.name }}</MkA>
|
<MkA v-if="appearNote.channel && !inChannel" class="channel" :to="`/channels/${appearNote.channel.id}`"><i class="ph-television ph-bold ph-lg"></i> {{ appearNote.channel.name }}</MkA>
|
||||||
</div>
|
</div>
|
||||||
<footer class="footer">
|
<footer class="footer">
|
||||||
<XReactionsViewer ref="reactionsViewer" :note="appearNote"/>
|
<XReactionsViewer ref="reactionsViewer" :note="appearNote"/>
|
||||||
<button v-tooltip.noDelay.bottom="i18n.ts.reply" class="button _button" @click="reply()">
|
<button v-tooltip.noDelay.bottom="i18n.ts.reply" class="button _button" @click="reply()">
|
||||||
<template v-if="appearNote.reply"><i class="ph-arrow-u-up-left-bold ph-lg"></i></template>
|
<template v-if="appearNote.reply"><i class="ph-arrow-u-up-left ph-bold ph-lg"></i></template>
|
||||||
<template v-else><i class="ph-arrow-bend-up-left-bold ph-lg"></i></template>
|
<template v-else><i class="ph-arrow-bend-up-left ph-bold ph-lg"></i></template>
|
||||||
<p v-if="appearNote.repliesCount > 0" class="count">{{ appearNote.repliesCount }}</p>
|
<p v-if="appearNote.repliesCount > 0" class="count">{{ appearNote.repliesCount }}</p>
|
||||||
</button>
|
</button>
|
||||||
<XRenoteButton ref="renoteButton" class="button" :note="appearNote" :count="appearNote.renoteCount"/>
|
<XRenoteButton ref="renoteButton" class="button" :note="appearNote" :count="appearNote.renoteCount"/>
|
||||||
<XStarButton v-if="appearNote.myReaction == null" ref="starButton" class="button" :note="appearNote"/>
|
<XStarButton v-if="appearNote.myReaction == null" ref="starButton" class="button" :note="appearNote"/>
|
||||||
<button v-if="appearNote.myReaction == null" ref="reactButton" v-tooltip.noDelay.bottom="i18n.ts.reaction" class="button _button" @click="react()">
|
<button v-if="appearNote.myReaction == null" ref="reactButton" v-tooltip.noDelay.bottom="i18n.ts.reaction" class="button _button" @click="react()">
|
||||||
<i class="ph-smiley-bold ph-lg"></i>
|
<i class="ph-smiley ph-bold ph-lg"></i>
|
||||||
</button>
|
</button>
|
||||||
<button v-if="appearNote.myReaction != null" ref="reactButton" class="button _button reacted" @click="undoReact(appearNote)">
|
<button v-if="appearNote.myReaction != null" ref="reactButton" class="button _button reacted" @click="undoReact(appearNote)">
|
||||||
<i class="ph-minus-bold ph-lg"></i>
|
<i class="ph-minus ph-bold ph-lg"></i>
|
||||||
</button>
|
</button>
|
||||||
<XQuoteButton class="button" :note="appearNote"/>
|
<XQuoteButton class="button" :note="appearNote"/>
|
||||||
<button ref="menuButton" v-tooltip.noDelay.bottom="i18n.ts.more" class="button _button" @click="menu()">
|
<button ref="menuButton" v-tooltip.noDelay.bottom="i18n.ts.more" class="button _button" @click="menu()">
|
||||||
<i class="ph-dots-three-outline-bold ph-lg"></i>
|
<i class="ph-dots-three-outline ph-bold ph-lg"></i>
|
||||||
</button>
|
</button>
|
||||||
</footer>
|
</footer>
|
||||||
</div>
|
</div>
|
||||||
|
@ -267,7 +267,7 @@ function showRenoteMenu(viaKeyboard = false): void {
|
||||||
if (!isMyRenote) return;
|
if (!isMyRenote) return;
|
||||||
os.popupMenu([{
|
os.popupMenu([{
|
||||||
text: i18n.ts.unrenote,
|
text: i18n.ts.unrenote,
|
||||||
icon: 'ph-trash-bold ph-lg',
|
icon: 'ph-trash ph-bold ph-lg',
|
||||||
danger: true,
|
danger: true,
|
||||||
action: () => {
|
action: () => {
|
||||||
os.api('notes/delete', {
|
os.api('notes/delete', {
|
||||||
|
|
|
@ -13,7 +13,7 @@
|
||||||
<MkNoteSub v-if="appearNote.reply" :note="appearNote.reply" class="reply-to" @click.self="router.push(notePage(appearNote))"/>
|
<MkNoteSub v-if="appearNote.reply" :note="appearNote.reply" class="reply-to" @click.self="router.push(notePage(appearNote))"/>
|
||||||
<div v-if="isRenote" class="renote">
|
<div v-if="isRenote" class="renote">
|
||||||
<MkAvatar class="avatar" :user="note.user"/>
|
<MkAvatar class="avatar" :user="note.user"/>
|
||||||
<i class="ph-repeat-bold ph-lg"></i>
|
<i class="ph-repeat ph-bold ph-lg"></i>
|
||||||
<I18n :src="i18n.ts.renotedBy" tag="span">
|
<I18n :src="i18n.ts.renotedBy" tag="span">
|
||||||
<template #user>
|
<template #user>
|
||||||
<MkA v-user-preview="note.userId" class="name" :to="userPage(note.user)">
|
<MkA v-user-preview="note.userId" class="name" :to="userPage(note.user)">
|
||||||
|
@ -23,7 +23,7 @@
|
||||||
</I18n>
|
</I18n>
|
||||||
<div class="info">
|
<div class="info">
|
||||||
<button ref="renoteTime" class="_button time" @click="showRenoteMenu()">
|
<button ref="renoteTime" class="_button time" @click="showRenoteMenu()">
|
||||||
<i v-if="isMyRenote" class="ph-dots-three-outline-bold ph-lg dropdownIcon"></i>
|
<i v-if="isMyRenote" class="ph-dots-three-outline ph-bold ph-lg dropdownIcon"></i>
|
||||||
<MkTime :time="note.createdAt"/>
|
<MkTime :time="note.createdAt"/>
|
||||||
</button>
|
</button>
|
||||||
<MkVisibility :note="note"/>
|
<MkVisibility :note="note"/>
|
||||||
|
@ -70,7 +70,7 @@
|
||||||
<MkUrlPreview v-for="url in urls" :key="url" :url="url" :compact="true" :detail="true" class="url-preview"/>
|
<MkUrlPreview v-for="url in urls" :key="url" :url="url" :compact="true" :detail="true" class="url-preview"/>
|
||||||
<div v-if="appearNote.renote" class="renote"><XNoteSimple :note="appearNote.renote"/></div>
|
<div v-if="appearNote.renote" class="renote"><XNoteSimple :note="appearNote.renote"/></div>
|
||||||
</div>
|
</div>
|
||||||
<MkA v-if="appearNote.channel && !inChannel" class="channel" :to="`/channels/${appearNote.channel.id}`"><i class="ph-television-bold ph-lg"></i> {{ appearNote.channel.name }}</MkA>
|
<MkA v-if="appearNote.channel && !inChannel" class="channel" :to="`/channels/${appearNote.channel.id}`"><i class="ph-television ph-bold ph-lg"></i> {{ appearNote.channel.name }}</MkA>
|
||||||
</div>
|
</div>
|
||||||
<footer class="footer">
|
<footer class="footer">
|
||||||
<div class="info">
|
<div class="info">
|
||||||
|
@ -80,21 +80,21 @@
|
||||||
</div>
|
</div>
|
||||||
<XReactionsViewer ref="reactionsViewer" :note="appearNote"/>
|
<XReactionsViewer ref="reactionsViewer" :note="appearNote"/>
|
||||||
<button v-tooltip.noDelay.bottom="i18n.ts.reply" class="button _button" @click="reply()">
|
<button v-tooltip.noDelay.bottom="i18n.ts.reply" class="button _button" @click="reply()">
|
||||||
<template v-if="appearNote.reply"><i class="ph-arrow-u-up-left-bold ph-lg"></i></template>
|
<template v-if="appearNote.reply"><i class="ph-arrow-u-up-left ph-bold ph-lg"></i></template>
|
||||||
<template v-else><i class="ph-arrow-bend-up-left-bold ph-lg"></i></template>
|
<template v-else><i class="ph-arrow-bend-up-left ph-bold ph-lg"></i></template>
|
||||||
<p v-if="appearNote.repliesCount > 0" class="count">{{ appearNote.repliesCount }}</p>
|
<p v-if="appearNote.repliesCount > 0" class="count">{{ appearNote.repliesCount }}</p>
|
||||||
</button>
|
</button>
|
||||||
<XRenoteButton ref="renoteButton" class="button" :note="appearNote" :count="appearNote.renoteCount"/>
|
<XRenoteButton ref="renoteButton" class="button" :note="appearNote" :count="appearNote.renoteCount"/>
|
||||||
<XStarButton v-if="appearNote.myReaction == null" ref="starButton" class="button" :note="appearNote"/>
|
<XStarButton v-if="appearNote.myReaction == null" ref="starButton" class="button" :note="appearNote"/>
|
||||||
<button v-if="appearNote.myReaction == null" ref="reactButton" v-tooltip.noDelay.bottom="i18n.ts.reaction" class="button _button" @click="react()">
|
<button v-if="appearNote.myReaction == null" ref="reactButton" v-tooltip.noDelay.bottom="i18n.ts.reaction" class="button _button" @click="react()">
|
||||||
<i class="ph-smiley-bold ph-lg"></i>
|
<i class="ph-smiley ph-bold ph-lg"></i>
|
||||||
</button>
|
</button>
|
||||||
<button v-if="appearNote.myReaction != null" ref="reactButton" class="button _button reacted" @click="undoReact(appearNote)">
|
<button v-if="appearNote.myReaction != null" ref="reactButton" class="button _button reacted" @click="undoReact(appearNote)">
|
||||||
<i class="ph-minus-bold ph-lg"></i>
|
<i class="ph-minus ph-bold ph-lg"></i>
|
||||||
</button>
|
</button>
|
||||||
<XQuoteButton class="button" :note="appearNote"/>
|
<XQuoteButton class="button" :note="appearNote"/>
|
||||||
<button ref="menuButton" v-tooltip.noDelay.bottom="i18n.ts.more" class="button _button" @click="menu()">
|
<button ref="menuButton" v-tooltip.noDelay.bottom="i18n.ts.more" class="button _button" @click="menu()">
|
||||||
<i class="ph-dots-three-outline-bold ph-lg"></i>
|
<i class="ph-dots-three-outline ph-bold ph-lg"></i>
|
||||||
</button>
|
</button>
|
||||||
</footer>
|
</footer>
|
||||||
</div>
|
</div>
|
||||||
|
@ -267,7 +267,7 @@ function showRenoteMenu(viaKeyboard = false): void {
|
||||||
if (!isMyRenote) return;
|
if (!isMyRenote) return;
|
||||||
os.popupMenu([{
|
os.popupMenu([{
|
||||||
text: i18n.ts.unrenote,
|
text: i18n.ts.unrenote,
|
||||||
icon: 'ph-trash-bold ph-lg',
|
icon: 'ph-trash ph-bold ph-lg',
|
||||||
danger: true,
|
danger: true,
|
||||||
action: () => {
|
action: () => {
|
||||||
os.api('notes/delete', {
|
os.api('notes/delete', {
|
||||||
|
|
|
@ -23,7 +23,7 @@
|
||||||
<MkNoteSub v-for="reply in replies" :key="reply.id" :note="reply" class="reply" :conversation="conversation" :depth="depth + 1"/>
|
<MkNoteSub v-for="reply in replies" :key="reply.id" :note="reply" class="reply" :conversation="conversation" :depth="depth + 1"/>
|
||||||
</template>
|
</template>
|
||||||
<div v-else-if="replies.length > 0" class="more">
|
<div v-else-if="replies.length > 0" class="more">
|
||||||
<MkA class="text _link" :to="notePage(note)">{{ i18n.ts.continueThread }} <i class="ph-caret-double-right-bold ph-lg"></i></MkA>
|
<MkA class="text _link" :to="notePage(note)">{{ i18n.ts.continueThread }} <i class="ph-caret-double-right ph-bold ph-lg"></i></MkA>
|
||||||
</div>
|
</div>
|
||||||
</template>
|
</template>
|
||||||
</div>
|
</div>
|
||||||
|
|
|
@ -5,16 +5,16 @@
|
||||||
<MkAvatar v-else-if="notification.user" class="icon" :user="notification.user"/>
|
<MkAvatar v-else-if="notification.user" class="icon" :user="notification.user"/>
|
||||||
<img v-else-if="notification.icon" class="icon" :src="notification.icon" alt=""/>
|
<img v-else-if="notification.icon" class="icon" :src="notification.icon" alt=""/>
|
||||||
<div class="sub-icon" :class="notification.type">
|
<div class="sub-icon" :class="notification.type">
|
||||||
<i v-if="notification.type === 'follow'" class="ph-hand-waving-bold"></i>
|
<i v-if="notification.type === 'follow'" class="ph-hand-waving ph-bold"></i>
|
||||||
<i v-else-if="notification.type === 'receiveFollowRequest'" class="ph-clock-bold"></i>
|
<i v-else-if="notification.type === 'receiveFollowRequest'" class="ph-clock ph-bold"></i>
|
||||||
<i v-else-if="notification.type === 'followRequestAccepted'" class="ph-check-bold"></i>
|
<i v-else-if="notification.type === 'followRequestAccepted'" class="ph-check ph-bold"></i>
|
||||||
<i v-else-if="notification.type === 'groupInvited'" class="ph-identification-card-bold"></i>
|
<i v-else-if="notification.type === 'groupInvited'" class="ph-identification-card ph-bold"></i>
|
||||||
<i v-else-if="notification.type === 'renote'" class="ph-repeat-bold"></i>
|
<i v-else-if="notification.type === 'renote'" class="ph-repeat ph-bold"></i>
|
||||||
<i v-else-if="notification.type === 'reply'" class="ph-arrow-bend-up-left-bold"></i>
|
<i v-else-if="notification.type === 'reply'" class="ph-arrow-bend-up-left ph-bold"></i>
|
||||||
<i v-else-if="notification.type === 'mention'" class="ph-at-bold"></i>
|
<i v-else-if="notification.type === 'mention'" class="ph-at ph-bold"></i>
|
||||||
<i v-else-if="notification.type === 'quote'" class="ph-quotes-bold"></i>
|
<i v-else-if="notification.type === 'quote'" class="ph-quotes ph-bold"></i>
|
||||||
<i v-else-if="notification.type === 'pollVote'" class="ph-microphone-stage-bold"></i>
|
<i v-else-if="notification.type === 'pollVote'" class="ph-microphone-stage ph-bold"></i>
|
||||||
<i v-else-if="notification.type === 'pollEnded'" class="ph-microphone-stage-bold"></i>
|
<i v-else-if="notification.type === 'pollEnded'" class="ph-microphone-stage ph-bold"></i>
|
||||||
<!-- notification.reaction が null になることはまずないが、ここでoptional chaining使うと一部ブラウザで刺さるので念の為 -->
|
<!-- notification.reaction が null になることはまずないが、ここでoptional chaining使うと一部ブラウザで刺さるので念の為 -->
|
||||||
<XReactionIcon
|
<XReactionIcon
|
||||||
v-else-if="notification.type === 'reaction'"
|
v-else-if="notification.type === 'reaction'"
|
||||||
|
|
|
@ -57,7 +57,7 @@ const buttonsLeft = $computed(() => {
|
||||||
|
|
||||||
if (history.length > 1) {
|
if (history.length > 1) {
|
||||||
buttons.push({
|
buttons.push({
|
||||||
icon: 'ph-caret-left-bold ph-lg',
|
icon: 'ph-caret-left ph-bold ph-lg',
|
||||||
onClick: back,
|
onClick: back,
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
@ -66,7 +66,7 @@ const buttonsLeft = $computed(() => {
|
||||||
});
|
});
|
||||||
const buttonsRight = $computed(() => {
|
const buttonsRight = $computed(() => {
|
||||||
const buttons = [{
|
const buttons = [{
|
||||||
icon: 'ph-arrows-out-simple-bold ph-lg',
|
icon: 'ph-arrows-out-simple ph-bold ph-lg',
|
||||||
title: i18n.ts.showInPage,
|
title: i18n.ts.showInPage,
|
||||||
onClick: expand,
|
onClick: expand,
|
||||||
}];
|
}];
|
||||||
|
@ -86,22 +86,22 @@ provide('shouldOmitHeaderTitle', true);
|
||||||
provide('shouldHeaderThin', true);
|
provide('shouldHeaderThin', true);
|
||||||
|
|
||||||
const contextmenu = $computed(() => ([{
|
const contextmenu = $computed(() => ([{
|
||||||
icon: 'ph-arrows-out-simple-bold ph-lg',
|
icon: 'ph-arrows-out-simple ph-bold ph-lg',
|
||||||
text: i18n.ts.showInPage,
|
text: i18n.ts.showInPage,
|
||||||
action: expand,
|
action: expand,
|
||||||
}, {
|
}, {
|
||||||
icon: 'ph-arrow-square-out-bold ph-lg',
|
icon: 'ph-arrow-square-out ph-bold ph-lg',
|
||||||
text: i18n.ts.popout,
|
text: i18n.ts.popout,
|
||||||
action: popout,
|
action: popout,
|
||||||
}, {
|
}, {
|
||||||
icon: 'ph-arrow-square-out-bold ph-lg',
|
icon: 'ph-arrow-square-out ph-bold ph-lg',
|
||||||
text: i18n.ts.openInNewTab,
|
text: i18n.ts.openInNewTab,
|
||||||
action: () => {
|
action: () => {
|
||||||
window.open(url + router.getCurrentPath(), '_blank');
|
window.open(url + router.getCurrentPath(), '_blank');
|
||||||
windowEl.close();
|
windowEl.close();
|
||||||
},
|
},
|
||||||
}, {
|
}, {
|
||||||
icon: 'ph-link-simple-bold ph-lg',
|
icon: 'ph-link-simple ph-bold ph-lg',
|
||||||
text: i18n.ts.copyLink,
|
text: i18n.ts.copyLink,
|
||||||
action: () => {
|
action: () => {
|
||||||
copyToClipboard(url + router.getCurrentPath());
|
copyToClipboard(url + router.getCurrentPath());
|
||||||
|
|
|
@ -4,7 +4,7 @@
|
||||||
<li v-for="(choice, i) in note.poll.choices" :key="i" :class="{ voted: choice.voted }" @click="vote(i)">
|
<li v-for="(choice, i) in note.poll.choices" :key="i" :class="{ voted: choice.voted }" @click="vote(i)">
|
||||||
<div class="backdrop" :style="{ 'width': `${showResult ? (choice.votes / total * 100) : 0}%` }"></div>
|
<div class="backdrop" :style="{ 'width': `${showResult ? (choice.votes / total * 100) : 0}%` }"></div>
|
||||||
<span>
|
<span>
|
||||||
<template v-if="choice.isVoted"><i class="ph-check-bold ph-lg"></i></template>
|
<template v-if="choice.isVoted"><i class="ph-check ph-bold ph-lg"></i></template>
|
||||||
<Mfm :text="choice.text" :plain="true" :custom-emojis="note.emojis"/>
|
<Mfm :text="choice.text" :plain="true" :custom-emojis="note.emojis"/>
|
||||||
<span v-if="showResult" class="votes">({{ i18n.t('_poll.votesCount', { n: choice.votes }) }})</span>
|
<span v-if="showResult" class="votes">({{ i18n.t('_poll.votesCount', { n: choice.votes }) }})</span>
|
||||||
</span>
|
</span>
|
||||||
|
|
|
@ -1,14 +1,14 @@
|
||||||
<template>
|
<template>
|
||||||
<div class="zmdxowus">
|
<div class="zmdxowus">
|
||||||
<p v-if="choices.length < 2" class="caution">
|
<p v-if="choices.length < 2" class="caution">
|
||||||
<i class="ph-warning-bold ph-lg"></i>{{ i18n.ts._poll.noOnlyOneChoice }}
|
<i class="ph-warning ph-bold ph-lg"></i>{{ i18n.ts._poll.noOnlyOneChoice }}
|
||||||
</p>
|
</p>
|
||||||
<ul>
|
<ul>
|
||||||
<li v-for="(choice, i) in choices" :key="i">
|
<li v-for="(choice, i) in choices" :key="i">
|
||||||
<MkInput class="input" small :model-value="choice" :placeholder="i18n.t('_poll.choiceN', { n: i + 1 })" @update:modelValue="onInput(i, $event)">
|
<MkInput class="input" small :model-value="choice" :placeholder="i18n.t('_poll.choiceN', { n: i + 1 })" @update:modelValue="onInput(i, $event)">
|
||||||
</MkInput>
|
</MkInput>
|
||||||
<button class="_button" @click="remove(i)">
|
<button class="_button" @click="remove(i)">
|
||||||
<i class="ph-x-bold ph-lg"></i>
|
<i class="ph-x ph-bold ph-lg"></i>
|
||||||
</button>
|
</button>
|
||||||
</li>
|
</li>
|
||||||
</ul>
|
</ul>
|
||||||
|
|
|
@ -8,35 +8,35 @@
|
||||||
@drop.stop="onDrop"
|
@drop.stop="onDrop"
|
||||||
>
|
>
|
||||||
<header>
|
<header>
|
||||||
<button v-if="!fixed" class="cancel _button" @click="cancel"><i class="ph-x-bold ph-lg"></i></button>
|
<button v-if="!fixed" class="cancel _button" @click="cancel"><i class="ph-x ph-bold ph-lg"></i></button>
|
||||||
<button v-click-anime v-tooltip="i18n.ts.switchAccount" class="account _button" @click="openAccountMenu">
|
<button v-click-anime v-tooltip="i18n.ts.switchAccount" class="account _button" @click="openAccountMenu">
|
||||||
<MkAvatar :user="postAccount ?? $i" class="avatar"/>
|
<MkAvatar :user="postAccount ?? $i" class="avatar"/>
|
||||||
</button>
|
</button>
|
||||||
<div class="right">
|
<div class="right">
|
||||||
<span class="text-count" :class="{ over: textLength > maxTextLength }">{{ maxTextLength - textLength }}</span>
|
<span class="text-count" :class="{ over: textLength > maxTextLength }">{{ maxTextLength - textLength }}</span>
|
||||||
<span v-if="localOnly" class="local-only"><i class="ph-hand-fist-bold ph-lg"></i></span>
|
<span v-if="localOnly" class="local-only"><i class="ph-hand-fist ph-bold ph-lg"></i></span>
|
||||||
<button ref="visibilityButton" v-tooltip="i18n.ts.visibility" class="_button visibility" :disabled="channel != null" @click="setVisibility">
|
<button ref="visibilityButton" v-tooltip="i18n.ts.visibility" class="_button visibility" :disabled="channel != null" @click="setVisibility">
|
||||||
<span v-if="visibility === 'public'"><i class="ph-planet-bold ph-lg"></i></span>
|
<span v-if="visibility === 'public'"><i class="ph-planet ph-bold ph-lg"></i></span>
|
||||||
<span v-if="visibility === 'home'"><i class="ph-house-bold ph-lg"></i></span>
|
<span v-if="visibility === 'home'"><i class="ph-house ph-bold ph-lg"></i></span>
|
||||||
<span v-if="visibility === 'followers'"><i class="ph-lock-simple-open-bold ph-lg"></i></span>
|
<span v-if="visibility === 'followers'"><i class="ph-lock-simple-open ph-bold ph-lg"></i></span>
|
||||||
<span v-if="visibility === 'specified'"><i class="ph-envelope-simple-open-bold ph-lg"></i></span>
|
<span v-if="visibility === 'specified'"><i class="ph-envelope-simple-open ph-bold ph-lg"></i></span>
|
||||||
</button>
|
</button>
|
||||||
<button v-tooltip="i18n.ts.previewNoteText" class="_button preview" :class="{ active: showPreview }" @click="showPreview = !showPreview"><i class="ph-file-code-bold ph-lg"></i></button>
|
<button v-tooltip="i18n.ts.previewNoteText" class="_button preview" :class="{ active: showPreview }" @click="showPreview = !showPreview"><i class="ph-file-code ph-bold ph-lg"></i></button>
|
||||||
<button class="submit _buttonGradate" :disabled="!canPost" data-cy-open-post-form-submit @click="post">{{ submitText }}<i :class="reply ? 'ph-arrow-bend-up-left-bold ph-lg' : renote ? 'ph-quotes-bold ph-lg' : 'ph-paper-plane-tilt-bold ph-lg'"></i></button>
|
<button class="submit _buttonGradate" :disabled="!canPost" data-cy-open-post-form-submit @click="post">{{ submitText }}<i :class="reply ? 'ph-arrow-bend-up-left-bold ph-lg' : renote ? 'ph-quotes-bold ph-lg' : 'ph-paper-plane-tilt ph-bold ph-lg'"></i></button>
|
||||||
</div>
|
</div>
|
||||||
</header>
|
</header>
|
||||||
<div class="form" :class="{ fixed }">
|
<div class="form" :class="{ fixed }">
|
||||||
<XNoteSimple v-if="reply" class="preview" :note="reply"/>
|
<XNoteSimple v-if="reply" class="preview" :note="reply"/>
|
||||||
<XNoteSimple v-if="renote" class="preview" :note="renote"/>
|
<XNoteSimple v-if="renote" class="preview" :note="renote"/>
|
||||||
<div v-if="quoteId" class="with-quote"><i class="ph-quotes-bold ph-lg"></i> {{ i18n.ts.quoteAttached }}<button @click="quoteId = null"><i class="ph-x-bold ph-lg"></i></button></div>
|
<div v-if="quoteId" class="with-quote"><i class="ph-quotes-bold ph-lg"></i> {{ i18n.ts.quoteAttached }}<button @click="quoteId = null"><i class="ph-x ph-bold ph-lg"></i></button></div>
|
||||||
<div v-if="visibility === 'specified'" class="to-specified">
|
<div v-if="visibility === 'specified'" class="to-specified">
|
||||||
<span style="margin-right: 8px;">{{ i18n.ts.recipient }}</span>
|
<span style="margin-right: 8px;">{{ i18n.ts.recipient }}</span>
|
||||||
<div class="visibleUsers">
|
<div class="visibleUsers">
|
||||||
<span v-for="u in visibleUsers" :key="u.id">
|
<span v-for="u in visibleUsers" :key="u.id">
|
||||||
<MkAcct :user="u"/>
|
<MkAcct :user="u"/>
|
||||||
<button class="_button" @click="removeVisibleUser(u)"><i class="ph-x-bold ph-lg"></i></button>
|
<button class="_button" @click="removeVisibleUser(u)"><i class="ph-x ph-bold ph-lg"></i></button>
|
||||||
</span>
|
</span>
|
||||||
<button class="_button" @click="addVisibleUser"><i class="ph-plus-bold ph-md ph-fw ph-lg"></i></button>
|
<button class="_button" @click="addVisibleUser"><i class="ph-plus ph-bold ph-md ph-fw ph-lg"></i></button>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<MkInfo v-if="hasNotSpecifiedMentions" warn class="hasNotSpecifiedMentions">{{ i18n.ts.notSpecifiedMentionWarning }} - <button class="_textButton" @click="addMissingMention()">{{ i18n.ts.add }}</button></MkInfo>
|
<MkInfo v-if="hasNotSpecifiedMentions" warn class="hasNotSpecifiedMentions">{{ i18n.ts.notSpecifiedMentionWarning }} - <button class="_textButton" @click="addMissingMention()">{{ i18n.ts.add }}</button></MkInfo>
|
||||||
|
@ -47,14 +47,14 @@
|
||||||
<XPollEditor v-if="poll" v-model="poll" @destroyed="poll = null"/>
|
<XPollEditor v-if="poll" v-model="poll" @destroyed="poll = null"/>
|
||||||
<XNotePreview v-if="showPreview" class="preview" :text="text"/>
|
<XNotePreview v-if="showPreview" class="preview" :text="text"/>
|
||||||
<footer>
|
<footer>
|
||||||
<button v-tooltip="i18n.ts.attachFile" class="_button" @click="chooseFileFrom"><i class="ph-upload-bold ph-lg"></i></button>
|
<button v-tooltip="i18n.ts.attachFile" class="_button" @click="chooseFileFrom"><i class="ph-upload ph-bold ph-lg"></i></button>
|
||||||
<button v-tooltip="i18n.ts.poll" class="_button" :class="{ active: poll }" @click="togglePoll"><i class="ph-microphone-stage-bold ph-lg"></i></button>
|
<button v-tooltip="i18n.ts.poll" class="_button" :class="{ active: poll }" @click="togglePoll"><i class="ph-microphone-stage ph-bold ph-lg"></i></button>
|
||||||
<button v-tooltip="i18n.ts.useCw" class="_button" :class="{ active: useCw }" @click="useCw = !useCw"><i class="ph-eye-slash-bold ph-lg"></i></button>
|
<button v-tooltip="i18n.ts.useCw" class="_button" :class="{ active: useCw }" @click="useCw = !useCw"><i class="ph-eye-slash ph-bold ph-lg"></i></button>
|
||||||
<button v-tooltip="i18n.ts.mention" class="_button" @click="insertMention"><i class="ph-at-bold ph-lg"></i></button>
|
<button v-tooltip="i18n.ts.mention" class="_button" @click="insertMention"><i class="ph-at ph-bold ph-lg"></i></button>
|
||||||
<button v-tooltip="i18n.ts.hashtags" class="_button" :class="{ active: withHashtags }" @click="withHashtags = !withHashtags"><i class="ph-hash-bold ph-lg"></i></button>
|
<button v-tooltip="i18n.ts.hashtags" class="_button" :class="{ active: withHashtags }" @click="withHashtags = !withHashtags"><i class="ph-hash ph-bold ph-lg"></i></button>
|
||||||
<button v-tooltip="i18n.ts.emoji" class="_button" @click="insertEmoji"><i class="ph-smiley-bold ph-lg"></i></button>
|
<button v-tooltip="i18n.ts.emoji" class="_button" @click="insertEmoji"><i class="ph-smiley ph-bold ph-lg"></i></button>
|
||||||
<button v-if="postFormActions.length > 0" v-tooltip="i18n.ts.plugin" class="_button" @click="showActions"><i class="ph-plug-bold ph-lg"></i></button>
|
<button v-if="postFormActions.length > 0" v-tooltip="i18n.ts.plugin" class="_button" @click="showActions"><i class="ph-plug ph-bold ph-lg"></i></button>
|
||||||
<button v-tooltip="i18n.ts._mfm.cheatSheet" class="_button right" @click="openCheatSheet"><i class="ph-question-bold ph-lg"></i></button>
|
<button v-tooltip="i18n.ts._mfm.cheatSheet" class="_button right" @click="openCheatSheet"><i class="ph-question ph-bold ph-lg"></i></button>
|
||||||
</footer>
|
</footer>
|
||||||
<datalist id="hashtags">
|
<datalist id="hashtags">
|
||||||
<option v-for="hashtag in recentHashtags" :key="hashtag" :value="hashtag"/>
|
<option v-for="hashtag in recentHashtags" :key="hashtag" :value="hashtag"/>
|
||||||
|
|
|
@ -5,7 +5,7 @@
|
||||||
<div class="file" @click="showFileMenu(element, $event)" @contextmenu.prevent="showFileMenu(element, $event)">
|
<div class="file" @click="showFileMenu(element, $event)" @contextmenu.prevent="showFileMenu(element, $event)">
|
||||||
<MkDriveFileThumbnail :data-id="element.id" class="thumbnail" :file="element" fit="cover"/>
|
<MkDriveFileThumbnail :data-id="element.id" class="thumbnail" :file="element" fit="cover"/>
|
||||||
<div v-if="element.isSensitive" class="sensitive">
|
<div v-if="element.isSensitive" class="sensitive">
|
||||||
<i class="ph-warning-bold ph-lg icon"></i>
|
<i class="ph-warning ph-bold ph-lg icon"></i>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</template>
|
</template>
|
||||||
|
@ -115,19 +115,19 @@ export default defineComponent({
|
||||||
if (this.menu) return;
|
if (this.menu) return;
|
||||||
this.menu = os.popupMenu([{
|
this.menu = os.popupMenu([{
|
||||||
text: i18n.ts.renameFile,
|
text: i18n.ts.renameFile,
|
||||||
icon: 'ph-cursor-text-bold ph-lg',
|
icon: 'ph-cursor-text ph-bold ph-lg',
|
||||||
action: () => { this.rename(file); },
|
action: () => { this.rename(file); },
|
||||||
}, {
|
}, {
|
||||||
text: file.isSensitive ? i18n.ts.unmarkAsSensitive : i18n.ts.markAsSensitive,
|
text: file.isSensitive ? i18n.ts.unmarkAsSensitive : i18n.ts.markAsSensitive,
|
||||||
icon: file.isSensitive ? 'ph-eye-slash-bold ph-lg' : 'ph-eye-bold ph-lg',
|
icon: file.isSensitive ? 'ph-eye-slash-bold ph-lg' : 'ph-eye ph-bold ph-lg',
|
||||||
action: () => { this.toggleSensitive(file); },
|
action: () => { this.toggleSensitive(file); },
|
||||||
}, {
|
}, {
|
||||||
text: i18n.ts.describeFile,
|
text: i18n.ts.describeFile,
|
||||||
icon: 'ph-cursor-text-bold ph-lg',
|
icon: 'ph-cursor-text ph-bold ph-lg',
|
||||||
action: () => { this.describe(file); },
|
action: () => { this.describe(file); },
|
||||||
}, {
|
}, {
|
||||||
text: i18n.ts.attachCancel,
|
text: i18n.ts.attachCancel,
|
||||||
icon: 'ph-circle-wavy-warning-bold ph-lg',
|
icon: 'ph-circle-wavy-warning ph-bold ph-lg',
|
||||||
action: () => { this.detachMedia(file.id); },
|
action: () => { this.detachMedia(file.id); },
|
||||||
}], ev.currentTarget ?? ev.target).then(() => this.menu = null);
|
}], ev.currentTarget ?? ev.target).then(() => this.menu = null);
|
||||||
},
|
},
|
||||||
|
|
|
@ -5,7 +5,7 @@
|
||||||
class="eddddedb _button"
|
class="eddddedb _button"
|
||||||
@click="quote()"
|
@click="quote()"
|
||||||
>
|
>
|
||||||
<i class="ph-quotes-bold ph-lg"></i>
|
<i class="ph-quotes ph-bold ph-lg"></i>
|
||||||
</button>
|
</button>
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
|
|
|
@ -6,11 +6,11 @@
|
||||||
class="eddddedb _button canRenote"
|
class="eddddedb _button canRenote"
|
||||||
@click="renote(false, $event)"
|
@click="renote(false, $event)"
|
||||||
>
|
>
|
||||||
<i class="ph-repeat-bold ph-lg"></i>
|
<i class="ph-repeat ph-bold ph-lg"></i>
|
||||||
<p v-if="count > 0" class="count">{{ count }}</p>
|
<p v-if="count > 0" class="count">{{ count }}</p>
|
||||||
</button>
|
</button>
|
||||||
<button v-else class="eddddedb _button">
|
<button v-else class="eddddedb _button">
|
||||||
<i class="ph-prohibit-bold ph-lg"></i>
|
<i class="ph-prohibit ph-bold ph-lg"></i>
|
||||||
</button>
|
</button>
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
|
@ -66,7 +66,7 @@ const renote = async (viaKeyboard = false, ev?: MouseEvent) => {
|
||||||
|
|
||||||
let buttonActions = [{
|
let buttonActions = [{
|
||||||
text: i18n.ts.renote,
|
text: i18n.ts.renote,
|
||||||
icon: 'ph-repeat-bold ph-lg',
|
icon: 'ph-repeat ph-bold ph-lg',
|
||||||
danger: false,
|
danger: false,
|
||||||
action: () => {
|
action: () => {
|
||||||
os.api('notes/create', {
|
os.api('notes/create', {
|
||||||
|
@ -86,7 +86,7 @@ const renote = async (viaKeyboard = false, ev?: MouseEvent) => {
|
||||||
if (!defaultStore.state.seperateRenoteQuote) {
|
if (!defaultStore.state.seperateRenoteQuote) {
|
||||||
buttonActions.push({
|
buttonActions.push({
|
||||||
text: i18n.ts.quote,
|
text: i18n.ts.quote,
|
||||||
icon: 'ph-quotes-bold ph-lg',
|
icon: 'ph-quotes ph-bold ph-lg',
|
||||||
danger: false,
|
danger: false,
|
||||||
action: () => {
|
action: () => {
|
||||||
os.post({
|
os.post({
|
||||||
|
@ -99,7 +99,7 @@ const renote = async (viaKeyboard = false, ev?: MouseEvent) => {
|
||||||
if (hasRenotedBefore) {
|
if (hasRenotedBefore) {
|
||||||
buttonActions.push({
|
buttonActions.push({
|
||||||
text: i18n.ts.unrenote,
|
text: i18n.ts.unrenote,
|
||||||
icon: 'ph-trash-bold ph-lg',
|
icon: 'ph-trash ph-bold ph-lg',
|
||||||
danger: true,
|
danger: true,
|
||||||
action: () => {
|
action: () => {
|
||||||
os.api('notes/unrenote', {
|
os.api('notes/unrenote', {
|
||||||
|
|
|
@ -11,7 +11,7 @@
|
||||||
<template #suffix>@{{ host }}</template>
|
<template #suffix>@{{ host }}</template>
|
||||||
</MkInput>
|
</MkInput>
|
||||||
<MkInput v-if="!user || user && !user.usePasswordLessLogin" v-model="password" class="_formBlock" :placeholder="i18n.ts.password" type="password" :with-password-toggle="true" required data-cy-signin-password>
|
<MkInput v-if="!user || user && !user.usePasswordLessLogin" v-model="password" class="_formBlock" :placeholder="i18n.ts.password" type="password" :with-password-toggle="true" required data-cy-signin-password>
|
||||||
<template #prefix><i class="ph-lock-bold ph-lg"></i></template>
|
<template #prefix><i class="ph-lock ph-bold ph-lg"></i></template>
|
||||||
<template #caption><button class="_textButton" type="button" @click="resetPassword">{{ i18n.ts.forgotPassword }}</button></template>
|
<template #caption><button class="_textButton" type="button" @click="resetPassword">{{ i18n.ts.forgotPassword }}</button></template>
|
||||||
</MkInput>
|
</MkInput>
|
||||||
<MkButton class="_formBlock" type="submit" primary :disabled="signing" style="margin: 0 auto;">{{ signing ? i18n.ts.loggingIn : i18n.ts.login }}</MkButton>
|
<MkButton class="_formBlock" type="submit" primary :disabled="signing" style="margin: 0 auto;">{{ signing ? i18n.ts.loggingIn : i18n.ts.login }}</MkButton>
|
||||||
|
@ -30,20 +30,20 @@
|
||||||
<p style="margin-bottom:0;">{{ i18n.ts.twoStepAuthentication }}</p>
|
<p style="margin-bottom:0;">{{ i18n.ts.twoStepAuthentication }}</p>
|
||||||
<MkInput v-if="user && user.usePasswordLessLogin" v-model="password" type="password" :with-password-toggle="true" required>
|
<MkInput v-if="user && user.usePasswordLessLogin" v-model="password" type="password" :with-password-toggle="true" required>
|
||||||
<template #label>{{ i18n.ts.password }}</template>
|
<template #label>{{ i18n.ts.password }}</template>
|
||||||
<template #prefix><i class="ph-lock-bold ph-lg"></i></template>
|
<template #prefix><i class="ph-lock ph-bold ph-lg"></i></template>
|
||||||
</MkInput>
|
</MkInput>
|
||||||
<MkInput v-model="token" type="text" pattern="^[0-9]{6}$" autocomplete="off" :spellcheck="false" required>
|
<MkInput v-model="token" type="text" pattern="^[0-9]{6}$" autocomplete="off" :spellcheck="false" required>
|
||||||
<template #label>{{ i18n.ts.token }}</template>
|
<template #label>{{ i18n.ts.token }}</template>
|
||||||
<template #prefix><i class="ph-poker-chip-bold ph-lg"></i></template>
|
<template #prefix><i class="ph-poker-chip ph-bold ph-lg"></i></template>
|
||||||
</MkInput>
|
</MkInput>
|
||||||
<MkButton type="submit" :disabled="signing" primary style="margin: 0 auto;">{{ signing ? i18n.ts.loggingIn : i18n.ts.login }}</MkButton>
|
<MkButton type="submit" :disabled="signing" primary style="margin: 0 auto;">{{ signing ? i18n.ts.loggingIn : i18n.ts.login }}</MkButton>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="social _section">
|
<div class="social _section">
|
||||||
<a v-if="meta && meta.enableTwitterIntegration" class="_borderButton _gap" :href="`${apiUrl}/signin/twitter`"><i class="ph-twitter-logo-bold ph-lg" style="margin-right: 4px;"></i>{{ i18n.t('signinWith', { x: 'Twitter' }) }}</a>
|
<a v-if="meta && meta.enableTwitterIntegration" class="_borderButton _gap" :href="`${apiUrl}/signin/twitter`"><i class="ph-twitter-logo ph-bold ph-lg" style="margin-right: 4px;"></i>{{ i18n.t('signinWith', { x: 'Twitter' }) }}</a>
|
||||||
<a v-if="meta && meta.enableGithubIntegration" class="_borderButton _gap" :href="`${apiUrl}/signin/github`"><i class="ph-github-logo-bold ph-lg" style="margin-right: 4px;"></i>{{ i18n.t('signinWith', { x: 'GitHub' }) }}</a>
|
<a v-if="meta && meta.enableGithubIntegration" class="_borderButton _gap" :href="`${apiUrl}/signin/github`"><i class="ph-github-logo ph-bold ph-lg" style="margin-right: 4px;"></i>{{ i18n.t('signinWith', { x: 'GitHub' }) }}</a>
|
||||||
<a v-if="meta && meta.enableDiscordIntegration" class="_borderButton _gap" :href="`${apiUrl}/signin/discord`"><i class="ph-discord-logo-bold ph-lg" style="margin-right: 4px;"></i>{{ i18n.t('signinWith', { x: 'Discord' }) }}</a>
|
<a v-if="meta && meta.enableDiscordIntegration" class="_borderButton _gap" :href="`${apiUrl}/signin/discord`"><i class="ph-discord-logo ph-bold ph-lg" style="margin-right: 4px;"></i>{{ i18n.t('signinWith', { x: 'Discord' }) }}</a>
|
||||||
</div>
|
</div>
|
||||||
</form>
|
</form>
|
||||||
</template>
|
</template>
|
||||||
|
|
|
@ -2,53 +2,53 @@
|
||||||
<form class="qlvuhzng _formRoot" autocomplete="new-password" @submit.prevent="onSubmit">
|
<form class="qlvuhzng _formRoot" autocomplete="new-password" @submit.prevent="onSubmit">
|
||||||
<MkInput v-if="instance.disableRegistration" v-model="invitationCode" class="_formBlock" type="text" :spellcheck="false" required data-cy-signup-invitation-code @update:modelValue="onChangeInvitationCode">
|
<MkInput v-if="instance.disableRegistration" v-model="invitationCode" class="_formBlock" type="text" :spellcheck="false" required data-cy-signup-invitation-code @update:modelValue="onChangeInvitationCode">
|
||||||
<template #label>{{ i18n.ts.invitationCode }}</template>
|
<template #label>{{ i18n.ts.invitationCode }}</template>
|
||||||
<template #prefix><i class="ph-key-bold ph-lg"></i></template>
|
<template #prefix><i class="ph-key ph-bold ph-lg"></i></template>
|
||||||
</MkInput>
|
</MkInput>
|
||||||
<div v-if="!instance.disableRegistration || (instance.disableRegistration && invitationState === 'entered')">
|
<div v-if="!instance.disableRegistration || (instance.disableRegistration && invitationState === 'entered')">
|
||||||
<MkInput v-model="username" class="_formBlock" type="text" pattern="^[a-zA-Z0-9_]{1,20}$" :spellcheck="false" required data-cy-signup-username @update:modelValue="onChangeUsername">
|
<MkInput v-model="username" class="_formBlock" type="text" pattern="^[a-zA-Z0-9_]{1,20}$" :spellcheck="false" required data-cy-signup-username @update:modelValue="onChangeUsername">
|
||||||
<template #label>{{ i18n.ts.username }} <div v-tooltip:dialog="i18n.ts.usernameInfo" class="_button _help"><i class="ph-question-bold"></i></div></template>
|
<template #label>{{ i18n.ts.username }} <div v-tooltip:dialog="i18n.ts.usernameInfo" class="_button _help"><i class="ph-question ph-bold"></i></div></template>
|
||||||
<template #prefix>@</template>
|
<template #prefix>@</template>
|
||||||
<template #suffix>@{{ host }}</template>
|
<template #suffix>@{{ host }}</template>
|
||||||
<template #caption>
|
<template #caption>
|
||||||
<span v-if="usernameState === 'wait'" style="color:#6e6a86"><i class="ph-circle-notch-bold ph-lg fa-pulse ph-fw ph-lg"></i> {{ i18n.ts.checking }}</span>
|
<span v-if="usernameState === 'wait'" style="color:#6e6a86"><i class="ph-circle-notch ph-bold ph-lg fa-pulse ph-fw ph-lg"></i> {{ i18n.ts.checking }}</span>
|
||||||
<span v-else-if="usernameState === 'ok'" style="color: var(--success)"><i class="ph-check-bold ph-lg ph-fw ph-lg"></i> {{ i18n.ts.available }}</span>
|
<span v-else-if="usernameState === 'ok'" style="color: var(--success)"><i class="ph-check ph-bold ph-lg ph-fw ph-lg"></i> {{ i18n.ts.available }}</span>
|
||||||
<span v-else-if="usernameState === 'unavailable'" style="color: var(--error)"><i class="ph-warning-bold ph-lg ph-fw ph-lg"></i> {{ i18n.ts.unavailable }}</span>
|
<span v-else-if="usernameState === 'unavailable'" style="color: var(--error)"><i class="ph-warning ph-bold ph-lg ph-fw ph-lg"></i> {{ i18n.ts.unavailable }}</span>
|
||||||
<span v-else-if="usernameState === 'error'" style="color: var(--error)"><i class="ph-warning-bold ph-lg ph-fw ph-lg"></i> {{ i18n.ts.error }}</span>
|
<span v-else-if="usernameState === 'error'" style="color: var(--error)"><i class="ph-warning ph-bold ph-lg ph-fw ph-lg"></i> {{ i18n.ts.error }}</span>
|
||||||
<span v-else-if="usernameState === 'invalid-format'" style="color: var(--error)"><i class="ph-warning-bold ph-lg ph-fw ph-lg"></i> {{ i18n.ts.usernameInvalidFormat }}</span>
|
<span v-else-if="usernameState === 'invalid-format'" style="color: var(--error)"><i class="ph-warning ph-bold ph-lg ph-fw ph-lg"></i> {{ i18n.ts.usernameInvalidFormat }}</span>
|
||||||
<span v-else-if="usernameState === 'min-range'" style="color: var(--error)"><i class="ph-warning-bold ph-lg ph-fw ph-lg"></i> {{ i18n.ts.tooShort }}</span>
|
<span v-else-if="usernameState === 'min-range'" style="color: var(--error)"><i class="ph-warning ph-bold ph-lg ph-fw ph-lg"></i> {{ i18n.ts.tooShort }}</span>
|
||||||
<span v-else-if="usernameState === 'max-range'" style="color: var(--error)"><i class="ph-warning-bold ph-lg ph-fw ph-lg"></i> {{ i18n.ts.tooLong }}</span>
|
<span v-else-if="usernameState === 'max-range'" style="color: var(--error)"><i class="ph-warning ph-bold ph-lg ph-fw ph-lg"></i> {{ i18n.ts.tooLong }}</span>
|
||||||
</template>
|
</template>
|
||||||
</MkInput>
|
</MkInput>
|
||||||
<MkInput v-if="instance.emailRequiredForSignup" v-model="email" class="_formBlock" :debounce="true" type="email" :spellcheck="false" required data-cy-signup-email @update:modelValue="onChangeEmail">
|
<MkInput v-if="instance.emailRequiredForSignup" v-model="email" class="_formBlock" :debounce="true" type="email" :spellcheck="false" required data-cy-signup-email @update:modelValue="onChangeEmail">
|
||||||
<template #label>{{ i18n.ts.emailAddress }} <div v-tooltip:dialog="i18n.ts._signup.emailAddressInfo" class="_button _help"><i class="ph-question-bold"></i></div></template>
|
<template #label>{{ i18n.ts.emailAddress }} <div v-tooltip:dialog="i18n.ts._signup.emailAddressInfo" class="_button _help"><i class="ph-question ph-bold"></i></div></template>
|
||||||
<template #prefix><i class="ph-envelope-simple-open-bold ph-lg"></i></template>
|
<template #prefix><i class="ph-envelope-simple-open ph-bold ph-lg"></i></template>
|
||||||
<template #caption>
|
<template #caption>
|
||||||
<span v-if="emailState === 'wait'" style="color:#6e6a86"><i class="ph-circle-notch-bold ph-lg fa-pulse ph-fw ph-lg"></i> {{ i18n.ts.checking }}</span>
|
<span v-if="emailState === 'wait'" style="color:#6e6a86"><i class="ph-circle-notch ph-bold ph-lg fa-pulse ph-fw ph-lg"></i> {{ i18n.ts.checking }}</span>
|
||||||
<span v-else-if="emailState === 'ok'" style="color: var(--success)"><i class="ph-check-bold ph-lg ph-fw ph-lg"></i> {{ i18n.ts.available }}</span>
|
<span v-else-if="emailState === 'ok'" style="color: var(--success)"><i class="ph-check ph-bold ph-lg ph-fw ph-lg"></i> {{ i18n.ts.available }}</span>
|
||||||
<span v-else-if="emailState === 'unavailable:used'" style="color: var(--error)"><i class="ph-warning-bold ph-lg ph-fw ph-lg"></i> {{ i18n.ts._emailUnavailable.used }}</span>
|
<span v-else-if="emailState === 'unavailable:used'" style="color: var(--error)"><i class="ph-warning ph-bold ph-lg ph-fw ph-lg"></i> {{ i18n.ts._emailUnavailable.used }}</span>
|
||||||
<span v-else-if="emailState === 'unavailable:format'" style="color: var(--error)"><i class="ph-warning-bold ph-lg ph-fw ph-lg"></i> {{ i18n.ts._emailUnavailable.format }}</span>
|
<span v-else-if="emailState === 'unavailable:format'" style="color: var(--error)"><i class="ph-warning ph-bold ph-lg ph-fw ph-lg"></i> {{ i18n.ts._emailUnavailable.format }}</span>
|
||||||
<span v-else-if="emailState === 'unavailable:disposable'" style="color: var(--error)"><i class="ph-warning-bold ph-lg ph-fw ph-lg"></i> {{ i18n.ts._emailUnavailable.disposable }}</span>
|
<span v-else-if="emailState === 'unavailable:disposable'" style="color: var(--error)"><i class="ph-warning ph-bold ph-lg ph-fw ph-lg"></i> {{ i18n.ts._emailUnavailable.disposable }}</span>
|
||||||
<span v-else-if="emailState === 'unavailable:mx'" style="color: var(--error)"><i class="ph-warning-bold ph-lg ph-fw ph-lg"></i> {{ i18n.ts._emailUnavailable.mx }}</span>
|
<span v-else-if="emailState === 'unavailable:mx'" style="color: var(--error)"><i class="ph-warning ph-bold ph-lg ph-fw ph-lg"></i> {{ i18n.ts._emailUnavailable.mx }}</span>
|
||||||
<span v-else-if="emailState === 'unavailable:smtp'" style="color: var(--error)"><i class="ph-warning-bold ph-lg ph-fw ph-lg"></i> {{ i18n.ts._emailUnavailable.smtp }}</span>
|
<span v-else-if="emailState === 'unavailable:smtp'" style="color: var(--error)"><i class="ph-warning ph-bold ph-lg ph-fw ph-lg"></i> {{ i18n.ts._emailUnavailable.smtp }}</span>
|
||||||
<span v-else-if="emailState === 'unavailable'" style="color: var(--error)"><i class="ph-warning-bold ph-lg ph-fw ph-lg"></i> {{ i18n.ts.unavailable }}</span>
|
<span v-else-if="emailState === 'unavailable'" style="color: var(--error)"><i class="ph-warning ph-bold ph-lg ph-fw ph-lg"></i> {{ i18n.ts.unavailable }}</span>
|
||||||
<span v-else-if="emailState === 'error'" style="color: var(--error)"><i class="ph-warning-bold ph-lg ph-fw ph-lg"></i> {{ i18n.ts.error }}</span>
|
<span v-else-if="emailState === 'error'" style="color: var(--error)"><i class="ph-warning ph-bold ph-lg ph-fw ph-lg"></i> {{ i18n.ts.error }}</span>
|
||||||
</template>
|
</template>
|
||||||
</MkInput>
|
</MkInput>
|
||||||
<MkInput v-model="password" class="_formBlock" type="password" autocomplete="new-password" required data-cy-signup-password @update:modelValue="onChangePassword">
|
<MkInput v-model="password" class="_formBlock" type="password" autocomplete="new-password" required data-cy-signup-password @update:modelValue="onChangePassword">
|
||||||
<template #label>{{ i18n.ts.password }}</template>
|
<template #label>{{ i18n.ts.password }}</template>
|
||||||
<template #prefix><i class="ph-lock-bold ph-lg"></i></template>
|
<template #prefix><i class="ph-lock ph-bold ph-lg"></i></template>
|
||||||
<template #caption>
|
<template #caption>
|
||||||
<span v-if="passwordStrength == 'low'" style="color: var(--error)"><i class="ph-warning-bold ph-lg ph-fw ph-lg"></i> {{ i18n.ts.weakPassword }}</span>
|
<span v-if="passwordStrength == 'low'" style="color: var(--error)"><i class="ph-warning ph-bold ph-lg ph-fw ph-lg"></i> {{ i18n.ts.weakPassword }}</span>
|
||||||
<span v-if="passwordStrength == 'medium'" style="color: var(--warn)"><i class="ph-check-bold ph-lg ph-fw ph-lg"></i> {{ i18n.ts.normalPassword }}</span>
|
<span v-if="passwordStrength == 'medium'" style="color: var(--warn)"><i class="ph-check ph-bold ph-lg ph-fw ph-lg"></i> {{ i18n.ts.normalPassword }}</span>
|
||||||
<span v-if="passwordStrength == 'high'" style="color: var(--success)"><i class="ph-check-bold ph-lg ph-fw ph-lg"></i> {{ i18n.ts.strongPassword }}</span>
|
<span v-if="passwordStrength == 'high'" style="color: var(--success)"><i class="ph-check ph-bold ph-lg ph-fw ph-lg"></i> {{ i18n.ts.strongPassword }}</span>
|
||||||
</template>
|
</template>
|
||||||
</MkInput>
|
</MkInput>
|
||||||
<MkInput v-model="retypedPassword" class="_formBlock" type="password" autocomplete="new-password" required data-cy-signup-password-retype @update:modelValue="onChangePasswordRetype">
|
<MkInput v-model="retypedPassword" class="_formBlock" type="password" autocomplete="new-password" required data-cy-signup-password-retype @update:modelValue="onChangePasswordRetype">
|
||||||
<template #label>{{ i18n.ts.password }} ({{ i18n.ts.retype }})</template>
|
<template #label>{{ i18n.ts.password }} ({{ i18n.ts.retype }})</template>
|
||||||
<template #prefix><i class="ph-lock-bold ph-lg"></i></template>
|
<template #prefix><i class="ph-lock ph-bold ph-lg"></i></template>
|
||||||
<template #caption>
|
<template #caption>
|
||||||
<span v-if="passwordRetypeState == 'match'" style="color: var(--success)"><i class="ph-check-bold ph-lg ph-fw ph-lg"></i> {{ i18n.ts.passwordMatched }}</span>
|
<span v-if="passwordRetypeState == 'match'" style="color: var(--success)"><i class="ph-check ph-bold ph-lg ph-fw ph-lg"></i> {{ i18n.ts.passwordMatched }}</span>
|
||||||
<span v-if="passwordRetypeState == 'not-match'" style="color: var(--error)"><i class="ph-warning-bold ph-lg ph-fw ph-lg"></i> {{ i18n.ts.passwordNotMatched }}</span>
|
<span v-if="passwordRetypeState == 'not-match'" style="color: var(--error)"><i class="ph-warning ph-bold ph-lg ph-fw ph-lg"></i> {{ i18n.ts.passwordNotMatched }}</span>
|
||||||
</template>
|
</template>
|
||||||
</MkInput>
|
</MkInput>
|
||||||
<MkSwitch v-if="instance.tosUrl" v-model="ToSAgreement" class="_formBlock tou">
|
<MkSwitch v-if="instance.tosUrl" v-model="ToSAgreement" class="_formBlock tou">
|
||||||
|
|
|
@ -6,9 +6,9 @@
|
||||||
<path d="m23.186 29.526c-0.993 0-1.952-0.455-2.788-1.339-2.816-2.985-3.569-2.333-4.817-1.251-0.781 0.679-1.754 1.523-3.205 1.523-2.351 0-3.969-2.302-4.036-2.4-0.314-0.454-0.2-1.077 0.254-1.391 0.451-0.312 1.074-0.2 1.39 0.251 0.301 0.429 1.317 1.54 2.393 1.54 0.704 0 1.256-0.479 1.895-1.033 1.816-1.578 3.764-2.655 7.583 1.388 0.823 0.873 1.452 0.774 1.908 0.592 1.659-0.665 3.205-3.698 3.197-5.15-3e-3 -0.552 0.442-1.002 0.994-1.005h6e-3c0.55 0 0.997 0.444 1 0.995 0.012 2.103-1.854 5.976-4.454 7.017-0.443 0.175-0.885 0.262-1.32 0.263z"/>
|
<path d="m23.186 29.526c-0.993 0-1.952-0.455-2.788-1.339-2.816-2.985-3.569-2.333-4.817-1.251-0.781 0.679-1.754 1.523-3.205 1.523-2.351 0-3.969-2.302-4.036-2.4-0.314-0.454-0.2-1.077 0.254-1.391 0.451-0.312 1.074-0.2 1.39 0.251 0.301 0.429 1.317 1.54 2.393 1.54 0.704 0 1.256-0.479 1.895-1.033 1.816-1.578 3.764-2.655 7.583 1.388 0.823 0.873 1.452 0.774 1.908 0.592 1.659-0.665 3.205-3.698 3.197-5.15-3e-3 -0.552 0.442-1.002 0.994-1.005h6e-3c0.55 0 0.997 0.444 1 0.995 0.012 2.103-1.854 5.976-4.454 7.017-0.443 0.175-0.885 0.262-1.32 0.263z"/>
|
||||||
<path d="m14.815 15.375c-0.584 2.114-1.642 3.083-3.152 2.666-1.509-0.417-2.343-1.909-1.76-4.023 0.583-2.112 2.175-3.363 3.684-2.946 1.511 0.417 1.812 2.19 1.228 4.303zm11.416-0.755c0.473 2.141-0.675 4.838-2.204 5.176s-3.28-1.719-3.753-3.86c-0.473-2.14 0.419-3.971 1.948-4.309s3.536 0.853 4.009 2.993z"/>
|
<path d="m14.815 15.375c-0.584 2.114-1.642 3.083-3.152 2.666-1.509-0.417-2.343-1.909-1.76-4.023 0.583-2.112 2.175-3.363 3.684-2.946 1.511 0.417 1.812 2.19 1.228 4.303zm11.416-0.755c0.473 2.141-0.675 4.838-2.204 5.176s-3.28-1.719-3.753-3.86c-0.473-2.14 0.419-3.971 1.948-4.309s3.536 0.853 4.009 2.993z"/>
|
||||||
</g></svg>
|
</g></svg>
|
||||||
<i v-else-if="instance.defaultReaction === '👍'" class="ph-thumbs-up-bold ph-lg"></i>
|
<i v-else-if="instance.defaultReaction === '👍'" class="ph-thumbs-up ph-bold ph-lg"></i>
|
||||||
<i v-else-if="instance.defaultReaction === '❤️'" class="ph-heart-bold ph-lg"></i>
|
<i v-else-if="instance.defaultReaction === '❤️'" class="ph-heart ph-bold ph-lg"></i>
|
||||||
<i v-else class="ph-star-bold ph-lg"></i>
|
<i v-else class="ph-star ph-bold ph-lg"></i>
|
||||||
</button>
|
</button>
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
|
|
|
@ -2,7 +2,7 @@
|
||||||
<div class="wrmlmaau" :class="{ collapsed, isLong }">
|
<div class="wrmlmaau" :class="{ collapsed, isLong }">
|
||||||
<div class="body">
|
<div class="body">
|
||||||
<span v-if="note.deletedAt" style="opacity: 0.5">({{ i18n.ts.deleted }})</span>
|
<span v-if="note.deletedAt" style="opacity: 0.5">({{ i18n.ts.deleted }})</span>
|
||||||
<MkA v-if="note.replyId" class="reply" :to="`/notes/${note.replyId}`"><i class="ph-arrow-bend-up-left-bold ph-lg"></i></MkA>
|
<MkA v-if="note.replyId" class="reply" :to="`/notes/${note.replyId}`"><i class="ph-arrow-bend-up-left ph-bold ph-lg"></i></MkA>
|
||||||
<Mfm v-if="note.text" :text="note.text" :author="note.user" :i="$i" :custom-emojis="note.emojis"/>
|
<Mfm v-if="note.text" :text="note.text" :author="note.user" :i="$i" :custom-emojis="note.emojis"/>
|
||||||
<MkA v-if="note.renoteId" class="rp" :to="`/notes/${note.renoteId}`">{{ i18n.ts.quoteAttached }}: ...</MkA>
|
<MkA v-if="note.renoteId" class="rp" :to="`/notes/${note.renoteId}`">{{ i18n.ts.quoteAttached }}: ...</MkA>
|
||||||
</div>
|
</div>
|
||||||
|
|
|
@ -13,17 +13,17 @@
|
||||||
<div class="_footer navigation">
|
<div class="_footer navigation">
|
||||||
<div class="step">
|
<div class="step">
|
||||||
<button class="arrow _button" :disabled="tutorial === 0" @click="tutorial--">
|
<button class="arrow _button" :disabled="tutorial === 0" @click="tutorial--">
|
||||||
<i class="ph-caret-left-bold ph-lg"></i>
|
<i class="ph-caret-left ph-bold ph-lg"></i>
|
||||||
</button>
|
</button>
|
||||||
<span>{{ tutorial + 1 }} / 6</span>
|
<span>{{ tutorial + 1 }} / 6</span>
|
||||||
<button class="arrow _button" :disabled="tutorial === 5" @click="tutorial++">
|
<button class="arrow _button" :disabled="tutorial === 5" @click="tutorial++">
|
||||||
<i class="ph-caret-right-bold ph-lg"></i>
|
<i class="ph-caret-right ph-bold ph-lg"></i>
|
||||||
</button>
|
</button>
|
||||||
</div>
|
</div>
|
||||||
<MkButton v-if="tutorial === 5" class="ok" primary @click="close"><i class="ph-check-bold ph-lg"></i> {{ i18n.ts.gotIt }}</MkButton>
|
<MkButton v-if="tutorial === 5" class="ok" primary @click="close"><i class="ph-check ph-bold ph-lg"></i> {{ i18n.ts.gotIt }}</MkButton>
|
||||||
<MkButton v-else class="ok" primary @click="tutorial++"><i class="ph-check-bold ph-lg"></i> {{ i18n.ts.next }}</MkButton>
|
<MkButton v-else class="ok" primary @click="tutorial++"><i class="ph-check ph-bold ph-lg"></i> {{ i18n.ts.next }}</MkButton>
|
||||||
</div>
|
</div>
|
||||||
<h2 class="_title title"><i class="ph-info-bold ph-lg"></i> {{ i18n.ts._tutorial.title }}</h2>
|
<h2 class="_title title"><i class="ph-info ph-bold ph-lg"></i> {{ i18n.ts._tutorial.title }}</h2>
|
||||||
<Transition name="fade">
|
<Transition name="fade">
|
||||||
<div v-if="tutorial === 0" key="1" class="_content">
|
<div v-if="tutorial === 0" key="1" class="_content">
|
||||||
<h3>{{ i18n.ts._tutorial.step1_1 }}</h3>
|
<h3>{{ i18n.ts._tutorial.step1_1 }}</h3>
|
||||||
|
@ -41,7 +41,7 @@
|
||||||
<div>{{ i18n.ts._tutorial.step3_2 }}</div>
|
<div>{{ i18n.ts._tutorial.step3_2 }}</div>
|
||||||
<XFeaturedUsers/>
|
<XFeaturedUsers/>
|
||||||
<br/>
|
<br/>
|
||||||
<MkButton class="ok" primary @click="tutorial++"><i class="ph-check-bold ph-lg"></i> {{ i18n.ts.next }}</MkButton>
|
<MkButton class="ok" primary @click="tutorial++"><i class="ph-check ph-bold ph-lg"></i> {{ i18n.ts.next }}</MkButton>
|
||||||
</div>
|
</div>
|
||||||
<div v-else-if="tutorial === 3" key="4" class="_content">
|
<div v-else-if="tutorial === 3" key="4" class="_content">
|
||||||
<h3>{{ i18n.ts._tutorial.step4_1 }}</h3>
|
<h3>{{ i18n.ts._tutorial.step4_1 }}</h3>
|
||||||
|
@ -64,35 +64,35 @@
|
||||||
<li>
|
<li>
|
||||||
<I18n :src="i18n.ts._tutorial.step5_3" tag="div">
|
<I18n :src="i18n.ts._tutorial.step5_3" tag="div">
|
||||||
<template #icon>
|
<template #icon>
|
||||||
<i class="ph-house-bold ph-lg"/>
|
<i class="ph-house ph-bold ph-lg"/>
|
||||||
</template>
|
</template>
|
||||||
</I18n>
|
</I18n>
|
||||||
</li>
|
</li>
|
||||||
<li v-if="timelines.includes('local')">
|
<li v-if="timelines.includes('local')">
|
||||||
<I18n :src="i18n.ts._tutorial.step5_4" tag="div">
|
<I18n :src="i18n.ts._tutorial.step5_4" tag="div">
|
||||||
<template #icon>
|
<template #icon>
|
||||||
<i class="ph-users-bold ph-lg"/>
|
<i class="ph-users ph-bold ph-lg"/>
|
||||||
</template>
|
</template>
|
||||||
</I18n>
|
</I18n>
|
||||||
</li>
|
</li>
|
||||||
<li v-if="timelines.includes('recommended')">
|
<li v-if="timelines.includes('recommended')">
|
||||||
<I18n :src="i18n.ts._tutorial.step5_5" tag="div">
|
<I18n :src="i18n.ts._tutorial.step5_5" tag="div">
|
||||||
<template #icon>
|
<template #icon>
|
||||||
<i class="ph-thumbs-up-bold ph-lg"/>
|
<i class="ph-thumbs-up ph-bold ph-lg"/>
|
||||||
</template>
|
</template>
|
||||||
</I18n>
|
</I18n>
|
||||||
</li>
|
</li>
|
||||||
<li v-if="timelines.includes('social')">
|
<li v-if="timelines.includes('social')">
|
||||||
<I18n :src="i18n.ts._tutorial.step5_6" tag="div">
|
<I18n :src="i18n.ts._tutorial.step5_6" tag="div">
|
||||||
<template #icon>
|
<template #icon>
|
||||||
<i class="ph-handshake-bold ph-lg"/>
|
<i class="ph-handshake ph-bold ph-lg"/>
|
||||||
</template>
|
</template>
|
||||||
</I18n>
|
</I18n>
|
||||||
</li>
|
</li>
|
||||||
<li v-if="timelines.includes('global')">
|
<li v-if="timelines.includes('global')">
|
||||||
<I18n :src="i18n.ts._tutorial.step5_7" tag="div">
|
<I18n :src="i18n.ts._tutorial.step5_7" tag="div">
|
||||||
<template #icon>
|
<template #icon>
|
||||||
<i class="ph-planet-bold ph-lg"/>
|
<i class="ph-planet ph-bold ph-lg"/>
|
||||||
</template>
|
</template>
|
||||||
</I18n>
|
</I18n>
|
||||||
</li>
|
</li>
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
<template>
|
<template>
|
||||||
<div v-if="playerEnabled" class="player" :style="`padding: ${(player.height || 0) / (player.width || 1) * 100}% 0 0`">
|
<div v-if="playerEnabled" class="player" :style="`padding: ${(player.height || 0) / (player.width || 1) * 100}% 0 0`">
|
||||||
<button class="disablePlayer" :title="i18n.ts.disablePlayer" @click="playerEnabled = false"><i class="ph-x-bold ph-lg"></i></button>
|
<button class="disablePlayer" :title="i18n.ts.disablePlayer" @click="playerEnabled = false"><i class="ph-x ph-bold ph-lg"></i></button>
|
||||||
<iframe :src="player.url + (player.url.match(/\?/) ? '&autoplay=1&auto_play=1' : '?autoplay=1&auto_play=1')" :width="player.width || '100%'" :heigth="player.height || 250" frameborder="0" allow="autoplay; encrypted-media" allowfullscreen/>
|
<iframe :src="player.url + (player.url.match(/\?/) ? '&autoplay=1&auto_play=1' : '?autoplay=1&auto_play=1')" :width="player.width || '100%'" :heigth="player.height || 250" frameborder="0" allow="autoplay; encrypted-media" allowfullscreen/>
|
||||||
</div>
|
</div>
|
||||||
<div v-else-if="tweetId && tweetExpanded" ref="twitter" class="twitter">
|
<div v-else-if="tweetId && tweetExpanded" ref="twitter" class="twitter">
|
||||||
|
@ -10,7 +10,7 @@
|
||||||
<transition :name="$store.state.animation ? 'zoom' : ''" mode="out-in">
|
<transition :name="$store.state.animation ? 'zoom' : ''" mode="out-in">
|
||||||
<component :is="self ? 'MkA' : 'a'" v-if="!fetching" class="link" :class="{ compact }" :[attr]="self ? url.substr(local.length) : url" rel="nofollow noopener" :target="target" :title="url">
|
<component :is="self ? 'MkA' : 'a'" v-if="!fetching" class="link" :class="{ compact }" :[attr]="self ? url.substr(local.length) : url" rel="nofollow noopener" :target="target" :title="url">
|
||||||
<div v-if="thumbnail" class="thumbnail" :style="`background-image: url('${thumbnail}')`">
|
<div v-if="thumbnail" class="thumbnail" :style="`background-image: url('${thumbnail}')`">
|
||||||
<button v-if="!playerEnabled && player.url" class="_button" :title="i18n.ts.enablePlayer" @click.prevent="playerEnabled = true"><i class="ph-play-circle-bold ph-lg"></i></button>
|
<button v-if="!playerEnabled && player.url" class="_button" :title="i18n.ts.enablePlayer" @click.prevent="playerEnabled = true"><i class="ph-play-circle ph-bold ph-lg"></i></button>
|
||||||
</div>
|
</div>
|
||||||
<article>
|
<article>
|
||||||
<header>
|
<header>
|
||||||
|
@ -26,7 +26,7 @@
|
||||||
</transition>
|
</transition>
|
||||||
<div v-if="tweetId" class="expandTweet">
|
<div v-if="tweetId" class="expandTweet">
|
||||||
<a @click="tweetExpanded = true">
|
<a @click="tweetExpanded = true">
|
||||||
<i class="ph-twitter-logo-bold ph-lg"></i> {{ i18n.ts.expandTweet }}
|
<i class="ph-twitter-logo ph-bold ph-lg"></i> {{ i18n.ts.expandTweet }}
|
||||||
</a>
|
</a>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
|
@ -1,10 +1,10 @@
|
||||||
<template>
|
<template>
|
||||||
<span v-if="note.visibility !== 'public'" :class="$style.visibility">
|
<span v-if="note.visibility !== 'public'" :class="$style.visibility">
|
||||||
<i v-if="note.visibility === 'home'" class="ph-house-bold ph-lg"></i>
|
<i v-if="note.visibility === 'home'" class="ph-house ph-bold ph-lg"></i>
|
||||||
<i v-else-if="note.visibility === 'followers'" class="ph-lock-simple-open-bold ph-lg"></i>
|
<i v-else-if="note.visibility === 'followers'" class="ph-lock-simple-open ph-bold ph-lg"></i>
|
||||||
<i v-else-if="note.visibility === 'specified'" ref="specified" class="ph-envelope-simple-open-bold ph-lg"></i>
|
<i v-else-if="note.visibility === 'specified'" ref="specified" class="ph-envelope-simple-open ph-bold ph-lg"></i>
|
||||||
</span>
|
</span>
|
||||||
<span v-if="note.localOnly" :class="$style.localOnly"><i class="ph-hand-fist-bold ph-lg"></i></span>
|
<span v-if="note.localOnly" :class="$style.localOnly"><i class="ph-hand-fist ph-bold ph-lg"></i></span>
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
<script lang="ts" setup>
|
<script lang="ts" setup>
|
||||||
|
|
|
@ -2,28 +2,28 @@
|
||||||
<MkModal ref="modal" :z-priority="'high'" :src="src" @click="modal.close()" @closed="emit('closed')">
|
<MkModal ref="modal" :z-priority="'high'" :src="src" @click="modal.close()" @closed="emit('closed')">
|
||||||
<div class="_popup" :class="$style.root">
|
<div class="_popup" :class="$style.root">
|
||||||
<button key="public" class="_button" :class="[$style.item, { [$style.active]: v === 'public' }]" data-index="1" @click="choose('public')">
|
<button key="public" class="_button" :class="[$style.item, { [$style.active]: v === 'public' }]" data-index="1" @click="choose('public')">
|
||||||
<div :class="$style.icon"><i class="ph-planet-bold ph-lg"></i></div>
|
<div :class="$style.icon"><i class="ph-planet ph-bold ph-lg"></i></div>
|
||||||
<div :class="$style.body">
|
<div :class="$style.body">
|
||||||
<span :class="$style.itemTitle">{{ i18n.ts._visibility.public }}</span>
|
<span :class="$style.itemTitle">{{ i18n.ts._visibility.public }}</span>
|
||||||
<span :class="$style.itemDescription">{{ i18n.ts._visibility.publicDescription }}</span>
|
<span :class="$style.itemDescription">{{ i18n.ts._visibility.publicDescription }}</span>
|
||||||
</div>
|
</div>
|
||||||
</button>
|
</button>
|
||||||
<button key="home" class="_button" :class="[$style.item, { [$style.active]: v === 'home' }]" data-index="2" @click="choose('home')">
|
<button key="home" class="_button" :class="[$style.item, { [$style.active]: v === 'home' }]" data-index="2" @click="choose('home')">
|
||||||
<div :class="$style.icon"><i class="ph-house-bold ph-lg"></i></div>
|
<div :class="$style.icon"><i class="ph-house ph-bold ph-lg"></i></div>
|
||||||
<div :class="$style.body">
|
<div :class="$style.body">
|
||||||
<span :class="$style.itemTitle">{{ i18n.ts._visibility.home }}</span>
|
<span :class="$style.itemTitle">{{ i18n.ts._visibility.home }}</span>
|
||||||
<span :class="$style.itemDescription">{{ i18n.ts._visibility.homeDescription }}</span>
|
<span :class="$style.itemDescription">{{ i18n.ts._visibility.homeDescription }}</span>
|
||||||
</div>
|
</div>
|
||||||
</button>
|
</button>
|
||||||
<button key="followers" class="_button" :class="[$style.item, { [$style.active]: v === 'followers' }]" data-index="3" @click="choose('followers')">
|
<button key="followers" class="_button" :class="[$style.item, { [$style.active]: v === 'followers' }]" data-index="3" @click="choose('followers')">
|
||||||
<div :class="$style.icon"><i class="ph-lock-simple-open-bold ph-lg"></i></div>
|
<div :class="$style.icon"><i class="ph-lock-simple-open ph-bold ph-lg"></i></div>
|
||||||
<div :class="$style.body">
|
<div :class="$style.body">
|
||||||
<span :class="$style.itemTitle">{{ i18n.ts._visibility.followers }}</span>
|
<span :class="$style.itemTitle">{{ i18n.ts._visibility.followers }}</span>
|
||||||
<span :class="$style.itemDescription">{{ i18n.ts._visibility.followersDescription }}</span>
|
<span :class="$style.itemDescription">{{ i18n.ts._visibility.followersDescription }}</span>
|
||||||
</div>
|
</div>
|
||||||
</button>
|
</button>
|
||||||
<button key="specified" :disabled="localOnly" class="_button" :class="[$style.item, { [$style.active]: v === 'specified' }]" data-index="4" @click="choose('specified')">
|
<button key="specified" :disabled="localOnly" class="_button" :class="[$style.item, { [$style.active]: v === 'specified' }]" data-index="4" @click="choose('specified')">
|
||||||
<div :class="$style.icon"><i class="ph-envelope-simple-open-bold ph-lg"></i></div>
|
<div :class="$style.icon"><i class="ph-envelope-simple-open ph-bold ph-lg"></i></div>
|
||||||
<div :class="$style.body">
|
<div :class="$style.body">
|
||||||
<span :class="$style.itemTitle">{{ i18n.ts._visibility.specified }}</span>
|
<span :class="$style.itemTitle">{{ i18n.ts._visibility.specified }}</span>
|
||||||
<span :class="$style.itemDescription">{{ i18n.ts._visibility.specifiedDescription }}</span>
|
<span :class="$style.itemDescription">{{ i18n.ts._visibility.specifiedDescription }}</span>
|
||||||
|
@ -31,12 +31,12 @@
|
||||||
</button>
|
</button>
|
||||||
<div :class="$style.divider"></div>
|
<div :class="$style.divider"></div>
|
||||||
<button key="localOnly" class="_button" :class="[$style.item, $style.localOnly, { [$style.active]: localOnly }]" data-index="5" @click="localOnly = !localOnly">
|
<button key="localOnly" class="_button" :class="[$style.item, $style.localOnly, { [$style.active]: localOnly }]" data-index="5" @click="localOnly = !localOnly">
|
||||||
<div :class="$style.icon"><i class="ph-hand-fist-bold ph-lg"></i></div>
|
<div :class="$style.icon"><i class="ph-hand-fist ph-bold ph-lg"></i></div>
|
||||||
<div :class="$style.body">
|
<div :class="$style.body">
|
||||||
<span :class="$style.itemTitle">{{ i18n.ts._visibility.localOnly }}</span>
|
<span :class="$style.itemTitle">{{ i18n.ts._visibility.localOnly }}</span>
|
||||||
<span :class="$style.itemDescription">{{ i18n.ts._visibility.localOnlyDescription }}</span>
|
<span :class="$style.itemDescription">{{ i18n.ts._visibility.localOnlyDescription }}</span>
|
||||||
</div>
|
</div>
|
||||||
<div :class="$style.toggle"><i :class="localOnly ? 'ph-toggle-right-bold ph-lg' : 'ph-toggle-left-bold ph-lg'"></i></div>
|
<div :class="$style.toggle"><i :class="localOnly ? 'ph-toggle-right-bold ph-lg' : 'ph-toggle-left ph-bold ph-lg'"></i></div>
|
||||||
</button>
|
</button>
|
||||||
</div>
|
</div>
|
||||||
</MkModal>
|
</MkModal>
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
<template>
|
<template>
|
||||||
<MkModal ref="modal" :prefer-type="'dialog'" :z-priority="'high'" @click="success ? done() : () => {}" @closed="emit('closed')">
|
<MkModal ref="modal" :prefer-type="'dialog'" :z-priority="'high'" @click="success ? done() : () => {}" @closed="emit('closed')">
|
||||||
<div :class="[$style.root, { [$style.iconOnly]: (text == null) || success }]">
|
<div :class="[$style.root, { [$style.iconOnly]: (text == null) || success }]">
|
||||||
<i v-if="success" :class="[$style.icon, $style.success]" class="ph-check-bold ph-lg"></i>
|
<i v-if="success" :class="[$style.icon, $style.success]" class="ph-check ph-bold ph-lg"></i>
|
||||||
<MkLoading v-else :class="[$style.icon, $style.waiting]" :em="true"/>
|
<MkLoading v-else :class="[$style.icon, $style.waiting]" :em="true"/>
|
||||||
<div v-if="text && !success" :class="$style.text">{{ text }}<MkEllipsis/></div>
|
<div v-if="text && !success" :class="$style.text">{{ text }}<MkEllipsis/></div>
|
||||||
</div>
|
</div>
|
||||||
|
|
|
@ -6,7 +6,7 @@
|
||||||
<template #label>{{ i18n.ts.selectWidget }}</template>
|
<template #label>{{ i18n.ts.selectWidget }}</template>
|
||||||
<option v-for="widget in widgetDefs" :key="widget" :value="widget">{{ i18n.t(`_widgets.${widget}`) }}</option>
|
<option v-for="widget in widgetDefs" :key="widget" :value="widget">{{ i18n.t(`_widgets.${widget}`) }}</option>
|
||||||
</MkSelect>
|
</MkSelect>
|
||||||
<MkButton inline primary class="mk-widget-add" @click="addWidget"><i class="ph-plus-bold ph-lg"></i> {{ i18n.ts.add }}</MkButton>
|
<MkButton inline primary class="mk-widget-add" @click="addWidget"><i class="ph-plus ph-bold ph-lg"></i> {{ i18n.ts.add }}</MkButton>
|
||||||
<MkButton inline @click="$emit('exit')">{{ i18n.ts.close }}</MkButton>
|
<MkButton inline @click="$emit('exit')">{{ i18n.ts.close }}</MkButton>
|
||||||
</header>
|
</header>
|
||||||
<XDraggable
|
<XDraggable
|
||||||
|
@ -17,8 +17,8 @@
|
||||||
>
|
>
|
||||||
<template #item="{element}">
|
<template #item="{element}">
|
||||||
<div class="customize-container">
|
<div class="customize-container">
|
||||||
<button class="config _button" @click.prevent.stop="configWidget(element.id)"><i class="ph-gear-six-bold ph-lg"></i></button>
|
<button class="config _button" @click.prevent.stop="configWidget(element.id)"><i class="ph-gear-six ph-bold ph-lg"></i></button>
|
||||||
<button class="remove _button" @click.prevent.stop="removeWidget(element)"><i class="ph-x-bold ph-lg"></i></button>
|
<button class="remove _button" @click.prevent.stop="removeWidget(element)"><i class="ph-x ph-bold ph-lg"></i></button>
|
||||||
<div class="handle">
|
<div class="handle">
|
||||||
<component :is="`mkw-${element.name}`" :ref="el => widgetRefs[element.id] = el" class="widget" :widget="element" @updateProps="updateWidget(element.id, $event)"/>
|
<component :is="`mkw-${element.name}`" :ref="el => widgetRefs[element.id] = el" class="widget" :widget="element" @updateProps="updateWidget(element.id, $event)"/>
|
||||||
</div>
|
</div>
|
||||||
|
@ -104,7 +104,7 @@ function onContextmenu(widget: Widget, ev: MouseEvent) {
|
||||||
type: 'label',
|
type: 'label',
|
||||||
text: i18n.t(`_widgets.${widget.name}`),
|
text: i18n.t(`_widgets.${widget.name}`),
|
||||||
}, {
|
}, {
|
||||||
icon: 'ph-gear-six-bold ph-lg',
|
icon: 'ph-gear-six ph-bold ph-lg',
|
||||||
text: i18n.ts.settings,
|
text: i18n.ts.settings,
|
||||||
action: () => {
|
action: () => {
|
||||||
configWidget(widget.id);
|
configWidget(widget.id);
|
||||||
|
|
|
@ -11,9 +11,9 @@
|
||||||
</span>
|
</span>
|
||||||
<span class="right">
|
<span class="right">
|
||||||
<button v-for="button in buttonsRight" v-tooltip="button.title" class="button _button" :class="{ highlighted: button.highlighted }" @click="button.onClick"><i :class="button.icon"></i></button>
|
<button v-for="button in buttonsRight" v-tooltip="button.title" class="button _button" :class="{ highlighted: button.highlighted }" @click="button.onClick"><i :class="button.icon"></i></button>
|
||||||
<button v-if="canResize && maximized" class="button _button" @click="unMaximize()"><i class="ph-copy-bold ph-lg"></i></button>
|
<button v-if="canResize && maximized" class="button _button" @click="unMaximize()"><i class="ph-copy ph-bold ph-lg"></i></button>
|
||||||
<button v-else-if="canResize && !maximized" class="button _button" @click="maximize()"><i class="ph-browser-bold ph-lg"></i></button>
|
<button v-else-if="canResize && !maximized" class="button _button" @click="maximize()"><i class="ph-browser ph-bold ph-lg"></i></button>
|
||||||
<button v-if="closeButton" class="button _button" @click="close()"><i class="ph-x-bold ph-lg"></i></button>
|
<button v-if="closeButton" class="button _button" @click="close()"><i class="ph-x ph-bold ph-lg"></i></button>
|
||||||
</span>
|
</span>
|
||||||
</div>
|
</div>
|
||||||
<div class="body">
|
<div class="body">
|
||||||
|
|
|
@ -10,7 +10,7 @@
|
||||||
@keydown.enter="toggle"
|
@keydown.enter="toggle"
|
||||||
>
|
>
|
||||||
<span ref="button" v-adaptive-border v-tooltip="checked ? i18n.ts.itsOn : i18n.ts.itsOff" class="button" @click.prevent="toggle">
|
<span ref="button" v-adaptive-border v-tooltip="checked ? i18n.ts.itsOn : i18n.ts.itsOff" class="button" @click.prevent="toggle">
|
||||||
<i class="check ph-check-bold ph-lg"></i>
|
<i class="check ph-check ph-bold ph-lg"></i>
|
||||||
</span>
|
</span>
|
||||||
<span class="label">
|
<span class="label">
|
||||||
<!-- TODO: 無名slotの方は廃止 -->
|
<!-- TODO: 無名slotの方は廃止 -->
|
||||||
|
|
|
@ -5,8 +5,8 @@
|
||||||
<span class="text"><slot name="label"></slot></span>
|
<span class="text"><slot name="label"></slot></span>
|
||||||
<span class="right">
|
<span class="right">
|
||||||
<span class="text"><slot name="suffix"></slot></span>
|
<span class="text"><slot name="suffix"></slot></span>
|
||||||
<i v-if="opened" class="ph-caret-up-bold ph-lg icon"></i>
|
<i v-if="opened" class="ph-caret-up ph-bold ph-lg icon"></i>
|
||||||
<i v-else class="ph-caret-down-bold ph-lg icon"></i>
|
<i v-else class="ph-caret-down ph-bold ph-lg icon"></i>
|
||||||
</span>
|
</span>
|
||||||
</div>
|
</div>
|
||||||
<KeepAlive>
|
<KeepAlive>
|
||||||
|
|
|
@ -29,7 +29,7 @@
|
||||||
</div>
|
</div>
|
||||||
<div class="caption"><slot name="caption"></slot></div>
|
<div class="caption"><slot name="caption"></slot></div>
|
||||||
|
|
||||||
<MkButton v-if="manualSave && changed" primary class="save" @click="updated"><i class="ph-check-bold ph-lg"></i> {{ i18n.ts.save }}</MkButton>
|
<MkButton v-if="manualSave && changed" primary class="save" @click="updated"><i class="ph-check ph-bold ph-lg"></i> {{ i18n.ts.save }}</MkButton>
|
||||||
</div>
|
</div>
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
|
|
|
@ -5,7 +5,7 @@
|
||||||
<span class="text"><slot></slot></span>
|
<span class="text"><slot></slot></span>
|
||||||
<span class="right">
|
<span class="right">
|
||||||
<span class="text"><slot name="suffix"></slot></span>
|
<span class="text"><slot name="suffix"></slot></span>
|
||||||
<i class="ph-arrow-square-out-bold ph-lg icon"></i>
|
<i class="ph-arrow-square-out ph-bold ph-lg icon"></i>
|
||||||
</span>
|
</span>
|
||||||
</a>
|
</a>
|
||||||
<MkA v-else class="main _button" :class="{ active }" :to="to" :behavior="behavior">
|
<MkA v-else class="main _button" :class="{ active }" :to="to" :behavior="behavior">
|
||||||
|
@ -13,7 +13,7 @@
|
||||||
<span class="text"><slot></slot></span>
|
<span class="text"><slot></slot></span>
|
||||||
<span class="right">
|
<span class="right">
|
||||||
<span class="text"><slot name="suffix"></slot></span>
|
<span class="text"><slot name="suffix"></slot></span>
|
||||||
<i class="ph-caret-right-bold ph-lg icon"></i>
|
<i class="ph-caret-right ph-bold ph-lg icon"></i>
|
||||||
</span>
|
</span>
|
||||||
</MkA>
|
</MkA>
|
||||||
</div>
|
</div>
|
||||||
|
|
|
@ -18,11 +18,11 @@
|
||||||
>
|
>
|
||||||
<slot></slot>
|
<slot></slot>
|
||||||
</select>
|
</select>
|
||||||
<div ref="suffixEl" class="suffix"><i class="ph-caret-down-bold ph-lg"></i></div>
|
<div ref="suffixEl" class="suffix"><i class="ph-caret-down ph-bold ph-lg"></i></div>
|
||||||
</div>
|
</div>
|
||||||
<div class="caption"><slot name="caption"></slot></div>
|
<div class="caption"><slot name="caption"></slot></div>
|
||||||
|
|
||||||
<MkButton v-if="manualSave && changed" primary @click="updated"><i class="ph-floppy-disk-back-bold ph-lg"></i> {{ i18n.ts.save }}</MkButton>
|
<MkButton v-if="manualSave && changed" primary @click="updated"><i class="ph-floppy-disk-back ph-bold ph-lg"></i> {{ i18n.ts.save }}</MkButton>
|
||||||
</div>
|
</div>
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
|
|
|
@ -8,8 +8,8 @@
|
||||||
</div>
|
</div>
|
||||||
<div v-else>
|
<div v-else>
|
||||||
<div class="wszdbhzo">
|
<div class="wszdbhzo">
|
||||||
<div><i class="ph-warning-bold ph-lg"></i> {{ i18n.ts.somethingHappened }}</div>
|
<div><i class="ph-warning ph-bold ph-lg"></i> {{ i18n.ts.somethingHappened }}</div>
|
||||||
<MkButton inline class="retry" @click="retry"><i class="ph-arrow-clockwise-bold ph-lg"></i> {{ i18n.ts.retry }}</MkButton>
|
<MkButton inline class="retry" @click="retry"><i class="ph-arrow-clockwise ph-bold ph-lg"></i> {{ i18n.ts.retry }}</MkButton>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</transition>
|
</transition>
|
||||||
|
|
|
@ -22,7 +22,7 @@
|
||||||
</div>
|
</div>
|
||||||
<div class="caption"><slot name="caption"></slot></div>
|
<div class="caption"><slot name="caption"></slot></div>
|
||||||
|
|
||||||
<MkButton v-if="manualSave && changed" primary class="save" @click="updated"><i class="ph-floppy-disk-back-bold ph-lg"></i> {{ i18n.ts.save }}</MkButton>
|
<MkButton v-if="manualSave && changed" primary class="save" @click="updated"><i class="ph-floppy-disk-back ph-bold ph-lg"></i> {{ i18n.ts.save }}</MkButton>
|
||||||
</div>
|
</div>
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
|
|
|
@ -41,25 +41,25 @@ function onContextmenu(ev) {
|
||||||
type: 'label',
|
type: 'label',
|
||||||
text: props.to,
|
text: props.to,
|
||||||
}, {
|
}, {
|
||||||
icon: 'ph-browser-bold ph-lg',
|
icon: 'ph-browser ph-bold ph-lg',
|
||||||
text: i18n.ts.openInWindow,
|
text: i18n.ts.openInWindow,
|
||||||
action: () => {
|
action: () => {
|
||||||
os.pageWindow(props.to);
|
os.pageWindow(props.to);
|
||||||
},
|
},
|
||||||
}, {
|
}, {
|
||||||
icon: 'ph-arrows-out-simple-bold ph-lg',
|
icon: 'ph-arrows-out-simple ph-bold ph-lg',
|
||||||
text: i18n.ts.showInPage,
|
text: i18n.ts.showInPage,
|
||||||
action: () => {
|
action: () => {
|
||||||
router.push(props.to, 'forcePage');
|
router.push(props.to, 'forcePage');
|
||||||
},
|
},
|
||||||
}, null, {
|
}, null, {
|
||||||
icon: 'ph-arrow-square-out-bold ph-lg',
|
icon: 'ph-arrow-square-out ph-bold ph-lg',
|
||||||
text: i18n.ts.openInNewTab,
|
text: i18n.ts.openInNewTab,
|
||||||
action: () => {
|
action: () => {
|
||||||
window.open(props.to, '_blank');
|
window.open(props.to, '_blank');
|
||||||
},
|
},
|
||||||
}, {
|
}, {
|
||||||
icon: 'ph-link-simple-bold ph-lg',
|
icon: 'ph-link-simple ph-bold ph-lg',
|
||||||
text: i18n.ts.copyLink,
|
text: i18n.ts.copyLink,
|
||||||
action: () => {
|
action: () => {
|
||||||
copyToClipboard(`${url}${props.to}`);
|
copyToClipboard(`${url}${props.to}`);
|
||||||
|
|
|
@ -3,7 +3,7 @@
|
||||||
<div v-if="!showMenu" class="main" :class="chosen.place">
|
<div v-if="!showMenu" class="main" :class="chosen.place">
|
||||||
<a :href="chosen.url" target="_blank">
|
<a :href="chosen.url" target="_blank">
|
||||||
<img :src="chosen.imageUrl">
|
<img :src="chosen.imageUrl">
|
||||||
<button class="_button menu" @click.prevent.stop="toggleMenu"><span class="ph-info-bold ph-lg info-circle"></span></button>
|
<button class="_button menu" @click.prevent.stop="toggleMenu"><span class="ph-info ph-bold ph-lg info-circle"></span></button>
|
||||||
</a>
|
</a>
|
||||||
</div>
|
</div>
|
||||||
<div v-else class="menu">
|
<div v-else class="menu">
|
||||||
|
|
|
@ -2,7 +2,7 @@
|
||||||
<transition :name="$store.state.animation ? 'zoom' : ''" appear>
|
<transition :name="$store.state.animation ? 'zoom' : ''" appear>
|
||||||
<div class="mjndxjcg">
|
<div class="mjndxjcg">
|
||||||
<img src="/static-assets/badges/error.png" class="_ghost" alt="Error"/>
|
<img src="/static-assets/badges/error.png" class="_ghost" alt="Error"/>
|
||||||
<p><i class="ph-warning-bold ph-lg"></i> {{ i18n.ts.somethingHappened }}</p>
|
<p><i class="ph-warning ph-bold ph-lg"></i> {{ i18n.ts.somethingHappened }}</p>
|
||||||
<MkButton class="button" @click="() => $emit('retry')">{{ i18n.ts.retry }}</MkButton>
|
<MkButton class="button" @click="() => $emit('retry')">{{ i18n.ts.retry }}</MkButton>
|
||||||
</div>
|
</div>
|
||||||
</transition>
|
</transition>
|
||||||
|
|
|
@ -14,7 +14,7 @@
|
||||||
<span v-if="pathname != ''" class="pathname">{{ self ? pathname.substr(1) : pathname }}</span>
|
<span v-if="pathname != ''" class="pathname">{{ self ? pathname.substr(1) : pathname }}</span>
|
||||||
<span class="query">{{ query }}</span>
|
<span class="query">{{ query }}</span>
|
||||||
<span class="hash">{{ hash }}</span>
|
<span class="hash">{{ hash }}</span>
|
||||||
<i v-if="target === '_blank'" class="ph-arrow-square-out-bold ph-lg icon"></i>
|
<i v-if="target === '_blank'" class="ph-arrow-square-out ph-bold ph-lg icon"></i>
|
||||||
</component>
|
</component>
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
|
|
|
@ -2,8 +2,8 @@
|
||||||
<div class="ngbfujlo">
|
<div class="ngbfujlo">
|
||||||
<MkTextarea :model-value="text" readonly style="margin: 0;"></MkTextarea>
|
<MkTextarea :model-value="text" readonly style="margin: 0;"></MkTextarea>
|
||||||
<MkButton class="button" primary :disabled="posting || posted" @click="post()">
|
<MkButton class="button" primary :disabled="posting || posted" @click="post()">
|
||||||
<i v-if="posted" class="ph-check-bold ph-lg"></i>
|
<i v-if="posted" class="ph-check ph-bold ph-lg"></i>
|
||||||
<i v-else class="ph-paper-plane-tilt-bold ph-lg"></i>
|
<i v-else class="ph-paper-plane-tilt ph-bold ph-lg"></i>
|
||||||
</MkButton>
|
</MkButton>
|
||||||
</div>
|
</div>
|
||||||
</template>
|
</template>
|
||||||
|
|
|
@ -1560,7 +1560,7 @@
|
||||||
.ph-bold.ph-file-csv:before {
|
.ph-bold.ph-file-csv:before {
|
||||||
content: "\eaea";
|
content: "\eaea";
|
||||||
}
|
}
|
||||||
.ph-bold.ph-file-dashed:before, .ph-bold.ph-file-dotted:before {
|
.ph-bold.ph-file-dashed:before, .ph ph-bold.ph-file-dotted:before {
|
||||||
content: "\eaeb";
|
content: "\eaeb";
|
||||||
}
|
}
|
||||||
.ph-bold.ph-file-doc:before {
|
.ph-bold.ph-file-doc:before {
|
||||||
|
@ -1584,7 +1584,7 @@
|
||||||
.ph-bold.ph-file-lock:before {
|
.ph-bold.ph-file-lock:before {
|
||||||
content: "\eaf2";
|
content: "\eaf2";
|
||||||
}
|
}
|
||||||
.ph-bold.ph-file-magnifying-glass:before, .ph-bold.ph-file-search:before {
|
.ph-bold.ph-file-magnifying-glass:before, .ph ph-bold.ph-file-search:before {
|
||||||
content: "\eaf3";
|
content: "\eaf3";
|
||||||
}
|
}
|
||||||
.ph-bold.ph-file-minus:before {
|
.ph-bold.ph-file-minus:before {
|
||||||
|
@ -1725,7 +1725,7 @@
|
||||||
.ph-bold.ph-folder:before {
|
.ph-bold.ph-folder:before {
|
||||||
content: "\eb21";
|
content: "\eb21";
|
||||||
}
|
}
|
||||||
.ph-bold.ph-folder-dashed:before, .ph-bold.ph-folder-dotted:before {
|
.ph-bold.ph-folder-dashed:before, .ph ph-bold.ph-folder-dotted:before {
|
||||||
content: "\eb22";
|
content: "\eb22";
|
||||||
}
|
}
|
||||||
.ph-bold.ph-folder-lock:before {
|
.ph-bold.ph-folder-lock:before {
|
||||||
|
@ -1758,7 +1758,7 @@
|
||||||
.ph-bold.ph-folder-simple:before {
|
.ph-bold.ph-folder-simple:before {
|
||||||
content: "\eb2c";
|
content: "\eb2c";
|
||||||
}
|
}
|
||||||
.ph-bold.ph-folder-simple-dashed:before, .ph-bold.ph-folder-simple-dotted:before {
|
.ph-bold.ph-folder-simple-dashed:before, .ph ph-bold.ph-folder-simple-dotted:before {
|
||||||
content: "\eb2d";
|
content: "\eb2d";
|
||||||
}
|
}
|
||||||
.ph-bold.ph-folder-simple-lock:before {
|
.ph-bold.ph-folder-simple-lock:before {
|
||||||
|
@ -2847,7 +2847,7 @@
|
||||||
.ph-bold.ph-projector-screen-chart:before {
|
.ph-bold.ph-projector-screen-chart:before {
|
||||||
content: "\ec97";
|
content: "\ec97";
|
||||||
}
|
}
|
||||||
.ph-bold.ph-pulse:before, .ph-bold.ph-activity:before {
|
.ph-bold.ph-pulse:before, .ph ph-bold.ph-activity:before {
|
||||||
content: "\ec98";
|
content: "\ec98";
|
||||||
}
|
}
|
||||||
.ph-bold.ph-push-pin:before {
|
.ph-bold.ph-push-pin:before {
|
||||||
|
@ -2976,16 +2976,16 @@
|
||||||
.ph-bold.ph-scroll:before {
|
.ph-bold.ph-scroll:before {
|
||||||
content: "\ecc2";
|
content: "\ecc2";
|
||||||
}
|
}
|
||||||
.ph-bold.ph-seal:before, .ph-bold.ph-circle-wavy:before {
|
.ph-bold.ph-seal:before, .ph ph-bold.ph-circle-wavy:before {
|
||||||
content: "\ecc3";
|
content: "\ecc3";
|
||||||
}
|
}
|
||||||
.ph-bold.ph-seal-check:before, .ph-bold.ph-circle-wavy-check:before {
|
.ph-bold.ph-seal-check:before, .ph ph-bold.ph-circle-wavy-check:before {
|
||||||
content: "\ecc4";
|
content: "\ecc4";
|
||||||
}
|
}
|
||||||
.ph-bold.ph-seal-question:before, .ph-bold.ph-circle-wavy-question:before {
|
.ph-bold.ph-seal-question:before, .ph ph-bold.ph-circle-wavy-question:before {
|
||||||
content: "\ecc5";
|
content: "\ecc5";
|
||||||
}
|
}
|
||||||
.ph-bold.ph-seal-warning:before, .ph-bold.ph-circle-wavy-warning:before {
|
.ph-bold.ph-seal-warning:before, .ph ph-bold.ph-circle-wavy-warning:before {
|
||||||
content: "\ecc6";
|
content: "\ecc6";
|
||||||
}
|
}
|
||||||
.ph-bold.ph-selection-all:before {
|
.ph-bold.ph-selection-all:before {
|
||||||
|
@ -3438,7 +3438,7 @@
|
||||||
.ph-bold.ph-text-a-underline:before {
|
.ph-bold.ph-text-a-underline:before {
|
||||||
content: "\ed5c";
|
content: "\ed5c";
|
||||||
}
|
}
|
||||||
.ph-bold.ph-text-b:before, .ph-bold.ph-text-bolder:before {
|
.ph-bold.ph-text-b:before, .ph-bold.ph-text ph-bolder:before {
|
||||||
content: "\ed5d";
|
content: "\ed5d";
|
||||||
}
|
}
|
||||||
.ph-bold.ph-textbox:before {
|
.ph-bold.ph-textbox:before {
|
||||||
|
|
|
@ -13,102 +13,102 @@ import XTutorial from "@/components/MkTutorialDialog.vue";
|
||||||
export const navbarItemDef = reactive({
|
export const navbarItemDef = reactive({
|
||||||
notifications: {
|
notifications: {
|
||||||
title: "notifications",
|
title: "notifications",
|
||||||
icon: "ph-bell-bold ph-lg",
|
icon: "ph-bell ph-bold ph-lg",
|
||||||
show: computed(() => $i != null),
|
show: computed(() => $i != null),
|
||||||
indicated: computed(() => $i?.hasUnreadNotification),
|
indicated: computed(() => $i?.hasUnreadNotification),
|
||||||
to: "/my/notifications",
|
to: "/my/notifications",
|
||||||
},
|
},
|
||||||
messaging: {
|
messaging: {
|
||||||
title: "messaging",
|
title: "messaging",
|
||||||
icon: "ph-chats-teardrop-bold ph-lg",
|
icon: "ph-chats-teardrop ph-bold ph-lg",
|
||||||
show: computed(() => $i != null),
|
show: computed(() => $i != null),
|
||||||
indicated: computed(() => $i?.hasUnreadMessagingMessage),
|
indicated: computed(() => $i?.hasUnreadMessagingMessage),
|
||||||
to: "/my/messaging",
|
to: "/my/messaging",
|
||||||
},
|
},
|
||||||
drive: {
|
drive: {
|
||||||
title: "drive",
|
title: "drive",
|
||||||
icon: "ph-cloud-bold ph-lg",
|
icon: "ph-cloud ph-bold ph-lg",
|
||||||
show: computed(() => $i != null),
|
show: computed(() => $i != null),
|
||||||
to: "/my/drive",
|
to: "/my/drive",
|
||||||
},
|
},
|
||||||
followRequests: {
|
followRequests: {
|
||||||
title: "followRequests",
|
title: "followRequests",
|
||||||
icon: "ph-hand-waving-bold ph-lg",
|
icon: "ph-hand-waving ph-bold ph-lg",
|
||||||
show: computed(() => $i?.isLocked),
|
show: computed(() => $i?.isLocked),
|
||||||
indicated: computed(() => $i?.hasPendingReceivedFollowRequest),
|
indicated: computed(() => $i?.hasPendingReceivedFollowRequest),
|
||||||
to: "/my/follow-requests",
|
to: "/my/follow-requests",
|
||||||
},
|
},
|
||||||
explore: {
|
explore: {
|
||||||
title: "explore",
|
title: "explore",
|
||||||
icon: "ph-compass-bold ph-lg",
|
icon: "ph-compass ph-bold ph-lg",
|
||||||
to: "/explore",
|
to: "/explore",
|
||||||
},
|
},
|
||||||
announcements: {
|
announcements: {
|
||||||
title: "announcements",
|
title: "announcements",
|
||||||
icon: "ph-megaphone-simple-bold ph-lg",
|
icon: "ph-megaphone-simple ph-bold ph-lg",
|
||||||
indicated: computed(() => $i?.hasUnreadAnnouncement),
|
indicated: computed(() => $i?.hasUnreadAnnouncement),
|
||||||
to: "/announcements",
|
to: "/announcements",
|
||||||
},
|
},
|
||||||
search: {
|
search: {
|
||||||
title: "search",
|
title: "search",
|
||||||
icon: "ph-magnifying-glass-bold ph-lg",
|
icon: "ph-magnifying-glass ph-bold ph-lg",
|
||||||
action: () => search(),
|
action: () => search(),
|
||||||
},
|
},
|
||||||
lists: {
|
lists: {
|
||||||
title: "lists",
|
title: "lists",
|
||||||
icon: "ph-list-bullets-bold ph-lg",
|
icon: "ph-list-bullets ph-bold ph-lg",
|
||||||
show: computed(() => $i != null),
|
show: computed(() => $i != null),
|
||||||
to: "/my/lists",
|
to: "/my/lists",
|
||||||
},
|
},
|
||||||
/*
|
/*
|
||||||
groups: {
|
groups: {
|
||||||
title: 'groups',
|
title: 'groups',
|
||||||
icon: 'ph-users-three-bold ph-lg',
|
icon: 'ph-users-three ph-bold ph-lg',
|
||||||
show: computed(() => $i != null),
|
show: computed(() => $i != null),
|
||||||
to: '/my/groups',
|
to: '/my/groups',
|
||||||
},
|
},
|
||||||
*/
|
*/
|
||||||
antennas: {
|
antennas: {
|
||||||
title: "antennas",
|
title: "antennas",
|
||||||
icon: "ph-flying-saucer-bold ph-lg",
|
icon: "ph-flying-saucer ph-bold ph-lg",
|
||||||
show: computed(() => $i != null),
|
show: computed(() => $i != null),
|
||||||
to: "/my/antennas",
|
to: "/my/antennas",
|
||||||
},
|
},
|
||||||
favorites: {
|
favorites: {
|
||||||
title: "favorites",
|
title: "favorites",
|
||||||
icon: "ph-bookmark-simple-bold ph-lg",
|
icon: "ph-bookmark-simple ph-bold ph-lg",
|
||||||
show: computed(() => $i != null),
|
show: computed(() => $i != null),
|
||||||
to: "/my/favorites",
|
to: "/my/favorites",
|
||||||
},
|
},
|
||||||
pages: {
|
pages: {
|
||||||
title: "pages",
|
title: "pages",
|
||||||
icon: "ph-file-text-bold ph-lg",
|
icon: "ph-file-text ph-bold ph-lg",
|
||||||
to: "/pages",
|
to: "/pages",
|
||||||
},
|
},
|
||||||
gallery: {
|
gallery: {
|
||||||
title: "gallery",
|
title: "gallery",
|
||||||
icon: "ph-image-square-bold ph-lg",
|
icon: "ph-image-square ph-bold ph-lg",
|
||||||
to: "/gallery",
|
to: "/gallery",
|
||||||
},
|
},
|
||||||
clips: {
|
clips: {
|
||||||
title: "clip",
|
title: "clip",
|
||||||
icon: "ph-paperclip-bold ph-lg",
|
icon: "ph-paperclip ph-bold ph-lg",
|
||||||
show: computed(() => $i != null),
|
show: computed(() => $i != null),
|
||||||
to: "/my/clips",
|
to: "/my/clips",
|
||||||
},
|
},
|
||||||
channels: {
|
channels: {
|
||||||
title: "channel",
|
title: "channel",
|
||||||
icon: "ph-television-bold ph-lg",
|
icon: "ph-television ph-bold ph-lg",
|
||||||
to: "/channels",
|
to: "/channels",
|
||||||
},
|
},
|
||||||
groups: {
|
groups: {
|
||||||
title: "groups",
|
title: "groups",
|
||||||
icon: "ph-users-three-bold ph-lg",
|
icon: "ph-users-three ph-bold ph-lg",
|
||||||
to: "/my/groups",
|
to: "/my/groups",
|
||||||
},
|
},
|
||||||
ui: {
|
ui: {
|
||||||
title: "switchUi",
|
title: "switchUi",
|
||||||
icon: "ph-layout-bold ph-lg",
|
icon: "ph-layout ph-bold ph-lg",
|
||||||
action: (ev) => {
|
action: (ev) => {
|
||||||
os.popupMenu(
|
os.popupMenu(
|
||||||
[
|
[
|
||||||
|
@ -143,14 +143,14 @@ export const navbarItemDef = reactive({
|
||||||
},
|
},
|
||||||
reload: {
|
reload: {
|
||||||
title: "reload",
|
title: "reload",
|
||||||
icon: "ph-arrows-clockwise-bold ph-lg",
|
icon: "ph-arrows-clockwise ph-bold ph-lg",
|
||||||
action: (ev) => {
|
action: (ev) => {
|
||||||
location.reload();
|
location.reload();
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
help: {
|
help: {
|
||||||
title: "help",
|
title: "help",
|
||||||
icon: "ph-question-bold ph-lg",
|
icon: "ph-question ph-bold ph-lg",
|
||||||
action: (ev) => {
|
action: (ev) => {
|
||||||
os.popupMenu(
|
os.popupMenu(
|
||||||
[
|
[
|
||||||
|
@ -161,19 +161,19 @@ export const navbarItemDef = reactive({
|
||||||
{
|
{
|
||||||
type: "link",
|
type: "link",
|
||||||
text: i18n.ts.instanceInfo,
|
text: i18n.ts.instanceInfo,
|
||||||
icon: "ph-info-bold ph-lg",
|
icon: "ph-info ph-bold ph-lg",
|
||||||
to: "/about",
|
to: "/about",
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
type: "link",
|
type: "link",
|
||||||
text: i18n.ts.aboutMisskey,
|
text: i18n.ts.aboutMisskey,
|
||||||
icon: "ph-lightbulb-bold ph-lg",
|
icon: "ph-lightbulb ph-bold ph-lg",
|
||||||
to: "/about-calckey",
|
to: "/about-calckey",
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
type: "link",
|
type: "link",
|
||||||
text: i18n.ts._apps.apps,
|
text: i18n.ts._apps.apps,
|
||||||
icon: "ph-device-mobile-bold ph-lg",
|
icon: "ph-device-mobile ph-bold ph-lg",
|
||||||
to: "/apps",
|
to: "/apps",
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
|
@ -183,23 +183,23 @@ export const navbarItemDef = reactive({
|
||||||
os.popup(XTutorial, {}, {}, "closed");
|
os.popup(XTutorial, {}, {}, "closed");
|
||||||
},
|
},
|
||||||
text: i18n.ts.replayTutorial,
|
text: i18n.ts.replayTutorial,
|
||||||
icon: "ph-circle-wavy-question-bold ph-lg",
|
icon: "ph-circle-wavy-question ph-bold ph-lg",
|
||||||
},
|
},
|
||||||
null,
|
null,
|
||||||
{
|
{
|
||||||
type: "parent",
|
type: "parent",
|
||||||
text: i18n.ts.developer,
|
text: i18n.ts.developer,
|
||||||
icon: "ph-code-bold ph-lg",
|
icon: "ph-code ph-bold ph-lg",
|
||||||
children: [
|
children: [
|
||||||
{
|
{
|
||||||
type: "link",
|
type: "link",
|
||||||
to: "/api-console",
|
to: "/api-console",
|
||||||
text: "API Console",
|
text: "API Console",
|
||||||
icon: "ph-terminal-window-bold ph-lg",
|
icon: "ph-terminal-window ph-bold ph-lg",
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
text: i18n.ts.document,
|
text: i18n.ts.document,
|
||||||
icon: "ph-file-doc-bold ph-lg",
|
icon: "ph-file-doc ph-bold ph-lg",
|
||||||
action: () => {
|
action: () => {
|
||||||
window.open("/api-doc", "_blank");
|
window.open("/api-doc", "_blank");
|
||||||
},
|
},
|
||||||
|
@ -208,7 +208,7 @@ export const navbarItemDef = reactive({
|
||||||
type: "link",
|
type: "link",
|
||||||
to: "/scratchpad",
|
to: "/scratchpad",
|
||||||
text: "AiScript Scratchpad",
|
text: "AiScript Scratchpad",
|
||||||
icon: "ph-scribble-loop-bold ph-lg",
|
icon: "ph-scribble-loop ph-bold ph-lg",
|
||||||
},
|
},
|
||||||
],
|
],
|
||||||
},
|
},
|
||||||
|
|
|
@ -3,7 +3,7 @@
|
||||||
<transition :name="$store.state.animation ? 'zoom' : ''" appear>
|
<transition :name="$store.state.animation ? 'zoom' : ''" appear>
|
||||||
<div v-show="loaded" class="mjndxjch">
|
<div v-show="loaded" class="mjndxjch">
|
||||||
<img src="/static-assets/badges/error.png" class="_ghost" alt="Error"/>
|
<img src="/static-assets/badges/error.png" class="_ghost" alt="Error"/>
|
||||||
<p><b><i class="ph-warning-bold ph-lg"></i> {{ i18n.ts.pageLoadError }}</b></p>
|
<p><b><i class="ph-warning ph-bold ph-lg"></i> {{ i18n.ts.pageLoadError }}</b></p>
|
||||||
<p v-if="meta && (version === meta.version)">{{ i18n.ts.pageLoadErrorDescription }}</p>
|
<p v-if="meta && (version === meta.version)">{{ i18n.ts.pageLoadErrorDescription }}</p>
|
||||||
<p v-else-if="serverIsDead">{{ i18n.ts.serverIsDead }}</p>
|
<p v-else-if="serverIsDead">{{ i18n.ts.serverIsDead }}</p>
|
||||||
<template v-else>
|
<template v-else>
|
||||||
|
@ -58,7 +58,7 @@ const headerTabs = $computed(() => []);
|
||||||
|
|
||||||
definePageMetadata({
|
definePageMetadata({
|
||||||
title: i18n.ts.error,
|
title: i18n.ts.error,
|
||||||
icon: 'ph-warning-bold ph-lg',
|
icon: 'ph-warning ph-bold ph-lg',
|
||||||
});
|
});
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
|
|
|
@ -20,17 +20,17 @@
|
||||||
<FormSection>
|
<FormSection>
|
||||||
<div class="_formLinks">
|
<div class="_formLinks">
|
||||||
<FormLink to="https://codeberg.org/calckey/calckey" external>
|
<FormLink to="https://codeberg.org/calckey/calckey" external>
|
||||||
<template #icon><i class="ph-code-bold ph-lg"></i></template>
|
<template #icon><i class="ph-code ph-bold ph-lg"></i></template>
|
||||||
{{ i18n.ts._aboutMisskey.source }}
|
{{ i18n.ts._aboutMisskey.source }}
|
||||||
<template #suffix>Codeberg</template>
|
<template #suffix>Codeberg</template>
|
||||||
</FormLink>
|
</FormLink>
|
||||||
<FormLink to="https://liberapay.com/ThatOneCalculator" external>
|
<FormLink to="https://liberapay.com/ThatOneCalculator" external>
|
||||||
<template #icon><i class="ph-money-bold ph-lg"></i></template>
|
<template #icon><i class="ph-money ph-bold ph-lg"></i></template>
|
||||||
{{ i18n.ts._aboutMisskey.donate }}
|
{{ i18n.ts._aboutMisskey.donate }}
|
||||||
<template #suffix>Donate</template>
|
<template #suffix>Donate</template>
|
||||||
</FormLink>
|
</FormLink>
|
||||||
<FormLink to="https://hosted.weblate.org/engage/calckey/" external>
|
<FormLink to="https://hosted.weblate.org/engage/calckey/" external>
|
||||||
<template #icon><i class="ph-translate-bold ph-lg"></i></template>
|
<template #icon><i class="ph-translate ph-bold ph-lg"></i></template>
|
||||||
{{ i18n.ts._aboutMisskey.translation }}
|
{{ i18n.ts._aboutMisskey.translation }}
|
||||||
<template #suffix>Translate</template>
|
<template #suffix>Translate</template>
|
||||||
</FormLink>
|
</FormLink>
|
||||||
|
|
|
@ -2,7 +2,7 @@
|
||||||
<div class="driuhtrh">
|
<div class="driuhtrh">
|
||||||
<div class="query">
|
<div class="query">
|
||||||
<MkInput v-model="q" class="" :placeholder="i18n.ts.search">
|
<MkInput v-model="q" class="" :placeholder="i18n.ts.search">
|
||||||
<template #prefix><i class="ph-magnifying-glass-bold ph-lg"></i></template>
|
<template #prefix><i class="ph-magnifying-glass ph-bold ph-lg"></i></template>
|
||||||
</MkInput>
|
</MkInput>
|
||||||
|
|
||||||
<!-- たくさんあると邪魔
|
<!-- たくさんあると邪魔
|
||||||
|
|
|
@ -2,7 +2,7 @@
|
||||||
<div class="taeiyria">
|
<div class="taeiyria">
|
||||||
<div class="query">
|
<div class="query">
|
||||||
<MkInput v-model="host" :debounce="true" class="">
|
<MkInput v-model="host" :debounce="true" class="">
|
||||||
<template #prefix><i class="ph-magnifying-glass-bold ph-lg"></i></template>
|
<template #prefix><i class="ph-magnifying-glass ph-bold ph-lg"></i></template>
|
||||||
<template #label>{{ i18n.ts.host }}</template>
|
<template #label>{{ i18n.ts.host }}</template>
|
||||||
</MkInput>
|
</MkInput>
|
||||||
<FormSplit style="margin-top: var(--margin);">
|
<FormSplit style="margin-top: var(--margin);">
|
||||||
|
|
|
@ -140,15 +140,15 @@ const headerActions = $computed(() => []);
|
||||||
let theTabs = [{
|
let theTabs = [{
|
||||||
key: 'overview',
|
key: 'overview',
|
||||||
title: i18n.ts.overview,
|
title: i18n.ts.overview,
|
||||||
icon: 'ph-map-trifold-bold ph-lg',
|
icon: 'ph-map-trifold ph-bold ph-lg',
|
||||||
}, {
|
}, {
|
||||||
key: 'emojis',
|
key: 'emojis',
|
||||||
title: i18n.ts.customEmojis,
|
title: i18n.ts.customEmojis,
|
||||||
icon: 'ph-smiley-bold ph-lg',
|
icon: 'ph-smiley ph-bold ph-lg',
|
||||||
}, {
|
}, {
|
||||||
key: 'charts',
|
key: 'charts',
|
||||||
title: i18n.ts.charts,
|
title: i18n.ts.charts,
|
||||||
icon: 'ph-chart-bar-bold ph-lg',
|
icon: 'ph-chart-bar ph-bold ph-lg',
|
||||||
}];
|
}];
|
||||||
|
|
||||||
if (iAmModerator) {
|
if (iAmModerator) {
|
||||||
|
@ -156,7 +156,7 @@ if (iAmModerator) {
|
||||||
{
|
{
|
||||||
key: 'federation',
|
key: 'federation',
|
||||||
title: i18n.ts.federation,
|
title: i18n.ts.federation,
|
||||||
icon: 'ph-planet-bold ph-lg',
|
icon: 'ph-planet ph-bold ph-lg',
|
||||||
},
|
},
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
@ -165,7 +165,7 @@ let headerTabs = $computed(() => theTabs);
|
||||||
|
|
||||||
definePageMetadata(computed(() => ({
|
definePageMetadata(computed(() => ({
|
||||||
title: i18n.ts.instanceInfo,
|
title: i18n.ts.instanceInfo,
|
||||||
icon: 'ph-info-bold ph-lg',
|
icon: 'ph-info ph-bold ph-lg',
|
||||||
})));
|
})));
|
||||||
|
|
||||||
async function sleep(seconds) {
|
async function sleep(seconds) {
|
||||||
|
|
|
@ -45,7 +45,7 @@
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div class="_formBlock">
|
<div class="_formBlock">
|
||||||
<MkButton danger @click="del"><i class="ph-trash-bold ph-lg"></i> {{ i18n.ts.delete }}</MkButton>
|
<MkButton danger @click="del"><i class="ph-trash ph-bold ph-lg"></i> {{ i18n.ts.delete }}</MkButton>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</swiper-slide>
|
</swiper-slide>
|
||||||
|
@ -140,7 +140,7 @@ async function toggleIsSensitive(v) {
|
||||||
|
|
||||||
const headerActions = $computed(() => [{
|
const headerActions = $computed(() => [{
|
||||||
text: i18n.ts.openInNewTab,
|
text: i18n.ts.openInNewTab,
|
||||||
icon: 'ph-arrow-square-out-bold ph-lg',
|
icon: 'ph-arrow-square-out ph-bold ph-lg',
|
||||||
handler: () => {
|
handler: () => {
|
||||||
window.open(file.url, '_blank');
|
window.open(file.url, '_blank');
|
||||||
},
|
},
|
||||||
|
@ -149,20 +149,20 @@ const headerActions = $computed(() => [{
|
||||||
const headerTabs = $computed(() => [{
|
const headerTabs = $computed(() => [{
|
||||||
key: 'overview',
|
key: 'overview',
|
||||||
title: i18n.ts.overview,
|
title: i18n.ts.overview,
|
||||||
icon: 'ph-info-bold ph-lg',
|
icon: 'ph-info ph-bold ph-lg',
|
||||||
}, iAmModerator ? {
|
}, iAmModerator ? {
|
||||||
key: 'ip',
|
key: 'ip',
|
||||||
title: 'IP',
|
title: 'IP',
|
||||||
icon: 'ph-receipt-bold ph-lg',
|
icon: 'ph-receipt ph-bold ph-lg',
|
||||||
} : null, {
|
} : null, {
|
||||||
key: 'raw',
|
key: 'raw',
|
||||||
title: 'Raw data',
|
title: 'Raw data',
|
||||||
icon: 'ph-code-bold ph-lg',
|
icon: 'ph-code ph-bold ph-lg',
|
||||||
}]);
|
}]);
|
||||||
|
|
||||||
definePageMetadata(computed(() => ({
|
definePageMetadata(computed(() => ({
|
||||||
title: file ? i18n.ts.file + ': ' + file.name : i18n.ts.file,
|
title: file ? i18n.ts.file + ': ' + file.name : i18n.ts.file,
|
||||||
icon: 'ph-file-bold ph-lg',
|
icon: 'ph-file ph-bold ph-lg',
|
||||||
})));
|
})));
|
||||||
|
|
||||||
let swiperRef = null;
|
let swiperRef = null;
|
||||||
|
|
|
@ -85,7 +85,7 @@ const headerTabs = $computed(() => []);
|
||||||
|
|
||||||
definePageMetadata({
|
definePageMetadata({
|
||||||
title: i18n.ts.abuseReports,
|
title: i18n.ts.abuseReports,
|
||||||
icon: 'ph-warning-circle-bold ph-lg',
|
icon: 'ph-warning-circle ph-bold ph-lg',
|
||||||
});
|
});
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
|
|
|
@ -16,8 +16,8 @@
|
||||||
</MkInput>
|
</MkInput>
|
||||||
<p v-if="announcement.reads">{{ i18n.t('nUsersRead', { n: announcement.reads }) }}</p>
|
<p v-if="announcement.reads">{{ i18n.t('nUsersRead', { n: announcement.reads }) }}</p>
|
||||||
<div class="buttons">
|
<div class="buttons">
|
||||||
<MkButton class="button" inline primary @click="save(announcement)"><i class="ph-floppy-disk-back-bold ph-lg"></i> {{ i18n.ts.save }}</MkButton>
|
<MkButton class="button" inline primary @click="save(announcement)"><i class="ph-floppy-disk-back ph-bold ph-lg"></i> {{ i18n.ts.save }}</MkButton>
|
||||||
<MkButton class="button" inline @click="remove(announcement)"><i class="ph-trash-bold ph-lg"></i> {{ i18n.ts.remove }}</MkButton>
|
<MkButton class="button" inline @click="remove(announcement)"><i class="ph-trash ph-bold ph-lg"></i> {{ i18n.ts.remove }}</MkButton>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</section>
|
</section>
|
||||||
|
@ -91,7 +91,7 @@ function save(announcement) {
|
||||||
|
|
||||||
const headerActions = $computed(() => [{
|
const headerActions = $computed(() => [{
|
||||||
asFullButton: true,
|
asFullButton: true,
|
||||||
icon: 'ph-plus-bold ph-lg',
|
icon: 'ph-plus ph-bold ph-lg',
|
||||||
text: i18n.ts.add,
|
text: i18n.ts.add,
|
||||||
handler: add,
|
handler: add,
|
||||||
}]);
|
}]);
|
||||||
|
@ -100,7 +100,7 @@ const headerTabs = $computed(() => []);
|
||||||
|
|
||||||
definePageMetadata({
|
definePageMetadata({
|
||||||
title: i18n.ts.announcements,
|
title: i18n.ts.announcements,
|
||||||
icon: 'ph-megaphone-simple-bold ph-lg',
|
icon: 'ph-megaphone-simple ph-bold ph-lg',
|
||||||
});
|
});
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
|
|
|
@ -10,11 +10,11 @@
|
||||||
|
|
||||||
<template v-if="provider === 'hcaptcha'">
|
<template v-if="provider === 'hcaptcha'">
|
||||||
<FormInput v-model="hcaptchaSiteKey" class="_formBlock">
|
<FormInput v-model="hcaptchaSiteKey" class="_formBlock">
|
||||||
<template #prefix><i class="ph-key-bold ph-lg"></i></template>
|
<template #prefix><i class="ph-key ph-bold ph-lg"></i></template>
|
||||||
<template #label>{{ i18n.ts.hcaptchaSiteKey }}</template>
|
<template #label>{{ i18n.ts.hcaptchaSiteKey }}</template>
|
||||||
</FormInput>
|
</FormInput>
|
||||||
<FormInput v-model="hcaptchaSecretKey" class="_formBlock">
|
<FormInput v-model="hcaptchaSecretKey" class="_formBlock">
|
||||||
<template #prefix><i class="ph-key-bold ph-lg"></i></template>
|
<template #prefix><i class="ph-key ph-bold ph-lg"></i></template>
|
||||||
<template #label>{{ i18n.ts.hcaptchaSecretKey }}</template>
|
<template #label>{{ i18n.ts.hcaptchaSecretKey }}</template>
|
||||||
</FormInput>
|
</FormInput>
|
||||||
<FormSlot class="_formBlock">
|
<FormSlot class="_formBlock">
|
||||||
|
@ -24,11 +24,11 @@
|
||||||
</template>
|
</template>
|
||||||
<template v-else-if="provider === 'recaptcha'">
|
<template v-else-if="provider === 'recaptcha'">
|
||||||
<FormInput v-model="recaptchaSiteKey" class="_formBlock">
|
<FormInput v-model="recaptchaSiteKey" class="_formBlock">
|
||||||
<template #prefix><i class="ph-key-bold ph-lg"></i></template>
|
<template #prefix><i class="ph-key ph-bold ph-lg"></i></template>
|
||||||
<template #label>{{ i18n.ts.recaptchaSiteKey }}</template>
|
<template #label>{{ i18n.ts.recaptchaSiteKey }}</template>
|
||||||
</FormInput>
|
</FormInput>
|
||||||
<FormInput v-model="recaptchaSecretKey" class="_formBlock">
|
<FormInput v-model="recaptchaSecretKey" class="_formBlock">
|
||||||
<template #prefix><i class="ph-key-bold ph-lg"></i></template>
|
<template #prefix><i class="ph-key ph-bold ph-lg"></i></template>
|
||||||
<template #label>{{ i18n.ts.recaptchaSecretKey }}</template>
|
<template #label>{{ i18n.ts.recaptchaSecretKey }}</template>
|
||||||
</FormInput>
|
</FormInput>
|
||||||
<FormSlot v-if="recaptchaSiteKey" class="_formBlock">
|
<FormSlot v-if="recaptchaSiteKey" class="_formBlock">
|
||||||
|
@ -37,7 +37,7 @@
|
||||||
</FormSlot>
|
</FormSlot>
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
<FormButton primary @click="save"><i class="ph-floppy-disk-back-bold ph-lg"></i> {{ i18n.ts.save }}</FormButton>
|
<FormButton primary @click="save"><i class="ph-floppy-disk-back ph-bold ph-lg"></i> {{ i18n.ts.save }}</FormButton>
|
||||||
</div>
|
</div>
|
||||||
</FormSuspense>
|
</FormSuspense>
|
||||||
</div>
|
</div>
|
||||||
|
|
|
@ -43,6 +43,6 @@ const headerTabs = $computed(() => []);
|
||||||
|
|
||||||
definePageMetadata({
|
definePageMetadata({
|
||||||
title: i18n.ts.customCss,
|
title: i18n.ts.customCss,
|
||||||
icon: 'ph-code-bold ph-lg',
|
icon: 'ph-code ph-bold ph-lg',
|
||||||
});
|
});
|
||||||
</script>
|
</script>
|
||||||
|
|
|
@ -28,6 +28,6 @@ const headerTabs = $computed(() => []);
|
||||||
|
|
||||||
definePageMetadata({
|
definePageMetadata({
|
||||||
title: i18n.ts.database,
|
title: i18n.ts.database,
|
||||||
icon: 'ph-database-bold ph-lg',
|
icon: 'ph-database ph-bold ph-lg',
|
||||||
});
|
});
|
||||||
</script>
|
</script>
|
||||||
|
|
|
@ -107,12 +107,12 @@ function save() {
|
||||||
|
|
||||||
const headerActions = $computed(() => [{
|
const headerActions = $computed(() => [{
|
||||||
asFullButton: true,
|
asFullButton: true,
|
||||||
icon: 'ph-test-tube-bold ph-lg',
|
icon: 'ph-test-tube ph-bold ph-lg',
|
||||||
text: i18n.ts.testEmail,
|
text: i18n.ts.testEmail,
|
||||||
handler: testEmail,
|
handler: testEmail,
|
||||||
}, {
|
}, {
|
||||||
asFullButton: true,
|
asFullButton: true,
|
||||||
icon: 'ph-check-bold ph-lg',
|
icon: 'ph-check ph-bold ph-lg',
|
||||||
text: i18n.ts.save,
|
text: i18n.ts.save,
|
||||||
handler: save,
|
handler: save,
|
||||||
}]);
|
}]);
|
||||||
|
@ -121,6 +121,6 @@ const headerTabs = $computed(() => []);
|
||||||
|
|
||||||
definePageMetadata({
|
definePageMetadata({
|
||||||
title: i18n.ts.emailServer,
|
title: i18n.ts.emailServer,
|
||||||
icon: 'ph-envelope-simple-open-bold ph-lg',
|
icon: 'ph-envelope-simple-open ph-bold ph-lg',
|
||||||
});
|
});
|
||||||
</script>
|
</script>
|
||||||
|
|
|
@ -22,7 +22,7 @@
|
||||||
<template #label>{{ i18n.ts.tags }}</template>
|
<template #label>{{ i18n.ts.tags }}</template>
|
||||||
<template #caption>{{ i18n.ts.setMultipleBySeparatingWithSpace }}</template>
|
<template #caption>{{ i18n.ts.setMultipleBySeparatingWithSpace }}</template>
|
||||||
</MkInput>
|
</MkInput>
|
||||||
<MkButton danger @click="del()"><i class="ph-trash-bold ph-lg"></i> {{ i18n.ts.delete }}</MkButton>
|
<MkButton danger @click="del()"><i class="ph-trash ph-bold ph-lg"></i> {{ i18n.ts.delete }}</MkButton>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</XModalWindow>
|
</XModalWindow>
|
||||||
|
|
|
@ -6,7 +6,7 @@
|
||||||
<div class="ogwlenmc">
|
<div class="ogwlenmc">
|
||||||
<div v-if="tab === 'local'" class="local">
|
<div v-if="tab === 'local'" class="local">
|
||||||
<MkInput v-model="query" :debounce="true" type="search">
|
<MkInput v-model="query" :debounce="true" type="search">
|
||||||
<template #prefix><i class="ph-magnifying-glass-bold ph-lg"></i></template>
|
<template #prefix><i class="ph-magnifying-glass ph-bold ph-lg"></i></template>
|
||||||
<template #label>{{ i18n.ts.search }}</template>
|
<template #label>{{ i18n.ts.search }}</template>
|
||||||
</MkInput>
|
</MkInput>
|
||||||
<MkSwitch v-model="selectMode" style="margin: 8px 0;">
|
<MkSwitch v-model="selectMode" style="margin: 8px 0;">
|
||||||
|
@ -39,7 +39,7 @@
|
||||||
<div v-else-if="tab === 'remote'" class="remote">
|
<div v-else-if="tab === 'remote'" class="remote">
|
||||||
<FormSplit>
|
<FormSplit>
|
||||||
<MkInput v-model="queryRemote" :debounce="true" type="search">
|
<MkInput v-model="queryRemote" :debounce="true" type="search">
|
||||||
<template #prefix><i class="ph-magnifying-glass-bold ph-lg"></i></template>
|
<template #prefix><i class="ph-magnifying-glass ph-bold ph-lg"></i></template>
|
||||||
<template #label>{{ i18n.ts.search }}</template>
|
<template #label>{{ i18n.ts.search }}</template>
|
||||||
</MkInput>
|
</MkInput>
|
||||||
<MkInput v-model="host" :debounce="true">
|
<MkInput v-model="host" :debounce="true">
|
||||||
|
@ -163,14 +163,14 @@ const remoteMenu = (emoji, ev: MouseEvent) => {
|
||||||
text: ':' + emoji.name + ':',
|
text: ':' + emoji.name + ':',
|
||||||
}, {
|
}, {
|
||||||
text: i18n.ts.import,
|
text: i18n.ts.import,
|
||||||
icon: 'ph-plus-bold ph-lg',
|
icon: 'ph-plus ph-bold ph-lg',
|
||||||
action: () => { im(emoji); },
|
action: () => { im(emoji); },
|
||||||
}], ev.currentTarget ?? ev.target);
|
}], ev.currentTarget ?? ev.target);
|
||||||
};
|
};
|
||||||
|
|
||||||
const menu = (ev: MouseEvent) => {
|
const menu = (ev: MouseEvent) => {
|
||||||
os.popupMenu([{
|
os.popupMenu([{
|
||||||
icon: 'ph-download-simple-bold ph-lg',
|
icon: 'ph-download-simple ph-bold ph-lg',
|
||||||
text: i18n.ts.export,
|
text: i18n.ts.export,
|
||||||
action: async () => {
|
action: async () => {
|
||||||
os.api('export-custom-emojis', {
|
os.api('export-custom-emojis', {
|
||||||
|
@ -188,7 +188,7 @@ const menu = (ev: MouseEvent) => {
|
||||||
});
|
});
|
||||||
},
|
},
|
||||||
}, {
|
}, {
|
||||||
icon: 'ph-upload-simple-bold ph-lg',
|
icon: 'ph-upload-simple ph-bold ph-lg',
|
||||||
text: i18n.ts.import,
|
text: i18n.ts.import,
|
||||||
action: async () => {
|
action: async () => {
|
||||||
const file = await selectFile(ev.currentTarget ?? ev.target);
|
const file = await selectFile(ev.currentTarget ?? ev.target);
|
||||||
|
@ -272,27 +272,27 @@ const delBulk = async () => {
|
||||||
|
|
||||||
const headerActions = $computed(() => [{
|
const headerActions = $computed(() => [{
|
||||||
asFullButton: true,
|
asFullButton: true,
|
||||||
icon: 'ph-plus-bold ph-lg',
|
icon: 'ph-plus ph-bold ph-lg',
|
||||||
text: i18n.ts.addEmoji,
|
text: i18n.ts.addEmoji,
|
||||||
handler: add,
|
handler: add,
|
||||||
}, {
|
}, {
|
||||||
icon: 'ph-dots-three-outline-bold ph-lg',
|
icon: 'ph-dots-three-outline ph-bold ph-lg',
|
||||||
handler: menu,
|
handler: menu,
|
||||||
}]);
|
}]);
|
||||||
|
|
||||||
const headerTabs = $computed(() => [{
|
const headerTabs = $computed(() => [{
|
||||||
key: 'local',
|
key: 'local',
|
||||||
icon: 'ph-hand-fist-bold ph-lg',
|
icon: 'ph-hand-fist ph-bold ph-lg',
|
||||||
title: i18n.ts.local,
|
title: i18n.ts.local,
|
||||||
}, {
|
}, {
|
||||||
key: 'remote',
|
key: 'remote',
|
||||||
icon: 'ph-planet-bold ph-lg',
|
icon: 'ph-planet ph-bold ph-lg',
|
||||||
title: i18n.ts.remote,
|
title: i18n.ts.remote,
|
||||||
}]);
|
}]);
|
||||||
|
|
||||||
definePageMetadata(computed(() => ({
|
definePageMetadata(computed(() => ({
|
||||||
title: i18n.ts.customEmojis,
|
title: i18n.ts.customEmojis,
|
||||||
icon: 'ph-smiley-bold ph-lg',
|
icon: 'ph-smiley ph-bold ph-lg',
|
||||||
})));
|
})));
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
|
|
|
@ -21,6 +21,6 @@ const headerTabs = $computed(() => []);
|
||||||
|
|
||||||
definePageMetadata(computed(() => ({
|
definePageMetadata(computed(() => ({
|
||||||
title: i18n.ts.federation,
|
title: i18n.ts.federation,
|
||||||
icon: 'ph-planet-bold ph-lg',
|
icon: 'ph-planet ph-bold ph-lg',
|
||||||
})));
|
})));
|
||||||
</script>
|
</script>
|
||||||
|
|
|
@ -96,11 +96,11 @@ async function find() {
|
||||||
|
|
||||||
const headerActions = $computed(() => [{
|
const headerActions = $computed(() => [{
|
||||||
text: i18n.ts.lookup,
|
text: i18n.ts.lookup,
|
||||||
icon: 'ph-magnifying-glass-bold ph-lg',
|
icon: 'ph-magnifying-glass ph-bold ph-lg',
|
||||||
handler: find,
|
handler: find,
|
||||||
}, {
|
}, {
|
||||||
text: i18n.ts.clearCachedFiles,
|
text: i18n.ts.clearCachedFiles,
|
||||||
icon: 'ph-trash-bold ph-lg',
|
icon: 'ph-trash ph-bold ph-lg',
|
||||||
handler: clear,
|
handler: clear,
|
||||||
}]);
|
}]);
|
||||||
|
|
||||||
|
@ -108,7 +108,7 @@ const headerTabs = $computed(() => []);
|
||||||
|
|
||||||
definePageMetadata(computed(() => ({
|
definePageMetadata(computed(() => ({
|
||||||
title: i18n.ts.files,
|
title: i18n.ts.files,
|
||||||
icon: 'ph-cloud-bold ph-lg',
|
icon: 'ph-cloud ph-bold ph-lg',
|
||||||
})));
|
})));
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
|
|
|
@ -44,7 +44,7 @@ const router = useRouter();
|
||||||
|
|
||||||
const indexInfo = {
|
const indexInfo = {
|
||||||
title: i18n.ts.controlPanel,
|
title: i18n.ts.controlPanel,
|
||||||
icon: 'ph-gear-six-bold ph-lg',
|
icon: 'ph-gear-six ph-bold ph-lg',
|
||||||
hideHeader: true,
|
hideHeader: true,
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -90,59 +90,59 @@ const menuDef = $computed(() => [{
|
||||||
title: i18n.ts.quickAction,
|
title: i18n.ts.quickAction,
|
||||||
items: [{
|
items: [{
|
||||||
type: 'button',
|
type: 'button',
|
||||||
icon: 'ph-magnifying-glass-bold ph-lg',
|
icon: 'ph-magnifying-glass ph-bold ph-lg',
|
||||||
text: i18n.ts.lookup,
|
text: i18n.ts.lookup,
|
||||||
action: lookup,
|
action: lookup,
|
||||||
}, ...(instance.disableRegistration ? [{
|
}, ...(instance.disableRegistration ? [{
|
||||||
type: 'button',
|
type: 'button',
|
||||||
icon: 'ph-user-plus-bold ph-lg',
|
icon: 'ph-user-plus ph-bold ph-lg',
|
||||||
text: i18n.ts.invite,
|
text: i18n.ts.invite,
|
||||||
action: invite,
|
action: invite,
|
||||||
}] : [])],
|
}] : [])],
|
||||||
}, {
|
}, {
|
||||||
title: i18n.ts.administration,
|
title: i18n.ts.administration,
|
||||||
items: [{
|
items: [{
|
||||||
icon: 'ph-gauge-bold ph-lg',
|
icon: 'ph-gauge ph-bold ph-lg',
|
||||||
text: i18n.ts.dashboard,
|
text: i18n.ts.dashboard,
|
||||||
to: '/admin/overview',
|
to: '/admin/overview',
|
||||||
active: currentPage?.route.name === 'overview',
|
active: currentPage?.route.name === 'overview',
|
||||||
}, {
|
}, {
|
||||||
icon: 'ph-users-bold ph-lg',
|
icon: 'ph-users ph-bold ph-lg',
|
||||||
text: i18n.ts.users,
|
text: i18n.ts.users,
|
||||||
to: '/admin/users',
|
to: '/admin/users',
|
||||||
active: currentPage?.route.name === 'users',
|
active: currentPage?.route.name === 'users',
|
||||||
}, {
|
}, {
|
||||||
icon: 'ph-smiley-bold ph-lg',
|
icon: 'ph-smiley ph-bold ph-lg',
|
||||||
text: i18n.ts.customEmojis,
|
text: i18n.ts.customEmojis,
|
||||||
to: '/admin/emojis',
|
to: '/admin/emojis',
|
||||||
active: currentPage?.route.name === 'emojis',
|
active: currentPage?.route.name === 'emojis',
|
||||||
}, {
|
}, {
|
||||||
icon: 'ph-planet-bold ph-lg',
|
icon: 'ph-planet ph-bold ph-lg',
|
||||||
text: i18n.ts.federation,
|
text: i18n.ts.federation,
|
||||||
to: '/admin/federation',
|
to: '/admin/federation',
|
||||||
active: currentPage?.route.name === 'federation',
|
active: currentPage?.route.name === 'federation',
|
||||||
}, {
|
}, {
|
||||||
icon: 'ph-clipboard-text-bold ph-lg',
|
icon: 'ph-clipboard-text ph-bold ph-lg',
|
||||||
text: i18n.ts.jobQueue,
|
text: i18n.ts.jobQueue,
|
||||||
to: '/admin/queue',
|
to: '/admin/queue',
|
||||||
active: currentPage?.route.name === 'queue',
|
active: currentPage?.route.name === 'queue',
|
||||||
}, {
|
}, {
|
||||||
icon: 'ph-cloud-bold ph-lg',
|
icon: 'ph-cloud ph-bold ph-lg',
|
||||||
text: i18n.ts.files,
|
text: i18n.ts.files,
|
||||||
to: '/admin/files',
|
to: '/admin/files',
|
||||||
active: currentPage?.route.name === 'files',
|
active: currentPage?.route.name === 'files',
|
||||||
}, {
|
}, {
|
||||||
icon: 'ph-megaphone-simple-bold ph-lg',
|
icon: 'ph-megaphone-simple ph-bold ph-lg',
|
||||||
text: i18n.ts.announcements,
|
text: i18n.ts.announcements,
|
||||||
to: '/admin/announcements',
|
to: '/admin/announcements',
|
||||||
active: currentPage?.route.name === 'announcements',
|
active: currentPage?.route.name === 'announcements',
|
||||||
}, {
|
}, {
|
||||||
icon: 'ph-money-bold ph-lg',
|
icon: 'ph-money ph-bold ph-lg',
|
||||||
text: i18n.ts.ads,
|
text: i18n.ts.ads,
|
||||||
to: '/admin/ads',
|
to: '/admin/ads',
|
||||||
active: currentPage?.route.name === 'ads',
|
active: currentPage?.route.name === 'ads',
|
||||||
}, {
|
}, {
|
||||||
icon: 'ph-warning-circle-bold ph-lg',
|
icon: 'ph-warning-circle ph-bold ph-lg',
|
||||||
text: i18n.ts.abuseReports,
|
text: i18n.ts.abuseReports,
|
||||||
to: '/admin/abuses',
|
to: '/admin/abuses',
|
||||||
active: currentPage?.route.name === 'abuses',
|
active: currentPage?.route.name === 'abuses',
|
||||||
|
@ -150,42 +150,42 @@ const menuDef = $computed(() => [{
|
||||||
}, ...($i?.isAdmin ? [{
|
}, ...($i?.isAdmin ? [{
|
||||||
title: i18n.ts.settings,
|
title: i18n.ts.settings,
|
||||||
items: [{
|
items: [{
|
||||||
icon: 'ph-gear-six-bold ph-lg',
|
icon: 'ph-gear-six ph-bold ph-lg',
|
||||||
text: i18n.ts.general,
|
text: i18n.ts.general,
|
||||||
to: '/admin/settings',
|
to: '/admin/settings',
|
||||||
active: currentPage?.route.name === 'settings',
|
active: currentPage?.route.name === 'settings',
|
||||||
}, {
|
}, {
|
||||||
icon: 'ph-envelope-simple-open-bold ph-lg',
|
icon: 'ph-envelope-simple-open ph-bold ph-lg',
|
||||||
text: i18n.ts.emailServer,
|
text: i18n.ts.emailServer,
|
||||||
to: '/admin/email-settings',
|
to: '/admin/email-settings',
|
||||||
active: currentPage?.route.name === 'email-settings',
|
active: currentPage?.route.name === 'email-settings',
|
||||||
}, {
|
}, {
|
||||||
icon: 'ph-cloud-bold ph-lg',
|
icon: 'ph-cloud ph-bold ph-lg',
|
||||||
text: i18n.ts.objectStorage,
|
text: i18n.ts.objectStorage,
|
||||||
to: '/admin/object-storage',
|
to: '/admin/object-storage',
|
||||||
active: currentPage?.route.name === 'object-storage',
|
active: currentPage?.route.name === 'object-storage',
|
||||||
}, {
|
}, {
|
||||||
icon: 'ph-lock-bold ph-lg',
|
icon: 'ph-lock ph-bold ph-lg',
|
||||||
text: i18n.ts.security,
|
text: i18n.ts.security,
|
||||||
to: '/admin/security',
|
to: '/admin/security',
|
||||||
active: currentPage?.route.name === 'security',
|
active: currentPage?.route.name === 'security',
|
||||||
}, {
|
}, {
|
||||||
icon: 'ph-flow-arrow-bold ph-lg',
|
icon: 'ph-flow-arrow ph-bold ph-lg',
|
||||||
text: i18n.ts.relays,
|
text: i18n.ts.relays,
|
||||||
to: '/admin/relays',
|
to: '/admin/relays',
|
||||||
active: currentPage?.route.name === 'relays',
|
active: currentPage?.route.name === 'relays',
|
||||||
}, {
|
}, {
|
||||||
icon: 'ph-plug-bold ph-lg',
|
icon: 'ph-plug ph-bold ph-lg',
|
||||||
text: i18n.ts.integration,
|
text: i18n.ts.integration,
|
||||||
to: '/admin/integrations',
|
to: '/admin/integrations',
|
||||||
active: currentPage?.route.name === 'integrations',
|
active: currentPage?.route.name === 'integrations',
|
||||||
}, {
|
}, {
|
||||||
icon: 'ph-prohibit-bold ph-lg',
|
icon: 'ph-prohibit ph-bold ph-lg',
|
||||||
text: i18n.ts.instanceBlocking,
|
text: i18n.ts.instanceBlocking,
|
||||||
to: '/admin/instance-block',
|
to: '/admin/instance-block',
|
||||||
active: currentPage?.route.name === 'instance-block',
|
active: currentPage?.route.name === 'instance-block',
|
||||||
}, {
|
}, {
|
||||||
icon: 'ph-ghost-bold ph-lg',
|
icon: 'ph-ghost ph-bold ph-lg',
|
||||||
text: i18n.ts.proxyAccount,
|
text: i18n.ts.proxyAccount,
|
||||||
to: '/admin/proxy-account',
|
to: '/admin/proxy-account',
|
||||||
active: currentPage?.route.name === 'proxy-account',
|
active: currentPage?.route.name === 'proxy-account',
|
||||||
|
@ -193,7 +193,7 @@ const menuDef = $computed(() => [{
|
||||||
}] : []), {
|
}] : []), {
|
||||||
title: i18n.ts.info,
|
title: i18n.ts.info,
|
||||||
items: [{
|
items: [{
|
||||||
icon: 'ph-database-bold ph-lg',
|
icon: 'ph-database ph-bold ph-lg',
|
||||||
text: i18n.ts.database,
|
text: i18n.ts.database,
|
||||||
to: '/admin/database',
|
to: '/admin/database',
|
||||||
active: currentPage?.route.name === 'database',
|
active: currentPage?.route.name === 'database',
|
||||||
|
@ -244,25 +244,25 @@ const invite = () => {
|
||||||
const lookup = (ev) => {
|
const lookup = (ev) => {
|
||||||
os.popupMenu([{
|
os.popupMenu([{
|
||||||
text: i18n.ts.user,
|
text: i18n.ts.user,
|
||||||
icon: 'ph-user-bold ph-lg',
|
icon: 'ph-user ph-bold ph-lg',
|
||||||
action: () => {
|
action: () => {
|
||||||
lookupUser();
|
lookupUser();
|
||||||
},
|
},
|
||||||
}, {
|
}, {
|
||||||
text: i18n.ts.note,
|
text: i18n.ts.note,
|
||||||
icon: 'ph-pencil-bold ph-lg',
|
icon: 'ph-pencil ph-bold ph-lg',
|
||||||
action: () => {
|
action: () => {
|
||||||
alert('TODO');
|
alert('TODO');
|
||||||
},
|
},
|
||||||
}, {
|
}, {
|
||||||
text: i18n.ts.file,
|
text: i18n.ts.file,
|
||||||
icon: 'ph-cloud-bold ph-lg',
|
icon: 'ph-cloud ph-bold ph-lg',
|
||||||
action: () => {
|
action: () => {
|
||||||
alert('TODO');
|
alert('TODO');
|
||||||
},
|
},
|
||||||
}, {
|
}, {
|
||||||
text: i18n.ts.instance,
|
text: i18n.ts.instance,
|
||||||
icon: 'ph-planet-bold ph-lg',
|
icon: 'ph-planet ph-bold ph-lg',
|
||||||
action: () => {
|
action: () => {
|
||||||
alert('TODO');
|
alert('TODO');
|
||||||
},
|
},
|
||||||
|
|
|
@ -8,7 +8,7 @@
|
||||||
<template #caption>{{ i18n.ts.blockedInstancesDescription }}</template>
|
<template #caption>{{ i18n.ts.blockedInstancesDescription }}</template>
|
||||||
</FormTextarea>
|
</FormTextarea>
|
||||||
|
|
||||||
<FormButton primary class="_formBlock" @click="save"><i class="ph-floppy-disk-back-bold ph-lg"></i> {{ i18n.ts.save }}</FormButton>
|
<FormButton primary class="_formBlock" @click="save"><i class="ph-floppy-disk-back ph-bold ph-lg"></i> {{ i18n.ts.save }}</FormButton>
|
||||||
</FormSuspense>
|
</FormSuspense>
|
||||||
</MkSpacer>
|
</MkSpacer>
|
||||||
</MkStickyContainer>
|
</MkStickyContainer>
|
||||||
|
@ -45,6 +45,6 @@ const headerTabs = $computed(() => []);
|
||||||
|
|
||||||
definePageMetadata({
|
definePageMetadata({
|
||||||
title: i18n.ts.instanceBlocking,
|
title: i18n.ts.instanceBlocking,
|
||||||
icon: 'ph-prohibit-bold ph-lg',
|
icon: 'ph-prohibit ph-bold ph-lg',
|
||||||
});
|
});
|
||||||
</script>
|
</script>
|
||||||
|
|
|
@ -9,17 +9,17 @@
|
||||||
<FormInfo class="_formBlock">Callback URL: {{ `${uri}/api/dc/cb` }}</FormInfo>
|
<FormInfo class="_formBlock">Callback URL: {{ `${uri}/api/dc/cb` }}</FormInfo>
|
||||||
|
|
||||||
<FormInput v-model="discordClientId" class="_formBlock">
|
<FormInput v-model="discordClientId" class="_formBlock">
|
||||||
<template #prefix><i class="ph-key-bold ph-lg"></i></template>
|
<template #prefix><i class="ph-key ph-bold ph-lg"></i></template>
|
||||||
<template #label>Client ID</template>
|
<template #label>Client ID</template>
|
||||||
</FormInput>
|
</FormInput>
|
||||||
|
|
||||||
<FormInput v-model="discordClientSecret" class="_formBlock">
|
<FormInput v-model="discordClientSecret" class="_formBlock">
|
||||||
<template #prefix><i class="ph-key-bold ph-lg"></i></template>
|
<template #prefix><i class="ph-key ph-bold ph-lg"></i></template>
|
||||||
<template #label>Client Secret</template>
|
<template #label>Client Secret</template>
|
||||||
</FormInput>
|
</FormInput>
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
<FormButton primary class="_formBlock" @click="save"><i class="ph-floppy-disk-back-bold ph-lg"></i> {{ i18n.ts.save }}</FormButton>
|
<FormButton primary class="_formBlock" @click="save"><i class="ph-floppy-disk-back ph-bold ph-lg"></i> {{ i18n.ts.save }}</FormButton>
|
||||||
</div>
|
</div>
|
||||||
</FormSuspense>
|
</FormSuspense>
|
||||||
</template>
|
</template>
|
||||||
|
|
|
@ -9,17 +9,17 @@
|
||||||
<FormInfo class="_formBlock">Callback URL: {{ `${uri}/api/gh/cb` }}</FormInfo>
|
<FormInfo class="_formBlock">Callback URL: {{ `${uri}/api/gh/cb` }}</FormInfo>
|
||||||
|
|
||||||
<FormInput v-model="githubClientId" class="_formBlock">
|
<FormInput v-model="githubClientId" class="_formBlock">
|
||||||
<template #prefix><i class="ph-key-bold ph-lg"></i></template>
|
<template #prefix><i class="ph-key ph-bold ph-lg"></i></template>
|
||||||
<template #label>Client ID</template>
|
<template #label>Client ID</template>
|
||||||
</FormInput>
|
</FormInput>
|
||||||
|
|
||||||
<FormInput v-model="githubClientSecret" class="_formBlock">
|
<FormInput v-model="githubClientSecret" class="_formBlock">
|
||||||
<template #prefix><i class="ph-key-bold ph-lg"></i></template>
|
<template #prefix><i class="ph-key ph-bold ph-lg"></i></template>
|
||||||
<template #label>Client Secret</template>
|
<template #label>Client Secret</template>
|
||||||
</FormInput>
|
</FormInput>
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
<FormButton primary class="_formBlock" @click="save"><i class="ph-floppy-disk-back-bold ph-lg"></i> {{ i18n.ts.save }}</FormButton>
|
<FormButton primary class="_formBlock" @click="save"><i class="ph-floppy-disk-back ph-bold ph-lg"></i> {{ i18n.ts.save }}</FormButton>
|
||||||
</div>
|
</div>
|
||||||
</FormSuspense>
|
</FormSuspense>
|
||||||
</template>
|
</template>
|
||||||
|
|
|
@ -4,13 +4,13 @@
|
||||||
<MkSpacer :content-max="700" :margin-min="16" :margin-max="32">
|
<MkSpacer :content-max="700" :margin-min="16" :margin-max="32">
|
||||||
<FormSuspense :p="init">
|
<FormSuspense :p="init">
|
||||||
<FormFolder class="_formBlock">
|
<FormFolder class="_formBlock">
|
||||||
<template #icon><i class="ph-github-logo-bold ph-lg"></i></template>
|
<template #icon><i class="ph-github-logo ph-bold ph-lg"></i></template>
|
||||||
<template #label>GitHub</template>
|
<template #label>GitHub</template>
|
||||||
<template #suffix>{{ enableGithubIntegration ? i18n.ts.enabled : i18n.ts.disabled }}</template>
|
<template #suffix>{{ enableGithubIntegration ? i18n.ts.enabled : i18n.ts.disabled }}</template>
|
||||||
<XGithub/>
|
<XGithub/>
|
||||||
</FormFolder>
|
</FormFolder>
|
||||||
<FormFolder class="_formBlock">
|
<FormFolder class="_formBlock">
|
||||||
<template #icon><i class="ph-discord-logo-bold ph-lg"></i></template>
|
<template #icon><i class="ph-discord-logo ph-bold ph-lg"></i></template>
|
||||||
<template #label>Discord</template>
|
<template #label>Discord</template>
|
||||||
<template #suffix>{{ enableDiscordIntegration ? i18n.ts.enabled : i18n.ts.disabled }}</template>
|
<template #suffix>{{ enableDiscordIntegration ? i18n.ts.enabled : i18n.ts.disabled }}</template>
|
||||||
<XDiscord/>
|
<XDiscord/>
|
||||||
|
@ -47,6 +47,6 @@ const headerTabs = $computed(() => []);
|
||||||
|
|
||||||
definePageMetadata({
|
definePageMetadata({
|
||||||
title: i18n.ts.integration,
|
title: i18n.ts.integration,
|
||||||
icon: 'ph-plug-bold ph-lg',
|
icon: 'ph-plug ph-bold ph-lg',
|
||||||
});
|
});
|
||||||
</script>
|
</script>
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
<template>
|
<template>
|
||||||
<div class="_debobigegoItem">
|
<div class="_debobigegoItem">
|
||||||
<div class="_debobigegoLabel"><i class="ph-microchip-bold ph-lg"></i> {{ i18n.ts.cpuAndMemory }}</div>
|
<div class="_debobigegoLabel"><i class="ph-microchip ph-bold ph-lg"></i> {{ i18n.ts.cpuAndMemory }}</div>
|
||||||
<div class="_debobigegoPanel xhexznfu">
|
<div class="_debobigegoPanel xhexznfu">
|
||||||
<div>
|
<div>
|
||||||
<canvas :ref="cpumem"></canvas>
|
<canvas :ref="cpumem"></canvas>
|
||||||
|
@ -17,7 +17,7 @@
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="_debobigegoItem">
|
<div class="_debobigegoItem">
|
||||||
<div class="_debobigegoLabel"><i class="ph-hard-drives-bold ph-lg"></i> {{ i18n.ts.disk }}</div>
|
<div class="_debobigegoLabel"><i class="ph-hard-drives ph-bold ph-lg"></i> {{ i18n.ts.disk }}</div>
|
||||||
<div class="_debobigegoPanel xhexznfu">
|
<div class="_debobigegoPanel xhexznfu">
|
||||||
<div>
|
<div>
|
||||||
<canvas :ref="disk"></canvas>
|
<canvas :ref="disk"></canvas>
|
||||||
|
@ -34,7 +34,7 @@
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="_debobigegoItem">
|
<div class="_debobigegoItem">
|
||||||
<div class="_debobigegoLabel"><i class="ph-swap-bold ph-lg"></i> {{ i18n.ts.network }}</div>
|
<div class="_debobigegoLabel"><i class="ph-swap ph-bold ph-lg"></i> {{ i18n.ts.network }}</div>
|
||||||
<div class="_debobigegoPanel xhexznfu">
|
<div class="_debobigegoPanel xhexznfu">
|
||||||
<div>
|
<div>
|
||||||
<canvas :ref="net"></canvas>
|
<canvas :ref="net"></canvas>
|
||||||
|
|
|
@ -34,12 +34,12 @@
|
||||||
|
|
||||||
<FormSplit :min-width="280">
|
<FormSplit :min-width="280">
|
||||||
<FormInput v-model="objectStorageAccessKey" class="_formBlock">
|
<FormInput v-model="objectStorageAccessKey" class="_formBlock">
|
||||||
<template #prefix><i class="ph-key-bold ph-lg"></i></template>
|
<template #prefix><i class="ph-key ph-bold ph-lg"></i></template>
|
||||||
<template #label>Access key</template>
|
<template #label>Access key</template>
|
||||||
</FormInput>
|
</FormInput>
|
||||||
|
|
||||||
<FormInput v-model="objectStorageSecretKey" class="_formBlock">
|
<FormInput v-model="objectStorageSecretKey" class="_formBlock">
|
||||||
<template #prefix><i class="ph-key-bold ph-lg"></i></template>
|
<template #prefix><i class="ph-key ph-bold ph-lg"></i></template>
|
||||||
<template #label>Secret key</template>
|
<template #label>Secret key</template>
|
||||||
</FormInput>
|
</FormInput>
|
||||||
</FormSplit>
|
</FormSplit>
|
||||||
|
@ -133,7 +133,7 @@ function save() {
|
||||||
|
|
||||||
const headerActions = $computed(() => [{
|
const headerActions = $computed(() => [{
|
||||||
asFullButton: true,
|
asFullButton: true,
|
||||||
icon: 'ph-check-bold ph-lg',
|
icon: 'ph-check ph-bold ph-lg',
|
||||||
text: i18n.ts.save,
|
text: i18n.ts.save,
|
||||||
handler: save,
|
handler: save,
|
||||||
}]);
|
}]);
|
||||||
|
@ -142,6 +142,6 @@ const headerTabs = $computed(() => []);
|
||||||
|
|
||||||
definePageMetadata({
|
definePageMetadata({
|
||||||
title: i18n.ts.objectStorage,
|
title: i18n.ts.objectStorage,
|
||||||
icon: 'ph-cloud-bold ph-lg',
|
icon: 'ph-cloud ph-bold ph-lg',
|
||||||
});
|
});
|
||||||
</script>
|
</script>
|
||||||
|
|
|
@ -29,7 +29,7 @@ function save() {
|
||||||
|
|
||||||
const headerActions = $computed(() => [{
|
const headerActions = $computed(() => [{
|
||||||
asFullButton: true,
|
asFullButton: true,
|
||||||
icon: 'ph-check-bold ph-lg',
|
icon: 'ph-check ph-bold ph-lg',
|
||||||
text: i18n.ts.save,
|
text: i18n.ts.save,
|
||||||
handler: save,
|
handler: save,
|
||||||
}]);
|
}]);
|
||||||
|
@ -38,6 +38,6 @@ const headerTabs = $computed(() => []);
|
||||||
|
|
||||||
definePageMetadata({
|
definePageMetadata({
|
||||||
title: i18n.ts.other,
|
title: i18n.ts.other,
|
||||||
icon: 'ph-gear-six-bold ph-lg',
|
icon: 'ph-gear-six ph-bold ph-lg',
|
||||||
});
|
});
|
||||||
</script>
|
</script>
|
||||||
|
|
|
@ -16,7 +16,7 @@
|
||||||
</div>
|
</div>
|
||||||
<div v-if="!fetching" class="items">
|
<div v-if="!fetching" class="items">
|
||||||
<div class="item _panel sub">
|
<div class="item _panel sub">
|
||||||
<div class="icon"><i class="ph-download-bold ph-xl"></i></div>
|
<div class="icon"><i class="ph-download ph-bold ph-xl"></i></div>
|
||||||
<div class="body">
|
<div class="body">
|
||||||
<div class="value">
|
<div class="value">
|
||||||
{{ number(federationSubActive) }}
|
{{ number(federationSubActive) }}
|
||||||
|
@ -26,7 +26,7 @@
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="item _panel pub">
|
<div class="item _panel pub">
|
||||||
<div class="icon"><i class="ph-upload-bold ph-xl"></i></div>
|
<div class="icon"><i class="ph-upload ph-bold ph-xl"></i></div>
|
||||||
<div class="body">
|
<div class="body">
|
||||||
<div class="value">
|
<div class="value">
|
||||||
{{ number(federationPubActive) }}
|
{{ number(federationPubActive) }}
|
||||||
|
|
|
@ -4,7 +4,7 @@
|
||||||
<MkLoading v-if="fetching"/>
|
<MkLoading v-if="fetching"/>
|
||||||
<div v-else :class="$style.root">
|
<div v-else :class="$style.root">
|
||||||
<div class="item _panel users">
|
<div class="item _panel users">
|
||||||
<div class="icon"><i class="ph-users-bold ph-xl"></i></div>
|
<div class="icon"><i class="ph-users ph-bold ph-xl"></i></div>
|
||||||
<div class="body">
|
<div class="body">
|
||||||
<div class="value">
|
<div class="value">
|
||||||
<MkNumber :value="stats.originalUsersCount" style="margin-right: 0.5em;"/>
|
<MkNumber :value="stats.originalUsersCount" style="margin-right: 0.5em;"/>
|
||||||
|
@ -14,7 +14,7 @@
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="item _panel notes">
|
<div class="item _panel notes">
|
||||||
<div class="icon"><i class="ph-pencil-bold ph-xl"></i></div>
|
<div class="icon"><i class="ph-pencil ph-bold ph-xl"></i></div>
|
||||||
<div class="body">
|
<div class="body">
|
||||||
<div class="value">
|
<div class="value">
|
||||||
<MkNumber :value="stats.originalNotesCount" style="margin-right: 0.5em;"/>
|
<MkNumber :value="stats.originalNotesCount" style="margin-right: 0.5em;"/>
|
||||||
|
@ -24,7 +24,7 @@
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="item _panel instances">
|
<div class="item _panel instances">
|
||||||
<div class="icon"><i class="ph-planet-bold ph-xl"></i></div>
|
<div class="icon"><i class="ph-planet ph-bold ph-xl"></i></div>
|
||||||
<div class="body">
|
<div class="body">
|
||||||
<div class="value">
|
<div class="value">
|
||||||
<MkNumber :value="stats.instances" style="margin-right: 0.5em;"/>
|
<MkNumber :value="stats.instances" style="margin-right: 0.5em;"/>
|
||||||
|
@ -33,7 +33,7 @@
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="item _panel online">
|
<div class="item _panel online">
|
||||||
<div class="icon"><i class="ph-broadcast-bold ph-xl"></i></div>
|
<div class="icon"><i class="ph-broadcast ph-bold ph-xl"></i></div>
|
||||||
<div class="body">
|
<div class="body">
|
||||||
<div class="value">
|
<div class="value">
|
||||||
<MkNumber :value="onlineUsersCount" style="margin-right: 0.5em;"/>
|
<MkNumber :value="onlineUsersCount" style="margin-right: 0.5em;"/>
|
||||||
|
|
|
@ -170,7 +170,7 @@ const headerTabs = $computed(() => []);
|
||||||
|
|
||||||
definePageMetadata({
|
definePageMetadata({
|
||||||
title: i18n.ts.dashboard,
|
title: i18n.ts.dashboard,
|
||||||
icon: 'ph-gauge-bold ph-lg',
|
icon: 'ph-gauge ph-bold ph-lg',
|
||||||
});
|
});
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
|
|
|
@ -29,8 +29,8 @@
|
||||||
<template #label>{{ i18n.ts.memo }}</template>
|
<template #label>{{ i18n.ts.memo }}</template>
|
||||||
</MkTextarea>
|
</MkTextarea>
|
||||||
<div class="buttons _formBlock">
|
<div class="buttons _formBlock">
|
||||||
<MkButton class="button" inline primary style="margin-right: 12px;" @click="save(ad)"><i class="ph-floppy-disk-back-bold ph-lg"></i> {{ i18n.ts.save }}</MkButton>
|
<MkButton class="button" inline primary style="margin-right: 12px;" @click="save(ad)"><i class="ph-floppy-disk-back ph-bold ph-lg"></i> {{ i18n.ts.save }}</MkButton>
|
||||||
<MkButton class="button" inline danger @click="remove(ad)"><i class="ph-trash-bold ph-lg"></i> {{ i18n.ts.remove }}</MkButton>
|
<MkButton class="button" inline danger @click="remove(ad)"><i class="ph-trash ph-bold ph-lg"></i> {{ i18n.ts.remove }}</MkButton>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
@ -103,7 +103,7 @@ function save(ad) {
|
||||||
|
|
||||||
const headerActions = $computed(() => [{
|
const headerActions = $computed(() => [{
|
||||||
asFullButton: true,
|
asFullButton: true,
|
||||||
icon: 'ph-plus-bold ph-lg',
|
icon: 'ph-plus ph-bold ph-lg',
|
||||||
text: i18n.ts.add,
|
text: i18n.ts.add,
|
||||||
handler: add,
|
handler: add,
|
||||||
}]);
|
}]);
|
||||||
|
@ -112,7 +112,7 @@ const headerTabs = $computed(() => []);
|
||||||
|
|
||||||
definePageMetadata({
|
definePageMetadata({
|
||||||
title: i18n.ts.ads,
|
title: i18n.ts.ads,
|
||||||
icon: 'ph-money-bold ph-lg',
|
icon: 'ph-money ph-bold ph-lg',
|
||||||
});
|
});
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
|
|
|
@ -59,6 +59,6 @@ const headerTabs = $computed(() => []);
|
||||||
|
|
||||||
definePageMetadata({
|
definePageMetadata({
|
||||||
title: i18n.ts.proxyAccount,
|
title: i18n.ts.proxyAccount,
|
||||||
icon: 'ph-ghost-bold ph-lg',
|
icon: 'ph-ghost ph-bold ph-lg',
|
||||||
});
|
});
|
||||||
</script>
|
</script>
|
||||||
|
|
|
@ -33,7 +33,7 @@ function clear() {
|
||||||
|
|
||||||
const headerActions = $computed(() => [{
|
const headerActions = $computed(() => [{
|
||||||
asFullButton: true,
|
asFullButton: true,
|
||||||
icon: 'ph-arrow-square-up-right-bold ph-lg',
|
icon: 'ph-arrow-square-up-right ph-bold ph-lg',
|
||||||
text: i18n.ts.dashboard,
|
text: i18n.ts.dashboard,
|
||||||
handler: () => {
|
handler: () => {
|
||||||
window.open(config.url + '/queue', '_blank');
|
window.open(config.url + '/queue', '_blank');
|
||||||
|
@ -50,6 +50,6 @@ const headerTabs = $computed(() => [{
|
||||||
|
|
||||||
definePageMetadata({
|
definePageMetadata({
|
||||||
title: i18n.ts.jobQueue,
|
title: i18n.ts.jobQueue,
|
||||||
icon: 'ph-clipboard-text-bold ph-lg',
|
icon: 'ph-clipboard-text ph-bold ph-lg',
|
||||||
});
|
});
|
||||||
</script>
|
</script>
|
||||||
|
|
|
@ -5,12 +5,12 @@
|
||||||
<div v-for="relay in relays" :key="relay.inbox" class="relaycxt _panel _block" style="padding: 16px;">
|
<div v-for="relay in relays" :key="relay.inbox" class="relaycxt _panel _block" style="padding: 16px;">
|
||||||
<div>{{ relay.inbox }}</div>
|
<div>{{ relay.inbox }}</div>
|
||||||
<div class="status">
|
<div class="status">
|
||||||
<i v-if="relay.status === 'accepted'" class="ph-check-bold ph-lg icon accepted"></i>
|
<i v-if="relay.status === 'accepted'" class="ph-check ph-bold ph-lg icon accepted"></i>
|
||||||
<i v-else-if="relay.status === 'rejected'" class="ph-prohibit-bold ph-lg icon rejected"></i>
|
<i v-else-if="relay.status === 'rejected'" class="ph-prohibit ph-bold ph-lg icon rejected"></i>
|
||||||
<i v-else class="ph-clock-bold ph-lg icon requesting"></i>
|
<i v-else class="ph-clock ph-bold ph-lg icon requesting"></i>
|
||||||
<span>{{ i18n.t(`_relayStatus.${relay.status}`) }}</span>
|
<span>{{ i18n.t(`_relayStatus.${relay.status}`) }}</span>
|
||||||
</div>
|
</div>
|
||||||
<MkButton class="button" inline danger @click="remove(relay.inbox)"><i class="ph-trash-bold ph-lg"></i> {{ i18n.ts.remove }}</MkButton>
|
<MkButton class="button" inline danger @click="remove(relay.inbox)"><i class="ph-trash ph-bold ph-lg"></i> {{ i18n.ts.remove }}</MkButton>
|
||||||
</div>
|
</div>
|
||||||
</MkSpacer>
|
</MkSpacer>
|
||||||
</MkStickyContainer>
|
</MkStickyContainer>
|
||||||
|
@ -67,7 +67,7 @@ refresh();
|
||||||
|
|
||||||
const headerActions = $computed(() => [{
|
const headerActions = $computed(() => [{
|
||||||
asFullButton: true,
|
asFullButton: true,
|
||||||
icon: 'ph-plus-bold ph-lg',
|
icon: 'ph-plus ph-bold ph-lg',
|
||||||
text: i18n.ts.addRelay,
|
text: i18n.ts.addRelay,
|
||||||
handler: addRelay,
|
handler: addRelay,
|
||||||
}]);
|
}]);
|
||||||
|
@ -76,7 +76,7 @@ const headerTabs = $computed(() => []);
|
||||||
|
|
||||||
definePageMetadata({
|
definePageMetadata({
|
||||||
title: i18n.ts.relays,
|
title: i18n.ts.relays,
|
||||||
icon: 'ph-flow-arrow-bold ph-lg',
|
icon: 'ph-flow-arrow ph-bold ph-lg',
|
||||||
});
|
});
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
|
|
|
@ -5,7 +5,7 @@
|
||||||
<FormSuspense :p="init">
|
<FormSuspense :p="init">
|
||||||
<div class="_formRoot">
|
<div class="_formRoot">
|
||||||
<FormFolder class="_formBlock">
|
<FormFolder class="_formBlock">
|
||||||
<template #icon><i class="ph-robot-bold ph-lg"></i></template>
|
<template #icon><i class="ph-robot ph-bold ph-lg"></i></template>
|
||||||
<template #label>{{ i18n.ts.botProtection }}</template>
|
<template #label>{{ i18n.ts.botProtection }}</template>
|
||||||
<template v-if="enableHcaptcha" #suffix>hCaptcha</template>
|
<template v-if="enableHcaptcha" #suffix>hCaptcha</template>
|
||||||
<template v-else-if="enableRecaptcha" #suffix>reCAPTCHA</template>
|
<template v-else-if="enableRecaptcha" #suffix>reCAPTCHA</template>
|
||||||
|
@ -15,7 +15,7 @@
|
||||||
</FormFolder>
|
</FormFolder>
|
||||||
|
|
||||||
<FormFolder class="_formBlock">
|
<FormFolder class="_formBlock">
|
||||||
<template #icon><i class="ph-eye-slash-bold ph-lg"></i></template>
|
<template #icon><i class="ph-eye-slash ph-bold ph-lg"></i></template>
|
||||||
<template #label>{{ i18n.ts.sensitiveMediaDetection }}</template>
|
<template #label>{{ i18n.ts.sensitiveMediaDetection }}</template>
|
||||||
<template v-if="sensitiveMediaDetection === 'all'" #suffix>{{ i18n.ts.all }}</template>
|
<template v-if="sensitiveMediaDetection === 'all'" #suffix>{{ i18n.ts.all }}</template>
|
||||||
<template v-else-if="sensitiveMediaDetection === 'local'" #suffix>{{ i18n.ts.localOnly }}</template>
|
<template v-else-if="sensitiveMediaDetection === 'local'" #suffix>{{ i18n.ts.localOnly }}</template>
|
||||||
|
@ -53,7 +53,7 @@
|
||||||
</FormSwitch>
|
</FormSwitch>
|
||||||
-->
|
-->
|
||||||
|
|
||||||
<FormButton primary class="_formBlock" @click="save"><i class="ph-floppy-disk-back-bold ph-lg"></i> {{ i18n.ts.save }}</FormButton>
|
<FormButton primary class="_formBlock" @click="save"><i class="ph-floppy-disk-back ph-bold ph-lg"></i> {{ i18n.ts.save }}</FormButton>
|
||||||
</div>
|
</div>
|
||||||
</FormFolder>
|
</FormFolder>
|
||||||
|
|
||||||
|
@ -87,11 +87,11 @@
|
||||||
|
|
||||||
<div class="_formRoot">
|
<div class="_formRoot">
|
||||||
<FormInput v-model="summalyProxy" class="_formBlock">
|
<FormInput v-model="summalyProxy" class="_formBlock">
|
||||||
<template #prefix><i class="ph-link-simple-bold ph-lg"></i></template>
|
<template #prefix><i class="ph-link-simple ph-bold ph-lg"></i></template>
|
||||||
<template #label>Summaly Proxy URL</template>
|
<template #label>Summaly Proxy URL</template>
|
||||||
</FormInput>
|
</FormInput>
|
||||||
|
|
||||||
<FormButton primary class="_formBlock" @click="save"><i class="ph-floppy-disk-back-bold ph-lg"></i> {{ i18n.ts.save }}</FormButton>
|
<FormButton primary class="_formBlock" @click="save"><i class="ph-floppy-disk-back ph-bold ph-lg"></i> {{ i18n.ts.save }}</FormButton>
|
||||||
</div>
|
</div>
|
||||||
</FormFolder>
|
</FormFolder>
|
||||||
|
|
||||||
|
@ -111,7 +111,7 @@
|
||||||
<template #label>{{ i18n.ts.allowedInstances }}</template>
|
<template #label>{{ i18n.ts.allowedInstances }}</template>
|
||||||
<template #caption>{{ i18n.ts.allowedInstancesDescription }}</template>
|
<template #caption>{{ i18n.ts.allowedInstancesDescription }}</template>
|
||||||
</FormTextarea>
|
</FormTextarea>
|
||||||
<FormButton primary class="_formBlock" @click="saveInstance"><i class="ph-floppy-disk-back-bold ph-lg"></i> {{ i18n.ts.save }}</FormButton>
|
<FormButton primary class="_formBlock" @click="saveInstance"><i class="ph-floppy-disk-back ph-bold ph-lg"></i> {{ i18n.ts.save }}</FormButton>
|
||||||
</div>
|
</div>
|
||||||
</FormFolder>
|
</FormFolder>
|
||||||
</div>
|
</div>
|
||||||
|
@ -209,6 +209,6 @@ const headerTabs = $computed(() => []);
|
||||||
|
|
||||||
definePageMetadata({
|
definePageMetadata({
|
||||||
title: i18n.ts.security,
|
title: i18n.ts.security,
|
||||||
icon: 'ph-lock-bold ph-lg',
|
icon: 'ph-lock ph-bold ph-lg',
|
||||||
});
|
});
|
||||||
</script>
|
</script>
|
||||||
|
|
|
@ -14,7 +14,7 @@
|
||||||
</FormTextarea>
|
</FormTextarea>
|
||||||
|
|
||||||
<FormInput v-model="tosUrl" class="_formBlock">
|
<FormInput v-model="tosUrl" class="_formBlock">
|
||||||
<template #prefix><i class="ph-link-simple-bold ph-lg"></i></template>
|
<template #prefix><i class="ph-link-simple ph-bold ph-lg"></i></template>
|
||||||
<template #label>{{ i18n.ts.tosUrl }}</template>
|
<template #label>{{ i18n.ts.tosUrl }}</template>
|
||||||
</FormInput>
|
</FormInput>
|
||||||
|
|
||||||
|
@ -24,7 +24,7 @@
|
||||||
</FormInput>
|
</FormInput>
|
||||||
|
|
||||||
<FormInput v-model="maintainerEmail" type="email" class="_formBlock">
|
<FormInput v-model="maintainerEmail" type="email" class="_formBlock">
|
||||||
<template #prefix><i class="ph-envelope-simple-open-bold ph-lg"></i></template>
|
<template #prefix><i class="ph-envelope-simple-open ph-bold ph-lg"></i></template>
|
||||||
<template #label>{{ i18n.ts.maintainerEmail }}</template>
|
<template #label>{{ i18n.ts.maintainerEmail }}</template>
|
||||||
</FormInput>
|
</FormInput>
|
||||||
</FormSplit>
|
</FormSplit>
|
||||||
|
@ -80,27 +80,27 @@
|
||||||
<template #label>{{ i18n.ts.theme }}</template>
|
<template #label>{{ i18n.ts.theme }}</template>
|
||||||
|
|
||||||
<FormInput v-model="iconUrl" class="_formBlock">
|
<FormInput v-model="iconUrl" class="_formBlock">
|
||||||
<template #prefix><i class="ph-link-simple-bold ph-lg"></i></template>
|
<template #prefix><i class="ph-link-simple ph-bold ph-lg"></i></template>
|
||||||
<template #label>{{ i18n.ts.iconUrl }}</template>
|
<template #label>{{ i18n.ts.iconUrl }}</template>
|
||||||
</FormInput>
|
</FormInput>
|
||||||
|
|
||||||
<FormInput v-model="bannerUrl" class="_formBlock">
|
<FormInput v-model="bannerUrl" class="_formBlock">
|
||||||
<template #prefix><i class="ph-link-simple-bold ph-lg"></i></template>
|
<template #prefix><i class="ph-link-simple ph-bold ph-lg"></i></template>
|
||||||
<template #label>{{ i18n.ts.bannerUrl }}</template>
|
<template #label>{{ i18n.ts.bannerUrl }}</template>
|
||||||
</FormInput>
|
</FormInput>
|
||||||
|
|
||||||
<FormInput v-model="logoImageUrl" class="_formBlock">
|
<FormInput v-model="logoImageUrl" class="_formBlock">
|
||||||
<template #prefix><i class="ph-link-simple-bold ph-lg"></i></template>
|
<template #prefix><i class="ph-link-simple ph-bold ph-lg"></i></template>
|
||||||
<template #label>{{ i18n.ts.logoImageUrl }}</template>
|
<template #label>{{ i18n.ts.logoImageUrl }}</template>
|
||||||
</FormInput>
|
</FormInput>
|
||||||
|
|
||||||
<FormInput v-model="backgroundImageUrl" class="_formBlock">
|
<FormInput v-model="backgroundImageUrl" class="_formBlock">
|
||||||
<template #prefix><i class="ph-link-simple-bold ph-lg"></i></template>
|
<template #prefix><i class="ph-link-simple ph-bold ph-lg"></i></template>
|
||||||
<template #label>{{ i18n.ts.backgroundImageUrl }}</template>
|
<template #label>{{ i18n.ts.backgroundImageUrl }}</template>
|
||||||
</FormInput>
|
</FormInput>
|
||||||
|
|
||||||
<FormInput v-model="themeColor" class="_formBlock">
|
<FormInput v-model="themeColor" class="_formBlock">
|
||||||
<template #prefix><i class="ph-palette-bold ph-lg"></i></template>
|
<template #prefix><i class="ph-palette ph-bold ph-lg"></i></template>
|
||||||
<template #label>{{ i18n.ts.themeColor }}</template>
|
<template #label>{{ i18n.ts.themeColor }}</template>
|
||||||
<template #caption>#RRGGBB</template>
|
<template #caption>#RRGGBB</template>
|
||||||
</FormInput>
|
</FormInput>
|
||||||
|
@ -163,12 +163,12 @@
|
||||||
|
|
||||||
<template v-if="enableServiceWorker">
|
<template v-if="enableServiceWorker">
|
||||||
<FormInput v-model="swPublicKey" class="_formBlock">
|
<FormInput v-model="swPublicKey" class="_formBlock">
|
||||||
<template #prefix><i class="ph-key-bold ph-lg"></i></template>
|
<template #prefix><i class="ph-key ph-bold ph-lg"></i></template>
|
||||||
<template #label>Public key</template>
|
<template #label>Public key</template>
|
||||||
</FormInput>
|
</FormInput>
|
||||||
|
|
||||||
<FormInput v-model="swPrivateKey" class="_formBlock">
|
<FormInput v-model="swPrivateKey" class="_formBlock">
|
||||||
<template #prefix><i class="ph-key-bold ph-lg"></i></template>
|
<template #prefix><i class="ph-key ph-bold ph-lg"></i></template>
|
||||||
<template #label>Private key</template>
|
<template #label>Private key</template>
|
||||||
</FormInput>
|
</FormInput>
|
||||||
</template>
|
</template>
|
||||||
|
@ -178,7 +178,7 @@
|
||||||
<template #label>DeepL Translation</template>
|
<template #label>DeepL Translation</template>
|
||||||
|
|
||||||
<FormInput v-model="deeplAuthKey" class="_formBlock">
|
<FormInput v-model="deeplAuthKey" class="_formBlock">
|
||||||
<template #prefix><i class="ph-key-bold ph-lg"></i></template>
|
<template #prefix><i class="ph-key ph-bold ph-lg"></i></template>
|
||||||
<template #label>DeepL Auth Key</template>
|
<template #label>DeepL Auth Key</template>
|
||||||
</FormInput>
|
</FormInput>
|
||||||
<FormSwitch v-model="deeplIsPro" class="_formBlock">
|
<FormSwitch v-model="deeplIsPro" class="_formBlock">
|
||||||
|
@ -316,7 +316,7 @@ function save() {
|
||||||
|
|
||||||
const headerActions = $computed(() => [{
|
const headerActions = $computed(() => [{
|
||||||
asFullButton: true,
|
asFullButton: true,
|
||||||
icon: 'ph-check-bold ph-lg',
|
icon: 'ph-check ph-bold ph-lg',
|
||||||
text: i18n.ts.save,
|
text: i18n.ts.save,
|
||||||
handler: save,
|
handler: save,
|
||||||
}]);
|
}]);
|
||||||
|
@ -325,6 +325,6 @@ const headerTabs = $computed(() => []);
|
||||||
|
|
||||||
definePageMetadata({
|
definePageMetadata({
|
||||||
title: i18n.ts.general,
|
title: i18n.ts.general,
|
||||||
icon: 'ph-gear-six-bold ph-lg',
|
icon: 'ph-gear-six ph-bold ph-lg',
|
||||||
});
|
});
|
||||||
</script>
|
</script>
|
||||||
|
|
|
@ -114,17 +114,17 @@ function show(user) {
|
||||||
}
|
}
|
||||||
|
|
||||||
const headerActions = $computed(() => [{
|
const headerActions = $computed(() => [{
|
||||||
icon: 'ph-magnifying-glass-bold ph-lg',
|
icon: 'ph-magnifying-glass ph-bold ph-lg',
|
||||||
text: i18n.ts.search,
|
text: i18n.ts.search,
|
||||||
handler: searchUser,
|
handler: searchUser,
|
||||||
}, {
|
}, {
|
||||||
asFullButton: true,
|
asFullButton: true,
|
||||||
icon: 'ph-plus-bold ph-lg',
|
icon: 'ph-plus ph-bold ph-lg',
|
||||||
text: i18n.ts.addUser,
|
text: i18n.ts.addUser,
|
||||||
handler: addUser,
|
handler: addUser,
|
||||||
}, {
|
}, {
|
||||||
asFullButton: true,
|
asFullButton: true,
|
||||||
icon: 'ph-magnifying-glass-bold ph-lg',
|
icon: 'ph-magnifying-glass ph-bold ph-lg',
|
||||||
text: i18n.ts.lookup,
|
text: i18n.ts.lookup,
|
||||||
handler: lookupUser,
|
handler: lookupUser,
|
||||||
}]);
|
}]);
|
||||||
|
@ -133,7 +133,7 @@ const headerTabs = $computed(() => []);
|
||||||
|
|
||||||
definePageMetadata(computed(() => ({
|
definePageMetadata(computed(() => ({
|
||||||
title: i18n.ts.users,
|
title: i18n.ts.users,
|
||||||
icon: 'ph-users-bold ph-lg',
|
icon: 'ph-users ph-bold ph-lg',
|
||||||
})));
|
})));
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
|
|
|
@ -10,7 +10,7 @@
|
||||||
<img v-if="announcement.imageUrl" :src="announcement.imageUrl"/>
|
<img v-if="announcement.imageUrl" :src="announcement.imageUrl"/>
|
||||||
</div>
|
</div>
|
||||||
<div v-if="$i && !announcement.isRead" class="_footer">
|
<div v-if="$i && !announcement.isRead" class="_footer">
|
||||||
<MkButton primary @click="read(items, announcement, i)"><i class="ph-check-bold ph-lg"></i> {{ i18n.ts.gotIt }}</MkButton>
|
<MkButton primary @click="read(items, announcement, i)"><i class="ph-check ph-bold ph-lg"></i> {{ i18n.ts.gotIt }}</MkButton>
|
||||||
</div>
|
</div>
|
||||||
</section>
|
</section>
|
||||||
</MkPagination>
|
</MkPagination>
|
||||||
|
@ -46,7 +46,7 @@ const headerTabs = $computed(() => []);
|
||||||
|
|
||||||
definePageMetadata({
|
definePageMetadata({
|
||||||
title: i18n.ts.announcements,
|
title: i18n.ts.announcements,
|
||||||
icon: 'ph-megaphone-simple-bold ph-lg',
|
icon: 'ph-megaphone-simple ph-bold ph-lg',
|
||||||
});
|
});
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
|
|
|
@ -88,15 +88,15 @@ watch(() => props.antennaId, async () => {
|
||||||
}, { immediate: true });
|
}, { immediate: true });
|
||||||
|
|
||||||
const headerActions = $computed(() => antenna ? [{
|
const headerActions = $computed(() => antenna ? [{
|
||||||
icon: 'ph-calendar-blank-bold ph-lg',
|
icon: 'ph-calendar-blank ph-bold ph-lg',
|
||||||
text: i18n.ts.jumpToSpecifiedDate,
|
text: i18n.ts.jumpToSpecifiedDate,
|
||||||
handler: timetravel,
|
handler: timetravel,
|
||||||
}, {
|
}, {
|
||||||
icon: 'ph-gear-six-bold ph-lg',
|
icon: 'ph-gear-six ph-bold ph-lg',
|
||||||
text: i18n.ts.settings,
|
text: i18n.ts.settings,
|
||||||
handler: settings,
|
handler: settings,
|
||||||
}, {
|
}, {
|
||||||
icon: 'ph-check-bold ph-lg',
|
icon: 'ph-check ph-bold ph-lg',
|
||||||
text: i18n.ts.markAllAsRead,
|
text: i18n.ts.markAllAsRead,
|
||||||
handler: markRead,
|
handler: markRead,
|
||||||
}] : []);
|
}] : []);
|
||||||
|
@ -105,7 +105,7 @@ const headerTabs = $computed(() => []);
|
||||||
|
|
||||||
definePageMetadata(computed(() => antenna ? {
|
definePageMetadata(computed(() => antenna ? {
|
||||||
title: antenna.name,
|
title: antenna.name,
|
||||||
icon: 'ph-flying-saucer-bold ph-lg',
|
icon: 'ph-flying-saucer ph-bold ph-lg',
|
||||||
} : null));
|
} : null));
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
|
|
Some files were not shown because too many files have changed in this diff Show more
Loading…
Reference in a new issue