diff options
| author | unwox <me@unwox.com> | 2025-09-09 16:44:10 +0600 |
|---|---|---|
| committer | unwox <me@unwox.com> | 2025-09-09 16:44:22 +0600 |
| commit | 85feff4a72bade2488c7927624aae3f5af4769dc (patch) | |
| tree | 08ed0e48054a0705fa0e70ca384340a7c046f327 | |
| parent | 49715f6df79b677481e4cb244a1ca835ee06028f (diff) | |
make it possible to reset file inputs
| -rw-r--r-- | forms.fnl | 88 |
1 files changed, 68 insertions, 20 deletions
@@ -132,6 +132,29 @@ (if help (HTML [:div {:class "form-help"} help]) "")]))}) (fn file-input [name label required? accept thumbnail-width help] + (local onchange-input-js + "const file = event.target.files[0]; + const containerEl = event.target.parentElement.parentElement; + if (file && file.name.toLowerCase().endsWith('.jpg')) { + const reader = new FileReader(); + reader.onload = function () { + const imgEl = containerEl.querySelector('.form-file-img') + imgEl.src = reader.result; + imgEl.classList.add('d-block'); + } + reader.readAsDataURL(event.target.files[0]); + } + containerEl.querySelector('.form-file-reset') + .classList.add('d-block');") + (local reset-button-js + "const parentEl = event.target.parentElement; + for (const inputEl of parentEl.querySelectorAll('input')) { + inputEl.value = '' + } + parentEl.parentElement.querySelector('.form-file-img') + .classList.remove('d-block'); + event.target.classList.remove('d-block');") + {:type "file" : name : label : required? : help :value-from-html (fn [value {: data : db}] @@ -139,7 +162,10 @@ (lib.handle-upload db value nil thumbnail-width) (not (lib.empty? value)) value - (. data (.. name "_previous")))) + (let [previous-value (. data (.. name "_previous"))] + (if (not (lib.empty? previous-value)) + previous-value + nil)))) :html (fn [value error] (local empty-value? (lib.empty? value)) @@ -148,16 +174,30 @@ (HTML [:div {:class "form-row"} [:div {:class "d-flex gap-1"} - (if (and value (lib.ends-with? value ".jpg")) - (HTML [:img {:class "form-file-img" :src (.. "/static/files/" value)}]) - "") + (HTML [:img (fn [] + {:class (.. "form-file-img" + (if (and value (lib.ends-with? value ".jpg")) + " d-block" + "")) + :src (if value + (.. "/static/files/" value "-thumbnail.jpg") + "")})]) [:div {} [:label {:class "form-label" :for name} label (if required? required-marker "")] [:input (fn [] {:type "file" :name name :id name :class "form-input" - :required required? :accept accept})]]] - (if (not empty-value?) - (HTML [:input {:type "hidden" :name (.. name "_previous") :value value}]) - "") + :onchange onchange-input-js + :required required? :accept accept})] + (if (not empty-value?) + (HTML [:input {:type "hidden" :name (.. name "_previous") + :value value}]) + "") + [:button + (fn [] + {:type "button" + :style "display: none" + :class (.. "form-file-reset" (if value " d-block" "")) + :onclick reset-button-js}) + [:NO-ESCAPE "× Сбросить"]]]] (if error (HTML [:div {:class "form-error"} error]) "") (if help (HTML [:div {:class "form-help"} help]) "")]))}) @@ -225,18 +265,22 @@ (fn form-insert-sql-statement [table-name form data extra-data] (var columns []) (var args []) + (var i 1) (each [_ group (ipairs form)] (each [_ field (ipairs group.fields)] - (local value (. data field.name)) - (when (not (lib.empty? value)) - (table.insert columns field.name) - (table.insert args value)))) + (table.insert columns field.name) + (tset args i (. data field.name)) + (set i (+ 1 i)))) (when extra-data (each [key value (pairs extra-data)] (table.insert columns key) - (table.insert args value))) + (tset args i value) + (set i (+ 1 i)))) + + ;; specify count of args so go knows how many there are args including nils + (tset args :n (- i 1)) (if (< 0 (# columns)) [(.. "INSERT INTO " table-name " (" (table.concat columns ", ") ") VALUES " @@ -247,25 +291,29 @@ (fn form-update-sql-statement [table-name form data extra-data where] (var columns []) (var args []) + (var i 1) (each [_ group (ipairs form)] (each [_ field (ipairs group.fields)] - (local value (. data field.name)) - (when (not (lib.empty? value)) - (table.insert columns field.name) - (table.insert args value)))) + (table.insert columns field.name) + (tset args i (. data field.name)) + (set i (+ 1 i)))) (when extra-data (each [key value (pairs extra-data)] (table.insert columns key) - (table.insert args value))) + (tset args i value) + (set i (+ 1 i)))) (var where-columns []) - (when where (each [key value (pairs where)] (table.insert where-columns key) - (table.insert args value))) + (tset args i value) + (set i (+ 1 i)))) + + ;; specify count of args so go knows how many there are args including nils + (tset args :n (- i 1)) (if (< 0 (# columns)) [(.. "UPDATE " table-name " SET " (table.concat columns " = ?, ") " = ? " |
