Skip to content
Snippets Groups Projects
MapsSection.vue 8.48 KiB
Newer Older
<template>
  <section id="map">
    <div
      id="title"
      class="text-container title-text"
    >
Cee Nell's avatar
Cee Nell committed
      <h3 v-html="t('text.components.mapText.title')"></h3>
Azadpour, Elmera's avatar
Azadpour, Elmera committed
      <br>
      <div class="accordion-container">
Cee Nell's avatar
Cee Nell committed

        <!-- Accordion 1 -->
        <button class="accordion households-accordion active">
          <span v-html="t('text.components.mapText.p1Title')"></span><span class="symbol">-</span>
        </button>
        <div class="panel households-panel">
Cee Nell's avatar
Cee Nell committed
          <p v-html="t('text.components.mapText.paragraph1')"></p>
Cee Nell's avatar
Cee Nell committed
          <picture>
            <source
              type="image/webp"
Cee Nell's avatar
Cee Nell committed
              :srcset="getImageSrcSet('avg_household_size_2022', 'webp')"
Cee Nell's avatar
Cee Nell committed
              sizes="(max-width: 600px) 320px, (max-width: 1200px) 640px, (min-width: 1201px) 1280px, 1920px"
            />
            <img
Cee Nell's avatar
Cee Nell committed
              :srcset="getImageSrcSet('avg_household_size_2022', 'jpg')"
Cee Nell's avatar
Cee Nell committed
              sizes="(max-width: 600px) 320px, (max-width: 1200px) 640px, (min-width: 1201px) 1280px, 1920px"
Cee Nell's avatar
Cee Nell committed
              :src="getImageSrc('avg_household_size_2022', 'jpg', 1280)"
              :alt="t('text.components.mapText.p1Alt')"
Cee Nell's avatar
Cee Nell committed
            />
          </picture>
Azadpour, Elmera's avatar
Azadpour, Elmera committed
        </div>

Cee Nell's avatar
Cee Nell committed
<!-- Accordion 2 -->
<button class="accordion latino-accordion">
Cee Nell's avatar
Cee Nell committed
          <span v-html="t('text.components.mapText.p4Title')"></span><span class="symbol">+</span>
        </button>
Azadpour, Elmera's avatar
Azadpour, Elmera committed
        <div class="panel">
Cee Nell's avatar
Cee Nell committed
          <p v-html="t('text.components.mapText.paragraph4')"></p>
Cee Nell's avatar
Cee Nell committed
          <picture>
            <source
              type="image/webp"
Cee Nell's avatar
Cee Nell committed
              :srcset="getImageSrcSet('perc_hispanic_census_2022', 'webp')"
Cee Nell's avatar
Cee Nell committed
              sizes="(max-width: 600px) 320px, (max-width: 1200px) 640px, (min-width: 1201px) 1280px, 1920px"
            />
            <img
Cee Nell's avatar
Cee Nell committed
              :srcset="getImageSrcSet('perc_hispanic_census_2022', 'jpg')"
Cee Nell's avatar
Cee Nell committed
              sizes="(max-width: 600px) 320px, (max-width: 1200px) 640px, (min-width: 1201px) 1280px, 1920px"
Cee Nell's avatar
Cee Nell committed
              :src="getImageSrc('perc_hispanic_census_2022', 'jpg', 1280)"
              :alt="t('text.components.mapText.p4Alt')"
Cee Nell's avatar
Cee Nell committed
            />
          </picture>
Azadpour, Elmera's avatar
Azadpour, Elmera committed
        </div>

Cee Nell's avatar
Cee Nell committed
        <!-- Accordion 3 -->
        <button class="accordion disability-accordion">
          <span v-html="t('text.components.mapText.p5Title')"></span><span class="symbol">+</span>
        </button>
Azadpour, Elmera's avatar
Azadpour, Elmera committed
        <div class="panel">
Cee Nell's avatar
Cee Nell committed
          <p v-html="t('text.components.mapText.paragraph5')"></p>
Cee Nell's avatar
Cee Nell committed
          <picture>
            <source
              type="image/webp"
Cee Nell's avatar
Cee Nell committed
              :srcset="getImageSrcSet('perc_disabled_census_2022', 'webp')"
Cee Nell's avatar
Cee Nell committed
              sizes="(max-width: 600px) 320px, (max-width: 1200px) 640px, (min-width: 1201px) 1280px, 1920px"
            />
            <img
Cee Nell's avatar
Cee Nell committed
              :srcset="getImageSrcSet('perc_disabled_census_2022', 'jpg')"
Cee Nell's avatar
Cee Nell committed
              sizes="(max-width: 600px) 320px, (max-width: 1200px) 640px, (min-width: 1201px) 1280px, 1920px"
Cee Nell's avatar
Cee Nell committed
              :src="getImageSrc('perc_disabled_census_2022', 'jpg', 1280)"
              :alt="t('text.components.mapText.p5Alt')"
Cee Nell's avatar
Cee Nell committed
            />
          </picture>
Azadpour, Elmera's avatar
Azadpour, Elmera committed
        </div>

Cee Nell's avatar
Cee Nell committed
        <!-- Accordion 4 -->
        <button class="accordion income-accordion">
          <span v-html="t('text.components.mapText.p2Title')"></span><span class="symbol">+</span>
        </button>
Azadpour, Elmera's avatar
Azadpour, Elmera committed
        <div class="panel">
Cee Nell's avatar
Cee Nell committed
          <p v-html="t('text.components.mapText.paragraph2')"></p>
Cee Nell's avatar
Cee Nell committed
          <picture>
            <source
              type="image/webp"
Cee Nell's avatar
Cee Nell committed
              :srcset="getImageSrcSet('med_income_census_2022', 'webp')"
Cee Nell's avatar
Cee Nell committed
              sizes="(max-width: 600px) 320px, (max-width: 1200px) 640px, (min-width: 1201px) 1280px, 1920px"
            />
            <img
Cee Nell's avatar
Cee Nell committed
              :srcset="getImageSrcSet('med_income_census_2022', 'jpg')"
Cee Nell's avatar
Cee Nell committed
              sizes="(max-width: 600px) 320px, (max-width: 1200px) 640px, (min-width: 1201px) 1280px, 1920px"
Cee Nell's avatar
Cee Nell committed
              :src="getImageSrc('med_income_census_2022', 'jpg', 1280)"
              :alt="t('text.components.mapText.p2Alt')"
Cee Nell's avatar
Cee Nell committed
            />
          </picture>
Azadpour, Elmera's avatar
Azadpour, Elmera committed
        </div>

Cee Nell's avatar
Cee Nell committed
        <!-- Accordion 5 -->
        <button class="accordion renters-accordion">
          <span v-html="t('text.components.mapText.p3Title')"></span><span class="symbol">+</span>
        </button>
        <div class="panel">
Cee Nell's avatar
Cee Nell committed
          <p v-html="t('text.components.mapText.paragraph3')"></p>
Cee Nell's avatar
Cee Nell committed
          <picture>
            <source
              type="image/webp"
Cee Nell's avatar
Cee Nell committed
              :srcset="getImageSrcSet('median_rent_2022', 'webp')"
Cee Nell's avatar
Cee Nell committed
              sizes="(max-width: 600px) 320px, (max-width: 1200px) 640px, (min-width: 1201px) 1280px, 1920px"
            />
            <img
Cee Nell's avatar
Cee Nell committed
              :srcset="getImageSrcSet('median_rent_2022', 'jpg')"
Cee Nell's avatar
Cee Nell committed
              sizes="(max-width: 600px) 320px, (max-width: 1200px) 640px, (min-width: 1201px) 1280px, 1920px"
Cee Nell's avatar
Cee Nell committed
              :src="getImageSrc('median_rent_2022', 'jpg', 1280)"
              :alt="t('text.components.mapText.p3Alt')"
Cee Nell's avatar
Cee Nell committed
            />
          </picture>
Cee Nell's avatar
Cee Nell committed

Azadpour, Elmera's avatar
Azadpour, Elmera committed
    </div>
Cee Nell's avatar
Cee Nell committed

Azadpour, Elmera's avatar
Azadpour, Elmera committed
<script setup>
import { onMounted } from 'vue';
Cee Nell's avatar
Cee Nell committed
import { useI18n } from 'vue-i18n';

Cee Nell's avatar
Cee Nell committed
const { t, locale } = useI18n();
Cee Nell's avatar
Cee Nell committed
const getImageSrc = (baseName, format, size) => {
  const lang = locale.value === 'es' ? 'es' : 'en';  // Get language
  return new URL(`../assets/images/responsive_images/${baseName}_${lang}-${size}.${format}`, import.meta.url).href;
};

const getImageSrcSet = (baseName, format) => {
  const lang = locale.value === 'es' ? 'es' : 'en';  // Get language
  return `
    ${new URL(`../assets/images/responsive_images/${baseName}_${lang}-320.${format}`, import.meta.url).href} 320w,
    ${new URL(`../assets/images/responsive_images/${baseName}_${lang}-640.${format}`, import.meta.url).href} 640w,
    ${new URL(`../assets/images/responsive_images/${baseName}_${lang}-1280.${format}`, import.meta.url).href} 1280w,
    ${new URL(`../assets/images/responsive_images/${baseName}_${lang}-1800.${format}`, import.meta.url).href} 1920w
  `;
};

// Accordion click handler
Azadpour, Elmera's avatar
Azadpour, Elmera committed
onMounted(() => {
  const acc = document.getElementsByClassName("accordion");
  for (let i = 0; i < acc.length; i++) {
    acc[i].addEventListener("click", function () {
      this.classList.toggle("active");
      const panel = this.nextElementSibling;
      const symbol = this.querySelector('.symbol');
      if (panel.style.display === "block") {
        panel.style.display = "none";
        symbol.textContent = "+";
      } else {
        panel.style.display = "block";
        symbol.textContent = "-";
      }
    });
  }
});
Cee Nell's avatar
Cee Nell committed
<style lang="scss" scoped>

$Demographiccharacteristics: var(--color-Demographiccharacteristics);
$Landtenure: var(--color-Landtenure);
$Livingconditions: var(--color-Livingconditions);
$Socioeconomicstatus: var(--color-Socioeconomicstatus);
$Health: var(--color-Health);
$Riskperception: var(--color-Riskperception);
$Exposure: var(--color-Exposure);
$ThemeGrey: var(--color-themegrey);

Azadpour, Elmera's avatar
Azadpour, Elmera committed
.accordion {
  background-color: #eee;
  color: #fff;
  cursor: pointer;
Azadpour, Elmera's avatar
Azadpour, Elmera committed
  width: 100%;
  border: none;
  text-align: left;
  outline: none;
Azadpour, Elmera's avatar
Azadpour, Elmera committed
  transition: 0.4s;
  display: flex;
  justify-content: space-between;
  align-items: center;
  font-size: 2.15rem;
  font-family: 'Source Sans Pro', sans-serif;
Azadpour, Elmera's avatar
Azadpour, Elmera committed
  font-weight: 600;
  position: relative;
  border: 2px solid transparent;
  box-shadow: 0 4px 8px rgba(0, 0, 0, 0.1);
.accordion.households-accordion {
Cee Nell's avatar
Cee Nell committed
  background-color: $Demographiccharacteristics;
.accordion.income-accordion {
Cee Nell's avatar
Cee Nell committed
  background-color: $Socioeconomicstatus;
}

.accordion.renters-accordion {
Cee Nell's avatar
Cee Nell committed
  background-color: $Landtenure;
}

.accordion.latino-accordion {
Cee Nell's avatar
Cee Nell committed
  background-color: $Demographiccharacteristics;
.accordion.disability-accordion {
Cee Nell's avatar
Cee Nell committed
  background-color: $Demographiccharacteristics;
.accordion::before {
  content: "";
  position: absolute;
  top: -2px;
  left: -2px;
  right: -2px;
  bottom: -2px;
  border: 2px solid transparent;
  z-index: -1;
  transition: border-color 0.3s;
}

.accordion:hover::before, .accordion.active::before {
  border-color: rgba(217, 217, 217, 0.95);
Azadpour, Elmera's avatar
Azadpour, Elmera committed
.active, .accordion:hover {
Azadpour, Elmera's avatar
Azadpour, Elmera committed
  background-color: black; 
Azadpour, Elmera's avatar
Azadpour, Elmera committed
.panel {
  display: none; 
Azadpour, Elmera's avatar
Azadpour, Elmera committed
  overflow: hidden;
  border: 3px solid #F0F0F0; 
  margin-bottom: 15px;
  margin-top: -15px;
  border-top-width: 0;
  border-radius: 0 0 10px 10px;
.panel p {
  margin: 20px;
}

.panel img {
  display: block;
  margin-left: auto;
  margin-right: auto;
  max-width: 100%;
}

.households-accordion.active + .households-panel {
  display: block;
}

Azadpour, Elmera's avatar
Azadpour, Elmera committed
.symbol {
  font-size: 32px;
Azadpour, Elmera's avatar
Azadpour, Elmera committed
  font-weight: bold;
}
  #choropleth-map-tooltip {
    margin-left: -120px;
  }