diff options
author | Giteabot <teabot@gitea.io> | 2023-10-05 18:37:59 +0800 |
---|---|---|
committer | GitHub <noreply@github.com> | 2023-10-05 10:37:59 +0000 |
commit | aaf35ee49c262ba4c1ce3e7fc0e3e6b7de84e35d (patch) | |
tree | 05256cd8058e13afb50a71067cfb539ac76028e5 /web_src/js | |
parent | a9d547f55b5e929e902e4d3d72d13d1f62f57741 (diff) | |
download | gitea-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.js | 45 |
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; - }); + } } |