diff --git a/src/rstpreview/controllers.py b/src/rstpreview/controllers.py index 0148ef0..8d79976 100644 --- a/src/rstpreview/controllers.py +++ b/src/rstpreview/controllers.py @@ -23,10 +23,6 @@ class BaseController(milla.controllers.Controller): class IndexController(BaseController): - DOCUTILS_SETTINGS = { - 'syntax_highlight': 'short', - } - allowed_methods = ('GET', 'HEAD', 'POST') def __call__(self, request): @@ -39,19 +35,38 @@ class IndexController(BaseController): def POST(self, request): response = request.ResponseClass() - data = dict(request.POST) - content = data.get('content') - if content: - parts = docutils.core.publish_parts( - source=content, - writer_name='html4css1', - settings_overrides=self.DOCUTILS_SETTINGS, - ) - preview = parts['html_body'] - else: - preview = '' + try: + content = request.POST['content'] + preview = PreviewController.rst2html(content) + except KeyError: + content = preview = '' response.text = self.render('index.html.j2', **dict( content=content, preview=preview, )) return response + + +class PreviewController(BaseController): + + DOCUTILS_SETTINGS = { + 'syntax_highlight': 'short', + } + + allowed_methods = ('HEAD', 'POST') + + def __call__(self, request): + return getattr(self, request.method)(request) + + @classmethod + def rst2html(cls, source): + return docutils.core.publish_parts( + source=source, + writer_name='html4css1', + settings_overrides=cls.DOCUTILS_SETTINGS, + )['html_body'] + + def POST(self, request): + response = request.ResponseClass() + response.text = self.rst2html(request.text) + return response diff --git a/src/rstpreview/routes.py b/src/rstpreview/routes.py index 9e4b013..0d67a79 100644 --- a/src/rstpreview/routes.py +++ b/src/rstpreview/routes.py @@ -5,3 +5,4 @@ from milla.dispatch import routing router = routing.Router() router.add_route('/', controllers.IndexController()) +router.add_route('/preview', controllers.PreviewController()) diff --git a/src/rstpreview/templates/index.html.j2 b/src/rstpreview/templates/index.html.j2 index 3b3a1f6..4e4aa39 100644 --- a/src/rstpreview/templates/index.html.j2 +++ b/src/rstpreview/templates/index.html.j2 @@ -35,7 +35,7 @@ pre {