Browse Source

Implement basic API for Markdown Preview

Peter Justin 7 years ago
parent
commit
85881f1cb2
1 changed files with 23 additions and 1 deletions
  1. 23 1
      flaskbb/forum/views.py

+ 23 - 1
flaskbb/forum/views.py

@@ -21,7 +21,8 @@ from flask_login import current_user, login_required
 from pluggy import HookimplMarker
 from pluggy import HookimplMarker
 from sqlalchemy import asc, desc
 from sqlalchemy import asc, desc
 
 
-from flaskbb.extensions import allows, db
+from flaskbb.extensions import allows, db, csrf
+from flaskbb.markup import make_renderer
 from flaskbb.forum.forms import (NewTopicForm, QuickreplyForm, ReplyForm,
 from flaskbb.forum.forms import (NewTopicForm, QuickreplyForm, ReplyForm,
                                  ReportForm, SearchPageForm, UserSearchForm)
                                  ReportForm, SearchPageForm, UserSearchForm)
 from flaskbb.forum.models import (Category, Forum, ForumsRead, Post, Topic,
 from flaskbb.forum.models import (Category, Forum, ForumsRead, Post, Topic,
@@ -1060,6 +1061,22 @@ class UnhidePost(MethodView):
         return redirect(post.topic.url)
         return redirect(post.topic.url)
 
 
 
 
+class MarkdownPreview(MethodView):
+    decorators = [csrf.exempt]
+
+    def post(self):
+        text = request.data.decode("utf-8")
+
+        render_cls = current_app.pluggy.hook.\
+            flaskbb_load_post_markdown_class(
+                app=current_app
+            )
+
+        renderer = make_renderer(render_cls)
+        preview = renderer(text)
+        return preview
+
+
 @impl(tryfirst=True)
 @impl(tryfirst=True)
 def flaskbb_load_blueprints(app):
 def flaskbb_load_blueprints(app):
     forum = Blueprint("forum", __name__)
     forum = Blueprint("forum", __name__)
@@ -1237,5 +1254,10 @@ def flaskbb_load_blueprints(app):
         routes=["/post/<int:post_id>/unhide"],
         routes=["/post/<int:post_id>/unhide"],
         view_func=UnhidePost.as_view('unhide_post')
         view_func=UnhidePost.as_view('unhide_post')
     )
     )
+    register_view(
+        forum,
+        routes=["/markdown"],
+        view_func=MarkdownPreview.as_view("markdown_preview")
+    )
 
 
     app.register_blueprint(forum, url_prefix=app.config["FORUM_URL_PREFIX"])
     app.register_blueprint(forum, url_prefix=app.config["FORUM_URL_PREFIX"])