diff --git a/src/js/events/event.js b/src/js/events/event.js index ac09d5f..765c03a 100644 --- a/src/js/events/event.js +++ b/src/js/events/event.js @@ -14,6 +14,7 @@ class MatrixEvent extends ElemJS { // predicates canGroup() { + //return this.data.type === "m.room.message" return false } @@ -51,4 +52,17 @@ class MatrixEvent extends ElemJS { } } -module.exports = {MatrixEvent} +function simpleEvent(filter, render) { + return class extends MatrixEvent { + render() { + super.render() + return this.text(render(this.data)) + } + + static canRender(event) { + return filter(event) + } + } +} + +module.exports = {MatrixEvent, simpleEvent} diff --git a/src/js/events/membership.js b/src/js/events/membership.js index 04c194d..f00a765 100644 --- a/src/js/events/membership.js +++ b/src/js/events/membership.js @@ -1,47 +1,13 @@ -const {MatrixEvent} = require("./event") +const {simpleEvent} = require("./event") -class MembershipEvent extends MatrixEvent { - static canRender(event) { - return event.type == "m.room.member" - } +const UnknownMembership = simpleEvent((e) => e.type == "m.room.member", (e) => "unknown membership event") + +function createMembershipEvent(membership, message) { + return simpleEvent((e) => e.type == "m.room.member" && e.content.membership === membership, message) } - -class JoinedEvent extends MembershipEvent { - static canRender(event) { - return super.canRender(event) && event.content.membership === "join" - } - render() { - super.render() - return this.text("joined the room") - } -} - -class InvitedEvent extends MembershipEvent { - static canRender(event) { - return super.canRender(event) && event.content.membership === "invite" - } - render() { - super.render() - return this.text(`invited ${this.data.content.displayname}`) - } -} - -class LeaveEvent extends MembershipEvent { - static canRender(event) { - return super.canRender(event) && event.content.membership === "leave" - } - render() { - super.render() - return this.text(`left the room`) - } -} - -class UnknownMembership extends MembershipEvent { - render() { - super.render() - return this.text("unknown membership event") - } -} +const JoinedEvent = createMembershipEvent("join", (e) => "joined the room") +const InvitedEvent = createMembershipEvent("invite", (e) => `invited ${e.content.displayname} the room`) +const LeaveEvent = createMembershipEvent("leave", () => "left the room") module.exports = [JoinedEvent, InvitedEvent, LeaveEvent, UnknownMembership] diff --git a/src/js/events/message.js b/src/js/events/message.js index bbd1b15..05ccfdd 100644 --- a/src/js/events/message.js +++ b/src/js/events/message.js @@ -8,7 +8,7 @@ const {MatrixEvent} = require("./event") const purifier = DOMPurify() purifier.addHook("uponSanitizeAttribute", (node, hookevent, config) => { - // If purifier already rejected an attribute there is no point in checking it + //If purifier already rejected an attribute there is no point in checking it if (hookevent.keepAttr === false) return; const allowedElementAttributes = { @@ -24,8 +24,8 @@ purifier.addHook("uponSanitizeAttribute", (node, hookevent, config) => { hookevent.keepAttr = allowed_attributes.indexOf(hookevent.attrName) > -1; }) +//Remove bad classes from our code element purifier.addHook("uponSanitizeElement", (node, hookevent, config) => { - // Remove bad classes from our code element if (node.tagName == "CODE") { node.classList.forEach(c => { if (!c.startsWith("language-")) { @@ -53,7 +53,7 @@ function cleanHTML(html) { return purifier.sanitize(html) } -// Here we put all the processing of the messages that isn't as likely to potentially lead to security issues +//Here we put all the processing of the messages that isn't as likely to potentially lead to security issues function postProcessElements(rootNode) { const element = rootNode.element element.querySelectorAll("code").forEach((n) => rootNode.child(new HighlightedCode(n))) diff --git a/src/js/events/unknown.js b/src/js/events/unknown.js index 7fddf5b..3e3bbd6 100644 --- a/src/js/events/unknown.js +++ b/src/js/events/unknown.js @@ -1,13 +1,3 @@ -const {MatrixEvent} = require("./event") - -class UnknownEvent extends MatrixEvent { - static canRender() { - return true - } - render() { - super.render() - return this.text(`cannot render event`) - } -} +const {simpleEvent} = require("./event") +const UnknownEvent = simpleEvent(() => true, () => "Cannot render event") module.exports = [UnknownEvent] -