Skip to content
1 change: 1 addition & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,7 @@
- Enhance: ドライブのファイル一覧で自動でもっと見るを利用可能に
- Enhance: ウィジェットの表示設定をプレビューを見ながら行えるように
- Enhance: ウィジェットの設定項目のラベルの多言語対応
- Enhance: 画面幅が広いときにメディアを横並びで表示できるようにするオプションを追加
- Enhance: パフォーマンスの向上
- Fix: ドライブクリーナーでファイルを削除しても画面に反映されない問題を修正 #16061
- Fix: 非ログイン時にログインを求めるダイアログが表示された後にダイアログのぼかしが解除されず操作不能になることがある問題を修正
Expand Down
1 change: 1 addition & 0 deletions locales/ja-JP.yml
Original file line number Diff line number Diff line change
Expand Up @@ -543,6 +543,7 @@ regenerate: "再生成"
fontSize: "フォントサイズ"
mediaListWithOneImageAppearance: "画像が1枚のみのメディアリストの高さ"
limitTo: "{x}を上限に"
showMediaListByGridInWideArea: "画面幅が広いときはメディアリストを横並びで表示する"
noFollowRequests: "フォロー申請はありません"
openImageInNewTab: "画像を新しいタブで開く"
dashboard: "ダッシュボード"
Expand Down
21 changes: 20 additions & 1 deletion packages/frontend/src/components/MkMediaList.vue
Original file line number Diff line number Diff line change
Expand Up @@ -4,13 +4,14 @@ SPDX-License-Identifier: AGPL-3.0-only
-->

<template>
<div>
<div :class="$style.root">
<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="$style.container">
<div
ref="gallery"
:class="[
$style.medias,
...(prefer.s.showMediaListByGridInWideArea ? [$style.gridInWideArea] : []),
count === 1 ? [$style.n1, {
[$style.n116_9]: prefer.s.mediaListWithOneImageAppearance === '16_9',
[$style.n11_1]: prefer.s.mediaListWithOneImageAppearance === '1_1',
Expand Down Expand Up @@ -226,6 +227,10 @@ defineExpose({
</script>

<style lang="scss" module>
.root {
container-type: inline-size;
}

.container {
position: relative;
width: 100%;
Expand Down Expand Up @@ -309,6 +314,20 @@ defineExpose({
border-radius: 8px;
}

@container (min-width: 500px) {
.medias.gridInWideArea {
display: grid;
aspect-ratio: auto;
grid-template-columns: repeat(4, 1fr);
grid-template-rows: auto;
grid-gap: 8px;

> .media {
aspect-ratio: 1 / 1;
}
}
}

:global(.pswp) {
--pswp-root-z-index: var(--mk-pswp-root-z-index, 2000700) !important;
--pswp-bg: var(--MI_THEME-modalBg) !important;
Expand Down
19 changes: 18 additions & 1 deletion packages/frontend/src/components/MkMediaVideo.vue
Original file line number Diff line number Diff line change
Expand Up @@ -705,7 +705,7 @@ onDeactivated(() => {
.controlButton {
padding: 6px;
border-radius: calc(var(--MI-radius) / 2);
transition: background-color .2s ease-in-out;
transition: background-color .15s ease;
font-size: 1.05rem;

&:hover {
Expand Down Expand Up @@ -760,4 +760,21 @@ onDeactivated(() => {
}
}
}

@container (max-width: 300px) {
.videoControls {
grid-template-areas:
"left . right"
"seekbar seekbar seekbar";
grid-template-columns: auto 1fr auto;
}

.controlsTime {
display: none;
}

.controlsVolume {
display: none;
}
}
</style>
9 changes: 9 additions & 0 deletions packages/frontend/src/pages/settings/preferences.vue
Original file line number Diff line number Diff line change
Expand Up @@ -269,6 +269,14 @@ SPDX-License-Identifier: AGPL-3.0-only
</MkPreferenceContainer>
</SearchMarker>

<SearchMarker :keywords="['attachment', 'image', 'photo', 'picture', 'media', 'thumbnail', 'grid', 'wide', 'area']">
<MkPreferenceContainer k="showMediaListByGridInWideArea">
<MkSwitch v-model="showMediaListByGridInWideArea">
<template #label><SearchLabel>{{ i18n.ts.showMediaListByGridInWideArea }}</SearchLabel></template>
</MkSwitch>
</MkPreferenceContainer>
</SearchMarker>

<SearchMarker :keywords="['ticker', 'information', 'label', 'instance', 'server', 'host', 'federation']">
<MkPreferenceContainer k="instanceTicker">
<MkSelect
Expand Down Expand Up @@ -890,6 +898,7 @@ const notificationStackAxis = prefer.model('notificationStackAxis');
const instanceTicker = prefer.model('instanceTicker');
const highlightSensitiveMedia = prefer.model('highlightSensitiveMedia');
const mediaListWithOneImageAppearance = prefer.model('mediaListWithOneImageAppearance');
const showMediaListByGridInWideArea = prefer.model('showMediaListByGridInWideArea');
const reactionsDisplaySize = prefer.model('reactionsDisplaySize');
const limitWidthOfReaction = prefer.model('limitWidthOfReaction');
const squareAvatars = prefer.model('squareAvatars');
Expand Down
3 changes: 3 additions & 0 deletions packages/frontend/src/preferences/def.ts
Original file line number Diff line number Diff line change
Expand Up @@ -320,6 +320,9 @@ export const PREF_DEF = definePreferences({
mediaListWithOneImageAppearance: {
default: 'expand' as 'expand' | '16_9' | '1_1' | '2_3',
},
showMediaListByGridInWideArea: {
default: false,
},
notificationPosition: {
default: 'rightBottom' as 'leftTop' | 'leftBottom' | 'rightTop' | 'rightBottom',
},
Expand Down
4 changes: 4 additions & 0 deletions packages/i18n/src/autogen/locale.ts
Original file line number Diff line number Diff line change
Expand Up @@ -2184,6 +2184,10 @@ export interface Locale extends ILocale {
* {x}を上限に
*/
"limitTo": ParameterizedString<"x">;
/**
* 画面幅が広いときはメディアリストを横並びで表示する
*/
"showMediaListByGridInWideArea": string;
/**
* フォロー申請はありません
*/
Expand Down
Loading