';
+ }
+
+
+ /* To align notes to mimic tag hierarchy */
+
+ a > span::before,
+ a > figure::before,
+ figure > span::before {
+ margin-left: 1em;
+ }
+ a > figure > span::before {
+ margin-left: 2em;
+ }
+
+
+ /* To disable unsupported combos */
+
+ .u-image-zoom--on-hover:is(
+ span:not(a > *, a > figure > *),
+ figure:not(a > *)
+ ) {
+ opacity: 0.5;
+ }
+ }
+}
diff --git a/taccsite_cms/static/site_cms/favicon/apple-touch-icon.png b/taccsite_cms/static/site_cms/favicon/apple-touch-icon.png
new file mode 100644
index 000000000..0697cb2d0
Binary files /dev/null and b/taccsite_cms/static/site_cms/favicon/apple-touch-icon.png differ
diff --git a/taccsite_cms/static/site_cms/favicon/favicon-96x96.png b/taccsite_cms/static/site_cms/favicon/favicon-96x96.png
new file mode 100644
index 000000000..202fb3677
Binary files /dev/null and b/taccsite_cms/static/site_cms/favicon/favicon-96x96.png differ
diff --git a/taccsite_cms/static/site_cms/favicon/favicon.ico b/taccsite_cms/static/site_cms/favicon/favicon.ico
new file mode 100644
index 000000000..9f44baf99
Binary files /dev/null and b/taccsite_cms/static/site_cms/favicon/favicon.ico differ
diff --git a/taccsite_cms/static/site_cms/favicon/favicon.svg b/taccsite_cms/static/site_cms/favicon/favicon.svg
new file mode 100644
index 000000000..d5550f7dc
--- /dev/null
+++ b/taccsite_cms/static/site_cms/favicon/favicon.svg
@@ -0,0 +1,3 @@
+
\ No newline at end of file
diff --git a/taccsite_cms/static/site_cms/favicon/site.webmanifest b/taccsite_cms/static/site_cms/favicon/site.webmanifest
new file mode 100644
index 000000000..913ac9706
--- /dev/null
+++ b/taccsite_cms/static/site_cms/favicon/site.webmanifest
@@ -0,0 +1,21 @@
+{
+ "name": "Texas Advanced Computing Center",
+ "short_name": "TACC",
+ "icons": [
+ {
+ "src": "/site_cms/favicon/web-app-manifest-192x192.png",
+ "sizes": "192x192",
+ "type": "image/png",
+ "purpose": "maskable"
+ },
+ {
+ "src": "/site_cms/favicon/web-app-manifest-512x512.png",
+ "sizes": "512x512",
+ "type": "image/png",
+ "purpose": "maskable"
+ }
+ ],
+ "theme_color": "#ffffff",
+ "background_color": "#ffffff",
+ "display": "standalone"
+}
diff --git a/taccsite_cms/static/site_cms/favicon/web-app-manifest-192x192.png b/taccsite_cms/static/site_cms/favicon/web-app-manifest-192x192.png
new file mode 100644
index 000000000..3ca5458ed
Binary files /dev/null and b/taccsite_cms/static/site_cms/favicon/web-app-manifest-192x192.png differ
diff --git a/taccsite_cms/static/site_cms/favicon/web-app-manifest-512x512.png b/taccsite_cms/static/site_cms/favicon/web-app-manifest-512x512.png
new file mode 100644
index 000000000..c0f2de012
Binary files /dev/null and b/taccsite_cms/static/site_cms/favicon/web-app-manifest-512x512.png differ
diff --git a/taccsite_cms/static/site_cms/img/favicons/favicon.ico b/taccsite_cms/static/site_cms/img/favicons/favicon.ico
deleted file mode 100644
index 533966ed9..000000000
Binary files a/taccsite_cms/static/site_cms/img/favicons/favicon.ico and /dev/null differ
diff --git a/taccsite_cms/templates/assets_custom.html b/taccsite_cms/templates/assets_custom.html
index 60ecefb61..45d57cf73 100644
--- a/taccsite_cms/templates/assets_custom.html
+++ b/taccsite_cms/templates/assets_custom.html
@@ -8,9 +8,13 @@
{% endcomment %}
-{% with settings.PORTAL_FAVICON as favicon %}
-
-{% endwith %}
+{% if settings.PORTAL_FAVICON_HTML %}
+ {{ settings.PORTAL_FAVICON_HTML|safe }}
+{% else %}
+ {% with settings.PORTAL_FAVICON as favicon %}
+
+ {% endwith %}
+{% endif %}
{% with settings.PORTAL_STYLES as styles %}
diff --git a/taccsite_cms/templates/cms_menu.html b/taccsite_cms/templates/cms_menu.html
index 57d805ea4..e7f27ae04 100644
--- a/taccsite_cms/templates/cms_menu.html
+++ b/taccsite_cms/templates/cms_menu.html
@@ -1,6 +1,6 @@
{% load menu_tags tacc_uri_shortcuts limit_visibility_in_menu %}
-{# NOTE: This template content is copied from a third-party plugin that we do not use nor need #}
+{# NOTE: This template content was copied (and changed) from 3rd-party plugin that we have long since not used #}
{# SEE: https://github.com/jrief/djangocms-bootstrap/blob/aa74994/cms_bootstrap/templates/bootstrap4/menu/navbar.html #}
{% spaceless %}
diff --git a/taccsite_cms/templates/djangocms_picture/default/picture.html b/taccsite_cms/templates/djangocms_picture/default/picture.html
index c082c6222..f73420426 100644
--- a/taccsite_cms/templates/djangocms_picture/default/picture.html
+++ b/taccsite_cms/templates/djangocms_picture/default/picture.html
@@ -1,39 +1,51 @@
{# https://github.com/django-cms/djangocms-picture/blob/4.1.1/djangocms_picture/templates/djangocms_picture/default/picture.html #}
{# TACC (support children as caption content): #}
-{# {% load thumbnail %} #}
-{% load thumbnail l10n cms_tags %}
+{# TACC (support image zoom): #}
+{# {% load thumbnail l10n cms_tags %} #}
+{% load thumbnail l10n cms_tags strip_class_attribute %}
{# /TACC #}
-{# TACC (allow link to be conditional): #}
-{% block picture_link_start %}
+{# TACC (support custom condition): #}
+{% if should_render_link %}
{# /TACC #}
-{% if picture_link %}
- {# TACC (allow link to be conditional): #}
- {% block picture_link %}
- {# /TACC #}
-{# TACC (allow link to be conditional): #}
-{% endblock %}
-{# /TACC #}
+ {# TACC (support image zoom): #}
+ class="
+ editor-img-wrap
+ {{ instance.attributes.class|default:'' }}
+ {{ instance.link_attributes.class|default:'' }}
+ {{ className }}
+ {% if should_add_zoom_class_to_link %}u-image-zoom--on-hover{% endif %}
+ "
+ {# TACC (assign attributes to parent): #}
+ {{ instance.attributes_str|strip_class_attribute|safe }}
+ {{ instance.link_attributes_str|strip_class_attribute|safe }}
+ {# /TACC #}
+ {# /TACC #}
+ >
{% endif %}
-{# TACC (allow link to be conditional): #}
-{% endblock %}
-{# /TACC #}
-{# start render figure/figcaption #}
+
{# TACC (support children as caption content): #}
-{# {% if instance.caption_text %} #}
-{% if instance.caption_text or instance.child_plugin_instances %}
+{% if has_figure_content %}
+{# /TACC #}
{# TACC (assign attributes to parent): #}
- {# #}
-
+
{# /TACC #}
{% endif %}
+
+
+{# TACC (support image zoom): #}
+{% if should_wrap_image_for_zoom %}
+
+{% endif %}
{# /TACC #}
{# end render figure/figcaption #}
@@ -60,7 +72,7 @@
{# TACC (allow link to be conditional): #}
{% block picture_attributes %}
{# TACC (assign attributes to parent): #}
- {% if not instance.caption_text and not picture_link and not instance.child_plugin_instances %}
+ {% if should_add_attributes_to_image %}
{{ instance.attributes_str }}
{% endif %}
{# /TACC #}
@@ -69,9 +81,17 @@
>
{% endlocalize %}
-{# start render figure/figcaption #}
-{# {% if instance.caption_text %} #}
-{% if instance.caption_text or instance.child_plugin_instances %}
+
+{# TACC (support image zoom): #}
+ {% if should_wrap_image_for_zoom %}
+
+ {% endif %}
+{# /TACC #}
+
+
+{# TACC (support custom condition): #}
+{% if has_figure_content %}
+{# /TACC #}
{# TACC (support children as caption content): #}
{# {{ instance.caption_text }} #}
@@ -83,17 +103,12 @@
{# /TACC #}
{% endif %}
-{# end render figure/figcaption #}
-{# TACC (allow link to be conditional): #}
-{% block picture_link_end %}
+{# TACC (support custom condition): #}
+{% if should_render_link %}
{# /TACC #}
-{% if picture_link %}
{% endif %}
-{# TACC (allow link to be conditional): #}
-{% endblock %}
-{# /TACC #}
{% comment %}
# https://developer.mozilla.org/en-US/docs/Web/HTML/Element/img
diff --git a/taccsite_cms/templates/djangocms_picture/no_link_to_ext_image/picture.html b/taccsite_cms/templates/djangocms_picture/no_link_to_ext_image/picture.html
index 479af2ce9..d9e697407 100644
--- a/taccsite_cms/templates/djangocms_picture/no_link_to_ext_image/picture.html
+++ b/taccsite_cms/templates/djangocms_picture/no_link_to_ext_image/picture.html
@@ -1,28 +1,6 @@
{% extends "djangocms_picture/default/picture.html" %}
-{# Do not let instance.external_picture trigger picture_link templating #}
-{% comment %}
-App djangocms_picture assumes external image must be linked to,
-but we want to allow external image to be displayed without link.
-{% endcomment %}
-{# FAQ: picture_link is instance link_url or link_page_id or external_picture #}
-{# https://github.com/django-cms/djangocms-picture/blob/3.0.0/djangocms_picture/models.py#L269-L276 #}
-{# So picture with external image is not wrapped in a link #}
-{% block picture_link_start %}
- {% if instance.link_url or instance.link_page_id %}
- {% block picture_link %}
- {{ block.super }}
- {% endblock %}
- {% endif %}
-{% endblock %}
-
-{# So picture attributes can be added to picture with external image #}
-{% block picture_attributes %}
- {% if not instance.caption_text and not instance.link_url and not instance.link_page_id and not instance.child_plugin_instances %}
- {{ instance.attributes_str }}
- {% endif %}
-{% endblock %}
-
-{# So picture with external image is not wrapped in a link #}
-{% block picture_link_end %}
-{% endblock %}
+{# To allow "External image" to be rendered without a link #}
+{# FAQ: Template exists to avoid adding a new model field #}
+{# FAQ: Default template uses custom boolean context variables for logic #}
+{# FAQ: App djangocms_picture assumes that an image, if not explicitely linked, must link to itself. But sometimes, we want an image to just be an image, unlinked. #}
diff --git a/taccsite_cms/templates/djangocms_picture/no_link_to_image/picture.html b/taccsite_cms/templates/djangocms_picture/no_link_to_image/picture.html
new file mode 100644
index 000000000..5ab79b9f9
--- /dev/null
+++ b/taccsite_cms/templates/djangocms_picture/no_link_to_image/picture.html
@@ -0,0 +1,2 @@
+{# backwards-compatibility for temporary name #}
+{% extends "djangocms_picture/no_link_to_ext_image/picture.html" %}
diff --git a/taccsite_cms/templates/djangocms_picture/zoom_effect/picture.html b/taccsite_cms/templates/djangocms_picture/zoom_effect/picture.html
new file mode 100644
index 000000000..f1f398d5c
--- /dev/null
+++ b/taccsite_cms/templates/djangocms_picture/zoom_effect/picture.html
@@ -0,0 +1,5 @@
+{% extends "djangocms_picture/default/picture.html" %}
+
+{# To zoom image on hover #}
+{# FAQ: Template exists to avoid adding a new model field #}
+{# FAQ: Default template uses custom boolean context variables for logic #}
diff --git a/taccsite_cms/templates/djangocms_picture/zoom_effect_no_link_to_ext_image/picture.html b/taccsite_cms/templates/djangocms_picture/zoom_effect_no_link_to_ext_image/picture.html
new file mode 100644
index 000000000..e94d37638
--- /dev/null
+++ b/taccsite_cms/templates/djangocms_picture/zoom_effect_no_link_to_ext_image/picture.html
@@ -0,0 +1,5 @@
+{% extends "djangocms_picture/default/picture.html" %}
+
+{# To combine `zoom_effect` and `no_link_to_image` %}
+{# SEE: taccsite_cms/templates/djangocms_picture/zoom_effect #}
+{# SEE: taccsite_cms/templates/djangocms_picture/no_link_to_image #}
diff --git a/taccsite_cms/templates/fullwidth.html b/taccsite_cms/templates/fullwidth.html
index 98dab9413..13167975b 100755
--- a/taccsite_cms/templates/fullwidth.html
+++ b/taccsite_cms/templates/fullwidth.html
@@ -1,8 +1,9 @@
{% extends "base.html" %}
{% load cms_tags %}
-{# To remove container and breadcrumbs #}
+{# To remove container and not render breadcrumbs #}
{% block content %}
+ {% block breadcrumbs %}{% endblock breadcrumbs %}
{% block cms_content %}
{% placeholder "content" %}
{% endblock cms_content %}
diff --git a/taccsite_cms/templates/guide.html b/taccsite_cms/templates/guide.html
index 72ec294d7..f2f68123d 100644
--- a/taccsite_cms/templates/guide.html
+++ b/taccsite_cms/templates/guide.html
@@ -13,7 +13,9 @@
{% block content %}
- {% include "nav_cms_breadcrumbs.html" %}
+ {% block breadcrumbs %}
+ {% include "nav_cms_breadcrumbs.html" %}
+ {% endblock breadcrumbs %}
{% block guide %}
{% placeholder "content" %}
{% endblock guide %}
diff --git a/taccsite_cms/templates/nav_search.raw.html b/taccsite_cms/templates/nav_search.raw.html
index c33f5fe68..73f896097 100644
--- a/taccsite_cms/templates/nav_search.raw.html
+++ b/taccsite_cms/templates/nav_search.raw.html
@@ -1,6 +1,6 @@
{# @var settings #}
-{% load static %}
+{% load static search_tags %}
@@ -10,7 +10,7 @@
-