rapid_menu.py 1.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263
  1. __author__ = 'marcos.medeiros'
  2. import locale
  3. from django import template
  4. from django.utils.safestring import mark_safe
  5. from django.utils.html import escape
  6. from rapid.views import registry, ModelData
  7. register = template.Library()
  8. def _app_menu(app, request):
  9. models = list(app.models)
  10. models.sort(key=lambda m: ModelData(m).model_name(), cmp=locale.strcoll)
  11. sub = '<li class="menu-group"><span>%s</span><ul class="submenu">\n' % escape(app.menu_name.capitalize())
  12. has_model = False
  13. for m in models:
  14. st = registry.model_entry(m).get('list')
  15. if st:
  16. read = st.permission_set(request)
  17. if read and read.exists():
  18. has_model = True
  19. cd = ModelData(st.model)
  20. sub += '<li><a href="%s">%s</a></li>\n' % (
  21. registry.get_url_of_action(m, 'list'),
  22. escape(cd.model_name_plural().title()),
  23. )
  24. sub += '</ul></li>\n'
  25. if has_model:
  26. return sub
  27. return ""
  28. @register.simple_tag
  29. def menu(request):
  30. ret = u"""
  31. <nav id="menu">
  32. <style scoped>
  33. nav li.menu-group{
  34. cursor: pointer;
  35. }
  36. nav li.menu-group.collapsed > ul{
  37. display: none;
  38. }
  39. </style>
  40. """
  41. ret += '<ul class="menu">\n'
  42. mm = registry.modules()
  43. mm.sort(key=lambda a: a.menu_name, cmp=locale.strcoll)
  44. for m in mm:
  45. ret += _app_menu(m, request)
  46. ret += u"""
  47. </ul>
  48. <script>
  49. $(document).ready(function(){
  50. $("nav li.menu-group").addClass("collapsed");
  51. $("nav li.menu-group > span").click(function(){$(this).parent().toggleClass("collapsed")});
  52. });
  53. </script>
  54. </nav>
  55. """
  56. return mark_safe(ret)