summaryrefslogtreecommitdiff
path: root/packages/frontend
diff options
context:
space:
mode:
authorsyuilo <Syuilotan@yahoo.co.jp>2023-02-08 18:03:28 +0900
committersyuilo <Syuilotan@yahoo.co.jp>2023-02-08 18:03:28 +0900
commit03744a25ed4d3d9137e5382c8eaaac88a6b5ec17 (patch)
tree5c4759905f11f267d7570a283386a78adbbd2ec2 /packages/frontend
parentMerge branch 'develop' (diff)
parent13.5.0 (diff)
downloadmisskey-03744a25ed4d3d9137e5382c8eaaac88a6b5ec17.tar.gz
misskey-03744a25ed4d3d9137e5382c8eaaac88a6b5ec17.tar.bz2
misskey-03744a25ed4d3d9137e5382c8eaaac88a6b5ec17.zip
Merge branch 'develop'
Diffstat (limited to 'packages/frontend')
-rw-r--r--packages/frontend/src/components/MkAbuseReport.vue2
-rw-r--r--packages/frontend/src/components/MkAutocomplete.vue2
-rw-r--r--packages/frontend/src/components/MkEmojiPicker.vue7
-rw-r--r--packages/frontend/src/components/MkMediaBanner.vue31
-rw-r--r--packages/frontend/src/components/MkMediaList.vue120
-rw-r--r--packages/frontend/src/components/MkMediaVideo.vue4
-rw-r--r--packages/frontend/src/components/MkMenu.vue2
-rw-r--r--packages/frontend/src/components/MkNote.vue4
-rw-r--r--packages/frontend/src/components/MkNoteDetailed.vue6
-rw-r--r--packages/frontend/src/components/MkNoteHeader.vue2
-rw-r--r--packages/frontend/src/components/MkNotePreview.vue2
-rw-r--r--packages/frontend/src/components/MkNotification.vue2
-rw-r--r--packages/frontend/src/components/MkReactionsViewer.details.vue2
-rw-r--r--packages/frontend/src/components/MkUserCardMini.vue2
-rw-r--r--packages/frontend/src/components/MkUserInfo.vue5
-rw-r--r--packages/frontend/src/components/MkUserPreview.vue2
-rw-r--r--packages/frontend/src/components/MkUserSelectDialog.vue4
-rw-r--r--packages/frontend/src/components/MkUsersTooltip.vue2
-rw-r--r--packages/frontend/src/components/global/MkMisskeyFlavoredMarkdown.vue9
-rw-r--r--packages/frontend/src/components/global/MkPageHeader.vue2
-rw-r--r--packages/frontend/src/components/global/MkUserName.vue15
-rw-r--r--packages/frontend/src/components/index.ts3
-rw-r--r--packages/frontend/src/components/mfm.ts2
-rw-r--r--packages/frontend/src/pages/clip.vue2
-rw-r--r--packages/frontend/src/pages/follow-requests.vue2
-rw-r--r--packages/frontend/src/pages/gallery/post.vue2
-rw-r--r--packages/frontend/src/pages/messaging/index.vue2
-rw-r--r--packages/frontend/src/pages/my-lists/list.vue2
-rw-r--r--packages/frontend/src/pages/note.vue2
-rw-r--r--packages/frontend/src/pages/page.vue2
-rw-r--r--packages/frontend/src/pages/settings/accounts.vue4
-rw-r--r--packages/frontend/src/pages/user-info.vue2
-rw-r--r--packages/frontend/src/pages/user/home.vue4
-rw-r--r--packages/frontend/src/store.ts2
-rw-r--r--packages/frontend/src/style.scss7
-rw-r--r--packages/frontend/src/widgets/WidgetProfile.vue4
36 files changed, 118 insertions, 151 deletions
diff --git a/packages/frontend/src/components/MkAbuseReport.vue b/packages/frontend/src/components/MkAbuseReport.vue
index 0e18a5a83d..701dd8bb3d 100644
--- a/packages/frontend/src/components/MkAbuseReport.vue
+++ b/packages/frontend/src/components/MkAbuseReport.vue
@@ -4,7 +4,7 @@
<MkA v-user-preview="report.targetUserId" class="info" :to="`/user-info/${report.targetUserId}`">
<MkAvatar class="avatar" :user="report.targetUser" indicator/>
<div class="names">
- <MkUserName class="name" :user="report.targetUser"/>
+ <span class="name _nowrap">{{ report.targetUser.name ?? report.targetUser.username }}</span>
<MkAcct class="acct" :user="report.targetUser" style="display: block;"/>
</div>
</MkA>
diff --git a/packages/frontend/src/components/MkAutocomplete.vue b/packages/frontend/src/components/MkAutocomplete.vue
index e523b988b0..595e393e01 100644
--- a/packages/frontend/src/components/MkAutocomplete.vue
+++ b/packages/frontend/src/components/MkAutocomplete.vue
@@ -4,7 +4,7 @@
<li v-for="user in users" tabindex="-1" :class="$style.item" @click="complete(type, user)" @keydown="onKeydown">
<img :class="$style.avatar" :src="user.avatarUrl"/>
<span :class="$style.userName">
- <MkUserName :key="user.id" :user="user"/>
+ <span :key="user.id" class="_nowrap">{{ user.name ?? user.username }}</span>
</span>
<span>@{{ acct(user) }}</span>
</li>
diff --git a/packages/frontend/src/components/MkEmojiPicker.vue b/packages/frontend/src/components/MkEmojiPicker.vue
index 2063ab4dec..c7556ec36e 100644
--- a/packages/frontend/src/components/MkEmojiPicker.vue
+++ b/packages/frontend/src/components/MkEmojiPicker.vue
@@ -1,6 +1,6 @@
<template>
<div class="omfetrab" :class="['s' + size, 'w' + width, 'h' + height, { asDrawer, asWindow }]" :style="{ maxHeight: maxHeight ? maxHeight + 'px' : undefined }">
- <input ref="searchEl" :value="q" class="search" data-prevent-emoji-insert :class="{ filled: q != null && q != '' }" :placeholder="i18n.ts.search" type="search" @input="input()" @paste.stop="paste" @keyup.enter="done()">
+ <input ref="searchEl" :value="q" class="search" data-prevent-emoji-insert :class="{ filled: q != null && q != '' }" :placeholder="i18n.ts.search" type="search" @input="input()" @paste.stop="paste" @keydown.stop.prevent.enter="onEnter">
<div ref="emojisEl" class="emojis">
<section class="result">
<div v-if="searchResultCustom.length > 0" class="body">
@@ -327,6 +327,11 @@ function paste(event: ClipboardEvent): void {
}
}
+function onEnter(ev: KeyboardEvent) {
+ if (ev.isComposing || ev.key === 'Process' || ev.keyCode === 229) return;
+ done();
+}
+
function done(query?: string): boolean | void {
if (query == null) query = q.value;
if (query == null || typeof query !== 'string') return;
diff --git a/packages/frontend/src/components/MkMediaBanner.vue b/packages/frontend/src/components/MkMediaBanner.vue
index 718ce80e0d..c4af1ee8d0 100644
--- a/packages/frontend/src/components/MkMediaBanner.vue
+++ b/packages/frontend/src/components/MkMediaBanner.vue
@@ -6,15 +6,14 @@
<span>{{ $ts.clickToShow }}</span>
</div>
<div v-else-if="media.type.startsWith('audio') && media.type !== 'audio/midi'" class="audio">
- <audio
- ref="audioEl"
- class="audio"
- :src="media.url"
- :title="media.name"
- controls
- preload="metadata"
- @volumechange="volumechange"
- />
+ <VuePlyr :options="{ volume: 0.5 }">
+ <audio controls preload="metadata">
+ <source
+ :src="media.url"
+ :type="media.type"
+ />
+ </audio>
+ </VuePlyr>
</div>
<a
v-else class="download"
@@ -31,7 +30,9 @@
<script lang="ts" setup>
import { onMounted } from 'vue';
import * as misskey from 'misskey-js';
+import VuePlyr from 'vue-plyr';
import { ColdDeviceStorage } from '@/store';
+import 'vue-plyr/dist/vue-plyr.css';
const props = withDefaults(defineProps<{
media: misskey.entities.DriveFile;
@@ -55,7 +56,11 @@ onMounted(() => {
width: 100%;
border-radius: 4px;
margin-top: 4px;
- overflow: hidden;
+ overflow: clip;
+
+ --plyr-color-main: var(--accent);
+ --plyr-audio-controls-background: var(--bg);
+ --plyr-audio-controls-color: var(--accentLighten);
> .download,
> .sensitive {
@@ -93,10 +98,8 @@ onMounted(() => {
}
> .audio {
- .audio {
- display: block;
- width: 100%;
- }
+ border-radius: 8px;
+ overflow: clip;
}
}
</style>
diff --git a/packages/frontend/src/components/MkMediaList.vue b/packages/frontend/src/components/MkMediaList.vue
index f263ae0ce9..562cd3d63f 100644
--- a/packages/frontend/src/components/MkMediaList.vue
+++ b/packages/frontend/src/components/MkMediaList.vue
@@ -1,11 +1,11 @@
<template>
-<div class="hoawjimk">
+<div>
<XBanner v-for="media in mediaList.filter(media => !previewable(media))" :key="media.id" :media="media"/>
- <div v-if="mediaList.filter(media => previewable(media)).length > 0" class="gird-container">
- <div ref="gallery" :data-count="mediaList.filter(media => previewable(media)).length">
+ <div v-if="mediaList.filter(media => previewable(media)).length > 0" :class="$style.container">
+ <div ref="gallery" :class="[$style.medias, count <= 4 ? $style['n' + count] : $style.nMany]">
<template v-for="media in mediaList.filter(media => previewable(media))">
- <XVideo v-if="media.type.startsWith('video')" :key="media.id" :video="media"/>
- <XImage v-else-if="media.type.startsWith('image')" :key="media.id" class="image" :data-id="media.id" :image="media" :raw="raw"/>
+ <XVideo v-if="media.type.startsWith('video')" :key="media.id" :class="$style.media" :video="media"/>
+ <XImage v-else-if="media.type.startsWith('image')" :key="media.id" :class="$style.media" class="image" :data-id="media.id" :image="media" :raw="raw"/>
</template>
</div>
</div>
@@ -32,6 +32,7 @@ const props = defineProps<{
const gallery = ref(null);
const pswpZIndex = os.claimZIndex('middle');
+const count = $computed(() => props.mediaList.filter(media => previewable(media)).length);
onMounted(() => {
const lightbox = new PhotoSwipeLightbox({
@@ -122,83 +123,62 @@ const previewable = (file: misskey.entities.DriveFile): boolean => {
};
</script>
-<style lang="scss" scoped>
-.hoawjimk {
- > .gird-container {
- position: relative;
- width: 100%;
- margin-top: 4px;
-
- &:before {
- content: '';
- display: block;
- padding-top: 56.25% // 16:9;
- }
-
- > div {
- position: absolute;
- top: 0;
- right: 0;
- bottom: 0;
- left: 0;
- display: grid;
- grid-gap: 8px;
-
- > * {
- overflow: hidden;
- border-radius: 6px;
- }
-
- &[data-count="1"] {
- grid-template-rows: 1fr;
- }
+<style lang="scss" module>
+.container {
+ position: relative;
+ width: 100%;
+ margin-top: 4px;
+}
- &[data-count="2"] {
- grid-template-columns: 1fr 1fr;
- grid-template-rows: 1fr;
- }
+.medias {
+ display: grid;
+ grid-gap: 8px;
- &[data-count="3"] {
- grid-template-columns: 1fr 0.5fr;
- grid-template-rows: 1fr 1fr;
+ &.n1 {
+ aspect-ratio: 16/9;
+ grid-template-rows: 1fr;
+ }
- > *:nth-child(1) {
- grid-row: 1 / 3;
- }
+ &.n2 {
+ aspect-ratio: 16/9;
+ grid-template-columns: 1fr 1fr;
+ grid-template-rows: 1fr;
+ }
- > *:nth-child(3) {
- grid-column: 2 / 3;
- grid-row: 2 / 3;
- }
- }
+ &.n3 {
+ aspect-ratio: 16/9;
+ grid-template-columns: 1fr 0.5fr;
+ grid-template-rows: 1fr 1fr;
- &[data-count="4"] {
- grid-template-columns: 1fr 1fr;
- grid-template-rows: 1fr 1fr;
- }
+ > .media:nth-child(1) {
+ grid-row: 1 / 3;
+ }
- > *:nth-child(1) {
- grid-column: 1 / 2;
- grid-row: 1 / 2;
- }
+ > .media:nth-child(3) {
+ grid-column: 2 / 3;
+ grid-row: 2 / 3;
+ }
+ }
- > *:nth-child(2) {
- grid-column: 2 / 3;
- grid-row: 1 / 2;
- }
+ &.n4 {
+ aspect-ratio: 16/9;
+ grid-template-columns: 1fr 1fr;
+ grid-template-rows: 1fr 1fr;
+ }
- > *:nth-child(3) {
- grid-column: 1 / 2;
- grid-row: 2 / 3;
- }
+ &.nMany {
+ grid-template-columns: 1fr 1fr;
- > *:nth-child(4) {
- grid-column: 2 / 3;
- grid-row: 2 / 3;
- }
+ > .media {
+ aspect-ratio: 16/9;
}
}
}
+
+.media {
+ overflow: hidden; // clipにするとバグる
+ border-radius: 8px;
+}
</style>
<style lang="scss">
diff --git a/packages/frontend/src/components/MkMediaVideo.vue b/packages/frontend/src/components/MkMediaVideo.vue
index 2c24c16f57..979c3eed28 100644
--- a/packages/frontend/src/components/MkMediaVideo.vue
+++ b/packages/frontend/src/components/MkMediaVideo.vue
@@ -6,7 +6,7 @@
</div>
</div>
<div v-else class="kkjnbbplepmiyuadieoenjgutgcmtsvu">
- <vue-plyr>
+ <VuePlyr :options="{ volume: 0.5 }">
<video
controls
:data-poster="video.thumbnailUrl"
@@ -17,7 +17,7 @@
:type="video.type"
/>
</video>
- </vue-plyr>
+ </VuePlyr>
<i class="ti ti-eye-off" @click="hide = true"></i>
</div>
</template>
diff --git a/packages/frontend/src/components/MkMenu.vue b/packages/frontend/src/components/MkMenu.vue
index eee77a9475..2185a3ed08 100644
--- a/packages/frontend/src/components/MkMenu.vue
+++ b/packages/frontend/src/components/MkMenu.vue
@@ -27,7 +27,7 @@
<span v-if="item.indicate" :class="$style.indicator"><i class="_indicatorCircle"></i></span>
</a>
<button v-else-if="item.type === 'user'" :tabindex="i" class="_button" :class="[$style.item, { [$style.active]: item.active }]" :disabled="item.active" @click="clicked(item.action, $event)" @mouseenter.passive="onItemMouseEnter(item)" @mouseleave.passive="onItemMouseLeave(item)">
- <MkAvatar :user="item.user" :class="$style.avatar"/><MkUserName :user="item.user"/>
+ <MkAvatar :user="item.user" :class="$style.avatar"/><span class="_nowrap">{{ item.user.name ?? item.user.username }}</span>
<span v-if="item.indicate" :class="$style.indicator"><i class="_indicatorCircle"></i></span>
</button>
<span v-else-if="item.type === 'switch'" :tabindex="i" :class="$style.item" @mouseenter.passive="onItemMouseEnter(item)" @mouseleave.passive="onItemMouseLeave(item)">
diff --git a/packages/frontend/src/components/MkNote.vue b/packages/frontend/src/components/MkNote.vue
index 351861ac17..a77158c862 100644
--- a/packages/frontend/src/components/MkNote.vue
+++ b/packages/frontend/src/components/MkNote.vue
@@ -17,7 +17,7 @@
<I18n :src="i18n.ts.renotedBy" tag="span" :class="$style.renoteText">
<template #user>
<MkA v-user-preview="note.userId" :class="$style.renoteUserName" :to="userPage(note.user)">
- <MkUserName :user="note.user"/>
+ <span class="_nowrap">{{ note.user.name ?? note.user.username }}</span>
</MkA>
</template>
</I18n>
@@ -108,7 +108,7 @@
<I18n :src="i18n.ts.userSaysSomething" tag="small">
<template #name>
<MkA v-user-preview="appearNote.userId" :to="userPage(appearNote.user)">
- <MkUserName :user="appearNote.user"/>
+ <span class="_nowrap">{{ appearNote.user.name ?? appearNote.user.username }}</span>
</MkA>
</template>
</I18n>
diff --git a/packages/frontend/src/components/MkNoteDetailed.vue b/packages/frontend/src/components/MkNoteDetailed.vue
index 0da06c4f14..b632a77396 100644
--- a/packages/frontend/src/components/MkNoteDetailed.vue
+++ b/packages/frontend/src/components/MkNoteDetailed.vue
@@ -16,7 +16,7 @@
<I18n :src="i18n.ts.renotedBy" tag="span">
<template #user>
<MkA v-user-preview="note.userId" class="name" :to="userPage(note.user)">
- <MkUserName :user="note.user"/>
+ <span class="_nowrap">{{ note.user.name ?? note.user.username }}</span>
</MkA>
</template>
</I18n>
@@ -39,7 +39,7 @@
<div class="body">
<div class="top">
<MkA v-user-preview="appearNote.user.id" class="name" :to="userPage(appearNote.user)">
- <MkUserName :nowrap="false" :user="appearNote.user"/>
+ <span class="_nowrap">{{ appearNote.user.name ?? appearNote.user.username }}</span>
</MkA>
<span v-if="appearNote.user.isBot" class="is-bot">bot</span>
<div class="info">
@@ -125,7 +125,7 @@
<I18n :src="i18n.ts.userSaysSomething" tag="small">
<template #name>
<MkA v-user-preview="appearNote.userId" class="name" :to="userPage(appearNote.user)">
- <MkUserName :user="appearNote.user"/>
+ <span class="_nowrap">{{ appearNote.user.name ?? appearNote.user.username }}</span>
</MkA>
</template>
</I18n>
diff --git a/packages/frontend/src/components/MkNoteHeader.vue b/packages/frontend/src/components/MkNoteHeader.vue
index 6b43f14665..d86a37ed55 100644
--- a/packages/frontend/src/components/MkNoteHeader.vue
+++ b/packages/frontend/src/components/MkNoteHeader.vue
@@ -1,7 +1,7 @@
<template>
<header :class="$style.root">
<MkA v-once v-user-preview="note.user.id" :class="$style.name" :to="userPage(note.user)">
- <MkUserName :user="note.user"/>
+ <span class="_nowrap">{{ note.user.name ?? note.user.username }}</span>
</MkA>
<div v-if="note.user.isBot" :class="$style.isBot">bot</div>
<div :class="$style.username"><MkAcct :user="note.user"/></div>
diff --git a/packages/frontend/src/components/MkNotePreview.vue b/packages/frontend/src/components/MkNotePreview.vue
index 1cc01386ba..d3862e2ac3 100644
--- a/packages/frontend/src/components/MkNotePreview.vue
+++ b/packages/frontend/src/components/MkNotePreview.vue
@@ -3,7 +3,7 @@
<MkAvatar :class="$style.avatar" :user="$i" link preview/>
<div :class="$style.main">
<div :class="$style.header">
- <MkUserName :user="$i"/>
+ <span class="_nowrap">{{ $i.name ?? $i.username }}</span>
</div>
<div>
<div :class="$style.content">
diff --git a/packages/frontend/src/components/MkNotification.vue b/packages/frontend/src/components/MkNotification.vue
index e7a951dd27..fd055dfb58 100644
--- a/packages/frontend/src/components/MkNotification.vue
+++ b/packages/frontend/src/components/MkNotification.vue
@@ -31,7 +31,7 @@
<header :class="$style.header">
<span v-if="notification.type === 'pollEnded'">{{ i18n.ts._notification.pollEnded }}</span>
<span v-else-if="notification.type === 'achievementEarned'">{{ i18n.ts._notification.achievementEarned }}</span>
- <MkA v-else-if="notification.user" v-user-preview="notification.user.id" :class="$style.headerName" :to="userPage(notification.user)"><MkUserName :user="notification.user"/></MkA>
+ <MkA v-else-if="notification.user" v-user-preview="notification.user.id" :class="$style.headerName" :to="userPage(notification.user)"><span class="_nowrap">{{ notification.user.name ?? notification.user.username }}</span></MkA>
<span v-else>{{ notification.header }}</span>
<MkTime v-if="withTime" :time="notification.createdAt" :class="$style.headerTime"/>
</header>
diff --git a/packages/frontend/src/components/MkReactionsViewer.details.vue b/packages/frontend/src/components/MkReactionsViewer.details.vue
index b4210be911..b0d7ebf3ee 100644
--- a/packages/frontend/src/components/MkReactionsViewer.details.vue
+++ b/packages/frontend/src/components/MkReactionsViewer.details.vue
@@ -8,7 +8,7 @@
<div :class="$style.users">
<div v-for="u in users" :key="u.id" :class="$style.user">
<MkAvatar :class="$style.avatar" :user="u"/>
- <MkUserName :user="u" :nowrap="true"/>
+ <span class="_nowrap">{{ u.name ?? u.username }}</span>
</div>
<div v-if="users.length > 10">+{{ count - 10 }}</div>
</div>
diff --git a/packages/frontend/src/components/MkUserCardMini.vue b/packages/frontend/src/components/MkUserCardMini.vue
index 457504e6ca..e2b9b2a15f 100644
--- a/packages/frontend/src/components/MkUserCardMini.vue
+++ b/packages/frontend/src/components/MkUserCardMini.vue
@@ -2,7 +2,7 @@
<div v-adaptive-bg :class="[$style.root, { yellow: user.isSilenced, red: user.isSuspended, gray: false }]">
<MkAvatar class="avatar" :user="user" indicator/>
<div class="body">
- <span class="name"><MkUserName class="name" :user="user"/></span>
+ <span class="name _nowrap">{{ user.name ?? user.username }}</span>
<span class="sub"><span class="acct _monospace">@{{ acct(user) }}</span></span>
</div>
<MkMiniChart v-if="chartValues" class="chart" :src="chartValues"/>
diff --git a/packages/frontend/src/components/MkUserInfo.vue b/packages/frontend/src/components/MkUserInfo.vue
index 1486423b3d..4459fd1a5d 100644
--- a/packages/frontend/src/components/MkUserInfo.vue
+++ b/packages/frontend/src/components/MkUserInfo.vue
@@ -3,8 +3,9 @@
<div class="banner" :style="user.bannerUrl ? `background-image: url(${user.bannerUrl})` : ''"></div>
<MkAvatar class="avatar" :user="user" indicator/>
<div class="title">
- <MkA class="name" :to="userPage(user)"><MkUserName :user="user" :nowrap="false"/></MkA>
- <p class="username"><MkAcct :user="user"/></p>
+ <MkA class="name _nowrap" :to="userPage(user)"{{ user.name ?? user.username }}</mk-a>
+ <p class="username"><MkAcct :user="user"/></p>
+ </mka>
</div>
<span v-if="$i && $i.id !== user.id && user.isFollowed" class="followed">{{ $ts.followsYou }}</span>
<div class="description">
diff --git a/packages/frontend/src/components/MkUserPreview.vue b/packages/frontend/src/components/MkUserPreview.vue
index f68fdd64d9..c9519a29a5 100644
--- a/packages/frontend/src/components/MkUserPreview.vue
+++ b/packages/frontend/src/components/MkUserPreview.vue
@@ -7,7 +7,7 @@
</div>
<MkAvatar class="avatar" :user="user" indicator/>
<div class="title">
- <MkA class="name" :to="userPage(user)"><MkUserName :user="user" :nowrap="false"/></MkA>
+ <MkA class="name _nowrap" :to="userPage(user)">{{ user.name ?? user.username }}</MkA>
<p class="username"><MkAcct :user="user"/></p>
</div>
<div class="description">
diff --git a/packages/frontend/src/components/MkUserSelectDialog.vue b/packages/frontend/src/components/MkUserSelectDialog.vue
index c17b97f283..dd976a4b35 100644
--- a/packages/frontend/src/components/MkUserSelectDialog.vue
+++ b/packages/frontend/src/components/MkUserSelectDialog.vue
@@ -27,7 +27,7 @@
<div v-for="user in users" :key="user.id" class="_button" :class="[$style.user, { [$style.selected]: selected && selected.id === user.id }]" @click="selected = user" @dblclick="ok()">
<MkAvatar :user="user" :class="$style.avatar" indicator/>
<div :class="$style.userBody">
- <MkUserName :user="user" :class="$style.userName"/>
+ <span :class="$style.userName" class="_nowrap">{{ user.name ?? user.username }}</span>
<MkAcct :user="user" :class="$style.userAcct"/>
</div>
</div>
@@ -41,7 +41,7 @@
<div v-for="user in recentUsers" :key="user.id" class="_button" :class="[$style.user, { [$style.selected]: selected && selected.id === user.id }]" @click="selected = user" @dblclick="ok()">
<MkAvatar :user="user" :class="$style.avatar" indicator/>
<div :class="$style.userBody">
- <MkUserName :user="user" :class="$style.userName"/>
+ <span :class="$style.userName" class="_nowrap">{{ user.name ?? user.username }}</span>
<MkAcct :user="user" :class="$style.userAcct"/>
</div>
</div>
diff --git a/packages/frontend/src/components/MkUsersTooltip.vue b/packages/frontend/src/components/MkUsersTooltip.vue
index d0f95fceda..c2c7271fcd 100644
--- a/packages/frontend/src/components/MkUsersTooltip.vue
+++ b/packages/frontend/src/components/MkUsersTooltip.vue
@@ -3,7 +3,7 @@
<div :class="$style.root">
<div v-for="u in users" :key="u.id" :class="$style.user">
<MkAvatar :class="$style.avatar" :user="u"/>
- <MkUserName :class="$style.name" :user="u" :nowrap="true"/>
+ <span :class="$style.name" class="_nowrap">{{ u.name ?? u.username }}</span>
</div>
<div v-if="users.length < count" :class="$style.omitted">+{{ count - users.length }}</div>
</div>
diff --git a/packages/frontend/src/components/global/MkMisskeyFlavoredMarkdown.vue b/packages/frontend/src/components/global/MkMisskeyFlavoredMarkdown.vue
index 28a0d1c986..f49dc7ddff 100644
--- a/packages/frontend/src/components/global/MkMisskeyFlavoredMarkdown.vue
+++ b/packages/frontend/src/components/global/MkMisskeyFlavoredMarkdown.vue
@@ -1,5 +1,5 @@
<template>
-<MfmCore :text="text" :plain="plain" :nowrap="nowrap" :author="author" :is-note="isNote" :class="[$style.root, { [$style.nowrap]: nowrap }]"/>
+<MfmCore :text="text" :plain="plain" :nowrap="nowrap" :author="author" :is-note="isNote" :class="[$style.root, { '_nowrap': nowrap }]"/>
</template>
<script lang="ts" setup>
@@ -160,12 +160,5 @@ const props = withDefaults(defineProps<{
<style lang="scss" module>
.root {
white-space: pre-wrap;
-
- &.nowrap {
- white-space: pre;
- word-wrap: normal; // https://codeday.me/jp/qa/20190424/690106.html
- overflow: hidden;
- text-overflow: ellipsis;
- }
}
</style>
diff --git a/packages/frontend/src/components/global/MkPageHeader.vue b/packages/frontend/src/components/global/MkPageHeader.vue
index ab66502e06..3dcb19bd89 100644
--- a/packages/frontend/src/components/global/MkPageHeader.vue
+++ b/packages/frontend/src/components/global/MkPageHeader.vue
@@ -9,7 +9,7 @@
<i v-else-if="metadata.icon" :class="[$style.titleIcon, metadata.icon]"></i>
<div :class="$style.title">
- <MkUserName v-if="metadata.userName" :user="metadata.userName" :nowrap="true"/>
+ <span v-if="metadata.userName" class="_nowrap">{{ metadata.userName.name ?? metadata.userName.username }}</span>
<div v-else-if="metadata.title">{{ metadata.title }}</div>
<div v-if="!narrow && metadata.subtitle" :class="$style.subtitle">
{{ metadata.subtitle }}
diff --git a/packages/frontend/src/components/global/MkUserName.vue b/packages/frontend/src/components/global/MkUserName.vue
deleted file mode 100644
index 4186a4a4fb..0000000000
--- a/packages/frontend/src/components/global/MkUserName.vue
+++ /dev/null
@@ -1,15 +0,0 @@
-<template>
-<Mfm :text="user.name ?? user.username" :author="user" :plain="true" :nowrap="nowrap" :emoji-urls="user.emojis"/>
-</template>
-
-<script lang="ts" setup>
-import { } from 'vue';
-import * as misskey from 'misskey-js';
-
-const props = withDefaults(defineProps<{
- user: misskey.entities.User;
- nowrap?: boolean;
-}>(), {
- nowrap: true,
-});
-</script>
diff --git a/packages/frontend/src/components/index.ts b/packages/frontend/src/components/index.ts
index 560870f84c..4ddebe7827 100644
--- a/packages/frontend/src/components/index.ts
+++ b/packages/frontend/src/components/index.ts
@@ -6,7 +6,6 @@ import MkAcct from './global/MkAcct.vue';
import MkAvatar from './global/MkAvatar.vue';
import MkEmoji from './global/MkEmoji.vue';
import MkCustomEmoji from './global/MkCustomEmoji.vue';
-import MkUserName from './global/MkUserName.vue';
import MkEllipsis from './global/MkEllipsis.vue';
import MkTime from './global/MkTime.vue';
import MkUrl from './global/MkUrl.vue';
@@ -28,7 +27,6 @@ export default function(app: App) {
app.component('MkAvatar', MkAvatar);
app.component('MkEmoji', MkEmoji);
app.component('MkCustomEmoji', MkCustomEmoji);
- app.component('MkUserName', MkUserName);
app.component('MkEllipsis', MkEllipsis);
app.component('MkTime', MkTime);
app.component('MkUrl', MkUrl);
@@ -50,7 +48,6 @@ declare module '@vue/runtime-core' {
MkAvatar: typeof MkAvatar;
MkEmoji: typeof MkEmoji;
MkCustomEmoji: typeof MkCustomEmoji;
- MkUserName: typeof MkUserName;
MkEllipsis: typeof MkEllipsis;
MkTime: typeof MkTime;
MkUrl: typeof MkUrl;
diff --git a/packages/frontend/src/components/mfm.ts b/packages/frontend/src/components/mfm.ts
index 7cfb19aeb6..683c9014a1 100644
--- a/packages/frontend/src/components/mfm.ts
+++ b/packages/frontend/src/components/mfm.ts
@@ -195,7 +195,7 @@ export default defineComponent({
return h(MkSparkle, {}, genEl(token.children));
}
case 'rotate': {
- const degrees = parseFloat(token.props.args.deg) ?? '90';
+ const degrees = parseFloat(token.props.args.deg ?? '90');
style = `transform: rotate(${degrees}deg); transform-origin: center center;`;
break;
}
diff --git a/packages/frontend/src/pages/clip.vue b/packages/frontend/src/pages/clip.vue
index cd9cec0d4f..89419f79cb 100644
--- a/packages/frontend/src/pages/clip.vue
+++ b/packages/frontend/src/pages/clip.vue
@@ -8,7 +8,7 @@
<Mfm :text="clip.description" :is-note="false" :i="$i"/>
</div>
<div class="user">
- <MkAvatar :user="clip.user" class="avatar" indicator link preview/> <MkUserName :user="clip.user" :nowrap="false"/>
+ <MkAvatar :user="clip.user" class="avatar" indicator link preview/> <span class="_nowrap">{{ clip.user.name ?? clip.user.username }}</span>
</div>
</div>
diff --git a/packages/frontend/src/pages/follow-requests.vue b/packages/frontend/src/pages/follow-requests.vue
index 835dd0b54c..e8a59d71e0 100644
--- a/packages/frontend/src/pages/follow-requests.vue
+++ b/packages/frontend/src/pages/follow-requests.vue
@@ -15,7 +15,7 @@
<MkAvatar class="avatar" :user="req.follower" indicator link preview/>
<div class="body">
<div class="name">
- <MkA v-user-preview="req.follower.id" class="name" :to="userPage(req.follower)"><MkUserName :user="req.follower"/></MkA>
+ <MkA v-user-preview="req.follower.id" class="name _nowrap" :to="userPage(req.follower)">{{ req.follower.name ?? req.follower.username }}</MkA>
<p class="acct">@{{ acct(req.follower) }}</p>
</div>
<div v-if="req.follower.description" class="description" :title="req.follower.description">
diff --git a/packages/frontend/src/pages/gallery/post.vue b/packages/frontend/src/pages/gallery/post.vue
index 31e2727bb5..20bc0e3d39 100644
--- a/packages/frontend/src/pages/gallery/post.vue
+++ b/packages/frontend/src/pages/gallery/post.vue
@@ -30,7 +30,7 @@
<div class="user">
<MkAvatar :user="post.user" class="avatar" link preview/>
<div class="name">
- <MkUserName :user="post.user" style="display: block;"/>
+ <div class="_nowrap">{{ post.user.name ?? post.user.username }}</div>
<MkAcct :user="post.user"/>
</div>
<MkFollowButton v-if="!$i || $i.id != post.user.id" :user="post.user" :inline="true" :transparent="false" :full="true" large class="koudoku"/>
diff --git a/packages/frontend/src/pages/messaging/index.vue b/packages/frontend/src/pages/messaging/index.vue
index 3d11cf13e9..0fd1f71d42 100644
--- a/packages/frontend/src/pages/messaging/index.vue
+++ b/packages/frontend/src/pages/messaging/index.vue
@@ -22,7 +22,7 @@
<MkTime :time="message.createdAt" class="time"/>
</header>
<header v-else>
- <span class="name"><MkUserName :user="isMe(message) ? message.recipient : message.user"/></span>
+ <span class="name">{{ isMe(message) ? message.recipient.name : message.user.name }}</span>
<span class="username">@{{ acct(isMe(message) ? message.recipient : message.user) }}</span>
<MkTime :time="message.createdAt" class="time"/>
</header>
diff --git a/packages/frontend/src/pages/my-lists/list.vue b/packages/frontend/src/pages/my-lists/list.vue
index f47b4bf90f..cb190fb112 100644
--- a/packages/frontend/src/pages/my-lists/list.vue
+++ b/packages/frontend/src/pages/my-lists/list.vue
@@ -21,7 +21,7 @@
<div v-for="user in users" :key="user.id" class="user _panel">
<MkAvatar :user="user" class="avatar" indicator link preview/>
<div class="body">
- <MkUserName :user="user" class="name"/>
+ <span class="name _nowrap">{{ user.name ?? user.username }}</span>
<MkAcct :user="user" class="acct"/>
</div>
<div class="action">
diff --git a/packages/frontend/src/pages/note.vue b/packages/frontend/src/pages/note.vue
index 86b3fce3c5..e28c30f627 100644
--- a/packages/frontend/src/pages/note.vue
+++ b/packages/frontend/src/pages/note.vue
@@ -21,7 +21,7 @@
<b>{{ item.name }}</b>
<div v-if="item.description" class="description">{{ item.description }}</div>
<div class="user">
- <MkAvatar :user="item.user" class="avatar" indicator link preview/> <MkUserName :user="item.user" :nowrap="false"/>
+ <MkAvatar :user="item.user" class="avatar" indicator link preview/> <span class="_nowrap">{{ item.user.name ?? item.user.username }}</span>
</div>
</MkA>
</div>
diff --git a/packages/frontend/src/pages/page.vue b/packages/frontend/src/pages/page.vue
index 202244b34c..a4bc17e3bf 100644
--- a/packages/frontend/src/pages/page.vue
+++ b/packages/frontend/src/pages/page.vue
@@ -29,7 +29,7 @@
<div class="user">
<MkAvatar :user="page.user" class="avatar" link preview/>
<div class="name">
- <MkUserName :user="page.user" style="display: block;"/>
+ <div class="_nowrap">{{ page.user.name ?? page.user.username }}</div>
<MkAcct :user="page.user"/>
</div>
<MkFollowButton v-if="!$i || $i.id != page.user.id" :user="page.user" :inline="true" :transparent="false" :full="true" large class="koudoku"/>
diff --git a/packages/frontend/src/pages/settings/accounts.vue b/packages/frontend/src/pages/settings/accounts.vue
index a5eaae2bad..8fa30bccba 100644
--- a/packages/frontend/src/pages/settings/accounts.vue
+++ b/packages/frontend/src/pages/settings/accounts.vue
@@ -9,9 +9,7 @@
<MkAvatar :user="account" class="avatar"/>
</div>
<div class="body">
- <div class="name">
- <MkUserName :user="account"/>
- </div>
+ <div class="name _nowrap">{{ account.name ?? account.username }}</div>
<div class="acct">
<MkAcct :user="account"/>
</div>
diff --git a/packages/frontend/src/pages/user-info.vue b/packages/frontend/src/pages/user-info.vue
index 7ba8a3d16b..40e5ec83c9 100644
--- a/packages/frontend/src/pages/user-info.vue
+++ b/packages/frontend/src/pages/user-info.vue
@@ -7,7 +7,7 @@
<div class="aeakzknw">
<MkAvatar class="avatar" :user="user" indicator link preview/>
<div class="body">
- <span class="name"><MkUserName class="name" :user="user"/></span>
+ <span class="name _nowrap">{{ user.name ?? user.username }}</span>
<span class="sub"><span class="acct _monospace">@{{ acct(user) }}</span></span>
<span class="state">
<span v-if="suspended" class="suspended">Suspended</span>
diff --git a/packages/frontend/src/pages/user/home.vue b/packages/frontend/src/pages/user/home.vue
index 56858a9377..e4bb024a83 100644
--- a/packages/frontend/src/pages/user/home.vue
+++ b/packages/frontend/src/pages/user/home.vue
@@ -14,7 +14,7 @@
<div ref="bannerEl" class="banner" :style="style"></div>
<div class="fade"></div>
<div class="title">
- <MkUserName class="name" :user="user" :nowrap="true"/>
+ <span class="name _nowrap">{{ user.name ?? user.username }}</span>
<div class="bottom">
<span class="username"><MkAcct :user="user" :detail="true"/></span>
<span v-if="user.isAdmin" :title="i18n.ts.isAdmin" style="color: var(--badge);"><i class="ti ti-shield"></i></span>
@@ -30,7 +30,7 @@
</div>
<MkAvatar class="avatar" :user="user" indicator/>
<div class="title">
- <MkUserName :user="user" :nowrap="false" class="name"/>
+ <span class="name _nowrap">{{ user.name ?? user.username }}</span>
<div class="bottom">
<span class="username"><MkAcct :user="user" :detail="true"/></span>
<span v-if="user.isAdmin" :title="i18n.ts.isAdmin" style="color: var(--badge);"><i class="ti ti-shield"></i></span>
diff --git a/packages/frontend/src/store.ts b/packages/frontend/src/store.ts
index 8ecf59edb2..94892ff526 100644
--- a/packages/frontend/src/store.ts
+++ b/packages/frontend/src/store.ts
@@ -168,7 +168,7 @@ export const defaultStore = markRaw(new Storage('base', {
},
disableShowingAnimatedImages: {
where: 'device',
- default: false,
+ default: matchMedia('(prefers-reduced-motion)').matches,
},
emojiStyle: {
where: 'device',
diff --git a/packages/frontend/src/style.scss b/packages/frontend/src/style.scss
index aa4efe3052..bacdc967d8 100644
--- a/packages/frontend/src/style.scss
+++ b/packages/frontend/src/style.scss
@@ -156,6 +156,13 @@ hr {
-webkit-touch-callout: none;
}
+._nowrap {
+ white-space: pre;
+ word-wrap: normal; // https://codeday.me/jp/qa/20190424/690106.html
+ overflow: clip;
+ text-overflow: ellipsis;
+}
+
._ghost {
@extend ._noSelect;
pointer-events: none;
diff --git a/packages/frontend/src/widgets/WidgetProfile.vue b/packages/frontend/src/widgets/WidgetProfile.vue
index 7e8ac429e5..b2a5c87104 100644
--- a/packages/frontend/src/widgets/WidgetProfile.vue
+++ b/packages/frontend/src/widgets/WidgetProfile.vue
@@ -6,9 +6,7 @@
</div>
<div :class="$style.bodyContainer">
<div :class="$style.body">
- <MkA :class="$style.name" :to="userPage($i)">
- <MkUserName :user="$i"/>
- </MkA>
+ <MkA :class="$style.name" :to="userPage($i)" class="_nowrap">{{ $i.name ?? $i.username }}</MkA>
<div :class="$style.username"><MkAcct :user="$i" detail/></div>
</div>
</div>