{"version":3,"file":"GuggenPagination-Crz5WEMw.js","sources":["../../src/components/GuggenPagination.vue"],"sourcesContent":["<template>\n  <nav\n    v-if=\"totalPages > 1\"\n    :class=\"[$style.guggenPagination, 'space-36-48-above']\"\n    role=\"navigation\"\n    aria-label=\"Pagination Navigation\"\n  >\n    <ul>\n      <li v-if=\"!isInFirstPage\" :class=\"$style.previous\">\n        <a\n          tabindex=\"0\"\n          aria-label=\"Go to previous page\"\n          :ga4-event=\"\n            JSON.stringify({\n              click_type: 'navigation',\n              component: 'GuggenPagination',\n              content_group: `${parent}`,\n              gtm_tag: 'navigation',\n              link_text: 'Previous',\n              link_url: `${currentPage}-of-${totalPages}`,\n            })\n          \"\n          @click.prevent=\"onClickPreviousPage()\"\n          @keyup.enter=\"onClickPreviousPage()\"\n        >\n          Previous\n        </a>\n      </li>\n      <li\n        v-if=\"!isInFirstPage && totalPages > 5 && currentPage > 2 && !isMobile()\"\n        :class=\"$style.ellipsis\"\n      >\n        &hellip;\n      </li>\n      <li\n        v-for=\"(page, key) in pages\"\n        :key=\"key\"\n        :class=\"[\n          { [$style.hidden]: isMobile() && !isPageActive(page.name) },\n          { [$style.last]: key + 1 === pages.length },\n        ]\"\n      >\n        <a\n          :disabled=\"page.isDisabled\"\n          :class=\"[{ [$style.active]: isPageActive(page.name) }]\"\n          :aria-current=\"isPageActive(page.name) ? 'page' : false\"\n          :aria-label=\"`Go to page number ${page.name}`\"\n          :ga4-event=\"\n            JSON.stringify({\n              click_type: 'navigation',\n              component: 'GuggenPagination',\n              content_group: `${parent}`,\n              gtm_tag: 'navigation',\n              link_text: `page-${page.name}`,\n              link_url: `${currentPage}-of-${totalPages}`,\n            })\n          \"\n          tabindex=\"0\"\n          role=\"link\"\n          @click.prevent=\"onClickPage(page.name)\"\n          @keyup.enter=\"onClickPage(page.name)\"\n        >\n          {{ page.name }}\n        </a>\n      </li>\n      <li\n        v-if=\"!isInLastPage && totalPages > 5 && totalPages - currentPage > 3 && !isMobile()\"\n        :class=\"$style.ellipsis\"\n      >\n        &hellip;\n      </li>\n      <li\n        v-if=\"!isInLastPage && totalPages > 5 && totalPages - currentPage > 3 && !isMobile()\"\n        :class=\"$style.total\"\n      >\n        <a\n          :disabled=\"currentPage === totalPages\"\n          :class=\"[{ [$style.active]: isPageActive(totalPages) }]\"\n          :aria-current=\"isPageActive(totalPages) ? 'page' : false\"\n          :aria-label=\"`Go to page number ${totalPages}`\"\n          :ga4-event=\"\n            JSON.stringify({\n              click_type: 'navigation',\n              component: 'GuggenPagination',\n              content_group: `${parent}`,\n              gtm_tag: 'navigation',\n              link_text: `page-${totalPages}}`,\n              link_url: `${currentPage}-of-${totalPages}`,\n            })\n          \"\n          tabindex=\"0\"\n          role=\"link\"\n          @click.prevent=\"onClickPage(totalPages)\"\n          @keyup.enter=\"onClickPage(totalPages)\"\n        >\n          {{ totalPages }}\n        </a>\n      </li>\n      <li v-if=\"!isInLastPage\" :class=\"$style.next\">\n        <a\n          tabindex=\"0\"\n          aria-label=\"Go to next page\"\n          :ga4-event=\"\n            JSON.stringify({\n              click_type: 'navigation',\n              component: 'GuggenPagination',\n              content_group: `${parent}`,\n              gtm_tag: 'navigation',\n              link_text: 'Next',\n              link_url: `${currentPage}-of-${totalPages}`,\n            })\n          \"\n          @click.prevent=\"onClickNextPage()\"\n          @keyup.enter=\"onClickNextPage()\"\n        >\n          Next\n        </a>\n      </li>\n    </ul>\n  </nav>\n</template>\n\n<script setup lang=\"ts\">\nimport { computed, ref } from 'vue';\nimport { useRouter } from 'vue-router';\nimport { useRouteParent, useScreenSize } from '@/composables/Common.js';\n\ninterface Page {\n  name: number;\n  isDisabled: boolean;\n}\n\nconst props = withDefaults(\n  defineProps<{\n    bootstrapTotal?: number;\n    currentPage: number;\n    filter?: string;\n    hasBootstrap?: boolean;\n    maxButtons?: number;\n    perPage?: number;\n    postType: string;\n    query?: string;\n    subCategory?: string;\n    subType?: string;\n    subTypeValue?: string;\n    totalPageCount?: number;\n    totalSearchCount?: number;\n  }>(),\n  {\n    currentPage: 1,\n    filter: '',\n    hasBootstrap: false,\n    maxButtons: 5,\n    perPage: 27,\n    postType: 'post',\n  }\n);\n\nconst router = useRouter();\nconst { isMobile } = useScreenSize();\nconst { parent } = useRouteParent();\n\nconst slug = ref(getSlug());\n\nconst endPage = computed(() => Math.min(startPage.value + props.maxButtons - 1, totalPages.value));\nconst isInFirstPage = computed(() => props.currentPage === 1);\nconst isInLastPage = computed(() => props.currentPage === totalPages.value);\nconst pages = computed(() => {\n  const range = [] as Array<Page>;\n\n  for (let i = startPage.value; i <= endPage.value; i += 1) {\n    range.push({\n      name: i,\n      isDisabled: i === props.currentPage,\n    });\n  }\n\n  return range;\n});\nconst startPage = computed(() => {\n  if (props.currentPage === 1) {\n    return 1;\n  }\n\n  if (props.currentPage === totalPages.value && totalPages.value > props.maxButtons) {\n    return totalPages.value - props.maxButtons + 1;\n  }\n\n  return props.currentPage - 1;\n});\nconst totalPages = computed(() => props.totalPageCount || 0);\n\nfunction getSlug(): string {\n  let sub;\n  let type;\n\n  switch (props.postType) {\n    case 'all_lta':\n      sub = 'curriculum';\n      type = 'learning-through-art';\n      break;\n    case 'look_at_art':\n    case 'making_art':\n      sub = props.postType === 'look_at_art' ? 'art-investigation' : 'art-making';\n      type = 'learning-through-art';\n      break;\n    case 'post':\n      type = 'articles';\n      break;\n    default:\n      type = prepareType(props.postType);\n      break;\n  }\n\n  if (props.postType === 'exhibition' && props.filter === 'past') {\n    type = 'exhibitions/past';\n  }\n\n  if (props.subType && props.subTypeValue) {\n    if (props.subCategory) {\n      return `/${type}/${props.subType}/${props.subTypeValue}/${props.subCategory}`;\n    }\n\n    if (props.postType === 'look_at_art' || props.postType === 'making_art') {\n      return `/learning-through-art/${sub}/${props.subType}/${props.subTypeValue}`;\n    }\n\n    return `/${type}/${props.subType}/${props.subTypeValue}`;\n  }\n\n  if ((sub || props.subType) && props.subType !== 'all_audio' && type !== 'search') {\n    sub = sub || props.subType;\n\n    if (type === 'audio' && props.subType) {\n      sub = props.subType.split('_')[1];\n    }\n\n    return `/${type}/${sub}`;\n  }\n\n  if (type === 'search') {\n    if (props.subType) {\n      return `/${type}?s=${props.query}&post_type=${props.subType}&page=`;\n    }\n\n    return `/${type}?s=${props.query}&page=`;\n  }\n\n  return `/${type}`;\n}\n\nfunction isPageActive(page: number): boolean {\n  return props.currentPage === page;\n}\n\nfunction onClickNextPage(): void {\n  pagechanged(props.currentPage + 1);\n}\n\nfunction onClickPage(page: number): void {\n  pagechanged(page);\n}\n\nfunction onClickPreviousPage(): void {\n  pagechanged(props.currentPage - 1);\n}\n\nfunction pagechanged(page: number): void {\n  if (props.postType === 'search') {\n    router.push({ path: `${slug.value}${page}` });\n  } else if (page === 1) {\n    if (props.postType === 'exhibition' && props.filter === 'past') {\n      router.push({\n        name: props.subType ? 'ExhibitionsPastTerm' : 'ExhibitionsPast',\n        params: { past: 'true', term: props.subTypeValue, type: props.subType },\n      });\n    } else {\n      router.push({ path: slug.value });\n    }\n  } else {\n    if (props.postType === 'exhibition' && props.filter === 'past') {\n      router.push({\n        name: props.subType ? 'ExhibitionsPastTermPage' : 'ExhibitionsPastPage',\n        params: { page: page, past: 'true', term: props.subTypeValue, type: props.subType },\n      });\n    } else {\n      router.push({ path: `${slug.value}/page/${page}` });\n    }\n  }\n}\n\nfunction prepareType(type: string): string {\n  return type.replace('_', '-');\n}\n</script>\n\n<style lang=\"scss\" module>\n.guggenPagination {\n  grid-column: 3 / span 8;\n\n  ul {\n    margin-left: 0;\n    margin-top: 0;\n    padding-left: 0;\n    text-align: center;\n  }\n\n  li {\n    display: inline;\n    list-style-type: none;\n    margin-right: 2rem;\n\n    // Unset style polluting global scope.\n    &:before {\n      content: none;\n    }\n\n    a,\n    span {\n      @include heading-5;\n\n      & {\n        display: inline;\n        margin-top: 0;\n      }\n    }\n\n    a {\n      cursor: pointer;\n      text-decoration: none;\n\n      &.active {\n        border-bottom: 4px solid;\n        pointer-events: none;\n      }\n\n      &.disabled {\n        display: none;\n      }\n\n      &:hover {\n        border-bottom: 4px solid;\n      }\n\n      &:focus {\n        color: $white;\n      }\n    }\n\n    &.hidden {\n      display: none;\n    }\n  }\n\n  .next,\n  .previous {\n    &:hover {\n      a {\n        border-bottom: none;\n        cursor: pointer;\n        text-decoration: underline;\n      }\n    }\n\n    a {\n      padding: 0.75rem;\n\n      &:focus {\n        color: $white;\n      }\n    }\n  }\n\n  .next {\n    a {\n      @include right-arrow;\n    }\n  }\n\n  .previous {\n    a {\n      @include left-arrow;\n    }\n  }\n}\n\n@media (min-width: $break-point) {\n  .guggenPagination {\n    li {\n      margin-right: 1.75rem;\n    }\n\n    .ellipsis,\n    .last {\n      margin-right: 1rem;\n    }\n\n    .previous {\n      margin-right: 0.25rem;\n    }\n\n    .total {\n      margin-right: 0.25rem;\n    }\n  }\n}\n</style>\n"],"names":["props","__props","router","useRouter","isMobile","useScreenSize","parent","useRouteParent","slug","ref","getSlug","endPage","computed","startPage","totalPages","isInFirstPage","isInLastPage","pages","range","i","sub","type","prepareType","isPageActive","page","onClickNextPage","pagechanged","onClickPage","onClickPreviousPage"],"mappings":"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"}