diff options
author | Étienne Loks <etienne.loks@peacefrogs.net> | 2011-06-13 15:01:55 +0200 |
---|---|---|
committer | Étienne Loks <etienne.loks@peacefrogs.net> | 2011-06-13 15:01:55 +0200 |
commit | b4550095d45d58b5bfc5ba2a454529287f396415 (patch) | |
tree | d86b4ee3f87443c14e269964a16d7a29269a5ba5 /ishtar/furnitures/models.py | |
parent | 48b80343051bae90b13b20922311b7d331103425 (diff) | |
download | Ishtar-b4550095d45d58b5bfc5ba2a454529287f396415.tar.bz2 Ishtar-b4550095d45d58b5bfc5ba2a454529287f396415.zip |
Provide help for form fields (closes #481)
Diffstat (limited to 'ishtar/furnitures/models.py')
-rw-r--r-- | ishtar/furnitures/models.py | 67 |
1 files changed, 52 insertions, 15 deletions
diff --git a/ishtar/furnitures/models.py b/ishtar/furnitures/models.py index 6dda192ea..3d6e12536 100644 --- a/ishtar/furnitures/models.py +++ b/ishtar/furnitures/models.py @@ -26,7 +26,7 @@ from django.core.exceptions import ObjectDoesNotExist, ValidationError from django.core.validators import validate_slug from django.utils.translation import ugettext_lazy as _, ugettext from django.db.utils import DatabaseError -from django.utils.safestring import SafeUnicode +from django.utils.safestring import SafeUnicode, mark_safe from django.db.models import Q, Max from django.db.models.signals import m2m_changed @@ -130,6 +130,7 @@ class GeneralType(models.Model): validators=[validate_slug], max_length=30, unique=True) comment = models.TextField(_(u"Comment"), blank=True, null=True) available = models.BooleanField(_(u"Available")) + HELP_TEXT = u"" class Meta: abstract = True @@ -138,43 +139,79 @@ class GeneralType(models.Model): return self.label @classmethod - def get_types(cls, dct={}): + def get_help(cls, dct={}): + help_text = cls.HELP_TEXT + c_rank = -1 + help_items = u"\n" + for item in cls.get_types(dct=dct, instances=True): + if not item.comment: + continue + if c_rank > item.rank: + help_items += u"</dl>\n" + elif c_rank < item.rank: + help_items += u"<dl>\n" + c_rank = item.rank + help_items += u"<dt>%s</dt><dd>%s</dd>" % (item.label, + u"<br/>".join(item.comment.split('\n'))) + c_rank += 1 + if c_rank: + help_items += c_rank*u"</dl>" + return mark_safe(help_text + help_items) + + @classmethod + def get_types(cls, dct={}, instances=False): base_dct = dct.copy() if hasattr(cls, 'parent'): - return cls._get_parent_types(base_dct) - return cls._get_types(base_dct) + return cls._get_parent_types(base_dct, instances) + return cls._get_types(base_dct, instances) @classmethod - def _get_types(cls, dct={}): + def _get_types(cls, dct={}, instances=False): dct['available'] = True - yield ('', '--') + if not instances: + yield ('', '--') for item in cls.objects.filter(**dct).all(): - yield (item.pk, _(unicode(item))) + if instances: + item.rank = 0 + yield item + else: + yield (item.pk, _(unicode(item))) + + PREFIX = "› " @classmethod - def _get_childs(cls, item, dct, prefix=""): - prefix += "› " + def _get_childs(cls, item, dct, prefix=0, instances=False): + prefix += 1 dct['parent'] = item childs = cls.objects.filter(**dct) if hasattr(cls, 'order'): childs = childs.order_by('order') for child in childs.all(): - yield (child.pk, SafeUnicode(prefix + \ + if instances: + child.rank = prefix + yield child + else: + yield (child.pk, SafeUnicode(prefix*cls.PREFIX + \ unicode(_(unicode(child))) )) - for sub_child in cls._get_childs(child, dct, prefix): + for sub_child in cls._get_childs(child, dct, prefix, instances): yield sub_child @classmethod - def _get_parent_types(cls, dct={}): + def _get_parent_types(cls, dct={}, instances=False): dct['available'] = True - yield ('', '--') + if not instances: + yield ('', '--') dct['parent'] = None items = cls.objects.filter(**dct) if hasattr(cls, 'order'): items = items.order_by('order') for item in items.all(): - yield (item.pk, unicode(item)) - for child in cls._get_childs(item, dct): + if instances: + item.rank = 0 + yield item + else: + yield (item.pk, unicode(item)) + for child in cls._get_childs(item, dct, instances): yield child class HistoryError(Exception): |