diff of 7b19b9549ac5ed23732652cab648fb6b4e1a04f6
7b19b9549ac5ed23732652cab648fb6b4e1a04f6
diff --git a/aggressive-murja.asd b/aggressive-murja.asd
index 814bad9..ff4bc27 100644
--- a/aggressive-murja.asd
+++ b/aggressive-murja.asd
@@ -87,6 +87,7 @@
:components ((:module "components"
:components ((:file "tag-script")
(:file "previouslies-script")
+ (:file "dnd-script")
(:file "editor")))
(:file "post-list")
(:file "new-post")))
diff --git a/resources/css/murja.css b/resources/css/murja.css
index 55881c9..99de617 100644
--- a/resources/css/murja.css
+++ b/resources/css/murja.css
@@ -461,6 +461,10 @@ input:required {
margin: 5px;
}
+.draggingImages {
+ background-color: #880088;
+}
+
@media only screen and (max-device-width:480px)
{
body {
diff --git a/src/view/admin/components/dnd-script.lisp b/src/view/admin/components/dnd-script.lisp
new file mode 100644
index 0000000..f0e1602
--- /dev/null
+++ b/src/view/admin/components/dnd-script.lisp
@@ -0,0 +1,66 @@
+(defpackage murja.view.admin.components.dnd-script
+ (:use :cl :binding-arrows :parenscript :paren-async)
+ (:export :editor-dnd-script)
+ (:documentation "Parenscript logic for making picture drag and drop work"))
+
+(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 "/api/pictures"
+ (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)))))))))
diff --git a/src/view/admin/components/editor.lisp b/src/view/admin/components/editor.lisp
index 1e86be6..f679225 100644
--- a/src/view/admin/components/editor.lisp
+++ b/src/view/admin/components/editor.lisp
@@ -1,5 +1,5 @@
(defpackage murja.view.admin.components.editor
- (:use :cl :binding-arrows :spinneret :parenscript)
+ (:use :cl :binding-arrows :spinneret :parenscript :murja.view.admin.components.dnd-script)
(:export :editor)
(:import-from :murja.view.admin.components.tag-script :tags-component-frontend)
(:import-from :murja.view.admin.components.previouslies-script :previouslies-component-frontend)
@@ -76,6 +76,7 @@
(defun editor (post)
(with-html
(:script (:raw (editor-script post)))
+ (:script (:raw (editor-dnd-script)))
(header post)
(:div
(:div :id "editor-post-content"))))