__init__.py 3.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126
  1. from django.conf import settings
  2. from django.conf.urls import url
  3. from ..views.attachment import attachment_server
  4. from ..views.goto import (
  5. ThreadGotoPostView, ThreadGotoLastView, ThreadGotoNewView, ThreadGotoUnapprovedView,
  6. PrivateThreadGotoPostView, PrivateThreadGotoLastView, PrivateThreadGotoNewView)
  7. from ..views.list import ForumThreads, CategoryThreads, PrivateThreads
  8. from ..views.thread import Thread, PrivateThread
  9. LISTS_TYPES = (
  10. 'all',
  11. 'my',
  12. 'new',
  13. 'unread',
  14. 'subscribed',
  15. 'unapproved',
  16. )
  17. def threads_list_patterns(prefix, view, patterns):
  18. urls = []
  19. for i, pattern in enumerate(patterns):
  20. if i > 0:
  21. url_name = '%s-%s' % (prefix, LISTS_TYPES[i])
  22. else:
  23. url_name = prefix
  24. urls.append(url(
  25. pattern,
  26. view.as_view(),
  27. name=url_name,
  28. kwargs={'list_type': LISTS_TYPES[i]},
  29. ))
  30. return urls
  31. if settings.MISAGO_THREADS_ON_INDEX:
  32. urlpatterns = threads_list_patterns('threads', ForumThreads, (
  33. r'^$',
  34. r'^my/$',
  35. r'^new/$',
  36. r'^unread/$',
  37. r'^subscribed/$',
  38. r'^unapproved/$',
  39. ))
  40. else:
  41. urlpatterns = threads_list_patterns('threads', ForumThreads, (
  42. r'^threads/$',
  43. r'^threads/my/$',
  44. r'^threads/new/$',
  45. r'^threads/unread/$',
  46. r'^threads/subscribed/$',
  47. r'^threads/unapproved/$',
  48. ))
  49. urlpatterns += threads_list_patterns('category', CategoryThreads, (
  50. r'^category/(?P<slug>[-a-zA-Z0-9]+)-(?P<pk>\d+)/$',
  51. r'^category/(?P<slug>[-a-zA-Z0-9]+)-(?P<pk>\d+)/my/$',
  52. r'^category/(?P<slug>[-a-zA-Z0-9]+)-(?P<pk>\d+)/new/$',
  53. r'^category/(?P<slug>[-a-zA-Z0-9]+)-(?P<pk>\d+)/unread/$',
  54. r'^category/(?P<slug>[-a-zA-Z0-9]+)-(?P<pk>\d+)/subscribed/$',
  55. r'^category/(?P<slug>[-a-zA-Z0-9]+)-(?P<pk>\d+)/unapproved/$',
  56. ))
  57. urlpatterns += threads_list_patterns('private-threads', PrivateThreads, (
  58. r'^private-threads/$',
  59. r'^private-threads/my/$',
  60. r'^private-threads/new/$',
  61. r'^private-threads/unread/$',
  62. r'^private-threads/subscribed/$',
  63. ))
  64. def thread_view_patterns(prefix, view):
  65. urls = [
  66. url(r'^%s/(?P<slug>[-a-zA-Z0-9]+)-(?P<pk>\d+)/$' % prefix, view.as_view(), name=prefix),
  67. url(r'^%s/(?P<slug>[-a-zA-Z0-9]+)-(?P<pk>\d+)/(?P<page>\d+)/$' % prefix, view.as_view(), name=prefix),
  68. ]
  69. return urls
  70. urlpatterns += thread_view_patterns('thread', Thread)
  71. urlpatterns += thread_view_patterns('private-thread', PrivateThread)
  72. def goto_patterns(prefix, **views):
  73. urls = []
  74. post_view = views.pop('post', None)
  75. if post_view:
  76. url_pattern = r'^%s/(?P<slug>[-a-zA-Z0-9]+)-(?P<pk>\d+)/post/(?P<post>\d+)/$' % prefix
  77. url_name = '%s-post' % prefix
  78. urls.append(url(url_pattern, post_view.as_view(), name=url_name))
  79. for name, view in views.items():
  80. url_pattern = r'^%s/(?P<slug>[-a-zA-Z0-9]+)-(?P<pk>\d+)/%s/$' % (prefix, name)
  81. url_name = '%s-%s' % (prefix, name)
  82. urls.append(url(url_pattern, view.as_view(), name=url_name))
  83. return urls
  84. urlpatterns += goto_patterns(
  85. 'thread',
  86. post=ThreadGotoPostView,
  87. last=ThreadGotoLastView,
  88. new=ThreadGotoNewView,
  89. unapproved=ThreadGotoUnapprovedView
  90. )
  91. urlpatterns += goto_patterns(
  92. 'private-thread',
  93. post=PrivateThreadGotoPostView,
  94. last=PrivateThreadGotoLastView,
  95. new=PrivateThreadGotoNewView,
  96. )
  97. urlpatterns += [
  98. url(r'^attachment/(?P<secret>[-a-zA-Z0-9]+)-(?P<pk>\d+)/', attachment_server, name='attachment'),
  99. url(r'^attachment/thumb/(?P<secret>[-a-zA-Z0-9]+)-(?P<pk>\d+)/', attachment_server, name='attachment-thumbnail', kwargs={'thumbnail': True}),
  100. ]