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"))))