Rich message rendering #24
					 2 changed files with 3 additions and 4 deletions
				
			
		| 
						 | 
				
			
			@ -14,7 +14,6 @@ class MatrixEvent extends ElemJS {
 | 
			
		|||
	// predicates
 | 
			
		||||
 | 
			
		||||
	canGroup() {
 | 
			
		||||
| 
					
	
 | 
			||||
		//return this.data.type === "m.room.message"
 | 
			
		||||
		return false
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -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)))
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue
	
	
The original idea here was that we'd have a predicate for things like whether the method can be displayed as a message group, whether it should show a timestamp, or whatever other things could affect the display based on the class. I haven't actually put this method to any use yet.