auto-save: settings save on change via /style/field, noscript fallback button
This commit is contained in:
parent
86565b13ac
commit
b6b0e7b0fd
2 changed files with 50 additions and 4 deletions
|
|
@ -32,7 +32,7 @@ from .subscriptions import (
|
|||
handle_subscription_delete, handle_subscription_syncall,
|
||||
_sync_threads,
|
||||
)
|
||||
from .customize import handle_style_form, handle_style_submit, handle_style_template_submit, handle_about
|
||||
from .customize import handle_style_form, handle_style_submit, handle_style_template_submit, handle_field_save, handle_about
|
||||
from .tags import handle_tags, handle_tag_browse
|
||||
from .data import (
|
||||
handle_export, handle_import_form, handle_import_submit,
|
||||
|
|
@ -125,6 +125,8 @@ def _dispatch_inner(data):
|
|||
return handle_style_submit(body, gateway_host=gateway_host, scheme=scheme)
|
||||
elif path == "/style/template":
|
||||
return handle_style_template_submit(body, gateway_host=gateway_host, scheme=scheme)
|
||||
elif path == "/style/field":
|
||||
return handle_field_save(body)
|
||||
elif path == "/style/reset":
|
||||
set_setting("custom_template", "")
|
||||
return handle_style_form("Template reset to default.", gateway_host=gateway_host, scheme=scheme)
|
||||
|
|
|
|||
|
|
@ -1,7 +1,7 @@
|
|||
from db import get_db, return_db, get_setting, set_setting, get_site_name
|
||||
import templates as templates_mod
|
||||
from templates import esc, DEFAULT_TEMPLATE
|
||||
from ._helpers import _respond, _csrf_field, _get_bookmark_token
|
||||
from ._helpers import _respond, _json_response, _csrf_field, _get_bookmark_token
|
||||
from .subscriptions import _count_shared_pages
|
||||
|
||||
|
||||
|
|
@ -54,7 +54,7 @@ def handle_style_form(msg="", gateway_host="", scheme="http"):
|
|||
return _respond(
|
||||
f"<h1>customize</h1>"
|
||||
f"<h2>name your search engine</h2>"
|
||||
f'<form method="post" action="/style">'
|
||||
f'<form method="post" action="/style" id="settings">'
|
||||
f'{_csrf_field()}'
|
||||
f'<input name="site_name" value="{esc(name)}" placeholder="tinyweb" size="30"><br><br>'
|
||||
f"<h2>sharing</h2>"
|
||||
|
|
@ -127,8 +127,26 @@ def handle_style_form(msg="", gateway_host="", scheme="http"):
|
|||
f'<a href="/reindex">manage semantic index</a><br><br>'
|
||||
f"</div>"
|
||||
f"{forum_section}"
|
||||
f'<button type="submit">save settings</button>'
|
||||
f'<p id="settings-status" style="font-size:0.85rem;color:#888;min-height:1.2em"></p>'
|
||||
f'<noscript><button type="submit">save settings</button></noscript>'
|
||||
f"</form>"
|
||||
'<script>'
|
||||
'(function(){'
|
||||
"var f=document.getElementById('settings');"
|
||||
"var csrf=f.querySelector('input[name=_csrf]').value;"
|
||||
"var st=document.getElementById('settings-status');"
|
||||
"f.querySelectorAll('input:not([type=hidden]):not([type=submit]),select').forEach(function(el){"
|
||||
"el.addEventListener('change',function(){"
|
||||
"var key=el.name,val=el.type=='checkbox'?(el.checked?'1':'0'):el.value;"
|
||||
"st.textContent='saving...';"
|
||||
"fetch('/style/field',{method:'POST',headers:{'Content-Type':'application/x-www-form-urlencoded'},"
|
||||
"body:'_csrf='+encodeURIComponent(csrf)+'&key='+encodeURIComponent(key)+'&value='+encodeURIComponent(val)})"
|
||||
".then(function(r){return r.json()})"
|
||||
".then(function(d){st.textContent=d.status=='ok'?'saved \\u2713':d.message||'error';setTimeout(function(){st.textContent=''},3000)})"
|
||||
".catch(function(){st.textContent='save failed';setTimeout(function(){st.textContent=''},3000)});"
|
||||
"},false);});"
|
||||
'})();'
|
||||
'</script>'
|
||||
f"<h2>custom html</h2>"
|
||||
f"<p>Edit the full page template. Use <code>{esc('{{content}}')}</code> "
|
||||
f"where page content should appear.</p>"
|
||||
|
|
@ -223,6 +241,32 @@ def handle_style_template_submit(body, gateway_host="", scheme="http"):
|
|||
return handle_style_form("Template saved.", gateway_host=gateway_host, scheme=scheme)
|
||||
|
||||
|
||||
def handle_field_save(body):
|
||||
key = body.get("key", [""])[0].strip()
|
||||
value = body.get("value", [""])[0].strip()
|
||||
if not key:
|
||||
return _json_response({"status": "error", "message": "No key provided."}, 400)
|
||||
if key == "forum_enabled":
|
||||
from handlers import forum_plugin
|
||||
if value == "1" and forum_plugin is None:
|
||||
return _json_response({"status": "error", "message": "Forum plugin not installed."}, 400)
|
||||
if value == "1":
|
||||
forum_plugin.enable()
|
||||
try:
|
||||
forum_plugin.fdb.set_setting("forum_enabled", "1")
|
||||
except Exception:
|
||||
pass
|
||||
else:
|
||||
forum_plugin.disable()
|
||||
try:
|
||||
forum_plugin.fdb.set_setting("forum_enabled", "0")
|
||||
except Exception:
|
||||
pass
|
||||
templates_mod.FORUM_ENABLED = (value == "1")
|
||||
set_setting(key, value)
|
||||
return _json_response({"status": "ok", "message": ""})
|
||||
|
||||
|
||||
def handle_about():
|
||||
name = get_site_name()
|
||||
dest_hash = get_setting("dest_hash")
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue