settings.py 8.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205
  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. ('', 'Never show menu - Always collapse menu behind a button'),
  84. ('navbar-expand-sm', 'sm - Show on small screens (phone size) and larger'),
  85. ('navbar-expand-md', 'md - Show on medium screens (tablet size) and larger'),
  86. ('navbar-expand-lg', 'lg - Show on large screens (laptop size) and larger'),
  87. ('navbar-expand-xl', 'xl - Show on extra large screens (desktop, wide monitor)'),
  88. ]
  89. CRX_FRONTEND_THEME_DEFAULT = ''
  90. CRX_FRONTEND_THEME_CHOICES = [
  91. ('', 'Default - Classic Bootstrap'),
  92. ('cerulean', 'Cerulean - A calm blue sky'),
  93. ('cosmo', 'Cosmo - An ode to Metro'),
  94. ('cyborg', 'Cyborg - Jet black and electric blue'),
  95. ('darkly', 'Darkly - Flatly in night mode'),
  96. ('flatly', 'Flatly - Flat and modern'),
  97. ('journal', 'Journal - Crisp like a new sheet of paper'),
  98. ('litera', 'Litera - The medium is the message'),
  99. ('lumen', 'Lumen - Light and shadow'),
  100. ('lux', 'Lux - A touch of class'),
  101. ('materia', 'Materia - Material is the metaphor'),
  102. ('minty', 'Minty - A fresh feel'),
  103. ('morph', 'Morph - A neumorphic layer'),
  104. ('pulse', 'Pulse - A trace of purple'),
  105. ('quartz', 'A glassmorphic layer'),
  106. ('sandstone', 'Sandstone - A touch of warmth'),
  107. ('simplex', 'Simplex - Mini and minimalist'),
  108. ('sketchy', 'Sketchy - A hand-drawn look for mockups and mirth'),
  109. ('slate', 'Slate - Shades of gunmetal gray'),
  110. ('solar', 'Solar - A dark spin on Solarized'),
  111. ('spacelab', 'Spacelab - Silvery and sleek'),
  112. ('superhero', 'Superhero - The brave and the blue'),
  113. ('united', 'United - Ubuntu orange and unique font'),
  114. ('vapor', 'A cyberpunk aesthetic'),
  115. ('yeti', 'Yeti - A friendly foundation'),
  116. ('zephyr', 'Breezy and beautiful'),
  117. ]
  118. CRX_FRONTEND_TEMPLATES_BLOCKS = {
  119. 'cardblock': [
  120. ('coderedcms/blocks/card_block.html', 'Card'),
  121. ('coderedcms/blocks/card_head.html', 'Card with header'),
  122. ('coderedcms/blocks/card_foot.html', 'Card with footer'),
  123. ('coderedcms/blocks/card_head_foot.html', 'Card with header and footer'),
  124. ('coderedcms/blocks/card_blurb.html', 'Blurb - rounded image and no border'),
  125. ('coderedcms/blocks/card_img.html', 'Cover image - use image as background'),
  126. ],
  127. 'cardgridblock': [
  128. ('coderedcms/blocks/cardgrid_group.html', 'Card group - attached cards of equal size'),
  129. ('coderedcms/blocks/cardgrid_deck.html', 'Card deck - separate cards of equal size'),
  130. ('coderedcms/blocks/cardgrid_columns.html', 'Card masonry - fluid brick pattern'),
  131. ],
  132. 'pagelistblock': [
  133. ('coderedcms/blocks/pagelist_block.html', 'General, simple list'),
  134. ('coderedcms/blocks/pagelist_list_group.html', 'General, list group navigation panel'),
  135. ('coderedcms/blocks/pagelist_article_media.html', 'Article, media format'),
  136. ('coderedcms/blocks/pagelist_article_card_group.html',
  137. 'Article, card group - attached cards of equal size'),
  138. ('coderedcms/blocks/pagelist_article_card_deck.html',
  139. 'Article, card deck - separate cards of equal size'),
  140. ('coderedcms/blocks/pagelist_article_card_columns.html',
  141. 'Article, card masonry - fluid brick pattern'),
  142. ],
  143. 'pagepreviewblock': [
  144. ('coderedcms/blocks/pagepreview_card.html', 'Card'),
  145. ('coderedcms/blocks/pagepreview_form.html', 'Form inputs'),
  146. ],
  147. # templates that are available for all block types
  148. '*': [
  149. ('', 'Default'),
  150. ],
  151. }
  152. CRX_FRONTEND_TEMPLATES_PAGES = {
  153. # templates that are available for all page types
  154. '*': [
  155. ('', 'Default'),
  156. ('coderedcms/pages/web_page.html', 'Web page showing title and cover image'),
  157. ('coderedcms/pages/web_page_notitle.html', 'Web page without title and cover image'),
  158. ('coderedcms/pages/home_page.html', 'Home page without title and cover image'),
  159. ('coderedcms/pages/base.html', 'Blank page - no navbar or footer'),
  160. ],
  161. }
  162. CRX_BANNER = None
  163. CRX_BANNER_BACKGROUND = '#f00'
  164. CRX_BANNER_TEXT_COLOR = '#fff'
  165. def __getattribute__(self, attr: str):
  166. # First load from Django settings.
  167. # If it does not exist, load from _DefaultSettings.
  168. try:
  169. return getattr(settings, attr)
  170. except AttributeError:
  171. return super().__getattribute__(attr)
  172. crx_settings = _DefaultSettings()
  173. # If the older django-bootstrap4 is the only version listed in INSTALLED_APPS,
  174. # use it for compatibility. Otherwise use django-bootstrap5 which is a
  175. # dependency of coderedcms.
  176. if (
  177. apps.is_installed("bootstrap4")
  178. and not apps.is_installed("django_bootstrap5")
  179. ):
  180. import bootstrap4.bootstrap as bootstrap
  181. else:
  182. import django_bootstrap5.core as bootstrap
  183. get_bootstrap_setting = bootstrap.get_bootstrap_setting