Support for status check pattern (#24633)
This PR is to allow users to specify status checks by patterns. Users can enter patterns in the "Status Check Pattern" `textarea` to match status checks and each line specifies a pattern. If "Status Check" is enabled, patterns cannot be empty and user must enter at least one pattern. Users will no longer be able to choose status checks from the table. But a __*`Matched`*__ mark will be added to the matched checks to help users enter patterns. Benefits: - Even if no status checks have been completed, users can specify necessary status checks in advance. - More flexible. Users can specify a series of status checks by one pattern. Before:  After:  --------- Co-authored-by: silverwind <me@silverwind.io>
This commit is contained in:
parent
9fb0945a09
commit
e7c2231dee
10 changed files with 268 additions and 79 deletions
|
@ -1,5 +1,7 @@
|
|||
import $ from 'jquery';
|
||||
import {minimatch} from 'minimatch';
|
||||
import {createMonaco} from './codeeditor.js';
|
||||
import {onInputDebounce, toggleElem} from '../utils/dom.js';
|
||||
|
||||
const {appSubUrl, csrfToken} = window.config;
|
||||
|
||||
|
@ -81,4 +83,26 @@ export function initRepoSettingBranches() {
|
|||
const $target = $($(this).attr('data-target'));
|
||||
if (this.checked) $target.addClass('disabled'); // only disable, do not auto enable
|
||||
});
|
||||
|
||||
// show the `Matched` mark for the status checks that match the pattern
|
||||
const markMatchedStatusChecks = () => {
|
||||
const patterns = (document.getElementById('status_check_contexts').value || '').split(/[\r\n]+/);
|
||||
const validPatterns = patterns.map((item) => item.trim()).filter(Boolean);
|
||||
const marks = document.getElementsByClassName('status-check-matched-mark');
|
||||
|
||||
for (const el of marks) {
|
||||
let matched = false;
|
||||
const statusCheck = el.getAttribute('data-status-check');
|
||||
for (const pattern of validPatterns) {
|
||||
if (minimatch(statusCheck, pattern)) {
|
||||
matched = true;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
toggleElem(el, matched);
|
||||
}
|
||||
};
|
||||
markMatchedStatusChecks();
|
||||
document.getElementById('status_check_contexts').addEventListener('input', onInputDebounce(markMatchedStatusChecks));
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue