diff --git a/web_src/js/features/comp/TextExpander.js b/web_src/js/features/comp/TextExpander.js index 4d345c24d1..86942296fa 100644 --- a/web_src/js/features/comp/TextExpander.js +++ b/web_src/js/features/comp/TextExpander.js @@ -1,10 +1,9 @@ import {matchEmoji, matchMention, matchIssue} from '../../utils/match.js'; import {emojiString} from '../emoji.js'; -import {getIssueIcon, getIssueColor,isIssueSuggestionsLoaded, fetchIssueSuggestions} from '../issue.js' -import {svg} from '../../svg.js' +import {getIssueIcon, getIssueColor, isIssueSuggestionsLoaded, fetchIssueSuggestions} from '../issue.js'; +import {svg} from '../../svg.js'; import {createElementFromHTML} from '../../utils/dom.js'; -import { GET } from '../../modules/fetch.js'; -import {parseIssueHref} from '../../utils.js' +import {parseIssueHref} from '../../utils.js'; async function issueSuggestions(text) { const key = '#'; @@ -19,7 +18,7 @@ async function issueSuggestions(text) { const li = document.createElement('li'); li.setAttribute('role', 'option'); li.setAttribute('data-value', `${key}${issue.number}`); - li.classList.add('tw-flex', 'tw-gap-2') + li.classList.add('tw-flex', 'tw-gap-2'); const icon = svg(getIssueIcon(issue), 16, ['text', getIssueColor(issue)].join(' ')); li.append(createElementFromHTML(icon)); @@ -41,8 +40,6 @@ async function issueSuggestions(text) { export function initTextExpander(expander) { if (!expander) return; - const textarea = expander.querySelector('textarea'); - expander?.addEventListener('text-expander-change', ({detail: {key, provide, text}}) => { if (key === ':') { const matches = matchEmoji(text); diff --git a/web_src/js/features/issue.js b/web_src/js/features/issue.js index 5eba97dc3c..3997a56e0a 100644 --- a/web_src/js/features/issue.js +++ b/web_src/js/features/issue.js @@ -1,23 +1,23 @@ -import { GET } from '../modules/fetch.js'; -import {parseIssueHref, parseRepoOwnerPathInfo} from '../utils.js' +import {GET} from '../modules/fetch.js'; +import {parseIssueHref, parseRepoOwnerPathInfo} from '../utils.js'; export function getIssueIcon(issue) { - if (issue.pull_request) { - if (issue.state === 'open') { - if (issue.pull_request.draft === true) { - return 'octicon-git-pull-request-draft'; // WIP PR - } - return 'octicon-git-pull-request'; // Open PR - } else if (issue.pull_request.merged === true) { - return 'octicon-git-merge'; // Merged PR + if (issue.pull_request) { + if (issue.state === 'open') { + if (issue.pull_request.draft === true) { + return 'octicon-git-pull-request-draft'; // WIP PR } - return 'octicon-git-pull-request'; // Closed PR - } else if (issue.state === 'open') { - return 'octicon-issue-opened'; // Open Issue + return 'octicon-git-pull-request'; // Open PR + } else if (issue.pull_request.merged === true) { + return 'octicon-git-merge'; // Merged PR } - return 'octicon-issue-closed'; // Closed Issue + return 'octicon-git-pull-request'; // Closed PR + } else if (issue.state === 'open') { + return 'octicon-issue-opened'; // Open Issue } - + return 'octicon-issue-closed'; // Closed Issue +} + export function getIssueColor(issue) { if (issue.pull_request) { if (issue.pull_request.draft === true) { @@ -33,7 +33,7 @@ export function getIssueColor(issue) { } export function isIssueSuggestionsLoaded() { - return !!window.config.issueValues + return Boolean(window.config.issueValues); } export async function fetchIssueSuggestions() { @@ -51,4 +51,4 @@ export async function fetchIssueSuggestions() { const res = await GET(`${window.config.appSubUrl}/${issuePathInfo.ownerName}/${issuePathInfo.repoName}/issues/suggestions`); const issues = await res.json(); window.config.issueValues = issues; -} \ No newline at end of file +} diff --git a/web_src/js/utils/match.js b/web_src/js/utils/match.js index 724bfd3367..f7e781b76f 100644 --- a/web_src/js/utils/match.js +++ b/web_src/js/utils/match.js @@ -1,6 +1,4 @@ import emojis from '../../../assets/emoji.json'; -import {GET} from '../modules/fetch.js'; - const maxMatches = 6; @@ -46,12 +44,12 @@ export function matchMention(queryText) { export function matchIssue(queryText, currentIssue = null) { const issues = (window.config.issueValues ?? []).filter( - issue => issue.number !== currentIssue + (issue) => issue.number !== currentIssue, ); const query = queryText.toLowerCase().trim(); if (!query) { - return [...issues] + return Array.from(issues) .sort((a, b) => b.number - a.number) .slice(0, maxMatches); } @@ -61,8 +59,8 @@ export function matchIssue(queryText, currentIssue = null) { if (isDigital) { // Find issues/prs with number starting with the query (prefix), sorted by number ascending - const prefixMatches = issues.filter(issue => - String(issue.number).startsWith(query) + const prefixMatches = issues.filter((issue) => + String(issue.number).startsWith(query), ).sort((a, b) => a.number - b.number); results.push(...prefixMatches); @@ -71,8 +69,8 @@ export function matchIssue(queryText, currentIssue = null) { if (!isDigital || results.length < maxMatches) { // Fallback: find by title match, sorted by number descending const titleMatches = issues - .filter(issue => - issue.title.toLowerCase().includes(query) + .filter((issue) => + issue.title.toLowerCase().includes(query), ) .sort((a, b) => b.number - a.number); diff --git a/web_src/js/utils/match.test.js b/web_src/js/utils/match.test.js index aa918e89f4..70e7c8de1c 100644 --- a/web_src/js/utils/match.test.js +++ b/web_src/js/utils/match.test.js @@ -65,5 +65,5 @@ test('matchIssue', () => { window.config.issueValues[2], window.config.issueValues[7], window.config.issueValues[9], - ]); -}); \ No newline at end of file + ]); +}); diff --git a/web_src/js/vitest.setup.js b/web_src/js/vitest.setup.js index 83c632dd40..33611bc97a 100644 --- a/web_src/js/vitest.setup.js +++ b/web_src/js/vitest.setup.js @@ -16,15 +16,15 @@ window.config = { {key: 'org7 User 7', value: 'org7', name: 'org7', fullname: 'User 7', avatar: 'https://avatar7.com'}, ], issueValues: [ - {number: 10, title:'Issue'}, - {number: 9, title:'Foo issue'}, - {number: 8, title:'Foo issue'}, - {number: 7, title:'Merged PR'}, - {number: 6, title:'Closed PR'}, - {number: 5, title:'PR'}, - {number: 4, title:'WIP: PR'}, - {number: 3, title:'Closed issue'}, - {number: 2, title:'PR'}, - {number: 1, title:'Issue'}, - ] + {number: 10, title: 'Issue'}, + {number: 9, title: 'Foo issue'}, + {number: 8, title: 'Foo issue'}, + {number: 7, title: 'Merged PR'}, + {number: 6, title: 'Closed PR'}, + {number: 5, title: 'PR'}, + {number: 4, title: 'WIP: PR'}, + {number: 3, title: 'Closed issue'}, + {number: 2, title: 'PR'}, + {number: 1, title: 'Issue'}, + ], };