@pie-element/select-text 9.6.2-beta.1 → 9.6.2-beta.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/design.jsx"],"names":["Panel","settings","toggle","radio","dropdown","log","Design","props","val","apply","u","text","tokens","updateText","clearTokens","event","target","value","mode","correctTokenCount","filter","t","correct","length","max","isFinite","maxSelections","Math","tokenizedText","fn","onModelChanged","model","update","feedback","partialScoring","prompt","teacherInstructions","rationale","elems","annotation","classes","id","forEach","elem","dataset","className","token","selectedElems","selectionDetails","start","end","Date","getTime","join","createDOMAnnotation","html","onClickHandler","container","document","createElement","innerHTML","splitSentences","pattern","matches","match","processNode","node","nodeType","Node","TEXT_NODE","sentences","textContent","fragment","createDocumentFragment","sentence","trim","span","addEventListener","e","appendChild","createTextNode","replaceWith","ELEMENT_NODE","Array","from","childNodes","selection","window","getSelection","detail","rangeCount","wrapSelectionInSpan","textRef","content","getHTML","changeTokenizedText","correctMode","state","classList","setState","tokenized","wrapWordsInSpans","handleTokenClick","console","wrapSentencesInSpans","wrapParagraphContentInSpan","selectMode","nProps","domNode","ReactDOM","findDOMNode","onClick","words","split","word","querySelectorAll","p","firstChild","range","getRangeAt","collapsed","contents","extractContents","insertNode","removeAllRanges","textValue","configuration","imageSupport","onConfigurationChanged","uploadSoundSupport","baseInputConfiguration","correctAnswer","contentDimensions","highlightChoices","selectionCount","selections","settingsPanelDisabled","scoringType","spellCheck","studentInstructions","maxImageWidth","maxImageHeight","withRubric","mathMlOptions","language","languageChoices","errors","extraCSSRules","feedbackEnabled","promptEnabled","rationaleEnabled","spellCheckEnabled","teacherInstructionsEnabled","toolbarEditorPosition","promptError","rationaleError","selectionsError","teacherInstructionsError","tokensError","validationMessage","defaultImageMaxWidth","defaultImageMaxHeight","tokensModel","toolbarOpts","position","panelSettings","label","enabled","options","panelProperties","studentInstructionsEnabled","rubricEnabled","getPluginProps","Settings","Properties","promptHolder","onTeacherInstructionsChanged","inputConfiguration","errorText","onPromptChanged","subheader","selectWords","selectSentences","selectParagraphs","textContainer","r","clearSelection","handleSelection","__html","changeText","onRationaleChanged","changeFeedback","React","Component","PropTypes","object","isRequired","func","shape","add","theme","tokenizerContainer","paddingRight","marginRight","bottom","left","right","height","backgroundColor","palette","primary","main","marginBottom","spacing","unit","chip","marginTop","input","width","tokenizer","mainOpts","justifyContent","display","alignItems","paddingTop","tokensDetails","flexWrap","numberField","margin","tooltip","fontSize","typography","whiteSpace","maxWidth","color","error","paddingBottom","borderBottom","padding","border","borderRadius","overflowY","overflowWrap","userSelect","cursor"],"mappings":"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","sourcesContent":["import React from 'react';\nimport PropTypes from 'prop-types';\nimport TextField from '@material-ui/core/TextField';\nimport { withStyles } from '@material-ui/core/styles';\nimport cloneDeep from 'lodash/cloneDeep';\nimport debounce from 'lodash/debounce';\nimport { Tokenizer, Controls } from '@pie-lib/pie-toolbox/text-select';\nimport { InputContainer, NumberTextField, FeedbackConfig, settings, layout } from '@pie-lib/pie-toolbox/config-ui';\nimport Chip from '@material-ui/core/Chip';\nimport Info from '@material-ui/icons/Info';\nimport debug from 'debug';\nimport { EditableHtml } from '@pie-lib/pie-toolbox/editable-html';\nimport { renderMath } from '@pie-lib/pie-toolbox/math-rendering';\nimport Tooltip from '@material-ui/core/Tooltip';\nimport { clearSelection, generateValidationMessage } from './utils';\n// import {\n// clearSelection,\n// getDOMNodes,\n// getLabelElement,\n// getRangeDetails,\n// isSideLabel,\n// wrapRange,\n// } from '@pie-element/extended-text-entry/src/annotation/annotation-utils';\nimport classNames from 'classnames';\n\nimport Switch from '@material-ui/core/Switch';\nimport FormControlLabel from '@material-ui/core/FormControlLabel';\nimport ReactDOM from 'react-dom';\n\nconst { Panel, toggle, radio, dropdown } = settings;\n\nconst log = debug('@pie-element:select-text:configure');\n\nexport class Design extends React.Component {\n static propTypes = {\n model: PropTypes.object.isRequired,\n configuration: PropTypes.object.isRequired,\n classes: PropTypes.object.isRequired,\n onModelChanged: PropTypes.func.isRequired,\n onConfigurationChanged: PropTypes.func.isRequired,\n imageSupport: PropTypes.shape({\n add: PropTypes.func.isRequired,\n delete: PropTypes.func.isRequired,\n }),\n uploadSoundSupport: PropTypes.object,\n };\n\n static defaultProps = {};\n\n constructor(props) {\n super(props);\n\n const { model } = this.props;\n\n this.state = {\n correctMode: false,\n selectMode: false,\n text: (model && model.text) || '',\n tokenizedText: (model && model.token) || '',\n };\n }\n\n UNSAFE_componentWillReceiveProps(nProps) {\n const { model } = nProps;\n\n if (model && model.text) {\n this.setState({\n text: model.text,\n text: model.text,\n tokenizedText: model.tokenizedText || model.text,\n });\n\n // model.tokens.forEach((annotation) => {\n // console.log('annotation', annotation);\n // const [domStart, domEnd] = getDOMNodes(annotation.start, annotation.end, this.textRef);\n // console.log('domStart, domEnd', domStart, domEnd);\n //\n // if (domStart && domEnd) {\n // const range = document.createRange();\n //\n // range.setStart(domStart.node, domStart.offset);\n // range.setEnd(domEnd.node, domEnd.offset);\n //\n // const spans = wrapRange(range);\n //\n // this.createDOMAnnotation(spans, annotation);\n // }\n // });\n }\n }\n\n componentDidUpdate() {\n // console.log('UPDATED');\n // console.log('this.state.text', this.state.text);\n //eslint-disable-next-line\n const domNode = ReactDOM.findDOMNode(this);\n\n renderMath(domNode);\n }\n\n updateText = debounce((val) => {\n this.apply((u) => {\n u.text = val;\n u.tokens = [];\n });\n }, 200);\n\n changeText = (text) => {\n this.updateText(text);\n this.clearTokens();\n };\n\n changeTextEvent = (event) => this.updateText(event.target.value);\n\n changeTokens = (tokens, mode) => {\n this.apply((u) => {\n u.tokens = tokens;\n u.mode = mode;\n\n const correctTokenCount = tokens.filter((t) => t.correct).length;\n const max = isFinite(u.maxSelections) ? u.maxSelections : 0;\n\n u.maxSelections = Math.max(max, correctTokenCount);\n });\n };\n\n changeTokenizedText = (text) => {\n this.apply((u) => {\n u.tokenizedText = text;\n\n // const correctTokenCount = tokens.filter((t) => t.correct).length;\n // const max = isFinite(u.maxSelections) ? u.maxSelections : 0;\n //\n // u.maxSelections = Math.max(max, correctTokenCount);\n });\n };\n\n changeMaxSelections = (event, max) => {\n this.apply((u) => (u.maxSelections = max));\n };\n\n apply = (fn) => {\n const { onModelChanged, model } = this.props;\n const update = cloneDeep(model);\n\n fn(update);\n onModelChanged(update);\n };\n\n changeFeedback = (feedback) => {\n this.apply((u) => (u.feedback = feedback));\n };\n\n changePartialScoring = (partialScoring) => {\n const { onModelChanged, model } = this.props;\n const update = cloneDeep(model);\n update.partialScoring = partialScoring;\n\n onModelChanged(update);\n };\n\n onPromptChanged = (prompt) => {\n const { onModelChanged, model } = this.props;\n const update = cloneDeep(model);\n\n update.prompt = prompt;\n onModelChanged(update);\n };\n\n onTeacherInstructionsChanged = (teacherInstructions) => {\n const { onModelChanged, model } = this.props;\n const update = cloneDeep(model);\n\n update.teacherInstructions = teacherInstructions;\n onModelChanged(update);\n };\n\n onRationaleChanged = (rationale) => {\n const { onModelChanged, model } = this.props;\n\n onModelChanged({ ...model, rationale });\n };\n\n // Highlight functionalities based on extended-text-entry\n\n createDOMAnnotation = (elems, annotation) => {\n const { classes } = this.props;\n const { id } = annotation;\n\n (elems || []).forEach((elem) => {\n elem.dataset.id = id;\n elem.className = classNames(classes.token);\n // elem.onclick = !disabled && this.handleClick;\n // elem.onmouseover = this.handleHover;\n // elem.onmouseout = this.handleCancelHover;\n });\n };\n\n createNewAnnotation = (selectedElems, selectionDetails) => {\n const annotation = {\n id: [selectionDetails.start, selectionDetails.end, new Date().getTime()].join('-'),\n ...selectionDetails,\n };\n\n this.createDOMAnnotation(selectedElems, annotation);\n\n return annotation;\n };\n\n // addAnnotation = (type) => {\n // const { annotations, onChange } = this.props;\n // const annotation = this.createNewAnnotation('', type);\n // const labelElem = getLabelElement(annotation.id);\n //\n // annotations.push(annotation);\n //\n // this.setState({\n // openedMenu: false,\n // openedEditor: true,\n // annotationIndex: annotations.length - 1,\n // annotation,\n // labelElem,\n // });\n //\n // onChange(annotations);\n // };\n\n // new functionalities\n\n wrapWordsInSpans(html, onClick) {\n const { classes } = this.props;\n const container = document.createElement('div');\n container.innerHTML = html;\n\n const processNode = (node) => {\n if (node.nodeType === Node.TEXT_NODE) {\n const words = node.textContent.split(/(\\s+|\\b)/); // split by word boundaries + spaces\n const fragment = document.createDocumentFragment();\n\n for (const word of words) {\n if (word.trim()) {\n const span = document.createElement('span');\n\n span.className = classNames(classes.token);\n span.addEventListener('click', (e) => onClick(e));\n span.textContent = word;\n fragment.appendChild(span);\n } else {\n fragment.appendChild(document.createTextNode(word));\n }\n }\n\n node.replaceWith(fragment);\n } else if (node.nodeType === Node.ELEMENT_NODE) {\n Array.from(node.childNodes).forEach(processNode);\n }\n };\n\n Array.from(container.childNodes).forEach(processNode);\n\n return container.innerHTML;\n }\n\n wrapSentencesInSpans = (html, onClickHandler = null) => {\n const { classes } = this.props;\n const container = document.createElement('div');\n container.innerHTML = html;\n\n const splitSentences = (text) => {\n // Match sentences ending with punctuation:\n // \".\" or \"!\" or \"?\"\n const pattern = /([^.!?]+[.!?]+[\\s\"]*)|([^.!?]+$)/g;\n const matches = text.match(pattern);\n return matches || [];\n };\n\n const processNode = (node) => {\n if (node.nodeType === Node.TEXT_NODE) {\n const sentences = splitSentences(node.textContent);\n const fragment = document.createDocumentFragment();\n\n for (const sentence of sentences) {\n if (sentence.trim()) {\n const span = document.createElement('span');\n span.textContent = sentence;\n span.className = classNames(classes.token);\n\n if (onClickHandler) {\n span.addEventListener('click', (e) => {\n onClickHandler(e, sentence);\n });\n }\n\n fragment.appendChild(span);\n } else {\n fragment.appendChild(document.createTextNode(sentence));\n }\n }\n\n node.replaceWith(fragment);\n } else if (node.nodeType === Node.ELEMENT_NODE) {\n Array.from(node.childNodes).forEach(processNode);\n }\n };\n\n Array.from(container.childNodes).forEach(processNode);\n\n return container;\n };\n\n wrapParagraphContentInSpan(html) {\n const { classes } = this.props;\n const container = document.createElement('div');\n container.innerHTML = html;\n\n container.querySelectorAll('p').forEach((p) => {\n const span = document.createElement('span');\n span.className = classNames(classes.token);\n span.addEventListener('click', this.handleTokenClick);\n\n // Move all children of <p> into the span\n while (p.firstChild) {\n span.appendChild(p.firstChild);\n }\n\n p.appendChild(span);\n });\n\n return container;\n }\n\n wrapSelectionInSpan(selection) {\n const { classes } = this.props;\n const range = selection.getRangeAt(0);\n\n if (range.collapsed) {\n console.log('Selection is collapsed (no text selected).');\n return;\n }\n\n // Extract the contents of the selection\n const contents = range.extractContents();\n\n // Create the span wrapper\n const span = document.createElement('span');\n span.className = classNames(classes.token);\n span.addEventListener('click', this.handleTokenClick);\n span.appendChild(contents);\n\n // Insert back into the DOM\n range.insertNode(span);\n\n // Collapse the selection\n selection.removeAllRanges();\n }\n\n handleSelection = (event) => {\n const selection = window.getSelection();\n\n // prevent unwanted selections\n if (event.detail > 2) {\n clearSelection();\n return;\n }\n\n if (selection && selection.rangeCount > 0) {\n this.wrapSelectionInSpan(selection);\n clearSelection();\n\n if (this.textRef) {\n const content = this.textRef.getHTML();\n\n this.changeTokenizedText(content);\n // this.setState({ tokenizedText: content });\n }\n }\n };\n\n handleTokenClick = (event) => {\n const { correctMode } = this.state;\n\n if (!correctMode) {\n return;\n }\n\n event.target.classList.toggle('correct');\n };\n\n clearTokens = () => {\n const { model } = this.props;\n\n if (this.textRef) {\n const container = document.createElement('div');\n container.innerHTML = model.text;\n\n // Remove all children and add new content\n this.textRef.innerHTML = '';\n this.textRef.appendChild(container);\n }\n\n this.changeTokenizedText(model.text);\n this.setState({ tokenizedText: model.text });\n };\n\n selectWords = () => {\n const { text } = this.state;\n this.clearTokens();\n const tokenized = this.wrapWordsInSpans(text, (e) => this.handleTokenClick(e));\n\n console.log('words:', tokenized);\n\n this.changeTokenizedText(tokenized);\n this.setState({ tokenizedText: tokenized });\n };\n\n selectSentences = () => {\n const { text } = this.state;\n this.clearTokens();\n const container = this.wrapSentencesInSpans(text);\n\n // Remove all children and add new content\n this.textRef.innerHTML = '';\n this.textRef.appendChild(container);\n\n const tokenized = container.innerHTML;\n console.log('sentences:', tokenized);\n this.changeTokenizedText(tokenized);\n // this.setState({ tokenizedText: tokenized });\n };\n\n selectParagraphs = () => {\n const { text } = this.state;\n this.clearTokens();\n const container = this.wrapParagraphContentInSpan(text);\n\n // Remove all children and add new content\n this.textRef.innerHTML = '';\n this.textRef.appendChild(container);\n\n const tokenized = container.innerHTML;\n console.log('paragraphs:', tokenized);\n this.changeTokenizedText(tokenized);\n // this.setState({ tokenizedText: tokenized });\n };\n\n render() {\n const { text: textValue, correctMode, selectMode, tokenizedText } = this.state;\n const { classes, configuration, imageSupport, model, onConfigurationChanged, onModelChanged, uploadSoundSupport } =\n this.props;\n const {\n baseInputConfiguration = {},\n correctAnswer = {},\n contentDimensions = {},\n feedback = {},\n highlightChoices = {},\n mode = {},\n partialScoring = {},\n prompt = {},\n rationale = {},\n selectionCount = {},\n selections = {},\n settingsPanelDisabled,\n scoringType = {},\n spellCheck = {},\n studentInstructions = {},\n teacherInstructions = {},\n text = {},\n tokens = {},\n maxImageWidth = {},\n maxImageHeight = {},\n withRubric = {},\n mathMlOptions = {},\n language = {},\n languageChoices = {},\n } = configuration || {};\n const {\n errors,\n extraCSSRules,\n feedbackEnabled,\n promptEnabled,\n rationaleEnabled,\n spellCheckEnabled,\n teacherInstructionsEnabled,\n toolbarEditorPosition,\n } = model || {};\n\n const {\n prompt: promptError,\n rationale: rationaleError,\n selectionsError,\n teacherInstructions: teacherInstructionsError,\n tokensError,\n } = errors || {};\n const validationMessage = generateValidationMessage(configuration);\n\n const defaultImageMaxWidth = maxImageWidth && maxImageWidth.prompt;\n const defaultImageMaxHeight = maxImageHeight && maxImageHeight.prompt;\n\n let { tokens: tokensModel } = model;\n tokensModel = tokensModel || [];\n\n const toolbarOpts = {\n position: toolbarEditorPosition === 'top' ? 'top' : 'bottom',\n };\n\n log('[render] maxSelections:', model.maxSelections);\n\n const panelSettings = {\n partialScoring: partialScoring.settings && toggle(partialScoring.label),\n highlightChoices: highlightChoices.settings && toggle(highlightChoices.label),\n feedbackEnabled: feedback.settings && toggle(feedback.label),\n 'language.enabled': language.settings && toggle(language.label, true),\n language: language.settings && language.enabled && dropdown(languageChoices.label, languageChoices.options),\n };\n\n const panelProperties = {\n teacherInstructionsEnabled: teacherInstructions.settings && toggle(teacherInstructions.label),\n studentInstructionsEnabled: studentInstructions.settings && toggle(studentInstructions.label),\n promptEnabled: prompt.settings && toggle(prompt.label),\n rationaleEnabled: rationale.settings && toggle(rationale.label),\n spellCheckEnabled: spellCheck.settings && toggle(spellCheck.label),\n scoringType: scoringType.settings && radio(scoringType.label, ['auto', 'rubric']),\n rubricEnabled: withRubric?.settings && toggle(withRubric?.label),\n };\n\n const getPluginProps = (props = {}) => ({\n ...baseInputConfiguration,\n ...props,\n });\n\n return (\n <layout.ConfigLayout\n extraCSSRules={extraCSSRules}\n dimensions={contentDimensions}\n hideSettings={settingsPanelDisabled}\n settings={\n <Panel\n model={model}\n configuration={configuration}\n onChangeModel={(model) => onModelChanged(model)}\n onChangeConfiguration={onConfigurationChanged}\n groups={{\n Settings: panelSettings,\n Properties: panelProperties,\n }}\n />\n }\n >\n {teacherInstructionsEnabled && (\n <InputContainer label={teacherInstructions.label} className={classes.promptHolder}>\n <EditableHtml\n className={classes.prompt}\n markup={model.teacherInstructions || ''}\n onChange={this.onTeacherInstructionsChanged}\n imageSupport={imageSupport}\n nonEmpty={false}\n error={teacherInstructionsError}\n toolbarOpts={toolbarOpts}\n pluginProps={getPluginProps(configuration?.teacherInstructions?.inputConfiguration)}\n spellCheck={spellCheckEnabled}\n maxImageWidth={(maxImageWidth && maxImageWidth.teacherInstructions) || defaultImageMaxWidth}\n maxImageHeight={(maxImageHeight && maxImageHeight.teacherInstructions) || defaultImageMaxHeight}\n uploadSoundSupport={uploadSoundSupport}\n languageCharactersProps={[{ language: 'spanish' }, { language: 'special' }]}\n mathMlOptions={mathMlOptions}\n />\n {teacherInstructionsError && <div className={classes.errorText}>{teacherInstructionsError}</div>}\n </InputContainer>\n )}\n\n {promptEnabled && (\n <InputContainer label={prompt.label || ''} className={classes.promptHolder}>\n <EditableHtml\n className={classes.prompt}\n markup={model.prompt}\n onChange={this.onPromptChanged}\n imageSupport={imageSupport}\n error={promptError}\n toolbarOpts={toolbarOpts}\n pluginProps={getPluginProps(configuration?.prompt?.inputConfiguration)}\n spellCheck={spellCheckEnabled}\n maxImageWidth={defaultImageMaxWidth}\n maxImageHeight={defaultImageMaxHeight}\n uploadSoundSupport={uploadSoundSupport}\n languageCharactersProps={[{ language: 'spanish' }, { language: 'special' }]}\n mathMlOptions={mathMlOptions}\n />\n {promptError && <div className={classes.errorText}>{promptError}</div>}\n </InputContainer>\n )}\n\n {/*{text.settings && (*/}\n {/* <InputContainer label={text.label || ''} className={classes.promptHolder}>*/}\n {/* <TextField*/}\n {/* className={classes.input}*/}\n {/* multiline*/}\n {/* defaultValue={textValue}*/}\n {/* onChange={this.changeTextEvent}*/}\n {/* spellCheck={spellCheckEnabled}*/}\n {/* />*/}\n {/* </InputContainer>*/}\n {/*)}*/}\n\n {/*{tokens.settings && (*/}\n {/* <InputContainer label={tokens.label || ''} className={classes.tokenizerContainer}>*/}\n {/* <Tooltip*/}\n {/* classes={{ tooltip: classes.tooltip }}*/}\n {/* disableFocusListener*/}\n {/* disableTouchListener*/}\n {/* placement={'right'}*/}\n {/* title={validationMessage}*/}\n {/* >*/}\n {/* <Info fontSize={'small'} color={'primary'} style={{ position: 'absolute', left: '48px', top: '-3px' }} />*/}\n {/* </Tooltip>*/}\n\n {/* <Tokenizer*/}\n {/* className={classes.tokenizer}*/}\n {/* text={model.text}*/}\n {/* tokens={tokensModel}*/}\n {/* onChange={this.changeTokens}*/}\n {/* />*/}\n {/* </InputContainer>*/}\n {/*)}*/}\n {/*{tokensError && <div className={classes.errorText}>{tokensError}</div>}*/}\n {/*{selectionsError && <div className={classes.errorText}>{selectionsError}</div>}*/}\n\n {/*<div className={classes.tokensDetails}>*/}\n {/* {mode.settings && (*/}\n {/* <Chip label={`${mode.label}: ${model.mode ? model.mode : 'None'}`} className={classes.chip} />*/}\n {/* )}*/}\n\n {/* {selections.settings && (*/}\n {/* <Chip label={`${selections.label}: ${tokensModel.length}`} className={classes.chip} />*/}\n {/* )}*/}\n\n {/* {correctAnswer.settings && (*/}\n {/* <Chip*/}\n {/* label={`${correctAnswer.label}: ${tokensModel.filter((t) => t.correct).length}`}*/}\n {/* className={classes.chip}*/}\n {/* />*/}\n {/* )}*/}\n\n {/* {selectionCount.settings && (*/}\n {/* <NumberTextField*/}\n {/* min={tokensModel.filter((t) => t.correct).length || 0}*/}\n {/* label={`${selectionCount.label} (0:any)`}*/}\n {/* max={tokensModel.length}*/}\n {/* value={model.maxSelections}*/}\n {/* onChange={this.changeMaxSelections}*/}\n {/* className={classes.numberField}*/}\n {/* />*/}\n {/* )}*/}\n {/*</div>*/}\n\n <div className={classes.subheader}>\n NEW functionality\n <FormControlLabel\n control={\n <Switch\n checked={selectMode}\n onChange={() => {\n this.setState({ selectMode: !selectMode });\n // renderMath(this);\n }}\n />\n }\n label=\"Select tokens\"\n />\n </div>\n\n {selectMode && (\n <Controls\n onClear={this.clearTokens}\n onWords={this.selectWords}\n onSentences={this.selectSentences}\n onParagraphs={this.selectParagraphs}\n setCorrectMode={correctMode}\n onToggleCorrectMode={() => this.setState({ correctMode: !correctMode })}\n />\n )}\n\n {text.settings && (\n <InputContainer label={text.label || ''} className={classes.promptHolder}>\n {selectMode ? (\n <div\n className={classes.textContainer}\n ref={(r) => (this.textRef = r)}\n onMouseDown={selectMode && !correctMode ? clearSelection : () => {}}\n onMouseUp={selectMode && !correctMode ? this.handleSelection : () => {}}\n dangerouslySetInnerHTML={{ __html: tokenizedText }}\n />\n ) : (\n <EditableHtml\n className={classes.prompt}\n markup={textValue}\n onChange={this.changeText}\n nonEmpty={false}\n disableUnderline\n toolbarOpts={toolbarOpts}\n pluginProps={getPluginProps(text?.inputConfiguration)}\n spellCheck={spellCheckEnabled}\n imageSupport={imageSupport}\n uploadSoundSupport={uploadSoundSupport}\n languageCharactersProps={[{ language: 'spanish' }, { language: 'special' }]}\n mathMlOptions={mathMlOptions}\n />\n )}\n </InputContainer>\n )}\n\n {rationaleEnabled && (\n <InputContainer label={rationale.label || ''} className={classes.promptHolder}>\n <EditableHtml\n className={classes.prompt}\n markup={model.rationale || ''}\n onChange={this.onRationaleChanged}\n imageSupport={imageSupport}\n error={rationaleError}\n toolbarOpts={toolbarOpts}\n pluginProps={getPluginProps(configuration?.rationale?.inputConfiguration)}\n spellCheck={spellCheckEnabled}\n maxImageWidth={(maxImageWidth && maxImageWidth.rationale) || defaultImageMaxWidth}\n maxImageHeight={(maxImageHeight && maxImageHeight.rationale) || defaultImageMaxHeight}\n uploadSoundSupport={uploadSoundSupport}\n languageCharactersProps={[{ language: 'spanish' }, { language: 'special' }]}\n mathMlOptions={mathMlOptions}\n />\n {rationaleError && <div className={classes.errorText}>{rationaleError}</div>}\n </InputContainer>\n )}\n\n {feedbackEnabled && (\n <FeedbackConfig feedback={model.feedback} onChange={this.changeFeedback} toolbarOpts={toolbarOpts} />\n )}\n </layout.ConfigLayout>\n );\n }\n}\n\nexport default withStyles((theme) => ({\n tokenizerContainer: {\n paddingRight: 0,\n marginRight: 0,\n '&:after': {\n position: 'absolute',\n bottom: 0,\n left: 0,\n right: 0,\n height: '1px',\n content: '\"\"',\n backgroundColor: theme.palette.primary.main,\n },\n marginBottom: theme.spacing.unit,\n },\n chip: {\n marginTop: theme.spacing.unit / 2,\n marginRight: theme.spacing.unit * 2,\n },\n input: {\n width: '100%',\n },\n tokenizer: {\n marginTop: theme.spacing.unit * 2,\n },\n mainOpts: {\n width: '100%',\n justifyContent: 'space-between',\n display: 'flex',\n alignItems: 'baseline',\n },\n promptHolder: {\n width: '100%',\n paddingTop: theme.spacing.unit * 2,\n marginBottom: theme.spacing.unit * 2,\n },\n tokensDetails: {\n display: 'flex',\n alignItems: 'center',\n flexWrap: 'wrap',\n marginBottom: theme.spacing.unit * 2.5,\n },\n numberField: {\n width: '180px',\n margin: `${theme.spacing.unit / 2}px auto 0`,\n },\n tooltip: {\n fontSize: theme.typography.fontSize - 2,\n whiteSpace: 'pre',\n maxWidth: '500px',\n },\n errorText: {\n fontSize: theme.typography.fontSize - 2,\n color: theme.palette.error.main,\n paddingTop: theme.spacing.unit,\n },\n\n subheader: {\n paddingBottom: '8px',\n borderBottom: '1px solid grey',\n marginBottom: '16px',\n marginTop: '24px',\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'space-between',\n },\n textContainer: {\n padding: '15px 21px',\n border: '1px solid #ccc',\n borderRadius: '4px',\n overflowY: 'scroll',\n whiteSpace: 'pre-wrap',\n overflowWrap: 'break-word',\n '& p': {\n margin: 0,\n },\n '& span[data-latex]': {\n userSelect: 'none',\n '-webkit-user-select': 'none',\n '-moz-user-select': 'none',\n '-ms-user-select': 'none',\n },\n },\n token: {\n position: 'relative',\n cursor: 'pointer',\n backgroundColor: '#fff9c4',\n\n '&:hover': {\n backgroundColor: '#E5E0B0',\n },\n\n '&.correct': {\n backgroundColor: '#4caf50',\n },\n },\n}))(Design);\n"],"file":"design.js"}
1
+ {"version":3,"sources":["../src/design.jsx"],"names":["Panel","settings","toggle","radio","dropdown","log","Design","props","val","apply","u","text","tokens","event","updateText","target","value","mode","correctTokenCount","filter","t","correct","length","max","isFinite","maxSelections","Math","fn","onModelChanged","model","update","feedback","partialScoring","prompt","teacherInstructions","rationale","state","nProps","setState","textValue","classes","configuration","imageSupport","onConfigurationChanged","uploadSoundSupport","baseInputConfiguration","correctAnswer","contentDimensions","highlightChoices","selectionCount","selections","settingsPanelDisabled","scoringType","spellCheck","studentInstructions","maxImageWidth","maxImageHeight","withRubric","mathMlOptions","language","languageChoices","errors","extraCSSRules","feedbackEnabled","promptEnabled","rationaleEnabled","spellCheckEnabled","teacherInstructionsEnabled","toolbarEditorPosition","promptError","rationaleError","selectionsError","teacherInstructionsError","tokensError","validationMessage","defaultImageMaxWidth","defaultImageMaxHeight","tokensModel","toolbarOpts","position","panelSettings","label","enabled","options","panelProperties","studentInstructionsEnabled","rubricEnabled","getPluginProps","Settings","Properties","promptHolder","onTeacherInstructionsChanged","inputConfiguration","errorText","onPromptChanged","input","changeText","tokenizerContainer","tooltip","left","top","tokenizer","changeTokens","tokensDetails","chip","changeMaxSelections","numberField","onRationaleChanged","changeFeedback","React","Component","PropTypes","object","isRequired","func","shape","add","theme","paddingRight","marginRight","bottom","right","height","content","backgroundColor","palette","primary","main","marginBottom","spacing","unit","marginTop","width","mainOpts","justifyContent","display","alignItems","paddingTop","flexWrap","margin","fontSize","typography","whiteSpace","maxWidth","color","error"],"mappings":"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","sourcesContent":["import React from 'react';\nimport PropTypes from 'prop-types';\nimport TextField from '@material-ui/core/TextField';\nimport { withStyles } from '@material-ui/core/styles';\nimport cloneDeep from 'lodash/cloneDeep';\nimport debounce from 'lodash/debounce';\nimport { Tokenizer } from '@pie-lib/text-select';\nimport { InputContainer, NumberTextField, FeedbackConfig, settings, layout } from '@pie-lib/config-ui';\nimport Chip from '@material-ui/core/Chip';\nimport Info from '@material-ui/icons/Info';\nimport debug from 'debug';\nimport EditableHtml from '@pie-lib/editable-html';\nimport Tooltip from '@material-ui/core/Tooltip';\nimport { generateValidationMessage } from './utils';\n\nconst { Panel, toggle, radio, dropdown } = settings;\n\nconst log = debug('@pie-element:select-text:configure');\n\nexport class Design extends React.Component {\n static propTypes = {\n model: PropTypes.object.isRequired,\n configuration: PropTypes.object.isRequired,\n classes: PropTypes.object.isRequired,\n onModelChanged: PropTypes.func.isRequired,\n onConfigurationChanged: PropTypes.func.isRequired,\n imageSupport: PropTypes.shape({\n add: PropTypes.func.isRequired,\n delete: PropTypes.func.isRequired,\n }),\n uploadSoundSupport: PropTypes.object,\n };\n\n static defaultProps = {};\n\n constructor(props) {\n super(props);\n\n const { model } = this.props;\n\n this.state = {\n text: (model && model.text) || '',\n };\n }\n\n UNSAFE_componentWillReceiveProps(nProps) {\n const { model } = nProps;\n\n if (model && model.text) {\n this.setState({\n text: model.text,\n });\n }\n }\n\n updateText = debounce((val) => {\n this.apply((u) => {\n u.text = val;\n u.tokens = [];\n });\n }, 200);\n\n changeText = (event) => this.updateText(event.target.value);\n\n changeTokens = (tokens, mode) => {\n this.apply((u) => {\n u.tokens = tokens;\n u.mode = mode;\n\n const correctTokenCount = tokens.filter((t) => t.correct).length;\n const max = isFinite(u.maxSelections) ? u.maxSelections : 0;\n\n u.maxSelections = Math.max(max, correctTokenCount);\n });\n };\n\n changeMaxSelections = (event, max) => {\n this.apply((u) => (u.maxSelections = max));\n };\n\n apply = (fn) => {\n const { onModelChanged, model } = this.props;\n const update = cloneDeep(model);\n\n fn(update);\n onModelChanged(update);\n };\n\n changeFeedback = (feedback) => {\n this.apply((u) => (u.feedback = feedback));\n };\n\n changePartialScoring = (partialScoring) => {\n const { onModelChanged, model } = this.props;\n const update = cloneDeep(model);\n update.partialScoring = partialScoring;\n\n onModelChanged(update);\n };\n\n onPromptChanged = (prompt) => {\n const { onModelChanged, model } = this.props;\n const update = cloneDeep(model);\n\n update.prompt = prompt;\n onModelChanged(update);\n };\n\n onTeacherInstructionsChanged = (teacherInstructions) => {\n const { onModelChanged, model } = this.props;\n const update = cloneDeep(model);\n\n update.teacherInstructions = teacherInstructions;\n onModelChanged(update);\n };\n\n onRationaleChanged = (rationale) => {\n const { onModelChanged, model } = this.props;\n\n onModelChanged({ ...model, rationale });\n };\n\n render() {\n const { text: textValue } = this.state;\n const { classes, configuration, imageSupport, model, onConfigurationChanged, onModelChanged, uploadSoundSupport } =\n this.props;\n const {\n baseInputConfiguration = {},\n correctAnswer = {},\n contentDimensions = {},\n feedback = {},\n highlightChoices = {},\n mode = {},\n partialScoring = {},\n prompt = {},\n rationale = {},\n selectionCount = {},\n selections = {},\n settingsPanelDisabled,\n scoringType = {},\n spellCheck = {},\n studentInstructions = {},\n teacherInstructions = {},\n text = {},\n tokens = {},\n maxImageWidth = {},\n maxImageHeight = {},\n withRubric = {},\n mathMlOptions = {},\n language = {},\n languageChoices = {},\n } = configuration || {};\n const {\n errors,\n extraCSSRules,\n feedbackEnabled,\n promptEnabled,\n rationaleEnabled,\n spellCheckEnabled,\n teacherInstructionsEnabled,\n toolbarEditorPosition,\n } = model || {};\n\n const {\n prompt: promptError,\n rationale: rationaleError,\n selectionsError,\n teacherInstructions: teacherInstructionsError,\n tokensError,\n } = errors || {};\n const validationMessage = generateValidationMessage(configuration);\n\n const defaultImageMaxWidth = maxImageWidth && maxImageWidth.prompt;\n const defaultImageMaxHeight = maxImageHeight && maxImageHeight.prompt;\n\n let { tokens: tokensModel } = model;\n tokensModel = tokensModel || [];\n\n const toolbarOpts = {\n position: toolbarEditorPosition === 'top' ? 'top' : 'bottom',\n };\n\n log('[render] maxSelections:', model.maxSelections);\n\n const panelSettings = {\n partialScoring: partialScoring.settings && toggle(partialScoring.label),\n highlightChoices: highlightChoices.settings && toggle(highlightChoices.label),\n feedbackEnabled: feedback.settings && toggle(feedback.label),\n 'language.enabled': language.settings && toggle(language.label, true),\n language: language.settings && language.enabled && dropdown(languageChoices.label, languageChoices.options),\n };\n\n const panelProperties = {\n teacherInstructionsEnabled: teacherInstructions.settings && toggle(teacherInstructions.label),\n studentInstructionsEnabled: studentInstructions.settings && toggle(studentInstructions.label),\n promptEnabled: prompt.settings && toggle(prompt.label),\n rationaleEnabled: rationale.settings && toggle(rationale.label),\n spellCheckEnabled: spellCheck.settings && toggle(spellCheck.label),\n scoringType: scoringType.settings && radio(scoringType.label, ['auto', 'rubric']),\n rubricEnabled: withRubric?.settings && toggle(withRubric?.label),\n };\n\n const getPluginProps = (props = {}) => ({\n ...baseInputConfiguration,\n ...props,\n });\n\n return (\n <layout.ConfigLayout\n extraCSSRules={extraCSSRules}\n dimensions={contentDimensions}\n hideSettings={settingsPanelDisabled}\n settings={\n <Panel\n model={model}\n configuration={configuration}\n onChangeModel={(model) => onModelChanged(model)}\n onChangeConfiguration={onConfigurationChanged}\n groups={{\n Settings: panelSettings,\n Properties: panelProperties,\n }}\n />\n }\n >\n {teacherInstructionsEnabled && (\n <InputContainer label={teacherInstructions.label} className={classes.promptHolder}>\n <EditableHtml\n className={classes.prompt}\n markup={model.teacherInstructions || ''}\n onChange={this.onTeacherInstructionsChanged}\n imageSupport={imageSupport}\n nonEmpty={false}\n error={teacherInstructionsError}\n toolbarOpts={toolbarOpts}\n pluginProps={getPluginProps(configuration?.teacherInstructions?.inputConfiguration)}\n spellCheck={spellCheckEnabled}\n maxImageWidth={(maxImageWidth && maxImageWidth.teacherInstructions) || defaultImageMaxWidth}\n maxImageHeight={(maxImageHeight && maxImageHeight.teacherInstructions) || defaultImageMaxHeight}\n uploadSoundSupport={uploadSoundSupport}\n languageCharactersProps={[{ language: 'spanish' }, { language: 'special' }]}\n mathMlOptions={mathMlOptions}\n />\n {teacherInstructionsError && <div className={classes.errorText}>{teacherInstructionsError}</div>}\n </InputContainer>\n )}\n\n {promptEnabled && (\n <InputContainer label={prompt.label || ''} className={classes.promptHolder}>\n <EditableHtml\n className={classes.prompt}\n markup={model.prompt}\n onChange={this.onPromptChanged}\n imageSupport={imageSupport}\n error={promptError}\n toolbarOpts={toolbarOpts}\n pluginProps={getPluginProps(configuration?.prompt?.inputConfiguration)}\n spellCheck={spellCheckEnabled}\n maxImageWidth={defaultImageMaxWidth}\n maxImageHeight={defaultImageMaxHeight}\n uploadSoundSupport={uploadSoundSupport}\n languageCharactersProps={[{ language: 'spanish' }, { language: 'special' }]}\n mathMlOptions={mathMlOptions}\n />\n {promptError && <div className={classes.errorText}>{promptError}</div>}\n </InputContainer>\n )}\n\n {text.settings && (\n <InputContainer label={text.label || ''} className={classes.promptHolder}>\n <TextField\n className={classes.input}\n multiline\n defaultValue={textValue}\n onChange={this.changeText}\n spellCheck={spellCheckEnabled}\n />\n </InputContainer>\n )}\n\n {tokens.settings && (\n <InputContainer label={tokens.label || ''} className={classes.tokenizerContainer}>\n <Tooltip\n classes={{ tooltip: classes.tooltip }}\n disableFocusListener\n disableTouchListener\n placement={'right'}\n title={validationMessage}\n >\n <Info fontSize={'small'} color={'primary'} style={{ position: 'absolute', left: '48px', top: '-3px' }} />\n </Tooltip>\n\n <Tokenizer\n className={classes.tokenizer}\n text={model.text}\n tokens={tokensModel}\n onChange={this.changeTokens}\n />\n </InputContainer>\n )}\n {tokensError && <div className={classes.errorText}>{tokensError}</div>}\n {selectionsError && <div className={classes.errorText}>{selectionsError}</div>}\n\n <div className={classes.tokensDetails}>\n {mode.settings && (\n <Chip label={`${mode.label}: ${model.mode ? model.mode : 'None'}`} className={classes.chip} />\n )}\n\n {selections.settings && (\n <Chip label={`${selections.label}: ${tokensModel.length}`} className={classes.chip} />\n )}\n\n {correctAnswer.settings && (\n <Chip\n label={`${correctAnswer.label}: ${tokensModel.filter((t) => t.correct).length}`}\n className={classes.chip}\n />\n )}\n\n {selectionCount.settings && (\n <NumberTextField\n min={tokensModel.filter((t) => t.correct).length || 0}\n label={`${selectionCount.label} (0:any)`}\n max={tokensModel.length}\n value={model.maxSelections}\n onChange={this.changeMaxSelections}\n className={classes.numberField}\n />\n )}\n </div>\n\n {rationaleEnabled && (\n <InputContainer label={rationale.label || ''} className={classes.promptHolder}>\n <EditableHtml\n className={classes.prompt}\n markup={model.rationale || ''}\n onChange={this.onRationaleChanged}\n imageSupport={imageSupport}\n error={rationaleError}\n toolbarOpts={toolbarOpts}\n pluginProps={getPluginProps(configuration?.rationale?.inputConfiguration)}\n spellCheck={spellCheckEnabled}\n maxImageWidth={(maxImageWidth && maxImageWidth.rationale) || defaultImageMaxWidth}\n maxImageHeight={(maxImageHeight && maxImageHeight.rationale) || defaultImageMaxHeight}\n uploadSoundSupport={uploadSoundSupport}\n languageCharactersProps={[{ language: 'spanish' }, { language: 'special' }]}\n mathMlOptions={mathMlOptions}\n />\n {rationaleError && <div className={classes.errorText}>{rationaleError}</div>}\n </InputContainer>\n )}\n\n {feedbackEnabled && (\n <FeedbackConfig feedback={model.feedback} onChange={this.changeFeedback} toolbarOpts={toolbarOpts} />\n )}\n </layout.ConfigLayout>\n );\n }\n}\n\nexport default withStyles((theme) => ({\n tokenizerContainer: {\n paddingRight: 0,\n marginRight: 0,\n '&:after': {\n position: 'absolute',\n bottom: 0,\n left: 0,\n right: 0,\n height: '1px',\n content: '\"\"',\n backgroundColor: theme.palette.primary.main,\n },\n marginBottom: theme.spacing.unit,\n },\n chip: {\n marginTop: theme.spacing.unit / 2,\n marginRight: theme.spacing.unit * 2,\n },\n input: {\n width: '100%',\n },\n tokenizer: {\n marginTop: theme.spacing.unit * 2,\n },\n mainOpts: {\n width: '100%',\n justifyContent: 'space-between',\n display: 'flex',\n alignItems: 'baseline',\n },\n promptHolder: {\n width: '100%',\n paddingTop: theme.spacing.unit * 2,\n marginBottom: theme.spacing.unit * 2,\n },\n tokensDetails: {\n display: 'flex',\n alignItems: 'center',\n flexWrap: 'wrap',\n marginBottom: theme.spacing.unit * 2.5,\n },\n numberField: {\n width: '180px',\n margin: `${theme.spacing.unit / 2}px auto 0`,\n },\n tooltip: {\n fontSize: theme.typography.fontSize - 2,\n whiteSpace: 'pre',\n maxWidth: '500px',\n },\n errorText: {\n fontSize: theme.typography.fontSize - 2,\n color: theme.palette.error.main,\n paddingTop: theme.spacing.unit,\n },\n}))(Design);\n"],"file":"design.js"}
@@ -29,8 +29,6 @@ var _design = _interopRequireDefault(require("./design"));
29
29
 
30
30
  var _pieConfigureEvents = require("@pie-framework/pie-configure-events");
31
31
 
32
- var _mathRendering = require("@pie-lib/pie-toolbox/math-rendering");
33
-
34
32
  var _defaultConfiguration = _interopRequireDefault(require("./defaultConfiguration"));
35
33
 
36
34
  var _utils = require("./utils");
@@ -157,8 +155,6 @@ var SelectTextConfigure = /*#__PURE__*/function (_HTMLElement) {
157
155
  }, {
158
156
  key: "render",
159
157
  value: function render() {
160
- var _this3 = this;
161
-
162
158
  if (this._model) {
163
159
  var el = /*#__PURE__*/_react["default"].createElement(_design["default"], {
164
160
  model: this._model,
@@ -175,9 +171,7 @@ var SelectTextConfigure = /*#__PURE__*/function (_HTMLElement) {
175
171
  }
176
172
  });
177
173
 
178
- _reactDom["default"].render(el, this, function () {
179
- (0, _mathRendering.renderMath)(_this3);
180
- });
174
+ _reactDom["default"].render(el, this);
181
175
  }
182
176
  }
183
177
  }]);
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/index.js"],"names":["SelectTextConfigure","_model","createDefaultModel","_configuration","defaultValues","configuration","m","render","c","newConfiguration","language","enabled","languageChoices","options","length","value","settings","find","option","push","label","dispatchEvent","ModelUpdatedEvent","handler","InsertImageEvent","src","done","DeleteImageEvent","InsertSoundEvent","DeleteSoundEvent","el","React","createElement","Main","model","onModelChanged","modelChanged","bind","onConfigurationChanged","imageSupport","add","insertImage","onDeleteImage","uploadSoundSupport","insertSound","onDeleteSound","ReactDOM","HTMLElement","newModel"],"mappings":"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","sourcesContent":["import React from 'react';\nimport ReactDOM from 'react-dom';\nimport Main from './design';\nimport {\n ModelUpdatedEvent,\n DeleteImageEvent,\n InsertImageEvent,\n InsertSoundEvent,\n DeleteSoundEvent,\n} from '@pie-framework/pie-configure-events';\nimport { renderMath } from '@pie-lib/pie-toolbox/math-rendering';\n\nimport defaultValues from './defaultConfiguration';\nimport { generateModel } from './utils';\n\nexport default class SelectTextConfigure extends HTMLElement {\n static createDefaultModel = (model = {}) => {\n const newModel = {\n ...defaultValues.model,\n ...model,\n };\n\n return generateModel(newModel);\n };\n\n constructor() {\n super();\n this._model = SelectTextConfigure.createDefaultModel();\n this._configuration = defaultValues.configuration;\n }\n\n set model(m) {\n this._model = SelectTextConfigure.createDefaultModel(m);\n this.render();\n }\n\n set configuration(c) {\n const newConfiguration = {\n ...defaultValues.configuration,\n ...c,\n };\n\n this._configuration = newConfiguration;\n\n // if language:enabled is true, then the corresponding default item model should include a language value;\n // if it is false, then the language field should be omitted from the item model.\n // if a default item model includes a language value (e.g., en_US) and the corresponding authoring view settings have language:settings = true,\n // then (a) language:enabled should also be true, and (b) that default language value should be represented in languageChoices[] (as a key).\n if (newConfiguration?.language?.enabled) {\n if (newConfiguration?.languageChoices?.options?.length) {\n this._model.language = newConfiguration?.languageChoices.options[0].value;\n }\n } else if (newConfiguration.language.settings && this._model.language) {\n this._configuration.language.enabled = true;\n\n if (!this._configuration.languageChoices.options || !this._configuration.languageChoices.options.length) {\n this._configuration.languageChoices.options = [];\n }\n\n // check if the language is already included in the languageChoices.options array\n // and if not, then add it.\n if (!this._configuration.languageChoices.options.find((option) => option.value === this._model.language)) {\n this._configuration.languageChoices.options.push({\n value: this._model.language,\n label: this._model.language,\n });\n }\n } else {\n delete this._model.language;\n }\n\n this.render();\n }\n\n connectedCallback() {\n this.render();\n }\n\n modelChanged(m) {\n this._model = m;\n this.dispatchEvent(new ModelUpdatedEvent(this._model), true);\n this.render();\n }\n\n onConfigurationChanged(c) {\n this._configuration = c;\n\n if (this._model) {\n this.dispatchEvent(new ModelUpdatedEvent(this._model), false);\n }\n\n this.render();\n }\n\n /**\n *\n * @param {done, progress, file} handler\n */\n insertImage(handler) {\n this.dispatchEvent(new InsertImageEvent(handler));\n }\n\n onDeleteImage(src, done) {\n this.dispatchEvent(new DeleteImageEvent(src, done));\n }\n\n insertSound(handler) {\n this.dispatchEvent(new InsertSoundEvent(handler));\n }\n\n onDeleteSound(src, done) {\n this.dispatchEvent(new DeleteSoundEvent(src, done));\n }\n\n render() {\n if (this._model) {\n const el = React.createElement(Main, {\n model: this._model,\n configuration: this._configuration,\n onModelChanged: this.modelChanged.bind(this),\n onConfigurationChanged: this.onConfigurationChanged.bind(this),\n imageSupport: {\n add: this.insertImage.bind(this),\n delete: this.onDeleteImage.bind(this),\n },\n uploadSoundSupport: {\n add: this.insertSound.bind(this),\n delete: this.onDeleteSound.bind(this),\n },\n });\n\n ReactDOM.render(el, this, () => {\n renderMath(this);\n });\n }\n }\n}\n"],"file":"index.js"}
1
+ {"version":3,"sources":["../src/index.js"],"names":["SelectTextConfigure","_model","createDefaultModel","_configuration","defaultValues","configuration","m","render","c","newConfiguration","language","enabled","languageChoices","options","length","value","settings","find","option","push","label","dispatchEvent","ModelUpdatedEvent","handler","InsertImageEvent","src","done","DeleteImageEvent","InsertSoundEvent","DeleteSoundEvent","el","React","createElement","Main","model","onModelChanged","modelChanged","bind","onConfigurationChanged","imageSupport","add","insertImage","onDeleteImage","uploadSoundSupport","insertSound","onDeleteSound","ReactDOM","HTMLElement","newModel"],"mappings":"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","sourcesContent":["import React from 'react';\nimport ReactDOM from 'react-dom';\nimport Main from './design';\nimport {\n ModelUpdatedEvent,\n DeleteImageEvent,\n InsertImageEvent,\n InsertSoundEvent,\n DeleteSoundEvent,\n} from '@pie-framework/pie-configure-events';\nimport defaultValues from './defaultConfiguration';\nimport { generateModel } from './utils';\n\nexport default class SelectTextConfigure extends HTMLElement {\n static createDefaultModel = (model = {}) => {\n const newModel = {\n ...defaultValues.model,\n ...model,\n };\n\n return generateModel(newModel);\n };\n\n constructor() {\n super();\n this._model = SelectTextConfigure.createDefaultModel();\n this._configuration = defaultValues.configuration;\n }\n\n set model(m) {\n this._model = SelectTextConfigure.createDefaultModel(m);\n this.render();\n }\n\n set configuration(c) {\n const newConfiguration = {\n ...defaultValues.configuration,\n ...c,\n };\n\n this._configuration = newConfiguration;\n\n // if language:enabled is true, then the corresponding default item model should include a language value;\n // if it is false, then the language field should be omitted from the item model.\n // if a default item model includes a language value (e.g., en_US) and the corresponding authoring view settings have language:settings = true,\n // then (a) language:enabled should also be true, and (b) that default language value should be represented in languageChoices[] (as a key).\n if (newConfiguration?.language?.enabled) {\n if (newConfiguration?.languageChoices?.options?.length) {\n this._model.language = newConfiguration?.languageChoices.options[0].value;\n }\n } else if (newConfiguration.language.settings && this._model.language) {\n this._configuration.language.enabled = true;\n\n if (!this._configuration.languageChoices.options || !this._configuration.languageChoices.options.length) {\n this._configuration.languageChoices.options = [];\n }\n\n // check if the language is already included in the languageChoices.options array\n // and if not, then add it.\n if (!this._configuration.languageChoices.options.find(option => option.value === this._model.language)) {\n this._configuration.languageChoices.options.push({\n value: this._model.language,\n label: this._model.language,\n });\n }\n } else {\n delete this._model.language;\n }\n\n this.render();\n }\n\n connectedCallback() {\n this.render();\n }\n\n modelChanged(m) {\n this._model = m;\n this.dispatchEvent(new ModelUpdatedEvent(this._model), true);\n this.render();\n }\n\n onConfigurationChanged(c) {\n this._configuration = c;\n\n if (this._model) {\n this.dispatchEvent(new ModelUpdatedEvent(this._model), false);\n }\n\n this.render();\n }\n\n /**\n *\n * @param {done, progress, file} handler\n */\n insertImage(handler) {\n this.dispatchEvent(new InsertImageEvent(handler));\n }\n\n onDeleteImage(src, done) {\n this.dispatchEvent(new DeleteImageEvent(src, done));\n }\n\n insertSound(handler) {\n this.dispatchEvent(new InsertSoundEvent(handler));\n }\n\n onDeleteSound(src, done) {\n this.dispatchEvent(new DeleteSoundEvent(src, done));\n }\n\n render() {\n if (this._model) {\n const el = React.createElement(Main, {\n model: this._model,\n configuration: this._configuration,\n onModelChanged: this.modelChanged.bind(this),\n onConfigurationChanged: this.onConfigurationChanged.bind(this),\n imageSupport: {\n add: this.insertImage.bind(this),\n delete: this.onDeleteImage.bind(this),\n },\n uploadSoundSupport: {\n add: this.insertSound.bind(this),\n delete: this.onDeleteSound.bind(this),\n },\n });\n\n ReactDOM.render(el, this);\n }\n }\n}\n"],"file":"index.js"}
@@ -5,7 +5,7 @@ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefau
5
5
  Object.defineProperty(exports, "__esModule", {
6
6
  value: true
7
7
  });
8
- exports.generateValidationMessage = exports.generateModel = exports.clearSelection = void 0;
8
+ exports.generateValidationMessage = exports.generateModel = void 0;
9
9
 
10
10
  var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
11
11
 
@@ -110,31 +110,7 @@ var generateValidationMessage = function generateValidationMessage(config) {
110
110
  var selectionsMessage = '\nThere should be at least 1 ' + (maxSelections ? "and at most ".concat(maxSelections, " ") : '') + 'token' + (maxSelections ? 's' : '') + ' selected.';
111
111
  var message = 'Validation requirements:' + tokensMessage + selectionsMessage;
112
112
  return message;
113
- }; // also used in extended-text-entry
114
-
115
-
116
- exports.generateValidationMessage = generateValidationMessage;
117
-
118
- var clearSelection = function clearSelection() {
119
- if (document.getSelection) {
120
- // for all new browsers (IE9+, Chrome, Firefox)
121
- document.getSelection().removeAllRanges();
122
- document.getSelection().addRange(document.createRange());
123
- } else if (window.getSelection) {
124
- // equals with the document.getSelection (MSDN info)
125
- if (window.getSelection().removeAllRanges) {
126
- // for all new browsers (IE9+, Chrome, Firefox)
127
- window.getSelection().removeAllRanges();
128
- window.getSelection().addRange(document.createRange());
129
- } else if (window.getSelection().empty) {
130
- // Chrome supports this as well
131
- window.getSelection().empty();
132
- }
133
- } else if (document.selection) {
134
- // IE8-
135
- document.selection.empty();
136
- }
137
113
  };
138
114
 
139
- exports.clearSelection = clearSelection;
115
+ exports.generateValidationMessage = generateValidationMessage;
140
116
  //# sourceMappingURL=utils.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/utils.js"],"names":["createElementFromHTML","htmlString","arguments","length","undefined","div","document","createElement","innerHTML","trim","parseParagraph","paragraph","end","concat","parseParagraphs","dom","paragraphs","querySelectorAll","str","forEach","par","index","prepareText","text","txtDom","allDomElements","Array","from","generateModel","model","modelText","newTokens","tokens","reduce","acc","token","tokenText","slice","start","getStartIndex","newStartIndex","indexOf","lastToken","newStart","newEnd","oldStart","oldEnd","generateValidationMessage","config","minTokens","maxTokens","maxSelections","tokensMessage","selectionsMessage","message","clearSelection","getSelection","removeAllRanges","addRange","createRange","window","empty","selection"],"mappings":";;;;;;;;;;;;;;;;;AAAA,IAAIA,qBAAqB,GAAG,SAASA,qBAAT,GAAiC;AAC3D,MAAIC,UAAU,GAAGC,SAAS,CAACC,MAAV,GAAmB,CAAnB,IAAwBD,SAAS,CAAC,CAAD,CAAT,KAAiBE,SAAzC,GAAqDF,SAAS,CAAC,CAAD,CAA9D,GAAoE,EAArF;AACA,MAAIG,GAAG,GAAGC,QAAQ,CAACC,aAAT,CAAuB,KAAvB,CAAV;AACAF,EAAAA,GAAG,CAACG,SAAJ,GAAgBP,UAAU,CAACQ,IAAX,EAAhB;AACA,SAAOJ,GAAP;AACD,CALD;;AAOA,IAAIK,cAAc,GAAG,SAASA,cAAT,CAAwBC,SAAxB,EAAmCC,GAAnC,EAAwC;AAC3D,MAAIA,GAAJ,EAAS;AACP,WAAOD,SAAS,CAACH,SAAjB;AACD;;AAED,SAAO,GAAGK,MAAH,CAAUF,SAAS,CAACH,SAApB,EAA+B,MAA/B,CAAP;AACD,CAND;;AAQA,IAAIM,eAAe,GAAG,SAASA,eAAT,CAAyBC,GAAzB,EAA8B;AAClD,MAAIC,UAAU,GAAGD,GAAG,CAACE,gBAAJ,CAAqB,qBAArB,CAAjB,CADkD,CACY;;AAE9D,MAAIC,GAAG,GAAG,EAAV;AACAF,EAAAA,UAAU,CAACG,OAAX,CAAmB,UAAUC,GAAV,EAAeC,KAAf,EAAsB;AACvCH,IAAAA,GAAG,IAAIR,cAAc,CAACU,GAAD,EAAMC,KAAK,KAAKL,UAAU,CAACb,MAAX,GAAoB,CAApC,CAArB;AACD,GAFD;AAGA,SAAOe,GAAG,IAAI,IAAd;AACD,CARD;;AAUA,IAAII,WAAW,GAAG,SAASA,WAAT,CAAqBC,IAArB,EAA2B;AAC3C,MAAIC,MAAM,GAAGxB,qBAAqB,CAACuB,IAAD,CAAlC;AAEA,MAAIlB,GAAG,GAAGC,QAAQ,CAACC,aAAT,CAAuB,KAAvB,CAAV;AACAF,EAAAA,GAAG,CAACG,SAAJ,GAAgB,yBAAyBK,MAAzB,CAAgCW,MAAM,CAAChB,SAAvC,EAAkD,QAAlD,CAAhB;AACAgB,EAAAA,MAAM,GAAGnB,GAAT;AAEA,MAAIoB,cAAc,GAAGC,KAAK,CAACC,IAAN,CAAWH,MAAM,CAACP,gBAAP,CAAwB,GAAxB,CAAX,CAArB;;AAEA,MAAIQ,cAAc,CAACtB,MAAf,KAA0B,CAA9B,EAAiC;AAC/B,WAAOoB,IAAP;AACD;;AAED,SAAOT,eAAe,CAACU,MAAD,CAAtB;AACD,CAdD;;AAgBO,IAAMI,aAAa,GAAG,SAAhBA,aAAgB,CAACC,KAAD,EAAW;AACtC,MAAI,CAACA,KAAL,EAAY,OAAOA,KAAP,CAD0B,CAGtC;;AACA,MAAMC,SAAS,GAAGR,WAAW,CAACO,KAAK,CAACN,IAAN,IAAc,EAAf,CAA7B;AAEA,MAAMQ,SAAS,GAAG,CAACF,KAAK,CAACG,MAAN,IAAgB,EAAjB,EAAqBC,MAArB,CAA4B,UAACC,GAAD,EAAqB;AAAA,QAAfC,KAAe,uEAAP,EAAO;AACjE,QAAMC,SAAS,GAAGd,WAAW,CAAC,CAACO,KAAK,CAACN,IAAN,IAAc,EAAf,EAAmBc,KAAnB,CAAyBF,KAAK,CAACG,KAA/B,EAAsCH,KAAK,CAACvB,GAA5C,CAAD,CAA7B;;AAEA,QAAI,CAACwB,SAAL,EAAgB;AACd,2DAAWF,GAAX,IAAgBC,KAAhB;AACD;;AAED,QAAMI,aAAa,GAAG,SAAhBA,aAAgB,CAACD,KAAD,EAAW;AAC/B,UAAInC,MAAM,GAAGmC,KAAb;;AAEA,aAAOnC,MAAM,IAAI,CAAjB,EAAoB;AAClB,YAAIqC,aAAa,GAAGV,SAAS,CAACO,KAAV,CAAgBlC,MAAhB,EAAwBsC,OAAxB,CAAgCL,SAAhC,CAApB;;AAEA,YAAII,aAAa,IAAI,CAArB,EAAwB;AACtB,iBAAOA,aAAa,GAAGrC,MAAvB;AACD;;AAEDA,QAAAA,MAAM;AACP;;AAED,aAAO,CAAP;AACD,KAdD;;AAgBA,QAAMuC,SAAS,GAAGR,GAAG,CAACA,GAAG,CAAC/B,MAAJ,GAAa,CAAd,CAArB;AACA,QAAMwC,QAAQ,GAAGJ,aAAa,CAACG,SAAS,GAAGA,SAAS,CAAC9B,GAAb,GAAmBuB,KAAK,CAACG,KAAnC,CAA9B;AACA,QAAMM,MAAM,GAAGD,QAAQ,GAAGP,SAAS,CAACjC,MAApC;AAEA,yDACK+B,GADL,oCAGOC,KAHP;AAIIZ,MAAAA,IAAI,EAAEa,SAJV;AAKIE,MAAAA,KAAK,EAAEK,QALX;AAMI/B,MAAAA,GAAG,EAAEgC,MANT;AAOI;AACAC,MAAAA,QAAQ,EAAEV,KAAK,CAACG,KARpB;AASIQ,MAAAA,MAAM,EAAEX,KAAK,CAACvB;AATlB;AAYD,GAvCiB,EAuCf,EAvCe,CAAlB;AAyCA,yCACKiB,KADL;AAEEG,IAAAA,MAAM,EAAED,SAFV;AAGER,IAAAA,IAAI,EAAEO;AAHR;AAKD,CApDM;;;;AAsDA,IAAMiB,yBAAyB,GAAG,SAA5BA,yBAA4B,CAACC,MAAD,EAAY;AACnD,MAAQC,SAAR,GAAgDD,MAAhD,CAAQC,SAAR;AAAA,MAAmBC,SAAnB,GAAgDF,MAAhD,CAAmBE,SAAnB;AAAA,MAA8BC,aAA9B,GAAgDH,MAAhD,CAA8BG,aAA9B;AAEA,MAAMC,aAAa,GACjB,qCAA8BH,SAA9B,UAA8CC,SAAS,yBAAkBA,SAAlB,SAAiC,EAAxF,IAA8F,iBADhG;AAGA,MAAMG,iBAAiB,GACrB,mCACCF,aAAa,yBAAkBA,aAAlB,SAAqC,EADnD,IAEA,OAFA,IAGCA,aAAa,GAAG,GAAH,GAAS,EAHvB,IAIA,YALF;AAOA,MAAMG,OAAO,GAAG,6BAA6BF,aAA7B,GAA6CC,iBAA7D;AAEA,SAAOC,OAAP;AACD,CAhBM,C,CAkBP;;;;;AACO,IAAMC,cAAc,GAAG,SAAjBA,cAAiB,GAAM;AAClC,MAAIjD,QAAQ,CAACkD,YAAb,EAA2B;AACzB;AACAlD,IAAAA,QAAQ,CAACkD,YAAT,GAAwBC,eAAxB;AACAnD,IAAAA,QAAQ,CAACkD,YAAT,GAAwBE,QAAxB,CAAiCpD,QAAQ,CAACqD,WAAT,EAAjC;AACD,GAJD,MAIO,IAAIC,MAAM,CAACJ,YAAX,EAAyB;AAC9B;AACA,QAAII,MAAM,CAACJ,YAAP,GAAsBC,eAA1B,EAA2C;AACzC;AACAG,MAAAA,MAAM,CAACJ,YAAP,GAAsBC,eAAtB;AACAG,MAAAA,MAAM,CAACJ,YAAP,GAAsBE,QAAtB,CAA+BpD,QAAQ,CAACqD,WAAT,EAA/B;AACD,KAJD,MAIO,IAAIC,MAAM,CAACJ,YAAP,GAAsBK,KAA1B,EAAiC;AACtC;AACAD,MAAAA,MAAM,CAACJ,YAAP,GAAsBK,KAAtB;AACD;AACF,GAVM,MAUA,IAAIvD,QAAQ,CAACwD,SAAb,EAAwB;AAC7B;AACAxD,IAAAA,QAAQ,CAACwD,SAAT,CAAmBD,KAAnB;AACD;AACF,CAnBM","sourcesContent":["var createElementFromHTML = function createElementFromHTML() {\n var htmlString = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : '';\n var div = document.createElement('div');\n div.innerHTML = htmlString.trim();\n return div;\n};\n\nvar parseParagraph = function parseParagraph(paragraph, end) {\n if (end) {\n return paragraph.innerHTML;\n }\n\n return ''.concat(paragraph.innerHTML, '\\n\\n');\n};\n\nvar parseParagraphs = function parseParagraphs(dom) {\n var paragraphs = dom.querySelectorAll('div[separator=true]'); // separate variable for easily debugging, if needed\n\n var str = '';\n paragraphs.forEach(function (par, index) {\n str += parseParagraph(par, index === paragraphs.length - 1);\n });\n return str || null;\n};\n\nvar prepareText = function prepareText(text) {\n var txtDom = createElementFromHTML(text);\n\n var div = document.createElement('div');\n div.innerHTML = \"<div separator='true'>\".concat(txtDom.innerHTML, '</div>');\n txtDom = div;\n\n var allDomElements = Array.from(txtDom.querySelectorAll('*'));\n\n if (allDomElements.length === 0) {\n return text;\n }\n\n return parseParagraphs(txtDom);\n};\n\nexport const generateModel = (model) => {\n if (!model) return model;\n\n // parsing\n const modelText = prepareText(model.text || '');\n\n const newTokens = (model.tokens || []).reduce((acc, token = {}) => {\n const tokenText = prepareText((model.text || '').slice(token.start, token.end));\n\n if (!tokenText) {\n return [...acc, token];\n }\n\n const getStartIndex = (start) => {\n let length = start;\n\n while (length >= 0) {\n let newStartIndex = modelText.slice(length).indexOf(tokenText);\n\n if (newStartIndex >= 0) {\n return newStartIndex + length;\n }\n\n length--;\n }\n\n return 0;\n };\n\n const lastToken = acc[acc.length - 1];\n const newStart = getStartIndex(lastToken ? lastToken.end : token.start);\n const newEnd = newStart + tokenText.length;\n\n return [\n ...acc,\n {\n ...token,\n text: tokenText,\n start: newStart,\n end: newEnd,\n // needed for getScore when tokens position is recalculated\n oldStart: token.start,\n oldEnd: token.end,\n },\n ];\n }, []);\n\n return {\n ...model,\n tokens: newTokens,\n text: modelText,\n };\n};\n\nexport const generateValidationMessage = (config) => {\n const { minTokens, maxTokens, maxSelections } = config;\n\n const tokensMessage =\n `\\nThere should be at least ${minTokens} ` + (maxTokens ? `and at most ${maxTokens} ` : '') + 'tokens defined.';\n\n const selectionsMessage =\n '\\nThere should be at least 1 ' +\n (maxSelections ? `and at most ${maxSelections} ` : '') +\n 'token' +\n (maxSelections ? 's' : '') +\n ' selected.';\n\n const message = 'Validation requirements:' + tokensMessage + selectionsMessage;\n\n return message;\n};\n\n// also used in extended-text-entry\nexport const clearSelection = () => {\n if (document.getSelection) {\n // for all new browsers (IE9+, Chrome, Firefox)\n document.getSelection().removeAllRanges();\n document.getSelection().addRange(document.createRange());\n } else if (window.getSelection) {\n // equals with the document.getSelection (MSDN info)\n if (window.getSelection().removeAllRanges) {\n // for all new browsers (IE9+, Chrome, Firefox)\n window.getSelection().removeAllRanges();\n window.getSelection().addRange(document.createRange());\n } else if (window.getSelection().empty) {\n // Chrome supports this as well\n window.getSelection().empty();\n }\n } else if (document.selection) {\n // IE8-\n document.selection.empty();\n }\n};\n"],"file":"utils.js"}
1
+ {"version":3,"sources":["../src/utils.js"],"names":["createElementFromHTML","htmlString","arguments","length","undefined","div","document","createElement","innerHTML","trim","parseParagraph","paragraph","end","concat","parseParagraphs","dom","paragraphs","querySelectorAll","str","forEach","par","index","prepareText","text","txtDom","allDomElements","Array","from","generateModel","model","modelText","newTokens","tokens","reduce","acc","token","tokenText","slice","start","getStartIndex","newStartIndex","indexOf","lastToken","newStart","newEnd","oldStart","oldEnd","generateValidationMessage","config","minTokens","maxTokens","maxSelections","tokensMessage","selectionsMessage","message"],"mappings":";;;;;;;;;;;;;;;;;AAAA,IAAIA,qBAAqB,GAAG,SAASA,qBAAT,GAAiC;AAC3D,MAAIC,UAAU,GAAGC,SAAS,CAACC,MAAV,GAAmB,CAAnB,IAAwBD,SAAS,CAAC,CAAD,CAAT,KAAiBE,SAAzC,GAAqDF,SAAS,CAAC,CAAD,CAA9D,GAAoE,EAArF;AACA,MAAIG,GAAG,GAAGC,QAAQ,CAACC,aAAT,CAAuB,KAAvB,CAAV;AACAF,EAAAA,GAAG,CAACG,SAAJ,GAAgBP,UAAU,CAACQ,IAAX,EAAhB;AACA,SAAOJ,GAAP;AACD,CALD;;AAOA,IAAIK,cAAc,GAAG,SAASA,cAAT,CAAwBC,SAAxB,EAAmCC,GAAnC,EAAwC;AAC3D,MAAIA,GAAJ,EAAS;AACP,WAAOD,SAAS,CAACH,SAAjB;AACD;;AAED,SAAO,GAAGK,MAAH,CAAUF,SAAS,CAACH,SAApB,EAA+B,MAA/B,CAAP;AACD,CAND;;AAQA,IAAIM,eAAe,GAAG,SAASA,eAAT,CAAyBC,GAAzB,EAA8B;AAClD,MAAIC,UAAU,GAAGD,GAAG,CAACE,gBAAJ,CAAqB,qBAArB,CAAjB,CADkD,CACY;;AAE9D,MAAIC,GAAG,GAAG,EAAV;AACAF,EAAAA,UAAU,CAACG,OAAX,CAAmB,UAAUC,GAAV,EAAeC,KAAf,EAAsB;AACvCH,IAAAA,GAAG,IAAIR,cAAc,CAACU,GAAD,EAAMC,KAAK,KAAKL,UAAU,CAACb,MAAX,GAAoB,CAApC,CAArB;AACD,GAFD;AAGA,SAAOe,GAAG,IAAI,IAAd;AACD,CARD;;AAUA,IAAII,WAAW,GAAG,SAASA,WAAT,CAAqBC,IAArB,EAA2B;AAC3C,MAAIC,MAAM,GAAGxB,qBAAqB,CAACuB,IAAD,CAAlC;AAEA,MAAIlB,GAAG,GAAGC,QAAQ,CAACC,aAAT,CAAuB,KAAvB,CAAV;AACAF,EAAAA,GAAG,CAACG,SAAJ,GAAgB,yBAAyBK,MAAzB,CAAgCW,MAAM,CAAChB,SAAvC,EAAkD,QAAlD,CAAhB;AACAgB,EAAAA,MAAM,GAAGnB,GAAT;AAEA,MAAIoB,cAAc,GAAGC,KAAK,CAACC,IAAN,CAAWH,MAAM,CAACP,gBAAP,CAAwB,GAAxB,CAAX,CAArB;;AAEA,MAAIQ,cAAc,CAACtB,MAAf,KAA0B,CAA9B,EAAiC;AAC/B,WAAOoB,IAAP;AACD;;AAED,SAAOT,eAAe,CAACU,MAAD,CAAtB;AACD,CAdD;;AAgBO,IAAMI,aAAa,GAAG,SAAhBA,aAAgB,CAACC,KAAD,EAAW;AACtC,MAAI,CAACA,KAAL,EAAY,OAAOA,KAAP,CAD0B,CAGtC;;AACA,MAAMC,SAAS,GAAGR,WAAW,CAACO,KAAK,CAACN,IAAN,IAAc,EAAf,CAA7B;AAEA,MAAMQ,SAAS,GAAG,CAACF,KAAK,CAACG,MAAN,IAAgB,EAAjB,EAAqBC,MAArB,CAA4B,UAACC,GAAD,EAAqB;AAAA,QAAfC,KAAe,uEAAP,EAAO;AACjE,QAAMC,SAAS,GAAGd,WAAW,CAAC,CAACO,KAAK,CAACN,IAAN,IAAc,EAAf,EAAmBc,KAAnB,CAAyBF,KAAK,CAACG,KAA/B,EAAsCH,KAAK,CAACvB,GAA5C,CAAD,CAA7B;;AAEA,QAAI,CAACwB,SAAL,EAAgB;AACd,2DAAWF,GAAX,IAAgBC,KAAhB;AACD;;AAED,QAAMI,aAAa,GAAG,SAAhBA,aAAgB,CAACD,KAAD,EAAW;AAC/B,UAAInC,MAAM,GAAGmC,KAAb;;AAEA,aAAOnC,MAAM,IAAI,CAAjB,EAAoB;AAClB,YAAIqC,aAAa,GAAGV,SAAS,CAACO,KAAV,CAAgBlC,MAAhB,EAAwBsC,OAAxB,CAAgCL,SAAhC,CAApB;;AAEA,YAAII,aAAa,IAAI,CAArB,EAAwB;AACtB,iBAAOA,aAAa,GAAGrC,MAAvB;AACD;;AAEDA,QAAAA,MAAM;AACP;;AAED,aAAO,CAAP;AACD,KAdD;;AAgBA,QAAMuC,SAAS,GAAGR,GAAG,CAACA,GAAG,CAAC/B,MAAJ,GAAa,CAAd,CAArB;AACA,QAAMwC,QAAQ,GAAGJ,aAAa,CAACG,SAAS,GAAGA,SAAS,CAAC9B,GAAb,GAAmBuB,KAAK,CAACG,KAAnC,CAA9B;AACA,QAAMM,MAAM,GAAGD,QAAQ,GAAGP,SAAS,CAACjC,MAApC;AAEA,yDACK+B,GADL,oCAGOC,KAHP;AAIIZ,MAAAA,IAAI,EAAEa,SAJV;AAKIE,MAAAA,KAAK,EAAEK,QALX;AAMI/B,MAAAA,GAAG,EAAEgC,MANT;AAOI;AACAC,MAAAA,QAAQ,EAAEV,KAAK,CAACG,KARpB;AASIQ,MAAAA,MAAM,EAAEX,KAAK,CAACvB;AATlB;AAYD,GAvCiB,EAuCf,EAvCe,CAAlB;AAyCA,yCACKiB,KADL;AAEEG,IAAAA,MAAM,EAAED,SAFV;AAGER,IAAAA,IAAI,EAAEO;AAHR;AAKD,CApDM;;;;AAsDA,IAAMiB,yBAAyB,GAAG,SAA5BA,yBAA4B,CAACC,MAAD,EAAY;AACnD,MAAQC,SAAR,GAAgDD,MAAhD,CAAQC,SAAR;AAAA,MAAmBC,SAAnB,GAAgDF,MAAhD,CAAmBE,SAAnB;AAAA,MAA8BC,aAA9B,GAAgDH,MAAhD,CAA8BG,aAA9B;AAEA,MAAMC,aAAa,GACjB,qCAA8BH,SAA9B,UAA8CC,SAAS,yBAAkBA,SAAlB,SAAiC,EAAxF,IAA8F,iBADhG;AAGA,MAAMG,iBAAiB,GACrB,mCACCF,aAAa,yBAAkBA,aAAlB,SAAqC,EADnD,IAEA,OAFA,IAGCA,aAAa,GAAG,GAAH,GAAS,EAHvB,IAIA,YALF;AAOA,MAAMG,OAAO,GAAG,6BAA6BF,aAA7B,GAA6CC,iBAA7D;AAEA,SAAOC,OAAP;AACD,CAhBM","sourcesContent":["var createElementFromHTML = function createElementFromHTML() {\n var htmlString = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : '';\n var div = document.createElement('div');\n div.innerHTML = htmlString.trim();\n return div;\n};\n\nvar parseParagraph = function parseParagraph(paragraph, end) {\n if (end) {\n return paragraph.innerHTML;\n }\n\n return ''.concat(paragraph.innerHTML, '\\n\\n');\n};\n\nvar parseParagraphs = function parseParagraphs(dom) {\n var paragraphs = dom.querySelectorAll('div[separator=true]'); // separate variable for easily debugging, if needed\n\n var str = '';\n paragraphs.forEach(function (par, index) {\n str += parseParagraph(par, index === paragraphs.length - 1);\n });\n return str || null;\n};\n\nvar prepareText = function prepareText(text) {\n var txtDom = createElementFromHTML(text);\n\n var div = document.createElement('div');\n div.innerHTML = \"<div separator='true'>\".concat(txtDom.innerHTML, '</div>');\n txtDom = div;\n\n var allDomElements = Array.from(txtDom.querySelectorAll('*'));\n\n if (allDomElements.length === 0) {\n return text;\n }\n\n return parseParagraphs(txtDom);\n};\n\nexport const generateModel = (model) => {\n if (!model) return model;\n\n // parsing\n const modelText = prepareText(model.text || '');\n\n const newTokens = (model.tokens || []).reduce((acc, token = {}) => {\n const tokenText = prepareText((model.text || '').slice(token.start, token.end));\n\n if (!tokenText) {\n return [...acc, token];\n }\n\n const getStartIndex = (start) => {\n let length = start;\n\n while (length >= 0) {\n let newStartIndex = modelText.slice(length).indexOf(tokenText);\n\n if (newStartIndex >= 0) {\n return newStartIndex + length;\n }\n\n length--;\n }\n\n return 0;\n };\n\n const lastToken = acc[acc.length - 1];\n const newStart = getStartIndex(lastToken ? lastToken.end : token.start);\n const newEnd = newStart + tokenText.length;\n\n return [\n ...acc,\n {\n ...token,\n text: tokenText,\n start: newStart,\n end: newEnd,\n // needed for getScore when tokens position is recalculated\n oldStart: token.start,\n oldEnd: token.end,\n },\n ];\n }, []);\n\n return {\n ...model,\n tokens: newTokens,\n text: modelText,\n };\n};\n\nexport const generateValidationMessage = (config) => {\n const { minTokens, maxTokens, maxSelections } = config;\n\n const tokensMessage =\n `\\nThere should be at least ${minTokens} ` + (maxTokens ? `and at most ${maxTokens} ` : '') + 'tokens defined.';\n\n const selectionsMessage =\n '\\nThere should be at least 1 ' +\n (maxSelections ? `and at most ${maxSelections} ` : '') +\n 'token' +\n (maxSelections ? 's' : '') +\n ' selected.';\n\n const message = 'Validation requirements:' + tokensMessage + selectionsMessage;\n\n return message;\n};\n"],"file":"utils.js"}
@@ -1,14 +1,16 @@
1
1
  {
2
2
  "name": "@pie-element/select-text-configure",
3
3
  "private": true,
4
- "version": "8.4.10",
4
+ "version": "8.5.2",
5
5
  "description": "",
6
6
  "main": "lib/index.js",
7
7
  "module": "src/index.js",
8
8
  "dependencies": {
9
9
  "@material-ui/core": "^3.9.2",
10
10
  "@pie-framework/pie-configure-events": "^1.3.0",
11
- "@pie-lib/pie-toolbox": "2.20.0",
11
+ "@pie-lib/text-select": "^1.21.1",
12
+ "@pie-lib/editable-html": "^11.10.1",
13
+ "@pie-lib/config-ui": "^11.18.1",
12
14
  "debug": "^3.1.0",
13
15
  "lodash": "^4.17.15",
14
16
  "prop-types": "^15.6.2",
@@ -3,6 +3,46 @@
3
3
  All notable changes to this project will be documented in this file.
4
4
  See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
5
5
 
6
+ ## [6.3.2](https://github.com/pie-framework/pie-elements/compare/@pie-element/select-text-controller@6.3.1...@pie-element/select-text-controller@6.3.2) (2025-07-25)
7
+
8
+
9
+ ### Bug Fixes
10
+
11
+ * refactor PD-5132, update pie-lib/pie-toolbox PD-3797 ([7434408](https://github.com/pie-framework/pie-elements/commit/7434408416a883fd680eec13fe1109711fd7e6b5))
12
+ * update pie-lib/pie-toolbox PD-4885, PD-5131 ([4b9859c](https://github.com/pie-framework/pie-elements/commit/4b9859c919a1a7cc8e29d6168a91cd1f7d1aafd1))
13
+
14
+
15
+
16
+
17
+
18
+ ## [6.3.1](https://github.com/pie-framework/pie-elements/compare/@pie-element/select-text-controller@6.3.0...@pie-element/select-text-controller@6.3.1) (2025-07-22)
19
+
20
+
21
+ ### Bug Fixes
22
+
23
+ * update pie-toolbox PD-4885 ([a6d439e](https://github.com/pie-framework/pie-elements/commit/a6d439e49a0082f3d5e8bf46cc73c69d1d0ae311))
24
+
25
+
26
+
27
+
28
+
29
+ # [6.3.0](https://github.com/pie-framework/pie-elements/compare/@pie-element/select-text-controller@6.2.10...@pie-element/select-text-controller@6.3.0) (2025-07-18)
30
+
31
+
32
+ ### Bug Fixes
33
+
34
+ * update pie-lib/pie-toolbox PD-363 ([10ce402](https://github.com/pie-framework/pie-elements/commit/10ce402bcb1c0c9c24dfc9ecff2e13c4de14a753))
35
+
36
+
37
+ ### Features
38
+
39
+ * update pie-lib/pie toolbox PD-5082, PD-5081, PD-3797, PD-5083, revert PD-363, PD-653 ([9214466](https://github.com/pie-framework/pie-elements/commit/92144667464f18c213c7ab1d769595e43b553dab))
40
+ * update pie-lib/pie-toolbox PD-5082, PD-5081, PD-3797, PD-5083, PD-4885, PD-5097, PD-5100, PD-5131, PD-5080 ([dc67b1c](https://github.com/pie-framework/pie-elements/commit/dc67b1c735b2adb60943e5d145e739ce4e39a428))
41
+
42
+
43
+
44
+
45
+
6
46
  ## [6.2.10](https://github.com/pie-framework/pie-elements/compare/@pie-element/select-text-controller@6.2.9...@pie-element/select-text-controller@6.2.10) (2025-06-27)
7
47
 
8
48
 
@@ -15,9 +15,9 @@ var _debug = _interopRequireDefault(require("debug"));
15
15
 
16
16
  var _isEmpty = _interopRequireDefault(require("lodash/isEmpty"));
17
17
 
18
- var _feedback = require("@pie-lib/pie-toolbox/feedback");
18
+ var _feedback = require("@pie-lib/feedback");
19
19
 
20
- var _controllerUtils = require("@pie-lib/pie-toolbox/controller-utils");
20
+ var _controllerUtils = require("@pie-lib/controller-utils");
21
21
 
22
22
  var _defaults = _interopRequireDefault(require("./defaults"));
23
23
 
@@ -177,7 +177,6 @@ var model = function model(question, session, env) {
177
177
  highlightChoices: normalizedQuestion.highlightChoices,
178
178
  prompt: normalizedQuestion.promptEnabled ? normalizedQuestion.prompt : null,
179
179
  text: normalizedQuestion.text,
180
- tokenizedText: normalizedQuestion.tokenizedText,
181
180
  disabled: env.mode !== 'gather',
182
181
  maxSelections: normalizedQuestion.maxSelections,
183
182
  correctness: correctness,
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/index.js"],"names":["log","equalTokens","token1","token2","start","end","oldStart","oldEnd","normalizeTokens","tokens","selectedTokens","evaluateMode","map","token","isCorrect","correct","isMissing","find","selectedToken","undefined","getCorrectness","selected","filter","t","length","correctSelected","getCorrectSelected","s","findIndex","getPartialScore","question","session","totalCorrect","correctCount","correctTokens","extraSelected","incorrectCount","count","positiveCount","parseFloat","toFixed","outcome","env","Promise","resolve","score","empty","normalizeSession","mode","completed","enabled","partialScoring","createDefaultModel","model","defaults","normalize","normalizedQuestion","correctness","fb","feedbackEnabled","feedback","then","out","highlightChoices","prompt","promptEnabled","text","tokenizedText","disabled","maxSelections","incorrect","language","extraCSSRules","role","rationale","rationaleEnabled","teacherInstructions","teacherInstructionsEnabled","createCorrectResponseSession","id","getInnerText","html","replaceAll","getContent","replace","validate","config","minTokens","maxTokens","errors","nbOfTokens","forEach","field","required","nbOfSelections","reduce","acc","tokensError","selectionsError"],"mappings":";;;;;;;;;;;;;AAAA;;AACA;;AACA;;AACA;;AACA;;;;;;AAEA,IAAMA,GAAG,GAAG,uBAAM,qCAAN,CAAZ;;AAEA,IAAMC,WAAW,GAAG,SAAdA,WAAc;AAAA,MAACC,MAAD,uEAAU,EAAV;AAAA,MAAcC,MAAd,uEAAuB,EAAvB;AAAA,SACjB,CAAAD,MAAM,SAAN,IAAAA,MAAM,WAAN,YAAAA,MAAM,CAAEE,KAAR,OAAkBD,MAAlB,aAAkBA,MAAlB,uBAAkBA,MAAM,CAAEC,KAA1B,KAAmC,CAAAF,MAAM,SAAN,IAAAA,MAAM,WAAN,YAAAA,MAAM,CAAEG,GAAR,OAAgBF,MAAhB,aAAgBA,MAAhB,uBAAgBA,MAAM,CAAEE,GAAxB,CAApC,IACA;AACC,GAAAH,MAAM,SAAN,IAAAA,MAAM,WAAN,YAAAA,MAAM,CAAEE,KAAR,OAAkBD,MAAlB,aAAkBA,MAAlB,uBAAkBA,MAAM,CAAEG,QAA1B,KAAsC,CAAAJ,MAAM,SAAN,IAAAA,MAAM,WAAN,YAAAA,MAAM,CAAEG,GAAR,OAAgBF,MAAhB,aAAgBA,MAAhB,uBAAgBA,MAAM,CAAEI,MAAxB,CAHrB;AAAA,CAApB;;AAKA,IAAMC,eAAe,GAAG,SAAlBA,eAAkB;AAAA,MAACC,MAAD,uEAAU,EAAV;AAAA,MAAcC,cAAd,uEAA+B,EAA/B;AAAA,MAAmCC,YAAnC,uEAAkD,KAAlD;AAAA,SACtB,CAACF,MAAM,IAAI,EAAX,EAAeG,GAAf,CAAmB,UAACC,KAAD,EAAW;AAC5B,QAAMC,SAAS,GAAG,CAAC,CAACD,KAAK,CAACE,OAA1B,CAD4B,CAE5B;;AACA,QAAMC,SAAS,GAAGF,SAAS,IAAI,CAAC,CAACJ,cAAc,IAAI,EAAnB,EAAuBO,IAAvB,CAA4B,UAACC,aAAD;AAAA,aAAmBjB,WAAW,CAACY,KAAD,EAAQK,aAAR,CAA9B;AAAA,KAA5B,CAAhC;AAEA,2CACKL,KADL;AAEEE,MAAAA,OAAO,EAAEJ,YAAY,GAAGG,SAAH,GAAeK,SAFtC;AAGEH,MAAAA,SAAS,EAAEL,YAAY,GAAGK,SAAH,GAAeG;AAHxC;AAKD,GAVD,CADsB;AAAA,CAAxB;;AAaO,IAAMC,cAAc,GAAG,SAAjBA,cAAiB,CAACX,MAAD,EAASY,QAAT,EAAsB;AAClD,MAAMN,OAAO,GAAGN,MAAM,CAACa,MAAP,CAAc,UAACC,CAAD;AAAA,WAAOA,CAAC,CAACR,OAAF,KAAc,IAArB;AAAA,GAAd,CAAhB;;AAEA,MAAIA,OAAO,CAACS,MAAR,KAAmB,CAAvB,EAA0B;AACxB,WAAO,SAAP;AACD;;AAED,MAAMC,eAAe,GAAGC,kBAAkB,CAACjB,MAAD,EAASY,QAAT,CAA1C;;AAEA,MAAII,eAAe,CAACD,MAAhB,KAA2BH,QAAQ,CAACG,MAAxC,EAAgD;AAC9C,QAAIC,eAAe,CAACD,MAAhB,KAA2BT,OAAO,CAACS,MAAvC,EAA+C;AAC7C,aAAO,SAAP;AACD,KAFD,MAEO,IAAIC,eAAe,CAACD,MAAhB,GAAyB,CAA7B,EAAgC;AACrC,aAAO,mBAAP;AACD;AACF;;AAED,MAAIC,eAAe,CAACD,MAAhB,GAAyB,CAA7B,EAAgC;AAC9B,WAAO,mBAAP;AACD;;AAED,SAAO,WAAP;AACD,CAtBM;;;;AAwBP,IAAME,kBAAkB,GAAG,SAArBA,kBAAqB,CAACjB,MAAD,EAASY,QAAT;AAAA,SACzB,CAACA,QAAQ,IAAI,EAAb,EAAiBC,MAAjB,CAAwB,UAACK,CAAD;AAAA,WAAOlB,MAAM,CAACmB,SAAP,CAAiB,UAACf,KAAD;AAAA,aAAWA,KAAK,CAACE,OAAN,IAAiBd,WAAW,CAACY,KAAD,EAAQc,CAAR,CAAvC;AAAA,KAAjB,MAAwE,CAAC,CAAhF;AAAA,GAAxB,CADyB;AAAA,CAA3B;;AAGO,IAAME,eAAe,GAAG,SAAlBA,eAAkB,CAACC,QAAD,EAAWC,OAAX,EAAoBC,YAApB,EAAqC;AAClE,MAAI,CAACD,OAAD,IAAY,yBAAQA,OAAR,CAAhB,EAAkC;AAChC,WAAO,CAAP;AACD;;AAED,MAAME,YAAY,GAAGP,kBAAkB,CAACI,QAAQ,CAACrB,MAAV,EAAkBsB,OAAO,CAACrB,cAA1B,CAAlB,CAA4Dc,MAAjF;AACA,MAAMU,aAAa,GAAG,CAACJ,QAAQ,CAACrB,MAAT,IAAmB,EAApB,EAAwBa,MAAxB,CAA+B,UAACC,CAAD;AAAA,WAAOA,CAAC,CAACR,OAAF,KAAc,IAArB;AAAA,GAA/B,CAAtB;AACA,MAAMoB,aAAa,GAAGJ,OAAO,CAACrB,cAAR,GAAyBqB,OAAO,CAACrB,cAAR,CAAuBc,MAAvB,GAAgCU,aAAa,CAACV,MAAvE,GAAgF,CAAtG;AACA,MAAMY,cAAc,GAAGD,aAAa,GAAGJ,OAAO,CAACrB,cAAR,IAA0BqB,OAAO,CAACrB,cAAR,CAAuBc,MAAvB,GAAgCS,YAA7D,GAA4E,CAAhH;AACA,MAAMI,KAAK,GAAGJ,YAAY,GAAGG,cAA7B;AACA,MAAME,aAAa,GAAGD,KAAK,GAAG,CAAR,GAAY,CAAZ,GAAgBA,KAAtC;AAEA,SAAOL,YAAY,CAACR,MAAb,GAAsBe,UAAU,CAAC,CAACD,aAAa,GAAGN,YAAY,CAACR,MAA9B,EAAsCgB,OAAtC,CAA8C,CAA9C,CAAD,CAAhC,GAAqF,CAA5F;AACD,CAbM;;;;AAeA,IAAMC,OAAO,GAAG,SAAVA,OAAU,CAACX,QAAD,EAAWC,OAAX,EAAoBW,GAApB;AAAA,SACrB,IAAIC,OAAJ,CAAY,UAACC,OAAD,EAAa;AACvB,QAAI,CAACb,OAAD,IAAY,yBAAQA,OAAR,CAAhB,EAAkC;AAChCa,MAAAA,OAAO,CAAC;AAAEC,QAAAA,KAAK,EAAE,CAAT;AAAYC,QAAAA,KAAK,EAAE;AAAnB,OAAD,CAAP;AACD;;AAEDf,IAAAA,OAAO,GAAGgB,gBAAgB,CAAChB,OAAD,CAA1B;;AAEA,QAAIW,GAAG,CAACM,IAAJ,KAAa,UAAjB,EAA6B;AAC3BJ,MAAAA,OAAO,CAAC;AAAEC,QAAAA,KAAK,EAAE1B,SAAT;AAAoB8B,QAAAA,SAAS,EAAE9B;AAA/B,OAAD,CAAP;AACD,KAFD,MAEO;AACL,UAAM+B,OAAO,GAAGC,gCAAeD,OAAf,CAAuBpB,QAAvB,EAAiCY,GAAjC,EAAsC,IAAtC,CAAhB;;AACA,UAAMV,YAAY,GAAGF,QAAQ,CAACrB,MAAT,CAAgBa,MAAhB,CAAuB,UAACC,CAAD;AAAA,eAAOA,CAAC,CAACR,OAAT;AAAA,OAAvB,CAArB;AACA,UAAM8B,KAAK,GAAGhB,eAAe,CAACC,QAAD,EAAWC,OAAX,EAAoBC,YAApB,CAA7B;AACAY,MAAAA,OAAO,CAAC;AACNC,QAAAA,KAAK,EAAEK,OAAO,GAAGL,KAAH,GAAWA,KAAK,KAAK,CAAV,GAAc,CAAd,GAAkB;AADrC,OAAD,CAAP;AAGD;AACF,GAjBD,CADqB;AAAA,CAAhB;;;;AAoBA,SAASO,kBAAT,GAAwC;AAAA,MAAZC,KAAY,uEAAJ,EAAI;AAC7C,SAAO,IAAIV,OAAJ,CAAY,UAACC,OAAD,EAAa;AAC9BA,IAAAA,OAAO,iCAAMU,oBAAN,GAAmBD,KAAnB,EAAP;AACD,GAFM,CAAP;AAGD;;AAEM,IAAMN,gBAAgB,GAAG,SAAnBA,gBAAmB,CAAChB,OAAD;AAAA;AAAgBrB,IAAAA,cAAc,EAAE;AAAhC,KAAuCqB,OAAvC;AAAA,CAAzB;;;;AAEA,IAAMwB,SAAS,GAAG,SAAZA,SAAY,CAACzB,QAAD;AAAA,yCAAoBwB,oBAApB,GAAiCxB,QAAjC;AAAA,CAAlB;;;;AAEA,IAAMuB,KAAK,GAAG,SAARA,KAAQ,CAACvB,QAAD,EAAWC,OAAX,EAAoBW,GAApB,EAA4B;AAC/CX,EAAAA,OAAO,GAAGA,OAAO,IAAI;AAAEb,IAAAA,aAAa,EAAE;AAAjB,GAArB;AACAa,EAAAA,OAAO,CAACrB,cAAR,GAAyBqB,OAAO,CAACrB,cAAR,IAA0B,EAAnD;AACA,MAAM8C,kBAAkB,GAAGD,SAAS,CAACzB,QAAD,CAApC;AAEA,SAAO,IAAIa,OAAJ,CAAY,UAACC,OAAD,EAAa;AAC9B5C,IAAAA,GAAG,CAAC,SAAD,EAAY,sBAAZ,EAAoCwD,kBAApC,CAAH;AACAxD,IAAAA,GAAG,CAAC,SAAD,EAAY,WAAZ,EAAyB+B,OAAzB,CAAH;AAEA,QAAMtB,MAAM,GAAGD,eAAe,CAACgD,kBAAkB,CAAC/C,MAApB,EAA4BsB,OAAO,CAACrB,cAApC,EAAoDgC,GAAG,CAACM,IAAJ,KAAa,UAAjE,CAA9B;AACAhD,IAAAA,GAAG,CAAC,iBAAD,EAAoBS,MAApB,CAAH;AAEA,QAAMgD,WAAW,GACff,GAAG,CAACM,IAAJ,KAAa,UAAb,GAA0B5B,cAAc,CAACoC,kBAAkB,CAAC/C,MAApB,EAA4BsB,OAAO,CAACrB,cAApC,CAAxC,GAA8FS,SADhG;AAGA,QAAMuC,EAAE,GACNhB,GAAG,CAACM,IAAJ,KAAa,UAAb,IAA2BQ,kBAAkB,CAACG,eAA9C,GACI,yCAA0BF,WAA1B,EAAuCD,kBAAkB,CAACI,QAA1D,CADJ,GAEIjB,OAAO,CAACC,OAAR,CAAgBzB,SAAhB,CAHN;AAKAuC,IAAAA,EAAE,CAACG,IAAH,CAAQ,UAACD,QAAD,EAAc;AACpB,UAAME,GAAG,GAAG;AACVrD,QAAAA,MAAM,EAANA,MADU;AAEVsD,QAAAA,gBAAgB,EAAEP,kBAAkB,CAACO,gBAF3B;AAGVC,QAAAA,MAAM,EAAER,kBAAkB,CAACS,aAAnB,GAAmCT,kBAAkB,CAACQ,MAAtD,GAA+D,IAH7D;AAIVE,QAAAA,IAAI,EAAEV,kBAAkB,CAACU,IAJf;AAKVC,QAAAA,aAAa,EAAEX,kBAAkB,CAACW,aALxB;AAMVC,QAAAA,QAAQ,EAAE1B,GAAG,CAACM,IAAJ,KAAa,QANb;AAOVqB,QAAAA,aAAa,EAAEb,kBAAkB,CAACa,aAPxB;AAQVZ,QAAAA,WAAW,EAAXA,WARU;AASVf,QAAAA,GAAG,EAAHA,GATU;AAUVkB,QAAAA,QAAQ,EAARA,QAVU;AAWVU,QAAAA,SAAS,EAAE5B,GAAG,CAACM,IAAJ,KAAa,UAAb,GAA0BS,WAAW,KAAK,SAA1C,GAAsDtC,SAXvD;AAYVoD,QAAAA,QAAQ,EAAEf,kBAAkB,CAACe,QAZnB;AAaVC,QAAAA,aAAa,EAAEhB,kBAAkB,CAACgB;AAbxB,OAAZ;;AAgBA,UAAI9B,GAAG,CAAC+B,IAAJ,KAAa,YAAb,KAA8B/B,GAAG,CAACM,IAAJ,KAAa,MAAb,IAAuBN,GAAG,CAACM,IAAJ,KAAa,UAAlE,CAAJ,EAAmF;AACjFc,QAAAA,GAAG,CAACY,SAAJ,GAAgBlB,kBAAkB,CAACmB,gBAAnB,GAAsCnB,kBAAkB,CAACkB,SAAzD,GAAqE,IAArF;AACAZ,QAAAA,GAAG,CAACc,mBAAJ,GAA0BpB,kBAAkB,CAACqB,0BAAnB,GACtBrB,kBAAkB,CAACoB,mBADG,GAEtB,IAFJ;AAGD,OALD,MAKO;AACLd,QAAAA,GAAG,CAACY,SAAJ,GAAgB,IAAhB;AACAZ,QAAAA,GAAG,CAACc,mBAAJ,GAA0B,IAA1B;AACD;;AAEDhC,MAAAA,OAAO,CAACkB,GAAD,CAAP;AACD,KA5BD;AA6BD,GA5CM,CAAP;AA6CD,CAlDM;;;;AAoDA,IAAMgB,4BAA4B,GAAG,SAA/BA,4BAA+B,CAAChD,QAAD,EAAWY,GAAX,EAAmB;AAC7D,SAAO,IAAIC,OAAJ,CAAY,UAACC,OAAD,EAAa;AAC9B,QAAIF,GAAG,CAACM,IAAJ,KAAa,UAAb,IAA2BN,GAAG,CAAC+B,IAAJ,KAAa,YAA5C,EAA0D;AACxD,UAAQhE,MAAR,GAAmBqB,QAAnB,CAAQrB,MAAR;AACA,UAAMC,cAAc,GAAGD,MAAM,CAACa,MAAP,CAAc,UAACC,CAAD;AAAA,eAAOA,CAAC,CAACR,OAAT;AAAA,OAAd,CAAvB;AAEA6B,MAAAA,OAAO,CAAC;AACNmC,QAAAA,EAAE,EAAE,GADE;AAENrE,QAAAA,cAAc,EAAdA;AAFM,OAAD,CAAP;AAID,KARD,MAQO;AACLkC,MAAAA,OAAO,CAAC,IAAD,CAAP;AACD;AACF,GAZM,CAAP;AAaD,CAdM,C,CAgBP;;;;;AACA,IAAMoC,YAAY,GAAG,SAAfA,YAAe,CAACC,IAAD;AAAA,SAAU,CAACA,IAAI,IAAI,EAAT,EAAaC,UAAb,CAAwB,UAAxB,EAAoC,EAApC,CAAV;AAAA,CAArB,C,CAEA;;;AACA,IAAMC,UAAU,GAAG,SAAbA,UAAa,CAACF,IAAD;AAAA,SAAU,CAACA,IAAI,IAAI,EAAT,EAAaG,OAAb,CAAqB,oCAArB,EAA2D,EAA3D,CAAV;AAAA,CAAnB;;AAEO,IAAMC,QAAQ,GAAG,SAAXA,QAAW,GAA6B;AAAA,MAA5BhC,KAA4B,uEAApB,EAAoB;AAAA,MAAhBiC,MAAgB,uEAAP,EAAO;AACnD,MAAQ7E,MAAR,GAAmB4C,KAAnB,CAAQ5C,MAAR;AACA,0BAAoD6E,MAApD,CAAQC,SAAR;AAAA,MAAQA,SAAR,kCAAoB,CAApB;AAAA,MAAuBC,SAAvB,GAAoDF,MAApD,CAAuBE,SAAvB;AAAA,MAAkCnB,aAAlC,GAAoDiB,MAApD,CAAkCjB,aAAlC;AACA,MAAMoB,MAAM,GAAG,EAAf;AACA,MAAMC,UAAU,GAAG,CAACjF,MAAM,IAAI,EAAX,EAAee,MAAlC;AAEA,GAAC,qBAAD,EAAwB,QAAxB,EAAkC,WAAlC,EAA+CmE,OAA/C,CAAuD,UAACC,KAAD,EAAW;AAAA;;AAChE,QAAI,iBAAAN,MAAM,CAACM,KAAD,CAAN,wDAAeC,QAAf,IAA2B,CAACV,UAAU,CAAC9B,KAAK,CAACuC,KAAD,CAAN,CAA1C,EAA0D;AACxDH,MAAAA,MAAM,CAACG,KAAD,CAAN,GAAgB,yBAAhB;AACD;AACF,GAJD;AAMA,MAAME,cAAc,GAAG,CAACrF,MAAM,IAAI,EAAX,EAAesF,MAAf,CAAsB,UAACC,GAAD,EAAMnF,KAAN;AAAA,WAAiBA,KAAK,CAACE,OAAN,GAAgBiF,GAAG,GAAG,CAAtB,GAA0BA,GAA3C;AAAA,GAAtB,EAAuE,CAAvE,CAAvB;;AAEA,MAAIN,UAAU,GAAGH,SAAjB,EAA4B;AAC1BE,IAAAA,MAAM,CAACQ,WAAP,sCAAiDV,SAAjD;AACD,GAFD,MAEO,IAAIG,UAAU,GAAGF,SAAjB,EAA4B;AACjCC,IAAAA,MAAM,CAACQ,WAAP,0BAAqCT,SAArC;AACD;;AAED,MAAIM,cAAc,GAAG,CAArB,EAAwB;AACtBL,IAAAA,MAAM,CAACS,eAAP,GAAyB,4CAAzB;AACD,GAFD,MAEO,IAAIJ,cAAc,GAAGzB,aAArB,EAAoC;AACzCoB,IAAAA,MAAM,CAACS,eAAP,0BAAyC7B,aAAzC;AACD;;AAED,SAAOoB,MAAP;AACD,CA3BM","sourcesContent":["import debug from 'debug';\nimport isEmpty from 'lodash/isEmpty';\nimport { getFeedbackForCorrectness } from '@pie-lib/pie-toolbox/feedback';\nimport { partialScoring } from '@pie-lib/pie-toolbox/controller-utils';\nimport defaults from './defaults';\n\nconst log = debug('@pie-element:select-text:controller');\n\nconst equalTokens = (token1 = {}, token2 = {}) =>\n (token1?.start === token2?.start && token1?.end === token2?.end) ||\n // this case is used for the cases when the token's start & end were recalculated\n (token1?.start === token2?.oldStart && token1?.end === token2?.oldEnd);\n\nconst normalizeTokens = (tokens = [], selectedTokens = [], evaluateMode = false) =>\n (tokens || []).map((token) => {\n const isCorrect = !!token.correct;\n // search if correct token is missing from session\n const isMissing = isCorrect && !(selectedTokens || []).find((selectedToken) => equalTokens(token, selectedToken));\n\n return {\n ...token,\n correct: evaluateMode ? isCorrect : undefined,\n isMissing: evaluateMode ? isMissing : undefined,\n };\n });\n\nexport const getCorrectness = (tokens, selected) => {\n const correct = tokens.filter((t) => t.correct === true);\n\n if (correct.length === 0) {\n return 'unknown';\n }\n\n const correctSelected = getCorrectSelected(tokens, selected);\n\n if (correctSelected.length === selected.length) {\n if (correctSelected.length === correct.length) {\n return 'correct';\n } else if (correctSelected.length > 0) {\n return 'partially-correct';\n }\n }\n\n if (correctSelected.length > 0) {\n return 'partially-correct';\n }\n\n return 'incorrect';\n};\n\nconst getCorrectSelected = (tokens, selected) =>\n (selected || []).filter((s) => tokens.findIndex((token) => token.correct && equalTokens(token, s)) !== -1);\n\nexport const getPartialScore = (question, session, totalCorrect) => {\n if (!session || isEmpty(session)) {\n return 0;\n }\n\n const correctCount = getCorrectSelected(question.tokens, session.selectedTokens).length;\n const correctTokens = (question.tokens || []).filter((t) => t.correct === true);\n const extraSelected = session.selectedTokens ? session.selectedTokens.length > correctTokens.length : 0;\n const incorrectCount = extraSelected ? session.selectedTokens && session.selectedTokens.length - correctCount : 0;\n const count = correctCount - incorrectCount;\n const positiveCount = count < 0 ? 0 : count;\n\n return totalCorrect.length ? parseFloat((positiveCount / totalCorrect.length).toFixed(2)) : 0;\n};\n\nexport const outcome = (question, session, env) =>\n new Promise((resolve) => {\n if (!session || isEmpty(session)) {\n resolve({ score: 0, empty: true });\n }\n\n session = normalizeSession(session);\n\n if (env.mode !== 'evaluate') {\n resolve({ score: undefined, completed: undefined });\n } else {\n const enabled = partialScoring.enabled(question, env, true);\n const totalCorrect = question.tokens.filter((t) => t.correct);\n const score = getPartialScore(question, session, totalCorrect);\n resolve({\n score: enabled ? score : score === 1 ? 1 : 0,\n });\n }\n });\n\nexport function createDefaultModel(model = {}) {\n return new Promise((resolve) => {\n resolve({ ...defaults, ...model });\n });\n}\n\nexport const normalizeSession = (session) => ({ selectedTokens: [], ...session });\n\nexport const normalize = (question) => ({ ...defaults, ...question });\n\nexport const model = (question, session, env) => {\n session = session || { selectedToken: [] };\n session.selectedTokens = session.selectedTokens || [];\n const normalizedQuestion = normalize(question);\n\n return new Promise((resolve) => {\n log('[model]', 'normalizedQuestion: ', normalizedQuestion);\n log('[model]', 'session: ', session);\n\n const tokens = normalizeTokens(normalizedQuestion.tokens, session.selectedTokens, env.mode === 'evaluate');\n log('[model] tokens:', tokens);\n\n const correctness =\n env.mode === 'evaluate' ? getCorrectness(normalizedQuestion.tokens, session.selectedTokens) : undefined;\n\n const fb =\n env.mode === 'evaluate' && normalizedQuestion.feedbackEnabled\n ? getFeedbackForCorrectness(correctness, normalizedQuestion.feedback)\n : Promise.resolve(undefined);\n\n fb.then((feedback) => {\n const out = {\n tokens,\n highlightChoices: normalizedQuestion.highlightChoices,\n prompt: normalizedQuestion.promptEnabled ? normalizedQuestion.prompt : null,\n text: normalizedQuestion.text,\n tokenizedText: normalizedQuestion.tokenizedText,\n disabled: env.mode !== 'gather',\n maxSelections: normalizedQuestion.maxSelections,\n correctness,\n env,\n feedback,\n incorrect: env.mode === 'evaluate' ? correctness !== 'correct' : undefined,\n language: normalizedQuestion.language,\n extraCSSRules: normalizedQuestion.extraCSSRules,\n };\n\n if (env.role === 'instructor' && (env.mode === 'view' || env.mode === 'evaluate')) {\n out.rationale = normalizedQuestion.rationaleEnabled ? normalizedQuestion.rationale : null;\n out.teacherInstructions = normalizedQuestion.teacherInstructionsEnabled\n ? normalizedQuestion.teacherInstructions\n : null;\n } else {\n out.rationale = null;\n out.teacherInstructions = null;\n }\n\n resolve(out);\n });\n });\n};\n\nexport const createCorrectResponseSession = (question, env) => {\n return new Promise((resolve) => {\n if (env.mode !== 'evaluate' && env.role === 'instructor') {\n const { tokens } = question;\n const selectedTokens = tokens.filter((t) => t.correct);\n\n resolve({\n id: '1',\n selectedTokens,\n });\n } else {\n resolve(null);\n }\n });\n};\n\n// remove all html tags\nconst getInnerText = (html) => (html || '').replaceAll(/<[^>]*>/g, '');\n\n// remove all html tags except img, iframe and source tag for audio\nconst getContent = (html) => (html || '').replace(/(<(?!img|iframe|source)([^>]+)>)/gi, '');\n\nexport const validate = (model = {}, config = {}) => {\n const { tokens } = model;\n const { minTokens = 2, maxTokens, maxSelections } = config;\n const errors = {};\n const nbOfTokens = (tokens || []).length;\n\n ['teacherInstructions', 'prompt', 'rationale'].forEach((field) => {\n if (config[field]?.required && !getContent(model[field])) {\n errors[field] = 'This field is required.';\n }\n });\n\n const nbOfSelections = (tokens || []).reduce((acc, token) => (token.correct ? acc + 1 : acc), 0);\n\n if (nbOfTokens < minTokens) {\n errors.tokensError = `There should be at least ${minTokens} tokens defined.`;\n } else if (nbOfTokens > maxTokens) {\n errors.tokensError = `No more than ${maxTokens} tokens should be defined.`;\n }\n\n if (nbOfSelections < 1) {\n errors.selectionsError = 'There should be at least 1 token selected.';\n } else if (nbOfSelections > maxSelections) {\n errors.selectionsError = `No more than ${maxSelections} tokens should be selected.`;\n }\n\n return errors;\n};\n"],"file":"index.js"}
1
+ {"version":3,"sources":["../src/index.js"],"names":["log","equalTokens","token1","token2","start","end","oldStart","oldEnd","normalizeTokens","tokens","selectedTokens","evaluateMode","map","token","isCorrect","correct","isMissing","find","selectedToken","undefined","getCorrectness","selected","filter","t","length","correctSelected","getCorrectSelected","s","findIndex","getPartialScore","question","session","totalCorrect","correctCount","correctTokens","extraSelected","incorrectCount","count","positiveCount","parseFloat","toFixed","outcome","env","Promise","resolve","score","empty","normalizeSession","mode","completed","enabled","partialScoring","createDefaultModel","model","defaults","normalize","normalizedQuestion","correctness","fb","feedbackEnabled","feedback","then","out","highlightChoices","prompt","promptEnabled","text","disabled","maxSelections","incorrect","language","extraCSSRules","role","rationale","rationaleEnabled","teacherInstructions","teacherInstructionsEnabled","createCorrectResponseSession","id","getInnerText","html","replaceAll","getContent","replace","validate","config","minTokens","maxTokens","errors","nbOfTokens","forEach","field","required","nbOfSelections","reduce","acc","tokensError","selectionsError"],"mappings":"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","sourcesContent":["import debug from 'debug';\nimport isEmpty from 'lodash/isEmpty';\nimport { getFeedbackForCorrectness } from '@pie-lib/feedback';\nimport { partialScoring } from '@pie-lib/controller-utils';\nimport defaults from './defaults';\n\nconst log = debug('@pie-element:select-text:controller');\n\nconst equalTokens = (token1 = {}, token2 = {}) =>\n (token1?.start === token2?.start && token1?.end === token2?.end) ||\n // this case is used for the cases when the token's start & end were recalculated\n (token1?.start === token2?.oldStart && token1?.end === token2?.oldEnd);\n\nconst normalizeTokens = (tokens = [], selectedTokens = [], evaluateMode = false) =>\n (tokens || []).map((token) => {\n const isCorrect = !!token.correct;\n // search if correct token is missing from session\n const isMissing = isCorrect && !(selectedTokens || []).find((selectedToken) => equalTokens(token, selectedToken));\n\n return {\n ...token,\n correct: evaluateMode ? isCorrect : undefined,\n isMissing: evaluateMode ? isMissing : undefined,\n };\n });\n\nexport const getCorrectness = (tokens, selected) => {\n const correct = tokens.filter((t) => t.correct === true);\n\n if (correct.length === 0) {\n return 'unknown';\n }\n\n const correctSelected = getCorrectSelected(tokens, selected);\n\n if (correctSelected.length === selected.length) {\n if (correctSelected.length === correct.length) {\n return 'correct';\n } else if (correctSelected.length > 0) {\n return 'partially-correct';\n }\n }\n\n if (correctSelected.length > 0) {\n return 'partially-correct';\n }\n\n return 'incorrect';\n};\n\nconst getCorrectSelected = (tokens, selected) =>\n (selected || []).filter((s) => tokens.findIndex((token) => token.correct && equalTokens(token, s)) !== -1);\n\nexport const getPartialScore = (question, session, totalCorrect) => {\n if (!session || isEmpty(session)) {\n return 0;\n }\n\n const correctCount = getCorrectSelected(question.tokens, session.selectedTokens).length;\n const correctTokens = (question.tokens || []).filter((t) => t.correct === true);\n const extraSelected = session.selectedTokens ? session.selectedTokens.length > correctTokens.length : 0;\n const incorrectCount = extraSelected ? session.selectedTokens && session.selectedTokens.length - correctCount : 0;\n const count = correctCount - incorrectCount;\n const positiveCount = count < 0 ? 0 : count;\n\n return totalCorrect.length ? parseFloat((positiveCount / totalCorrect.length).toFixed(2)) : 0;\n};\n\nexport const outcome = (question, session, env) =>\n new Promise((resolve) => {\n if (!session || isEmpty(session)) {\n resolve({ score: 0, empty: true });\n }\n\n session = normalizeSession(session);\n\n if (env.mode !== 'evaluate') {\n resolve({ score: undefined, completed: undefined });\n } else {\n const enabled = partialScoring.enabled(question, env, true);\n const totalCorrect = question.tokens.filter((t) => t.correct);\n const score = getPartialScore(question, session, totalCorrect);\n resolve({\n score: enabled ? score : score === 1 ? 1 : 0,\n });\n }\n });\n\nexport function createDefaultModel(model = {}) {\n return new Promise((resolve) => {\n resolve({ ...defaults, ...model });\n });\n}\n\nexport const normalizeSession = (session) => ({ selectedTokens: [], ...session });\n\nexport const normalize = (question) => ({ ...defaults, ...question });\n\nexport const model = (question, session, env) => {\n session = session || { selectedToken: [] };\n session.selectedTokens = session.selectedTokens || [];\n const normalizedQuestion = normalize(question);\n\n return new Promise((resolve) => {\n log('[model]', 'normalizedQuestion: ', normalizedQuestion);\n log('[model]', 'session: ', session);\n\n const tokens = normalizeTokens(normalizedQuestion.tokens, session.selectedTokens, env.mode === 'evaluate');\n log('[model] tokens:', tokens);\n\n const correctness =\n env.mode === 'evaluate' ? getCorrectness(normalizedQuestion.tokens, session.selectedTokens) : undefined;\n\n const fb =\n env.mode === 'evaluate' && normalizedQuestion.feedbackEnabled\n ? getFeedbackForCorrectness(correctness, normalizedQuestion.feedback)\n : Promise.resolve(undefined);\n\n fb.then((feedback) => {\n const out = {\n tokens,\n highlightChoices: normalizedQuestion.highlightChoices,\n prompt: normalizedQuestion.promptEnabled ? normalizedQuestion.prompt : null,\n text: normalizedQuestion.text,\n disabled: env.mode !== 'gather',\n maxSelections: normalizedQuestion.maxSelections,\n correctness,\n env,\n feedback,\n incorrect: env.mode === 'evaluate' ? correctness !== 'correct' : undefined,\n language: normalizedQuestion.language,\n extraCSSRules: normalizedQuestion.extraCSSRules,\n };\n\n if (env.role === 'instructor' && (env.mode === 'view' || env.mode === 'evaluate')) {\n out.rationale = normalizedQuestion.rationaleEnabled ? normalizedQuestion.rationale : null;\n out.teacherInstructions = normalizedQuestion.teacherInstructionsEnabled\n ? normalizedQuestion.teacherInstructions\n : null;\n } else {\n out.rationale = null;\n out.teacherInstructions = null;\n }\n\n resolve(out);\n });\n });\n};\n\nexport const createCorrectResponseSession = (question, env) => {\n return new Promise((resolve) => {\n if (env.mode !== 'evaluate' && env.role === 'instructor') {\n const { tokens } = question;\n const selectedTokens = tokens.filter((t) => t.correct);\n\n resolve({\n id: '1',\n selectedTokens,\n });\n } else {\n resolve(null);\n }\n });\n};\n\n// remove all html tags\nconst getInnerText = (html) => (html || '').replaceAll(/<[^>]*>/g, '');\n\n// remove all html tags except img, iframe and source tag for audio\nconst getContent = (html) => (html || '').replace(/(<(?!img|iframe|source)([^>]+)>)/gi, '');\n\nexport const validate = (model = {}, config = {}) => {\n const { tokens } = model;\n const { minTokens = 2, maxTokens, maxSelections } = config;\n const errors = {};\n const nbOfTokens = (tokens || []).length;\n\n ['teacherInstructions', 'prompt', 'rationale'].forEach((field) => {\n if (config[field]?.required && !getContent(model[field])) {\n errors[field] = 'This field is required.';\n }\n });\n\n const nbOfSelections = (tokens || []).reduce((acc, token) => (token.correct ? acc + 1 : acc), 0);\n\n if (nbOfTokens < minTokens) {\n errors.tokensError = `There should be at least ${minTokens} tokens defined.`;\n } else if (nbOfTokens > maxTokens) {\n errors.tokensError = `No more than ${maxTokens} tokens should be defined.`;\n }\n\n if (nbOfSelections < 1) {\n errors.selectionsError = 'There should be at least 1 token selected.';\n } else if (nbOfSelections > maxSelections) {\n errors.selectionsError = `No more than ${maxSelections} tokens should be selected.`;\n }\n\n return errors;\n};\n"],"file":"index.js"}
@@ -1,12 +1,13 @@
1
1
  {
2
2
  "name": "@pie-element/select-text-controller",
3
3
  "private": true,
4
- "version": "6.2.10",
4
+ "version": "6.3.2",
5
5
  "description": "",
6
6
  "main": "lib/index.js",
7
7
  "module": "src/index.js",
8
8
  "dependencies": {
9
- "@pie-lib/pie-toolbox": "2.20.0",
9
+ "@pie-lib/feedback": "^0.13.1",
10
+ "@pie-lib/controller-utils": "^0.11.1",
10
11
  "debug": "^3.1.0",
11
12
  "lodash": "^4.17.15"
12
13
  },