{"id":9,"date":"2026-09-13T11:57:56","date_gmt":"2026-09-13T11:57:56","guid":{"rendered":"https:\/\/study.philipjonsson.com\/?page_id=9"},"modified":"2026-09-13T12:10:22","modified_gmt":"2026-09-13T12:10:22","slug":"study-tools","status":"publish","type":"page","link":"https:\/\/study.philipjonsson.com\/","title":{"rendered":"Study Tools"},"content":{"rendered":"    \r\n    <div class=\"study-tools\">\r\n\r\n        <!--\r\n         * LANDING SCREEN\r\n         -->\r\n\r\n        <div id=\"study-tools-home\">\r\n\r\n            <h2>Study Tools<\/h2>\r\n\r\n            <p>\r\n                Choose what you want to study.\r\n            <\/p>\r\n\r\n            <div class=\"study-tools-buttons\">\r\n\r\n                <button\r\n                    type=\"button\"\r\n                    class=\"button button-primary\"\r\n                    id=\"study-flashcards-button\"\r\n                >\r\n                    Flashcards\r\n                <\/button>\r\n\r\n                <button\r\n                    type=\"button\"\r\n                    class=\"button\"\r\n                    id=\"study-quiz-button\"\r\n                >\r\n                    Quiz\r\n                <\/button>\r\n\r\n                <button\r\n                    type=\"button\"\r\n                    class=\"button\"\r\n                    id=\"study-quiz-history-button\"\r\n                >\r\n                    Quiz History\r\n                <\/button>\r\n\r\n            <\/div>\r\n\r\n        <\/div>\r\n\r\n\r\n        <!--\r\n         * GROUP SELECTION SCREEN\r\n         -->\r\n\r\n        <div\r\n            id=\"study-tools-group-selection\"\r\n            style=\"display: none;\"\r\n        >\r\n\r\n            <h2>Select Groups<\/h2>\r\n\r\n            <p id=\"study-tools-selection-description\">\r\n                Choose the groups you want to study.\r\n            <\/p>\r\n\r\n\r\n            <div class=\"study-tools-group-list\">\r\n\r\n                \r\n                        <label\r\n                            style=\"\r\n                                display: block;\r\n                                margin-left: 0px;\r\n                                margin-bottom: 8px;\r\n                            \"\r\n                        >\r\n\r\n                            <input\r\n                                type=\"checkbox\"\r\n                                name=\"study_group[]\"\r\n                                value=\"1\"\r\n                                data-parent-id=\"0\"\r\n                            >\r\n\r\n                            Psykologi 1\r\n                                <span\r\n                                    class=\"study-tools-keyword-count\"\r\n                                >\r\n                                    (0)\r\n                                <\/span>\r\n\r\n                        <\/label>\r\n\r\n                        \r\n                        <label\r\n                            style=\"\r\n                                display: block;\r\n                                margin-left: 25px;\r\n                                margin-bottom: 8px;\r\n                            \"\r\n                        >\r\n\r\n                            <input\r\n                                type=\"checkbox\"\r\n                                name=\"study_group[]\"\r\n                                value=\"2\"\r\n                                data-parent-id=\"1\"\r\n                            >\r\n\r\n                            Moment 1: Psychology - The science of mind and behaviour\r\n                                <span\r\n                                    class=\"study-tools-keyword-count\"\r\n                                >\r\n                                    (0)\r\n                                <\/span>\r\n\r\n                        <\/label>\r\n\r\n                        \r\n                        <label\r\n                            style=\"\r\n                                display: block;\r\n                                margin-left: 50px;\r\n                                margin-bottom: 8px;\r\n                            \"\r\n                        >\r\n\r\n                            <input\r\n                                type=\"checkbox\"\r\n                                name=\"study_group[]\"\r\n                                value=\"3\"\r\n                                data-parent-id=\"2\"\r\n                            >\r\n\r\n                            Kapitel 1: The science of psychology\r\n                                <span\r\n                                    class=\"study-tools-keyword-count\"\r\n                                >\r\n                                    (0)\r\n                                <\/span>\r\n\r\n                        <\/label>\r\n\r\n                        \r\n                        <label\r\n                            style=\"\r\n                                display: block;\r\n                                margin-left: 50px;\r\n                                margin-bottom: 8px;\r\n                            \"\r\n                        >\r\n\r\n                            <input\r\n                                type=\"checkbox\"\r\n                                name=\"study_group[]\"\r\n                                value=\"4\"\r\n                                data-parent-id=\"2\"\r\n                            >\r\n\r\n                            Kapitel 2: Studying behaviour scientifically\r\n                                <span\r\n                                    class=\"study-tools-keyword-count\"\r\n                                >\r\n                                    (0)\r\n                                <\/span>\r\n\r\n                        <\/label>\r\n\r\n                        \r\n                        <label\r\n                            style=\"\r\n                                display: block;\r\n                                margin-left: 50px;\r\n                                margin-bottom: 8px;\r\n                            \"\r\n                        >\r\n\r\n                            <input\r\n                                type=\"checkbox\"\r\n                                name=\"study_group[]\"\r\n                                value=\"5\"\r\n                                data-parent-id=\"2\"\r\n                            >\r\n\r\n                            Kapitel 3: Evolution, genes, environment and behaviour\r\n                                <span\r\n                                    class=\"study-tools-keyword-count\"\r\n                                >\r\n                                    (0)\r\n                                <\/span>\r\n\r\n                        <\/label>\r\n\r\n                        \r\n            <\/div>\r\n\r\n\r\n            <div class=\"study-tools-buttons\">\r\n\r\n                <button\r\n                    type=\"button\"\r\n                    class=\"button\"\r\n                    id=\"study-back-button\"\r\n                >\r\n                    Back\r\n                <\/button>\r\n\r\n                <button\r\n                    type=\"button\"\r\n                    class=\"button button-primary\"\r\n                    id=\"study-start-button\"\r\n                >\r\n                    Start\r\n                <\/button>\r\n\r\n            <\/div>\r\n\r\n\r\n            <p\r\n                id=\"study-tools-message\"\r\n                style=\"display: none;\"\r\n            ><\/p>\r\n\r\n        <\/div>\r\n\r\n        <!-- FLASHCARD SCREEN -->\r\n        <div\r\n            id=\"study-tools-flashcards\"\r\n            style=\"display: none;\"\r\n        >\r\n\r\n            <h2>Flashcards<\/h2>\r\n\r\n\r\n            <p id=\"study-flashcard-progress\">\r\n                Card 1 of 1\r\n            <\/p>\r\n\r\n\r\n            <div\r\n                id=\"study-flashcard\"\r\n                style=\"\r\n                    border: 1px solid #ccc;\r\n                    border-radius: 8px;\r\n                    padding: 40px;\r\n                    margin: 20px 0;\r\n                    cursor: pointer;\r\n                    min-height: 150px;\r\n                \"\r\n            >\r\n\r\n                <div\r\n                    id=\"study-flashcard-content\"\r\n                    style=\"\r\n                        font-size: 24px;\r\n                        text-align: center;\r\n                    \"\r\n                >\r\n                    Loading...\r\n                <\/div>\r\n\r\n\r\n                <p\r\n                    id=\"study-flashcard-hint\"\r\n                    style=\"\r\n                        text-align: center;\r\n                        color: #666;\r\n                        margin-top: 25px;\r\n                    \"\r\n                >\r\n                    Tap the card to reveal the other side.\r\n                <\/p>\r\n\r\n            <\/div>\r\n\r\n\r\n            <button\r\n                type=\"button\"\r\n                class=\"button button-primary\"\r\n                id=\"study-flashcard-next\"\r\n            >\r\n                Next\r\n            <\/button>\r\n\r\n\r\n            <p\r\n                id=\"study-flashcard-message\"\r\n                style=\"display: none;\"\r\n            ><\/p>\r\n\r\n        <\/div>\r\n\r\n        <!-- QUIZ SCREEN -->\r\n        <div\r\n            id=\"study-tools-quiz\"\r\n            style=\"display: none;\"\r\n        >\r\n            <h2>Quiz<\/h2>\r\n\r\n            <p id=\"study-quiz-progress\">\r\n                Question 1 of 1\r\n            <\/p>\r\n\r\n            <div\r\n                id=\"study-quiz-question\"\r\n                style=\"\r\n                    font-size: 24px;\r\n                    font-weight: bold;\r\n                    margin: 30px 0;\r\n                \"\r\n            >\r\n                Loading...\r\n            <\/div>\r\n\r\n            <div id=\"study-quiz-options\"><\/div>\r\n\r\n            <p\r\n                id=\"study-quiz-message\"\r\n                style=\"display: none;\"\r\n            ><\/p>\r\n\r\n            <p>\r\n                <button\r\n                    type=\"button\"\r\n                    class=\"button\"\r\n                    id=\"study-quiz-home-button\"\r\n                >\r\n                    \u2190 Back to Study Tools\r\n                <\/button>\r\n            <\/p>\r\n        <\/div>\r\n\r\n        <!-- QUIZ HISTORY SCREEN -->\r\n         <div\r\n            id=\"study-tools-history\"\r\n            style=\"display: none;\"\r\n        >\r\n            <p>\r\n                <button\r\n                    type=\"button\"\r\n                    class=\"button\"\r\n                    id=\"study-history-back\"\r\n                >\r\n                    \u2190 Back to Study Tools\r\n                <\/button>\r\n            <\/p>\r\n\r\n            <h2>Quiz History<\/h2>\r\n\r\n            <div id=\"study-quiz-history-list\">\r\n                Loading...\r\n            <\/div>\r\n\r\n            <p\r\n                id=\"study-quiz-history-message\"\r\n                style=\"display: none;\"\r\n            ><\/p>\r\n        <\/div>\r\n\r\n        <!-- QUIZ HISTORY RESULTS SCREEN -->\r\n         <div\r\n            id=\"study-tools-quiz-results\"\r\n            style=\"display: none;\"\r\n        >\r\n            <p>\r\n                <button\r\n                    type=\"button\"\r\n                    class=\"button\"\r\n                    id=\"study-results-back\"\r\n                >\r\n                    \u2190 Back to Quiz History\r\n                <\/button>\r\n                <button onclick=\"location.reload();\">Back to Home Screen<\/button>\r\n            <\/p>\r\n            \r\n            <h2>Quiz Results<\/h2>\r\n\r\n            <p id=\"study-quiz-results-score\">\r\n                Score: --\r\n            <\/p>\r\n\r\n            <div id=\"study-quiz-results-list\">\r\n                Loading...\r\n            <\/div>\r\n\r\n            <p\r\n                id=\"study-quiz-results-message\"\r\n                style=\"display: none;\"\r\n            ><\/p>\r\n        <\/div>\r\n\r\n    <\/div>\r\n\r\n\r\n    <script>\r\n\r\n        document.addEventListener(\r\n            'DOMContentLoaded',\r\n            function() {\r\n\r\n                const homeScreen =\r\n                    document.getElementById(\r\n                        'study-tools-home'\r\n                    );\r\n\r\n                const groupScreen =\r\n                    document.getElementById(\r\n                        'study-tools-group-selection'\r\n                    );\r\n\r\n                const flashcardsButton =\r\n                    document.getElementById(\r\n                        'study-flashcards-button'\r\n                    );\r\n\r\n                const quizButton =\r\n                    document.getElementById(\r\n                        'study-quiz-button'\r\n                    );\r\n\r\n                const backButton =\r\n                    document.getElementById(\r\n                        'study-back-button'\r\n                    );\r\n\r\n                const startButton =\r\n                    document.getElementById(\r\n                        'study-start-button'\r\n                    );\r\n\r\n                const description =\r\n                    document.getElementById(\r\n                        'study-tools-selection-description'\r\n                    );\r\n\r\n                const message =\r\n                    document.getElementById(\r\n                        'study-tools-message'\r\n                    );\r\n\r\n                \/* Flashcard run *\/\r\n                const flashcardScreen =\r\n                    document.getElementById(\r\n                        'study-tools-flashcards'\r\n                    );\r\n\r\n                const flashcard =\r\n                    document.getElementById(\r\n                        'study-flashcard'\r\n                    );\r\n\r\n                const flashcardContent =\r\n                    document.getElementById(\r\n                        'study-flashcard-content'\r\n                    );\r\n\r\n                const flashcardHint =\r\n                    document.getElementById(\r\n                        'study-flashcard-hint'\r\n                    );\r\n\r\n                const flashcardProgress =\r\n                    document.getElementById(\r\n                        'study-flashcard-progress'\r\n                    );\r\n\r\n                const flashcardNext =\r\n                    document.getElementById(\r\n                        'study-flashcard-next'\r\n                    );\r\n\r\n                const flashcardMessage =\r\n                    document.getElementById(\r\n                        'study-flashcard-message'\r\n                    );\r\n                \r\n                let currentRunId = 0;\r\n                let flashcards = [];\r\n                let currentFlashcardIndex = 0;\r\n                let showingFront = true;\r\n                let frontIsKeyword = true;\r\n\r\n                \/* Quiz run *\/\r\n                const quizScreen =\r\n                    document.getElementById(\r\n                        'study-tools-quiz'\r\n                    );\r\n\r\n                const quizProgress =\r\n                    document.getElementById(\r\n                        'study-quiz-progress'\r\n                    );\r\n\r\n                const quizQuestion =\r\n                    document.getElementById(\r\n                        'study-quiz-question'\r\n                    );\r\n\r\n                const quizOptions =\r\n                    document.getElementById(\r\n                        'study-quiz-options'\r\n                    );\r\n\r\n                const quizMessage =\r\n                    document.getElementById(\r\n                        'study-quiz-message'\r\n                    );\r\n\r\n                let quizQuestions = [];\r\n                let currentQuizQuestionIndex = 0;\r\n\r\n                \/* Quiz history *\/\r\n                const historyScreen =\r\n                    document.getElementById(\r\n                        'study-tools-history'\r\n                    );\r\n\r\n                const quizHistoryList =\r\n                    document.getElementById(\r\n                        'study-quiz-history-list'\r\n                    );\r\n\r\n                const quizHistoryMessage =\r\n                    document.getElementById(\r\n                        'study-quiz-history-message'\r\n                    );\r\n                \r\n                const quizHistoryButton =\r\n                    document.getElementById(\r\n                        'study-quiz-history-button'\r\n                    );\r\n\r\n                \/* Quiz history results *\/\r\n                const quizResultsScreen =\r\n                    document.getElementById(\r\n                        'study-tools-quiz-results'\r\n                    );\r\n\r\n                const quizResultsScore =\r\n                    document.getElementById(\r\n                        'study-quiz-results-score'\r\n                    );\r\n\r\n                const quizResultsList =\r\n                    document.getElementById(\r\n                        'study-quiz-results-list'\r\n                    );\r\n\r\n                const quizResultsMessage =\r\n                    document.getElementById(\r\n                        'study-quiz-results-message'\r\n                    );\r\n\r\n                \/* Extra Navigation *\/\r\n                const historyBackButton =\r\n                    document.getElementById(\r\n                        'study-history-back'\r\n                    );\r\n\r\n                const resultsBackButton =\r\n                    document.getElementById(\r\n                        'study-results-back'\r\n                    );\r\n\r\n                const quizHomeButton =\r\n                    document.getElementById(\r\n                        'study-quiz-home-button'\r\n                    );\r\n\r\n                function openStudyHome() {\r\n\r\n                    homeScreen.style.display = 'block';\r\n\r\n                    groupScreen.style.display = 'none';\r\n\r\n                    flashcardScreen.style.display =\r\n                        'none';\r\n\r\n                    quizScreen.style.display =\r\n                        'none';\r\n\r\n                    historyScreen.style.display =\r\n                        'none';\r\n\r\n                    quizResultsScreen.style.display =\r\n                        'none';\r\n                }\r\n\r\n                historyBackButton.addEventListener(\r\n                    'click',\r\n                    function() {\r\n\r\n                        openStudyHome();\r\n\r\n                    }\r\n                );\r\n\r\n                resultsBackButton.addEventListener(\r\n                    'click',\r\n                    function() {\r\n\r\n                        openQuizHistory();\r\n\r\n                    }\r\n                );\r\n\r\n                quizHomeButton.addEventListener(\r\n                    'click',\r\n                    function() {\r\n\r\n                        openStudyHome();\r\n\r\n                    }\r\n                );\r\n\r\n                \/*\r\n                 * WordPress AJAX URL.\r\n                 *\/\r\n\r\n                const ajaxUrl =\r\n                    'https:\/\/study.philipjonsson.com\/wp-admin\/admin-ajax.php';\r\n\r\n\r\n                \/*\r\n                 * Security nonce.\r\n                 *\/\r\n\r\n                const nonce =\r\n                    'ef7500696f';\r\n\r\n                const studyNonce =\r\n                    '0dd1a4dc8a';\r\n\r\n\r\n                \/*\r\n                 * Remember whether we're starting\r\n                 * flashcards or a quiz.\r\n                 *\/\r\n\r\n                let studyType = '';\r\n\r\n\r\n                \/*\r\n                 * Open group selection.\r\n                 *\/\r\n\r\n                function openGroupSelection( type ) {\r\n\r\n                    studyType = type;\r\n\r\n                    homeScreen.style.display = 'none';\r\n\r\n                    groupScreen.style.display = 'block';\r\n\r\n                    message.style.display = 'none';\r\n\r\n\r\n                    if ( type === 'quiz' ) {\r\n\r\n                        description.textContent =\r\n                            'Choose the groups you want to quiz yourself on.';\r\n\r\n                    } else {\r\n\r\n                        description.textContent =\r\n                            'Choose the groups you want to study with flashcards.';\r\n\r\n                    }\r\n\r\n                }\r\n\r\n\r\n                \/*\r\n                 * Flashcards button.\r\n                 *\/\r\n\r\n                flashcardsButton.addEventListener(\r\n                    'click',\r\n                    function() {\r\n\r\n                        openGroupSelection(\r\n                            'flashcard'\r\n                        );\r\n\r\n                    }\r\n                );\r\n\r\n\r\n                \/*\r\n                 * Quiz button.\r\n                 *\/\r\n\r\n                quizButton.addEventListener(\r\n                    'click',\r\n                    function() {\r\n\r\n                        openGroupSelection(\r\n                            'quiz'\r\n                        );\r\n\r\n                    }\r\n                );\r\n\r\n                \/*\r\n                * When a group is selected, also select\r\n                * all of its descendant groups.\r\n                *\/\r\n\r\n                const groupCheckboxes =\r\n                    document.querySelectorAll(\r\n                        'input[name=\"study_group[]\"]'\r\n                    );\r\n\r\n\r\n                groupCheckboxes.forEach(\r\n                    function(checkbox) {\r\n\r\n                        checkbox.addEventListener(\r\n                            'change',\r\n                            function() {\r\n\r\n                                const selectedGroupId =\r\n                                    this.value;\r\n\r\n                                const isChecked =\r\n                                    this.checked;\r\n\r\n\r\n                                \/*\r\n                                * Keep looking for children of the\r\n                                * selected group.\r\n                                *\/\r\n\r\n                                function updateDescendants(\r\n                                    parentId\r\n                                ) {\r\n\r\n                                    groupCheckboxes.forEach(\r\n                                        function(childCheckbox) {\r\n\r\n                                            if (\r\n                                                childCheckbox.dataset.parentId ===\r\n                                                parentId\r\n                                            ) {\r\n\r\n                                                childCheckbox.checked =\r\n                                                    isChecked;\r\n\r\n                                                updateDescendants(\r\n                                                    childCheckbox.value\r\n                                                );\r\n\r\n                                            }\r\n\r\n                                        }\r\n                                    );\r\n\r\n                                }\r\n\r\n\r\n                                updateDescendants(\r\n                                    selectedGroupId\r\n                                );\r\n\r\n                            }\r\n                        );\r\n\r\n                    }\r\n                );\r\n\r\n                \/*\r\n                 * Back button.\r\n                 *\/\r\n\r\n                backButton.addEventListener(\r\n                    'click',\r\n                    function() {\r\n\r\n                        groupScreen.style.display = 'none';\r\n\r\n                        homeScreen.style.display = 'block';\r\n\r\n                        message.style.display = 'none';\r\n\r\n                    }\r\n                );\r\n\r\n\r\n                \/*\r\n                 * Start button.\r\n                 *\/\r\n\r\n                startButton.addEventListener(\r\n                    'click',\r\n                    async function() {\r\n\r\n                        \/*\r\n                         * Get selected checkboxes.\r\n                         *\/\r\n\r\n                        const checkedGroups =\r\n                            document.querySelectorAll(\r\n                                'input[name=\"study_group[]\"]:checked'\r\n                            );\r\n\r\n\r\n                        const groupIds =\r\n                            Array.from(\r\n                                checkedGroups\r\n                            ).map(\r\n                                function(checkbox) {\r\n\r\n                                    return checkbox.value;\r\n\r\n                                }\r\n                            );\r\n\r\n\r\n                        \/*\r\n                         * Make sure at least one group\r\n                         * was selected.\r\n                         *\/\r\n\r\n                        if ( groupIds.length === 0 ) {\r\n\r\n                            message.textContent =\r\n                                'Please select at least one group.';\r\n\r\n                            message.style.display = 'block';\r\n\r\n                            return;\r\n\r\n                        }\r\n\r\n\r\n                        \/*\r\n                         * Disable the button while\r\n                         * the request is running.\r\n                         *\/\r\n\r\n                        startButton.disabled = true;\r\n\r\n                        message.textContent =\r\n                            'Starting your study run...';\r\n\r\n                        message.style.display = 'block';\r\n\r\n\r\n                        try {\r\n\r\n                            const formData =\r\n                                new FormData();\r\n\r\n\r\n                            formData.append(\r\n                                'action',\r\n                                'study_tools_create_run'\r\n                            );\r\n\r\n                            formData.append(\r\n                                'nonce',\r\n                                nonce\r\n                            );\r\n\r\n                            formData.append(\r\n                                'type',\r\n                                studyType\r\n                            );\r\n\r\n\r\n                            groupIds.forEach(\r\n                                function(groupId) {\r\n\r\n                                    formData.append(\r\n                                        'groups[]',\r\n                                        groupId\r\n                                    );\r\n\r\n                                }\r\n                            );\r\n\r\n\r\n                            const response =\r\n                                await fetch(\r\n                                    ajaxUrl,\r\n                                    {\r\n                                        method: 'POST',\r\n                                        body: formData\r\n                                    }\r\n                                );\r\n\r\n\r\n                            const data =\r\n                                await response.json();\r\n\r\n\r\n                            if ( ! data.success ) {\r\n\r\n                                throw new Error(\r\n                                    data.data.message\r\n                                );\r\n\r\n                            }\r\n\r\n\r\n                            if ( studyType === 'flashcard' ) {\r\n\r\n                                openFlashcards(\r\n                                    data.data.run_id\r\n                                );\r\n\r\n                            } else {\r\n\r\n                                openQuiz(\r\n                                    data.data.run_id\r\n                                );\r\n\r\n                            }\r\n\r\n\r\n                        } catch ( error ) {\r\n\r\n                            message.textContent =\r\n                                error.message;\r\n\r\n                        }\r\n\r\n\r\n                        startButton.disabled = false;\r\n\r\n                    }\r\n                );\r\n\r\n                \/*\r\n                * Load flashcard data for a run.\r\n                *\/\r\n\r\n                async function openFlashcards( runId ) {\r\n\r\n                    currentRunId = runId;\r\n\r\n                    homeScreen.style.display = 'none';\r\n\r\n                    groupScreen.style.display = 'none';\r\n\r\n                    flashcardScreen.style.display = 'block';\r\n\r\n                    flashcardContent.textContent =\r\n                        'Loading...';\r\n\r\n                    flashcardMessage.style.display =\r\n                        'none';\r\n\r\n\r\n                    try {\r\n\r\n                        const formData =\r\n                            new FormData();\r\n\r\n\r\n                        formData.append(\r\n                            'action',\r\n                            'study_tools_get_flashcard_data'\r\n                        );\r\n\r\n                        formData.append(\r\n                            'nonce',\r\n                            studyNonce\r\n                        );\r\n\r\n                        formData.append(\r\n                            'run_id',\r\n                            runId\r\n                        );\r\n\r\n\r\n                        const response =\r\n                            await fetch(\r\n                                ajaxUrl,\r\n                                {\r\n                                    method: 'POST',\r\n                                    body: formData\r\n                                }\r\n                            );\r\n\r\n\r\n                        const data =\r\n                            await response.json();\r\n\r\n\r\n                        if ( ! data.success ) {\r\n\r\n                            throw new Error(\r\n                                data.data.message\r\n                            );\r\n\r\n                        }\r\n\r\n\r\n                        flashcards =\r\n                            data.data.flashcards;\r\n\r\n\r\n                        currentFlashcardIndex = 0;\r\n\r\n\r\n                        showFlashcard();\r\n\r\n\r\n                    } catch ( error ) {\r\n\r\n                        flashcardContent.textContent =\r\n                            'Could not load the flashcards.';\r\n\r\n                        flashcardMessage.textContent =\r\n                            error.message;\r\n\r\n                        flashcardMessage.style.display =\r\n                            'block';\r\n\r\n                    }\r\n\r\n                }\r\n\r\n                \/*\r\n                * Display the current flashcard.\r\n                *\/\r\n\r\n                function showFlashcard() {\r\n\r\n                    if ( flashcards.length === 0 ) {\r\n\r\n                        flashcardContent.textContent =\r\n                            'No flashcards found.';\r\n\r\n                        return;\r\n\r\n                    }\r\n\r\n\r\n                    const card =\r\n                        flashcards[\r\n                            currentFlashcardIndex\r\n                        ];\r\n\r\n\r\n                    \/*\r\n                    * Randomly decide which side\r\n                    * appears first.\r\n                    *\/\r\n\r\n                    frontIsKeyword =\r\n                        Math.random() < 0.5;\r\n\r\n\r\n                    showingFront = true;\r\n\r\n\r\n                    displayCurrentSide();\r\n\r\n\r\n                    flashcardProgress.textContent =\r\n                        'Card ' +\r\n                        ( currentFlashcardIndex + 1 ) +\r\n                        ' of ' +\r\n                        flashcards.length;\r\n\r\n\r\n                    flashcardNext.style.display =\r\n                        'inline-block';\r\n\r\n                }\r\n\r\n                \/*\r\n                * Display whichever side of the\r\n                * card is currently showing.\r\n                *\/\r\n\r\n                function displayCurrentSide() {\r\n\r\n                    const card =\r\n                        flashcards[\r\n                            currentFlashcardIndex\r\n                        ];\r\n\r\n\r\n                    if ( showingFront ) {\r\n\r\n                        if ( frontIsKeyword ) {\r\n\r\n                            flashcardContent.textContent =\r\n                                card.keyword;\r\n\r\n                        } else {\r\n\r\n                            flashcardContent.textContent =\r\n                                card.explanation;\r\n\r\n                        }\r\n\r\n\r\n                        flashcardHint.textContent =\r\n                            'Tap the card to reveal the other side.';\r\n\r\n\r\n                    } else {\r\n\r\n                        if ( frontIsKeyword ) {\r\n\r\n                            flashcardContent.textContent =\r\n                                card.explanation;\r\n\r\n                        } else {\r\n\r\n                            flashcardContent.textContent =\r\n                                card.keyword;\r\n\r\n                        }\r\n\r\n\r\n                        flashcardHint.textContent =\r\n                            'Tap the card to hide the other side.';\r\n\r\n                    }\r\n\r\n                }\r\n\r\n                flashcard.addEventListener(\r\n                    'click',\r\n                    function() {\r\n\r\n                        showingFront =\r\n                            ! showingFront;\r\n\r\n                        displayCurrentSide();\r\n\r\n                    }\r\n                );\r\n\r\n                \/* Next flashcard *\/\r\n                async function completeCurrentFlashcard() {\r\n                    const formData =\r\n                        new FormData();\r\n\r\n\r\n                    formData.append(\r\n                        'action',\r\n                        'study_tools_update_flashcard_progress'\r\n                    );\r\n\r\n                    formData.append(\r\n                        'nonce',\r\n                        studyNonce\r\n                    );\r\n\r\n                    formData.append(\r\n                        'run_id',\r\n                        currentRunId\r\n                    );\r\n\r\n\r\n                    const response =\r\n                        await fetch(\r\n                            ajaxUrl,\r\n                            {\r\n                                method: 'POST',\r\n                                body: formData\r\n                            }\r\n                        );\r\n\r\n\r\n                    const data =\r\n                        await response.json();\r\n\r\n\r\n                    if ( ! data.success ) {\r\n\r\n                        throw new Error(\r\n                            data.data.message\r\n                        );\r\n\r\n                    }\r\n\r\n\r\n                    return data.data;\r\n\r\n                }\r\n\r\n                flashcardNext.addEventListener(\r\n                    'click',\r\n                    async function() {\r\n\r\n                        \/*\r\n                        * Save completion of the current card\r\n                        * before moving to the next one.\r\n                        *\/\r\n\r\n                        flashcardNext.disabled = true;\r\n\r\n\r\n                        try {\r\n\r\n                            await completeCurrentFlashcard();\r\n\r\n\r\n                        } catch ( error ) {\r\n\r\n                            flashcardMessage.textContent =\r\n                                error.message;\r\n\r\n                            flashcardMessage.style.display =\r\n                                'block';\r\n\r\n                            flashcardNext.disabled = false;\r\n\r\n                            return;\r\n\r\n                        }\r\n\r\n\r\n                        currentFlashcardIndex++;\r\n\r\n\r\n                        \/*\r\n                        * We've reached the end.\r\n                        *\/\r\n\r\n                        if (\r\n                            currentFlashcardIndex >=\r\n                            flashcards.length\r\n                        ) {\r\n\r\n                            finishFlashcards();\r\n\r\n                            return;\r\n\r\n                        }\r\n\r\n\r\n                        \/*\r\n                        * Show the next card.\r\n                        *\/\r\n\r\n                        showFlashcard();\r\n\r\n                        flashcardNext.disabled = false;\r\n\r\n                    }\r\n                );\r\n\r\n                \/*\r\n                * Finish the flashcard run.\r\n                *\/\r\n\r\n                function finishFlashcards() {\r\n\r\n                    flashcardContent.textContent =\r\n                        '\ud83c\udf89 Flashcards complete!';\r\n\r\n\r\n                    flashcardHint.textContent =\r\n                        'Great job!';\r\n\r\n\r\n                    flashcardProgress.textContent =\r\n                        'Completed ' +\r\n                        flashcards.length +\r\n                        ' of ' +\r\n                        flashcards.length;\r\n\r\n\r\n                    flashcardNext.style.display =\r\n                        'none';\r\n\r\n                }\r\n\r\n                \/**\r\n                 * Quiz run\r\n                 *\/\r\n                async function openQuiz( runId ) {\r\n\r\n                    currentRunId = runId;\r\n\r\n                    homeScreen.style.display = 'none';\r\n                    groupScreen.style.display = 'none';\r\n                    flashcardScreen.style.display = 'none';\r\n                    quizScreen.style.display = 'block';\r\n\r\n                    quizQuestion.textContent =\r\n                        'Loading...';\r\n\r\n                    quizOptions.innerHTML = '';\r\n\r\n                    quizMessage.style.display =\r\n                        'none';\r\n\r\n                    try {\r\n\r\n                        const formData =\r\n                            new FormData();\r\n\r\n                        formData.append(\r\n                            'action',\r\n                            'study_tools_get_quiz_data'\r\n                        );\r\n\r\n                        formData.append(\r\n                            'nonce',\r\n                            studyNonce\r\n                        );\r\n\r\n                        formData.append(\r\n                            'run_id',\r\n                            runId\r\n                        );\r\n\r\n                        const response =\r\n                            await fetch(\r\n                                ajaxUrl,\r\n                                {\r\n                                    method: 'POST',\r\n                                    body: formData\r\n                                }\r\n                            );\r\n\r\n                        const data =\r\n                            await response.json();\r\n\r\n                        if ( ! data.success ) {\r\n                            throw new Error(\r\n                                data.data.message\r\n                            );\r\n                        }\r\n\r\n                        quizQuestions =\r\n                            data.data.questions;\r\n\r\n                        currentQuizQuestionIndex = 0;\r\n\r\n                        showQuizQuestion();\r\n\r\n                    } catch ( error ) {\r\n\r\n                        quizQuestion.textContent =\r\n                            'Could not load the quiz.';\r\n\r\n                        quizMessage.textContent =\r\n                            error.message;\r\n\r\n                        quizMessage.style.display =\r\n                            'block';\r\n                    }\r\n                }\r\n\r\n                function showQuizQuestion() {\r\n\r\n                    if ( quizQuestions.length === 0 ) {\r\n\r\n                        quizQuestion.textContent =\r\n                            'No quiz questions found.';\r\n\r\n                        return;\r\n                    }\r\n\r\n                    const question =\r\n                        quizQuestions[\r\n                            currentQuizQuestionIndex\r\n                        ];\r\n\r\n                    quizProgress.textContent =\r\n                        'Question ' +\r\n                        ( currentQuizQuestionIndex + 1 ) +\r\n                        ' of ' +\r\n                        quizQuestions.length;\r\n\r\n                    quizQuestion.textContent =\r\n                        question.keyword;\r\n\r\n                    quizOptions.innerHTML = '';\r\n\r\n                    question.options.forEach(\r\n                        function( option ) {\r\n\r\n                            const button =\r\n                                document.createElement(\r\n                                    'button'\r\n                                );\r\n\r\n                            button.type = 'button';\r\n\r\n                            button.textContent =\r\n                                option;\r\n\r\n                            button.style.display =\r\n                                'block';\r\n\r\n                            button.style.width =\r\n                                '100%';\r\n\r\n                            button.style.marginBottom =\r\n                                '10px';\r\n\r\n                            button.style.padding =\r\n                                '15px';\r\n\r\n                            button.style.textAlign =\r\n                                'left';\r\n\r\n                            button.style.cursor =\r\n                                'pointer';\r\n\r\n                            button.addEventListener(\r\n                                'click',\r\n                                function() {\r\n\r\n                                    selectQuizAnswer(\r\n                                        option\r\n                                    );\r\n\r\n                                }\r\n                            );\r\n\r\n                            quizOptions.appendChild(\r\n                                button\r\n                            );\r\n                        }\r\n                    );\r\n                }\r\n\r\n                async function selectQuizAnswer(\r\n                    selectedAnswer\r\n                ) {\r\n\r\n                    const question =\r\n                        quizQuestions[\r\n                            currentQuizQuestionIndex\r\n                        ];\r\n\r\n                    quizOptions\r\n                        .querySelectorAll( 'button' )\r\n                        .forEach(\r\n                            function( button ) {\r\n\r\n                                button.disabled = true;\r\n\r\n                            }\r\n                        );\r\n\r\n                    quizMessage.textContent =\r\n                        'Saving answer...';\r\n\r\n                    quizMessage.style.display =\r\n                        'block';\r\n\r\n                    try {\r\n\r\n                        const formData =\r\n                            new FormData();\r\n\r\n                        formData.append(\r\n                            'action',\r\n                            'study_tools_submit_quiz_answer'\r\n                        );\r\n\r\n                        formData.append(\r\n                            'nonce',\r\n                            studyNonce\r\n                        );\r\n\r\n                        formData.append(\r\n                            'run_id',\r\n                            currentRunId\r\n                        );\r\n\r\n                        formData.append(\r\n                            'keyword_id',\r\n                            question.keyword_id\r\n                        );\r\n\r\n                        formData.append(\r\n                            'selected_answer',\r\n                            selectedAnswer\r\n                        );\r\n\r\n                        const response =\r\n                            await fetch(\r\n                                ajaxUrl,\r\n                                {\r\n                                    method: 'POST',\r\n                                    body: formData\r\n                                }\r\n                            );\r\n\r\n                        const data =\r\n                            await response.json();\r\n\r\n                        if ( ! data.success ) {\r\n                            throw new Error(\r\n                                data.data.message\r\n                            );\r\n                        }\r\n\r\n                        if ( data.data.is_correct ) {\r\n\r\n                            quizMessage.textContent =\r\n                                '\u2705 Correct!';\r\n\r\n                        } else {\r\n\r\n                            quizMessage.textContent =\r\n                                '\u274c Incorrect.\\n\\nCorrect answer: ' +\r\n                                data.data.correct_answer;\r\n\r\n                        }\r\n\r\n                        \/*\r\n                        * Create a Next button.\r\n                        *\/\r\n\r\n                        const nextButton =\r\n                            document.createElement(\r\n                                'button'\r\n                            );\r\n\r\n                        nextButton.type = 'button';\r\n\r\n                        nextButton.className =\r\n                            'button button-primary';\r\n\r\n                        nextButton.textContent =\r\n                            data.data.completed\r\n                                ? 'See Results'\r\n                                : 'Next Question';\r\n\r\n                        nextButton.style.marginTop =\r\n                            '15px';\r\n\r\n                        nextButton.addEventListener(\r\n                            'click',\r\n                            function() {\r\n\r\n                                nextButton.disabled =\r\n                                    true;\r\n\r\n                                if ( data.data.completed ) {\r\n\r\n                                    showQuizResults(\r\n                                        data.data\r\n                                    );\r\n\r\n                                } else {\r\n\r\n                                    currentQuizQuestionIndex++;\r\n\r\n                                    quizMessage.style.display =\r\n                                        'none';\r\n\r\n                                    showQuizQuestion();\r\n\r\n                                }\r\n\r\n                            }\r\n                        );\r\n\r\n                        quizOptions.appendChild(\r\n                            nextButton\r\n                        );\r\n\r\n                    } catch ( error ) {\r\n\r\n                        quizMessage.textContent =\r\n                            error.message;\r\n\r\n                        quizOptions\r\n                            .querySelectorAll( 'button' )\r\n                            .forEach(\r\n                                function( button ) {\r\n\r\n                                    button.disabled = false;\r\n\r\n                                }\r\n                            );\r\n                    }\r\n                }\r\n\r\n                function showQuizResults(\r\n                    result\r\n                ) {\r\n\r\n                    quizProgress.textContent =\r\n                        'Quiz complete!';\r\n\r\n                    quizQuestion.textContent =\r\n                        '\ud83c\udf89 Quiz complete!';\r\n\r\n                    quizOptions.innerHTML = '';\r\n\r\n                    quizMessage.style.display =\r\n                        'block';\r\n\r\n                    quizMessage.textContent =\r\n                        'You answered ' +\r\n                        result.completed_items +\r\n                        ' questions.';\r\n\r\n                    const score =\r\n                        document.createElement(\r\n                            'p'\r\n                        );\r\n\r\n                    score.style.fontSize =\r\n                        '28px';\r\n\r\n                    score.style.fontWeight =\r\n                        'bold';\r\n\r\n                    score.textContent =\r\n                        'Score: ' +\r\n                        result.score +\r\n                        '%';\r\n\r\n                    quizOptions.appendChild(\r\n                        score\r\n                    );\r\n                }\r\n\r\n                \/* Quiz history *\/\r\n                async function openQuizHistory() {\r\n\r\n                    homeScreen.style.display = 'none';\r\n                    groupScreen.style.display = 'none';\r\n                    flashcardScreen.style.display = 'none';\r\n                    quizScreen.style.display = 'none';\r\n                    historyScreen.style.display = 'block';\r\n\r\n                    quizHistoryList.textContent =\r\n                        'Loading...';\r\n\r\n                    quizHistoryMessage.style.display =\r\n                        'none';\r\n\r\n                    try {\r\n\r\n                        const formData =\r\n                            new FormData();\r\n\r\n                        formData.append(\r\n                            'action',\r\n                            'study_tools_get_quiz_history'\r\n                        );\r\n\r\n                        formData.append(\r\n                            'nonce',\r\n                            studyNonce\r\n                        );\r\n\r\n                        const response =\r\n                            await fetch(\r\n                                ajaxUrl,\r\n                                {\r\n                                    method: 'POST',\r\n                                    body: formData\r\n                                }\r\n                            );\r\n\r\n                        const data =\r\n                            await response.json();\r\n\r\n                        if ( ! data.success ) {\r\n                            throw new Error(\r\n                                data.data.message\r\n                            );\r\n                        }\r\n\r\n                        displayQuizHistory(\r\n                            data.data.runs\r\n                        );\r\n\r\n                    } catch ( error ) {\r\n\r\n                        quizHistoryList.textContent =\r\n                            '';\r\n\r\n                        quizHistoryMessage.textContent =\r\n                            error.message;\r\n\r\n                        quizHistoryMessage.style.display =\r\n                            'block';\r\n                    }\r\n                }\r\n\r\n                function displayQuizHistory(\r\n                    runs\r\n                ) {\r\n\r\n                    quizHistoryList.innerHTML = '';\r\n\r\n                    if ( runs.length === 0 ) {\r\n\r\n                        quizHistoryList.textContent =\r\n                            'No completed quizzes yet.';\r\n\r\n                        return;\r\n                    }\r\n\r\n                    runs.forEach(\r\n                        function( run ) {\r\n\r\n                            const container =\r\n                                document.createElement(\r\n                                    'div'\r\n                                );\r\n\r\n                            container.style.border =\r\n                                '1px solid #ccc';\r\n\r\n                            container.style.borderRadius =\r\n                                '8px';\r\n\r\n                            container.style.padding =\r\n                                '20px';\r\n\r\n                            container.style.marginBottom =\r\n                                '15px';\r\n\r\n                            const date =\r\n                                document.createElement(\r\n                                    'p'\r\n                                );\r\n\r\n                            date.style.marginTop =\r\n                                '0';\r\n\r\n                            date.style.fontWeight =\r\n                                'bold';\r\n\r\n                            date.textContent =\r\n                                run.completed_at;\r\n\r\n                            const details =\r\n                                document.createElement(\r\n                                    'p'\r\n                                );\r\n\r\n                            details.textContent =\r\n                                'Quiz \u2022 ' +\r\n                                run.total_items +\r\n                                ' questions \u2022 ' +\r\n                                run.score +\r\n                                '%';\r\n\r\n                            const button =\r\n                                document.createElement(\r\n                                    'button'\r\n                                );\r\n\r\n                            button.type = 'button';\r\n\r\n                            button.className =\r\n                                'button';\r\n\r\n                            button.textContent =\r\n                                'View Results';\r\n\r\n                            button.dataset.runId =\r\n                                run.id;\r\n\r\n                            \/*\r\n                            * Results will be connected\r\n                            * in the next milestone.\r\n                            *\/\r\n\r\n                            button.addEventListener(\r\n                                'click',\r\n                                function() {\r\n\r\n                                    openQuizResults(\r\n                                        run.id\r\n                                    );\r\n\r\n                                }\r\n                            );\r\n\r\n                            container.appendChild(\r\n                                date\r\n                            );\r\n\r\n                            container.appendChild(\r\n                                details\r\n                            );\r\n\r\n                            container.appendChild(\r\n                                button\r\n                            );\r\n\r\n                            quizHistoryList.appendChild(\r\n                                container\r\n                            );\r\n                        }\r\n                    );\r\n                }\r\n\r\n                quizHistoryButton.addEventListener(\r\n                    'click',\r\n                    function() {\r\n\r\n                        openQuizHistory();\r\n\r\n                    }\r\n                );\r\n                \r\n                \/* Quiz history results *\/\r\n                async function openQuizResults(\r\n                    runId\r\n                ) {\r\n\r\n                    homeScreen.style.display = 'none';\r\n                    groupScreen.style.display = 'none';\r\n                    flashcardScreen.style.display = 'none';\r\n                    quizScreen.style.display = 'none';\r\n                    historyScreen.style.display = 'none';\r\n                    quizResultsScreen.style.display = 'block';\r\n\r\n                    quizResultsScore.textContent =\r\n                        'Loading...';\r\n\r\n                    quizResultsList.innerHTML =\r\n                        '';\r\n\r\n                    quizResultsMessage.style.display =\r\n                        'none';\r\n\r\n                    try {\r\n\r\n                        const formData =\r\n                            new FormData();\r\n\r\n                        formData.append(\r\n                            'action',\r\n                            'study_tools_get_quiz_results'\r\n                        );\r\n\r\n                        formData.append(\r\n                            'nonce',\r\n                            studyNonce\r\n                        );\r\n\r\n                        formData.append(\r\n                            'run_id',\r\n                            runId\r\n                        );\r\n\r\n                        const response =\r\n                            await fetch(\r\n                                ajaxUrl,\r\n                                {\r\n                                    method: 'POST',\r\n                                    body: formData\r\n                                }\r\n                            );\r\n\r\n                        const data =\r\n                            await response.json();\r\n\r\n                        if ( ! data.success ) {\r\n                            throw new Error(\r\n                                data.data.message\r\n                            );\r\n                        }\r\n\r\n                        displayQuizResults(\r\n                            data.data\r\n                        );\r\n\r\n                    } catch ( error ) {\r\n\r\n                        quizResultsScore.textContent =\r\n                            '';\r\n\r\n                        quizResultsMessage.textContent =\r\n                            error.message;\r\n\r\n                        quizResultsMessage.style.display =\r\n                            'block';\r\n                    }\r\n                }\r\n\r\n                function displayQuizResults(\r\n                    data\r\n                ) {\r\n\r\n                    quizResultsScore.textContent =\r\n                        'Score: ' +\r\n                        data.score +\r\n                        '%';\r\n\r\n                    quizResultsList.innerHTML =\r\n                        '';\r\n\r\n                    if ( data.results.length === 0 ) {\r\n\r\n                        quizResultsList.textContent =\r\n                            'No answers were recorded.';\r\n\r\n                        return;\r\n                    }\r\n\r\n                    data.results.forEach(\r\n                        function( result, index ) {\r\n\r\n                            const container =\r\n                                document.createElement(\r\n                                    'div'\r\n                                );\r\n\r\n                            container.style.border =\r\n                                '1px solid #ccc';\r\n\r\n                            container.style.borderRadius =\r\n                                '8px';\r\n\r\n                            container.style.padding =\r\n                                '20px';\r\n\r\n                            container.style.marginBottom =\r\n                                '20px';\r\n\r\n                            const title =\r\n                                document.createElement(\r\n                                    'h3'\r\n                                );\r\n\r\n                            title.textContent =\r\n                                ( index + 1 ) +\r\n                                '. ' +\r\n                                result.keyword;\r\n\r\n                            const status =\r\n                                document.createElement(\r\n                                    'p'\r\n                                );\r\n\r\n                            status.style.fontWeight =\r\n                                'bold';\r\n\r\n                            status.textContent =\r\n                                result.is_correct\r\n                                    ? '\u2705 Correct'\r\n                                    : '\u274c Incorrect';\r\n\r\n                            const selectedLabel =\r\n                                document.createElement(\r\n                                    'strong'\r\n                                );\r\n\r\n                            selectedLabel.textContent =\r\n                                'Your answer:';\r\n\r\n                            const selected =\r\n                                document.createElement(\r\n                                    'p'\r\n                                );\r\n\r\n                            selected.textContent =\r\n                                result.selected_answer;\r\n\r\n                            const correctLabel =\r\n                                document.createElement(\r\n                                    'strong'\r\n                                );\r\n\r\n                            correctLabel.textContent =\r\n                                'Correct answer:';\r\n\r\n                            const correct =\r\n                                document.createElement(\r\n                                    'p'\r\n                                );\r\n\r\n                            correct.textContent =\r\n                                result.correct_answer;\r\n\r\n                            container.appendChild(\r\n                                title\r\n                            );\r\n\r\n                            container.appendChild(\r\n                                status\r\n                            );\r\n\r\n                            container.appendChild(\r\n                                selectedLabel\r\n                            );\r\n\r\n                            container.appendChild(\r\n                                selected\r\n                            );\r\n\r\n                            container.appendChild(\r\n                                correctLabel\r\n                            );\r\n\r\n                            container.appendChild(\r\n                                correct\r\n                            );\r\n\r\n                            quizResultsList.appendChild(\r\n                                container\r\n                            );\r\n                        }\r\n                    );\r\n                }\r\n\r\n            }\r\n        );\r\n\r\n    <\/script>\r\n\r\n    \n","protected":false},"excerpt":{"rendered":"","protected":false},"author":1,"featured_media":0,"parent":0,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"","meta":{"_kad_post_transparent":"","_kad_post_title":"","_kad_post_layout":"","_kad_post_sidebar_id":"","_kad_post_content_style":"","_kad_post_vertical_padding":"","_kad_post_feature":"","_kad_post_feature_position":"","_kad_post_header":false,"_kad_post_footer":false,"_kad_post_classname":"","footnotes":""},"class_list":["post-9","page","type-page","status-publish","hentry"],"_links":{"self":[{"href":"https:\/\/study.philipjonsson.com\/index.php?rest_route=\/wp\/v2\/pages\/9","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/study.philipjonsson.com\/index.php?rest_route=\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/study.philipjonsson.com\/index.php?rest_route=\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/study.philipjonsson.com\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/study.philipjonsson.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=9"}],"version-history":[{"count":2,"href":"https:\/\/study.philipjonsson.com\/index.php?rest_route=\/wp\/v2\/pages\/9\/revisions"}],"predecessor-version":[{"id":20,"href":"https:\/\/study.philipjonsson.com\/index.php?rest_route=\/wp\/v2\/pages\/9\/revisions\/20"}],"wp:attachment":[{"href":"https:\/\/study.philipjonsson.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=9"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}