diff options
author | David Gay <david@davidgay.org> | 2021-05-19 22:53:38 -0400 |
---|---|---|
committer | David Gay <david@davidgay.org> | 2021-05-19 22:53:38 -0400 |
commit | 9415011b5fd192f1bafeaa9b6eacbb7921382a00 (patch) | |
tree | f25d9d633237cae5d7b73166e6612a9b53312714 /app/javascript/controllers | |
parent | da678b22b5db05554b44234b341fabc9d83ff700 (diff) |
Chat
Diffstat (limited to 'app/javascript/controllers')
-rw-r--r-- | app/javascript/controllers/chat_controller.js | 42 |
1 files changed, 42 insertions, 0 deletions
diff --git a/app/javascript/controllers/chat_controller.js b/app/javascript/controllers/chat_controller.js new file mode 100644 index 0000000..d9cf1cb --- /dev/null +++ b/app/javascript/controllers/chat_controller.js @@ -0,0 +1,42 @@ +import { Controller } from "stimulus"; + +export default class extends Controller { + static targets = [ "message", "output" ]; + + connect() { + this.load(); + } + + send() { + let vm = this; + // TODO: Temporary hack. Should just run this after default event. + setTimeout(function() { + vm.messageTarget.value = ""; + vm.smoothScrollToBottom(); + }, 100); + } + + load() { + this.scrollToBottom(); + if (this.outputTarget.innerHTML.trim() === "") { + fetch("/chat_messages") + .then(response => response.text()) + .then(html => { + this.outputTarget.innerHTML = html; + this.scrollToBottom(); + }); + } + } + + scrollToBottom() { + this.outputTarget.scrollTop = this.outputTarget.scrollHeight; + } + + smoothScrollToBottom() { + this.outputTarget.scrollTo({ + top: this.outputTarget.scrollHeight, + left: 0, + behavior: 'smooth' + }); + } +} |