From cdf441fd60b180b98473de3713885ebdec985e57 Mon Sep 17 00:00:00 2001
From: doesnmisclown <116358854+doesnmisclown@users.noreply.github.com>
Date: Fri, 22 Dec 2023 17:14:38 +0300
Subject: [PATCH] Add files via upload
---
blog.html | 20 +++++++++++++
blog.js | 90 +++++++++++++++++++++++++++++++++++++++++++++++++++++++
2 files changed, 110 insertions(+)
create mode 100644 blog.html
create mode 100644 blog.js
diff --git a/blog.html b/blog.html
new file mode 100644
index 0000000..2831b49
--- /dev/null
+++ b/blog.html
@@ -0,0 +1,20 @@
+
+
+
+
+
+
+
+ Blog
+
+
+
+
+ АААААААААААААААААААААААААААААААА |
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/blog.js b/blog.js
new file mode 100644
index 0000000..ce18fe7
--- /dev/null
+++ b/blog.js
@@ -0,0 +1,90 @@
+let posts = [];
+const table = document.querySelector("table");
+
+function getReactions(posts,p){
+ let reactions = [];
+ const preReactions = posts.filter(f => f.type == "m.reaction" && f.content["m.relates_to"].event_id == p.event_id).map(m => m.content["m.relates_to"]);
+ preReactions.forEach(pr => {
+ let r2 = reactions.find(f => f.key == pr.key);
+ if(!r2) return reactions.push({
+ key: pr.key,
+ count: 1
+ });
+ reactions.find(f => f.key == pr.key).count++;
+ });
+ return '' + reactions.map(m => `${m.count > 1 ? m.count: ''} ${DOMPurify.sanitize(m.key)}`).join("") + "
";
+}
+
+ if(!localStorage.access_token){
+ fetch("https://matrix.org/_matrix/client/v3/register?kind=guest", {method: "post", body: "{}"}).then(r => r.json()).then(json => {
+ if(!json.access_token) console.log(json);
+ localStorage.access_token = json.access_token;
+ });
+ }
+function printPost(post,roomId,noButton){
+let body = DOMPurify.sanitize(post.content.formatted_body ?? post.content.body);
+body = body.split("\n").join("
");
+ table.innerHTML += `${body}${post.content.msgtype == "m.image" ? ` ` : ''}${!noButton ? `Открыть` : ''} |
`;
+}
+
+function loadPosts(roomId,start){
+const ignored_events = [];
+table.innerHTML = `Контент |
`;
+if(posts.length < 1 || start != undefined){
+fetch("https://matrix.org/_matrix/client/v3/rooms/" + encodeURIComponent(roomId) + "/messages?limit=50&access_token=" + localStorage.access_token + (start ? `&from=${start}`: '') + "&dir=b").then(r => r.json()).then(json => {
+if(json.errcode == "M_FORBIDDEN"){
+ table.innerHTML = `Запрещено |
---|
Гостевой аккаунт не может получить доступ к этой комнате |
`;
+ return false;
+}
+json.chunk.forEach(c => {
+if(!["m.room.message","m.reaction"].includes(c.type)) return;
+if(c.redacted_because) return;
+if(ignored_events.includes(c.event_id)) return;
+if(c.type == "m.room.message"){
+ if(c.content.formatted_body != undefined){
+ c.content.body = "";
+ if(c.content["m.new_content"]) c.content["m.new_content"].body = "";
+ }
+ }
+
+ if(c.content["m.new_content"]){
+ if(ignored_events.includes(c.content["m.relates_to"].event_id)) return;
+ ignored_events.push(c.content["m.relates_to"].event_id);
+ c.content = c.content["m.new_content"];
+ }
+ posts.push(c);
+ });
+posts.forEach((p,i,a) => {
+printPost(p,roomId);
+});
+if(json.end) table.innerHTML += ``;
+});
+}
+}
+
+ window.onhashchange = () => {
+ let hash = location.hash.slice(1);
+ if(hash.startsWith("!") && !hash.includes("/")){
+ return loadPosts(hash,undefined);
+ }
+ if(hash.includes("/")){
+ hash = hash.split("/");
+ fetch(`https://matrix.org/_matrix/client/v3/rooms/${hash[0]}/context/${hash[1]}?limit=0`, {
+ headers: {
+ Authorization: `Bearer ${localStorage.access_token}`
+ }
+ }).then(r => r.json()).then(json => {
+ if(json.event){
+ const post = json.event;
+table.innerHTML = `Контент |
`;
+ printPost(post,hash[0],true);
+ }
+ });
+ }else{
+//loadPosts("roomId");
+table.innerHTML = "Добро пожаловать |
---|
Это блог работающий поверх децентрализованного мессенджера Matrix |
"
+ }
+ };
+window.addEventListener("load", () => {
+ window.onhashchange();
+});
\ No newline at end of file