settings.py 9.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288
  1. import os
  2. from django.apps import apps
  3. from django.conf import settings
  4. class _DefaultSettings:
  5. CRX_PROTECTED_MEDIA_URL = "/protected/"
  6. CRX_PROTECTED_MEDIA_ROOT = os.path.join(settings.BASE_DIR, "protected")
  7. CRX_PROTECTED_MEDIA_UPLOAD_WHITELIST = []
  8. CRX_PROTECTED_MEDIA_UPLOAD_BLACKLIST = [
  9. ".app",
  10. ".bat",
  11. ".exe",
  12. ".jar",
  13. ".php",
  14. ".pl",
  15. ".ps1",
  16. ".py",
  17. ".rb",
  18. ".sh",
  19. ]
  20. CRX_FRONTEND_BTN_SIZE_DEFAULT = ""
  21. CRX_FRONTEND_BTN_SIZE_CHOICES = [
  22. ("btn-sm", "Small"),
  23. ("", "Default"),
  24. ("btn-lg", "Large"),
  25. ]
  26. CRX_FRONTEND_BTN_STYLE_DEFAULT = "btn-primary"
  27. CRX_FRONTEND_BTN_STYLE_CHOICES = [
  28. ("btn-primary", "Primary"),
  29. ("btn-secondary", "Secondary"),
  30. ("btn-success", "Success"),
  31. ("btn-danger", "Danger"),
  32. ("btn-warning", "Warning"),
  33. ("btn-info", "Info"),
  34. ("btn-link", "Link"),
  35. ("btn-light", "Light"),
  36. ("btn-dark", "Dark"),
  37. ("btn-outline-primary", "Outline Primary"),
  38. ("btn-outline-secondary", "Outline Secondary"),
  39. ("btn-outline-success", "Outline Success"),
  40. ("btn-outline-danger", "Outline Danger"),
  41. ("btn-outline-warning", "Outline Warning"),
  42. ("btn-outline-info", "Outline Info"),
  43. ("btn-outline-light", "Outline Light"),
  44. ("btn-outline-dark", "Outline Dark"),
  45. ]
  46. CRX_FRONTEND_COL_SIZE_DEFAULT = ""
  47. CRX_FRONTEND_COL_SIZE_CHOICES = [
  48. ("", "Automatically size"),
  49. ("12", "Full row"),
  50. ("6", "Half - 1/2 column"),
  51. ("4", "Thirds - 1/3 column"),
  52. ("8", "Thirds - 2/3 column"),
  53. ("3", "Quarters - 1/4 column"),
  54. ("9", "Quarters - 3/4 column"),
  55. ("2", "Sixths - 1/6 column"),
  56. ("10", "Sixths - 5/6 column"),
  57. ("1", "Twelfths - 1/12 column"),
  58. ("5", "Twelfths - 5/12 column"),
  59. ("7", "Twelfths - 7/12 column"),
  60. ("11", "Twelfths - 11/12 column"),
  61. ]
  62. CRX_FRONTEND_COL_BREAK_DEFAULT = "md"
  63. CRX_FRONTEND_COL_BREAK_CHOICES = [
  64. ("", "Always expanded"),
  65. ("sm", "sm - Expand on small screens (phone, 576px) and larger"),
  66. ("md", "md - Expand on medium screens (tablet, 768px) and larger"),
  67. ("lg", "lg - Expand on large screens (laptop, 992px) and larger"),
  68. ("xl", "xl - Expand on extra large screens (wide monitor, 1200px)"),
  69. ]
  70. CRX_FRONTEND_NAVBAR_FORMAT_DEFAULT = ""
  71. CRX_FRONTEND_NAVBAR_FORMAT_CHOICES = [
  72. ("", "Default Bootstrap Navbar"),
  73. ("crx-navbar-center", "Centered logo at top"),
  74. ]
  75. CRX_FRONTEND_NAVBAR_COLOR_SCHEME_DEFAULT = "navbar-light"
  76. CRX_FRONTEND_NAVBAR_COLOR_SCHEME_CHOICES = [
  77. ("navbar-light", "Light - for use with a light-colored navbar"),
  78. ("navbar-dark", "Dark - for use with a dark-colored navbar"),
  79. ]
  80. CRX_FRONTEND_NAVBAR_CLASS_DEFAULT = "bg-light"
  81. CRX_FRONTEND_NAVBAR_COLLAPSE_MODE_DEFAULT = "navbar-expand-lg"
  82. CRX_FRONTEND_NAVBAR_COLLAPSE_MODE_CHOICES = [
  83. (
  84. "",
  85. "Never show menu - Always collapse menu behind a button",
  86. ),
  87. (
  88. "navbar-expand-sm",
  89. "sm - Show on small screens (phone size) and larger",
  90. ),
  91. (
  92. "navbar-expand-md",
  93. "md - Show on medium screens (tablet size) and larger",
  94. ),
  95. (
  96. "navbar-expand-lg",
  97. "lg - Show on large screens (laptop size) and larger",
  98. ),
  99. (
  100. "navbar-expand-xl",
  101. "xl - Show on extra large screens (desktop, wide monitor)",
  102. ),
  103. ]
  104. CRX_FRONTEND_THEME_DEFAULT = ""
  105. CRX_FRONTEND_THEME_CHOICES = [
  106. ("", "Default - Classic Bootstrap"),
  107. ("cerulean", "Cerulean - A calm blue sky"),
  108. ("cosmo", "Cosmo - An ode to Metro"),
  109. ("cyborg", "Cyborg - Jet black and electric blue"),
  110. ("darkly", "Darkly - Flatly in night mode"),
  111. ("flatly", "Flatly - Flat and modern"),
  112. ("journal", "Journal - Crisp like a new sheet of paper"),
  113. ("litera", "Litera - The medium is the message"),
  114. ("lumen", "Lumen - Light and shadow"),
  115. ("lux", "Lux - A touch of class"),
  116. ("materia", "Materia - Material is the metaphor"),
  117. ("minty", "Minty - A fresh feel"),
  118. ("morph", "Morph - A neumorphic layer"),
  119. ("pulse", "Pulse - A trace of purple"),
  120. ("quartz", "Quartz - A glassmorphic layer"),
  121. ("sandstone", "Sandstone - A touch of warmth"),
  122. ("simplex", "Simplex - Mini and minimalist"),
  123. ("sketchy", "Sketchy - A hand-drawn look for mockups and mirth"),
  124. ("slate", "Slate - Shades of gunmetal gray"),
  125. ("solar", "Solar - A dark spin on Solarized"),
  126. ("spacelab", "Spacelab - Silvery and sleek"),
  127. ("superhero", "Superhero - The brave and the blue"),
  128. ("united", "United - Ubuntu orange and unique font"),
  129. ("vapor", "Vapor - A cyberpunk aesthetic"),
  130. ("yeti", "Yeti - A friendly foundation"),
  131. ("zephyr", "Zephyr - Breezy and beautiful"),
  132. ]
  133. CRX_FRONTEND_TEMPLATES_BLOCKS = {
  134. "cardblock": [
  135. (
  136. "coderedcms/blocks/card_block.html",
  137. "Card",
  138. ),
  139. (
  140. "coderedcms/blocks/card_head.html",
  141. "Card with header",
  142. ),
  143. (
  144. "coderedcms/blocks/card_foot.html",
  145. "Card with footer",
  146. ),
  147. (
  148. "coderedcms/blocks/card_head_foot.html",
  149. "Card with header and footer",
  150. ),
  151. (
  152. "coderedcms/blocks/card_blurb.html",
  153. "Blurb - rounded image and no border",
  154. ),
  155. (
  156. "coderedcms/blocks/card_img.html",
  157. "Cover image - use image as background",
  158. ),
  159. ],
  160. "cardgridblock": [
  161. (
  162. "coderedcms/blocks/cardgrid_group.html",
  163. "Card group - attached cards of equal size",
  164. ),
  165. (
  166. "coderedcms/blocks/cardgrid_deck.html",
  167. "Card deck - separate cards of equal size",
  168. ),
  169. (
  170. "coderedcms/blocks/cardgrid_columns.html",
  171. "Card masonry - fluid brick pattern",
  172. ),
  173. ],
  174. # DEPRECATED: Remove in 3.0.
  175. "pagelistblock": [
  176. (
  177. "coderedcms/blocks/pagelist_block.html",
  178. "General, simple list",
  179. ),
  180. (
  181. "coderedcms/blocks/pagelist_list_group.html",
  182. "General, list group navigation panel",
  183. ),
  184. (
  185. "coderedcms/blocks/pagelist_article_media.html",
  186. "Article, media format",
  187. ),
  188. (
  189. "coderedcms/blocks/pagelist_article_card_group.html",
  190. "Article, card group - attached cards of equal size",
  191. ),
  192. (
  193. "coderedcms/blocks/pagelist_article_card_deck.html",
  194. "Article, card deck - separate cards of equal size",
  195. ),
  196. (
  197. "coderedcms/blocks/pagelist_article_card_columns.html",
  198. "Article, card masonry - fluid brick pattern",
  199. ),
  200. ],
  201. # DEPRECATED: Remove in 3.0
  202. "pagepreviewblock": [
  203. (
  204. "coderedcms/blocks/pagepreview_card.html",
  205. "Card",
  206. ),
  207. (
  208. "coderedcms/blocks/pagepreview_form.html",
  209. "Form inputs",
  210. ),
  211. ],
  212. # templates that are available for all block types
  213. "*": [
  214. ("", "Default"),
  215. ],
  216. }
  217. CRX_FRONTEND_TEMPLATES_PAGES = {
  218. # templates that are available for all page types
  219. "*": [
  220. (
  221. "",
  222. "Default",
  223. ),
  224. (
  225. "coderedcms/pages/web_page.html",
  226. "Web page showing title and cover image",
  227. ),
  228. (
  229. "coderedcms/pages/web_page_notitle.html",
  230. "Web page without title and cover image",
  231. ),
  232. (
  233. "coderedcms/pages/home_page.html",
  234. "Home page without title and cover image",
  235. ),
  236. (
  237. "coderedcms/pages/base.html",
  238. "Blank page - no navbar or footer",
  239. ),
  240. ],
  241. }
  242. CRX_BANNER = None
  243. CRX_BANNER_BACKGROUND = "#ff0"
  244. CRX_BANNER_TEXT_COLOR = "#000"
  245. CRX_DISABLE_ANALYTICS = False
  246. CRX_DISABLE_LAYOUT = False
  247. CRX_DISABLE_NAVBAR = False
  248. CRX_DISABLE_FOOTER = False
  249. def __getattribute__(self, attr: str):
  250. # First load from Django settings.
  251. # If it does not exist, load from _DefaultSettings.
  252. try:
  253. return getattr(settings, attr)
  254. except AttributeError:
  255. return super().__getattribute__(attr)
  256. crx_settings = _DefaultSettings()
  257. # If the older django-bootstrap4 is the only version listed in INSTALLED_APPS,
  258. # use it for compatibility. Otherwise use django-bootstrap5 which is a
  259. # dependency of coderedcms.
  260. if apps.is_installed("bootstrap4") and not apps.is_installed(
  261. "django_bootstrap5"
  262. ):
  263. import bootstrap4.bootstrap as bootstrap
  264. else:
  265. import django_bootstrap5.core as bootstrap
  266. get_bootstrap_setting = bootstrap.get_bootstrap_setting