diff --git a/.github/workflows/pr-reply.yml b/.github/workflows/pr-reply.yml deleted file mode 100644 index 48752e641..000000000 --- a/.github/workflows/pr-reply.yml +++ /dev/null @@ -1,36 +0,0 @@ -# Replys a message to all new PRs -# The message: -# - Say hello and thanks to the contributor -# - Mention maintainers will review the PR soon -# - To other people, show the testing pr command: npx kuma-pr -# - Also show the advanced usage link: https://github.com/louislam/uptime-kuma/wiki/Test-Pull-Requests -name: Reply to PRs -on: - pull_request: - types: [opened, reopened] - -permissions: - issues: write - pull-requests: write - contents: read - -jobs: - reply: - runs-on: ubuntu-latest - steps: - - name: Reply to PR - uses: actions/github-script@v7 - with: - script: | - const pr = context.payload.pull_request; - const message = `Hello @${pr.user.login}, thank you for your contribution! :tada:\n` + - `The maintainers will review your PR soon.\n\n` + - `If anyone would like to help test this PR, you can use the command:\n` + - `\`\`\`bash\nnpx kuma-pr ${pr.user.login}:${pr.head.ref}\n\`\`\`\n\n` + - ` For advanced usage, please refer to our [wiki](https://github.com/louislam/uptime-kuma/wiki/Test-Pull-Requests) `; - await github.rest.issues.createComment({ - issue_number: pr.number, - owner: context.repo.owner, - repo: context.repo.repo, - body: message - }); diff --git a/src/components/HeartbeatBar.vue b/src/components/HeartbeatBar.vue index 429ca9f91..ad133821e 100644 --- a/src/components/HeartbeatBar.vue +++ b/src/components/HeartbeatBar.vue @@ -7,11 +7,17 @@ class="beat-hover-area" :class="{ 'empty': (beat === 0) }" :style="beatHoverAreaStyle" - :title="getBeatTitle(beat)" + :aria-label="getBeatAriaLabel(beat)" + role="status" + tabindex="0" + @mouseenter="showTooltip(beat, $event)" + @mouseleave="hideTooltip" + @focus="showTooltip(beat, $event)" + @blur="hideTooltip" >
@@ -24,13 +30,27 @@
{{ timeSinceLastBeat }}
+ + + + + diff --git a/src/pages/StatusPage.vue b/src/pages/StatusPage.vue index e0df74fde..0c9e97c2d 100644 --- a/src/pages/StatusPage.vue +++ b/src/pages/StatusPage.vue @@ -720,7 +720,7 @@ export default { // Configure auto-refresh loop feedInterval = setInterval(() => { this.updateHeartbeatList(); - }, (this.config.autoRefreshInterval + 10) * 1000); + }, Math.max(5, this.config.autoRefreshInterval) * 1000); this.updateUpdateTimer(); }).catch( function (error) { @@ -806,7 +806,15 @@ export default { clearInterval(this.updateCountdown); this.updateCountdown = setInterval(() => { - const countdown = dayjs.duration(this.lastUpdateTime.add(this.config.autoRefreshInterval, "seconds").add(10, "seconds").diff(dayjs())); + // rounding here as otherwise we sometimes skip numbers in cases of time drift + const countdown = dayjs.duration( + Math.round( + this.lastUpdateTime + .add(Math.max(5, this.config.autoRefreshInterval), "seconds") + .diff(dayjs()) + / 1000 + ), "seconds"); + if (countdown.as("seconds") < 0) { clearInterval(this.updateCountdown); } else { diff --git a/test/e2e/specs/status-page.spec.js b/test/e2e/specs/status-page.spec.js index c8f548b60..1964f92b5 100644 --- a/test/e2e/specs/status-page.spec.js +++ b/test/e2e/specs/status-page.spec.js @@ -121,8 +121,8 @@ test.describe("Status Page", () => { await expect(page.getByTestId("update-countdown-text")).toContainText("00:"); const updateCountdown = Number((await page.getByTestId("update-countdown-text").textContent()).match(/(\d+):(\d+)/)[2]); - expect(updateCountdown).toBeGreaterThanOrEqual(refreshInterval); // cant be certain when the timer will start, so ensure it's within expected range - expect(updateCountdown).toBeLessThanOrEqual(refreshInterval + 10); + expect(updateCountdown).toBeGreaterThanOrEqual(refreshInterval - 10); // cant be certain when the timer will start, so ensure it's within expected range + expect(updateCountdown).toBeLessThanOrEqual(refreshInterval); await expect(page.locator("body")).toHaveClass(theme);