diff --git a/images/emoji/eyes.png b/images/emoji/eyes.png new file mode 100644 index 0000000..77c633f Binary files /dev/null and b/images/emoji/eyes.png differ diff --git a/images/emoji/moyai.png b/images/emoji/moyai.png new file mode 100644 index 0000000..350e25e Binary files /dev/null and b/images/emoji/moyai.png differ diff --git a/js/markdown.js b/js/markdown.js index 0455b6e..86182ba 100644 --- a/js/markdown.js +++ b/js/markdown.js @@ -28,7 +28,12 @@ function filterMentions(text) { return text.replace(mentionregex,`$1 `) } -const allregex = /(```([^```]*)```)|(\n)|(~([^~]*)~)|(\*\*([^\*]*)\*\*)|(\*([^\*]*)\*)|(@[^\s]*)/gi +const emojiregex = /:([^:\s]*):/gi +function emojify(text) { + return text.replace(emojiregex,"$1") +} + +const allregex = /(```([^```]*)```)|(\n)|(~([^~]*)~)|(\*\*([^\*]*)\*\*)|(\*([^\*]*)\*)|(@[^\s]*)|(:([^:\s]*):)/gi const cdblregex = /```([^```]*)```/gi @@ -49,6 +54,7 @@ function filterPost(text){ out = newlineify(out) out = urlify(out) + out = emojify(out) out = filterMentions(out) out = crossout(out) out = boldify(out) diff --git a/js/posts.js b/js/posts.js index 29ec25d..0e621fe 100644 --- a/js/posts.js +++ b/js/posts.js @@ -20,7 +20,7 @@ socket.addEventListener("message", async function (event) { let message = ds.message let item = ds.data 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) if(user["username"]!=username)mainNoti(username) @@ -49,7 +49,21 @@ async function postMessage() { setTimeout(function(){ cd = true },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 update_pid() 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() { setInterval(update_pid,30000) if(posting_id=="")update_pid() diff --git a/routes/api/post.js b/routes/api/post.js index 6dce3e9..0f19ef0 100644 --- a/routes/api/post.js +++ b/routes/api/post.js @@ -43,7 +43,14 @@ export const setup = function (router, con, server) { else { 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" }); return; } @@ -82,11 +89,8 @@ export const setup = function (router, con, server) { data: post_obj }; let messagestr = JSON.stringify(message); - let channel = decodeURIComponent(req.body.receiver); server.wss.clients.forEach(async function (ws) { - if (ws.channel == channel) { - ws.send(messagestr); - } + ws.send(messagestr); }); res.json({ "success": "successfully posted message" }); console.log(5, `posted new message by ${res.locals.username} : ${req.body.message}`); diff --git a/server.js b/server.js index 1020ba9..7c578ce 100644 --- a/server.js +++ b/server.js @@ -433,23 +433,7 @@ settingshandlersetup(router, con, commonfunctions); const get_pid = postsetup(router, con, commonfunctions); dmsPersonalMessagessetup(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) { res.set("Access-Control-Allow-Origin", ""); let type = req.query.type; diff --git a/views/posts.html b/views/posts.html index efb9dcc..b1054c4 100644 --- a/views/posts.html +++ b/views/posts.html @@ -12,9 +12,7 @@ <%- htmlescapejs %> <%- markdownjs %> <%- warnmessagejs %> - let channels = <%- JSON.stringify(await getChannels()) %> - let user = <%- JSON.stringify(user) %> - var posting_id = "<%- getPID() %>" + let channels = <%- JSON.stringify(await getChannels()) %>,user = <%- JSON.stringify(user) %>,posting_id = "<%- getPID() %>" @@ -30,7 +28,7 @@ To log in, please visit The login page
If you are new to here, please visit The register page
-