SendLargeMessages now uses patching instead of observing

This commit is contained in:
Mirco Wittrien 2018-12-27 08:57:16 +01:00
parent 5d8dc7fd4e
commit b42e0b8751
1 changed files with 52 additions and 49 deletions

View File

@ -4,6 +4,10 @@ class SendLargeMessages {
initConstructor () { initConstructor () {
this.labels = {}; this.labels = {};
this.patchModules = {
"ChannelTextArea":"componentDidMount"
};
this.messageDelay = 1000; //changing at own risk, might result in bans or mutes this.messageDelay = 1000; //changing at own risk, might result in bans or mutes
this.css = ` this.css = `
@ -63,7 +67,7 @@ class SendLargeMessages {
getDescription () {return "Opens a popout when your message is too large, which allows you to automatically send the message in several smaller messages.";} getDescription () {return "Opens a popout when your message is too large, which allows you to automatically send the message in several smaller messages.";}
getVersion () {return "1.4.9";} getVersion () {return "1.5.0";}
getAuthor () {return "DevilBro";} getAuthor () {return "DevilBro";}
@ -91,7 +95,7 @@ class SendLargeMessages {
this.clipboard = require("electron").clipboard; this.clipboard = require("electron").clipboard;
this.bindEventToTextArea(); BDFDB.WebModules.forceAllUpdates(this);
} }
else { else {
console.error(this.getName() + ": Fatal Error: Could not load BD functions!"); console.error(this.getName() + ": Fatal Error: Could not load BD functions!");
@ -105,12 +109,6 @@ class SendLargeMessages {
} }
} }
onSwitch () {
if (typeof BDFDB === "object") {
this.bindEventToTextArea();
}
}
// begin of own functions // begin of own functions
@ -120,40 +118,45 @@ class SendLargeMessages {
this.sendMessageModalMarkup = this.sendMessageModalMarkup.replace("REPLACE_btn_send_text", this.labels.btn_send_text); this.sendMessageModalMarkup = this.sendMessageModalMarkup.replace("REPLACE_btn_send_text", this.labels.btn_send_text);
} }
bindEventToTextArea () { processChannelTextArea (instance, wrapper) {
var modaltext, checkTextarea = (textarea) => { if (instance.props && instance.props.type && instance.props.type == "normal") {
if (BDFDB.getParsedLength(textarea.value) > 1950) { let textarea = wrapper.querySelector("textarea");
textarea.selectionStart = 0; if (textarea) {
textarea.selectionEnd = textarea.value.length; let modaltext, checkTextarea = () => {
document.execCommand("insertText", false, ""); if (BDFDB.getParsedLength(textarea.value) > 1950) {
this.showSendModal(modaltext); textarea.selectionStart = 0;
textarea.selectionEnd = textarea.value.length;
document.execCommand("insertText", false, "");
this.showSendModal(modaltext);
}
};
$(textarea)
.off("input." + this.getName())
.on("input." + this.getName(), e => {
clearTimeout(textarea.sendlargemessagestimeout);
textarea.sendlargemessagestimeout = setTimeout(() => {
modaltext = textarea.value;
checkTextarea();
},100);
})
.off("paste." + this.getName())
.on("paste." + this.getName(), e => {
modaltext = textarea.value.slice(0, textarea.selectionStart) + this.clipboard.readText() + textarea.value.slice(textarea.selectionEnd);
setImmediate(() => {checkTextarea(textarea);});
});
} }
}; }
$(BDFDB.dotCNS.textareawrapchat + "textarea")
.off("input." + this.getName())
.on("input." + this.getName(), e => {
clearTimeout(e.currentTarget.sendlargemessagestimeout);
e.currentTarget.sendlargemessagestimeout = setTimeout(() => {
modaltext = e.currentTarget.value;
checkTextarea(e.currentTarget);
},100);
})
.off("paste." + this.getName())
.on("paste." + this.getName(), e => {
modaltext = e.currentTarget.value.slice(0, e.currentTarget.selectionStart) + this.clipboard.readText() + e.currentTarget.value.slice(e.currentTarget.selectionEnd);
setImmediate(() => {checkTextarea(e.currentTarget);});
});
} }
showSendModal (text) { showSendModal (text) {
var sendMessageModal = $(this.sendMessageModalMarkup); let sendMessageModal = $(this.sendMessageModalMarkup);
var textinput = sendMessageModal.find("#modal-inputtext"); let textinput = sendMessageModal.find("#modal-inputtext");
var warning = sendMessageModal.find("#warning-message"); let warning = sendMessageModal.find("#warning-message");
var counter = sendMessageModal.find("#character-counter"); let counter = sendMessageModal.find("#character-counter");
var updateCounter = () => { let updateCounter = () => {
var parsedlength = BDFDB.getParsedLength(textinput.val()); let parsedlength = BDFDB.getParsedLength(textinput.val());
var messageAmount = Math.ceil(parsedlength/1900); let messageAmount = Math.ceil(parsedlength/1900);
warning.text(messageAmount > 15 ? this.labels.modal_messages_warning : ""); warning.text(messageAmount > 15 ? this.labels.modal_messages_warning : "");
counter.text(parsedlength + " (" + (textinput[0].selectionEnd - textinput[0].selectionStart) + ") => " + this.labels.modal_messages_translation + ": " + messageAmount); counter.text(parsedlength + " (" + (textinput[0].selectionEnd - textinput[0].selectionStart) + ") => " + this.labels.modal_messages_translation + ": " + messageAmount);
}; };
@ -162,11 +165,11 @@ class SendLargeMessages {
sendMessageModal sendMessageModal
.on("click", ".btn-send", (e) => { .on("click", ".btn-send", (e) => {
e.preventDefault(); e.preventDefault();
var messages = this.formatText(textinput.val()); let messages = this.formatText(textinput.val());
messages.forEach((message,i) => { messages.forEach((message,i) => {
setTimeout(() => { setTimeout(() => {
this.sendMessage(message); this.sendMessage(message);
if (i == messages.length-1) BDFDB.showToast(this.labels.toast_allsent_text, {type:"success"}); if (i >= messages.length-1) BDFDB.showToast(this.labels.toast_allsent_text, {type:"success"});
},this.messageDelay * i); },this.messageDelay * i);
}); });
}); });
@ -201,8 +204,8 @@ class SendLargeMessages {
formatText (text) { formatText (text) {
text = text.replace(new RegExp("\t", 'g'), " "); text = text.replace(new RegExp("\t", 'g'), " ");
var longwords = text.match(/[\S]{1800,}/gm); let longwords = text.match(/[\S]{1800,}/gm);
for (var i in longwords) { for (let i in longwords) {
let longword = longwords[i]; let longword = longwords[i];
let count1 = 0; let count1 = 0;
let shortwords = []; let shortwords = [];
@ -212,15 +215,15 @@ class SendLargeMessages {
}); });
text = text.replace(longword, shortwords.join(" ")); text = text.replace(longword, shortwords.join(" "));
} }
var messages = []; let messages = [];
var count2 = 0; let count2 = 0;
text.split(" ").forEach((word) => { text.split(" ").forEach((word) => {
if (messages[count2] && BDFDB.getParsedLength(messages[count2] + "" + word) > 1900) count2++; if (messages[count2] && BDFDB.getParsedLength(messages[count2] + "" + word) > 1900) count2++;
messages[count2] = messages[count2] ? messages[count2] + " " + word : word; messages[count2] = messages[count2] ? messages[count2] + " " + word : word;
}); });
var insertCodeBlock = null, insertCodeLine = null; let insertCodeBlock = null, insertCodeLine = null;
for (var j = 0; j < messages.length; j++) { for (let j = 0; j < messages.length; j++) {
if (insertCodeBlock) { if (insertCodeBlock) {
messages[j] = insertCodeBlock + messages[j]; messages[j] = insertCodeBlock + messages[j];
insertCodeBlock = null; insertCodeBlock = null;
@ -230,8 +233,8 @@ class SendLargeMessages {
insertCodeLine = null; insertCodeLine = null;
} }
var codeBlocks = messages[j].match(/`{3,}[\S]*\n|`{3,}/gm); let codeBlocks = messages[j].match(/`{3,}[\S]*\n|`{3,}/gm);
var codeLines = messages[j].match(/[^`]{0,1}`{1,2}[^`]|[^`]`{1,2}[^`]{0,1}/gm); let codeLines = messages[j].match(/[^`]{0,1}`{1,2}[^`]|[^`]`{1,2}[^`]{0,1}/gm);
if (codeBlocks && codeBlocks.length % 2 == 1) { if (codeBlocks && codeBlocks.length % 2 == 1) {
messages[j] = messages[j] + "```"; messages[j] = messages[j] + "```";
@ -247,7 +250,7 @@ class SendLargeMessages {
} }
sendMessage (text) { sendMessage (text) {
var textarea = document.querySelector(BDFDB.dotCNS.textareawrapchat + "textarea"); let textarea = document.querySelector(BDFDB.dotCNS.textareawrapchat + "textarea");
if (textarea) { if (textarea) {
var instance = BDFDB.getOwnerInstance({"node":textarea.parentElement, "name":"ChannelTextAreaForm", "up":true}); var instance = BDFDB.getOwnerInstance({"node":textarea.parentElement, "name":"ChannelTextAreaForm", "up":true});
if (instance) { if (instance) {