diff --git a/css/header-footer.css b/css/header-footer.css new file mode 100644 index 0000000..1d478d2 --- /dev/null +++ b/css/header-footer.css @@ -0,0 +1,546 @@ +@import url('https://fonts.googleapis.com/css2?family=IBM+Plex+Sans:wght@400;700&family=Source+Sans+Pro:wght@400;600;700&display=swap'); + +.header-banner .header-title, +.footer-section h3 { + font-family: 'IBM Plex Sans', sans-serif; +} + +.nav-links li a, +.dropdown-menu li a, +.footer-section, +.footer-section p, +.footer-bottom { + font-family: 'Source Sans Pro', sans-serif; +} + +.header { + position: sticky; + top: 0; + z-index: 1000; + background-color: var(--site-surface); + display: grid; + grid-template-columns: auto 1fr auto; + align-items: center; + padding: 10px 40px; + box-shadow: 0 1px 2px rgba(0, 0, 0, 0.1); + gap: 2px; +} + +.logo { + flex-shrink: 0; + justify-self: start; +} + +.logo img { + height: 60px; +} + +.nav { + justify-self: center; + white-space: nowrap; +} + +.nav-links { + list-style: none; + display: flex; + gap: 25px; + margin: 0; + padding: 0; + justify-content: center; + align-items: center; +} + +.nav-links li a { + color: var(--site-text); + font-weight: 550; + padding: 10px 0; + display: block; + transition: color 0.2s ease, border-color 0.2s ease; + border-bottom: 2px solid transparent; +} + +.nav-links li a:hover { + color: var(--site-link); + border-color: var(--site-link); +} + +.nav-links li a:focus-visible { + outline: 2px solid var(--site-link); + outline-offset: 2px; + border-color: var(--site-link); +} + +.dropdown { + position: relative; +} + +.dropdown > a:after { + content: ' \25BE'; + font-size: 10px; +} + +.dropdown-menu { + display: none; + position: absolute; + top: 100%; + left: 0; + background-color: var(--site-surface); + box-shadow: 0 2px 5px rgba(0, 0, 0, 0.1); + list-style: none; + padding: 10px 0; + margin: 0; + min-width: 200px; + border-radius: 5px; +} + +.dropdown-menu li a { + padding: 10px 20px; + white-space: nowrap; + font-weight: 400; + color: inherit; +} + +.dropdown-parent span { + display: block; + font-weight: 700; + color: var(--site-text); + padding: 14px 20px 6px; + font-family: 'Source Sans Pro', sans-serif; +} + +.dropdown-subitem a { + padding-left: 34px; + padding-top: 7px; + padding-bottom: 7px; + font-size: 0.96em; +} + +.dropdown-parent + .dropdown-subitem a { + padding-top: 4px; +} + +.dropdown-menu li a:hover { + background-color: var(--site-link-soft); + color: var(--site-link); +} + +.dropdown:hover .dropdown-menu { + display: block; +} + +.header-actions { + display: flex; + align-items: center; + gap: 15px; + flex-shrink: 0; + justify-self: end; +} + +.header-banner { + position: relative; + width: 100%; + height: 250px; + display: flex; + justify-content: center; + align-items: center; + overflow: hidden; +} + +.header-banner .background-image { + position: absolute; + top: 0; + left: 0; + width: 100%; + height: 100%; + object-fit: cover; + z-index: -1; +} + +.header-title-box { + background-color: rgba(255, 255, 255, 0.7); + padding: 20px 60px; + border-radius: 10px; + width: calc(100% - 80px); + max-width: 800px; + box-shadow: 0 4px 15px rgba(0, 0, 0, 0.1); + text-align: center; + z-index: 1; + backdrop-filter: blur(5px); +} + +.header-banner .header-title { + font-size: 3rem; + color: #282828; + font-weight: 700; + margin: 0; + text-align: center; +} + +.header-banner .header-title.no-wrap { + white-space: nowrap; +} + +.footer { + background-color: var(--site-primary); + color: white; + padding: 40px 80px 20px; + margin-top: 0; + font-size: 0.9em; + line-height: 1.6; +} + +.footer-content { + display: flex; + justify-content: space-between; + align-items: flex-start; + flex-wrap: wrap; + gap: 30px; + margin-bottom: 30px; + max-width: 1200px; + margin: 0 auto 30px; +} + +.footer-section { + flex: 1; + min-width: 260px; +} + +.footer-section.about { + flex: 1.5; +} + +.footer-section.links { + flex: 0.9; +} + +.footer-section.institutes { + flex: 0.9; +} + +.footer-section h3 { + color: #ffffff; + margin-bottom: 15px; + font-size: 1.2em; +} + +.footer-section p, +.footer-section ul { + margin: 0; + padding: 0; + list-style: none; +} + +.footer-section ul li { + margin-bottom: 8px; +} + +.footer-section ul li a { + color: #ffffff; + line-height: 1.8; + transition: color 0.3s ease; +} + +.footer-section ul li a:hover { + color: white; + text-decoration: underline; +} + +.footer-hosted { + margin-top: 10px; +} + +.footer-hosted a { + display: inline-flex; + align-items: center; + gap: 8px; + font-size: 0.9em; + line-height: 1.25; + color: rgba(255, 255, 255, 0.92); +} + +.footer-github-icon { + width: 24px; + height: 24px; + filter: brightness(0) invert(1); +} + +.footer-section p { + color: rgba(255, 255, 255, 0.8); +} + +.footer-disclaimer { + color: #ffffff; +} + +.nsf-logo-container { + display: flex; + align-items: center; + margin-top: 20px; + gap: 10px; +} + +.nsf-logo-container img { + height: 90px; +} + +.nsf-logo-container p { + font-size: 0.9em; + font-weight: 500; + color: #ffffff; +} + +.footer-bottom { + text-align: center; + padding-top: 20px; + border-top: 1px solid rgba(255, 255, 255, 0.2); + color: #ffffff; +} + +.footer-credit { + margin-top: 8px; + font-size: 0.95em; + color: #ffffff; +} + +.footer-bottom .footer-hosted { + display: flex; + justify-content: center; + width: 100%; +} + +.footer-bottom .footer-hosted a { + font-size: 0.92em; +} + +.footer a, +.footer a:visited { + color: #ffffff; + text-decoration: none; +} + +.footer a:hover, +.footer a:focus { + color: #e6f0ff; + text-decoration: underline; +} + +.hamburger { + display: none; + flex-direction: column; + background: transparent; + border: none; + cursor: pointer; + padding: 5px; + z-index: 1001; + gap: 5px; +} + +.hamburger .bar { + width: 25px; + height: 3px; + background-color: var(--site-link); + transition: 0.3s ease-in-out; + border-radius: 2px; +} + +.hamburger.active .bar:nth-child(1) { + transform: rotate(-45deg) translate(-8px, 8px); +} + +.hamburger.active .bar:nth-child(2) { + opacity: 0; +} + +.hamburger.active .bar:nth-child(3) { + transform: rotate(45deg) translate(-8px, -8px); +} + +@media (max-width: 768px) { + .header { + padding: 10px 20px; + grid-template-columns: auto 1fr auto; + gap: 10px; + } + + .logo { + flex-shrink: 0; + } + + .logo img { + height: 50px; + } + + .nav { + display: none; + position: absolute; + top: 100%; + left: 0; + right: 0; + background: var(--site-surface); + border-bottom: 1px solid var(--site-border); + padding: 20px; + width: 100%; + z-index: 999; + justify-self: stretch; + } + + .nav.active { + display: block; + } + + .header-actions { + gap: 5px; + display: flex !important; + z-index: 1001; + justify-self: end; + } + + .hamburger { + display: flex !important; + } + + .nav-links { + flex-direction: column; + gap: 15px; + padding: 0; + } + + .nav-links li a { + padding: 10px 0; + color: var(--site-text); + border-bottom: 2px solid transparent; + } + + .dropdown-menu { + display: none; + position: static; + box-shadow: none; + margin-top: 10px; + padding-left: 20px; + background: var(--site-link-soft); + } + + .dropdown.active .dropdown-menu { + display: block; + } + + .footer { + padding: 30px 20px; + } + + .footer-content { + flex-direction: column; + align-items: center; + text-align: center; + padding-left: 0; + } + + .footer-section { + margin-bottom: 20px; + max-width: 100%; + min-width: unset; + margin-left: 0 !important; + } + + .footer-hosted { + display: flex; + justify-content: center; + width: 100%; + } + + .nsf-logo-container { + justify-content: center; + width: 100%; + margin-left: auto; + margin-right: auto; + } + + .footer-github-icon { + width: 20px; + height: 20px; + } + + .header-banner { + height: 150px; + } + + .header-title-box { + padding: 15px 40px; + width: calc(100% - 60px); + } + + .header-banner .header-title { + font-size: 2rem; + } +} + +@media (max-width: 768px) { + .hamburger { + display: flex !important; + } +} + +.header { + display: flex; + align-items: center; + gap: 16px; + width: 100%; +} + +.nav { + flex: 1 1 auto; + min-width: 0; +} + +.nav-links { + justify-content: center; +} + +.header-actions .hamburger { + flex-shrink: 0; +} + +@media (max-width: 768px) { + .nav { + display: none; + } +} + +@media (max-width: 1024px) and (orientation: portrait) { + .nav { + display: none; + position: absolute; + top: 100%; + left: 0; + right: 0; + background: #fff; + border-bottom: 1px solid #ddd; + padding: 20px; + width: 100%; + z-index: 999; + justify-self: stretch; + } + + .nav.active { + display: block; + } + + .hamburger { + display: flex !important; + } + + .nav-links { + flex-direction: column; + gap: 15px; + padding: 0; + } + + .dropdown-menu { + display: none; + position: static; + box-shadow: none; + margin-top: 10px; + padding-left: 20px; + background: #f9f9f9; + } +} diff --git a/css/search.css b/css/search.css new file mode 100644 index 0000000..eb9defc --- /dev/null +++ b/css/search.css @@ -0,0 +1,124 @@ +.search-container { + display: flex; + align-items: center; + flex: 0 1 220px; + max-width: 240px; + min-width: 160px; + background: color-mix(in srgb, var(--site-primary) 8%, white); + border-radius: 20px; + border: 1px solid var(--site-border); + position: relative; + padding: 0 10px; + margin-left: auto; + margin-right: 8px; + overflow: visible; +} + +.search-icon-btn { + background: none; + border: none; + cursor: pointer; + padding: 6px; + display: flex; + align-items: center; + justify-content: center; + flex-shrink: 0; + position: relative; + z-index: 3; +} + +.search-icon-btn img { + height: 20px; + width: 20px; +} + +.search-bar { + flex: 1 1 auto; + min-width: 0; + width: 100%; + border: none; + background: transparent; + padding: 10px 8px; + font-size: 14px; + outline: none; + position: relative; + z-index: 2; +} + +.search-bar::placeholder { + color: var(--site-text-muted); +} + +.search-results { + display: none; + position: absolute; + top: calc(100% + 4px); + left: 0; + right: 0; + background: var(--site-surface); + border: 1px solid var(--site-border); + border-radius: 0 0 4px 4px; + box-shadow: 0 4px 12px rgba(0, 0, 0, 0.15); + max-height: 320px; + overflow-y: auto; + z-index: 1000; + min-width: 240px; +} + +.search-results.is-visible { + display: block; +} + +.search-results-list { + padding: 10px 0; +} + +.search-result-item { + display: block; + padding: 12px 15px; + border-bottom: 1px solid var(--site-border); + color: var(--site-text); + transition: background 0.2s ease; +} + +.search-result-item:last-child { + border-bottom: none; +} + +.search-result-item:hover, +.search-result-item:focus-visible { + background: var(--site-link-soft); +} + +.search-result-title { + font-weight: 650; + color: var(--site-link); + margin-bottom: 4px; + font-size: 14px; +} + +.search-result-snippet { + font-size: 12px; + color: var(--site-text-muted); + line-height: 1.4; +} + +.search-no-results { + padding: 16px; + text-align: center; + color: var(--site-text-muted); + font-size: 14px; +} + +@media (max-width: 768px) { + .search-container { + order: 2; + max-width: none; + width: 100%; + margin: 10px 0 0; + } + + .search-results { + min-width: 0; + } +} diff --git a/css/style.css b/css/style.css new file mode 100644 index 0000000..0202089 --- /dev/null +++ b/css/style.css @@ -0,0 +1,127 @@ +@import url('header-footer.css'); +@import url('search.css'); + +* { + box-sizing: border-box; +} + +html { + scroll-behavior: smooth; +} + +body { + --color-lm-primary: #5d8095; + --color-lm-url: #0097b2; + --color-lm-url-10: #0097b21a; + --color-lm-accent: #9bcb5e; + --color-lm-accent-10: #9bcb5e1a; + --color-dm-primary: #5d8095; + --color-dm-url: #0097b2; + --color-dm-accent: #92991c; + --color-dm-accent-10: #92991c1a; + --site-primary: var(--color-lm-primary); + --site-link: var(--color-lm-url); + --site-link-soft: var(--color-lm-url-10); + --site-accent: var(--color-lm-accent); + --site-accent-soft: var(--color-lm-accent-10); + --site-bg: #f7fbfd; + --site-surface: #ffffff; + --site-text: #10263a; + --site-text-muted: #5d6f7c; + --site-border: rgba(93, 128, 149, 0.24); + margin: 0; + background: var(--site-bg); + color: var(--site-text); + font-family: 'Source Sans 3', sans-serif; +} + +a { + color: inherit; + text-decoration: none; +} + +.page-shell { + min-height: calc(100vh - 220px); +} + +.stub-hero, +.stub-page { + width: min(1100px, calc(100% - 2rem)); + margin: 0 auto; +} + +.stub-hero { + padding: 5rem 0 3rem; +} + +.stub-kicker { + display: inline-block; + padding: 0.35rem 0.7rem; + border-radius: 999px; + background: var(--site-link-soft); + color: var(--site-link); + font-weight: 700; + letter-spacing: 0.04em; + text-transform: uppercase; + font-size: 0.8rem; +} + +.stub-hero h1, +.stub-page h1 { + font-family: 'IBM Plex Sans', sans-serif; + line-height: 1.05; +} + +.stub-hero h1 { + margin: 1rem 0; + font-size: clamp(2.6rem, 7vw, 5rem); + max-width: 10ch; +} + +.stub-hero p, +.stub-page p, +.stub-card p { + font-size: 1.08rem; + line-height: 1.65; +} + +.stub-grid { + display: grid; + grid-template-columns: repeat(3, minmax(0, 1fr)); + gap: 1rem; + margin: 2rem 0 0; +} + +.stub-card { + padding: 1.3rem; + border-radius: 1.15rem; + background: var(--site-surface); + border: 1px solid var(--site-border); + box-shadow: 0 16px 40px rgba(12, 40, 69, 0.06); +} + +.stub-card h2 { + margin-top: 0; + margin-bottom: 0.5rem; + font-family: 'IBM Plex Sans', sans-serif; + font-size: 1.2rem; +} + +.stub-card a { + color: var(--site-link); + font-weight: 700; +} + +.stub-page { + padding: 4rem 0 5rem; +} + +.stub-page p { + max-width: 42rem; +} + +@media (max-width: 900px) { + .stub-grid { + grid-template-columns: 1fr; + } +} diff --git a/html/about.html b/html/about.html new file mode 100644 index 0000000..1330ff1 --- /dev/null +++ b/html/about.html @@ -0,0 +1,16 @@ + + + + + + About | Imageomics Institute + + + + + +
+
+ + + diff --git a/html/about/code-of-conduct.html b/html/about/code-of-conduct.html new file mode 100644 index 0000000..e88fa75 --- /dev/null +++ b/html/about/code-of-conduct.html @@ -0,0 +1,16 @@ + + + + + + Code of Conduct | Imageomics Institute + + + + + +
+
+ + + diff --git a/html/about/collaborators.html b/html/about/collaborators.html new file mode 100644 index 0000000..79b563c --- /dev/null +++ b/html/about/collaborators.html @@ -0,0 +1,16 @@ + + + + + + Collaborators | Imageomics Institute + + + + + +
+
+ + + diff --git a/html/about/community-values.html b/html/about/community-values.html new file mode 100644 index 0000000..5629bcf --- /dev/null +++ b/html/about/community-values.html @@ -0,0 +1,16 @@ + + + + + + Community Values | Imageomics Institute + + + + + +
+
+ + + diff --git a/html/about/faculty-staff.html b/html/about/faculty-staff.html new file mode 100644 index 0000000..109bd8a --- /dev/null +++ b/html/about/faculty-staff.html @@ -0,0 +1,16 @@ + + + + + + Institute Faculty & Staff | Imageomics Institute + + + + + +
+
+ + + diff --git a/html/about/imageomics-in-the-news.html b/html/about/imageomics-in-the-news.html new file mode 100644 index 0000000..646d70a --- /dev/null +++ b/html/about/imageomics-in-the-news.html @@ -0,0 +1,16 @@ + + + + + + Imageomics In the News | Imageomics Institute + + + + + +
+
+ + + diff --git a/html/about/mailing-list.html b/html/about/mailing-list.html new file mode 100644 index 0000000..ed9c2a5 --- /dev/null +++ b/html/about/mailing-list.html @@ -0,0 +1,16 @@ + + + + + + Subscribe to our Mailing List | Imageomics Institute + + + + + +
+
+ + + diff --git a/html/about/nextgens.html b/html/about/nextgens.html new file mode 100644 index 0000000..39a7425 --- /dev/null +++ b/html/about/nextgens.html @@ -0,0 +1,16 @@ + + + + + + NextGens | Imageomics Institute + + + + + +
+
+ + + diff --git a/html/about/vision.html b/html/about/vision.html new file mode 100644 index 0000000..ada3827 --- /dev/null +++ b/html/about/vision.html @@ -0,0 +1,16 @@ + + + + + + The Vision of the Imageomics Institute | Imageomics Institute + + + + + +
+
+ + + diff --git a/html/about/visitors.html b/html/about/visitors.html new file mode 100644 index 0000000..2e6409a --- /dev/null +++ b/html/about/visitors.html @@ -0,0 +1,16 @@ + + + + + + Visitors to Imageomics Institute | Imageomics Institute + + + + + +
+
+ + + diff --git a/html/components/footer.html b/html/components/footer.html new file mode 100644 index 0000000..ae1df6d --- /dev/null +++ b/html/components/footer.html @@ -0,0 +1,38 @@ + diff --git a/html/components/header.html b/html/components/header.html new file mode 100644 index 0000000..922ce5d --- /dev/null +++ b/html/components/header.html @@ -0,0 +1,83 @@ +
+ + + + +
+ + +
+
+ +
+ +
+
diff --git a/html/conference.html b/html/conference.html new file mode 100644 index 0000000..c1a2f02 --- /dev/null +++ b/html/conference.html @@ -0,0 +1,16 @@ + + + + + + Imageomics Conference | Imageomics Institute + + + + + +
+
+ + + diff --git a/html/conference/accommodations.html b/html/conference/accommodations.html new file mode 100644 index 0000000..5e4fced --- /dev/null +++ b/html/conference/accommodations.html @@ -0,0 +1,16 @@ + + + + + + Conference Accommodations | Imageomics Institute + + + + + +
+
+ + + diff --git a/html/conference/agenda.html b/html/conference/agenda.html new file mode 100644 index 0000000..46bac39 --- /dev/null +++ b/html/conference/agenda.html @@ -0,0 +1,16 @@ + + + + + + Conference Agenda | Imageomics Institute + + + + + +
+
+ + + diff --git a/html/conference/nextgen-day-agenda.html b/html/conference/nextgen-day-agenda.html new file mode 100644 index 0000000..3fcd641 --- /dev/null +++ b/html/conference/nextgen-day-agenda.html @@ -0,0 +1,16 @@ + + + + + + NextGen Day Agenda | Imageomics Institute + + + + + +
+
+ + + diff --git a/html/conference/overview.html b/html/conference/overview.html new file mode 100644 index 0000000..6d808a3 --- /dev/null +++ b/html/conference/overview.html @@ -0,0 +1,16 @@ + + + + + + Conference Overview | Imageomics Institute + + + + + +
+
+ + + diff --git a/html/conference/research-lightning-talk-abstracts.html b/html/conference/research-lightning-talk-abstracts.html new file mode 100644 index 0000000..0a354b4 --- /dev/null +++ b/html/conference/research-lightning-talk-abstracts.html @@ -0,0 +1,16 @@ + + + + + + Research Lightning Talk Abstracts | Imageomics Institute + + + + + +
+
+ + + diff --git a/html/conference/resources.html b/html/conference/resources.html new file mode 100644 index 0000000..2eb0bfa --- /dev/null +++ b/html/conference/resources.html @@ -0,0 +1,16 @@ + + + + + + Conference Resources | Imageomics Institute + + + + + +
+
+ + + diff --git a/html/conference/the-wilds-field-trip-schedule.html b/html/conference/the-wilds-field-trip-schedule.html new file mode 100644 index 0000000..d2f11b7 --- /dev/null +++ b/html/conference/the-wilds-field-trip-schedule.html @@ -0,0 +1,16 @@ + + + + + + The Wilds Field Trip Schedule | Imageomics Institute + + + + + +
+
+ + + diff --git a/html/conference/travel-information.html b/html/conference/travel-information.html new file mode 100644 index 0000000..5172776 --- /dev/null +++ b/html/conference/travel-information.html @@ -0,0 +1,16 @@ + + + + + + Conference Travel Information | Imageomics Institute + + + + + +
+
+ + + diff --git a/html/events.html b/html/events.html new file mode 100644 index 0000000..29db245 --- /dev/null +++ b/html/events.html @@ -0,0 +1,16 @@ + + + + + + Events | Imageomics Institute + + + + + +
+
+ + + diff --git a/html/news.html b/html/news.html new file mode 100644 index 0000000..2de9e30 --- /dev/null +++ b/html/news.html @@ -0,0 +1,16 @@ + + + + + + News | Imageomics Institute + + + + + +
+
+ + + diff --git a/html/research.html b/html/research.html new file mode 100644 index 0000000..6975ff4 --- /dev/null +++ b/html/research.html @@ -0,0 +1,16 @@ + + + + + + Research | Imageomics Institute + + + + + +
+
+ + + diff --git a/html/research/projects.html b/html/research/projects.html new file mode 100644 index 0000000..c680e25 --- /dev/null +++ b/html/research/projects.html @@ -0,0 +1,16 @@ + + + + + + Research Projects | Imageomics Institute + + + + + +
+
+ + + diff --git a/html/research/publication-acknowledgements.html b/html/research/publication-acknowledgements.html new file mode 100644 index 0000000..c8060ae --- /dev/null +++ b/html/research/publication-acknowledgements.html @@ -0,0 +1,16 @@ + + + + + + Publication Acknowledgements | Imageomics Institute + + + + + +
+
+ + + diff --git a/html/research/publications.html b/html/research/publications.html new file mode 100644 index 0000000..3a53995 --- /dev/null +++ b/html/research/publications.html @@ -0,0 +1,16 @@ + + + + + + Imageomics Publications | Imageomics Institute + + + + + +
+
+ + + diff --git a/html/research/talks-presentations.html b/html/research/talks-presentations.html new file mode 100644 index 0000000..da05f1a --- /dev/null +++ b/html/research/talks-presentations.html @@ -0,0 +1,16 @@ + + + + + + Talks and Presentations | Imageomics Institute + + + + + +
+
+ + + diff --git a/html/tools-resources.html b/html/tools-resources.html new file mode 100644 index 0000000..547ecca --- /dev/null +++ b/html/tools-resources.html @@ -0,0 +1,16 @@ + + + + + + Tools & Resources | Imageomics Institute + + + + + +
+
+ + + diff --git a/html/tools-resources/authorship-guidelines.html b/html/tools-resources/authorship-guidelines.html new file mode 100644 index 0000000..46bef13 --- /dev/null +++ b/html/tools-resources/authorship-guidelines.html @@ -0,0 +1,16 @@ + + + + + + Authorship Guidelines | Imageomics Institute + + + + + +
+
+ + + diff --git a/html/tools-resources/data-code-of-conduct-policy.html b/html/tools-resources/data-code-of-conduct-policy.html new file mode 100644 index 0000000..8f802ed --- /dev/null +++ b/html/tools-resources/data-code-of-conduct-policy.html @@ -0,0 +1,16 @@ + + + + + + Data Code of Conduct Policy | Imageomics Institute + + + + + +
+
+ + + diff --git a/html/tools-resources/digital-products-release-licensing-policy.html b/html/tools-resources/digital-products-release-licensing-policy.html new file mode 100644 index 0000000..60bd7cb --- /dev/null +++ b/html/tools-resources/digital-products-release-licensing-policy.html @@ -0,0 +1,16 @@ + + + + + + Digital Products Release and Licensing Policy | Imageomics Institute + + + + + +
+
+ + + diff --git a/html/tools-resources/educational-tools-resources.html b/html/tools-resources/educational-tools-resources.html new file mode 100644 index 0000000..3c12ecd --- /dev/null +++ b/html/tools-resources/educational-tools-resources.html @@ -0,0 +1,16 @@ + + + + + + Educational Tools & Resources | Imageomics Institute + + + + + +
+
+ + + diff --git a/html/tools-resources/fieldwork-safety-plan.html b/html/tools-resources/fieldwork-safety-plan.html new file mode 100644 index 0000000..9e81236 --- /dev/null +++ b/html/tools-resources/fieldwork-safety-plan.html @@ -0,0 +1,16 @@ + + + + + + Fieldwork Safety Plan | Imageomics Institute + + + + + +
+
+ + + diff --git a/html/tools-resources/policies-guidelines.html b/html/tools-resources/policies-guidelines.html new file mode 100644 index 0000000..523b43d --- /dev/null +++ b/html/tools-resources/policies-guidelines.html @@ -0,0 +1,16 @@ + + + + + + Imageomics Policies & Guidelines | Imageomics Institute + + + + + +
+
+ + + diff --git a/html/tools-resources/software-tools-resources.html b/html/tools-resources/software-tools-resources.html new file mode 100644 index 0000000..4f77de4 --- /dev/null +++ b/html/tools-resources/software-tools-resources.html @@ -0,0 +1,16 @@ + + + + + + Software Tools & Resources | Imageomics Institute + + + + + +
+
+ + + diff --git a/html/tools-resources/team-science-tools-resources.html b/html/tools-resources/team-science-tools-resources.html new file mode 100644 index 0000000..dfd42e8 --- /dev/null +++ b/html/tools-resources/team-science-tools-resources.html @@ -0,0 +1,16 @@ + + + + + + Team Science Tools & Resources | Imageomics Institute + + + + + +
+
+ + + diff --git a/html/tools-resources/tool-tutorials.html b/html/tools-resources/tool-tutorials.html new file mode 100644 index 0000000..d0630c1 --- /dev/null +++ b/html/tools-resources/tool-tutorials.html @@ -0,0 +1,16 @@ + + + + + + Tool Tutorials | Imageomics Institute + + + + + +
+
+ + + diff --git a/images/Imageomics-logo.png b/images/Imageomics-logo.png new file mode 100644 index 0000000..3c263d4 Binary files /dev/null and b/images/Imageomics-logo.png differ diff --git a/images/search.png b/images/search.png new file mode 100644 index 0000000..5dc52f9 Binary files /dev/null and b/images/search.png differ diff --git a/index.html b/index.html new file mode 100644 index 0000000..baad766 --- /dev/null +++ b/index.html @@ -0,0 +1,16 @@ + + + + + + Imageomics Institute + + + + + +
+
+ + + diff --git a/js/load-components.js b/js/load-components.js new file mode 100644 index 0000000..ae3022c --- /dev/null +++ b/js/load-components.js @@ -0,0 +1,185 @@ +(function() { + 'use strict'; + + const COMPONENT_TEMPLATES = { + header: ` +
+ + + + +
+ + +
+
+ +
+ +
+
`, + footer: ` +` + }; + + function getPathPrefix() { + const path = window.location.pathname; + + if (path.endsWith('/') || (path.endsWith('/index.html') && !path.includes('/html/'))) { + return ''; + } + + const htmlIndex = path.indexOf('/html/'); + if (htmlIndex !== -1) { + const afterHtml = path.substring(htmlIndex + 6); + const depth = (afterHtml.match(/\//g) || []).length; + return '../'.repeat(depth + 1); + } + + return '../'; + } + + function adjustPaths(html, prefix) { + if (!prefix) return html; + + html = html.replace(/src="(images|css|js|html)\//g, `src="${prefix}$1/`); + html = html.replace(/href="(images|css|js|html)\//g, `href="${prefix}$1/`); + html = html.replace(/href="index\.html"/g, `href="${prefix}index.html"`); + html = html.replace(/href="\.\.\/index\.html"/g, `href="${prefix}index.html"`); + + return html; + } + + function renderComponent(targetId, html) { + const target = document.getElementById(targetId); + if (!target) return; + + const prefix = getPathPrefix(); + target.innerHTML = adjustPaths(html, prefix); + + if (targetId === 'header-placeholder') { + if (typeof window.initHamburger === 'function') { + window.initHamburger(); + } + if (typeof window.initSearchUI === 'function') { + window.initSearchUI(); + } + } + } + + function initComponents() { + renderComponent('header-placeholder', COMPONENT_TEMPLATES.header); + renderComponent('footer-placeholder', COMPONENT_TEMPLATES.footer); + } + + if (document.readyState === 'loading') { + document.addEventListener('DOMContentLoaded', initComponents); + } else { + initComponents(); + } +})(); diff --git a/js/script.js b/js/script.js new file mode 100644 index 0000000..37c8fb7 --- /dev/null +++ b/js/script.js @@ -0,0 +1,165 @@ +document.addEventListener('DOMContentLoaded', () => { + const pagesToIndex = [ + { title: 'About', url: 'html/about.html' }, + { title: 'The Vision of the Imageomics Institute', url: 'html/about/vision.html' }, + { title: 'Community Values', url: 'html/about/community-values.html' }, + { title: 'Code of Conduct', url: 'html/about/code-of-conduct.html' }, + { title: 'Imageomics In the News', url: 'html/about/imageomics-in-the-news.html' }, + { title: 'Institute Faculty & Staff', url: 'html/about/faculty-staff.html' }, + { title: 'NextGens', url: 'html/about/nextgens.html' }, + { title: 'Collaborators', url: 'html/about/collaborators.html' }, + { title: 'Subscribe to our Mailing List', url: 'html/about/mailing-list.html' }, + { title: 'Visitors to Imageomics Institute', url: 'html/about/visitors.html' }, + { title: 'Research', url: 'html/research.html' }, + { title: 'Research Projects', url: 'html/research/projects.html' }, + { title: 'Imageomics Publications', url: 'html/research/publications.html' }, + { title: 'Publication Acknowledgements', url: 'html/research/publication-acknowledgements.html' }, + { title: 'Talks and Presentations', url: 'html/research/talks-presentations.html' }, + { title: 'News', url: 'html/news.html' }, + { title: 'Events', url: 'html/events.html' }, + { title: 'Tools & Resources', url: 'html/tools-resources.html' }, + { title: 'Imageomics Policies & Guidelines', url: 'html/tools-resources/policies-guidelines.html' }, + { title: 'Authorship Guidelines', url: 'html/tools-resources/authorship-guidelines.html' }, + { title: 'Data Code of Conduct Policy', url: 'html/tools-resources/data-code-of-conduct-policy.html' }, + { title: 'Digital Products Release and Licensing Policy', url: 'html/tools-resources/digital-products-release-licensing-policy.html' }, + { title: 'Fieldwork Safety Plan', url: 'html/tools-resources/fieldwork-safety-plan.html' }, + { title: 'Educational Tools & Resources', url: 'html/tools-resources/educational-tools-resources.html' }, + { title: 'Software Tools & Resources', url: 'html/tools-resources/software-tools-resources.html' }, + { title: 'Tool Tutorials', url: 'html/tools-resources/tool-tutorials.html' }, + { title: 'Team Science Tools & Resources', url: 'html/tools-resources/team-science-tools-resources.html' }, + { title: 'Imageomics Conference', url: 'html/conference.html' }, + { title: 'Conference Overview', url: 'html/conference/overview.html' }, + { title: 'Conference Resources', url: 'html/conference/resources.html' }, + { title: 'Conference Accommodations', url: 'html/conference/accommodations.html' }, + { title: 'Conference Travel Information', url: 'html/conference/travel-information.html' }, + { title: 'Conference Agenda', url: 'html/conference/agenda.html' }, + { title: 'NextGen Day Agenda', url: 'html/conference/nextgen-day-agenda.html' }, + { title: 'The Wilds Field Trip Schedule', url: 'html/conference/the-wilds-field-trip-schedule.html' }, + { title: 'Research Lightning Talk Abstracts', url: 'html/conference/research-lightning-talk-abstracts.html' } + ]; + + function initSearchUI() { + const searchContainer = document.getElementById('searchContainer'); + const searchIconBtn = document.getElementById('searchIconBtn'); + const searchBar = document.getElementById('searchBar'); + const searchResults = document.getElementById('searchResults'); + + if (!searchContainer || !searchIconBtn || !searchBar || !searchResults || searchBar.dataset.bound === 'true') { + return; + } + + searchBar.dataset.bound = 'true'; + + const closeResults = () => { + searchResults.classList.remove('is-visible'); + searchResults.innerHTML = ''; + }; + + const renderResults = (matches) => { + if (!matches.length) { + searchResults.innerHTML = '
No matches found.
'; + searchResults.classList.add('is-visible'); + return; + } + + const resultsMarkup = matches.slice(0, 8).map((page) => ` + +
${page.title}
+
${page.url}
+
+ `).join(''); + + searchResults.innerHTML = `
${resultsMarkup}
`; + searchResults.classList.add('is-visible'); + }; + + const runSearch = () => { + const query = searchBar.value.trim().toLowerCase(); + if (!query) { + closeResults(); + return; + } + + const matches = pagesToIndex.filter((page) => ( + page.title.toLowerCase().includes(query) || page.url.toLowerCase().includes(query) + )); + + renderResults(matches); + }; + + searchIconBtn.addEventListener('click', () => { + searchBar.focus(); + runSearch(); + }); + + searchBar.addEventListener('input', runSearch); + + document.addEventListener('click', (event) => { + if (!searchContainer.contains(event.target)) { + closeResults(); + } + }); + + searchBar.addEventListener('keydown', (event) => { + if (event.key === 'Escape') { + closeResults(); + searchBar.blur(); + } + }); + } + + window.initHamburger = function initHamburger() { + const hamburger = document.getElementById('hamburger'); + const navMenu = document.querySelector('.nav'); + + if (!hamburger || !navMenu || hamburger.dataset.bound === 'true') { + return; + } + + hamburger.dataset.bound = 'true'; + + hamburger.addEventListener('click', function() { + hamburger.classList.toggle('active'); + navMenu.classList.toggle('active'); + document.body.classList.toggle('menu-open'); + }); + + document.addEventListener('click', function(e) { + if (navMenu.classList.contains('active') && + !navMenu.contains(e.target) && + !hamburger.contains(e.target)) { + hamburger.classList.remove('active'); + navMenu.classList.remove('active'); + document.body.classList.remove('menu-open'); + } + }); + + const links = navMenu.querySelectorAll('a'); + links.forEach((link) => { + link.addEventListener('click', function() { + if (!link.closest('.dropdown') || window.innerWidth > 768) { + hamburger.classList.remove('active'); + navMenu.classList.remove('active'); + document.body.classList.remove('menu-open'); + } + }); + }); + + const dropdowns = navMenu.querySelectorAll('.dropdown'); + dropdowns.forEach((dropdown) => { + const link = dropdown.querySelector(':scope > a'); + if (!link) return; + + link.addEventListener('click', function(e) { + if (window.innerWidth <= 768) { + e.preventDefault(); + dropdown.classList.toggle('active'); + } + }); + }); + }; + + window.initHamburger(); + window.initSearchUI = initSearchUI; + window.initSearchUI(); +});