Compare commits

..

No commits in common. "5bc98ce73345cb5682034d92d066b52ce225cfb7" and "6e35b9378a146cd8dda38734e47fc3f65b8c0072" have entirely different histories.

6 changed files with 155 additions and 161 deletions

View file

@ -15,8 +15,6 @@ on:
jobs: jobs:
build: build:
# chromatic is not likely to be available for fork repositories, so we disable for fork repositories.
if: github.repository == 'misskey-dev/misskey'
runs-on: ubuntu-latest runs-on: ubuntu-latest
env: env:

View file

@ -4,10 +4,10 @@
- -
### Client ### Client
- Fix: 画面サイズが変わった際にナビゲーションバーが自動で折りたたまれない問題を修正 -
### Server ### Server
- Fix: ユーザーのプロフィール画面をアドレス入力などで直接表示した際に概要タブの描画に失敗する問題の修正( #15032 ) -
## 2024.11.0 ## 2024.11.0

View file

@ -1,6 +1,6 @@
{ {
"name": "misskey", "name": "misskey",
"version": "2024.11.0-pari.31", "version": "2024.11.0-pari.30",
"codename": "nasubi", "codename": "nasubi",
"repository": { "repository": {
"type": "git", "type": "git",

View file

@ -593,10 +593,7 @@ export class ClientServerService {
reply.header('X-Robots-Tag', 'noai'); reply.header('X-Robots-Tag', 'noai');
} }
const _user = await this.userEntityService.pack(user, null, { const _user = await this.userEntityService.pack(user);
schema: 'UserDetailed',
userProfile: profile,
});
return await reply.view('user', { return await reply.view('user', {
user, profile, me, user, profile, me,

View file

@ -13,6 +13,7 @@ SPDX-License-Identifier: AGPL-3.0-only
:class="[$style.root, { [$style.showActionsOnlyHover]: defaultStore.state.showNoteActionsOnlyHover, [$style.skipRender]: defaultStore.state.skipNoteRender || defaultStore.state.enableRenderingOptimization }]" :class="[$style.root, { [$style.showActionsOnlyHover]: defaultStore.state.showNoteActionsOnlyHover, [$style.skipRender]: defaultStore.state.skipNoteRender || defaultStore.state.enableRenderingOptimization }]"
:tabindex="isDeleted ? '-1' : '0'" :tabindex="isDeleted ? '-1' : '0'"
> >
<div v-if="collapsedUnexpectedLangs && isUnexpectedLanguage && !languageExpanded && !isRenote" :class="$style.collapsedLanguage"> <div v-if="collapsedUnexpectedLangs && isUnexpectedLanguage && !languageExpanded && !isRenote" :class="$style.collapsedLanguage">
<MkAvatar :class="$style.collapsedLanguageAvatar" :user="appearNote.user" link preview/> <MkAvatar :class="$style.collapsedLanguageAvatar" :user="appearNote.user" link preview/>
<Mfm <Mfm
@ -328,7 +329,7 @@ const disableReactionsViewer = ref(defaultStore.reactiveState.disableReactionsVi
const collapsedUnexpectedLangs = ref(defaultStore.reactiveState.collapsedUnexpectedLangs); const collapsedUnexpectedLangs = ref(defaultStore.reactiveState.collapsedUnexpectedLangs);
const expectedLangs = computed(() => new Set([ const expectedLangs = computed(() => new Set([
(miLocalStorage.getItem('lang') ?? navigator.language).slice(0, 2), (miLocalStorage.getItem('lang') ?? navigator.language).slice(0, 2),
navigator.language.slice(0, 2), navigator.language.slice(0, 2)
])); ]));
const noteLanguage = computed(() => { const noteLanguage = computed(() => {
if (!appearNote.value.text || appearNote.value.text.length < 10) return ''; if (!appearNote.value.text || appearNote.value.text.length < 10) return '';
@ -805,7 +806,7 @@ function emitUpdReaction(emoji: string, delta: number) {
.skipRender { .skipRender {
content-visibility: auto; content-visibility: auto;
contain-intrinsic-size: 0 200px; contain-intrinsic-size: 0 250px;
} }
.tip { .tip {

View file

@ -36,7 +36,7 @@ SPDX-License-Identifier: AGPL-3.0-only
</component> </component>
</template> </template>
<div :class="$style.divider"></div> <div :class="$style.divider"></div>
<MkA v-if="$i != null && ($i.isAdmin || $i.isModerator)" v-tooltip.noDelay.right="i18n.ts.controlPanel" :class="$style.item" :activeClass="$style.active" to="/admin"> <MkA v-if="$i.isAdmin || $i.isModerator" v-tooltip.noDelay.right="i18n.ts.controlPanel" :class="$style.item" :activeClass="$style.active" to="/admin">
<i :class="$style.itemIcon" class="ti ti-dashboard ti-fw"></i><span :class="$style.itemText">{{ i18n.ts.controlPanel }}</span> <i :class="$style.itemIcon" class="ti ti-dashboard ti-fw"></i><span :class="$style.itemText">{{ i18n.ts.controlPanel }}</span>
</MkA> </MkA>
<button class="_button" :class="$style.item" @click="more"> <button class="_button" :class="$style.item" @click="more">
@ -48,10 +48,10 @@ SPDX-License-Identifier: AGPL-3.0-only
</MkA> </MkA>
</div> </div>
<div :class="$style.bottom"> <div :class="$style.bottom">
<button v-tooltip.noDelay.right="i18n.ts.note" class="_button" :class="[$style.post]" data-cy-open-post-form @click="() => { os.post(); }"> <button v-tooltip.noDelay.right="i18n.ts.note" class="_button" :class="[$style.post]" data-cy-open-post-form @click="os.post">
<i class="ti ti-pencil ti-fw" :class="$style.postIcon"></i><span :class="$style.postText">{{ i18n.ts.note }}</span> <i class="ti ti-pencil ti-fw" :class="$style.postIcon"></i><span :class="$style.postText">{{ i18n.ts.note }}</span>
</button> </button>
<button v-if="$i != null" v-tooltip.noDelay.right="`${i18n.ts.account}: @${$i.username}`" class="_button" :class="[$style.account]" @click="openAccountMenu"> <button v-tooltip.noDelay.right="`${i18n.ts.account}: @${$i.username}`" class="_button" :class="[$style.account]" @click="openAccountMenu">
<MkAvatar :user="$i" :class="$style.avatar"/><MkAcct class="_nowrap" :class="$style.acct" :user="$i"/> <MkAvatar :user="$i" :class="$style.avatar"/><MkAcct class="_nowrap" :class="$style.acct" :user="$i"/>
</button> </button>
</div> </div>
@ -83,12 +83,8 @@ import { $i, openAccountMenu as openAccountMenu_ } from '@/account.js';
import { defaultStore } from '@/store.js'; import { defaultStore } from '@/store.js';
import { i18n } from '@/i18n.js'; import { i18n } from '@/i18n.js';
import { instance } from '@/instance.js'; import { instance } from '@/instance.js';
import { getHTMLElementOrNull } from '@/scripts/get-dom-node-or-null.js';
const forceIconOnly = ref(window.innerWidth <= 1279); const iconOnly = ref(false);
const iconOnly = computed(() => {
return forceIconOnly.value || (defaultStore.reactiveState.menuDisplay.value === 'sideIcon');
});
const menu = computed(() => defaultStore.state.menu); const menu = computed(() => defaultStore.state.menu);
const otherMenuItemIndicated = computed(() => { const otherMenuItemIndicated = computed(() => {
@ -99,10 +95,14 @@ const otherMenuItemIndicated = computed(() => {
return false; return false;
}); });
const forceIconOnly = window.innerWidth <= 1279;
function calcViewState() { function calcViewState() {
forceIconOnly.value = window.innerWidth <= 1279; iconOnly.value = forceIconOnly || (defaultStore.state.menuDisplay === 'sideIcon');
} }
calcViewState();
window.addEventListener('resize', calcViewState); window.addEventListener('resize', calcViewState);
watch(defaultStore.reactiveState.menuDisplay, () => { watch(defaultStore.reactiveState.menuDisplay, () => {
@ -120,10 +120,8 @@ function openAccountMenu(ev: MouseEvent) {
} }
function more(ev: MouseEvent) { function more(ev: MouseEvent) {
const target = getHTMLElementOrNull(ev.currentTarget ?? ev.target);
if (!target) return;
const { dispose } = os.popup(defineAsyncComponent(() => import('@/components/MkLaunchPad.vue')), { const { dispose } = os.popup(defineAsyncComponent(() => import('@/components/MkLaunchPad.vue')), {
src: target, src: ev.currentTarget ?? ev.target,
}, { }, {
closed: () => dispose(), closed: () => dispose(),
}); });