leibowitz
Experimental Common Lisp object storage abstraction for Unix file systems
leibowitz/web/static/fluff.js
Download raw file: web/static/fluff.js
/* fluff.js — nonessential quality-of-life enhancements * * NOTES * ===== * * https://news.ycombinator.com/hn.js * * Some bad advice, some good https://phuoc.ng/collection/html-dom/ * * Discussion: https://news.ycombinator.com/item?id=38162435 * * How to no jquery https://youmightnotneedjquery.com/ * * How to vanilla js https://javascript.info/ */ /*********************************************************************** * Helper Functions */ function $(id) { return document.getElementById(id); } function replace_page_with(text) { console.log("DBG: replace_page_with TEXT of type " + typeof(text)); document.open(); document.write(text); document.close(); } /*********************************************************************** * AJAX Form Submissions */ function update_sidebar_or_error(req) { if (req.readyState === XMLHttpRequest.DONE) { if (req.status !== 200) /* Hopefully the backend sent an error page, * FIXME: add some frontend error handling * just in case it didn't */ replace_page_with(req.responseText); else $("sidebar").innerHTML = req.responseText; } } function submit_tag_editor_asynchronously() { const tag_data = $("tag-editor-textarea").value; const req = new XMLHttpRequest(); /* Register a response handler */ req.onreadystatechange = () => { update_sidebar_or_error(req); }; req.open("POST", window.location, true); req.setRequestHeader("Content-type", "application/x-www-form-urlencoded"); /* Specifying ajax=t tells the endpoint handler to return a * snippet of HTML for the sidebar rather than redirecting */ req.send(`tags=${encodeURIComponent(tag_data)}&ajax=t`); } if ($("tag-editor-submit")) { /* Suppress default submit button behavior */ $("tag-editor-submit").setAttribute("type", "button"); /* Handle press of the submit button asynchronously */ $("tag-editor-submit").addEventListener("click", (e) => { submit_tag_editor_asynchronously(); }); } if ($("tag-editor-textarea")) { /* Handle S-RET; FIXME: avoid inserting a newline */ $("tag-editor-textarea").addEventListener("keydown", (e) => { if (e.shiftKey && e.keyCode == 13) submit_tag_editor_asynchronously(); }); }