{"version":3,"file":"flashcardPreviewForCategories-41e63c76.js","sources":["../../../app/frontend/entrypoints/flashcardPreviewForCategories.js"],"sourcesContent":["// JavaScript for collection print previews\n// Handle both picture only and picture flashcards on the same page\n\n// Constants\n\nconst MAX_PAGES_FOR_PRINTING = 35;\nconst MAX_FLASHCARDS_FOR_PRINTING = 150;\n\n// Helpers\n\nfunction addClassToElements(className, elements) {\n for (let i = 0; i < elements.length; i++) {\n elements[i].classList.add(className);\n }\n}\n\nfunction removeClassFromElements(className, elements) {\n for (let i = 0; i < elements.length; i++) {\n elements[i].classList.remove(className);\n }\n}\n\nconst initialize = (flashcardType) => {\n // Prevent multiple PDFs at the same time\n const printForm = document.getElementById(\n `${flashcardType}-flashcards-print-form`\n );\n printForm.addEventListener('submit', (e) => disableButtonTemporarily(e));\n\n function disableButtonTemporarily(e) {\n if (e.submitter.id === `${flashcardType}-flashcards-pdf-button`) {\n const pdfButton = document.getElementById(\n `${flashcardType}-flashcards-pdf-button`\n );\n\n pdfButton.disabled = true;\n document.getElementById(\n `${flashcardType}-download-message`\n ).style.display = 'block';\n\n window.setTimeout(function () {\n pdfButton.disabled = false;\n }, 4000);\n }\n }\n // End prevent multiple PDFs at the same time\n\n // Characters\n const defaultRadio = document.getElementById('characters_default');\n if (defaultRadio) {\n defaultRadio.addEventListener('change', (e) => changeToDefault());\n }\n\n const readingRadio = document.getElementById('characters_reading');\n if (readingRadio) {\n readingRadio.addEventListener('change', (e) => changeToReading());\n }\n\n const container = document.getElementById('preview-flashcards-container');\n\n function changeToDefault() {\n container.classList.remove('show-reading-text');\n }\n\n function changeToReading() {\n container.classList.add('show-reading-text');\n }\n //\n\n // Border color preview\n const flashcards = document.querySelectorAll(\n `[data-${flashcardType}-flashcard]`\n );\n\n const borderDropdown = document.getElementById(\n `${flashcardType}-border-color`\n );\n\n if (borderDropdown) {\n borderDropdown.addEventListener('change', (e) => {\n removeClassFromElements('border-red', flashcards);\n removeClassFromElements('border-blue', flashcards);\n removeClassFromElements('border-green', flashcards);\n removeClassFromElements('border-purple', flashcards);\n addClassToElements(`border-${e.target.value}`, flashcards);\n });\n }\n // End Border color preview\n\n // Font change handling\n if (flashcardType === 'vocabulary') {\n const changeFontsToBold = () => {\n removeClassFromElements('flashcard-font-handwritten', flashcardTexts);\n addClassToElements('flashcard-font-bold', flashcardTexts);\n };\n\n const changeFontsToHandwritten = () => {\n removeClassFromElements('flashcard-font-bold', flashcardTexts);\n addClassToElements('flashcard-font-handwritten', flashcardTexts);\n };\n\n const flashcardTexts = document.getElementsByClassName('flashcard-text');\n const boldFontRadio = document.getElementById('flashcard_font_regular');\n const handwrittenFontRadio = document.getElementById(\n 'flashcard_font_handwritten'\n );\n\n if (boldFontRadio) {\n boldFontRadio.addEventListener('change', (e) => changeFontsToBold());\n }\n if (handwrittenFontRadio) {\n handwrittenFontRadio.addEventListener('change', (e) =>\n changeFontsToHandwritten()\n );\n }\n }\n // End font change handling\n\n //\n // Hide PDF Button when there are too many pages\n //\n\n const previewFlashcardSelector = `[data-${flashcardType}-flashcard]`;\n\n const pdfButton = document.getElementById(\n `${flashcardType}-flashcards-pdf-button`\n );\n const pdfMessage = document.getElementById(\n `${flashcardType}-flashcards-pdf-too-many-message`\n );\n\n const flashcardSizeInputs = document.querySelectorAll(\n 'input[name=\"flashcard_size\"]'\n );\n\n const getFlashcardCount = () => {\n let count = 0;\n const visibleFlashcard = document.querySelectorAll(\n previewFlashcardSelector\n );\n\n visibleFlashcard.forEach((f) => {\n if (f.style.display !== 'none') {\n count++;\n }\n });\n\n return count;\n };\n\n const selectedFlashcardSize = () => {\n return printForm.querySelector('input[name=\"flashcard_size\"]:checked')\n .value;\n };\n\n const flashcardsPerPage = () => {\n if (selectedFlashcardSize() === 'large') {\n return 1;\n } else if (selectedFlashcardSize() === 'medium') {\n return 4;\n } else {\n return 9;\n }\n };\n\n const printPageCount = () => {\n return Math.ceil(getFlashcardCount() / flashcardsPerPage());\n };\n\n const updatePdfButton = () => {\n if (\n printPageCount() <= MAX_PAGES_FOR_PRINTING &&\n getFlashcardCount() <= MAX_FLASHCARDS_FOR_PRINTING\n ) {\n // enable PDFs\n pdfButton.style.display = 'block';\n pdfMessage.style.display = 'none';\n } else {\n // prevent PDFs\n pdfButton.style.display = 'none';\n pdfMessage.style.display = 'block';\n }\n };\n\n // Update showing PDF button on flashcard size change\n if (flashcardSizeInputs) {\n flashcardSizeInputs.forEach((input) => {\n input.addEventListener('change', (e) => {\n updatePdfButton();\n });\n });\n }\n\n // Set PDF button visibility on page load\n updatePdfButton();\n\n //\n // Printing collections on category pages\n // Used for both flashcards and printable emoji\n //\n\n // Get the current URL\n const url = new URL(window.location.href);\n const collectionIdQueryParam = url.searchParams.get('collection_id');\n const collectionDropdown = document.getElementById(\n `${flashcardType}-collection-id`\n );\n\n if (collectionIdQueryParam) {\n updateFlashcardsForCollection(collectionIdQueryParam);\n collectionDropdown.value = collectionIdQueryParam;\n }\n\n if (collectionDropdown) {\n collectionDropdown.addEventListener('change', (e) => {\n const collectionId = e.target.value;\n updateFlashcardsForCollection(collectionId);\n });\n }\n\n function updateFlashcardsForCollection(collectionId) {\n // Filter preview to only show the collection flashcards\n const flashcards = document.querySelectorAll(\n `[data-${flashcardType}-flashcard]`\n );\n\n flashcards.forEach((f) => {\n const collectionIds = f.dataset.collectionIds.split(',');\n if (!collectionId || collectionIds.includes(collectionId)) {\n f.style.display = 'inline-block';\n } else {\n f.style.display = 'none';\n }\n });\n\n const flashcardCount = getFlashcardCount();\n\n // Update flashcard count\n const previewTitle = document.getElementById(\n `${flashcardType}-preview-title`\n );\n\n // Replace flashcard count in UI\n previewTitle.innerHTML = previewTitle.innerHTML.replace(\n /\\d+/,\n flashcardCount\n );\n\n updatePdfButton();\n\n const params = new URLSearchParams(window.location.search);\n if (collectionId) {\n params.set('collection_id', collectionId);\n window.history.replaceState(\n {},\n '',\n `${window.location.pathname}?${params}`\n );\n } else {\n params.delete('collection_id');\n window.history.replaceState({}, '', window.location.pathname);\n }\n }\n};\n\nconst pictureOnlyPrintForm = document.getElementById(\n 'picture-only-flashcards-print-form'\n);\n\nif (pictureOnlyPrintForm) {\n initialize('picture-only');\n}\n\nconst vocabularyFlashcardsPrintForm = document.getElementById(\n 'vocabulary-flashcards-print-form'\n);\n\nif (vocabularyFlashcardsPrintForm) {\n initialize('vocabulary');\n}\n\n// Handle non independent collection cards\nconst nonIndependentCollections = document.querySelectorAll(\n '[data-clickable-collection]'\n);\n\nif (nonIndependentCollections && nonIndependentCollections.length > 0) {\n nonIndependentCollections.forEach((collection) => {\n collection.addEventListener('click', (e) => {\n const collectionId = e.currentTarget.dataset.collectionId;\n const currentUrl = window.location.href;\n const urlWithoutParams = currentUrl.split('?')[0];\n\n window.location.href = `${urlWithoutParams}?collection_id=${collectionId}`;\n });\n });\n}\n"],"names":["addClassToElements","className","elements","i","removeClassFromElements","initialize","flashcardType","printForm","disableButtonTemporarily","pdfButton","defaultRadio","changeToDefault","readingRadio","changeToReading","container","flashcards","borderDropdown","changeFontsToBold","flashcardTexts","changeFontsToHandwritten","boldFontRadio","handwrittenFontRadio","e","previewFlashcardSelector","pdfMessage","flashcardSizeInputs","getFlashcardCount","count","f","selectedFlashcardSize","flashcardsPerPage","printPageCount","updatePdfButton","input","collectionIdQueryParam","collectionDropdown","updateFlashcardsForCollection","collectionId","collectionIds","flashcardCount","previewTitle","params","pictureOnlyPrintForm","vocabularyFlashcardsPrintForm","nonIndependentCollections","collection","urlWithoutParams"],"mappings":"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"}