61 lines
1.3 KiB
JavaScript
61 lines
1.3 KiB
JavaScript
import { q } from "./basic.js";
|
|
import { store } from "./store/store.js";
|
|
import * as lsm from "./lsm.js";
|
|
import { chat } from "./chat.js";
|
|
|
|
let sentIndex = 0;
|
|
|
|
const input = q("#c-chat-textarea");
|
|
|
|
store.activeRoom.subscribe("changeSelf", () => {
|
|
if (store.activeRoom.exists()) {
|
|
input.focus();
|
|
}
|
|
});
|
|
|
|
input.addEventListener("keydown", (event) => {
|
|
if (event.key === "Enter" && !event.shiftKey && !event.ctrlKey) {
|
|
event.preventDefault();
|
|
const body = input.value;
|
|
send(input.value);
|
|
input.value = "";
|
|
fixHeight();
|
|
}
|
|
});
|
|
|
|
input.addEventListener("input", () => {
|
|
fixHeight();
|
|
});
|
|
|
|
function fixHeight() {
|
|
input.style.height = "0px";
|
|
// console.log(input.clientHeight, input.scrollHeight)
|
|
input.style.height = input.scrollHeight + 1 + "px";
|
|
}
|
|
|
|
function getTxnId() {
|
|
return Date.now() + sentIndex++;
|
|
}
|
|
|
|
function send(body) {
|
|
if (!store.activeRoom.exists()) return;
|
|
const id = store.activeRoom.value().id;
|
|
return fetch(
|
|
`${lsm.get(
|
|
"domain"
|
|
)}/_matrix/client/r0/rooms/${id}/send/m.room.message/${getTxnId()}?access_token=${lsm.get(
|
|
"access_token"
|
|
)}`,
|
|
{
|
|
method: "PUT",
|
|
body: JSON.stringify({
|
|
msgtype: "m.text",
|
|
body,
|
|
}),
|
|
headers: {
|
|
"Content-Type": "application/json",
|
|
},
|
|
}
|
|
);
|
|
}
|