summaryrefslogtreecommitdiffstats
path: root/web_src/js
diff options
context:
space:
mode:
authorGiteabot <teabot@gitea.io>2023-10-05 18:37:59 +0800
committerGitHub <noreply@github.com>2023-10-05 10:37:59 +0000
commitaaf35ee49c262ba4c1ce3e7fc0e3e6b7de84e35d (patch)
tree05256cd8058e13afb50a71067cfb539ac76028e5 /web_src/js
parenta9d547f55b5e929e902e4d3d72d13d1f62f57741 (diff)
downloadgitea-aaf35ee49c262ba4c1ce3e7fc0e3e6b7de84e35d.tar.gz
gitea-aaf35ee49c262ba4c1ce3e7fc0e3e6b7de84e35d.zip
Refactor system setting (#27000) (#27452)
Backport #27000 by @wxiaoguang This PR reduces the complexity of the system setting system. It only needs one line to introduce a new option, and the option can be used anywhere out-of-box. It is still high-performant (and more performant) because the config values are cached in the config system. ![image](https://github.com/go-gitea/gitea/assets/2114189/f8cdd743-1145-41ab-9f8f-3996aa97d440) Co-authored-by: wxiaoguang <wxiaoguang@gmail.com>
Diffstat (limited to 'web_src/js')
-rw-r--r--web_src/js/features/admin/config.js45
1 files changed, 16 insertions, 29 deletions
diff --git a/web_src/js/features/admin/config.js b/web_src/js/features/admin/config.js
index f5d8fae8fa..c3823425ad 100644
--- a/web_src/js/features/admin/config.js
+++ b/web_src/js/features/admin/config.js
@@ -1,37 +1,24 @@
-import $ from 'jquery';
import {showTemporaryTooltip} from '../../modules/tippy.js';
+import {POST} from '../../modules/fetch.js';
-const {appSubUrl, csrfToken, pageData} = window.config;
+const {appSubUrl} = window.config;
export function initAdminConfigs() {
- const isAdminConfigPage = pageData?.adminConfigPage;
- if (!isAdminConfigPage) return;
+ const elAdminConfig = document.querySelector('.page-content.admin.config');
+ if (!elAdminConfig) return;
- $("input[type='checkbox']").on('change', (e) => {
- const $this = $(e.currentTarget);
- $.ajax({
- url: `${appSubUrl}/admin/config`,
- type: 'POST',
- data: {
- _csrf: csrfToken,
- key: $this.attr('name'),
- value: $this.is(':checked'),
- version: $this.attr('version'),
- }
- }).done((resp) => {
- if (resp) {
- if (resp.redirect) {
- window.location.href = resp.redirect;
- } else if (resp.version) {
- $this.attr('version', resp.version);
- } else if (resp.err) {
- showTemporaryTooltip(e.currentTarget, resp.err);
- $this.prop('checked', !$this.is(':checked'));
- }
+ for (const el of elAdminConfig.querySelectorAll('input[type="checkbox"][data-config-dyn-key]')) {
+ el.addEventListener('change', async () => {
+ try {
+ const resp = await POST(`${appSubUrl}/admin/config`, {
+ data: new URLSearchParams({key: el.getAttribute('data-config-dyn-key'), value: el.checked}),
+ });
+ const json = await resp.json();
+ if (json.errorMessage) throw new Error(json.errorMessage);
+ } catch (ex) {
+ showTemporaryTooltip(el, ex.toString());
+ el.checked = !el.checked;
}
});
-
- e.preventDefault();
- return false;
- });
+ }
}