{"version":3,"file":"constants-YCXc1j6j.js","sources":["../../../client/app/bundles/Shared/components/fillInBlank/prompt.tsx","../../../client/node_modules/react-addons-css-transition-group/index.js","../../../client/app/bundles/Shared/components/shared/carouselAnimation.tsx","../../../client/app/bundles/Shared/quill-marking-logic/src/libs/requiredWords.ts","../../../client/app/bundles/Shared/quill-marking-logic/src/libs/matchers/required_words_match.ts","../../../client/app/bundles/Shared/quill-marking-logic/src/libs/graders/diagnostic_question.ts","../../../client/app/bundles/Shared/quill-marking-logic/src/constants.ts","../../../client/app/bundles/Shared/quill-marking-logic/src/libs/matchers/length_match.ts","../../../client/app/bundles/Shared/quill-marking-logic/src/libs/graders/fill_in_the_blank.ts","../../../client/app/bundles/Shared/libs/fillInBlankInputStyleHelpers.tsx","../../../client/app/bundles/Shared/libs/fillInBlankInputStyle.tsx","../../../client/app/bundles/Shared/libs/splitPromptForFillInBlank.tsx","../../../client/app/bundles/Shared/components/shared/uploadOptimalResponses.tsx","../../../client/app/bundles/Shared/components/studentLessons/playTitleCard.tsx","../../../client/app/bundles/Shared/components/titleCards/titleCard.tsx","../../../client/node_modules/fuzzyset.js/dist/fuzzyset.esm.js","../../../client/node_modules/redux-persist/es/constants.js"],"sourcesContent":["import * as React from 'react';\n\ninterface Element {\n props: {\n children: string;\n style: object;\n }\n};\n\ninterface PromptProps {\n style: object;\n elements: Element[];\n}\n\nconst getElementObject = (htmlText: string, style: object) => {\n return {\n text: htmlText,\n style: style,\n key: htmlText\n }\n}\n\nconst getFormattedElementsArray = (elements: Element[]) => {\n\n let formattedElements = [];\n let htmlText = '';\n\n if(!elements) {\n return;\n }\n elements.map((element: Element, i: number) => {\n const { props } = element;\n // children is the html string\n const { children, style } = props;\n const nextElementIsInput = elements[i+1] && typeof elements[i+1].props.children !== 'string';\n\n if(children && typeof children === 'string' && nextElementIsInput) {\n htmlText += children;\n const elementObject = getElementObject(htmlText, style);\n formattedElements.push(elementObject);\n htmlText = '';\n // empty span element, add for spacing\n } else if(!children && nextElementIsInput) {\n const elementObject = getElementObject(htmlText, style);\n formattedElements.push(elementObject);\n htmlText = '';\n formattedElements.push()\n } else if(typeof children !== 'string') {\n formattedElements.push(element);\n } else if(typeof children === 'string' && i === elements.length - 1) {\n htmlText += children;\n const elementObject = getElementObject(htmlText, style);\n formattedElements.push(elementObject);\n } else {\n htmlText += `${children} `;\n }\n });\n\n return formattedElements.map((element, i) => {\n if(element.text || element.text === '') {\n return \n }\n return element;\n });\n}\n\nconst Prompt = (props: PromptProps) => {\n const { elements, style } = props;\n const formattedElements = getFormattedElementsArray(elements);\n\n return (\n
\n {formattedElements}\n
\n );\n}\n\nexport { Prompt };\n","/**\n * Copyright (c) 2013-present, Facebook, Inc.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n'use strict';\n\nmodule.exports = require('react-transition-group/CSSTransitionGroup');\n","import * as React from 'react';\nimport ReactCSSTransitionGroup from 'react-addons-css-transition-group';\n\nconst CarouselAnimation = ({ children, }) => (\n \n {children}\n \n)\n\nexport { CarouselAnimation };\n\n","import * as _ from 'underscore';\n// import {\n// getPartsOfSpeechWordsWithTags\n// } from './partsOfSpeechTagging';\nimport {Response, FeedbackObject} from '../interfaces/index'\nimport {stringNormalize} from 'quill-string-normalizer'\n\nconst posTranslations = {\n JJ: 'Adjective',\n JJR: 'Adjective',\n JJS: 'Adjective',\n\n RB: 'Adverb',\n RBR: 'Adverb',\n RBS: 'Adverb',\n WRB: 'Adverb',\n\n CC: 'Conjunction',\n\n NN: 'Noun',\n NNP: 'Noun',\n NNPS: 'Noun',\n NNS: 'Noun',\n\n CD: 'Number',\n LS: 'Number',\n\n IN: 'Preposition',\n\n PP$: 'Pronoun',\n PRP: 'Pronoun',\n WP: 'Pronoun',\n WP$: 'Pronoun',\n\n VB: 'Verb',\n VBD: 'Verb',\n VBG: 'Verb',\n VBN: 'Verb',\n VBP: 'Verb',\n VBZ: 'Verb',\n};\n\nconst posConceptResults = {\n Adjective: 'placeholder',\n Adverb: 'placeholder',\n Conjunction: 'placeholder',\n Noun: 'placeholder',\n Number: 'placeholder',\n Preposition: 'placeholder',\n Pronoun: 'placeholder',\n Verb: 'placeholder',\n};\n\nexport function getCommonWords(sentences: Array):Array {\n const words = _.map(sentences, sentence => normalizeString(sentence).split(' '));\n return _.intersection(...words);\n}\n\nexport function getCommonWordsWithImportantPOS(sentences: Array):Array {\n const allCommonWords = getCommonWords(sentences);\n return allCommonWords;\n}\n\nexport function getMissingWords(userString: string, sentences: Array):Array {\n const commonWords = getCommonWordsWithImportantPOS(sentences);\n const wordsFromUser = normalizeString(userString).split(' ');\n return _.reject(commonWords, commonWord => _.contains(wordsFromUser, commonWord));\n}\n\nfunction _getCaseSensitiveWord(word: string, optimalSentences: Array):string {\n const optimalSentence = optimalSentences[0]\n const normalizedString = removePunctuation(optimalSentence);\n const normalizedStringPlusLower = normalizeString(optimalSentence);\n const startIndex = normalizedStringPlusLower.indexOf(word);\n const normalizedWord = normalizedString.substring(startIndex, word.length + startIndex);\n if (normalizedWord != word) {\n return lowercaseNormalizedWordIfPossible(normalizedWord, word, optimalSentences)\n }\n return normalizedWord\n}\n\nfunction lowercaseNormalizedWordIfPossible(normalizedWord: string, originalWord:string, optimalSentences: Array):string {\n const optimalWords = _.map(optimalSentences, sentence => normalizeStringWithoutLowercasing(sentence).split(' '));\n if ([].concat.apply([], optimalWords).indexOf(originalWord) != -1) {\n return originalWord\n }\n return normalizedWord\n}\n\nexport function getFeedbackForWord(word: string, sentences:Array, isSentenceFragment:Boolean):string {\n if (isSentenceFragment) {\n return `

Revise your work. Use all the words from the prompt, and make it complete by adding to it.

`;\n }\n const caseSensitiveWord = _getCaseSensitiveWord(word, sentences);\n return `

Revise your sentence to include the word ${caseSensitiveWord}. You may have misspelled it.

`;\n}\n\nexport function extractSentencesFromResponses(responses:Array):Array {\n return responses.map(response => response.text);\n}\n\nexport function getMissingWordsFromResponses(userString:string, sentences:Array):Array {\n const missingWords = getMissingWords(userString, sentences);\n return _.sortBy(missingWords, word => word.length).reverse();\n}\n\nexport function checkForMissingWords(userString:string, responses:Array, isSentenceFragment:boolean = false):FeedbackObject {\n const sentences = extractSentencesFromResponses(responses);\n const missingWords = getMissingWordsFromResponses(userString, sentences);\n if (missingWords.length > 0) {\n return { feedback: getFeedbackForWord(missingWords[0], sentences, isSentenceFragment), };\n }\n}\n\nfunction normalizeString(string:string = ''):string {\n return stringNormalize(string).replace(/[.,?!;]/g, '').toLowerCase();\n}\n\nfunction removePunctuation(string:string = ''):string {\n return string.replace(/[.,?!;]/g, '');\n}\n\nfunction normalizeStringWithoutLowercasing(string:string=''):string {\n return stringNormalize(string).replace(/[.,?!;]/g, '');\n}\n","import * as _ from 'underscore'\nimport {stringNormalize} from 'quill-string-normalizer'\nimport {checkForMissingWords} from '../requiredWords'\nimport {getOptimalResponses, getTopOptimalResponse} from '../sharedResponseFunctions'\nimport {Response, FeedbackObject, PartialResponse} from '../../interfaces'\nimport {conceptResultTemplate} from '../helpers/concept_result_template'\n\nexport function requiredWordsMatch(responseString: string, responses:Array):FeedbackObject {\n return checkForMissingWords(stringNormalize(responseString), getOptimalResponses(responses));\n}\n\nexport function requiredWordsChecker(responseString: string, responses:Array):PartialResponse|undefined {\n const match = requiredWordsMatch(responseString, responses);\n if (match) {\n const feedback = match.feedback\n return requiredWordsResponseBuilder(responses, feedback)\n }\n}\n\nexport function requiredWordsResponseBuilder(responses:Array, feedback:string): PartialResponse {\n const res = {\n feedback,\n author: 'Required Words Hint',\n parent_id: getTopOptimalResponse(responses).id,\n concept_results: [\n conceptResultTemplate('N5VXCdTAs91gP46gATuvPQ')\n ]\n }\n return res\n}\n","import {Response, IncorrectSequence, FocusPoint} from '../../interfaces'\nimport {conceptResultTemplate} from '../helpers/concept_result_template'\n\nimport {exactMatch} from '../matchers/exact_match';\nimport {focusPointChecker} from '../matchers/focus_point_match';\nimport {incorrectSequenceChecker} from '../matchers/incorrect_sequence_match';\n\nexport function checkDiagnosticQuestion(\n question_uid: string,\n response: string,\n responses: Array,\n focusPoints: Array|null,\n incorrectSequences: Array|null,\n defaultConceptUID?: string\n): Response {\n const data = {\n response: response.trim().replace(/\\s{2,}/g, ' '),\n responses,\n focusPoints,\n incorrectSequences,\n };\n\n const responseTemplate = {\n text: data.response,\n question_uid,\n count: 1,\n gradeIndex: `nonhuman${question_uid}`,\n concept_results: defaultConceptUID ? [conceptResultTemplate(defaultConceptUID)] : []\n };\n\n const firstPass = checkForMatches(data, firstPassMatchers)\n if (firstPass) {\n const newResponse = Object.assign(responseTemplate, firstPass)\n return newResponse\n }\n\n responseTemplate.gradeIndex = `unmarked${question_uid}`\n return responseTemplate\n}\n\nfunction* firstPassMatchers(data) {\n const {response, responses, focusPoints, incorrectSequences} = data;\n const submission = response\n yield exactMatch(submission, responses)\n yield focusPointChecker(submission, focusPoints, responses);\n yield incorrectSequenceChecker(submission, incorrectSequences, responses);\n}\n\nfunction checkForMatches(data, matchingFunction: Function) {\n const gen = matchingFunction(data)\n let next = gen.next();\n while (true) {\n if (next.value || next.done) {\n break\n }\n next = gen.next()\n }\n if (next.value) {\n return next.value\n }\n\n}\n","export interface Constants {\n FIREBASE: string;\n\n\t// uI FEEDBACK ACTIONS\n DISPLAY_ERROR: string;\n DISPLAY_MESSAGE: string;\n DISMISS_FEEDBACK: string;\n CLEAR_DISPLAY_MESSAGE_AND_ERROR: string;\n\n\t// aUTH ACTIONS\n ATTEMPTING_LOGIN: string;\n LOGIN_USER: string;\n LOGOUT: string;\n\n\t// aUTH STATES\n LOGGED_IN: string;\n ANONYMOUS: string;\n AWAITING_AUTH_RESPONSE: string;\n\n\t// cONCEPT ACTIONS\n RECEIVE_CONCEPTS_DATA: string;\n AWAIT_NEW_CONCEPT_RESPONSE: string;\n RECEIVE_NEW_CONCEPT_RESPONSE: string;\n START_CONCEPT_EDIT: string;\n FINISH_CONCEPT_EDIT: string;\n SUBMIT_CONCEPT_EDIT: string;\n TOGGLE_NEW_CONCEPT_MODAL: string;\n\n\t// cONCEPT STATES\n EDITING_CONCEPT: string;\n SUBMITTING_CONCEPT: string;\n\n\t// lESSON ACTIONS\n RECEIVE_LESSONS_DATA: string;\n AWAIT_NEW_LESSON_RESPONSE: string;\n RECEIVE_NEW_LESSON_RESPONSE: string;\n START_LESSON_EDIT: string;\n FINISH_LESSON_EDIT: string;\n SUBMIT_LESSON_EDIT: string;\n TOGGLE_NEW_LESSON_MODAL: string;\n\n // CLASSROOM_LESSON ACTIONS\n RECEIVE_CLASSROOM_LESSONS_DATA: string;\n RECEIVE_CLASSROOM_LESSON_DATA: string;\n RECEIVE_CLASSROOM_LESSONS_REVIEW_DATA: string;\n NO_LESSON_ID: string;\n NO_LESSONS: string;\n SET_LESSON_ID: string;\n CLEAR_CLASSROOM_LESSON_DATA: string;\n\n\t// lESSON STATES\n EDITING_LESSON: string;\n SUBMITTING_LESSON: string;\n\n\t// QUESTION ACTIONS\n RECEIVE_QUESTIONS_DATA: string;\n AWAIT_NEW_QUESTION_RESPONSE: string;\n RECEIVE_NEW_QUESTION_RESPONSE: string;\n START_QUESTION_EDIT: string;\n FINISH_QUESTION_EDIT: string;\n SUBMIT_QUESTION_EDIT: string;\n TOGGLE_NEW_QUESTION_MODAL: string;\n SHOULD_RELOAD_RESPONSES: string;\n CLEAR_QUESTION_STATE: string;\n UPDATE_SEARCHED_RESPONSES: string;\n SET_RESPONSE_PAGE_NUMBER: string;\n SET_RESPONSE_STRING_FILTER: string;\n INCREMENT_REQUEST_COUNT: string;\n SET_SUGGESTED_SEQUENCES: string;\n SET_USED_SEQUENCES: string;\n SET_COVERED_SEQUENCES: string;\n\n\t// QUESTION STATES\n EDITING_QUESTION: string;\n SUBMITTING_QUESTION: string;\n\n // FILL IN BLANK QUESTION ACTIONS\n RECEIVE_FILL_IN_BLANK_QUESTIONS_DATA: string;\n AWAIT_NEW_FILL_IN_BLANK_QUESTION_RESPONSE: string;\n RECEIVE_NEW_FILL_IN_BLANK_QUESTION_RESPONSE: string;\n START_FILL_IN_BLANK_QUESTION_EDIT: string;\n FINISH_FILL_IN_BLANK_QUESTION_EDIT: string;\n SUBMIT_FILL_IN_BLANK_QUESTION_EDIT: string;\n TOGGLE_NEW_FILL_IN_BLANK_QUESTION_MODAL: string;\n\n\t// FILL IN BLANK QUESTION STATES\n EDITING_FILL_IN_BLANK_QUESTION: string;\n SUBMITTING_FILL_IN_BLANK_QUESTION: string;\n\n\t// QUESTION RESPONSE STATES\n START_RESPONSE_EDIT: string;\n CANCEL_RESPONSE_EDIT: string;\n FINISH_RESPONSE_EDIT: string;\n SUBMIT_RESPONSE_EDIT: string;\n SUBMITTING_RESPONSE: string;\n START_CHILD_RESPONSE_VIEW: string;\n CANCEL_CHILD_RESPONSE_VIEW: string;\n START_FROM_RESPONSE_VIEW: string;\n CANCEL_FROM_RESPONSE_VIEW: string;\n START_TO_RESPONSE_VIEW: string;\n CANCEL_TO_RESPONSE_VIEW: string;\n\n\t// dIAGNOSTIC QUESTION ACTIONS\n RECEIVE_DIAGNOSTIC_QUESTIONS_DATA: string;\n AWAIT_NEW_DIAGNOSTIC_QUESTION_RESPONSE: string;\n RECEIVE_NEW_DIAGNOSTIC_QUESTION_RESPONSE: string;\n START_DIAGNOSTIC_QUESTION_EDIT: string;\n FINISH_DIAGNOSTIC_QUESTION_EDIT: string;\n SUBMIT_DIAGNOSTIC_QUESTION_EDIT: string;\n TOGGLE_NEW_DIAGNOSTIC_QUESTION_MODAL: string;\n\n\t// dIAGNOSTIC_QUESTION STATES\n EDITING_DIAGNOSTIC_QUESTION: string;\n SUBMITTING_DIAGNOSTIC_QUESTION: string;\n\n\t// dIAGNOSTIC QUESTION RESPONSE STATES\n START_DIAGNOSTIC_RESPONSE_EDIT: string;\n CANCEL_DIAGNOSTIC_RESPONSE_EDIT: string;\n FINISH_DIAGNOSTIC_RESPONSE_EDIT: string;\n SUBMIT_DIAGNOSTIC_RESPONSE_EDIT: string;\n SUBMITTING_DIAGNOSTIC_RESPONSE: string;\n START_CHILD_DIAGNOSTIC_RESPONSE_VIEW: string;\n CANCEL_CHILD_DIAGNOSTIC_RESPONSE_VIEW: string;\n START_FROM_DIAGNOSTIC_RESPONSE_VIEW: string;\n CANCEL_FROM_DIAGNOSTIC_RESPONSE_VIEW: string;\n START_TO_DIAGNOSTIC_RESPONSE_VIEW: string;\n CANCEL_TO_DIAGNOSTIC_RESPONSE_VIEW: string;\n\n\t// rESPONSE ACTIONS:\n TOGGLE_EXPAND_SINGLE_RESPONSE: string;\n COLLAPSE_ALL_RESPONSES: string;\n EXPAND_ALL_RESPONSES: string;\n TOGGLE_STATUS_FIELD: string;\n TOGGLE_RESPONSE_SORT: string;\n RESET_ALL_FIELDS: string;\n TOGGLE_MASS_SELECTION: string;\n DESELECT_ALL_FIELDS: string;\n\n // mASS EDIT RESPONSE ACTIONS\n ADD_RESPONSE_TO_MASS_EDIT_ARRAY: string;\n REMOVE_RESPONSE_FROM_MASS_EDIT_ARRAY: string;\n CLEAR_RESPONSES_FROM_MASS_EDIT_ARRAY: string;\n\n NUMBERS_AS_WORDS: Array;\n\n INSTRUCTIONS: any;\n\n\t// cONCEPTS FEEDBACK ACTIONS\n RECEIVE_CONCEPTS_FEEDBACK_DATA: string;\n AWAIT_NEW_CONCEPTS_FEEDBACK_RESPONSE: string;\n RECEIVE_NEW_CONCEPTS_FEEDBACK_RESPONSE: string;\n START_CONCEPTS_FEEDBACK_EDIT: string;\n FINISH_CONCEPTS_FEEDBACK_EDIT: string;\n SUBMIT_CONCEPTS_FEEDBACK_EDIT: string;\n TOGGLE_NEW_CONCEPTS_FEEDBACK_MODAL: string;\n\n\t// iTEM LEVEL ACTIONS\n RECEIVE_ITEM_LEVELS_DATA: string;\n AWAIT_NEW_ITEM_LEVEL_RESPONSE: string;\n RECEIVE_NEW_ITEM_LEVEL_RESPONSE: string;\n START_ITEM_LEVEL_EDIT: string;\n FINISH_ITEM_LEVEL_EDIT: string;\n SUBMIT_ITEM_LEVEL_EDIT: string;\n TOGGLE_NEW_ITEM_LEVEL_MODAL: string;\n\n\t// iTEM LEVEL STATES\n EDITING_ITEM_LEVEL: string;\n SUBMITTING_ITEM_LEVEL: string;\n\n\t// sENTENCE_FRAGMENT ACTIONS\n RECEIVE_SENTENCE_FRAGMENTS_DATA: string;\n AWAIT_NEW_SENTENCE_FRAGMENT_RESPONSE: string;\n RECEIVE_NEW_SENTENCE_FRAGMENT_RESPONSE: string;\n START_SENTENCE_FRAGMENT_EDIT: string;\n FINISH_SENTENCE_FRAGMENT_EDIT: string;\n SUBMIT_SENTENCE_FRAGMENT_EDIT: string;\n TOGGLE_NEW_SENTENCE_FRAGMENT_MODAL: string;\n\n\t// sENTENCE_FRAGMENT STATES\n EDITING_SENTENCE_FRAGMENT: string;\n SUBMITTING_SENTENCE_FRAGMENT: string;\n\n\t// sESSION ACTIONS\n UPDATE_SESSION_DATA: string;\n DELETE_SESSION_DATA: string;\n DELETE_ALL_SESSION_DATA: string;\n\n\t// rESPONSE ACTIONS\n UPDATE_RESPONSE_STATUS: string;\n UPDATE_RESPONSE_DATA: string;\n DELETE_RESPONSE_STATUS: string;\n\n // score Analysis ACTIONS\n RECEIVE_SCORE_ANALYSIS_DATA: string;\n\n // CLASSROOM SESSION ACTIONS\n UPDATE_CLASSROOM_SESSION_DATA: string;\n UPDATE_CLASSROOM_SESSION_WITHOUT_CURRENT_SLIDE: string;\n UPDATE_SLIDE_IN_STORE: string;\n TOGGLE_HEADERS: string;\n NO_CLASSROOM_ACTIVITY: string;\n NO_STUDENT_ID: string;\n HIDE_SIGNUP_MODAL: string;\n SHOW_SIGNUP_MODAL: string;\n\n // CUSTOMIZE ACTIONS\n SET_USER_ID: string;\n SET_COTEACHERS: string;\n SET_EDITION_METADATA: string;\n SET_EDITION_QUESTIONS: string;\n SET_WORKING_EDITION_QUESTIONS: string;\n SET_WORKING_EDITION_METADATA: string;\n SET_INCOMPLETE_QUESTIONS: string;\n}\n\n\nconst constants: Constants = {\n // mISC\n FIREBASE: 'https://quillconnectstaging.firebaseio.com/v2/',\n\n // uI FEEDBACK ACTIONS\n DISPLAY_ERROR: 'DISPLAY_ERROR',\n DISPLAY_MESSAGE: 'DISPLAY_MESSAGE',\n DISMISS_FEEDBACK: 'DISMISS_FEEDBACK',\n CLEAR_DISPLAY_MESSAGE_AND_ERROR: 'CLEAR_DISPLAY_MESSAGE_AND_ERROR',\n\n // aUTH ACTIONS\n ATTEMPTING_LOGIN: 'ATTEMPTING_LOGIN',\n LOGIN_USER: 'LOGIN_USER',\n LOGOUT: 'LOGOUT',\n\n // aUTH STATES\n LOGGED_IN: 'LOGGED_IN',\n ANONYMOUS: 'ANONYMOUS',\n AWAITING_AUTH_RESPONSE: 'AWAITING_AUTH_RESPONSE',\n\n // cONCEPT ACTIONS\n RECEIVE_CONCEPTS_DATA: 'RECEIVE_CONCEPTS_DATA',\n AWAIT_NEW_CONCEPT_RESPONSE: 'AWAIT_NEW_CONCEPT_RESPONSE',\n RECEIVE_NEW_CONCEPT_RESPONSE: 'RECEIVE_NEW_CONCEPT_RESPONSE',\n START_CONCEPT_EDIT: 'START_CONCEPT_EDIT',\n FINISH_CONCEPT_EDIT: 'FINISH_CONCEPT_EDIT',\n SUBMIT_CONCEPT_EDIT: 'SUBMIT_CONCEPT_EDIT',\n TOGGLE_NEW_CONCEPT_MODAL: 'TOGGLE_NEW_CONCEPT_MODAL',\n\n // cONCEPT STATES\n EDITING_CONCEPT: 'EDITING_CONCEPT',\n SUBMITTING_CONCEPT: 'SUBMITTING_CONCEPT',\n\n // lESSON ACTIONS\n RECEIVE_LESSONS_DATA: 'RECEIVE_LESSONS_DATA',\n AWAIT_NEW_LESSON_RESPONSE: 'AWAIT_NEW_LESSON_RESPONSE',\n RECEIVE_NEW_LESSON_RESPONSE: 'RECEIVE_NEW_LESSON_RESPONSE',\n START_LESSON_EDIT: 'START_LESSON_EDIT',\n FINISH_LESSON_EDIT: 'FINISH_LESSON_EDIT',\n SUBMIT_LESSON_EDIT: 'SUBMIT_LESSON_EDIT',\n TOGGLE_NEW_LESSON_MODAL: 'TOGGLE_NEW_LESSON_MODAL',\n\n // CLASSROOM_LESSON ACTIONS\n RECEIVE_CLASSROOM_LESSONS_DATA: 'RECEIVE_CLASSROOM_LESSONS_DATA',\n RECEIVE_CLASSROOM_LESSON_DATA: 'RECEIVE_CLASSROOM_LESSON_DATA',\n RECEIVE_CLASSROOM_LESSONS_REVIEW_DATA: 'RECEIVE_CLASSROOM_LESSONS_REVIEW_DATA',\n NO_LESSON_ID: 'NO_LESSON_ID',\n NO_LESSONS: 'NO_LESSONS',\n SET_LESSON_ID: 'SET_LESSON_ID',\n CLEAR_CLASSROOM_LESSON_DATA: 'CLEAR_CLASSROOM_LESSON_DATA',\n\n // lESSON STATES\n EDITING_LESSON: 'EDITING_LESSON',\n SUBMITTING_LESSON: 'SUBMITTING_LESSON',\n\n // QUESTION ACTIONS\n RECEIVE_QUESTIONS_DATA: 'RECEIVE_QUESTIONS_DATA',\n AWAIT_NEW_QUESTION_RESPONSE: 'AWAIT_NEW_QUESTION_RESPONSE',\n RECEIVE_NEW_QUESTION_RESPONSE: 'RECEIVE_NEW_QUESTION_RESPONSE',\n START_QUESTION_EDIT: 'START_QUESTION_EDIT',\n FINISH_QUESTION_EDIT: 'FINISH_QUESTION_EDIT',\n SUBMIT_QUESTION_EDIT: 'SUBMIT_QUESTION_EDIT',\n TOGGLE_NEW_QUESTION_MODAL: 'TOGGLE_NEW_QUESTION_MODAL',\n SHOULD_RELOAD_RESPONSES: 'SHOULD_RELOAD_RESPONSES',\n CLEAR_QUESTION_STATE: 'CLEAR_QUESTION_STATE',\n UPDATE_SEARCHED_RESPONSES: 'UPDATE_SEARCHED_RESPONSES',\n SET_RESPONSE_PAGE_NUMBER: 'SET_RESPONSE_PAGE_NUMBER',\n SET_RESPONSE_STRING_FILTER: 'SET_RESPONSE_STRING_FILTER',\n INCREMENT_REQUEST_COUNT: 'INCREMENT_REQUEST_COUNT',\n SET_SUGGESTED_SEQUENCES: 'SET_SUGGESTED_SEQUENCES',\n SET_USED_SEQUENCES: 'SET_USED_SEQUENCES',\n SET_COVERED_SEQUENCES: 'SET_COVERED_SEQUENCES',\n\n // QUESTION STATES\n EDITING_QUESTION: 'EDITING_QUESTION',\n SUBMITTING_QUESTION: 'SUBMITTING_QUESTION',\n\n // FILL IN BLANK QUESTION ACTIONS\n RECEIVE_FILL_IN_BLANK_QUESTIONS_DATA: 'RECEIVE_FILL_IN_BLANK_QUESTIONS_DATA',\n AWAIT_NEW_FILL_IN_BLANK_QUESTION_RESPONSE: 'AWAIT_NEW_FILL_IN_BLANK_QUESTION_RESPONSE',\n RECEIVE_NEW_FILL_IN_BLANK_QUESTION_RESPONSE: 'RECEIVE_NEW_FILL_IN_BLANK_QUESTION_RESPONSE',\n START_FILL_IN_BLANK_QUESTION_EDIT: 'START_FILL_IN_BLANK_QUESTION_EDIT',\n FINISH_FILL_IN_BLANK_QUESTION_EDIT: 'FINISH_FILL_IN_BLANK_QUESTION_EDIT',\n SUBMIT_FILL_IN_BLANK_QUESTION_EDIT: 'SUBMIT_FILL_IN_BLANK_QUESTION_EDIT',\n TOGGLE_NEW_FILL_IN_BLANK_QUESTION_MODAL: 'TOGGLE_NEW_FILL_IN_BLANK_QUESTION_MODAL',\n\n // FILL IN BLANK QUESTION STATES\n EDITING_FILL_IN_BLANK_QUESTION: 'EDITING_FILL_IN_BLANK_QUESTION',\n SUBMITTING_FILL_IN_BLANK_QUESTION: 'SUBMITTING_FILL_IN_BLANK_QUESTION',\n\n // QUESTION RESPONSE STATES\n START_RESPONSE_EDIT: 'START_RESPONSE_EDIT',\n CANCEL_RESPONSE_EDIT: 'CANCEL_RESPONSE_EDIT',\n FINISH_RESPONSE_EDIT: 'FINISH_RESPONSE_EDIT',\n SUBMIT_RESPONSE_EDIT: 'SUBMIT_RESPONSE_EDIT',\n SUBMITTING_RESPONSE: 'SUBMITTING_RESPONSE',\n START_CHILD_RESPONSE_VIEW: 'START_CHILD_RESPONSE_VIEW',\n CANCEL_CHILD_RESPONSE_VIEW: 'CANCEL_CHILD_RESPONSE_VIEW',\n START_FROM_RESPONSE_VIEW: 'START_FROM_RESPONSE_VIEW',\n CANCEL_FROM_RESPONSE_VIEW: 'CANCEL_FROM_RESPONSE_VIEW',\n START_TO_RESPONSE_VIEW: 'START_TO_RESPONSE_VIEW',\n CANCEL_TO_RESPONSE_VIEW: 'CANCEL_TO_RESPONSE_VIEW',\n\n // dIAGNOSTIC QUESTION ACTIONS\n RECEIVE_DIAGNOSTIC_QUESTIONS_DATA: 'RECEIVE_DIAGNOSTIC_QUESTIONS_DATA',\n AWAIT_NEW_DIAGNOSTIC_QUESTION_RESPONSE: 'AWAIT_NEW_DIAGNOSTIC_QUESTION_RESPONSE',\n RECEIVE_NEW_DIAGNOSTIC_QUESTION_RESPONSE: 'RECEIVE_NEW_DIAGNOSTIC_QUESTION_RESPONSE',\n START_DIAGNOSTIC_QUESTION_EDIT: 'START_DIAGNOSTIC_QUESTION_EDIT',\n FINISH_DIAGNOSTIC_QUESTION_EDIT: 'FINISH_DIAGNOSTIC_QUESTION_EDIT',\n SUBMIT_DIAGNOSTIC_QUESTION_EDIT: 'SUBMIT_DIAGNOSTIC_QUESTION_EDIT',\n TOGGLE_NEW_DIAGNOSTIC_QUESTION_MODAL: 'TOGGLE_NEW_DIAGNOSTIC_QUESTION_MODAL',\n\n // dIAGNOSTIC_QUESTION STATES\n EDITING_DIAGNOSTIC_QUESTION: 'EDITING_DIAGNOSTIC_QUESTION',\n SUBMITTING_DIAGNOSTIC_QUESTION: 'SUBMITTING_DIAGNOSTIC_QUESTION',\n\n // dIAGNOSTIC QUESTION RESPONSE STATES\n START_DIAGNOSTIC_RESPONSE_EDIT: 'START_DIAGNOSTIC_RESPONSE_EDIT',\n CANCEL_DIAGNOSTIC_RESPONSE_EDIT: 'CANCEL_DIAGNOSTIC_RESPONSE_EDIT',\n FINISH_DIAGNOSTIC_RESPONSE_EDIT: 'FINISH_DIAGNOSTIC_RESPONSE_EDIT',\n SUBMIT_DIAGNOSTIC_RESPONSE_EDIT: 'SUBMIT_DIAGNOSTIC_RESPONSE_EDIT',\n SUBMITTING_DIAGNOSTIC_RESPONSE: 'SUBMITTING_DIAGNOSTIC_RESPONSE',\n START_CHILD_DIAGNOSTIC_RESPONSE_VIEW: 'START_CHILD_DIAGNOSTIC_RESPONSE_VIEW',\n CANCEL_CHILD_DIAGNOSTIC_RESPONSE_VIEW: 'CANCEL_CHILD_DIAGNOSTIC_RESPONSE_VIEW',\n START_FROM_DIAGNOSTIC_RESPONSE_VIEW: 'START_FROM_DIAGNOSTIC_RESPONSE_VIEW',\n CANCEL_FROM_DIAGNOSTIC_RESPONSE_VIEW: 'CANCEL_FROM_DIAGNOSTIC_RESPONSE_VIEW',\n START_TO_DIAGNOSTIC_RESPONSE_VIEW: 'START_TO_DIAGNOSTIC_RESPONSE_VIEW',\n CANCEL_TO_DIAGNOSTIC_RESPONSE_VIEW: 'CANCEL_TO_DIAGNOSTIC_RESPONSE_VIEW',\n\n // rESPONSE ACTIONS:\n TOGGLE_EXPAND_SINGLE_RESPONSE: 'TOGGLE_EXPAND_SINGLE_RESPONSE',\n COLLAPSE_ALL_RESPONSES: 'COLLAPSE_ALL_RESPONSES',\n EXPAND_ALL_RESPONSES: 'EXPAND_ALL_RESPONSES',\n TOGGLE_STATUS_FIELD: 'TOGGLE_STATUS_FIELD',\n TOGGLE_RESPONSE_SORT: 'TOGGLE_RESPONSE_SORT',\n RESET_ALL_FIELDS: 'RESET_ALL_FIELDS',\n TOGGLE_MASS_SELECTION: 'TOGGLE_MASS_SELECTION',\n DESELECT_ALL_FIELDS: 'DESELECT_ALL_FIELDS',\n\n // mASS EDIT RESPONSE ACTIONS\n ADD_RESPONSE_TO_MASS_EDIT_ARRAY: 'ADD_RESPONSE_TO_MASS_EDIT_ARRAY',\n REMOVE_RESPONSE_FROM_MASS_EDIT_ARRAY: 'REMOVE_RESPONSE_FROM_MASS_EDIT_ARRAY',\n CLEAR_RESPONSES_FROM_MASS_EDIT_ARRAY: 'CLEAR_RESPONSES_FROM_MASS_EDIT_ARRAY',\n\n NUMBERS_AS_WORDS: [\n 'zero', 'one', 'two', 'three', 'four', 'five',\n 'six', 'seven', 'eight', 'nine', 'ten',\n 'eleven', 'twelve', 'thirteen', 'fourteen', 'fifteen',\n 'sixteen', 'seventeen', 'eighteen', 'nineteen', 'twenty'\n ],\n\n INSTRUCTIONS: {\n sentenceFragments: 'Add/change as few words as you can to change this fragment into a sentence.',\n },\n\n // cONCEPTS FEEDBACK ACTIONS\n RECEIVE_CONCEPTS_FEEDBACK_DATA: 'RECEIVE_CONCEPTS_FEEDBACK_DATA',\n AWAIT_NEW_CONCEPTS_FEEDBACK_RESPONSE: 'AWAIT_NEW_CONCEPTS_FEEDBACK_RESPONSE',\n RECEIVE_NEW_CONCEPTS_FEEDBACK_RESPONSE: 'RECEIVE_NEW_CONCEPTS_FEEDBACK_RESPONSE',\n START_CONCEPTS_FEEDBACK_EDIT: 'START_CONCEPTS_FEEDBACK_EDIT',\n FINISH_CONCEPTS_FEEDBACK_EDIT: 'FINISH_CONCEPTS_FEEDBACK_EDIT',\n SUBMIT_CONCEPTS_FEEDBACK_EDIT: 'SUBMIT_CONCEPTS_FEEDBACK_EDIT',\n TOGGLE_NEW_CONCEPTS_FEEDBACK_MODAL: 'TOGGLE_NEW_CONCEPTS_FEEDBACK_MODAL',\n\n // iTEM LEVEL ACTIONS\n RECEIVE_ITEM_LEVELS_DATA: 'RECEIVE_ITEM_LEVELS_DATA',\n AWAIT_NEW_ITEM_LEVEL_RESPONSE: 'AWAIT_NEW_ITEM_LEVEL_RESPONSE',\n RECEIVE_NEW_ITEM_LEVEL_RESPONSE: 'RECEIVE_NEW_ITEM_LEVEL_RESPONSE',\n START_ITEM_LEVEL_EDIT: 'START_ITEM_LEVEL_EDIT',\n FINISH_ITEM_LEVEL_EDIT: 'FINISH_ITEM_LEVEL_EDIT',\n SUBMIT_ITEM_LEVEL_EDIT: 'SUBMIT_ITEM_LEVEL_EDIT',\n TOGGLE_NEW_ITEM_LEVEL_MODAL: 'TOGGLE_NEW_ITEM_LEVEL_MODAL',\n\n // iTEM LEVEL STATES\n EDITING_ITEM_LEVEL: 'EDITING_ITEM_LEVEL',\n SUBMITTING_ITEM_LEVEL: 'SUBMITTING_ITEM_LEVEL',\n\n // sENTENCE_FRAGMENT ACTIONS\n RECEIVE_SENTENCE_FRAGMENTS_DATA: 'RECEIVE_SENTENCE_FRAGMENTS_DATA',\n AWAIT_NEW_SENTENCE_FRAGMENT_RESPONSE: 'AWAIT_NEW_SENTENCE_FRAGMENT_RESPONSE',\n RECEIVE_NEW_SENTENCE_FRAGMENT_RESPONSE: 'RECEIVE_NEW_SENTENCE_FRAGMENT_RESPONSE',\n START_SENTENCE_FRAGMENT_EDIT: 'START_SENTENCE_FRAGMENT_EDIT',\n FINISH_SENTENCE_FRAGMENT_EDIT: 'FINISH_SENTENCE_FRAGMENT_EDIT',\n SUBMIT_SENTENCE_FRAGMENT_EDIT: 'SUBMIT_SENTENCE_FRAGMENT_EDIT',\n TOGGLE_NEW_SENTENCE_FRAGMENT_MODAL: 'TOGGLE_NEW_SENTENCE_FRAGMENT_MODAL',\n\n // sENTENCE_FRAGMENT STATES\n EDITING_SENTENCE_FRAGMENT: 'EDITING_SENTENCE_FRAGMENT',\n SUBMITTING_SENTENCE_FRAGMENT: 'SUBMITTING_SENTENCE_FRAGMENT',\n\n // sESSION ACTIONS\n UPDATE_SESSION_DATA: 'UPDATE_SESSION_DATA',\n DELETE_SESSION_DATA: 'DELETE_SESSION_DATA',\n DELETE_ALL_SESSION_DATA: 'DELETE_ALL_SESSION_DATA',\n\n // rESPONSE ACTIONS\n UPDATE_RESPONSE_STATUS: 'UPDATE_RESPONSE_STATUS',\n UPDATE_RESPONSE_DATA: 'UPDATE_RESPONSE_DATA',\n DELETE_RESPONSE_STATUS: 'DELETE_RESPONSE_STATUS',\n\n // score Analysis ACTIONS\n RECEIVE_SCORE_ANALYSIS_DATA: 'RECEIVE_SCORE_ANALYSIS_DATA',\n\n // CLASSROOM SESSION ACTIONS\n UPDATE_CLASSROOM_SESSION_DATA: 'UPDATE_CLASSROOM_SESSION_DATA',\n UPDATE_CLASSROOM_SESSION_WITHOUT_CURRENT_SLIDE: 'UPDATE_CLASSROOM_SESSION_WITHOUT_CURRENT_SLIDE',\n UPDATE_SLIDE_IN_STORE: 'UPDATE_SLIDE_IN_STORE',\n TOGGLE_HEADERS: 'TOGGLE_HEADERS',\n NO_CLASSROOM_ACTIVITY: 'NO_CLASSROOM_ACTIVITY',\n NO_STUDENT_ID: 'NO_STUDENT_ID',\n HIDE_SIGNUP_MODAL: 'HIDE_SIGNUP_MODAL',\n SHOW_SIGNUP_MODAL: 'SHOW_SIGNUP_MODAL',\n\n // CUSTOMIZE ACTIONS\n SET_USER_ID: 'SET_USER_ID',\n SET_COTEACHERS: 'SET_COTEACHERS',\n SET_EDITION_METADATA: 'SET_EDITION_METADATA',\n SET_EDITION_QUESTIONS: 'SET_EDITION_QUESTIONS',\n SET_WORKING_EDITION_QUESTIONS: 'SET_WORKING_EDITION_QUESTIONS',\n SET_WORKING_EDITION_METADATA: 'SET_WORKING_EDITION_METADATA',\n SET_INCOMPLETE_QUESTIONS: 'SET_INCOMPLETE_QUESTIONS',\n};\n\nexport default constants;\n","import * as _ from 'underscore'\n\nimport constants from '../../constants';\nimport {getTopOptimalResponse} from '../sharedResponseFunctions'\nimport {Response, PartialResponse, WordCountChange} from '../../interfaces'\n\nexport interface LengthMatch {\n feedback: string,\n author: string\n}\n\nexport function lengthMatch(response: string, responses:Array, prompt:string, wordCountChange:WordCountChange={}):LengthMatch|undefined {\n const userWordCount = wordLengthCount(response);\n const promptWordCount = wordLengthCount(prompt);\n const maxWordCount = promptWordCount + wordCountChange.max;\n const minWordCount = promptWordCount + wordCountChange.min;\n const feedback = getMinMaxFeedback(wordCountChange.min, wordCountChange.max);\n if (wordCountChange.min && (userWordCount < minWordCount)) {\n return {\n feedback,\n author: 'Too Short Hint',\n };\n } else if (wordCountChange.max && (userWordCount > maxWordCount)) {\n return {\n feedback,\n author: 'Too Long Hint',\n };\n }\n}\n\nexport function lengthChecker(responseString: string, responses:Array, prompt: string, wordCountChange:Object={}):PartialResponse|undefined {\n const match = lengthMatch(responseString, responses, prompt, wordCountChange);\n if (match) {\n const parentID = getTopOptimalResponse(responses).id\n return lengthResponseBuilder(responses, parentID, match.author, match.feedback)\n }\n}\n\nexport function lengthResponseBuilder(responses:Array, parentID:string|number, author: string, feedback: string): PartialResponse {\n const res = {\n optimal: false,\n parent_id: parentID,\n author,\n feedback\n }\n return res\n}\n\nexport function wordLengthCount(str) {\n const strNoPunctuation = str.replace(/[^0-9a-z\\s]/gi, '').replace(/\\s{2,}/g, ' ').split(' ');\n return strNoPunctuation.length;\n}\n\nexport function getMinMaxFeedback(min, max) {\n if (min === max) {\n if (min === 1) {\n return 'Revise your work. Add one word to the prompt to make the sentence complete.';\n }\n return `Revise your work. Add ${constants.NUMBERS_AS_WORDS[min]} words to the prompt to make the sentence complete.`;\n }\n return `Revise your work. Add ${constants.NUMBERS_AS_WORDS[min]} to ${constants.NUMBERS_AS_WORDS[max]} words to the prompt to make the sentence complete.`;\n}\n","import {Response } from '../../interfaces'\nimport {conceptResultTemplate} from '../helpers/concept_result_template'\nimport {exactMatch} from '../matchers/exact_match';\nimport {caseInsensitiveChecker} from '../matchers/case_insensitive_match'\n\nexport function checkFillInTheBlankQuestion(\n question_uid: string,\n response: string,\n responses: Array,\n caseInsensitive: boolean=false,\n defaultConceptUID?: string,\n isDiagnosticFIB: boolean=false\n): Response {\n const data = {\n response: response.trim().replace(/\\s{2,}/g, ' '),\n responses,\n caseInsensitive,\n isDiagnosticFIB\n }\n const responseTemplate = {\n text: data.response,\n question_uid,\n count: 1,\n concept_results: defaultConceptUID ? [conceptResultTemplate(defaultConceptUID)] : []\n };\n const firstPass = checkForMatches(data, firstPassMatchers)\n if (firstPass) {\n return Object.assign(responseTemplate, firstPass)\n }\n\n return responseTemplate;\n}\n\nfunction* firstPassMatchers(data) {\n const {response, responses, caseInsensitive, isDiagnosticFIB} = data;\n const submission = response\n yield exactMatch(submission, responses)\n yield caseInsensitiveChecker(submission, responses, true, caseInsensitive, isDiagnosticFIB)\n}\n\nfunction checkForMatches(data, matchingFunction: Function) {\n const gen = matchingFunction(data)\n let next = gen.next();\n while (true) {\n if (next.value || next.done) {\n break\n }\n next = gen.next()\n }\n if (next.value) {\n return next.value\n }\n\n}\n","export function generateSpan(text) {\n const span = document.createElement('span');\n\n span.style.fontSize = '24px'; // matches the font size for the fill in the blank inputs and must be adjusted if they change\n\n span.style.marginLeft = '1px' // this fixes a bug caused by the browser somehow misinterpreting which letters belong to which element\n span.style.visibility = 'hidden'\n span.textContent = text\n\n document.body.appendChild(span);\n\n return span\n}\n\nexport function determineShortestCue(cues: Array): string {\n return cues?.length > 0 ? cues.reduce((a, b) => a.length < b.length ? a : b) : \"\"\n}\n\nexport function generateOffsetWidth(element: HTMLElement): number {\n return element.offsetWidth\n}\n","import { determineShortestCue, generateSpan, generateOffsetWidth, } from './fillInBlankInputStyleHelpers'\n\n// these two are coming from the style files (see .fill-in-blank-input) and will need to get updated if the styling does\nconst PADDING_WIDTH = 20\nconst ELEMENT_MIN_WIDTH = 55\n\nexport function fillInBlankInputStyle(value: string|null, cues: Array) {\n const spanForShortestCue = generateSpan(determineShortestCue(cues))\n const spanForValue = generateSpan(value)\n\n const shortestCueSpanWidth = generateOffsetWidth(spanForShortestCue);\n const valueSpanWidth = generateOffsetWidth(spanForValue);\n\n const elementWidth = Math.max(shortestCueSpanWidth, valueSpanWidth) + PADDING_WIDTH\n\n document.body.removeChild(spanForShortestCue);\n document.body.removeChild(spanForValue);\n\n const elementShorterThanMinWidth = ELEMENT_MIN_WIDTH >= elementWidth\n const valueShorterThanShortestCue = shortestCueSpanWidth > valueSpanWidth\n const shouldCenterInput = elementShorterThanMinWidth || valueShorterThanShortestCue\n\n return { width: `${elementWidth}px`, textAlign: shouldCenterInput ? 'center' : 'left', paddingRight: shouldCenterInput ? '10px' : '0px' };\n}\n","export function splitPromptForFillInBlank(prompt: string) {\n return prompt.replace(/<\\/p>

/g, '
').replace(/^

/g, '').replace(/

/g, '
').replace(/<\\/p>/g, '').split('___');\n}\n","import * as React from 'react';\nimport XLSX from 'xlsx';\n\ninterface UploadOptimalResponsesProps {\n submitOptimalResponses: Function;\n}\n\ninterface UploadOptimalResponsesState {\n responses: Array\n}\n\nexport class UploadOptimalResponses extends React.Component {\n constructor(props) {\n super(props)\n\n this.state = {\n responses: [],\n }\n\n this.handleChangeFile = this.handleChangeFile.bind(this)\n this.submitResponses = this.submitResponses.bind(this)\n }\n\n handleChangeFile(file: any) {\n const fileReader = new FileReader();\n fileReader.onload = (e) => {\n const data = new Uint8Array(e.target.result);\n const workbook = XLSX.read(data, { type: 'array', });\n // get the first sheet of the excel workbook\n const sheet = workbook.Sheets[workbook.SheetNames[0]]\n const sheet_array = XLSX.utils.sheet_to_json(sheet, {header:1})\n const responses = sheet_array.slice(1).map((row: Array) => {\n return { \"text\": row[0], \"concepts\": row.slice(1)}\n });\n this.setState({ responses: responses, })\n };\n fileReader.readAsArrayBuffer(file);\n }\n\n submitResponses() {\n this.props.submitOptimalResponses(this.state.responses)\n }\n\n render() {\n return (\n
\n
Upload optimal responses
\n

Upload an xlsx file with the prompt in the first row, followed by optimal responses with their associated concepts.

\n See example\n \n

\n this.handleChangeFile(e.target.files[0])}\n type=\"file\"\n />\n

\n \n
\n )\n }\n\n}\n","import * as React from 'react';\n\nconst PlayTitleCard = ({ data, handleContinueClick, isLastQuestion, previewMode }) => {\n const buttonText = isLastQuestion ? 'Next' : 'Continue';\n const disabled = previewMode && isLastQuestion;\n const disabledClass = disabled ? 'disabled' : '';\n return(\n
\n
\n \n
\n );\n}\n\nexport { PlayTitleCard };\n\n","import * as React from 'react';\n\nconst TitleCard: React.SFC = (props) =>
\n\nexport { TitleCard };\n\n","const FuzzySet = function(arr, useLevenshtein, gramSizeLower, gramSizeUpper) {\n var fuzzyset = {\n\n };\n\n // default options\n arr = arr || [];\n fuzzyset.gramSizeLower = gramSizeLower || 2;\n fuzzyset.gramSizeUpper = gramSizeUpper || 3;\n fuzzyset.useLevenshtein = (typeof useLevenshtein !== 'boolean') ? true : useLevenshtein;\n\n // define all the object functions and attributes\n fuzzyset.exactSet = {};\n fuzzyset.matchDict = {};\n fuzzyset.items = {};\n\n // helper functions\n var levenshtein = function(str1, str2) {\n var current = [], prev, value;\n\n for (var i = 0; i <= str2.length; i++)\n for (var j = 0; j <= str1.length; j++) {\n if (i && j)\n if (str1.charAt(j - 1) === str2.charAt(i - 1))\n value = prev;\n else\n value = Math.min(current[j], current[j - 1], prev) + 1;\n else\n value = i + j;\n\n prev = current[j];\n current[j] = value;\n }\n\n return current.pop();\n };\n\n // return an edit distance from 0 to 1\n var _distance = function(str1, str2) {\n if (str1 === null && str2 === null) throw 'Trying to compare two null values';\n if (str1 === null || str2 === null) return 0;\n str1 = String(str1); str2 = String(str2);\n\n var distance = levenshtein(str1, str2);\n if (str1.length > str2.length) {\n return 1 - distance / str1.length;\n } else {\n return 1 - distance / str2.length;\n }\n };\n\n // u00C0-u00FF is latin characters\n // u0621-u064a is arabic letters\n // u0660-u0669 is arabic numerals\n // TODO: figure out way to do this for more languages\n var _nonWordRe = /[^a-zA-Z0-9\\u00C0-\\u00FF\\u0621-\\u064A\\u0660-\\u0669, ]+/g;\n\n var _iterateGrams = function(value, gramSize) {\n gramSize = gramSize || 2;\n var simplified = '-' + value.toLowerCase().replace(_nonWordRe, '') + '-',\n lenDiff = gramSize - simplified.length,\n results = [];\n if (lenDiff > 0) {\n for (var i = 0; i < lenDiff; ++i) {\n simplified += '-';\n }\n }\n for (var i = 0; i < simplified.length - gramSize + 1; ++i) {\n results.push(simplified.slice(i, i + gramSize));\n }\n return results;\n };\n\n var _gramCounter = function(value, gramSize) {\n // return an object where key=gram, value=number of occurrences\n gramSize = gramSize || 2;\n var result = {},\n grams = _iterateGrams(value, gramSize),\n i = 0;\n for (i; i < grams.length; ++i) {\n if (grams[i] in result) {\n result[grams[i]] += 1;\n } else {\n result[grams[i]] = 1;\n }\n }\n return result;\n };\n\n // the main functions\n fuzzyset.get = function(value, defaultValue, minMatchScore) {\n // check for value in set, returning defaultValue or null if none found\n if (minMatchScore === undefined) {\n minMatchScore = .33;\n }\n var result = this._get(value, minMatchScore);\n if (!result && typeof defaultValue !== 'undefined') {\n return defaultValue;\n }\n return result;\n };\n\n fuzzyset._get = function(value, minMatchScore) {\n var results = [];\n // start with high gram size and if there are no results, go to lower gram sizes\n for (var gramSize = this.gramSizeUpper; gramSize >= this.gramSizeLower; --gramSize) {\n results = this.__get(value, gramSize, minMatchScore);\n if (results && results.length > 0) {\n return results;\n }\n }\n return null;\n };\n\n fuzzyset.__get = function(value, gramSize, minMatchScore) {\n var normalizedValue = this._normalizeStr(value),\n matches = {},\n gramCounts = _gramCounter(normalizedValue, gramSize),\n items = this.items[gramSize],\n sumOfSquareGramCounts = 0,\n gram,\n gramCount,\n i,\n index,\n otherGramCount;\n\n for (gram in gramCounts) {\n gramCount = gramCounts[gram];\n sumOfSquareGramCounts += Math.pow(gramCount, 2);\n if (gram in this.matchDict) {\n for (i = 0; i < this.matchDict[gram].length; ++i) {\n index = this.matchDict[gram][i][0];\n otherGramCount = this.matchDict[gram][i][1];\n if (index in matches) {\n matches[index] += gramCount * otherGramCount;\n } else {\n matches[index] = gramCount * otherGramCount;\n }\n }\n }\n }\n\n function isEmptyObject(obj) {\n for(var prop in obj) {\n if(obj.hasOwnProperty(prop))\n return false;\n }\n return true;\n }\n\n if (isEmptyObject(matches)) {\n return null;\n }\n\n var vectorNormal = Math.sqrt(sumOfSquareGramCounts),\n results = [],\n matchScore;\n // build a results list of [score, str]\n for (var matchIndex in matches) {\n matchScore = matches[matchIndex];\n results.push([matchScore / (vectorNormal * items[matchIndex][0]), items[matchIndex][1]]);\n }\n var sortDescending = function(a, b) {\n if (a[0] < b[0]) {\n return 1;\n } else if (a[0] > b[0]) {\n return -1;\n } else {\n return 0;\n }\n };\n results.sort(sortDescending);\n if (this.useLevenshtein) {\n var newResults = [],\n endIndex = Math.min(50, results.length);\n // truncate somewhat arbitrarily to 50\n for (var i = 0; i < endIndex; ++i) {\n newResults.push([_distance(results[i][1], normalizedValue), results[i][1]]);\n }\n results = newResults;\n results.sort(sortDescending);\n }\n newResults = [];\n results.forEach(function(scoreWordPair) {\n if (scoreWordPair[0] >= minMatchScore) {\n newResults.push([scoreWordPair[0], this.exactSet[scoreWordPair[1]]]);\n }\n }.bind(this));\n return newResults;\n };\n\n fuzzyset.add = function(value) {\n var normalizedValue = this._normalizeStr(value);\n if (normalizedValue in this.exactSet) {\n return false;\n }\n\n var i = this.gramSizeLower;\n for (i; i < this.gramSizeUpper + 1; ++i) {\n this._add(value, i);\n }\n };\n\n fuzzyset._add = function(value, gramSize) {\n var normalizedValue = this._normalizeStr(value),\n items = this.items[gramSize] || [],\n index = items.length;\n\n items.push(0);\n var gramCounts = _gramCounter(normalizedValue, gramSize),\n sumOfSquareGramCounts = 0,\n gram, gramCount;\n for (gram in gramCounts) {\n gramCount = gramCounts[gram];\n sumOfSquareGramCounts += Math.pow(gramCount, 2);\n if (gram in this.matchDict) {\n this.matchDict[gram].push([index, gramCount]);\n } else {\n this.matchDict[gram] = [[index, gramCount]];\n }\n }\n var vectorNormal = Math.sqrt(sumOfSquareGramCounts);\n items[index] = [vectorNormal, normalizedValue];\n this.items[gramSize] = items;\n this.exactSet[normalizedValue] = value;\n };\n\n fuzzyset._normalizeStr = function(str) {\n if (Object.prototype.toString.call(str) !== '[object String]') throw 'Must use a string as argument to FuzzySet functions';\n return str.toLowerCase();\n };\n\n // return length of items in set\n fuzzyset.length = function() {\n var count = 0,\n prop;\n for (prop in this.exactSet) {\n if (this.exactSet.hasOwnProperty(prop)) {\n count += 1;\n }\n }\n return count;\n };\n\n // return is set is empty\n fuzzyset.isEmpty = function() {\n for (var prop in this.exactSet) {\n if (this.exactSet.hasOwnProperty(prop)) {\n return false;\n }\n }\n return true;\n };\n\n // return list of values loaded into set\n fuzzyset.values = function() {\n var values = [],\n prop;\n for (prop in this.exactSet) {\n if (this.exactSet.hasOwnProperty(prop)) {\n values.push(this.exactSet[prop]);\n }\n }\n return values;\n };\n\n\n // initialization\n var i = fuzzyset.gramSizeLower;\n for (i; i < fuzzyset.gramSizeUpper + 1; ++i) {\n fuzzyset.items[i] = [];\n }\n // add all the items to the set\n for (i = 0; i < arr.length; ++i) {\n fuzzyset.add(arr[i]);\n }\n\n return fuzzyset;\n};\n\nexport default FuzzySet;\n","export var KEY_PREFIX = 'reduxPersist:';\nexport var REHYDRATE = 'persist/REHYDRATE';"],"names":["getElementObject","htmlText","style","getFormattedElementsArray","elements","formattedElements","element","i","props","children","nextElementIsInput","elementObject","React.createElement","Prompt","reactAddonsCssTransitionGroup","require$$0","CarouselAnimation","ReactCSSTransitionGroup","getCommonWords","sentences","words","_.map","sentence","normalizeString","_.intersection","getCommonWordsWithImportantPOS","getMissingWords","userString","commonWords","wordsFromUser","_.reject","commonWord","_.contains","_getCaseSensitiveWord","word","optimalSentences","optimalSentence","normalizedString","removePunctuation","startIndex","normalizedWord","lowercaseNormalizedWordIfPossible","originalWord","optimalWords","normalizeStringWithoutLowercasing","getFeedbackForWord","isSentenceFragment","extractSentencesFromResponses","responses","response","getMissingWordsFromResponses","missingWords","_.sortBy","checkForMissingWords","string","stringNormalize","requiredWordsMatch","responseString","getOptimalResponses","requiredWordsChecker","match","feedback","requiredWordsResponseBuilder","getTopOptimalResponse","conceptResultTemplate","checkDiagnosticQuestion","question_uid","focusPoints","incorrectSequences","defaultConceptUID","data","responseTemplate","firstPass","checkForMatches","firstPassMatchers","submission","exactMatch","focusPointChecker","incorrectSequenceChecker","matchingFunction","gen","next","constants","lengthMatch","prompt","wordCountChange","userWordCount","wordLengthCount","promptWordCount","maxWordCount","minWordCount","getMinMaxFeedback","lengthChecker","parentID","lengthResponseBuilder","author","str","min","max","checkFillInTheBlankQuestion","caseInsensitive","isDiagnosticFIB","caseInsensitiveChecker","generateSpan","text","span","determineShortestCue","cues","a","b","generateOffsetWidth","PADDING_WIDTH","ELEMENT_MIN_WIDTH","fillInBlankInputStyle","value","spanForShortestCue","spanForValue","shortestCueSpanWidth","valueSpanWidth","elementWidth","elementShorterThanMinWidth","valueShorterThanShortestCue","shouldCenterInput","splitPromptForFillInBlank","UploadOptimalResponses","React.Component","file","fileReader","e","workbook","XLSX","sheet","row","PlayTitleCard","handleContinueClick","isLastQuestion","previewMode","buttonText","disabled","disabledClass","TitleCard","FuzzySet","arr","useLevenshtein","gramSizeLower","gramSizeUpper","fuzzyset","levenshtein","str1","str2","current","prev","j","_distance","distance","_nonWordRe","_iterateGrams","gramSize","simplified","lenDiff","results","_gramCounter","result","grams","defaultValue","minMatchScore","normalizedValue","matches","gramCounts","items","sumOfSquareGramCounts","gram","gramCount","index","otherGramCount","isEmptyObject","obj","prop","vectorNormal","matchScore","matchIndex","sortDescending","newResults","endIndex","scoreWordPair","count","values","REHYDRATE"],"mappings":"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","x_google_ignoreList":[1,15,16]}