From c2dad40513aaf47548b680e4b95cfcbc3cce5086 Mon Sep 17 00:00:00 2001 From: Daniel Diekmeier Date: Thu, 16 May 2024 18:49:17 +0200 Subject: [PATCH 1/2] Autosize the textarea --- .../controllers/auto_resize_controller.ts | 17 +++++++++++++++++ app/javascript/controllers/index.js | 3 +++ app/models/awesome_form.rb | 2 +- 3 files changed, 21 insertions(+), 1 deletion(-) create mode 100644 app/javascript/controllers/auto_resize_controller.ts diff --git a/app/javascript/controllers/auto_resize_controller.ts b/app/javascript/controllers/auto_resize_controller.ts new file mode 100644 index 00000000..8410f8a7 --- /dev/null +++ b/app/javascript/controllers/auto_resize_controller.ts @@ -0,0 +1,17 @@ +import { Controller } from '@hotwired/stimulus'; + +export default class extends Controller { + connect(): void { + this.#el.style.overflowY = 'hidden'; + this.update(); + } + + update(): void { + this.#el.style.height = 'auto'; + this.#el.style.height = this.#el.scrollHeight + 'px'; + } + + get #el(): HTMLInputElement { + return this.element as HTMLInputElement; + } +} diff --git a/app/javascript/controllers/index.js b/app/javascript/controllers/index.js index 183c3b28..00e35962 100644 --- a/app/javascript/controllers/index.js +++ b/app/javascript/controllers/index.js @@ -4,6 +4,9 @@ import { application } from "./application" +import AutoResizeController from "./auto_resize_controller.ts" +application.register("auto-resize", AutoResizeController) + import AutosubmittingController from "./autosubmitting_controller.ts" application.register("autosubmitting", AutosubmittingController) diff --git a/app/models/awesome_form.rb b/app/models/awesome_form.rb index 126d5e4a..be9f3f53 100644 --- a/app/models/awesome_form.rb +++ b/app/models/awesome_form.rb @@ -61,7 +61,7 @@ def render_input(method:, type:, collection:, id_method:, name_method:, options: when :string text_field method, options when :text - text_area method, options + text_area method, options.reverse_merge(data: {controller: "auto-resize", action: "input->auto-resize#update"}) when :password password_field method, options when :number From 723dd94d9b3c7cfa80ff6cc9b1fcd99da5f4b1d1 Mon Sep 17 00:00:00 2001 From: Daniel Diekmeier Date: Thu, 16 May 2024 18:49:23 +0200 Subject: [PATCH 2/2] Only allow vertical resizing --- app/assets/stylesheets/application/components/input.scss | 1 + 1 file changed, 1 insertion(+) diff --git a/app/assets/stylesheets/application/components/input.scss b/app/assets/stylesheets/application/components/input.scss index 7a761a8b..1dfff916 100644 --- a/app/assets/stylesheets/application/components/input.scss +++ b/app/assets/stylesheets/application/components/input.scss @@ -18,6 +18,7 @@ border-left: 1px solid var(--color-border); border-right: 1px solid var(--color-border); font-size: 16px; + resize: vertical; } } }