"]
@@ -45,8 +45,9 @@ djangocms-admin-style = "~3.2.6"
djangocms-apphook-setup = "0.4.1"
djangocms-attributes-field = "2.1.0"
djangocms-blog = "^1.2"
-# djangocms-bootstrap4 commit to remove deprecated imports: https://github.com/django-cms/djangocms-bootstrap4/pull/162
-djangocms-bootstrap4 = { git = "https://github.com/django-cms/djangocms-bootstrap4", rev = "2fc7f14c2b7b53882faf6830289b5052f775965f" }
+# TO get a commit in main (since v3.0.1) to fix Container error
+# https://github.com/django-cms/djangocms-bootstrap4/pull/164
+djangocms-bootstrap4 = {git = "https://github.com/django-cms/djangocms-bootstrap4.git", rev = "49983f4"}
djangocms-column = "^2.0"
djangocms-file = "3.0.0"
djangocms-forms-maintained = { git = "https://github.com/TACC/djangocms-forms", rev = "63ead9288c2ea65139124698bffc0ad01d182afa" }
diff --git a/taccsite_cms/_settings/branding.py b/taccsite_cms/_settings/branding.py
new file mode 100644
index 000000000..0a8d635df
--- /dev/null
+++ b/taccsite_cms/_settings/branding.py
@@ -0,0 +1,29 @@
+"""Configure standard branding"""
+
+PORTAL_BRANDING_TACC = {
+ "is_remote": False,
+ "img_file_src": "site_cms/img/org_logos/tacc-white.png",
+ "img_class": "branding-tacc",
+ "link_href": "https://www.tacc.utexas.edu/",
+ "link_target": "_blank",
+ "img_alt_text": "TACC Logo",
+ "img_crossorigin": "anonymous",
+}
+PORTAL_BRANDING_UTEXAS = {
+ "is_remote": False,
+ "img_file_src": "site_cms/img/org_logos/utaustin-white.png",
+ "img_class": "branding-utaustin",
+ "link_href": "https://www.utexas.edu/",
+ "link_target": "_blank",
+ "img_alt_text": "University of Texas at Austin Logo",
+ "img_crossorigin": "anonymous",
+}
+PORTAL_BRANDING_NSF = {
+ "is_remote": False,
+ "img_file_src": "site_cms/img/org_logos/nsf-white.png",
+ "img_class": "branding-nsf",
+ "link_href": "https://www.nsf.gov/",
+ "link_target": "_blank",
+ "img_alt_text": "NSF Logo",
+ "img_crossorigin": "anonymous",
+}
diff --git a/taccsite_cms/_settings/search.py b/taccsite_cms/_settings/search.py
index ad5e12533..26b78e9b6 100644
--- a/taccsite_cms/_settings/search.py
+++ b/taccsite_cms/_settings/search.py
@@ -1,52 +1,38 @@
-"""Configure search plugins"""
+"""Configure deprecated search solution"""
########################
-# TACC: SEARCH
+# SEARCH
########################
-PORTAL_ES_ENABLED = True
-
+# To support any search
PORTAL_SEARCH_PATH = '/search'
-if PORTAL_ES_ENABLED:
- # Elasticsearch
- PORTAL_SEARCH_QUERY_PARAM_NAME = 'query_string'
-else:
- # Google
- PORTAL_SEARCH_QUERY_PARAM_NAME = 'q'
-
-########################
-# ELASTICSEARCH
-########################
-
-if PORTAL_ES_ENABLED:
- ES_AUTH = 'username:password'
- ES_HOSTS = 'http://elasticsearch:9200'
- ES_INDEX_PREFIX = 'cms-dev-{}'
- ES_DOMAIN = 'http://localhost:8000'
-
- # Elasticsearch Indexing
- HAYSTACK_ROUTERS = ['aldryn_search.router.LanguageRouter', ]
- HAYSTACK_SIGNAL_PROCESSOR = 'taccsite_cms.signal_processor.RealtimeSignalProcessor'
- ALDRYN_SEARCH_DEFAULT_LANGUAGE = 'en'
- ALDRYN_SEARCH_REGISTER_APPHOOK = True
- HAYSTACK_CONNECTIONS = {
- 'default': {
- 'ENGINE': 'haystack.backends.elasticsearch_backend.ElasticsearchSearchEngine',
- 'URL': ES_HOSTS,
- 'INDEX_NAME': ES_INDEX_PREFIX.format('cms'),
- 'KWARGS': {'http_auth': ES_AUTH}
- }
+# To support Google search
+# PORTAL_SEARCH_QUERY_PARAM_NAME = 'q'
+# PORTAL_SEARCH_INDEX_IS_AUTOMATIC = False
+
+# To support Elasticsearch
+PORTAL_SEARCH_QUERY_PARAM_NAME = 'query_string'
+PORTAL_SEARCH_INDEX_IS_AUTOMATIC = True
+
+ES_AUTH = 'username:password'
+ES_HOSTS = 'http://elasticsearch:9200'
+ES_INDEX_PREFIX = 'cms-dev-{}'
+ES_DOMAIN = 'http://localhost:8000'
+
+HAYSTACK_ROUTERS = ['aldryn_search.router.LanguageRouter', ]
+HAYSTACK_CONNECTIONS = {
+ 'default': {
+ 'ENGINE': 'haystack.backends.elasticsearch_backend.ElasticsearchSearchEngine',
+ 'URL': ES_HOSTS,
+ 'INDEX_NAME': ES_INDEX_PREFIX.format('cms'),
+ 'KWARGS': {'http_auth': ES_AUTH}
}
+}
-########################
-# DJANGO CMS
-########################
+ALDRYN_SEARCH_DEFAULT_LANGUAGE = 'en'
+ALDRYN_SEARCH_REGISTER_APPHOOK = True
-if PORTAL_ES_ENABLED:
- _INSTALLED_APPS = [
- 'haystack', # search index
- 'aldryn_apphooks_config', # search index & django CMS Blog
- ]
-else:
- _INSTALLED_APPS = []
+_INSTALLED_APPS = [
+ 'haystack', # search index
+]
diff --git a/taccsite_cms/secrets.example.py b/taccsite_cms/secrets.example.py
new file mode 100644
index 000000000..f17be2840
--- /dev/null
+++ b/taccsite_cms/secrets.example.py
@@ -0,0 +1,38 @@
+########################
+# DJANGO
+########################
+
+SECRET_KEY = 'CHANGE_ME'
+
+########################
+# STORAGE
+########################
+
+DATABASES = {
+ 'default': {
+ 'ENGINE': 'django.db.backends.postgresql',
+ 'PORT': '5432',
+ 'NAME': 'taccsite',
+ 'USER': 'postgresadmin',
+ 'PASSWORD': 'taccforever',
+ 'HOST': 'core_cms_postgres'
+ }
+}
+
+########################
+# SEARCH
+########################
+
+ES_AUTH = 'username:password'
+ES_HOSTS = 'http://elasticsearch:9200'
+ES_INDEX_PREFIX = 'cms-dev-{}'
+ES_DOMAIN = 'http://localhost:8000'
+
+HAYSTACK_CONNECTIONS = {
+ 'default': {
+ 'ENGINE': 'haystack.backends.elasticsearch_backend.ElasticsearchSearchEngine',
+ 'URL': ES_HOSTS,
+ 'INDEX_NAME': ES_INDEX_PREFIX.format('cms'),
+ 'KWARGS': {'http_auth': ES_AUTH }
+ }
+}
diff --git a/taccsite_cms/settings.py b/taccsite_cms/settings.py
index 913056182..2b224e539 100644
--- a/taccsite_cms/settings.py
+++ b/taccsite_cms/settings.py
@@ -25,12 +25,13 @@
_INSTALLED_APPS as search_INSTALLED_APPS
)
+def gettext(s): return s
+
########################
# DJANGO
########################
SECRET_KEY = 'CHANGE_ME'
-def gettext(s): return s
DATA_DIR = os.path.dirname(os.path.dirname(__file__))
@@ -39,9 +40,11 @@ def gettext(s): return s
DEBUG = True # False for Prod.
-# Specify allowed hosts or use an asterisk to allow any host and simplify the config.
-# ALLOWED_HOSTS = ['hostname.tacc.utexas.edu', 'host.ip.v4.address', '0.0.0.0', 'localhost', '127.0.0.1'] # In production.
-ALLOWED_HOSTS = ['0.0.0.0', '127.0.0.1', 'localhost', '*'] # In development.
+# Specify allowed hosts or use an asterisk to allow any host.
+# ALLOWED_HOSTS = ['hostname.tacc.utexas.edu', 'client.org'] # Dev/Prod/Etc
+ALLOWED_HOSTS = ['0.0.0.0', '127.0.0.1', 'localhost', '*'] # Local
+
+LOGOUT_REDIRECT_URL = '/'
# https://docs.djangoproject.com/en/3.0/ref/clickjacking/#how-to-use-it
X_FRAME_OPTIONS = 'SAMEORIGIN'
@@ -50,6 +53,8 @@ def gettext(s): return s
SESSION_COOKIE_SECURE = True
DEFAULT_AUTO_FIELD = 'django.db.models.BigAutoField'
+
+
########################
# STORAGE
########################
@@ -178,43 +183,52 @@ def gettext(s): return s
########################
-# TACC: BRANDING
+# TACC: BRANDING (DEPRECATED)
########################
-TACC_BRANDING = [
- "tacc",
- "site_cms/img/org_logos/tacc-white.png",
- "branding-tacc",
- "https://www.tacc.utexas.edu/",
- "_blank",
- "TACC Logo",
- "anonymous",
- "True"
-]
+# TACC_BRANDING = [
+# "tacc", # (unused value)
+# "site_cms/img/org_logos/tacc-white.png", # "img_file_src"
+# "branding-tacc", # "img_class"
+# "https://www.tacc.utexas.edu/", # "link_href"
+# "_blank", # "link_target"
+# "TACC Logo", # "img_alt_text"
+# "anonymous", # "img_crossorigin"
+# "True" # (whether to show logo)
+# ]
+# UTEXAS_BRANDING = [
+# "utexas", # (unused value)
+# "site_cms/img/org_logos/utaustin-white.png", # "img_file_src"
+# "branding-utaustin", # "img_class"
+# "https://www.utexas.edu/", # "link_href"
+# "_blank", # "link_target"
+# "University of Texas at Austin Logo", # "img_alt_text"
+# "anonymous", # "img_crossorigin"
+# "True" # (whether to show logo)
+# ]
+# NSF_BRANDING = [
+# "nsf", # (unused value)
+# "site_cms/img/org_logos/nsf-white.png", # "img_file_src"
+# "branding-nsf", # "img_class"
+# "https://www.nsf.gov/", # "link_href"
+# "_blank", # "link_target"
+# "NSF Logo", # "img_alt_text"
+# "anonymous", # "img_crossorigin"
+# "True" # (whether to show logo)
+# ]
-UTEXAS_BRANDING = [
- "utexas",
- "site_cms/img/org_logos/utaustin-white.png",
- "branding-utaustin",
- "https://www.utexas.edu/",
- "_blank",
- "University of Texas at Austin Logo",
- "anonymous",
- "True"
-]
+# To hide branding, add custom style `#header-branding { display: none; }`
+# BRANDING = [ TACC_BRANDING, UTEXAS_BRANDING ]
-NSF_BRANDING = [
- "nsf",
- "site_cms/img/org_logos/nsf-white.png",
- "branding-nsf",
- "https://www.nsf.gov/",
- "_blank",
- "NSF Logo",
- "anonymous",
- "True"
-]
-BRANDING = [ TACC_BRANDING, UTEXAS_BRANDING ]
+########################
+# TACC: BRANDING
+########################
+
+from taccsite_cms._settings.branding import *
+
+# To hide branding, set `PORTAL_BRANDING = False`
+PORTAL_BRANDING = [ PORTAL_BRANDING_TACC, PORTAL_BRANDING_UTEXAS ]
########################
@@ -271,12 +285,11 @@ def gettext(s): return s
# FAQ: A falsy value will trigger default logic for nav width
PORTAL_NAV_WIDTH = False
-LOGOUT_REDIRECT_URL = '/'
-
# using container name to avoid cep.dev dns issues locally
-# this will need to be updated for dev/pprd/prod systems
-# for example, CEP_AUTH_VERIFICATION_ENDPOINT=https://dev.cep.tacc.utexas.edu
-CEP_AUTH_VERIFICATION_ENDPOINT = 'http://django:6000'
+# CEP_AUTH_VERIFICATION_ENDPOINT = https://hostname.tacc.utexas.edu # Dev/Prod/Etc
+CEP_AUTH_VERIFICATION_ENDPOINT = 'http://django:6000' # Local
+
+
########################
# TACC: SOCIAL MEDIA
@@ -286,9 +299,15 @@ def gettext(s): return s
# PORTAL_SOCIAL_SHARE_PLATFORMS = ['linkedin', 'instagram', 'facebook', 'bluesky', 'email']
########################
-# TACC: CORE STYLES
+# TACC: STYLES
########################
+PORTAL_STYLES = []
+# PORTAL_STYLES = [{
+# "is_remote": True,
+# "path": "https://cdn.jsdelivr.net/gh/TACC/Core-CMS-Custom@2cdc59f/example_cms/src/apps/example_app/static/example_app/css/example_app.css",
+# }]
+
# Only use integer numbers (not "v1", not "0.11.0"),
# so templates can load based on simple comparisons
TACC_CORE_STYLES_VERSION = 2
@@ -462,6 +481,7 @@ def gettext(s): return s
] + search_INSTALLED_APPS + [
# miscellaneous
+ 'aldryn_apphooks_config', # search index & django CMS Blog
'test_without_migrations', # run tests faster
] + form_plugin_INSTALLED_APPS + [
@@ -584,12 +604,46 @@ def get_subdirs_as_module_names(path):
DJANGOCMS_AUDIO_ALLOWED_EXTENSIONS = ['mp3', 'ogg', 'wav']
-SETTINGS_EXPORT_VARIABLE_NAME = 'settings'
-
########################
# PLUGIN SETTINGS
########################
+# SEE: https://github.com/django-cms/djangocms-bootstrap4
+DJANGOCMS_BOOTSTRAP4_GRID_CONTAINERS = [
+ (_('Container'), (
+ ('container', _('Container')), # default
+ (
+ 'container o-section o-section--style-light',
+ _('Container + Light section')
+ ),
+ (
+ 'container o-section o-section--style-dark',
+ _('Container + Dark section')
+ ),
+ )),
+ (_('Fluid container'), (
+ ('container-fluid', _('Fluid')), # default
+ (
+ 'container-fluid o-section o-section--style-light',
+ _('Fluid container + Light section')
+ ),
+ (
+ 'container-fluid o-section o-section--style-dark',
+ _('Fluid container + Dark section')
+ ),
+ )),
+ (_('No container'), (
+ (
+ 'o-section o-section--style-light',
+ _('Light section')
+ ),
+ (
+ 'o-section o-section--style-dark',
+ _('Dark section')
+ ),
+ )),
+]
+
# https://github.com/django-cms/djangocms-style
DJANGOCMS_STYLE_CHOICES = [
'card',
@@ -670,6 +724,8 @@ def get_subdirs_as_module_names(path):
(CORTAL_ICONS, 'icon', _('TACC "Cortal" Icons')),
]
+
+
########################
# SETTINGS IMPORT
########################
@@ -701,10 +757,16 @@ def get_subdirs_as_module_names(path):
########################
# SETTINGS DEPRECATED
-########################
# TODO: Make clients not use nor set these
+########################
+
deprecated_SETTINGS_EXPORT = []
+# For header_branding.html
+deprecated_SETTINGS_EXPORT += ['BRANDING']
+if 'BRANDING' not in locals():
+ BRANDING = False
+
# For header_logo.html
deprecated_SETTINGS_EXPORT += ['LOGO']
if 'LOGO' not in locals():
@@ -743,22 +805,32 @@ def get_subdirs_as_module_names(path):
if 'INCLUDES_SEARCH_BAR' == old_setting_name:
PORTAL_HAS_SEARCH = INCLUDES_SEARCH_BAR
+########################
+# SETTINGS CONDITIONAL
+########################
+
+if PORTAL_SEARCH_INDEX_IS_AUTOMATIC:
+ HAYSTACK_SIGNAL_PROCESSOR = 'taccsite_cms.signal_processor.RealtimeSignalProcessor'
+
########################
# SETTINGS EXPORT
########################
+SETTINGS_EXPORT_VARIABLE_NAME = 'settings'
+
SETTINGS_EXPORT = deprecated_SETTINGS_EXPORT + [
'DEBUG',
- 'BRANDING',
'TACC_CORE_STYLES_VERSION',
'GOOGLE_ANALYTICS_PROPERTY_ID',
'GOOGLE_ANALYTICS_PRELOAD',
+ 'PORTAL_BRANDING',
'PORTAL_LOGO',
'PORTAL_FAVICON',
'PORTAL_IS_TACC_CORE_PORTAL',
'PORTAL_HAS_LOGIN',
'PORTAL_HAS_SEARCH',
'PORTAL_NAV_WIDTH',
+ 'PORTAL_STYLES',
'PORTAL_BLOG_SHOW_CATEGORIES',
'PORTAL_BLOG_SHOW_TAGS',
'PORTAL_BLOG_CUSTOM_MEDIA_POST_CATEGORY',
diff --git a/taccsite_cms/settings_custom.example.py b/taccsite_cms/settings_custom.example.py
index 72cf7450b..5ad8ff017 100644
--- a/taccsite_cms/settings_custom.example.py
+++ b/taccsite_cms/settings_custom.example.py
@@ -42,51 +42,12 @@
('guides/portal_technology.html', 'Guide: Portal Technology Stack'),
)
-########################
-# NSF BRANDING
-########################
-
-NSF_BRANDING = [
- "nsf",
- "example_cms/img/org_logos/nsf-white.png",
- "branding-nsf",
- "https://www.nsf.gov/",
- "_blank",
- "NSF Logo",
- "anonymous",
- "True"
-]
-
-########################
-# TACC BRANDING
-########################
-
-TACC_BRANDING = [
- "tacc",
- "example_cms/img/org_logos/tacc-white.png",
- "branding-tacc",
- "https://www.tacc.utexas.edu/",
- "_blank",
- "TACC Logo",
- "anonymous",
- "True"
-]
-
-UTEXAS_BRANDING = [
- "utexas",
- "example_cms/img/org_logos/utaustin-white.png",
- "branding-utaustin",
- "https://www.utexas.edu/",
- "_blank",
- "University of Texas at Austin Logo",
- "anonymous",
- "True"
-]
-
########################
# CUSTOM PORTAL BRANDING
########################
+from taccsite_cms._settings.branding import *
+
# Edit this config as needed for the project branding used in the navigation bar header.
CUSTOM_BRANDING = [
"portal",
@@ -100,16 +61,16 @@
]
# Generic TACC Portals.
-BRANDING = [ TACC_BRANDING, UTEXAS_BRANDING ]
+PORTAL_BRANDING = [ PORTAL_BRANDING_TACC, UTEXAS_BRANDING ]
-# Custom Branded Portals (Non-NSF).
-#BRANDING = [ TACC_BRANDING, UTEXAS_BRANDING, CUSTOM_BRANDING ]
+# Custom-Branded Portals (Non-NSF).
+# PORTAL_BRANDING = [ PORTAL_BRANDING_TACC, PORTAL_BRANDING_UTEXAS, CUSTOM_BRANDING ]
-# NSF Funded Generic TACC Portals.
-#BRANDING = [ NSF_BRANDING, TACC_BRANDING, UTEXAS_BRANDING ]
+# NSF-Funded Generic TACC Portals.
+# PORTAL_BRANDING = [ PORTAL_BRANDING_NSF, PORTAL_BRANDING_TACC, PORTAL_BRANDING_UTEXAS ]
-# NSF Funded & Custom Branded Portals.
-#BRANDING = [ NSF_BRANDING, TACC_BRANDING, UTEXAS_BRANDING, CUSTOM_BRANDING ]
+# NSF-Funded & Custom-Branded Portals.
+# PORTAL_BRANDING = [ PORTAL_BRANDING_NSF, PORTAL_BRANDING_TACC, PORTAL_BRANDING_UTEXAS, CUSTOM_BRANDING ]
########################
# TACC: LOGO & FAVICON
@@ -135,6 +96,16 @@
"img_file_src": "https://cdn.jsdelivr.net/gh/TACC/Core-CMS-Custom@813aa7c/ptdatax_assets/favicon.ico",
}
+########################
+# SEARCH
+########################
+
+# To support Google search
+PORTAL_SEARCH_QUERY_PARAM_NAME = 'q'
+
+# To disable Elasticsearch
+PORTAL_SEARCH_INDEX_IS_AUTOMATIC = False
+
########################
# DJANGOCMS_BLOG
########################
@@ -143,6 +114,7 @@
tacc_app_index = INSTALLED_APPS.index('taccsite_cms')
INSTALLED_APPS[tacc_app_index:tacc_app_index] = [
+ # 'aldryn_apphooks_config' # already in Core
# 'filer', # already in Core
# 'easy_thumbnails', # already in Core
'parler',
diff --git a/taccsite_cms/settings_local.example.py b/taccsite_cms/settings_local.example.py
index 5f3b637ac..22774e8fe 100644
--- a/taccsite_cms/settings_local.example.py
+++ b/taccsite_cms/settings_local.example.py
@@ -5,6 +5,17 @@
https://github.com/TACC/Core-CMS/blob/main/taccsite_cms/settings_custom.example.py
'''
+# https://docs.djangoproject.com/en/4.2/ref/settings/#allowed-hosts
+ALLOWED_HOSTS = ['0.0.0.0', '127.0.0.1', 'localhost', '*'] # Local
+# ALLOWED_HOSTS = ['hostname.tacc.utexas.edu', 'client.org'] # Dev/Prod/Etc
+
+# To manage remote CMS authentication
+CEP_AUTH_VERIFICATION_ENDPOINT = 'http://django:6000'
+LOGIN_REDIRECT_URL = '/'
+
+# https://docs.djangoproject.com/en/4.2/ref/settings/#std-setting-DEBUG
+DEBUG = True
+
# To hide error about using Google Recaptcha test keys
SILENCED_SYSTEM_CHECKS = ['captcha.recaptcha_test_key_error']
diff --git a/taccsite_cms/static/site_cms/css/src/_imports/components/django.cms.blog.app.page.css b/taccsite_cms/static/site_cms/css/src/_imports/components/django.cms.blog.app.page.css
index d8d15c07f..4a6c5ef4f 100644
--- a/taccsite_cms/static/site_cms/css/src/_imports/components/django.cms.blog.app.page.css
+++ b/taccsite_cms/static/site_cms/css/src/_imports/components/django.cms.blog.app.page.css
@@ -8,6 +8,7 @@ Reference:
Styleguide Components.DjangoCMS.Blog.App.Page
*/
@import url("@tacc/core-styles/src/lib/_imports/objects/o-offset-content.css");
+@import url("@tacc/core-styles/src/lib/_imports/tools/x-drop-cap.css");
@import url("./django.cms.blog.app.page.multimedia.css");
@import url("./django.cms.blog.selectors.css");
@@ -141,7 +142,7 @@ Styleguide Components.DjangoCMS.Blog.App.Page
}
/* Remove Drop Cap when tag is added */
-.has-blog-tag-no-drop-cap .s-drop-cap > p:first-of-type::first-letter {
+.has-blog-tag-no-drop-cap .s-drop-cap > p:not(.s-drop-cap)::first-letter {
padding-right: unset;
initial-letter: unset;
}
diff --git a/taccsite_cms/static/site_cms/css/src/_imports/generics/pseudo-elements.css b/taccsite_cms/static/site_cms/css/src/_imports/generics/pseudo-elements.css
index d2a5d9118..c5ee6c435 100644
--- a/taccsite_cms/static/site_cms/css/src/_imports/generics/pseudo-elements.css
+++ b/taccsite_cms/static/site_cms/css/src/_imports/generics/pseudo-elements.css
@@ -6,6 +6,6 @@
}
@keyframes focus {
from {
- outline-color: var(--global-color-accent--tertiary);
+ outline-color: var(--global-color-tertiary--normal);
}
}
diff --git a/taccsite_cms/templates/assets_custom.html b/taccsite_cms/templates/assets_custom.html
index 04989f489..8b8be8e18 100644
--- a/taccsite_cms/templates/assets_custom.html
+++ b/taccsite_cms/templates/assets_custom.html
@@ -18,6 +18,15 @@
+
+{% with settings.PORTAL_STYLES as styles %}
+{% for style in styles %}
+
+{% endfor %}
+{% endwith %}
+
+
+
{# Do NOT directly load project-specific assets here; see `/taccsite_custom` #}
{# Example #}
diff --git a/taccsite_cms/templates/header_branding.html b/taccsite_cms/templates/header_branding.html
index 36b0d4c4b..d905c596c 100644
--- a/taccsite_cms/templates/header_branding.html
+++ b/taccsite_cms/templates/header_branding.html
@@ -1,6 +1,8 @@
{# @var brands, className #}
{% load static custom_portal_settings %}
+{% if settings.BRANDING %}
+
{% with settings.BRANDING as brands %}
{# DEBUG: #}{# {{ brands|first }}
#}
@@ -23,3 +25,33 @@
{% endfor %}
{% endwith %}
+
+{% else %}
+
+{% with settings.PORTAL_BRANDING as brands %}
+
+ {% for brand in brands %}
+ {% if not forloop.first %}
+ {# RFE: Use CSS to remove the need for `.branding-seperator` and `if` logic #}
+
+ {% endif %}
+
+
+
+ {% endfor %}
+
+{% endwith %}
+
+{% endif %}
diff --git a/taccsite_cms/templates/nav_cms_breadcrumbs.html b/taccsite_cms/templates/nav_cms_breadcrumbs.html
index 914ef4a62..8434fa5db 100644
--- a/taccsite_cms/templates/nav_cms_breadcrumbs.html
+++ b/taccsite_cms/templates/nav_cms_breadcrumbs.html
@@ -30,8 +30,7 @@
diff --git a/taccsite_cms/templates/snippets/logos-social-media.html b/taccsite_cms/templates/snippets/logos-social-media.html
index 51a6e89dd..7e904962b 100644
--- a/taccsite_cms/templates/snippets/logos-social-media.html
+++ b/taccsite_cms/templates/snippets/logos-social-media.html
@@ -19,16 +19,22 @@
-
+
+
LinkedIn
-
-
+
Instagram
+
+
+ Bluesky
+
+
+
diff --git a/taccsite_custom b/taccsite_custom
index 237ecdb7e..e55bfc8c9 160000
--- a/taccsite_custom
+++ b/taccsite_custom
@@ -1 +1 @@
-Subproject commit 237ecdb7efef11c796f60a44bdd5f82a96e0be48
+Subproject commit e55bfc8c91ccc7520fd38633a1bdf6dc4b7d18cb