{"version":3,"file":"vue3-sphinx-xml.mjs","names":[],"sources":["../src/components/SphinxPage.vue","../src/entry.js"],"sourcesContent":["<template>\n  <document :element=\"element\" :id=\"id\" />\n</template>\n\n<script setup>\nimport { defineAsyncComponent, defineProps, ref, toRefs, watch } from 'vue'\nimport { useRoute, useRouter } from 'vue-router'\nimport { useSphinxStore } from '@/stores/sphinx'\n\nimport { determineRouteUrl, constructPageNameFromRoute } from '../js/utilities'\n\nconst Document = defineAsyncComponent(() =>\n  import('./templates/Document.vue')\n)\n\nconst props = defineProps({\n  baseURL: {\n    type: String,\n    default: '/',\n  },\n  referenceBaseURL: {\n    type: String,\n    default: undefined,\n  },\n  downloadBaseURL: {\n    type: String,\n    default: '',\n  },\n  imagesBaseURL: {\n    type: String,\n    default: '',\n  },\n  indexFileName: {\n    type: String,\n    default: 'index',\n  },\n  pageNotFoundName: {\n    type: String,\n    default: '404',\n  },\n  scrollDelay: {\n    type: Number,\n    default: 200,\n  },\n})\n\nconst {\n  baseURL,\n  referenceBaseURL,\n  downloadBaseURL,\n  imagesBaseURL,\n  indexFileName,\n  pageNotFoundName,\n  scrollDelay,\n} = toRefs(props)\n\nconst router = useRouter()\nconst route = useRoute()\nconst sphinxStore = useSphinxStore()\n\nconsole.log('*********** SphinxPage.vue loaded ***********')\nconsole.log(`Base URL: ${baseURL.value}`)\nconsole.log(route)\nconsole.log(router)\nlet element = ref(null)\nlet scrollToTarget = ref(undefined)\nlet id = ref('')\nlet previousRoute = {\n  path: undefined,\n  hash: undefined,\n}\n\nfunction followScrollTarget(elem) {\n  setTimeout(() => {\n    scrollToTarget.value = elem.offsetTop\n    window.scrollTo({\n      top: elem.offsetTop,\n      behavior: 'smooth',\n    })\n    setTimeout(() => {\n      if (scrollToTarget.value !== elem.offsetTop) {\n        followScrollTarget(elem)\n      }\n    }, 10)\n  }, scrollDelay.value)\n}\n\nwatch(\n  route,\n  (to) => {\n    const routeURL = determineRouteUrl(to)\n    if (routeURL !== undefined) {\n      if (previousRoute.path === undefined || to.path !== previousRoute.path) {\n        const pageName = constructPageNameFromRoute(to)\n        fetchPageData(to.path, routeURL, pageName)\n        if (to.hash) {\n          setTimeout(() => {\n            let hash = to.hash\n            if (hash.startsWith('#')) {\n              hash = hash.slice(1)\n            }\n            const elem = document.getElementById(hash)\n            if (elem) {\n              followScrollTarget(elem)\n            }\n          }, scrollDelay.value)\n        }\n      } else if (to.path === previousRoute.path && to.hash) {\n        let hash = to.hash\n        if (hash.startsWith('#')) {\n          hash = hash.slice(1)\n        }\n        const elem = document.getElementById(hash)\n        if (elem) {\n          window.scrollTo({\n            top: elem.offsetTop,\n            behavior: 'smooth',\n          })\n        }\n      }\n    }\n\n    previousRoute.path = to.path\n    previousRoute.hash = to.hash\n  },\n  { flush: 'pre', immediate: true, deep: true },\n)\n\nfunction fetchPageData(currentPath, routeURL, pageName) {\n  if (!pageName) {\n    pageName = indexFileName.value\n  }\n  const resolvedImagesBaseURL =\n    imagesBaseURL.value === ''\n      ? `${baseURL.value}/_images`\n      : imagesBaseURL.value\n  const resolvedDownloadBaseURL =\n    downloadBaseURL.value === ''\n      ? `${baseURL.value}/_downloads`\n      : downloadBaseURL.value\n\n  let tmpBaseURL = baseURL.value\n  let tmpRouteURL = routeURL\n  let tmpPageName = pageName\n  if (referenceBaseURL.value) {\n    let baseURLParts = tmpBaseURL.split(referenceBaseURL.value)\n    const value = baseURLParts.pop()\n    if (value === indexFileName.value) {\n      baseURLParts.pop()\n    }\n    if (referenceBaseURL.value !== '/') {\n      baseURLParts.push(referenceBaseURL.value)\n    }\n    tmpBaseURL = baseURLParts.join('/').replace('//', '/')\n    let routeURLParts = tmpRouteURL.split(referenceBaseURL.value)\n    const routeEnd = routeURLParts.pop()\n    routeURLParts.push(referenceBaseURL.value)\n    tmpRouteURL = routeURLParts.join('/').replace('//', '/')\n    const pagePrefix = routeEnd[0] === '/' ? routeEnd.slice(1) : routeEnd\n    tmpPageName = pagePrefix + '/' + tmpPageName\n  }\n\n  sphinxStore.registerRouteUrl({\n    baseURL: tmpBaseURL,\n    routeURL: tmpRouteURL,\n    downloadsURL: resolvedDownloadBaseURL,\n    imagesURL: resolvedImagesBaseURL,\n    offsetRouteURL: referenceBaseURL.value === undefined ? false : routeURL,\n  })\n\n  sphinxStore\n    .fetchPage({\n      page_name: tmpPageName,\n      page_route: tmpRouteURL,\n      page_url: tmpBaseURL,\n    })\n    .then((response) => {\n      element.value = response\n      id.value = 'page_' + tmpPageName.replace('/', '_')\n    })\n    .catch(() => {\n      if (pageName.endsWith('index')) {\n        router.push({\n          name: pageNotFoundName.value,\n          query: {\n            path: currentPath,\n          },\n        })\n      } else {\n        // Didn't find a path with the original name, maybe it's an index page?\n        const newPath =\n          currentPath + (currentPath.endsWith('/') ? '' : '/') + indexFileName.value\n        router.push(newPath)\n      }\n    })\n}\n</script>\n","import { createPinia } from 'pinia'\n\nimport Vue3Katex from 'vue3-katex'\nimport 'katex/dist/katex.min.css'\n\nimport { installVue3Highlightjs } from '@hsorby/vue3-highlightjs'\n\nimport SphinxPage from './components/SphinxPage.vue'\n\nfunction installVue3SphinxXml(app, options = {}) {\n  // Create a local pinia instance???\n  app.use(createPinia())\n  app.use(Vue3Katex, options.katex)\n  app.use(installVue3Highlightjs)\n}\n\nexport { installVue3SphinxXml, SphinxPage }\n"],"mappings":"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"}