mirror of
https://github.com/Hopiu/django-markdownx.git
synced 2026-05-05 12:04:42 +00:00
Cleaned up the the new Django 1.11+ compatibility code and added documentations template. Also, `add_markdownx_attrs` now returns the updated dict with the output used for updating widget attributes.
133 lines
3.1 KiB
Python
Executable file
133 lines
3.1 KiB
Python
Executable file
from django import VERSION as DJANGO_VERSION
|
|
from django import forms
|
|
from django.template.loader import get_template
|
|
from django.contrib.admin import widgets
|
|
from django.conf import settings
|
|
|
|
from .settings import (
|
|
MARKDOWNX_EDITOR_RESIZABLE,
|
|
MARKDOWNX_URLS_PATH,
|
|
MARKDOWNX_UPLOAD_URLS_PATH,
|
|
MARKDOWNX_SERVER_CALL_LATENCY
|
|
)
|
|
|
|
|
|
DEBUG = getattr(settings, 'DEBUG', False)
|
|
|
|
|
|
class MarkdownxWidget(forms.Textarea):
|
|
"""
|
|
|
|
"""
|
|
|
|
if DJANGO_VERSION[:2] >= (1, 11):
|
|
template_name = 'markdownx/widget2.html'
|
|
|
|
def get_context(self, name, value, attrs=None):
|
|
"""
|
|
|
|
:param name:
|
|
:type name:
|
|
:param value:
|
|
:type value:
|
|
:param attrs:
|
|
:type attrs:
|
|
:return:
|
|
:rtype:
|
|
"""
|
|
if not DJANGO_VERSION[:2] >= (1, 11):
|
|
return super(MarkdownxWidget, self).get_context(name, value, attrs)
|
|
|
|
if attrs is None:
|
|
attrs = {}
|
|
|
|
attrs.update(self.add_markdownx_attrs(attrs))
|
|
|
|
return super(MarkdownxWidget, self).get_context(name, value, attrs)
|
|
|
|
|
|
|
|
def render(self, name, value, attrs=None, renderer=None):
|
|
"""
|
|
|
|
:param name:
|
|
:type name:
|
|
:param value:
|
|
:type value:
|
|
:param attrs:
|
|
:type attrs:
|
|
:param renderer:
|
|
:type renderer:
|
|
:return:
|
|
:rtype:
|
|
"""
|
|
if not DJANGO_VERSION[:2] < (1, 11):
|
|
return super(MarkdownxWidget, self).render(name, value, attrs, renderer)
|
|
|
|
attrs = self.build_attrs(attrs, name=name)
|
|
attrs.update(self.add_markdownx_attrs(attrs))
|
|
|
|
widget = super(MarkdownxWidget, self).render(name, value, attrs, renderer)
|
|
|
|
template = get_template('markdownx/widget.html')
|
|
|
|
return template.render({
|
|
'markdownx_editor': widget,
|
|
})
|
|
|
|
@staticmethod
|
|
def add_markdownx_attrs(attrs):
|
|
"""
|
|
|
|
:param attrs:
|
|
:type attrs:
|
|
:return:
|
|
:rtype:
|
|
"""
|
|
if 'class' in attrs:
|
|
attrs['class'] += ' markdownx-editor'
|
|
else:
|
|
attrs.update({
|
|
'class': 'markdownx-editor'
|
|
})
|
|
|
|
attrs.update({
|
|
'data-markdownx-editor-resizable': MARKDOWNX_EDITOR_RESIZABLE,
|
|
'data-markdownx-urls-path': MARKDOWNX_URLS_PATH,
|
|
'data-markdownx-upload-urls-path': MARKDOWNX_UPLOAD_URLS_PATH,
|
|
'data-markdownx-latency': MARKDOWNX_SERVER_CALL_LATENCY
|
|
})
|
|
|
|
return attrs
|
|
|
|
class Media:
|
|
"""
|
|
|
|
"""
|
|
|
|
css = {
|
|
'all': {'markdownx/css/markdownx.css', },
|
|
}
|
|
|
|
js = {
|
|
'markdownx/js/' + ('markdownx.min.js' if not DEBUG else 'markdownx.js'),
|
|
}
|
|
|
|
|
|
class AdminMarkdownxWidget(MarkdownxWidget, widgets.AdminTextareaWidget):
|
|
"""
|
|
|
|
"""
|
|
|
|
class Media:
|
|
"""
|
|
|
|
"""
|
|
|
|
css = {
|
|
'all': {'markdownx/admin/css/markdownx.css', }
|
|
}
|
|
|
|
js = {
|
|
'markdownx/js/' + ('markdownx.min.js' if not DEBUG else 'markdownx.js'),
|
|
}
|