{"version":3,"sources":["components/RichText2/index.tsx","ts/handleAnchorOffset.ts","react/RoutableRichText/index.js"],"names":["RichText2","_ref","fields","React","createElement","RoutableRichText","field","richText2","tag","className","urlHistory","getOffsetFromTopOfPage","el","rect","getBoundingClientRect","scrollTop","window","pageYOffset","document","documentElement","top","performOffset","e","_document","_document$body","_document2","_document2$body","preventDefault","header","body","querySelector","anchor","target","closest","hash","anchorPosition","offsetAmount","offsetHeight","scrollIntoView","behavior","block","inline","scrollTo","push","handleAnchorOffsetUrlHash","setTimeout","_document3","_document4","_document4$body","location","length","test","handleAnchorOffset","container","history","anchorLinks","querySelectorAll","forEach","link","addEventListener","props","useHistory","richTextRef","useRef","pathname","useLocation","routeHandler","event","search","useEffect","current","hasText","value","isEditing","editable","removeEventListener","image","src","mediaApi","updateImageUrl","newProps","_objectWithoutProperties","ref","RichText"],"mappings":"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","file":"static/js/RichText2.03c084fd.chunk.js","sourcesContent":["import React from 'react';\r\nimport { RoutableRichText } from '../../react/RoutableRichText';\r\n\r\nconst RichText2 = ({ fields }) =>\r\n (\r\n \r\n );\r\n\r\nexport default RichText2;","var urlHistory;\r\n\r\nfunction getOffsetFromTopOfPage(el) {\r\n let rect = el.getBoundingClientRect(),\r\n scrollTop = window.pageYOffset || document.documentElement.scrollTop;\r\n return rect.top + scrollTop;\r\n}\r\n\r\nfunction performOffset(e){\r\n e.preventDefault();\r\n let header = document?.body?.querySelector('header');\r\n let anchor = document?.body?.querySelector(e.target.closest('a').hash);\r\n let anchorPosition = getOffsetFromTopOfPage(anchor);\r\n let offsetAmount = header.offsetHeight + 15;\r\n anchor.scrollIntoView({behavior: \"smooth\", block: 'start', inline: 'nearest'});\r\n window.scrollTo({top: anchorPosition - offsetAmount, behavior: 'smooth'});\r\n if (urlHistory) {\r\n urlHistory.push(e.target.closest('a').hash);\r\n }\r\n return false;\r\n}\r\n\r\nexport function handleAnchorOffsetUrlHash(){\r\n //timeout of zero to wait for dom load\r\n setTimeout(function(){\r\n let hash = window.location.hash;\r\n if(hash == \"#maincontent\") return;\r\n if(hash.length == 0 || !(/^[A-Za-z\\#]+[\\w\\-\\:\\.]*$/).test(hash)) return;\r\n let anchor = document?.body.querySelector(hash);\r\n\r\n if(!anchor) return;\r\n let header = document?.body?.querySelector('header');\r\n let anchorPosition = getOffsetFromTopOfPage(anchor);\r\n let offsetAmount = header.offsetHeight + 15;\r\n anchor.scrollIntoView({behavior: \"smooth\", block: 'start', inline: 'nearest'});\r\n window.scrollTo({top: anchorPosition - offsetAmount, behavior: 'smooth'});\r\n },0);\r\n}\r\n\r\nexport function handleAnchorOffset(container, history?) {\r\n const anchorLinks = container?.querySelectorAll('a[href^=\"#\"]');\r\n urlHistory = history;\r\n anchorLinks.forEach((link) => {\r\n link.addEventListener('click', performOffset, false);\r\n });\r\n}","import React, { useRef, useEffect } from 'react';\r\nimport { RichText,mediaApi } from '@sitecore-jss/sitecore-jss-react';\r\nimport { useHistory } from 'react-router-dom';\r\nimport { useLocation } from \"react-router-dom\";\r\nimport { handleAnchorOffset, handleAnchorOffsetUrlHash } from '../../ts/handleAnchorOffset'\r\n\r\nconst RoutableRichText = (props) => {\r\n const history = useHistory();\r\n const richTextRef = useRef();\r\n const { pathname } = useLocation();\r\n\r\n const routeHandler = (event) => {\r\n event.preventDefault();\r\n let anchor = event.target.closest('a');\r\n if(anchor !== null){\r\n history.push(anchor.pathname + anchor.search);\r\n }\r\n };\r\n\r\n useEffect(() => {\r\n if (!richTextRef.current) return;\r\n\r\n const hasText = props.field && props.field.value;\r\n const isEditing = props.editable && props.field.editable;\r\n \r\n if (hasText && !isEditing) {\r\n // selects all links that start with '/' - this logic may be inappropriate for some advanced uses\r\n const internalLinks = richTextRef.current.querySelectorAll('a[href^=\"/\"]');\r\n internalLinks.forEach((link) => {\r\n // the component can be updated multiple times during its lifespan,\r\n // and we don't want to bind the same event handler several times so unbind first\r\n link.removeEventListener('click', routeHandler, false);\r\n link.addEventListener('click', routeHandler, false);\r\n });\r\n }\r\n },[pathname]);\r\n\r\n useEffect(() => {\r\n if (!richTextRef.current) return;\r\n\r\n const hasText = props.field && props.field.value;\r\n const isEditing = props.editable && props.field.editable;\r\n\r\n if(hasText && !isEditing) {\r\n handleAnchorOffset(richTextRef.current, history);\r\n //trigger anchor offset on popstate event\r\n window.addEventListener('popstate', handleAnchorOffsetUrlHash);\r\n //offset anchor on first load.\r\n handleAnchorOffsetUrlHash();\r\n //remove popstate event on dispose \r\n return () => window.removeEventListener('popstate', handleAnchorOffsetUrlHash);\r\n }\r\n },[pathname]);\r\n\r\n \r\n useEffect(() => {\r\n if (!richTextRef.current) return;\r\n const hasText = props.field && props.field.value;\r\n const isEditing = props.editable && props.field.editable;\r\n \r\n if (hasText && !isEditing) {\r\n // selects all links that start with '/' - this logic may be inappropriate for some advanced uses\r\n const images = richTextRef.current.querySelectorAll('img[src*=\"-/media/\"]');\r\n \r\n images.forEach((image) => {\r\n image.src = mediaApi.updateImageUrl(image.src);\r\n });\r\n }\r\n });\r\n\r\n // strip the 'staticContext' prop from withRouter() \r\n // to avoid confusing React before we pass it down\r\n const { className, ...newProps } = props;\r\n\r\n return
\r\n \r\n
;\r\n};\r\n\r\n//RoutableRichText = withRouter(RoutableRichText);\r\n\r\nexport { RoutableRichText };"],"sourceRoot":""}