cms.plugins.text.utils: 47 total statements, 0.0% covered

Generated: Wed 2013-03-13 10:33 CET

Source file: /media/Envs/Envs/filer-gallery/lib/python2.7/site-packages/cms/plugins/text/utils.py

Stats: 0 executed, 43 missed, 4 excluded, 41 ignored

  1. import re
  2. from django.template.defaultfilters import force_escape
  3. from cms.models import CMSPlugin
  4. from cms.plugins.utils import downcast_plugins
  5. OBJ_TAG_RE = re.compile(u"\{\{ plugin_object (\d+) \}\}")
  6. OBJ_ADMIN_RE_PATTERN = ur'<img [^>]*\bid="plugin_obj_(\d+)"[^>]*/?>'
  7. OBJ_ADMIN_RE = re.compile(OBJ_ADMIN_RE_PATTERN)
  8. def plugin_tags_to_admin_html(text):
  9. """
  10. Convert plugin object 'tags' into the form used to represent
  11. them in the admin text editor.
  12. """
  13. plugin_map = _plugin_dict(text, regex=OBJ_TAG_RE)
  14. def _tag_to_admin(m):
  15. plugin_id = int(m.groups()[0])
  16. try:
  17. obj = plugin_map[plugin_id]
  18. except KeyError:
  19. # Object must have been deleted. It cannot be rendered to
  20. # end user, or edited, so just remove it from the HTML
  21. # altogether
  22. return u''
  23. return u'<img src="%(icon_src)s" alt="%(icon_alt)s" title="%(icon_alt)s" id="plugin_obj_%(id)d" />' % \
  24. dict(id=plugin_id,
  25. icon_src=force_escape(obj.get_instance_icon_src()),
  26. icon_alt=force_escape(obj.get_instance_icon_alt()),
  27. )
  28. return OBJ_TAG_RE.sub(_tag_to_admin, text)
  29. def plugin_tags_to_id_list(text, regex=OBJ_ADMIN_RE):
  30. ids = regex.findall(text)
  31. return [int(id) for id in ids if id.isdigit()]
  32. def plugin_tags_to_user_html(text, context, placeholder):
  33. """
  34. Convert plugin object 'tags' into the form for public site.
  35. context is the template context to use, placeholder is the placeholder name
  36. """
  37. plugin_map = _plugin_dict(text)
  38. def _render_tag(m):
  39. plugin_id = int(m.groups()[0])
  40. try:
  41. obj = plugin_map[plugin_id]
  42. obj._render_meta.text_enabled = True
  43. except KeyError:
  44. # Object must have been deleted. It cannot be rendered to
  45. # end user so just remove it from the HTML altogether
  46. return u''
  47. return obj.render_plugin(context, placeholder)
  48. return OBJ_ADMIN_RE.sub(_render_tag, text)
  49. def plugin_admin_html_to_tags(text):
  50. """
  51. Convert the HTML used in admin editor to represent plugin objects
  52. into the 'tag' form used in the database
  53. """
  54. return OBJ_ADMIN_RE.sub(lambda m: u"{{ plugin_object %s }}" % m.groups()[0], text)
  55. def replace_plugin_tags(text, id_dict):
  56. def _replace_tag(m):
  57. plugin_id = int(m.groups()[0])
  58. new_id = id_dict.get(plugin_id)
  59. try:
  60. obj = CMSPlugin.objects.get(pk=new_id)
  61. except CMSPlugin.DoesNotExist:
  62. # Object must have been deleted. It cannot be rendered to
  63. # end user, or edited, so just remove it from the HTML
  64. # altogether
  65. return u''
  66. return u'<img src="%(icon_src)s" alt="%(icon_alt)s" title="%(icon_alt)s" id="plugin_obj_%(id)d" />' % \
  67. dict(id=new_id,
  68. icon_src=force_escape(obj.get_instance_icon_src()),
  69. icon_alt=force_escape(obj.get_instance_icon_alt()),
  70. )
  71. return OBJ_ADMIN_RE.sub(_replace_tag, text)
  72. def _plugin_dict(text, regex=OBJ_ADMIN_RE):
  73. plugin_ids = plugin_tags_to_id_list(text, regex)
  74. plugin_list = downcast_plugins(CMSPlugin.objects.filter(pk__in=plugin_ids), select_placeholder=True)
  75. return dict((plugin.pk, plugin) for plugin in plugin_list)