Introducing /nodes/preview-markdown
This endpoint receives POST requests and parses the content field returning it as Markdown. Useful for partially previewing node edits.
This commit is contained in:
parent
d30a11c8f7
commit
e6edd00e46
@ -17,6 +17,8 @@ from flask import request
|
|||||||
from flask import jsonify
|
from flask import jsonify
|
||||||
from flask import abort
|
from flask import abort
|
||||||
from flask_login import current_user
|
from flask_login import current_user
|
||||||
|
from flask_wtf.csrf import validate_csrf
|
||||||
|
|
||||||
import werkzeug.exceptions as wz_exceptions
|
import werkzeug.exceptions as wz_exceptions
|
||||||
from wtforms import SelectMultipleField
|
from wtforms import SelectMultipleField
|
||||||
from flask_login import login_required
|
from flask_login import login_required
|
||||||
@ -24,6 +26,7 @@ from jinja2.exceptions import TemplateNotFound
|
|||||||
|
|
||||||
from pillar.api.utils.authorization import check_permissions
|
from pillar.api.utils.authorization import check_permissions
|
||||||
from pillar.web.utils import caching
|
from pillar.web.utils import caching
|
||||||
|
from pillar.markdown import markdown
|
||||||
from pillar.web.nodes.forms import get_node_form
|
from pillar.web.nodes.forms import get_node_form
|
||||||
from pillar.web.nodes.forms import process_node_form
|
from pillar.web.nodes.forms import process_node_form
|
||||||
from pillar.web.nodes.custom.storage import StorageNode
|
from pillar.web.nodes.custom.storage import StorageNode
|
||||||
@ -475,6 +478,26 @@ def edit(node_id):
|
|||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
|
@blueprint.route('/preview-markdown', methods=['POST'])
|
||||||
|
@login_required
|
||||||
|
def preview_markdown():
|
||||||
|
"""Return the 'content' field of POST request as Markdown.
|
||||||
|
|
||||||
|
This endpoint can be called via AJAX in order to preview the
|
||||||
|
content of a node.
|
||||||
|
"""
|
||||||
|
|
||||||
|
if not validate_csrf(request.headers.get('X-CSRFToken')):
|
||||||
|
return jsonify({'status': 'fail',
|
||||||
|
'error': 'CRSF validation failed'}), 403
|
||||||
|
try:
|
||||||
|
content = request.form['content']
|
||||||
|
except KeyError:
|
||||||
|
return jsonify({'status': 'fail',
|
||||||
|
'error': 'The field "content" was not specified.'}), 400
|
||||||
|
return jsonify(content=markdown(content))
|
||||||
|
|
||||||
|
|
||||||
def ensure_lists_exist_as_empty(node_doc, node_type):
|
def ensure_lists_exist_as_empty(node_doc, node_type):
|
||||||
"""Ensures that any properties of type 'list' exist as empty lists.
|
"""Ensures that any properties of type 'list' exist as empty lists.
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user