From 20343d580a20237d9196fa28c087d7e10133eb17 Mon Sep 17 00:00:00 2001 From: silverwind Date: Tue, 26 Nov 2024 22:56:17 +0100 Subject: [PATCH 01/13] Fix typescript errors in Vue files --- .gitignore | 1 + templates/repo/commit_status.tmpl | 2 +- web_src/js/components/DashboardRepoList.vue | 17 ++++------- web_src/js/components/DiffCommitSelector.vue | 14 ++++----- web_src/js/components/RepoActionView.vue | 29 +++++++++--------- web_src/js/components/RepoCodeFrequency.vue | 14 +++++---- web_src/js/components/RepoContributors.vue | 31 ++++++++++++-------- web_src/js/components/RepoRecentCommits.vue | 14 +++++---- web_src/js/globals.d.ts | 4 +++ web_src/js/types.ts | 26 ++++++++++++++++ web_src/js/utils/time.ts | 6 +++- 11 files changed, 98 insertions(+), 60 deletions(-) diff --git a/.gitignore b/.gitignore index 7889df77b1e22..86e6e4fefdc1c 100644 --- a/.gitignore +++ b/.gitignore @@ -28,6 +28,7 @@ _testmain.go *.exe *.test *.prof +*.tsbuildinfo *coverage.out coverage.all diff --git a/templates/repo/commit_status.tmpl b/templates/repo/commit_status.tmpl index eb700ab2bb63e..f494ba83659fe 100644 --- a/templates/repo/commit_status.tmpl +++ b/templates/repo/commit_status.tmpl @@ -1,4 +1,4 @@ - + {{if eq .State "pending"}} {{svg "octicon-dot-fill" 18 "commit-status icon text yellow"}} {{end}} diff --git a/web_src/js/components/DashboardRepoList.vue b/web_src/js/components/DashboardRepoList.vue index 3d3ac2fc69716..0a397b2f5ca47 100644 --- a/web_src/js/components/DashboardRepoList.vue +++ b/web_src/js/components/DashboardRepoList.vue @@ -3,18 +3,11 @@ import {createApp, nextTick} from 'vue'; import {SvgIcon} from '../svg.ts'; import {GET} from '../modules/fetch.ts'; import {fomanticQuery} from '../modules/fomantic/base.ts'; +import {commitStatus} from '../types.ts'; +import type {CommitStatus} from '../types.ts'; const {appSubUrl, assetUrlPrefix, pageData} = window.config; -// make sure this matches templates/repo/commit_status.tmpl -const commitStatus = { - pending: {name: 'octicon-dot-fill', color: 'yellow'}, - success: {name: 'octicon-check', color: 'green'}, - error: {name: 'gitea-exclamation', color: 'red'}, - failure: {name: 'octicon-x', color: 'red'}, - warning: {name: 'gitea-exclamation', color: 'yellow'}, -}; - const sfc = { components: {SvgIcon}, data() { @@ -281,18 +274,18 @@ const sfc = { return 'octicon-repo'; }, - statusIcon(status) { + statusIcon(status: CommitStatus) { return commitStatus[status].name; }, - statusColor(status) { + statusColor(status: CommitStatus) { return commitStatus[status].color; }, reposFilterKeyControl(e) { switch (e.key) { case 'Enter': - document.querySelector('.repo-owner-name-list li.active a')?.click(); + document.querySelector('.repo-owner-name-list li.active a')?.click(); break; case 'ArrowUp': if (this.activeIndex > 0) { diff --git a/web_src/js/components/DiffCommitSelector.vue b/web_src/js/components/DiffCommitSelector.vue index c78531cf9f328..3a394955ca7c0 100644 --- a/web_src/js/components/DiffCommitSelector.vue +++ b/web_src/js/components/DiffCommitSelector.vue @@ -14,7 +14,7 @@ export default { issueLink: el.getAttribute('data-issuelink'), locale: { filter_changes_by_commit: el.getAttribute('data-filter_changes_by_commit'), - }, + } as Record, commits: [], hoverActivated: false, lastReviewCommitSha: null, @@ -41,16 +41,16 @@ export default { this.$el.removeEventListener('keyup', this.onKeyUp); }, methods: { - onBodyClick(event) { + onBodyClick(event: MouseEvent) { // close this menu on click outside of this element when the dropdown is currently visible opened if (this.$el.contains(event.target)) return; if (this.menuVisible) { this.toggleMenu(); } }, - onKeyDown(event) { + onKeyDown(event: KeyboardEvent) { if (!this.menuVisible) return; - const item = document.activeElement; + const item = document.activeElement as HTMLElement; if (!this.$el.contains(item)) return; switch (event.key) { case 'ArrowDown': // select next element @@ -73,7 +73,7 @@ export default { if (commitIdx) this.highlight(this.commits[commitIdx]); } }, - onKeyUp(event) { + onKeyUp(event: KeyboardEvent) { if (!this.menuVisible) return; const item = document.activeElement; if (!this.$el.contains(item)) return; @@ -95,7 +95,7 @@ export default { } }, /** Focus given element */ - focusElem(elem, prevElem) { + focusElem(elem: HTMLElement, prevElem: HTMLElement) { if (elem) { elem.tabIndex = 0; if (prevElem) prevElem.tabIndex = -1; @@ -149,7 +149,7 @@ export default { window.location.assign(`${this.issueLink}/files/${this.lastReviewCommitSha}..${this.commits.at(-1).id}${this.queryParams}`); }, /** Clicking on a single commit opens this specific commit */ - commitClicked(commitId, newWindow = false) { + commitClicked(commitId: string, newWindow = false) { const url = `${this.issueLink}/commits/${commitId}${this.queryParams}`; if (newWindow) { window.open(url); diff --git a/web_src/js/components/RepoActionView.vue b/web_src/js/components/RepoActionView.vue index 7adc29ad4148b..86142dcfd418d 100644 --- a/web_src/js/components/RepoActionView.vue +++ b/web_src/js/components/RepoActionView.vue @@ -6,6 +6,7 @@ import {toggleElem} from '../utils/dom.ts'; import {formatDatetime} from '../utils/time.ts'; import {renderAnsi} from '../render/ansi.ts'; import {GET, POST, DELETE} from '../modules/fetch.ts'; +import type {ActionsStepLogLine, ActionsStatus} from '../types.ts'; const sfc = { name: 'RepoActionView', @@ -113,12 +114,12 @@ const sfc = { methods: { // get the active container element, either the `job-step-logs` or the `job-log-list` in the `job-log-group` - getLogsContainer(idx) { + getLogsContainer(idx: number) { const el = this.$refs.logs[idx]; return el._stepLogsActiveContainer ?? el; }, // begin a log group - beginLogGroup(idx) { + beginLogGroup(idx: number) { const el = this.$refs.logs[idx]; const elJobLogGroup = document.createElement('div'); @@ -135,13 +136,13 @@ const sfc = { el._stepLogsActiveContainer = elJobLogList; }, // end a log group - endLogGroup(idx) { + endLogGroup(idx: number) { const el = this.$refs.logs[idx]; el._stepLogsActiveContainer = null; }, // show/hide the step logs for a step - toggleStepLogs(idx) { + toggleStepLogs(idx: number) { this.currentJobStepsStates[idx].expanded = !this.currentJobStepsStates[idx].expanded; if (this.currentJobStepsStates[idx].expanded) { this.loadJob(); // try to load the data immediately instead of waiting for next timer interval @@ -156,7 +157,7 @@ const sfc = { POST(`${this.run.link}/approve`); }, - createLogLine(line, startTime, stepIndex) { + createLogLine(line: ActionsStepLogLine, startTime: number, stepIndex: number) { const div = document.createElement('div'); div.classList.add('job-log-line'); div.setAttribute('id', `jobstep-${stepIndex}-${line.index}`); @@ -164,21 +165,21 @@ const sfc = { const lineNumber = document.createElement('a'); lineNumber.classList.add('line-num', 'muted'); - lineNumber.textContent = line.index; + lineNumber.textContent = String(line.index); lineNumber.setAttribute('href', `#jobstep-${stepIndex}-${line.index}`); div.append(lineNumber); // for "Show timestamps" const logTimeStamp = document.createElement('span'); logTimeStamp.className = 'log-time-stamp'; - const date = new Date(parseFloat(line.timestamp * 1000)); + const date = new Date(line.timestamp * 1000); const timeStamp = formatDatetime(date); logTimeStamp.textContent = timeStamp; toggleElem(logTimeStamp, this.timeVisible['log-time-stamp']); // for "Show seconds" const logTimeSeconds = document.createElement('span'); logTimeSeconds.className = 'log-time-seconds'; - const seconds = Math.floor(parseFloat(line.timestamp) - parseFloat(startTime)); + const seconds = Math.floor(line.timestamp - startTime); logTimeSeconds.textContent = `${seconds}s`; toggleElem(logTimeSeconds, this.timeVisible['log-time-seconds']); @@ -192,7 +193,7 @@ const sfc = { return div; }, - appendLogs(stepIndex, logLines, startTime) { + appendLogs(stepIndex: number, logLines: Array, startTime: number) { for (const line of logLines) { // TODO: group support: ##[group]GroupTitle , ##[endgroup] const el = this.getLogsContainer(stepIndex); @@ -205,7 +206,7 @@ const sfc = { return await resp.json(); }, - async deleteArtifact(name) { + async deleteArtifact(name: string) { if (!window.confirm(this.locale.confirmDeleteArtifact.replace('%s', name))) return; await DELETE(`${this.run.link}/artifacts/${name}`); await this.loadJob(); @@ -269,11 +270,11 @@ const sfc = { } }, - isDone(status) { + isDone(status: ActionsStatus) { return ['success', 'skipped', 'failure', 'cancelled'].includes(status); }, - isExpandable(status) { + isExpandable(status: ActionsStatus) { return ['success', 'running', 'failure', 'cancelled'].includes(status); }, @@ -281,7 +282,7 @@ const sfc = { if (this.menuVisible) this.menuVisible = false; }, - toggleTimeDisplay(type) { + toggleTimeDisplay(type: 'seconds' | 'stamp') { this.timeVisible[`log-time-${type}`] = !this.timeVisible[`log-time-${type}`]; for (const el of this.$refs.steps.querySelectorAll(`.log-time-${type}`)) { toggleElem(el, this.timeVisible[`log-time-${type}`]); @@ -332,7 +333,7 @@ export function initRepositoryActionView() { // TODO: the parent element's full height doesn't work well now, // but we can not pollute the global style at the moment, only fix the height problem for pages with this component - const parentFullHeight = document.querySelector('body > div.full.height'); + const parentFullHeight = document.querySelector('body > div.full.height'); if (parentFullHeight) parentFullHeight.style.paddingBottom = '0'; const view = createApp(sfc, { diff --git a/web_src/js/components/RepoCodeFrequency.vue b/web_src/js/components/RepoCodeFrequency.vue index eaff8ae0af080..7696996cf6e6b 100644 --- a/web_src/js/components/RepoCodeFrequency.vue +++ b/web_src/js/components/RepoCodeFrequency.vue @@ -8,6 +8,8 @@ import { PointElement, LineElement, Filler, + type ChartOptions, + type ChartData, } from 'chart.js'; import {GET} from '../modules/fetch.ts'; import {Line as ChartLine} from 'vue-chartjs'; @@ -16,6 +18,7 @@ import { firstStartDateAfterDate, fillEmptyStartDaysWithZeroes, type DayData, + type DayDataObject, } from '../utils/time.ts'; import {chartJsColors} from '../utils/color.ts'; import {sleep} from '../utils.ts'; @@ -64,12 +67,12 @@ async function fetchGraphData() { } } while (response.status === 202); if (response.ok) { - data.value = await response.json(); - const weekValues = Object.values(data.value); + const dayDataObject: DayDataObject = await response.json(); + const weekValues = Object.values(dayDataObject); const start = weekValues[0].week; const end = firstStartDateAfterDate(new Date()); const startDays = startDaysBetween(start, end); - data.value = fillEmptyStartDaysWithZeroes(startDays, data.value); + data.value = fillEmptyStartDaysWithZeroes(startDays, dayDataObject); errorText.value = ''; } else { errorText.value = response.statusText; @@ -81,7 +84,7 @@ async function fetchGraphData() { } } -function toGraphData(data) { +function toGraphData(data: Array>): ChartData<'line'> { return { datasets: [ { @@ -108,10 +111,9 @@ function toGraphData(data) { }; } -const options = { +const options: ChartOptions<'line'> = { responsive: true, maintainAspectRatio: false, - animation: true, plugins: { legend: { display: true, diff --git a/web_src/js/components/RepoContributors.vue b/web_src/js/components/RepoContributors.vue index f42278ef6b786..23100ce844eae 100644 --- a/web_src/js/components/RepoContributors.vue +++ b/web_src/js/components/RepoContributors.vue @@ -9,6 +9,9 @@ import { PointElement, LineElement, Filler, + type ChartOptions, + type ChartData, + type Plugin, } from 'chart.js'; import {GET} from '../modules/fetch.ts'; import zoomPlugin from 'chartjs-plugin-zoom'; @@ -22,8 +25,9 @@ import {chartJsColors} from '../utils/color.ts'; import {sleep} from '../utils.ts'; import 'chartjs-adapter-dayjs-4/dist/chartjs-adapter-dayjs-4.esm'; import {fomanticQuery} from '../modules/fomantic/base.ts'; +import type {Entries} from 'type-fest'; -const customEventListener = { +const customEventListener: Plugin = { id: 'customEventListener', afterEvent: (chart, args, opts) => { // event will be replayed from chart.update when reset zoom, @@ -65,10 +69,10 @@ export default { data: () => ({ isLoading: false, errorText: '', - totalStats: {}, - sortedContributors: {}, + totalStats: {} as Record, + sortedContributors: {} as Record, type: 'commits', - contributorsStats: [], + contributorsStats: [] as Record, xAxisStart: null, xAxisEnd: null, xAxisMin: null, @@ -99,7 +103,7 @@ export default { async fetchGraphData() { this.isLoading = true; try { - let response; + let response: Response; do { response = await GET(`${this.repoLink}/activity/contributors/data`); if (response.status === 202) { @@ -112,7 +116,7 @@ export default { // below line might be deleted if we are sure go produces map always sorted by keys total.weeks = Object.fromEntries(Object.entries(total.weeks).sort()); - const weekValues = Object.values(total.weeks); + const weekValues = Object.values(total.weeks) as any; this.xAxisStart = weekValues[0].week; this.xAxisEnd = firstStartDateAfterDate(new Date()); const startDays = startDaysBetween(this.xAxisStart, this.xAxisEnd); @@ -120,7 +124,7 @@ export default { this.xAxisMin = this.xAxisStart; this.xAxisMax = this.xAxisEnd; this.contributorsStats = {}; - for (const [email, user] of Object.entries(rest)) { + for (const [email, user] of Object.entries(rest) as Entries>>) { user.weeks = fillEmptyStartDaysWithZeroes(startDays, user.weeks); this.contributorsStats[email] = user; } @@ -146,7 +150,7 @@ export default { user.total_additions = 0; user.total_deletions = 0; user.max_contribution_type = 0; - const filteredWeeks = user.weeks.filter((week) => { + const filteredWeeks = user.weeks.filter((week: Record) => { const oneWeek = 7 * 24 * 60 * 60 * 1000; if (week.week >= this.xAxisMin - oneWeek && week.week <= this.xAxisMax + oneWeek) { user.total_commits += week.commits; @@ -195,7 +199,7 @@ export default { return (1 - (coefficient % 1)) * 10 ** exp + maxValue; }, - toGraphData(data) { + toGraphData(data: Array>): ChartData<'line'> { return { datasets: [ { @@ -211,9 +215,9 @@ export default { }; }, - updateOtherCharts(event, reset) { - const minVal = event.chart.options.scales.x.min; - const maxVal = event.chart.options.scales.x.max; + updateOtherCharts({chart}: {chart: Chart}, reset?: boolean) { + const minVal = chart.options.scales.x.min; + const maxVal = chart.options.scales.x.max; if (reset) { this.xAxisMin = this.xAxisStart; this.xAxisMax = this.xAxisEnd; @@ -225,7 +229,7 @@ export default { } }, - getOptions(type) { + getOptions(type: 'main' | 'contributor'): ChartOptions<'line'> { return { responsive: true, maintainAspectRatio: false, @@ -238,6 +242,7 @@ export default { position: 'top', align: 'center', }, + // @ts-expect-error: bug in chartjs types customEventListener: { chartType: type, instance: this, diff --git a/web_src/js/components/RepoRecentCommits.vue b/web_src/js/components/RepoRecentCommits.vue index 8d2a14cd2cdf9..4437597778793 100644 --- a/web_src/js/components/RepoRecentCommits.vue +++ b/web_src/js/components/RepoRecentCommits.vue @@ -7,6 +7,7 @@ import { LinearScale, TimeScale, type ChartOptions, + type ChartData, } from 'chart.js'; import {GET} from '../modules/fetch.ts'; import {Bar} from 'vue-chartjs'; @@ -15,6 +16,7 @@ import { firstStartDateAfterDate, fillEmptyStartDaysWithZeroes, type DayData, + type DayDataObject, } from '../utils/time.ts'; import {chartJsColors} from '../utils/color.ts'; import {sleep} from '../utils.ts'; @@ -61,11 +63,11 @@ async function fetchGraphData() { } } while (response.status === 202); if (response.ok) { - const data = await response.json(); - const start = Object.values(data)[0].week; + const dayDataObj: DayDataObject = await response.json(); + const start = Object.values(dayDataObj)[0].week; const end = firstStartDateAfterDate(new Date()); const startDays = startDaysBetween(start, end); - data.value = fillEmptyStartDaysWithZeroes(startDays, data).slice(-52); + data.value = fillEmptyStartDaysWithZeroes(startDays, dayDataObj); errorText.value = ''; } else { errorText.value = response.statusText; @@ -77,10 +79,11 @@ async function fetchGraphData() { } } -function toGraphData(data) { +function toGraphData(data: DayData[]): ChartData<'bar'> { return { datasets: [ { + // @ts-expect-error -- bar chart expects one-dimensional data, but apparently x/y still works data: data.map((i) => ({x: i.week, y: i.commits})), label: 'Commits', backgroundColor: chartJsColors['commits'], @@ -91,10 +94,9 @@ function toGraphData(data) { }; } -const options = { +const options: ChartOptions<'bar'> = { responsive: true, maintainAspectRatio: false, - animation: true, scales: { x: { type: 'time', diff --git a/web_src/js/globals.d.ts b/web_src/js/globals.d.ts index 9964293727dff..c94c9830f5bc5 100644 --- a/web_src/js/globals.d.ts +++ b/web_src/js/globals.d.ts @@ -63,3 +63,7 @@ interface Window { hcaptcha: any, codeEditors: any[], } + +interface HTMLElement { + _jobLogTime: number, +} diff --git a/web_src/js/types.ts b/web_src/js/types.ts index 29279bbded43c..3bcfecfbc0ecc 100644 --- a/web_src/js/types.ts +++ b/web_src/js/types.ts @@ -59,3 +59,29 @@ export type FomanticInitFunction = { settings?: Record, (...args: any[]): any, } + +export type CommitStatus = 'pending' | 'success' | 'error' | 'failure' | 'warning'; + +export type CommitStatusMap = { + [status in CommitStatus]: { + name: string, + color: string, + }; +}; + +// make sure this matches templates/repo/commit_status.tmpl +export const commitStatus: CommitStatusMap = { + pending: {name: 'octicon-dot-fill', color: 'yellow'}, + success: {name: 'octicon-check', color: 'green'}, + error: {name: 'gitea-exclamation', color: 'red'}, + failure: {name: 'octicon-x', color: 'red'}, + warning: {name: 'gitea-exclamation', color: 'yellow'}, +}; + +export type ActionsStatus = 'unknown' | 'waiting' | 'running' | 'success' | 'failure' | 'cancelled' | 'skipped' | 'blocked'; + +export type ActionsStepLogLine = { + index: number, + timestamp: number, + message: string, +}; diff --git a/web_src/js/utils/time.ts b/web_src/js/utils/time.ts index c661155442674..6951ebfedb9d9 100644 --- a/web_src/js/utils/time.ts +++ b/web_src/js/utils/time.ts @@ -49,7 +49,11 @@ export type DayData = { commits: number, } -export function fillEmptyStartDaysWithZeroes(startDays: number[], data: DayData[]): DayData[] { +export type DayDataObject = { + [timestamp: string]: DayData, +} + +export function fillEmptyStartDaysWithZeroes(startDays: number[], data: DayDataObject): DayData[] { const result = {}; for (const startDay of startDays) { From 7281204ec065c8430ca6e1a84688b3c27d6c13b4 Mon Sep 17 00:00:00 2001 From: silverwind Date: Tue, 26 Nov 2024 23:06:12 +0100 Subject: [PATCH 02/13] move commitStatus to own file --- templates/repo/commit_status.tmpl | 2 +- web_src/js/components/DashboardRepoList.vue | 2 +- web_src/js/data.ts | 10 ++++++++++ web_src/js/types.ts | 9 --------- 4 files changed, 12 insertions(+), 11 deletions(-) create mode 100644 web_src/js/data.ts diff --git a/templates/repo/commit_status.tmpl b/templates/repo/commit_status.tmpl index f494ba83659fe..2445cf12843da 100644 --- a/templates/repo/commit_status.tmpl +++ b/templates/repo/commit_status.tmpl @@ -1,4 +1,4 @@ - + {{if eq .State "pending"}} {{svg "octicon-dot-fill" 18 "commit-status icon text yellow"}} {{end}} diff --git a/web_src/js/components/DashboardRepoList.vue b/web_src/js/components/DashboardRepoList.vue index 0a397b2f5ca47..3a4adf4a37d98 100644 --- a/web_src/js/components/DashboardRepoList.vue +++ b/web_src/js/components/DashboardRepoList.vue @@ -3,7 +3,7 @@ import {createApp, nextTick} from 'vue'; import {SvgIcon} from '../svg.ts'; import {GET} from '../modules/fetch.ts'; import {fomanticQuery} from '../modules/fomantic/base.ts'; -import {commitStatus} from '../types.ts'; +import {commitStatus} from '../data.ts'; import type {CommitStatus} from '../types.ts'; const {appSubUrl, assetUrlPrefix, pageData} = window.config; diff --git a/web_src/js/data.ts b/web_src/js/data.ts new file mode 100644 index 0000000000000..a4ee9e1f12629 --- /dev/null +++ b/web_src/js/data.ts @@ -0,0 +1,10 @@ +import type {CommitStatusMap} from './types.ts'; + +// make sure this matches templates/repo/commit_status.tmpl +export const commitStatus: CommitStatusMap = { + pending: {name: 'octicon-dot-fill', color: 'yellow'}, + success: {name: 'octicon-check', color: 'green'}, + error: {name: 'gitea-exclamation', color: 'red'}, + failure: {name: 'octicon-x', color: 'red'}, + warning: {name: 'gitea-exclamation', color: 'yellow'}, +}; diff --git a/web_src/js/types.ts b/web_src/js/types.ts index 3bcfecfbc0ecc..a48eac376e0fd 100644 --- a/web_src/js/types.ts +++ b/web_src/js/types.ts @@ -69,15 +69,6 @@ export type CommitStatusMap = { }; }; -// make sure this matches templates/repo/commit_status.tmpl -export const commitStatus: CommitStatusMap = { - pending: {name: 'octicon-dot-fill', color: 'yellow'}, - success: {name: 'octicon-check', color: 'green'}, - error: {name: 'gitea-exclamation', color: 'red'}, - failure: {name: 'octicon-x', color: 'red'}, - warning: {name: 'gitea-exclamation', color: 'yellow'}, -}; - export type ActionsStatus = 'unknown' | 'waiting' | 'running' | 'success' | 'failure' | 'cancelled' | 'skipped' | 'blocked'; export type ActionsStepLogLine = { From a20077e0ff18d9eb394a90074ec44adc86de5084 Mon Sep 17 00:00:00 2001 From: silverwind Date: Tue, 26 Nov 2024 23:07:52 +0100 Subject: [PATCH 03/13] stop typescript from generating .tsbuildinfo --- .gitignore | 1 - tsconfig.json | 1 + 2 files changed, 1 insertion(+), 1 deletion(-) diff --git a/.gitignore b/.gitignore index 86e6e4fefdc1c..7889df77b1e22 100644 --- a/.gitignore +++ b/.gitignore @@ -28,7 +28,6 @@ _testmain.go *.exe *.test *.prof -*.tsbuildinfo *coverage.out coverage.all diff --git a/tsconfig.json b/tsconfig.json index 744f1511e951c..7cd2c6fb3379a 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -15,6 +15,7 @@ "allowSyntheticDefaultImports": true, "alwaysStrict": true, "esModuleInterop": true, + "incremental": false, "isolatedModules": true, "noEmit": true, "resolveJsonModule": true, From d69d57663770bf7c67fa478ee179c08c6199c32c Mon Sep 17 00:00:00 2001 From: silverwind Date: Tue, 26 Nov 2024 23:16:45 +0100 Subject: [PATCH 04/13] set tsBuildInfoFile --- tsconfig.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tsconfig.json b/tsconfig.json index 7cd2c6fb3379a..3df9f4ffff3b1 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -15,7 +15,7 @@ "allowSyntheticDefaultImports": true, "alwaysStrict": true, "esModuleInterop": true, - "incremental": false, + "tsBuildInfoFile": "./node_modules/.cache/tsbuild", "isolatedModules": true, "noEmit": true, "resolveJsonModule": true, From 69eb805b15f271cf42ee8432af7749fd304730f3 Mon Sep 17 00:00:00 2001 From: silverwind Date: Tue, 26 Nov 2024 23:17:11 +0100 Subject: [PATCH 05/13] move --- tsconfig.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tsconfig.json b/tsconfig.json index 3df9f4ffff3b1..4c09c081f76a7 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -15,7 +15,6 @@ "allowSyntheticDefaultImports": true, "alwaysStrict": true, "esModuleInterop": true, - "tsBuildInfoFile": "./node_modules/.cache/tsbuild", "isolatedModules": true, "noEmit": true, "resolveJsonModule": true, @@ -28,6 +27,7 @@ "noPropertyAccessFromIndexSignature": false, "exactOptionalPropertyTypes": false, "sourceMap": true, + "tsBuildInfoFile": "./node_modules/.cache/tsbuild", "types": [ "vitest/globals", "./web_src/js/globals.d.ts", From 914ece6adf9dcff0620f7dd6fa46598384f0c9bc Mon Sep 17 00:00:00 2001 From: silverwind Date: Tue, 26 Nov 2024 23:22:17 +0100 Subject: [PATCH 06/13] restore slice --- web_src/js/components/RepoRecentCommits.vue | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/web_src/js/components/RepoRecentCommits.vue b/web_src/js/components/RepoRecentCommits.vue index 4437597778793..10e1fdd70ce12 100644 --- a/web_src/js/components/RepoRecentCommits.vue +++ b/web_src/js/components/RepoRecentCommits.vue @@ -67,7 +67,7 @@ async function fetchGraphData() { const start = Object.values(dayDataObj)[0].week; const end = firstStartDateAfterDate(new Date()); const startDays = startDaysBetween(start, end); - data.value = fillEmptyStartDaysWithZeroes(startDays, dayDataObj); + data.value = fillEmptyStartDaysWithZeroes(startDays, dayDataObj).slice(-52); errorText.value = ''; } else { errorText.value = response.statusText; From 86603962687f71639a417ef2c88be42d64f4316c Mon Sep 17 00:00:00 2001 From: silverwind Date: Tue, 26 Nov 2024 23:57:25 +0100 Subject: [PATCH 07/13] Update web_src/js/components/RepoActionView.vue --- web_src/js/components/RepoActionView.vue | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/web_src/js/components/RepoActionView.vue b/web_src/js/components/RepoActionView.vue index 86142dcfd418d..297947aa52341 100644 --- a/web_src/js/components/RepoActionView.vue +++ b/web_src/js/components/RepoActionView.vue @@ -282,7 +282,7 @@ const sfc = { if (this.menuVisible) this.menuVisible = false; }, - toggleTimeDisplay(type: 'seconds' | 'stamp') { + toggleTimeDisplay(type: string) { this.timeVisible[`log-time-${type}`] = !this.timeVisible[`log-time-${type}`]; for (const el of this.$refs.steps.querySelectorAll(`.log-time-${type}`)) { toggleElem(el, this.timeVisible[`log-time-${type}`]); From 0cad145e0d5ef9d23131fbd5f59807f8bc7d9472 Mon Sep 17 00:00:00 2001 From: silverwind Date: Tue, 26 Nov 2024 23:59:03 +0100 Subject: [PATCH 08/13] fix default value --- web_src/js/components/RepoContributors.vue | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/web_src/js/components/RepoContributors.vue b/web_src/js/components/RepoContributors.vue index 23100ce844eae..9b1a2b2662608 100644 --- a/web_src/js/components/RepoContributors.vue +++ b/web_src/js/components/RepoContributors.vue @@ -72,7 +72,7 @@ export default { totalStats: {} as Record, sortedContributors: {} as Record, type: 'commits', - contributorsStats: [] as Record, + contributorsStats: {} as Record, xAxisStart: null, xAxisEnd: null, xAxisMin: null, From 9ea49dfe85d8386294764c73a878cca8eb5ec4da Mon Sep 17 00:00:00 2001 From: silverwind Date: Wed, 27 Nov 2024 00:00:15 +0100 Subject: [PATCH 09/13] Update web_src/js/components/RepoContributors.vue --- web_src/js/components/RepoContributors.vue | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/web_src/js/components/RepoContributors.vue b/web_src/js/components/RepoContributors.vue index 9b1a2b2662608..42ed6dde6de26 100644 --- a/web_src/js/components/RepoContributors.vue +++ b/web_src/js/components/RepoContributors.vue @@ -229,7 +229,7 @@ export default { } }, - getOptions(type: 'main' | 'contributor'): ChartOptions<'line'> { + getOptions(type: string): ChartOptions<'line'> { return { responsive: true, maintainAspectRatio: false, From fcc3fb4c89e7832b6283e4206d225cfc2c43b3db Mon Sep 17 00:00:00 2001 From: silverwind Date: Wed, 27 Nov 2024 05:17:25 +0100 Subject: [PATCH 10/13] Update templates/repo/commit_status.tmpl Co-authored-by: wxiaoguang --- templates/repo/commit_status.tmpl | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/templates/repo/commit_status.tmpl b/templates/repo/commit_status.tmpl index 2445cf12843da..6179e8deab3a7 100644 --- a/templates/repo/commit_status.tmpl +++ b/templates/repo/commit_status.tmpl @@ -1,4 +1,4 @@ - + {{if eq .State "pending"}} {{svg "octicon-dot-fill" 18 "commit-status icon text yellow"}} {{end}} From 39b45bc72a679067b3c5aae01533a093b2bd0616 Mon Sep 17 00:00:00 2001 From: silverwind Date: Wed, 27 Nov 2024 05:24:02 +0100 Subject: [PATCH 11/13] Update web_src/js/components/RepoContributors.vue --- web_src/js/components/RepoContributors.vue | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/web_src/js/components/RepoContributors.vue b/web_src/js/components/RepoContributors.vue index 42ed6dde6de26..9d4e3bb9b0870 100644 --- a/web_src/js/components/RepoContributors.vue +++ b/web_src/js/components/RepoContributors.vue @@ -215,7 +215,7 @@ export default { }; }, - updateOtherCharts({chart}: {chart: Chart}, reset?: boolean) { + updateOtherCharts({chart}: {chart: Chart}, reset?: boolean = false) { const minVal = chart.options.scales.x.min; const maxVal = chart.options.scales.x.max; if (reset) { From 417b0965f468963c9bb03a5b3999b3705e415735 Mon Sep 17 00:00:00 2001 From: silverwind Date: Wed, 27 Nov 2024 05:31:58 +0100 Subject: [PATCH 12/13] Update web_src/js/components/RepoContributors.vue --- web_src/js/components/RepoContributors.vue | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/web_src/js/components/RepoContributors.vue b/web_src/js/components/RepoContributors.vue index 9d4e3bb9b0870..97678b9a13b0d 100644 --- a/web_src/js/components/RepoContributors.vue +++ b/web_src/js/components/RepoContributors.vue @@ -242,7 +242,7 @@ export default { position: 'top', align: 'center', }, - // @ts-expect-error: bug in chartjs types + // @ts-expect-error: bug in chart.js types customEventListener: { chartType: type, instance: this, From 72e41e3bc4aace8661260182bbd88672a512eec5 Mon Sep 17 00:00:00 2001 From: silverwind Date: Sat, 7 Dec 2024 09:14:15 +0100 Subject: [PATCH 13/13] Update tsconfig.json --- tsconfig.json | 1 - 1 file changed, 1 deletion(-) diff --git a/tsconfig.json b/tsconfig.json index 4c09c081f76a7..744f1511e951c 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -27,7 +27,6 @@ "noPropertyAccessFromIndexSignature": false, "exactOptionalPropertyTypes": false, "sourceMap": true, - "tsBuildInfoFile": "./node_modules/.cache/tsbuild", "types": [ "vitest/globals", "./web_src/js/globals.d.ts",