{"version":3,"file":"flashcardPreview-f71ad592.js","sources":["../../../app/frontend/entrypoints/flashcardPreview.js"],"sourcesContent":["// JavaScript for print preview pages\n\n// Prevent multiple PDF creations\nvar printForm = document.getElementById('printForm');\nprintForm.addEventListener('submit', (e) => disableButtonTemporarily(e));\n\nfunction disableButtonTemporarily(e) {\n if (e.submitter.id === 'pdfButton') {\n var btn = document.getElementById('pdfButton');\n btn.disabled = true;\n document.getElementById('download-message').style.display = 'block';\n\n window.setTimeout(function () {\n btn.disabled = false;\n }, 4000);\n }\n}\n// End prevent multiple PDF creations\n\n// Characters\nvar defaultRadio = document.getElementById('characters_default');\nif (defaultRadio) {\n defaultRadio.addEventListener('change', (e) => changeToDefault());\n}\n\nvar readingRadio = document.getElementById('characters_reading');\nif (readingRadio) {\n readingRadio.addEventListener('change', (e) => changeToReading());\n}\n\nconst container = document.getElementById('preview-flashcards-container');\n\nfunction changeToDefault() {\n container.classList.remove('show-reading-text');\n}\n\nfunction changeToReading() {\n container.classList.add('show-reading-text');\n}\n//\n\n// Font change handling\nvar flashcardTexts = document.getElementsByClassName('flashcard-text');\n\nvar boldFontRadio = document.getElementById('flashcard_font_regular');\nif (boldFontRadio) {\n boldFontRadio.addEventListener('change', (e) => changeFontsToBold());\n}\n\nvar handwrittenFontRadio = document.getElementById(\n 'flashcard_font_handwritten'\n);\nif (handwrittenFontRadio) {\n handwrittenFontRadio.addEventListener('change', (e) =>\n changeFontsToHandwritten()\n );\n}\n\nfunction addClassToElements(className, elements) {\n for (var i = 0; i < elements.length; i++) {\n elements[i].classList.add(className);\n }\n}\n\nfunction removeClassFromElements(className, elements) {\n for (var i = 0; i < elements.length; i++) {\n elements[i].classList.remove(className);\n }\n}\n\nfunction changeFontsToBold() {\n removeClassFromElements('flashcard-font-handwritten', flashcardTexts);\n addClassToElements('flashcard-font-bold', flashcardTexts);\n}\n\nfunction changeFontsToHandwritten() {\n removeClassFromElements('flashcard-font-bold', flashcardTexts);\n addClassToElements('flashcard-font-handwritten', flashcardTexts);\n}\n// End font change handling\n\n// Border color preview\n\nvar flashcards = document.getElementsByClassName('flashcard');\n\nvar borderDropdown = document.getElementById('border_color');\n\nif (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\n//\n// PDF Button hiding\n//\nconst pdfButton = document.getElementById('pdfButton');\nconst pdfMessage = document.getElementById('pdf-too-many-message');\n\nconst MAX_PAGES_FOR_PRINTING = 35;\nconst MAX_FLASHCARDS_FOR_PRINTING = 150;\n\nconst initialFlashcards = document.querySelectorAll('[data-preview-flashcard]');\n\nconst flashcardSizeInputs = document.querySelectorAll(\n 'input[name=\"flashcard_size\"]'\n);\nconst isFlashcardsPage = flashcardSizeInputs.length > 0;\n\nconst getFlashcardCount = () => {\n let count = 0;\n const allFlashcards = document.querySelectorAll('[data-preview-flashcard]');\n\n allFlashcards.forEach((f) => {\n if (f.style.display !== 'none') {\n count++;\n }\n });\n\n return count;\n};\n\nconst selectedFlashcardSize = () => {\n return document.querySelector('input[name=\"flashcard_size\"]:checked').value;\n};\n\nconst flashcardsPerPage = () => {\n if (selectedFlashcardSize() === 'large') {\n return 1;\n } else if (selectedFlashcardSize() === 'medium') {\n return 4;\n } else {\n return 9;\n }\n};\n\nconst selectedEmojiSize = () => {\n return document.querySelector('input[name=\"emoji_size\"]:checked').value;\n};\n\nconst emojiPerPage = () => {\n if (selectedEmojiSize() === 'maximum') {\n return 1;\n } else if (selectedEmojiSize() === 'large') {\n return 2;\n } else if (selectedEmojiSize() === 'medium') {\n return 6;\n } else if (selectedEmojiSize() === 'small') {\n return 12;\n } else {\n return 42;\n }\n};\n\nconst printPageCount = () => {\n if (isFlashcardsPage) {\n return Math.ceil(getFlashcardCount() / flashcardsPerPage());\n } else {\n // Printable emoji page\n return Math.ceil(getFlashcardCount() / emojiPerPage());\n }\n};\n\nconst 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\nupdatePdfButton();\n\nif (flashcardSizeInputs) {\n flashcardSizeInputs.forEach((input) => {\n input.addEventListener('change', (e) => {\n updatePdfButton();\n });\n });\n}\n\n// querySelectorAll returns an empty NodeList when none are present so\n// is fine for all pages\nconst emojiSizeInputs = document.querySelectorAll('input[name=\"emoji_size\"]');\n\nemojiSizeInputs.forEach((input) => {\n input.addEventListener('change', (e) => {\n updatePdfButton();\n });\n});\n\n//\n// Printing collections on category pages\n// Used for both flashcards and printable emoji\n//\n\n// Get the current URL\nconst url = new URL(window.location.href);\nconst collectionIdQueryParam = url.searchParams.get('collection_id');\nconst collectionDropdown = document.getElementById('collection_id');\n\nif (collectionIdQueryParam) {\n updateFlashcardsForCollection(collectionIdQueryParam);\n collectionDropdown.value = collectionIdQueryParam;\n}\n\nif (collectionDropdown) {\n collectionDropdown.addEventListener('change', (e) => {\n const collectionId = e.target.value;\n updateFlashcardsForCollection(collectionId);\n });\n}\n\nfunction updateFlashcardsForCollection(collectionId) {\n // Filter preview to only show the collection flashcards\n const flashcards = document.querySelectorAll('[data-preview-flashcard]');\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('preview-title');\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// 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":["printForm","disableButtonTemporarily","btn","defaultRadio","changeToDefault","readingRadio","changeToReading","container","flashcardTexts","boldFontRadio","changeFontsToBold","handwrittenFontRadio","changeFontsToHandwritten","addClassToElements","className","elements","i","removeClassFromElements","flashcards","borderDropdown","pdfButton","pdfMessage","MAX_PAGES_FOR_PRINTING","MAX_FLASHCARDS_FOR_PRINTING","flashcardSizeInputs","isFlashcardsPage","getFlashcardCount","count","f","selectedFlashcardSize","flashcardsPerPage","selectedEmojiSize","emojiPerPage","printPageCount","updatePdfButton","input","e","emojiSizeInputs","url","collectionIdQueryParam","collectionDropdown","updateFlashcardsForCollection","collectionId","collectionIds","flashcardCount","previewTitle","params","nonIndependentCollections","collection","urlWithoutParams"],"mappings":"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"}