{"version":3,"file":"main.js","sources":["../../src/js/main.js"],"sourcesContent":["// Quiz Module\nlet QuizModule = (function ($) {\n let selectors = {\n steps: '.step',\n prevStepBtn: '.prev-step',\n nextStepBtn: '.next-step',\n closeStepBtn: '.step-buttons-close',\n stepCounter: '.step-counter',\n quizSubheader: '.quiz-header p',\n quizOverlay: '#quiz-overlay',\n openQuiz: '#open-quiz',\n closeQuiz: '#close-quiz',\n selectedIconsDisplay: '#selected-icons-display',\n filterButtons: '.category-filter-button',\n hiddenFieldSymptombild: `textarea[name=\"${getHiddenFieldName(\n 'symptombild'\n )}\"]`,\n hiddenFieldSelectedSymptoms: `textarea[name=\"${getHiddenFieldName(\n 'selectedSymptoms'\n )}\"]`,\n };\n\n let elements = {};\n\n let constants = {\n MODAL_SUBHEADER: {\n 1: 'Svara på frågorna nedan för att ge oss en grundförståelse på vem du är.',\n 6: 'Klicka i de symptom du har besvär med.',\n 8: 'Antagen symptombild.',\n },\n MAX_ICON_SELECTION: 20,\n CONTRACEPTIVE_USE_CLAUSES_TEXT:\n 'I de första stegen svarade du att du idag använder preventivmedel av något slag. Preventivmedel påverkar vår kropp på olika sätt, vilket kan leda till att man upplever mer eller mindre av vissa symptom.',\n HAS_FAMILY_HISTORY_CLAUSES_TEXT:\n 'I de första stegen svarade du att du eller någon i din närmsta familj (mamma, pappa, syskon) har någon sjukdomshistoria av blodpropp, diabetes, hjärt- och kärlsjukdom, koagulationsrubbning och/eller bröstcancer innan du/dom var 50 år. Detta kan påverka din symptombild vilket innebär att du bör råda med sjukvård innan du vidtar andra åtgärder eller rekommendationer.',\n IMAGE_IDS: {\n VULVACANCER: 1162,\n LIVMODERCANCER: 1158,\n NO_MATCHING_RESULT: 1235,\n },\n STEP_NAMES: {\n AGE: 'age',\n AGE_GROUP: 'ageGroup',\n CONTRACEPTIVE_USE: 'contraceptiveUse',\n FAMILY_HISTORY: 'familyHistory',\n OTHER_ILLNESSES: 'otherIllnesses',\n SYMPTOMS_SELECTION: 'symptomsSelection',\n CONTROL_QUESTIONS: 'controlQuestions',\n RESULT: 'result',\n },\n STEP_INDEX_TO_NAME: {\n 0: 'age',\n 1: 'ageGroup',\n 2: 'contraceptiveUse',\n 3: 'familyHistory',\n 4: 'otherIllnesses',\n 5: 'symptomsSelection',\n 6: 'controlQuestions',\n 7: 'result',\n },\n };\n\n let quizState = {\n currentStepIndex: 0,\n responseData: null,\n wentThroughControlQuestions: false,\n displayedTotalStep: 0,\n selectedCategory: 'all',\n };\n\n let formValues = {\n hasFamilyMedicalHistory: false,\n contraceptiveUse: false,\n contraceptiveUseInput: false,\n otherIllnesses: false,\n otherIllnessesInput: null,\n selectedAgeGroup: 'tonaring',\n userAge: null,\n selectedIcons: [],\n controlQuestionAnswers: {},\n };\n\n const QuizNavigation = {\n moveToNextStep: async function () {\n const currentStepName =\n constants.STEP_INDEX_TO_NAME[quizState.currentStepIndex];\n\n if (\n currentStepName === constants.STEP_NAMES.SYMPTOMS_SELECTION &&\n elements.selectedIconsDisplay.find('.selected-icon').length === 0\n ) {\n alert('Please select at least one icon.');\n return;\n }\n\n if (currentStepName === constants.STEP_NAMES.SYMPTOMS_SELECTION) {\n let selectedSymptoms = $('#selected-icons-display .selected-icon')\n .map(function () {\n return $(this).data('id');\n })\n .get();\n\n try {\n await fetchMatchingImages(selectedSymptoms);\n } catch (error) {\n console.error('Fetching images failed: ', error);\n return;\n }\n }\n\n if (currentStepName === constants.STEP_NAMES.CONTROL_QUESTIONS) {\n hideImagesBasedOnControlQuestionsAndAmountOfSelectedIcons();\n populateHiddenFields();\n }\n\n if (quizState.currentStepIndex < constants.TOTAL_STEPS - 1) {\n quizState.currentStepIndex++;\n // scrollToTopOfQuiz();\n updateQuizUI();\n }\n },\n moveToPreviousStep: function () {\n const currentStepName =\n constants.STEP_INDEX_TO_NAME[quizState.currentStepIndex];\n if (currentStepName === constants.STEP_NAMES.CONTROL_QUESTIONS) {\n quizState.displayedTotalStep = 7;\n }\n if (\n !quizState.wentThroughControlQuestions &&\n quizState.currentStepIndex === constants.TOTAL_STEPS - 1\n ) {\n quizState.currentStepIndex -= 2;\n } else {\n quizState.currentStepIndex--;\n }\n // scrollToTopOfQuiz();\n updateQuizUI();\n },\n };\n\n function initSelectors() {\n $.each(selectors, function (key, selector) {\n elements[key] = $(selector);\n });\n\n constants.TOTAL_STEPS = elements.steps.length;\n quizState.displayedTotalStep = constants.TOTAL_STEPS - 1;\n }\n\n function bindEventHandlers() {\n elements.openQuiz.on('click', function (e) {\n handleOpenQuizModal(e);\n });\n\n elements.closeQuiz.on('click', function (e) {\n handleCloseQuizModal(e);\n });\n\n elements.closeStepBtn.on('click', function (e) {\n handleCloseQuizModal(e);\n });\n\n elements.nextStepBtn.on('click', function (e) {\n handleNextStepClick(e);\n });\n\n elements.prevStepBtn.on('click', function (e) {\n handlePrevStepClick(e);\n });\n\n $('#multistep-form')\n .on('change', 'input[name=\"ageGroupSelection\"]', function () {\n updateFormValue('selectedAgeGroup', $(this).val());\n })\n .on('change', 'input[name=\"familyMedicalHistory\"]', function () {\n updateFormValue('hasFamilyMedicalHistory', $(this).val() === 'ja');\n })\n .on('change', 'input[name=\"contraceptiveUse\"]', function () {\n updateFormValue('contraceptiveUse', $(this).val() === 'ja');\n $('#contraceptiveUse-input').toggle($(this).val() === 'ja');\n })\n .on('change', 'input[name=\"otherIllnesses\"]', function () {\n updateFormValue('otherIllnesses', $(this).val() === 'ja');\n $('#otherIllnesses-input').toggle($(this).val() === 'ja');\n })\n .on('input', 'input[name=\"userAge\"]', function () {\n updateFormValue('userAge', $(this).val());\n });\n\n // Input events for detailed inputs\n $('#contraceptiveUse-input').on('input', 'input', function () {\n updateFormValue('contraceptiveUseInput', $(this).val());\n });\n\n $('#otherIllnesses-input').on('input', 'input', function () {\n updateFormValue('otherIllnessesInput', $(this).val());\n });\n\n // Click events for quiz icon selection and category filters\n $('#symptoms-grid').on('click', '.quiz-icon', function (e) {\n handleIconGridClick(e, $(this));\n });\n\n $('#category-filter-buttons').on(\n 'click',\n '.category-filter-button',\n function (event) {\n handleFilterButtonClick.call(this, event);\n }\n );\n\n // Click event for selected icons\n elements.selectedIconsDisplay.on('click', '.selected-icon', (e) =>\n handleSelectedIconClick(e)\n );\n }\n\n function configureFormEvents(elements) {\n jQuery(document).on('gform_confirmation_loaded', function (event, formId) {\n if (formId === 3) {\n elements.prevStepBtn.hide();\n elements.nextStepBtn.hide();\n elements.closeStepBtn.show();\n }\n });\n }\n\n function updateFormValue(key, value) {\n formValues[key] = value;\n }\n\n function getHiddenFieldName(fieldKey) {\n const isLocalEnvironment = window.location.hostname.includes('localhost');\n const fieldNames = {\n symptombild: isLocalEnvironment ? 'input_5' : 'input_4',\n selectedSymptoms: isLocalEnvironment ? 'input_7' : 'input_6',\n };\n\n const fieldName = fieldNames[fieldKey];\n if (!fieldName)\n throw new Error(`Field name for key \"${fieldKey}\" not found.`);\n return fieldName;\n }\n\n function handleOpenQuizModal(e) {\n e.preventDefault();\n elements.quizOverlay.addClass('open');\n $('body').css('overflow', 'hidden');\n resetQuiz();\n }\n\n function handleCloseQuizModal(e) {\n e.preventDefault();\n elements.quizOverlay.removeClass('open');\n $('body').css('overflow', 'auto');\n }\n\n function handleNextStepClick(e) {\n e.preventDefault();\n\n if (quizState.currentStepIndex < constants.TOTAL_STEPS - 1) {\n QuizNavigation.moveToNextStep();\n } else {\n checkAndScrollToFirstEmptyInput();\n $('#gform_submit_button_3').click();\n }\n }\n\n function handlePrevStepClick(e) {\n e.preventDefault();\n QuizNavigation.moveToPreviousStep();\n }\n\n function handleSelectedIconClick(event) {\n event.preventDefault();\n let iconId = $(event.currentTarget).data('id');\n removeIcon(iconId);\n $(event.currentTarget).removeClass('selected');\n updateSelectedIconsDisplay();\n }\n\n function handleIconGridClick(event, target) {\n let iconId = target.data('id');\n let iconName = target.data('name');\n let iconThumbnail = target.find('img').attr('src');\n\n if (formValues.selectedIcons.some((icon) => icon.id === iconId)) {\n removeIcon(iconId);\n target.removeClass('selected');\n } else if (formValues.selectedIcons.length < constants.MAX_ICON_SELECTION) {\n addIcon(iconId, iconName, iconThumbnail);\n target.addClass('selected');\n }\n }\n\n function handleFilterButtonClick(event) {\n event.preventDefault();\n\n const selectedCategory = $(this).data('category');\n\n elements.filterButtons.removeClass('active');\n $(this).addClass('active');\n\n quizState.selectedCategory = selectedCategory;\n applyCategoryFilters(selectedCategory);\n }\n\n function resetQuiz() {\n // Resetting quiz state to initial values\n quizState.currentStepIndex = 0;\n quizState.responseData = null;\n quizState.wentThroughControlQuestions = false;\n quizState.displayedTotalStep = elements.steps.length - 1;\n quizState.selectedCategory = 'all';\n\n // Resetting form values to their default\n formValues.hasFamilyMedicalHistory = false;\n formValues.contraceptiveUse = false;\n formValues.contraceptiveUseInput = false;\n formValues.otherIllnesses = false;\n formValues.otherIllnessesInput = null;\n formValues.selectedAgeGroup = 'tonaring';\n formValues.userAge = null;\n formValues.selectedIcons = [];\n formValues.controlQuestionAnswers = {};\n\n // Additional UI updates\n $(\n 'input[type=\"text\"], input[type=\"email\"], input[type=\"number\"], textarea'\n ).val('');\n $('input[type=\"checkbox\"]').prop('checked', false);\n\n // Reset all radio buttons to unchecked first\n $('input[type=\"radio\"]').prop('checked', false);\n\n // Then, set the first radio button in each group to be checked\n $('input[type=\"radio\"]').each(function () {\n let name = $(this).attr('name');\n $(`input[name=\"${name}\"]:first`).prop('checked', true);\n });\n\n // Hide the extra inputs\n $('#otherIllnesses-input').hide();\n $('#contraceptiveUse-input').hide();\n\n // Reset the flags associated with these inputs\n $('input[name=\"contraceptiveUse\"][value=\"nej\"]').prop('checked', true);\n $('input[name=\"otherIllnesses\"][value=\"nej\"]').prop('checked', true);\n\n // Reset specific UI elements that were dynamically updated during the quiz\n elements.selectedIconsDisplay.empty();\n\n // Reset selected icons visual state\n $('#symptoms-grid .quiz-icon').removeClass('selected');\n\n // Update category filter buttons UI\n elements.filterButtons.removeClass('active');\n elements.filterButtons.filter('[data-category=\"all\"]').addClass('active');\n\n // Apply 'all' category filter\n applyCategoryFilters('all');\n\n updateQuizUI();\n }\n\n function updateQuizUI() {\n $('.scrollable-content').scrollTop(0);\n\n // Show/hide steps based on the currentStepIndex\n elements.steps.hide();\n elements.steps.eq(quizState.currentStepIndex).show();\n\n // Update step counter UI\n const totalStepsIncludingControl = quizState.wentThroughControlQuestions\n ? constants.TOTAL_STEPS\n : constants.TOTAL_STEPS - 1;\n quizState.displayedTotalStep = totalStepsIncludingControl;\n\n // Adjust the displayed step index\n let displayedStepIndex = quizState.currentStepIndex + 1;\n displayedStepIndex = Math.min(\n displayedStepIndex,\n quizState.displayedTotalStep\n );\n\n if (elements.stepCounter) {\n elements.stepCounter.text(\n `${displayedStepIndex} / ${quizState.displayedTotalStep}`\n );\n }\n\n const currentStepName =\n constants.STEP_INDEX_TO_NAME[quizState.currentStepIndex];\n\n if (currentStepName === constants.STEP_NAMES.SYMPTOMS_SELECTION) {\n applyCategoryFilters(quizState.selectedCategory);\n }\n\n if (\n currentStepName === constants.STEP_NAMES.SYMPTOMS_SELECTION ||\n currentStepName === constants.STEP_NAMES.RESULT\n ) {\n elements.quizOverlay.find('.quiz-inner').addClass('quiz-modal-expanded');\n } else {\n elements.quizOverlay\n .find('.quiz-inner')\n .removeClass('quiz-modal-expanded');\n }\n\n // Update modal subheader based on the current step, if applicable\n if (\n elements.quizSubheader &&\n constants.MODAL_SUBHEADER[quizState.currentStepIndex + 1]\n ) {\n elements.quizSubheader.text(\n constants.MODAL_SUBHEADER[quizState.currentStepIndex + 1]\n );\n }\n\n // Update navigation buttons\n elements.prevStepBtn.toggle(quizState.currentStepIndex > 0);\n elements.nextStepBtn.text(\n quizState.currentStepIndex === constants.TOTAL_STEPS - 1\n ? 'Skicka'\n : 'Nästa'\n );\n }\n\n function prepareControlQuestions() {\n let uniqueControlQuestions = getUniqueControlQuestions(\n quizState.responseData\n );\n\n let controlQuestionHtml = uniqueControlQuestions\n .map((question, index) => createControlQuestionHtml(question, index))\n .join('');\n\n $('#control-question-step .control-question-content').html(\n controlQuestionHtml\n );\n\n attachControlQuestionListeners(uniqueControlQuestions);\n\n $('#control-question-step').show();\n\n createHtmlForMatchingImages();\n }\n\n function createControlQuestionHtml(question, index) {\n if (!question.question) return '';\n\n const yesNoInputs = createYesNoInputs(index);\n const extraFeedback = question.extraFeedback\n ? createControlQuestionFeedback(question)\n : '';\n\n return `\n
\n \n ${yesNoInputs}\n ${extraFeedback}\n
`;\n }\n\n function createHtmlForMatchingImages() {\n const postsHtml = quizState.responseData\n .map((image) => {\n const sortedAndMarkedIcons = formValues.selectedIcons\n .map((icon) => ({\n ...icon,\n isMatched: image.matched_symptoms.includes(icon.id.toString()),\n }))\n .sort((a, b) => b.isMatched - a.isMatched);\n\n const iconsHtml = sortedAndMarkedIcons\n .map((icon) => {\n const iconClass = icon.isMatched\n ? 'result-selected-icons matching-symptom'\n : 'result-selected-icons';\n return `\"${icon.name}\"`;\n })\n .join('');\n\n const isFallbackImage =\n image.id === constants.IMAGE_ID_NO_MATCHING_RESULT;\n return `\n
\n
\n
\n

${image.title}

\n
${iconsHtml}
\n
\n
${image.excerpt}
\n ${\n !isFallbackImage\n ? `Klicka här för att läsa mer`\n : ''\n }\n
\n ${\n !isFallbackImage && image.featured_image_url\n ? `
\"${image.title}\"
`\n : ''\n }\n
\n `;\n })\n .join('');\n\n $('#symptomAnalysisResults').html(postsHtml);\n }\n\n function attachControlQuestionListeners(uniqueControlQuestions) {\n uniqueControlQuestions.forEach((question, index) => {\n $(`input[name=\"control-question-${index}\"]`).change(function () {\n const response = $(this).val();\n question.imageIds.forEach((imageId) => {\n if (\n Object.prototype.hasOwnProperty.call(\n formValues.controlQuestionAnswers,\n imageId\n )\n ) {\n formValues.controlQuestionAnswers[imageId].answer = response;\n }\n $(`#extra-feedback-${imageId}`).toggle(response === 'ja');\n });\n });\n });\n }\n\n function createYesNoInputs(index) {\n return `\n
\n \n \n
\n
\n \n \n
`;\n }\n\n function createControlQuestionFeedback(question) {\n return question.imageIds\n .map(\n (imageId) =>\n `
${question.extraFeedback}
`\n )\n .join('');\n }\n\n function fetchMatchingImages(selectedSymptoms) {\n updateStepButtonsDisabledState(true);\n return new Promise((resolve, reject) => {\n /* global ajax_object */\n $.ajax({\n url: ajax_object.ajaxurl,\n type: 'POST',\n data: {\n action: 'find_matching_images',\n symptoms: selectedSymptoms,\n },\n success: function (response) {\n handleImageMatchingResponse(response);\n updateStepButtonsDisabledState(false);\n resolve(response);\n },\n error: function (error) {\n console.error('Error:', error);\n alert('An error occurred while fetching images.');\n updateStepButtonsDisabledState(false);\n reject(error);\n },\n });\n });\n }\n\n function populateHiddenFields() {\n let filteredData = quizState.responseData.filter(\n (image) => !shouldMatchingImageBeHidden(image)\n );\n\n let dataToPopulate = filteredData\n .map((image) => `${image.title}: ${image.excerpt}`)\n .join('\\n--------\\n');\n\n elements.hiddenFieldSymptombild.val(dataToPopulate);\n\n let formattedSymptomsList =\n 'Valda symptom:\\n' +\n formValues.selectedIcons.map((icon) => `- ${icon.name}`).join('\\n');\n\n elements.hiddenFieldSelectedSymptoms.val(formattedSymptomsList);\n }\n\n function shouldMatchingImageBeHidden(image) {\n if (image.id === constants.IMAGE_ID_VULVACANCER) {\n return formValues.selectedIcons.length < image.minimum_icon_selection;\n }\n\n if (\n formValues.controlQuestionAnswers[image.id] &&\n formValues.controlQuestionAnswers[image.id].answer === 'nej'\n ) {\n return true;\n }\n\n if (formValues.selectedIcons.length < image.minimum_icon_selection) {\n return true;\n }\n\n if (\n image.id === constants.IMAGE_ID_LIVMODERCANCER &&\n formValues.hasFamilyMedicalHistory\n ) {\n return true;\n }\n\n return false;\n }\n\n function handleImageMatchingResponse(response) {\n if (!response.success) {\n console.error('Error:', response.data);\n return;\n }\n\n quizState.responseData = response.data;\n const controlQuestions = quizState.responseData\n .filter((image) => image.control_question)\n .map((image) => ({\n imageId: image.id,\n question: image.control_question,\n extraFeedback: image.extra_feedback,\n imageIds: [image.id],\n }));\n\n controlQuestions.forEach((question) => {\n question.imageIds.forEach((imageId) => {\n formValues.controlQuestionAnswers[imageId] = {\n question: question.question,\n answer: 'nej',\n };\n });\n });\n\n if (controlQuestions.length > 0) {\n quizState.wentThroughControlQuestions = true;\n prepareControlQuestions();\n quizState.displayedTotalStep = 8;\n } else {\n quizState.displayedTotalStep = 7;\n quizState.wentThroughControlQuestions = false;\n createHtmlForMatchingImages();\n quizState.currentStepIndex = constants.TOTAL_STEPS - 1;\n populateHiddenFields();\n updateQuizUI();\n }\n\n createAndInsertHtmlForExternalClausesFromPersonalQuestions();\n }\n\n function hideImagesBasedOnControlQuestionsAndAmountOfSelectedIcons() {\n quizState.responseData.forEach(function (image) {\n let shouldHideImage = shouldMatchingImageBeHidden(image);\n\n if (shouldHideImage) {\n $('#image-' + image.id).hide();\n } else {\n $('#image-' + image.id).show();\n }\n });\n }\n\n function createAndInsertHtmlForExternalClausesFromPersonalQuestions() {\n let htmlContent = '';\n\n if (formValues.contraceptiveUse) {\n htmlContent += `\n
\n ${constants.CONTRACEPTIVE_USE_CLAUSES_TEXT}\n
`;\n }\n\n if (formValues.hasFamilyMedicalHistory) {\n htmlContent += `\n
\n ${constants.HAS_FAMILY_HISTORY_CLAUSES_TEXT}\n
`;\n }\n\n $('#externalClausesFromPersonalQuestions').html(htmlContent);\n }\n\n function getUniqueControlQuestions(images) {\n let uniqueQuestions = {};\n images.forEach(function (image) {\n if (image.control_question) {\n if (!uniqueQuestions[image.control_question]) {\n uniqueQuestions[image.control_question] = {\n question: image.control_question,\n imageIds: [image.id],\n extraFeedback: image.extra_feedback,\n };\n } else {\n uniqueQuestions[image.control_question].imageIds.push(image.id);\n }\n }\n });\n return Object.values(uniqueQuestions);\n }\n\n function updateSelectedIconsDisplay() {\n elements.selectedIconsDisplay.empty();\n formValues.selectedIcons.forEach(function (icon) {\n let iconHtml = $(`\n
\n \"${icon.name}\"\n \n \n \n \n \n \n \n \n \n \n \n
\n `);\n\n elements.selectedIconsDisplay.append(iconHtml);\n });\n }\n\n function removeIcon(iconId) {\n formValues.selectedIcons = formValues.selectedIcons.filter(function (icon) {\n return icon.id !== iconId;\n });\n\n $('#symptoms-grid .quiz-icon')\n .filter(function () {\n return $(this).data('id') === iconId;\n })\n .removeClass('selected');\n\n updateSelectedIconsDisplay();\n }\n\n function addIcon(iconId, iconName, iconThumbnail) {\n if (\n formValues.selectedIcons.length < constants.MAX_ICON_SELECTION &&\n !formValues.selectedIcons.some((icon) => icon.id === iconId)\n ) {\n formValues.selectedIcons.push({\n id: iconId,\n name: iconName,\n thumbnail: iconThumbnail,\n });\n }\n updateSelectedIconsDisplay();\n }\n\n function checkAndScrollToFirstEmptyInput() {\n const $gform = $('#gform_3');\n const $scrollableContent = $('.scrollable-content');\n const scrollableContentTopPosition = $scrollableContent.offset().top;\n\n const $firstEmptyInput = $gform\n .find('input[type=\"text\"], input[type=\"email\"], textarea')\n .filter(function () {\n return !$(this).val().trim();\n })\n .first();\n\n const $firstEmptyCheckbox = $gform\n .find('input[type=\"checkbox\"]:not(:checked)')\n .first();\n\n if ($firstEmptyInput.length || $firstEmptyCheckbox.length) {\n const inputOffsetRelativeToScrollable =\n ($firstEmptyInput.length\n ? $firstEmptyInput.offset().top\n : $firstEmptyCheckbox.offset().top) - scrollableContentTopPosition;\n\n const currentScroll = $scrollableContent.scrollTop();\n const newScrollPosition =\n currentScroll + inputOffsetRelativeToScrollable - 100;\n\n $scrollableContent.animate(\n {\n scrollTop: newScrollPosition,\n },\n 500\n );\n\n return true;\n }\n\n return false;\n }\n\n function updateStepButtonsDisabledState(isDisabled) {\n elements.prevStepBtn.prop('disabled', isDisabled);\n elements.nextStepBtn.prop('disabled', isDisabled);\n elements.closeStepBtn.prop('disabled', isDisabled);\n }\n\n function applyCategoryFilters(selectedCategory) {\n $('#symptoms-grid .quiz-icon').each(function () {\n const iconCategories = $(this).data('categories');\n const iconAges = $(this).data('age');\n\n let isAgeMatch = false;\n let isCategoryMatch = false;\n\n if (iconAges.length > 0) {\n isAgeMatch = iconAges.some(\n (age) => age.slug === formValues.selectedAgeGroup\n );\n }\n\n if (selectedCategory === 'all') {\n isCategoryMatch = true;\n } else {\n isCategoryMatch = iconCategories.some(\n (category) => category.slug === selectedCategory\n );\n }\n\n if (isCategoryMatch && isAgeMatch) {\n $(this).show();\n } else {\n $(this).hide();\n }\n });\n }\n\n // Public API\n return {\n init: function () {\n initSelectors();\n configureFormEvents();\n bindEventHandlers();\n console.log('Quiz Module initialized');\n },\n };\n})(jQuery);\n\n// Non-Quiz Features Module\nlet NonQuizFeaturesModule = (function ($) {\n function initReadMoreFunc() {\n $('.read-more-btn').click(function () {\n let extraInfo = $(this).closest('.product-info').find('.extra-info');\n extraInfo.toggleClass('show');\n\n $(this).text(function (i, text) {\n return text === 'Läs Mer +' ? 'Läs mindre -' : 'Läs Mer +';\n });\n });\n }\n function initScrollReveal() {\n ScrollReveal().reveal('.fade-1', {\n origin: 'bottom',\n easing: 'ease-out',\n duration: 700,\n viewFactor: 0.15,\n });\n }\n\n function initStickyVerticalText() {\n let $verticalText = $('#vertical-text');\n if ($verticalText.length === 0) {\n console.log('Vertical text has been removed, add it later?');\n return;\n }\n let verticalTextOffset, offsetValue;\n\n function updateOffsets() {\n verticalTextOffset = $verticalText.offset().top;\n let emValue = 10;\n let fontSize = parseFloat(\n window.getComputedStyle(document.documentElement).fontSize\n );\n offsetValue = emValue * fontSize;\n }\n\n updateOffsets();\n $(window).resize(updateOffsets);\n\n $(window).scroll(function () {\n if ($(window).scrollTop() > verticalTextOffset - offsetValue) {\n $verticalText.addClass('sticky');\n } else {\n $verticalText.removeClass('sticky');\n }\n });\n }\n\n function initSlickCarousel() {\n $('.slick-post-cards').slick({\n arrows: false,\n speed: 300,\n dots: true,\n adaptiveHeight: true,\n slidesToShow: 3,\n infinite: false,\n slidesToScroll: 3,\n responsive: [\n {\n breakpoint: 1024,\n settings: {\n arrows: false,\n slidesToShow: 2,\n slidesToScroll: 2,\n },\n },\n {\n breakpoint: 768,\n settings: {\n slidesToShow: 1,\n slidesToScroll: 1,\n },\n },\n ],\n });\n }\n\n function addClassToNinjaform() {\n $('.nf-form-cont').addClass(\n 'ninjaform-container inner-text-container-sm py-20'\n );\n }\n\n function initHoverStateTransition() {\n $('.single-image').each(function () {\n let imageFaq = $(this).find('.single-image__faq');\n let imageAnswer = $(this).find('.single-image__answer');\n\n // Mouseover smaller faq block\n imageFaq.mouseover(function () {\n $(this).addClass('hover');\n $(this).siblings().addClass('hover');\n });\n\n // Mouseout of entire image block\n imageAnswer.mouseout(function () {\n if ($(this).hasClass('hover')) {\n $(this).removeClass('hover');\n }\n if ($(this).siblings().hasClass('hover')) {\n $(this).siblings().removeClass('hover');\n }\n });\n });\n }\n\n function bodypartsClickFunction() {\n $('.bodypart').click(function () {\n // Get the target div ID from the data attribute\n let targetDivId = $(this).data('target');\n\n // Hide all content divs\n $('.content').hide();\n\n // Remove \"clicked\" class from all clickable divs\n $('.bodypart').removeClass('clicked');\n\n // Show the selected content div\n $('#' + targetDivId).show();\n\n // Add \"clicked\" class to the clicked div\n $(this).addClass('clicked');\n $('.kunskapsbanken-info').show();\n $('.close-button').click(function () {\n // Hide the outer container\n $('.kunskapsbanken-info').hide();\n $('.bodypart').removeClass('clicked');\n });\n });\n }\n\n // Public API\n return {\n init: function () {\n initReadMoreFunc();\n initStickyVerticalText();\n initSlickCarousel();\n initScrollReveal();\n initHoverStateTransition();\n bodypartsClickFunction();\n addClassToNinjaform();\n\n $('.hamburger')\n .off('click')\n .click(function () {\n $('.nav-menu').toggleClass('active');\n $('.hamburger').toggleClass('active');\n });\n\n $('.page-container').click(function () {\n $('.nav-menu').removeClass('active');\n $('.hamburger').removeClass('active');\n });\n\n console.log('Non-Quiz Features Module initialized');\n },\n };\n})(jQuery);\n\n$(function () {\n try {\n QuizModule.init();\n NonQuizFeaturesModule.init();\n } catch (error) {\n console.error('Initialization error:', error.message);\n }\n});\n"],"names":["$","elements"],"mappings":"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"}