You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
psrGROUP/env/Lib/site-packages/mdeditor/widgets.py

65 lines
2.0 KiB

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

# -*- coding:utf-8 -*-
from __future__ import absolute_import
from django import forms
from django.template.loader import render_to_string
from django.utils.encoding import force_str
from django.utils.html import conditional_escape
from django.utils.safestring import mark_safe
try:
# Django >=1.7
from django.forms.utils import flatatt
except ImportError:
# Django <1.7
from django.forms.util import flatatt
from .configs import MDConfig
class MDEditorWidget(forms.Textarea):
"""
Widget providing Editor.md for Rich Text Editing.
see Editor.md docs: https://pandao.github.io/editor.md/examples/index.html
"""
def __init__(self, config_name='default', *args, **kwargs):
super(MDEditorWidget, self).__init__(*args, **kwargs)
# Setup config from defaults.
self.config = MDConfig(config_name)
def render(self, name, value, renderer=None, attrs=None):
"""
renderer: django2.1 新增加的参数此处不做应用赋值None做兼容处理
"""
if value is None:
value = ''
final_attrs = self.build_attrs(self.attrs, attrs, name=name)
return mark_safe(render_to_string('markdown.html', {
'final_attrs': flatatt(final_attrs),
'value': conditional_escape(force_str(value)),
'id': final_attrs['id'],
'config': self.config,
}))
def build_attrs(self, base_attrs, extra_attrs=None, **kwargs):
"""
Helper function for building an attribute dictionary.
This is combination of the same method from Django<=1.10 and Django1.11+
"""
attrs = dict(base_attrs, **kwargs)
if extra_attrs:
attrs.update(extra_attrs)
return attrs
def _get_media(self):
return forms.Media(
css={
"all": ("mdeditor/css/editormd.css",)
},
js=(
"mdeditor/js/jquery.min.js",
"mdeditor/js/editormd.min.js",
))
media = property(_get_media)