add prototype emoji system

This commit is contained in:
Mystikfluu 2022-08-27 18:22:00 +02:00
parent 7ceb781f55
commit 90c69ef126
7 changed files with 72 additions and 29 deletions

BIN
images/emoji/eyes.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.7 KiB

BIN
images/emoji/moyai.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 778 B

View File

@ -28,7 +28,12 @@ function filterMentions(text) {
return text.replace(mentionregex,`<span><a href="/users/$1" class="mention">$1</a></span> `) return text.replace(mentionregex,`<span><a href="/users/$1" class="mention">$1</a></span> `)
} }
const allregex = /(```([^```]*)```)|(\n)|(~([^~]*)~)|(\*\*([^\*]*)\*\*)|(\*([^\*]*)\*)|(@[^\s]*)/gi const emojiregex = /:([^:\s]*):/gi
function emojify(text) {
return text.replace(emojiregex,"<img class='emoji' src='/images/emoji/$1.png' alt='$1' width=20 height=20/>")
}
const allregex = /(```([^```]*)```)|(\n)|(~([^~]*)~)|(\*\*([^\*]*)\*\*)|(\*([^\*]*)\*)|(@[^\s]*)|(:([^:\s]*):)/gi
const cdblregex = /```([^```]*)```/gi const cdblregex = /```([^```]*)```/gi
@ -49,6 +54,7 @@ function filterPost(text){
out = newlineify(out) out = newlineify(out)
out = urlify(out) out = urlify(out)
out = emojify(out)
out = filterMentions(out) out = filterMentions(out)
out = crossout(out) out = crossout(out)
out = boldify(out) out = boldify(out)

View File

@ -20,7 +20,7 @@ socket.addEventListener("message", async function (event) {
let message = ds.message let message = ds.message
let item = ds.data let item = ds.data
let username = decodeURIComponent(item.post_user_name) let username = decodeURIComponent(item.post_user_name)
if(message == "new_post") { if(message == "new_post" && decodeURIComponent(item.post_receiver_name) == currentChannel) {
await createPost(decodeURIComponent(item.post_user_name),decodeURIComponent(item.post_text),item.post_time,item.post_special_text,highest_id+1,item.post_from_bot,item.post_reply_id,true) await createPost(decodeURIComponent(item.post_user_name),decodeURIComponent(item.post_text),item.post_time,item.post_special_text,highest_id+1,item.post_from_bot,item.post_reply_id,true)
if(user["username"]!=username)mainNoti(username) if(user["username"]!=username)mainNoti(username)
@ -49,7 +49,21 @@ async function postMessage() {
setTimeout(function(){ setTimeout(function(){
cd = true cd = true
},400) },400)
let r = await post("/api/post",{"message":document.getElementById("post-text").value,"reply_id":reply_id,"receiver":currentChannel,"pid": posting_id}) let formdata = new FormData()
formdata.append("message",document.getElementById("post-text").value)
formdata.append("reply_id",reply_id)
formdata.append("receiver",currentChannel)
formdata.append("pid",posting_id)
for(let i in files) {
console.log("processed file",files[i].name);
formdata.append("file_"+i,files[i])
}
files = []
let r = await fetch("/api/post", {
method: "POST", body: formdata
});
posting_id = undefined posting_id = undefined
update_pid() update_pid()
if(window.location.href.split("?mention=")[1])location.replace('/posts'); if(window.location.href.split("?mention=")[1])location.replace('/posts');
@ -365,6 +379,43 @@ async function loadChannels() {
} }
} }
var files = []
function addFile(file) {
if(file.size > 100000) {
console.log("file is too big: ", file.name, file.type, file.size);
return;
}
if(files.length >= 5) {
console.log("too many files already: ", files);
return;
}
files[files.length]=file
console.log("File added: ", file.name, file.type, file.size);
}
function dropHandler(ev) {
console.log("file dropped");
ev.preventDefault();
if (ev.dataTransfer.items) {
// Use DataTransferItemList interface to access the file(s)
[...ev.dataTransfer.items].forEach((item, i) => {
// If dropped items aren't files, reject them
if (item.kind === 'file') {
const file = item.getAsFile();
addFile(file)
}
});
} else {
// Use DataTransfer interface to access the file(s)
[...ev.dataTransfer.files].forEach((file, i) => {
addFile(file)
});
}
}
function init() { function init() {
setInterval(update_pid,30000) setInterval(update_pid,30000)
if(posting_id=="")update_pid() if(posting_id=="")update_pid()

View File

@ -43,7 +43,14 @@ export const setup = function (router, con, server) {
else { else {
reply_id = req.body.reply_id; reply_id = req.body.reply_id;
} }
if ((typeof req.body.reply_id) != "number") { if(typeof reply_id == "string") {
reply_id = parseInt(reply_id)
if(isNaN(reply_id)) {
res.json({ "error": "no valid reply id given" });
return;
}
}
if ((typeof reply_id) != "number") {
res.json({ "error": "no valid reply id given" }); res.json({ "error": "no valid reply id given" });
return; return;
} }
@ -82,11 +89,8 @@ export const setup = function (router, con, server) {
data: post_obj data: post_obj
}; };
let messagestr = JSON.stringify(message); let messagestr = JSON.stringify(message);
let channel = decodeURIComponent(req.body.receiver);
server.wss.clients.forEach(async function (ws) { server.wss.clients.forEach(async function (ws) {
if (ws.channel == channel) { ws.send(messagestr);
ws.send(messagestr);
}
}); });
res.json({ "success": "successfully posted message" }); res.json({ "success": "successfully posted message" });
console.log(5, `posted new message by ${res.locals.username} : ${req.body.message}`); console.log(5, `posted new message by ${res.locals.username} : ${req.body.message}`);

View File

@ -433,23 +433,7 @@ settingshandlersetup(router, con, commonfunctions);
const get_pid = postsetup(router, con, commonfunctions); const get_pid = postsetup(router, con, commonfunctions);
dmsPersonalMessagessetup(router, con, commonfunctions); dmsPersonalMessagessetup(router, con, commonfunctions);
const get_dmpid = dmspostsetup(router, con, commonfunctions); const get_dmpid = dmspostsetup(router, con, commonfunctions);
// const toLoad = [
// "api/options.js",
// "api/all.js",
// "api/settingshandler.js",
// "api/post.js",
// "api/dms/PersonalMessages.js",
// "api/dms/post.js",
// ]
// for (let i = 0; i < toLoad.length; i++) {
// require("./routes/"+toLoad[i]).setup(router,con,commonfunctions)
// }
// let options = require("./routes/api/options.js")
// options.setup(router,con,commonfunctions)
// let apiALL = require("./routes/api/all.js")
// apiALL.setup(router,con,commonfunctions)
// let settingshandler = require("./routes/api/settingshandler.js")
// settingshandler.setup(router,con,commonfunctions)
router.get("/api/search", async function (req, res) { router.get("/api/search", async function (req, res) {
res.set("Access-Control-Allow-Origin", ""); res.set("Access-Control-Allow-Origin", "");
let type = req.query.type; let type = req.query.type;

View File

@ -12,9 +12,7 @@
<%- htmlescapejs %> <%- htmlescapejs %>
<%- markdownjs %> <%- markdownjs %>
<%- warnmessagejs %> <%- warnmessagejs %>
let channels = <%- JSON.stringify(await getChannels()) %> let channels = <%- JSON.stringify(await getChannels()) %>,user = <%- JSON.stringify(user) %>,posting_id = "<%- getPID() %>"
let user = <%- JSON.stringify(user) %>
var posting_id = "<%- getPID() %>"
</script> </script>
</head> </head>
<body> <body>
@ -30,7 +28,7 @@
To log in, please visit <a href="/login">The login page</a> <br> To log in, please visit <a href="/login">The login page</a> <br>
If you are new to here, please visit <a href="/register">The register page</a> <br> If you are new to here, please visit <a href="/register">The register page</a> <br>
</div> </div>
<div id="scriptonly" style="display:none;"> <div id="scriptonly" style="display:none;" ondrop="dropHandler(event)">
<div class="self"> <div class="self">
Username: <span class="Username" id="username-self"></span> <br> Username: <span class="Username" id="username-self"></span> <br>
<span id="reply" style="display:none;" class="noselect">Replying to: <b id="reply_username"></b>&nbsp;&nbsp;&nbsp;<small id="reply_text"></small> <button onclick="unreply()" style="color:red">X</button></span> <br> <span id="reply" style="display:none;" class="noselect">Replying to: <b id="reply_username"></b>&nbsp;&nbsp;&nbsp;<small id="reply_text"></small> <button onclick="unreply()" style="color:red">X</button></span> <br>