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