@pie-element/select-text 6.5.3-next.583 → 6.5.3-next.587
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/configure/lib/utils.js +4 -1
- package/configure/lib/utils.js.map +1 -1
- package/controller/lib/index.js +1 -1
- package/controller/lib/index.js.map +1 -1
- package/docs/demo/generate.js +28 -346
- package/docs/demo/session.js +18 -5
- package/lib/index.js +38 -2
- package/lib/index.js.map +1 -1
- package/lib/main.js +18 -4
- package/lib/main.js.map +1 -1
- package/lib/utils.js +4 -1
- package/lib/utils.js.map +1 -1
- package/module/configure.js +3 -1
- package/module/controller.js +6 -1
- package/module/demo.js +28 -346
- package/module/element.js +45 -19
- package/module/print-demo.js +28 -346
- package/module/print.js +30 -19
- package/package.json +2 -2
package/lib/main.js
CHANGED
|
@@ -68,7 +68,7 @@ var Main = /*#__PURE__*/function (_React$Component) {
|
|
|
68
68
|
});
|
|
69
69
|
});
|
|
70
70
|
(0, _defineProperty2["default"])((0, _assertThisInitialized2["default"])(_this), "correctAnswer", function () {
|
|
71
|
-
var model = _this.
|
|
71
|
+
var model = _this.state.model;
|
|
72
72
|
return model.tokens.filter(function (t) {
|
|
73
73
|
return t.correct;
|
|
74
74
|
});
|
|
@@ -97,8 +97,7 @@ var Main = /*#__PURE__*/function (_React$Component) {
|
|
|
97
97
|
classes = _this$props.classes;
|
|
98
98
|
var _this$state = this.state,
|
|
99
99
|
showCorrectAnswer = _this$state.showCorrectAnswer,
|
|
100
|
-
model = _this$state.model;
|
|
101
|
-
|
|
100
|
+
model = _this$state.model;
|
|
102
101
|
var selectedTokens = showCorrectAnswer ? this.correctAnswer() : session.selectedTokens;
|
|
103
102
|
log('[render] selectedTokens:', selectedTokens);
|
|
104
103
|
return /*#__PURE__*/_react["default"].createElement("div", {
|
|
@@ -127,7 +126,22 @@ var Main = /*#__PURE__*/function (_React$Component) {
|
|
|
127
126
|
text: model.text,
|
|
128
127
|
tokens: model.tokens,
|
|
129
128
|
selectedTokens: selectedTokens,
|
|
130
|
-
onChange:
|
|
129
|
+
onChange: function onChange(selection) {
|
|
130
|
+
var newSelections = selection.map(function (select) {
|
|
131
|
+
var token = model.tokens.find(function (_ref) {
|
|
132
|
+
var start = _ref.start,
|
|
133
|
+
end = _ref.end;
|
|
134
|
+
return select.start === start && select.end === end;
|
|
135
|
+
}); // needed for getScore when tokens position is recalculated, to keep oldStart and oldEnd
|
|
136
|
+
|
|
137
|
+
if (token) {
|
|
138
|
+
return token;
|
|
139
|
+
}
|
|
140
|
+
|
|
141
|
+
return select;
|
|
142
|
+
});
|
|
143
|
+
onSelectionChange(newSelections);
|
|
144
|
+
},
|
|
131
145
|
highlightChoices: model.highlightChoices,
|
|
132
146
|
maxNoOfSelections: model.maxSelections,
|
|
133
147
|
animationsDisabled: model.animationsDisabled
|
package/lib/main.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/main.jsx"],"names":["log","Types","model","PropTypes","object","session","onSelectionChange","func","isRequired","Main","props","setState","showCorrectAnswer","state","tokens","filter","t","correct","alwaysShowCorrect","nextProps","classes","selectedTokens","correctAnswer","mainContainer","teacherInstructions","animationsDisabled","hidden","visible","collapsible","prompt","disabled","incorrect","toggleShowCorrect","textSelect","text","highlightChoices","maxSelections","rationale","correctness","feedback","React","Component","StyledMain","theme","paddingLeft","spacing","unit","paddingRight","paddingBottom","color","backgroundColor","background","marginBottom","marginTop","whiteSpace","verticalAlign","paddingTop","Stateful","change"],"mappings":"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","sourcesContent":["import React from 'react';\nimport PropTypes from 'prop-types';\nimport { TextSelect } from '@pie-lib/text-select';\nimport CorrectAnswerToggle from '@pie-lib/correct-answer-toggle';\nimport { color, Feedback, Collapsible, hasText, PreviewPrompt } from '@pie-lib/render-ui';\nimport { withStyles } from '@material-ui/core/styles';\nimport generateModel from './utils';\n\nimport debug from 'debug';\n\nconst log = debug('@pie-ui:select-text');\n\nconst Types = {\n model: PropTypes.object,\n session: PropTypes.object,\n onSelectionChange: PropTypes.func.isRequired\n};\n\nexport class Main extends React.Component {\n static propTypes = { ...Types, classes: PropTypes.object.isRequired };\n\n static defaultProps = {};\n\n constructor(props) {\n super(props);\n\n this.state = {\n showCorrectAnswer: this.props.model.alwaysShowCorrect || false,\n model: generateModel(props.model)\n };\n }\n\n UNSAFE_componentWillReceiveProps(nextProps) {\n this.setState({\n showCorrectAnswer: !!nextProps.model.alwaysShowCorrect,\n model: generateModel(nextProps.model)\n });\n }\n\n toggleShowCorrect = () => {\n this.setState({ showCorrectAnswer: !this.state.showCorrectAnswer });\n };\n\n correctAnswer = () => {\n const { model } = this.props;\n\n return model.tokens.filter(t => t.correct);\n };\n\n render() {\n const { session, onSelectionChange, classes } = this.props;\n const { showCorrectAnswer, model } = this.state;\n\n // const model = generateTokens(this.props.model)\n\n const selectedTokens = showCorrectAnswer\n ? this.correctAnswer()\n : session.selectedTokens;\n\n log('[render] selectedTokens:', selectedTokens);\n\n return (\n <div className={classes.mainContainer}>\n {\n model.teacherInstructions && hasText(model.teacherInstructions) && (\n <React.Fragment>\n {!model.animationsDisabled ? <Collapsible\n labels={{hidden: 'Show Teacher Instructions', visible: 'Hide Teacher Instructions'}}\n className={classes.collapsible}\n >\n <PreviewPrompt prompt={model.teacherInstructions}/>\n\n </Collapsible>\n : <PreviewPrompt prompt={model.teacherInstructions}/>}\n\n <br />\n </React.Fragment>\n )\n }\n <div className={classes.prompt}>\n <PreviewPrompt prompt={model.prompt}/>\n </div>\n {!model.alwaysShowCorrect && (\n <CorrectAnswerToggle\n show={model.disabled && model.incorrect}\n toggled={showCorrectAnswer}\n onToggle={this.toggleShowCorrect}\n />\n )}\n <TextSelect\n className={classes.textSelect}\n disabled={model.disabled}\n text={model.text}\n tokens={model.tokens}\n selectedTokens={selectedTokens}\n onChange={onSelectionChange}\n highlightChoices={model.highlightChoices}\n maxNoOfSelections={model.maxSelections}\n animationsDisabled={model.animationsDisabled}\n />\n {\n model.rationale && hasText(model.rationale) && (\n <React.Fragment>\n {!model.animationsDisabled ? <Collapsible\n labels={{hidden: 'Show Rationale', visible: 'Hide Rationale'}} className={classes.collapsible}\n className={classes.collapsible}\n >\n <PreviewPrompt prompt={model.rationale}/>\n </Collapsible>\n : <PreviewPrompt prompt={model.rationale}/>\n }\n </React.Fragment>)\n }\n {model.correctness && model.feedback && !showCorrectAnswer && (\n <Feedback correctness={model.correctness} feedback={model.feedback}/>\n )}\n </div>\n );\n }\n}\n\nconst StyledMain = withStyles(theme => ({\n mainContainer: {\n paddingLeft: theme.spacing.unit,\n paddingRight: theme.spacing.unit,\n paddingBottom: theme.spacing.unit,\n color: color.text(),\n backgroundColor: color.background()\n },\n textSelect: {\n marginBottom: theme.spacing.unit,\n marginTop: theme.spacing.unit,\n whiteSpace: 'normal'\n },\n prompt: {\n verticalAlign: 'middle',\n marginBottom: theme.spacing.unit\n },\n collapsible: {\n paddingTop: theme.spacing.unit * 2,\n paddingBottom: theme.spacing.unit * 3\n }\n}))(Main);\n\nexport default class Stateful extends React.Component {\n static propTypes = Types;\n\n constructor(props) {\n super(props);\n this.state = {\n model: props.model,\n session: props.session\n };\n }\n\n UNSAFE_componentWillReceiveProps(nextProps) {\n this.setState({ model: nextProps.model, session: nextProps.session });\n }\n\n change = selectedTokens => {\n const session = { ...this.state.session, selectedTokens };\n this.setState({ session }, () => {\n this.props.onSelectionChange(this.state.session.selectedTokens);\n });\n };\n\n render() {\n const { model, session } = this.state;\n return (\n <StyledMain\n model={model}\n session={session}\n onSelectionChange={this.change}\n />\n );\n }\n}\n"],"file":"main.js"}
|
|
1
|
+
{"version":3,"sources":["../src/main.jsx"],"names":["log","Types","model","PropTypes","object","session","onSelectionChange","func","isRequired","Main","props","setState","showCorrectAnswer","state","tokens","filter","t","correct","alwaysShowCorrect","nextProps","classes","selectedTokens","correctAnswer","mainContainer","teacherInstructions","animationsDisabled","hidden","visible","collapsible","prompt","disabled","incorrect","toggleShowCorrect","textSelect","text","selection","newSelections","map","select","token","find","start","end","highlightChoices","maxSelections","rationale","correctness","feedback","React","Component","StyledMain","theme","paddingLeft","spacing","unit","paddingRight","paddingBottom","color","backgroundColor","background","marginBottom","marginTop","whiteSpace","verticalAlign","paddingTop","Stateful","change"],"mappings":"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","sourcesContent":["import React from 'react';\nimport PropTypes from 'prop-types';\nimport { TextSelect } from '@pie-lib/text-select';\nimport CorrectAnswerToggle from '@pie-lib/correct-answer-toggle';\nimport { color, Feedback, Collapsible, hasText, PreviewPrompt } from '@pie-lib/render-ui';\nimport { withStyles } from '@material-ui/core/styles';\nimport generateModel from './utils';\n\nimport debug from 'debug';\n\nconst log = debug('@pie-ui:select-text');\n\nconst Types = {\n model: PropTypes.object,\n session: PropTypes.object,\n onSelectionChange: PropTypes.func.isRequired\n};\n\nexport class Main extends React.Component {\n static propTypes = { ...Types, classes: PropTypes.object.isRequired };\n\n static defaultProps = {};\n\n constructor(props) {\n super(props);\n\n this.state = {\n showCorrectAnswer: this.props.model.alwaysShowCorrect || false,\n model: generateModel(props.model)\n };\n }\n\n UNSAFE_componentWillReceiveProps(nextProps) {\n this.setState({\n showCorrectAnswer: !!nextProps.model.alwaysShowCorrect,\n model: generateModel(nextProps.model)\n });\n }\n\n toggleShowCorrect = () => {\n this.setState({ showCorrectAnswer: !this.state.showCorrectAnswer });\n };\n\n correctAnswer = () => {\n const { model } = this.state;\n\n return model.tokens.filter(t => t.correct);\n };\n\n render() {\n const { session, onSelectionChange, classes } = this.props;\n const { showCorrectAnswer, model } = this.state;\n\n const selectedTokens = showCorrectAnswer\n ? this.correctAnswer()\n : session.selectedTokens;\n\n log('[render] selectedTokens:', selectedTokens);\n\n return (\n <div className={classes.mainContainer}>\n {\n model.teacherInstructions && hasText(model.teacherInstructions) && (\n <React.Fragment>\n {!model.animationsDisabled ? <Collapsible\n labels={{ hidden: 'Show Teacher Instructions', visible: 'Hide Teacher Instructions' }}\n className={classes.collapsible}\n >\n <PreviewPrompt prompt={model.teacherInstructions}/>\n\n </Collapsible>\n : <PreviewPrompt prompt={model.teacherInstructions}/>}\n\n <br/>\n </React.Fragment>\n )\n }\n <div className={classes.prompt}>\n <PreviewPrompt prompt={model.prompt}/>\n </div>\n {!model.alwaysShowCorrect && (\n <CorrectAnswerToggle\n show={model.disabled && model.incorrect}\n toggled={showCorrectAnswer}\n onToggle={this.toggleShowCorrect}\n />\n )}\n <TextSelect\n className={classes.textSelect}\n disabled={model.disabled}\n text={model.text}\n tokens={model.tokens}\n selectedTokens={selectedTokens}\n onChange={selection => {\n const newSelections = selection.map(select => {\n const token = model.tokens.find(({ start, end }) => select.start === start && select.end === end);\n\n // needed for getScore when tokens position is recalculated, to keep oldStart and oldEnd\n if (token) {\n return token;\n }\n\n return select;\n })\n\n onSelectionChange(newSelections);\n }}\n highlightChoices={model.highlightChoices}\n maxNoOfSelections={model.maxSelections}\n animationsDisabled={model.animationsDisabled}\n />\n {\n model.rationale && hasText(model.rationale) && (\n <React.Fragment>\n {!model.animationsDisabled ? <Collapsible\n labels={{ hidden: 'Show Rationale', visible: 'Hide Rationale' }} className={classes.collapsible}\n className={classes.collapsible}\n >\n <PreviewPrompt prompt={model.rationale}/>\n </Collapsible>\n : <PreviewPrompt prompt={model.rationale}/>\n }\n </React.Fragment>)\n }\n {model.correctness && model.feedback && !showCorrectAnswer && (\n <Feedback correctness={model.correctness} feedback={model.feedback}/>\n )}\n </div>\n );\n }\n}\n\nconst StyledMain = withStyles(theme => ({\n mainContainer: {\n paddingLeft: theme.spacing.unit,\n paddingRight: theme.spacing.unit,\n paddingBottom: theme.spacing.unit,\n color: color.text(),\n backgroundColor: color.background()\n },\n textSelect: {\n marginBottom: theme.spacing.unit,\n marginTop: theme.spacing.unit,\n whiteSpace: 'normal'\n },\n prompt: {\n verticalAlign: 'middle',\n marginBottom: theme.spacing.unit\n },\n collapsible: {\n paddingTop: theme.spacing.unit * 2,\n paddingBottom: theme.spacing.unit * 3\n }\n}))(Main);\n\nexport default class Stateful extends React.Component {\n static propTypes = Types;\n\n constructor(props) {\n super(props);\n this.state = {\n model: props.model,\n session: props.session\n };\n }\n\n UNSAFE_componentWillReceiveProps(nextProps) {\n this.setState({ model: nextProps.model, session: nextProps.session });\n }\n\n change = selectedTokens => {\n const session = { ...this.state.session, selectedTokens };\n this.setState({ session }, () => {\n this.props.onSelectionChange(this.state.session.selectedTokens);\n });\n };\n\n render() {\n const { model, session } = this.state;\n return (\n <StyledMain\n model={model}\n session={session}\n onSelectionChange={this.change}\n />\n );\n }\n}\n"],"file":"main.js"}
|
package/lib/utils.js
CHANGED
|
@@ -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), {}, {
|
package/lib/utils.js.map
CHANGED
|
@@ -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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
|
|
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\n return {\n ...model,\n tokens: newTokens,\n text: modelText\n };\n};\n"],"file":"utils.js"}
|
package/module/configure.js
CHANGED
package/module/controller.js
CHANGED
|
@@ -18993,7 +18993,12 @@ const getCorrectness = (tokens, selected) => {
|
|
|
18993
18993
|
const getCorrectSelected = (tokens, selected) => {
|
|
18994
18994
|
return (selected || []).filter((s) => {
|
|
18995
18995
|
const index = tokens.findIndex((c) => {
|
|
18996
|
-
return c.correct &&
|
|
18996
|
+
return c.correct &&
|
|
18997
|
+
(
|
|
18998
|
+
(c.start === s.start && c.end === s.end) ||
|
|
18999
|
+
// this case is used for the cases when the token's start & end were recalculated
|
|
19000
|
+
(c.start === s.oldStart && c.end === s.oldEnd)
|
|
19001
|
+
);
|
|
18997
19002
|
});
|
|
18998
19003
|
return index !== -1;
|
|
18999
19004
|
});
|
package/module/demo.js
CHANGED
|
@@ -61,7 +61,7 @@ const base = extras =>
|
|
|
61
61
|
Object.assign(
|
|
62
62
|
{},
|
|
63
63
|
{
|
|
64
|
-
highlightChoices: true,
|
|
64
|
+
// highlightChoices: true,
|
|
65
65
|
feedback: {
|
|
66
66
|
correct: {
|
|
67
67
|
type: 'default',
|
|
@@ -211,375 +211,57 @@ generate.htmlAscii = (id, element) => ({
|
|
|
211
211
|
|
|
212
212
|
generate.model = (id, element) => {
|
|
213
213
|
return Object.assign({}, { id, element }, base( {
|
|
214
|
+
// "id": "8a808081701d693801703174fb900421",
|
|
215
|
+
"teacherInstructions": "",
|
|
214
216
|
"partialScoring": true,
|
|
217
|
+
"prompt": "<p>Select the sentence from "The Gymnast" that <span class=\"relative-emphasis\">best</span> represents the theme.</p>",
|
|
218
|
+
"rationale": "<p>The final sentence of the passage best exemplifies the theme of the short story because Natasha's practice and determination finally pays off.</p>",
|
|
215
219
|
"tokens": [
|
|
216
220
|
{
|
|
217
|
-
"
|
|
221
|
+
"text": "She thought about what she had to do, struggling to rein in her wild, fearful thoughts.",
|
|
222
|
+
"end": 90,
|
|
218
223
|
"start": 3,
|
|
219
|
-
"
|
|
220
|
-
"text": "Our"
|
|
221
|
-
},
|
|
222
|
-
{
|
|
223
|
-
"correct": false,
|
|
224
|
-
"start": 7,
|
|
225
|
-
"end": 16,
|
|
226
|
-
"text": "challenge"
|
|
224
|
+
"correct": false
|
|
227
225
|
},
|
|
228
226
|
{
|
|
229
|
-
"
|
|
230
|
-
"
|
|
231
|
-
"
|
|
232
|
-
"
|
|
233
|
-
},
|
|
234
|
-
{
|
|
235
|
-
"correct": false,
|
|
236
|
-
"start": 22,
|
|
237
|
-
"end": 30,
|
|
238
|
-
"text": "tomorrow"
|
|
239
|
-
},
|
|
240
|
-
{
|
|
241
|
-
"correct": false,
|
|
242
|
-
"start": 31,
|
|
243
|
-
"end": 34,
|
|
244
|
-
"text": "but"
|
|
245
|
-
},
|
|
246
|
-
{
|
|
247
|
-
"correct": false,
|
|
248
|
-
"start": 35,
|
|
249
|
-
"end": 40,
|
|
250
|
-
"text": "today"
|
|
251
|
-
},
|
|
252
|
-
{
|
|
253
|
-
"correct": false,
|
|
254
|
-
"start": 42,
|
|
255
|
-
"end": 44,
|
|
256
|
-
"text": "is"
|
|
257
|
-
},
|
|
258
|
-
{
|
|
259
|
-
"correct": false,
|
|
260
|
-
"start": 45,
|
|
261
|
-
"end": 47,
|
|
262
|
-
"text": "to"
|
|
263
|
-
},
|
|
264
|
-
{
|
|
265
|
-
"correct": false,
|
|
266
|
-
"start": 48,
|
|
267
|
-
"end": 58,
|
|
268
|
-
"text": "accomplish"
|
|
269
|
-
},
|
|
270
|
-
{
|
|
271
|
-
"correct": false,
|
|
272
|
-
"start": 59,
|
|
273
|
-
"end": 69,
|
|
274
|
-
"text": "objectives"
|
|
275
|
-
},
|
|
276
|
-
{
|
|
277
|
-
"correct": false,
|
|
278
|
-
"start": 70,
|
|
279
|
-
"end": 75,
|
|
280
|
-
"text": "which"
|
|
281
|
-
},
|
|
282
|
-
{
|
|
283
|
-
"correct": false,
|
|
284
|
-
"start": 76,
|
|
285
|
-
"end": 80,
|
|
286
|
-
"text": "have"
|
|
287
|
-
},
|
|
288
|
-
{
|
|
289
|
-
"correct": false,
|
|
290
|
-
"start": 81,
|
|
291
|
-
"end": 87,
|
|
292
|
-
"text": "eluded"
|
|
293
|
-
},
|
|
294
|
-
{
|
|
295
|
-
"correct": false,
|
|
296
|
-
"start": 88,
|
|
297
|
-
"end": 95,
|
|
298
|
-
"text": "mankind"
|
|
299
|
-
},
|
|
300
|
-
{
|
|
301
|
-
"correct": false,
|
|
302
|
-
"start": 96,
|
|
303
|
-
"end": 101,
|
|
304
|
-
"text": "since"
|
|
227
|
+
"start": 449,
|
|
228
|
+
"end": 585,
|
|
229
|
+
"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.",
|
|
230
|
+
"correct": false
|
|
305
231
|
},
|
|
306
232
|
{
|
|
233
|
+
"end": 627,
|
|
307
234
|
"correct": false,
|
|
308
|
-
"
|
|
309
|
-
"
|
|
310
|
-
"text": "the"
|
|
235
|
+
"text": "At last Natasha's moment arrived.",
|
|
236
|
+
"start": 594
|
|
311
237
|
},
|
|
312
238
|
{
|
|
239
|
+
"end": 743,
|
|
240
|
+
"text": "The faces of past giants of gymnastics swam before her mind's eye, now razor–sharp with fierce determination.",
|
|
313
241
|
"correct": false,
|
|
314
|
-
"start":
|
|
315
|
-
"end": 115,
|
|
316
|
-
"text": "beginning"
|
|
242
|
+
"start": 628
|
|
317
243
|
},
|
|
318
244
|
{
|
|
245
|
+
"text": "Suddenly, the din of the gymnasium was silent to her.",
|
|
246
|
+
"end": 997,
|
|
319
247
|
"correct": false,
|
|
320
|
-
"start":
|
|
321
|
-
"end": 118,
|
|
322
|
-
"text": "of"
|
|
248
|
+
"start": 944
|
|
323
249
|
},
|
|
324
250
|
{
|
|
251
|
+
"end": 1087,
|
|
252
|
+
"start": 998,
|
|
325
253
|
"correct": false,
|
|
326
|
-
"
|
|
327
|
-
"end": 123,
|
|
328
|
-
"text": "time"
|
|
329
|
-
},
|
|
330
|
-
{
|
|
331
|
-
"correct": false,
|
|
332
|
-
"start": 125,
|
|
333
|
-
"end": 127,
|
|
334
|
-
"text": "We"
|
|
335
|
-
},
|
|
336
|
-
{
|
|
337
|
-
"correct": false,
|
|
338
|
-
"start": 128,
|
|
339
|
-
"end": 132,
|
|
340
|
-
"text": "must"
|
|
341
|
-
},
|
|
342
|
-
{
|
|
343
|
-
"correct": false,
|
|
344
|
-
"start": 133,
|
|
345
|
-
"end": 138,
|
|
346
|
-
"text": "bring"
|
|
347
|
-
},
|
|
348
|
-
{
|
|
349
|
-
"correct": false,
|
|
350
|
-
"start": 139,
|
|
351
|
-
"end": 144,
|
|
352
|
-
"text": "equal"
|
|
353
|
-
},
|
|
354
|
-
{
|
|
355
|
-
"correct": false,
|
|
356
|
-
"start": 145,
|
|
357
|
-
"end": 152,
|
|
358
|
-
"text": "justice"
|
|
359
|
-
},
|
|
360
|
-
{
|
|
361
|
-
"correct": false,
|
|
362
|
-
"start": 153,
|
|
363
|
-
"end": 155,
|
|
364
|
-
"text": "to"
|
|
365
|
-
},
|
|
366
|
-
{
|
|
367
|
-
"correct": false,
|
|
368
|
-
"start": 156,
|
|
369
|
-
"end": 159,
|
|
370
|
-
"text": "all"
|
|
371
|
-
},
|
|
372
|
-
{
|
|
373
|
-
"correct": false,
|
|
374
|
-
"start": 160,
|
|
375
|
-
"end": 163,
|
|
376
|
-
"text": "our"
|
|
377
|
-
},
|
|
378
|
-
{
|
|
379
|
-
"correct": false,
|
|
380
|
-
"start": 164,
|
|
381
|
-
"end": 172,
|
|
382
|
-
"text": "citizens"
|
|
383
|
-
},
|
|
384
|
-
{
|
|
385
|
-
"correct": false,
|
|
386
|
-
"start": 174,
|
|
387
|
-
"end": 176,
|
|
388
|
-
"text": "We"
|
|
389
|
-
},
|
|
390
|
-
{
|
|
391
|
-
"correct": false,
|
|
392
|
-
"start": 177,
|
|
393
|
-
"end": 181,
|
|
394
|
-
"text": "must"
|
|
395
|
-
},
|
|
396
|
-
{
|
|
397
|
-
"correct": false,
|
|
398
|
-
"start": 182,
|
|
399
|
-
"end": 189,
|
|
400
|
-
"text": "abolish"
|
|
401
|
-
},
|
|
402
|
-
{
|
|
403
|
-
"correct": false,
|
|
404
|
-
"start": 190,
|
|
405
|
-
"end": 195,
|
|
406
|
-
"text": "human"
|
|
254
|
+
"text": "Forcing all sound out of her mind, she focused on the gleaming balance beam ahead of her."
|
|
407
255
|
},
|
|
408
256
|
{
|
|
409
257
|
"correct": true,
|
|
410
|
-
"start":
|
|
411
|
-
"end":
|
|
412
|
-
"text": "
|
|
413
|
-
},
|
|
414
|
-
{
|
|
415
|
-
"correct": false,
|
|
416
|
-
"start": 205,
|
|
417
|
-
"end": 207,
|
|
418
|
-
"text": "We"
|
|
419
|
-
},
|
|
420
|
-
{
|
|
421
|
-
"correct": false,
|
|
422
|
-
"start": 208,
|
|
423
|
-
"end": 212,
|
|
424
|
-
"text": "must"
|
|
425
|
-
},
|
|
426
|
-
{
|
|
427
|
-
"correct": false,
|
|
428
|
-
"start": 213,
|
|
429
|
-
"end": 222,
|
|
430
|
-
"text": "eradicate"
|
|
431
|
-
},
|
|
432
|
-
{
|
|
433
|
-
"correct": false,
|
|
434
|
-
"start": 223,
|
|
435
|
-
"end": 230,
|
|
436
|
-
"text": "killing"
|
|
437
|
-
},
|
|
438
|
-
{
|
|
439
|
-
"correct": false,
|
|
440
|
-
"start": 231,
|
|
441
|
-
"end": 234,
|
|
442
|
-
"text": "and"
|
|
443
|
-
},
|
|
444
|
-
{
|
|
445
|
-
"correct": false,
|
|
446
|
-
"start": 235,
|
|
447
|
-
"end": 244,
|
|
448
|
-
"text": "crippling"
|
|
449
|
-
},
|
|
450
|
-
{
|
|
451
|
-
"correct": true,
|
|
452
|
-
"start": 245,
|
|
453
|
-
"end": 252,
|
|
454
|
-
"text": "disease"
|
|
455
|
-
},
|
|
456
|
-
{
|
|
457
|
-
"correct": false,
|
|
458
|
-
"start": 253,
|
|
459
|
-
"end": 256,
|
|
460
|
-
"text": "and"
|
|
461
|
-
},
|
|
462
|
-
{
|
|
463
|
-
"correct": false,
|
|
464
|
-
"start": 257,
|
|
465
|
-
"end": 265,
|
|
466
|
-
"text": "lengthen"
|
|
467
|
-
},
|
|
468
|
-
{
|
|
469
|
-
"correct": false,
|
|
470
|
-
"start": 266,
|
|
471
|
-
"end": 269,
|
|
472
|
-
"text": "the"
|
|
473
|
-
},
|
|
474
|
-
{
|
|
475
|
-
"correct": false,
|
|
476
|
-
"start": 270,
|
|
477
|
-
"end": 274,
|
|
478
|
-
"text": "span"
|
|
479
|
-
},
|
|
480
|
-
{
|
|
481
|
-
"correct": false,
|
|
482
|
-
"start": 275,
|
|
483
|
-
"end": 277,
|
|
484
|
-
"text": "of"
|
|
485
|
-
},
|
|
486
|
-
{
|
|
487
|
-
"correct": false,
|
|
488
|
-
"start": 278,
|
|
489
|
-
"end": 282,
|
|
490
|
-
"text": "life"
|
|
491
|
-
},
|
|
492
|
-
{
|
|
493
|
-
"correct": false,
|
|
494
|
-
"start": 283,
|
|
495
|
-
"end": 285,
|
|
496
|
-
"text": "to"
|
|
497
|
-
},
|
|
498
|
-
{
|
|
499
|
-
"correct": false,
|
|
500
|
-
"start": 286,
|
|
501
|
-
"end": 289,
|
|
502
|
-
"text": "100"
|
|
503
|
-
},
|
|
504
|
-
{
|
|
505
|
-
"correct": false,
|
|
506
|
-
"start": 290,
|
|
507
|
-
"end": 292,
|
|
508
|
-
"text": "or"
|
|
509
|
-
},
|
|
510
|
-
{
|
|
511
|
-
"correct": false,
|
|
512
|
-
"start": 293,
|
|
513
|
-
"end": 296,
|
|
514
|
-
"text": "200"
|
|
515
|
-
},
|
|
516
|
-
{
|
|
517
|
-
"correct": false,
|
|
518
|
-
"start": 297,
|
|
519
|
-
"end": 302,
|
|
520
|
-
"text": "years"
|
|
521
|
-
},
|
|
522
|
-
{
|
|
523
|
-
"correct": false,
|
|
524
|
-
"start": 304,
|
|
525
|
-
"end": 306,
|
|
526
|
-
"text": "We"
|
|
527
|
-
},
|
|
528
|
-
{
|
|
529
|
-
"correct": false,
|
|
530
|
-
"start": 307,
|
|
531
|
-
"end": 311,
|
|
532
|
-
"text": "must"
|
|
533
|
-
},
|
|
534
|
-
{
|
|
535
|
-
"correct": false,
|
|
536
|
-
"start": 312,
|
|
537
|
-
"end": 321,
|
|
538
|
-
"text": "eliminate"
|
|
539
|
-
},
|
|
540
|
-
{
|
|
541
|
-
"correct": true,
|
|
542
|
-
"start": 322,
|
|
543
|
-
"end": 332,
|
|
544
|
-
"text": "illiteracy"
|
|
545
|
-
},
|
|
546
|
-
{
|
|
547
|
-
"correct": false,
|
|
548
|
-
"start": 333,
|
|
549
|
-
"end": 338,
|
|
550
|
-
"text": "among"
|
|
551
|
-
},
|
|
552
|
-
{
|
|
553
|
-
"correct": false,
|
|
554
|
-
"start": 339,
|
|
555
|
-
"end": 342,
|
|
556
|
-
"text": "all"
|
|
557
|
-
},
|
|
558
|
-
{
|
|
559
|
-
"correct": false,
|
|
560
|
-
"start": 343,
|
|
561
|
-
"end": 345,
|
|
562
|
-
"text": "of"
|
|
563
|
-
},
|
|
564
|
-
{
|
|
565
|
-
"correct": false,
|
|
566
|
-
"start": 346,
|
|
567
|
-
"end": 349,
|
|
568
|
-
"text": "our"
|
|
569
|
-
},
|
|
570
|
-
{
|
|
571
|
-
"correct": false,
|
|
572
|
-
"start": 350,
|
|
573
|
-
"end": 356,
|
|
574
|
-
"text": "people"
|
|
258
|
+
"start": 1088,
|
|
259
|
+
"end": 1225,
|
|
260
|
+
"text": "Taking a deep breath, Natasha made her graceful, yet powerful approach, mounted the beam flawlessly, and...executed her first perfect 10."
|
|
575
261
|
}
|
|
576
262
|
],
|
|
577
|
-
// "id": "0",
|
|
578
|
-
"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",
|
|
579
|
-
"prompt": "<p>Select the <span class=\"relative-emphasis\">three</span> words from below that specifically describe the “enemies” which Johnson wants to eliminate.</p>",
|
|
580
|
-
"rationale": "<p>In paragraph 6, Johnson refers to the “ancient enemies”—which he defines as poverty, disease, illiteracy, strife, and bigotry. In paragraph 3, he talks about this idea by explaining that he wants to “accomplish objectives which have eluded mankind;” that is, to eliminate these enemies.</p>",
|
|
581
263
|
// "element": "select-text",
|
|
582
|
-
"
|
|
264
|
+
"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–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"
|
|
583
265
|
} ));
|
|
584
266
|
};
|
|
585
267
|
|