Source code for flask_simplemde

# -*- coding: utf-8 -*-
# Copyright (c) 2016, Philip Xu <pyx@xrefactor.com>
# License: BSD New, see LICENSE for details.
"""Flask-SimpleMDE - a Flask extension for SimpleMDE Markdown Editor"""

from flask import Blueprint, Markup, current_app, url_for

__version__ = '0.3.1.dev0'
__all__ = ['SimpleMDE']

CDN_PREFIX = '//cdn.jsdelivr.net/simplemde/latest/'

CSS = 'simplemde.min.css'
CSS_LINK_TEMPLATE = '<link rel="stylesheet" href="%s">'
CSS_CDN_LINK = CSS_LINK_TEMPLATE % (CDN_PREFIX + CSS)

JS = 'simplemde.min.js'
JS_LINK_TEMPLATE = '<script src="%s"></script>'
JS_CDN_LINK = JS_LINK_TEMPLATE % (CDN_PREFIX + JS)

JS_LOAD = """<script>
var simplemde = new SimpleMDE();
</script>
"""

JS_LOAD_IIFE = """<script>
(function () {
  var simplemde = new SimpleMDE();
})();
</script>
"""

JS_LOAD_WITH_ID = """<script>
var simplemde = new SimpleMDE({ element: document.getElementById("%s") });
</script>
"""

JS_LOAD_WITH_ID_IIFE = """<script>
(function () {
    var simplemde = new SimpleMDE({ element: document.getElementById("%s") });
})();
</script>
"""

EXTENSION = 'simplemde'
STATIC_ENDPOINT = EXTENSION + '.static'


[docs]class SimpleMDE(object): """Flask-SimpleMDE extension provides links to SimpleMDE's static assets. """ def __init__(self, app=None): self.app = app if app is not None: self.init_app(app)
[docs] def init_app(self, app): """create and register a blueprint with the Flask application. :param app: Flask application instance """ app.config.setdefault('SIMPLEMDE_JS_IIFE', True) app.config.setdefault('SIMPLEMDE_USE_CDN', True) simplemde = Blueprint( EXTENSION, __name__, static_folder='static', static_url_path=app.static_url_path + '/' + EXTENSION) app.register_blueprint(simplemde) if not hasattr(app, 'extensions'): app.extensions = {} app.extensions[EXTENSION] = self app.context_processor(lambda: {EXTENSION: self})
@property def css(self): """property that will be rendered as :code:`<link>` tags for css""" if current_app.config['SIMPLEMDE_USE_CDN']: link = CSS_CDN_LINK else: link = CSS_LINK_TEMPLATE % url_for(STATIC_ENDPOINT, filename=CSS) return Markup(link) @property def js(self): """property that will be rendered as :code:`<style>` tags for js""" if current_app.config['SIMPLEMDE_USE_CDN']: link = JS_CDN_LINK else: link = JS_LINK_TEMPLATE % url_for(STATIC_ENDPOINT, filename=JS) return Markup(link) @property def load(self): """property that will be rendered as javascript loading code""" if current_app.config['SIMPLEMDE_JS_IIFE']: code = JS_LOAD_IIFE else: code = JS_LOAD return Markup(code)
[docs] def load_id(self, id): """method that renders javascript loading code for specific id""" if current_app.config['SIMPLEMDE_JS_IIFE']: code = JS_LOAD_WITH_ID_IIFE else: code = JS_LOAD_WITH_ID return Markup(code % id)