feat: implement livestream post functionality and update site theme assets

This commit is contained in:
2026-07-14 23:34:50 +07:00
parent 1b905d8c60
commit f4e24a0e00
130 changed files with 17284 additions and 277 deletions
@@ -19,10 +19,33 @@
<nav class="mc--menu mc--main-menu" th:if="${primaryMenu != null}">
<ul class="menu m--menu m--main-menu">
<li class="megamenu menu-item" th:each="item : ${primaryMenu.items}">
<li th:each="item : ${primaryMenu.items}" th:if="${item.parent == null}"
th:class="${item.children.empty} ? 'menu-item' : 'menu-item menu-item--expanded'">
<div class="link-arrow-wrapper">
<a th:href="${item.url}" th:text="${item.label}">Menu Item</a>
<button th:if="${!item.children.empty}" type="button" class="has-submenu arrow-toggle" aria-expanded="false" aria-haspopup="true" th:attr="aria-label='Display Sub Menu for ' + ${item.label}" data-once="site-header-arrow">
<svg version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px" viewBox="0 0 16 7" enable-background="new 0 0 16 7" xml:space="preserve" width="16" height="7">
<path fill-rule="evenodd" clip-rule="evenodd" fill="#881c1c" d="M7.88,7L15.75,0H0s7.88,7,7.88,7Z"></path>
</svg>
</button>
</div>
<div class="submenu-wrapper" th:if="${!item.children.empty}">
<button class="button-back">
<svg version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px" viewBox="0 0 5 10" enable-background="new 0 0 5 10" xml:space="preserve" width="5" height="10">
<polygon fill-rule="evenodd" clip-rule="evenodd" fill="#881c1c" points="0,5 5,0 5,10 "></polygon>
</svg> Back
</button>
<span class="navigation-title" th:text="${item.label}">Submenu Title</span>
<ul class="submenu">
<li class="menu-item" th:each="child : ${item.children}">
<a th:href="${child.url}" th:text="${child.label}">Child Item</a>
</li>
</ul>
</div>
</li>
</ul>
</nav>
@@ -2242,11 +2242,17 @@
</a>
</div>
<h3 class="section-title">
BÀI VIẾT NỔI BẬT
</h3>
</div>
<div class="featured-grid">
<div class="news-events-row">
<div class="news-column">
<h3 class="section-title--news">
TIN TỨC
</h3>
<div class="featured-grid">
<div class="featured-grid__item">
<article class="news-card news-card--featured">
@@ -2405,108 +2411,8 @@
</article>
</div>
</div>
<div class="news-events-row">
<div class="news-column">
<h3 class="section-title--news">
TIN TỨC MỚI NHẤT
</h3>
<div class="news-list">
<div class="news-list__item">
<article class="news-teaser">
<div class="news-teaser__image">
<div> <img loading="lazy"
src="https://sisvietnam.vn/wp-content/uploads/2026/06/S.I.S-Can-Tho-trao-tang-xe-dap-cho-thieu-nhi-1.jpg"
width="4500" height="3006"
alt="Pyrotechnics erupt over the Football Performance Center at the conclusion of the 2026 UMass Amherst Undergraduate Commencement Ceremony">
</div>
</div>
<div class="news-teaser__content">
<div class="news-list__category">
<a href="https://sisvietnam.vn/taxonomy/term/1001" hreflang="vi">Tin Tức Bệnh
Viện</a>
</div>
<h3 class="news-teaser__title">
<a href="https://sisvietnam.vn/news/article/tuan-le-nang-cao-nhan-thuc"
rel="bookmark">
<span>Bệnh Viện S.I.S Cần Thơ Tổ Chức Thành Công Tuần Lễ Nâng Cao Nhận Thức
Về Đột Quỵ</span>
</a>
</h3>
<div class="news-teaser__summary">
<div>
<p>Ban Giám đốc Bệnh viện cùng đội ngũ chuyên gia đã tổ chức chuỗi sự kiện
truyền thông, tư vấn sức khỏe miễn phí thu hút hàng nghìn người dân tham
gia tìm hiểu và phòng ngừa bệnh.</p>
</div>
</div>
</div>
</article>
</div>
<div class="news-list__item">
<article class="news-teaser">
<div class="news-teaser__image">
<div> <img loading="lazy"
src="https://sisvietnam.vn/wp-content/uploads/2026/04/Mo-hinh-S.I.S-gop-phan-hoan-thien-mang-luoi-dot-quy-khu-vuc-huong-den-APEC-2027-08.jpg"
width="5392" height="3592"
alt="Student speaker Mansi Maheshwari addresses the 2026 Master’s and Education Specialist Commencement Ceremony at the Mullins Center on May 15, 2026.">
</div>
</div>
<div class="news-teaser__content">
<div class="news-list__category">
<a href="https://sisvietnam.vn/taxonomy/term/1001" hreflang="vi">Tin Tức Bệnh
Viện</a>
</div>
<h3 class="news-teaser__title">
<a href="https://sisvietnam.vn/news/article/tiep-nhan-thiet-bi" rel="bookmark">
<span>Bệnh Viện Đa Khoa Quốc Tế S.I.S Cần Thơ Tiếp Nhận Thêm Dàn Thiết Bị Y
Tế Hiện Đại Bậc Nhất</span>
</a>
</h3>
<div class="news-teaser__summary">
<div>
<p>Nhằm nâng cao chất lượng chẩn đoán và điều trị, S.I.S Cần Thơ đã chính
thức đưa vào hoạt động hệ thống máy DSA và MRI thế hệ mới, hỗ trợ tối đa
cho các ca can thiệp thần kinh phức tạp.</p>
</div>
</div>
</div>
</article>
</div>
</div>
</div>
<div class="events-column">
@@ -275,6 +275,13 @@
<input type="datetime-local" class="form-control" id="postEventTime" th:field="*{eventTimeLocal}">
<small class="form-text text-muted">Specify the date and time for this event.</small>
</div>
<div class="form-group mt-3" id="eventLocationGroup" style="display: none;">
<label for="postLocation" class="font-weight-bold text-danger">
<i class="fas fa-map-marker-alt"></i> Location
</label>
<input type="text" class="form-control" id="postLocation" th:field="*{location}" placeholder="e.g. Room 101">
<small class="form-text text-muted">Specify the location for this event.</small>
</div>
<hr>
<div class="d-flex justify-content-between">
<a th:href="@{/manage/posts}" class="btn btn-secondary btn-sm">
@@ -481,11 +488,14 @@
// --- Event Time Layout Toggle ---
var layoutSelect = document.getElementById('postLayout');
var eventTimeGroup = document.getElementById('eventTimeGroup');
var eventLocationGroup = document.getElementById('eventLocationGroup');
function toggleEventTime() {
if (layoutSelect.value === 'EVENT') {
eventTimeGroup.style.display = 'block';
if (eventLocationGroup) eventLocationGroup.style.display = 'block';
} else {
eventTimeGroup.style.display = 'none';
if (eventLocationGroup) eventLocationGroup.style.display = 'none';
}
}
layoutSelect.addEventListener('change', toggleEventTime);
@@ -0,0 +1,150 @@
<!DOCTYPE html>
<html lang="en" xmlns:th="http://www.thymeleaf.org" xmlns:layout="http://www.ultraq.net.nz/thymeleaf/layout"
layout:decorate="~{fragments/layout}">
<head>
<title th:text="${post.title} + ' | UMass Amherst'">Post Title | UMass Amherst</title>
<meta name="description" th:content="${post.metaDescription ?: post.excerpt}">
<style>
.livestream-video-wrapper {
position: relative;
padding-bottom: 56.25%; /* 16:9 Aspect Ratio */
height: 0;
overflow: hidden;
border-radius: 12px;
box-shadow: 0 4px 20px rgba(0, 0, 0, 0.15);
margin-bottom: 2rem;
background: #000;
}
.livestream-video-wrapper iframe {
position: absolute;
top: 0;
left: 0;
width: 100%;
height: 100%;
border: 0;
}
.livestream-meta {
margin-bottom: 2rem;
border-bottom: 1px solid #eee;
padding-bottom: 1rem;
}
.livestream-title {
font-size: 2.25rem;
font-weight: 800;
color: #111;
margin-bottom: 0.5rem;
line-height: 1.25;
}
.livestream-date {
color: #881C1C;
font-weight: 700;
font-size: 0.95rem;
text-transform: uppercase;
}
</style>
</head>
<body>
<div layout:fragment="content">
<div id="block-umass-base-content" class="block block-system block-system-main-block tc--template-container tc--article">
<div class="t--template t--article">
<!-- Content Top (Video Embed or Placeholder) -->
<div class="content-top">
<div class="lc--layout-container lc--one-column">
<div class="l--layout l--one-column">
<div class="lr--layout-region lr--main">
<div class="cc--component-container">
<!-- YouTube Embed -->
<div th:if="${post.metaDescription != null and !post.metaDescription.isEmpty()}" class="livestream-video-wrapper">
<iframe th:src="${post.metaDescription}"
title="Livestream Video"
allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share"
allowfullscreen></iframe>
</div>
<!-- Fallback Hero Image if no video -->
<div th:if="${post.metaDescription == null or post.metaDescription.isEmpty()}" class="cc--component-container cc--hero-article">
<div class="c--component c--hero-article">
<div class="f--field f--image" th:if="${post.featuredImage != null and !post.featuredImage.isEmpty()}">
<img th:src="${post.featuredImage}" th:alt="${post.title}">
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
<!-- Content Main (Description and Info) -->
<div class="content-main">
<div class="lc--layout-container lc--one-column">
<div class="l--layout l--one-column">
<div class="lr--layout-region lr--main">
<div class="livestream-meta">
<!-- If the excerpt is used for the display title, show it. Otherwise show standard post title -->
<h1 class="livestream-title" th:text="${post.excerpt != null and !post.excerpt.isEmpty() ? post.excerpt : post.title}">Post Title</h1>
<p class="livestream-date" th:if="${formattedDate != null}" th:text="${formattedDate}">Date</p>
</div>
<section class="cc--component-container cc--wysiwyg">
<div class="c--component c--wysiwyg">
<div class="f--field f--wysiwyg editorjs-content" id="postContentRaw" style="display:none;" th:text="${post.content}"></div>
<div class="f--field f--wysiwyg" id="postContentParsed"></div>
</div>
</section>
</div>
</div>
</div>
</div>
</div>
</div>
<!-- Include Editor.js parser to render the content on the frontend -->
<script>
document.addEventListener("DOMContentLoaded", function() {
var rawData = document.getElementById("postContentRaw").textContent;
var parsedContainer = document.getElementById("postContentParsed");
try {
var data = JSON.parse(rawData);
var html = "";
if (data.blocks) {
data.blocks.forEach(function(block) {
switch(block.type) {
case "paragraph":
html += "<p>" + block.data.text + "</p>";
break;
case "header":
html += "<h" + block.data.level + ">" + block.data.text + "</h" + block.data.level + ">";
break;
case "list":
var tag = block.data.style === "ordered" ? "ol" : "ul";
html += "<" + tag + ">";
block.data.items.forEach(function(item) {
html += "<li>" + item + "</li>";
});
html += "</" + tag + ">";
break;
case "image":
html += "<figure><img src='" + block.data.file.url + "' alt='" + (block.data.caption || "") + "'><figcaption>" + (block.data.caption || "") + "</figcaption></figure>";
break;
default:
break;
}
});
parsedContainer.innerHTML = html;
} else {
parsedContainer.innerHTML = rawData.replace(/\n/g, "<br>");
}
} catch(e) {
// Fallback to raw text if it is not JSON
parsedContainer.innerHTML = rawData.replace(/\n/g, "<br>");
}
});
</script>
</div>
</body>
</html>
@@ -242,8 +242,15 @@
</svg> Back </button>
<span class="navigation-title" th:text="${item.label}">Menu Item</span>
<!-- Mobile Submenu Layout (Simple List) -->
<ul class="submenu mobile-only">
<li class="menu-item" th:each="child : ${item.children}">
<a th:href="${child.url}" th:text="${child.label}">Child Item</a>
</li>
</ul>
<!-- Mega Menu Content Layout -->
<div class="mega-menu-content">
<div class="mega-menu-content desktop-only">
<!-- Column 1: Info (Title and Text) -->
<div class="mega-col-info">
<h3 th:text="${item.label}">Về Bệnh viện</h3>
@@ -275,115 +282,6 @@
</th:block>
</ul>
</nav>
<div data-component-id="umass_base:nav-quicklink-buttons">
<nav class="mc--menu mc--quicklink-button-menu">
<ul class="menu m--menu m--quicklink-button-menu">
<li class="menu-item">
<div class="f--field f--button">
<a href="https://www.umass.edu/admissions/apply" class="button-primary button-context-light " aria-label="Apply" data-component-id="umass_base:button">
<span class="button-text"> Apply </span>
</a>
</div>
</li>
<li class="menu-item">
<div class="f--field f--button">
<a href="https://minutefund.uma-foundation.org/project/29554/donate" class="button-primary button-context-light ext" aria-label="Give" data-component-id="umass_base:button" data-extlink="">
<span class="button-text"> Give </span>
<svg focusable="false" width="1em" height="1em" class="ext" data-extlink-placement="append" aria-label="(link is external)" viewBox="0 0 80 40" role="img" aria-hidden="false">
<title>(link is external)</title>
<path d="M48 26c-1.1 0-2 0.9-2 2v26H10V18h26c1.1 0 2-0.9 2-2s-0.9-2-2-2H8c-1.1 0-2 0.9-2 2v40c0 1.1 0.9 2 2 2h40c1.1 0 2-0.9 2-2V28C50 26.9 49.1 26 48 26z"></path>
<path d="M56 6H44c-1.1 0-2 0.9-2 2s0.9 2 2 2h7.2L30.6 30.6c-0.8 0.8-0.8 2 0 2.8C31 33.8 31.5 34 32 34s1-0.2 1.4-0.6L54 12.8V20c0 1.1 0.9 2 2 2s2-0.9 2-2V8C58 6.9 57.1 6 56 6z"></path>
</svg>
</a>
</div>
</li>
<li class="menu-item">
<div class="f--field f--button">
<a href="https://www.umass.edu/admissions/visit" class="button-primary button-context-light " aria-label="Visit" data-component-id="umass_base:button">
<span class="button-text"> Visit </span>
</a>
</div>
</li>
</ul>
</nav>
</div>
<nav class="mc--menu mc--utility-menu">
<ul class="menu m--menu m--utility-menu">
<li class="menu-item menu-item--expanded">
<div class="utility-button-wrapper">
<button type="button" class="utility-button arrow-toggle information-for-toggle" aria-label="Display submenu for Information menu" aria-expanded="false" aria-haspopup="true" data-once="site-header-arrow"> Info For <svg version="1.1" class="arrow-down" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px" viewBox="0 0 10 5" enable-background="new 0 0 10 5" xml:space="preserve" width="10" height="5">
<polygon fill-rule="evenodd" clip-rule="evenodd" fill="#881c1c" points="5,5 0,0 10,0 "></polygon>
</svg>
<svg version="1.1" class="arrow-right" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px" viewBox="0 0 5 10" enable-background="new 0 0 5 10" xml:space="preserve" width="5" height="10">
<polygon fill-rule="evenodd" clip-rule="evenodd" fill="#881c1c" points="5,5 0,10 0,0 "></polygon>
</svg>
</button>
<div class="submenu-wrapper">
<button class="button-back">
<svg version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px" viewBox="0 0 5 10" enable-background="new 0 0 5 10" xml:space="preserve" width="5" height="10">
<polygon fill-rule="evenodd" clip-rule="evenodd" fill="#881c1c" points="0,5 5,0 5,10 "></polygon>
</svg> Back </button>
<span class="navigation-title">Info For</span>
<ul class="submenu">
<li class="menu-item">
<a href="https://www.umass.edu/gateway/info/prospective-students" data-drupal-link-system-path="node/42831">Prospective Students</a>
</li>
<li class="menu-item">
<a href="https://www.umass.edu/gateway/info/current-students" title="Click here for info for current students" data-drupal-link-system-path="node/61">Current Students</a>
</li>
<li class="menu-item">
<a href="https://www.umass.edu/gateway/info/faculty-and-staff" title="Click here for info for faculty and staff" data-drupal-link-system-path="node/66">Faculty and Staff</a>
</li>
<li class="menu-item">
<a href="https://www.umass.edu/gateway/info/parents-and-families" title="Click here for info for parents" data-drupal-link-system-path="node/81">Parents and Families</a>
</li>
</ul>
</div>
</div>
</li>
<li class="menu-item">
<a href="https://www.umassalumni.com/" title="UMass Amherst Alumni Association">Alumni</a>
</li>
<li class="menu-item">
<a href="https://umassathletics.com/" title="UMass Amherst Athletics">Athletics</a>
</li>
<li class="menu-item">
<a href="https://www.uma-foundation.org/" title="Giving to UMass Amherst">Giving</a>
</li>
<li class="menu-item">
<a href="https://www.library.umass.edu/">Libraries</a>
</li>
</ul>
</nav>
<nav data-component-id="umass_base:header-socials">
<ul class="social-media-links--platforms platforms ally-focus-within">
<li>
<a class="ext" href="https://www.facebook.com/UMassAmherst/" target="_blank" rel="noopener noreferrer">
<svg aria-hidden="true" focusable="false" viewBox="0 0 17 17">
<title>Find UMass Amherst on Facebook</title>
<path fill-rule="evenodd" fill="currentColor" d="M17,8.5C17,3.81,13.19,0,8.5,0S0,3.81,0,8.5c0,3.98,2.75,7.33,6.45,8.25v-5.65h-1.75v-2.6h1.75v-1.12c0-2.89,1.31-4.23,4.15-4.23.54,0,1.47.11,1.85.21v2.35c-.2-.02-.55-.03-.98-.03-1.39,0-1.93.53-1.93,1.9v.92h2.78l-.48,2.6h-2.3v5.84c4.21-.51,7.47-4.09,7.47-8.44Z"></path>
</svg>
</a>
</li>
<li>
<a class="ext" href="https://www.instagram.com/umass/" target="_blank" rel="noopener noreferrer">
<!--?xml version="1.0" encoding="UTF-8"?-->
<svg aria-hidden="true" focusable="false" viewBox="0 0 17 20">
<title>Find UMass Amherst on Instagram</title>
<path fill-rule="evenodd" fill="currentColor" <path="" d="M8.51,5.51c-.57,0-1.14.11-1.67.34-.53.22-1.01.55-1.42.97-.82.84-1.28,1.98-1.29,3.17,0,1.19.45,2.34,1.27,3.18.82.84,1.93,1.32,3.08,1.32,1.16,0,2.27-.47,3.09-1.31.82-.84,1.28-1.98,1.29-3.17,0-1.19-.45-2.34-1.27-3.18-.82-.84-1.93-1.32-3.08-1.32ZM8.49,7.09c.37,0,.74.07,1.08.22.34.15.66.36.92.63.26.27.47.59.62.94.14.35.22.73.22,1.11,0,.38-.07.76-.21,1.12-.14.35-.35.68-.61.95-.26.27-.57.49-.92.64-.34.15-.71.22-1.08.23-.37,0-.74-.07-1.08-.22-.34-.15-.66-.36-.92-.63-.26-.27-.47-.59-.62-.94-.14-.35-.22-.73-.22-1.11,0-.38.07-.76.21-1.12.14-.35.35-.68.61-.95.26-.27.57-.49.92-.64.34-.15.71-.22,1.08-.23ZM12.03,5.32c0-.28.11-.54.3-.74.19-.2.45-.31.72-.31s.53.11.72.31c.19.2.3.46.3.74s-.11.54-.3.74c-.19.2-.45.31-.72.31s-.53-.11-.72-.31c-.19-.2-.3-.46-.3-.74ZM16.95,6.39c-.06-1.4-.38-2.64-1.37-3.67-.99-1.02-2.2-1.34-3.56-1.41-1.4-.08-5.61-.08-7.02,0-1.36.07-2.57.39-3.56,1.41C.44,3.74.13,4.98.06,6.38-.02,7.83-.02,12.16.06,13.61c.06,1.4.38,2.64,1.37,3.67,1,1.02,2.2,1.34,3.56,1.41,1.4.08,5.61.08,7.02,0,1.36-.07,2.57-.39,3.56-1.41.99-1.02,1.31-2.27,1.37-3.67.08-1.45.08-5.77,0-7.22ZM15.14,15.16c-.3.77-.87,1.36-1.62,1.66-1.12.46-3.78.35-5.01.35s-3.9.1-5.01-.35c-.74-.3-1.32-.89-1.62-1.66-.44-1.15-.34-3.89-.34-5.16s-.1-4.01.34-5.16c.3-.77.87-1.36,1.62-1.66,1.12-.46,3.78-.35,5.01-.35s3.9-.1,5.01.35c.74.3,1.32.89,1.62,1.66.44,1.15.34,3.89.34,5.16s.1,4.01-.34,5.16Z"></path>
</svg>
</a>
</li>
<li>
<a class="ext" href="https://www.snapchat.com/add/umassamherst" target="_blank" rel="noopener noreferrer">
<svg aria-hidden="true" focusable="false" viewBox="0 0 17 17">
<title>Add UMass Amherst on Snapchat</title>
<path d="m12.8333333 20.3333333c-.0833333 0-.0833333 0-.1666666 0h-.0833334c-1.0833333 0-1.6666666-.3333333-2.25-.75-.41666663-.3333333-.74999997-.5833333-1.16666663-.5833333-.25 0-.41666667-.0833333-.66666667-.0833333-.33333333 0-.66666667.0833333-.91666667.0833333-.16666666 0-.33333333.0833333-.41666666.0833333-.33333334 0-.5-.25-.5-.4166666 0-.1666667-.08333334-.25-.08333334-.4166667 0-.0833333-.08333333-.25-.08333333-.3333333-1.33333333-.25-2.08333333-.5-2.25-1-.08333333 0-.08333333-.0833334-.08333333-.1666667 0-.25.16666666-.4166667.41666666-.5 2.25-.3333333 3.33333334-2.75 3.33333334-2.8333333.08333333-.25.16666666-.4166667.08333333-.5833334-.08333333-.1666666-.58333333-.3333333-.91666667-.4166666-.08333333 0-.16666666-.0833334-.25-.0833334-.83333333-.3333333-1-.75-.91666666-1.0833333.08333333-.5.83333333-.75 1.25-.5833333.33333333.1666666.58333333.1666666.75.1666666h.25c0-.0833333 0-.25 0-.3333333-.08333334-1.16666667-.25-2.66666667.16666666-3.5 1.16666667-2.66666667 3.66666667-2.83333333 4.33333337-2.83333333h.3333333c.75 0 3.1666667.16666666 4.3333333 2.83333333.4166667.91666667.3333334 2.33333333.25 3.5v.0833333.25h.1666667c.1666667 0 .4166667-.0833333.6666667-.1666666.1666666-.0833334.25-.0833334.4166666-.0833334.1666667 0 .25 0 .4166667.0833334.3333333.0833333.5833333.4166666.5833333.6666666 0 .4166667-.3333333.6666667-.9166666.9166667-.0833334 0-.1666667.0833333-.25.0833333-.3333334.0833334-.8333334.25-.9166667.5-.0833333.1666667 0 .3333334.0833333.5.0833334.25 1.0833334 2.5 3.25 2.8333334.25 0 .4166667.25.4166667.5 0 .0833333 0 .1666666-.0833333.1666666-.1666667.4166667-.9166667.75-2.25 1 0 .0833334-.0833334.25-.0833334.3333334 0 .1666666-.0833333.25-.0833333.4166666-.0833333.25-.25.4166667-.5.4166667-.0833333 0-.25 0-.4166667-.0833333-.25-.0833334-.5-.0833334-.9166666-.0833334-.1666667 0-.4166667 0-.6666667.0833334-.4166667.0833333-.75.3333333-1.1666667.5833333-.6666666.5833333-1.5.8333333-2.5.8333333" fill="currentColor" fill-rule="evenodd" transform="translate(-4 -3)"></path>
</svg>
</a>
</li>
</ul>
</nav>
</div>
</div>
<button id="search-drawer-trigger" aria-label="Open Search" data-once="header-search">
@@ -9,6 +9,8 @@
<link rel="stylesheet" media="all" th:href="@{/theme-assets/umass/css/css_09S7WcUyhLeUXabknzECn_ua5zOangtv2BF4OXAW2fM.css}">
<link rel="stylesheet" media="all" th:href="@{/theme-assets/umass/css/css_5USufIKxGNJyomvgpy2m9ITQlTN9qcrtJQsw_06dSbo.css}">
<link rel="stylesheet" media="all" th:href="@{/theme-assets/umass/css/css_G5ztZKRblBn54t8h9F_EK5Y3CsZrMvA2BWPMI5jJoO4.css}">
<!-- Custom CSS -->
<link rel="stylesheet" th:href="@{/css/custom.css}">
<!-- Theme Customizer CSS Output -->
<style th:utext="${themeCss}"></style>
<!-- wp_head hook -->
@@ -46,6 +48,8 @@
</div>
<!-- UMass Scripts -->
<script th:src="@{/theme-assets/umass/js/js_aQtUyeGxehNR84AlGzGB1VfMu1Wn3lqHxvL8rocj1EU.js}"></script>
<script th:src="@{/js/mobile-menu.js}"></script>
<script th:src="@{/js/ambient-video.js}"></script>
<!-- wp_footer hook -->
<th:block th:utext="${hookManager.doActionAndReturn('wp_footer')}"></th:block>
</body>