def _render_image(self, m):
alt_text, url, caption = m.groups()
+ html = """
+ <figure class="image">
+ <img src="/docs%s" alt="%s">
+ <figcaption class="figure-caption">%s</figcaption>
+ </figure>
+ """
+
# Skip any absolute and external URLs
if url.startswith("/") or url.startswith("https://") or url.startswith("http://"):
- return """<figure class="figure"><img src="%s" class="figure-img img-fluid rounded" alt="%s">
- <figcaption class="figure-caption">%s</figcaption></figure>
- """ % (url, alt_text, caption or "")
+ return html % (url, alt_text, caption or "")
# Try to split query string
url, delimiter, qs = url.partition("?")
if not "s" in args:
args["s"] = "920"
- return """<figure class="figure"><img src="%s?%s" class="figure-img img-fluid rounded" alt="%s">
- <figcaption class="figure-caption">%s</figcaption></figure>
- """ % (url, urllib.parse.urlencode(args), caption, caption or "")
+ # Append arguments to the URL
+ if args:
+ url = "%s?%s" % (url, urllib.parse.urlencode(args))
+
+ return html % (url, caption, caption or "")
def render(self, text):
logging.debug("Rendering %s" % self.path)
(r"/blog/([0-9a-z\-\._]+)/publish", blog.PublishHandler),
# Docs
+ (r"/docs((?:[A-Za-z0-9\-_\/]+)?(?:.*)\.(?:\w+))$", docs.FileHandler),
(r"/docs([A-Za-z0-9\-_\/]+)?", docs.PageHandler),
# Downloads
# Media
(r"([A-Za-z0-9\-_\/]+)?/_files", wiki.FilesHandler),
- (r"((?!/static)(?:[A-Za-z0-9\-_\/]+)?(?:.*)\.(?:\w+))$", wiki.FileHandler),
# Serve any static files
(r"/static/(.*)", tornado.web.StaticFileHandler, { "path" : self.settings.get("static_path") }),
self.render("docs/page.html", page=page, latest_revision=latest_revision)
+class FileHandler(base.BaseHandler):
+ @property
+ def action(self):
+ return self.get_argument("action", None)
+
+ def get(self, path):
+ # Check permissions
+ if not self.backend.wiki.check_acl(path, self.current_user):
+ raise tornado.web.HTTPError(403, "Access to %s not allowed for %s" % (path, self.current_user))
+
+ # Check if we are asked to render a certain revision
+ revision = self.get_argument("revision", None)
+
+ # Fetch the file
+ file = self.backend.wiki.get_file_by_path(path, revision=revision)
+ if not file:
+ raise tornado.web.HTTPError(404, "Could not find %s" % path)
+
+ # Render detail page
+ if self.action == "detail":
+ page = None
+
+ for breadcrumb, title in self.backend.wiki.make_breadcrumbs(path):
+ page = self.backend.wiki.get_page(breadcrumb)
+ if page:
+ break
+
+ self.render("wiki/files/detail.html", page=page, file=file)
+ return
+
+ size = self.get_argument_int("s", None)
+
+ # Check if image should be resized
+ if size and file.is_bitmap_image():
+ blob = file.get_thumbnail(size)
+ else:
+ blob = file.blob
+
+ # Set headers
+ self.set_header("Content-Type", file.mimetype or "application/octet-stream")
+ self.set_header("Content-Length", len(blob))
+
+ # Set expires
+ self.set_expires(3600)
+
+ # Deliver content
+ self.finish(blob)
+
+
class HeaderModule(ui_modules.UIModule):
@property
def page(self):
self.render("wiki/files/index.html", path=path, files=files)
-class FileHandler(base.BaseHandler):
- @property
- def action(self):
- return self.get_argument("action", None)
-
- def get(self, path):
- # Check permissions
- if not self.backend.wiki.check_acl(path, self.current_user):
- raise tornado.web.HTTPError(403, "Access to %s not allowed for %s" % (path, self.current_user))
-
- # Check if we are asked to render a certain revision
- revision = self.get_argument("revision", None)
-
- # Fetch the file
- file = self.backend.wiki.get_file_by_path(path, revision=revision)
- if not file:
- raise tornado.web.HTTPError(404, "Could not find %s" % path)
-
- # Render detail page
- if self.action == "detail":
- page = None
-
- for breadcrumb, title in self.backend.wiki.make_breadcrumbs(path):
- page = self.backend.wiki.get_page(breadcrumb)
- if page:
- break
-
- self.render("wiki/files/detail.html", page=page, file=file)
- return
-
- size = self.get_argument_int("s", None)
-
- # Check if image should be resized
- if size and file.is_bitmap_image():
- blob = file.get_thumbnail(size)
- else:
- blob = file.blob
-
- # Set headers
- self.set_header("Content-Type", file.mimetype or "application/octet-stream")
- self.set_header("Content-Length", len(blob))
-
- # Set expires
- self.set_expires(3600)
-
- # Deliver content
- self.finish(blob)
-
-
class PageHandler(base.BaseHandler):
@property
def action(self):