fix(actions): address workflow status badge review feedback (#38241)

Follow
https://github.com/go-gitea/gitea/pull/38196#discussion_r3487219492

---------

Co-authored-by: wxiaoguang <wxiaoguang@gmail.com>
Co-authored-by: bircni <bircni@icloud.com>
This commit is contained in:
Lunny Xiao
2026-06-28 03:53:01 -07:00
committed by GitHub
parent 1d43b736b5
commit 5b9251150c
7 changed files with 88 additions and 102 deletions

View File

@@ -5,8 +5,7 @@ test('updateWorkflowBadgeFields updates badge snippets for selected branch', ()
<div
data-badge-url="https://gitea.example.com/user1/repo1/actions/workflows/build/test%20workflow.yml/badge.svg?branch=main"
data-workflow-url="https://gitea.example.com/user1/repo1/actions?workflow=build%2Ftest+workflow.yml"
data-markdown-alt-text="CI \\[prod\\]\\\\build &quot;fast&quot; &lt;ok&gt;"
data-html-alt-text="CI [prod]\\build &quot;fast&quot; &lt;ok&gt;"
data-workflow-display-name="CI [prod]\\build &quot;fast&quot; &lt;ok&gt;"
>
<img data-workflow-badge-image src="">
<input id="workflow-badge-url" readonly>

View File

@@ -1,36 +1,35 @@
import {createApp} from 'vue';
import RepoActionView from '../components/RepoActionView.vue';
import {queryElems} from '../utils/dom.ts';
function escapeHTMLAttribute(value: string): string {
return value.replaceAll('&', '&amp;').replaceAll('"', '&quot;').replaceAll('<', '&lt;').replaceAll('>', '&gt;');
}
import {registerGlobalInitFunc} from '../modules/observer.ts';
import {html} from '../utils/html.ts';
export function updateWorkflowBadgeFields(form: HTMLElement, branch: string): void {
const badgeURL = new URL(form.getAttribute('data-badge-url')!);
badgeURL.searchParams.set('branch', branch);
const badgeURLParsed = new URL(form.getAttribute('data-badge-url')!);
badgeURLParsed.searchParams.set('branch', branch);
const badgeURLString = badgeURL.href;
const badgeURL = badgeURLParsed.href;
const workflowURL = form.getAttribute('data-workflow-url')!;
const markdownAltText = form.getAttribute('data-markdown-alt-text')!;
const htmlAltText = form.getAttribute('data-html-alt-text')!;
const displayName = form.getAttribute('data-workflow-display-name')!;
const markdownAltText = displayName.replaceAll(/[\\[\]]/g, (c) => `\\${c}`);
form.querySelector<HTMLImageElement>('[data-workflow-badge-image]')!.src = badgeURLString;
form.querySelector<HTMLInputElement>('#workflow-badge-url')!.value = badgeURLString;
form.querySelector<HTMLTextAreaElement>('#workflow-badge-markdown')!.value = `[![${markdownAltText}](${badgeURLString})](${workflowURL})`;
form.querySelector<HTMLTextAreaElement>('#workflow-badge-html')!.value = `<a href="${escapeHTMLAttribute(workflowURL)}"><img src="${escapeHTMLAttribute(badgeURLString)}" alt="${escapeHTMLAttribute(htmlAltText)}"></a>`;
form.querySelector<HTMLImageElement>('[data-workflow-badge-image]')!.src = badgeURL;
form.querySelector<HTMLInputElement>('#workflow-badge-url')!.value = badgeURL;
form.querySelector<HTMLTextAreaElement>('#workflow-badge-markdown')!.value = `[![${markdownAltText}](${badgeURL})](${workflowURL})`;
form.querySelector<HTMLTextAreaElement>('#workflow-badge-html')!.value = html`<a href="${workflowURL}"><img src="${badgeURL}" alt="${displayName}"></a>`;
}
function initWorkflowBadgeBranchSelection(): void {
queryElems(document, '[data-workflow-badge-form]', (form) => {
const branchInput = form.querySelector<HTMLInputElement>('[data-workflow-badge-branch]')!;
branchInput.addEventListener('change', () => updateWorkflowBadgeFields(form, branchInput.value));
});
function initWorkflowBadgeForm(form: HTMLElement): void {
const branchInput = form.querySelector<HTMLInputElement>('[data-workflow-badge-branch]')!;
branchInput.addEventListener('change', () => updateWorkflowBadgeFields(form, branchInput.value));
updateWorkflowBadgeFields(form, branchInput.value);
}
export function initRepositoryActionView() {
initWorkflowBadgeBranchSelection();
export function initRepositoryActions() {
registerGlobalInitFunc('initWorkflowBadgeForm', initWorkflowBadgeForm);
initRepositoryActionsView();
}
function initRepositoryActionsView() {
const el = document.querySelector('#repo-action-view');
if (!el) return;

View File

@@ -42,7 +42,7 @@ import {initCommonOrganization} from './features/common-organization.ts';
import {initRepoWikiForm} from './features/repo-wiki.ts';
import {initRepository, initBranchSelectorTabs} from './features/repo-legacy.ts';
import {initCaptcha} from './features/captcha.ts';
import {initRepositoryActionView} from './features/repo-actions.ts';
import {initRepositoryActions} from './features/repo-actions.ts';
import {initGlobalTooltips} from './modules/tippy.ts';
import {initGiteaFomantic} from './modules/fomantic.ts';
import {initRepoIssueList} from './features/repo-issue-list.ts';
@@ -138,7 +138,7 @@ const initPerformanceTracer = callInitFunctions([
initRepoViewFileTree,
initRepoWikiForm,
initRepository,
initRepositoryActionView,
initRepositoryActions,
initRepositorySearch,
initRepoContributors,
initRepoCodeFrequency,