|
@@ -1,29 +1,35 @@
|
|
|
import os
|
|
|
-from functools import lru_cache
|
|
|
from django.conf import settings
|
|
|
import bootstrap4.bootstrap as bootstrap
|
|
|
|
|
|
|
|
|
-PROJECT_DIR = settings.PROJECT_DIR if getattr(settings, 'PROJECT_DIR') else os.path.dirname(
|
|
|
- os.path.dirname(os.path.abspath(__file__))
|
|
|
-)
|
|
|
-BASE_DIR = settings.BASE_DIR if getattr(settings, 'BASE_DIR') else os.path.dirname(PROJECT_DIR)
|
|
|
-
|
|
|
-DEFAULTS = {
|
|
|
- 'PROTECTED_MEDIA_URL': '/protected/',
|
|
|
- 'PROTECTED_MEDIA_ROOT': os.path.join(BASE_DIR, 'protected'),
|
|
|
- 'PROTECTED_MEDIA_UPLOAD_WHITELIST': [],
|
|
|
- 'PROTECTED_MEDIA_UPLOAD_BLACKLIST': ['.sh', '.exe', '.bat', '.ps1', '.app', '.jar', '.py', '.php', '.pl', '.rb'], # noqa
|
|
|
-
|
|
|
- 'FRONTEND_BTN_SIZE_DEFAULT': '',
|
|
|
- 'FRONTEND_BTN_SIZE_CHOICES': (
|
|
|
+class _DefaultSettings:
|
|
|
+
|
|
|
+ CRX_PROTECTED_MEDIA_URL = '/protected/'
|
|
|
+ CRX_PROTECTED_MEDIA_ROOT = os.path.join(settings.BASE_DIR, 'protected')
|
|
|
+ CRX_PROTECTED_MEDIA_UPLOAD_WHITELIST = []
|
|
|
+ CRX_PROTECTED_MEDIA_UPLOAD_BLACKLIST = [
|
|
|
+ '.app',
|
|
|
+ '.bat',
|
|
|
+ '.exe',
|
|
|
+ '.jar',
|
|
|
+ '.php',
|
|
|
+ '.pl',
|
|
|
+ '.ps1',
|
|
|
+ '.py',
|
|
|
+ '.rb',
|
|
|
+ '.sh',
|
|
|
+ ]
|
|
|
+
|
|
|
+ CRX_FRONTEND_BTN_SIZE_DEFAULT = ''
|
|
|
+ CRX_FRONTEND_BTN_SIZE_CHOICES = [
|
|
|
('btn-sm', 'Small'),
|
|
|
('', 'Default'),
|
|
|
('btn-lg', 'Large'),
|
|
|
- ),
|
|
|
+ ]
|
|
|
|
|
|
- 'FRONTEND_BTN_STYLE_DEFAULT': 'btn-primary',
|
|
|
- 'FRONTEND_BTN_STYLE_CHOICES': (
|
|
|
+ CRX_FRONTEND_BTN_STYLE_DEFAULT = 'btn-primary'
|
|
|
+ CRX_FRONTEND_BTN_STYLE_CHOICES = [
|
|
|
('btn-primary', 'Primary'),
|
|
|
('btn-secondary', 'Secondary'),
|
|
|
('btn-success', 'Success'),
|
|
@@ -41,16 +47,16 @@ DEFAULTS = {
|
|
|
('btn-outline-info', 'Outline Info'),
|
|
|
('btn-outline-light', 'Outline Light'),
|
|
|
('btn-outline-dark', 'Outline Dark'),
|
|
|
- ),
|
|
|
+ ]
|
|
|
|
|
|
- 'FRONTEND_CAROUSEL_FX_DEFAULT': '',
|
|
|
- 'FRONTEND_CAROUSEL_FX_CHOICES': (
|
|
|
+ CRX_FRONTEND_CAROUSEL_FX_DEFAULT = ''
|
|
|
+ CRX_FRONTEND_CAROUSEL_FX_CHOICES = [
|
|
|
('', 'Slide'),
|
|
|
('carousel-fade', 'Fade'),
|
|
|
- ),
|
|
|
+ ]
|
|
|
|
|
|
- 'FRONTEND_COL_SIZE_DEFAULT': '',
|
|
|
- 'FRONTEND_COL_SIZE_CHOICES': (
|
|
|
+ CRX_FRONTEND_COL_SIZE_DEFAULT = ''
|
|
|
+ CRX_FRONTEND_COL_SIZE_CHOICES = [
|
|
|
('', 'Automatically size'),
|
|
|
('12', 'Full row'),
|
|
|
('6', 'Half - 1/2 column'),
|
|
@@ -64,43 +70,42 @@ DEFAULTS = {
|
|
|
('5', 'Twelfths - 5/12 column'),
|
|
|
('7', 'Twelfths - 7/12 column'),
|
|
|
('11', 'Twelfths - 11/12 column'),
|
|
|
- ),
|
|
|
+ ]
|
|
|
|
|
|
- 'FRONTEND_COL_BREAK_DEFAULT': 'md',
|
|
|
- 'FRONTEND_COL_BREAK_CHOICES': (
|
|
|
+ CRX_FRONTEND_COL_BREAK_DEFAULT = 'md'
|
|
|
+ CRX_FRONTEND_COL_BREAK_CHOICES = [
|
|
|
('', 'Always expanded'),
|
|
|
('sm', 'sm - Expand on small screens (phone, 576px) and larger'),
|
|
|
('md', 'md - Expand on medium screens (tablet, 768px) and larger'),
|
|
|
('lg', 'lg - Expand on large screens (laptop, 992px) and larger'),
|
|
|
('xl', 'xl - Expand on extra large screens (wide monitor, 1200px)'),
|
|
|
- ),
|
|
|
+ ]
|
|
|
|
|
|
- 'FRONTEND_NAVBAR_FORMAT_DEFAULT': '',
|
|
|
- 'FRONTEND_NAVBAR_FORMAT_CHOICES': (
|
|
|
+ CRX_FRONTEND_NAVBAR_FORMAT_DEFAULT = ''
|
|
|
+ CRX_FRONTEND_NAVBAR_FORMAT_CHOICES = [
|
|
|
('', 'Default Bootstrap Navbar'),
|
|
|
('codered-navbar-center', 'Centered logo at top'),
|
|
|
- ),
|
|
|
+ ]
|
|
|
|
|
|
- 'FRONTEND_NAVBAR_COLOR_SCHEME_DEFAULT': 'navbar-light',
|
|
|
- 'FRONTEND_NAVBAR_COLOR_SCHEME_CHOICES': (
|
|
|
+ CRX_FRONTEND_NAVBAR_COLOR_SCHEME_DEFAULT = 'navbar-light'
|
|
|
+ CRX_FRONTEND_NAVBAR_COLOR_SCHEME_CHOICES = [
|
|
|
('navbar-light', 'Light - for use with a light-colored navbar'),
|
|
|
('navbar-dark', 'Dark - for use with a dark-colored navbar'),
|
|
|
- ),
|
|
|
+ ]
|
|
|
|
|
|
- 'FRONTEND_NAVBAR_CLASS_DEFAULT': 'bg-light',
|
|
|
+ CRX_FRONTEND_NAVBAR_CLASS_DEFAULT = 'bg-light'
|
|
|
|
|
|
- 'FRONTEND_NAVBAR_COLLAPSE_MODE_DEFAULT': 'navbar-expand-lg',
|
|
|
- 'FRONTEND_NAVBAR_COLLAPSE_MODE_CHOICES': (
|
|
|
+ CRX_FRONTEND_NAVBAR_COLLAPSE_MODE_DEFAULT = 'navbar-expand-lg'
|
|
|
+ CRX_FRONTEND_NAVBAR_COLLAPSE_MODE_CHOICES = [
|
|
|
('', 'Never show menu - Always collapse menu behind a button'),
|
|
|
('navbar-expand-sm', 'sm - Show on small screens (phone size) and larger'),
|
|
|
('navbar-expand-md', 'md - Show on medium screens (tablet size) and larger'),
|
|
|
('navbar-expand-lg', 'lg - Show on large screens (laptop size) and larger'),
|
|
|
('navbar-expand-xl', 'xl - Show on extra large screens (desktop, wide monitor)'),
|
|
|
- ),
|
|
|
+ ]
|
|
|
|
|
|
- 'FRONTEND_THEME_HELP': "Change the color palette of your site with a Bootstrap theme. Powered by Bootswatch https://bootswatch.com/.", # noqa
|
|
|
- 'FRONTEND_THEME_DEFAULT': '',
|
|
|
- 'FRONTEND_THEME_CHOICES': (
|
|
|
+ CRX_FRONTEND_THEME_DEFAULT = ''
|
|
|
+ CRX_FRONTEND_THEME_CHOICES = [
|
|
|
('', 'Default - Classic Bootstrap'),
|
|
|
('cerulean', 'Cerulean - A calm blue sky'),
|
|
|
('cosmo', 'Cosmo - An ode to Metro'),
|
|
@@ -123,23 +128,23 @@ DEFAULTS = {
|
|
|
('superhero', 'Superhero - The brave and the blue'),
|
|
|
('united', 'United - Ubuntu orange and unique font'),
|
|
|
('yeti', 'Yeti - A friendly foundation'),
|
|
|
- ),
|
|
|
+ ]
|
|
|
|
|
|
- 'FRONTEND_TEMPLATES_BLOCKS': {
|
|
|
- 'cardblock': (
|
|
|
+ CRX_FRONTEND_TEMPLATES_BLOCKS = {
|
|
|
+ 'cardblock': [
|
|
|
('coderedcms/blocks/card_block.html', 'Card'),
|
|
|
('coderedcms/blocks/card_head.html', 'Card with header'),
|
|
|
('coderedcms/blocks/card_foot.html', 'Card with footer'),
|
|
|
('coderedcms/blocks/card_head_foot.html', 'Card with header and footer'),
|
|
|
('coderedcms/blocks/card_blurb.html', 'Blurb - rounded image and no border'),
|
|
|
('coderedcms/blocks/card_img.html', 'Cover image - use image as background'),
|
|
|
- ),
|
|
|
- 'cardgridblock': (
|
|
|
+ ],
|
|
|
+ 'cardgridblock': [
|
|
|
('coderedcms/blocks/cardgrid_group.html', 'Card group - attached cards of equal size'),
|
|
|
('coderedcms/blocks/cardgrid_deck.html', 'Card deck - separate cards of equal size'),
|
|
|
('coderedcms/blocks/cardgrid_columns.html', 'Card masonry - fluid brick pattern'),
|
|
|
- ),
|
|
|
- 'pagelistblock': (
|
|
|
+ ],
|
|
|
+ 'pagelistblock': [
|
|
|
('coderedcms/blocks/pagelist_block.html', 'General, simple list'),
|
|
|
('coderedcms/blocks/pagelist_list_group.html', 'General, list group navigation panel'),
|
|
|
('coderedcms/blocks/pagelist_article_media.html', 'Article, media format'),
|
|
@@ -149,45 +154,42 @@ DEFAULTS = {
|
|
|
'Article, card deck - separate cards of equal size'),
|
|
|
('coderedcms/blocks/pagelist_article_card_columns.html',
|
|
|
'Article, card masonry - fluid brick pattern'),
|
|
|
- ),
|
|
|
- 'pagepreviewblock': (
|
|
|
+ ],
|
|
|
+ 'pagepreviewblock': [
|
|
|
('coderedcms/blocks/pagepreview_card.html', 'Card'),
|
|
|
('coderedcms/blocks/pagepreview_form.html', 'Form inputs'),
|
|
|
- ),
|
|
|
+ ],
|
|
|
# templates that are available for all block types
|
|
|
- '*': (
|
|
|
+ '*': [
|
|
|
('', 'Default'),
|
|
|
- ),
|
|
|
- },
|
|
|
+ ],
|
|
|
+ }
|
|
|
|
|
|
- 'FRONTEND_TEMPLATES_PAGES': {
|
|
|
+ CRX_FRONTEND_TEMPLATES_PAGES = {
|
|
|
# templates that are available for all page types
|
|
|
- '*': (
|
|
|
+ '*': [
|
|
|
('', 'Default'),
|
|
|
('coderedcms/pages/web_page.html', 'Web page showing title and cover image'),
|
|
|
('coderedcms/pages/web_page_notitle.html', 'Web page without title and cover image'),
|
|
|
('coderedcms/pages/home_page.html', 'Home page without title and cover image'),
|
|
|
('coderedcms/pages/base.html', 'Blank page - no navbar or footer'),
|
|
|
- ),
|
|
|
- },
|
|
|
-
|
|
|
- 'BANNER': None,
|
|
|
- 'BANNER_BACKGROUND': '#f00',
|
|
|
- 'BANNER_TEXT_COLOR': '#fff',
|
|
|
-}
|
|
|
+ ],
|
|
|
+ }
|
|
|
|
|
|
+ CRX_BANNER = None
|
|
|
+ CRX_BANNER_BACKGROUND = '#f00'
|
|
|
+ CRX_BANNER_TEXT_COLOR = '#fff'
|
|
|
|
|
|
-@lru_cache()
|
|
|
-def get_config():
|
|
|
- config = DEFAULTS.copy()
|
|
|
- for var in config:
|
|
|
- cr_var = 'CODERED_%s' % var
|
|
|
- if hasattr(settings, cr_var):
|
|
|
- config[var] = getattr(settings, cr_var)
|
|
|
- return config
|
|
|
+ def __getattribute__(self, attr: str):
|
|
|
+ # First load from Django settings.
|
|
|
+ # If it does not exist, load from _DefaultSettings.
|
|
|
+ try:
|
|
|
+ return getattr(settings, attr)
|
|
|
+ except AttributeError:
|
|
|
+ return super().__getattribute__(attr)
|
|
|
|
|
|
|
|
|
-cr_settings = get_config()
|
|
|
+crx_settings = _DefaultSettings()
|
|
|
|
|
|
|
|
|
get_bootstrap_setting = bootstrap.get_bootstrap_setting
|