From 80e072f8452ce9705788014012e9bb5ac45fc468 Mon Sep 17 00:00:00 2001 From: Andy Smith Date: Wed, 1 Oct 2025 16:56:55 -0500 Subject: [PATCH] Use controller to disable empty comment submit --- app/assets/stylesheets/lexxy.css | 6 ------ app/javascript/controllers/form_controller.js | 12 +++++++++++- app/views/cards/comments/_new.html.erb | 4 ++-- 3 files changed, 13 insertions(+), 9 deletions(-) diff --git a/app/assets/stylesheets/lexxy.css b/app/assets/stylesheets/lexxy.css index affd21fef..63f5f1f14 100644 --- a/app/assets/stylesheets/lexxy.css +++ b/app/assets/stylesheets/lexxy.css @@ -31,12 +31,6 @@ position: absolute; white-space: pre-line; } - - /* Disable the submit button when Lexical is empty */ - + .comment__submit { - opacity: 0.5; - pointer-events: none; - } } } diff --git a/app/javascript/controllers/form_controller.js b/app/javascript/controllers/form_controller.js index 4e59f6055..35aa64139 100644 --- a/app/javascript/controllers/form_controller.js +++ b/app/javascript/controllers/form_controller.js @@ -2,7 +2,7 @@ import { Controller } from "@hotwired/stimulus" import { debounce } from "helpers/timing_helpers"; export default class extends Controller { - static targets = [ "cancel" ] + static targets = [ "cancel", "submit" ] static values = { debounceTimeout: { type: Number, default: 300 } @@ -37,6 +37,16 @@ export default class extends Controller { event.preventDefault() } + disableEmptySubmit(event) { + var value = event.target.value.replace(/<\/?[^>]+(>|$)/g, "") + + if (value) { + this.submitTarget.removeAttribute("disabled") + } else { + this.submitTarget.setAttribute("disabled", true) + } + } + select(event) { event.target.select() } diff --git a/app/views/cards/comments/_new.html.erb b/app/views/cards/comments/_new.html.erb index 7931cd244..4a0452e0d 100644 --- a/app/views/cards/comments/_new.html.erb +++ b/app/views/cards/comments/_new.html.erb @@ -10,10 +10,10 @@ local_save_key_value: "comment-#{card.id}", action: "turbo:submit-end->local-save#submit keydown.ctrl+enter->form#submit:prevent keydown.meta+enter->form#submit:prevent keydown.esc->form#cancel:stop" } do |form| %> <%= form.rich_textarea :body, required: true, placeholder: new_comment_placeholder(card), - data: { local_save_target: "input", action: "lexxy:change->local-save#save turbo:morph-element->local-save#restoreContent" } do %> + data: { local_save_target: "input", action: "lexxy:change->form#disableEmptySubmit lexxy:change->local-save#save turbo:morph-element->local-save#restoreContent" } do %> <%= general_prompts(@card.collection) %> <% end %> - <%= form.button class: "comment__submit btn btn--reversed flex-item-justify-start" do %> + <%= form.button class: "comment__submit btn btn--reversed flex-item-justify-start", data: { form_target: "submit" }, disabled: true do %> Post this comment <% end %>