refactor: remove legacy UMASS samples and implement new header navigation and content block snippets

This commit is contained in:
2026-07-09 16:35:38 +07:00
parent e6d98edc45
commit 479d794b8e
385 changed files with 4125 additions and 82456 deletions
@@ -48,7 +48,7 @@ public class ManageMenuController {
}
@PostMapping("/{id}/items/add")
public String addMenuItem(@PathVariable Long id, @RequestParam String label, @RequestParam String url, RedirectAttributes redirectAttributes) {
public String addMenuItem(@PathVariable Long id, @RequestParam String label, @RequestParam String url, @RequestParam(required = false) Long parentId, RedirectAttributes redirectAttributes) {
Menu menu = menuService.findById(id).orElseThrow(() -> new IllegalArgumentException("Invalid menu Id"));
MenuItem item = new MenuItem();
item.setLabel(label);
@@ -56,6 +56,14 @@ public class ManageMenuController {
item.setMenu(menu);
item.setDisplayOrder(menu.getItems().size());
if (parentId != null) {
MenuItem parentItem = menu.getItems().stream()
.filter(i -> i.getId().equals(parentId))
.findFirst()
.orElse(null);
item.setParent(parentItem);
}
menu.getItems().add(item);
menuService.save(menu);
@@ -69,4 +77,14 @@ public class ManageMenuController {
redirectAttributes.addFlashAttribute("successMessage", "Menu deleted successfully.");
return "redirect:/manage/menus";
}
@PostMapping("/{id}/update")
public String updateMenu(@PathVariable Long id, @RequestParam String name, @RequestParam(required = false) String location, RedirectAttributes redirectAttributes) {
Menu menu = menuService.findById(id).orElseThrow(() -> new IllegalArgumentException("Invalid menu Id"));
menu.setName(name);
menu.setLocation(location);
menuService.save(menu);
redirectAttributes.addFlashAttribute("successMessage", "Menu properties updated successfully.");
return "redirect:/manage/menus/" + id + "/edit";
}
}
@@ -39,6 +39,10 @@ public class MenuItem extends AbstractAuditingEntity<Long> {
@JoinColumn(name = "parent_id")
private MenuItem parent;
@OneToMany(mappedBy = "parent", cascade = CascadeType.ALL, orphanRemoval = true)
@OrderBy("displayOrder ASC")
private java.util.Set<MenuItem> children = new java.util.LinkedHashSet<>();
@Column(name = "display_order")
private Integer displayOrder = 0;
@@ -83,6 +87,14 @@ public class MenuItem extends AbstractAuditingEntity<Long> {
this.parent = parent;
}
public java.util.Set<MenuItem> getChildren() {
return children;
}
public void setChildren(java.util.Set<MenuItem> children) {
this.children = children;
}
public Integer getDisplayOrder() {
return displayOrder;
}
@@ -11,5 +11,14 @@ import java.util.Optional;
*/
@Repository
public interface MenuRepository extends JpaRepository<Menu, Long> {
@Override
@org.springframework.data.jpa.repository.EntityGraph(attributePaths = {"items", "items.children"})
Optional<Menu> findById(Long id);
@Override
@org.springframework.data.jpa.repository.EntityGraph(attributePaths = {"items", "items.children"})
java.util.List<Menu> findAll();
@org.springframework.data.jpa.repository.EntityGraph(attributePaths = {"items", "items.children"})
Optional<Menu> findByLocation(String location);
}
@@ -40,4 +40,14 @@ public class MenuService {
public void deleteById(Long id) {
menuRepository.deleteById(id);
}
@jakarta.annotation.PostConstruct
public void fixPrimaryMenuLocation() {
for (Menu menu : menuRepository.findAll()) {
if ("primaryMenu".equals(menu.getName()) && (menu.getLocation() == null || "Unassigned".equals(menu.getLocation()) || menu.getLocation().trim().isEmpty())) {
menu.setLocation("PRIMARY");
menuRepository.save(menu);
}
}
}
}
@@ -17,773 +17,14 @@
<div id="mobile-flyout-container">
<div class="primary-navigation">
<nav class="mc--menu mc--main-menu">
<nav class="mc--menu mc--main-menu" th:if="${primaryMenu != null}">
<ul class="menu m--menu m--main-menu">
<li class="megamenu menu-item menu-item--expanded">
<li class="megamenu menu-item" th:each="item : ${primaryMenu.items}">
<div class="link-arrow-wrapper">
<a href="https://www.umass.edu/gateway/academics"
data-drupal-link-system-path="node/11">Academics</a>
<button type="button" class="has-submenu arrow-toggle" aria-expanded="false" aria-haspopup="true"
aria-label="Display Sub Menu for Academics" 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>
<a th:href="${item.url}" th:text="${item.label}">Menu Item</a>
</div>
<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">Academics</span>
<ul class="submenu">
<li class="menu-item menu-item--expanded">
<span>Get Your Degree</span>
<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">Get Your Degree</span>
<ul class="submenu">
<li class="menu-item">
<a href="https://www.umass.edu/gateway/academics/undergraduate"
data-drupal-link-system-path="node/106">Undergraduate</a>
</li>
<li class="menu-item">
<a href="https://www.umass.edu/bdic/">Design Your Own Major</a>
</li>
<li class="menu-item">
<a href="https://www.umass.edu/gateway/academics/graduate"
data-drupal-link-system-path="node/111">Graduate</a>
</li>
<li class="menu-item">
<a href="https://www.umass.edu/gateway/academics/accelerated-masters-4plus1-degree"
data-drupal-link-system-path="node/42816">Accelerated Master's</a>
</li>
<li class="menu-item">
<a href="https://www.umass.edu/gateway/academics/schools-colleges"
data-drupal-link-system-path="node/596">Schools &amp; Colleges</a>
</li>
<li class="menu-item">
<a href="https://www.umass.edu/gateway/bachelors-degree-completion-online"
title="Complete your bachelor&#39;s degree fully online at UMass Amherst."
data-drupal-link-system-path="node/84461">Bachelors Degree Completion</a>
</li>
</ul>
</div>
</li>
<li class="menu-item menu-item--expanded">
<span>Ways to Learn</span>
<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">Ways to Learn</span>
<ul class="submenu">
<li class="menu-item">
<a href="https://www.umass.edu/gateway/academics/explore-our-campuses"
data-drupal-link-system-path="node/84076">Our Campuses</a>
</li>
<li class="menu-item">
<a href="https://www.umass.edu/gateway/academics/summer-winter-sessions"
data-drupal-link-system-path="node/83931">Summer &amp; Winter Sessions</a>
</li>
<li class="menu-item">
<a href="https://www.umass.edu/gateway/academics/study-abroad"
data-drupal-link-system-path="node/84116">Study Abroad</a>
</li>
<li class="menu-item">
<a href="https://www.umass.edu/gateway/academics/first-year-launch-programs"
data-drupal-link-system-path="node/83936">First-Year Launch Programs</a>
</li>
<li class="menu-item">
<a href="https://www.umass.edu/lifelong/">Pre-College &amp; Lifelong Learning</a>
</li>
</ul>
</div>
</li>
<li class="menu-item menu-item--expanded">
<span>Resources</span>
<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">Resources</span>
<ul class="submenu">
<li class="menu-item">
<a href="https://www.umass.edu/gateway/academics/university-libraries"
data-drupal-link-system-path="node/616">University Libraries</a>
</li>
<li class="menu-item">
<a href="https://www.umass.edu/gateway/academics/academic-advising"
data-drupal-link-system-path="node/26366">Academic Advising</a>
</li>
<li class="menu-item">
<a href="https://www.umass.edu/careers/">Career &amp; Internship Services</a>
</li>
<li class="menu-item">
<a href="https://www.umass.edu/gateway/academics/explore-our-programs"
data-drupal-link-system-path="node/251">Explore Our Programs</a>
</li>
</ul>
</div>
</li>
</ul>
</div>
</li>
<li class="menu-item menu-item--expanded">
<div class="link-arrow-wrapper">
<a href="https://www.umass.edu/admissions" data-drupal-link-system-path="node/36">Admissions &amp;
Aid</a>
<button type="button" class="has-submenu arrow-toggle" aria-expanded="false" aria-haspopup="true"
aria-label="Display Sub Menu for Admissions &amp; Aid" 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">
<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">Admissions &amp; Aid</span>
<ul class="submenu">
<li class="menu-item menu-item--expanded">
<a href="https://www.umass.edu/admissions/undergraduate-admissions"
data-drupal-link-system-path="node/266">Undergraduate Admissions</a>
<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">Undergraduate Admissions</span>
<ul class="submenu">
<li class="menu-item">
<a href="https://www.umass.edu/admissions/undergraduate-admissions"
data-drupal-link-system-path="node/266">Home</a>
</li>
<li class="menu-item menu-item--collapsed">
<a href="https://www.umass.edu/admissions/explore"
data-drupal-link-system-path="node/626">Explore</a>
</li>
<li class="menu-item menu-item--collapsed">
<a href="https://www.umass.edu/admissions/visit"
data-drupal-link-system-path="node/1366">Visit</a>
</li>
<li class="menu-item menu-item--collapsed">
<a href="https://www.umass.edu/admissions/apply"
data-drupal-link-system-path="node/271">Apply</a>
</li>
<li class="menu-item menu-item--collapsed">
<a href="https://www.umass.edu/admissions/undergraduate-admissions/costs-aid"
data-drupal-link-system-path="node/2651">Costs &amp; Aid</a>
</li>
<li class="menu-item menu-item--collapsed">
<a href="https://www.umass.edu/admissions/connect"
data-drupal-link-system-path="node/656">Connect</a>
</li>
<li class="menu-item menu-item--collapsed">
<a href="https://www.umass.edu/admissions/admitted-students"
data-drupal-link-system-path="node/1601">Admitted Students</a>
</li>
</ul>
</div>
</li>
<li class="menu-item">
<a href="https://www.umass.edu/graduate/apply">Graduate Admissions</a>
</li>
<li class="menu-item">
<a href="https://www.umass.edu/universityplus/admissions">Undergraduate Online Admissions</a>
</li>
<li class="menu-item">
<a href="https://www.umass.edu/uww/pre-college">Pre-College Admissions</a>
</li>
<li class="menu-item menu-item--expanded">
<a href="https://www.umass.edu/financialaid" data-drupal-link-system-path="node/781">Financial
Aid</a>
<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">Financial Aid</span>
<ul class="submenu">
<li class="menu-item menu-item--collapsed">
<a href="https://www.umass.edu/financialaid/financial-aid-services"
data-drupal-link-system-path="node/856">Financial Aid Services</a>
</li>
<li class="menu-item menu-item--collapsed">
<a href="https://www.umass.edu/financialaid/undergraduate"
data-drupal-link-system-path="node/786">Undergraduate</a>
</li>
<li class="menu-item menu-item--collapsed">
<a href="https://www.umass.edu/financialaid/graduate"
data-drupal-link-system-path="node/19936">Graduate</a>
</li>
<li class="menu-item menu-item--collapsed">
<a href="https://www.umass.edu/financialaid/non-degree-seeking-students"
data-drupal-link-system-path="node/20531">Non-Degree</a>
</li>
<li class="menu-item menu-item--collapsed">
<a href="https://www.umass.edu/financialaid/university"
data-drupal-link-system-path="node/991">University+</a>
</li>
<li class="menu-item menu-item--collapsed">
<a href="https://www.umass.edu/financialaid/student-employment"
data-drupal-link-system-path="node/1056">Student Employment</a>
</li>
</ul>
</div>
</li>
</ul>
</div>
</li>
<li class="menu-item menu-item--expanded">
<div class="link-arrow-wrapper">
<a href="https://www.umass.edu/gateway/campus-life" data-drupal-link-system-path="node/16">Campus
Life</a>
<button type="button" class="has-submenu arrow-toggle" aria-expanded="false" aria-haspopup="true"
aria-label="Display Sub Menu for Campus Life" 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">
<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">Campus Life</span>
<ul class="submenu">
<li class="menu-item">
<a href="https://www.umass.edu/gateway/campus-life/living-and-dining"
data-drupal-link-system-path="node/3666">Living and Dining</a>
</li>
<li class="menu-item">
<a href="https://www.umass.edu/gateway/campus-life/student-activities"
data-drupal-link-system-path="node/3676">Student Activities</a>
</li>
<li class="menu-item">
<a href="https://www.umass.edu/gateway/campus-life/student-support-and-wellness"
data-drupal-link-system-path="node/3681">Student Support and Wellness</a>
</li>
<li class="menu-item">
<a href="https://www.umass.edu/gateway/campus-life/life-amherst"
data-drupal-link-system-path="node/3661">Life in Amherst</a>
</li>
<li class="menu-item">
<a href="https://www.umass.edu/gateway/arts-culture"
data-drupal-link-system-path="node/84101">Arts &amp; Culture</a>
</li>
</ul>
</div>
</li>
<li class="menu-item menu-item--expanded">
<div class="link-arrow-wrapper">
<a href="https://www.umass.edu/gateway/why-umass" data-drupal-link-system-path="node/82851">Why
UMass?</a>
<button type="button" class="has-submenu arrow-toggle" aria-expanded="false" aria-haspopup="true"
aria-label="Display Sub Menu for Why UMass?" 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">
<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">Why UMass?</span>
<ul class="submenu">
<li class="menu-item">
<a href="https://www.umass.edu/gateway/why-umass/discover-ideas"
data-drupal-link-system-path="node/83286">Discover Ideas</a>
</li>
<li class="menu-item">
<a href="https://www.umass.edu/gateway/why-umass/choose-your-path"
data-drupal-link-system-path="node/83471">Choose Your Path</a>
</li>
<li class="menu-item">
<a href="https://www.umass.edu/gateway/why-umass/find-your-purpose"
data-drupal-link-system-path="node/83511">Find Your Purpose</a>
</li>
<li class="menu-item menu-item--expanded">
<a href="https://www.umass.edu/gateway/why-umass/world-class-public-research-university"
data-drupal-link-system-path="node/3716">About UMass Amherst</a>
<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">About UMass Amherst</span>
<ul class="submenu">
<li class="menu-item">
<a href="https://www.umass.edu/gateway/umass-edge/about-umass-amherst/umass-history"
data-drupal-link-system-path="node/3721">UMass History</a>
</li>
<li class="menu-item">
<a href="https://www.umass.edu/gateway/why-umass/about-umass-amherst/umass-amherst-numbers"
data-drupal-link-system-path="node/74316">UMass Amherst By the Numbers</a>
</li>
<li class="menu-item menu-item--collapsed">
<a href="https://www.umass.edu/chancellor/">Office of the Chancellor</a>
</li>
<li class="menu-item">
<a href="https://www.umass.edu/gateway/umass-edge/about-umass-amherst/mascot/sam-minuteman"
data-drupal-link-system-path="node/21126">Sam the Minuteman</a>
</li>
<li class="menu-item">
<a href="https://www.umass.edu/gateway/umass-stories"
data-drupal-link-system-path="node/55696">UMass Amherst Stories</a>
</li>
</ul>
</div>
</li>
</ul>
</div>
</li>
<li class="menu-item menu-item--expanded">
<div class="link-arrow-wrapper">
<a href="https://www.umass.edu/gateway/research"
data-drupal-link-system-path="node/79406">Research</a>
<button type="button" class="has-submenu arrow-toggle" aria-expanded="false" aria-haspopup="true"
aria-label="Display Sub Menu for Research" 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">
<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">Research</span>
<ul class="submenu">
<li class="menu-item">
<a href="https://www.umass.edu/gateway/research/student-research"
data-drupal-link-system-path="node/606">Student Research</a>
</li>
<li class="menu-item">
<a href="https://www.umass.edu/gateway/research/faculty-excellence"
data-drupal-link-system-path="node/19971">Faculty Excellence</a>
</li>
<li class="menu-item menu-item--expanded">
<a href="https://www.umass.edu/gateway/research/innovation-impact"
data-drupal-link-system-path="node/601">Innovation &amp; Impact</a>
<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">Innovation &amp; Impact</span>
<ul class="submenu">
<li class="menu-item">
<a href="https://www.umass.edu/gateway/research/stories"
data-drupal-link-system-path="node/35236">Research News &amp; Stories</a>
</li>
<li class="menu-item">
<a href="https://www.umass.edu/gateway/research/timeline"
data-drupal-link-system-path="gateway/research/timeline">Timeline of Research
Breakthroughs</a>
</li>
</ul>
</div>
</li>
<li class="menu-item">
<a href="https://www.umass.edu/gateway/research/centers-and-institutes"
data-drupal-link-system-path="node/611">Centers and Institutes</a>
</li>
</ul>
</div>
</li>
<li class="menu-item menu-item--expanded">
<div class="link-arrow-wrapper">
<a href="https://www.umass.edu/news/news-events" data-drupal-link-system-path="node/31">News &amp;
Events</a>
<button type="button" class="has-submenu arrow-toggle" aria-expanded="false" aria-haspopup="true"
aria-label="Display Sub Menu for News &amp; Events" 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">
<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">News &amp; Events</span>
<ul class="submenu">
<li class="menu-item">
<a href="https://www.umass.edu/news/news-events/news-headlines"
data-drupal-link-system-path="node/79501">News Headlines</a>
</li>
<li class="menu-item">
<a href="https://events.umass.edu/">Events</a>
</li>
<li class="menu-item">
<a href="https://www.umass.edu/news/news-events/experts-umass"
data-drupal-link-system-path="node/971">Experts at UMass</a>
</li>
<li class="menu-item menu-item--expanded">
<a href="https://www.umass.edu/news/federal-actions"
data-drupal-link-system-path="node/75351">Federal Actions</a>
<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">Federal Actions</span>
<ul class="submenu">
<li class="menu-item">
<a href="https://www.umass.edu/news/federal-actions/all-updates"
data-drupal-link-system-path="node/76176">View All Federal Actions Updates</a>
</li>
</ul>
</div>
</li>
<li class="menu-item">
<a href="https://www.umass.edu/news/news-events/olympia-drive-fire-response"
data-drupal-link-system-path="node/81266">Olympia Drive Fire Response</a>
</li>
<li class="menu-item">
<a href="https://www.umass.edu/chancellor/">Office of Chancellor Javier Reyes</a>
</li>
<li class="menu-item">
<a href="https://www.umass.edu/institutional-effectiveness/strategic-plan">Strategic Plan
20242034</a>
</li>
<li class="menu-item">
<a href="https://www.umass.edu/news/news-events/news-office-frequently-asked-questions"
data-drupal-link-system-path="node/21221">Frequently Asked Questions</a>
</li>
<li class="menu-item menu-item--expanded">
<a href="https://www.umass.edu/news/news-events/inside-umass"
data-drupal-link-system-path="node/21016">Inside UMass</a>
<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">Inside UMass</span>
<ul class="submenu">
<li class="menu-item">
<a href="https://www.umass.edu/news/news-events/inside-umass/submit-inside-umass-procedures-and-guidelines"
data-drupal-link-system-path="node/26211">Submit to Inside UMass</a>
</li>
<li class="menu-item">
<a href="https://www.umass.edu/news/news-events/news-headlines">View Most Recent News
Headlines</a>
</li>
<li class="menu-item">
<a
href="https://subscribe.umass.edu/subscriptioncenter/manageList/subscribeFromLink?channel_id=a2w6S000007eAfOQAU">Subscribe
to Inside UMass</a>
</li>
</ul>
</div>
</li>
<li class="menu-item">
<a href="https://www.umass.edu/news/news-events/hometown-news-requests"
data-drupal-link-system-path="node/21091">Hometown News Requests</a>
</li>
<li class="menu-item">
<a
href="https://www.umass.edu/university-relations/toolkit/social-media/social-media-directory">Social
Media Directory</a>
</li>
<li class="menu-item">
<a href="https://www.umass.edu/news/news-events/video-services"
data-drupal-link-system-path="node/20596">Video Services</a>
</li>
<li class="menu-item">
<a href="https://www.umass.edu/news/news-events/job-opportunities-students"
data-drupal-link-system-path="node/20546">Job Opportunities for Students</a>
</li>
<li class="menu-item">
<a href="https://www.umass.edu/news/news-events/contact-us"
data-drupal-link-system-path="node/3751">Contact Us</a>
</li>
</ul>
</div>
</li>
</ul>
</nav>
@@ -21,6 +21,30 @@
<div class="row">
<!-- Add Item Form -->
<div class="col-lg-4">
<!-- Edit Menu Details -->
<div class="card shadow mb-4">
<div class="card-header py-3">
<h6 class="m-0 font-weight-bold text-primary">Edit Menu Properties</h6>
</div>
<div class="card-body">
<form th:action="@{/manage/menus/{id}/update(id=${menu.id})}" method="post">
<div class="form-group">
<label for="name">Menu Name</label>
<input type="text" class="form-control" id="name" name="name" th:value="${menu.name}" required>
</div>
<div class="form-group">
<label for="location">Location</label>
<select class="form-control" id="location" name="location">
<option value="" th:selected="${menu.location == null || menu.location == '' || menu.location == 'Unassigned'}">Unassigned</option>
<option value="PRIMARY" th:selected="${menu.location == 'PRIMARY'}">Primary Navigation</option>
<option value="FOOTER" th:selected="${menu.location == 'FOOTER'}">Footer Navigation</option>
</select>
</div>
<button type="submit" class="btn btn-primary btn-block">Save Properties</button>
</form>
</div>
</div>
<div class="card shadow mb-4">
<div class="card-header py-3">
<h6 class="m-0 font-weight-bold text-primary">Add Custom Link</h6>
@@ -35,6 +59,13 @@
<label for="url">URL</label>
<input type="text" class="form-control" id="url" name="url" placeholder="e.g. /" required>
</div>
<div class="form-group">
<label for="parentId">Parent Item (Optional)</label>
<select class="form-control" id="parentId" name="parentId">
<option value="">-- None (Top Level) --</option>
<option th:each="parentItem : ${menu.items}" th:if="${parentItem.parent == null}" th:value="${parentItem.id}" th:text="${parentItem.label}"></option>
</select>
</div>
<button type="submit" class="btn btn-primary btn-block">Add to Menu</button>
</form>
</div>
@@ -49,16 +80,18 @@
</div>
<div class="card-body">
<ul class="list-group">
<li class="list-group-item d-flex justify-content-between align-items-center" th:each="item : ${menu.items}">
<li class="list-group-item d-flex justify-content-between align-items-center" th:each="item : ${menu.items}" th:style="${item.parent != null ? 'margin-left: 2rem; border-left: 4px solid #4e73df;' : ''}">
<div>
<strong th:text="${item.label}">Link Text</strong><br>
<strong th:text="${item.label}">Link Text</strong>
<span class="badge badge-secondary ml-2" th:if="${item.parent != null}" th:text="'Child of: ' + ${item.parent.label}">Child</span>
<br>
<small class="text-muted" th:text="${item.url}">URL</small>
</div>
<!-- Future enhancement: reorder buttons and delete button -->
<span class="badge badge-primary badge-pill" th:text="'Order: ' + ${item.displayOrder}">0</span>
</li>
</ul>
<div th:if="${menu.items.empty}" class="alert alert-info mt-3">
<div th:if="${#lists.isEmpty(menu.items)}" class="alert alert-info mt-3">
No items in this menu yet.
</div>
</div>
@@ -61,8 +61,8 @@
<tbody>
<tr th:each="menu : ${menus}">
<td th:text="${menu.name}">Menu Name</td>
<td th:text="${menu.location ?: 'Unassigned'}">Location</td>
<td th:text="${menu.items.size()}">0</td>
<td th:text="${menu.location != null ? menu.location : 'Unassigned'}">Location</td>
<td th:text="${#lists.size(menu.items)}">0</td>
<td>
<a th:href="@{/manage/menus/{id}/edit(id=${menu.id})}" class="btn btn-sm btn-info">Edit Items</a>
<form th:action="@{/manage/menus/{id}/delete(id=${menu.id})}" method="post" style="display:inline;">
@@ -70,7 +70,7 @@
</form>
</td>
</tr>
<tr th:if="${menus.empty}">
<tr th:if="${#lists.isEmpty(menus)}">
<td colspan="4" class="text-center">No menus found.</td>
</tr>
</tbody>
@@ -7,6 +7,200 @@
left: 0;
z-index: 102;
}
/* --- CUSTOM SUBMENU ANIMATION (UMC Hospital Style) --- */
@media (min-width: 1024px) {
/* Main Menu Item Link Hover Effect (Underline slide in) */
.mc--main-menu .megamenu.menu-item > .link-arrow-wrapper > a {
position: relative;
display: inline-block;
}
.mc--main-menu .megamenu.menu-item > .link-arrow-wrapper > a::before {
content: '';
position: absolute;
left: 0;
bottom: -3px;
height: 3px;
background-color: #881c1c;
width: 0;
transition: width 0.3s ease-in-out;
}
.mc--main-menu .megamenu.menu-item:hover > .link-arrow-wrapper > a::before {
width: 100%;
}
/* Mega Menu Wrapper Animation (Fade in + Slide up) */
.mc--main-menu .megamenu.menu-item {
position: relative !important; /* Anchor mega menu vertically to this item */
}
.mc--main-menu .megamenu.menu-item .submenu-wrapper {
position: absolute !important;
top: 100% !important;
/* left and width are dynamically calculated via JS for true full-width */
transform: translateY(15px) !important;
background: #f8f9fa !important; /* Soft gray background */
box-shadow: 0 10px 25px -5px rgba(0, 0, 0, 0.15) !important;
opacity: 0 !important;
visibility: hidden !important;
transition: opacity 0.3s ease-out, transform 0.3s ease-out, visibility 0.3s ease-out !important;
padding: 40px 0 !important;
z-index: 100 !important;
display: flex !important;
justify-content: center !important;
border-top: 4px solid #881c1c; /* Top brand border */
overflow: hidden;
}
/* Reveal Submenu on Hover */
.mc--main-menu .megamenu.menu-item:hover .submenu-wrapper {
opacity: 1 !important;
visibility: visible !important;
transform: translateY(0) !important;
}
}
</style>
<script>
document.addEventListener('DOMContentLoaded', function() {
function adjustMegaMenus() {
if (window.innerWidth < 1024) return;
const megamenus = document.querySelectorAll('.mc--main-menu .megamenu.menu-item');
megamenus.forEach(menu => {
const wrapper = menu.querySelector('.submenu-wrapper');
if (wrapper) {
const rect = menu.getBoundingClientRect();
// Shift wrapper exactly to the left edge of the window
wrapper.style.left = '-' + rect.left + 'px';
// Set width to exact window width
wrapper.style.width = window.innerWidth + 'px';
}
});
}
// Adjust on load and window resize
adjustMegaMenus();
window.addEventListener('resize', adjustMegaMenus);
// Also adjust precisely on hover in case layout shifted after load
const megamenus = document.querySelectorAll('.mc--main-menu .megamenu.menu-item');
megamenus.forEach(menu => {
menu.addEventListener('mouseenter', adjustMegaMenus);
});
});
</script>
<style>
@media (min-width: 1024px) {
/* Arrow Rotation */
.mc--main-menu .megamenu.menu-item .arrow-toggle svg {
transition: transform 0.3s ease-in-out;
}
.mc--main-menu .megamenu.menu-item:hover .arrow-toggle svg {
transform: rotate(180deg);
}
/* Mega Menu Layout columns */
.mega-menu-content {
display: flex;
width: 100%;
max-width: 1200px;
margin: 0 auto;
gap: 30px;
padding: 0 20px;
}
/* Left Column: Info */
.mega-col-info {
flex: 1;
}
.mega-col-info h3 {
color: #00529b; /* Classic medical blue */
font-size: 24px;
font-weight: 700;
margin-top: 0;
margin-bottom: 15px;
}
.mega-col-info p {
color: #4b5563;
font-size: 14px;
line-height: 1.6;
}
/* Middle Column: Links */
.mega-col-links {
flex: 1.2;
border-left: 1px solid #d1d5db;
padding-left: 30px;
max-height: 350px;
overflow-y: auto;
}
/* Scrollbar styling for middle column */
.mega-col-links::-webkit-scrollbar {
width: 6px;
}
.mega-col-links::-webkit-scrollbar-track {
background: #f1f1f1;
border-radius: 10px;
}
.mega-col-links::-webkit-scrollbar-thumb {
background: #c1c1c1;
border-radius: 10px;
}
/* Submenu Link Styling */
.mc--main-menu .megamenu.menu-item .submenu {
list-style: none;
padding: 0;
margin: 0;
}
.mc--main-menu .megamenu.menu-item .submenu .menu-item {
padding: 0 !important;
margin: 0 !important;
}
.mc--main-menu .megamenu.menu-item .submenu .menu-item a {
display: block;
padding: 12px 0;
color: #111827;
text-decoration: none;
font-weight: 600;
font-size: 14px;
border-bottom: 1px solid #e5e7eb;
transition: color 0.2s, padding-left 0.2s;
}
.mc--main-menu .megamenu.menu-item .submenu .menu-item:last-child a {
border-bottom: none;
}
.mc--main-menu .megamenu.menu-item .submenu .menu-item a:hover {
color: #881c1c;
padding-left: 8px; /* Layout indent animation */
}
/* Right Column: Image */
.mega-col-image {
flex: 1;
display: flex;
align-items: center;
justify-content: center;
border-left: 1px solid #d1d5db;
padding-left: 30px;
}
.mega-col-image img {
width: 100%;
height: auto;
border-radius: 8px;
box-shadow: 0 4px 6px -1px rgba(0, 0, 0, 0.1);
object-fit: cover;
}
/* Hide the mobile back button and title on desktop */
.mc--main-menu .megamenu.menu-item .submenu-wrapper .button-back,
.mc--main-menu .megamenu.menu-item .submenu-wrapper .navigation-title {
display: none !important;
}
}
</style>
<header id="l--main-header">
<h1 class="visually-hidden">The University of Massachusetts Amherst</h1>
@@ -21,426 +215,66 @@
<div id="mobile-flyout-container">
<div class="primary-navigation">
<nav class="mc--menu mc--main-menu">
<ul class="menu m--menu m--main-menu">
<li class="megamenu menu-item menu-item--expanded">
<ul class="menu m--menu m--main-menu" th:if="${primaryMenu != null and not #lists.isEmpty(primaryMenu.items)}">
<th:block th:each="item : ${primaryMenu.items}" th:if="${item.parent == null}">
<!-- Flat item -->
<li class="megamenu menu-item" th:if="${#lists.isEmpty(item.children)}">
<div class="link-arrow-wrapper">
<a href="https://www.umass.edu/gateway/academics" data-drupal-link-system-path="node/11">Academics</a>
<button type="button" class="has-submenu arrow-toggle" aria-expanded="false" aria-haspopup="true" aria-label="Display Sub Menu for Academics" 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">
<a th:href="${item.url}" th:text="${item.label}">Menu Item</a>
</div>
</li>
<!-- Expanded item (has children) -->
<li class="megamenu menu-item menu-item--expanded" th:if="${not #lists.isEmpty(item.children)}">
<div class="link-arrow-wrapper">
<a th:href="${item.url}" th:text="${item.label}">Menu Item</a>
<button type="button" class="has-submenu arrow-toggle" aria-expanded="false" aria-haspopup="true" data-once="site-header-arrow">
<svg version="1.1" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 16 7" 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">
<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">
<svg version="1.1" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 5 10" 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">Academics</span>
<ul class="submenu">
<li class="menu-item menu-item--expanded">
<span>Get Your Degree</span>
<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">Get Your Degree</span>
<span class="navigation-title" th:text="${item.label}">Menu Item</span>
<!-- Mega Menu Content Layout -->
<div class="mega-menu-content">
<!-- Column 1: Info (Title and Text) -->
<div class="mega-col-info">
<h3 th:text="${item.label}">Về Bệnh viện</h3>
<p th:if="${item.label == 'Về Bệnh viện' or item.label == 'VỀ BỆNH VIỆN'}">Bệnh viện Đột quỵ Quốc tế tự hào là đơn vị tiên phong trong việc cung cấp dịch vụ khám chữa bệnh chất lượng cao, mang lại sự tin cậy và an tâm cho bệnh nhân.</p>
<p th:if="${item.label == 'Chuyên khoa' or item.label == 'CHUYÊN KHOA'}">Khám phá các chuyên khoa hàng đầu với đội ngũ bác sĩ chuyên môn cao, trang thiết bị y tế hiện đại đạt tiêu chuẩn quốc tế.</p>
<p th:if="${item.label != 'Về Bệnh viện' and item.label != 'VỀ BỆNH VIỆN' and item.label != 'Chuyên khoa' and item.label != 'CHUYÊN KHOA'}">Khám phá thêm thông tin chi tiết về các dịch vụ, chuyên gia và hoạt động của chúng tôi để bảo vệ sức khỏe của bạn.</p>
</div>
<!-- Column 2: The actual Submenu Links -->
<div class="mega-col-links">
<ul class="submenu">
<li class="menu-item">
<a href="https://www.umass.edu/gateway/academics/undergraduate" data-drupal-link-system-path="node/106">Undergraduate</a>
</li>
<li class="menu-item">
<a href="https://www.umass.edu/bdic/">Design Your Own Major</a>
</li>
<li class="menu-item">
<a href="https://www.umass.edu/gateway/academics/graduate" data-drupal-link-system-path="node/111">Graduate</a>
</li>
<li class="menu-item">
<a href="https://www.umass.edu/gateway/academics/accelerated-masters-4plus1-degree" data-drupal-link-system-path="node/42816">Accelerated Master's</a>
</li>
<li class="menu-item">
<a href="https://www.umass.edu/gateway/academics/schools-colleges" data-drupal-link-system-path="node/596">Schools &amp; Colleges</a>
</li>
<li class="menu-item">
<a href="https://www.umass.edu/gateway/bachelors-degree-completion-online" title="Complete your bachelor&#39;s degree fully online at UMass Amherst." data-drupal-link-system-path="node/84461">Bachelors Degree Completion</a>
<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>
<li class="menu-item menu-item--expanded">
<span>Ways to Learn</span>
<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">Ways to Learn</span>
<ul class="submenu">
<li class="menu-item">
<a href="https://www.umass.edu/gateway/academics/explore-our-campuses" data-drupal-link-system-path="node/84076">Our Campuses</a>
</li>
<li class="menu-item">
<a href="https://www.umass.edu/gateway/academics/summer-winter-sessions" data-drupal-link-system-path="node/83931">Summer &amp; Winter Sessions</a>
</li>
<li class="menu-item">
<a href="https://www.umass.edu/gateway/academics/study-abroad" data-drupal-link-system-path="node/84116">Study Abroad</a>
</li>
<li class="menu-item">
<a href="https://www.umass.edu/gateway/academics/first-year-launch-programs" data-drupal-link-system-path="node/83936">First-Year Launch Programs</a>
</li>
<li class="menu-item">
<a href="https://www.umass.edu/lifelong/">Pre-College &amp; Lifelong Learning</a>
</li>
</ul>
</div>
</li>
<li class="menu-item menu-item--expanded">
<span>Resources</span>
<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">Resources</span>
<ul class="submenu">
<li class="menu-item">
<a href="https://www.umass.edu/gateway/academics/university-libraries" data-drupal-link-system-path="node/616">University Libraries</a>
</li>
<li class="menu-item">
<a href="https://www.umass.edu/gateway/academics/academic-advising" data-drupal-link-system-path="node/26366">Academic Advising</a>
</li>
<li class="menu-item">
<a href="https://www.umass.edu/careers/">Career &amp; Internship Services</a>
</li>
<li class="menu-item">
<a href="https://www.umass.edu/gateway/academics/explore-our-programs" data-drupal-link-system-path="node/251">Explore Our Programs</a>
</li>
</ul>
</div>
</li>
</ul>
</div>
<!-- Column 3: Featured Image -->
<div class="mega-col-image">
<!-- Try to use a hospital-like image if we can, or fallback to logo -->
<img th:src="@{/theme-assets/umass/images/logo.png}" alt="Featured Image" style="object-fit: contain; background: white; padding: 20px;"/>
</div>
</div>
<!-- End Mega Menu Layout -->
</div>
</li>
<li class="menu-item menu-item--expanded">
<div class="link-arrow-wrapper">
<a href="https://www.umass.edu/admissions" data-drupal-link-system-path="node/36">Admissions &amp; Aid</a>
<button type="button" class="has-submenu arrow-toggle" aria-expanded="false" aria-haspopup="true" aria-label="Display Sub Menu for Admissions &amp; Aid" 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">
<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">Admissions &amp; Aid</span>
<ul class="submenu">
<li class="menu-item menu-item--expanded">
<a href="https://www.umass.edu/admissions/undergraduate-admissions" data-drupal-link-system-path="node/266">Undergraduate Admissions</a>
<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">Undergraduate Admissions</span>
<ul class="submenu">
<li class="menu-item">
<a href="https://www.umass.edu/admissions/undergraduate-admissions" data-drupal-link-system-path="node/266">Home</a>
</li>
<li class="menu-item menu-item--collapsed">
<a href="https://www.umass.edu/admissions/explore" data-drupal-link-system-path="node/626">Explore</a>
</li>
<li class="menu-item menu-item--collapsed">
<a href="https://www.umass.edu/admissions/visit" data-drupal-link-system-path="node/1366">Visit</a>
</li>
<li class="menu-item menu-item--collapsed">
<a href="https://www.umass.edu/admissions/apply" data-drupal-link-system-path="node/271">Apply</a>
</li>
<li class="menu-item menu-item--collapsed">
<a href="https://www.umass.edu/admissions/undergraduate-admissions/costs-aid" data-drupal-link-system-path="node/2651">Costs &amp; Aid</a>
</li>
<li class="menu-item menu-item--collapsed">
<a href="https://www.umass.edu/admissions/connect" data-drupal-link-system-path="node/656">Connect</a>
</li>
<li class="menu-item menu-item--collapsed">
<a href="https://www.umass.edu/admissions/admitted-students" data-drupal-link-system-path="node/1601">Admitted Students</a>
</li>
</ul>
</div>
</li>
<li class="menu-item">
<a href="https://www.umass.edu/graduate/apply">Graduate Admissions</a>
</li>
<li class="menu-item">
<a href="https://www.umass.edu/universityplus/admissions">Undergraduate Online Admissions</a>
</li>
<li class="menu-item">
<a href="https://www.umass.edu/uww/pre-college">Pre-College Admissions</a>
</li>
<li class="menu-item menu-item--expanded">
<a href="https://www.umass.edu/financialaid" data-drupal-link-system-path="node/781">Financial Aid</a>
<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">Financial Aid</span>
<ul class="submenu">
<li class="menu-item menu-item--collapsed">
<a href="https://www.umass.edu/financialaid/financial-aid-services" data-drupal-link-system-path="node/856">Financial Aid Services</a>
</li>
<li class="menu-item menu-item--collapsed">
<a href="https://www.umass.edu/financialaid/undergraduate" data-drupal-link-system-path="node/786">Undergraduate</a>
</li>
<li class="menu-item menu-item--collapsed">
<a href="https://www.umass.edu/financialaid/graduate" data-drupal-link-system-path="node/19936">Graduate</a>
</li>
<li class="menu-item menu-item--collapsed">
<a href="https://www.umass.edu/financialaid/non-degree-seeking-students" data-drupal-link-system-path="node/20531">Non-Degree</a>
</li>
<li class="menu-item menu-item--collapsed">
<a href="https://www.umass.edu/financialaid/university" data-drupal-link-system-path="node/991">University+</a>
</li>
<li class="menu-item menu-item--collapsed">
<a href="https://www.umass.edu/financialaid/student-employment" data-drupal-link-system-path="node/1056">Student Employment</a>
</li>
</ul>
</div>
</li>
</ul>
</div>
</li>
<li class="menu-item menu-item--expanded">
<div class="link-arrow-wrapper">
<a href="https://www.umass.edu/gateway/campus-life" data-drupal-link-system-path="node/16">Campus Life</a>
<button type="button" class="has-submenu arrow-toggle" aria-expanded="false" aria-haspopup="true" aria-label="Display Sub Menu for Campus Life" 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">
<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">Campus Life</span>
<ul class="submenu">
<li class="menu-item">
<a href="https://www.umass.edu/gateway/campus-life/living-and-dining" data-drupal-link-system-path="node/3666">Living and Dining</a>
</li>
<li class="menu-item">
<a href="https://www.umass.edu/gateway/campus-life/student-activities" data-drupal-link-system-path="node/3676">Student Activities</a>
</li>
<li class="menu-item">
<a href="https://www.umass.edu/gateway/campus-life/student-support-and-wellness" data-drupal-link-system-path="node/3681">Student Support and Wellness</a>
</li>
<li class="menu-item">
<a href="https://www.umass.edu/gateway/campus-life/life-amherst" data-drupal-link-system-path="node/3661">Life in Amherst</a>
</li>
<li class="menu-item">
<a href="https://www.umass.edu/gateway/arts-culture" data-drupal-link-system-path="node/84101">Arts &amp; Culture</a>
</li>
</ul>
</div>
</li>
<li class="menu-item menu-item--expanded">
<div class="link-arrow-wrapper">
<a href="https://www.umass.edu/gateway/why-umass" data-drupal-link-system-path="node/82851">Why UMass?</a>
<button type="button" class="has-submenu arrow-toggle" aria-expanded="false" aria-haspopup="true" aria-label="Display Sub Menu for Why UMass?" 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">
<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">Why UMass?</span>
<ul class="submenu">
<li class="menu-item">
<a href="https://www.umass.edu/gateway/why-umass/discover-ideas" data-drupal-link-system-path="node/83286">Discover Ideas</a>
</li>
<li class="menu-item">
<a href="https://www.umass.edu/gateway/why-umass/choose-your-path" data-drupal-link-system-path="node/83471">Choose Your Path</a>
</li>
<li class="menu-item">
<a href="https://www.umass.edu/gateway/why-umass/find-your-purpose" data-drupal-link-system-path="node/83511">Find Your Purpose</a>
</li>
<li class="menu-item menu-item--expanded">
<a href="https://www.umass.edu/gateway/why-umass/world-class-public-research-university" data-drupal-link-system-path="node/3716">About UMass Amherst</a>
<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">About UMass Amherst</span>
<ul class="submenu">
<li class="menu-item">
<a href="https://www.umass.edu/gateway/umass-edge/about-umass-amherst/umass-history" data-drupal-link-system-path="node/3721">UMass History</a>
</li>
<li class="menu-item">
<a href="https://www.umass.edu/gateway/why-umass/about-umass-amherst/umass-amherst-numbers" data-drupal-link-system-path="node/74316">UMass Amherst By the Numbers</a>
</li>
<li class="menu-item menu-item--collapsed">
<a href="https://www.umass.edu/chancellor/">Office of the Chancellor</a>
</li>
<li class="menu-item">
<a href="https://www.umass.edu/gateway/umass-edge/about-umass-amherst/mascot/sam-minuteman" data-drupal-link-system-path="node/21126">Sam the Minuteman</a>
</li>
<li class="menu-item">
<a href="https://www.umass.edu/gateway/umass-stories" data-drupal-link-system-path="node/55696">UMass Amherst Stories</a>
</li>
</ul>
</div>
</li>
</ul>
</div>
</li>
<li class="menu-item menu-item--expanded">
<div class="link-arrow-wrapper">
<a href="https://www.umass.edu/gateway/research" data-drupal-link-system-path="node/79406">Research</a>
<button type="button" class="has-submenu arrow-toggle" aria-expanded="false" aria-haspopup="true" aria-label="Display Sub Menu for Research" 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">
<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">Research</span>
<ul class="submenu">
<li class="menu-item">
<a href="https://www.umass.edu/gateway/research/student-research" data-drupal-link-system-path="node/606">Student Research</a>
</li>
<li class="menu-item">
<a href="https://www.umass.edu/gateway/research/faculty-excellence" data-drupal-link-system-path="node/19971">Faculty Excellence</a>
</li>
<li class="menu-item menu-item--expanded">
<a href="https://www.umass.edu/gateway/research/innovation-impact" data-drupal-link-system-path="node/601">Innovation &amp; Impact</a>
<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">Innovation &amp; Impact</span>
<ul class="submenu">
<li class="menu-item">
<a href="https://www.umass.edu/gateway/research/stories" data-drupal-link-system-path="node/35236">Research News &amp; Stories</a>
</li>
<li class="menu-item">
<a href="https://www.umass.edu/gateway/research/timeline" data-drupal-link-system-path="gateway/research/timeline">Timeline of Research Breakthroughs</a>
</li>
</ul>
</div>
</li>
<li class="menu-item">
<a href="https://www.umass.edu/gateway/research/centers-and-institutes" data-drupal-link-system-path="node/611">Centers and Institutes</a>
</li>
</ul>
</div>
</li>
<li class="menu-item menu-item--expanded">
<div class="link-arrow-wrapper">
<a href="https://www.umass.edu/news/news-events" data-drupal-link-system-path="node/31">News &amp; Events</a>
<button type="button" class="has-submenu arrow-toggle" aria-expanded="false" aria-haspopup="true" aria-label="Display Sub Menu for News &amp; Events" 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">
<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">News &amp; Events</span>
<ul class="submenu">
<li class="menu-item">
<a href="https://www.umass.edu/news/news-events/news-headlines" data-drupal-link-system-path="node/79501">News Headlines</a>
</li>
<li class="menu-item">
<a href="https://events.umass.edu/">Events</a>
</li>
<li class="menu-item">
<a href="https://www.umass.edu/news/news-events/experts-umass" data-drupal-link-system-path="node/971">Experts at UMass</a>
</li>
<li class="menu-item menu-item--expanded">
<a href="https://www.umass.edu/news/federal-actions" data-drupal-link-system-path="node/75351">Federal Actions</a>
<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">Federal Actions</span>
<ul class="submenu">
<li class="menu-item">
<a href="https://www.umass.edu/news/federal-actions/all-updates" data-drupal-link-system-path="node/76176">View All Federal Actions Updates</a>
</li>
</ul>
</div>
</li>
<li class="menu-item">
<a href="https://www.umass.edu/news/news-events/olympia-drive-fire-response" data-drupal-link-system-path="node/81266">Olympia Drive Fire Response</a>
</li>
<li class="menu-item">
<a href="https://www.umass.edu/chancellor/">Office of Chancellor Javier Reyes</a>
</li>
<li class="menu-item">
<a href="https://www.umass.edu/institutional-effectiveness/strategic-plan">Strategic Plan 20242034</a>
</li>
<li class="menu-item">
<a href="https://www.umass.edu/news/news-events/news-office-frequently-asked-questions" data-drupal-link-system-path="node/21221">Frequently Asked Questions</a>
</li>
<li class="menu-item menu-item--expanded">
<a href="https://www.umass.edu/news/news-events/inside-umass" data-drupal-link-system-path="node/21016">Inside UMass</a>
<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">Inside UMass</span>
<ul class="submenu">
<li class="menu-item">
<a href="https://www.umass.edu/news/news-events/inside-umass/submit-inside-umass-procedures-and-guidelines" data-drupal-link-system-path="node/26211">Submit to Inside UMass</a>
</li>
<li class="menu-item">
<a href="https://www.umass.edu/news/news-events/news-headlines">View Most Recent News Headlines</a>
</li>
<li class="menu-item">
<a href="https://subscribe.umass.edu/subscriptioncenter/manageList/subscribeFromLink?channel_id=a2w6S000007eAfOQAU">Subscribe to Inside UMass</a>
</li>
</ul>
</div>
</li>
<li class="menu-item">
<a href="https://www.umass.edu/news/news-events/hometown-news-requests" data-drupal-link-system-path="node/21091">Hometown News Requests</a>
</li>
<li class="menu-item">
<a href="https://www.umass.edu/university-relations/toolkit/social-media/social-media-directory">Social Media Directory</a>
</li>
<li class="menu-item">
<a href="https://www.umass.edu/news/news-events/video-services" data-drupal-link-system-path="node/20596">Video Services</a>
</li>
<li class="menu-item">
<a href="https://www.umass.edu/news/news-events/job-opportunities-students" data-drupal-link-system-path="node/20546">Job Opportunities for Students</a>
</li>
<li class="menu-item">
<a href="https://www.umass.edu/news/news-events/contact-us" data-drupal-link-system-path="node/3751">Contact Us</a>
</li>
</ul>
</div>
</li>
</ul>
</nav>
</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">