{"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 …\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 …\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":"4pBAoIA,MAAMA,EAAQC,EA0BRC,EAASC,EAAU,EACnB,CAAE,SAAAC,CAAS,EAAIC,EAAc,EAC7B,CAAE,OAAAC,CAAO,EAAIC,EAAe,EAE5BC,EAAOC,EAAIC,GAAS,EAEpBC,EAAUC,EAAS,IAAM,KAAK,IAAIC,EAAU,MAAQb,EAAM,WAAa,EAAGc,EAAW,KAAK,CAAC,EAC3FC,EAAgBH,EAAS,IAAMZ,EAAM,cAAgB,CAAC,EACtDgB,EAAeJ,EAAS,IAAMZ,EAAM,cAAgBc,EAAW,KAAK,EACpEG,EAAQL,EAAS,IAAM,CAC3B,MAAMM,EAAQ,CAAC,EAEf,QAASC,EAAIN,EAAU,MAAOM,GAAKR,EAAQ,MAAOQ,GAAK,EACrDD,EAAM,KAAK,CACT,KAAMC,EACN,WAAYA,IAAMnB,EAAM,WAAA,CACzB,EAGI,OAAAkB,CAAA,CACR,EACKL,EAAYD,EAAS,IACrBZ,EAAM,cAAgB,EACjB,EAGLA,EAAM,cAAgBc,EAAW,OAASA,EAAW,MAAQd,EAAM,WAC9Dc,EAAW,MAAQd,EAAM,WAAa,EAGxCA,EAAM,YAAc,CAC5B,EACKc,EAAaF,EAAS,IAAMZ,EAAM,gBAAkB,CAAC,EAE3D,SAASU,GAAkB,CACrB,IAAAU,EACAC,EAEJ,OAAQrB,EAAM,SAAU,CACtB,IAAK,UACGoB,EAAA,aACCC,EAAA,uBACP,MACF,IAAK,cACL,IAAK,aACGD,EAAApB,EAAM,WAAa,cAAgB,oBAAsB,aACxDqB,EAAA,uBACP,MACF,IAAK,OACIA,EAAA,WACP,MACF,QACSA,EAAAC,EAAYtB,EAAM,QAAQ,EACjC,KAAA,CAOA,OAJAA,EAAM,WAAa,cAAgBA,EAAM,SAAW,SAC/CqB,EAAA,oBAGLrB,EAAM,SAAWA,EAAM,aACrBA,EAAM,YACD,IAAIqB,CAAI,IAAIrB,EAAM,OAAO,IAAIA,EAAM,YAAY,IAAIA,EAAM,WAAW,GAGzEA,EAAM,WAAa,eAAiBA,EAAM,WAAa,aAClD,yBAAyBoB,CAAG,IAAIpB,EAAM,OAAO,IAAIA,EAAM,YAAY,GAGrE,IAAIqB,CAAI,IAAIrB,EAAM,OAAO,IAAIA,EAAM,YAAY,IAGnDoB,GAAOpB,EAAM,UAAYA,EAAM,UAAY,aAAeqB,IAAS,UACtED,EAAMA,GAAOpB,EAAM,QAEfqB,IAAS,SAAWrB,EAAM,UAC5BoB,EAAMpB,EAAM,QAAQ,MAAM,GAAG,EAAE,CAAC,GAG3B,IAAIqB,CAAI,IAAID,CAAG,IAGpBC,IAAS,SACPrB,EAAM,QACD,IAAIqB,CAAI,MAAMrB,EAAM,KAAK,cAAcA,EAAM,OAAO,SAGtD,IAAIqB,CAAI,MAAMrB,EAAM,KAAK,SAG3B,IAAIqB,CAAI,EAAA,CAGjB,SAASE,EAAaC,EAAuB,CAC3C,OAAOxB,EAAM,cAAgBwB,CAAA,CAG/B,SAASC,GAAwB,CACnBC,EAAA1B,EAAM,YAAc,CAAC,CAAA,CAGnC,SAAS2B,EAAYH,EAAoB,CACvCE,EAAYF,CAAI,CAAA,CAGlB,SAASI,GAA4B,CACvBF,EAAA1B,EAAM,YAAc,CAAC,CAAA,CAGnC,SAAS0B,EAAYF,EAAoB,CACnCxB,EAAM,WAAa,SACdE,EAAA,KAAK,CAAE,KAAM,GAAGM,EAAK,KAAK,GAAGgB,CAAI,GAAI,EACnCA,IAAS,EACdxB,EAAM,WAAa,cAAgBA,EAAM,SAAW,OACtDE,EAAO,KAAK,CACV,KAAMF,EAAM,QAAU,sBAAwB,kBAC9C,OAAQ,CAAE,KAAM,OAAQ,KAAMA,EAAM,aAAc,KAAMA,EAAM,OAAQ,CAAA,CACvE,EAEDE,EAAO,KAAK,CAAE,KAAMM,EAAK,MAAO,EAG9BR,EAAM,WAAa,cAAgBA,EAAM,SAAW,OACtDE,EAAO,KAAK,CACV,KAAMF,EAAM,QAAU,0BAA4B,sBAClD,OAAQ,CAAE,KAAAwB,EAAY,KAAM,OAAQ,KAAMxB,EAAM,aAAc,KAAMA,EAAM,OAAQ,CAAA,CACnF,EAEME,EAAA,KAAK,CAAE,KAAM,GAAGM,EAAK,KAAK,SAASgB,CAAI,GAAI,CAEtD,CAGF,SAASF,EAAYD,EAAsB,CAClC,OAAAA,EAAK,QAAQ,IAAK,GAAG,CAAA"}