Kamil Kisiel avatar Kamil Kisiel committed 7f4e313

Get MathJax from the CDN instead of requiring a local copy.

Thanks to Wayne Allen for providing the patch.

Comments (0)

Files changed (1)


+from genshi.builder import tag
+from genshi.filters import Transformer
 from trac.core import Component, implements
-from trac.web.api import IRequestFilter
-from trac.web.chrome import ITemplateProvider, add_script
 from trac.wiki.api import IWikiSyntaxProvider, IWikiMacroProvider
-import os.path
+from trac.web.api import ITemplateStreamFilter
 """Renders a LaTeX using MathJax.
 class TracMathJax(Component):
-    implements(ITemplateProvider,
-               IRequestFilter,
-               IWikiSyntaxProvider,
-               IWikiMacroProvider)
+    implements(IWikiSyntaxProvider,
+               IWikiMacroProvider,
+               ITemplateStreamFilter)
-    def __init__(self):
-        self.mathjax_path = os.path.abspath(self.config.get('tracmathjax', 'mathjax_path'))
-        self.log.debug("MathJax path: %s" % self.mathjax_path)
-        if not os.path.exists(os.path.join(self.mathjax_path, MATHJAX_JS)):
-            self.log.error("Could not find a MathJax install at %s" % self.mathjax_path)
-    # ITemplateProvider methods
-    def get_htdocs_dirs(self):
-        return [(MATHJAX_DIR, self.mathjax_path)]
-    def get_templates_dirs(self):
-        # we have no templates
-        return []
-    # IRequestFilter methods
-    def pre_process_request(self, req, handler):
-        return handler
-    def post_process_request(self, req, template, data, content_type):
-        add_script(req, "/chrome/%s/%s" % (MATHJAX_DIR, MATHJAX_JS))
-        return template, data, content_type
+    # ITemplateStreamFilter methods
+    def filter_stream(self, req, method, filename, stream, data):
+        address = tag.script(type="text/javascript", src="http://cdn.mathjax.org/mathjax/latest/MathJax.js?config=TeX-AMS-MML_HTMLorMML")
+        stream |= Transformer('.//head').append(address)
+        return stream
     # IWikiSyntaxProvider methods
     def get_wiki_syntax(self):
Tip: Filter by directory path e.g. /media app.js to search for public/media/app.js.
Tip: Use camelCasing e.g. ProjME to search for ProjectModifiedEvent.java.
Tip: Filter by extension type e.g. /repo .js to search for all .js files in the /repo directory.
Tip: Separate your search with spaces e.g. /ssh pom.xml to search for src/ssh/pom.xml.
Tip: Use ↑ and ↓ arrow keys to navigate and return to view the file.
Tip: You can also navigate files with Ctrl+j (next) and Ctrl+k (previous) and view the file with Ctrl+o.
Tip: You can also navigate files with Alt+j (next) and Alt+k (previous) and view the file with Alt+o.