Skip to content

Commit 062edd3

Browse files
enhance(frontend): 画面幅が広いときはメディアを横並びで表示できるようにするオプションを追加 (misskey-dev#16946)
* enhance(frontend): 画面幅が広いときはメディアを横並びで表示できるようにするオプションを追加 * Update Changelog * Update CHANGELOG.md
1 parent b311e70 commit 062edd3

File tree

6 files changed

+55
-2
lines changed

6 files changed

+55
-2
lines changed

locales/index.d.ts

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2202,6 +2202,10 @@ export interface Locale extends ILocale {
22022202
* {x}を上限に
22032203
*/
22042204
"limitTo": ParameterizedString<"x">;
2205+
/**
2206+
* 画面幅が広いときはメディアリストを横並びで表示する
2207+
*/
2208+
"showMediaListByGridInWideArea": string;
22052209
/**
22062210
* フォロー申請はありません
22072211
*/

locales/ja-JP.yml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -546,6 +546,7 @@ regenerate: "再生成"
546546
fontSize: "フォントサイズ"
547547
mediaListWithOneImageAppearance: "画像が1枚のみのメディアリストの高さ"
548548
limitTo: "{x}を上限に"
549+
showMediaListByGridInWideArea: "画面幅が広いときはメディアリストを横並びで表示する"
549550
noFollowRequests: "フォロー申請はありません"
550551
openImageInNewTab: "画像を新しいタブで開く"
551552
dashboard: "ダッシュボード"

packages/frontend/src/components/MkMediaList.vue

Lines changed: 20 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,13 +4,14 @@ SPDX-License-Identifier: AGPL-3.0-only
44
-->
55

66
<template>
7-
<div>
7+
<div :class="$style.root">
88
<XBanner v-for="media in mediaList.filter(media => !previewable(media))" :key="media.id" :media="media"/>
99
<div v-if="mediaList.filter(media => previewable(media)).length > 0" :class="$style.container">
1010
<div
1111
ref="gallery"
1212
:class="[
1313
$style.medias,
14+
...(prefer.s.showMediaListByGridInWideArea ? [$style.gridInWideArea] : []),
1415
count === 1 ? [$style.n1, {
1516
[$style.n116_9]: prefer.s.mediaListWithOneImageAppearance === '16_9',
1617
[$style.n11_1]: prefer.s.mediaListWithOneImageAppearance === '1_1',
@@ -230,6 +231,10 @@ defineExpose({
230231
</script>
231232

232233
<style lang="scss" module>
234+
.root {
235+
container-type: inline-size;
236+
}
237+
233238
.container {
234239
position: relative;
235240
width: 100%;
@@ -313,6 +318,20 @@ defineExpose({
313318
border-radius: 8px;
314319
}
315320
321+
@container (min-width: 500px) {
322+
.medias.gridInWideArea {
323+
display: grid;
324+
aspect-ratio: auto;
325+
grid-template-columns: repeat(4, 1fr);
326+
grid-template-rows: auto;
327+
grid-gap: 8px;
328+
329+
> .media {
330+
aspect-ratio: 1 / 1;
331+
}
332+
}
333+
}
334+
316335
:global(.pswp) {
317336
--pswp-root-z-index: var(--mk-pswp-root-z-index, 2000700) !important;
318337
--pswp-bg: var(--MI_THEME-modalBg) !important;

packages/frontend/src/components/MkMediaVideo.vue

Lines changed: 18 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -705,7 +705,7 @@ onDeactivated(() => {
705705
.controlButton {
706706
padding: 6px;
707707
border-radius: calc(var(--MI-radius) / 2);
708-
transition: background-color .2s ease-in-out;
708+
transition: background-color .15s ease;
709709
font-size: 1.05rem;
710710
711711
&:hover {
@@ -760,4 +760,21 @@ onDeactivated(() => {
760760
}
761761
}
762762
}
763+
764+
@container (max-width: 300px) {
765+
.videoControls {
766+
grid-template-areas:
767+
"left . right"
768+
"seekbar seekbar seekbar";
769+
grid-template-columns: auto 1fr auto;
770+
}
771+
772+
.controlsTime {
773+
display: none;
774+
}
775+
776+
.controlsVolume {
777+
display: none;
778+
}
779+
}
763780
</style>

packages/frontend/src/pages/settings/preferences.vue

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -269,6 +269,14 @@ SPDX-License-Identifier: AGPL-3.0-only
269269
</MkPreferenceContainer>
270270
</SearchMarker>
271271

272+
<SearchMarker :keywords="['attachment', 'image', 'photo', 'picture', 'media', 'thumbnail', 'grid', 'wide', 'area']">
273+
<MkPreferenceContainer k="showMediaListByGridInWideArea">
274+
<MkSwitch v-model="showMediaListByGridInWideArea">
275+
<template #label><SearchLabel>{{ i18n.ts.showMediaListByGridInWideArea }}</SearchLabel></template>
276+
</MkSwitch>
277+
</MkPreferenceContainer>
278+
</SearchMarker>
279+
272280
<SearchMarker :keywords="['ticker', 'information', 'label', 'instance', 'server', 'host', 'federation']">
273281
<MkPreferenceContainer k="instanceTicker">
274282
<MkSelect
@@ -905,6 +913,7 @@ const notificationStackAxis = prefer.model('notificationStackAxis');
905913
const instanceTicker = prefer.model('instanceTicker');
906914
const highlightSensitiveMedia = prefer.model('highlightSensitiveMedia');
907915
const mediaListWithOneImageAppearance = prefer.model('mediaListWithOneImageAppearance');
916+
const showMediaListByGridInWideArea = prefer.model('showMediaListByGridInWideArea');
908917
const reactionsDisplaySize = prefer.model('reactionsDisplaySize');
909918
const limitWidthOfReaction = prefer.model('limitWidthOfReaction');
910919
const squareAvatars = prefer.model('squareAvatars');

packages/frontend/src/preferences/def.ts

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -318,6 +318,9 @@ export const PREF_DEF = definePreferences({
318318
mediaListWithOneImageAppearance: {
319319
default: 'expand' as 'expand' | '16_9' | '1_1' | '2_3',
320320
},
321+
showMediaListByGridInWideArea: {
322+
default: false,
323+
},
321324
notificationPosition: {
322325
default: 'rightBottom' as 'leftTop' | 'leftBottom' | 'rightTop' | 'rightBottom',
323326
},

0 commit comments

Comments
 (0)