markupmirror.widgets: 33 total statements, 37.9% covered

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

  1. from django import forms
  2. from django.contrib.admin.widgets import AdminTextareaWidget
  3. from markupmirror import settings
  4. from markupmirror.markup.base import markup_pool
  5. class MarkupMirrorTextarea(forms.Textarea):
  6. css_class = 'item-markupmirror'
  7. def __init__(self, attrs=None):
  8. """Adds the ``item-markupmirror`` class to the textarea to make sure
  9. it can be identified through JS.
  10. """
  11. css_class = self.css_class
  12. if attrs and 'class' in attrs:
  13. css_class += ' %s' % attrs.pop('class')
  14. default_attrs = {
  15. 'class': css_class,
  16. }
  17. if attrs:
  18. default_attrs.update(attrs)
  19. super(MarkupMirrorTextarea, self).__init__(attrs=default_attrs)
  20. def render(self, name, value, attrs=None):
  21. if value is not None and not isinstance(value, unicode):
  22. value = value.raw
  23. return super(MarkupMirrorTextarea, self).render(name, value, attrs)
  24. class Media:
  25. css = {
  26. 'all': settings.MARKUPMIRROR_CSS
  27. }
  28. js = settings.MARKUPMIRROR_JS
  29. class AdminMarkupMirrorTextareaWidget(
  30. MarkupMirrorTextarea, AdminTextareaWidget):
  31. css_class = 'vLargeTextField item-markupmirror'
  32. def render(self, name, value, attrs=None):
  33. """Adds attributes necessary to load CodeMirror for each textarea
  34. in the admin.
  35. """
  36. default_attrs = {}
  37. if value and hasattr(value, 'markup_type'):
  38. # get markup converter by type.
  39. # ``value`` is ``markupmirror.fields.Markup``.
  40. markup_type = value.markup_type
  41. markup = markup_pool.get_markup(markup_type)
  42. default_attrs = {
  43. 'data-mode': markup.codemirror_mode,
  44. 'data-markuptype': markup_type,
  45. }
  46. if attrs:
  47. default_attrs.update(attrs)
  48. return super(AdminMarkupMirrorTextareaWidget, self).render(
  49. name, value, default_attrs)
  50. __all__ = ('MarkupMirrorTextarea', 'AdminMarkupMirrorTextareaWidget')