@pie-element/number-line 7.3.9-next.2 → 7.4.0
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 +11 -0
- package/configure/CHANGELOG.md +11 -0
- package/configure/lib/defaults.js +4 -2
- package/configure/lib/defaults.js.map +1 -1
- package/configure/lib/main.js +12 -4
- package/configure/lib/main.js.map +1 -1
- package/configure/package.json +1 -1
- package/controller/CHANGELOG.md +11 -0
- package/controller/lib/index.js +40 -15
- package/controller/lib/index.js.map +1 -1
- package/controller/package.json +1 -1
- package/docs/config-schema.json +35 -4
- package/docs/config-schema.json.md +27 -3
- package/docs/pie-schema.json +23 -2
- package/docs/pie-schema.json.md +19 -3
- package/package.json +2 -2
package/CHANGELOG.md
CHANGED
|
@@ -3,6 +3,17 @@
|
|
|
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
|
+
# [7.4.0](https://github.com/pie-framework/pie-elements/compare/@pie-element/number-line@7.3.8...@pie-element/number-line@7.4.0) (2024-01-30)
|
|
7
|
+
|
|
8
|
+
|
|
9
|
+
### Features
|
|
10
|
+
|
|
11
|
+
* **number-line:** Add possibility to mark fields as required PD-3137 and update validation PD-3369 ([30516d6](https://github.com/pie-framework/pie-elements/commit/30516d6cfa863c215b17f9671de64f83eab43269))
|
|
12
|
+
|
|
13
|
+
|
|
14
|
+
|
|
15
|
+
|
|
16
|
+
|
|
6
17
|
## [7.3.8](https://github.com/pie-framework/pie-elements/compare/@pie-element/number-line@7.3.7...@pie-element/number-line@7.3.8) (2024-01-24)
|
|
7
18
|
|
|
8
19
|
|
package/configure/CHANGELOG.md
CHANGED
|
@@ -3,6 +3,17 @@
|
|
|
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.4.0](https://github.com/pie-framework/pie-elements/compare/@pie-element/number-line-configure@6.3.8...@pie-element/number-line-configure@6.4.0) (2024-01-30)
|
|
7
|
+
|
|
8
|
+
|
|
9
|
+
### Features
|
|
10
|
+
|
|
11
|
+
* **number-line:** Add possibility to mark fields as required PD-3137 and update validation PD-3369 ([30516d6](https://github.com/pie-framework/pie-elements/commit/30516d6cfa863c215b17f9671de64f83eab43269))
|
|
12
|
+
|
|
13
|
+
|
|
14
|
+
|
|
15
|
+
|
|
16
|
+
|
|
6
17
|
## [6.3.8](https://github.com/pie-framework/pie-elements/compare/@pie-element/number-line-configure@6.3.7...@pie-element/number-line-configure@6.3.8) (2024-01-24)
|
|
7
18
|
|
|
8
19
|
|
|
@@ -57,11 +57,13 @@ var configuration = {
|
|
|
57
57
|
},
|
|
58
58
|
prompt: {
|
|
59
59
|
settings: true,
|
|
60
|
-
label: 'Item Stem'
|
|
60
|
+
label: 'Item Stem',
|
|
61
|
+
required: false
|
|
61
62
|
},
|
|
62
63
|
teacherInstructions: {
|
|
63
64
|
settings: true,
|
|
64
|
-
label: 'Teacher Instructions'
|
|
65
|
+
label: 'Teacher Instructions',
|
|
66
|
+
required: false
|
|
65
67
|
},
|
|
66
68
|
numberLineDimensions: {
|
|
67
69
|
settings: true,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/defaults.js"],"names":["model","correctResponse","graph","domain","min","max","ticks","minor","major","labelStep","tickIntervalType","tickStep","arrows","left","right","maxNumberOfPoints","width","initialType","exhibitOnly","toolbarEditorPosition","availableTypes","PF","initialElements","widthEnabled","feedback","correct","type","incorrect","partial","configuration","instruction","settings","enabled","label","prompt","teacherInstructions","numberLineDimensions","step","spellCheck","mathMlOptions","mmlOutput","mmlEditing","language","languageChoices","options","maxMaxElements","hidePointConfigButtons","availableTools"],"mappings":";;;;;;AAAO,IAAMA,KAAK,GAAG;AACnBC,EAAAA,eAAe,EAAE,EADE;AAEnBC,EAAAA,KAAK,EAAE;AACLC,IAAAA,MAAM,EAAE;AACNC,MAAAA,GAAG,EAAE,CAAC,CADA;AAENC,MAAAA,GAAG,EAAE;AAFC,KADH;AAKLC,IAAAA,KAAK,EAAE;AACLC,MAAAA,KAAK,EAAE,KADF;AAELC,MAAAA,KAAK,EAAE,GAFF;AAGLC,MAAAA,SAAS,EAAE,KAHN;AAILC,MAAAA,gBAAgB,EAAE,SAJb;AAKLC,MAAAA,QAAQ,EAAE;AALL,KALF;AAYLC,IAAAA,MAAM,EAAE;AACNC,MAAAA,IAAI,EAAE,IADA;AAENC,MAAAA,KAAK,EAAE;AAFD,KAZH;AAgBLC,IAAAA,iBAAiB,EAAE,CAhBd;AAiBLC,IAAAA,KAAK,EAAE,GAjBF;AAkBLC,IAAAA,WAAW,EAAE,IAlBR;AAmBLC,IAAAA,WAAW,EAAE,KAnBR;AAoBLC,IAAAA,qBAAqB,EAAE,QApBlB;AAqBLC,IAAAA,cAAc,EAAE;AACdC,MAAAA,EAAE,EAAE;AADU,KArBX;AAwBLC,IAAAA,eAAe,EAAE;AAxBZ,GAFY;AA4BnBC,EAAAA,YAAY,EAAE,IA5BK;AA6BnBC,EAAAA,QAAQ,EAAE;AACRC,IAAAA,OAAO,EAAE;AACP,iBAAS,SADF;AAEPC,MAAAA,IAAI,EAAE;AAFC,KADD;AAKRC,IAAAA,SAAS,EAAE;AACT,iBAAS,WADA;AAETD,MAAAA,IAAI,EAAE;AAFG,KALH;AASRE,IAAAA,OAAO,EAAE;AACP,iBAAS,QADF;AAEPF,MAAAA,IAAI,EAAE;AAFC;AATD;AA7BS,CAAd;;AA6CA,IAAMG,aAAa,GAAG;AAC3BC,EAAAA,WAAW,EAAE;AACXC,IAAAA,QAAQ,EAAE,KADC;AAEXC,IAAAA,OAAO,EAAE,IAFE;AAGXC,IAAAA,KAAK,EACH;AAJS,GADc;AAO3BC,EAAAA,MAAM,EAAE;AACNH,IAAAA,QAAQ,EAAE,IADJ;AAENE,IAAAA,KAAK,EAAE;
|
|
1
|
+
{"version":3,"sources":["../src/defaults.js"],"names":["model","correctResponse","graph","domain","min","max","ticks","minor","major","labelStep","tickIntervalType","tickStep","arrows","left","right","maxNumberOfPoints","width","initialType","exhibitOnly","toolbarEditorPosition","availableTypes","PF","initialElements","widthEnabled","feedback","correct","type","incorrect","partial","configuration","instruction","settings","enabled","label","prompt","required","teacherInstructions","numberLineDimensions","step","spellCheck","mathMlOptions","mmlOutput","mmlEditing","language","languageChoices","options","maxMaxElements","hidePointConfigButtons","availableTools"],"mappings":"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","sourcesContent":["export const model = {\n correctResponse: [],\n graph: {\n domain: {\n min: -1,\n max: 1,\n },\n ticks: {\n minor: 0.125,\n major: 0.5,\n labelStep: '1/2',\n tickIntervalType: 'Decimal',\n tickStep: '1/8',\n },\n arrows: {\n left: true,\n right: true,\n },\n maxNumberOfPoints: 1,\n width: 500,\n initialType: 'PF',\n exhibitOnly: false,\n toolbarEditorPosition: 'bottom',\n availableTypes: {\n PF: true,\n },\n initialElements: [],\n },\n widthEnabled: true,\n feedback: {\n correct: {\n default: 'Correct',\n type: 'none',\n },\n incorrect: {\n default: 'Incorrect',\n type: 'none',\n },\n partial: {\n default: 'Nearly',\n type: 'none',\n },\n },\n};\n\nexport const configuration = {\n instruction: {\n settings: false,\n enabled: true,\n label:\n 'Number line questions involve plotting points or other objects. To create one, first set up the number line, then select the plotting tools students will be offered and use them to define the correct answer.',\n },\n prompt: {\n settings: true,\n label: 'Item Stem',\n required: false,\n },\n teacherInstructions: {\n settings: true,\n label: 'Teacher Instructions',\n required: false,\n },\n numberLineDimensions: {\n settings: true,\n label: 'Width',\n enabled: true,\n min: 200,\n max: 800,\n step: 20,\n },\n spellCheck: {\n label: 'Spellcheck',\n settings: false,\n enabled: true,\n },\n mathMlOptions: {\n mmlOutput: false,\n mmlEditing: false,\n },\n language: {\n settings: false,\n label: 'Specify Language',\n enabled: false,\n },\n languageChoices: {\n label: 'Language Choices',\n options: [],\n },\n maxMaxElements: 20,\n hidePointConfigButtons: false,\n availableTools: ['PF', 'LFF', 'LEF', 'LFE', 'LEE', 'RFN', 'RFP', 'REN', 'REP'],\n};\n"],"file":"defaults.js"}
|
package/configure/lib/main.js
CHANGED
|
@@ -613,11 +613,13 @@ var Main = /*#__PURE__*/function (_React$Component) {
|
|
|
613
613
|
correctAnswerDialog = _this$state.correctAnswerDialog;
|
|
614
614
|
|
|
615
615
|
var _ref10 = errors || {},
|
|
616
|
-
|
|
616
|
+
correctResponseError = _ref10.correctResponseError,
|
|
617
617
|
domainError = _ref10.domainError,
|
|
618
618
|
maxError = _ref10.maxError,
|
|
619
619
|
pointsError = _ref10.pointsError,
|
|
620
|
-
|
|
620
|
+
promptError = _ref10.prompt,
|
|
621
|
+
teacherInstructionsError = _ref10.teacherInstructions,
|
|
622
|
+
widthError = _ref10.widthError;
|
|
621
623
|
|
|
622
624
|
var validationMessage = (0, _utils.generateValidationMessage)();
|
|
623
625
|
var correctResponse = (0, _cloneDeep["default"])(model.correctResponse || []).map(toGraphFormat);
|
|
@@ -647,6 +649,7 @@ var Main = /*#__PURE__*/function (_React$Component) {
|
|
|
647
649
|
},
|
|
648
650
|
nonEmpty: false,
|
|
649
651
|
disableUnderline: true,
|
|
652
|
+
error: teacherInstructionsError,
|
|
650
653
|
toolbarOpts: toolbarOpts,
|
|
651
654
|
spellCheck: spellCheckEnabled,
|
|
652
655
|
uploadSoundSupport: uploadSoundSupport,
|
|
@@ -656,7 +659,9 @@ var Main = /*#__PURE__*/function (_React$Component) {
|
|
|
656
659
|
language: 'special'
|
|
657
660
|
}],
|
|
658
661
|
mathMlOptions: mathMlOptions
|
|
659
|
-
})
|
|
662
|
+
}), teacherInstructionsError && /*#__PURE__*/_react["default"].createElement("div", {
|
|
663
|
+
className: classes.errorText
|
|
664
|
+
}, teacherInstructionsError)), prompt.settings && /*#__PURE__*/_react["default"].createElement(_configUi.InputContainer, {
|
|
660
665
|
label: prompt.label,
|
|
661
666
|
className: classes.promptContainer
|
|
662
667
|
}, /*#__PURE__*/_react["default"].createElement(_editableHtml.EditableHtml, {
|
|
@@ -669,6 +674,7 @@ var Main = /*#__PURE__*/function (_React$Component) {
|
|
|
669
674
|
},
|
|
670
675
|
nonEmpty: false,
|
|
671
676
|
disableUnderline: true,
|
|
677
|
+
error: promptError,
|
|
672
678
|
toolbarOpts: toolbarOpts,
|
|
673
679
|
spellCheck: spellCheckEnabled,
|
|
674
680
|
uploadSoundSupport: uploadSoundSupport,
|
|
@@ -678,7 +684,9 @@ var Main = /*#__PURE__*/function (_React$Component) {
|
|
|
678
684
|
language: 'special'
|
|
679
685
|
}],
|
|
680
686
|
mathMlOptions: mathMlOptions
|
|
681
|
-
})
|
|
687
|
+
}), promptError && /*#__PURE__*/_react["default"].createElement("div", {
|
|
688
|
+
className: classes.errorText
|
|
689
|
+
}, promptError)), /*#__PURE__*/_react["default"].createElement(_cardBar["default"], {
|
|
682
690
|
header: "Set Up Number Line",
|
|
683
691
|
info: /*#__PURE__*/_react["default"].createElement(_Tooltip["default"], {
|
|
684
692
|
classes: {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/main.jsx"],"names":["trimModel","model","feedback","undefined","prompt","teacherInstructions","graph","title","disabled","correctResponse","ticksModel","tickIntervalType","integerTick","fractionTick","decimalTick","fractionLabel","decimalLabel","data","minorLimits","minorValues","majorValues","lineIsSwitched","dataConverter","switchGraphLine","toGraphFormat","toSessionFormat","styles","theme","maxNumberOfPoints","width","checkbox","marginTop","spacing","unit","marginBottom","row","display","flexWrap","paddingRight","pointTypeChooser","margin","promptContainer","paddingTop","tooltip","fontSize","typography","whiteSpace","maxWidth","inlineFlexContainer","resetButton","errorText","color","palette","error","main","flexRow","alignItems","gap","description","toPointType","response","rest","pointType","direction","leftPoint","rightPoint","type","toUpperCase","Main","props","obj","onChange","respIndex","forEach","correctResp","key","domainPosition","domain","min","max","size","push","length","setState","correctAnswerDialog","open","text","indices","reloadTicksData","ticks","assignTicksModelToGraph","height","graphChange","tickUtils","getMinorLimits","generateMinorValues","initTickModel","minor","decimal","fraction","math","number","indexOf","Number","isInteger","firstInteger","find","el","index","reduce","a","b","Math","abs","ceil","generateMajorValuesForMinor","major","currIndex","ticksData","out","buildTickData","filter","x","tickStep","labelStep","availableTypes","onlyPFAvailable","Object","entries","value","e","floor","isAvailableTypesGreaterThanMaxElements","dialog","getAdjustedHeight","maxElements","availableTypeCount","object","snapElements","initialElements","arrows","defaultModel","position","update","Set","map","v","some","d","pop","state","classes","configuration","uploadSoundSupport","contentDimensions","instruction","mathMlOptions","numberLineDimensions","maxMaxElements","hidePointConfigButtons","availableTools","errors","spellCheckEnabled","toolbarEditorPosition","widthError","domainError","maxError","pointsError","correctResponseError","validationMessage","initialModel","toolbarOpts","label","settings","language","marginLeft","changeTicks","widthEnabled","step","changeSize","changeArrows","changeGraphTitle","exhibitOnly","availableTypesChange","changeMaxNoOfPoints","moveCorrectResponse","deleteCorrectResponse","addCorrectResponse","clearCorrectResponse","undoCorrectResponse","React","Component","PropTypes","isRequired","func","name"],"mappings":"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","sourcesContent":["import React from 'react';\nimport { FormSection, InputContainer, AlertDialog, layout } from '@pie-lib/pie-toolbox/config-ui';\nimport { EditableHtml } from '@pie-lib/pie-toolbox/editable-html';\nimport { NumberLineComponent, dataConverter, tickUtils } from '@pie-element/number-line';\nimport NumberTextField from './number-text-field';\nimport CardBar from './card-bar';\nimport Size from './size';\nimport PropTypes from 'prop-types';\nimport Domain from './domain';\nimport Arrows from './arrows';\nimport PointConfig from './point-config';\nimport cloneDeep from 'lodash/cloneDeep';\nimport { withStyles } from '@material-ui/core/styles';\nimport Typography from '@material-ui/core/Typography';\nimport Info from '@material-ui/icons/Info';\nimport Tooltip from '@material-ui/core/Tooltip';\nimport * as math from 'mathjs';\nimport Ticks from './ticks';\nimport { model as defaultModel } from './defaults';\nimport { generateValidationMessage } from './utils';\n\nconst trimModel = (model) => ({\n ...model,\n feedback: undefined,\n prompt: undefined,\n teacherInstructions: undefined,\n graph: { ...model.graph, title: undefined, disabled: true },\n correctResponse: undefined,\n});\n\n// Object holding information related to tick and label interval values.\nlet ticksModel = {\n tickIntervalType: 'Decimal',\n integerTick: 0,\n fractionTick: '0/1',\n decimalTick: 0,\n fractionLabel: '0/1',\n decimalLabel: 0,\n};\n// Object holding data related to possible values for ticks and label interval in array.\nlet data = {\n minorLimits: {},\n minorValues: {},\n majorValues: {},\n};\n\nconst { lineIsSwitched, switchGraphLine, toGraphFormat, toSessionFormat } = dataConverter;\n\nconst styles = (theme) => ({\n maxNumberOfPoints: {\n width: '150px',\n },\n checkbox: {\n marginTop: theme.spacing.unit * 2,\n marginBottom: theme.spacing.unit * 2,\n },\n row: {\n display: 'flex',\n flexWrap: 'wrap',\n '& > *': {\n paddingRight: theme.spacing.unit * 2,\n },\n },\n pointTypeChooser: {\n margin: `${theme.spacing.unit * 2.5}px 0`,\n },\n promptContainer: {\n paddingTop: theme.spacing.unit * 2,\n marginBottom: theme.spacing.unit * 2,\n width: '100%',\n },\n title: {\n marginBottom: theme.spacing.unit * 4,\n },\n tooltip: {\n fontSize: theme.typography.fontSize - 2,\n whiteSpace: 'pre',\n maxWidth: '500px',\n },\n inlineFlexContainer: {\n display: 'inline-flex',\n },\n resetButton: {\n marginBottom: theme.spacing.unit * 2.5,\n },\n errorText: {\n fontSize: theme.typography.fontSize - 2,\n color: theme.palette.error.main,\n paddingTop: theme.spacing.unit,\n },\n flexRow: {\n display: 'flex',\n alignItems: 'center',\n gap: '10px',\n },\n description: {\n marginBottom: theme.spacing.unit * 2.5,\n },\n});\n\nexport const toPointType = (response) => {\n function rest(response) {\n if (response.pointType) {\n if (response.direction) {\n return `${response.pointType[0]}${response.direction[0]}`;\n }\n\n return response.pointType[0];\n }\n\n return `${response.leftPoint[0]}${response.rightPoint[0]}`;\n }\n\n return `${response.type[0]}${rest(response)}`.toUpperCase();\n};\n\nexport class Main extends React.Component {\n static propTypes = {\n classes: PropTypes.object.isRequired,\n model: PropTypes.object.isRequired,\n configuration: PropTypes.object.isRequired,\n onChange: PropTypes.func.isRequired,\n uploadSoundSupport: PropTypes.object.isRequired,\n };\n\n constructor(props) {\n super(props);\n const {\n model: {\n graph: { availableTypes, maxNumberOfPoints },\n },\n } = props;\n const height = this.getAdjustedHeight(availableTypes, maxNumberOfPoints);\n this.state = {\n dialog: {\n open: false,\n text: '',\n },\n correctAnswerDialog: {\n open: false,\n text: '',\n },\n };\n this.graphChange({ height });\n }\n\n graphChange = (obj) => {\n const { model, onChange } = this.props;\n const graph = { ...model.graph, ...obj };\n let respIndex = [];\n model.correctResponse.forEach((correctResp, key) => {\n if (\n correctResp.domainPosition < graph.domain.min ||\n correctResp.domainPosition > graph.domain.max ||\n (correctResp.size &&\n (correctResp.domainPosition + correctResp.size < graph.domain.min ||\n correctResp.domainPosition + correctResp.size > graph.domain.max))\n ) {\n respIndex.push(key);\n }\n });\n if (respIndex.length > 0) {\n this.setState({\n correctAnswerDialog: {\n open: true,\n text:\n 'This\\n' +\n 'change would make it impossible for students to plot one or more elements in the current\\n' +\n 'correct answer. If you proceed, all such elements will be removed from the correct\\n' +\n 'answer.',\n indices: respIndex,\n graph: model.graph,\n },\n });\n }\n this.reloadTicksData(graph.domain, graph.width, graph.ticks);\n this.assignTicksModelToGraph(graph);\n onChange({ graph });\n };\n\n changeSize = ({ width, height }) => this.graphChange({ width, height });\n\n /*\n * This function gets called whenever the min, max or width for number line is changed\n * and it calculates ticks and label values and stores in ticks model.\n * @param domain containing min and max values.\n * @param width represents number line width\n * @param ticks represnt current values for minor and major.\n * */\n reloadTicksData = (domain, width, ticks) => {\n //check correct response\n const { model } = this.props;\n const graph = { ...model.graph };\n\n data.minorLimits = tickUtils.getMinorLimits(domain, width);\n data.minorValues = tickUtils.generateMinorValues(data.minorLimits);\n data.majorValues = {};\n const initTickModel = () => {\n if (ticks.tickIntervalType) ticksModel.tickIntervalType = ticks.tickIntervalType;\n //setting minor values\n if (ticks.minor < data.minorLimits.min || ticks.minor > data.minorLimits.max) {\n ticksModel.decimalTick = data.minorValues.decimal[0];\n ticksModel.fractionTick = data.minorValues.fraction[0];\n } else {\n ticksModel.decimalTick = math.number(ticks.minor);\n ticksModel.fractionTick = data.minorValues.fraction[data.minorValues.decimal.indexOf(ticksModel.decimalTick)];\n }\n if (Number.isInteger(ticksModel.decimalTick)) {\n ticksModel.integerTick = math.number(ticksModel.decimalTick);\n } else {\n const firstInteger = data.minorValues.decimal.find(function (el) {\n return Number.isInteger(el);\n });\n if (firstInteger) {\n const index = data.minorValues.decimal.indexOf(firstInteger);\n ticksModel.integerTick = math.number(firstInteger);\n if (ticksModel.tickIntervalType === 'Integer') {\n ticksModel.fractionTick = data.minorValues.fraction[index];\n ticksModel.decimalTick = data.minorValues.decimal[index];\n }\n } else {\n if (ticksModel.tickIntervalType === 'Integer') {\n ticksModel.tickIntervalType = 'Fraction';\n ticksModel.decimalTick = data.minorValues.decimal[data.minorValues.decimal.length - 1];\n ticksModel.fractionTick = data.minorValues.fraction[data.minorValues.fraction.length - 1];\n }\n ticksModel.integerTick = data.minorValues.decimal.reduce((a, b) => {\n return Math.abs(b - ticksModel.decimalTick) < Math.abs(a - ticksModel.decimalTick) ? b : a;\n });\n if (!Number.isInteger(ticksModel.integerTick)) {\n ticksModel.integerTick = math.ceil(ticksModel.integerTick);\n }\n }\n }\n //setting major values\n data.majorValues = tickUtils.generateMajorValuesForMinor(ticksModel.decimalTick, data.minorValues);\n if (!ticks.major) {\n ticksModel.decimalLabel = data.majorValues.decimal[0];\n ticksModel.fractionLabel = data.majorValues.fraction[0];\n } else {\n ticksModel.decimalLabel = math.number(ticks.major);\n if (data.majorValues.decimal.indexOf(ticksModel.decimalLabel) === -1) {\n let currIndex = 0;\n if (ticksModel.tickIntervalType === 'Integer') {\n currIndex = 4;\n } else {\n currIndex = data.majorValues.decimal.length - 1;\n }\n while (currIndex !== 0) {\n let ticksData = { minor: ticksModel.decimalTick, major: data.majorValues.decimal[currIndex] };\n let out = tickUtils.buildTickData(domain, width, ticksData, { fraction: undefined });\n if (out.filter((x) => x.type === 'major').length > 1) {\n break;\n } else {\n currIndex = currIndex - 1;\n }\n }\n ticksModel.decimalLabel = data.majorValues.decimal[currIndex];\n ticksModel.fractionLabel = data.majorValues.fraction[currIndex];\n } else {\n ticksModel.fractionLabel =\n data.majorValues.fraction[data.majorValues.decimal.indexOf(ticksModel.decimalLabel)];\n }\n }\n };\n initTickModel();\n };\n\n /*\n * This function updates calculated ticks values to graph model.\n * @param graph object\n * */\n assignTicksModelToGraph = (graph) => {\n graph.ticks.minor = ticksModel.decimalTick;\n graph.ticks.major = ticksModel.decimalLabel;\n graph.ticks.tickIntervalType = ticksModel.tickIntervalType;\n graph.ticks.tickStep = ticksModel.fractionTick;\n graph.ticks.labelStep = ticksModel.fractionLabel;\n };\n\n getAdjustedHeight = (availableTypes, maxNumberOfPoints) => {\n let onlyPFAvailable = true;\n Object.entries(availableTypes || {}).forEach(([type, value]) => {\n if (type !== 'PF' && value) {\n onlyPFAvailable = false;\n return;\n }\n });\n return maxNumberOfPoints && (maxNumberOfPoints === 1 || onlyPFAvailable)\n ? 100\n : 50 + (maxNumberOfPoints || 20) * 25;\n };\n\n changeMaxNoOfPoints = (e, maxNumberOfPoints) => {\n maxNumberOfPoints = Math.floor(maxNumberOfPoints);\n if (this.isAvailableTypesGreaterThanMaxElements(this.props.model.graph.availableTypes, maxNumberOfPoints)) {\n this.setState({\n dialog: {\n open: true,\n text: 'To use this value, you must first remove one or more elements from the available types.',\n },\n });\n return;\n }\n if (this.props.model.correctResponse.length > maxNumberOfPoints) {\n this.setState({\n dialog: {\n open: true,\n text: 'To use this value, you must first remove one or more elements from the correct answers.',\n },\n });\n return;\n }\n const {\n model: {\n graph: { availableTypes },\n },\n } = this.props;\n const height = this.getAdjustedHeight(availableTypes, maxNumberOfPoints);\n\n this.graphChange({ maxNumberOfPoints, height });\n };\n\n /*\n * Validation check on wether available type of dot plot is greater than max elements allowed to plot.\n * @param availableTypes array of string.\n * @param maxElements number of max elements to use set by user.\n * @return boolean.\n * */\n isAvailableTypesGreaterThanMaxElements = (availableTypes, maxElements) => {\n let availableTypeCount = 0;\n Object.entries(availableTypes || {}).forEach(([type, value]) => {\n if (value) {\n availableTypeCount = availableTypeCount + 1;\n }\n });\n return availableTypeCount > maxElements;\n };\n\n changeGraphTitle = (title) => this.graphChange({ title });\n\n /*\n * Gets triggered whenever ticks related data is changed by user.\n * */\n changeTicks = (object) => {\n const { model, onChange } = this.props;\n const { ticks } = model.graph;\n ticks.minor = object.ticksModel.decimalTick;\n ticks.major = object.ticksModel.decimalLabel;\n ticks.tickIntervalType = object.ticksModel.tickIntervalType;\n ticks.tickStep = object.ticksModel.fractionTick;\n ticks.labelStep = object.ticksModel.fractionLabel;\n const correctResponse = tickUtils.snapElements(model.graph.domain, ticks, model.correctResponse);\n const initialElements = tickUtils.snapElements(model.graph.domain, ticks, model.graph.initialElements);\n const graph = { ...model.graph, ticks, initialElements };\n this.reloadTicksData(graph.domain, graph.width, graph.ticks);\n this.assignTicksModelToGraph(graph);\n onChange({ graph, correctResponse });\n };\n\n changeArrows = (arrows) => this.graphChange({ arrows });\n\n setDefaults = () => {\n const {\n graph: { availableTypes, maxNumberOfPoints },\n } = defaultModel;\n const height = this.getAdjustedHeight(availableTypes, maxNumberOfPoints);\n const graph = { ...cloneDeep(defaultModel.graph), height };\n\n this.props.onChange({ graph });\n };\n\n moveCorrectResponse = (index, el, position) => {\n el.position = position;\n\n const { onChange, model } = this.props;\n const update = toSessionFormat(el.type === 'line' && lineIsSwitched(el) ? switchGraphLine(el) : el);\n const correctResponse = [...model.correctResponse];\n correctResponse[index] = update;\n\n onChange({ correctResponse });\n };\n\n availableTypesChange = (availableTypes) => {\n const { model, onChange } = this.props;\n const {\n correctResponse,\n graph: { maxNumberOfPoints },\n } = model;\n\n let availableTypeCount = 0;\n Object.entries(availableTypes || {}).forEach(([type, value]) => {\n if (value) {\n availableTypeCount = availableTypeCount + 1;\n }\n });\n if (maxNumberOfPoints < availableTypeCount) {\n this.props.model.graph.maxNumberOfPoints = availableTypeCount;\n }\n\n new Set(correctResponse.map(toPointType)).forEach((pointType) => {\n availableTypes[pointType] = true;\n });\n\n const height = this.getAdjustedHeight(availableTypes, this.props.model.graph.maxNumberOfPoints);\n const graph = { ...model.graph, availableTypes, height };\n\n onChange({ graph });\n };\n\n deleteCorrectResponse = (indices) => {\n const { model, onChange } = this.props;\n const correctResponse = model.correctResponse.filter((v, index) => !indices.some((d) => d === index));\n\n onChange({ correctResponse });\n };\n\n addCorrectResponse = (data) => {\n const { model, onChange } = this.props;\n const correctResponse = [...model.correctResponse];\n correctResponse.push(toSessionFormat(data));\n\n onChange({ correctResponse });\n };\n\n clearCorrectResponse = () => {\n const { onChange } = this.props;\n\n onChange({ correctResponse: [] });\n };\n\n undoCorrectResponse = () => {\n const { model, onChange } = this.props;\n const correctResponse = [...model.correctResponse];\n correctResponse.pop();\n onChange({ correctResponse });\n };\n\n render() {\n const { classes, model, onChange, configuration, uploadSoundSupport } = this.props;\n const {\n contentDimensions = {},\n instruction = {},\n teacherInstructions = {},\n prompt = {},\n mathMlOptions = {},\n numberLineDimensions = {},\n maxMaxElements = 20,\n hidePointConfigButtons = false,\n availableTools = ['PF'],\n } = configuration || {};\n const { errors = {}, graph, spellCheckEnabled, toolbarEditorPosition } = model || {};\n this.reloadTicksData(graph.domain, graph.width, graph.ticks);\n const { dialog, correctAnswerDialog } = this.state;\n\n const { widthError, domainError, maxError, pointsError, correctResponseError } = errors || {};\n const validationMessage = generateValidationMessage();\n\n const correctResponse = cloneDeep(model.correctResponse || []).map(toGraphFormat);\n\n const initialModel = cloneDeep(model);\n initialModel['disabled'] = true;\n\n const toolbarOpts = {\n position: toolbarEditorPosition === 'top' ? 'top' : 'bottom',\n };\n\n return (\n <layout.ConfigLayout dimensions={contentDimensions} hideSettings={true} settings={null}>\n <Typography component=\"div\" type=\"body1\" className={classes.description}>\n {instruction.label}\n </Typography>\n\n {teacherInstructions.settings && (\n <InputContainer label={teacherInstructions.label} className={classes.promptContainer}>\n <EditableHtml\n className={classes.teacherInstructions}\n markup={model.teacherInstructions}\n onChange={(teacherInstructions) => onChange({ teacherInstructions })}\n nonEmpty={false}\n disableUnderline\n toolbarOpts={toolbarOpts}\n spellCheck={spellCheckEnabled}\n uploadSoundSupport={uploadSoundSupport}\n languageCharactersProps={[{ language: 'spanish' }, { language: 'special' }]}\n mathMlOptions={mathMlOptions}\n />\n </InputContainer>\n )}\n\n {prompt.settings && (\n <InputContainer label={prompt.label} className={classes.promptContainer}>\n <EditableHtml\n className={classes.prompt}\n markup={model.prompt}\n onChange={(prompt) => onChange({ prompt })}\n nonEmpty={false}\n disableUnderline\n toolbarOpts={toolbarOpts}\n spellCheck={spellCheckEnabled}\n uploadSoundSupport={uploadSoundSupport}\n languageCharactersProps={[{ language: 'spanish' }, { language: 'special' }]}\n mathMlOptions={mathMlOptions}\n />\n </InputContainer>\n )}\n\n <CardBar\n header=\"Set Up Number Line\"\n info={\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={{ marginLeft: '8px' }} />\n </Tooltip>\n }\n >\n Set up the number line by entering the domain and number of tick marks to display. Labels on the number line\n can be edited or removed by clicking on the label.\n </CardBar>\n\n <div className={classes.row}>\n <Domain domain={graph.domain} errors={errors} onChange={(domain) => this.graphChange({ domain })} />\n </div>\n\n {maxError && <div className={classes.errorText}>{maxError}</div>}\n {domainError && <div className={classes.errorText}>{domainError}</div>}\n\n <div>\n <FormSection>\n <Ticks ticksModel={ticksModel} data={data} onChange={this.changeTicks} />\n </FormSection>\n </div>\n\n <div className={classes.flexRow}>\n {model.widthEnabled && (\n <Size\n size={graph}\n min={numberLineDimensions.min}\n max={numberLineDimensions.max}\n step={numberLineDimensions.step}\n onChange={this.changeSize}\n />\n )}\n <div></div>\n <Arrows arrows={graph.arrows} onChange={this.changeArrows} />\n </div>\n\n {widthError && <div className={classes.errorText}>{widthError}</div>}\n\n <NumberLineComponent\n onMoveElement={() => {}}\n onDeleteElements={() => {}}\n onAddElement={() => {}}\n onClearElements={() => {}}\n onUndoElement={() => {}}\n minWidth={numberLineDimensions.min}\n maxWidth={numberLineDimensions.max}\n model={trimModel(initialModel)}\n />\n\n <FormSection label={'Title'} className={classes.title}>\n <EditableHtml\n markup={graph.title || ''}\n onChange={this.changeGraphTitle}\n toolbarOpts={toolbarOpts}\n activePlugins={[\n 'bold',\n 'html',\n 'italic',\n 'underline',\n 'strikethrough',\n 'image',\n 'math',\n 'languageCharacters',\n 'responseArea',\n ]}\n spellCheck={spellCheckEnabled}\n uploadSoundSupport={uploadSoundSupport}\n languageCharactersProps={[{ language: 'spanish' }, { language: 'special' }]}\n mathMlOptions={mathMlOptions}\n />\n </FormSection>\n\n {!graph.exhibitOnly && (\n <React.Fragment>\n <CardBar header=\"Define Tool Set and Correct Response\">\n Select answer type and place it on the number line. Intersecting points, line segments and/or rays will\n appear above the number line. <i>Note: A maximum of 20 points, line segments or rays may be plotted.</i>\n </CardBar>\n\n <CardBar header=\"Available Tools\" mini>\n Click on the input options to be displayed to the students. All inputs will display by default.\n </CardBar>\n\n <div className={classes.pointTypeChooser}>\n <PointConfig\n onSelectionChange={this.availableTypesChange}\n selection={graph.availableTypes}\n availableTools={availableTools}\n hideButtons={hidePointConfigButtons}\n />\n </div>\n\n <FormSection className={classes.flexRow}>\n <label>Max No of Elements</label>\n <NumberTextField\n className={classes.maxNumberOfPoints}\n min={1}\n max={maxMaxElements}\n onlyIntegersAllowed={true}\n value={graph.maxNumberOfPoints}\n onChange={this.changeMaxNoOfPoints}\n />\n {pointsError && <div className={classes.errorText}>{pointsError}</div>}\n </FormSection>\n\n <label>Correct Answer</label>\n\n <NumberLineComponent\n onMoveElement={this.moveCorrectResponse}\n onDeleteElements={this.deleteCorrectResponse}\n onAddElement={this.addCorrectResponse}\n onClearElements={this.clearCorrectResponse}\n onUndoElement={this.undoCorrectResponse}\n minWidth={numberLineDimensions.min}\n maxWidth={numberLineDimensions.max}\n answer={correctResponse}\n //strip feedback for this model\n model={trimModel(model)}\n />\n {correctResponseError && <div className={classes.errorText}>{correctResponseError}</div>}\n </React.Fragment>\n )}\n <AlertDialog\n open={dialog.open}\n title=\"Warning\"\n text={dialog.text}\n onConfirm={() => this.setState({ dialog: { open: false } })}\n />\n <AlertDialog\n open={correctAnswerDialog.open}\n title=\"Warning\"\n text={correctAnswerDialog.text}\n onConfirm={() => {\n let indices = this.state.correctAnswerDialog.indices;\n if (indices && indices.length > 0) {\n this.deleteCorrectResponse(indices);\n }\n this.setState({ correctAnswerDialog: { open: false } });\n }}\n onClose={() => {\n const graph = this.state.correctAnswerDialog.graph;\n this.reloadTicksData(graph.domain, graph.width, graph.ticks);\n this.assignTicksModelToGraph(graph);\n onChange({ graph });\n this.setState({ correctAnswerDialog: { open: false } });\n }}\n onConfirmText={'OK'}\n onCloseText={'Cancel'}\n />\n </layout.ConfigLayout>\n );\n }\n}\n\nexport default withStyles(styles, { name: 'Main' })(Main);\n"],"file":"main.js"}
|
|
1
|
+
{"version":3,"sources":["../src/main.jsx"],"names":["trimModel","model","feedback","undefined","prompt","teacherInstructions","graph","title","disabled","correctResponse","ticksModel","tickIntervalType","integerTick","fractionTick","decimalTick","fractionLabel","decimalLabel","data","minorLimits","minorValues","majorValues","lineIsSwitched","dataConverter","switchGraphLine","toGraphFormat","toSessionFormat","styles","theme","maxNumberOfPoints","width","checkbox","marginTop","spacing","unit","marginBottom","row","display","flexWrap","paddingRight","pointTypeChooser","margin","promptContainer","paddingTop","tooltip","fontSize","typography","whiteSpace","maxWidth","inlineFlexContainer","resetButton","errorText","color","palette","error","main","flexRow","alignItems","gap","description","toPointType","response","rest","pointType","direction","leftPoint","rightPoint","type","toUpperCase","Main","props","obj","onChange","respIndex","forEach","correctResp","key","domainPosition","domain","min","max","size","push","length","setState","correctAnswerDialog","open","text","indices","reloadTicksData","ticks","assignTicksModelToGraph","height","graphChange","tickUtils","getMinorLimits","generateMinorValues","initTickModel","minor","decimal","fraction","math","number","indexOf","Number","isInteger","firstInteger","find","el","index","reduce","a","b","Math","abs","ceil","generateMajorValuesForMinor","major","currIndex","ticksData","out","buildTickData","filter","x","tickStep","labelStep","availableTypes","onlyPFAvailable","Object","entries","value","e","floor","isAvailableTypesGreaterThanMaxElements","dialog","getAdjustedHeight","maxElements","availableTypeCount","object","snapElements","initialElements","arrows","defaultModel","position","update","Set","map","v","some","d","pop","state","classes","configuration","uploadSoundSupport","contentDimensions","instruction","mathMlOptions","numberLineDimensions","maxMaxElements","hidePointConfigButtons","availableTools","errors","spellCheckEnabled","toolbarEditorPosition","correctResponseError","domainError","maxError","pointsError","promptError","teacherInstructionsError","widthError","validationMessage","initialModel","toolbarOpts","label","settings","language","marginLeft","changeTicks","widthEnabled","step","changeSize","changeArrows","changeGraphTitle","exhibitOnly","availableTypesChange","changeMaxNoOfPoints","moveCorrectResponse","deleteCorrectResponse","addCorrectResponse","clearCorrectResponse","undoCorrectResponse","React","Component","PropTypes","isRequired","func","name"],"mappings":"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","sourcesContent":["import React from 'react';\nimport { FormSection, InputContainer, AlertDialog, layout } from '@pie-lib/pie-toolbox/config-ui';\nimport { EditableHtml } from '@pie-lib/pie-toolbox/editable-html';\nimport { NumberLineComponent, dataConverter, tickUtils } from '@pie-element/number-line';\nimport NumberTextField from './number-text-field';\nimport CardBar from './card-bar';\nimport Size from './size';\nimport PropTypes from 'prop-types';\nimport Domain from './domain';\nimport Arrows from './arrows';\nimport PointConfig from './point-config';\nimport cloneDeep from 'lodash/cloneDeep';\nimport { withStyles } from '@material-ui/core/styles';\nimport Typography from '@material-ui/core/Typography';\nimport Info from '@material-ui/icons/Info';\nimport Tooltip from '@material-ui/core/Tooltip';\nimport * as math from 'mathjs';\nimport Ticks from './ticks';\nimport { model as defaultModel } from './defaults';\nimport { generateValidationMessage } from './utils';\n\nconst trimModel = (model) => ({\n ...model,\n feedback: undefined,\n prompt: undefined,\n teacherInstructions: undefined,\n graph: { ...model.graph, title: undefined, disabled: true },\n correctResponse: undefined,\n});\n\n// Object holding information related to tick and label interval values.\nlet ticksModel = {\n tickIntervalType: 'Decimal',\n integerTick: 0,\n fractionTick: '0/1',\n decimalTick: 0,\n fractionLabel: '0/1',\n decimalLabel: 0,\n};\n// Object holding data related to possible values for ticks and label interval in array.\nlet data = {\n minorLimits: {},\n minorValues: {},\n majorValues: {},\n};\n\nconst { lineIsSwitched, switchGraphLine, toGraphFormat, toSessionFormat } = dataConverter;\n\nconst styles = (theme) => ({\n maxNumberOfPoints: {\n width: '150px',\n },\n checkbox: {\n marginTop: theme.spacing.unit * 2,\n marginBottom: theme.spacing.unit * 2,\n },\n row: {\n display: 'flex',\n flexWrap: 'wrap',\n '& > *': {\n paddingRight: theme.spacing.unit * 2,\n },\n },\n pointTypeChooser: {\n margin: `${theme.spacing.unit * 2.5}px 0`,\n },\n promptContainer: {\n paddingTop: theme.spacing.unit * 2,\n marginBottom: theme.spacing.unit * 2,\n width: '100%',\n },\n title: {\n marginBottom: theme.spacing.unit * 4,\n },\n tooltip: {\n fontSize: theme.typography.fontSize - 2,\n whiteSpace: 'pre',\n maxWidth: '500px',\n },\n inlineFlexContainer: {\n display: 'inline-flex',\n },\n resetButton: {\n marginBottom: theme.spacing.unit * 2.5,\n },\n errorText: {\n fontSize: theme.typography.fontSize - 2,\n color: theme.palette.error.main,\n paddingTop: theme.spacing.unit,\n },\n flexRow: {\n display: 'flex',\n alignItems: 'center',\n gap: '10px',\n },\n description: {\n marginBottom: theme.spacing.unit * 2.5,\n },\n});\n\nexport const toPointType = (response) => {\n function rest(response) {\n if (response.pointType) {\n if (response.direction) {\n return `${response.pointType[0]}${response.direction[0]}`;\n }\n\n return response.pointType[0];\n }\n\n return `${response.leftPoint[0]}${response.rightPoint[0]}`;\n }\n\n return `${response.type[0]}${rest(response)}`.toUpperCase();\n};\n\nexport class Main extends React.Component {\n static propTypes = {\n classes: PropTypes.object.isRequired,\n model: PropTypes.object.isRequired,\n configuration: PropTypes.object.isRequired,\n onChange: PropTypes.func.isRequired,\n uploadSoundSupport: PropTypes.object.isRequired,\n };\n\n constructor(props) {\n super(props);\n const {\n model: {\n graph: { availableTypes, maxNumberOfPoints },\n },\n } = props;\n const height = this.getAdjustedHeight(availableTypes, maxNumberOfPoints);\n this.state = {\n dialog: {\n open: false,\n text: '',\n },\n correctAnswerDialog: {\n open: false,\n text: '',\n },\n };\n this.graphChange({ height });\n }\n\n graphChange = (obj) => {\n const { model, onChange } = this.props;\n const graph = { ...model.graph, ...obj };\n let respIndex = [];\n model.correctResponse.forEach((correctResp, key) => {\n if (\n correctResp.domainPosition < graph.domain.min ||\n correctResp.domainPosition > graph.domain.max ||\n (correctResp.size &&\n (correctResp.domainPosition + correctResp.size < graph.domain.min ||\n correctResp.domainPosition + correctResp.size > graph.domain.max))\n ) {\n respIndex.push(key);\n }\n });\n if (respIndex.length > 0) {\n this.setState({\n correctAnswerDialog: {\n open: true,\n text:\n 'This\\n' +\n 'change would make it impossible for students to plot one or more elements in the current\\n' +\n 'correct answer. If you proceed, all such elements will be removed from the correct\\n' +\n 'answer.',\n indices: respIndex,\n graph: model.graph,\n },\n });\n }\n this.reloadTicksData(graph.domain, graph.width, graph.ticks);\n this.assignTicksModelToGraph(graph);\n onChange({ graph });\n };\n\n changeSize = ({ width, height }) => this.graphChange({ width, height });\n\n /*\n * This function gets called whenever the min, max or width for number line is changed\n * and it calculates ticks and label values and stores in ticks model.\n * @param domain containing min and max values.\n * @param width represents number line width\n * @param ticks represnt current values for minor and major.\n * */\n reloadTicksData = (domain, width, ticks) => {\n //check correct response\n const { model } = this.props;\n const graph = { ...model.graph };\n\n data.minorLimits = tickUtils.getMinorLimits(domain, width);\n data.minorValues = tickUtils.generateMinorValues(data.minorLimits);\n data.majorValues = {};\n const initTickModel = () => {\n if (ticks.tickIntervalType) ticksModel.tickIntervalType = ticks.tickIntervalType;\n //setting minor values\n if (ticks.minor < data.minorLimits.min || ticks.minor > data.minorLimits.max) {\n ticksModel.decimalTick = data.minorValues.decimal[0];\n ticksModel.fractionTick = data.minorValues.fraction[0];\n } else {\n ticksModel.decimalTick = math.number(ticks.minor);\n ticksModel.fractionTick = data.minorValues.fraction[data.minorValues.decimal.indexOf(ticksModel.decimalTick)];\n }\n if (Number.isInteger(ticksModel.decimalTick)) {\n ticksModel.integerTick = math.number(ticksModel.decimalTick);\n } else {\n const firstInteger = data.minorValues.decimal.find(function (el) {\n return Number.isInteger(el);\n });\n if (firstInteger) {\n const index = data.minorValues.decimal.indexOf(firstInteger);\n ticksModel.integerTick = math.number(firstInteger);\n if (ticksModel.tickIntervalType === 'Integer') {\n ticksModel.fractionTick = data.minorValues.fraction[index];\n ticksModel.decimalTick = data.minorValues.decimal[index];\n }\n } else {\n if (ticksModel.tickIntervalType === 'Integer') {\n ticksModel.tickIntervalType = 'Fraction';\n ticksModel.decimalTick = data.minorValues.decimal[data.minorValues.decimal.length - 1];\n ticksModel.fractionTick = data.minorValues.fraction[data.minorValues.fraction.length - 1];\n }\n ticksModel.integerTick = data.minorValues.decimal.reduce((a, b) => {\n return Math.abs(b - ticksModel.decimalTick) < Math.abs(a - ticksModel.decimalTick) ? b : a;\n });\n if (!Number.isInteger(ticksModel.integerTick)) {\n ticksModel.integerTick = math.ceil(ticksModel.integerTick);\n }\n }\n }\n //setting major values\n data.majorValues = tickUtils.generateMajorValuesForMinor(ticksModel.decimalTick, data.minorValues);\n if (!ticks.major) {\n ticksModel.decimalLabel = data.majorValues.decimal[0];\n ticksModel.fractionLabel = data.majorValues.fraction[0];\n } else {\n ticksModel.decimalLabel = math.number(ticks.major);\n if (data.majorValues.decimal.indexOf(ticksModel.decimalLabel) === -1) {\n let currIndex = 0;\n if (ticksModel.tickIntervalType === 'Integer') {\n currIndex = 4;\n } else {\n currIndex = data.majorValues.decimal.length - 1;\n }\n while (currIndex !== 0) {\n let ticksData = { minor: ticksModel.decimalTick, major: data.majorValues.decimal[currIndex] };\n let out = tickUtils.buildTickData(domain, width, ticksData, { fraction: undefined });\n if (out.filter((x) => x.type === 'major').length > 1) {\n break;\n } else {\n currIndex = currIndex - 1;\n }\n }\n ticksModel.decimalLabel = data.majorValues.decimal[currIndex];\n ticksModel.fractionLabel = data.majorValues.fraction[currIndex];\n } else {\n ticksModel.fractionLabel =\n data.majorValues.fraction[data.majorValues.decimal.indexOf(ticksModel.decimalLabel)];\n }\n }\n };\n initTickModel();\n };\n\n /*\n * This function updates calculated ticks values to graph model.\n * @param graph object\n * */\n assignTicksModelToGraph = (graph) => {\n graph.ticks.minor = ticksModel.decimalTick;\n graph.ticks.major = ticksModel.decimalLabel;\n graph.ticks.tickIntervalType = ticksModel.tickIntervalType;\n graph.ticks.tickStep = ticksModel.fractionTick;\n graph.ticks.labelStep = ticksModel.fractionLabel;\n };\n\n getAdjustedHeight = (availableTypes, maxNumberOfPoints) => {\n let onlyPFAvailable = true;\n Object.entries(availableTypes || {}).forEach(([type, value]) => {\n if (type !== 'PF' && value) {\n onlyPFAvailable = false;\n return;\n }\n });\n return maxNumberOfPoints && (maxNumberOfPoints === 1 || onlyPFAvailable)\n ? 100\n : 50 + (maxNumberOfPoints || 20) * 25;\n };\n\n changeMaxNoOfPoints = (e, maxNumberOfPoints) => {\n maxNumberOfPoints = Math.floor(maxNumberOfPoints);\n if (this.isAvailableTypesGreaterThanMaxElements(this.props.model.graph.availableTypes, maxNumberOfPoints)) {\n this.setState({\n dialog: {\n open: true,\n text: 'To use this value, you must first remove one or more elements from the available types.',\n },\n });\n return;\n }\n if (this.props.model.correctResponse.length > maxNumberOfPoints) {\n this.setState({\n dialog: {\n open: true,\n text: 'To use this value, you must first remove one or more elements from the correct answers.',\n },\n });\n return;\n }\n const {\n model: {\n graph: { availableTypes },\n },\n } = this.props;\n const height = this.getAdjustedHeight(availableTypes, maxNumberOfPoints);\n\n this.graphChange({ maxNumberOfPoints, height });\n };\n\n /*\n * Validation check on wether available type of dot plot is greater than max elements allowed to plot.\n * @param availableTypes array of string.\n * @param maxElements number of max elements to use set by user.\n * @return boolean.\n * */\n isAvailableTypesGreaterThanMaxElements = (availableTypes, maxElements) => {\n let availableTypeCount = 0;\n Object.entries(availableTypes || {}).forEach(([type, value]) => {\n if (value) {\n availableTypeCount = availableTypeCount + 1;\n }\n });\n return availableTypeCount > maxElements;\n };\n\n changeGraphTitle = (title) => this.graphChange({ title });\n\n /*\n * Gets triggered whenever ticks related data is changed by user.\n * */\n changeTicks = (object) => {\n const { model, onChange } = this.props;\n const { ticks } = model.graph;\n ticks.minor = object.ticksModel.decimalTick;\n ticks.major = object.ticksModel.decimalLabel;\n ticks.tickIntervalType = object.ticksModel.tickIntervalType;\n ticks.tickStep = object.ticksModel.fractionTick;\n ticks.labelStep = object.ticksModel.fractionLabel;\n const correctResponse = tickUtils.snapElements(model.graph.domain, ticks, model.correctResponse);\n const initialElements = tickUtils.snapElements(model.graph.domain, ticks, model.graph.initialElements);\n const graph = { ...model.graph, ticks, initialElements };\n this.reloadTicksData(graph.domain, graph.width, graph.ticks);\n this.assignTicksModelToGraph(graph);\n onChange({ graph, correctResponse });\n };\n\n changeArrows = (arrows) => this.graphChange({ arrows });\n\n setDefaults = () => {\n const {\n graph: { availableTypes, maxNumberOfPoints },\n } = defaultModel;\n const height = this.getAdjustedHeight(availableTypes, maxNumberOfPoints);\n const graph = { ...cloneDeep(defaultModel.graph), height };\n\n this.props.onChange({ graph });\n };\n\n moveCorrectResponse = (index, el, position) => {\n el.position = position;\n\n const { onChange, model } = this.props;\n const update = toSessionFormat(el.type === 'line' && lineIsSwitched(el) ? switchGraphLine(el) : el);\n const correctResponse = [...model.correctResponse];\n correctResponse[index] = update;\n\n onChange({ correctResponse });\n };\n\n availableTypesChange = (availableTypes) => {\n const { model, onChange } = this.props;\n const {\n correctResponse,\n graph: { maxNumberOfPoints },\n } = model;\n\n let availableTypeCount = 0;\n Object.entries(availableTypes || {}).forEach(([type, value]) => {\n if (value) {\n availableTypeCount = availableTypeCount + 1;\n }\n });\n if (maxNumberOfPoints < availableTypeCount) {\n this.props.model.graph.maxNumberOfPoints = availableTypeCount;\n }\n\n new Set(correctResponse.map(toPointType)).forEach((pointType) => {\n availableTypes[pointType] = true;\n });\n\n const height = this.getAdjustedHeight(availableTypes, this.props.model.graph.maxNumberOfPoints);\n const graph = { ...model.graph, availableTypes, height };\n\n onChange({ graph });\n };\n\n deleteCorrectResponse = (indices) => {\n const { model, onChange } = this.props;\n const correctResponse = model.correctResponse.filter((v, index) => !indices.some((d) => d === index));\n\n onChange({ correctResponse });\n };\n\n addCorrectResponse = (data) => {\n const { model, onChange } = this.props;\n const correctResponse = [...model.correctResponse];\n correctResponse.push(toSessionFormat(data));\n\n onChange({ correctResponse });\n };\n\n clearCorrectResponse = () => {\n const { onChange } = this.props;\n\n onChange({ correctResponse: [] });\n };\n\n undoCorrectResponse = () => {\n const { model, onChange } = this.props;\n const correctResponse = [...model.correctResponse];\n correctResponse.pop();\n onChange({ correctResponse });\n };\n\n render() {\n const { classes, model, onChange, configuration, uploadSoundSupport } = this.props;\n const {\n contentDimensions = {},\n instruction = {},\n teacherInstructions = {},\n prompt = {},\n mathMlOptions = {},\n numberLineDimensions = {},\n maxMaxElements = 20,\n hidePointConfigButtons = false,\n availableTools = ['PF'],\n } = configuration || {};\n const { errors = {}, graph, spellCheckEnabled, toolbarEditorPosition } = model || {};\n this.reloadTicksData(graph.domain, graph.width, graph.ticks);\n const { dialog, correctAnswerDialog } = this.state;\n const {\n correctResponseError,\n domainError,\n maxError,\n pointsError,\n prompt: promptError,\n teacherInstructions: teacherInstructionsError,\n widthError,\n } = errors || {};\n const validationMessage = generateValidationMessage();\n\n const correctResponse = cloneDeep(model.correctResponse || []).map(toGraphFormat);\n\n const initialModel = cloneDeep(model);\n initialModel['disabled'] = true;\n\n const toolbarOpts = {\n position: toolbarEditorPosition === 'top' ? 'top' : 'bottom',\n };\n\n return (\n <layout.ConfigLayout dimensions={contentDimensions} hideSettings={true} settings={null}>\n <Typography component=\"div\" type=\"body1\" className={classes.description}>\n {instruction.label}\n </Typography>\n\n {teacherInstructions.settings && (\n <InputContainer label={teacherInstructions.label} className={classes.promptContainer}>\n <EditableHtml\n className={classes.teacherInstructions}\n markup={model.teacherInstructions}\n onChange={(teacherInstructions) => onChange({ teacherInstructions })}\n nonEmpty={false}\n disableUnderline\n error={teacherInstructionsError}\n toolbarOpts={toolbarOpts}\n spellCheck={spellCheckEnabled}\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 {prompt.settings && (\n <InputContainer label={prompt.label} className={classes.promptContainer}>\n <EditableHtml\n className={classes.prompt}\n markup={model.prompt}\n onChange={(prompt) => onChange({ prompt })}\n nonEmpty={false}\n disableUnderline\n error={promptError}\n toolbarOpts={toolbarOpts}\n spellCheck={spellCheckEnabled}\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 <CardBar\n header=\"Set Up Number Line\"\n info={\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={{ marginLeft: '8px' }} />\n </Tooltip>\n }\n >\n Set up the number line by entering the domain and number of tick marks to display. Labels on the number line\n can be edited or removed by clicking on the label.\n </CardBar>\n\n <div className={classes.row}>\n <Domain domain={graph.domain} errors={errors} onChange={(domain) => this.graphChange({ domain })} />\n </div>\n\n {maxError && <div className={classes.errorText}>{maxError}</div>}\n {domainError && <div className={classes.errorText}>{domainError}</div>}\n\n <div>\n <FormSection>\n <Ticks ticksModel={ticksModel} data={data} onChange={this.changeTicks} />\n </FormSection>\n </div>\n\n <div className={classes.flexRow}>\n {model.widthEnabled && (\n <Size\n size={graph}\n min={numberLineDimensions.min}\n max={numberLineDimensions.max}\n step={numberLineDimensions.step}\n onChange={this.changeSize}\n />\n )}\n <div></div>\n <Arrows arrows={graph.arrows} onChange={this.changeArrows} />\n </div>\n\n {widthError && <div className={classes.errorText}>{widthError}</div>}\n\n <NumberLineComponent\n onMoveElement={() => {}}\n onDeleteElements={() => {}}\n onAddElement={() => {}}\n onClearElements={() => {}}\n onUndoElement={() => {}}\n minWidth={numberLineDimensions.min}\n maxWidth={numberLineDimensions.max}\n model={trimModel(initialModel)}\n />\n\n <FormSection label={'Title'} className={classes.title}>\n <EditableHtml\n markup={graph.title || ''}\n onChange={this.changeGraphTitle}\n toolbarOpts={toolbarOpts}\n activePlugins={[\n 'bold',\n 'html',\n 'italic',\n 'underline',\n 'strikethrough',\n 'image',\n 'math',\n 'languageCharacters',\n 'responseArea',\n ]}\n spellCheck={spellCheckEnabled}\n uploadSoundSupport={uploadSoundSupport}\n languageCharactersProps={[{ language: 'spanish' }, { language: 'special' }]}\n mathMlOptions={mathMlOptions}\n />\n </FormSection>\n\n {!graph.exhibitOnly && (\n <React.Fragment>\n <CardBar header=\"Define Tool Set and Correct Response\">\n Select answer type and place it on the number line. Intersecting points, line segments and/or rays will\n appear above the number line. <i>Note: A maximum of 20 points, line segments or rays may be plotted.</i>\n </CardBar>\n\n <CardBar header=\"Available Tools\" mini>\n Click on the input options to be displayed to the students. All inputs will display by default.\n </CardBar>\n\n <div className={classes.pointTypeChooser}>\n <PointConfig\n onSelectionChange={this.availableTypesChange}\n selection={graph.availableTypes}\n availableTools={availableTools}\n hideButtons={hidePointConfigButtons}\n />\n </div>\n\n <FormSection className={classes.flexRow}>\n <label>Max No of Elements</label>\n <NumberTextField\n className={classes.maxNumberOfPoints}\n min={1}\n max={maxMaxElements}\n onlyIntegersAllowed={true}\n value={graph.maxNumberOfPoints}\n onChange={this.changeMaxNoOfPoints}\n />\n {pointsError && <div className={classes.errorText}>{pointsError}</div>}\n </FormSection>\n\n <label>Correct Answer</label>\n\n <NumberLineComponent\n onMoveElement={this.moveCorrectResponse}\n onDeleteElements={this.deleteCorrectResponse}\n onAddElement={this.addCorrectResponse}\n onClearElements={this.clearCorrectResponse}\n onUndoElement={this.undoCorrectResponse}\n minWidth={numberLineDimensions.min}\n maxWidth={numberLineDimensions.max}\n answer={correctResponse}\n //strip feedback for this model\n model={trimModel(model)}\n />\n {correctResponseError && <div className={classes.errorText}>{correctResponseError}</div>}\n </React.Fragment>\n )}\n <AlertDialog\n open={dialog.open}\n title=\"Warning\"\n text={dialog.text}\n onConfirm={() => this.setState({ dialog: { open: false } })}\n />\n <AlertDialog\n open={correctAnswerDialog.open}\n title=\"Warning\"\n text={correctAnswerDialog.text}\n onConfirm={() => {\n let indices = this.state.correctAnswerDialog.indices;\n if (indices && indices.length > 0) {\n this.deleteCorrectResponse(indices);\n }\n this.setState({ correctAnswerDialog: { open: false } });\n }}\n onClose={() => {\n const graph = this.state.correctAnswerDialog.graph;\n this.reloadTicksData(graph.domain, graph.width, graph.ticks);\n this.assignTicksModelToGraph(graph);\n onChange({ graph });\n this.setState({ correctAnswerDialog: { open: false } });\n }}\n onConfirmText={'OK'}\n onCloseText={'Cancel'}\n />\n </layout.ConfigLayout>\n );\n }\n}\n\nexport default withStyles(styles, { name: 'Main' })(Main);\n"],"file":"main.js"}
|
package/configure/package.json
CHANGED
package/controller/CHANGELOG.md
CHANGED
|
@@ -3,6 +3,17 @@
|
|
|
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.0](https://github.com/pie-framework/pie-elements/compare/@pie-element/number-line-controller@5.1.7...@pie-element/number-line-controller@5.2.0) (2024-01-30)
|
|
7
|
+
|
|
8
|
+
|
|
9
|
+
### Features
|
|
10
|
+
|
|
11
|
+
* **number-line:** Add possibility to mark fields as required PD-3137 and update validation PD-3369 ([30516d6](https://github.com/pie-framework/pie-elements/commit/30516d6cfa863c215b17f9671de64f83eab43269))
|
|
12
|
+
|
|
13
|
+
|
|
14
|
+
|
|
15
|
+
|
|
16
|
+
|
|
6
17
|
## [5.1.7](https://github.com/pie-framework/pie-elements/compare/@pie-element/number-line-controller@5.1.6...@pie-element/number-line-controller@5.1.7) (2024-01-24)
|
|
7
18
|
|
|
8
19
|
|
package/controller/lib/index.js
CHANGED
|
@@ -397,39 +397,64 @@ var createCorrectResponseSession = function createCorrectResponseSession(questio
|
|
|
397
397
|
|
|
398
398
|
exports.createCorrectResponseSession = createCorrectResponseSession;
|
|
399
399
|
|
|
400
|
+
var getInnerText = function getInnerText(html) {
|
|
401
|
+
return (html || '').replaceAll(/<[^>]*>/g, '');
|
|
402
|
+
};
|
|
403
|
+
|
|
400
404
|
var validate = function validate() {
|
|
401
405
|
var model = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
|
|
406
|
+
var config = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
|
|
402
407
|
|
|
403
|
-
// TODO: add configurable validation props after authoring is updated
|
|
404
408
|
var _ref2 = model || {},
|
|
405
409
|
graph = _ref2.graph,
|
|
406
410
|
correctResponse = _ref2.correctResponse;
|
|
407
411
|
|
|
408
|
-
var _ref3 =
|
|
409
|
-
|
|
410
|
-
|
|
411
|
-
|
|
412
|
+
var _ref3 = config || {},
|
|
413
|
+
_ref3$maxMaxElements = _ref3.maxMaxElements,
|
|
414
|
+
maxMaxElements = _ref3$maxMaxElements === void 0 ? 20 : _ref3$maxMaxElements,
|
|
415
|
+
_ref3$numberLineDimen = _ref3.numberLineDimensions;
|
|
416
|
+
|
|
417
|
+
_ref3$numberLineDimen = _ref3$numberLineDimen === void 0 ? {} : _ref3$numberLineDimen;
|
|
418
|
+
var _ref3$numberLineDimen2 = _ref3$numberLineDimen.min,
|
|
419
|
+
minWidth = _ref3$numberLineDimen2 === void 0 ? 200 : _ref3$numberLineDimen2,
|
|
420
|
+
_ref3$numberLineDimen3 = _ref3$numberLineDimen.max,
|
|
421
|
+
maxWidth = _ref3$numberLineDimen3 === void 0 ? 800 : _ref3$numberLineDimen3;
|
|
422
|
+
|
|
423
|
+
var _ref4 = graph || {},
|
|
424
|
+
width = _ref4.width,
|
|
425
|
+
domain = _ref4.domain,
|
|
426
|
+
maxNumberOfPoints = _ref4.maxNumberOfPoints;
|
|
412
427
|
|
|
413
|
-
var
|
|
414
|
-
min =
|
|
415
|
-
max =
|
|
428
|
+
var _ref5 = domain || {},
|
|
429
|
+
min = _ref5.min,
|
|
430
|
+
max = _ref5.max;
|
|
416
431
|
|
|
417
432
|
var errors = {};
|
|
433
|
+
['teacherInstructions', 'prompt'].forEach(function (field) {
|
|
434
|
+
var _config$field;
|
|
418
435
|
|
|
419
|
-
|
|
420
|
-
|
|
436
|
+
if ((_config$field = config[field]) !== null && _config$field !== void 0 && _config$field.required && !getInnerText(model[field])) {
|
|
437
|
+
errors[field] = 'This field is required';
|
|
438
|
+
}
|
|
439
|
+
});
|
|
440
|
+
|
|
441
|
+
if (width < minWidth || width > maxWidth) {
|
|
442
|
+
errors.widthError = "Width should be a value between ".concat(minWidth, " and ").concat(maxWidth, ".");
|
|
421
443
|
}
|
|
422
444
|
|
|
423
|
-
|
|
424
|
-
|
|
445
|
+
var MIN_DOMAIN = -100000;
|
|
446
|
+
var MAX_DOMAIN = 100000;
|
|
447
|
+
|
|
448
|
+
if (min < MIN_DOMAIN || min > MAX_DOMAIN || max < MIN_DOMAIN || max > MAX_DOMAIN) {
|
|
449
|
+
errors.domainError = "Min and max values must both be in the range [".concat(MIN_DOMAIN, ", ").concat(MAX_DOMAIN, "].");
|
|
425
450
|
}
|
|
426
451
|
|
|
427
452
|
if (min >= max) {
|
|
428
|
-
errors.maxError = 'Max must be greater than min.';
|
|
453
|
+
errors.maxError = 'Max value must be greater than min value.';
|
|
429
454
|
}
|
|
430
455
|
|
|
431
|
-
if (maxNumberOfPoints < 1 || maxNumberOfPoints >
|
|
432
|
-
errors.pointsError =
|
|
456
|
+
if (maxNumberOfPoints < 1 || maxNumberOfPoints > maxMaxElements) {
|
|
457
|
+
errors.pointsError = "Max number of elements should be between 1 and ".concat(maxMaxElements, ".");
|
|
433
458
|
}
|
|
434
459
|
|
|
435
460
|
if (correctResponse && correctResponse.length === 0) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/index.js"],"names":["score","number","scaled","getPartialScore","corrected","ps","correct","rule","find","r","numberOfCorrect","length","scorePercentage","accumulateAnswer","correctResponse","total","answer","isCorrectResponse","some","cr","matches","outcome","model","session","env","Promise","resolve","empty","partialScoringEnabled","partialScoring","enabled","numCorrect","reduce","numIncorrect","getScore","question","getCorrected","correctness","getCorrectness","allowPartialScoring","filter","o","canDoPartialScoring","CLOSE_TO_PRECISION","closeTo","a","b","precision","expectedDiff","Math","pow","receivedDiff","abs","close","v","ov","incorrect","notInAnswer","noCorrectResponse","acc","index","match","push","splice","indexOf","normalize","feedback","defaults","createDefaultModel","out","graph","colorContrast","updateTicks","domain","labelStep","ticks","minor","major","min","Number","toFixed","max","fraction","step","math","evaluate","reject","Error","normalizedQuestion","evaluateMode","mode","exhibitOnly","disabled","fb","undefined","then","feedbackMessage","prompt","type","message","accessibility","language","createCorrectResponseSession","role","id","validate","width","maxNumberOfPoints","errors","widthError","domainError","maxError","pointsError","correctResponseError"],"mappings":"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","sourcesContent":["import cloneDeep from 'lodash/cloneDeep';\nimport find from 'lodash/find';\nimport isEmpty from 'lodash/isEmpty';\nimport isEqual from 'lodash/isEqual';\nimport isEqualWith from 'lodash/isEqualWith';\nimport merge from 'lodash/merge';\nimport omitBy from 'lodash/omitBy';\nimport { getFeedbackForCorrectness } from '@pie-lib/pie-toolbox/feedback';\nimport { partialScoring } from '@pie-lib/pie-toolbox/controller-utils';\nimport * as math from 'mathjs';\n\nimport defaults from './defaults';\n\nconst score = (number) => {\n return {\n score: {\n scaled: number,\n },\n };\n};\n\nconst getPartialScore = (corrected, ps) => {\n const { correct } = corrected;\n const rule = ps.find((r) => r.numberOfCorrect === correct.length);\n\n if (rule) {\n return 1.0 * (rule.scorePercentage / 100);\n } else {\n return 0;\n }\n};\n\nconst accumulateAnswer = (correctResponse) => (total, answer) => {\n const isCorrectResponse = correctResponse.some((cr) => matches(cr)(answer));\n return total + (isCorrectResponse ? 1 : 0);\n};\n\n/**\n */\nexport function outcome(model, session, env) {\n return new Promise((resolve) => {\n if (!session || isEmpty(session)) {\n resolve({ score: 0, empty: true });\n } else {\n const partialScoringEnabled = partialScoring.enabled(model, env);\n const numCorrect = (session.answer || []).reduce(accumulateAnswer(model.correctResponse), 0);\n\n let total = model.correctResponse.length;\n let numIncorrect = 0;\n\n if ((session.answer || []).length > total) {\n numIncorrect = (session.answer || []).length - total;\n }\n\n if (total === 0) {\n total = 1;\n }\n\n let score = numCorrect < 0 ? 0 : (numCorrect - numIncorrect) / total;\n\n if (score < 0) {\n score = 0;\n }\n\n resolve({ score: partialScoringEnabled ? score : score === 1 ? 1 : 0 });\n }\n });\n}\n\nexport function getScore(question, session) {\n return new Promise((resolve) => {\n if (!session || isEmpty(session)) {\n resolve({ score: { scaled: 0 } });\n } else {\n session.answer = session.answer || [];\n\n const corrected = getCorrected(session.answer, cloneDeep(question.correctResponse));\n\n const correctness = getCorrectness(corrected);\n\n if (correctness === 'correct') {\n resolve(score(1.0));\n } else if (correctness === 'incorrect') {\n resolve(score(0.0));\n } else if (correctness === 'partial') {\n const { allowPartialScoring, partialScoring } = question;\n const ps = (partialScoring || []).filter((o) => !isEmpty(o));\n const canDoPartialScoring = allowPartialScoring && ps.length > 0;\n if (canDoPartialScoring) {\n resolve(score(getPartialScore(corrected, ps)));\n } else {\n resolve(score(0.0));\n }\n } else {\n resolve({ score: { scaled: -1 } });\n }\n }\n });\n}\n\nexport const CLOSE_TO_PRECISION = 3;\n\nexport const closeTo = (a, b, precision) => {\n precision = precision || 5;\n const expectedDiff = Math.pow(10, -precision) / 2;\n const receivedDiff = Math.abs(a - b);\n const close = receivedDiff <= expectedDiff;\n return close;\n};\n\nconst matches = (a) => (v) => {\n return isEqualWith(a, v, (v, ov) => {\n if (typeof v === 'number' && typeof ov === 'number') {\n return closeTo(v, ov, CLOSE_TO_PRECISION);\n }\n });\n};\n\nexport const getCorrected = (answer, correctResponse) => {\n if (isEmpty(correctResponse) && answer.length > 0) {\n return {\n correct: [],\n incorrect: [],\n notInAnswer: [],\n noCorrectResponse: true,\n };\n }\n\n return answer.reduce(\n (acc, a, index) => {\n const { correct, incorrect, notInAnswer } = acc;\n\n const match = find(notInAnswer, matches(a));\n if (match) {\n correct.push(index);\n notInAnswer.splice(notInAnswer.indexOf(match), 1);\n } else {\n incorrect.push(index);\n }\n\n return {\n correct: correct,\n incorrect: incorrect,\n notInAnswer: notInAnswer,\n };\n },\n {\n correct: [],\n incorrect: [],\n notInAnswer: correctResponse,\n },\n );\n};\n\nexport const getCorrectness = (corrected) => {\n const { incorrect, correct, notInAnswer, noCorrectResponse } = corrected;\n\n if (noCorrectResponse) {\n return 'unknown';\n }\n\n if (incorrect.length === 0 && correct.length === 0) {\n return 'unanswered';\n }\n\n if (incorrect.length === 0 && notInAnswer.length === 0) {\n return 'correct';\n }\n\n if (incorrect.length > 0 || notInAnswer.length > 0) {\n if (correct.length > 0) {\n return 'partial';\n } else {\n return 'incorrect';\n }\n }\n\n return 'unknown';\n};\n\n/**\n * A sample of a normalize function see:\n * https://github.com/pie-framework/pie-elements/issues/21\n */\nexport function normalize(question) {\n return new Promise((resolve) => {\n const feedback = merge(defaults.feedback, question.feedback);\n\n if (isEqual(feedback, question.feedback)) {\n return resolve({ ...question });\n } else {\n resolve({ ...question, feedback });\n }\n });\n}\n\nexport function createDefaultModel(model = {}) {\n return new Promise((resolve) => {\n const out = {\n ...model,\n graph: {\n ...defaults.graph,\n ...model.graph,\n },\n colorContrast: 'black_on_white',\n };\n\n resolve(omitBy(out, (v) => !v));\n });\n}\n\n// this function is duplicated in configure; at some point, use the same shared function\nconst updateTicks = (model) => {\n const { graph: { domain, labelStep, ticks = {} } = {} } = model;\n const { minor, major } = ticks;\n\n if (domain) {\n domain.min = Number((domain.min || 0).toFixed(2));\n domain.max = Number((domain.max || 0).toFixed(2));\n }\n\n if (labelStep && typeof labelStep === 'string' && labelStep.match(/^[1-9][0-9]*\\/[1-9][0-9]*$/g)) {\n model.graph.fraction = true;\n\n // update the ticks frequency and label value to match the label step if needed\n const step = math.evaluate(labelStep);\n\n if (step !== major) {\n ticks.major = step;\n ticks.minor = step / (major / minor);\n }\n }\n\n return model;\n};\n\nexport function model(question, session, env) {\n if (!question) {\n return Promise.reject(new Error('question is null'));\n }\n\n return new Promise(async (resolve, reject) => {\n const normalizedQuestion = await normalize(question);\n const { graph } = updateTicks(normalizedQuestion);\n\n if (graph) {\n const evaluateMode = env.mode === 'evaluate';\n\n const correctResponse = cloneDeep(normalizedQuestion.correctResponse);\n const corrected = evaluateMode && getCorrected(session ? session.answer || [] : [], correctResponse);\n const correctness = evaluateMode && getCorrectness(corrected);\n\n const { exhibitOnly } = graph;\n const disabled = env.mode !== 'gather' || exhibitOnly === true;\n\n const fb = evaluateMode\n ? getFeedbackForCorrectness(correctness, normalizedQuestion.feedback)\n : Promise.resolve(undefined);\n\n fb.then((feedbackMessage) => {\n const out = {\n prompt: normalizedQuestion.prompt,\n graph,\n disabled,\n corrected,\n correctResponse:\n evaluateMode && ['unanswered', 'correct'].indexOf(correctness) === -1 && normalizedQuestion.correctResponse,\n feedback: feedbackMessage && {\n type: correctness,\n message: feedbackMessage,\n },\n colorContrast: (env.accessibility && env.accessibility.colorContrast) || 'black_on_white',\n language: normalizedQuestion.language,\n };\n\n resolve(omitBy(out, (v) => !v));\n });\n } else {\n reject(new Error('graph is undefined'));\n }\n });\n}\n\nexport const createCorrectResponseSession = (question, env) => {\n return new Promise((resolve) => {\n if (env.mode !== 'evaluate' && env.role === 'instructor') {\n const { correctResponse: answer } = question;\n\n resolve({\n answer,\n id: '1',\n });\n } else {\n resolve(null);\n }\n });\n};\n\nexport const validate = (model = {}) => {\n // TODO: add configurable validation props after authoring is updated\n const { graph, correctResponse } = model || {};\n const { width, domain, maxNumberOfPoints } = graph || {};\n const { min, max } = domain || {};\n const errors = {};\n\n if (width < 200 || width > 800) {\n errors.widthError = 'Width should be a value between 200 and 800.';\n }\n\n if (min < -100000 || min > 10000 || max < -100000 || max > 10000) {\n errors.domainError = 'Min and max must both be in the range [-100000, 10000].';\n }\n\n if (min >= max) {\n errors.maxError = 'Max must be greater than min.';\n }\n\n if (maxNumberOfPoints < 1 || maxNumberOfPoints > 20) {\n errors.pointsError = 'Max number of elements should be between 1 and 20.';\n }\n\n if (correctResponse && correctResponse.length === 0) {\n errors.correctResponseError = 'The correct answer should include at least one number line object.';\n }\n\n return errors;\n};\n"],"file":"index.js"}
|
|
1
|
+
{"version":3,"sources":["../src/index.js"],"names":["score","number","scaled","getPartialScore","corrected","ps","correct","rule","find","r","numberOfCorrect","length","scorePercentage","accumulateAnswer","correctResponse","total","answer","isCorrectResponse","some","cr","matches","outcome","model","session","env","Promise","resolve","empty","partialScoringEnabled","partialScoring","enabled","numCorrect","reduce","numIncorrect","getScore","question","getCorrected","correctness","getCorrectness","allowPartialScoring","filter","o","canDoPartialScoring","CLOSE_TO_PRECISION","closeTo","a","b","precision","expectedDiff","Math","pow","receivedDiff","abs","close","v","ov","incorrect","notInAnswer","noCorrectResponse","acc","index","match","push","splice","indexOf","normalize","feedback","defaults","createDefaultModel","out","graph","colorContrast","updateTicks","domain","labelStep","ticks","minor","major","min","Number","toFixed","max","fraction","step","math","evaluate","reject","Error","normalizedQuestion","evaluateMode","mode","exhibitOnly","disabled","fb","undefined","then","feedbackMessage","prompt","type","message","accessibility","language","createCorrectResponseSession","role","id","getInnerText","html","replaceAll","validate","config","maxMaxElements","numberLineDimensions","minWidth","maxWidth","width","maxNumberOfPoints","errors","forEach","field","required","widthError","MIN_DOMAIN","MAX_DOMAIN","domainError","maxError","pointsError","correctResponseError"],"mappings":"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","sourcesContent":["import cloneDeep from 'lodash/cloneDeep';\nimport find from 'lodash/find';\nimport isEmpty from 'lodash/isEmpty';\nimport isEqual from 'lodash/isEqual';\nimport isEqualWith from 'lodash/isEqualWith';\nimport merge from 'lodash/merge';\nimport omitBy from 'lodash/omitBy';\nimport { getFeedbackForCorrectness } from '@pie-lib/pie-toolbox/feedback';\nimport { partialScoring } from '@pie-lib/pie-toolbox/controller-utils';\nimport * as math from 'mathjs';\n\nimport defaults from './defaults';\n\nconst score = (number) => {\n return {\n score: {\n scaled: number,\n },\n };\n};\n\nconst getPartialScore = (corrected, ps) => {\n const { correct } = corrected;\n const rule = ps.find((r) => r.numberOfCorrect === correct.length);\n\n if (rule) {\n return 1.0 * (rule.scorePercentage / 100);\n } else {\n return 0;\n }\n};\n\nconst accumulateAnswer = (correctResponse) => (total, answer) => {\n const isCorrectResponse = correctResponse.some((cr) => matches(cr)(answer));\n return total + (isCorrectResponse ? 1 : 0);\n};\n\n/**\n */\nexport function outcome(model, session, env) {\n return new Promise((resolve) => {\n if (!session || isEmpty(session)) {\n resolve({ score: 0, empty: true });\n } else {\n const partialScoringEnabled = partialScoring.enabled(model, env);\n const numCorrect = (session.answer || []).reduce(accumulateAnswer(model.correctResponse), 0);\n\n let total = model.correctResponse.length;\n let numIncorrect = 0;\n\n if ((session.answer || []).length > total) {\n numIncorrect = (session.answer || []).length - total;\n }\n\n if (total === 0) {\n total = 1;\n }\n\n let score = numCorrect < 0 ? 0 : (numCorrect - numIncorrect) / total;\n\n if (score < 0) {\n score = 0;\n }\n\n resolve({ score: partialScoringEnabled ? score : score === 1 ? 1 : 0 });\n }\n });\n}\n\nexport function getScore(question, session) {\n return new Promise((resolve) => {\n if (!session || isEmpty(session)) {\n resolve({ score: { scaled: 0 } });\n } else {\n session.answer = session.answer || [];\n\n const corrected = getCorrected(session.answer, cloneDeep(question.correctResponse));\n\n const correctness = getCorrectness(corrected);\n\n if (correctness === 'correct') {\n resolve(score(1.0));\n } else if (correctness === 'incorrect') {\n resolve(score(0.0));\n } else if (correctness === 'partial') {\n const { allowPartialScoring, partialScoring } = question;\n const ps = (partialScoring || []).filter((o) => !isEmpty(o));\n const canDoPartialScoring = allowPartialScoring && ps.length > 0;\n if (canDoPartialScoring) {\n resolve(score(getPartialScore(corrected, ps)));\n } else {\n resolve(score(0.0));\n }\n } else {\n resolve({ score: { scaled: -1 } });\n }\n }\n });\n}\n\nexport const CLOSE_TO_PRECISION = 3;\n\nexport const closeTo = (a, b, precision) => {\n precision = precision || 5;\n const expectedDiff = Math.pow(10, -precision) / 2;\n const receivedDiff = Math.abs(a - b);\n const close = receivedDiff <= expectedDiff;\n return close;\n};\n\nconst matches = (a) => (v) => {\n return isEqualWith(a, v, (v, ov) => {\n if (typeof v === 'number' && typeof ov === 'number') {\n return closeTo(v, ov, CLOSE_TO_PRECISION);\n }\n });\n};\n\nexport const getCorrected = (answer, correctResponse) => {\n if (isEmpty(correctResponse) && answer.length > 0) {\n return {\n correct: [],\n incorrect: [],\n notInAnswer: [],\n noCorrectResponse: true,\n };\n }\n\n return answer.reduce(\n (acc, a, index) => {\n const { correct, incorrect, notInAnswer } = acc;\n\n const match = find(notInAnswer, matches(a));\n if (match) {\n correct.push(index);\n notInAnswer.splice(notInAnswer.indexOf(match), 1);\n } else {\n incorrect.push(index);\n }\n\n return {\n correct: correct,\n incorrect: incorrect,\n notInAnswer: notInAnswer,\n };\n },\n {\n correct: [],\n incorrect: [],\n notInAnswer: correctResponse,\n },\n );\n};\n\nexport const getCorrectness = (corrected) => {\n const { incorrect, correct, notInAnswer, noCorrectResponse } = corrected;\n\n if (noCorrectResponse) {\n return 'unknown';\n }\n\n if (incorrect.length === 0 && correct.length === 0) {\n return 'unanswered';\n }\n\n if (incorrect.length === 0 && notInAnswer.length === 0) {\n return 'correct';\n }\n\n if (incorrect.length > 0 || notInAnswer.length > 0) {\n if (correct.length > 0) {\n return 'partial';\n } else {\n return 'incorrect';\n }\n }\n\n return 'unknown';\n};\n\n/**\n * A sample of a normalize function see:\n * https://github.com/pie-framework/pie-elements/issues/21\n */\nexport function normalize(question) {\n return new Promise((resolve) => {\n const feedback = merge(defaults.feedback, question.feedback);\n\n if (isEqual(feedback, question.feedback)) {\n return resolve({ ...question });\n } else {\n resolve({ ...question, feedback });\n }\n });\n}\n\nexport function createDefaultModel(model = {}) {\n return new Promise((resolve) => {\n const out = {\n ...model,\n graph: {\n ...defaults.graph,\n ...model.graph,\n },\n colorContrast: 'black_on_white',\n };\n\n resolve(omitBy(out, (v) => !v));\n });\n}\n\n// this function is duplicated in configure; at some point, use the same shared function\nconst updateTicks = (model) => {\n const { graph: { domain, labelStep, ticks = {} } = {} } = model;\n const { minor, major } = ticks;\n\n if (domain) {\n domain.min = Number((domain.min || 0).toFixed(2));\n domain.max = Number((domain.max || 0).toFixed(2));\n }\n\n if (labelStep && typeof labelStep === 'string' && labelStep.match(/^[1-9][0-9]*\\/[1-9][0-9]*$/g)) {\n model.graph.fraction = true;\n\n // update the ticks frequency and label value to match the label step if needed\n const step = math.evaluate(labelStep);\n\n if (step !== major) {\n ticks.major = step;\n ticks.minor = step / (major / minor);\n }\n }\n\n return model;\n};\n\nexport function model(question, session, env) {\n if (!question) {\n return Promise.reject(new Error('question is null'));\n }\n\n return new Promise(async (resolve, reject) => {\n const normalizedQuestion = await normalize(question);\n const { graph } = updateTicks(normalizedQuestion);\n\n if (graph) {\n const evaluateMode = env.mode === 'evaluate';\n\n const correctResponse = cloneDeep(normalizedQuestion.correctResponse);\n const corrected = evaluateMode && getCorrected(session ? session.answer || [] : [], correctResponse);\n const correctness = evaluateMode && getCorrectness(corrected);\n\n const { exhibitOnly } = graph;\n const disabled = env.mode !== 'gather' || exhibitOnly === true;\n\n const fb = evaluateMode\n ? getFeedbackForCorrectness(correctness, normalizedQuestion.feedback)\n : Promise.resolve(undefined);\n\n fb.then((feedbackMessage) => {\n const out = {\n prompt: normalizedQuestion.prompt,\n graph,\n disabled,\n corrected,\n correctResponse:\n evaluateMode && ['unanswered', 'correct'].indexOf(correctness) === -1 && normalizedQuestion.correctResponse,\n feedback: feedbackMessage && {\n type: correctness,\n message: feedbackMessage,\n },\n colorContrast: (env.accessibility && env.accessibility.colorContrast) || 'black_on_white',\n language: normalizedQuestion.language,\n };\n\n resolve(omitBy(out, (v) => !v));\n });\n } else {\n reject(new Error('graph is undefined'));\n }\n });\n}\n\nexport const createCorrectResponseSession = (question, env) => {\n return new Promise((resolve) => {\n if (env.mode !== 'evaluate' && env.role === 'instructor') {\n const { correctResponse: answer } = question;\n\n resolve({\n answer,\n id: '1',\n });\n } else {\n resolve(null);\n }\n });\n};\n\nconst getInnerText = (html) => (html || '').replaceAll(/<[^>]*>/g, '');\n\nexport const validate = (model = {}, config = {}) => {\n const { graph, correctResponse } = model || {};\n const { maxMaxElements = 20, numberLineDimensions: { min: minWidth = 200, max: maxWidth = 800 } = {} } = config || {};\n const { width, domain, maxNumberOfPoints } = graph || {};\n const { min, max } = domain || {};\n const errors = {};\n\n ['teacherInstructions', 'prompt'].forEach((field) => {\n if (config[field]?.required && !getInnerText(model[field])) {\n errors[field] = 'This field is required';\n }\n });\n\n if (width < minWidth || width > maxWidth) {\n errors.widthError = `Width should be a value between ${minWidth} and ${maxWidth}.`;\n }\n\n const MIN_DOMAIN = -100000;\n const MAX_DOMAIN = 100000;\n\n if (min < MIN_DOMAIN || min > MAX_DOMAIN || max < MIN_DOMAIN || max > MAX_DOMAIN) {\n errors.domainError = `Min and max values must both be in the range [${MIN_DOMAIN}, ${MAX_DOMAIN}].`;\n }\n\n if (min >= max) {\n errors.maxError = 'Max value must be greater than min value.';\n }\n\n if (maxNumberOfPoints < 1 || maxNumberOfPoints > maxMaxElements) {\n errors.pointsError = `Max number of elements should be between 1 and ${maxMaxElements}.`;\n }\n\n if (correctResponse && correctResponse.length === 0) {\n errors.correctResponseError = 'The correct answer should include at least one number line object.';\n }\n\n return errors;\n};\n"],"file":"index.js"}
|
package/controller/package.json
CHANGED
package/docs/config-schema.json
CHANGED
|
@@ -25,9 +25,14 @@
|
|
|
25
25
|
}
|
|
26
26
|
},
|
|
27
27
|
"prompt": {
|
|
28
|
-
"title": "
|
|
28
|
+
"title": "ConfigureRequiredProp",
|
|
29
29
|
"type": "object",
|
|
30
30
|
"properties": {
|
|
31
|
+
"required": {
|
|
32
|
+
"description": "Indicates if the item is required and the value cannot be empty",
|
|
33
|
+
"type": "boolean",
|
|
34
|
+
"title": "required"
|
|
35
|
+
},
|
|
31
36
|
"settings": {
|
|
32
37
|
"description": "Indicates if the item has to be displayed in the Settings Panel",
|
|
33
38
|
"type": "boolean",
|
|
@@ -41,9 +46,14 @@
|
|
|
41
46
|
}
|
|
42
47
|
},
|
|
43
48
|
"teacherInstructions": {
|
|
44
|
-
"title": "
|
|
49
|
+
"title": "ConfigureRequiredProp",
|
|
45
50
|
"type": "object",
|
|
46
51
|
"properties": {
|
|
52
|
+
"required": {
|
|
53
|
+
"description": "Indicates if the item is required and the value cannot be empty",
|
|
54
|
+
"type": "boolean",
|
|
55
|
+
"title": "required"
|
|
56
|
+
},
|
|
47
57
|
"settings": {
|
|
48
58
|
"description": "Indicates if the item has to be displayed in the Settings Panel",
|
|
49
59
|
"type": "boolean",
|
|
@@ -289,10 +299,15 @@
|
|
|
289
299
|
}
|
|
290
300
|
}
|
|
291
301
|
},
|
|
292
|
-
"
|
|
293
|
-
"title": "
|
|
302
|
+
"ConfigureRequiredProp": {
|
|
303
|
+
"title": "ConfigureRequiredProp",
|
|
294
304
|
"type": "object",
|
|
295
305
|
"properties": {
|
|
306
|
+
"required": {
|
|
307
|
+
"description": "Indicates if the item is required and the value cannot be empty",
|
|
308
|
+
"type": "boolean",
|
|
309
|
+
"title": "required"
|
|
310
|
+
},
|
|
296
311
|
"settings": {
|
|
297
312
|
"description": "Indicates if the item has to be displayed in the Settings Panel",
|
|
298
313
|
"type": "boolean",
|
|
@@ -343,6 +358,22 @@
|
|
|
343
358
|
"step"
|
|
344
359
|
]
|
|
345
360
|
},
|
|
361
|
+
"ConfigureProp": {
|
|
362
|
+
"title": "ConfigureProp",
|
|
363
|
+
"type": "object",
|
|
364
|
+
"properties": {
|
|
365
|
+
"settings": {
|
|
366
|
+
"description": "Indicates if the item has to be displayed in the Settings Panel",
|
|
367
|
+
"type": "boolean",
|
|
368
|
+
"title": "settings"
|
|
369
|
+
},
|
|
370
|
+
"label": {
|
|
371
|
+
"description": "Indicates the label for the item that has to be displayed in the Settings Panel",
|
|
372
|
+
"type": "string",
|
|
373
|
+
"title": "label"
|
|
374
|
+
}
|
|
375
|
+
}
|
|
376
|
+
},
|
|
346
377
|
"ConfigureMathMLProp": {
|
|
347
378
|
"title": "ConfigureMathMLProp",
|
|
348
379
|
"type": "object",
|
|
@@ -23,6 +23,10 @@ Indicates the label for the item that has to be displayed in the Settings Panel
|
|
|
23
23
|
|
|
24
24
|
Properties of the `prompt` object:
|
|
25
25
|
|
|
26
|
+
## `required` (boolean)
|
|
27
|
+
|
|
28
|
+
Indicates if the item is required and the value cannot be empty
|
|
29
|
+
|
|
26
30
|
## `settings` (boolean)
|
|
27
31
|
|
|
28
32
|
Indicates if the item has to be displayed in the Settings Panel
|
|
@@ -35,6 +39,10 @@ Indicates the label for the item that has to be displayed in the Settings Panel
|
|
|
35
39
|
|
|
36
40
|
Properties of the `teacherInstructions` object:
|
|
37
41
|
|
|
42
|
+
## `required` (boolean)
|
|
43
|
+
|
|
44
|
+
Indicates if the item is required and the value cannot be empty
|
|
45
|
+
|
|
38
46
|
## `settings` (boolean)
|
|
39
47
|
|
|
40
48
|
Indicates if the item has to be displayed in the Settings Panel
|
|
@@ -212,9 +220,13 @@ Indicates if the item has to be displayed in the Settings Panel
|
|
|
212
220
|
|
|
213
221
|
Indicates the label for the item that has to be displayed in the Settings Panel
|
|
214
222
|
|
|
215
|
-
## `
|
|
223
|
+
## `ConfigureRequiredProp` (object)
|
|
216
224
|
|
|
217
|
-
Properties of the `
|
|
225
|
+
Properties of the `ConfigureRequiredProp` object:
|
|
226
|
+
|
|
227
|
+
### `required` (boolean)
|
|
228
|
+
|
|
229
|
+
Indicates if the item is required and the value cannot be empty
|
|
218
230
|
|
|
219
231
|
### `settings` (boolean)
|
|
220
232
|
|
|
@@ -240,6 +252,18 @@ Properties of the `NumberLineDimensions` object:
|
|
|
240
252
|
|
|
241
253
|
### `step` (number, required)
|
|
242
254
|
|
|
255
|
+
## `ConfigureProp` (object)
|
|
256
|
+
|
|
257
|
+
Properties of the `ConfigureProp` object:
|
|
258
|
+
|
|
259
|
+
### `settings` (boolean)
|
|
260
|
+
|
|
261
|
+
Indicates if the item has to be displayed in the Settings Panel
|
|
262
|
+
|
|
263
|
+
### `label` (string)
|
|
264
|
+
|
|
265
|
+
Indicates the label for the item that has to be displayed in the Settings Panel
|
|
266
|
+
|
|
243
267
|
## `ConfigureMathMLProp` (object)
|
|
244
268
|
|
|
245
269
|
Properties of the `ConfigureMathMLProp` object:
|
|
@@ -262,4 +286,4 @@ Value of the language option
|
|
|
262
286
|
|
|
263
287
|
### `label` (string, required)
|
|
264
288
|
|
|
265
|
-
Label of the language option
|
|
289
|
+
Label of the language option
|
package/docs/pie-schema.json
CHANGED
|
@@ -728,10 +728,15 @@
|
|
|
728
728
|
}
|
|
729
729
|
}
|
|
730
730
|
},
|
|
731
|
-
"
|
|
732
|
-
"title": "
|
|
731
|
+
"ConfigureRequiredProp": {
|
|
732
|
+
"title": "ConfigureRequiredProp",
|
|
733
733
|
"type": "object",
|
|
734
734
|
"properties": {
|
|
735
|
+
"required": {
|
|
736
|
+
"description": "Indicates if the item is required and the value cannot be empty",
|
|
737
|
+
"type": "boolean",
|
|
738
|
+
"title": "required"
|
|
739
|
+
},
|
|
735
740
|
"settings": {
|
|
736
741
|
"description": "Indicates if the item has to be displayed in the Settings Panel",
|
|
737
742
|
"type": "boolean",
|
|
@@ -782,6 +787,22 @@
|
|
|
782
787
|
"step"
|
|
783
788
|
]
|
|
784
789
|
},
|
|
790
|
+
"ConfigureProp": {
|
|
791
|
+
"title": "ConfigureProp",
|
|
792
|
+
"type": "object",
|
|
793
|
+
"properties": {
|
|
794
|
+
"settings": {
|
|
795
|
+
"description": "Indicates if the item has to be displayed in the Settings Panel",
|
|
796
|
+
"type": "boolean",
|
|
797
|
+
"title": "settings"
|
|
798
|
+
},
|
|
799
|
+
"label": {
|
|
800
|
+
"description": "Indicates the label for the item that has to be displayed in the Settings Panel",
|
|
801
|
+
"type": "string",
|
|
802
|
+
"title": "label"
|
|
803
|
+
}
|
|
804
|
+
}
|
|
805
|
+
},
|
|
785
806
|
"ConfigureMathMLProp": {
|
|
786
807
|
"title": "ConfigureMathMLProp",
|
|
787
808
|
"type": "object",
|
package/docs/pie-schema.json.md
CHANGED
|
@@ -211,9 +211,13 @@ Indicates if the item has to be displayed in the Settings Panel
|
|
|
211
211
|
|
|
212
212
|
Indicates the label for the item that has to be displayed in the Settings Panel
|
|
213
213
|
|
|
214
|
-
## `
|
|
214
|
+
## `ConfigureRequiredProp` (object)
|
|
215
215
|
|
|
216
|
-
Properties of the `
|
|
216
|
+
Properties of the `ConfigureRequiredProp` object:
|
|
217
|
+
|
|
218
|
+
### `required` (boolean)
|
|
219
|
+
|
|
220
|
+
Indicates if the item is required and the value cannot be empty
|
|
217
221
|
|
|
218
222
|
### `settings` (boolean)
|
|
219
223
|
|
|
@@ -239,6 +243,18 @@ Properties of the `NumberLineDimensions` object:
|
|
|
239
243
|
|
|
240
244
|
### `step` (number, required)
|
|
241
245
|
|
|
246
|
+
## `ConfigureProp` (object)
|
|
247
|
+
|
|
248
|
+
Properties of the `ConfigureProp` object:
|
|
249
|
+
|
|
250
|
+
### `settings` (boolean)
|
|
251
|
+
|
|
252
|
+
Indicates if the item has to be displayed in the Settings Panel
|
|
253
|
+
|
|
254
|
+
### `label` (string)
|
|
255
|
+
|
|
256
|
+
Indicates the label for the item that has to be displayed in the Settings Panel
|
|
257
|
+
|
|
242
258
|
## `ConfigureMathMLProp` (object)
|
|
243
259
|
|
|
244
260
|
Properties of the `ConfigureMathMLProp` object:
|
|
@@ -583,4 +599,4 @@ Contains tick interval type Integer, Fraction, Decimal
|
|
|
583
599
|
|
|
584
600
|
### `tickStep` (string, required)
|
|
585
601
|
|
|
586
|
-
Fraction representation of minor.
|
|
602
|
+
Fraction representation of minor.
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@pie-element/number-line",
|
|
3
|
-
"version": "7.
|
|
3
|
+
"version": "7.4.0",
|
|
4
4
|
"repository": "pie-framework/pie-elements",
|
|
5
5
|
"description": "",
|
|
6
6
|
"publishConfig": {
|
|
@@ -23,7 +23,7 @@
|
|
|
23
23
|
},
|
|
24
24
|
"author": "pie framework developers",
|
|
25
25
|
"license": "ISC",
|
|
26
|
-
"gitHead": "
|
|
26
|
+
"gitHead": "446f9ec20d50244c930de7dfb0014633b3968fe6",
|
|
27
27
|
"scripts": {
|
|
28
28
|
"postpublish": "../../scripts/postpublish"
|
|
29
29
|
},
|