Source code for deform_markdown

# -*- coding: utf-8 -*-
import json

from colander import null
from deform.widget import default_resource_registry
from deform.widget import TextAreaWidget


__version__ = '0.2.8'


[docs]class MarkdownTextAreaWidget(TextAreaWidget): """Renders a ``<textarea>`` widget with the `simplemde` markdown editor. To use this widget the `simple-markdown-editor` library must be provided in the page where the widget is rendered. A version of it is included in the ``static`` directory. """ template = 'markdown' readonly_template = 'readonly/markdown' strip = True requirements = (('simplemde', None),) default_options = (('height', 240), ('width', 0), ('forceSync', 'true'), ('indentWithTabs', 'false'), ('autosave', {'enabled': 'true', 'uniqueid': None, }), ) """Default options passed to simplemde.""" options = None """Customize default options."""
[docs] def serialize(self, field, cstruct, **kw): if cstruct in (null, None): cstruct = '' readonly = kw.get('readonly', self.readonly) kw = self._add_options(kw) values = self.get_template_values(field, cstruct, kw) template = readonly and self.readonly_template or self.template return field.renderer(template, **values)
def _add_options(self, kw): options = dict(self.default_options) from datetime import datetime uniqueid = hash(datetime.now()) options['autosave']['uniqueid'] = uniqueid options_overrides = dict(kw.get('options', self.options or {})) options.update(options_overrides) kw['simplemde_options'] = json.dumps(options) return kw
default_resource_registry.set_css_resources( 'simplemde', None, 'deform_markdown:static/css/simplemde.min.css') default_resource_registry.set_js_resources( 'simplemde', None, 'deform_markdown:static/scripts/simplemde.min.js')
[docs]def includeme(config): # pragma: no cover """Pyramid integration: register static view for widget resources.""" year = 86400 * 365 config.add_static_view('deformmarkdownstatic', 'deform_markdown:static', cache_max_age=year)