Generated: Wed 2012-04-11 05:19 CDT
Source file: /home/buechler/Sites/django-markupmirror/markupmirror/widgets.py
Stats: 11 executed, 18 missed, 4 excluded, 37 ignored
from django import forms
from django.contrib.admin.widgets import AdminTextareaWidget
from markupmirror import settings
from markupmirror.markup.base import markup_pool
class MarkupMirrorTextarea(forms.Textarea):
css_class = 'item-markupmirror'
def __init__(self, attrs=None):
"""Adds the ``item-markupmirror`` class to the textarea to make sure
it can be identified through JS.
"""
css_class = self.css_class
if attrs and 'class' in attrs:
css_class += ' %s' % attrs.pop('class')
default_attrs = {
'class': css_class,
}
if attrs:
default_attrs.update(attrs)
super(MarkupMirrorTextarea, self).__init__(attrs=default_attrs)
def render(self, name, value, attrs=None):
if value is not None and not isinstance(value, unicode):
value = value.raw
return super(MarkupMirrorTextarea, self).render(name, value, attrs)
class Media:
css = {
'all': settings.MARKUPMIRROR_CSS
}
js = settings.MARKUPMIRROR_JS
class AdminMarkupMirrorTextareaWidget(
MarkupMirrorTextarea, AdminTextareaWidget):
css_class = 'vLargeTextField item-markupmirror'
def render(self, name, value, attrs=None):
"""Adds attributes necessary to load CodeMirror for each textarea
in the admin.
"""
default_attrs = {}
if value and hasattr(value, 'markup_type'):
# get markup converter by type.
# ``value`` is ``markupmirror.fields.Markup``.
markup_type = value.markup_type
markup = markup_pool.get_markup(markup_type)
default_attrs = {
'data-mode': markup.codemirror_mode,
'data-markuptype': markup_type,
}
if attrs:
default_attrs.update(attrs)
return super(AdminMarkupMirrorTextareaWidget, self).render(
name, value, default_attrs)
__all__ = ('MarkupMirrorTextarea', 'AdminMarkupMirrorTextareaWidget')