{% from 'common/widgets.j2' import build_getter_js, build_setter_js %} {% for g in paramGroups %} settingsSubmit{{ g['group'] | title }}() { if (this.submitStatus.{{ g['group'] }}) { return } {% if g['group'] in dangerousParamGroups %} { if (!confirm("{{ dangerousParamGroups[g['group']] }}")) return } {% endif %} let query = { {% for p in g['params'] %} "{{ p['name'] }}": {{ build_getter_js(g['group'], p) }}, {% endfor %} } this.submitStatus.{{ g['group'] }} = true fetch('/api/set/{{ g["group"] }}', {method: 'POST', headers: {'Content-Type': 'application/json'}, body: JSON.stringify(query), credentials: 'same-origin' }) .then(async (resp) => { let vals = await resp.json(); if (vals['status'] !== 'ok') { throw new Error(vals['error'] ? vals['error'] : "Server returns undefined error") } this.update{{ g['group'] | title }}Settings(vals) }) .catch((reason) => { alert(`Ошибка при применении настроек: ${reason}`) }) .finally(() => { this.submitStatus.{{ g['group'] }} = false }) }, {% endfor %} {% for g in paramGroups %} update{{ g['group'] | title }}Settings(vals) { this.submitStatus.{{ g['group'] }} = false {% for p in g['params'] %} {{ build_setter_js(g['group'], p, "vals[\"settings\"][\"" ~ p['name'] ~ "\"]") }} {% endfor %} }, {% endfor %}