@pie-element/select-text 6.5.20 → 6.5.23

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.
package/CHANGELOG.md CHANGED
@@ -3,6 +3,30 @@
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.5.23](https://github.com/pie-framework/pie-elements/compare/@pie-element/select-text@6.5.22...@pie-element/select-text@6.5.23) (2022-03-08)
7
+
8
+ **Note:** Version bump only for package @pie-element/select-text
9
+
10
+
11
+
12
+
13
+
14
+ ## [6.5.22](https://github.com/pie-framework/pie-elements/compare/@pie-element/select-text@6.5.21...@pie-element/select-text@6.5.22) (2022-02-21)
15
+
16
+ **Note:** Version bump only for package @pie-element/select-text
17
+
18
+
19
+
20
+
21
+
22
+ ## [6.5.21](https://github.com/pie-framework/pie-elements/compare/@pie-element/select-text@6.5.20...@pie-element/select-text@6.5.21) (2022-02-17)
23
+
24
+ **Note:** Version bump only for package @pie-element/select-text
25
+
26
+
27
+
28
+
29
+
6
30
  ## [6.5.20](https://github.com/pie-framework/pie-elements/compare/@pie-element/select-text@6.5.19...@pie-element/select-text@6.5.20) (2022-02-04)
7
31
 
8
32
  **Note:** Version bump only for package @pie-element/select-text
@@ -3,6 +3,30 @@
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
+ ## [5.2.19](https://github.com/pie-framework/pie-elements/compare/@pie-element/select-text-configure@5.2.18...@pie-element/select-text-configure@5.2.19) (2022-03-08)
7
+
8
+ **Note:** Version bump only for package @pie-element/select-text-configure
9
+
10
+
11
+
12
+
13
+
14
+ ## [5.2.18](https://github.com/pie-framework/pie-elements/compare/@pie-element/select-text-configure@5.2.17...@pie-element/select-text-configure@5.2.18) (2022-02-21)
15
+
16
+ **Note:** Version bump only for package @pie-element/select-text-configure
17
+
18
+
19
+
20
+
21
+
22
+ ## [5.2.17](https://github.com/pie-framework/pie-elements/compare/@pie-element/select-text-configure@5.2.16...@pie-element/select-text-configure@5.2.17) (2022-02-17)
23
+
24
+ **Note:** Version bump only for package @pie-element/select-text-configure
25
+
26
+
27
+
28
+
29
+
6
30
  ## [5.2.16](https://github.com/pie-framework/pie-elements/compare/@pie-element/select-text-configure@5.2.15...@pie-element/select-text-configure@5.2.16) (2022-02-04)
7
31
 
8
32
  **Note:** Version bump only for package @pie-element/select-text-configure
@@ -90,7 +90,10 @@ var _default = function _default(model) {
90
90
  return [].concat((0, _toConsumableArray2["default"])(acc), [_objectSpread(_objectSpread({}, token), {}, {
91
91
  text: tokenText,
92
92
  start: newStart,
93
- end: newEnd
93
+ end: newEnd,
94
+ // needed for getScore when tokens position is recalculated
95
+ oldStart: token.start,
96
+ oldEnd: token.end
94
97
  })]);
95
98
  }, []);
96
99
  return _objectSpread(_objectSpread({}, model), {}, {
@@ -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","model","modelText","newTokens","tokens","reduce","acc","token","tokenText","slice","start","getStartIndex","newStartIndex","indexOf","lastToken","newStart","newEnd"],"mappings":"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","sourcesContent":["import React from 'react';\n\nvar 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 default (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 }\n ];\n }, []);\n\n\n return {\n ...model,\n tokens: newTokens,\n text: modelText\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","model","modelText","newTokens","tokens","reduce","acc","token","tokenText","slice","start","getStartIndex","newStartIndex","indexOf","lastToken","newStart","newEnd","oldStart","oldEnd"],"mappings":"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","sourcesContent":["import React from 'react';\n\nvar 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 default (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"],"file":"utils.js"}
@@ -1,17 +1,17 @@
1
1
  {
2
2
  "name": "@pie-element/select-text-configure",
3
3
  "private": true,
4
- "version": "5.2.16",
4
+ "version": "5.2.19",
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.2.0",
11
- "@pie-lib/config-ui": "^10.10.18",
12
- "@pie-lib/editable-html": "^7.17.18",
13
- "@pie-lib/scoring-config": "^3.5.147",
14
- "@pie-lib/text-select": "^1.8.12",
11
+ "@pie-lib/config-ui": "^10.10.22",
12
+ "@pie-lib/editable-html": "^7.19.1",
13
+ "@pie-lib/scoring-config": "^3.5.151",
14
+ "@pie-lib/text-select": "^1.8.13",
15
15
  "debug": "^3.1.0",
16
16
  "lodash": "^4.17.15",
17
17
  "prop-types": "^15.6.2",
@@ -3,6 +3,22 @@
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
+ ## [4.1.30](https://github.com/pie-framework/pie-elements/compare/@pie-element/select-text-controller@4.1.29...@pie-element/select-text-controller@4.1.30) (2022-02-21)
7
+
8
+ **Note:** Version bump only for package @pie-element/select-text-controller
9
+
10
+
11
+
12
+
13
+
14
+ ## [4.1.29](https://github.com/pie-framework/pie-elements/compare/@pie-element/select-text-controller@4.1.28...@pie-element/select-text-controller@4.1.29) (2022-02-17)
15
+
16
+ **Note:** Version bump only for package @pie-element/select-text-controller
17
+
18
+
19
+
20
+
21
+
6
22
  ## [4.1.28](https://github.com/pie-framework/pie-elements/compare/@pie-element/select-text-controller@4.1.27...@pie-element/select-text-controller@4.1.28) (2022-02-04)
7
23
 
8
24
  **Note:** Version bump only for package @pie-element/select-text-controller
@@ -68,7 +68,7 @@ exports.getCorrectness = getCorrectness;
68
68
  var getCorrectSelected = function getCorrectSelected(tokens, selected) {
69
69
  return (selected || []).filter(function (s) {
70
70
  var index = tokens.findIndex(function (c) {
71
- return c.correct && c.start === s.start && c.end === s.end;
71
+ return c.correct && (c.start === s.start && c.end === s.end || c.start === s.oldStart && c.end === s.oldEnd);
72
72
  });
73
73
  return index !== -1;
74
74
  });
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/index.js"],"names":["log","buildTokens","tokens","evaluateMode","map","t","Object","assign","correct","undefined","getCorrectness","selected","filter","length","correctSelected","getCorrectSelected","s","index","findIndex","c","start","end","getCorrectCount","getPartialScore","question","session","totalCorrect","correctCount","selectedTokens","correctTokens","extraSelected","incorrectCount","count","positiveCount","parseFloat","toFixed","outcome","env","Promise","resolve","score","empty","normalizeSession","mode","completed","enabled","partialScoring","createDefaultModel","model","defaults","normalize","feedbackEnabled","rationaleEnabled","promptEnabled","teacherInstructionsEnabled","studentInstructionsEnabled","selectedToken","normalizedQuestion","correctness","fb","feedback","then","out","highlightChoices","prompt","text","disabled","maxSelections","incorrect","role","rationale","teacherInstructions","createCorrectResponseSession","id"],"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 buildTokens = (tokens, evaluateMode) => {\n tokens = tokens || [];\n\n return tokens.map((t) =>\n Object.assign(\n {},\n t,\n evaluateMode ? { correct: !!t.correct } : { correct: undefined }\n )\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 return (selected || []).filter((s) => {\n const index = tokens.findIndex((c) => {\n return c.correct && c.start === s.start && c.end === s.end;\n });\n return index !== -1;\n });\n};\n\nconst getCorrectCount = (tokens, selected) =>\n getCorrectSelected(tokens, selected).length;\n\nexport const getPartialScore = (question, session, totalCorrect) => {\n if (!session || isEmpty(session)) {\n return 0;\n }\n\n const correctCount = getCorrectCount(question.tokens, session.selectedTokens);\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\n ? parseFloat((positiveCount / totalCorrect.length).toFixed(2))\n : 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({\n ...defaults,\n ...model,\n });\n });\n}\n\nexport const normalizeSession = (s) => ({\n selectedTokens: [],\n ...s,\n});\n\nexport const normalize = (question) => ({\n feedbackEnabled: true,\n rationaleEnabled: true,\n promptEnabled: true,\n teacherInstructionsEnabled: true,\n studentInstructionsEnabled: true,\n ...question,\n});\n\nexport const model = (question, session, env) => {\n session = session || { selectedToken: [] };\n session.selectedTokens = session.selectedTokens || [];\n const normalizedQuestion = normalize(question);\n return new Promise((resolve) => {\n log('[model]', 'normalizedQuestion: ', normalizedQuestion);\n log('[model]', 'session: ', session);\n const tokens = buildTokens(\n normalizedQuestion.tokens,\n env.mode === 'evaluate'\n );\n log('tokens:', tokens);\n const correctness =\n env.mode === 'evaluate'\n ? getCorrectness(normalizedQuestion.tokens, session.selectedTokens)\n : 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\n ? normalizedQuestion.prompt\n : null,\n text: normalizedQuestion.text,\n disabled: env.mode !== 'gather',\n maxSelections: normalizedQuestion.maxSelections,\n correctness,\n feedback,\n incorrect:\n env.mode === 'evaluate' ? correctness !== 'correct' : undefined,\n };\n\n if (\n env.role === 'instructor' &&\n (env.mode === 'view' || env.mode === 'evaluate')\n ) {\n out.rationale = normalizedQuestion.rationaleEnabled\n ? normalizedQuestion.rationale\n : 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"],"file":"index.js"}
1
+ {"version":3,"sources":["../src/index.js"],"names":["log","buildTokens","tokens","evaluateMode","map","t","Object","assign","correct","undefined","getCorrectness","selected","filter","length","correctSelected","getCorrectSelected","s","index","findIndex","c","start","end","oldStart","oldEnd","getCorrectCount","getPartialScore","question","session","totalCorrect","correctCount","selectedTokens","correctTokens","extraSelected","incorrectCount","count","positiveCount","parseFloat","toFixed","outcome","env","Promise","resolve","score","empty","normalizeSession","mode","completed","enabled","partialScoring","createDefaultModel","model","defaults","normalize","feedbackEnabled","rationaleEnabled","promptEnabled","teacherInstructionsEnabled","studentInstructionsEnabled","selectedToken","normalizedQuestion","correctness","fb","feedback","then","out","highlightChoices","prompt","text","disabled","maxSelections","incorrect","role","rationale","teacherInstructions","createCorrectResponseSession","id"],"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 buildTokens = (tokens, evaluateMode) => {\n tokens = tokens || [];\n\n return tokens.map((t) =>\n Object.assign(\n {},\n t,\n evaluateMode ? { correct: !!t.correct } : { correct: undefined }\n )\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 return (selected || []).filter((s) => {\n const index = tokens.findIndex((c) => {\n return c.correct &&\n (\n (c.start === s.start && c.end === s.end) ||\n // this case is used for the cases when the token's start & end were recalculated\n (c.start === s.oldStart && c.end === s.oldEnd)\n );\n });\n return index !== -1;\n });\n};\n\nconst getCorrectCount = (tokens, selected) =>\n getCorrectSelected(tokens, selected).length;\n\nexport const getPartialScore = (question, session, totalCorrect) => {\n if (!session || isEmpty(session)) {\n return 0;\n }\n\n const correctCount = getCorrectCount(question.tokens, session.selectedTokens);\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\n ? parseFloat((positiveCount / totalCorrect.length).toFixed(2))\n : 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({\n ...defaults,\n ...model,\n });\n });\n}\n\nexport const normalizeSession = (s) => ({\n selectedTokens: [],\n ...s,\n});\n\nexport const normalize = (question) => ({\n feedbackEnabled: true,\n rationaleEnabled: true,\n promptEnabled: true,\n teacherInstructionsEnabled: true,\n studentInstructionsEnabled: true,\n ...question,\n});\n\nexport const model = (question, session, env) => {\n session = session || { selectedToken: [] };\n session.selectedTokens = session.selectedTokens || [];\n const normalizedQuestion = normalize(question);\n return new Promise((resolve) => {\n log('[model]', 'normalizedQuestion: ', normalizedQuestion);\n log('[model]', 'session: ', session);\n const tokens = buildTokens(\n normalizedQuestion.tokens,\n env.mode === 'evaluate'\n );\n log('tokens:', tokens);\n const correctness =\n env.mode === 'evaluate'\n ? getCorrectness(normalizedQuestion.tokens, session.selectedTokens)\n : 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\n ? normalizedQuestion.prompt\n : null,\n text: normalizedQuestion.text,\n disabled: env.mode !== 'gather',\n maxSelections: normalizedQuestion.maxSelections,\n correctness,\n feedback,\n incorrect:\n env.mode === 'evaluate' ? correctness !== 'correct' : undefined,\n };\n\n if (\n env.role === 'instructor' &&\n (env.mode === 'view' || env.mode === 'evaluate')\n ) {\n out.rationale = normalizedQuestion.rationaleEnabled\n ? normalizedQuestion.rationale\n : 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"],"file":"index.js"}
@@ -1,14 +1,14 @@
1
1
  {
2
2
  "name": "@pie-element/select-text-controller",
3
3
  "private": true,
4
- "version": "4.1.28",
4
+ "version": "4.1.30",
5
5
  "description": "",
6
6
  "main": "lib/index.js",
7
7
  "module": "src/index.js",
8
8
  "dependencies": {
9
9
  "@pie-lib/controller-utils": "^0.2.26",
10
10
  "@pie-lib/feedback": "^0.4.27",
11
- "@pie-lib/text-select": "^1.8.12",
11
+ "@pie-lib/text-select": "^1.8.13",
12
12
  "debug": "^3.1.0",
13
13
  "lodash": "^4.17.15"
14
14
  },
@@ -58,7 +58,7 @@ const base = extras =>
58
58
  Object.assign(
59
59
  {},
60
60
  {
61
- highlightChoices: true,
61
+ // highlightChoices: true,
62
62
  feedback: {
63
63
  correct: {
64
64
  type: 'default',
@@ -249,374 +249,56 @@ const simpleItem = {
249
249
 
250
250
  exports.model = (id, element) => {
251
251
  return Object.assign({}, { id, element }, base( {
252
+ // "id": "8a808081701d693801703174fb900421",
253
+ "teacherInstructions": "",
252
254
  "partialScoring": true,
255
+ "prompt": "<p>Select the sentence from&#160;&#34;The Gymnast&#34; that <span class=\"relative-emphasis\">best</span> represents the theme.</p>",
256
+ "rationale": "<p>The final sentence of the passage best exemplifies the theme of the short story because Natasha&#39;s practice and determination finally pays off.</p>",
253
257
  "tokens": [
254
258
  {
255
- "correct": false,
259
+ "text": "She thought about what she had to do, struggling to rein in her wild, fearful thoughts.",
260
+ "end": 90,
256
261
  "start": 3,
257
- "end": 6,
258
- "text": "Our"
259
- },
260
- {
261
- "correct": false,
262
- "start": 7,
263
- "end": 16,
264
- "text": "challenge"
262
+ "correct": false
265
263
  },
266
264
  {
267
- "correct": false,
268
- "start": 18,
269
- "end": 21,
270
- "text": "not"
271
- },
272
- {
273
- "correct": false,
274
- "start": 22,
275
- "end": 30,
276
- "text": "tomorrow"
277
- },
278
- {
279
- "correct": false,
280
- "start": 31,
281
- "end": 34,
282
- "text": "but"
283
- },
284
- {
285
- "correct": false,
286
- "start": 35,
287
- "end": 40,
288
- "text": "today"
289
- },
290
- {
291
- "correct": false,
292
- "start": 42,
293
- "end": 44,
294
- "text": "is"
295
- },
296
- {
297
- "correct": false,
298
- "start": 45,
299
- "end": 47,
300
- "text": "to"
301
- },
302
- {
303
- "correct": false,
304
- "start": 48,
305
- "end": 58,
306
- "text": "accomplish"
307
- },
308
- {
309
- "correct": false,
310
- "start": 59,
311
- "end": 69,
312
- "text": "objectives"
313
- },
314
- {
315
- "correct": false,
316
- "start": 70,
317
- "end": 75,
318
- "text": "which"
319
- },
320
- {
321
- "correct": false,
322
- "start": 76,
323
- "end": 80,
324
- "text": "have"
325
- },
326
- {
327
- "correct": false,
328
- "start": 81,
329
- "end": 87,
330
- "text": "eluded"
331
- },
332
- {
333
- "correct": false,
334
- "start": 88,
335
- "end": 95,
336
- "text": "mankind"
337
- },
338
- {
339
- "correct": false,
340
- "start": 96,
341
- "end": 101,
342
- "text": "since"
265
+ "start": 449,
266
+ "end": 585,
267
+ "text": "Just for a hair of a moment, Natasha wondered if she really wanted a perfect 10, so weary was she of trying for but never achieving one.",
268
+ "correct": false
343
269
  },
344
270
  {
271
+ "end": 627,
345
272
  "correct": false,
346
- "start": 102,
347
- "end": 105,
348
- "text": "the"
273
+ "text": "At last Natasha's moment arrived.",
274
+ "start": 594
349
275
  },
350
276
  {
277
+ "end": 743,
278
+ "text": "The faces of past giants of gymnastics swam before her mind's eye, now razor&#8211;sharp with fierce determination.",
351
279
  "correct": false,
352
- "start": 106,
353
- "end": 115,
354
- "text": "beginning"
280
+ "start": 628
355
281
  },
356
282
  {
283
+ "text": "Suddenly, the din of the gymnasium was silent to her.",
284
+ "end": 997,
357
285
  "correct": false,
358
- "start": 116,
359
- "end": 118,
360
- "text": "of"
286
+ "start": 944
361
287
  },
362
288
  {
289
+ "end": 1087,
290
+ "start": 998,
363
291
  "correct": false,
364
- "start": 119,
365
- "end": 123,
366
- "text": "time"
367
- },
368
- {
369
- "correct": false,
370
- "start": 125,
371
- "end": 127,
372
- "text": "We"
373
- },
374
- {
375
- "correct": false,
376
- "start": 128,
377
- "end": 132,
378
- "text": "must"
379
- },
380
- {
381
- "correct": false,
382
- "start": 133,
383
- "end": 138,
384
- "text": "bring"
385
- },
386
- {
387
- "correct": false,
388
- "start": 139,
389
- "end": 144,
390
- "text": "equal"
391
- },
392
- {
393
- "correct": false,
394
- "start": 145,
395
- "end": 152,
396
- "text": "justice"
397
- },
398
- {
399
- "correct": false,
400
- "start": 153,
401
- "end": 155,
402
- "text": "to"
403
- },
404
- {
405
- "correct": false,
406
- "start": 156,
407
- "end": 159,
408
- "text": "all"
409
- },
410
- {
411
- "correct": false,
412
- "start": 160,
413
- "end": 163,
414
- "text": "our"
415
- },
416
- {
417
- "correct": false,
418
- "start": 164,
419
- "end": 172,
420
- "text": "citizens"
421
- },
422
- {
423
- "correct": false,
424
- "start": 174,
425
- "end": 176,
426
- "text": "We"
427
- },
428
- {
429
- "correct": false,
430
- "start": 177,
431
- "end": 181,
432
- "text": "must"
433
- },
434
- {
435
- "correct": false,
436
- "start": 182,
437
- "end": 189,
438
- "text": "abolish"
439
- },
440
- {
441
- "correct": false,
442
- "start": 190,
443
- "end": 195,
444
- "text": "human"
292
+ "text": "Forcing all sound out of her mind, she focused on the gleaming balance beam ahead of her."
445
293
  },
446
294
  {
447
295
  "correct": true,
448
- "start": 196,
449
- "end": 203,
450
- "text": "poverty"
451
- },
452
- {
453
- "correct": false,
454
- "start": 205,
455
- "end": 207,
456
- "text": "We"
457
- },
458
- {
459
- "correct": false,
460
- "start": 208,
461
- "end": 212,
462
- "text": "must"
463
- },
464
- {
465
- "correct": false,
466
- "start": 213,
467
- "end": 222,
468
- "text": "eradicate"
469
- },
470
- {
471
- "correct": false,
472
- "start": 223,
473
- "end": 230,
474
- "text": "killing"
475
- },
476
- {
477
- "correct": false,
478
- "start": 231,
479
- "end": 234,
480
- "text": "and"
481
- },
482
- {
483
- "correct": false,
484
- "start": 235,
485
- "end": 244,
486
- "text": "crippling"
487
- },
488
- {
489
- "correct": true,
490
- "start": 245,
491
- "end": 252,
492
- "text": "disease"
493
- },
494
- {
495
- "correct": false,
496
- "start": 253,
497
- "end": 256,
498
- "text": "and"
499
- },
500
- {
501
- "correct": false,
502
- "start": 257,
503
- "end": 265,
504
- "text": "lengthen"
505
- },
506
- {
507
- "correct": false,
508
- "start": 266,
509
- "end": 269,
510
- "text": "the"
511
- },
512
- {
513
- "correct": false,
514
- "start": 270,
515
- "end": 274,
516
- "text": "span"
517
- },
518
- {
519
- "correct": false,
520
- "start": 275,
521
- "end": 277,
522
- "text": "of"
523
- },
524
- {
525
- "correct": false,
526
- "start": 278,
527
- "end": 282,
528
- "text": "life"
529
- },
530
- {
531
- "correct": false,
532
- "start": 283,
533
- "end": 285,
534
- "text": "to"
535
- },
536
- {
537
- "correct": false,
538
- "start": 286,
539
- "end": 289,
540
- "text": "100"
541
- },
542
- {
543
- "correct": false,
544
- "start": 290,
545
- "end": 292,
546
- "text": "or"
547
- },
548
- {
549
- "correct": false,
550
- "start": 293,
551
- "end": 296,
552
- "text": "200"
553
- },
554
- {
555
- "correct": false,
556
- "start": 297,
557
- "end": 302,
558
- "text": "years"
559
- },
560
- {
561
- "correct": false,
562
- "start": 304,
563
- "end": 306,
564
- "text": "We"
565
- },
566
- {
567
- "correct": false,
568
- "start": 307,
569
- "end": 311,
570
- "text": "must"
571
- },
572
- {
573
- "correct": false,
574
- "start": 312,
575
- "end": 321,
576
- "text": "eliminate"
577
- },
578
- {
579
- "correct": true,
580
- "start": 322,
581
- "end": 332,
582
- "text": "illiteracy"
583
- },
584
- {
585
- "correct": false,
586
- "start": 333,
587
- "end": 338,
588
- "text": "among"
589
- },
590
- {
591
- "correct": false,
592
- "start": 339,
593
- "end": 342,
594
- "text": "all"
595
- },
596
- {
597
- "correct": false,
598
- "start": 343,
599
- "end": 345,
600
- "text": "of"
601
- },
602
- {
603
- "correct": false,
604
- "start": 346,
605
- "end": 349,
606
- "text": "our"
607
- },
608
- {
609
- "correct": false,
610
- "start": 350,
611
- "end": 356,
612
- "text": "people"
296
+ "start": 1088,
297
+ "end": 1225,
298
+ "text": "Taking a deep breath, Natasha made her graceful, yet powerful approach, mounted the beam flawlessly, and...executed her first perfect 10."
613
299
  }
614
300
  ],
615
- // "id": "0",
616
- "text": "<p>Our challenge, not tomorrow but today, is to accomplish objectives which have eluded mankind since the beginning of time. We must bring equal justice to all our citizens. We must abolish human poverty. We must eradicate killing and crippling disease and lengthen the span of life to 100 or 200 years. We must eliminate illiteracy among all of our people.</p>\n",
617
- "prompt": "<p>Select the <span class=\"relative-emphasis\">three</span> words from below that specifically describe the &#8220;enemies&#8221; which Johnson wants to eliminate.</p>",
618
- "rationale": "<p>In paragraph 6, Johnson refers to the &#8220;ancient enemies&#8221;&#8212;which he defines as poverty, disease, illiteracy, strife, and bigotry. In paragraph 3, he talks about this idea by explaining that he wants to &#8220;accomplish objectives which have eluded mankind;&#8221; that is, to eliminate these enemies.</p>",
619
301
  // "element": "select-text",
620
- "maxSelections": 3
302
+ "text": "<p>She thought about what she had to do, struggling to rein in her wild, fearful thoughts. Coach Cummings always said that an undisciplined mind never scored a perfect 10. Natasha wanted to please her Coach, yet sometimes his approval wasn't as exciting as his anger. The gymnasts were unanimous about one thing: Coach Cummings's fits of disapproving rage were much more humorous to witness than his infrequent, backslapping moments of high praise. Just for a hair of a moment, Natasha wondered if she really wanted a perfect 10, so weary was she of trying for but never achieving one.</p>\n\n<p>At last Natasha's moment arrived. The faces of past giants of gymnastics swam before her mind's eye, now razor&#8211;sharp with fierce determination. \"I am talented. I am not afraid. I will make a perfect 10,\" she spoke aloud to herself, as she approached the mat, dusted her hands with chalk to prevent slippage, and returned to her starting point. Suddenly, the din of the gymnasium was silent to her. Forcing all sound out of her mind, she focused on the gleaming balance beam ahead of her. Taking a deep breath, Natasha made her graceful, yet powerful approach, mounted the beam flawlessly, and...executed her first perfect 10.</p>\n"
621
303
  } ));
622
304
  };