diff options
| author | misskey-release-bot[bot] <157398866+misskey-release-bot[bot]@users.noreply.github.com> | 2025-10-08 13:18:08 +0000 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2025-10-08 13:18:08 +0000 |
| commit | 56cc89b521e8ca0d302230d123c3924e4461556d (patch) | |
| tree | 242411d50ffd1ed7096f95ecdafe91b482628a46 /packages/frontend/src/widgets | |
| parent | Merge pull request #16521 from misskey-dev/develop (diff) | |
| parent | Release: 2025.10.0 (diff) | |
| download | misskey-56cc89b521e8ca0d302230d123c3924e4461556d.tar.gz misskey-56cc89b521e8ca0d302230d123c3924e4461556d.tar.bz2 misskey-56cc89b521e8ca0d302230d123c3924e4461556d.zip | |
Merge pull request #16591 from misskey-dev/develop
Release: 2025.10.0
Diffstat (limited to 'packages/frontend/src/widgets')
4 files changed, 42 insertions, 14 deletions
diff --git a/packages/frontend/src/widgets/WidgetActivity.chart.vue b/packages/frontend/src/widgets/WidgetActivity.chart.vue index 41c6126c72..e708343b3a 100644 --- a/packages/frontend/src/widgets/WidgetActivity.chart.vue +++ b/packages/frontend/src/widgets/WidgetActivity.chart.vue @@ -34,7 +34,7 @@ SPDX-License-Identifier: AGPL-3.0-only </template> <script lang="ts" setup> -import { ref } from 'vue'; +import { onMounted, ref } from 'vue'; const props = defineProps<{ activity: { total: number; @@ -94,6 +94,10 @@ function render() { pointsTotal.value = activity.map((d, i) => `${(i * zoom.value) + pos.value},${(1 - (d.total / peak)) * viewBoxY.value}`).join(' '); } } + +onMounted(() => { + render(); +}); </script> <style lang="scss" module> diff --git a/packages/frontend/src/widgets/WidgetCalendar.vue b/packages/frontend/src/widgets/WidgetCalendar.vue index 12c0a66c5c..f2321ca9fa 100644 --- a/packages/frontend/src/widgets/WidgetCalendar.vue +++ b/packages/frontend/src/widgets/WidgetCalendar.vue @@ -38,12 +38,12 @@ SPDX-License-Identifier: AGPL-3.0-only </template> <script lang="ts" setup> -import { ref } from 'vue'; +import { ref, watch } from 'vue'; import { useWidgetPropsManager } from './widget.js'; import type { WidgetComponentEmits, WidgetComponentExpose, WidgetComponentProps } from './widget.js'; import type { FormWithDefault, GetFormResultType } from '@/utility/form.js'; import { i18n } from '@/i18n.js'; -import { useInterval } from '@@/js/use-interval.js'; +import { useLowresTime, TIME_UPDATE_INTERVAL } from '@/composables/use-lowres-time.js'; const name = 'calendar'; @@ -65,6 +65,7 @@ const { widgetProps, configure } = useWidgetPropsManager(name, emit, ); +const fNow = useLowresTime(); const year = ref(0); const month = ref(0); const day = ref(0); @@ -73,8 +74,14 @@ const yearP = ref(0); const monthP = ref(0); const dayP = ref(0); const isHoliday = ref(false); -const tick = () => { - const now = new Date(); + +const nextDay = new Date(); +nextDay.setHours(24, 0, 0, 0); +let nextDayMidnightTime = nextDay.getTime(); +let nextDayTimer: number | null = null; + +function update(time: number) { + const now = new Date(time); const nd = now.getDate(); const nm = now.getMonth(); const ny = now.getFullYear(); @@ -104,11 +111,28 @@ const tick = () => { yearP.value = yearNumer / yearDenom * 100; isHoliday.value = now.getDay() === 0 || now.getDay() === 6; -}; +} + +watch(fNow, (to) => { + update(to); + + // 次回更新までに日付が変わる場合、日付が変わった直後に強制的に更新するタイマーをセットする + if (nextDayMidnightTime - to <= TIME_UPDATE_INTERVAL) { + if (nextDayTimer != null) { + window.clearTimeout(nextDayTimer); + nextDayTimer = null; + } + + nextDayTimer = window.setTimeout(() => { + update(nextDayMidnightTime); + nextDayTimer = null; + }, nextDayMidnightTime - to); + } +}, { immediate: true }); -useInterval(tick, 1000, { - immediate: true, - afterMounted: false, +watch(day, () => { + nextDay.setHours(24, 0, 0, 0); + nextDayMidnightTime = nextDay.getTime(); }); defineExpose<WidgetComponentExpose>({ diff --git a/packages/frontend/src/widgets/WidgetSlideshow.vue b/packages/frontend/src/widgets/WidgetSlideshow.vue index 8e5dc9e8d3..240210c1fb 100644 --- a/packages/frontend/src/widgets/WidgetSlideshow.vue +++ b/packages/frontend/src/widgets/WidgetSlideshow.vue @@ -9,7 +9,7 @@ SPDX-License-Identifier: AGPL-3.0-only <p v-if="widgetProps.folderId == null"> {{ i18n.ts.folder }} </p> - <p v-if="widgetProps.folderId != null && images.length === 0 && !fetching">{{ i18n.ts['no-image'] }}</p> + <p v-if="widgetProps.folderId != null && images.length === 0 && !fetching">{{ i18n.ts.nothing }}</p> <div ref="slideA" class="slide a"></div> <div ref="slideB" class="slide b"></div> </div> diff --git a/packages/frontend/src/widgets/WidgetUserList.vue b/packages/frontend/src/widgets/WidgetUserList.vue index d87ea5ade2..9e914fa648 100644 --- a/packages/frontend/src/widgets/WidgetUserList.vue +++ b/packages/frontend/src/widgets/WidgetUserList.vue @@ -67,15 +67,15 @@ const fetching = ref(true); async function chooseList() { const lists = await misskeyApi('users/lists/list'); - const { canceled, result: list } = await os.select({ + const { canceled, result: listId } = await os.select({ title: i18n.ts.selectList, items: lists.map(x => ({ - value: x, text: x.name, + value: x.id, label: x.name, })), default: widgetProps.listId, }); - if (canceled || list == null) return; - + if (canceled || listId == null) return; + const list = lists.find(x => x.id === listId)!; widgetProps.listId = list.id; save(); fetch(); |