{ "version": 3, "sources": ["../../../src/js/modules/clipboard.js", "../../../src/js/modules/search.js", "../../../src/js/script.js"], "sourcesContent": ["/**\n * Add a \"Copy Code\" button to each code element to automatically\n * copy the respective code in the clipboard of the client.\n */\nconst clipboard = {\n buttonLabel: 'Copy Code',\n buttonCopiedLabel: 'Code Copied',\n buttonErrorLabel: 'Error',\n init: (blocks) => {\n for (let i = 0; i < blocks.length; i += 1) {\n const button = document.createElement('button');\n button.setAttribute('class', 'clipboard-button');\n button.innerText = clipboard.buttonLabel;\n blocks[i].prepend(button);\n button.addEventListener('click', async () => {\n await clipboard\n .copyCode(blocks[i])\n .then((result) => {\n if (result === true) {\n button.innerText = clipboard.buttonCopiedLabel;\n } else {\n button.innerText = clipboard.buttonErrorLabel;\n }\n setTimeout(() => {\n button.innerText = clipboard.buttonLabel;\n }, 1500);\n })\n .catch((err) => {\n /* eslint-disable-next-line no-console */\n console.error(err);\n });\n });\n }\n },\n copyCode: async (block) => {\n const code = block.querySelector('code');\n if (code === null) {\n return false;\n }\n try {\n const codeClone = code.cloneNode(true);\n // Remove potential prefixes (+ or -) from diff-languages\n const prefixNodes = codeClone.querySelectorAll('.prefix');\n for (let i = 0; i < prefixNodes.length; i += 1) {\n prefixNodes[i].remove();\n }\n const text = codeClone.innerText;\n await navigator.clipboard.writeText(text);\n return true;\n } catch (err) {\n /* eslint-disable-next-line no-console */\n console.error(err);\n return false;\n }\n },\n};\n\nexport default clipboard;\n", "const search = {\n pagefindLibrary: null,\n pagefindPath: '/pagefind/pagefind.js',\n form: null,\n input: null,\n results: null,\n resultsCount: null,\n resultsList: null,\n addResult: (result) => {\n const resultListItem = document.createElement('li');\n resultListItem.innerHTML = `
\n ${result.meta.title}\n

${result.excerpt}

\n
`;\n search.resultsList.append(resultListItem);\n },\n clearResults: () => {\n search.resultsCount.innerHTML = 'Results';\n search.resultsList.innerHTML = '';\n },\n getPagefindLibrary: async () => {\n if (search.pagefindLibrary === null) {\n await search.initPagefindLibrary();\n }\n return search.pagefindLibrary;\n },\n init: (searchForm) => {\n search.form = searchForm;\n search.form.addEventListener('submit', (event) => {\n event.preventDefault();\n });\n search.input = document.getElementById('js-search-input');\n search.initInput();\n },\n initInput: () => {\n if (search.input === null) {\n return;\n }\n\n search.results = document.getElementById('js-search-results');\n search.resultsCount = document.getElementById('js-search-results-count');\n search.resultsList = document.getElementById('js-search-results-list');\n // Initiliaze the Pagefind components on focus, so they are\n // ready once the user starts typing.\n search.input.addEventListener('focus', search.initPagefindLibrary);\n search.input.addEventListener('input', search.onInput);\n },\n initPagefindLibrary: async () => {\n if (search.pagefindLibrary === null) {\n search.pagefindLibrary = await import(search.pagefindPath);\n await search.pagefindLibrary.options({\n basePath: '/pagefind/',\n });\n search.pagefindLibrary.init();\n /* eslint-disable-next-line no-console */\n console.log('Pagefind Search Initiated');\n }\n },\n onInput: async (event) => {\n const pagefind = await search.getPagefindLibrary();\n const inputValue = event.target.value;\n\n if (inputValue.length > 2) {\n search.results.classList.remove('hidden');\n // Pagefind's debounced search preloads results as the user is typing,\n // while also waiting for a short momenbt before sending the query\n // after the user stopped typing (prevents unnecessary queries and\n // potential UI flickering).\n const query = await pagefind.debouncedSearch(inputValue);\n if (query === null) {\n // pagefind.debouncedSearch returns null if a subsequent\n // debouncedSearch call has been made within 300 ms.\n return;\n }\n\n // Pagefind returns all results as promises, which we await\n // together with `Promise.all`, then get the first 10 via `slice`.\n const results = await Promise.all(\n query.results.slice(0, 10).map((result) => result.data()),\n );\n\n search.clearResults();\n for (let i = 0; i < results.length; i += 1) {\n search.addResult(results[i]);\n }\n\n /* eslint-disable-next-line operator-linebreak */\n search.resultsCount.innerHTML =\n results.length !== 1 ? `${results.length} results` : '1 result';\n search.resultsCount.innerHTML += ` for \"${inputValue}\"`;\n } else {\n search.results.classList.add('hidden');\n search.clearResults();\n }\n },\n};\n\nexport default search;\n", "import clipboard from './modules/clipboard';\nimport search from './modules/search';\n\nfunction initPage() {\n const searchForm = document.querySelector('#js-search-form');\n if (searchForm !== null) {\n search.init(searchForm);\n }\n\n const blocks = document.querySelectorAll('pre[class^=\"language-\"]');\n if (blocks !== null) {\n clipboard.init(blocks);\n // document.addEventListener('click', (e) => {\n // if (e.target.closest('button.clipboard-button')) {\n // clipboard.copyCode(e.target)\n // }\n // })\n }\n}\n\n// 'DOMContentLoaded' may fire before your script has a chance to run,\n// so it is wise to check before adding a listener.\n// https://developer.mozilla.org/en-US/docs/Web/API/Document/DOMContentLoaded_event\nif (document.readyState === 'loading') {\n document.addEventListener('DOMContentLoaded', initPage);\n} else {\n // 'DOMContentLoaded' has already fired.\n initPage();\n}\n"], "mappings": "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", "names": ["clipboard", "blocks", "i", "button", "result", "err", "block", "code", "codeClone", "prefixNodes", "text", "clipboard_default", "search", "result", "resultListItem", "searchForm", "event", "pagefind", "inputValue", "query", "results", "i", "search_default", "initPage", "searchForm", "search_default", "blocks", "clipboard_default"] }