diff --git a/app/javascript/controllers/form_controller.js b/app/javascript/controllers/form_controller.js index d291de2bb..af4d5148e 100644 --- a/app/javascript/controllers/form_controller.js +++ b/app/javascript/controllers/form_controller.js @@ -11,6 +11,31 @@ export default class extends Controller { this.cancelTarget?.click() } + pasteFiles(event) { + const editor = event.target.closest("house-md") + if (!editor) return + + const files = event.clipboardData?.files + if (!files?.length) return + + event.preventDefault() + + for (const file of files) { + const uploadEvent = new CustomEvent("house-md:before-upload", { + bubbles: true, + detail: { file }, + cancelable: true + }) + + if (editor.dispatchEvent(uploadEvent)) { + const upload = document.createElement("house-md-upload") + upload.file = file + upload.uploadsURL = editor.dataset.uploadsUrl + editor.appendChild(upload) + } + } + } + preventAttachment(event) { event.preventDefault() } diff --git a/app/views/comments/_new.html.erb b/app/views/comments/_new.html.erb index 87e50e99f..70428f946 100644 --- a/app/views/comments/_new.html.erb +++ b/app/views/comments/_new.html.erb @@ -2,7 +2,8 @@
<%= form_with model: Comment.new, url: bucket_bubble_comments_path(bubble.bucket, bubble), class: "flex flex-column gap full-width", - data: { controller: "form", action: "keydown.ctrl+enter->form#submit:prevent, keydown.meta+enter->form#submit:prevent, keydown.esc->form#cancel:stop" } do |form| %> + data: { controller: "form", + action: "keydown.ctrl+enter->form#submit:prevent keydown.meta+enter->form#submit:prevent keydown.esc->form#cancel:stop paste->form#pasteFiles" } do |form| %> <%= form.markdown_area :body, class: "input comment__input", required: true, placeholder: new_comment_placeholder(bubble) %> <%= form.button class: "comment__submit btn btn--reversed flex-item-justify-end txt-small" do %> <%= image_tag "check.svg", aria: { hidden: "true" }, size: 24 %>