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,"")
+}
+
+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() %>"