From 1db65cf57d580231173c29663ab04f12faed76c8 Mon Sep 17 00:00:00 2001
From: Kerwin Bryant <kerwin612@qq.com>
Date: Sat, 29 Mar 2025 11:01:31 +0000
Subject: [PATCH 1/3] Add a toggleClass function in dom.ts

---
 web_src/js/features/repo-settings.ts | 18 +++++-------------
 web_src/js/utils/dom.ts              | 24 +++++++++++++++---------
 2 files changed, 20 insertions(+), 22 deletions(-)

diff --git a/web_src/js/features/repo-settings.ts b/web_src/js/features/repo-settings.ts
index 80f897069eb1e..27dc4e9bfe81b 100644
--- a/web_src/js/features/repo-settings.ts
+++ b/web_src/js/features/repo-settings.ts
@@ -1,6 +1,6 @@
 import {minimatch} from 'minimatch';
 import {createMonaco} from './codeeditor.ts';
-import {onInputDebounce, queryElems, toggleElem} from '../utils/dom.ts';
+import {onInputDebounce, queryElems, toggleClass, toggleElem} from '../utils/dom.ts';
 import {POST} from '../modules/fetch.ts';
 import {initAvatarUploaderWithCropper} from './comp/Cropper.ts';
 import {initRepoSettingsBranchesDrag} from './repo-settings-branches.ts';
@@ -125,22 +125,14 @@ function initRepoSettingsOptions() {
   const pageContent = document.querySelector('.page-content.repository.settings.options');
   if (!pageContent) return;
 
-  const toggleClass = (elems: NodeListOf<Element>, className: string, value: boolean) => {
-    for (const el of elems) el.classList.toggle(className, value);
-  };
-
   // Enable or select internal/external wiki system and issue tracker.
   queryElems<HTMLInputElement>(pageContent, '.enable-system', (el) => el.addEventListener('change', () => {
-    const elTargets = document.querySelectorAll(el.getAttribute('data-target'));
-    const elContexts = document.querySelectorAll(el.getAttribute('data-context'));
-    toggleClass(elTargets, 'disabled', !el.checked);
-    toggleClass(elContexts, 'disabled', el.checked);
+    toggleClass(el.getAttribute('data-target'), 'disabled', !el.checked);
+    toggleClass(el.getAttribute('data-context'), 'disabled', el.checked);
   }));
   queryElems<HTMLInputElement>(pageContent, '.enable-system-radio', (el) => el.addEventListener('change', () => {
-    const elTargets = document.querySelectorAll(el.getAttribute('data-target'));
-    const elContexts = document.querySelectorAll(el.getAttribute('data-context'));
-    toggleClass(elTargets, 'disabled', el.value === 'false');
-    toggleClass(elContexts, 'disabled', el.value === 'true');
+    toggleClass(el.getAttribute('data-target'), 'disabled', el.value === 'false');
+    toggleClass(el.getAttribute('data-context'), 'disabled', el.value === 'true');
   }));
 
   queryElems<HTMLInputElement>(pageContent, '.js-tracker-issue-style', (el) => el.addEventListener('change', () => {
diff --git a/web_src/js/utils/dom.ts b/web_src/js/utils/dom.ts
index 4d15784e6ed2a..db51b1b349317 100644
--- a/web_src/js/utils/dom.ts
+++ b/web_src/js/utils/dom.ts
@@ -25,20 +25,26 @@ function elementsCall(el: ElementArg, func: ElementsCallbackWithArgs, ...args: a
   }
 }
 
+export function toggleClass(el: ElementArg, className: string, force?: boolean) {
+  elementsCall(el, (e: Element) => {
+    if (force === true) {
+      e.classList.add(className);
+    } else if (force === false) {
+      e.classList.remove(className);
+    } else if (force === undefined) {
+      e.classList.toggle(className);
+    } else {
+      throw new Error('invalid force argument');
+    }
+  });
+}
+
 /**
  * @param el Element
  * @param force force=true to show or force=false to hide, undefined to toggle
  */
 function toggleShown(el: Element, force: boolean) {
-  if (force === true) {
-    el.classList.remove('tw-hidden');
-  } else if (force === false) {
-    el.classList.add('tw-hidden');
-  } else if (force === undefined) {
-    el.classList.toggle('tw-hidden');
-  } else {
-    throw new Error('invalid force argument');
-  }
+  toggleClass(el, 'tw-hidden', !force);
 }
 
 export function showElem(el: ElementArg) {

From 2d9e8acb03c2f7854f83dac63041762f368be445 Mon Sep 17 00:00:00 2001
From: Kerwin Bryant <kerwin612@qq.com>
Date: Sat, 29 Mar 2025 13:48:48 +0000
Subject: [PATCH 2/3] fix

---
 web_src/js/utils/dom.ts | 12 ++++--------
 1 file changed, 4 insertions(+), 8 deletions(-)

diff --git a/web_src/js/utils/dom.ts b/web_src/js/utils/dom.ts
index db51b1b349317..c03dd0ae7693e 100644
--- a/web_src/js/utils/dom.ts
+++ b/web_src/js/utils/dom.ts
@@ -40,23 +40,19 @@ export function toggleClass(el: ElementArg, className: string, force?: boolean)
 }
 
 /**
- * @param el Element
+ * @param el ElementArg
  * @param force force=true to show or force=false to hide, undefined to toggle
  */
-function toggleShown(el: Element, force: boolean) {
+export function toggleElem(el: ElementArg, force: boolean) {
   toggleClass(el, 'tw-hidden', !force);
 }
 
 export function showElem(el: ElementArg) {
-  elementsCall(el, toggleShown, true);
+  toggleElem(el, true);
 }
 
 export function hideElem(el: ElementArg) {
-  elementsCall(el, toggleShown, false);
-}
-
-export function toggleElem(el: ElementArg, force?: boolean) {
-  elementsCall(el, toggleShown, force);
+  toggleElem(el, false);
 }
 
 export function isElemHidden(el: ElementArg) {

From ef2096e123d881f23ce7946adc92a42f96506290 Mon Sep 17 00:00:00 2001
From: Kerwin Bryant <kerwin612@qq.com>
Date: Sat, 29 Mar 2025 14:01:23 +0000
Subject: [PATCH 3/3] fix

---
 web_src/js/utils/dom.ts | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/web_src/js/utils/dom.ts b/web_src/js/utils/dom.ts
index c03dd0ae7693e..6d38ffa8cd2f2 100644
--- a/web_src/js/utils/dom.ts
+++ b/web_src/js/utils/dom.ts
@@ -43,7 +43,7 @@ export function toggleClass(el: ElementArg, className: string, force?: boolean)
  * @param el ElementArg
  * @param force force=true to show or force=false to hide, undefined to toggle
  */
-export function toggleElem(el: ElementArg, force: boolean) {
+export function toggleElem(el: ElementArg, force?: boolean) {
   toggleClass(el, 'tw-hidden', !force);
 }