Skip to content

Commit 2a9c5c9

Browse files
Add toggleClass function in dom.ts (#34063)
This PR adds a toggleClass function in dom.ts, aiming to implement DOM class toggling functionality. --------- Co-authored-by: wxiaoguang <[email protected]>
1 parent b59705f commit 2a9c5c9

File tree

2 files changed

+24
-30
lines changed

2 files changed

+24
-30
lines changed

web_src/js/features/repo-settings.ts

+5-13
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
import {minimatch} from 'minimatch';
22
import {createMonaco} from './codeeditor.ts';
3-
import {onInputDebounce, queryElems, toggleElem} from '../utils/dom.ts';
3+
import {onInputDebounce, queryElems, toggleClass, toggleElem} from '../utils/dom.ts';
44
import {POST} from '../modules/fetch.ts';
55
import {initAvatarUploaderWithCropper} from './comp/Cropper.ts';
66
import {initRepoSettingsBranchesDrag} from './repo-settings-branches.ts';
@@ -125,22 +125,14 @@ function initRepoSettingsOptions() {
125125
const pageContent = document.querySelector('.page-content.repository.settings.options');
126126
if (!pageContent) return;
127127

128-
const toggleClass = (elems: NodeListOf<Element>, className: string, value: boolean) => {
129-
for (const el of elems) el.classList.toggle(className, value);
130-
};
131-
132128
// Enable or select internal/external wiki system and issue tracker.
133129
queryElems<HTMLInputElement>(pageContent, '.enable-system', (el) => el.addEventListener('change', () => {
134-
const elTargets = document.querySelectorAll(el.getAttribute('data-target'));
135-
const elContexts = document.querySelectorAll(el.getAttribute('data-context'));
136-
toggleClass(elTargets, 'disabled', !el.checked);
137-
toggleClass(elContexts, 'disabled', el.checked);
130+
toggleClass(el.getAttribute('data-target'), 'disabled', !el.checked);
131+
toggleClass(el.getAttribute('data-context'), 'disabled', el.checked);
138132
}));
139133
queryElems<HTMLInputElement>(pageContent, '.enable-system-radio', (el) => el.addEventListener('change', () => {
140-
const elTargets = document.querySelectorAll(el.getAttribute('data-target'));
141-
const elContexts = document.querySelectorAll(el.getAttribute('data-context'));
142-
toggleClass(elTargets, 'disabled', el.value === 'false');
143-
toggleClass(elContexts, 'disabled', el.value === 'true');
134+
toggleClass(el.getAttribute('data-target'), 'disabled', el.value === 'false');
135+
toggleClass(el.getAttribute('data-context'), 'disabled', el.value === 'true');
144136
}));
145137

146138
queryElems<HTMLInputElement>(pageContent, '.js-tracker-issue-style', (el) => el.addEventListener('change', () => {

web_src/js/utils/dom.ts

+19-17
Original file line numberDiff line numberDiff line change
@@ -25,32 +25,34 @@ function elementsCall(el: ElementArg, func: ElementsCallbackWithArgs, ...args: a
2525
}
2626
}
2727

28+
export function toggleClass(el: ElementArg, className: string, force?: boolean) {
29+
elementsCall(el, (e: Element) => {
30+
if (force === true) {
31+
e.classList.add(className);
32+
} else if (force === false) {
33+
e.classList.remove(className);
34+
} else if (force === undefined) {
35+
e.classList.toggle(className);
36+
} else {
37+
throw new Error('invalid force argument');
38+
}
39+
});
40+
}
41+
2842
/**
29-
* @param el Element
43+
* @param el ElementArg
3044
* @param force force=true to show or force=false to hide, undefined to toggle
3145
*/
32-
function toggleShown(el: Element, force: boolean) {
33-
if (force === true) {
34-
el.classList.remove('tw-hidden');
35-
} else if (force === false) {
36-
el.classList.add('tw-hidden');
37-
} else if (force === undefined) {
38-
el.classList.toggle('tw-hidden');
39-
} else {
40-
throw new Error('invalid force argument');
41-
}
46+
export function toggleElem(el: ElementArg, force?: boolean) {
47+
toggleClass(el, 'tw-hidden', !force);
4248
}
4349

4450
export function showElem(el: ElementArg) {
45-
elementsCall(el, toggleShown, true);
51+
toggleElem(el, true);
4652
}
4753

4854
export function hideElem(el: ElementArg) {
49-
elementsCall(el, toggleShown, false);
50-
}
51-
52-
export function toggleElem(el: ElementArg, force?: boolean) {
53-
elementsCall(el, toggleShown, force);
55+
toggleElem(el, false);
5456
}
5557

5658
export function isElemHidden(el: ElementArg) {

0 commit comments

Comments
 (0)