mirror of
				https://github.com/zulip/zulip.git
				synced 2025-11-04 05:53:43 +00:00 
			
		
		
		
	These are available in Python ≥ 3.9. https://docs.python.org/3/library/stdtypes.html#str.removeprefix Signed-off-by: Anders Kaseorg <anders@zulip.com>
		
			
				
	
	
		
			37 lines
		
	
	
		
			1.1 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
			
		
		
	
	
			37 lines
		
	
	
		
			1.1 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
from typing import Any
 | 
						|
from xml.etree.ElementTree import Element
 | 
						|
 | 
						|
import markdown
 | 
						|
from django.contrib.staticfiles.storage import staticfiles_storage
 | 
						|
from markdown.extensions import Extension
 | 
						|
from typing_extensions import override
 | 
						|
 | 
						|
from zerver.lib.markdown.priorities import PREPROCESSOR_PRIORITIES
 | 
						|
 | 
						|
 | 
						|
class MarkdownStaticImagesGenerator(Extension):
 | 
						|
    @override
 | 
						|
    def extendMarkdown(self, md: markdown.Markdown) -> None:
 | 
						|
        md.treeprocessors.register(
 | 
						|
            StaticImageProcessor(md),
 | 
						|
            "static_images",
 | 
						|
            PREPROCESSOR_PRIORITIES["static_images"],
 | 
						|
        )
 | 
						|
 | 
						|
 | 
						|
class StaticImageProcessor(markdown.treeprocessors.Treeprocessor):
 | 
						|
    """
 | 
						|
    Rewrite img tags which refer to /static/ to use staticfiles
 | 
						|
    """
 | 
						|
 | 
						|
    @override
 | 
						|
    def run(self, root: Element) -> None:
 | 
						|
        for img in root.iter("img"):
 | 
						|
            url = img.get("src")
 | 
						|
            if url is not None and url.startswith("/static/"):
 | 
						|
                img.set("src", staticfiles_storage.url(url.removeprefix("/static/")))
 | 
						|
 | 
						|
 | 
						|
def makeExtension(*args: Any, **kwargs: str) -> MarkdownStaticImagesGenerator:
 | 
						|
    return MarkdownStaticImagesGenerator(*args, **kwargs)
 |