diff --git a/locales/ca-ES.yml b/locales/ca-ES.yml index 9a0427042f..f63fee93b0 100644 --- a/locales/ca-ES.yml +++ b/locales/ca-ES.yml @@ -385,12 +385,13 @@ _cw: chars: '{count} caràcters' _visibility: followers: "Seguidors" - publicDescription: La teva publicació serà visible per a tots els usuaris + publicDescription: La teva publicació serà visible per a totes les línies de temps + públiques localOnly: Només Local specified: Directe home: Sense llistar homeDescription: Publica només a la línea de temps local - followersDescription: Fes visible només per als teus seguidors + followersDescription: Fes visible només per als teus seguidors i usuaris mencionats specifiedDescription: Fer visible només per a usuaris determinats public: Públic localOnlyDescription: No és visible per als usuaris remots @@ -2031,11 +2032,12 @@ _auth: shareAccessAsk: Estàs segur que vols autoritzar aquesta aplicació per accedir al teu compte? shareAccess: Vols autoritzar "{name}" per accedir a aquest compte? - permissionAsk: Aquesta aplicació sol·licita els següents permisos + permissionAsk: 'Aquesta aplicació sol·licita els següents permisos:' callback: Tornant a l'aplicació denied: Accés denegat pleaseGoBack: Si us plau, torneu a l'aplicació - copyAsk: Posa el següent codi d'autorització a l'aplicació + copyAsk: "Posa el següent codi d'autorització a l'aplicació:" + allPermissions: Accés complet al compte _weekday: wednesday: Dimecres saturday: Dissabte diff --git a/locales/en-US.yml b/locales/en-US.yml index eb4ad495a1..3e4e9dcd38 100644 --- a/locales/en-US.yml +++ b/locales/en-US.yml @@ -941,6 +941,7 @@ deleteAccountConfirm: "This will irreversibly delete your account. Proceed?" incorrectPassword: "Incorrect password." voteConfirm: "Confirm your vote for \"{choice}\"?" hide: "Hide" +alt: "ALT" leaveGroup: "Leave group" leaveGroupConfirm: "Are you sure you want to leave \"{name}\"?" useDrawerReactionPickerForMobile: "Display reaction picker as drawer on mobile" diff --git a/packages/backend/src/services/note/create.ts b/packages/backend/src/services/note/create.ts index ba6859249d..defd9742e2 100644 --- a/packages/backend/src/services/note/create.ts +++ b/packages/backend/src/services/note/create.ts @@ -196,7 +196,13 @@ export default async ( data.channel = await Channels.findOneBy({ id: data.reply.channelId }); } - if (data.createdAt == null) data.createdAt = new Date(); + const now = new Date(); + if ( + !data.createdAt || + isNaN(data.createdAt.getTime()) || + data.createdAt > now + ) + data.createdAt = now; if (data.visibility == null) data.visibility = "public"; if (data.localOnly == null) data.localOnly = false; if (data.channel != null) data.visibility = "public"; diff --git a/packages/client/src/components/MkContainer.vue b/packages/client/src/components/MkContainer.vue index 62c198cb16..4c4e91160c 100644 --- a/packages/client/src/components/MkContainer.vue +++ b/packages/client/src/components/MkContainer.vue @@ -196,6 +196,7 @@ export default defineComponent({ &.scrollable { display: flex; flex-direction: column; + flex-grow: 1; > .content { overflow: auto; diff --git a/packages/client/src/components/MkMediaImage.vue b/packages/client/src/components/MkMediaImage.vue index 9097a4771c..df2c75e14c 100644 --- a/packages/client/src/components/MkMediaImage.vue +++ b/packages/client/src/components/MkMediaImage.vue @@ -16,24 +16,33 @@
- +
GIF
- +
+ + +
@@ -44,6 +53,8 @@ import { getStaticImageUrl } from "@/scripts/get-static-image-url"; import ImgWithBlurhash from "@/components/MkImgWithBlurhash.vue"; import { defaultStore } from "@/store"; import { i18n } from "@/i18n"; +import * as os from "@/os"; + const props = defineProps<{ image: misskey.entities.DriveFile; @@ -59,6 +70,13 @@ const url = ? getStaticImageUrl(props.image.thumbnailUrl) : props.image.thumbnailUrl; +function captionPopup() { + os.alert({ + type: "info", + text: props.image.comment + }) +} + // Plugin:register_note_view_interruptor を使って書き換えられる可能性があるためwatchする watch( () => props.image, @@ -110,22 +128,22 @@ watch( position: relative; background: var(--bg); - > .hide { - display: block; + > .buttons { + display: flex; + gap: 4px; position: absolute; border-radius: 6px; - background-color: var(--accentedBg); - -webkit-backdrop-filter: var(--blur, blur(15px)); - backdrop-filter: var(--blur, blur(15px)); - color: var(--accent); - font-size: 0.8em; - padding: 6px 8px; - text-align: center; + overflow: hidden; top: 12px; right: 12px; - - > i { - display: block; + > * { + background-color: var(--accentedBg); + -webkit-backdrop-filter: var(--blur, blur(15px)); + backdrop-filter: var(--blur, blur(15px)); + color: var(--accent); + font-size: 0.8em; + padding: 6px 8px; + text-align: center; } } diff --git a/packages/client/src/components/MkMediaVideo.vue b/packages/client/src/components/MkMediaVideo.vue index 21f8aceddf..f743b1359b 100644 --- a/packages/client/src/components/MkMediaVideo.vue +++ b/packages/client/src/components/MkMediaVideo.vue @@ -32,7 +32,6 @@ > - +
+ + +
@@ -58,6 +67,7 @@ import type * as misskey from "calckey-js"; import { defaultStore } from "@/store"; import "vue-plyr/dist/vue-plyr.css"; import { i18n } from "@/i18n"; +import * as os from "@/os"; const props = defineProps<{ video: misskey.entities.DriveFile; @@ -72,6 +82,13 @@ const hide = ref( : props.video.isSensitive && defaultStore.state.nsfw !== "ignore" ); +function captionPopup() { + os.alert({ + type: "info", + text: props.video.comment + }) +} + onMounted(() => { mini.value = plyr.value.player.media.scrollWidth < 300; if (mini.value) { @@ -87,22 +104,22 @@ onMounted(() => { position: relative; --plyr-color-main: var(--accent); - > .hide { - display: block; + > .buttons { + display: flex; + gap: 4px; position: absolute; border-radius: 6px; - background-color: var(--accentedBg); - -webkit-backdrop-filter: var(--blur, blur(15px)); - backdrop-filter: var(--blur, blur(15px)); - color: var(--accent); - font-size: 0.8em; - padding: 6px 8px; - text-align: center; + overflow: hidden; top: 12px; right: 12px; - - > i { - display: block; + > * { + background-color: var(--accentedBg); + -webkit-backdrop-filter: var(--blur, blur(15px)); + backdrop-filter: var(--blur, blur(15px)); + color: var(--accent); + font-size: 0.8em; + padding: 6px 8px; + text-align: center; } } diff --git a/packages/client/src/components/MkWidgets.vue b/packages/client/src/components/MkWidgets.vue index d48fc53832..0d64c9fb62 100644 --- a/packages/client/src/components/MkWidgets.vue +++ b/packages/client/src/components/MkWidgets.vue @@ -172,6 +172,9 @@ function onContextmenu(widget: Widget, ev: MouseEvent) {