__init__.py 3.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156
  1. from django.urls import path
  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. path(
  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. ("", "my/", "new/", "unread/", "subscribed/", "unapproved/"),
  38. )
  39. else:
  40. urlpatterns = threads_list_patterns(
  41. "threads",
  42. ForumThreadsList,
  43. (
  44. "threads/",
  45. "threads/my/",
  46. "threads/new/",
  47. "threads/unread/",
  48. "threads/subscribed/",
  49. "threads/unapproved/",
  50. ),
  51. )
  52. urlpatterns += threads_list_patterns(
  53. "category",
  54. CategoryThreadsList,
  55. (
  56. "c/<slug:slug>/<int:pk>/",
  57. "c/<slug:slug>/<int:pk>/my/",
  58. "c/<slug:slug>/<int:pk>/new/",
  59. "c/<slug:slug>/<int:pk>/unread/",
  60. "c/<slug:slug>/<int:pk>/subscribed/",
  61. "c/<slug:slug>/<int:pk>/unapproved/",
  62. ),
  63. )
  64. urlpatterns += threads_list_patterns(
  65. "private-threads",
  66. PrivateThreadsList,
  67. (
  68. "private-threads/",
  69. "private-threads/my/",
  70. "private-threads/new/",
  71. "private-threads/unread/",
  72. "private-threads/subscribed/",
  73. ),
  74. )
  75. def thread_view_patterns(prefix, view):
  76. urls = [
  77. path(
  78. "%s/<slug:slug>/<int:pk>/" % prefix[0],
  79. view.as_view(),
  80. name=prefix,
  81. ),
  82. path(
  83. "%s/<slug:slug>/<int:pk>/<int:page>/" % 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 = "%s/<slug:slug>/<int:pk>/post/<int:post>/" % prefix[0]
  96. url_name = "%s-post" % prefix
  97. urls.append(path(url_pattern, post_view.as_view(), name=url_name))
  98. for name, view in views.items():
  99. name = name.replace("_", "-")
  100. url_pattern = "%s/<slug:slug>/<int:pk>/%s/" % (
  101. prefix[0],
  102. name,
  103. )
  104. url_name = "%s-%s" % (prefix, name)
  105. urls.append(path(url_pattern, view.as_view(), name=url_name))
  106. return urls
  107. urlpatterns += goto_patterns(
  108. "thread",
  109. post=ThreadGotoPostView,
  110. last=ThreadGotoLastView,
  111. new=ThreadGotoNewView,
  112. best_answer=ThreadGotoBestAnswerView,
  113. unapproved=ThreadGotoUnapprovedView,
  114. )
  115. urlpatterns += goto_patterns(
  116. "private-thread",
  117. post=PrivateThreadGotoPostView,
  118. last=PrivateThreadGotoLastView,
  119. new=PrivateThreadGotoNewView,
  120. )
  121. urlpatterns += [
  122. path(
  123. "a/<slug:secret>/<int:pk>/",
  124. attachment_server,
  125. name="attachment",
  126. ),
  127. path(
  128. "a/thumb/<slug:secret>/<int:pk>/",
  129. attachment_server,
  130. name="attachment-thumbnail",
  131. kwargs={"thumbnail": True},
  132. ),
  133. ]