src/view/admin/components/dnd-script.lisp
(in-package :murja.view.admin.components.dnd-script)
(eval-when (:compile-toplevel :load-toplevel :execute)
(named-readtables:in-readtable :murja.ps))
(defun editor-dnd-script ()
(ps
(defun set-hover (e)
(chain e (prevent-default))
(chain (@ e target class-list)
(add "draggingImages")))
(defun disable-hover (e)
(chain e (prevent-default))
(chain (@ e target class-list)
(remove "draggingImages")))
(defun-async send-file (e)
(let* ((form-data (new (FormData))))
(dolist (item (chain e data-transfer items))
(chain form-data
(append "file" (chain item (get-as-file)))))
(let ((response (await (fetch (murja.genurl:route->url-ps 'murja.routes.media-routes:post-pic)
(create
method "POST"
body form-data)))))
(if (= (@ response status) 200)
(let* ((result (chain (await (chain response (json)))))
(result-id (@ result id))
(editor (chain ace (edit "editor-post-content"))))
(chain editor
(insert (+ "<img src=\"/api/pictures/" result-id "\" />"))))
(alert (+ "Send failed, server responded " (@ response status) " - " (await (chain response (text)))))))))
(chain document
(add-event-listener "DOMContentLoaded"
(lambda (e)
(let ((editor (chain document
(query-selector "#editor-post-content"))))
(chain editor
(add-event-listener "dragenter" #'set-hover))
(chain editor
(add-event-listener "dragover" #'set-hover))
(chain editor
(add-event-listener "dragend" #'disable-hover))
(chain editor
(add-event-listener "dragleave" #'disable-hover))
(chain editor
(add-event-listener "drop" (lambda (e)
(chain e (prevent-default))
(send-file e)
(disable-hover e)
;; tähän se lähetyslogiikka
false)))))))))