Added basic browser-side chat pre-processor.
This commit is contained in:
parent
2dbf3b97d5
commit
8b52946925
|
|
@ -121,6 +121,7 @@ along with this program. If not, see <https://www.gnu.org/licenses/>.-->
|
||||||
<footer>
|
<footer>
|
||||||
<%- include('partial/scripts', {user}); %>
|
<%- include('partial/scripts', {user}); %>
|
||||||
<script src="/lib/socket.io/socket.io.min.js"></script>
|
<script src="/lib/socket.io/socket.io.min.js"></script>
|
||||||
|
<script src="/js/channel/chatPreprocessor.js"></script>
|
||||||
<script src="/js/channel/chat.js"></script>
|
<script src="/js/channel/chat.js"></script>
|
||||||
<script src="/js/channel/userlist.js"></script>
|
<script src="/js/channel/userlist.js"></script>
|
||||||
<script src="/js/channel/player.js"></script>
|
<script src="/js/channel/player.js"></script>
|
||||||
|
|
|
||||||
|
|
@ -24,6 +24,7 @@ class chatBox{
|
||||||
|
|
||||||
//clickDragger object
|
//clickDragger object
|
||||||
this.clickDragger = new canopyUXUtils.clickDragger("#chat-panel-drag-handle", "#chat-panel-div");
|
this.clickDragger = new canopyUXUtils.clickDragger("#chat-panel-drag-handle", "#chat-panel-div");
|
||||||
|
this.chatPreprocessor = new chatPreprocessor();
|
||||||
|
|
||||||
//Element Nodes
|
//Element Nodes
|
||||||
this.chatPanel = document.querySelector("#chat-panel-div");
|
this.chatPanel = document.querySelector("#chat-panel-div");
|
||||||
|
|
@ -106,7 +107,8 @@ class chatBox{
|
||||||
chatBody.innerHTML = chat.msg;
|
chatBody.innerHTML = chat.msg;
|
||||||
chatEntry.appendChild(chatBody);
|
chatEntry.appendChild(chatBody);
|
||||||
|
|
||||||
this.chatBuffer.appendChild(chatEntry);
|
|
||||||
|
this.chatBuffer.appendChild(this.chatPreprocessor.preprocess(chatEntry));
|
||||||
}
|
}
|
||||||
|
|
||||||
async send(event){
|
async send(event){
|
||||||
|
|
|
||||||
65
www/js/channel/chatPreprocessor.js
Normal file
65
www/js/channel/chatPreprocessor.js
Normal file
|
|
@ -0,0 +1,65 @@
|
||||||
|
class chatPreprocessor{
|
||||||
|
constructor(){
|
||||||
|
}
|
||||||
|
|
||||||
|
preprocess(chatEntry){
|
||||||
|
//Set current chat nodes
|
||||||
|
this.chatEntry = chatEntry;
|
||||||
|
this.chatBody = this.chatEntry.querySelector(".chat-entry-body");
|
||||||
|
|
||||||
|
//Split the chat body into an array of objects representing each word
|
||||||
|
//We could pass this through arguments but these functions wont be very interoperable anyways since they expect a purpose-made hashtable
|
||||||
|
this.splitBody();
|
||||||
|
|
||||||
|
//Inject whitespace into un-processed words
|
||||||
|
this.addWhitespace();
|
||||||
|
|
||||||
|
//Inject the pre-processed chat into the chatEntry node
|
||||||
|
this.injectBody();
|
||||||
|
//Return the pre-processed node
|
||||||
|
return this.chatEntry;
|
||||||
|
}
|
||||||
|
|
||||||
|
splitBody(){
|
||||||
|
//Create an empty array to hold the body
|
||||||
|
this.bodyArray = [];
|
||||||
|
//Split string by words
|
||||||
|
const splitString = this.chatBody.innerHTML.split(/(\W)+/g); //Group not-words together
|
||||||
|
|
||||||
|
//for each word in the splitstring
|
||||||
|
splitString.forEach((string) => {
|
||||||
|
//create a word object
|
||||||
|
const wordObj = {
|
||||||
|
string: string,
|
||||||
|
type: "word"
|
||||||
|
}
|
||||||
|
|
||||||
|
//Add it to our body array
|
||||||
|
this.bodyArray.push(wordObj);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
injectBody(){
|
||||||
|
//Create empty array to hold strings
|
||||||
|
var stringArray = [];
|
||||||
|
|
||||||
|
//Extract strings into the empty array
|
||||||
|
this.bodyArray.forEach((wordObj) => {
|
||||||
|
stringArray.push(wordObj.string);
|
||||||
|
});
|
||||||
|
|
||||||
|
//Join the strings to fill the chat entry
|
||||||
|
this.chatBody.innerHTML = stringArray.join("");
|
||||||
|
}
|
||||||
|
|
||||||
|
addWhitespace(){
|
||||||
|
//for each word object in the body
|
||||||
|
this.bodyArray.forEach((wordObj, index) => {
|
||||||
|
//if the word object hasn't been pre-processed elsewhere
|
||||||
|
if(wordObj.type == "word"){
|
||||||
|
//Add invisible whitespace in-between characters to keep it from breaking page layout
|
||||||
|
this.bodyArray[index].string = wordObj.string.split("").join("ㅤ");
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}
|
||||||
Loading…
Reference in a new issue