__init__.py 4.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158
  1. from django.conf.urls import url
  2. from ...conf import settings
  3. from ..views.attachment import attachment_server
  4. from ..views.goto import (
  5. ThreadGotoPostView,
  6. ThreadGotoLastView,
  7. ThreadGotoNewView,
  8. ThreadGotoBestAnswerView,
  9. ThreadGotoUnapprovedView,
  10. PrivateThreadGotoPostView,
  11. PrivateThreadGotoLastView,
  12. PrivateThreadGotoNewView,
  13. )
  14. from ..views.list import ForumThreadsList, CategoryThreadsList, PrivateThreadsList
  15. from ..views.thread import ThreadView, PrivateThreadView
  16. LISTS_TYPES = ("all", "my", "new", "unread", "subscribed", "unapproved")
  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(
  25. url(
  26. pattern,
  27. view.as_view(),
  28. name=url_name,
  29. kwargs={"list_type": LISTS_TYPES[i]},
  30. )
  31. )
  32. return urls
  33. if settings.MISAGO_THREADS_ON_INDEX:
  34. urlpatterns = threads_list_patterns(
  35. "threads",
  36. ForumThreadsList,
  37. (r"^$", r"^my/$", r"^new/$", r"^unread/$", r"^subscribed/$", r"^unapproved/$"),
  38. )
  39. else:
  40. urlpatterns = threads_list_patterns(
  41. "threads",
  42. ForumThreadsList,
  43. (
  44. r"^threads/$",
  45. r"^threads/my/$",
  46. r"^threads/new/$",
  47. r"^threads/unread/$",
  48. r"^threads/subscribed/$",
  49. r"^threads/unapproved/$",
  50. ),
  51. )
  52. urlpatterns += threads_list_patterns(
  53. "category",
  54. CategoryThreadsList,
  55. (
  56. r"^c/(?P<slug>[-a-zA-Z0-9]+)/(?P<pk>\d+)/$",
  57. r"^c/(?P<slug>[-a-zA-Z0-9]+)/(?P<pk>\d+)/my/$",
  58. r"^c/(?P<slug>[-a-zA-Z0-9]+)/(?P<pk>\d+)/new/$",
  59. r"^c/(?P<slug>[-a-zA-Z0-9]+)/(?P<pk>\d+)/unread/$",
  60. r"^c/(?P<slug>[-a-zA-Z0-9]+)/(?P<pk>\d+)/subscribed/$",
  61. r"^c/(?P<slug>[-a-zA-Z0-9]+)/(?P<pk>\d+)/unapproved/$",
  62. ),
  63. )
  64. urlpatterns += threads_list_patterns(
  65. "private-threads",
  66. PrivateThreadsList,
  67. (
  68. r"^private-threads/$",
  69. r"^private-threads/my/$",
  70. r"^private-threads/new/$",
  71. r"^private-threads/unread/$",
  72. r"^private-threads/subscribed/$",
  73. ),
  74. )
  75. def thread_view_patterns(prefix, view):
  76. urls = [
  77. url(
  78. r"^%s/(?P<slug>[-a-zA-Z0-9]+)/(?P<pk>\d+)/$" % prefix[0],
  79. view.as_view(),
  80. name=prefix,
  81. ),
  82. url(
  83. r"^%s/(?P<slug>[-a-zA-Z0-9]+)/(?P<pk>\d+)/(?P<page>\d+)/$" % prefix[0],
  84. view.as_view(),
  85. name=prefix,
  86. ),
  87. ]
  88. return urls
  89. urlpatterns += thread_view_patterns("thread", ThreadView)
  90. urlpatterns += thread_view_patterns("private-thread", PrivateThreadView)
  91. def goto_patterns(prefix, **views):
  92. urls = []
  93. post_view = views.pop("post", None)
  94. if post_view:
  95. url_pattern = (
  96. r"^%s/(?P<slug>[-a-zA-Z0-9]+)/(?P<pk>\d+)/post/(?P<post>\d+)/$" % prefix[0]
  97. )
  98. url_name = "%s-post" % prefix
  99. urls.append(url(url_pattern, post_view.as_view(), name=url_name))
  100. for name, view in views.items():
  101. name = name.replace("_", "-")
  102. url_pattern = r"^%s/(?P<slug>[-a-zA-Z0-9]+)/(?P<pk>\d+)/%s/$" % (
  103. prefix[0],
  104. name,
  105. )
  106. url_name = "%s-%s" % (prefix, name)
  107. urls.append(url(url_pattern, view.as_view(), name=url_name))
  108. return urls
  109. urlpatterns += goto_patterns(
  110. "thread",
  111. post=ThreadGotoPostView,
  112. last=ThreadGotoLastView,
  113. new=ThreadGotoNewView,
  114. best_answer=ThreadGotoBestAnswerView,
  115. unapproved=ThreadGotoUnapprovedView,
  116. )
  117. urlpatterns += goto_patterns(
  118. "private-thread",
  119. post=PrivateThreadGotoPostView,
  120. last=PrivateThreadGotoLastView,
  121. new=PrivateThreadGotoNewView,
  122. )
  123. urlpatterns += [
  124. url(
  125. r"^a/(?P<secret>[-a-zA-Z0-9]+)/(?P<pk>\d+)/",
  126. attachment_server,
  127. name="attachment",
  128. ),
  129. url(
  130. r"^a/thumb/(?P<secret>[-a-zA-Z0-9]+)/(?P<pk>\d+)/",
  131. attachment_server,
  132. name="attachment-thumbnail",
  133. kwargs={"thumbnail": True},
  134. ),
  135. ]