src/view/admin/components/dnd-script.lisp

DOWNLOAD
(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 (lisp (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)))))))))