{"version":3,"file":"evidence-B3suvZoe.js","sources":["../../../client/app/bundles/Evidence/helpers/containerActionHelpers.tsx","../../../client/app/bundles/Evidence/components/Header.tsx","../../../client/app/bundles/Evidence/components/PageLayout.tsx","../../../client/app/bundles/Evidence/components/activitySlides/activitySurvey.tsx","../../../client/app/bundles/Evidence/components/activitySlides/postActivitySlide.tsx","../../../client/app/bundles/Evidence/components/activitySlides/thankYouSlide.tsx","../../../client/app/bundles/Evidence/components/studentView/activityFollowUp.tsx","../../../client/node_modules/marked/lib/marked.esm.js","../../../client/app/bundles/Evidence/components/studentView/headerImage.tsx","../../../client/app/bundles/Evidence/components/studentView/readPassageContainer.tsx","../../../client/app/bundles/Evidence/components/studentView/bottomNavigation.tsx","../../../client/app/bundles/Evidence/components/studentView/directionsSection.tsx","../../../client/app/bundles/Evidence/components/studentView/displayStudentHighlight.tsx","../../../client/app/bundles/Evidence/components/studentView/readAndHighlightInstructions.tsx","../../../client/app/bundles/Evidence/components/studentView/stepOverview.tsx","../../../client/app/bundles/Evidence/components/studentView/editorContainer.tsx","../../../client/node_modules/react-css-transition-replace/node_modules/dom-helpers/esm/canUseDOM.js","../../../client/node_modules/react-css-transition-replace/node_modules/dom-helpers/esm/animationFrame.js","../../../client/node_modules/react-css-transition-replace/node_modules/dom-helpers/esm/hasClass.js","../../../client/node_modules/react-css-transition-replace/node_modules/dom-helpers/esm/addClass.js","../../../client/node_modules/react-css-transition-replace/node_modules/dom-helpers/esm/removeClass.js","../../../client/node_modules/react-css-transition-replace/node_modules/dom-helpers/esm/ownerDocument.js","../../../client/node_modules/react-css-transition-replace/node_modules/dom-helpers/esm/ownerWindow.js","../../../client/node_modules/react-css-transition-replace/node_modules/dom-helpers/esm/getComputedStyle.js","../../../client/node_modules/react-css-transition-replace/node_modules/dom-helpers/esm/hyphenate.js","../../../client/node_modules/react-css-transition-replace/node_modules/dom-helpers/esm/hyphenateStyle.js","../../../client/node_modules/react-css-transition-replace/node_modules/dom-helpers/esm/css.js","../../../client/node_modules/react-css-transition-replace/node_modules/dom-helpers/esm/addEventListener.js","../../../client/node_modules/react-css-transition-replace/node_modules/dom-helpers/esm/removeEventListener.js","../../../client/node_modules/react-css-transition-replace/node_modules/dom-helpers/esm/listen.js","../../../client/node_modules/react-css-transition-replace/node_modules/dom-helpers/esm/triggerEvent.js","../../../client/node_modules/react-css-transition-replace/node_modules/dom-helpers/esm/transitionEnd.js","../../../client/node_modules/react-css-transition-replace/es/utils/PropTypes.js","../../../client/node_modules/react-css-transition-replace/es/ReactCSSTransitionReplaceChild.js","../../../client/node_modules/react-css-transition-replace/es/ReactCSSTransitionReplace.js","../../../client/app/bundles/Evidence/components/studentView/feedback.tsx","../../../client/app/bundles/Evidence/helpers/EditCaretPositioning.ts","../../../client/app/bundles/Evidence/libs/stringFormatting.ts","../../../client/app/bundles/Evidence/components/studentView/promptStep.tsx","../../../client/app/bundles/Evidence/helpers/containerRenderHelpers.tsx","../../../client/app/bundles/Evidence/components/studentView/promptStepContainer.tsx","../../../client/app/bundles/Evidence/components/studentView/steps.tsx","../../../client/app/bundles/Evidence/components/studentView/rightPanel.tsx","../../../client/app/bundles/Evidence/actions/activities.ts","../../../client/app/bundles/Evidence/libs/conceptResults.ts","../../../client/app/bundles/Evidence/utils/turkAPI.ts","../../../client/app/bundles/Evidence/components/activitySlides/explanationData.ts","../../../client/app/bundles/Evidence/components/activitySlides/footer.tsx","../../../client/app/bundles/Evidence/components/activitySlides/explanationSlide.tsx","../../../client/app/bundles/Evidence/components/activitySlides/welcomeSlide.tsx","../../../client/app/bundles/Evidence/components/shared/loadingSpinner.tsx","../../../client/app/bundles/Evidence/components/studentView/container.tsx","../../../client/app/bundles/Evidence/components/turkerView/completed.tsx","../../../client/app/bundles/Evidence/components/turkerView/landing.tsx","../../../client/app/bundles/Evidence/components/turkerView/index.tsx","../../../client/app/bundles/Evidence/routes.tsx","../../../client/app/bundles/Evidence/actions/actions.ts","../../../client/app/bundles/Evidence/reducers/activitiesReducer.ts","../../../client/app/bundles/Evidence/reducers/sessionReducer.ts","../../../client/app/bundles/Evidence/reducers/rootReducer.ts","../../../client/app/bundles/Evidence/store/configStore.ts","../../../client/app/bundles/Evidence/App.tsx","../../../client/app/bundles/Evidence/clientRegistration.js"],"sourcesContent":["import queryString from 'query-string'\nimport { stripHtml } from \"string-strip-html\"\n\nimport getParameterByName from './getParameterByName'\n\nimport { Passage } from '../interfaces/activities'\n\nexport const READ_PASSAGE_STEP = 1\n\nexport const ALL_STEPS = [READ_PASSAGE_STEP, 2, 3, 4]\n\nexport const getUrlParam = (paramName: string, location, isTurk) => {\n if(isTurk) {\n return getParameterByName(paramName, window.location.href)\n }\n const { search, } = location\n if (!search) { return }\n return queryString.parse(search)[paramName]\n}\n\nexport const onMobile = () => window.innerWidth < 1100\n\nexport const orderedSteps = (activities) => {\n const { currentActivity, } = activities\n return currentActivity ? currentActivity.prompts.sort((a, b) => a.conjunction.localeCompare(b.conjunction)) : [];\n}\n\nexport const outOfAttemptsForActivePrompt = (activeStep, session, activities) => {\n const { submittedResponses, } = session\n const activePrompt = orderedSteps(activities)[activeStep - 2] // subtracting 2 because the READ_PASSAGE_STEP is 1, so the first item in the set of prompts will always be 2\n\n if (!activePrompt) { return }\n\n const responsesForPrompt = submittedResponses[activePrompt.id]\n\n if (!responsesForPrompt) { return }\n\n const lastAttempt = responsesForPrompt[responsesForPrompt.length - 1]\n\n return (responsesForPrompt.length === activePrompt.max_attempts) || lastAttempt.optimal\n}\n\nexport const getCurrentStepDataForEventTracking = ({ activeStep, activities, session, isTurk }) => {\n const { currentActivity, } = activities\n const { sessionID, } = session\n const activityID = getUrlParam('uid', location, isTurk)\n const promptIndex = activeStep - 2 // have to subtract 2 because the prompts array index starts at 0 but the prompt numbers in the state are 2..4\n\n if (promptIndex < 0 || !currentActivity || !currentActivity.prompts[promptIndex]) return; // If we're on a step earlier than a prompt, or there's no prompt for this step then there's nothing to track\n\n const promptID = currentActivity.prompts[promptIndex].id\n\n return {\n activityID,\n sessionID,\n promptID\n }\n}\n\nexport const addPTagsToPassages = (passages: Passage[], scrolledToEndOfPassage) => {\n return passages.map(passage => {\n const { text } = passage;\n const paragraphArray = text ? text.match(/[^\\r\\n]+/g) : [];\n return paragraphArray.map((p, i) => {\n if (i === paragraphArray.length - 1 && !scrolledToEndOfPassage) {\n return `

${p}

`\n }\n return `

${p}

`\n }).join('').replace('

', '

').replace('

', '

')\n })\n}\n\nexport const everyOtherStepCompleted = (stepNumber, completedSteps) => {\n return completedSteps.filter(s => s !== stepNumber).length === 3\n}\n\nexport const getLastSubmittedResponse = ({ activities, session, activeStep }) => {\n const { currentActivity } = activities;\n const promptIndex = activeStep - 2\n const activePromptId = currentActivity && currentActivity.prompts[promptIndex] && currentActivity.prompts[promptIndex].id\n const submittedResponsesForActivePrompt = session.submittedResponses[activePromptId]\n return submittedResponsesForActivePrompt && submittedResponsesForActivePrompt[submittedResponsesForActivePrompt.length - 1]\n}\n\nexport const getStrippedPassageHighlights = ({ activities, session, activeStep }) => {\n const lastSubmittedResponse = getLastSubmittedResponse({ activities, session, activeStep });\n const passageHighlights = lastSubmittedResponse && lastSubmittedResponse.highlight && lastSubmittedResponse.highlight.filter(hl => hl.type === \"passage\")\n return passageHighlights && passageHighlights.map(highlight => stripHtml(highlight.text).result);\n}\n","import * as React from \"react\";\nimport { connect } from \"react-redux\";\nimport * as Redux from \"redux\";\nimport { TrackAnalyticsEvent } from '../actions/analytics';\nimport { Events } from '../modules/analytics';\nimport '../styles/headerStyling.scss';\n\nimport { BECAUSE_PASSAGE_STEP_NUMBER, BUT_PASSAGE_STEP_NUMBER, READ_PASSAGE_STEP_NUMBER, SO_PASSAGE_STEP_NUMBER, Tooltip, whiteCheckGreenBackgroundIcon, TeacherPreviewMenuButton } from '../../Shared/index';\nimport { onMobile } from '../helpers/containerActionHelpers';\nimport getParameterByName from '../helpers/getParameterByName';\n\nconst logoSrc = `${window.postbuildEnv.CDN_URL}/images/logos/quill-logo-white-2022.svg`\nconst mobileLogoSrc = `${window.postbuildEnv.CDN_URL}/images/logos/quill-logo-white-mobile.svg`\nconst helpIcon = `${window.postbuildEnv.CDN_URL}/images/icons/icons-help-white.svg`\nconst checkIcon = {whiteCheckGreenBackgroundIcon.alt};\n\nexport class Header extends React.Component {\n constructor(props: any) {\n super(props)\n\n this.state = {\n sessionID: getParameterByName('student', window.location.href)\n }\n }\n\n goToLMS = () => {\n window.location.href = \"/\"\n }\n\n trackSaveAndExitEvent = () => {\n const { dispatch, previewShowing } = this.props\n const { sessionID, } = this.state\n\n if(!previewShowing) {\n const activityID = getParameterByName('uid', window.location.href)\n dispatch(TrackAnalyticsEvent(Events.EVIDENCE_ACTIVITY_SAVED, {\n activityID: activityID,\n sessionID\n }))\n }\n }\n\n saveAndExit = () => {\n const { sessionID, } = this.state\n this.trackSaveAndExitEvent()\n if (sessionID) {\n } else {\n this.goToLMS()\n }\n }\n\n handleOnClick = () => {\n this.saveAndExit()\n }\n\n handleTogglePreview = () => {\n const { onTogglePreview } = this.props;\n onTogglePreview();\n }\n\n renderNumberOrIcon = (step: number) => {\n const { session } = this.props;\n const { activeStep } = session;\n if(step < activeStep) {\n return checkIcon;\n }\n if(step === activeStep) {\n return
{step}
\n }\n return
{step}
\n }\n\n renderStepCounter = () => {\n return(\n
\n

Steps

\n {this.renderNumberOrIcon(READ_PASSAGE_STEP_NUMBER)}\n {this.renderNumberOrIcon(BECAUSE_PASSAGE_STEP_NUMBER)}\n {this.renderNumberOrIcon(BUT_PASSAGE_STEP_NUMBER)}\n {this.renderNumberOrIcon(SO_PASSAGE_STEP_NUMBER)}\n
\n );\n }\n\n render() {\n const { session, isTeacher, previewShowing } = this.props;\n const { explanationSlidesCompleted, activityIsComplete } = session;\n const showStepsCounter = explanationSlidesCompleted && !activityIsComplete\n const isNotTurk = !window.location.href.includes('turk')\n const tooltipTrigger =
\"QuestionBeta: in development
\n // we check previewShowing is false because it may initially be returned as null\n const showTeacherPreviewMenuButton = isTeacher && previewShowing === false;\n const mobileStyle = onMobile() || (!showStepsCounter && !showTeacherPreviewMenuButton) ? 'mobile' : '';\n\n return (\n
\n
\n
\n
\n \n \"Quill.org\n \"Quill.org\n \n \n Beta\n
\n {showTeacherPreviewMenuButton && }\n
\n
\n {showStepsCounter && !onMobile() && this.renderStepCounter()}\n {isNotTurk && }\n
\n
\n
\n );\n }\n};\n\nconst mapStateToProps = (state: any) => {\n return {\n session: state.session\n };\n};\n\nconst mapDispatchToProps = (dispatch: Redux.Dispatch) => {\n return {\n dispatch\n };\n};\n\nexport default connect(mapStateToProps, mapDispatchToProps)(Header)\n","import * as React from \"react\";\nimport { renderRoutes } from \"react-router-config\";\nimport { useQuery } from 'react-query';\n\nimport Header from \"./Header\";\n\nimport { fetchUserRole } from '../../Shared/utils/userAPIs';\nimport { ScreenreaderInstructions, TeacherPreviewMenu, INTRODUCTION } from '../../Shared/index';\nimport { routes } from \"../routes\";\nimport getParameterByName from '../helpers/getParameterByName';\n\nconst PageLayout = (props: any) => {\n const { user } = props;\n const turkSession = getParameterByName('turk', window.location.href);\n const isPlaying = window.location.href.includes('play');\n const { data } = useQuery(\"user-role\", fetchUserRole);\n const isTeacherOrAdmin = data && data.role && data.role !== 'student';\n\n const [previewShowing, setPreviewShowing] = React.useState(false);\n const [questionToPreview, setQuestionToPreview] = React.useState(INTRODUCTION);\n\n React.useEffect(() => {\n if(isTeacherOrAdmin && !turkSession) {\n setPreviewShowing(true)\n }\n }, [isTeacherOrAdmin])\n\n function handleSkipToMainContentClick () {\n const element = document.getElementById(\"main-content\")\n if (!element) { return }\n element.focus()\n element.scrollIntoView()\n }\n\n function handleTogglePreviewMenu() {\n setPreviewShowing(!previewShowing);\n }\n\n function handleToggleQuestion(step: string) {\n setQuestionToPreview(step);\n }\n\n const showPreview = previewShowing && isTeacherOrAdmin && isPlaying;\n const contentClass = showPreview ? 'evidence-preview-mode' : '';\n const isOnMobile = window.innerWidth < 1100;\n\n return (\n
\n \n \n
\n
\n {showPreview && \n \n }\n
{renderRoutes(routes, {\n user,\n previewMode: showPreview,\n userRole: data?.role\n })}
\n
\n
\n );\n};\n\nexport default PageLayout;\n","import * as React from 'react';\n\nimport useFocus from '../../../Shared/hooks/useFocus';\nimport { TrackAnalyticsEvent } from \"../../actions/analytics\";\nimport { Events } from '../../modules/analytics';\n\nconst baseImgSrc = `${window.postbuildEnv.CDN_URL}/images/pages/evidence`\nconst checkMarkSrc = `${baseImgSrc}/components-selection-controls-dark-enabled-selected.svg`\n\nconst SURVEY_QUESTION = \"What did you think of this activity?\"\n\nconst emojis = [\n {\n alt: 'Angry face',\n src: `${baseImgSrc}/angry-face.svg`\n },\n {\n alt: 'Frowning face',\n src: `${baseImgSrc}/frowning-face.svg`\n },\n {\n alt: 'Neutral face',\n src: `${baseImgSrc}/neutral-face.svg`\n },\n {\n alt: 'Smiling face',\n src: `${baseImgSrc}/smiling-face.svg`\n },\n {\n alt: 'Excited face',\n src: `${baseImgSrc}/excited-face.svg`\n }\n]\n\nconst positiveMultipleChoiceOptions = [\n 'I thought the feedback was helpful',\n 'I thought completing the sentences was a good challenge',\n 'I thought completing the sentences was easy',\n 'I had no trouble reading the text',\n 'I thought this topic was interesting'\n]\n\nconst negativeMultipleChoiceOptions = [\n 'I got stuck on the feedback',\n 'I thought completing the sentences was too difficult',\n 'I thought completing the sentences was too easy',\n 'I thought the text was too difficult',\n 'I thought this topic was boring'\n]\n\nconst EmojiButton = ({ src, alt, emojiNumber, setSelectedEmoji, selectedEmoji, }) => {\n function handleClick() { setSelectedEmoji(emojiNumber) }\n\n return (\n \n )\n}\n\nconst MultipleChoiceOption = ({ text, selectedMultipleChoiceOptions, setSelectedMultipleChoiceOptions, }) => {\n const optionIsSelected = selectedMultipleChoiceOptions.find(opt => opt === text)\n\n function handleCheckboxClick() {\n const newSelectedMultipleChoiceOptions = optionIsSelected ? selectedMultipleChoiceOptions.filter(opt => opt !== text) : selectedMultipleChoiceOptions.concat(text)\n setSelectedMultipleChoiceOptions(newSelectedMultipleChoiceOptions)\n }\n\n let checkbox = \n if (optionIsSelected) {\n checkbox = (\n \"Checked\n )\n }\n\n return (\n \n )\n}\n\nconst ActivitySurvey = ({ activity, dispatch, sessionID, saveActivitySurveyResponse, setSubmittedActivitySurvey, resultPageUrl, }) => {\n const [selectedEmoji, setSelectedEmoji] = React.useState(null)\n const [selectedMultipleChoiceOptions, setSelectedMultipleChoiceOptions] = React.useState([])\n\n const [containerRef, setContainerFocus] = useFocus()\n\n React.useEffect(() => {\n setContainerFocus()\n }, [])\n\n React.useEffect(() => { setSelectedMultipleChoiceOptions([]) }, [selectedEmoji])\n\n function mapMultipleChoiceOptionsForEventParams() {\n const options = {}\n positiveMultipleChoiceOptions.forEach(option => {\n const key = option.split(' ').join('_')\n options[key] = false\n })\n negativeMultipleChoiceOptions.forEach(option => {\n const key = option.split(' ').join('_')\n options[key] = false\n })\n selectedMultipleChoiceOptions.forEach(option => {\n const key = option.split(' ').join('_')\n options[key] = true\n });\n return options\n }\n\n function handleSend() {\n if (!selectedMultipleChoiceOptions.length) { return }\n const activitySurveyResponse = {\n emoji_selection: selectedEmoji,\n multiple_choice_selections: selectedMultipleChoiceOptions,\n survey_question: SURVEY_QUESTION,\n }\n const trackingParams = {\n activity_name: activity?.title,\n tool_name: \"Reading\",\n rating: selectedEmoji,\n ...mapMultipleChoiceOptionsForEventParams()\n }\n const callback = () => setSubmittedActivitySurvey(true)\n dispatch(TrackAnalyticsEvent(Events.STUDENT_RATED_AN_ACTIVITY, trackingParams))\n saveActivitySurveyResponse({ sessionID, activitySurveyResponse, callback, })\n }\n\n function handleLinkClick() { window.location.href = resultPageUrl }\n\n let activitySurveyHeader\n let multipleChoiceSection\n\n if (selectedEmoji) {\n const multipleChoiceOptions = selectedEmoji > 3 ? positiveMultipleChoiceOptions : negativeMultipleChoiceOptions\n const multipleChoiceElements = multipleChoiceOptions.map(opt => )\n multipleChoiceSection = (
\n

Select one or more options:

\n {multipleChoiceElements}\n
)\n } else {\n activitySurveyHeader = (
\n

We need your help

\n

{SURVEY_QUESTION}

\n
)\n }\n\n const emojiButtons = emojis.map((emoji, i) => (\n )\n )\n\n const sendButtonClassName = selectedMultipleChoiceOptions.length ? 'quill-button-archived large secondary outlined focus-on-dark' : 'quill-button-archived large disabled contained focus-on-dark'\n\n return (\n
\n
\n {activitySurveyHeader}\n
{emojiButtons}
\n {multipleChoiceSection}\n
\n
\n Skip\n \n
\n
\n )\n}\n\nexport default ActivitySurvey\n","import * as React from \"react\";\n\nimport { FIRST_STRONG_EXAMPLE, SECOND_STRONG_EXAMPLE } from \"../../../../constants/evidence\";\nimport useFocus from '../../../Shared/hooks/useFocus';\nimport { BECAUSE, BUT, SO } from '../../../Shared/index';\nimport { PromptInterface } from \"../../../Staff/interfaces/evidenceInterfaces\";\n\nconst conjunctions = [BECAUSE, BUT, SO];\n\ninterface PostActivitySlideProps {\n handleClick: () => void,\n previewMode: boolean,\n prompts: PromptInterface[],\n responses: any\n}\n\nexport const PostActivitySlide = ({ handleClick, previewMode, prompts, responses }: PostActivitySlideProps) => {\n const [containerRef, setContainerFocus] = useFocus()\n\n React.useEffect(() => {\n setContainerFocus()\n }, [])\n\n function getStrongExemplar(conjunction: string, property: string) {\n const prompt = prompts.filter(prompt => prompt.conjunction === conjunction)[0];\n if (!prompt) { return }\n const conjunctionRegex = new RegExp(`${conjunction}$`)\n const stemWithoutConjunction = prompt.text.replace(conjunctionRegex, '');\n const exemplar = prompt[property];\n return

{stemWithoutConjunction}{`${conjunction} `}
{exemplar}

;\n }\n\n function getResponsesForConjunction(conjunction: string) {\n const responsesKeyHash = {}\n const responsesKeys = Object.keys(responses);\n conjunctions.forEach((conjunctionString, i) => responsesKeyHash[conjunctionString] = responsesKeys[i]);\n return responses[responsesKeyHash[conjunction]];\n }\n\n function getResponse(conjunction: string) {\n const responses = getResponsesForConjunction(conjunction)\n if(!responses) { return }\n const lastResponseText = responses[responses.length - 1].entry;\n const conjunctionRegex = new RegExp(`\\\\s${conjunction}\\\\s`)\n const splitResponse = lastResponseText.split(conjunctionRegex);\n return

{splitResponse[0]}{` ${conjunction} `}
{splitResponse[1]}

\n }\n\n function renderResponseAndExamplarsSection(conjunction: string) {\n return(\n
\n
\n
\n

Your response

\n
\n
{getResponse(conjunction)}
\n
\n
\n
\n

Example strong responses

\n
\n
{getStrongExemplar(conjunction, FIRST_STRONG_EXAMPLE)}
\n
{getStrongExemplar(conjunction, SECOND_STRONG_EXAMPLE)}
\n
\n
\n );\n }\n let buttonClass = \"quill-button-archived large secondary outlined focus-on-dark\"\n if(previewMode) {\n buttonClass += \" disabled\"\n }\n\n return(\n
\n
\n \"An\n

You have completed the activity!

\n

Be proud of the work you did today, and celebrate your success! This practice will help you grow as a reader and a writer. The more you practice, the stronger your critical thinking, reading, and writing skills will be.

\n
\n
\n
\n

Here are some examples of strong responses

\n

There are many different ways to use evidence in your writing.

\n
\n {renderResponseAndExamplarsSection(BECAUSE)}\n {renderResponseAndExamplarsSection(BUT)}\n {renderResponseAndExamplarsSection(SO)}\n
\n
\n \n
\n
\n );\n}\n\nexport default PostActivitySlide;\n","import * as React from 'react'\n\nimport useFocus from '../../../Shared/hooks/useFocus'\n\nconst applaudingSrc = `${window.postbuildEnv.CDN_URL}/images/pages/evidence/applauding.svg`\n\nconst ThankYouSlide = ({ resultPageUrl, }) => {\n const [containerRef, setContainerFocus] = useFocus()\n\n React.useEffect(() => {\n setContainerFocus()\n }, [])\n\n const backToDashboard = () => {\n window.location.href = resultPageUrl\n }\n\n return (\n
\n
\n
\n

Your feedback was sent

\n

Thanks for sharing your feedback!

\n
\n \"Two\n
\n \n
\n )\n}\n\nexport default ThankYouSlide\n","import * as React from 'react'\n\nimport ActivitySurvey from '../activitySlides/activitySurvey'\nimport PostActivitySlide from '../activitySlides/postActivitySlide'\nimport ThankYouSlide from '../activitySlides/thankYouSlide'\n\nconst ActivityFollowUp = ({ activity, dispatch, responses, sessionID, saveActivitySurveyResponse, previewMode, userRole, }) => {\n const [showActivitySurvey, setShowActivitySurvey] = React.useState(false)\n const [submittedActivitySurvey, setSubmittedActivitySurvey] = React.useState(false)\n\n function onClickNext() { setShowActivitySurvey(true) }\n\n const resultPageUrl = userRole === 'student' ? `${window.postbuildEnv.DEFAULT_URL}/activity_sessions/${sessionID}` : window.postbuildEnv.DEFAULT_URL\n\n if (submittedActivitySurvey && !previewMode) {\n return \n }\n\n if (showActivitySurvey && !previewMode) {\n return (\n \n )\n }\n return \n}\n\nexport default ActivityFollowUp\n","/**\n * marked - a markdown parser\n * Copyright (c) 2011-2022, Christopher Jeffrey. (MIT Licensed)\n * https://github.com/markedjs/marked\n */\n\n/**\n * DO NOT EDIT THIS FILE\n * The code in this file is generated from files in ./src/\n */\n\nfunction getDefaults() {\n return {\n async: false,\n baseUrl: null,\n breaks: false,\n extensions: null,\n gfm: true,\n headerIds: true,\n headerPrefix: '',\n highlight: null,\n langPrefix: 'language-',\n mangle: true,\n pedantic: false,\n renderer: null,\n sanitize: false,\n sanitizer: null,\n silent: false,\n smartLists: false,\n smartypants: false,\n tokenizer: null,\n walkTokens: null,\n xhtml: false\n };\n}\n\nlet defaults = getDefaults();\n\nfunction changeDefaults(newDefaults) {\n defaults = newDefaults;\n}\n\n/**\n * Helpers\n */\nconst escapeTest = /[&<>\"']/;\nconst escapeReplace = /[&<>\"']/g;\nconst escapeTestNoEncode = /[<>\"']|&(?!#?\\w+;)/;\nconst escapeReplaceNoEncode = /[<>\"']|&(?!#?\\w+;)/g;\nconst escapeReplacements = {\n '&': '&',\n '<': '<',\n '>': '>',\n '\"': '"',\n \"'\": '''\n};\nconst getEscapeReplacement = (ch) => escapeReplacements[ch];\nfunction escape(html, encode) {\n if (encode) {\n if (escapeTest.test(html)) {\n return html.replace(escapeReplace, getEscapeReplacement);\n }\n } else {\n if (escapeTestNoEncode.test(html)) {\n return html.replace(escapeReplaceNoEncode, getEscapeReplacement);\n }\n }\n\n return html;\n}\n\nconst unescapeTest = /&(#(?:\\d+)|(?:#x[0-9A-Fa-f]+)|(?:\\w+));?/ig;\n\n/**\n * @param {string} html\n */\nfunction unescape(html) {\n // explicitly match decimal, hex, and named HTML entities\n return html.replace(unescapeTest, (_, n) => {\n n = n.toLowerCase();\n if (n === 'colon') return ':';\n if (n.charAt(0) === '#') {\n return n.charAt(1) === 'x'\n ? String.fromCharCode(parseInt(n.substring(2), 16))\n : String.fromCharCode(+n.substring(1));\n }\n return '';\n });\n}\n\nconst caret = /(^|[^\\[])\\^/g;\n\n/**\n * @param {string | RegExp} regex\n * @param {string} opt\n */\nfunction edit(regex, opt) {\n regex = typeof regex === 'string' ? regex : regex.source;\n opt = opt || '';\n const obj = {\n replace: (name, val) => {\n val = val.source || val;\n val = val.replace(caret, '$1');\n regex = regex.replace(name, val);\n return obj;\n },\n getRegex: () => {\n return new RegExp(regex, opt);\n }\n };\n return obj;\n}\n\nconst nonWordAndColonTest = /[^\\w:]/g;\nconst originIndependentUrl = /^$|^[a-z][a-z0-9+.-]*:|^[?#]/i;\n\n/**\n * @param {boolean} sanitize\n * @param {string} base\n * @param {string} href\n */\nfunction cleanUrl(sanitize, base, href) {\n if (sanitize) {\n let prot;\n try {\n prot = decodeURIComponent(unescape(href))\n .replace(nonWordAndColonTest, '')\n .toLowerCase();\n } catch (e) {\n return null;\n }\n if (prot.indexOf('javascript:') === 0 || prot.indexOf('vbscript:') === 0 || prot.indexOf('data:') === 0) {\n return null;\n }\n }\n if (base && !originIndependentUrl.test(href)) {\n href = resolveUrl(base, href);\n }\n try {\n href = encodeURI(href).replace(/%25/g, '%');\n } catch (e) {\n return null;\n }\n return href;\n}\n\nconst baseUrls = {};\nconst justDomain = /^[^:]+:\\/*[^/]*$/;\nconst protocol = /^([^:]+:)[\\s\\S]*$/;\nconst domain = /^([^:]+:\\/*[^/]*)[\\s\\S]*$/;\n\n/**\n * @param {string} base\n * @param {string} href\n */\nfunction resolveUrl(base, href) {\n if (!baseUrls[' ' + base]) {\n // we can ignore everything in base after the last slash of its path component,\n // but we might need to add _that_\n // https://tools.ietf.org/html/rfc3986#section-3\n if (justDomain.test(base)) {\n baseUrls[' ' + base] = base + '/';\n } else {\n baseUrls[' ' + base] = rtrim(base, '/', true);\n }\n }\n base = baseUrls[' ' + base];\n const relativeBase = base.indexOf(':') === -1;\n\n if (href.substring(0, 2) === '//') {\n if (relativeBase) {\n return href;\n }\n return base.replace(protocol, '$1') + href;\n } else if (href.charAt(0) === '/') {\n if (relativeBase) {\n return href;\n }\n return base.replace(domain, '$1') + href;\n } else {\n return base + href;\n }\n}\n\nconst noopTest = { exec: function noopTest() {} };\n\nfunction merge(obj) {\n let i = 1,\n target,\n key;\n\n for (; i < arguments.length; i++) {\n target = arguments[i];\n for (key in target) {\n if (Object.prototype.hasOwnProperty.call(target, key)) {\n obj[key] = target[key];\n }\n }\n }\n\n return obj;\n}\n\nfunction splitCells(tableRow, count) {\n // ensure that every cell-delimiting pipe has a space\n // before it to distinguish it from an escaped pipe\n const row = tableRow.replace(/\\|/g, (match, offset, str) => {\n let escaped = false,\n curr = offset;\n while (--curr >= 0 && str[curr] === '\\\\') escaped = !escaped;\n if (escaped) {\n // odd number of slashes means | is escaped\n // so we leave it alone\n return '|';\n } else {\n // add space before unescaped |\n return ' |';\n }\n }),\n cells = row.split(/ \\|/);\n let i = 0;\n\n // First/last cell in a row cannot be empty if it has no leading/trailing pipe\n if (!cells[0].trim()) { cells.shift(); }\n if (cells.length > 0 && !cells[cells.length - 1].trim()) { cells.pop(); }\n\n if (cells.length > count) {\n cells.splice(count);\n } else {\n while (cells.length < count) cells.push('');\n }\n\n for (; i < cells.length; i++) {\n // leading or trailing whitespace is ignored per the gfm spec\n cells[i] = cells[i].trim().replace(/\\\\\\|/g, '|');\n }\n return cells;\n}\n\n/**\n * Remove trailing 'c's. Equivalent to str.replace(/c*$/, '').\n * /c*$/ is vulnerable to REDOS.\n *\n * @param {string} str\n * @param {string} c\n * @param {boolean} invert Remove suffix of non-c chars instead. Default falsey.\n */\nfunction rtrim(str, c, invert) {\n const l = str.length;\n if (l === 0) {\n return '';\n }\n\n // Length of suffix matching the invert condition.\n let suffLen = 0;\n\n // Step left until we fail to match the invert condition.\n while (suffLen < l) {\n const currChar = str.charAt(l - suffLen - 1);\n if (currChar === c && !invert) {\n suffLen++;\n } else if (currChar !== c && invert) {\n suffLen++;\n } else {\n break;\n }\n }\n\n return str.slice(0, l - suffLen);\n}\n\nfunction findClosingBracket(str, b) {\n if (str.indexOf(b[1]) === -1) {\n return -1;\n }\n const l = str.length;\n let level = 0,\n i = 0;\n for (; i < l; i++) {\n if (str[i] === '\\\\') {\n i++;\n } else if (str[i] === b[0]) {\n level++;\n } else if (str[i] === b[1]) {\n level--;\n if (level < 0) {\n return i;\n }\n }\n }\n return -1;\n}\n\nfunction checkSanitizeDeprecation(opt) {\n if (opt && opt.sanitize && !opt.silent) {\n console.warn('marked(): sanitize and sanitizer parameters are deprecated since version 0.7.0, should not be used and will be removed in the future. Read more here: https://marked.js.org/#/USING_ADVANCED.md#options');\n }\n}\n\n// copied from https://stackoverflow.com/a/5450113/806777\n/**\n * @param {string} pattern\n * @param {number} count\n */\nfunction repeatString(pattern, count) {\n if (count < 1) {\n return '';\n }\n let result = '';\n while (count > 1) {\n if (count & 1) {\n result += pattern;\n }\n count >>= 1;\n pattern += pattern;\n }\n return result + pattern;\n}\n\nfunction outputLink(cap, link, raw, lexer) {\n const href = link.href;\n const title = link.title ? escape(link.title) : null;\n const text = cap[1].replace(/\\\\([\\[\\]])/g, '$1');\n\n if (cap[0].charAt(0) !== '!') {\n lexer.state.inLink = true;\n const token = {\n type: 'link',\n raw,\n href,\n title,\n text,\n tokens: lexer.inlineTokens(text)\n };\n lexer.state.inLink = false;\n return token;\n }\n return {\n type: 'image',\n raw,\n href,\n title,\n text: escape(text)\n };\n}\n\nfunction indentCodeCompensation(raw, text) {\n const matchIndentToCode = raw.match(/^(\\s+)(?:```)/);\n\n if (matchIndentToCode === null) {\n return text;\n }\n\n const indentToCode = matchIndentToCode[1];\n\n return text\n .split('\\n')\n .map(node => {\n const matchIndentInNode = node.match(/^\\s+/);\n if (matchIndentInNode === null) {\n return node;\n }\n\n const [indentInNode] = matchIndentInNode;\n\n if (indentInNode.length >= indentToCode.length) {\n return node.slice(indentToCode.length);\n }\n\n return node;\n })\n .join('\\n');\n}\n\n/**\n * Tokenizer\n */\nclass Tokenizer {\n constructor(options) {\n this.options = options || defaults;\n }\n\n space(src) {\n const cap = this.rules.block.newline.exec(src);\n if (cap && cap[0].length > 0) {\n return {\n type: 'space',\n raw: cap[0]\n };\n }\n }\n\n code(src) {\n const cap = this.rules.block.code.exec(src);\n if (cap) {\n const text = cap[0].replace(/^ {1,4}/gm, '');\n return {\n type: 'code',\n raw: cap[0],\n codeBlockStyle: 'indented',\n text: !this.options.pedantic\n ? rtrim(text, '\\n')\n : text\n };\n }\n }\n\n fences(src) {\n const cap = this.rules.block.fences.exec(src);\n if (cap) {\n const raw = cap[0];\n const text = indentCodeCompensation(raw, cap[3] || '');\n\n return {\n type: 'code',\n raw,\n lang: cap[2] ? cap[2].trim() : cap[2],\n text\n };\n }\n }\n\n heading(src) {\n const cap = this.rules.block.heading.exec(src);\n if (cap) {\n let text = cap[2].trim();\n\n // remove trailing #s\n if (/#$/.test(text)) {\n const trimmed = rtrim(text, '#');\n if (this.options.pedantic) {\n text = trimmed.trim();\n } else if (!trimmed || / $/.test(trimmed)) {\n // CommonMark requires space before trailing #s\n text = trimmed.trim();\n }\n }\n\n return {\n type: 'heading',\n raw: cap[0],\n depth: cap[1].length,\n text,\n tokens: this.lexer.inline(text)\n };\n }\n }\n\n hr(src) {\n const cap = this.rules.block.hr.exec(src);\n if (cap) {\n return {\n type: 'hr',\n raw: cap[0]\n };\n }\n }\n\n blockquote(src) {\n const cap = this.rules.block.blockquote.exec(src);\n if (cap) {\n const text = cap[0].replace(/^ *>[ \\t]?/gm, '');\n\n return {\n type: 'blockquote',\n raw: cap[0],\n tokens: this.lexer.blockTokens(text, []),\n text\n };\n }\n }\n\n list(src) {\n let cap = this.rules.block.list.exec(src);\n if (cap) {\n let raw, istask, ischecked, indent, i, blankLine, endsWithBlankLine,\n line, nextLine, rawLine, itemContents, endEarly;\n\n let bull = cap[1].trim();\n const isordered = bull.length > 1;\n\n const list = {\n type: 'list',\n raw: '',\n ordered: isordered,\n start: isordered ? +bull.slice(0, -1) : '',\n loose: false,\n items: []\n };\n\n bull = isordered ? `\\\\d{1,9}\\\\${bull.slice(-1)}` : `\\\\${bull}`;\n\n if (this.options.pedantic) {\n bull = isordered ? bull : '[*+-]';\n }\n\n // Get next list item\n const itemRegex = new RegExp(`^( {0,3}${bull})((?:[\\t ][^\\\\n]*)?(?:\\\\n|$))`);\n\n // Check if current bullet point can start a new List Item\n while (src) {\n endEarly = false;\n if (!(cap = itemRegex.exec(src))) {\n break;\n }\n\n if (this.rules.block.hr.test(src)) { // End list if bullet was actually HR (possibly move into itemRegex?)\n break;\n }\n\n raw = cap[0];\n src = src.substring(raw.length);\n\n line = cap[2].split('\\n', 1)[0];\n nextLine = src.split('\\n', 1)[0];\n\n if (this.options.pedantic) {\n indent = 2;\n itemContents = line.trimLeft();\n } else {\n indent = cap[2].search(/[^ ]/); // Find first non-space char\n indent = indent > 4 ? 1 : indent; // Treat indented code blocks (> 4 spaces) as having only 1 indent\n itemContents = line.slice(indent);\n indent += cap[1].length;\n }\n\n blankLine = false;\n\n if (!line && /^ *$/.test(nextLine)) { // Items begin with at most one blank line\n raw += nextLine + '\\n';\n src = src.substring(nextLine.length + 1);\n endEarly = true;\n }\n\n if (!endEarly) {\n const nextBulletRegex = new RegExp(`^ {0,${Math.min(3, indent - 1)}}(?:[*+-]|\\\\d{1,9}[.)])((?: [^\\\\n]*)?(?:\\\\n|$))`);\n const hrRegex = new RegExp(`^ {0,${Math.min(3, indent - 1)}}((?:- *){3,}|(?:_ *){3,}|(?:\\\\* *){3,})(?:\\\\n+|$)`);\n const fencesBeginRegex = new RegExp(`^ {0,${Math.min(3, indent - 1)}}(?:\\`\\`\\`|~~~)`);\n const headingBeginRegex = new RegExp(`^ {0,${Math.min(3, indent - 1)}}#`);\n\n // Check if following lines should be included in List Item\n while (src) {\n rawLine = src.split('\\n', 1)[0];\n line = rawLine;\n\n // Re-align to follow commonmark nesting rules\n if (this.options.pedantic) {\n line = line.replace(/^ {1,4}(?=( {4})*[^ ])/g, ' ');\n }\n\n // End list item if found code fences\n if (fencesBeginRegex.test(line)) {\n break;\n }\n\n // End list item if found start of new heading\n if (headingBeginRegex.test(line)) {\n break;\n }\n\n // End list item if found start of new bullet\n if (nextBulletRegex.test(line)) {\n break;\n }\n\n // Horizontal rule found\n if (hrRegex.test(src)) {\n break;\n }\n\n if (line.search(/[^ ]/) >= indent || !line.trim()) { // Dedent if possible\n itemContents += '\\n' + line.slice(indent);\n } else if (!blankLine) { // Until blank line, item doesn't need indentation\n itemContents += '\\n' + line;\n } else { // Otherwise, improper indentation ends this item\n break;\n }\n\n if (!blankLine && !line.trim()) { // Check if current line is blank\n blankLine = true;\n }\n\n raw += rawLine + '\\n';\n src = src.substring(rawLine.length + 1);\n }\n }\n\n if (!list.loose) {\n // If the previous item ended with a blank line, the list is loose\n if (endsWithBlankLine) {\n list.loose = true;\n } else if (/\\n *\\n *$/.test(raw)) {\n endsWithBlankLine = true;\n }\n }\n\n // Check for task list items\n if (this.options.gfm) {\n istask = /^\\[[ xX]\\] /.exec(itemContents);\n if (istask) {\n ischecked = istask[0] !== '[ ] ';\n itemContents = itemContents.replace(/^\\[[ xX]\\] +/, '');\n }\n }\n\n list.items.push({\n type: 'list_item',\n raw,\n task: !!istask,\n checked: ischecked,\n loose: false,\n text: itemContents\n });\n\n list.raw += raw;\n }\n\n // Do not consume newlines at end of final item. Alternatively, make itemRegex *start* with any newlines to simplify/speed up endsWithBlankLine logic\n list.items[list.items.length - 1].raw = raw.trimRight();\n list.items[list.items.length - 1].text = itemContents.trimRight();\n list.raw = list.raw.trimRight();\n\n const l = list.items.length;\n\n // Item child tokens handled here at end because we needed to have the final item to trim it first\n for (i = 0; i < l; i++) {\n this.lexer.state.top = false;\n list.items[i].tokens = this.lexer.blockTokens(list.items[i].text, []);\n const spacers = list.items[i].tokens.filter(t => t.type === 'space');\n const hasMultipleLineBreaks = spacers.every(t => {\n const chars = t.raw.split('');\n let lineBreaks = 0;\n for (const char of chars) {\n if (char === '\\n') {\n lineBreaks += 1;\n }\n if (lineBreaks > 1) {\n return true;\n }\n }\n\n return false;\n });\n\n if (!list.loose && spacers.length && hasMultipleLineBreaks) {\n // Having a single line break doesn't mean a list is loose. A single line break is terminating the last list item\n list.loose = true;\n list.items[i].loose = true;\n }\n }\n\n return list;\n }\n }\n\n html(src) {\n const cap = this.rules.block.html.exec(src);\n if (cap) {\n const token = {\n type: 'html',\n raw: cap[0],\n pre: !this.options.sanitizer\n && (cap[1] === 'pre' || cap[1] === 'script' || cap[1] === 'style'),\n text: cap[0]\n };\n if (this.options.sanitize) {\n const text = this.options.sanitizer ? this.options.sanitizer(cap[0]) : escape(cap[0]);\n token.type = 'paragraph';\n token.text = text;\n token.tokens = this.lexer.inline(text);\n }\n return token;\n }\n }\n\n def(src) {\n const cap = this.rules.block.def.exec(src);\n if (cap) {\n if (cap[3]) cap[3] = cap[3].substring(1, cap[3].length - 1);\n const tag = cap[1].toLowerCase().replace(/\\s+/g, ' ');\n return {\n type: 'def',\n tag,\n raw: cap[0],\n href: cap[2],\n title: cap[3]\n };\n }\n }\n\n table(src) {\n const cap = this.rules.block.table.exec(src);\n if (cap) {\n const item = {\n type: 'table',\n header: splitCells(cap[1]).map(c => { return { text: c }; }),\n align: cap[2].replace(/^ *|\\| *$/g, '').split(/ *\\| */),\n rows: cap[3] && cap[3].trim() ? cap[3].replace(/\\n[ \\t]*$/, '').split('\\n') : []\n };\n\n if (item.header.length === item.align.length) {\n item.raw = cap[0];\n\n let l = item.align.length;\n let i, j, k, row;\n for (i = 0; i < l; i++) {\n if (/^ *-+: *$/.test(item.align[i])) {\n item.align[i] = 'right';\n } else if (/^ *:-+: *$/.test(item.align[i])) {\n item.align[i] = 'center';\n } else if (/^ *:-+ *$/.test(item.align[i])) {\n item.align[i] = 'left';\n } else {\n item.align[i] = null;\n }\n }\n\n l = item.rows.length;\n for (i = 0; i < l; i++) {\n item.rows[i] = splitCells(item.rows[i], item.header.length).map(c => { return { text: c }; });\n }\n\n // parse child tokens inside headers and cells\n\n // header child tokens\n l = item.header.length;\n for (j = 0; j < l; j++) {\n item.header[j].tokens = this.lexer.inline(item.header[j].text);\n }\n\n // cell child tokens\n l = item.rows.length;\n for (j = 0; j < l; j++) {\n row = item.rows[j];\n for (k = 0; k < row.length; k++) {\n row[k].tokens = this.lexer.inline(row[k].text);\n }\n }\n\n return item;\n }\n }\n }\n\n lheading(src) {\n const cap = this.rules.block.lheading.exec(src);\n if (cap) {\n return {\n type: 'heading',\n raw: cap[0],\n depth: cap[2].charAt(0) === '=' ? 1 : 2,\n text: cap[1],\n tokens: this.lexer.inline(cap[1])\n };\n }\n }\n\n paragraph(src) {\n const cap = this.rules.block.paragraph.exec(src);\n if (cap) {\n const text = cap[1].charAt(cap[1].length - 1) === '\\n'\n ? cap[1].slice(0, -1)\n : cap[1];\n return {\n type: 'paragraph',\n raw: cap[0],\n text,\n tokens: this.lexer.inline(text)\n };\n }\n }\n\n text(src) {\n const cap = this.rules.block.text.exec(src);\n if (cap) {\n return {\n type: 'text',\n raw: cap[0],\n text: cap[0],\n tokens: this.lexer.inline(cap[0])\n };\n }\n }\n\n escape(src) {\n const cap = this.rules.inline.escape.exec(src);\n if (cap) {\n return {\n type: 'escape',\n raw: cap[0],\n text: escape(cap[1])\n };\n }\n }\n\n tag(src) {\n const cap = this.rules.inline.tag.exec(src);\n if (cap) {\n if (!this.lexer.state.inLink && /^/i.test(cap[0])) {\n this.lexer.state.inLink = false;\n }\n if (!this.lexer.state.inRawBlock && /^<(pre|code|kbd|script)(\\s|>)/i.test(cap[0])) {\n this.lexer.state.inRawBlock = true;\n } else if (this.lexer.state.inRawBlock && /^<\\/(pre|code|kbd|script)(\\s|>)/i.test(cap[0])) {\n this.lexer.state.inRawBlock = false;\n }\n\n return {\n type: this.options.sanitize\n ? 'text'\n : 'html',\n raw: cap[0],\n inLink: this.lexer.state.inLink,\n inRawBlock: this.lexer.state.inRawBlock,\n text: this.options.sanitize\n ? (this.options.sanitizer\n ? this.options.sanitizer(cap[0])\n : escape(cap[0]))\n : cap[0]\n };\n }\n }\n\n link(src) {\n const cap = this.rules.inline.link.exec(src);\n if (cap) {\n const trimmedUrl = cap[2].trim();\n if (!this.options.pedantic && /^$/.test(trimmedUrl))) {\n return;\n }\n\n // ending angle bracket cannot be escaped\n const rtrimSlash = rtrim(trimmedUrl.slice(0, -1), '\\\\');\n if ((trimmedUrl.length - rtrimSlash.length) % 2 === 0) {\n return;\n }\n } else {\n // find closing parenthesis\n const lastParenIndex = findClosingBracket(cap[2], '()');\n if (lastParenIndex > -1) {\n const start = cap[0].indexOf('!') === 0 ? 5 : 4;\n const linkLen = start + cap[1].length + lastParenIndex;\n cap[2] = cap[2].substring(0, lastParenIndex);\n cap[0] = cap[0].substring(0, linkLen).trim();\n cap[3] = '';\n }\n }\n let href = cap[2];\n let title = '';\n if (this.options.pedantic) {\n // split pedantic href and title\n const link = /^([^'\"]*[^\\s])\\s+(['\"])(.*)\\2/.exec(href);\n\n if (link) {\n href = link[1];\n title = link[3];\n }\n } else {\n title = cap[3] ? cap[3].slice(1, -1) : '';\n }\n\n href = href.trim();\n if (/^$/.test(trimmedUrl))) {\n // pedantic allows starting angle bracket without ending angle bracket\n href = href.slice(1);\n } else {\n href = href.slice(1, -1);\n }\n }\n return outputLink(cap, {\n href: href ? href.replace(this.rules.inline._escapes, '$1') : href,\n title: title ? title.replace(this.rules.inline._escapes, '$1') : title\n }, cap[0], this.lexer);\n }\n }\n\n reflink(src, links) {\n let cap;\n if ((cap = this.rules.inline.reflink.exec(src))\n || (cap = this.rules.inline.nolink.exec(src))) {\n let link = (cap[2] || cap[1]).replace(/\\s+/g, ' ');\n link = links[link.toLowerCase()];\n if (!link || !link.href) {\n const text = cap[0].charAt(0);\n return {\n type: 'text',\n raw: text,\n text\n };\n }\n return outputLink(cap, link, cap[0], this.lexer);\n }\n }\n\n emStrong(src, maskedSrc, prevChar = '') {\n let match = this.rules.inline.emStrong.lDelim.exec(src);\n if (!match) return;\n\n // _ can't be between two alphanumerics. \\p{L}\\p{N} includes non-english alphabet/numbers as well\n if (match[3] && prevChar.match(/[\\p{L}\\p{N}]/u)) return;\n\n const nextChar = match[1] || match[2] || '';\n\n if (!nextChar || (nextChar && (prevChar === '' || this.rules.inline.punctuation.exec(prevChar)))) {\n const lLength = match[0].length - 1;\n let rDelim, rLength, delimTotal = lLength, midDelimTotal = 0;\n\n const endReg = match[0][0] === '*' ? this.rules.inline.emStrong.rDelimAst : this.rules.inline.emStrong.rDelimUnd;\n endReg.lastIndex = 0;\n\n // Clip maskedSrc to same section of string as src (move to lexer?)\n maskedSrc = maskedSrc.slice(-1 * src.length + lLength);\n\n while ((match = endReg.exec(maskedSrc)) != null) {\n rDelim = match[1] || match[2] || match[3] || match[4] || match[5] || match[6];\n\n if (!rDelim) continue; // skip single * in __abc*abc__\n\n rLength = rDelim.length;\n\n if (match[3] || match[4]) { // found another Left Delim\n delimTotal += rLength;\n continue;\n } else if (match[5] || match[6]) { // either Left or Right Delim\n if (lLength % 3 && !((lLength + rLength) % 3)) {\n midDelimTotal += rLength;\n continue; // CommonMark Emphasis Rules 9-10\n }\n }\n\n delimTotal -= rLength;\n\n if (delimTotal > 0) continue; // Haven't found enough closing delimiters\n\n // Remove extra characters. *a*** -> *a*\n rLength = Math.min(rLength, rLength + delimTotal + midDelimTotal);\n\n // Create `em` if smallest delimiter has odd char count. *a***\n if (Math.min(lLength, rLength) % 2) {\n const text = src.slice(1, lLength + match.index + rLength);\n return {\n type: 'em',\n raw: src.slice(0, lLength + match.index + rLength + 1),\n text,\n tokens: this.lexer.inlineTokens(text)\n };\n }\n\n // Create 'strong' if smallest delimiter has even char count. **a***\n const text = src.slice(2, lLength + match.index + rLength - 1);\n return {\n type: 'strong',\n raw: src.slice(0, lLength + match.index + rLength + 1),\n text,\n tokens: this.lexer.inlineTokens(text)\n };\n }\n }\n }\n\n codespan(src) {\n const cap = this.rules.inline.code.exec(src);\n if (cap) {\n let text = cap[2].replace(/\\n/g, ' ');\n const hasNonSpaceChars = /[^ ]/.test(text);\n const hasSpaceCharsOnBothEnds = /^ /.test(text) && / $/.test(text);\n if (hasNonSpaceChars && hasSpaceCharsOnBothEnds) {\n text = text.substring(1, text.length - 1);\n }\n text = escape(text, true);\n return {\n type: 'codespan',\n raw: cap[0],\n text\n };\n }\n }\n\n br(src) {\n const cap = this.rules.inline.br.exec(src);\n if (cap) {\n return {\n type: 'br',\n raw: cap[0]\n };\n }\n }\n\n del(src) {\n const cap = this.rules.inline.del.exec(src);\n if (cap) {\n return {\n type: 'del',\n raw: cap[0],\n text: cap[2],\n tokens: this.lexer.inlineTokens(cap[2])\n };\n }\n }\n\n autolink(src, mangle) {\n const cap = this.rules.inline.autolink.exec(src);\n if (cap) {\n let text, href;\n if (cap[2] === '@') {\n text = escape(this.options.mangle ? mangle(cap[1]) : cap[1]);\n href = 'mailto:' + text;\n } else {\n text = escape(cap[1]);\n href = text;\n }\n\n return {\n type: 'link',\n raw: cap[0],\n text,\n href,\n tokens: [\n {\n type: 'text',\n raw: text,\n text\n }\n ]\n };\n }\n }\n\n url(src, mangle) {\n let cap;\n if (cap = this.rules.inline.url.exec(src)) {\n let text, href;\n if (cap[2] === '@') {\n text = escape(this.options.mangle ? mangle(cap[0]) : cap[0]);\n href = 'mailto:' + text;\n } else {\n // do extended autolink path validation\n let prevCapZero;\n do {\n prevCapZero = cap[0];\n cap[0] = this.rules.inline._backpedal.exec(cap[0])[0];\n } while (prevCapZero !== cap[0]);\n text = escape(cap[0]);\n if (cap[1] === 'www.') {\n href = 'http://' + text;\n } else {\n href = text;\n }\n }\n return {\n type: 'link',\n raw: cap[0],\n text,\n href,\n tokens: [\n {\n type: 'text',\n raw: text,\n text\n }\n ]\n };\n }\n }\n\n inlineText(src, smartypants) {\n const cap = this.rules.inline.text.exec(src);\n if (cap) {\n let text;\n if (this.lexer.state.inRawBlock) {\n text = this.options.sanitize ? (this.options.sanitizer ? this.options.sanitizer(cap[0]) : escape(cap[0])) : cap[0];\n } else {\n text = escape(this.options.smartypants ? smartypants(cap[0]) : cap[0]);\n }\n return {\n type: 'text',\n raw: cap[0],\n text\n };\n }\n }\n}\n\n/**\n * Block-Level Grammar\n */\nconst block = {\n newline: /^(?: *(?:\\n|$))+/,\n code: /^( {4}[^\\n]+(?:\\n(?: *(?:\\n|$))*)?)+/,\n fences: /^ {0,3}(`{3,}(?=[^`\\n]*\\n)|~{3,})([^\\n]*)\\n(?:|([\\s\\S]*?)\\n)(?: {0,3}\\1[~`]* *(?=\\n|$)|$)/,\n hr: /^ {0,3}((?:-[\\t ]*){3,}|(?:_[ \\t]*){3,}|(?:\\*[ \\t]*){3,})(?:\\n+|$)/,\n heading: /^ {0,3}(#{1,6})(?=\\s|$)(.*)(?:\\n+|$)/,\n blockquote: /^( {0,3}> ?(paragraph|[^\\n]*)(?:\\n|$))+/,\n list: /^( {0,3}bull)([ \\t][^\\n]+?)?(?:\\n|$)/,\n html: '^ {0,3}(?:' // optional indentation\n + '<(script|pre|style|textarea)[\\\\s>][\\\\s\\\\S]*?(?:[^\\\\n]*\\\\n+|$)' // (1)\n + '|comment[^\\\\n]*(\\\\n+|$)' // (2)\n + '|<\\\\?[\\\\s\\\\S]*?(?:\\\\?>\\\\n*|$)' // (3)\n + '|\\\\n*|$)' // (4)\n + '|\\\\n*|$)' // (5)\n + '|)[\\\\s\\\\S]*?(?:(?:\\\\n *)+\\\\n|$)' // (6)\n + '|<(?!script|pre|style|textarea)([a-z][\\\\w-]*)(?:attribute)*? */?>(?=[ \\\\t]*(?:\\\\n|$))[\\\\s\\\\S]*?(?:(?:\\\\n *)+\\\\n|$)' // (7) open tag\n + '|(?=[ \\\\t]*(?:\\\\n|$))[\\\\s\\\\S]*?(?:(?:\\\\n *)+\\\\n|$)' // (7) closing tag\n + ')',\n def: /^ {0,3}\\[(label)\\]: *(?:\\n *)?]+)>?(?:(?: +(?:\\n *)?| *\\n *)(title))? *(?:\\n+|$)/,\n table: noopTest,\n lheading: /^([^\\n]+)\\n {0,3}(=+|-+) *(?:\\n+|$)/,\n // regex template, placeholders will be replaced according to different paragraph\n // interruption rules of commonmark and the original markdown spec:\n _paragraph: /^([^\\n]+(?:\\n(?!hr|heading|lheading|blockquote|fences|list|html|table| +\\n)[^\\n]+)*)/,\n text: /^[^\\n]+/\n};\n\nblock._label = /(?!\\s*\\])(?:\\\\.|[^\\[\\]\\\\])+/;\nblock._title = /(?:\"(?:\\\\\"?|[^\"\\\\])*\"|'[^'\\n]*(?:\\n[^'\\n]+)*\\n?'|\\([^()]*\\))/;\nblock.def = edit(block.def)\n .replace('label', block._label)\n .replace('title', block._title)\n .getRegex();\n\nblock.bullet = /(?:[*+-]|\\d{1,9}[.)])/;\nblock.listItemStart = edit(/^( *)(bull) */)\n .replace('bull', block.bullet)\n .getRegex();\n\nblock.list = edit(block.list)\n .replace(/bull/g, block.bullet)\n .replace('hr', '\\\\n+(?=\\\\1?(?:(?:- *){3,}|(?:_ *){3,}|(?:\\\\* *){3,})(?:\\\\n+|$))')\n .replace('def', '\\\\n+(?=' + block.def.source + ')')\n .getRegex();\n\nblock._tag = 'address|article|aside|base|basefont|blockquote|body|caption'\n + '|center|col|colgroup|dd|details|dialog|dir|div|dl|dt|fieldset|figcaption'\n + '|figure|footer|form|frame|frameset|h[1-6]|head|header|hr|html|iframe'\n + '|legend|li|link|main|menu|menuitem|meta|nav|noframes|ol|optgroup|option'\n + '|p|param|section|source|summary|table|tbody|td|tfoot|th|thead|title|tr'\n + '|track|ul';\nblock._comment = /|$)/;\nblock.html = edit(block.html, 'i')\n .replace('comment', block._comment)\n .replace('tag', block._tag)\n .replace('attribute', / +[a-zA-Z:_][\\w.:-]*(?: *= *\"[^\"\\n]*\"| *= *'[^'\\n]*'| *= *[^\\s\"'=<>`]+)?/)\n .getRegex();\n\nblock.paragraph = edit(block._paragraph)\n .replace('hr', block.hr)\n .replace('heading', ' {0,3}#{1,6} ')\n .replace('|lheading', '') // setex headings don't interrupt commonmark paragraphs\n .replace('|table', '')\n .replace('blockquote', ' {0,3}>')\n .replace('fences', ' {0,3}(?:`{3,}(?=[^`\\\\n]*\\\\n)|~{3,})[^\\\\n]*\\\\n')\n .replace('list', ' {0,3}(?:[*+-]|1[.)]) ') // only lists starting from 1 can interrupt\n .replace('html', ')|<(?:script|pre|style|textarea|!--)')\n .replace('tag', block._tag) // pars can be interrupted by type (6) html blocks\n .getRegex();\n\nblock.blockquote = edit(block.blockquote)\n .replace('paragraph', block.paragraph)\n .getRegex();\n\n/**\n * Normal Block Grammar\n */\n\nblock.normal = merge({}, block);\n\n/**\n * GFM Block Grammar\n */\n\nblock.gfm = merge({}, block.normal, {\n table: '^ *([^\\\\n ].*\\\\|.*)\\\\n' // Header\n + ' {0,3}(?:\\\\| *)?(:?-+:? *(?:\\\\| *:?-+:? *)*)(?:\\\\| *)?' // Align\n + '(?:\\\\n((?:(?! *\\\\n|hr|heading|blockquote|code|fences|list|html).*(?:\\\\n|$))*)\\\\n*|$)' // Cells\n});\n\nblock.gfm.table = edit(block.gfm.table)\n .replace('hr', block.hr)\n .replace('heading', ' {0,3}#{1,6} ')\n .replace('blockquote', ' {0,3}>')\n .replace('code', ' {4}[^\\\\n]')\n .replace('fences', ' {0,3}(?:`{3,}(?=[^`\\\\n]*\\\\n)|~{3,})[^\\\\n]*\\\\n')\n .replace('list', ' {0,3}(?:[*+-]|1[.)]) ') // only lists starting from 1 can interrupt\n .replace('html', ')|<(?:script|pre|style|textarea|!--)')\n .replace('tag', block._tag) // tables can be interrupted by type (6) html blocks\n .getRegex();\n\nblock.gfm.paragraph = edit(block._paragraph)\n .replace('hr', block.hr)\n .replace('heading', ' {0,3}#{1,6} ')\n .replace('|lheading', '') // setex headings don't interrupt commonmark paragraphs\n .replace('table', block.gfm.table) // interrupt paragraphs with table\n .replace('blockquote', ' {0,3}>')\n .replace('fences', ' {0,3}(?:`{3,}(?=[^`\\\\n]*\\\\n)|~{3,})[^\\\\n]*\\\\n')\n .replace('list', ' {0,3}(?:[*+-]|1[.)]) ') // only lists starting from 1 can interrupt\n .replace('html', ')|<(?:script|pre|style|textarea|!--)')\n .replace('tag', block._tag) // pars can be interrupted by type (6) html blocks\n .getRegex();\n/**\n * Pedantic grammar (original John Gruber's loose markdown specification)\n */\n\nblock.pedantic = merge({}, block.normal, {\n html: edit(\n '^ *(?:comment *(?:\\\\n|\\\\s*$)'\n + '|<(tag)[\\\\s\\\\S]+? *(?:\\\\n{2,}|\\\\s*$)' // closed tag\n + '|\\\\s]*)*?/?> *(?:\\\\n{2,}|\\\\s*$))')\n .replace('comment', block._comment)\n .replace(/tag/g, '(?!(?:'\n + 'a|em|strong|small|s|cite|q|dfn|abbr|data|time|code|var|samp|kbd|sub'\n + '|sup|i|b|u|mark|ruby|rt|rp|bdi|bdo|span|br|wbr|ins|del|img)'\n + '\\\\b)\\\\w+(?!:|[^\\\\w\\\\s@]*@)\\\\b')\n .getRegex(),\n def: /^ *\\[([^\\]]+)\\]: *]+)>?(?: +([\"(][^\\n]+[\")]))? *(?:\\n+|$)/,\n heading: /^(#{1,6})(.*)(?:\\n+|$)/,\n fences: noopTest, // fences not supported\n paragraph: edit(block.normal._paragraph)\n .replace('hr', block.hr)\n .replace('heading', ' *#{1,6} *[^\\n]')\n .replace('lheading', block.lheading)\n .replace('blockquote', ' {0,3}>')\n .replace('|fences', '')\n .replace('|list', '')\n .replace('|html', '')\n .getRegex()\n});\n\n/**\n * Inline-Level Grammar\n */\nconst inline = {\n escape: /^\\\\([!\"#$%&'()*+,\\-./:;<=>?@\\[\\]\\\\^_`{|}~])/,\n autolink: /^<(scheme:[^\\s\\x00-\\x1f<>]*|email)>/,\n url: noopTest,\n tag: '^comment'\n + '|^' // self-closing tag\n + '|^<[a-zA-Z][\\\\w-]*(?:attribute)*?\\\\s*/?>' // open tag\n + '|^<\\\\?[\\\\s\\\\S]*?\\\\?>' // processing instruction, e.g. \n + '|^' // declaration, e.g. \n + '|^', // CDATA section\n link: /^!?\\[(label)\\]\\(\\s*(href)(?:\\s+(title))?\\s*\\)/,\n reflink: /^!?\\[(label)\\]\\[(ref)\\]/,\n nolink: /^!?\\[(ref)\\](?:\\[\\])?/,\n reflinkSearch: 'reflink|nolink(?!\\\\()',\n emStrong: {\n lDelim: /^(?:\\*+(?:([punct_])|[^\\s*]))|^_+(?:([punct*])|([^\\s_]))/,\n // (1) and (2) can only be a Right Delimiter. (3) and (4) can only be Left. (5) and (6) can be either Left or Right.\n // () Skip orphan inside strong () Consume to delim (1) #*** (2) a***#, a*** (3) #***a, ***a (4) ***# (5) #***# (6) a***a\n rDelimAst: /^[^_*]*?\\_\\_[^_*]*?\\*[^_*]*?(?=\\_\\_)|[^*]+(?=[^*])|[punct_](\\*+)(?=[\\s]|$)|[^punct*_\\s](\\*+)(?=[punct_\\s]|$)|[punct_\\s](\\*+)(?=[^punct*_\\s])|[\\s](\\*+)(?=[punct_])|[punct_](\\*+)(?=[punct_])|[^punct*_\\s](\\*+)(?=[^punct*_\\s])/,\n rDelimUnd: /^[^_*]*?\\*\\*[^_*]*?\\_[^_*]*?(?=\\*\\*)|[^_]+(?=[^_])|[punct*](\\_+)(?=[\\s]|$)|[^punct*_\\s](\\_+)(?=[punct*\\s]|$)|[punct*\\s](\\_+)(?=[^punct*_\\s])|[\\s](\\_+)(?=[punct*])|[punct*](\\_+)(?=[punct*])/ // ^- Not allowed for _\n },\n code: /^(`+)([^`]|[^`][\\s\\S]*?[^`])\\1(?!`)/,\n br: /^( {2,}|\\\\)\\n(?!\\s*$)/,\n del: noopTest,\n text: /^(`+|[^`])(?:(?= {2,}\\n)|[\\s\\S]*?(?:(?=[\\\\?@\\\\[\\\\]`^{|}~';\ninline.punctuation = edit(inline.punctuation).replace(/punctuation/g, inline._punctuation).getRegex();\n\n// sequences em should skip over [title](link), `code`, \ninline.blockSkip = /\\[[^\\]]*?\\]\\([^\\)]*?\\)|`[^`]*?`|<[^>]*?>/g;\ninline.escapedEmSt = /\\\\\\*|\\\\_/g;\n\ninline._comment = edit(block._comment).replace('(?:-->|$)', '-->').getRegex();\n\ninline.emStrong.lDelim = edit(inline.emStrong.lDelim)\n .replace(/punct/g, inline._punctuation)\n .getRegex();\n\ninline.emStrong.rDelimAst = edit(inline.emStrong.rDelimAst, 'g')\n .replace(/punct/g, inline._punctuation)\n .getRegex();\n\ninline.emStrong.rDelimUnd = edit(inline.emStrong.rDelimUnd, 'g')\n .replace(/punct/g, inline._punctuation)\n .getRegex();\n\ninline._escapes = /\\\\([!\"#$%&'()*+,\\-./:;<=>?@\\[\\]\\\\^_`{|}~])/g;\n\ninline._scheme = /[a-zA-Z][a-zA-Z0-9+.-]{1,31}/;\ninline._email = /[a-zA-Z0-9.!#$%&'*+/=?^_`{|}~-]+(@)[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(?:\\.[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)+(?![-_])/;\ninline.autolink = edit(inline.autolink)\n .replace('scheme', inline._scheme)\n .replace('email', inline._email)\n .getRegex();\n\ninline._attribute = /\\s+[a-zA-Z:_][\\w.:-]*(?:\\s*=\\s*\"[^\"]*\"|\\s*=\\s*'[^']*'|\\s*=\\s*[^\\s\"'=<>`]+)?/;\n\ninline.tag = edit(inline.tag)\n .replace('comment', inline._comment)\n .replace('attribute', inline._attribute)\n .getRegex();\n\ninline._label = /(?:\\[(?:\\\\.|[^\\[\\]\\\\])*\\]|\\\\.|`[^`]*`|[^\\[\\]\\\\`])*?/;\ninline._href = /<(?:\\\\.|[^\\n<>\\\\])+>|[^\\s\\x00-\\x1f]*/;\ninline._title = /\"(?:\\\\\"?|[^\"\\\\])*\"|'(?:\\\\'?|[^'\\\\])*'|\\((?:\\\\\\)?|[^)\\\\])*\\)/;\n\ninline.link = edit(inline.link)\n .replace('label', inline._label)\n .replace('href', inline._href)\n .replace('title', inline._title)\n .getRegex();\n\ninline.reflink = edit(inline.reflink)\n .replace('label', inline._label)\n .replace('ref', block._label)\n .getRegex();\n\ninline.nolink = edit(inline.nolink)\n .replace('ref', block._label)\n .getRegex();\n\ninline.reflinkSearch = edit(inline.reflinkSearch, 'g')\n .replace('reflink', inline.reflink)\n .replace('nolink', inline.nolink)\n .getRegex();\n\n/**\n * Normal Inline Grammar\n */\n\ninline.normal = merge({}, inline);\n\n/**\n * Pedantic Inline Grammar\n */\n\ninline.pedantic = merge({}, inline.normal, {\n strong: {\n start: /^__|\\*\\*/,\n middle: /^__(?=\\S)([\\s\\S]*?\\S)__(?!_)|^\\*\\*(?=\\S)([\\s\\S]*?\\S)\\*\\*(?!\\*)/,\n endAst: /\\*\\*(?!\\*)/g,\n endUnd: /__(?!_)/g\n },\n em: {\n start: /^_|\\*/,\n middle: /^()\\*(?=\\S)([\\s\\S]*?\\S)\\*(?!\\*)|^_(?=\\S)([\\s\\S]*?\\S)_(?!_)/,\n endAst: /\\*(?!\\*)/g,\n endUnd: /_(?!_)/g\n },\n link: edit(/^!?\\[(label)\\]\\((.*?)\\)/)\n .replace('label', inline._label)\n .getRegex(),\n reflink: edit(/^!?\\[(label)\\]\\s*\\[([^\\]]*)\\]/)\n .replace('label', inline._label)\n .getRegex()\n});\n\n/**\n * GFM Inline Grammar\n */\n\ninline.gfm = merge({}, inline.normal, {\n escape: edit(inline.escape).replace('])', '~|])').getRegex(),\n _extended_email: /[A-Za-z0-9._+-]+(@)[a-zA-Z0-9-_]+(?:\\.[a-zA-Z0-9-_]*[a-zA-Z0-9])+(?![-_])/,\n url: /^((?:ftp|https?):\\/\\/|www\\.)(?:[a-zA-Z0-9\\-]+\\.?)+[^\\s<]*|^email/,\n _backpedal: /(?:[^?!.,:;*_~()&]+|\\([^)]*\\)|&(?![a-zA-Z0-9]+;$)|[?!.,:;*_~)]+(?!$))+/,\n del: /^(~~?)(?=[^\\s~])([\\s\\S]*?[^\\s~])\\1(?=[^~]|$)/,\n text: /^([`~]+|[^`~])(?:(?= {2,}\\n)|(?=[a-zA-Z0-9.!#$%&'*+\\/=?_`{\\|}~-]+@)|[\\s\\S]*?(?:(?=[\\\\ 0.5) {\n ch = 'x' + ch.toString(16);\n }\n out += '&#' + ch + ';';\n }\n\n return out;\n}\n\n/**\n * Block Lexer\n */\nclass Lexer {\n constructor(options) {\n this.tokens = [];\n this.tokens.links = Object.create(null);\n this.options = options || defaults;\n this.options.tokenizer = this.options.tokenizer || new Tokenizer();\n this.tokenizer = this.options.tokenizer;\n this.tokenizer.options = this.options;\n this.tokenizer.lexer = this;\n this.inlineQueue = [];\n this.state = {\n inLink: false,\n inRawBlock: false,\n top: true\n };\n\n const rules = {\n block: block.normal,\n inline: inline.normal\n };\n\n if (this.options.pedantic) {\n rules.block = block.pedantic;\n rules.inline = inline.pedantic;\n } else if (this.options.gfm) {\n rules.block = block.gfm;\n if (this.options.breaks) {\n rules.inline = inline.breaks;\n } else {\n rules.inline = inline.gfm;\n }\n }\n this.tokenizer.rules = rules;\n }\n\n /**\n * Expose Rules\n */\n static get rules() {\n return {\n block,\n inline\n };\n }\n\n /**\n * Static Lex Method\n */\n static lex(src, options) {\n const lexer = new Lexer(options);\n return lexer.lex(src);\n }\n\n /**\n * Static Lex Inline Method\n */\n static lexInline(src, options) {\n const lexer = new Lexer(options);\n return lexer.inlineTokens(src);\n }\n\n /**\n * Preprocessing\n */\n lex(src) {\n src = src\n .replace(/\\r\\n|\\r/g, '\\n');\n\n this.blockTokens(src, this.tokens);\n\n let next;\n while (next = this.inlineQueue.shift()) {\n this.inlineTokens(next.src, next.tokens);\n }\n\n return this.tokens;\n }\n\n /**\n * Lexing\n */\n blockTokens(src, tokens = []) {\n if (this.options.pedantic) {\n src = src.replace(/\\t/g, ' ').replace(/^ +$/gm, '');\n } else {\n src = src.replace(/^( *)(\\t+)/gm, (_, leading, tabs) => {\n return leading + ' '.repeat(tabs.length);\n });\n }\n\n let token, lastToken, cutSrc, lastParagraphClipped;\n\n while (src) {\n if (this.options.extensions\n && this.options.extensions.block\n && this.options.extensions.block.some((extTokenizer) => {\n if (token = extTokenizer.call({ lexer: this }, src, tokens)) {\n src = src.substring(token.raw.length);\n tokens.push(token);\n return true;\n }\n return false;\n })) {\n continue;\n }\n\n // newline\n if (token = this.tokenizer.space(src)) {\n src = src.substring(token.raw.length);\n if (token.raw.length === 1 && tokens.length > 0) {\n // if there's a single \\n as a spacer, it's terminating the last line,\n // so move it there so that we don't get unecessary paragraph tags\n tokens[tokens.length - 1].raw += '\\n';\n } else {\n tokens.push(token);\n }\n continue;\n }\n\n // code\n if (token = this.tokenizer.code(src)) {\n src = src.substring(token.raw.length);\n lastToken = tokens[tokens.length - 1];\n // An indented code block cannot interrupt a paragraph.\n if (lastToken && (lastToken.type === 'paragraph' || lastToken.type === 'text')) {\n lastToken.raw += '\\n' + token.raw;\n lastToken.text += '\\n' + token.text;\n this.inlineQueue[this.inlineQueue.length - 1].src = lastToken.text;\n } else {\n tokens.push(token);\n }\n continue;\n }\n\n // fences\n if (token = this.tokenizer.fences(src)) {\n src = src.substring(token.raw.length);\n tokens.push(token);\n continue;\n }\n\n // heading\n if (token = this.tokenizer.heading(src)) {\n src = src.substring(token.raw.length);\n tokens.push(token);\n continue;\n }\n\n // hr\n if (token = this.tokenizer.hr(src)) {\n src = src.substring(token.raw.length);\n tokens.push(token);\n continue;\n }\n\n // blockquote\n if (token = this.tokenizer.blockquote(src)) {\n src = src.substring(token.raw.length);\n tokens.push(token);\n continue;\n }\n\n // list\n if (token = this.tokenizer.list(src)) {\n src = src.substring(token.raw.length);\n tokens.push(token);\n continue;\n }\n\n // html\n if (token = this.tokenizer.html(src)) {\n src = src.substring(token.raw.length);\n tokens.push(token);\n continue;\n }\n\n // def\n if (token = this.tokenizer.def(src)) {\n src = src.substring(token.raw.length);\n lastToken = tokens[tokens.length - 1];\n if (lastToken && (lastToken.type === 'paragraph' || lastToken.type === 'text')) {\n lastToken.raw += '\\n' + token.raw;\n lastToken.text += '\\n' + token.raw;\n this.inlineQueue[this.inlineQueue.length - 1].src = lastToken.text;\n } else if (!this.tokens.links[token.tag]) {\n this.tokens.links[token.tag] = {\n href: token.href,\n title: token.title\n };\n }\n continue;\n }\n\n // table (gfm)\n if (token = this.tokenizer.table(src)) {\n src = src.substring(token.raw.length);\n tokens.push(token);\n continue;\n }\n\n // lheading\n if (token = this.tokenizer.lheading(src)) {\n src = src.substring(token.raw.length);\n tokens.push(token);\n continue;\n }\n\n // top-level paragraph\n // prevent paragraph consuming extensions by clipping 'src' to extension start\n cutSrc = src;\n if (this.options.extensions && this.options.extensions.startBlock) {\n let startIndex = Infinity;\n const tempSrc = src.slice(1);\n let tempStart;\n this.options.extensions.startBlock.forEach(function(getStartIndex) {\n tempStart = getStartIndex.call({ lexer: this }, tempSrc);\n if (typeof tempStart === 'number' && tempStart >= 0) { startIndex = Math.min(startIndex, tempStart); }\n });\n if (startIndex < Infinity && startIndex >= 0) {\n cutSrc = src.substring(0, startIndex + 1);\n }\n }\n if (this.state.top && (token = this.tokenizer.paragraph(cutSrc))) {\n lastToken = tokens[tokens.length - 1];\n if (lastParagraphClipped && lastToken.type === 'paragraph') {\n lastToken.raw += '\\n' + token.raw;\n lastToken.text += '\\n' + token.text;\n this.inlineQueue.pop();\n this.inlineQueue[this.inlineQueue.length - 1].src = lastToken.text;\n } else {\n tokens.push(token);\n }\n lastParagraphClipped = (cutSrc.length !== src.length);\n src = src.substring(token.raw.length);\n continue;\n }\n\n // text\n if (token = this.tokenizer.text(src)) {\n src = src.substring(token.raw.length);\n lastToken = tokens[tokens.length - 1];\n if (lastToken && lastToken.type === 'text') {\n lastToken.raw += '\\n' + token.raw;\n lastToken.text += '\\n' + token.text;\n this.inlineQueue.pop();\n this.inlineQueue[this.inlineQueue.length - 1].src = lastToken.text;\n } else {\n tokens.push(token);\n }\n continue;\n }\n\n if (src) {\n const errMsg = 'Infinite loop on byte: ' + src.charCodeAt(0);\n if (this.options.silent) {\n console.error(errMsg);\n break;\n } else {\n throw new Error(errMsg);\n }\n }\n }\n\n this.state.top = true;\n return tokens;\n }\n\n inline(src, tokens = []) {\n this.inlineQueue.push({ src, tokens });\n return tokens;\n }\n\n /**\n * Lexing/Compiling\n */\n inlineTokens(src, tokens = []) {\n let token, lastToken, cutSrc;\n\n // String with links masked to avoid interference with em and strong\n let maskedSrc = src;\n let match;\n let keepPrevChar, prevChar;\n\n // Mask out reflinks\n if (this.tokens.links) {\n const links = Object.keys(this.tokens.links);\n if (links.length > 0) {\n while ((match = this.tokenizer.rules.inline.reflinkSearch.exec(maskedSrc)) != null) {\n if (links.includes(match[0].slice(match[0].lastIndexOf('[') + 1, -1))) {\n maskedSrc = maskedSrc.slice(0, match.index) + '[' + repeatString('a', match[0].length - 2) + ']' + maskedSrc.slice(this.tokenizer.rules.inline.reflinkSearch.lastIndex);\n }\n }\n }\n }\n // Mask out other blocks\n while ((match = this.tokenizer.rules.inline.blockSkip.exec(maskedSrc)) != null) {\n maskedSrc = maskedSrc.slice(0, match.index) + '[' + repeatString('a', match[0].length - 2) + ']' + maskedSrc.slice(this.tokenizer.rules.inline.blockSkip.lastIndex);\n }\n\n // Mask out escaped em & strong delimiters\n while ((match = this.tokenizer.rules.inline.escapedEmSt.exec(maskedSrc)) != null) {\n maskedSrc = maskedSrc.slice(0, match.index) + '++' + maskedSrc.slice(this.tokenizer.rules.inline.escapedEmSt.lastIndex);\n }\n\n while (src) {\n if (!keepPrevChar) {\n prevChar = '';\n }\n keepPrevChar = false;\n\n // extensions\n if (this.options.extensions\n && this.options.extensions.inline\n && this.options.extensions.inline.some((extTokenizer) => {\n if (token = extTokenizer.call({ lexer: this }, src, tokens)) {\n src = src.substring(token.raw.length);\n tokens.push(token);\n return true;\n }\n return false;\n })) {\n continue;\n }\n\n // escape\n if (token = this.tokenizer.escape(src)) {\n src = src.substring(token.raw.length);\n tokens.push(token);\n continue;\n }\n\n // tag\n if (token = this.tokenizer.tag(src)) {\n src = src.substring(token.raw.length);\n lastToken = tokens[tokens.length - 1];\n if (lastToken && token.type === 'text' && lastToken.type === 'text') {\n lastToken.raw += token.raw;\n lastToken.text += token.text;\n } else {\n tokens.push(token);\n }\n continue;\n }\n\n // link\n if (token = this.tokenizer.link(src)) {\n src = src.substring(token.raw.length);\n tokens.push(token);\n continue;\n }\n\n // reflink, nolink\n if (token = this.tokenizer.reflink(src, this.tokens.links)) {\n src = src.substring(token.raw.length);\n lastToken = tokens[tokens.length - 1];\n if (lastToken && token.type === 'text' && lastToken.type === 'text') {\n lastToken.raw += token.raw;\n lastToken.text += token.text;\n } else {\n tokens.push(token);\n }\n continue;\n }\n\n // em & strong\n if (token = this.tokenizer.emStrong(src, maskedSrc, prevChar)) {\n src = src.substring(token.raw.length);\n tokens.push(token);\n continue;\n }\n\n // code\n if (token = this.tokenizer.codespan(src)) {\n src = src.substring(token.raw.length);\n tokens.push(token);\n continue;\n }\n\n // br\n if (token = this.tokenizer.br(src)) {\n src = src.substring(token.raw.length);\n tokens.push(token);\n continue;\n }\n\n // del (gfm)\n if (token = this.tokenizer.del(src)) {\n src = src.substring(token.raw.length);\n tokens.push(token);\n continue;\n }\n\n // autolink\n if (token = this.tokenizer.autolink(src, mangle)) {\n src = src.substring(token.raw.length);\n tokens.push(token);\n continue;\n }\n\n // url (gfm)\n if (!this.state.inLink && (token = this.tokenizer.url(src, mangle))) {\n src = src.substring(token.raw.length);\n tokens.push(token);\n continue;\n }\n\n // text\n // prevent inlineText consuming extensions by clipping 'src' to extension start\n cutSrc = src;\n if (this.options.extensions && this.options.extensions.startInline) {\n let startIndex = Infinity;\n const tempSrc = src.slice(1);\n let tempStart;\n this.options.extensions.startInline.forEach(function(getStartIndex) {\n tempStart = getStartIndex.call({ lexer: this }, tempSrc);\n if (typeof tempStart === 'number' && tempStart >= 0) { startIndex = Math.min(startIndex, tempStart); }\n });\n if (startIndex < Infinity && startIndex >= 0) {\n cutSrc = src.substring(0, startIndex + 1);\n }\n }\n if (token = this.tokenizer.inlineText(cutSrc, smartypants)) {\n src = src.substring(token.raw.length);\n if (token.raw.slice(-1) !== '_') { // Track prevChar before string of ____ started\n prevChar = token.raw.slice(-1);\n }\n keepPrevChar = true;\n lastToken = tokens[tokens.length - 1];\n if (lastToken && lastToken.type === 'text') {\n lastToken.raw += token.raw;\n lastToken.text += token.text;\n } else {\n tokens.push(token);\n }\n continue;\n }\n\n if (src) {\n const errMsg = 'Infinite loop on byte: ' + src.charCodeAt(0);\n if (this.options.silent) {\n console.error(errMsg);\n break;\n } else {\n throw new Error(errMsg);\n }\n }\n }\n\n return tokens;\n }\n}\n\n/**\n * Renderer\n */\nclass Renderer {\n constructor(options) {\n this.options = options || defaults;\n }\n\n code(code, infostring, escaped) {\n const lang = (infostring || '').match(/\\S*/)[0];\n if (this.options.highlight) {\n const out = this.options.highlight(code, lang);\n if (out != null && out !== code) {\n escaped = true;\n code = out;\n }\n }\n\n code = code.replace(/\\n$/, '') + '\\n';\n\n if (!lang) {\n return '
'\n        + (escaped ? code : escape(code, true))\n        + '
\\n';\n }\n\n return '
'\n      + (escaped ? code : escape(code, true))\n      + '
\\n';\n }\n\n /**\n * @param {string} quote\n */\n blockquote(quote) {\n return `
\\n${quote}
\\n`;\n }\n\n html(html) {\n return html;\n }\n\n /**\n * @param {string} text\n * @param {string} level\n * @param {string} raw\n * @param {any} slugger\n */\n heading(text, level, raw, slugger) {\n if (this.options.headerIds) {\n const id = this.options.headerPrefix + slugger.slug(raw);\n return `${text}\\n`;\n }\n\n // ignore IDs\n return `${text}\\n`;\n }\n\n hr() {\n return this.options.xhtml ? '
\\n' : '
\\n';\n }\n\n list(body, ordered, start) {\n const type = ordered ? 'ol' : 'ul',\n startatt = (ordered && start !== 1) ? (' start=\"' + start + '\"') : '';\n return '<' + type + startatt + '>\\n' + body + '\\n';\n }\n\n /**\n * @param {string} text\n */\n listitem(text) {\n return `
  • ${text}
  • \\n`;\n }\n\n checkbox(checked) {\n return ' ';\n }\n\n /**\n * @param {string} text\n */\n paragraph(text) {\n return `

    ${text}

    \\n`;\n }\n\n /**\n * @param {string} header\n * @param {string} body\n */\n table(header, body) {\n if (body) body = `${body}`;\n\n return '\\n'\n + '\\n'\n + header\n + '\\n'\n + body\n + '
    \\n';\n }\n\n /**\n * @param {string} content\n */\n tablerow(content) {\n return `\\n${content}\\n`;\n }\n\n tablecell(content, flags) {\n const type = flags.header ? 'th' : 'td';\n const tag = flags.align\n ? `<${type} align=\"${flags.align}\">`\n : `<${type}>`;\n return tag + content + `\\n`;\n }\n\n /**\n * span level renderer\n * @param {string} text\n */\n strong(text) {\n return `${text}`;\n }\n\n /**\n * @param {string} text\n */\n em(text) {\n return `${text}`;\n }\n\n /**\n * @param {string} text\n */\n codespan(text) {\n return `${text}`;\n }\n\n br() {\n return this.options.xhtml ? '
    ' : '
    ';\n }\n\n /**\n * @param {string} text\n */\n del(text) {\n return `${text}`;\n }\n\n /**\n * @param {string} href\n * @param {string} title\n * @param {string} text\n */\n link(href, title, text) {\n href = cleanUrl(this.options.sanitize, this.options.baseUrl, href);\n if (href === null) {\n return text;\n }\n let out = '
    ';\n return out;\n }\n\n /**\n * @param {string} href\n * @param {string} title\n * @param {string} text\n */\n image(href, title, text) {\n href = cleanUrl(this.options.sanitize, this.options.baseUrl, href);\n if (href === null) {\n return text;\n }\n\n let out = `\"${text}\"`;\n' : '>';\n return out;\n }\n\n text(text) {\n return text;\n }\n}\n\n/**\n * TextRenderer\n * returns only the textual part of the token\n */\nclass TextRenderer {\n // no need for block level renderers\n strong(text) {\n return text;\n }\n\n em(text) {\n return text;\n }\n\n codespan(text) {\n return text;\n }\n\n del(text) {\n return text;\n }\n\n html(text) {\n return text;\n }\n\n text(text) {\n return text;\n }\n\n link(href, title, text) {\n return '' + text;\n }\n\n image(href, title, text) {\n return '' + text;\n }\n\n br() {\n return '';\n }\n}\n\n/**\n * Slugger generates header id\n */\nclass Slugger {\n constructor() {\n this.seen = {};\n }\n\n /**\n * @param {string} value\n */\n serialize(value) {\n return value\n .toLowerCase()\n .trim()\n // remove html tags\n .replace(/<[!\\/a-z].*?>/ig, '')\n // remove unwanted chars\n .replace(/[\\u2000-\\u206F\\u2E00-\\u2E7F\\\\'!\"#$%&()*+,./:;<=>?@[\\]^`{|}~]/g, '')\n .replace(/\\s/g, '-');\n }\n\n /**\n * Finds the next safe (unique) slug to use\n * @param {string} originalSlug\n * @param {boolean} isDryRun\n */\n getNextSafeSlug(originalSlug, isDryRun) {\n let slug = originalSlug;\n let occurenceAccumulator = 0;\n if (this.seen.hasOwnProperty(slug)) {\n occurenceAccumulator = this.seen[originalSlug];\n do {\n occurenceAccumulator++;\n slug = originalSlug + '-' + occurenceAccumulator;\n } while (this.seen.hasOwnProperty(slug));\n }\n if (!isDryRun) {\n this.seen[originalSlug] = occurenceAccumulator;\n this.seen[slug] = 0;\n }\n return slug;\n }\n\n /**\n * Convert string to unique id\n * @param {object} [options]\n * @param {boolean} [options.dryrun] Generates the next unique slug without\n * updating the internal accumulator.\n */\n slug(value, options = {}) {\n const slug = this.serialize(value);\n return this.getNextSafeSlug(slug, options.dryrun);\n }\n}\n\n/**\n * Parsing & Compiling\n */\nclass Parser {\n constructor(options) {\n this.options = options || defaults;\n this.options.renderer = this.options.renderer || new Renderer();\n this.renderer = this.options.renderer;\n this.renderer.options = this.options;\n this.textRenderer = new TextRenderer();\n this.slugger = new Slugger();\n }\n\n /**\n * Static Parse Method\n */\n static parse(tokens, options) {\n const parser = new Parser(options);\n return parser.parse(tokens);\n }\n\n /**\n * Static Parse Inline Method\n */\n static parseInline(tokens, options) {\n const parser = new Parser(options);\n return parser.parseInline(tokens);\n }\n\n /**\n * Parse Loop\n */\n parse(tokens, top = true) {\n let out = '',\n i,\n j,\n k,\n l2,\n l3,\n row,\n cell,\n header,\n body,\n token,\n ordered,\n start,\n loose,\n itemBody,\n item,\n checked,\n task,\n checkbox,\n ret;\n\n const l = tokens.length;\n for (i = 0; i < l; i++) {\n token = tokens[i];\n\n // Run any renderer extensions\n if (this.options.extensions && this.options.extensions.renderers && this.options.extensions.renderers[token.type]) {\n ret = this.options.extensions.renderers[token.type].call({ parser: this }, token);\n if (ret !== false || !['space', 'hr', 'heading', 'code', 'table', 'blockquote', 'list', 'html', 'paragraph', 'text'].includes(token.type)) {\n out += ret || '';\n continue;\n }\n }\n\n switch (token.type) {\n case 'space': {\n continue;\n }\n case 'hr': {\n out += this.renderer.hr();\n continue;\n }\n case 'heading': {\n out += this.renderer.heading(\n this.parseInline(token.tokens),\n token.depth,\n unescape(this.parseInline(token.tokens, this.textRenderer)),\n this.slugger);\n continue;\n }\n case 'code': {\n out += this.renderer.code(token.text,\n token.lang,\n token.escaped);\n continue;\n }\n case 'table': {\n header = '';\n\n // header\n cell = '';\n l2 = token.header.length;\n for (j = 0; j < l2; j++) {\n cell += this.renderer.tablecell(\n this.parseInline(token.header[j].tokens),\n { header: true, align: token.align[j] }\n );\n }\n header += this.renderer.tablerow(cell);\n\n body = '';\n l2 = token.rows.length;\n for (j = 0; j < l2; j++) {\n row = token.rows[j];\n\n cell = '';\n l3 = row.length;\n for (k = 0; k < l3; k++) {\n cell += this.renderer.tablecell(\n this.parseInline(row[k].tokens),\n { header: false, align: token.align[k] }\n );\n }\n\n body += this.renderer.tablerow(cell);\n }\n out += this.renderer.table(header, body);\n continue;\n }\n case 'blockquote': {\n body = this.parse(token.tokens);\n out += this.renderer.blockquote(body);\n continue;\n }\n case 'list': {\n ordered = token.ordered;\n start = token.start;\n loose = token.loose;\n l2 = token.items.length;\n\n body = '';\n for (j = 0; j < l2; j++) {\n item = token.items[j];\n checked = item.checked;\n task = item.task;\n\n itemBody = '';\n if (item.task) {\n checkbox = this.renderer.checkbox(checked);\n if (loose) {\n if (item.tokens.length > 0 && item.tokens[0].type === 'paragraph') {\n item.tokens[0].text = checkbox + ' ' + item.tokens[0].text;\n if (item.tokens[0].tokens && item.tokens[0].tokens.length > 0 && item.tokens[0].tokens[0].type === 'text') {\n item.tokens[0].tokens[0].text = checkbox + ' ' + item.tokens[0].tokens[0].text;\n }\n } else {\n item.tokens.unshift({\n type: 'text',\n text: checkbox\n });\n }\n } else {\n itemBody += checkbox;\n }\n }\n\n itemBody += this.parse(item.tokens, loose);\n body += this.renderer.listitem(itemBody, task, checked);\n }\n\n out += this.renderer.list(body, ordered, start);\n continue;\n }\n case 'html': {\n // TODO parse inline content if parameter markdown=1\n out += this.renderer.html(token.text);\n continue;\n }\n case 'paragraph': {\n out += this.renderer.paragraph(this.parseInline(token.tokens));\n continue;\n }\n case 'text': {\n body = token.tokens ? this.parseInline(token.tokens) : token.text;\n while (i + 1 < l && tokens[i + 1].type === 'text') {\n token = tokens[++i];\n body += '\\n' + (token.tokens ? this.parseInline(token.tokens) : token.text);\n }\n out += top ? this.renderer.paragraph(body) : body;\n continue;\n }\n\n default: {\n const errMsg = 'Token with \"' + token.type + '\" type was not found.';\n if (this.options.silent) {\n console.error(errMsg);\n return;\n } else {\n throw new Error(errMsg);\n }\n }\n }\n }\n\n return out;\n }\n\n /**\n * Parse Inline Tokens\n */\n parseInline(tokens, renderer) {\n renderer = renderer || this.renderer;\n let out = '',\n i,\n token,\n ret;\n\n const l = tokens.length;\n for (i = 0; i < l; i++) {\n token = tokens[i];\n\n // Run any renderer extensions\n if (this.options.extensions && this.options.extensions.renderers && this.options.extensions.renderers[token.type]) {\n ret = this.options.extensions.renderers[token.type].call({ parser: this }, token);\n if (ret !== false || !['escape', 'html', 'link', 'image', 'strong', 'em', 'codespan', 'br', 'del', 'text'].includes(token.type)) {\n out += ret || '';\n continue;\n }\n }\n\n switch (token.type) {\n case 'escape': {\n out += renderer.text(token.text);\n break;\n }\n case 'html': {\n out += renderer.html(token.text);\n break;\n }\n case 'link': {\n out += renderer.link(token.href, token.title, this.parseInline(token.tokens, renderer));\n break;\n }\n case 'image': {\n out += renderer.image(token.href, token.title, token.text);\n break;\n }\n case 'strong': {\n out += renderer.strong(this.parseInline(token.tokens, renderer));\n break;\n }\n case 'em': {\n out += renderer.em(this.parseInline(token.tokens, renderer));\n break;\n }\n case 'codespan': {\n out += renderer.codespan(token.text);\n break;\n }\n case 'br': {\n out += renderer.br();\n break;\n }\n case 'del': {\n out += renderer.del(this.parseInline(token.tokens, renderer));\n break;\n }\n case 'text': {\n out += renderer.text(token.text);\n break;\n }\n default: {\n const errMsg = 'Token with \"' + token.type + '\" type was not found.';\n if (this.options.silent) {\n console.error(errMsg);\n return;\n } else {\n throw new Error(errMsg);\n }\n }\n }\n }\n return out;\n }\n}\n\n/**\n * Marked\n */\nfunction marked(src, opt, callback) {\n // throw error in case of non string input\n if (typeof src === 'undefined' || src === null) {\n throw new Error('marked(): input parameter is undefined or null');\n }\n if (typeof src !== 'string') {\n throw new Error('marked(): input parameter is of type '\n + Object.prototype.toString.call(src) + ', string expected');\n }\n\n if (typeof opt === 'function') {\n callback = opt;\n opt = null;\n }\n\n opt = merge({}, marked.defaults, opt || {});\n checkSanitizeDeprecation(opt);\n\n if (callback) {\n const highlight = opt.highlight;\n let tokens;\n\n try {\n tokens = Lexer.lex(src, opt);\n } catch (e) {\n return callback(e);\n }\n\n const done = function(err) {\n let out;\n\n if (!err) {\n try {\n if (opt.walkTokens) {\n marked.walkTokens(tokens, opt.walkTokens);\n }\n out = Parser.parse(tokens, opt);\n } catch (e) {\n err = e;\n }\n }\n\n opt.highlight = highlight;\n\n return err\n ? callback(err)\n : callback(null, out);\n };\n\n if (!highlight || highlight.length < 3) {\n return done();\n }\n\n delete opt.highlight;\n\n if (!tokens.length) return done();\n\n let pending = 0;\n marked.walkTokens(tokens, function(token) {\n if (token.type === 'code') {\n pending++;\n setTimeout(() => {\n highlight(token.text, token.lang, function(err, code) {\n if (err) {\n return done(err);\n }\n if (code != null && code !== token.text) {\n token.text = code;\n token.escaped = true;\n }\n\n pending--;\n if (pending === 0) {\n done();\n }\n });\n }, 0);\n }\n });\n\n if (pending === 0) {\n done();\n }\n\n return;\n }\n\n function onError(e) {\n e.message += '\\nPlease report this to https://github.com/markedjs/marked.';\n if (opt.silent) {\n return '

    An error occurred:

    '\n        + escape(e.message + '', true)\n        + '
    ';\n }\n throw e;\n }\n\n try {\n const tokens = Lexer.lex(src, opt);\n if (opt.walkTokens) {\n if (opt.async) {\n return Promise.all(marked.walkTokens(tokens, opt.walkTokens))\n .then(() => {\n return Parser.parse(tokens, opt);\n })\n .catch(onError);\n }\n marked.walkTokens(tokens, opt.walkTokens);\n }\n return Parser.parse(tokens, opt);\n } catch (e) {\n onError(e);\n }\n}\n\n/**\n * Options\n */\n\nmarked.options =\nmarked.setOptions = function(opt) {\n merge(marked.defaults, opt);\n changeDefaults(marked.defaults);\n return marked;\n};\n\nmarked.getDefaults = getDefaults;\n\nmarked.defaults = defaults;\n\n/**\n * Use Extension\n */\n\nmarked.use = function(...args) {\n const opts = merge({}, ...args);\n const extensions = marked.defaults.extensions || { renderers: {}, childTokens: {} };\n let hasExtensions;\n\n args.forEach((pack) => {\n // ==-- Parse \"addon\" extensions --== //\n if (pack.extensions) {\n hasExtensions = true;\n pack.extensions.forEach((ext) => {\n if (!ext.name) {\n throw new Error('extension name required');\n }\n if (ext.renderer) { // Renderer extensions\n const prevRenderer = extensions.renderers ? extensions.renderers[ext.name] : null;\n if (prevRenderer) {\n // Replace extension with func to run new extension but fall back if false\n extensions.renderers[ext.name] = function(...args) {\n let ret = ext.renderer.apply(this, args);\n if (ret === false) {\n ret = prevRenderer.apply(this, args);\n }\n return ret;\n };\n } else {\n extensions.renderers[ext.name] = ext.renderer;\n }\n }\n if (ext.tokenizer) { // Tokenizer Extensions\n if (!ext.level || (ext.level !== 'block' && ext.level !== 'inline')) {\n throw new Error(\"extension level must be 'block' or 'inline'\");\n }\n if (extensions[ext.level]) {\n extensions[ext.level].unshift(ext.tokenizer);\n } else {\n extensions[ext.level] = [ext.tokenizer];\n }\n if (ext.start) { // Function to check for start of token\n if (ext.level === 'block') {\n if (extensions.startBlock) {\n extensions.startBlock.push(ext.start);\n } else {\n extensions.startBlock = [ext.start];\n }\n } else if (ext.level === 'inline') {\n if (extensions.startInline) {\n extensions.startInline.push(ext.start);\n } else {\n extensions.startInline = [ext.start];\n }\n }\n }\n }\n if (ext.childTokens) { // Child tokens to be visited by walkTokens\n extensions.childTokens[ext.name] = ext.childTokens;\n }\n });\n }\n\n // ==-- Parse \"overwrite\" extensions --== //\n if (pack.renderer) {\n const renderer = marked.defaults.renderer || new Renderer();\n for (const prop in pack.renderer) {\n const prevRenderer = renderer[prop];\n // Replace renderer with func to run extension, but fall back if false\n renderer[prop] = (...args) => {\n let ret = pack.renderer[prop].apply(renderer, args);\n if (ret === false) {\n ret = prevRenderer.apply(renderer, args);\n }\n return ret;\n };\n }\n opts.renderer = renderer;\n }\n if (pack.tokenizer) {\n const tokenizer = marked.defaults.tokenizer || new Tokenizer();\n for (const prop in pack.tokenizer) {\n const prevTokenizer = tokenizer[prop];\n // Replace tokenizer with func to run extension, but fall back if false\n tokenizer[prop] = (...args) => {\n let ret = pack.tokenizer[prop].apply(tokenizer, args);\n if (ret === false) {\n ret = prevTokenizer.apply(tokenizer, args);\n }\n return ret;\n };\n }\n opts.tokenizer = tokenizer;\n }\n\n // ==-- Parse WalkTokens extensions --== //\n if (pack.walkTokens) {\n const walkTokens = marked.defaults.walkTokens;\n opts.walkTokens = function(token) {\n let values = [];\n values.push(pack.walkTokens.call(this, token));\n if (walkTokens) {\n values = values.concat(walkTokens.call(this, token));\n }\n return values;\n };\n }\n\n if (hasExtensions) {\n opts.extensions = extensions;\n }\n\n marked.setOptions(opts);\n });\n};\n\n/**\n * Run callback for every token\n */\n\nmarked.walkTokens = function(tokens, callback) {\n let values = [];\n for (const token of tokens) {\n values = values.concat(callback.call(marked, token));\n switch (token.type) {\n case 'table': {\n for (const cell of token.header) {\n values = values.concat(marked.walkTokens(cell.tokens, callback));\n }\n for (const row of token.rows) {\n for (const cell of row) {\n values = values.concat(marked.walkTokens(cell.tokens, callback));\n }\n }\n break;\n }\n case 'list': {\n values = values.concat(marked.walkTokens(token.items, callback));\n break;\n }\n default: {\n if (marked.defaults.extensions && marked.defaults.extensions.childTokens && marked.defaults.extensions.childTokens[token.type]) { // Walk any extensions\n marked.defaults.extensions.childTokens[token.type].forEach(function(childTokens) {\n values = values.concat(marked.walkTokens(token[childTokens], callback));\n });\n } else if (token.tokens) {\n values = values.concat(marked.walkTokens(token.tokens, callback));\n }\n }\n }\n }\n return values;\n};\n\n/**\n * Parse Inline\n * @param {string} src\n */\nmarked.parseInline = function(src, opt) {\n // throw error in case of non string input\n if (typeof src === 'undefined' || src === null) {\n throw new Error('marked.parseInline(): input parameter is undefined or null');\n }\n if (typeof src !== 'string') {\n throw new Error('marked.parseInline(): input parameter is of type '\n + Object.prototype.toString.call(src) + ', string expected');\n }\n\n opt = merge({}, marked.defaults, opt || {});\n checkSanitizeDeprecation(opt);\n\n try {\n const tokens = Lexer.lexInline(src, opt);\n if (opt.walkTokens) {\n marked.walkTokens(tokens, opt.walkTokens);\n }\n return Parser.parseInline(tokens, opt);\n } catch (e) {\n e.message += '\\nPlease report this to https://github.com/markedjs/marked.';\n if (opt.silent) {\n return '

    An error occurred:

    '\n        + escape(e.message + '', true)\n        + '
    ';\n }\n throw e;\n }\n};\n\n/**\n * Expose\n */\nmarked.Parser = Parser;\nmarked.parser = Parser.parse;\nmarked.Renderer = Renderer;\nmarked.TextRenderer = TextRenderer;\nmarked.Lexer = Lexer;\nmarked.lexer = Lexer.lex;\nmarked.Tokenizer = Tokenizer;\nmarked.Slugger = Slugger;\nmarked.parse = marked;\n\nconst options = marked.options;\nconst setOptions = marked.setOptions;\nconst use = marked.use;\nconst walkTokens = marked.walkTokens;\nconst parseInline = marked.parseInline;\nconst parse = marked;\nconst parser = Parser.parse;\nconst lexer = Lexer.lex;\n\nexport { Lexer, Parser, Renderer, Slugger, TextRenderer, Tokenizer, defaults, getDefaults, lexer, marked, options, parse, parseInline, parser, setOptions, use, walkTokens };\n","import { marked } from 'marked';\nimport * as React from \"react\";\nimport { stripHtml } from \"string-strip-html\";\n\nimport { Modal, Tooltip } from '../../../Shared/index';\n\nexport const HeaderImage = ({ headerImage, passage }) => {\n\n const [imageUrlToVisit, setImageUrlToVisit] = React.useState('');\n const [imageAttributionModalOpen, setImageAttributionModalOpen] = React.useState(false);\n\n function handleStayClick() {\n setImageAttributionModalOpen(false);\n }\n\n function handleLeaveClick() {\n if (!imageUrlToVisit) {\n setImageAttributionModalOpen(false);\n }\n window.open(imageUrlToVisit, \"_blank\");\n setImageAttributionModalOpen(false);\n }\n\n function handleImageAttributionClick(e: any) {\n if(e.target.href) {\n e.preventDefault();\n setImageUrlToVisit(e.target.href);\n setImageAttributionModalOpen(true);\n }\n }\n\n function renderImageAttributionModal() {\n return(\n \n
    \n

    Wait! Are you sure you want to leave?

    \n

    You are about to leave the activity. You will be taken to a different website.

    \n
    \n \n \n
    \n
    \n
    \n );\n }\n\n const tooltipText = passage.image_attribution ? marked(passage.image_attribution) : '';\n\n return(\n \n {imageAttributionModalOpen && renderImageAttributionModal()}\n
    \n {headerImage}\n
    \n {passage.image_caption &&

    {stripHtml(passage.image_caption).result}

    }\n {passage.image_attribution && }\n
    \n
    \n
    \n );\n}\n\nexport default HeaderImage;\n","import * as React from \"react\"\nimport ReactHtmlParser from 'react-html-parser'\n\nimport HeaderImage from './headerImage'\n\nimport useFocus from '../../../Shared/hooks/useFocus'\nimport { READ_PASSAGE_STEP, addPTagsToPassages, onMobile } from '../../helpers/containerActionHelpers'\n\nconst ReadPassageContainer = ({\n activities,\n activeStep,\n handleReadPassageContainerScroll,\n hasStartedPromptSteps,\n hasStartedReadPassageStep,\n scrolledToEndOfPassage,\n showReadTheDirectionsButton,\n transformMarkTags\n}) => {\n const [containerRef, setContainerFocus] = useFocus()\n\n React.useEffect(() => {\n if (!showReadTheDirectionsButton) {\n setContainerFocus()\n }\n }, [showReadTheDirectionsButton])\n\n const { currentActivity, } = activities\n if (!currentActivity) { return }\n\n const { title, passages, } = currentActivity\n const headerImage = passages[0].image_link && {passages[0].image_alt_text}\n let innerContainerClassName = \"read-passage-inner-container \"\n const innerPassageShouldBeBlurred = !hasStartedReadPassageStep || showReadTheDirectionsButton || (activeStep > READ_PASSAGE_STEP && !hasStartedPromptSteps)\n innerContainerClassName += innerPassageShouldBeBlurred ? 'blur' : ''\n\n if ((!hasStartedReadPassageStep || (activeStep > READ_PASSAGE_STEP && !hasStartedPromptSteps)) && onMobile()) {\n return \n }\n const formattedPassages = addPTagsToPassages(passages, scrolledToEndOfPassage)\n const formattedPassage = formattedPassages ? formattedPassages[0] : '';\n return (\n
    \n
    \n

    {title}

    \n \n
    {ReactHtmlParser(formattedPassage, { transform: transformMarkTags })}
    \n
    \n
    \n )\n}\n\nexport default ReadPassageContainer\n","import * as React from 'react'\n\nimport { bigCheckIcon, } from '../../../Shared/index'\n\nconst MINIMUM_STUDENT_HIGHLIGHT_COUNT = 2\n\nconst ReadAndHighlightTracker = ({\n scrolledToEndOfPassage,\n studentHighlights,\n handleClickDoneHighlighting,\n handleReadTheDirectionsButtonClick,\n showReadTheDirectionsButton\n}) => {\n const minimumMet = studentHighlights.length >= MINIMUM_STUDENT_HIGHLIGHT_COUNT\n let doneButton = \n if (scrolledToEndOfPassage && minimumMet) {\n doneButton = \n }\n if(showReadTheDirectionsButton) {\n return(\n
    \n \n
    \n )\n }\n return (\n
    \n {doneButton}\n
    \n
    \n {scrolledToEndOfPassage ? {bigCheckIcon.alt} :
    }\n Read the entire text\n
    \n
    \n {minimumMet ? {bigCheckIcon.alt} :
    }\n Highlight two sentences\n
    \n
    \n
    \n )\n}\n\nconst BottomNavigation = ({\n scrolledToEndOfPassage,\n studentHighlights,\n handleClickDoneHighlighting,\n handleReadTheDirectionsButtonClick,\n doneHighlighting,\n handleDoneReadingClick,\n hasStartedPromptSteps,\n hasStartedReadPassageStep,\n handleStartPromptStepsClick,\n handleStartReadingPassageClick,\n inReflection,\n showReadTheDirectionsButton,\n showStepsSummary,\n toggleShowStepsSummary\n}) => {\n\n if (!hasStartedReadPassageStep) {\n return (\n
    \n \n
    \n )\n }\n\n if (hasStartedReadPassageStep && !doneHighlighting) {\n return (\n \n )\n }\n\n if (inReflection) {\n return (\n
    \n \n
    \n )\n }\n\n if (!hasStartedPromptSteps) {\n return (\n
    \n \n
    \n )\n }\n\n if (showStepsSummary) {\n return (\n
    \n \n
    \n )\n }\n}\n\nexport default BottomNavigation\n","import * as React from 'react'\n\nimport useFocus from '../../../Shared/hooks/useFocus'\nimport { informationIcon } from '../../../Shared/index'\nimport { DEFAULT_HIGHLIGHT_PROMPT, } from '../../../Shared/utils/constants'\n\nconst READ_PASSAGE_STEP = 1\nconst promptDirections = [
  • Use information from the text to finish the sentence.
  • ,
  • Put the information in your own words.
  • ]\nconst highlightDirections = [
  • First, read the highlighting task below.
  • ,
  • Then, read the text and highlight sentences to complete the task.
  • ,
  • Screenreader users, please use your tab keys to navigate through the passage. Highlightable sentences are toggle-able buttons. Use the Enter key on a focused sentence to add it to your highlights or to remove it once it has already been highlighted.
  • ]\n\nconst renderDirections = (directionElementsArray: JSX.Element[]) => (\n
    \n

    Directions

    \n
      \n {directionElementsArray}\n
    \n
    \n)\n\nconst essentialKnowledgeSection = ({ essential_knowledge_text }) => {\n if(!essential_knowledge_text || essential_knowledge_text === '
    ') { return }\n\n return (\n
    \n
    \n {informationIcon.alt}\n

    Building Essential Knowledge

    \n
    \n
    \n
    \n )\n}\n\nconst DirectionsSection = ({ className, passage, inReflection, activeStep, }) => {\n const [containerRef, setContainerFocus] = useFocus()\n\n React.useEffect(() => {\n setContainerFocus()\n }, [inReflection])\n\n const uniquePartOfHighlightPrompt = passage.highlight_prompt ? passage.highlight_prompt.replace(DEFAULT_HIGHLIGHT_PROMPT, '') : ''\n if (inReflection) {\n return (\n
    \n
    \n

    Directions

    \n

    Great! Now take a moment to reflect on the sentences you highlighted. The ideas you highlighted may be helpful as you complete the writing prompts in the next section.

    \n
    \n
    \n )\n }\n\n if (activeStep > READ_PASSAGE_STEP) {\n return renderDirections(promptDirections)\n }\n\n return (\n
    \n {renderDirections(highlightDirections)}\n
    \n

    Task

    \n

    {DEFAULT_HIGHLIGHT_PROMPT}{uniquePartOfHighlightPrompt}

    \n
    \n {essentialKnowledgeSection(passage)}\n
    \n )\n}\n\nexport default DirectionsSection\n","import * as React from 'react'\n\nimport { removeIcon, } from '../../../Shared/index'\n\nconst DisplayStudentHighlight = ({ studentHighlight, removeHighlight, inReflection, }) => {\n function handleClickRemove() { removeHighlight(studentHighlight)}\n\n return (\n
    \n {studentHighlight}\n {inReflection ? : }\n
    \n )\n}\n\nexport default DisplayStudentHighlight\n","import * as React from 'react'\n\nimport DirectionsSection from './directionsSection'\nimport DisplayStudentHighlight from './displayStudentHighlight'\n\nimport useFocus from '../../../Shared/hooks/useFocus'\nimport { helpIcon, Tooltip } from '../../../Shared/index'\n\nconst ReadAndHighlightInstructions = ({ passage, activeStep, studentHighlights, removeHighlight, inReflection, }) => {\n const [containerRef, setContainerFocus] = useFocus()\n\n function handleRemoveHighlightClick(highlightText) {\n removeHighlight(highlightText, setContainerFocus)\n }\n\n let studentHighlightsOrHighlightInstructions = (\n
    \n

    Your highlights will appear here.

    \n
    \n )\n let readAndHighlightContainerClassName = 'read-and-highlight-container hide-on-mobile no-focus-outline'\n const tooltipTrigger = {helpIcon.alt}\n const tooltipText = \"

    How to highlight:


    Step 1 - Hover over a sentence


    Step 2 - Click, tap, or select the sentence


    If you change your mind about something you've highlighted, click, tap, or deselect the sentence again to remove the highlight.

    \"\n\n if (studentHighlights.length) {\n studentHighlightsOrHighlightInstructions = studentHighlights.map(sh => (\n )\n )\n readAndHighlightContainerClassName = 'read-and-highlight-container'\n }\n return (\n
    \n \n
    \n
    \n

    Highlights

    \n \n
    \n {studentHighlightsOrHighlightInstructions}\n
    \n
    \n )\n}\n\nexport default ReadAndHighlightInstructions\n","import * as React from 'react'\n\nimport useFocus from '../../../Shared/hooks/useFocus'\nimport { BECAUSE_PASSAGE_STEP_NUMBER, BUT_PASSAGE_STEP_NUMBER, READ_PASSAGE_STEP_NUMBER, SO_PASSAGE_STEP_NUMBER, whiteCheckGreenBackgroundIcon } from '../../../Shared/index'\n\nconst steps = {\n [READ_PASSAGE_STEP_NUMBER]: {\n html:

    Read a text and highlight sentences.

    ,\n stepNumber: READ_PASSAGE_STEP_NUMBER\n },\n [BECAUSE_PASSAGE_STEP_NUMBER]: {\n html:

    Expand a sentence using because to provide a reason.

    ,\n stepNumber: BECAUSE_PASSAGE_STEP_NUMBER\n },\n [BUT_PASSAGE_STEP_NUMBER]: {\n html:

    Expand a sentence using but to provide an opposing idea.

    ,\n stepNumber: BUT_PASSAGE_STEP_NUMBER\n },\n [SO_PASSAGE_STEP_NUMBER]: {\n html:

    Expand a sentence using so to provide a result.

    ,\n stepNumber: SO_PASSAGE_STEP_NUMBER\n }\n}\n\ninterface StepProps {\n step: {\n html: React.ReactElement,\n stepNumber: number\n },\n active?: boolean,\n completed?: boolean,\n handleClick?: () => void\n}\n\nconst Step = ({ active, completed, handleClick, step }: StepProps) => {\n const { html, stepNumber } = step;\n if (active) {\n return (\n
    \n \n
    \n )\n }\n\n if (completed) {\n return (\n
    \n
    \n {whiteCheckGreenBackgroundIcon.alt}\n Completed step:\n {html}\n
    \n
    \n )\n }\n\n return (\n
    \n
    \n
    {stepNumber}
    \n {html}\n
    \n
    \n )\n}\n\nconst StepOverview = ({ activeStep, handleClick, }) => {\n const [containerRef, setContainerFocus] = useFocus()\n\n React.useEffect(() => {\n setContainerFocus()\n }, [activeStep])\n\n if (activeStep === READ_PASSAGE_STEP_NUMBER) {\n return (\n
    \n

    Here’s what you’ll do

    \n \n \n \n \n
    \n )\n }\n\n return (\n
    \n

    Nice! Keep going!

    \n READ_PASSAGE_STEP_NUMBER}\n handleClick={handleClick}\n step={steps[READ_PASSAGE_STEP_NUMBER]}\n />\n BECAUSE_PASSAGE_STEP_NUMBER}\n handleClick={handleClick}\n step={steps[BECAUSE_PASSAGE_STEP_NUMBER]}\n />\n BUT_PASSAGE_STEP_NUMBER}\n handleClick={handleClick}\n step={steps[BUT_PASSAGE_STEP_NUMBER]}\n />\n SO_PASSAGE_STEP_NUMBER}\n handleClick={handleClick}\n step={steps[SO_PASSAGE_STEP_NUMBER]}\n />\n
    \n )\n}\n\nexport default StepOverview\n","import * as React from 'react';\nimport ContentEditable from 'react-contenteditable';\n\nconst enabledClearSrc = `${window.postbuildEnv.CDN_URL}/images/icons/clear-enabled.svg`\nconst disabledClearSrc = `${window.postbuildEnv.CDN_URL}/images/icons/clear-disabled.svg`\n\n\ninterface EditorContainerProps {\n promptText: string;\n stripHtml: (input: string) => any;\n html: string;\n disabled: boolean;\n handleFocus: (event: any) => void;\n handleKeyDown: (event: any) => void;\n innerRef: Function;\n handleTextChange: (event: any) => void;\n className: string;\n isResettable: boolean;\n}\n\nexport default class EditorContainer extends React.Component {\n componentDidMount() {\n window.addEventListener('paste', (e) => {\n e.preventDefault()\n return false\n }, true);\n }\n\n render() {\n const { disabled, html, innerRef, handleTextChange, className, handleFocus, handleKeyDown } = this.props\n return (\n
    \n \n
    \n )\n }\n}\n","export default !!(typeof window !== 'undefined' && window.document && window.document.createElement);","import canUseDOM from './canUseDOM';\n\n/* https://github.com/component/raf */\nvar prev = new Date().getTime();\n\nfunction fallback(fn) {\n var curr = new Date().getTime();\n var ms = Math.max(0, 16 - (curr - prev));\n var handle = setTimeout(fn, ms);\n prev = curr;\n return handle;\n}\n\nvar vendors = ['', 'webkit', 'moz', 'o', 'ms'];\nvar cancelMethod = 'clearTimeout';\nvar rafImpl = fallback; // eslint-disable-next-line import/no-mutable-exports\n\nvar getKey = function getKey(vendor, k) {\n return vendor + (!vendor ? k : k[0].toUpperCase() + k.substr(1)) + \"AnimationFrame\";\n};\n\nif (canUseDOM) {\n vendors.some(function (vendor) {\n var rafMethod = getKey(vendor, 'request');\n\n if (rafMethod in window) {\n cancelMethod = getKey(vendor, 'cancel'); // @ts-ignore\n\n rafImpl = function rafImpl(cb) {\n return window[rafMethod](cb);\n };\n }\n\n return !!rafImpl;\n });\n}\n\nexport var cancel = function cancel(id) {\n // @ts-ignore\n if (typeof window[cancelMethod] === 'function') window[cancelMethod](id);\n};\nexport var request = rafImpl;","/**\n * Checks if a given element has a CSS class.\n * \n * @param element the element\n * @param className the CSS class name\n */\nexport default function hasClass(element, className) {\n if (element.classList) return !!className && element.classList.contains(className);\n return (\" \" + (element.className.baseVal || element.className) + \" \").indexOf(\" \" + className + \" \") !== -1;\n}","import hasClass from './hasClass';\n/**\n * Adds a CSS class to a given element.\n * \n * @param element the element\n * @param className the CSS class name\n */\n\nexport default function addClass(element, className) {\n if (element.classList) element.classList.add(className);else if (!hasClass(element, className)) if (typeof element.className === 'string') element.className = element.className + \" \" + className;else element.setAttribute('class', (element.className && element.className.baseVal || '') + \" \" + className);\n}","function replaceClassName(origClass, classToRemove) {\n return origClass.replace(new RegExp(\"(^|\\\\s)\" + classToRemove + \"(?:\\\\s|$)\", 'g'), '$1').replace(/\\s+/g, ' ').replace(/^\\s*|\\s*$/g, '');\n}\n/**\n * Removes a CSS class from a given element.\n * \n * @param element the element\n * @param className the CSS class name\n */\n\n\nexport default function removeClass(element, className) {\n if (element.classList) {\n element.classList.remove(className);\n } else if (typeof element.className === 'string') {\n element.className = replaceClassName(element.className, className);\n } else {\n element.setAttribute('class', replaceClassName(element.className && element.className.baseVal || '', className));\n }\n}","/**\n * Returns the owner document of a given element.\n * \n * @param node the element\n */\nexport default function ownerDocument(node) {\n return node && node.ownerDocument || document;\n}","import ownerDocument from './ownerDocument';\n/**\n * Returns the owner window of a given element.\n * \n * @param node the element\n */\n\nexport default function ownerWindow(node) {\n var doc = ownerDocument(node);\n return doc && doc.defaultView || window;\n}","import ownerWindow from './ownerWindow';\n/**\n * Returns one or all computed style properties of an element.\n * \n * @param node the element\n * @param psuedoElement the style property\n */\n\nexport default function getComputedStyle(node, psuedoElement) {\n return ownerWindow(node).getComputedStyle(node, psuedoElement);\n}","var rUpper = /([A-Z])/g;\nexport default function hyphenate(string) {\n return string.replace(rUpper, '-$1').toLowerCase();\n}","/**\n * Copyright 2013-2014, Facebook, Inc.\n * All rights reserved.\n * https://github.com/facebook/react/blob/2aeb8a2a6beb00617a4217f7f8284924fa2ad819/src/vendor/core/hyphenateStyleName.js\n */\nimport hyphenate from './hyphenate';\nvar msPattern = /^ms-/;\nexport default function hyphenateStyleName(string) {\n return hyphenate(string).replace(msPattern, '-ms-');\n}","import getComputedStyle from './getComputedStyle';\nimport hyphenate from './hyphenateStyle';\nimport isTransform from './isTransform';\n\nfunction style(node, property) {\n var css = '';\n var transforms = '';\n\n if (typeof property === 'string') {\n return node.style.getPropertyValue(hyphenate(property)) || getComputedStyle(node).getPropertyValue(hyphenate(property));\n }\n\n Object.keys(property).forEach(function (key) {\n var value = property[key];\n\n if (!value && value !== 0) {\n node.style.removeProperty(hyphenate(key));\n } else if (isTransform(key)) {\n transforms += key + \"(\" + value + \") \";\n } else {\n css += hyphenate(key) + \": \" + value + \";\";\n }\n });\n\n if (transforms) {\n css += \"transform: \" + transforms + \";\";\n }\n\n node.style.cssText += \";\" + css;\n}\n\nexport default style;","/* eslint-disable no-return-assign */\nimport canUseDOM from './canUseDOM';\nexport var optionsSupported = false;\nexport var onceSupported = false;\n\ntry {\n var options = {\n get passive() {\n return optionsSupported = true;\n },\n\n get once() {\n // eslint-disable-next-line no-multi-assign\n return onceSupported = optionsSupported = true;\n }\n\n };\n\n if (canUseDOM) {\n window.addEventListener('test', options, options);\n window.removeEventListener('test', options, true);\n }\n} catch (e) {\n /* */\n}\n\n/**\n * An `addEventListener` ponyfill, supports the `once` option\n * \n * @param node the element\n * @param eventName the event name\n * @param handle the handler\n * @param options event options\n */\nfunction addEventListener(node, eventName, handler, options) {\n if (options && typeof options !== 'boolean' && !onceSupported) {\n var once = options.once,\n capture = options.capture;\n var wrappedHandler = handler;\n\n if (!onceSupported && once) {\n wrappedHandler = handler.__once || function onceHandler(event) {\n this.removeEventListener(eventName, onceHandler, capture);\n handler.call(this, event);\n };\n\n handler.__once = wrappedHandler;\n }\n\n node.addEventListener(eventName, wrappedHandler, optionsSupported ? options : capture);\n }\n\n node.addEventListener(eventName, handler, options);\n}\n\nexport default addEventListener;","/**\n * A `removeEventListener` ponyfill\n * \n * @param node the element\n * @param eventName the event name\n * @param handle the handler\n * @param options event options\n */\nfunction removeEventListener(node, eventName, handler, options) {\n var capture = options && typeof options !== 'boolean' ? options.capture : options;\n node.removeEventListener(eventName, handler, capture);\n\n if (handler.__once) {\n node.removeEventListener(eventName, handler.__once, capture);\n }\n}\n\nexport default removeEventListener;","import addEventListener from './addEventListener';\nimport removeEventListener from './removeEventListener';\n\nfunction listen(node, eventName, handler, options) {\n addEventListener(node, eventName, handler, options);\n return function () {\n removeEventListener(node, eventName, handler, options);\n };\n}\n\nexport default listen;","/**\n * Triggers an event on a given element.\n * \n * @param node the element\n * @param eventName the event name to trigger\n * @param bubbles whether the event should bubble up\n * @param cancelable whether the event should be cancelable\n */\nexport default function triggerEvent(node, eventName, bubbles, cancelable) {\n if (bubbles === void 0) {\n bubbles = false;\n }\n\n if (cancelable === void 0) {\n cancelable = true;\n }\n\n if (node) {\n var event = document.createEvent('HTMLEvents');\n event.initEvent(eventName, bubbles, cancelable);\n node.dispatchEvent(event);\n }\n}","import css from './css';\nimport listen from './listen';\nimport triggerEvent from './triggerEvent';\n\nfunction parseDuration(node) {\n var str = css(node, 'transitionDuration') || '';\n var mult = str.indexOf('ms') === -1 ? 1000 : 1;\n return parseFloat(str) * mult;\n}\n\nfunction emulateTransitionEnd(element, duration, padding) {\n if (padding === void 0) {\n padding = 5;\n }\n\n var called = false;\n var handle = setTimeout(function () {\n if (!called) triggerEvent(element, 'transitionend', true);\n }, duration + padding);\n var remove = listen(element, 'transitionend', function () {\n called = true;\n }, {\n once: true\n });\n return function () {\n clearTimeout(handle);\n remove();\n };\n}\n\nexport default function transitionEnd(element, handler, duration, padding) {\n if (duration == null) duration = parseDuration(element) || 0;\n var removeEmulate = emulateTransitionEnd(element, duration, padding);\n var remove = listen(element, 'transitionend', handler);\n return function () {\n removeEmulate();\n remove();\n };\n}","import PropTypes from 'prop-types';\nexport function transitionTimeout(transitionType) {\n var timeoutPropName = 'transition' + transitionType + 'Timeout';\n var enabledPropName = 'transition' + transitionType;\n return function (props) {\n // If the transition is enabled\n if (props[enabledPropName]) {\n // If no timeout duration is provided\n if (!props[timeoutPropName]) {\n return new Error(timeoutPropName + \" wasn't supplied to CSSTransitionGroup: \" + \"this can cause unreliable animations and won't be supported in \" + 'a future version of React. See ' + 'https://fb.me/react-animation-transition-group-timeout for more ' + 'information.'); // If the duration isn't a number\n } else if (typeof props[timeoutPropName] !== 'number') {\n return new Error(timeoutPropName + ' must be a number (in milliseconds)');\n }\n }\n\n return null;\n };\n}\nexport var nameShape = PropTypes.oneOfType([PropTypes.string, PropTypes.shape({\n enter: PropTypes.string,\n leave: PropTypes.string,\n active: PropTypes.string,\n height: PropTypes.string\n}), PropTypes.shape({\n enter: PropTypes.string,\n enterActive: PropTypes.string,\n leave: PropTypes.string,\n leaveActive: PropTypes.string,\n appear: PropTypes.string,\n appearActive: PropTypes.string,\n height: PropTypes.string,\n heightActive: PropTypes.string\n})]);","function _typeof(obj) { \"@babel/helpers - typeof\"; if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }; } return _typeof(obj); }\n\nfunction ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); keys.push.apply(keys, symbols); } return keys; }\n\nfunction _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys(Object(source), true).forEach(function (key) { _defineProperty(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function\"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf(subClass, superClass); }\n\nfunction _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }\n\nfunction _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; }\n\nfunction _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === \"object\" || typeof call === \"function\")) { return call; } return _assertThisInitialized(self); }\n\nfunction _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return self; }\n\nfunction _isNativeReflectConstruct() { if (typeof Reflect === \"undefined\" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === \"function\") return true; try { Date.prototype.toString.call(Reflect.construct(Date, [], function () {})); return true; } catch (e) { return false; } }\n\nfunction _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }\n\nfunction _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\n/**\n * From react-transition-group v1.2.1\n *\n * In addition, the first animation frame is skipped when starting new transitions since\n * entering absolutely positioned elements in Chrome does not animate otherwise.\n */\nimport addClass from 'dom-helpers/addClass';\nimport removeClass from 'dom-helpers/removeClass';\nimport transitionEnd from 'dom-helpers/transitionEnd';\nimport { request as raf } from 'dom-helpers/animationFrame';\nimport React from 'react';\nimport PropTypes from 'prop-types';\nimport { findDOMNode } from 'react-dom';\nimport { nameShape } from './utils/PropTypes';\nvar events = [];\n\nif (transitionEnd) {\n events.push(transitionEnd);\n}\n\nfunction addEndListener(node, listener) {\n if (events.length) {\n events.forEach(function (e) {\n return node.addEventListener(e, listener, false);\n });\n } else {\n setTimeout(listener, 0);\n }\n\n return function () {\n if (!events.length) {\n return;\n }\n\n events.forEach(function (e) {\n return node.removeEventListener(e, listener, false);\n });\n };\n}\n\nvar propTypes = {\n children: PropTypes.node,\n name: nameShape.isRequired,\n // Once we require timeouts to be specified, we can remove the\n // boolean flags (appear etc.) and just accept a number\n // or a bool for the timeout flags (appearTimeout etc.)\n appear: PropTypes.bool,\n enter: PropTypes.bool,\n leave: PropTypes.bool,\n appearTimeout: PropTypes.number,\n enterTimeout: PropTypes.number,\n leaveTimeout: PropTypes.number\n};\n\nvar CSSTransitionGroupChild = /*#__PURE__*/function (_React$Component) {\n _inherits(CSSTransitionGroupChild, _React$Component);\n\n var _super = _createSuper(CSSTransitionGroupChild);\n\n function CSSTransitionGroupChild(props) {\n var _this;\n\n _classCallCheck(this, CSSTransitionGroupChild);\n\n _this = _super.call(this, props);\n\n _defineProperty(_assertThisInitialized(_this), \"componentWillAppear\", function (done) {\n if (_this.props.appear) {\n _this.transition('appear', done, _this.props.appearTimeout);\n } else {\n done();\n }\n });\n\n _defineProperty(_assertThisInitialized(_this), \"componentWillEnter\", function (done) {\n if (_this.props.enter) {\n _this.transition('enter', done, _this.props.enterTimeout);\n } else {\n done();\n }\n });\n\n _defineProperty(_assertThisInitialized(_this), \"componentWillLeave\", function (done) {\n if (_this.props.leave) {\n _this.transition('leave', done, _this.props.leaveTimeout);\n } else {\n done();\n }\n });\n\n _this.classNameAndNodeQueue = [];\n _this.transitionTimeouts = [];\n return _this;\n }\n\n _createClass(CSSTransitionGroupChild, [{\n key: \"componentWillUnmount\",\n value: function componentWillUnmount() {\n this.unmounted = true;\n\n if (this.timeout) {\n clearTimeout(this.timeout);\n }\n\n this.transitionTimeouts.forEach(function (timeout) {\n clearTimeout(timeout);\n });\n this.classNameAndNodeQueue.length = 0;\n }\n }, {\n key: \"transition\",\n value: function transition(animationType, finishCallback, timeout) {\n var node = findDOMNode(this);\n\n if (!node) {\n if (finishCallback) {\n finishCallback();\n }\n\n return;\n }\n\n var className = this.props.name[animationType] || this.props.name + '-' + animationType;\n var activeClassName = this.props.name[animationType + 'Active'] || className + '-active';\n var timer = null;\n var removeListeners;\n addClass(node, className); // Need to do this to actually trigger a transition.\n\n this.queueClassAndNode(activeClassName, node); // Clean-up the animation after the specified delay\n\n var finish = function finish(e) {\n if (e && e.target !== node) {\n return;\n }\n\n clearTimeout(timer);\n\n if (removeListeners) {\n removeListeners();\n }\n\n removeClass(node, className);\n removeClass(node, activeClassName);\n\n if (removeListeners) {\n removeListeners();\n } // Usually this optional callback is used for informing an owner of\n // a leave animation and telling it to remove the child.\n\n\n if (finishCallback) {\n finishCallback();\n }\n };\n\n if (timeout) {\n timer = setTimeout(finish, timeout);\n this.transitionTimeouts.push(timer);\n } else if (transitionEnd) {\n removeListeners = addEndListener(node, finish);\n }\n }\n }, {\n key: \"queueClassAndNode\",\n value: function queueClassAndNode(className, node) {\n var _this2 = this;\n\n this.classNameAndNodeQueue.push({\n className: className,\n node: node\n });\n\n if (!this.rafHandle) {\n // The first animation frame is skipped when starting new transitions since\n // entering absolutely positioned elements in Chrome does not animate otherwise.\n this.rafHandle = raf(function () {\n return _this2.flushClassNameAndNodeQueueOnNextFrame();\n });\n }\n }\n }, {\n key: \"flushClassNameAndNodeQueueOnNextFrame\",\n value: function flushClassNameAndNodeQueueOnNextFrame() {\n var _this3 = this;\n\n this.rafHandle = raf(function () {\n return _this3.flushClassNameAndNodeQueue();\n });\n }\n }, {\n key: \"flushClassNameAndNodeQueue\",\n value: function flushClassNameAndNodeQueue() {\n if (!this.unmounted) {\n this.classNameAndNodeQueue.forEach(function (obj) {\n // This is for to force a repaint,\n // which is necessary in order to transition styles when adding a class name.\n\n /* eslint-disable no-unused-expressions */\n obj.node.scrollTop;\n /* eslint-enable no-unused-expressions */\n\n addClass(obj.node, obj.className);\n });\n }\n\n this.classNameAndNodeQueue.length = 0;\n this.rafHandle = null;\n }\n }, {\n key: \"render\",\n value: function render() {\n var props = _objectSpread({}, this.props);\n\n delete props.name;\n delete props.appear;\n delete props.enter;\n delete props.leave;\n delete props.appearTimeout;\n delete props.enterTimeout;\n delete props.leaveTimeout;\n delete props.children;\n return /*#__PURE__*/React.cloneElement(React.Children.only(this.props.children), props);\n }\n }]);\n\n return CSSTransitionGroupChild;\n}(React.Component);\n\n_defineProperty(CSSTransitionGroupChild, \"displayName\", 'CSSTransitionGroupChild');\n\nCSSTransitionGroupChild.propTypes = propTypes;\nexport default CSSTransitionGroupChild;","function _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }\n\nfunction _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }\n\nfunction _typeof(obj) { \"@babel/helpers - typeof\"; if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }; } return _typeof(obj); }\n\nfunction ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); keys.push.apply(keys, symbols); } return keys; }\n\nfunction _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys(Object(source), true).forEach(function (key) { _defineProperty(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function\"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf(subClass, superClass); }\n\nfunction _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }\n\nfunction _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; }\n\nfunction _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === \"object\" || typeof call === \"function\")) { return call; } return _assertThisInitialized(self); }\n\nfunction _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return self; }\n\nfunction _isNativeReflectConstruct() { if (typeof Reflect === \"undefined\" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === \"function\") return true; try { Date.prototype.toString.call(Reflect.construct(Date, [], function () {})); return true; } catch (e) { return false; } }\n\nfunction _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }\n\nfunction _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\nimport React from 'react';\nimport { findDOMNode } from 'react-dom';\nimport PropTypes from 'prop-types';\nimport { request as raf } from 'dom-helpers/animationFrame';\nimport ReactCSSTransitionReplaceChild from './ReactCSSTransitionReplaceChild';\nimport { nameShape, transitionTimeout } from './utils/PropTypes';\n\nvar ReactCSSTransitionReplace = /*#__PURE__*/function (_React$Component) {\n _inherits(ReactCSSTransitionReplace, _React$Component);\n\n var _super = _createSuper(ReactCSSTransitionReplace);\n\n function ReactCSSTransitionReplace(props) {\n var _this;\n\n _classCallCheck(this, ReactCSSTransitionReplace);\n\n _this = _super.call(this, props);\n\n _defineProperty(_assertThisInitialized(_this), \"handleDoneAppearing\", function (key) {\n delete _this.transitioningKeys[key];\n\n if (key !== _this.state.currentKey) {\n // This child was removed before it had fully appeared. Remove it.\n _this.performLeave(key);\n }\n });\n\n _defineProperty(_assertThisInitialized(_this), \"performLeave\", function (key) {\n _this.transitioningKeys[key] = true;\n\n _this.childRefs[key].componentWillLeave(_this.handleDoneLeaving.bind(_assertThisInitialized(_this), key));\n\n if (!_this.state.currentChild || !findDOMNode(_this.childRefs[_this.state.currentKey])) {\n // The enter transition dominates, but if there is no entering\n // component or it renders null the height is set to zero.\n _this.enqueueHeightTransition();\n }\n });\n\n _defineProperty(_assertThisInitialized(_this), \"performHeightTransition\", function () {\n if (!_this.unmounted) {\n var _assertThisInitialize = _assertThisInitialized(_this),\n state = _assertThisInitialize.state;\n\n var currentChildNode = state.currentChild ? findDOMNode(_this.childRefs[state.currentKey]) : null;\n\n _this.setState({\n height: currentChildNode ? currentChildNode.offsetHeight : 0,\n width: _this.props.changeWidth ? currentChildNode ? currentChildNode.offsetWidth : 0 : null\n });\n }\n\n _this.rafHandle = null;\n });\n\n _this.childRefs = Object.create(null);\n _this.state = {\n currentKey: '1',\n currentChild: _this.props.children ? React.Children.only(_this.props.children) : undefined,\n prevChildren: {},\n height: null,\n width: null\n };\n _this.shouldEnterCurrent = false;\n _this.keysToLeave = [];\n _this.transitioningKeys = {};\n return _this;\n }\n\n _createClass(ReactCSSTransitionReplace, [{\n key: \"componentDidMount\",\n value: function componentDidMount() {\n if (this.props.transitionAppear && this.state.currentChild) {\n this.performAppear(this.state.currentKey);\n }\n }\n }, {\n key: \"componentWillUnmount\",\n value: function componentWillUnmount() {\n this.unmounted = true;\n }\n }, {\n key: \"UNSAFE_componentWillReceiveProps\",\n value: function UNSAFE_componentWillReceiveProps(nextProps) {\n var nextChild = nextProps.children ? React.Children.only(nextProps.children) : undefined;\n var currentChild = this.state.currentChild;\n\n if (currentChild && nextChild && nextChild.key === currentChild.key && !this.state.nextChild) {\n // This is the same child, but receiving new props means the child itself has re-rendered\n return this.setState({\n currentChild: nextChild\n });\n }\n\n var _this$state = this.state,\n currentKey = _this$state.currentKey,\n prevChildren = _this$state.prevChildren;\n var nextState = {\n currentKey: String(Number(currentKey) + 1),\n currentChild: nextChild,\n height: 0,\n width: this.props.changeWidth ? 0 : null\n };\n\n if (nextChild) {\n this.shouldEnterCurrent = true;\n }\n\n if (currentChild) {\n var currentChildNode = findDOMNode(this.childRefs[currentKey]);\n nextState.height = currentChildNode ? currentChildNode.offsetHeight : 0;\n nextState.width = this.props.changeWidth ? currentChildNode ? currentChildNode.offsetWidth : 0 : null;\n nextState.prevChildren = _objectSpread(_objectSpread({}, prevChildren), {}, _defineProperty({}, currentKey, currentChild));\n\n if (!this.transitioningKeys[currentKey]) {\n this.keysToLeave.push(currentKey);\n }\n }\n\n this.setState(nextState);\n }\n }, {\n key: \"componentDidUpdate\",\n value: function componentDidUpdate() {\n if (this.shouldEnterCurrent) {\n this.shouldEnterCurrent = false; // If the current child renders null there is nothing to enter\n\n if (findDOMNode(this.childRefs[this.state.currentKey])) {\n this.performEnter(this.state.currentKey);\n }\n }\n\n var keysToLeave = this.keysToLeave;\n this.keysToLeave = [];\n keysToLeave.forEach(this.performLeave);\n }\n }, {\n key: \"performAppear\",\n value: function performAppear(key) {\n this.transitioningKeys[key] = true;\n this.childRefs[key].componentWillAppear(this.handleDoneAppearing.bind(this, key));\n }\n }, {\n key: \"performEnter\",\n value: function performEnter(key) {\n this.transitioningKeys[key] = true;\n this.childRefs[key].componentWillEnter(this.handleDoneEntering.bind(this, key));\n this.enqueueHeightTransition();\n }\n }, {\n key: \"handleDoneEntering\",\n value: function handleDoneEntering(key) {\n delete this.transitioningKeys[key];\n\n if (key === this.state.currentKey) {\n // The current child has finished entering so the height transition is also cleared.\n this.setState({\n height: null\n });\n } else {\n // This child was removed before it had fully appeared. Remove it.\n this.performLeave(key);\n }\n }\n }, {\n key: \"handleDoneLeaving\",\n value: function handleDoneLeaving(key) {\n delete this.transitioningKeys[key];\n var nextState = {\n prevChildren: _objectSpread({}, this.state.prevChildren)\n };\n delete nextState.prevChildren[key];\n delete this.childRefs[key];\n\n if (!this.state.currentChild || !findDOMNode(this.childRefs[this.state.currentKey])) {\n nextState.height = null;\n }\n\n this.setState(nextState);\n }\n }, {\n key: \"enqueueHeightTransition\",\n value: function enqueueHeightTransition() {\n if (!this.rafHandle) {\n this.rafHandle = raf(this.performHeightTransition);\n }\n }\n }, {\n key: \"wrapChild\",\n value: function wrapChild(child, moreProps) {\n var transitionName = this.props.transitionName;\n\n if (_typeof(transitionName) === 'object' && transitionName !== null) {\n transitionName = _objectSpread({}, transitionName);\n delete transitionName.height;\n }\n\n return /*#__PURE__*/React.createElement(ReactCSSTransitionReplaceChild, _objectSpread({\n name: transitionName,\n appear: this.props.transitionAppear,\n enter: this.props.transitionEnter,\n leave: this.props.transitionLeave,\n appearTimeout: this.props.transitionAppearTimeout,\n enterTimeout: this.props.transitionEnterTimeout,\n leaveTimeout: this.props.transitionLeaveTimeout\n }, moreProps), child);\n }\n }, {\n key: \"render\",\n value: function render() {\n var _this2 = this;\n\n var _this$state2 = this.state,\n currentKey = _this$state2.currentKey,\n currentChild = _this$state2.currentChild,\n prevChildren = _this$state2.prevChildren,\n height = _this$state2.height,\n width = _this$state2.width;\n var childrenToRender = [];\n\n var _this$props = this.props,\n overflowHidden = _this$props.overflowHidden,\n transitionName = _this$props.transitionName,\n component = _this$props.component,\n childComponent = _this$props.childComponent,\n notifyLeaving = _this$props.notifyLeaving,\n transitionAppear = _this$props.transitionAppear,\n transitionEnter = _this$props.transitionEnter,\n transitionLeave = _this$props.transitionLeave,\n changeWidth = _this$props.changeWidth,\n transitionAppearTimeout = _this$props.transitionAppearTimeout,\n transitionEnterTimeout = _this$props.transitionEnterTimeout,\n transitionLeaveTimeout = _this$props.transitionLeaveTimeout,\n containerProps = _objectWithoutProperties(_this$props, [\"overflowHidden\", \"transitionName\", \"component\", \"childComponent\", \"notifyLeaving\", \"transitionAppear\", \"transitionEnter\", \"transitionLeave\", \"changeWidth\", \"transitionAppearTimeout\", \"transitionEnterTimeout\", \"transitionLeaveTimeout\"]);\n\n var transitioning = this.shouldEnterCurrent || this.keysToLeave.length || Object.keys(this.transitioningKeys).length;\n containerProps.style = _objectSpread({}, containerProps.style);\n\n if (transitioning) {\n containerProps.style.position = 'relative';\n\n if (overflowHidden) {\n containerProps.style.overflow = 'hidden';\n }\n }\n\n if (height !== null) {\n var heightClassName = typeof transitionName === 'string' ? \"\".concat(transitionName, \"-height\") : transitionName && transitionName.height || '';\n containerProps.className = \"\".concat(containerProps.className || '', \" \").concat(heightClassName);\n containerProps.style.height = height;\n }\n\n if (width !== null) {\n containerProps.style.width = width;\n }\n\n var positionAbsolute = {\n position: 'absolute',\n top: 0,\n left: 0,\n right: 0,\n bottom: 0,\n // In Chrome a selection on a child due to multiple clicks often transfers to the final child after\n // the transitions completes. This prevents selection of the child without other side-effects.\n userSelect: 'none'\n };\n Object.keys(prevChildren).forEach(function (key) {\n var child = prevChildren[key];\n childrenToRender.push( /*#__PURE__*/React.createElement(childComponent, {\n key: key,\n style: positionAbsolute\n }, _this2.wrapChild(notifyLeaving && typeof child.type !== 'string' ? /*#__PURE__*/React.cloneElement(child, {\n isLeaving: true\n }) : child, {\n ref: function ref(r) {\n return _this2.childRefs[key] = r;\n }\n })));\n });\n\n if (currentChild) {\n childrenToRender.push( /*#__PURE__*/React.createElement(childComponent, {\n key: currentKey,\n // While there are leaving children positioning must always be specified to keep the current\n // child on top; the current child can switch to relative positioning after entering though.\n style: this.transitioningKeys[currentKey] ? positionAbsolute : transitioning ? {\n position: 'relative'\n } : null\n }, this.wrapChild(currentChild, {\n ref: function ref(r) {\n return _this2.childRefs[currentKey] = r;\n }\n })));\n }\n\n return /*#__PURE__*/React.createElement(component, containerProps, childrenToRender);\n }\n }]);\n\n return ReactCSSTransitionReplace;\n}(React.Component);\n\n_defineProperty(ReactCSSTransitionReplace, \"displayName\", 'ReactCSSTransitionReplace');\n\n_defineProperty(ReactCSSTransitionReplace, \"propTypes\", {\n transitionName: nameShape.isRequired,\n transitionAppear: PropTypes.bool,\n transitionEnter: PropTypes.bool,\n transitionLeave: PropTypes.bool,\n transitionAppearTimeout: transitionTimeout('Appear'),\n transitionEnterTimeout: transitionTimeout('Enter'),\n transitionLeaveTimeout: transitionTimeout('Leave'),\n overflowHidden: PropTypes.bool,\n changeWidth: PropTypes.bool,\n notifyLeaving: PropTypes.bool\n});\n\n_defineProperty(ReactCSSTransitionReplace, \"defaultProps\", {\n transitionAppear: false,\n transitionEnter: true,\n transitionLeave: true,\n overflowHidden: true,\n changeWidth: false,\n notifyLeaving: false,\n component: 'div',\n childComponent: 'span'\n});\n\nexport { ReactCSSTransitionReplace as default };","import * as React from 'react';\nimport ReactCSSTransitionReplace from 'react-css-transition-replace';\nimport { stripHtml } from \"string-strip-html\";\n\nimport { GRAMMAR, RULES_BASED_3, SPELLING, EVIDENCE_SUBOPTIMAL_SPELLING_OR_GRAMMAR_FINAL_ATTEMPT_FEEDBACK, } from '../../../../constants/evidence';\nimport useFocus from '../../../Shared/hooks/useFocus';\n\nconst loopSrc = `${window.postbuildEnv.CDN_URL}/images/icons/loop.svg`\nconst smallCheckCircleSrc = `${window.postbuildEnv.CDN_URL}/images/icons/check-circle-small.svg`\nconst closeIconSrc = `${window.postbuildEnv.CDN_URL}/images/icons/clear-enabled.svg`\nconst informationSrc = `${window.postbuildEnv.CDN_URL}/images/pages/evidence/icons-information-small.svg`\nconst lightbulbSrc = `${window.postbuildEnv.CDN_URL}/images/pages/evidence/icons-lightbulb-small.svg`\n\nconst reportAProblemOptions = (optimal) => ([\n \"I don't think this feedback applies to what I wrote\",\n \"I don't understand this feedback\",\n optimal ? \"I think my answer still has an error\" : \"I think my answer is correct\"\n])\n\nconst ReportAProblemOption = ({ option, handleSelectProblem, }) => {\n function handleClick() { handleSelectProblem(option) }\n\n return \n}\n\nconst madeLastAttemptAndItWasSuboptimal = (submittedResponses, prompt, lastSubmittedResponse) => {\n const madeLastAttempt = submittedResponses.length === prompt.max_attempts\n return madeLastAttempt && !lastSubmittedResponse.optimal\n}\n\nconst feedbackToShow = (lastSubmittedResponse, submittedResponses, prompt, customFeedback) => {\n\n if (customFeedback) { return customFeedback }\n\n if (!madeLastAttemptAndItWasSuboptimal(submittedResponses, prompt, lastSubmittedResponse)) { return lastSubmittedResponse.feedback }\n\n if ([GRAMMAR, SPELLING, RULES_BASED_3].includes(lastSubmittedResponse.feedback_type)) {\n return EVIDENCE_SUBOPTIMAL_SPELLING_OR_GRAMMAR_FINAL_ATTEMPT_FEEDBACK\n }\n\n return prompt.max_attempts_feedback\n}\n\nconst feedbackForInnerHTML = (feedback) => {\n return {__html: feedback}\n}\n\nconst Feedback: React.SFC = ({ lastSubmittedResponse, prompt, submittedResponses, customFeedback, customFeedbackKey, reportAProblem, }: any) => {\n const { entry, optimal, hint, highlight, } = lastSubmittedResponse\n const [reportAProblemExpanded, setReportAProblemExpanded] = React.useState(false)\n const [reportSubmitted, setReportSubmitted] = React.useState(false)\n const [containerRef, setContainerFocus] = useFocus()\n\n React.useEffect(() => {\n setReportAProblemExpanded(false)\n setReportSubmitted(false)\n setContainerFocus()\n }, [lastSubmittedResponse])\n\n React.useEffect(() => {\n if (reportAProblemExpanded) {\n const el = document.getElementsByClassName(\"report-a-problem-section\")[0]\n el.scrollIntoView(false)\n }\n }, [reportAProblemExpanded])\n\n function toggleReportAProblemExpanded() { setReportAProblemExpanded(!reportAProblemExpanded) }\n\n function handleSelectProblem(report) {\n const { text, } = prompt\n const entryWithoutStem = entry.replace(text, '').trim()\n const callback = () => setReportSubmitted(true)\n\n reportAProblem({ report, callback, entry: entryWithoutStem, })\n }\n\n let className = 'feedback'\n let imageSrc = loopSrc\n let imageAlt = 'Revise icon'\n if (optimal) {\n className += ' optimal'\n imageSrc = smallCheckCircleSrc\n imageAlt = 'Check icon'\n }\n\n const key = customFeedbackKey || submittedResponses.length\n const feedback = feedbackToShow(lastSubmittedResponse, submittedResponses, prompt, customFeedback)\n\n const reportAProblemButton = \n let reportAProblemSection = \n if (reportAProblemExpanded) {\n const reportAProblemOptionElements = reportSubmitted ? null :
    {reportAProblemOptions(lastSubmittedResponse.optimal).map(opt => )}
    \n const label = reportSubmitted ? 'Thank you for your feedback!' : 'What did you notice?'\n let text = ''\n if(reportSubmitted && optimal) {\n text = 'Thank you for your feedback! For now, move on to the next part of the activity.'\n } else if(reportSubmitted) {\n text = 'For now, please try your best to revise and improve your sentence.'\n }\n\n reportAProblemSection = (
    \n
    \n {label}\n \n
    \n {text}\n {reportAProblemOptionElements}\n
    )\n }\n\n let headsUpSection\n\n if (madeLastAttemptAndItWasSuboptimal(submittedResponses, prompt, lastSubmittedResponse)) {\n headsUpSection = (\n
    \n
    \n \"Information\n

    Heads up

    \n
    \n

    Our feedback bot is not perfect, and it sometimes might be wrong. If you think the feedback is inaccurate, please click on the “Report a problem” button above.

    \n
    \n )\n }\n\n let hintSection\n\n if (hint && hint.id) {\n const { explanation, image_alt_text, image_link, } = hint\n hintSection = (\n
    \n
    \n \"Lightbulb\n

    Hint

    \n
    \n
    \n {image_alt_text}\n
    \n )\n }\n\n\n let screenreaderPassageHighlightText\n let screenreaderResponseHighlightText\n\n const passageHighlights = highlight && highlight.filter(h => h.type === 'passage').map(h => stripHtml(h.text).result)\n const responseHighlights = highlight && highlight.filter(h => h.type === 'response').map(h => stripHtml(h.text).result)\n\n if (passageHighlights && passageHighlights.length) {\n screenreaderPassageHighlightText =

    Screenreader users, the feedback you just heard is referring to the following section(s) of the passage: {passageHighlights.join('; ')}

    \n }\n\n if (responseHighlights && responseHighlights.length) {\n screenreaderResponseHighlightText =

    Screenreader users, the feedback you just heard is referring to the following word(s) of your response: {responseHighlights.join('; ')}

    \n }\n\n return (\n
    \n \n \n
    \n
    \n {imageAlt}\n

    Feedback

    \n
    \n
    \n

    \n {screenreaderPassageHighlightText}\n {screenreaderResponseHighlightText}\n

    \n
    {reportAProblemButton}
    \n
    \n {reportAProblemSection}\n
    \n \n {headsUpSection || hintSection}\n
    \n )\n}\n\nexport default Feedback\n","// code courtesy of https://stackoverflow.com/questions/13949059/persisting-the-changes-of-range-objects-after-selection-in-html/13950376#13950376\n\nconst TEXT_TYPE = 3\n\nconst saveSelection = (containerEl) => {\n if (window.getSelection && document.createRange) {\n return saveSelectionForWindowSelection(containerEl)\n } else if (document.selection && document.body.createTextRange) {\n return saveSelectionForDocumentSelection(containerEl)\n }\n}\n\nconst saveSelectionForWindowSelection = (containerEl) => {\n const range = window.getSelection().getRangeAt(0);\n const preSelectionRange = range.cloneRange();\n preSelectionRange.selectNodeContents(containerEl);\n preSelectionRange.setEnd(range.startContainer, range.startOffset);\n const start = preSelectionRange.toString().length;\n\n return {\n start: start,\n end: start + range.toString().length\n }\n};\n\nconst saveSelectionForDocumentSelection = (containerEl) => {\n const selectedTextRange = document.selection.createRange();\n const preSelectionTextRange = document.body.createTextRange();\n preSelectionTextRange.moveToElementText(containerEl);\n preSelectionTextRange.setEndPoint(\"EndToStart\", selectedTextRange);\n const start = preSelectionTextRange.text.length;\n\n return {\n start: start,\n end: start + selectedTextRange.text.length\n }\n}\n\nconst restoreSelection = (containerEl, savedSel) => {\n if (window.getSelection && document.createRange) {\n return restoreSelectionForWindowSelection(containerEl, savedSel)\n } else if (document.selection && document.body.createTextRange) {\n return restoreSelectionForDocumentSelection(containerEl, savedSel)\n }\n}\n\nconst restoreSelectionForWindowSelection = (containerEl, savedSel) => {\n let charIndex = 0\n const range = document.createRange();\n range.setStart(containerEl, 0);\n range.collapse(true);\n const nodeStack = [containerEl]\n let node\n let foundStart = false\n let stop = false;\n\n while (!stop && (node = nodeStack.pop())) {\n if (node.nodeType === TEXT_TYPE) {\n const nextCharIndex = charIndex + node.length;\n if (!foundStart && savedSel.start >= charIndex && savedSel.start <= nextCharIndex) {\n range.setStart(node, savedSel.start - charIndex);\n foundStart = true;\n }\n if (foundStart && savedSel.end >= charIndex && savedSel.end <= nextCharIndex) {\n range.setEnd(node, savedSel.end - charIndex);\n stop = true;\n }\n charIndex = nextCharIndex;\n } else {\n let i = node.childNodes.length;\n while (i--) { // eslint-disable-line no-plusplus\n nodeStack.push(node.childNodes[i]);\n }\n }\n }\n\n const sel = window.getSelection();\n sel.removeAllRanges();\n sel.addRange(range);\n}\n\nconst restoreSelectionForDocumentSelection = (containerEl, savedSel) => {\n const textRange = document.body.createTextRange();\n textRange.moveToElementText(containerEl);\n textRange.collapse(true);\n textRange.moveEnd(\"character\", savedSel.end);\n textRange.moveStart(\"character\", savedSel.start);\n textRange.select();\n};\n\nexport default { saveSelection, restoreSelection };\n","export const highlightSpelling = (str: string, wordsToFormat: string | string[]) => {\n let wordArray = [].concat(wordsToFormat)\n let newString = str\n wordArray.forEach((word) => {\n const matched = newString.match(`${word}[\\\\w\\']*`)\n if (matched && matched[0] && matched[0] !== ' ') {\n const augmentedRegex = new RegExp(`${matched[0]}`, 'g')\n newString = newString.replace(augmentedRegex, `${matched[0]}`)\n }\n })\n return newString\n}\n\nexport const highlightGrammar = (str: string, highlightArray, promptLength: number=0) => {\n if (highlightArray.length < 1) { return str }\n\n highlightArray.sort(descendingOffsetComparator)\n\n highlightArray.forEach((highlight) => {\n const offset = highlight.character - promptLength - 1\n let stringAfterOffset = str.slice(offset)\n const stringBeforeOffset = str.slice(0, offset)\n\n const phraseToFormat = stripEvidenceHtml(highlight.text)\n const matched = stringAfterOffset.match(`${phraseToFormat}[\\\\w\\']*`)\n\n if (matched && matched[0] && matched[0] !== ' ') {\n const augmentedRegex = new RegExp(`${matched[0]}`)\n stringAfterOffset = stringAfterOffset.replace(augmentedRegex, `${matched[0]}`)\n }\n\n str = stringBeforeOffset + stringAfterOffset;\n })\n\n return str\n}\n\nexport const stripEvidenceHtml = (html: string) => html.replace(/

    |<\\/p>||<\\/u>||<\\/b>|
    |/g, '').replace(/ /g, ' ')\n\nconst descendingOffsetComparator = (a, b) => {\n return (a['offset'] - b['offset']) * (-1)\n}\n","import * as React from 'react'\nimport { stripHtml } from \"string-strip-html\"\n\nimport EditorContainer from './editorContainer'\nimport Feedback from './feedback'\n\nimport EditCaretPositioning from '../../helpers/EditCaretPositioning'\nimport { highlightGrammar, highlightSpelling, stripEvidenceHtml } from '../../libs/stringFormatting'\nimport { ButtonLoadingSpinner, } from '../../../Shared/index'\n\ninterface PromptStepProps {\n currentActivity: object,\n activityIsComplete: Boolean;\n className: string,\n completionButtonCallback: () => void;\n submitResponse: Function;\n completeStep: (event: any) => void;\n stepNumber: number;\n activateStep: (event: any) => void;\n reportAProblem: ({}) => void;\n prompt: any,\n submittedResponses: Array,\n}\n\ninterface PromptStepState {\n html: string;\n numberOfSubmissions: number;\n customFeedback: string|null;\n customFeedbackKey: string|null;\n responseOverCharacterLimit: boolean;\n submissionTime: number;\n timeAtLastFeedbackSubmissionCheck: number;\n failedToLoadFeedback: boolean;\n}\n\nconst RESPONSE = 'response'\nconst PROMPT = 'prompt'\nexport const DIRECTIONS = 'Use information from the text to finish the sentence:'\nconst APPROACHING_LIMIT_MESSAGE = 'Your response is getting close to the maximum length';\nconst OVER_LIMIT_MESSAGE = 'Your response is too long for our feedback bot to understand';\nconst WARNING_THRESHOLD = 160;\nconst LIMIT_THRESHOLD = 200;\nconst MAX_ATTEMPTS = 5;\nconst SLOW_FEEDBACK_CONSTRAINT = 10000;\nconst FEEDBACK_LOADING_LIMIT = 30000;\n\nexport class PromptStep extends React.Component {\n private editor: any // eslint-disable-line react/sort-comp\n private interval: any // eslint-disable-line react/sort-comp\n private button: any // eslint-disable-line react/sort-comp\n\n\n constructor(props: PromptStepProps) {\n super(props)\n\n const { submittedResponses, } = this.props\n\n this.state = {\n html: this.formattedPrompt(submittedResponses),\n numberOfSubmissions: submittedResponses.length,\n customFeedback: null,\n customFeedbackKey: null,\n responseOverCharacterLimit: false,\n submissionTime: 0,\n failedToLoadFeedback: false,\n timeAtLastFeedbackSubmissionCheck: 0\n };\n\n this.editor = React.createRef()\n this.button = React.createRef()\n this.interval = null;\n }\n\n\n componentDidUpdate() {\n const { submittedResponses } = this.props;\n const { numberOfSubmissions, submissionTime, timeAtLastFeedbackSubmissionCheck, failedToLoadFeedback } = this.state;\n const timeLapsed = Math.abs(timeAtLastFeedbackSubmissionCheck - submissionTime)\n const awaitingFeedback = (numberOfSubmissions !== submittedResponses.length) && !failedToLoadFeedback\n\n if(submissionTime && numberOfSubmissions === submittedResponses.length) {\n this.setState({ submissionTime: 0, timeAtLastFeedbackSubmissionCheck: 0 });\n clearInterval(this.interval);\n }\n if(timeAtLastFeedbackSubmissionCheck && timeLapsed >= FEEDBACK_LOADING_LIMIT && !failedToLoadFeedback) {\n const feedbackFailedToLoadText = 'Sorry, our feedback did not load properly. Please try again or refresh the page.'\n this.setState({ failedToLoadFeedback: true, customFeedback: feedbackFailedToLoadText, customFeedbackKey: 'feedback failed' });\n }\n if(awaitingFeedback) {\n this.button.current.focus()\n }\n }\n\n componentWillUnmount() {\n clearInterval(this.interval);\n }\n\n lastSubmittedResponse = () => {\n const { submittedResponses, } = this.props\n return submittedResponses.length ? submittedResponses[submittedResponses.length - 1] : {}\n }\n\n unsubmittableResponses = () => {\n const { submittedResponses, prompt } = this.props\n const { text } = prompt;\n return submittedResponses.map(r => r.entry).concat(text)\n }\n\n formattedPrompt = (submittedResponses?: Array) => {\n if (submittedResponses && submittedResponses.length) {\n const lastSubmission = submittedResponses[submittedResponses.length - 1]\n const formattedText = this.formatHtmlForEditorContainer(lastSubmission.entry, true)\n return formattedText.htmlWithBolding\n }\n return this.formattedStem()\n }\n\n formattedStem = () => {\n const { prompt, } = this.props\n const { text } = prompt\n return `

    ${this.allButLastWord(text)} ${this.lastWord(text)} 

    `\n }\n\n allButLastWord = (str: string) => str.substring(0, str.lastIndexOf(' '))\n\n lastWord = (str: string) => str.substring(str.lastIndexOf(' ') + 1)\n\n textWithoutStem = (text: string) => {\n const regex = this.promptAsRegex()\n return text.replace(regex, '')\n }\n\n highlightsAddedPrompt = (str: string) => {\n const { prompt, submittedResponses, } = this.props\n const lastSubmittedResponse = this.lastSubmittedResponse()\n\n if (!lastSubmittedResponse || !lastSubmittedResponse.highlight || !lastSubmittedResponse.entry || submittedResponses.length === prompt.max_attempts) { return str }\n\n const thereArePromptHighlights = lastSubmittedResponse.highlight.filter(hl => hl.type === PROMPT).length\n if (!thereArePromptHighlights) {\n return str\n }\n\n let wordsToFormat = lastSubmittedResponse.highlight.filter(hl => hl.type === PROMPT).map(hl => stripEvidenceHtml(hl.text))\n wordsToFormat = wordsToFormat.length === 1 ? wordsToFormat[0] : wordsToFormat\n return highlightSpelling(str, wordsToFormat)\n }\n\n formatStudentResponse = (str: string, promptLength: number) => {\n const { prompt, submittedResponses, } = this.props\n const lastSubmittedResponse = this.lastSubmittedResponse()\n\n if (!lastSubmittedResponse || !lastSubmittedResponse.highlight || !lastSubmittedResponse.entry || submittedResponses.length === prompt.max_attempts) { return str }\n\n const thereAreResponseHighlights = lastSubmittedResponse.highlight.filter(hl => hl.type === RESPONSE && hl.text.length).length\n\n if (!thereAreResponseHighlights) { return str }\n\n const filteredHighlights = lastSubmittedResponse.highlight.filter(hl => hl.type === RESPONSE)\n\n let wordsToFormat = filteredHighlights.map(hl => stripEvidenceHtml(hl.text))\n\n wordsToFormat = wordsToFormat.length === 1 ? wordsToFormat[0] : wordsToFormat\n\n if (lastSubmittedResponse.feedback_type === 'plagiarism') {\n return this.formatPlagiarismHighlight(str, wordsToFormat)\n } else if (lastSubmittedResponse.feedback_type === 'grammar') {\n return highlightGrammar(str, filteredHighlights, promptLength)\n } else {\n return highlightSpelling(str, wordsToFormat)\n }\n }\n\n formatPlagiarismHighlight = (str: string, wordsToFormat: string) => {\n let boldedString = `${wordsToFormat}`\n return str.replace(wordsToFormat, boldedString)\n }\n\n htmlStrippedPrompt = (escapeRegexCharacters=false) => {\n const strippedPrompt = this.formattedStem().replace(/

    |<\\/p>|
    /g, '')\n if (escapeRegexCharacters) {\n return strippedPrompt.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\$&'); // $& means the whole matched string\n }\n return strippedPrompt\n }\n\n promptAsRegex = () => new RegExp(`^${this.htmlStrippedPrompt(true)}`)\n\n onTextChange = (e) => {\n const { value } = e.target\n const text = value.replace(/|<\\/b>|

    |<\\/p>|
    /g, '')\n const regex = this.promptAsRegex()\n const caretPosition = EditCaretPositioning.saveSelection(this.editor)\n if (text.match(regex)) {\n // when a user deletes the last period, a   gets appended as the end of the string so we need to remove this\n const lastSpaceCorrectedValue = value.replace(/ <\\/p>/, '

    ')\n this.setState({ html: lastSpaceCorrectedValue, }, () => EditCaretPositioning.restoreSelection(this.editor, caretPosition))\n // if the student has deleted everything, we want to remove everything but the prompt stem\n } else if (!text.length) {\n this.resetText()\n } else {\n const htmlStrippedPrompt = this.htmlStrippedPrompt()\n const splitSubmission = text.split(' ')\n\n // handles case where change is only in the formatted prompt part\n if (splitSubmission.length > 1) {\n const newValue = `${htmlStrippedPrompt}${splitSubmission[splitSubmission.length - 1]}`\n this.setState({ html: newValue}, () => {\n this.editor.innerHTML = newValue\n })\n // student overwrote or deleted both part of their submission and the formatted prompt and the solution is much more complicated\n } else {\n const formattedPromptWordArray = htmlStrippedPrompt.split(' ')\n const textWordArray = text.replace(/ /g, ' ').split(' ')\n\n // if the user has tried to edit part of the original prompt, we find the words in their submission that are different from the original prompt\n const diffIndices: number[] = []\n formattedPromptWordArray.forEach((word: string, i: number) => {\n if ((textWordArray[i] !== word)) {\n diffIndices.push(i)\n }\n })\n\n let newTextWordArray = textWordArray.slice(0, diffIndices[0])\n const textToAddAfterPromptText: string[] = []\n\n // then we add each of the words from the original prompt that they modified or removed back in\n diffIndices.forEach((originalIndex: number) => {\n const diffWordEquivalent = formattedPromptWordArray[originalIndex]\n newTextWordArray.push(diffWordEquivalent)\n const diffWordWithoutHtmlLettersArray = textWordArray[originalIndex] ? stripEvidenceHtml(textWordArray[originalIndex]).split('') : null\n if (diffWordWithoutHtmlLettersArray) {\n const diffWordEquivalentWithoutHtmlLettersArray = stripEvidenceHtml(diffWordEquivalent)\n const indexOfLettersToKeepFromDiffWord = diffWordWithoutHtmlLettersArray.findIndex((letter: string, i: number) => letter !== diffWordEquivalentWithoutHtmlLettersArray[i])\n if (indexOfLettersToKeepFromDiffWord !== -1) {\n const partOfDiffWordToKeep = diffWordWithoutHtmlLettersArray.slice(indexOfLettersToKeepFromDiffWord).join('').replace(/( )|()|(<\\/u>)/g, '')\n // keeping track of what they'd modified it to be, so we don't lose those changes\n textToAddAfterPromptText.push(partOfDiffWordToKeep)\n }\n }\n })\n\n const restOfSubmission = textWordArray.slice(diffIndices[diffIndices.length - 1] + 1)\n\n // then we concatenate the original text, however they had changed their submission, and the rest of the submission\n newTextWordArray = newTextWordArray.concat(textToAddAfterPromptText).concat(restOfSubmission)\n\n const newValue = newTextWordArray.join(' ').replace(/ \\s/g, ' ')\n\n this.setState({ html: newValue}, () => {\n this.editor.innerHTML = newValue\n })\n }\n }\n\n this.setState({ customFeedback: null, customFeedbackKey: null })\n }\n\n resetText = () => {\n const html = this.formattedStem()\n this.setState({ html }, () => {\n this.editor.innerHTML = html\n this.placeCaretAtEnd()\n })\n }\n\n setEditorRef = (node: JSX.Element) => this.editor = node\n\n placeCaretAtEnd = () => {\n // following code ensures tabbing into editor always puts cursor at the end of the text\n const el = this.editor\n // retrieved from https://stackoverflow.com/a/4238971\n if (typeof window.getSelection != \"undefined\" && typeof document.createRange != \"undefined\") {\n const range = document.createRange();\n range.selectNodeContents(el);\n range.collapse(false);\n const sel = window.getSelection();\n sel.removeAllRanges();\n sel.addRange(range);\n } else if (typeof document.body.createTextRange != \"undefined\") {\n const textRange = document.body.createTextRange();\n textRange.moveToElementText(el);\n textRange.collapse(false);\n textRange.select();\n }\n }\n\n handleClickReturnToEditor = () => {\n this.editor.focus()\n this.editor.scrollIntoView()\n }\n\n handleGetFeedbackClick = (e, entry: string, promptId: string, promptText: string) => {\n e.preventDefault()\n const { submitResponse, currentActivity} = this.props\n\n this.setState(prevState => ({\n numberOfSubmissions: prevState.numberOfSubmissions + 1,\n submissionTime: (new Date()).getTime(),\n failedToLoadFeedback: false,\n customFeedback: null,\n customFeedbackKey: null\n }), () => {\n const { numberOfSubmissions, } = this.state\n submitResponse(entry, promptId, promptText, numberOfSubmissions, currentActivity?.version)\n this.interval = setInterval(() => this.setState({ timeAtLastFeedbackSubmissionCheck: (new Date()).getTime() }), 1000);\n })\n }\n\n onStepInteraction = (e) => {\n const { key, ctrlKey, metaKey, } = e\n const { activateStep, stepNumber, } = this.props\n\n if (key === \"5\" && ctrlKey && metaKey) {\n this.completeStep()\n } else {\n activateStep(stepNumber)\n }\n }\n\n completeStep = () => {\n const { completeStep, stepNumber, } = this.props\n\n completeStep(stepNumber)\n }\n\n formatHtmlForEditorContainer = (html: string) => {\n const { prompt, } = this.props\n const text = html.replace(/|<\\/b>|

    |<\\/p>|
    ||<\\/u>/g, '').replace(' ', '')\n const textWithoutStem = text.replace(prompt.text, '').trim()\n const textForCharacterCount = stripHtml(textWithoutStem).result;\n const spaceAtEnd = text.match(/\\s$/m) ? ' ' : ''\n return {\n htmlWithBolding: `

    ${this.highlightsAddedPrompt(this.htmlStrippedPrompt())}${this.formatStudentResponse(textWithoutStem, prompt.text.length)}${spaceAtEnd}

    `,\n rawTextWithoutStem: textWithoutStem,\n textForCharacterCount\n }\n }\n\n getFeedbackLoadingDetails = () => {\n const { submissionTime, timeAtLastFeedbackSubmissionCheck } = this.state\n if(!submissionTime) {\n return \n }\n const timeLapsed = Math.abs(timeAtLastFeedbackSubmissionCheck - submissionTime)\n if(timeLapsed <= SLOW_FEEDBACK_CONSTRAINT) {\n return

    Finding feedback...

    \n } else if(timeLapsed > SLOW_FEEDBACK_CONSTRAINT && timeLapsed <= FEEDBACK_LOADING_LIMIT) {\n return

    Still finding feedback. Thanks for your patience!

    \n }\n return \n }\n\n renderFeedbackButtonAndDetails = () => {\n const { prompt, submittedResponses, completionButtonCallback, activityIsComplete} = this.props\n const { id, text, max_attempts } = prompt\n const { html, numberOfSubmissions, responseOverCharacterLimit, failedToLoadFeedback } = this.state\n const entry = stripEvidenceHtml(html).trim()\n const awaitingFeedback = (numberOfSubmissions !== submittedResponses.length) && !failedToLoadFeedback\n const buttonLoadingSpinner = awaitingFeedback ? : null\n let buttonCopy = 'Get feedback'\n let className = 'quill-button-archived focus-on-light'\n let onClick = (e) => this.handleGetFeedbackClick(e, entry, id, text)\n let disabled = false\n let ariaLabel = buttonCopy\n\n if (activityIsComplete) {\n onClick = completionButtonCallback\n buttonCopy = 'Done'\n } else if (submittedResponses.length === max_attempts || this.lastSubmittedResponse().optimal) {\n onClick = this.completeStep\n buttonCopy = 'Next'\n } else if (this.unsubmittableResponses().includes(entry)) {\n className += ' disabled'\n disabled = true\n onClick = () => {}\n ariaLabel = submittedResponses.length ? \"You already submitted this response. You must edit it before you can submit it again.\" : buttonCopy\n } else if (awaitingFeedback) {\n className += ' disabled'\n disabled = true\n onClick = () => {}\n buttonCopy = ''\n ariaLabel = \"Waiting for feedback\"\n } else if (responseOverCharacterLimit) {\n className += ' disabled'\n disabled = true\n onClick = () => {}\n ariaLabel = OVER_LIMIT_MESSAGE\n }\n\n return(\n
    \n {this.getFeedbackLoadingDetails()}\n \n {buttonLoadingSpinner}\n {buttonCopy}\n \n
    \n )\n }\n\n renderFeedbackSection = () => {\n const { customFeedback, customFeedbackKey, } = this.state\n const { submittedResponses, prompt, reportAProblem, } = this.props\n\n if (submittedResponses.length === 0 && !(customFeedback && customFeedbackKey)) { return }\n\n return (\n \n )\n }\n\n renderCharacterLimitWarning = (characterCount: number, characterCountClassName: string) => {\n if(characterCount < WARNING_THRESHOLD) { return }\n const message = characterCount < LIMIT_THRESHOLD ? APPROACHING_LIMIT_MESSAGE : OVER_LIMIT_MESSAGE;\n return(\n
    \n

    {message}

    \n

    {`${characterCount}/${LIMIT_THRESHOLD}`}

    \n
    \n )\n }\n\n renderEditorContainer = () => {\n const { html, responseOverCharacterLimit } = this.state\n const { submittedResponses, prompt } = this.props\n const lastSubmittedResponse = this.lastSubmittedResponse()\n let className = 'editor'\n let disabled = false\n const outOfAttempts = submittedResponses.length === prompt.max_attempts\n if (lastSubmittedResponse.optimal) {\n className += ' optimal disabled'\n disabled = true\n } else if (outOfAttempts) {\n className += ' suboptimal disabled'\n disabled = true\n } else if (submittedResponses.length) {\n className += ' suboptimal'\n }\n\n const formattedText = this.formatHtmlForEditorContainer(html)\n const { htmlWithBolding, rawTextWithoutStem, textForCharacterCount } = formattedText\n const characterCount = textForCharacterCount && textForCharacterCount.split('').length;\n let characterCountClassName;\n if(characterCount >= WARNING_THRESHOLD && characterCount < LIMIT_THRESHOLD) {\n characterCountClassName = 'approaching-limit';\n } else if (characterCount >= LIMIT_THRESHOLD) {\n characterCountClassName = 'over-limit';\n }\n if(characterCountClassName) {\n className += ` ${characterCountClassName}`;\n }\n if(characterCount >= LIMIT_THRESHOLD && !responseOverCharacterLimit) {\n this.setState({ responseOverCharacterLimit: true });\n } else if(characterCount < LIMIT_THRESHOLD && responseOverCharacterLimit) {\n this.setState({ responseOverCharacterLimit: false });\n }\n\n return (\n
    \n \n {this.renderCharacterLimitWarning(characterCount, characterCountClassName)}\n
    \n );\n }\n\n renderActiveContent = () => {\n const { prompt, submittedResponses } = this.props;\n const attemptsCount = submittedResponses && submittedResponses.length ? submittedResponses.length : 0;\n const maxAttemptCount = prompt && prompt.max_attempts ? prompt.max_attempts : MAX_ATTEMPTS;\n return(\n
    \n {this.renderEditorContainer()}\n
    \n
    \n

    {attemptsCount}

    \n

    {`of ${maxAttemptCount} attempts`}

    \n
    \n {this.renderFeedbackButtonAndDetails()}\n
    \n {this.renderFeedbackSection()}\n \n
    \n )\n }\n\n render() {\n const { className } = this.props\n\n return (\n
    \n
    \n {this.renderActiveContent()}\n
    \n
    \n )\n }\n}\n\nexport default PromptStep;\n","import * as React from \"react\"\n\nimport { onMobile, READ_PASSAGE_STEP } from './containerActionHelpers'\n\nimport DirectionsSection from '../components/studentView/directionsSection'\n\nconst bigCheckSrc = `${window.postbuildEnv.CDN_URL}/images/icons/check-circle-big.svg`\n\nexport const renderDirectionsSection = ({ className, handleReadTheDirectionsButtonClick, activeStep, doneHighlighting, showReadTheDirectionsButton, activities }) => {\n const { currentActivity, } = activities\n\n return (\n \n )\n}\n\nexport const renderDirections = ({ handleReadTheDirectionsButtonClick, activeStep, doneHighlighting, showReadTheDirectionsButton, activities, hasStartedReadPassageStep, hasStartedPromptSteps }) => {\n const { currentActivity, } = activities\n\n const DirectionsSection = renderDirectionsSection({ className: '', handleReadTheDirectionsButtonClick , activeStep, doneHighlighting, showReadTheDirectionsButton, activities })\n\n if ((!hasStartedReadPassageStep || (activeStep > READ_PASSAGE_STEP && !hasStartedPromptSteps)) && onMobile()) {\n return \n }\n\n if (!currentActivity || activeStep === READ_PASSAGE_STEP) {\n return (
    {DirectionsSection}
    )\n }\n}\n\nexport const renderStepNumber = (number: number, activeStep, completedSteps) => {\n const active = activeStep === number\n const completed = completedSteps.includes(number)\n if (completed) {\n return \"white\n }\n // we have to remove one step for display because there are actually four steps including read passage, but it's displayed differently\n return
    {number - 1}
    \n}\n\nexport const renderReadPassageStep = (activeStep, activities, handleDoneReadingClick) => {\n const { currentActivity, } = activities\n if (!currentActivity || activeStep !== READ_PASSAGE_STEP) { return }\n\n return (\n
    \n

    Read the text.

    \n \n
    \n )\n}\n","import * as React from \"react\"\n\nimport PromptStep from './promptStep'\n\nimport useFocus from '../../../Shared/hooks/useFocus'\nimport { orderedSteps, } from '../../helpers/containerActionHelpers'\nimport { renderDirectionsSection, } from '../../helpers/containerRenderHelpers'\n\nconst PromptStepContainer = ({\n activateStep,\n activityIsComplete,\n completionButtonCallback,\n completeStep,\n submitResponse,\n activities,\n session,\n activeStep,\n doneHighlighting,\n reportAProblem,\n}) => {\n const { currentActivity, } = activities\n const { submittedResponses, hasReceivedData, } = session\n\n if (!currentActivity || !hasReceivedData) return \n\n // the first step is reading, so we will always start at 2 and therefore want to begin at the 0 index\n const stepNumber = activeStep - 2;\n const prompts = orderedSteps(activities);\n const prompt = prompts[stepNumber];\n\n const [containerRef, setContainerFocus] = useFocus()\n\n React.useEffect(() => {\n setContainerFocus()\n }, [])\n\n return (\n
    \n {renderDirectionsSection({ className: '', activeStep, doneHighlighting, activities })}\n \n
    \n )\n}\n\nexport default PromptStepContainer\n","import * as React from 'react';\n\nimport PromptStepContainer from './promptStepContainer';\n\nimport { renderReadPassageStep, } from '../../helpers/containerRenderHelpers';\n\nconst Steps = ({\n activeStep,\n activateStep,\n activities,\n activityIsComplete,\n handleDoneReadingClick,\n completionButtonCallback,\n completeStep,\n submitResponse,\n handleReadTheDirectionsButtonClick,\n session,\n completedSteps,\n doneHighlighting,\n resetTimers,\n showReadTheDirectionsButton,\n reportAProblem,\n}) => {\n const promptStepContainerProps = {\n activateStep,\n activityIsComplete,\n completionButtonCallback,\n completeStep,\n submitResponse,\n handleReadTheDirectionsButtonClick,\n activities,\n session,\n activeStep,\n completedSteps,\n doneHighlighting,\n showReadTheDirectionsButton,\n reportAProblem,\n }\n return(\n
    \n
    \n {renderReadPassageStep(activeStep, activities, handleDoneReadingClick)}\n \n
    \n
    \n )\n}\n\nexport default Steps;\n","import * as React from 'react';\n\nimport BottomNavigation from './bottomNavigation';\nimport ReadAndHighlightInstructions from './readAndHighlightInstructions';\nimport StepOverview from './stepOverview';\nimport Steps from './steps';\n\nimport { READ_PASSAGE_STEP } from '../../helpers/containerActionHelpers';\n\nconst RightPanel = ({\n activities,\n activateStep,\n activeStep,\n activityIsComplete,\n handleReadTheDirectionsButtonClick,\n completeStep,\n completedSteps,\n completionButtonCallback,\n doneHighlighting,\n handleClickDoneHighlighting,\n handleDoneReadingClick,\n hasStartedPromptSteps,\n hasStartedReadPassageStep,\n onStartPromptSteps,\n onStartReadPassage,\n reportAProblem,\n resetTimers,\n scrolledToEndOfPassage,\n session,\n showReadTheDirectionsButton,\n showStepsSummary,\n studentHighlights,\n submitResponse,\n toggleShowStepsSummary,\n toggleStudentHighlight,\n}) => {\n\n const bottomNavigation = ()\n\n if (!hasStartedReadPassageStep) {\n return (\n
    \n \n {bottomNavigation}\n
    \n )\n }\n\n if (activeStep === READ_PASSAGE_STEP) {\n return (\n
    \n \n {bottomNavigation}\n
    \n )\n }\n\n if (!hasStartedPromptSteps) {\n return (\n
    \n \n {bottomNavigation}\n
    \n )\n }\n\n if (showStepsSummary) {\n return (\n
    \n \n {bottomNavigation}\n
    \n )\n }\n\n return(\n \n )\n}\n\nexport default RightPanel;\n","import { ActionTypes } from './actionTypes'\nimport { TrackAnalyticsEvent } from './analytics'\n\nimport { requestGet, } from '../../../modules/request/index'\nimport { Events } from '../modules/analytics'\n\nexport const getActivity = (sessionID: string, activityUID: string) => {\n return async (dispatch: Function) => {\n\n dispatch(TrackAnalyticsEvent(Events.EVIDENCE_ACTIVITY_STARTED, {\n activityID: activityUID,\n sessionID: sessionID\n }));\n\n const activityUrl = `${window.postbuildEnv.DEFAULT_URL}/api/v1/evidence/activities/${activityUID}`\n\n await requestGet(activityUrl, (body) => {\n if (body) {\n dispatch({ type: ActionTypes.RECEIVE_ACTIVITY_DATA, data: body, });\n } else {\n dispatch({ type: ActionTypes.NO_ACTIVITY_FOUND })\n }\n })\n }\n}\n\nexport const getTopicOptimalInfo = (activityID: number) => {\n return async (dispatch: Function) => {\n const topicOptimalInfoUrl = `${window.postbuildEnv.DEFAULT_URL}/api/v1/evidence/activities/${activityID}/topic_optimal_info`\n\n await requestGet(topicOptimalInfoUrl, (body) => {\n if (body) {\n dispatch({ type: ActionTypes.RECEIVE_TOPIC_OPTIMAL_DATA, data: body, });\n }\n })\n }\n}\n","import { DIRECTIONS, } from '../components/studentView/promptStep'\n\nexport const generateConceptResults = (currentActivity, submittedResponses, topicOptimalData) => {\n const conjunctionToQuestionNumber = {\n because: 1,\n but: 2,\n so: 3\n }\n\n const conceptResults = []\n\n for (const [promptID, responses] of Object.entries(submittedResponses)) {\n const prompt = Object.values(currentActivity.prompts).filter((prompt) => String(prompt.id) === String(promptID))[0]\n responses.forEach((response, index) => {\n const attempt = index + 1\n const conceptResultMetadata = {\n answer: response.entry,\n attemptNumber: attempt,\n correct: response.optimal ? 1 : 0,\n directions: (attempt === 1) ? DIRECTIONS : responses[index - 1].feedback,\n prompt: prompt.text,\n questionNumber: conjunctionToQuestionNumber[prompt.conjunction],\n questionScore: responses.some((r) => r.optimal) ? 1.0 : 0.0\n }\n\n if (topicOptimalData && topicOptimalData.rule_types.includes(response.feedback_type)) {\n conceptResults.push({\n concept_uid: topicOptimalData.concept_uids[prompt.id],\n question_type: 'comprehension',\n metadata: {\n ...conceptResultMetadata,\n ...{correct: 1}\n }\n })\n }\n\n conceptResults.push({\n concept_uid: response.concept_uid,\n question_type: 'comprehension',\n metadata: conceptResultMetadata\n })\n })\n }\n return conceptResults\n}\n\nexport const generatePercentageScore = (conceptResults) => {\n const questionScores: {[key:number]: number} = {};\n\n conceptResults.forEach(result => {\n const { questionNumber, questionScore } = result.metadata;\n if (!questionScores[questionNumber]) {\n questionScores[questionNumber] = questionScore;\n }\n });\n\n\n const totalScore: number = Object.values(questionScores).reduce((acc, score) => acc + score, 0);\n const totalQuestions = Object.keys(questionScores).length\n\n const percentageScore = totalQuestions ? Math.round((totalScore/totalQuestions) * 100) / 100 : null\n\n return percentageScore;\n};\n","import { requestGet, } from '../../../modules/request/index';\nimport { apiFetch, handleApiError } from '../../Staff/helpers/evidence/routingHelpers';\n\nexport const postTurkSession = async (turkingRoundID: string, activitySessionUID: string) => {\n\n const response = await apiFetch('turking_round_activity_sessions', {\n method: 'POST',\n body: JSON.stringify({\n turking_round_id: turkingRoundID,\n activity_session_uid: activitySessionUID\n })\n });\n return { error: handleApiError('Failed to create turking activity session. Please refresh the page and try again.', response) };\n}\n\nexport default function validateTurkSession(turkingRoundId, activityId, callback) {\n requestGet(\n `${window.postbuildEnv.DEFAULT_URL}/api/v1/evidence/turking_round_activity_sessions/validate?activity_id=${activityId}&turking_round_id=${turkingRoundId}`,\n (body) => callback(body),\n (body) => {\n alert(\"Failed to validate turking activity session: \" + body)\n callback(body)\n }\n )\n}\n","export const explanationData = {\n 1: {\n buttonText: \"Next\",\n header: \"All writers revise\",\n imageData: {\n imageAlt: \"An illustration of a pencil circled with a revision\",\n imageUrl: \"images/evidence/revising-pencil.svg\"\n },\n isBeta: false,\n step: 2,\n subtext: \"Your goal is to practice and improve your writing skills.

    We will provide you with a lot of feedback on your writing. You’ll be able to revise each sentence up to five times so that you can become a stronger writer.\"\n },\n 2: {\n buttonText: \"Next\",\n header: \"We use a feedback bot\",\n imageData: {\n imageAlt: \"An illustration of a smiling robot head\",\n imageUrl: \"images/evidence/feedback-bot.svg\"\n },\n isBeta: true,\n step: 3,\n subtext: \"We use artificial intelligence (AI) to help us give you feedback on your writing. You should know that AI isn't always correct.\"\n },\n 3: {\n buttonText: \"Start\",\n header: \"Your teacher will see your score and writing\",\n imageData: {\n imageAlt: \"An illustration of a report page with a magnifying glass over it\",\n imageUrl: \"images/evidence/evidence-report.svg\"\n },\n isBeta: false,\n step: 4,\n subtext: \"Once the activity is complete, both you and your teacher will see a report with your score and your responses for each prompt.\"\n },\n}\n","import * as React from \"react\";\n\nexport const Footer = ({ buttonText, onHandleClick, step }) => {\n\n function handleClick() {\n onHandleClick();\n }\n\n return(\n
    \n \n \n
    \n
    \n
    \n
    \n
    \n
    \n
    \n );\n}\n\nexport default Footer;\n","import * as React from \"react\";\n\nimport Footer from './footer';\n\nimport useFocus from '../../../Shared/hooks/useFocus';\n\nexport const ExplanationSlide = ({ slideData, onHandleClick }) => {\n const { buttonText, header, imageData, isBeta, step, subtext } = slideData;\n const { imageAlt, imageUrl } = imageData;\n\n const [containerRef, setContainerFocus] = useFocus()\n\n React.useEffect(() => {\n setContainerFocus()\n }, [slideData])\n\n return(\n
    \n
    \n

    Good to know

    \n
    \n

    {header}

    \n {isBeta &&
    BETA
    }\n
    \n {imageAlt}\n

    \n

    \n
    \n
    \n );\n}\n\nexport default ExplanationSlide;\n","import * as React from \"react\";\n\nimport Footer from './footer';\n\nexport const WelcomeSlide = ({ onHandleClick, user }) => {\n const welcomeText = user ? `Hi, ${user}!` : 'Hi there!'\n return(\n
    \n
    \n

    {welcomeText}

    \n
    \n

    Welcome to Quill Reading for Evidence

    \n
    \n
    \n
    \n
    1
    \n

    Read and highlight text

    \n \"A\n
    \n
    \n
    2
    \n

    Write sentences using what you read

    \n \"A\n
    \n
    \n
    3
    \n

    Revise based on feedback

    \n \"A\n
    \n
    \n
    \n
    \n
    \n );\n}\n\nexport default WelcomeSlide;\n","import * as React from 'react'\n\nconst LoadingSpinner: React.SFC = () => (\n
    \n \"\"\n
    \n)\n\nexport default LoadingSpinner\n","import * as React from \"react\";\nimport { convertNodeToElement } from 'react-html-parser';\nimport { connect } from \"react-redux\";\nimport { stripHtml } from \"string-strip-html\";\n\nimport ActivityFollowUp from './activityFollowUp';\nimport ReadPassageContainer from './readPassageContainer';\nimport RightPanel from './rightPanel';\n\nimport { BECAUSE, BUT, CHECKLIST, CLICK, INTRODUCTION, KEYDOWN, KEYPRESS, MOUSEDOWN, MOUSEMOVE, READ_AND_HIGHLIGHT, READ_PASSAGE_STEP_NUMBER, SO, SO_PASSAGE_STEP_NUMBER, VISIBILITYCHANGE, roundMillisecondsToSeconds } from '../../../Shared/index';\nimport { getActivity, getTopicOptimalInfo } from \"../../actions/activities\";\nimport { TrackAnalyticsEvent } from \"../../actions/analytics\";\nimport { completeActivitySession, fetchActiveActivitySession, getFeedback, processUnfetchableSession, reportAProblem, saveActiveActivitySession, saveActivitySurveyResponse, setActiveStepForSession, setActivityIsCompleteForSession, setExplanationSlidesCompletedForSession, setPreviewSessionStep } from '../../actions/session';\nimport { everyOtherStepCompleted, getCurrentStepDataForEventTracking, getLastSubmittedResponse, getStrippedPassageHighlights, getUrlParam, onMobile, outOfAttemptsForActivePrompt } from '../../helpers/containerActionHelpers';\nimport { renderDirections } from '../../helpers/containerRenderHelpers';\nimport getParameterByName from '../../helpers/getParameterByName';\nimport { generateConceptResults, generatePercentageScore, } from '../../libs/conceptResults';\nimport { Events } from '../../modules/analytics';\nimport { ActivitiesReducerState } from '../../reducers/activitiesReducer';\nimport { SessionReducerState } from '../../reducers/sessionReducer';\nimport { postTurkSession } from '../../utils/turkAPI';\nimport { explanationData } from \"../activitySlides/explanationData\";\nimport ExplanationSlide from \"../activitySlides/explanationSlide\";\nimport WelcomeSlide from \"../activitySlides/welcomeSlide\";\nimport LoadingSpinner from '../shared/loadingSpinner';\n\ninterface StudentViewContainerProps {\n dispatch: Function;\n activities: ActivitiesReducerState;\n session: SessionReducerState;\n location?: any;\n handleFinishActivity?: () => void;\n isTurk?: boolean;\n user: string;\n userRole: string;\n previewMode: boolean;\n}\n\ninterface StudentViewContainerState {\n explanationSlideStep: number;\n completedSteps: Array;\n isIdle: boolean;\n showFocusState: boolean;\n startTime: number;\n timeTracking: { [key:string]: number };\n studentHighlights: string[];\n doneHighlighting: boolean;\n showReadTheDirectionsButton: boolean;\n scrolledToEndOfPassage: boolean;\n hasStartedReadPassageStep: boolean;\n hasStartedPromptSteps: boolean;\n}\n\nconst ONBOARDING = 'onboarding'\nconst ALL_STEPS = [READ_PASSAGE_STEP_NUMBER, 2, 3, 4]\nconst MINIMUM_STUDENT_HIGHLIGHT_COUNT = 2\n\nconst STUDENT_HIGHLIGHT_STARTS_TEXT = \"(highlighted text begins here)\"\nconst STUDENT_HIGHLIGHT_ENDS_TEXT = \"(highlighted text ends here)\"\nconst PASSAGE_HIGHLIGHT_STARTS_TEXT = \"(yellow underlined text begins here)\"\nconst PASSAGE_HIGHLIGHT_ENDS_TEXT = \"(yellow underlined text ends here)\"\n\nexport const StudentViewContainer = ({ dispatch, session, isTurk, location, activities, handleFinishActivity, user, previewMode, userRole, }: StudentViewContainerProps) => {\n const skipToSpecificStep = window.location.href.includes('skipToStep')\n const shouldSkipToPrompts = window.location.href.includes('turk') || window.location.href.includes('skipToPrompts') || skipToSpecificStep\n const defaultCompletedSteps = shouldSkipToPrompts ? [READ_PASSAGE_STEP_NUMBER] : []\n const sessionFromUrl = getUrlParam('session', location, isTurk)\n const activityUID = getUrlParam('uid', location, isTurk)\n\n const refs = {\n step1: React.useRef(),\n step2: React.useRef(),\n step3: React.useRef(),\n step4: React.useRef()\n }\n\n const inactivityTimer = React.useRef(null)\n\n const [explanationSlideStep, setExplanationSlideStep] = React.useState(0)\n const [completeButtonClicked, setCompleteButtonClicked] = React.useState(false)\n const [completedSteps, setCompletedSteps] = React.useState(defaultCompletedSteps)\n const [showFocusState, setShowFocusState] = React.useState(false)\n const [showStepsSummary, setShowStepsSummary] = React.useState(false)\n const [startTime, setStartTime] = React.useState(Date.now())\n const [isIdle, setIsIdle] = React.useState(false)\n const [studentHighlights, setStudentHighlights] = React.useState([])\n const [scrolledToEndOfPassage, setScrolledToEndOfPassage] = React.useState(shouldSkipToPrompts)\n const [hasStartedReadPassageStep, setHasStartedReadPassageStep] = React.useState(shouldSkipToPrompts)\n const [hasStartedPromptSteps, setHasStartedPromptsSteps] = React.useState(skipToSpecificStep)\n const [doneHighlighting, setDoneHighlighting] = React.useState(shouldSkipToPrompts)\n const [showReadTheDirectionsButton, setShowReadTheDirectionsButton] = React.useState(false)\n const [timeTracking, setTimeTracking] = React.useState({\n [ONBOARDING]: 0,\n 1: 0,\n 2: 0,\n 3: 0,\n 4: 0\n })\n\n React.useEffect(() => {\n const { activeStep } = session;\n if (Object.keys(session.submittedResponses).length && getStrippedPassageHighlights({ activities, session, activeStep })) {\n scrollToHighlight()\n }\n }, [session.submittedResponses])\n\n React.useEffect(() => {\n if(hasStartedReadPassageStep || session.previewSessionStep === READ_AND_HIGHLIGHT) {\n const el = document.getElementById('end-of-passage')\n const observer = new IntersectionObserver(([entry]) => { entry.isIntersecting ? setScrolledToEndOfPassage(entry.isIntersecting) : null; });\n\n el && observer.observe(el);\n }\n }, [hasStartedReadPassageStep, session.previewSessionStep]);\n\n React.useEffect(() => {\n dispatch(getTopicOptimalInfo(activityUID))\n if (sessionFromUrl) {\n const fetchActiveActivitySessionArgs = {\n sessionID: sessionFromUrl,\n activityUID: activityUID,\n callback: loadPreviousSession\n }\n dispatch(getActivity(sessionFromUrl, activityUID))\n .then(() => {\n dispatch(fetchActiveActivitySession(fetchActiveActivitySessionArgs))\n })\n } else {\n if (activityUID) {\n const { sessionID, } = session\n dispatch(getActivity(sessionID, activityUID))\n dispatch(processUnfetchableSession(sessionID));\n if (isTurk) {\n isTurk && handlePostTurkSession(sessionID);\n } else if (!skipToSpecificStep) {\n window.location.href = `${window.location.href}&session=${sessionID}`\n }\n }\n }\n }, [])\n\n React.useEffect(() => {\n window.addEventListener(KEYDOWN, handleKeyDown)\n window.addEventListener(MOUSEMOVE, resetTimers)\n window.addEventListener(MOUSEDOWN, resetTimers)\n window.addEventListener(CLICK, handleClick)\n window.addEventListener(KEYPRESS, resetTimers)\n window.addEventListener(VISIBILITYCHANGE, setIdle)\n\n return function cleanup() {\n window.removeEventListener(KEYDOWN, handleKeyDown)\n window.removeEventListener(MOUSEMOVE, resetTimers)\n window.removeEventListener(MOUSEDOWN, resetTimers)\n window.removeEventListener(CLICK, handleClick)\n window.removeEventListener(KEYPRESS, resetTimers)\n window.removeEventListener(VISIBILITYCHANGE, setIdle)\n }\n }, [session, activities, hasStartedPromptSteps, inactivityTimer, isIdle])\n\n React.useEffect(() => { activities.currentActivity ? document.title = `Quill.org | ${activities.currentActivity.title}` : null }, [activities.currentActivity])\n\n React.useEffect(() => {\n const { activeStep } = session;\n if (!outOfAttemptsForActivePrompt(activeStep, session, activities)) { return }\n\n if (!everyOtherStepCompleted(activeStep, completedSteps)) { return }\n\n completeStep(activeStep)\n }, [session.submittedResponses])\n\n React.useEffect(() => {\n if (onMobile()) { window.scrollTo(0, 0) }\n }, [doneHighlighting])\n\n React.useEffect(() => {\n if (completedSteps.length === defaultCompletedSteps.length || !activities.currentActivity ) { return }\n\n const uniqueCompletedSteps = Array.from(new Set(completedSteps))\n const { activeStep } = session;\n\n // Don't go to the next step if we haven't flagged the current step as completed\n // This particular condition can occur when loading data from a partially-completed session which triggers this effect\n if (!uniqueCompletedSteps.includes(activeStep)) return\n\n let nextStep: number|undefined = activeStep + 1\n if (nextStep > ALL_STEPS.length || uniqueCompletedSteps.includes(nextStep)) {\n nextStep = ALL_STEPS.find(s => !uniqueCompletedSteps.includes(s))\n }\n\n if (nextStep) {\n // don't activate a step if it's already active\n if (activeStep === nextStep) return\n // // don't activate nextSteps before Done reading button has been clicked\n if (nextStep && nextStep > 1 && !completedSteps.includes(READ_PASSAGE_STEP_NUMBER)) return\n\n dispatch(setActiveStepForSession(nextStep))\n setStartTime(Date.now())\n trackCurrentPromptStartedEvent()\n callSaveActiveActivitySession()\n } else {\n trackActivityCompletedEvent(); // If there is no next step, the activity is done\n }\n }, [completedSteps, activities.currentActivity])\n\n React.useEffect(() => {\n const { activeStep } = session;\n activeStep !== READ_PASSAGE_STEP_NUMBER ? scrollToStep(`step${activeStep}`) : null\n }, [session.activeStep])\n\n function handleReadPassageContainerScroll(e=null) {\n if (e) { resetTimers(e) }\n }\n\n function preparePreviewIntroductionStep() {\n dispatch(setPreviewSessionStep(INTRODUCTION))\n dispatch(setActiveStepForSession(1))\n dispatch(setExplanationSlidesCompletedForSession(false))\n dispatch(setActivityIsCompleteForSession(false))\n setExplanationSlideStep(0)\n setHasStartedReadPassageStep(false)\n setShowReadTheDirectionsButton(false)\n setScrolledToEndOfPassage(false)\n setDoneHighlighting(false)\n setHasStartedPromptsSteps(false)\n setCompleteButtonClicked(false)\n setCompletedSteps([])\n }\n\n function preparePreviewChecklistStep() {\n dispatch(setPreviewSessionStep(CHECKLIST))\n dispatch(setActiveStepForSession(1))\n dispatch(setExplanationSlidesCompletedForSession(true))\n dispatch(setActivityIsCompleteForSession(false))\n setHasStartedReadPassageStep(false)\n setShowReadTheDirectionsButton(false)\n setScrolledToEndOfPassage(false)\n setDoneHighlighting(false)\n setHasStartedPromptsSteps(false)\n setCompleteButtonClicked(false)\n setCompletedSteps([])\n }\n\n function preparePreviewReadAndHighlightStep() {\n dispatch(setPreviewSessionStep(READ_AND_HIGHLIGHT))\n dispatch(setActiveStepForSession(1))\n dispatch(setExplanationSlidesCompletedForSession(true))\n dispatch(setActivityIsCompleteForSession(false))\n setHasStartedReadPassageStep(true)\n setShowReadTheDirectionsButton(true)\n setScrolledToEndOfPassage(false)\n setStudentHighlights([])\n setDoneHighlighting(false)\n setHasStartedPromptsSteps(false)\n setCompleteButtonClicked(false)\n }\n\n function preparePreviewBecauseStep() {\n dispatch(setPreviewSessionStep(BECAUSE))\n dispatch(setActiveStepForSession(2))\n dispatch(setExplanationSlidesCompletedForSession(true))\n dispatch(setActivityIsCompleteForSession(false))\n setHasStartedReadPassageStep(true)\n setShowReadTheDirectionsButton(false)\n setScrolledToEndOfPassage(true)\n setDoneHighlighting(true)\n setHasStartedPromptsSteps(true)\n setCompleteButtonClicked(false)\n setCompletedSteps([1])\n }\n\n function preparePreviewButStep() {\n dispatch(setPreviewSessionStep(BUT))\n dispatch(setActiveStepForSession(3))\n dispatch(setExplanationSlidesCompletedForSession(true))\n dispatch(setActivityIsCompleteForSession(false))\n setHasStartedReadPassageStep(true)\n setShowReadTheDirectionsButton(false)\n setScrolledToEndOfPassage(true)\n setDoneHighlighting(true)\n setHasStartedPromptsSteps(true)\n setCompleteButtonClicked(false)\n setCompletedSteps([1, 2])\n }\n\n function preparePreviewSoStep() {\n dispatch(setPreviewSessionStep(SO))\n dispatch(setActiveStepForSession(4))\n dispatch(setExplanationSlidesCompletedForSession(true))\n dispatch(setActivityIsCompleteForSession(false))\n setHasStartedReadPassageStep(true)\n setShowReadTheDirectionsButton(false)\n setScrolledToEndOfPassage(true)\n setDoneHighlighting(true)\n setHasStartedPromptsSteps(true)\n setCompleteButtonClicked(false)\n setCompletedSteps([1, 2, 3])\n }\n\n React.useEffect(() => {\n const { previewSessionStep } = session;\n\n if(previewSessionStep === INTRODUCTION) {\n preparePreviewIntroductionStep()\n } else if(previewSessionStep === CHECKLIST) {\n preparePreviewChecklistStep()\n } else if(previewSessionStep === READ_AND_HIGHLIGHT) {\n preparePreviewReadAndHighlightStep()\n } else if(previewSessionStep === BECAUSE) {\n preparePreviewBecauseStep()\n } else if (previewSessionStep === BUT) {\n preparePreviewButStep()\n } else if (previewSessionStep === SO) {\n preparePreviewSoStep()\n }\n\n }, [session.previewSessionStep])\n\n function handleReadTheDirectionsButtonClick(e) {\n // prevents firing when clicking back to read and highlight step again during preview mode\n if(!e && previewMode) { return }\n setShowReadTheDirectionsButton(false)\n }\n\n function resetTimers(e=null) {\n const now = Date.now()\n const { activeStep } = session;\n if (completedSteps.includes(activeStep)) { return } // don't want to add time if a user is revisiting a previously completed step\n if (outOfAttemptsForActivePrompt(activeStep, session, activities)) { return } // or if they are finished submitting responses for the current active step\n if (activeStep > READ_PASSAGE_STEP_NUMBER && !hasStartedPromptSteps) { return } // or if they are between the read passage step and starting the prompts\n\n let elapsedTime = now - startTime\n if (isIdle) {\n elapsedTime = 0\n }\n const { explanationSlidesCompleted } = session;\n const activeStepKey = explanationSlidesCompleted ? activeStep : ONBOARDING\n const newTimeTracking = {...timeTracking, [activeStepKey]: timeTracking[activeStepKey] + elapsedTime}\n\n setTimeTracking(newTimeTracking)\n setIsIdle(false)\n setStartTime(now)\n inactivityTimerReset()\n\n return Promise.resolve(true);\n }\n\n function inactivityTimerReset() {\n if (inactivityTimer.current) { clearTimeout(inactivityTimer.current) }\n inactivityTimer.current = setTimeout(setIdle, 30000) // time is in milliseconds (1000 is 1 second)\n }\n\n function setIdle() {\n setIsIdle(true)\n setStartTime(Date.now())\n inactivityTimerReset()\n }\n\n function handlePostTurkSession(activitySessionId: string) {\n const turkingRoundID = getParameterByName('id', window.location.href);\n postTurkSession(turkingRoundID, activitySessionId).then(response => {\n const { error } = response;\n if(error) {\n alert(`${error}`);\n }\n });\n }\n\n function defaultHandleFinishActivity() {\n const { sessionID, submittedResponses, } = session\n const { currentActivity, topicOptimalData } = activities\n const conceptResults = generateConceptResults(currentActivity, submittedResponses, topicOptimalData)\n const percentage = generatePercentageScore(conceptResults)\n const data = {\n time_tracking: {\n onboarding: roundMillisecondsToSeconds(timeTracking[ONBOARDING]),\n reading: roundMillisecondsToSeconds(timeTracking[READ_PASSAGE_STEP_NUMBER]),\n because: roundMillisecondsToSeconds(timeTracking[2]),\n but: roundMillisecondsToSeconds(timeTracking[3]),\n so: roundMillisecondsToSeconds(timeTracking[4]),\n },\n student_highlights: studentHighlights\n }\n const callback = handleFinishActivity ? handleFinishActivity : () => {}\n dispatch(completeActivitySession(sessionID, currentActivity.parent_activity_id, percentage, conceptResults, data, callback))\n }\n\n function loadPreviousSession(data) {\n const { activeStep } = session;\n const highlights = data.studentHighlights || studentHighlights\n // if the student hasn't gotten to the highlighting stage yet,\n // we don't want them to skip seeing the directions modal and reading the passage again\n const studentHasAtLeastStartedHighlighting = (highlights && highlights.length) || shouldSkipToPrompts\n dispatch(setActiveStepForSession(data.activeStep || activeStep))\n setCompletedSteps(data.completedSteps || completedSteps)\n setTimeTracking(data.timeTracking || timeTracking)\n setStudentHighlights(highlights)\n setHasStartedReadPassageStep(studentHasAtLeastStartedHighlighting)\n setScrolledToEndOfPassage(studentHasAtLeastStartedHighlighting)\n setDoneHighlighting((studentHasAtLeastStartedHighlighting && highlights.length >= MINIMUM_STUDENT_HIGHLIGHT_COUNT) || shouldSkipToPrompts)\n }\n\n function activateStep(step) { dispatch(setActiveStepForSession(step)) }\n\n function submitResponse(entry: string, promptID: string, promptText: string, attempt: number, currentActivity: object) {\n const { sessionID, } = session\n const activityUID = getUrlParam('uid', location, isTurk)\n const previousFeedback = session.submittedResponses[promptID] || [];\n // strip any HTML injected by browser extensions (such as Chrome highlight)\n const strippedEntry = stripHtml(entry).result;\n if (activityUID) {\n const args = {\n sessionID,\n activityUID,\n entry: strippedEntry,\n promptID,\n promptText,\n attempt,\n previousFeedback,\n callback: submitResponseCallback,\n activityVersion: currentActivity?.version,\n }\n dispatch(getFeedback(args))\n }\n }\n\n function trackPassageReadEvent() {\n const { sessionID, } = session\n const activityUID = getUrlParam('uid', location, isTurk)\n\n if(!previewMode) {\n dispatch(TrackAnalyticsEvent(Events.EVIDENCE_PASSAGE_READ, {\n activityID: activityUID,\n sessionID: sessionID\n }));\n }\n }\n\n function trackCurrentPromptStartedEvent() {\n const { activeStep } = session;\n const trackingParams = getCurrentStepDataForEventTracking({ activeStep, activities, session, isTurk })\n if (!trackingParams) return; // Bail if there's no data to track\n\n if(!previewMode) {\n dispatch(TrackAnalyticsEvent(Events.EVIDENCE_PROMPT_STARTED, trackingParams))\n }\n }\n\n function trackCurrentPromptCompletedEvent() {\n const { activeStep } = session;\n const trackingParams = getCurrentStepDataForEventTracking({ activeStep, activities, session, isTurk })\n if (!trackingParams) return; // Bail if there's no data to track\n\n if(!previewMode) {\n dispatch(TrackAnalyticsEvent(Events.EVIDENCE_PROMPT_COMPLETED, trackingParams))\n }\n }\n\n function trackActivityCompletedEvent() {\n const { sessionID, } = session\n const activityID = getUrlParam('uid', location, isTurk)\n if(!previewMode) {\n dispatch(TrackAnalyticsEvent(Events.EVIDENCE_ACTIVITY_COMPLETED, {\n activityID,\n sessionID\n }));\n }\n dispatch(setActivityIsCompleteForSession(true));\n if(!previewMode) {\n defaultHandleFinishActivity()\n } else if(previewMode && session.previewSessionStep === SO) {\n dispatch(setPreviewSessionStep('complete'))\n }\n }\n\n function completeStep(stepNumber: number) {\n const newCompletedSteps = completedSteps.concat(stepNumber)\n const uniqueCompletedSteps = Array.from(new Set(newCompletedSteps))\n trackCurrentPromptCompletedEvent()\n setCompletedSteps(uniqueCompletedSteps)\n // we only want to render the step summary list again after completing the because and but prompts\n if(stepNumber > READ_PASSAGE_STEP_NUMBER && stepNumber < SO_PASSAGE_STEP_NUMBER) {\n setShowStepsSummary(true);\n }\n // preview mode actions\n if(previewMode && stepNumber === 1) {\n preparePreviewBecauseStep()\n } else if(previewMode && stepNumber === 2) {\n preparePreviewButStep()\n } else if(previewMode && stepNumber === 3) {\n preparePreviewSoStep()\n }\n }\n\n function handleClick(e) {\n if (showReadTheDirectionsButton && e.target.className.indexOf('read-the-directions-modal') === -1) {\n handleReadTheDirectionsButtonClick()\n }\n\n resetTimers(e)\n }\n\n function handleKeyDown(e) {\n if (e.key !== 'Tab' || showFocusState) { return }\n\n setShowFocusState(true)\n }\n\n function handleDoneReadingClick() {\n completeStep(READ_PASSAGE_STEP_NUMBER)\n const scrollContainer = document.getElementsByClassName(\"read-passage-container\")[0]\n scrollContainer.scrollTo(0, 0)\n if(!previewMode) {\n trackPassageReadEvent();\n }\n }\n\n function onStartReadPassage(e) {\n e.stopPropagation()\n if (previewMode) {\n preparePreviewReadAndHighlightStep()\n } else {\n setHasStartedReadPassageStep(true)\n setShowReadTheDirectionsButton(true)\n }\n }\n\n function onStartPromptSteps() {\n if(previewMode) {\n preparePreviewBecauseStep()\n } else {\n setHasStartedPromptsSteps(true)\n }\n }\n\n function submitProblemReport(args) {\n const { sessionID, } = session\n const lastSubmittedResponse = getLastSubmittedResponse({ activities, session, activeStep });\n const isOptimal = lastSubmittedResponse && lastSubmittedResponse.optimal;\n reportAProblem({...args, sessionID, isOptimal})\n }\n\n function handleClickDoneHighlighting() {\n setDoneHighlighting(true)\n }\n\n function scrollToStep(ref: string) {\n if (onMobile()) {\n scrollToStepOnMobile(ref)\n } else {\n const scrollContainer = document.getElementsByClassName(\"steps-outer-container\")[0]\n const el = refs[ref]\n\n if (scrollContainer) {\n scrollContainer.scrollTo(0, el.offsetTop - 34)\n }\n }\n }\n\n function scrollToHighlight() {\n const passageHighlights = document.getElementsByClassName('passage-highlight')\n if (!passageHighlights.length) { return }\n\n const el = passageHighlights[0].parentElement\n\n // we want to scroll 24px above the top of the paragraph, but we have to use 84 because of the 60px padding set at the top of the activity-container element\n const additionalTopOffset = 84\n\n if (onMobile()) {\n el.scrollIntoView(true)\n window.scrollBy(0, -additionalTopOffset)\n } else {\n const scrollContainer = document.getElementsByClassName(\"read-passage-container\")[0]\n scrollContainer.scrollTo(0, el.offsetTop - additionalTopOffset)\n }\n }\n\n function callSaveActiveActivitySession() {\n // we don't want to save an active activity session during preview mode because it will cause inconsistent behavior if page is refreshed\n if(previewMode) { return }\n\n const args = {\n completedSteps,\n timeTracking,\n studentHighlights,\n }\n dispatch(saveActiveActivitySession(args))\n }\n\n function submitResponseCallback() {\n callSaveActiveActivitySession()\n }\n\n function scrollToStepOnMobile(ref: string) {\n refs[ref].current ? refs[ref].current.scrollIntoView(false) : null\n }\n\n function handleHighlightKeyDown(e) {\n if (e.key !== 'Enter') { return }\n toggleStudentHighlight(e.currentTarget.textContent)\n }\n\n function handleHighlightClick(e) {\n toggleStudentHighlight(e.currentTarget.textContent)\n }\n\n function toggleStudentHighlight(stringText) {\n const textWithHighlightContentRemoved = stringText.replace(STUDENT_HIGHLIGHT_STARTS_TEXT, '').replace(STUDENT_HIGHLIGHT_ENDS_TEXT, '')\n let newHighlights = []\n\n if (studentHighlights.includes(textWithHighlightContentRemoved)) {\n newHighlights = studentHighlights.filter(hl => hl !== textWithHighlightContentRemoved)\n } else {\n newHighlights = studentHighlights.concat(stringText)\n }\n\n setStudentHighlights(newHighlights)\n }\n\n function toggleShowStepsSummary() {\n setShowStepsSummary(!showStepsSummary)\n }\n\n React.useEffect(() => {\n if (studentHighlights.length === 0 ) { return }\n callSaveActiveActivitySession()\n }, [studentHighlights])\n\n function stringifiedInnerElementsHelper(node) {\n if (node.data) { return node.data }\n if (node.children.length > 0) { return node.children.map(n => stringifiedInnerElementsHelper(n)).join(''); }\n return ''\n }\n\n function transformMarkTags(node) {\n const { activeStep } = session;\n const strippedPassageHighlights = getStrippedPassageHighlights({ activities, session, activeStep });\n\n\n if (['p'].includes(node.name) && activeStep > 1 && strippedPassageHighlights && strippedPassageHighlights.length) {\n const stringifiedInnerElements = node.children.map(n => stringifiedInnerElementsHelper(n)).join('');\n\n if (!stringifiedInnerElements) { return }\n\n const highlightIncludesElement = strippedPassageHighlights.find(ph => ph.includes(stringifiedInnerElements)) // handles case where passage highlight spans more than one paragraph\n const elementIncludesHighlight = strippedPassageHighlights.find(ph => stringifiedInnerElements.includes(ph)) // handles case where passage highlight is only part of paragraph\n\n if (highlightIncludesElement) {\n return (\n

    \n \n {PASSAGE_HIGHLIGHT_STARTS_TEXT}\n {stringifiedInnerElements}\n {PASSAGE_HIGHLIGHT_ENDS_TEXT}\n \n

    \n )\n }\n if (elementIncludesHighlight) {\n let newStringifiedInnerElements = stringifiedInnerElements\n strippedPassageHighlights.forEach(ph => newStringifiedInnerElements = newStringifiedInnerElements.replace(ph, `${PASSAGE_HIGHLIGHT_STARTS_TEXT}${ph}${PASSAGE_HIGHLIGHT_ENDS_TEXT}`))\n return

    \n }\n }\n\n if (node.name === 'mark') {\n const shouldBeHighlightable = !doneHighlighting && !showReadTheDirectionsButton && hasStartedReadPassageStep\n let innerElements = node.children.map((n, i) => convertNodeToElement(n, i, transformMarkTags))\n const stringifiedInnerElements = node.children.map(n => stringifiedInnerElementsHelper(n)).join('');\n let className = ''\n const highlighted = studentHighlights.includes(stringifiedInnerElements)\n if(activeStep === 1 && highlighted) {\n className += ' highlighted'\n const firstElement = {STUDENT_HIGHLIGHT_STARTS_TEXT}\n const lastElement = {STUDENT_HIGHLIGHT_ENDS_TEXT}\n innerElements = [firstElement, ...innerElements, lastElement]\n }\n className += shouldBeHighlightable ? ' highlightable' : ''\n if (!shouldBeHighlightable) { return {innerElements}}\n /* eslint-disable-next-line jsx-a11y/no-noninteractive-element-to-interactive-role */\n return {innerElements}\n }\n }\n\n function handleExplanationSlideClick() {\n const nextStep = explanationSlideStep + 1;\n if (nextStep > 3 && previewMode) {\n preparePreviewChecklistStep()\n } else if (nextStep > 3) {\n dispatch(setExplanationSlidesCompletedForSession(true))\n } else {\n setExplanationSlideStep(nextStep)\n }\n }\n\n const { submittedResponses, sessionID, explanationSlidesCompleted, activeStep, activityIsComplete } = session;\n\n if (!activities.hasReceivedData) { return }\n\n const className = `activity-container ${showFocusState ? '' : 'hide-focus-outline'} ${activeStep === READ_PASSAGE_STEP_NUMBER ? 'on-read-passage' : ''}`\n\n if(!explanationSlidesCompleted) {\n if (explanationSlideStep === 0) {\n return \n }\n return(\n \n );\n }\n\n if(completeButtonClicked && !window.location.href.includes('turk')) {\n return(\n \n );\n }\n\n const completionButtonCallback = () => {\n setCompleteButtonClicked(true)\n }\n\n return (\n

    \n {renderDirections({\n handleReadTheDirectionsButtonClick,\n activeStep,\n doneHighlighting,\n showReadTheDirectionsButton,\n activities,\n hasStartedReadPassageStep,\n hasStartedPromptSteps\n })}\n \n \n
    \n )\n\n}\n\nconst mapStateToProps = (state: any) => {\n return {\n activities: state.activities,\n session: state.session\n };\n};\n\nconst mapDispatchToProps = (dispatch: any) => {\n return {\n dispatch\n };\n};\n\nexport default connect(mapStateToProps, mapDispatchToProps)(StudentViewContainer);\n","import * as React from \"react\";\n\nimport { Snackbar, copyToClipboard } from '../../../Shared/index';\n\nexport const TurkCompleted = ({ code }) => {\n const [snackBarVisible, setSnackBarVisible] = React.useState(false);\n\n function handleCopyToClipboard(e: React.MouseEvent) {\n copyToClipboard(e, setSnackBarVisible);\n };\n\n return(\n
    \n

    Activity Completed!

    \n

    Thank you for completing this activity.

    \n

    Your responses will be used to develop our system so that millions of students around the world can improve their reading and writing skills.

    \n

    Survey code:

    \n
    {code}
    \n {/* Logical shortcut for only displaying the button if the copy command exists */}\n {document.queryCommandSupported('copy') &&\n
    \n \n \n
    }\n
    \n );\n}\n\nexport default TurkCompleted;\n","import * as React from \"react\";\nconst checkIcon = \"check;\n\nconst ListElement = (text: string, textArray?: string[], style?: string) => {\n const textElement = textArray ?
    {textArray[0]}

    {text}

    {textArray[1]}
    :

    {text}

    ;\n return(\n
  • \n {checkIcon}\n {textElement}\n
  • \n );\n}\n\nexport const TurkLanding = ({ handleStartActivity}) => {\n return(\n
    \n
    \n

    Quill Activity - Beta Testing of New Content

    \n

    You are completing a reading and writing activity. Your responses will be used to develop our system so that millions of students around the world can improve their reading and writing skills.

    \n
    \n
    \n

    Directions:

    \n
    You should:
    \n
      \n {ListElement('Read the passage')}\n {ListElement('Complete all three sentences')}\n {ListElement('Analyze the feedback provided')}\n {ListElement('five', ['Use the feedback to revise each sentence up to', ' times'])}\n
    \n
    Each of your sentences

    must

    \n
      \n {ListElement('one', ['Be ', ' sentence long'])}\n {ListElement('Use proper capitalization (i.e. do not write in capital letters)')}\n {ListElement('Be based on the text, but written in your own words')}\n
    \n
    \n
    \n Start Activity\n
    \n
    \n )\n}\n\nexport default TurkLanding;\n","import queryString from 'query-string';\nimport * as React from \"react\";\nimport { connect } from \"react-redux\";\n\nimport TurkCompleted from './completed';\nimport TurkLanding from './landing';\n\nimport validateTurkSession from '../../utils/turkAPI';\nimport StudentView from '../studentView/container';\n\nexport const TurkerView = ({ session }) => {\n const { sessionID } = session;\n const [activityStarted, setActivityStarted] = React.useState(false);\n const [activityCompleted, setActivityCompleted] = React.useState(false);\n\n function handleStartActivity() {\n setActivityStarted(true);\n }\n\n function handleFinishActivity() {\n setActivityCompleted(true);\n }\n\n function redirectIfInvalid(isValid) {\n if (!isValid) {\n window.location.href = `${window.postbuildEnv.DEFAULT_URL}/404`\n }\n }\n\n function validateUrl() {\n const search = window.location.href.split('?').pop()\n if (!search) { return }\n\n validateTurkSession(queryString.parse(search).id, queryString.parse(search).uid, redirectIfInvalid)\n }\n\n function componentToShow() {\n validateUrl()\n\n if (!activityStarted) { return }\n\n if (activityStarted && !activityCompleted) { return }\n\n return \n }\n\n return(\n
    \n {componentToShow()}\n
    \n )\n}\n\nconst mapStateToProps = (state: any) => {\n return {\n session: state.session\n };\n};\n\nexport default connect(mapStateToProps, {})(TurkerView);\n","import * as React from \"react\";\nimport { RouteConfig } from \"react-router-config\";\nimport { Route, Switch } from \"react-router-dom\";\nimport PageLayout from \"./components/PageLayout\";\nimport StudentView from './components/studentView/container';\nimport TurkerView from './components/turkerView';\n\nexport const routes: RouteConfig[] = [\n {\n path: \"/play\",\n component: (props: any) => ()\n },\n {\n path: \"/turk\",\n component: (props: any) => ()\n }\n];\n\nexport const route = (user: string) => {\n return(\n \n } path=\"/\" />\n \n );\n}\n","import { ActionTypes, IInitStoreAction } from './actionTypes'\n\nexport const initStoreAction = (): IInitStoreAction => {\n return {type: ActionTypes.INIT_STORE}\n}\n","import { Action } from \"redux\";\nimport { ActionTypes } from \"../actions/actionTypes\";\n\nimport { Activity } from '../interfaces/activities';\n\nexport interface ActivitiesReducerState {\n hasReceivedData: boolean;\n currentActivity?: Activity;\n error?: string;\n}\n\ntype ActivityAction = Action & { data: any } & { cid: string }\n\nexport default (\n currentState = { hasReceivedData: false },\n action: ActivityAction\n) => {\n switch (action.type) {\n case ActionTypes.RECEIVE_ACTIVITY_DATA:\n return Object.assign({}, currentState, { currentActivity: action.data, hasReceivedData: true });\n case ActionTypes.NO_ACTIVITY_FOUND:\n return Object.assign({}, currentState, { error: 'No activity found.'})\n case ActionTypes.RECEIVE_TOPIC_OPTIMAL_DATA:\n return Object.assign({}, currentState, { topicOptimalData: action.data });\n default:\n return currentState;\n }\n};\n","import { Action } from \"redux\";\nimport { v4 as uuid4 } from \"uuid\";\n\nimport { READ_PASSAGE_STEP_NUMBER } from '../../Shared/index';\nimport { ActionTypes } from \"../actions/actionTypes\";\nimport getParameterByName from '../helpers/getParameterByName';\nimport { FeedbackObject } from '../interfaces/feedback';\n\nexport interface SessionReducerState {\n sessionID: string\n submittedResponses: { [key: string]: FeedbackObject[] }|{}\n activeStep: number,\n previewSessionStep: string,\n explanationSlidesCompleted: boolean,\n activityIsComplete: boolean\n}\n\ntype SessionAction = Action & {\n promptID: string,\n feedbackObj: FeedbackObject,\n sessionID: string,\n submittedResponses: SessionReducerState[\"submittedResponses\"]\n activeStep: number,\n previewSessionStep: string,\n explanationSlidesCompleted: boolean,\n activityIsComplete: boolean\n}\n\nconst shouldSkipToPrompts = window.location.href.includes('turk') || window.location.href.includes('skipToPrompts') || window.location.href.includes('skipToStep')\nconst activityCompletionCount = parseInt(getParameterByName('activities', window.location.href)) || 0;\nconst ACTIVITY_COMPLETION_MAXIMUM_FOR_ONBOARDING = 3;\n\nexport default (\n currentState: SessionReducerState = {\n // Currently we want to initialize a random session for each\n // page load\n sessionID: uuid4(),\n submittedResponses: {},\n activeStep: shouldSkipToPrompts ? parseInt(getParameterByName('skipToStep', window.location.href)) || READ_PASSAGE_STEP_NUMBER + 1 : READ_PASSAGE_STEP_NUMBER,\n explanationSlidesCompleted: shouldSkipToPrompts || (activityCompletionCount > ACTIVITY_COMPLETION_MAXIMUM_FOR_ONBOARDING),\n activityIsComplete: false,\n previewSessionStep: null\n },\n action: SessionAction\n) => {\n switch (action.type) {\n case ActionTypes.SET_ACTIVITY_SESSION_ID:\n const { sessionID, } = action\n return Object.assign({}, currentState, { sessionID });\n case ActionTypes.SESSION_HAS_NO_DATA:\n return Object.assign({}, currentState, { hasReceivedData: true });\n case ActionTypes.SET_SUBMITTED_RESPONSES:\n const { submittedResponses, } = action\n return Object.assign({}, currentState, { explanationSlidesCompleted: true, submittedResponses, hasReceivedData: true });\n case ActionTypes.RECORD_FEEDBACK:\n const { promptID, feedbackObj, } = action\n const submittedResponsesForPrompt = currentState.submittedResponses[promptID] || []\n submittedResponsesForPrompt.push(feedbackObj)\n const newResponses = Object.assign({}, currentState.submittedResponses, { [promptID]: submittedResponsesForPrompt })\n return Object.assign({}, currentState, { submittedResponses: newResponses });\n case ActionTypes.SET_ACTIVE_STEP:\n const { activeStep } = action\n return Object.assign({}, currentState, { activeStep });\n case ActionTypes.SET_PREVIEW_SESSION_STEP:\n const { previewSessionStep } = action\n return Object.assign({}, currentState, { previewSessionStep });\n case ActionTypes.SET_EXPLANATIONS_SLIDES_COMPLETED:\n const { explanationSlidesCompleted } = action\n return Object.assign({}, currentState, { explanationSlidesCompleted });\n case ActionTypes.SET_ACTIVITY_IS_COMPLETE_FOR_SESSION:\n const { activityIsComplete } = action\n return Object.assign({}, currentState, { activityIsComplete });\n default:\n return currentState;\n }\n};\n","import { combineReducers } from \"redux\";\nimport { IState } from \"../store/configStore\";\nimport activities from './activitiesReducer';\nimport session from './sessionReducer';\n\nexport const initState: IState = {\n activities: {},\n session: {}\n};\n\nexport const rootReducer = combineReducers({\n activities,\n session\n});\n","import { Action, Dispatch, applyMiddleware, createStore } from \"redux\";\nimport { composeWithDevTools } from \"redux-devtools-extension/developmentOnly\";\nimport thunk from \"redux-thunk\";\nimport { initStoreAction } from \"../actions/actions\";\nimport { rootReducer } from \"../reducers/rootReducer\";\n\nexport interface IState {\n}\n\nexport const initStore = () => {\n return (dispatch: Dispatch>) => {\n const initialState = {\n }\n return dispatch(initStoreAction(initialState));\n };\n};\n\nexport const configureStore = () => {\n if (window.postbuildEnv.NODE_ENV === \"production\") {\n return createStore(\n rootReducer,\n applyMiddleware(thunk),\n );\n } else {\n return createStore(\n rootReducer,\n composeWithDevTools(\n applyMiddleware(thunk),\n ),\n );\n }\n};\n","import * as React from \"react\";\nimport { QueryClientProvider } from 'react-query';\nimport { Provider } from \"react-redux\";\nimport { HashRouter } from \"react-router-dom\";\nimport { CompatRouter } from \"react-router-dom-v5-compat\";\n\nimport { DefaultReactQueryClient } from '../Shared';\nimport { route } from \"./routes\";\nimport { configureStore, initStore } from \"./store/configStore\";\n\nconst store = configureStore();\nstore.dispatch(initStore());\nconst queryClient = new DefaultReactQueryClient();\n\nclass App extends React.Component<{user: string}, {}> {\n public render(): JSX.Element {\n const { user } = this.props;\n return (\n \n \n \n \n {route(user)}\n \n \n \n \n );\n }\n}\n\nexport default App;\n","import ReactOnRails from 'react-on-rails';\nimport App from './App.tsx';\n\nReactOnRails.register({ App, });\n"],"names":["READ_PASSAGE_STEP","getUrlParam","paramName","location","isTurk","getParameterByName","search","queryString","onMobile","orderedSteps","activities","currentActivity","a","b","outOfAttemptsForActivePrompt","activeStep","session","submittedResponses","activePrompt","responsesForPrompt","lastAttempt","getCurrentStepDataForEventTracking","sessionID","activityID","promptIndex","promptID","addPTagsToPassages","passages","scrolledToEndOfPassage","passage","text","paragraphArray","p","i","everyOtherStepCompleted","stepNumber","completedSteps","s","getLastSubmittedResponse","activePromptId","submittedResponsesForActivePrompt","getStrippedPassageHighlights","lastSubmittedResponse","passageHighlights","hl","highlight","stripHtml","logoSrc","mobileLogoSrc","helpIcon","checkIcon","whiteCheckGreenBackgroundIcon","Header","React.Component","props","dispatch","previewShowing","TrackAnalyticsEvent","Events","onTogglePreview","step","React.createElement","READ_PASSAGE_STEP_NUMBER","BECAUSE_PASSAGE_STEP_NUMBER","BUT_PASSAGE_STEP_NUMBER","SO_PASSAGE_STEP_NUMBER","isTeacher","explanationSlidesCompleted","activityIsComplete","showStepsCounter","isNotTurk","tooltipTrigger","showTeacherPreviewMenuButton","mobileStyle","Tooltip","TeacherPreviewMenuButton","mapStateToProps","state","mapDispatchToProps","Header$1","connect","PageLayout","user","turkSession","isPlaying","data","useQuery","fetchUserRole","isTeacherOrAdmin","setPreviewShowing","React.useState","questionToPreview","setQuestionToPreview","INTRODUCTION","React.useEffect","handleSkipToMainContentClick","element","handleTogglePreviewMenu","handleToggleQuestion","showPreview","contentClass","isOnMobile","ScreenreaderInstructions","TeacherPreviewMenu","renderRoutes","routes","baseImgSrc","checkMarkSrc","SURVEY_QUESTION","emojis","positiveMultipleChoiceOptions","negativeMultipleChoiceOptions","EmojiButton","src","alt","emojiNumber","setSelectedEmoji","selectedEmoji","handleClick","MultipleChoiceOption","selectedMultipleChoiceOptions","setSelectedMultipleChoiceOptions","optionIsSelected","opt","handleCheckboxClick","newSelectedMultipleChoiceOptions","checkbox","ActivitySurvey","activity","saveActivitySurveyResponse","setSubmittedActivitySurvey","resultPageUrl","containerRef","setContainerFocus","useFocus","mapMultipleChoiceOptionsForEventParams","options","option","key","handleSend","activitySurveyResponse","trackingParams","callback","handleLinkClick","activitySurveyHeader","multipleChoiceSection","multipleChoiceElements","emojiButtons","emoji","sendButtonClassName","conjunctions","BECAUSE","BUT","SO","PostActivitySlide","previewMode","prompts","responses","getStrongExemplar","conjunction","property","prompt","conjunctionRegex","stemWithoutConjunction","exemplar","getResponsesForConjunction","responsesKeyHash","responsesKeys","conjunctionString","getResponse","lastResponseText","splitResponse","renderResponseAndExamplarsSection","FIRST_STRONG_EXAMPLE","SECOND_STRONG_EXAMPLE","buttonClass","applaudingSrc","ThankYouSlide","backToDashboard","ActivityFollowUp","userRole","showActivitySurvey","setShowActivitySurvey","submittedActivitySurvey","onClickNext","getDefaults","defaults","changeDefaults","newDefaults","escapeTest","escapeReplace","escapeTestNoEncode","escapeReplaceNoEncode","escapeReplacements","getEscapeReplacement","ch","escape","html","encode","unescapeTest","unescape","_","caret","edit","regex","obj","name","val","nonWordAndColonTest","originIndependentUrl","cleanUrl","sanitize","base","href","prot","resolveUrl","baseUrls","justDomain","protocol","domain","rtrim","relativeBase","noopTest","merge","target","splitCells","tableRow","count","row","match","offset","str","escaped","curr","cells","c","invert","l","suffLen","currChar","findClosingBracket","level","checkSanitizeDeprecation","repeatString","pattern","result","outputLink","cap","link","raw","lexer","title","token","indentCodeCompensation","matchIndentToCode","indentToCode","node","matchIndentInNode","indentInNode","Tokenizer","trimmed","istask","ischecked","indent","blankLine","endsWithBlankLine","line","nextLine","rawLine","itemContents","endEarly","bull","isordered","list","itemRegex","nextBulletRegex","hrRegex","fencesBeginRegex","headingBeginRegex","spacers","t","hasMultipleLineBreaks","chars","lineBreaks","char","item","j","k","trimmedUrl","rtrimSlash","lastParenIndex","linkLen","links","maskedSrc","prevChar","nextChar","lLength","rDelim","rLength","delimTotal","midDelimTotal","endReg","hasNonSpaceChars","hasSpaceCharsOnBothEnds","mangle","prevCapZero","smartypants","block","inline","out","Lexer","rules","next","tokens","leading","tabs","lastToken","cutSrc","lastParagraphClipped","extTokenizer","startIndex","tempSrc","tempStart","getStartIndex","errMsg","keepPrevChar","Renderer","code","infostring","lang","quote","slugger","id","body","ordered","start","type","startatt","checked","header","content","flags","TextRenderer","Slugger","value","originalSlug","isDryRun","slug","occurenceAccumulator","Parser","parser","top","l2","l3","cell","loose","itemBody","task","ret","renderer","marked","e","done","err","pending","onError","args","opts","extensions","hasExtensions","pack","ext","prevRenderer","prop","tokenizer","prevTokenizer","walkTokens","values","childTokens","HeaderImage","headerImage","imageUrlToVisit","setImageUrlToVisit","imageAttributionModalOpen","setImageAttributionModalOpen","handleStayClick","handleLeaveClick","handleImageAttributionClick","renderImageAttributionModal","Modal","tooltipText","React.Fragment","ReadPassageContainer","handleReadPassageContainerScroll","hasStartedPromptSteps","hasStartedReadPassageStep","showReadTheDirectionsButton","transformMarkTags","innerContainerClassName","innerPassageShouldBeBlurred","formattedPassages","formattedPassage","ReactHtmlParser","MINIMUM_STUDENT_HIGHLIGHT_COUNT","ReadAndHighlightTracker","studentHighlights","handleClickDoneHighlighting","handleReadTheDirectionsButtonClick","minimumMet","doneButton","bigCheckIcon","BottomNavigation","doneHighlighting","handleDoneReadingClick","handleStartPromptStepsClick","handleStartReadingPassageClick","inReflection","showStepsSummary","toggleShowStepsSummary","promptDirections","highlightDirections","renderDirections","directionElementsArray","essentialKnowledgeSection","essential_knowledge_text","informationIcon","DirectionsSection","className","uniquePartOfHighlightPrompt","DEFAULT_HIGHLIGHT_PROMPT","DisplayStudentHighlight","studentHighlight","removeHighlight","handleClickRemove","removeIcon","ReadAndHighlightInstructions","handleRemoveHighlightClick","highlightText","studentHighlightsOrHighlightInstructions","readAndHighlightContainerClassName","sh","steps","Step","active","completed","StepOverview","EditorContainer","disabled","innerRef","handleTextChange","handleFocus","handleKeyDown","ContentEditable","canUseDOM","prev","fallback","fn","ms","handle","vendors","rafImpl","getKey","vendor","rafMethod","cb","request","hasClass","addClass","replaceClassName","origClass","classToRemove","removeClass","ownerDocument","ownerWindow","doc","getComputedStyle","psuedoElement","rUpper","hyphenate","string","msPattern","hyphenateStyleName","style","optionsSupported","onceSupported","addEventListener","eventName","handler","once","capture","wrappedHandler","onceHandler","event","removeEventListener","listen","triggerEvent","bubbles","cancelable","parseDuration","css","mult","emulateTransitionEnd","duration","padding","called","remove","transitionEnd","removeEmulate","transitionTimeout","transitionType","timeoutPropName","enabledPropName","nameShape","PropTypes","_typeof","ownKeys","object","enumerableOnly","keys","symbols","sym","_objectSpread","source","_defineProperty","_classCallCheck","instance","Constructor","_defineProperties","descriptor","_createClass","protoProps","staticProps","_inherits","subClass","superClass","_setPrototypeOf","o","_createSuper","Derived","hasNativeReflectConstruct","_isNativeReflectConstruct","Super","_getPrototypeOf","NewTarget","_possibleConstructorReturn","self","call","_assertThisInitialized","events","addEndListener","listener","propTypes","CSSTransitionGroupChild","_React$Component","_super","_this","timeout","animationType","finishCallback","findDOMNode","activeClassName","timer","removeListeners","finish","_this2","raf","_this3","React","_objectWithoutProperties","excluded","_objectWithoutPropertiesLoose","sourceSymbolKeys","sourceKeys","ReactCSSTransitionReplace","_assertThisInitialize","currentChildNode","nextProps","nextChild","currentChild","_this$state","currentKey","prevChildren","nextState","keysToLeave","child","moreProps","transitionName","ReactCSSTransitionReplaceChild","_this$state2","height","width","childrenToRender","_this$props","overflowHidden","component","childComponent","notifyLeaving","containerProps","transitioning","heightClassName","positionAbsolute","r","loopSrc","smallCheckCircleSrc","closeIconSrc","informationSrc","lightbulbSrc","reportAProblemOptions","optimal","ReportAProblemOption","handleSelectProblem","madeLastAttemptAndItWasSuboptimal","feedbackToShow","customFeedback","GRAMMAR","SPELLING","RULES_BASED_3","EVIDENCE_SUBOPTIMAL_SPELLING_OR_GRAMMAR_FINAL_ATTEMPT_FEEDBACK","feedbackForInnerHTML","feedback","Feedback","customFeedbackKey","reportAProblem","entry","hint","reportAProblemExpanded","setReportAProblemExpanded","reportSubmitted","setReportSubmitted","toggleReportAProblemExpanded","report","entryWithoutStem","imageSrc","imageAlt","reportAProblemButton","reportAProblemSection","reportAProblemOptionElements","label","headsUpSection","hintSection","explanation","image_alt_text","image_link","screenreaderPassageHighlightText","screenreaderResponseHighlightText","h","responseHighlights","TEXT_TYPE","saveSelection","containerEl","saveSelectionForWindowSelection","saveSelectionForDocumentSelection","range","preSelectionRange","selectedTextRange","preSelectionTextRange","restoreSelection","savedSel","restoreSelectionForWindowSelection","restoreSelectionForDocumentSelection","charIndex","nodeStack","foundStart","stop","nextCharIndex","sel","textRange","EditCaretPositioning","highlightSpelling","wordsToFormat","wordArray","newString","word","matched","augmentedRegex","highlightGrammar","highlightArray","promptLength","descendingOffsetComparator","stringAfterOffset","stringBeforeOffset","phraseToFormat","stripEvidenceHtml","RESPONSE","PROMPT","DIRECTIONS","APPROACHING_LIMIT_MESSAGE","OVER_LIMIT_MESSAGE","WARNING_THRESHOLD","LIMIT_THRESHOLD","MAX_ATTEMPTS","SLOW_FEEDBACK_CONSTRAINT","FEEDBACK_LOADING_LIMIT","PromptStep","lastSubmission","filteredHighlights","boldedString","escapeRegexCharacters","strippedPrompt","caretPosition","lastSpaceCorrectedValue","htmlStrippedPrompt","splitSubmission","newValue","formattedPromptWordArray","textWordArray","diffIndices","newTextWordArray","textToAddAfterPromptText","originalIndex","diffWordEquivalent","diffWordWithoutHtmlLettersArray","diffWordEquivalentWithoutHtmlLettersArray","indexOfLettersToKeepFromDiffWord","letter","partOfDiffWordToKeep","restOfSubmission","el","promptId","promptText","submitResponse","prevState","numberOfSubmissions","ctrlKey","metaKey","activateStep","completeStep","textWithoutStem","textForCharacterCount","spaceAtEnd","submissionTime","timeAtLastFeedbackSubmissionCheck","timeLapsed","completionButtonCallback","max_attempts","responseOverCharacterLimit","failedToLoadFeedback","awaitingFeedback","buttonLoadingSpinner","ButtonLoadingSpinner","buttonCopy","onClick","ariaLabel","characterCount","characterCountClassName","message","outOfAttempts","formattedText","htmlWithBolding","rawTextWithoutStem","attemptsCount","maxAttemptCount","React.createRef","renderDirectionsSection","renderReadPassageStep","PromptStepContainer","hasReceivedData","Steps","resetTimers","promptStepContainerProps","RightPanel","onStartPromptSteps","onStartReadPassage","toggleStudentHighlight","bottomNavigation","getActivity","activityUID","activityUrl","requestGet","ActionTypes","getTopicOptimalInfo","topicOptimalInfoUrl","generateConceptResults","topicOptimalData","conjunctionToQuestionNumber","conceptResults","response","index","attempt","conceptResultMetadata","generatePercentageScore","questionScores","questionNumber","questionScore","totalScore","acc","score","totalQuestions","postTurkSession","turkingRoundID","activitySessionUID","apiFetch","handleApiError","validateTurkSession","turkingRoundId","activityId","explanationData","Footer","buttonText","onHandleClick","ExplanationSlide","slideData","imageData","isBeta","subtext","imageUrl","WelcomeSlide","welcomeText","LoadingSpinner","ONBOARDING","ALL_STEPS","STUDENT_HIGHLIGHT_STARTS_TEXT","STUDENT_HIGHLIGHT_ENDS_TEXT","PASSAGE_HIGHLIGHT_STARTS_TEXT","PASSAGE_HIGHLIGHT_ENDS_TEXT","StudentViewContainer","handleFinishActivity","skipToSpecificStep","shouldSkipToPrompts","defaultCompletedSteps","sessionFromUrl","refs","React.useRef","inactivityTimer","explanationSlideStep","setExplanationSlideStep","completeButtonClicked","setCompleteButtonClicked","setCompletedSteps","showFocusState","setShowFocusState","setShowStepsSummary","startTime","setStartTime","isIdle","setIsIdle","setStudentHighlights","setScrolledToEndOfPassage","setHasStartedReadPassageStep","setHasStartedPromptsSteps","setDoneHighlighting","setShowReadTheDirectionsButton","timeTracking","setTimeTracking","scrollToHighlight","READ_AND_HIGHLIGHT","observer","fetchActiveActivitySessionArgs","loadPreviousSession","fetchActiveActivitySession","processUnfetchableSession","handlePostTurkSession","KEYDOWN","MOUSEMOVE","MOUSEDOWN","CLICK","KEYPRESS","VISIBILITYCHANGE","setIdle","uniqueCompletedSteps","nextStep","setActiveStepForSession","trackCurrentPromptStartedEvent","callSaveActiveActivitySession","trackActivityCompletedEvent","scrollToStep","preparePreviewIntroductionStep","setPreviewSessionStep","setExplanationSlidesCompletedForSession","setActivityIsCompleteForSession","preparePreviewChecklistStep","CHECKLIST","preparePreviewReadAndHighlightStep","preparePreviewBecauseStep","preparePreviewButStep","preparePreviewSoStep","previewSessionStep","now","elapsedTime","activeStepKey","newTimeTracking","inactivityTimerReset","activitySessionId","error","defaultHandleFinishActivity","percentage","roundMillisecondsToSeconds","completeActivitySession","highlights","studentHasAtLeastStartedHighlighting","previousFeedback","strippedEntry","submitResponseCallback","getFeedback","trackPassageReadEvent","trackCurrentPromptCompletedEvent","newCompletedSteps","submitProblemReport","isOptimal","ref","scrollToStepOnMobile","scrollContainer","additionalTopOffset","saveActiveActivitySession","handleHighlightKeyDown","handleHighlightClick","stringText","textWithHighlightContentRemoved","newHighlights","stringifiedInnerElementsHelper","n","strippedPassageHighlights","stringifiedInnerElements","highlightIncludesElement","ph","elementIncludesHighlight","newStringifiedInnerElements","shouldBeHighlightable","innerElements","convertNodeToElement","highlighted","firstElement","lastElement","handleExplanationSlideClick","StudentView","TurkCompleted","snackBarVisible","setSnackBarVisible","handleCopyToClipboard","copyToClipboard","Snackbar","ListElement","textArray","textElement","TurkLanding","handleStartActivity","TurkerView","activityStarted","setActivityStarted","activityCompleted","setActivityCompleted","redirectIfInvalid","isValid","validateUrl","componentToShow","TurkerView$1","route","Switch","Route","initStoreAction","currentState","action","activityCompletionCount","ACTIVITY_COMPLETION_MAXIMUM_FOR_ONBOARDING","uuid4","feedbackObj","submittedResponsesForPrompt","newResponses","rootReducer","combineReducers","initStore","configureStore","createStore","applyMiddleware","thunk","composeWithDevTools","store","queryClient","DefaultReactQueryClient","App","QueryClientProvider","Provider","HashRouter","CompatRouter","ReactOnRails"],"mappings":"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","x_google_ignoreList":[7,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34]}