@pie-element/graphing-solution-set 5.0.0-next.43 → 5.1.0-next.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/configure/lib/correct-response.js +10 -10
- package/configure/lib/correct-response.js.map +1 -1
- package/configure/lib/graphing-config.js +3 -3
- package/configure/lib/graphing-config.js.map +1 -1
- package/configure/lib/utils.js +3 -4
- package/configure/lib/utils.js.map +1 -1
- package/configure/package.json +7 -7
- package/controller/lib/index.js +11 -13
- package/controller/lib/index.js.map +1 -1
- package/controller/lib/utils.js +7 -11
- package/controller/lib/utils.js.map +1 -1
- package/controller/package.json +1 -1
- package/package.json +11 -8
|
@@ -11,7 +11,7 @@ var _propTypes = _interopRequireDefault(require("prop-types"));
|
|
|
11
11
|
var _styles = require("@mui/material/styles");
|
|
12
12
|
var _graphingSolutionSet = require("@pie-lib/graphing-solution-set");
|
|
13
13
|
var _configUi = require("@pie-lib/config-ui");
|
|
14
|
-
var
|
|
14
|
+
var _lodashEs = require("lodash-es");
|
|
15
15
|
var _material = require("@mui/material");
|
|
16
16
|
var _Radio = _interopRequireDefault(require("@mui/material/Radio"));
|
|
17
17
|
var _FormControlLabel = _interopRequireDefault(require("@mui/material/FormControlLabel"));
|
|
@@ -76,9 +76,9 @@ class CorrectResponse extends React.Component {
|
|
|
76
76
|
}
|
|
77
77
|
if (marks.length === 0) {
|
|
78
78
|
gssLineData.selectedTool = 'lineA';
|
|
79
|
-
(0,
|
|
79
|
+
(0, _lodashEs.set)(model, 'gssLineData', gssLineData);
|
|
80
80
|
}
|
|
81
|
-
(0,
|
|
81
|
+
(0, _lodashEs.set)(model, 'answers.correctAnswer.marks', marks);
|
|
82
82
|
onChange(model);
|
|
83
83
|
});
|
|
84
84
|
/*
|
|
@@ -104,8 +104,8 @@ class CorrectResponse extends React.Component {
|
|
|
104
104
|
gssLineData.selectedTool = 'lineA';
|
|
105
105
|
gssLineData.lineA.lineType = 'Solid';
|
|
106
106
|
if (gssLineData.lineB) gssLineData.lineB.lineType = 'Solid';
|
|
107
|
-
(0,
|
|
108
|
-
(0,
|
|
107
|
+
(0, _lodashEs.set)(model, 'answers', answers);
|
|
108
|
+
(0, _lodashEs.set)(model, 'gssLineData', gssLineData);
|
|
109
109
|
onChange(model);
|
|
110
110
|
this.handleAlertDialog(false);
|
|
111
111
|
},
|
|
@@ -170,8 +170,8 @@ class CorrectResponse extends React.Component {
|
|
|
170
170
|
};
|
|
171
171
|
}
|
|
172
172
|
//reset solution set
|
|
173
|
-
(0,
|
|
174
|
-
(0,
|
|
173
|
+
(0, _lodashEs.set)(model, 'answers', answers);
|
|
174
|
+
(0, _lodashEs.set)(model, 'gssLineData', gssLineData);
|
|
175
175
|
onChange(model);
|
|
176
176
|
});
|
|
177
177
|
/*
|
|
@@ -204,7 +204,7 @@ class CorrectResponse extends React.Component {
|
|
|
204
204
|
break;
|
|
205
205
|
}
|
|
206
206
|
}
|
|
207
|
-
(0,
|
|
207
|
+
(0, _lodashEs.set)(model, 'answers', answers);
|
|
208
208
|
onChange(model);
|
|
209
209
|
});
|
|
210
210
|
/*
|
|
@@ -306,8 +306,8 @@ class CorrectResponse extends React.Component {
|
|
|
306
306
|
});
|
|
307
307
|
gssLineData.selectedTool = 'lineB';
|
|
308
308
|
}
|
|
309
|
-
(0,
|
|
310
|
-
(0,
|
|
309
|
+
(0, _lodashEs.set)(model, 'gssLineData', gssLineData);
|
|
310
|
+
(0, _lodashEs.set)(model, 'answers', answers);
|
|
311
311
|
onChange(model);
|
|
312
312
|
});
|
|
313
313
|
/*
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"correct-response.js","names":["React","_interopRequireWildcard","require","_propTypes","_interopRequireDefault","_styles","_graphingSolutionSet","_configUi","_lodash","_material","_Radio","_FormControlLabel","_utils","e","t","WeakMap","r","n","__esModule","o","i","f","__proto__","default","has","get","set","hasOwnProperty","call","Object","defineProperty","getOwnPropertyDescriptor","SubtitleText","styled","Typography","theme","marginTop","spacing","marginBottom","RadioButtonClass","FormControlLabel","height","width","padding","StyledRadio","Radio","color","ErrorMessage","fontSize","typography","palette","error","main","paddingTop","CorrectResponse","Component","constructor","args","_defineProperty2","dialog","open","callback","setState","marks","model","onChange","props","gssLineData","selectedTool","length","fill","lineType","answers","title","text","onConfirm","correctAnswer","lineA","lineB","handleAlertDialog","onClose","value","changeLine","filter","mark","type","Number","parseInt","pop","numberOfLines","point","section","sections","pointInsidePolygon","polygon","points","building","closed","isSolution","push","oldSelectedTool","domain","range","lines","checkIfLinesAreAdded","findSectionsInSolutionSet","handleGssLineDataChange","polygons","onConfirmText","render","errors","mathMlOptions","state","arrows","coordinatesOnHover","graph","labels","labelsEnabled","titleEnabled","correctAnswerErrors","createElement","component","variant","RadioGroup","name","changeNumberOfLines","control","checked","label","Fragment","GraphContainer","style","border","axesSettings","includeArrows","backgroundMarks","disabledLabels","disabledTitle","draggableTools","onChangeMarks","newMarks","changeMarks","onCustomReset","onResetClick","showLabels","showTitle","size","onChangeGssLineData","onSolutionSetSelected","toolbarTools","AlertDialog","exports","PropTypes","object","isRequired","func","_default"],"sources":["../src/correct-response.jsx"],"sourcesContent":["import * as React from 'react';\nimport PropTypes from 'prop-types';\nimport { styled } from '@mui/material/styles';\nimport { GraphContainer as Graph } from '@pie-lib/graphing-solution-set';\nimport { AlertDialog } from '@pie-lib/config-ui';\nimport { set } from 'lodash';\nimport { RadioGroup, Typography } from '@mui/material';\nimport Radio from '@mui/material/Radio';\nimport FormControlLabel from '@mui/material/FormControlLabel';\nimport { findSectionsInSolutionSet, pointInsidePolygon, checkIfLinesAreAdded } from './utils';\n\nconst SubtitleText = styled(Typography)(({ theme }) => ({\n marginTop: theme.spacing(1.5),\n marginBottom: theme.spacing(1),\n}));\n\nconst RadioButtonClass = styled(FormControlLabel)({\n height: '20px',\n width: 'fit-content',\n padding: '.5rem 0',\n});\n\nconst StyledRadio = styled(Radio)({\n color: '#000000 !important',\n});\n\nconst ErrorMessage = styled('div')(({ theme }) => ({\n fontSize: theme.typography.fontSize - 2,\n color: theme.palette.error.main,\n paddingTop: theme.spacing(1),\n}));\n\nexport class CorrectResponse extends React.Component {\n static propTypes = {\n errors: PropTypes.object,\n model: PropTypes.object.isRequired,\n onChange: PropTypes.func.isRequired,\n };\n\n state = {\n dialog: {\n open: false,\n },\n };\n\n /*\n * Function to handle the alert dialog open and close\n * @param {boolean} open - open or close the dialog\n * @param {function} callback - callback function to be called after setting the state\n * */\n handleAlertDialog = (open, callback) =>\n this.setState(\n {\n dialog: { open },\n },\n callback,\n );\n\n /*\n * Function to change the marks on the graph\n * @param {array} marks - marks to be added on the graph\n * */\n changeMarks = (marks) => {\n const { model, onChange } = this.props;\n const { gssLineData } = model;\n if (gssLineData.selectedTool === 'lineA' && marks.length > 0) {\n marks[0].fill = gssLineData['lineA'].lineType;\n }\n if (gssLineData.selectedTool === 'lineB' && marks.length > 1) {\n marks[1].fill = gssLineData['lineB'].lineType;\n }\n if (marks.length === 0) {\n gssLineData.selectedTool = 'lineA';\n set(model, 'gssLineData', gssLineData);\n }\n set(model, 'answers.correctAnswer.marks', marks);\n onChange(model);\n };\n\n /*\n * Reset the graph to original state and remove all the elements added on the graph\n * */\n onResetClick = () => {\n const { model, onChange } = this.props;\n const { gssLineData, answers } = model;\n this.setState({\n dialog: {\n open: true,\n title: 'Warning',\n text: 'This will remove all the elements added on the graph and reset graph to original state. Are you sure you want to continue?',\n onConfirm: () => {\n // Reset the graph to original state\n answers.correctAnswer.marks = [];\n gssLineData.selectedTool = 'lineA';\n gssLineData.lineA.lineType = 'Solid';\n if (gssLineData.lineB) gssLineData.lineB.lineType = 'Solid';\n set(model, 'answers', answers);\n set(model, 'gssLineData', gssLineData);\n onChange(model);\n this.handleAlertDialog(false);\n },\n onClose: () => this.handleAlertDialog(false),\n },\n });\n };\n\n /*\n * Function to change the number of lines on the graph\n * @param {object} e - event object\n * @param {number} value - number of lines to be added on the graph\n * */\n changeNumberOfLines = (e, value) => {\n const { model } = this.props;\n let gssLineData = model.gssLineData;\n if (gssLineData.selectedTool === 'solutionSet') {\n this.setState({\n dialog: {\n open: true,\n title: 'Warning',\n text: 'Changing number of lines after adding solution set will remove added solution set. Are you sure you want to continue?',\n onConfirm: () => {\n this.changeLine(e, value);\n this.handleAlertDialog(false);\n },\n onClose: () => this.handleAlertDialog(false),\n },\n });\n } else {\n this.changeLine(e, value);\n }\n };\n\n /*\n * Function to change the number of line on the graph\n * @param {object} e - event object\n * @param {number} value - number of lines to be added on the graph\n * */\n changeLine = (e, value) => {\n const { model, onChange } = this.props;\n const { answers } = model;\n let gssLineData = model.gssLineData;\n //remove polygon from correct answer\n answers.correctAnswer.marks = answers.correctAnswer.marks.filter((mark) => mark.type !== 'polygon');\n if (Number.parseInt(value) === 1) {\n //remove lineB from gssLineData and correct answer\n delete gssLineData.lineB;\n if (answers.correctAnswer.marks.length > 1) answers.correctAnswer.marks.pop();\n gssLineData.numberOfLines = 1;\n gssLineData.selectedTool = 'lineA';\n } else {\n gssLineData.numberOfLines = 2;\n if (answers.correctAnswer.marks.length > 0) gssLineData.selectedTool = 'lineB';\n gssLineData.lineB = {\n lineType: 'Solid',\n };\n }\n //reset solution set\n set(model, 'answers', answers);\n set(model, 'gssLineData', gssLineData);\n onChange(model);\n };\n\n /*\n * Function to handle the changes to solution set on the graph\n * @param {object} point - point selected on the graph\n * */\n onSolutionSetSelected = (point) => {\n const { model, onChange } = this.props;\n const { answers, gssLineData } = model;\n for (const section of gssLineData.sections) {\n //check if the point is inside the polygon\n if (pointInsidePolygon(point, section)) {\n let polygon = {\n points: section,\n building: false,\n type: 'polygon',\n closed: true,\n isSolution: true,\n };\n //remove old answer section from correct answer\n answers.correctAnswer.marks = answers.correctAnswer.marks.filter((mark) => mark.type !== 'polygon');\n //add new answer section to correct answer\n answers.correctAnswer.marks.push(polygon);\n break;\n }\n }\n set(model, 'answers', answers);\n onChange(model);\n };\n\n /*\n * Function to handle the changes to line data on the graph\n * @param {object} gssLineData - line data on the graph\n * @param {string} oldSelectedTool - old selected tool\n * */\n onChangeGssLineData = (gssLineData, oldSelectedTool) => {\n const { model } = this.props;\n const { answers, domain, range } = model;\n //handle solution set changes\n if (gssLineData.selectedTool === 'solutionSet') {\n let lines = answers.correctAnswer.marks.filter((mark) => mark.type !== 'polygon');\n if (!checkIfLinesAreAdded(gssLineData, lines)) {\n gssLineData.selectedTool = oldSelectedTool;\n this.setState({\n dialog: {\n open: true,\n title: 'Warning',\n text: 'Please define the line(s) and then select a solution set for the item.',\n onConfirm: () => this.handleAlertDialog(false),\n },\n });\n } else {\n let lines = answers.correctAnswer.marks.filter((mark) => mark.type !== 'polygon');\n gssLineData = findSectionsInSolutionSet(gssLineData, lines, domain, range);\n }\n this.handleGssLineDataChange(gssLineData, answers);\n } else {\n let polygons = answers.correctAnswer.marks.filter((mark) => mark.type === 'polygon');\n if (oldSelectedTool === 'solutionSet' && polygons.length > 0) {\n this.setState({\n dialog: {\n open: true,\n title: 'Warning',\n text: 'Changing a line after adding a solution set will clear your selected solution set. Click \\'Clear Solution Set\\' to change the line. Otherwise, click \\'Cancel\\'.',\n onConfirm: () => {\n answers.correctAnswer.marks = answers.correctAnswer.marks.filter((mark) => mark.type !== 'polygon');\n this.handleGssLineDataChange(gssLineData, answers);\n this.handleAlertDialog(false);\n },\n onConfirmText: 'CLEAR SOLUTION SET',\n onClose: () => {\n gssLineData.selectedTool = oldSelectedTool;\n this.handleGssLineDataChange(gssLineData, answers);\n this.handleAlertDialog(false);\n },\n },\n });\n } else {\n this.handleGssLineDataChange(gssLineData, answers);\n }\n }\n };\n\n /*\n * Function to handle the changes to line data on the graph\n * @param {object} gssLineData - line data on the graph\n * @param {object} answers - correct answer\n * */\n handleGssLineDataChange = (gssLineData, answers) => {\n const { model, onChange } = this.props;\n //handle line type changes from solid to dashed and vice versa\n if (answers.correctAnswer.marks.length > 0 && answers.correctAnswer.marks[0] && gssLineData.lineA) {\n answers.correctAnswer.marks[0].fill = gssLineData.lineA.lineType;\n }\n if (answers.correctAnswer.marks.length > 1 && answers.correctAnswer.marks[1] && gssLineData.lineB) {\n answers.correctAnswer.marks[1].fill = gssLineData.lineB.lineType;\n }\n //check if line is added to the graph before switching to lineB\n if (\n (gssLineData.selectedTool === 'lineB' && answers.correctAnswer.marks.length === 0) ||\n (gssLineData.selectedTool === 'lineB' && answers.correctAnswer.marks[0].building)\n ) {\n this.setState({\n dialog: {\n open: true,\n title: 'Warning',\n text: 'Please add Line A to the graph before adding Line B',\n onConfirm: () => this.handleAlertDialog(false),\n },\n });\n gssLineData.selectedTool = 'lineA';\n }\n //check if lineB is added to the graph before switching to lineA\n if (\n gssLineData.selectedTool === 'lineA' &&\n answers.correctAnswer.marks.length > 1 &&\n answers.correctAnswer.marks[1].building\n ) {\n this.setState({\n dialog: {\n open: true,\n title: 'Warning',\n text: 'Please add Line B to the graph before switching to Line A',\n onConfirm: () => this.handleAlertDialog(false),\n },\n });\n gssLineData.selectedTool = 'lineB';\n }\n set(model, 'gssLineData', gssLineData);\n set(model, 'answers', answers);\n onChange(model);\n };\n\n /*\n * Function to update the model\n * @param {object} props - updated props\n * */\n updateModel = (props) => {\n const { model, onChange } = this.props;\n onChange({\n ...model,\n ...props,\n });\n };\n\n /*\n * Render the component\n * */\n render() {\n const { errors, model, mathMlOptions = {} } = this.props;\n const { dialog } = this.state;\n //get the default values to GssLineData\n const {\n gssLineData = {\n numberOfLines: 1,\n selectedTool: 'lineA',\n lineA: {\n lineType: 'Solid',\n },\n },\n arrows,\n coordinatesOnHover,\n domain,\n graph = {},\n labels,\n labelsEnabled,\n range,\n title,\n titleEnabled,\n answers,\n } = model || {};\n const { correctAnswerErrors = '' } = errors || {};\n return (\n <div>\n <Typography component=\"div\" variant=\"h6\">\n Define Line Type(s) and Correct Response\n </Typography>\n <SubtitleText component=\"div\" variant=\"body1\">\n Use this interface to choose how many lines students will be able to draw, and to define the correct answer.\n </SubtitleText>\n <SubtitleText component=\"div\" variant=\"body1\">\n Choose Number of Lines\n </SubtitleText>\n <RadioGroup name=\"numberOfLines\" value={gssLineData.numberOfLines} onChange={this.changeNumberOfLines}>\n <RadioButtonClass\n value=\"1\"\n control={<StyledRadio checked={gssLineData.numberOfLines === 1} />}\n label=\"One\"\n />\n <RadioButtonClass\n value=\"2\"\n control={<StyledRadio checked={gssLineData.numberOfLines === 2} />}\n label=\"Two\"\n />\n </RadioGroup>\n <React.Fragment>\n <Graph\n style={correctAnswerErrors['correctAnswer'] && { border: '2px solid red' }}\n axesSettings={{ includeArrows: arrows }}\n backgroundMarks={[]}\n coordinatesOnHover={coordinatesOnHover}\n disabledLabels={true}\n disabledTitle={true}\n domain={domain}\n draggableTools={true}\n labels={labels}\n marks={answers && answers.correctAnswer && answers.correctAnswer.marks ? answers.correctAnswer.marks : []}\n onChangeMarks={(newMarks) => this.changeMarks(newMarks)}\n onCustomReset={this.onResetClick}\n range={range}\n showLabels={labelsEnabled}\n showTitle={titleEnabled}\n size={{ width: graph.width, height: graph.height }}\n title={title}\n gssLineData={gssLineData}\n onChangeGssLineData={this.onChangeGssLineData}\n onSolutionSetSelected={this.onSolutionSetSelected}\n toolbarTools={['line', 'polygon']}\n mathMlOptions={mathMlOptions}\n />\n {correctAnswerErrors['correctAnswer'] && (\n <ErrorMessage>{correctAnswerErrors['correctAnswer']}</ErrorMessage>\n )}\n </React.Fragment>\n <AlertDialog\n open={dialog.open}\n title={dialog.title}\n text={dialog.text}\n onClose={dialog.onClose}\n onConfirm={dialog.onConfirm}\n onConfirmText={dialog.onConfirmText ? dialog.onConfirmText : 'OK'}\n />\n </div>\n );\n }\n}\n\nexport default CorrectResponse;\n"],"mappings":"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","ignoreList":[]}
|
|
1
|
+
{"version":3,"file":"correct-response.js","names":["React","_interopRequireWildcard","require","_propTypes","_interopRequireDefault","_styles","_graphingSolutionSet","_configUi","_lodashEs","_material","_Radio","_FormControlLabel","_utils","e","t","WeakMap","r","n","__esModule","o","i","f","__proto__","default","has","get","set","hasOwnProperty","call","Object","defineProperty","getOwnPropertyDescriptor","SubtitleText","styled","Typography","theme","marginTop","spacing","marginBottom","RadioButtonClass","FormControlLabel","height","width","padding","StyledRadio","Radio","color","ErrorMessage","fontSize","typography","palette","error","main","paddingTop","CorrectResponse","Component","constructor","args","_defineProperty2","dialog","open","callback","setState","marks","model","onChange","props","gssLineData","selectedTool","length","fill","lineType","answers","title","text","onConfirm","correctAnswer","lineA","lineB","handleAlertDialog","onClose","value","changeLine","filter","mark","type","Number","parseInt","pop","numberOfLines","point","section","sections","pointInsidePolygon","polygon","points","building","closed","isSolution","push","oldSelectedTool","domain","range","lines","checkIfLinesAreAdded","findSectionsInSolutionSet","handleGssLineDataChange","polygons","onConfirmText","render","errors","mathMlOptions","state","arrows","coordinatesOnHover","graph","labels","labelsEnabled","titleEnabled","correctAnswerErrors","createElement","component","variant","RadioGroup","name","changeNumberOfLines","control","checked","label","Fragment","GraphContainer","style","border","axesSettings","includeArrows","backgroundMarks","disabledLabels","disabledTitle","draggableTools","onChangeMarks","newMarks","changeMarks","onCustomReset","onResetClick","showLabels","showTitle","size","onChangeGssLineData","onSolutionSetSelected","toolbarTools","AlertDialog","exports","PropTypes","object","isRequired","func","_default"],"sources":["../src/correct-response.jsx"],"sourcesContent":["import * as React from 'react';\nimport PropTypes from 'prop-types';\nimport { styled } from '@mui/material/styles';\nimport { GraphContainer as Graph } from '@pie-lib/graphing-solution-set';\nimport { AlertDialog } from '@pie-lib/config-ui';\nimport { set } from 'lodash-es';\nimport { RadioGroup, Typography } from '@mui/material';\nimport Radio from '@mui/material/Radio';\nimport FormControlLabel from '@mui/material/FormControlLabel';\nimport { findSectionsInSolutionSet, pointInsidePolygon, checkIfLinesAreAdded } from './utils';\n\nconst SubtitleText = styled(Typography)(({ theme }) => ({\n marginTop: theme.spacing(1.5),\n marginBottom: theme.spacing(1),\n}));\n\nconst RadioButtonClass = styled(FormControlLabel)({\n height: '20px',\n width: 'fit-content',\n padding: '.5rem 0',\n});\n\nconst StyledRadio = styled(Radio)({\n color: '#000000 !important',\n});\n\nconst ErrorMessage = styled('div')(({ theme }) => ({\n fontSize: theme.typography.fontSize - 2,\n color: theme.palette.error.main,\n paddingTop: theme.spacing(1),\n}));\n\nexport class CorrectResponse extends React.Component {\n static propTypes = {\n errors: PropTypes.object,\n model: PropTypes.object.isRequired,\n onChange: PropTypes.func.isRequired,\n };\n\n state = {\n dialog: {\n open: false,\n },\n };\n\n /*\n * Function to handle the alert dialog open and close\n * @param {boolean} open - open or close the dialog\n * @param {function} callback - callback function to be called after setting the state\n * */\n handleAlertDialog = (open, callback) =>\n this.setState(\n {\n dialog: { open },\n },\n callback,\n );\n\n /*\n * Function to change the marks on the graph\n * @param {array} marks - marks to be added on the graph\n * */\n changeMarks = (marks) => {\n const { model, onChange } = this.props;\n const { gssLineData } = model;\n if (gssLineData.selectedTool === 'lineA' && marks.length > 0) {\n marks[0].fill = gssLineData['lineA'].lineType;\n }\n if (gssLineData.selectedTool === 'lineB' && marks.length > 1) {\n marks[1].fill = gssLineData['lineB'].lineType;\n }\n if (marks.length === 0) {\n gssLineData.selectedTool = 'lineA';\n set(model, 'gssLineData', gssLineData);\n }\n set(model, 'answers.correctAnswer.marks', marks);\n onChange(model);\n };\n\n /*\n * Reset the graph to original state and remove all the elements added on the graph\n * */\n onResetClick = () => {\n const { model, onChange } = this.props;\n const { gssLineData, answers } = model;\n this.setState({\n dialog: {\n open: true,\n title: 'Warning',\n text: 'This will remove all the elements added on the graph and reset graph to original state. Are you sure you want to continue?',\n onConfirm: () => {\n // Reset the graph to original state\n answers.correctAnswer.marks = [];\n gssLineData.selectedTool = 'lineA';\n gssLineData.lineA.lineType = 'Solid';\n if (gssLineData.lineB) gssLineData.lineB.lineType = 'Solid';\n set(model, 'answers', answers);\n set(model, 'gssLineData', gssLineData);\n onChange(model);\n this.handleAlertDialog(false);\n },\n onClose: () => this.handleAlertDialog(false),\n },\n });\n };\n\n /*\n * Function to change the number of lines on the graph\n * @param {object} e - event object\n * @param {number} value - number of lines to be added on the graph\n * */\n changeNumberOfLines = (e, value) => {\n const { model } = this.props;\n let gssLineData = model.gssLineData;\n if (gssLineData.selectedTool === 'solutionSet') {\n this.setState({\n dialog: {\n open: true,\n title: 'Warning',\n text: 'Changing number of lines after adding solution set will remove added solution set. Are you sure you want to continue?',\n onConfirm: () => {\n this.changeLine(e, value);\n this.handleAlertDialog(false);\n },\n onClose: () => this.handleAlertDialog(false),\n },\n });\n } else {\n this.changeLine(e, value);\n }\n };\n\n /*\n * Function to change the number of line on the graph\n * @param {object} e - event object\n * @param {number} value - number of lines to be added on the graph\n * */\n changeLine = (e, value) => {\n const { model, onChange } = this.props;\n const { answers } = model;\n let gssLineData = model.gssLineData;\n //remove polygon from correct answer\n answers.correctAnswer.marks = answers.correctAnswer.marks.filter((mark) => mark.type !== 'polygon');\n if (Number.parseInt(value) === 1) {\n //remove lineB from gssLineData and correct answer\n delete gssLineData.lineB;\n if (answers.correctAnswer.marks.length > 1) answers.correctAnswer.marks.pop();\n gssLineData.numberOfLines = 1;\n gssLineData.selectedTool = 'lineA';\n } else {\n gssLineData.numberOfLines = 2;\n if (answers.correctAnswer.marks.length > 0) gssLineData.selectedTool = 'lineB';\n gssLineData.lineB = {\n lineType: 'Solid',\n };\n }\n //reset solution set\n set(model, 'answers', answers);\n set(model, 'gssLineData', gssLineData);\n onChange(model);\n };\n\n /*\n * Function to handle the changes to solution set on the graph\n * @param {object} point - point selected on the graph\n * */\n onSolutionSetSelected = (point) => {\n const { model, onChange } = this.props;\n const { answers, gssLineData } = model;\n for (const section of gssLineData.sections) {\n //check if the point is inside the polygon\n if (pointInsidePolygon(point, section)) {\n let polygon = {\n points: section,\n building: false,\n type: 'polygon',\n closed: true,\n isSolution: true,\n };\n //remove old answer section from correct answer\n answers.correctAnswer.marks = answers.correctAnswer.marks.filter((mark) => mark.type !== 'polygon');\n //add new answer section to correct answer\n answers.correctAnswer.marks.push(polygon);\n break;\n }\n }\n set(model, 'answers', answers);\n onChange(model);\n };\n\n /*\n * Function to handle the changes to line data on the graph\n * @param {object} gssLineData - line data on the graph\n * @param {string} oldSelectedTool - old selected tool\n * */\n onChangeGssLineData = (gssLineData, oldSelectedTool) => {\n const { model } = this.props;\n const { answers, domain, range } = model;\n //handle solution set changes\n if (gssLineData.selectedTool === 'solutionSet') {\n let lines = answers.correctAnswer.marks.filter((mark) => mark.type !== 'polygon');\n if (!checkIfLinesAreAdded(gssLineData, lines)) {\n gssLineData.selectedTool = oldSelectedTool;\n this.setState({\n dialog: {\n open: true,\n title: 'Warning',\n text: 'Please define the line(s) and then select a solution set for the item.',\n onConfirm: () => this.handleAlertDialog(false),\n },\n });\n } else {\n let lines = answers.correctAnswer.marks.filter((mark) => mark.type !== 'polygon');\n gssLineData = findSectionsInSolutionSet(gssLineData, lines, domain, range);\n }\n this.handleGssLineDataChange(gssLineData, answers);\n } else {\n let polygons = answers.correctAnswer.marks.filter((mark) => mark.type === 'polygon');\n if (oldSelectedTool === 'solutionSet' && polygons.length > 0) {\n this.setState({\n dialog: {\n open: true,\n title: 'Warning',\n text: 'Changing a line after adding a solution set will clear your selected solution set. Click \\'Clear Solution Set\\' to change the line. Otherwise, click \\'Cancel\\'.',\n onConfirm: () => {\n answers.correctAnswer.marks = answers.correctAnswer.marks.filter((mark) => mark.type !== 'polygon');\n this.handleGssLineDataChange(gssLineData, answers);\n this.handleAlertDialog(false);\n },\n onConfirmText: 'CLEAR SOLUTION SET',\n onClose: () => {\n gssLineData.selectedTool = oldSelectedTool;\n this.handleGssLineDataChange(gssLineData, answers);\n this.handleAlertDialog(false);\n },\n },\n });\n } else {\n this.handleGssLineDataChange(gssLineData, answers);\n }\n }\n };\n\n /*\n * Function to handle the changes to line data on the graph\n * @param {object} gssLineData - line data on the graph\n * @param {object} answers - correct answer\n * */\n handleGssLineDataChange = (gssLineData, answers) => {\n const { model, onChange } = this.props;\n //handle line type changes from solid to dashed and vice versa\n if (answers.correctAnswer.marks.length > 0 && answers.correctAnswer.marks[0] && gssLineData.lineA) {\n answers.correctAnswer.marks[0].fill = gssLineData.lineA.lineType;\n }\n if (answers.correctAnswer.marks.length > 1 && answers.correctAnswer.marks[1] && gssLineData.lineB) {\n answers.correctAnswer.marks[1].fill = gssLineData.lineB.lineType;\n }\n //check if line is added to the graph before switching to lineB\n if (\n (gssLineData.selectedTool === 'lineB' && answers.correctAnswer.marks.length === 0) ||\n (gssLineData.selectedTool === 'lineB' && answers.correctAnswer.marks[0].building)\n ) {\n this.setState({\n dialog: {\n open: true,\n title: 'Warning',\n text: 'Please add Line A to the graph before adding Line B',\n onConfirm: () => this.handleAlertDialog(false),\n },\n });\n gssLineData.selectedTool = 'lineA';\n }\n //check if lineB is added to the graph before switching to lineA\n if (\n gssLineData.selectedTool === 'lineA' &&\n answers.correctAnswer.marks.length > 1 &&\n answers.correctAnswer.marks[1].building\n ) {\n this.setState({\n dialog: {\n open: true,\n title: 'Warning',\n text: 'Please add Line B to the graph before switching to Line A',\n onConfirm: () => this.handleAlertDialog(false),\n },\n });\n gssLineData.selectedTool = 'lineB';\n }\n set(model, 'gssLineData', gssLineData);\n set(model, 'answers', answers);\n onChange(model);\n };\n\n /*\n * Function to update the model\n * @param {object} props - updated props\n * */\n updateModel = (props) => {\n const { model, onChange } = this.props;\n onChange({\n ...model,\n ...props,\n });\n };\n\n /*\n * Render the component\n * */\n render() {\n const { errors, model, mathMlOptions = {} } = this.props;\n const { dialog } = this.state;\n //get the default values to GssLineData\n const {\n gssLineData = {\n numberOfLines: 1,\n selectedTool: 'lineA',\n lineA: {\n lineType: 'Solid',\n },\n },\n arrows,\n coordinatesOnHover,\n domain,\n graph = {},\n labels,\n labelsEnabled,\n range,\n title,\n titleEnabled,\n answers,\n } = model || {};\n const { correctAnswerErrors = '' } = errors || {};\n return (\n <div>\n <Typography component=\"div\" variant=\"h6\">\n Define Line Type(s) and Correct Response\n </Typography>\n <SubtitleText component=\"div\" variant=\"body1\">\n Use this interface to choose how many lines students will be able to draw, and to define the correct answer.\n </SubtitleText>\n <SubtitleText component=\"div\" variant=\"body1\">\n Choose Number of Lines\n </SubtitleText>\n <RadioGroup name=\"numberOfLines\" value={gssLineData.numberOfLines} onChange={this.changeNumberOfLines}>\n <RadioButtonClass\n value=\"1\"\n control={<StyledRadio checked={gssLineData.numberOfLines === 1} />}\n label=\"One\"\n />\n <RadioButtonClass\n value=\"2\"\n control={<StyledRadio checked={gssLineData.numberOfLines === 2} />}\n label=\"Two\"\n />\n </RadioGroup>\n <React.Fragment>\n <Graph\n style={correctAnswerErrors['correctAnswer'] && { border: '2px solid red' }}\n axesSettings={{ includeArrows: arrows }}\n backgroundMarks={[]}\n coordinatesOnHover={coordinatesOnHover}\n disabledLabels={true}\n disabledTitle={true}\n domain={domain}\n draggableTools={true}\n labels={labels}\n marks={answers && answers.correctAnswer && answers.correctAnswer.marks ? answers.correctAnswer.marks : []}\n onChangeMarks={(newMarks) => this.changeMarks(newMarks)}\n onCustomReset={this.onResetClick}\n range={range}\n showLabels={labelsEnabled}\n showTitle={titleEnabled}\n size={{ width: graph.width, height: graph.height }}\n title={title}\n gssLineData={gssLineData}\n onChangeGssLineData={this.onChangeGssLineData}\n onSolutionSetSelected={this.onSolutionSetSelected}\n toolbarTools={['line', 'polygon']}\n mathMlOptions={mathMlOptions}\n />\n {correctAnswerErrors['correctAnswer'] && (\n <ErrorMessage>{correctAnswerErrors['correctAnswer']}</ErrorMessage>\n )}\n </React.Fragment>\n <AlertDialog\n open={dialog.open}\n title={dialog.title}\n text={dialog.text}\n onClose={dialog.onClose}\n onConfirm={dialog.onConfirm}\n onConfirmText={dialog.onConfirmText ? dialog.onConfirmText : 'OK'}\n />\n </div>\n );\n }\n}\n\nexport default CorrectResponse;\n"],"mappings":"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","ignoreList":[]}
|
|
@@ -13,7 +13,7 @@ var _configUi = require("@pie-lib/config-ui");
|
|
|
13
13
|
var _material = require("@mui/material");
|
|
14
14
|
var _styles = require("@mui/material/styles");
|
|
15
15
|
var _utils = require("./utils");
|
|
16
|
-
var
|
|
16
|
+
var _lodashEs = require("lodash-es");
|
|
17
17
|
function _interopRequireWildcard(e, t) { if ("function" == typeof WeakMap) var r = new WeakMap(), n = new WeakMap(); return (_interopRequireWildcard = function (e, t) { if (!t && e && e.__esModule) return e; var o, i, f = { __proto__: null, default: e }; if (null === e || "object" != typeof e && "function" != typeof e) return f; if (o = t ? n : r) { if (o.has(e)) return o.get(e); o.set(e, f); } for (const t in e) "default" !== t && {}.hasOwnProperty.call(e, t) && ((i = (o = Object.defineProperty) && Object.getOwnPropertyDescriptor(e, t)) && (i.get || i.set) ? o(f, t, i) : f[t] = e[t]); return f; })(e, t); }
|
|
18
18
|
const Container = (0, _styles.styled)('div')(({
|
|
19
19
|
theme
|
|
@@ -145,10 +145,10 @@ class GraphingConfig extends React.Component {
|
|
|
145
145
|
labelValues.range = rangeConstraints.labelValues || [];
|
|
146
146
|
}
|
|
147
147
|
}
|
|
148
|
-
const filteredAnswers = (0,
|
|
148
|
+
const filteredAnswers = (0, _lodashEs.cloneDeep)(answers);
|
|
149
149
|
filteredAnswers.correctAnswer.marks = answers.correctAnswer.marks.filter(mark => mark.type !== 'polygon');
|
|
150
150
|
const plotableAnswers = (0, _utils.filterPlotableMarks)(domain, range, filteredAnswers);
|
|
151
|
-
if (!(0,
|
|
151
|
+
if (!(0, _lodashEs.isEqual)(filteredAnswers, plotableAnswers)) {
|
|
152
152
|
this.setState({
|
|
153
153
|
dialog: {
|
|
154
154
|
isOpened: true,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"graphing-config.js","names":["React","_interopRequireWildcard","require","_propTypes","_interopRequireDefault","_graphingSolutionSet","_configUi","_material","_styles","_utils","_lodash","e","t","WeakMap","r","n","__esModule","o","i","f","__proto__","default","has","get","set","hasOwnProperty","call","Object","defineProperty","getOwnPropertyDescriptor","Container","styled","theme","display","flexWrap","marginBottom","spacing","GridConfigWrapper","flexDirection","marginRight","GraphConfig","SubtitleText","Typography","marginTop","GridConfig","alignItems","width","GridConfigLabel","padding","GridConfigSelect","Select","flex","GraphingConfig","Component","constructor","props","_defineProperty2","labels","model","onChange","title","config","newSelectedGrid","defaultGridConfiguration","oldSelectedGrid","gridValues","oldGridValues","labelValues","oldLabelValues","domain","oldDomain","range","oldRange","state","updatedModel","answers","includeAxes","graph","standardGrid","selectedGrid","domainConstraints","applyConstraints","step","labelStep","rangeConstraints","height","filteredAnswers","cloneDeep","correctAnswer","marks","filter","mark","type","plotableAnswers","filterPlotableMarks","isEqual","setState","dialog","isOpened","onClose","onConfirm","gssLineData","sections","selectedTool","event","expanded","graphDimensions","enabled","showPixelGuides","gridConfigurations","value","target","onConfigChange","getGridValues","getLabelValues","render","authoring","labelsPlaceholders","showLabels","dimensionsEnabled","showTitle","titlePlaceholder","mathMlOptions","arrows","coordinatesOnHover","min","max","sizeConstraints","Math","displayedFields","axisLabel","includeAxesEnabled","standardGridEnabled","displayGridSetup","values","some","field","createElement","length","component","variant","input","OutlinedInput","labelWidth","displayEmpty","changeGridConfiguration","MenuProps","transitionDuration","enter","exit","map","index","MenuItem","key","label","GridSetup","size","onChangeView","GraphContainer","axesSettings","includeArrows","backgroundMarks","collapsibleToolbar","collapsibleToolbarTitle","onChangeLabels","changeLabels","onChangeTitle","changeTitle","disableToolbar","AlertDialog","open","text","exports","availableTools","PropTypes","array","object","bool","isRequired","func","string","_default"],"sources":["../src/graphing-config.jsx"],"sourcesContent":["import * as React from 'react';\nimport PropTypes from 'prop-types';\nimport { GraphContainer, GridSetup } from '@pie-lib/graphing-solution-set';\nimport { AlertDialog } from '@pie-lib/config-ui';\nimport { MenuItem, Select, Typography, OutlinedInput } from '@mui/material';\nimport { styled } from '@mui/material/styles';\nimport { applyConstraints, filterPlotableMarks, getGridValues, getLabelValues } from './utils';\nimport { isEqual, cloneDeep } from 'lodash';\n\nconst Container = styled('div')(({ theme }) => ({\n display: 'flex',\n flexWrap: 'wrap',\n marginBottom: theme.spacing(2.5),\n}));\n\nconst GridConfigWrapper = styled('div')(({ theme }) => ({\n display: 'flex',\n flexDirection: 'column',\n marginRight: theme.spacing(3),\n marginBottom: theme.spacing(2.5),\n}));\n\nconst GraphConfig = styled('div')({\n display: 'flex',\n flexDirection: 'column',\n});\n\nconst SubtitleText = styled(Typography)(({ theme }) => ({\n marginTop: theme.spacing(1.5),\n marginBottom: theme.spacing(1),\n}));\n\nconst GridConfig = styled('div')(({ theme }) => ({\n display: 'flex',\n flexWrap: 'wrap',\n alignItems: 'center',\n width: '100%',\n marginBottom: theme.spacing(2.5),\n}));\n\nconst GridConfigLabel = styled(Typography)(({ theme }) => ({\n padding: `0 ${theme.spacing(1)}`,\n}));\n\nconst GridConfigSelect = styled(Select)({\n flex: '1',\n});\n\nexport class GraphingConfig extends React.Component {\n static propTypes = {\n availableTools: PropTypes.array,\n authoring: PropTypes.object,\n dimensionsEnabled: PropTypes.bool,\n graphDimensions: PropTypes.object,\n gridConfigurations: PropTypes.array,\n labelsPlaceholders: PropTypes.object,\n model: PropTypes.object.isRequired,\n onChange: PropTypes.func.isRequired,\n showLabels: PropTypes.bool,\n showTitle: PropTypes.bool,\n titlePlaceholder: PropTypes.string,\n };\n\n constructor(props) {\n super(props);\n const { domain, range, graph } = props.model || {};\n const gridValues = {\n domain: getGridValues(domain, graph.width, true),\n range: getGridValues(range, graph.height, true),\n };\n const labelValues = {\n domain: getLabelValues(domain.step),\n range: getLabelValues(range.step),\n };\n this.state = {\n gridValues,\n labelValues,\n showPixelGuides: false,\n dialog: { isOpened: false },\n domain: { ...domain },\n range: { ...range },\n };\n }\n\n /*\n * Function to change labels\n * @param {object} labels - labels object\n * */\n changeLabels = (labels) => {\n const { model, onChange } = this.props;\n onChange({ ...model, labels });\n };\n\n /*\n * Function to change title\n * @param {string} title - title string\n * */\n changeTitle = (title) => {\n const { model, onChange } = this.props;\n onChange({ ...model, title });\n };\n\n /*\n * Function to change grid configuration\n * @param {object} config - grid configuration object\n * @param {number} newSelectedGrid - new selected grid\n * */\n onConfigChange = (config, newSelectedGrid) => {\n const { model, onChange } = this.props;\n const { defaultGridConfiguration: oldSelectedGrid = 0 } = model;\n const { gridValues: oldGridValues, labelValues: oldLabelValues, domain: oldDomain, range: oldRange } = this.state;\n const updatedModel = { ...model, ...config };\n const { answers, domain, includeAxes = true, graph, range, standardGrid } = updatedModel;\n const gridValues = { domain: [], range: [] };\n const labelValues = { domain: [], range: [] };\n const selectedGrid = newSelectedGrid >= 0 ? newSelectedGrid : oldSelectedGrid;\n if (includeAxes) {\n const domainConstraints = applyConstraints(domain, graph.width, oldGridValues.domain, oldLabelValues.domain);\n gridValues.domain = domainConstraints.gridValues || [];\n labelValues.domain = domainConstraints.labelValues || [];\n }\n if (standardGrid) {\n gridValues.range = gridValues.domain;\n labelValues.range = labelValues.domain;\n range.step = domain.step;\n range.labelStep = domain.labelStep;\n } else {\n if (includeAxes) {\n const rangeConstraints = applyConstraints(range, graph.height, oldGridValues.range, oldLabelValues.range);\n gridValues.range = rangeConstraints.gridValues || [];\n labelValues.range = rangeConstraints.labelValues || [];\n }\n }\n const filteredAnswers = cloneDeep(answers);\n filteredAnswers.correctAnswer.marks = answers.correctAnswer.marks.filter((mark) => mark.type !== 'polygon');\n const plotableAnswers = filterPlotableMarks(domain, range, filteredAnswers);\n if (!isEqual(filteredAnswers, plotableAnswers)) {\n this.setState({\n dialog: {\n isOpened: true,\n onClose: () =>\n this.setState({ dialog: { isOpened: false } }, onChange({ ...model, domain: oldDomain, range: oldRange })),\n onConfirm: () => {\n updatedModel.gssLineData.sections = [];\n updatedModel.gssLineData.selectedTool = 'lineA';\n this.setState(\n {\n gridValues,\n labelValues,\n dialog: { isOpened: false },\n domain: { ...domain },\n range: { ...range },\n },\n onChange({ ...updatedModel, answers: plotableAnswers, defaultGridConfiguration: selectedGrid }),\n );\n },\n },\n });\n return;\n }\n this.setState({ gridValues, labelValues, domain: { ...domain }, range: { ...range } });\n onChange({ ...updatedModel, defaultGridConfiguration: selectedGrid });\n };\n\n /*\n * Function to change view\n * @param {object} event - event object\n * @param {boolean} expanded - expanded boolean\n * */\n onChangeView = (event, expanded) => {\n const { graphDimensions: { enabled } = {} } = this.props;\n if (enabled) {\n this.setState({ showPixelGuides: expanded });\n }\n };\n\n /*\n * Function to change grid configuration\n * @param {object} event - event object\n * */\n changeGridConfiguration = (event) => {\n const { gridConfigurations } = this.props;\n const { value } = event.target;\n this.onConfigChange(gridConfigurations?.[value] || {}, value);\n };\n\n /*\n * Render the component\n * */\n render() {\n const {\n authoring = {},\n gridConfigurations = [],\n graphDimensions = {},\n labelsPlaceholders,\n model,\n showLabels,\n dimensionsEnabled,\n showTitle,\n titlePlaceholder,\n mathMlOptions = {},\n } = this.props;\n const { arrows, coordinatesOnHover, defaultGridConfiguration, domain, labels, range, standardGrid, title } =\n model || {};\n const graph = (model || {}).graph || {};\n const { min, max, step } = graphDimensions || {};\n const { dialog = {}, gridValues, labelValues, showPixelGuides } = this.state;\n const sizeConstraints = {\n min: Math.max(150, min),\n max: Math.min(800, max),\n step: step >= 1 ? Math.min(200, step) : 20,\n };\n const displayedFields = {\n axisLabel: authoring.axisLabel,\n dimensionsEnabled,\n includeAxesEnabled: false, //Setting false by default as per requirement\n labelStep: authoring.labelStep,\n min: authoring.min,\n max: authoring.max,\n standardGridEnabled: authoring.standardGridEnabled,\n step: authoring.step,\n };\n const displayGridSetup =\n authoring.enabled &&\n Object.values(displayedFields).some((field) => (typeof field === 'object' ? field.enabled : field));\n return (\n <Container>\n <GridConfigWrapper>\n {gridConfigurations && gridConfigurations.length ? (\n <GridConfig>\n <GridConfigLabel component=\"div\" variant=\"h6\">\n Grid Configuration\n </GridConfigLabel>\n <GridConfigSelect\n input={<OutlinedInput labelWidth={10} />}\n displayEmpty\n onChange={this.changeGridConfiguration}\n value={defaultGridConfiguration}\n MenuProps={{ transitionDuration: { enter: 225, exit: 195 } }}\n >\n {(gridConfigurations || []).map((config, index) => (\n <MenuItem key={index} value={index}>\n {config.label}\n </MenuItem>\n ))}\n </GridConfigSelect>\n </GridConfig>\n ) : null}\n {displayGridSetup && (\n <GridSetup\n displayedFields={displayedFields}\n domain={domain}\n gridValues={gridValues}\n includeAxes={true} //Setting true by default as per requirement\n labelValues={labelValues}\n range={range}\n size={graph}\n sizeConstraints={sizeConstraints}\n standardGrid={standardGrid}\n onChange={this.onConfigChange}\n onChangeView={this.onChangeView}\n />\n )}\n </GridConfigWrapper>\n <GraphConfig key=\"graph\">\n <Typography component=\"div\" variant=\"h6\">\n Define Graph Attributes\n </Typography>\n <SubtitleText component=\"div\" variant=\"body1\">\n Use this interface to add/edit a title and/or labels\n </SubtitleText>\n <GraphContainer\n axesSettings={{ includeArrows: arrows }}\n backgroundMarks={[]}\n coordinatesOnHover={coordinatesOnHover}\n collapsibleToolbar={true}\n collapsibleToolbarTitle={'Add Background Shapes to Graph'}\n domain={domain}\n key=\"graphing-config\"\n labels={labels}\n labelsPlaceholders={labelsPlaceholders}\n marks={[]}\n onChangeLabels={this.changeLabels}\n onChangeTitle={this.changeTitle}\n range={range}\n showLabels={showLabels}\n showPixelGuides={showPixelGuides}\n showTitle={showTitle}\n size={{ width: graph.width, height: graph.height }}\n title={title}\n titlePlaceholder={titlePlaceholder}\n disableToolbar={true}\n mathMlOptions={mathMlOptions}\n />\n </GraphConfig>\n <AlertDialog\n open={dialog.isOpened}\n title=\"Warning\"\n text=\"This change would make it impossible for students to plot one or more graph objects in the current correct answers. If you proceed, all such graph objects will be removed from the correct answers.\"\n onClose={dialog.onClose}\n onConfirm={dialog.onConfirm}\n />\n </Container>\n );\n }\n}\n\nexport default GraphingConfig;\n"],"mappings":";;;;;;;;AAAA,IAAAA,KAAA,GAAAC,uBAAA,CAAAC,OAAA;AACA,IAAAC,UAAA,GAAAC,sBAAA,CAAAF,OAAA;AACA,IAAAG,oBAAA,GAAAH,OAAA;AACA,IAAAI,SAAA,GAAAJ,OAAA;AACA,IAAAK,SAAA,GAAAL,OAAA;AACA,IAAAM,OAAA,GAAAN,OAAA;AACA,IAAAO,MAAA,GAAAP,OAAA;AACA,IAAAQ,OAAA,GAAAR,OAAA;AAA4C,SAAAD,wBAAAU,CAAA,EAAAC,CAAA,6BAAAC,OAAA,MAAAC,CAAA,OAAAD,OAAA,IAAAE,CAAA,OAAAF,OAAA,YAAAZ,uBAAA,YAAAA,CAAAU,CAAA,EAAAC,CAAA,SAAAA,CAAA,IAAAD,CAAA,IAAAA,CAAA,CAAAK,UAAA,SAAAL,CAAA,MAAAM,CAAA,EAAAC,CAAA,EAAAC,CAAA,KAAAC,SAAA,QAAAC,OAAA,EAAAV,CAAA,iBAAAA,CAAA,uBAAAA,CAAA,yBAAAA,CAAA,SAAAQ,CAAA,MAAAF,CAAA,GAAAL,CAAA,GAAAG,CAAA,GAAAD,CAAA,QAAAG,CAAA,CAAAK,GAAA,CAAAX,CAAA,UAAAM,CAAA,CAAAM,GAAA,CAAAZ,CAAA,GAAAM,CAAA,CAAAO,GAAA,CAAAb,CAAA,EAAAQ,CAAA,gBAAAP,CAAA,IAAAD,CAAA,gBAAAC,CAAA,OAAAa,cAAA,CAAAC,IAAA,CAAAf,CAAA,EAAAC,CAAA,OAAAM,CAAA,IAAAD,CAAA,GAAAU,MAAA,CAAAC,cAAA,KAAAD,MAAA,CAAAE,wBAAA,CAAAlB,CAAA,EAAAC,CAAA,OAAAM,CAAA,CAAAK,GAAA,IAAAL,CAAA,CAAAM,GAAA,IAAAP,CAAA,CAAAE,CAAA,EAAAP,CAAA,EAAAM,CAAA,IAAAC,CAAA,CAAAP,CAAA,IAAAD,CAAA,CAAAC,CAAA,WAAAO,CAAA,KAAAR,CAAA,EAAAC,CAAA;AAE5C,MAAMkB,SAAS,GAAG,IAAAC,cAAM,EAAC,KAAK,CAAC,CAAC,CAAC;EAAEC;AAAM,CAAC,MAAM;EAC9CC,OAAO,EAAE,MAAM;EACfC,QAAQ,EAAE,MAAM;EAChBC,YAAY,EAAEH,KAAK,CAACI,OAAO,CAAC,GAAG;AACjC,CAAC,CAAC,CAAC;AAEH,MAAMC,iBAAiB,GAAG,IAAAN,cAAM,EAAC,KAAK,CAAC,CAAC,CAAC;EAAEC;AAAM,CAAC,MAAM;EACtDC,OAAO,EAAE,MAAM;EACfK,aAAa,EAAE,QAAQ;EACvBC,WAAW,EAAEP,KAAK,CAACI,OAAO,CAAC,CAAC,CAAC;EAC7BD,YAAY,EAAEH,KAAK,CAACI,OAAO,CAAC,GAAG;AACjC,CAAC,CAAC,CAAC;AAEH,MAAMI,WAAW,GAAG,IAAAT,cAAM,EAAC,KAAK,CAAC,CAAC;EAChCE,OAAO,EAAE,MAAM;EACfK,aAAa,EAAE;AACjB,CAAC,CAAC;AAEF,MAAMG,YAAY,GAAG,IAAAV,cAAM,EAACW,oBAAU,CAAC,CAAC,CAAC;EAAEV;AAAM,CAAC,MAAM;EACtDW,SAAS,EAAEX,KAAK,CAACI,OAAO,CAAC,GAAG,CAAC;EAC7BD,YAAY,EAAEH,KAAK,CAACI,OAAO,CAAC,CAAC;AAC/B,CAAC,CAAC,CAAC;AAEH,MAAMQ,UAAU,GAAG,IAAAb,cAAM,EAAC,KAAK,CAAC,CAAC,CAAC;EAAEC;AAAM,CAAC,MAAM;EAC/CC,OAAO,EAAE,MAAM;EACfC,QAAQ,EAAE,MAAM;EAChBW,UAAU,EAAE,QAAQ;EACpBC,KAAK,EAAE,MAAM;EACbX,YAAY,EAAEH,KAAK,CAACI,OAAO,CAAC,GAAG;AACjC,CAAC,CAAC,CAAC;AAEH,MAAMW,eAAe,GAAG,IAAAhB,cAAM,EAACW,oBAAU,CAAC,CAAC,CAAC;EAAEV;AAAM,CAAC,MAAM;EACzDgB,OAAO,EAAE,KAAKhB,KAAK,CAACI,OAAO,CAAC,CAAC,CAAC;AAChC,CAAC,CAAC,CAAC;AAEH,MAAMa,gBAAgB,GAAG,IAAAlB,cAAM,EAACmB,gBAAM,CAAC,CAAC;EACtCC,IAAI,EAAE;AACR,CAAC,CAAC;AAEK,MAAMC,cAAc,SAASpD,KAAK,CAACqD,SAAS,CAAC;EAelDC,WAAWA,CAACC,KAAK,EAAE;IACjB,KAAK,CAACA,KAAK,CAAC;IAoBd;AACF;AACA;AACA;IAHE,IAAAC,gBAAA,CAAAnC,OAAA,wBAIgBoC,MAAM,IAAK;MACzB,MAAM;QAAEC,KAAK;QAAEC;MAAS,CAAC,GAAG,IAAI,CAACJ,KAAK;MACtCI,QAAQ,CAAC;QAAE,GAAGD,KAAK;QAAED;MAAO,CAAC,CAAC;IAChC,CAAC;IAED;AACF;AACA;AACA;IAHE,IAAAD,gBAAA,CAAAnC,OAAA,uBAIeuC,KAAK,IAAK;MACvB,MAAM;QAAEF,KAAK;QAAEC;MAAS,CAAC,GAAG,IAAI,CAACJ,KAAK;MACtCI,QAAQ,CAAC;QAAE,GAAGD,KAAK;QAAEE;MAAM,CAAC,CAAC;IAC/B,CAAC;IAED;AACF;AACA;AACA;AACA;IAJE,IAAAJ,gBAAA,CAAAnC,OAAA,0BAKiB,CAACwC,MAAM,EAAEC,eAAe,KAAK;MAC5C,MAAM;QAAEJ,KAAK;QAAEC;MAAS,CAAC,GAAG,IAAI,CAACJ,KAAK;MACtC,MAAM;QAAEQ,wBAAwB,EAAEC,eAAe,GAAG;MAAE,CAAC,GAAGN,KAAK;MAC/D,MAAM;QAAEO,UAAU,EAAEC,aAAa;QAAEC,WAAW,EAAEC,cAAc;QAAEC,MAAM,EAAEC,SAAS;QAAEC,KAAK,EAAEC;MAAS,CAAC,GAAG,IAAI,CAACC,KAAK;MACjH,MAAMC,YAAY,GAAG;QAAE,GAAGhB,KAAK;QAAE,GAAGG;MAAO,CAAC;MAC5C,MAAM;QAAEc,OAAO;QAAEN,MAAM;QAAEO,WAAW,GAAG,IAAI;QAAEC,KAAK;QAAEN,KAAK;QAAEO;MAAa,CAAC,GAAGJ,YAAY;MACxF,MAAMT,UAAU,GAAG;QAAEI,MAAM,EAAE,EAAE;QAAEE,KAAK,EAAE;MAAG,CAAC;MAC5C,MAAMJ,WAAW,GAAG;QAAEE,MAAM,EAAE,EAAE;QAAEE,KAAK,EAAE;MAAG,CAAC;MAC7C,MAAMQ,YAAY,GAAGjB,eAAe,IAAI,CAAC,GAAGA,eAAe,GAAGE,eAAe;MAC7E,IAAIY,WAAW,EAAE;QACf,MAAMI,iBAAiB,GAAG,IAAAC,uBAAgB,EAACZ,MAAM,EAAEQ,KAAK,CAAC/B,KAAK,EAAEoB,aAAa,CAACG,MAAM,EAAED,cAAc,CAACC,MAAM,CAAC;QAC5GJ,UAAU,CAACI,MAAM,GAAGW,iBAAiB,CAACf,UAAU,IAAI,EAAE;QACtDE,WAAW,CAACE,MAAM,GAAGW,iBAAiB,CAACb,WAAW,IAAI,EAAE;MAC1D;MACA,IAAIW,YAAY,EAAE;QAChBb,UAAU,CAACM,KAAK,GAAGN,UAAU,CAACI,MAAM;QACpCF,WAAW,CAACI,KAAK,GAAGJ,WAAW,CAACE,MAAM;QACtCE,KAAK,CAACW,IAAI,GAAGb,MAAM,CAACa,IAAI;QACxBX,KAAK,CAACY,SAAS,GAAGd,MAAM,CAACc,SAAS;MACpC,CAAC,MAAM;QACL,IAAIP,WAAW,EAAE;UACf,MAAMQ,gBAAgB,GAAG,IAAAH,uBAAgB,EAACV,KAAK,EAAEM,KAAK,CAACQ,MAAM,EAAEnB,aAAa,CAACK,KAAK,EAAEH,cAAc,CAACG,KAAK,CAAC;UACzGN,UAAU,CAACM,KAAK,GAAGa,gBAAgB,CAACnB,UAAU,IAAI,EAAE;UACpDE,WAAW,CAACI,KAAK,GAAGa,gBAAgB,CAACjB,WAAW,IAAI,EAAE;QACxD;MACF;MACA,MAAMmB,eAAe,GAAG,IAAAC,iBAAS,EAACZ,OAAO,CAAC;MAC1CW,eAAe,CAACE,aAAa,CAACC,KAAK,GAAGd,OAAO,CAACa,aAAa,CAACC,KAAK,CAACC,MAAM,CAAEC,IAAI,IAAKA,IAAI,CAACC,IAAI,KAAK,SAAS,CAAC;MAC3G,MAAMC,eAAe,GAAG,IAAAC,0BAAmB,EAACzB,MAAM,EAAEE,KAAK,EAAEe,eAAe,CAAC;MAC3E,IAAI,CAAC,IAAAS,eAAO,EAACT,eAAe,EAAEO,eAAe,CAAC,EAAE;QAC9C,IAAI,CAACG,QAAQ,CAAC;UACZC,MAAM,EAAE;YACNC,QAAQ,EAAE,IAAI;YACdC,OAAO,EAAEA,CAAA,KACP,IAAI,CAACH,QAAQ,CAAC;cAAEC,MAAM,EAAE;gBAAEC,QAAQ,EAAE;cAAM;YAAE,CAAC,EAAEvC,QAAQ,CAAC;cAAE,GAAGD,KAAK;cAAEW,MAAM,EAAEC,SAAS;cAAEC,KAAK,EAAEC;YAAS,CAAC,CAAC,CAAC;YAC5G4B,SAAS,EAAEA,CAAA,KAAM;cACf1B,YAAY,CAAC2B,WAAW,CAACC,QAAQ,GAAG,EAAE;cACtC5B,YAAY,CAAC2B,WAAW,CAACE,YAAY,GAAG,OAAO;cAC/C,IAAI,CAACP,QAAQ,CACX;gBACE/B,UAAU;gBACVE,WAAW;gBACX8B,MAAM,EAAE;kBAAEC,QAAQ,EAAE;gBAAM,CAAC;gBAC3B7B,MAAM,EAAE;kBAAE,GAAGA;gBAAO,CAAC;gBACrBE,KAAK,EAAE;kBAAE,GAAGA;gBAAM;cACpB,CAAC,EACDZ,QAAQ,CAAC;gBAAE,GAAGe,YAAY;gBAAEC,OAAO,EAAEkB,eAAe;gBAAE9B,wBAAwB,EAAEgB;cAAa,CAAC,CAChG,CAAC;YACH;UACF;QACF,CAAC,CAAC;QACF;MACF;MACA,IAAI,CAACiB,QAAQ,CAAC;QAAE/B,UAAU;QAAEE,WAAW;QAAEE,MAAM,EAAE;UAAE,GAAGA;QAAO,CAAC;QAAEE,KAAK,EAAE;UAAE,GAAGA;QAAM;MAAE,CAAC,CAAC;MACtFZ,QAAQ,CAAC;QAAE,GAAGe,YAAY;QAAEX,wBAAwB,EAAEgB;MAAa,CAAC,CAAC;IACvE,CAAC;IAED;AACF;AACA;AACA;AACA;IAJE,IAAAvB,gBAAA,CAAAnC,OAAA,wBAKe,CAACmF,KAAK,EAAEC,QAAQ,KAAK;MAClC,MAAM;QAAEC,eAAe,EAAE;UAAEC;QAAQ,CAAC,GAAG,CAAC;MAAE,CAAC,GAAG,IAAI,CAACpD,KAAK;MACxD,IAAIoD,OAAO,EAAE;QACX,IAAI,CAACX,QAAQ,CAAC;UAAEY,eAAe,EAAEH;QAAS,CAAC,CAAC;MAC9C;IACF,CAAC;IAED;AACF;AACA;AACA;IAHE,IAAAjD,gBAAA,CAAAnC,OAAA,mCAI2BmF,KAAK,IAAK;MACnC,MAAM;QAAEK;MAAmB,CAAC,GAAG,IAAI,CAACtD,KAAK;MACzC,MAAM;QAAEuD;MAAM,CAAC,GAAGN,KAAK,CAACO,MAAM;MAC9B,IAAI,CAACC,cAAc,CAACH,kBAAkB,GAAGC,KAAK,CAAC,IAAI,CAAC,CAAC,EAAEA,KAAK,CAAC;IAC/D,CAAC;IAvHC,MAAM;MAAEzC,MAAM,EAANA,OAAM;MAAEE,KAAK,EAALA,MAAK;MAAEM,KAAK,EAALA;IAAM,CAAC,GAAGtB,KAAK,CAACG,KAAK,IAAI,CAAC,CAAC;IAClD,MAAMO,WAAU,GAAG;MACjBI,MAAM,EAAE,IAAA4C,oBAAa,EAAC5C,OAAM,EAAEQ,MAAK,CAAC/B,KAAK,EAAE,IAAI,CAAC;MAChDyB,KAAK,EAAE,IAAA0C,oBAAa,EAAC1C,MAAK,EAAEM,MAAK,CAACQ,MAAM,EAAE,IAAI;IAChD,CAAC;IACD,MAAMlB,YAAW,GAAG;MAClBE,MAAM,EAAE,IAAA6C,qBAAc,EAAC7C,OAAM,CAACa,IAAI,CAAC;MACnCX,KAAK,EAAE,IAAA2C,qBAAc,EAAC3C,MAAK,CAACW,IAAI;IAClC,CAAC;IACD,IAAI,CAACT,KAAK,GAAG;MACXR,UAAU,EAAVA,WAAU;MACVE,WAAW,EAAXA,YAAW;MACXyC,eAAe,EAAE,KAAK;MACtBX,MAAM,EAAE;QAAEC,QAAQ,EAAE;MAAM,CAAC;MAC3B7B,MAAM,EAAE;QAAE,GAAGA;MAAO,CAAC;MACrBE,KAAK,EAAE;QAAE,GAAGA;MAAM;IACpB,CAAC;EACH;EAwGA;AACF;AACA;EACE4C,MAAMA,CAAA,EAAG;IACP,MAAM;MACJC,SAAS,GAAG,CAAC,CAAC;MACdP,kBAAkB,GAAG,EAAE;MACvBH,eAAe,GAAG,CAAC,CAAC;MACpBW,kBAAkB;MAClB3D,KAAK;MACL4D,UAAU;MACVC,iBAAiB;MACjBC,SAAS;MACTC,gBAAgB;MAChBC,aAAa,GAAG,CAAC;IACnB,CAAC,GAAG,IAAI,CAACnE,KAAK;IACd,MAAM;MAAEoE,MAAM;MAAEC,kBAAkB;MAAE7D,wBAAwB;MAAEM,MAAM;MAAEZ,MAAM;MAAEc,KAAK;MAAEO,YAAY;MAAElB;IAAM,CAAC,GACxGF,KAAK,IAAI,CAAC,CAAC;IACb,MAAMmB,KAAK,GAAG,CAACnB,KAAK,IAAI,CAAC,CAAC,EAAEmB,KAAK,IAAI,CAAC,CAAC;IACvC,MAAM;MAAEgD,GAAG;MAAEC,GAAG;MAAE5C;IAAK,CAAC,GAAGwB,eAAe,IAAI,CAAC,CAAC;IAChD,MAAM;MAAET,MAAM,GAAG,CAAC,CAAC;MAAEhC,UAAU;MAAEE,WAAW;MAAEyC;IAAgB,CAAC,GAAG,IAAI,CAACnC,KAAK;IAC5E,MAAMsD,eAAe,GAAG;MACtBF,GAAG,EAAEG,IAAI,CAACF,GAAG,CAAC,GAAG,EAAED,GAAG,CAAC;MACvBC,GAAG,EAAEE,IAAI,CAACH,GAAG,CAAC,GAAG,EAAEC,GAAG,CAAC;MACvB5C,IAAI,EAAEA,IAAI,IAAI,CAAC,GAAG8C,IAAI,CAACH,GAAG,CAAC,GAAG,EAAE3C,IAAI,CAAC,GAAG;IAC1C,CAAC;IACD,MAAM+C,eAAe,GAAG;MACtBC,SAAS,EAAEd,SAAS,CAACc,SAAS;MAC9BX,iBAAiB;MACjBY,kBAAkB,EAAE,KAAK;MAAE;MAC3BhD,SAAS,EAAEiC,SAAS,CAACjC,SAAS;MAC9B0C,GAAG,EAAET,SAAS,CAACS,GAAG;MAClBC,GAAG,EAAEV,SAAS,CAACU,GAAG;MAClBM,mBAAmB,EAAEhB,SAAS,CAACgB,mBAAmB;MAClDlD,IAAI,EAAEkC,SAAS,CAAClC;IAClB,CAAC;IACD,MAAMmD,gBAAgB,GACpBjB,SAAS,CAACT,OAAO,IACjBhF,MAAM,CAAC2G,MAAM,CAACL,eAAe,CAAC,CAACM,IAAI,CAAEC,KAAK,IAAM,OAAOA,KAAK,KAAK,QAAQ,GAAGA,KAAK,CAAC7B,OAAO,GAAG6B,KAAM,CAAC;IACrG,oBACExI,KAAA,CAAAyI,aAAA,CAAC3G,SAAS,qBACR9B,KAAA,CAAAyI,aAAA,CAACpG,iBAAiB,QACfwE,kBAAkB,IAAIA,kBAAkB,CAAC6B,MAAM,gBAC9C1I,KAAA,CAAAyI,aAAA,CAAC7F,UAAU,qBACT5C,KAAA,CAAAyI,aAAA,CAAC1F,eAAe;MAAC4F,SAAS,EAAC,KAAK;MAACC,OAAO,EAAC;IAAI,GAAC,oBAE7B,CAAC,eAClB5I,KAAA,CAAAyI,aAAA,CAACxF,gBAAgB;MACf4F,KAAK,eAAE7I,KAAA,CAAAyI,aAAA,CAAClI,SAAA,CAAAuI,aAAa;QAACC,UAAU,EAAE;MAAG,CAAE,CAAE;MACzCC,YAAY;MACZrF,QAAQ,EAAE,IAAI,CAACsF,uBAAwB;MACvCnC,KAAK,EAAE/C,wBAAyB;MAChCmF,SAAS,EAAE;QAAEC,kBAAkB,EAAE;UAAEC,KAAK,EAAE,GAAG;UAAEC,IAAI,EAAE;QAAI;MAAE;IAAE,GAE5D,CAACxC,kBAAkB,IAAI,EAAE,EAAEyC,GAAG,CAAC,CAACzF,MAAM,EAAE0F,KAAK,kBAC5CvJ,KAAA,CAAAyI,aAAA,CAAClI,SAAA,CAAAiJ,QAAQ;MAACC,GAAG,EAAEF,KAAM;MAACzC,KAAK,EAAEyC;IAAM,GAChC1F,MAAM,CAAC6F,KACA,CACX,CACe,CACR,CAAC,GACX,IAAI,EACPrB,gBAAgB,iBACfrI,KAAA,CAAAyI,aAAA,CAACpI,oBAAA,CAAAsJ,SAAS;MACR1B,eAAe,EAAEA,eAAgB;MACjC5D,MAAM,EAAEA,MAAO;MACfJ,UAAU,EAAEA,UAAW;MACvBW,WAAW,EAAE,IAAK,CAAC;MAAA;MACnBT,WAAW,EAAEA,WAAY;MACzBI,KAAK,EAAEA,KAAM;MACbqF,IAAI,EAAE/E,KAAM;MACZkD,eAAe,EAAEA,eAAgB;MACjCjD,YAAY,EAAEA,YAAa;MAC3BnB,QAAQ,EAAE,IAAI,CAACqD,cAAe;MAC9B6C,YAAY,EAAE,IAAI,CAACA;IAAa,CACjC,CAEc,CAAC,eACpB7J,KAAA,CAAAyI,aAAA,CAACjG,WAAW;MAACiH,GAAG,EAAC;IAAO,gBACtBzJ,KAAA,CAAAyI,aAAA,CAAClI,SAAA,CAAAmC,UAAU;MAACiG,SAAS,EAAC,KAAK;MAACC,OAAO,EAAC;IAAI,GAAC,yBAE7B,CAAC,eACb5I,KAAA,CAAAyI,aAAA,CAAChG,YAAY;MAACkG,SAAS,EAAC,KAAK;MAACC,OAAO,EAAC;IAAO,GAAC,sDAEhC,CAAC,eACf5I,KAAA,CAAAyI,aAAA,CAACpI,oBAAA,CAAAyJ,cAAc;MACbC,YAAY,EAAE;QAAEC,aAAa,EAAErC;MAAO,CAAE;MACxCsC,eAAe,EAAE,EAAG;MACpBrC,kBAAkB,EAAEA,kBAAmB;MACvCsC,kBAAkB,EAAE,IAAK;MACzBC,uBAAuB,EAAE,gCAAiC;MAC1D9F,MAAM,EAAEA,MAAO;MACfoF,GAAG,EAAC,iBAAiB;MACrBhG,MAAM,EAAEA,MAAO;MACf4D,kBAAkB,EAAEA,kBAAmB;MACvC5B,KAAK,EAAE,EAAG;MACV2E,cAAc,EAAE,IAAI,CAACC,YAAa;MAClCC,aAAa,EAAE,IAAI,CAACC,WAAY;MAChChG,KAAK,EAAEA,KAAM;MACb+C,UAAU,EAAEA,UAAW;MACvBV,eAAe,EAAEA,eAAgB;MACjCY,SAAS,EAAEA,SAAU;MACrBoC,IAAI,EAAE;QAAE9G,KAAK,EAAE+B,KAAK,CAAC/B,KAAK;QAAEuC,MAAM,EAAER,KAAK,CAACQ;MAAO,CAAE;MACnDzB,KAAK,EAAEA,KAAM;MACb6D,gBAAgB,EAAEA,gBAAiB;MACnC+C,cAAc,EAAE,IAAK;MACrB9C,aAAa,EAAEA;IAAc,CAC9B,CACU,CAAC,eACd1H,KAAA,CAAAyI,aAAA,CAACnI,SAAA,CAAAmK,WAAW;MACVC,IAAI,EAAEzE,MAAM,CAACC,QAAS;MACtBtC,KAAK,EAAC,SAAS;MACf+G,IAAI,EAAC,sMAAsM;MAC3MxE,OAAO,EAAEF,MAAM,CAACE,OAAQ;MACxBC,SAAS,EAAEH,MAAM,CAACG;IAAU,CAC7B,CACQ,CAAC;EAEhB;AACF;AAACwE,OAAA,CAAAxH,cAAA,GAAAA,cAAA;AAAA,IAAAI,gBAAA,CAAAnC,OAAA,EAjQY+B,cAAc,eACN;EACjByH,cAAc,EAAEC,kBAAS,CAACC,KAAK;EAC/B3D,SAAS,EAAE0D,kBAAS,CAACE,MAAM;EAC3BzD,iBAAiB,EAAEuD,kBAAS,CAACG,IAAI;EACjCvE,eAAe,EAAEoE,kBAAS,CAACE,MAAM;EACjCnE,kBAAkB,EAAEiE,kBAAS,CAACC,KAAK;EACnC1D,kBAAkB,EAAEyD,kBAAS,CAACE,MAAM;EACpCtH,KAAK,EAAEoH,kBAAS,CAACE,MAAM,CAACE,UAAU;EAClCvH,QAAQ,EAAEmH,kBAAS,CAACK,IAAI,CAACD,UAAU;EACnC5D,UAAU,EAAEwD,kBAAS,CAACG,IAAI;EAC1BzD,SAAS,EAAEsD,kBAAS,CAACG,IAAI;EACzBxD,gBAAgB,EAAEqD,kBAAS,CAACM;AAC9B,CAAC;AAAA,IAAAC,QAAA,GAAAT,OAAA,CAAAvJ,OAAA,GAsPY+B,cAAc","ignoreList":[]}
|
|
1
|
+
{"version":3,"file":"graphing-config.js","names":["React","_interopRequireWildcard","require","_propTypes","_interopRequireDefault","_graphingSolutionSet","_configUi","_material","_styles","_utils","_lodashEs","e","t","WeakMap","r","n","__esModule","o","i","f","__proto__","default","has","get","set","hasOwnProperty","call","Object","defineProperty","getOwnPropertyDescriptor","Container","styled","theme","display","flexWrap","marginBottom","spacing","GridConfigWrapper","flexDirection","marginRight","GraphConfig","SubtitleText","Typography","marginTop","GridConfig","alignItems","width","GridConfigLabel","padding","GridConfigSelect","Select","flex","GraphingConfig","Component","constructor","props","_defineProperty2","labels","model","onChange","title","config","newSelectedGrid","defaultGridConfiguration","oldSelectedGrid","gridValues","oldGridValues","labelValues","oldLabelValues","domain","oldDomain","range","oldRange","state","updatedModel","answers","includeAxes","graph","standardGrid","selectedGrid","domainConstraints","applyConstraints","step","labelStep","rangeConstraints","height","filteredAnswers","cloneDeep","correctAnswer","marks","filter","mark","type","plotableAnswers","filterPlotableMarks","isEqual","setState","dialog","isOpened","onClose","onConfirm","gssLineData","sections","selectedTool","event","expanded","graphDimensions","enabled","showPixelGuides","gridConfigurations","value","target","onConfigChange","getGridValues","getLabelValues","render","authoring","labelsPlaceholders","showLabels","dimensionsEnabled","showTitle","titlePlaceholder","mathMlOptions","arrows","coordinatesOnHover","min","max","sizeConstraints","Math","displayedFields","axisLabel","includeAxesEnabled","standardGridEnabled","displayGridSetup","values","some","field","createElement","length","component","variant","input","OutlinedInput","labelWidth","displayEmpty","changeGridConfiguration","MenuProps","transitionDuration","enter","exit","map","index","MenuItem","key","label","GridSetup","size","onChangeView","GraphContainer","axesSettings","includeArrows","backgroundMarks","collapsibleToolbar","collapsibleToolbarTitle","onChangeLabels","changeLabels","onChangeTitle","changeTitle","disableToolbar","AlertDialog","open","text","exports","availableTools","PropTypes","array","object","bool","isRequired","func","string","_default"],"sources":["../src/graphing-config.jsx"],"sourcesContent":["import * as React from 'react';\nimport PropTypes from 'prop-types';\nimport { GraphContainer, GridSetup } from '@pie-lib/graphing-solution-set';\nimport { AlertDialog } from '@pie-lib/config-ui';\nimport { MenuItem, Select, Typography, OutlinedInput } from '@mui/material';\nimport { styled } from '@mui/material/styles';\nimport { applyConstraints, filterPlotableMarks, getGridValues, getLabelValues } from './utils';\nimport { isEqual, cloneDeep } from 'lodash-es';\n\nconst Container = styled('div')(({ theme }) => ({\n display: 'flex',\n flexWrap: 'wrap',\n marginBottom: theme.spacing(2.5),\n}));\n\nconst GridConfigWrapper = styled('div')(({ theme }) => ({\n display: 'flex',\n flexDirection: 'column',\n marginRight: theme.spacing(3),\n marginBottom: theme.spacing(2.5),\n}));\n\nconst GraphConfig = styled('div')({\n display: 'flex',\n flexDirection: 'column',\n});\n\nconst SubtitleText = styled(Typography)(({ theme }) => ({\n marginTop: theme.spacing(1.5),\n marginBottom: theme.spacing(1),\n}));\n\nconst GridConfig = styled('div')(({ theme }) => ({\n display: 'flex',\n flexWrap: 'wrap',\n alignItems: 'center',\n width: '100%',\n marginBottom: theme.spacing(2.5),\n}));\n\nconst GridConfigLabel = styled(Typography)(({ theme }) => ({\n padding: `0 ${theme.spacing(1)}`,\n}));\n\nconst GridConfigSelect = styled(Select)({\n flex: '1',\n});\n\nexport class GraphingConfig extends React.Component {\n static propTypes = {\n availableTools: PropTypes.array,\n authoring: PropTypes.object,\n dimensionsEnabled: PropTypes.bool,\n graphDimensions: PropTypes.object,\n gridConfigurations: PropTypes.array,\n labelsPlaceholders: PropTypes.object,\n model: PropTypes.object.isRequired,\n onChange: PropTypes.func.isRequired,\n showLabels: PropTypes.bool,\n showTitle: PropTypes.bool,\n titlePlaceholder: PropTypes.string,\n };\n\n constructor(props) {\n super(props);\n const { domain, range, graph } = props.model || {};\n const gridValues = {\n domain: getGridValues(domain, graph.width, true),\n range: getGridValues(range, graph.height, true),\n };\n const labelValues = {\n domain: getLabelValues(domain.step),\n range: getLabelValues(range.step),\n };\n this.state = {\n gridValues,\n labelValues,\n showPixelGuides: false,\n dialog: { isOpened: false },\n domain: { ...domain },\n range: { ...range },\n };\n }\n\n /*\n * Function to change labels\n * @param {object} labels - labels object\n * */\n changeLabels = (labels) => {\n const { model, onChange } = this.props;\n onChange({ ...model, labels });\n };\n\n /*\n * Function to change title\n * @param {string} title - title string\n * */\n changeTitle = (title) => {\n const { model, onChange } = this.props;\n onChange({ ...model, title });\n };\n\n /*\n * Function to change grid configuration\n * @param {object} config - grid configuration object\n * @param {number} newSelectedGrid - new selected grid\n * */\n onConfigChange = (config, newSelectedGrid) => {\n const { model, onChange } = this.props;\n const { defaultGridConfiguration: oldSelectedGrid = 0 } = model;\n const { gridValues: oldGridValues, labelValues: oldLabelValues, domain: oldDomain, range: oldRange } = this.state;\n const updatedModel = { ...model, ...config };\n const { answers, domain, includeAxes = true, graph, range, standardGrid } = updatedModel;\n const gridValues = { domain: [], range: [] };\n const labelValues = { domain: [], range: [] };\n const selectedGrid = newSelectedGrid >= 0 ? newSelectedGrid : oldSelectedGrid;\n if (includeAxes) {\n const domainConstraints = applyConstraints(domain, graph.width, oldGridValues.domain, oldLabelValues.domain);\n gridValues.domain = domainConstraints.gridValues || [];\n labelValues.domain = domainConstraints.labelValues || [];\n }\n if (standardGrid) {\n gridValues.range = gridValues.domain;\n labelValues.range = labelValues.domain;\n range.step = domain.step;\n range.labelStep = domain.labelStep;\n } else {\n if (includeAxes) {\n const rangeConstraints = applyConstraints(range, graph.height, oldGridValues.range, oldLabelValues.range);\n gridValues.range = rangeConstraints.gridValues || [];\n labelValues.range = rangeConstraints.labelValues || [];\n }\n }\n const filteredAnswers = cloneDeep(answers);\n filteredAnswers.correctAnswer.marks = answers.correctAnswer.marks.filter((mark) => mark.type !== 'polygon');\n const plotableAnswers = filterPlotableMarks(domain, range, filteredAnswers);\n if (!isEqual(filteredAnswers, plotableAnswers)) {\n this.setState({\n dialog: {\n isOpened: true,\n onClose: () =>\n this.setState({ dialog: { isOpened: false } }, onChange({ ...model, domain: oldDomain, range: oldRange })),\n onConfirm: () => {\n updatedModel.gssLineData.sections = [];\n updatedModel.gssLineData.selectedTool = 'lineA';\n this.setState(\n {\n gridValues,\n labelValues,\n dialog: { isOpened: false },\n domain: { ...domain },\n range: { ...range },\n },\n onChange({ ...updatedModel, answers: plotableAnswers, defaultGridConfiguration: selectedGrid }),\n );\n },\n },\n });\n return;\n }\n this.setState({ gridValues, labelValues, domain: { ...domain }, range: { ...range } });\n onChange({ ...updatedModel, defaultGridConfiguration: selectedGrid });\n };\n\n /*\n * Function to change view\n * @param {object} event - event object\n * @param {boolean} expanded - expanded boolean\n * */\n onChangeView = (event, expanded) => {\n const { graphDimensions: { enabled } = {} } = this.props;\n if (enabled) {\n this.setState({ showPixelGuides: expanded });\n }\n };\n\n /*\n * Function to change grid configuration\n * @param {object} event - event object\n * */\n changeGridConfiguration = (event) => {\n const { gridConfigurations } = this.props;\n const { value } = event.target;\n this.onConfigChange(gridConfigurations?.[value] || {}, value);\n };\n\n /*\n * Render the component\n * */\n render() {\n const {\n authoring = {},\n gridConfigurations = [],\n graphDimensions = {},\n labelsPlaceholders,\n model,\n showLabels,\n dimensionsEnabled,\n showTitle,\n titlePlaceholder,\n mathMlOptions = {},\n } = this.props;\n const { arrows, coordinatesOnHover, defaultGridConfiguration, domain, labels, range, standardGrid, title } =\n model || {};\n const graph = (model || {}).graph || {};\n const { min, max, step } = graphDimensions || {};\n const { dialog = {}, gridValues, labelValues, showPixelGuides } = this.state;\n const sizeConstraints = {\n min: Math.max(150, min),\n max: Math.min(800, max),\n step: step >= 1 ? Math.min(200, step) : 20,\n };\n const displayedFields = {\n axisLabel: authoring.axisLabel,\n dimensionsEnabled,\n includeAxesEnabled: false, //Setting false by default as per requirement\n labelStep: authoring.labelStep,\n min: authoring.min,\n max: authoring.max,\n standardGridEnabled: authoring.standardGridEnabled,\n step: authoring.step,\n };\n const displayGridSetup =\n authoring.enabled &&\n Object.values(displayedFields).some((field) => (typeof field === 'object' ? field.enabled : field));\n return (\n <Container>\n <GridConfigWrapper>\n {gridConfigurations && gridConfigurations.length ? (\n <GridConfig>\n <GridConfigLabel component=\"div\" variant=\"h6\">\n Grid Configuration\n </GridConfigLabel>\n <GridConfigSelect\n input={<OutlinedInput labelWidth={10} />}\n displayEmpty\n onChange={this.changeGridConfiguration}\n value={defaultGridConfiguration}\n MenuProps={{ transitionDuration: { enter: 225, exit: 195 } }}\n >\n {(gridConfigurations || []).map((config, index) => (\n <MenuItem key={index} value={index}>\n {config.label}\n </MenuItem>\n ))}\n </GridConfigSelect>\n </GridConfig>\n ) : null}\n {displayGridSetup && (\n <GridSetup\n displayedFields={displayedFields}\n domain={domain}\n gridValues={gridValues}\n includeAxes={true} //Setting true by default as per requirement\n labelValues={labelValues}\n range={range}\n size={graph}\n sizeConstraints={sizeConstraints}\n standardGrid={standardGrid}\n onChange={this.onConfigChange}\n onChangeView={this.onChangeView}\n />\n )}\n </GridConfigWrapper>\n <GraphConfig key=\"graph\">\n <Typography component=\"div\" variant=\"h6\">\n Define Graph Attributes\n </Typography>\n <SubtitleText component=\"div\" variant=\"body1\">\n Use this interface to add/edit a title and/or labels\n </SubtitleText>\n <GraphContainer\n axesSettings={{ includeArrows: arrows }}\n backgroundMarks={[]}\n coordinatesOnHover={coordinatesOnHover}\n collapsibleToolbar={true}\n collapsibleToolbarTitle={'Add Background Shapes to Graph'}\n domain={domain}\n key=\"graphing-config\"\n labels={labels}\n labelsPlaceholders={labelsPlaceholders}\n marks={[]}\n onChangeLabels={this.changeLabels}\n onChangeTitle={this.changeTitle}\n range={range}\n showLabels={showLabels}\n showPixelGuides={showPixelGuides}\n showTitle={showTitle}\n size={{ width: graph.width, height: graph.height }}\n title={title}\n titlePlaceholder={titlePlaceholder}\n disableToolbar={true}\n mathMlOptions={mathMlOptions}\n />\n </GraphConfig>\n <AlertDialog\n open={dialog.isOpened}\n title=\"Warning\"\n text=\"This change would make it impossible for students to plot one or more graph objects in the current correct answers. If you proceed, all such graph objects will be removed from the correct answers.\"\n onClose={dialog.onClose}\n onConfirm={dialog.onConfirm}\n />\n </Container>\n );\n }\n}\n\nexport default GraphingConfig;\n"],"mappings":"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","ignoreList":[]}
|
package/configure/lib/utils.js
CHANGED
|
@@ -1,11 +1,10 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
|
|
3
|
-
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
|
|
4
3
|
Object.defineProperty(exports, "__esModule", {
|
|
5
4
|
value: true
|
|
6
5
|
});
|
|
7
6
|
exports.pointInsidePolygon = exports.getLabelValues = exports.getGridValues = exports.findSectionsInSolutionSet = exports.filterPlotableMarks = exports.checkIfLinesAreAdded = exports.applyConstraints = exports.VALID_LABEL_VALUES = void 0;
|
|
8
|
-
var
|
|
7
|
+
var _lodashEs = require("lodash-es");
|
|
9
8
|
/*Valid grid values*/
|
|
10
9
|
const VALID_GRID_VALUES = [0.01, 0.02, 0.04, 0.05, 0.0625, 0.1, 0.125, 0.2, 0.25, 0.5, 1, 2, 3, 4, 5, 8, 10, 12, 15, 20, 40, 50, 64, 100, 500, 1000];
|
|
11
10
|
|
|
@@ -73,7 +72,7 @@ exports.getLabelValues = getLabelValues;
|
|
|
73
72
|
const applyConstraints = (axis, size, oldGridValues, oldLabelValues) => {
|
|
74
73
|
const gridValues = getGridValues(axis, size);
|
|
75
74
|
let labelValues = getLabelValues(axis.step);
|
|
76
|
-
if (!(0,
|
|
75
|
+
if (!(0, _lodashEs.isEqual)(oldGridValues, gridValues) && !gridValues.includes(axis.step)) {
|
|
77
76
|
const preferredValues = getGridValues(axis, size, true);
|
|
78
77
|
const lowestValue = preferredValues[0] || 1;
|
|
79
78
|
axis.step = lowestValue;
|
|
@@ -86,7 +85,7 @@ const applyConstraints = (axis, size, oldGridValues, oldLabelValues) => {
|
|
|
86
85
|
labelValues
|
|
87
86
|
};
|
|
88
87
|
}
|
|
89
|
-
if (!(0,
|
|
88
|
+
if (!(0, _lodashEs.isEqual)(oldLabelValues, labelValues) && !labelValues.includes(axis.labelStep)) {
|
|
90
89
|
axis.labelStep = axis.step;
|
|
91
90
|
}
|
|
92
91
|
return {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"utils.js","names":["_isEqual","_interopRequireDefault","require","VALID_GRID_VALUES","PREFERRED_VALID_GRID_VALUES","VALID_LABEL_VALUES","exports","getGridValues","axis","size","prefferedValues","minValue","max","min","maxValue","values","filter","value","getLabelValues","applyConstraints","oldGridValues","oldLabelValues","gridValues","labelValues","step","isEqual","includes","preferredValues","lowestValue","labelStep","getPlotablePoints","prop","tickValues","tickVal","indexOf","push","Math","round","tV","filterPlotableMarks","domain","range","answers","domainValues","rangeValues","isPointPlotable","x","y","Object","entries","reduce","newAnswers","key","answer","marks","mark","type","points","find","point","from","root","to","edge","building","distance","a","b","Number","sqrt","toFixed","pointInPolygon","polygon","c","inside","clonePolygon","i","length","lineIntersect","x1","y1","x2","y2","x3","y3","x4","y4","ua","denominator","isPointInsideGraph","isPointOnOrInsideGraph","findIntersectionPointForMark","intersectionPoint","tempData","intersection","sortPointsClockWise","sort","cy","cx","center","startAng","forEach","ang","atan2","PI","angle","ccwPoints","reverse","unshift","pop","map","attr","dotProduct","v1","v2","magnitude","v","angleBetweenVectors","dot","magV1","magV2","acos","pointInAngle","commonPoint","point1","point2","testPoint","vector1","vector2","testVector","angle1","angle2","angleSum","tolerance","abs","removeDuplicatesFromArray","array","obj","index","findIndex","o","removeDuplicateAndFilterSections","sections","section","findSectionsInSolutionSetForOneLine","concat","findSectionsInSolutionSetForTwoLines","gssLineData","mark1","mark2","cornerPoints","intersectPoint","intersectionPoint1","intersectionPoint2","j","bucket","newCornerPoints","k","sections1","sections2","o1","some","o2","sections3","findSectionsInSolutionSet","numberOfLines","pointInsidePolygon","num_vertices","p1","p2","x_intersection","checkIfLinesAreAdded"],"sources":["../src/utils.js"],"sourcesContent":["import isEqual from 'lodash/isEqual';\n\n/*Valid grid values*/\nconst VALID_GRID_VALUES = [\n 0.01, 0.02, 0.04, 0.05, 0.0625, 0.1, 0.125, 0.2, 0.25, 0.5, 1, 2, 3, 4, 5, 8, 10, 12, 15, 20, 40, 50, 64, 100, 500,\n 1000,\n];\n\n// same as VALID_GRID_VALUES but next values are excluded: 0.04, 0.0625, 0.125, 3, 4, 8, 12, 15, 40, 64\nconst PREFERRED_VALID_GRID_VALUES = [0.01, 0.02, 0.05, 0.1, 0.2, 0.25, 0.5, 1, 2, 5, 10, 20, 50, 100, 500, 1000];\n\n/*Valid label values*/\nexport const VALID_LABEL_VALUES = {\n 0.01: [0, 0.01, 0.02, 0.04, 0.05, 0.1],\n 0.02: [0, 0.02, 0.04, 0.1],\n 0.04: [0, 0.04, 0.08, 0.16, 0.2],\n 0.05: [0, 0.05, 0.1, 0.2, 0.25],\n 0.0625: [0, 0.0625, 0.125, 0.25, 0.5],\n 0.1: [0, 0.1, 0.2, 0.4, 0.5, 1],\n 0.125: [0, 0.125, 0.25, 0.5, 1],\n 0.2: [0, 0.2, 0.5, 0.1],\n 0.25: [0, 0.25, 0.5, 1, 2],\n 0.5: [0, 0.5, 1, 2],\n 1: [0, 1, 2, 4, 5, 10],\n 2: [0, 2, 4, 8, 10],\n 3: [0, 3, 6, 12, 15],\n 4: [0, 4, 8, 16, 20],\n 5: [0, 5, 10, 20, 25],\n 8: [0, 8, 16, 32, 40, 64],\n 10: [0, 10, 20, 40, 50, 100],\n 12: [0, 12, 24],\n 15: [0, 15, 30, 60],\n 20: [0, 20, 40, 80, 100],\n 40: [0, 40, 80, 160, 200],\n 50: [0, 50, 100, 200, 250],\n 64: [0, 64, 128],\n 100: [0, 100, 200, 400, 500],\n 500: [0, 500, 1000, 2500],\n 1000: [0, 1000, 2000, 4000, 5000],\n};\n\n/*\n * Function to get grid values\n * @param {Object} axis - axis object\n * @param {Number} size - size of the axis\n * @param {Boolean} prefferedValues - flag to get preffered values\n * */\nexport const getGridValues = (axis, size, prefferedValues = false) => {\n const minValue = (10 * (axis.max - axis.min)) / size;\n const maxValue = minValue * 10;\n const values = prefferedValues ? PREFERRED_VALID_GRID_VALUES : VALID_GRID_VALUES;\n return values.filter((value) => value >= minValue && value <= maxValue);\n};\n\n/*\n * Function to get label values\n * @param {Number} value - value of the axis step\n * */\nexport const getLabelValues = (value) => VALID_LABEL_VALUES[value] || [];\n\n/*\n * Function to apply constraints\n * @param {Object} axis - axis object\n * @param {Number} size - size of the axis\n * @param {Array} oldGridValues - old grid values\n * @param {Array} oldLabelValues - old label values\n * */\nexport const applyConstraints = (axis, size, oldGridValues, oldLabelValues) => {\n const gridValues = getGridValues(axis, size);\n let labelValues = getLabelValues(axis.step);\n if (!isEqual(oldGridValues, gridValues) && !gridValues.includes(axis.step)) {\n const preferredValues = getGridValues(axis, size, true);\n const lowestValue = preferredValues[0] || 1;\n axis.step = lowestValue;\n labelValues = getLabelValues(lowestValue);\n if (!labelValues.includes(axis.labelStep)) {\n axis.labelStep = lowestValue;\n }\n return { gridValues, labelValues };\n }\n if (!isEqual(oldLabelValues, labelValues) && !labelValues.includes(axis.labelStep)) {\n axis.labelStep = axis.step;\n }\n return { gridValues, labelValues };\n};\n\n// also used in pie-lib/graphing/utils as 'getTickValues'\n/*\n * Function to get plotable points\n * @param {Object} prop - axis object\n * */\nconst getPlotablePoints = (prop) => {\n const tickValues = [];\n let tickVal = 0;\n while (tickVal >= prop.min && tickValues.indexOf(tickVal) < 0) {\n tickValues.push(tickVal);\n tickVal = Math.round((tickVal - prop.step) * 10000) / 10000;\n }\n tickVal = Math.round(prop.step * 10000) / 10000;\n while (tickVal <= prop.max && tickValues.indexOf(tickVal) < 0) {\n tickValues.push(tickVal);\n tickVal = Math.round((tickVal + prop.step) * 10000) / 10000;\n }\n // return only ticks that are inside the min-max interval\n if (tickValues) {\n return tickValues.filter((tV) => tV >= prop.min && tV <= prop.max);\n }\n return [];\n};\n\n/*\n * Function to get plotable marks\n * @param {Object} domain - domain object\n * @param {Object} range - range object\n * @param {Object} answers - answers object\n * */\nexport const filterPlotableMarks = (domain, range, answers) => {\n const domainValues = getPlotablePoints(domain);\n const rangeValues = getPlotablePoints(range);\n const isPointPlotable = (x, y) => domainValues.includes(x) && rangeValues.includes(y);\n return Object.entries(answers || {}).reduce((newAnswers, [key, answer]) => {\n newAnswers[key] = {\n ...answer,\n marks: (answer.marks || []).filter((mark) => {\n if (mark.type === 'point') {\n return isPointPlotable(mark.x, mark.y);\n }\n if (mark.type === 'polygon') {\n return !mark.points.find((point) => !isPointPlotable(point.x, point.y));\n }\n const from = mark.from || mark.root;\n const to = mark.to || mark.edge;\n return mark.building\n ? isPointPlotable(from.x, from.y)\n : isPointPlotable(from.x, from.y) && isPointPlotable(to.x, to.y);\n }),\n };\n return newAnswers;\n }, {});\n};\n\n//////////////////////////////////////////////////////////////////////////////////\n// BELOW FUNCTIONS ARE USED IN src/utils as well\n//////////////////////////////////////////////////////////////////////////////////\n\n/*\n * Function to calculate the distance between two points\n * @param {Object} a - point a\n * @param {Object} b - point b\n * */\nconst distance = (a, b) => {\n return Number(Math.sqrt((a.x - b.x) ** 2 + (a.y - b.y) ** 2).toFixed(3));\n};\n\n/*\n * Function to check if a point lies on edges of a polygon\n * @param {Object} point - point object\n * @param {Array} polygon - polygon points array\n * */\nconst pointInPolygon = (point, polygon) => {\n let c = point;\n let inside = false;\n let clonePolygon = [...polygon];\n clonePolygon.push(polygon[0]);\n for (let i = 0; i < clonePolygon.length - 1; i++) {\n let a = clonePolygon[i];\n let b = clonePolygon[i + 1];\n // check if point is on the edge\n if (distance(a, c) + distance(c, b) === distance(a, b)) {\n inside = true;\n break;\n }\n }\n return inside;\n};\n\n/*\n * Function to get the intersection point of two lines\n * @param {Number} x1 - x coordinate of point 1 of line 1\n * @param {Number} y1 - y coordinate of point 1 of line 1\n * @param {Number} x2 - x coordinate of point 2 of line 1\n * @param {Number} y2 - y coordinate of point 2 of line 1\n * @param {Number} x3 - x coordinate of point 1 of line 2\n * @param {Number} y3 - y coordinate of point 1 of line 2\n * @param {Number} x4 - x coordinate of point 2 of line 2\n * @param {Number} y4 - y coordinate of point 2 of line 2\n * */\nconst lineIntersect = (x1, y1, x2, y2, x3, y3, x4, y4) => {\n let ua,\n denominator = (y4 - y3) * (x2 - x1) - (x4 - x3) * (y2 - y1);\n if (denominator === 0) {\n return null;\n }\n ua = ((x4 - x3) * (y1 - y3) - (y4 - y3) * (x1 - x3)) / denominator;\n return {\n x: Number((x1 + ua * (x2 - x1)).toFixed(3)),\n y: Number((y1 + ua * (y2 - y1)).toFixed(3)),\n };\n};\n\n/*\n * Check if a point is inside the graph\n * @param {Object} point - point object\n * @param {Object} domain - domain object\n * @param {Object} range - range object\n * */\nconst isPointInsideGraph = (point, domain, range) => {\n return point.x > domain.min && point.x < domain.max && point.y > range.min && point.y < range.max;\n};\n\n/*\n * Check if a point is on or inside the graph\n * @param {Object} point - point object\n * @param {Object} domain - domain object\n * @param {Object} range - range object\n * */\nconst isPointOnOrInsideGraph = (point, domain, range) => {\n return point.x >= domain.min && point.x <= domain.max && point.y >= range.min && point.y <= range.max;\n};\n\n/*\n * Find the intersection point of a mark with the graph\n * @param {Object} mark - mark object\n * @param {Object} domain - domain object\n * @param {Object} range - range object\n * */\nconst findIntersectionPointForMark = (mark, domain, range) => {\n let intersectionPoint = [];\n let tempData = [\n [domain.max, range.max, domain.max, range.min],\n [domain.min, range.max, domain.min, range.min],\n [domain.min, range.max, domain.max, range.max],\n [domain.min, range.min, domain.max, range.min],\n ];\n for (let i = 0; i < tempData.length; i++) {\n let intersection = lineIntersect(\n mark.from.x,\n mark.from.y,\n mark.to.x,\n mark.to.y,\n tempData[i][0],\n tempData[i][1],\n tempData[i][2],\n tempData[i][3],\n );\n if (intersection && isPointOnOrInsideGraph(intersection, domain, range)) {\n intersectionPoint.push(intersection);\n }\n }\n return intersectionPoint;\n};\n\n/*\n * Sort points in clockwise direction for a polygon\n * @param {Array} points - points array\n * */\nconst sortPointsClockWise = (points) => {\n // Find min max to get center and Sort from top to bottom\n points.sort((a, b) => a.y - b.y);\n // Get center y\n const cy = (points[0].y + points[points.length - 1].y) / 2;\n // Sort from right to left\n points.sort((a, b) => b.x - a.x);\n // Get center x\n const cx = (points[0].x + points[points.length - 1].x) / 2;\n // Center point\n const center = { x: cx, y: cy };\n // As the points are sorted from right to left the first point is the rightmost Starting angle used to reference other angles\n let startAng;\n points.forEach((point) => {\n let ang = Math.atan2(point.y - center.y, point.x - center.x);\n if (!startAng) {\n startAng = ang;\n } else {\n if (ang < startAng) {\n // ensure that all points are clockwise of the start point\n ang += Math.PI * 2;\n }\n }\n point.angle = ang; // add the angle to the point\n });\n // first sort clockwise\n points.sort((a, b) => a.angle - b.angle);\n // then reverse the order\n const ccwPoints = points.reverse();\n // move the last point back to the start\n ccwPoints.unshift(ccwPoints.pop());\n return ccwPoints.map(({ angle, ...attr }) => attr);\n};\n\n/*\n * Function to calculate the dot product of two vectors\n * @param {Object} v1 - point 1\n * @param {Object} v2 - point 2\n * */\nconst dotProduct = (v1, v2) => {\n return v1.x * v2.x + v1.y * v2.y;\n};\n\n/*\n * Function to calculate the magnitude of a vector\n * @param {Object} v - point object\n * */\nconst magnitude = (v) => {\n return Math.sqrt(v.x * v.x + v.y * v.y);\n};\n\n/*\n * Function to calculate the angle between two vectors in radians\n * @param {Object} v1 - point 1\n * @param {Object} v2 - point 2\n * */\nconst angleBetweenVectors = (v1, v2) => {\n const dot = dotProduct(v1, v2);\n const magV1 = magnitude(v1);\n const magV2 = magnitude(v2);\n // Ensure the dot product is within the domain of the acos function\n return Math.acos(dot / (magV1 * magV2));\n};\n\n/*\n * Function to check if a point lies between the angle formed by two lines\n * @param {Object} commonPoint - common point of the two lines\n * @param {Object} point1 - point 1 of cone\n * @param {Object} point2 - point 2 of cone\n * @param {Object} testPoint - point to be tested\n * */\nconst pointInAngle = (commonPoint, point1, point2, testPoint) => {\n const vector1 = { x: point1.x - commonPoint.x, y: point1.y - commonPoint.y };\n const vector2 = { x: point2.x - commonPoint.x, y: point2.y - commonPoint.y };\n const testVector = { x: testPoint.x - commonPoint.x, y: testPoint.y - commonPoint.y };\n const angle1 = angleBetweenVectors(vector1, testVector);\n const angle2 = angleBetweenVectors(vector2, testVector);\n const angleSum = angle1 + angle2;\n // Check if the sum of angles is approximately equal to the angle between the two lines\n // You may need to adjust the tolerance (e.g., 0.0001) based on your specific requirements\n const tolerance = 0.0001;\n return Math.abs(angleSum - angleBetweenVectors(vector1, vector2)) < tolerance;\n};\n\n/*\n * Function to remove duplicate points from an array\n * @param {Array} array - array of points\n * */\nconst removeDuplicatesFromArray = (array) => {\n return array.filter((obj, index) => {\n return index === array.findIndex((o) => obj.x === o.x && obj.y === o.y);\n });\n};\n\n/*\n * Function to remove duplicate points and filter sections\n * @param {Array} sections - array of sections\n * */\nconst removeDuplicateAndFilterSections = (sections) => {\n //removing duplicate points.\n for (let i = 0; i < sections.length; i++) {\n sections[i] = sections[i].filter((obj, index) => {\n return index === sections[i].findIndex((o) => obj.x === o.x && obj.y === o.y);\n });\n }\n //removing arrays with two points\n sections = sections.filter((section) => section.length > 2);\n //sorting the points in clockwise direction\n for (let i = 0; i < sections.length; i++) {\n sections[i] = sortPointsClockWise(sections[i]);\n }\n return sections;\n};\n\n/*\n * Function to find sections in solution set for one line\n * @param {Array} intersectionPoint - intersection point\n * @param {Object} domain - domain object\n * @param {Object} range - range object\n * */\nconst findSectionsInSolutionSetForOneLine = (intersectionPoint, domain, range) => {\n let sections = [];\n sections.push([].concat(intersectionPoint));\n sections.push([].concat(intersectionPoint));\n if (\n (intersectionPoint[0].x === domain.max && intersectionPoint[1].y === range.max) ||\n (intersectionPoint[1].x === domain.max && intersectionPoint[0].y === range.max)\n ) {\n sections[0].push({ x: domain.max, y: range.max });\n sections[1].push({ x: domain.min, y: range.max }, { x: domain.min, y: range.min }, { x: domain.max, y: range.min });\n } else if (\n (intersectionPoint[0].x === domain.min && intersectionPoint[1].y === range.max) ||\n (intersectionPoint[1].x === domain.min && intersectionPoint[0].y === range.max)\n ) {\n sections[0].push({ x: domain.min, y: range.max });\n sections[1].push({ x: domain.max, y: range.max }, { x: domain.max, y: range.min }, { x: domain.min, y: range.min });\n } else if (\n (intersectionPoint[0].x === domain.min && intersectionPoint[1].y === range.min) ||\n (intersectionPoint[1].x === domain.min && intersectionPoint[0].y === range.min)\n ) {\n sections[0].push({ x: domain.min, y: range.min });\n sections[1].push({ x: domain.max, y: range.min }, { x: domain.max, y: range.max }, { x: domain.min, y: range.max });\n } else if (\n (intersectionPoint[0].x === domain.max && intersectionPoint[1].y === range.min) ||\n (intersectionPoint[1].x === domain.max && intersectionPoint[0].y === range.min)\n ) {\n sections[0].push({ x: domain.max, y: range.min });\n sections[1].push({ x: domain.min, y: range.min }, { x: domain.min, y: range.max }, { x: domain.max, y: range.max });\n } else if (\n (intersectionPoint[0].x === domain.min && intersectionPoint[1].x === domain.max) ||\n (intersectionPoint[0].x === domain.max && intersectionPoint[1].x === domain.min)\n ) {\n sections[0].push({ x: domain.min, y: range.max }, { x: domain.max, y: range.max });\n sections[1].push({ x: domain.min, y: range.min }, { x: domain.max, y: range.min });\n } else if (\n (intersectionPoint[0].y === range.min && intersectionPoint[1].y === range.max) ||\n (intersectionPoint[0].y === range.max && intersectionPoint[1].y === range.min)\n ) {\n sections[0].push({ x: domain.min, y: range.min }, { x: domain.min, y: range.max });\n sections[1].push({ x: domain.max, y: range.min }, { x: domain.max, y: range.max });\n }\n return removeDuplicateAndFilterSections(sections);\n};\n\n/*\n * Function to find sections in solution set for two lines\n * @param {Object} gssLineData - graphing solution set line data\n * @param {Array} answers - answers array\n * @param {Object} domain - domain object\n * @param {Object} range - range object\n * */\nconst findSectionsInSolutionSetForTwoLines = (gssLineData, answers, domain, range) => {\n let mark1 = answers[0];\n let mark2 = answers[1];\n let cornerPoints = [\n { x: domain.min, y: range.min },\n { x: domain.min, y: range.max },\n { x: domain.max, y: range.min },\n { x: domain.max, y: range.max },\n ];\n let intersectPoint = lineIntersect(\n mark1.from.x,\n mark1.from.y,\n mark1.to.x,\n mark1.to.y,\n mark2.from.x,\n mark2.from.y,\n mark2.to.x,\n mark2.to.y,\n );\n let sections = [];\n let intersectionPoint1 = findIntersectionPointForMark(mark1, domain, range);\n intersectionPoint1 = removeDuplicatesFromArray(intersectionPoint1);\n let intersectionPoint2 = findIntersectionPointForMark(mark2, domain, range);\n intersectionPoint2 = removeDuplicatesFromArray(intersectionPoint2);\n if (intersectPoint && isPointInsideGraph(intersectPoint, domain, range)) {\n for (let i = 0; i < intersectionPoint1.length; i++) {\n for (let j = 0; j < intersectionPoint2.length; j++) {\n let bucket = [];\n let newCornerPoints = [];\n bucket.push(intersectPoint);\n bucket.push(intersectionPoint1[i]);\n bucket.push(intersectionPoint2[j]);\n for (let k = 0; k < cornerPoints.length; k++) {\n if (pointInAngle(intersectPoint, intersectionPoint1[i], intersectionPoint2[j], cornerPoints[k])) {\n bucket.push(cornerPoints[k]);\n } else {\n newCornerPoints.push(cornerPoints[k]);\n }\n }\n cornerPoints = newCornerPoints;\n sections.push(bucket);\n }\n }\n } else {\n let sections1 = findSectionsInSolutionSetForOneLine(intersectionPoint1, domain, range);\n let sections2 = findSectionsInSolutionSetForOneLine(intersectionPoint2, domain, range);\n for (let i = 0; i < sections1.length; i++) {\n if (\n !(pointInPolygon(intersectionPoint2[0], sections1[i]) && pointInPolygon(intersectionPoint2[1], sections1[i]))\n ) {\n sections.push(sections1[i]);\n }\n }\n for (let i = 0; i < sections2.length; i++) {\n if (\n !(pointInPolygon(intersectionPoint1[0], sections2[i]) && pointInPolygon(intersectionPoint1[1], sections2[i]))\n ) {\n sections.push(sections2[i]);\n }\n }\n for (let i = 0; i < sections.length; i++) {\n cornerPoints = cornerPoints.filter(function (o1) {\n return !sections[i].some(function (o2) {\n return o1.x === o2.x && o1.y === o2.y;\n });\n });\n }\n let sections3 = cornerPoints.concat(intersectionPoint1, intersectionPoint2);\n sections.push(sections3);\n }\n return removeDuplicateAndFilterSections(sections);\n};\n\n/*\n * Function to find sections in solution set\n * @param {Object} gssLineData - graphing solution set line data\n * @param {Array} answers - answers array\n * @param {Object} domain - domain object\n * @param {Object} range - range object\n * */\nexport const findSectionsInSolutionSet = (gssLineData, answers, domain, range) => {\n if (gssLineData.numberOfLines === 1) {\n const intersectionPoint = findIntersectionPointForMark(answers[0], domain, range);\n gssLineData.sections = findSectionsInSolutionSetForOneLine(intersectionPoint, domain, range);\n } else {\n gssLineData.sections = findSectionsInSolutionSetForTwoLines(gssLineData, answers, domain, range);\n }\n return gssLineData;\n};\n\n/*\n * Function to check if a point is inside a polygon\n * @param {Object} point - point to be checked\n * @param {Array} polygon - polygon points array\n * */\nexport const pointInsidePolygon = (point, polygon) => {\n const num_vertices = polygon.length;\n const x = point.x;\n const y = point.y;\n let inside = false;\n let p1 = polygon[0];\n let p2;\n for (let i = 1; i <= num_vertices; i++) {\n p2 = polygon[i % num_vertices];\n if (y > Math.min(p1.y, p2.y)) {\n if (y <= Math.max(p1.y, p2.y)) {\n if (x <= Math.max(p1.x, p2.x)) {\n const x_intersection = ((y - p1.y) * (p2.x - p1.x)) / (p2.y - p1.y) + p1.x;\n if (p1.x === p2.x || x <= x_intersection) {\n inside = !inside;\n }\n }\n }\n }\n p1 = p2;\n }\n return inside;\n};\n\n/*\n * Function to check if lines are added in the graph\n * @param {Object} gssLineData - graphing solution set line data\n * @param {Array} answer - answer array\n * */\nexport const checkIfLinesAreAdded = (gssLineData, answer) => {\n if (answer.length === 0) {\n return false;\n }\n if (gssLineData.numberOfLines === 1) {\n if (answer.length === 1) {\n return !answer[0].building;\n }\n } else {\n if (answer.length !== 2) {\n return false;\n } else {\n return !answer[1].building;\n }\n }\n};\n"],"mappings":"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","ignoreList":[]}
|
|
1
|
+
{"version":3,"file":"utils.js","names":["_lodashEs","require","VALID_GRID_VALUES","PREFERRED_VALID_GRID_VALUES","VALID_LABEL_VALUES","exports","getGridValues","axis","size","prefferedValues","minValue","max","min","maxValue","values","filter","value","getLabelValues","applyConstraints","oldGridValues","oldLabelValues","gridValues","labelValues","step","isEqual","includes","preferredValues","lowestValue","labelStep","getPlotablePoints","prop","tickValues","tickVal","indexOf","push","Math","round","tV","filterPlotableMarks","domain","range","answers","domainValues","rangeValues","isPointPlotable","x","y","Object","entries","reduce","newAnswers","key","answer","marks","mark","type","points","find","point","from","root","to","edge","building","distance","a","b","Number","sqrt","toFixed","pointInPolygon","polygon","c","inside","clonePolygon","i","length","lineIntersect","x1","y1","x2","y2","x3","y3","x4","y4","ua","denominator","isPointInsideGraph","isPointOnOrInsideGraph","findIntersectionPointForMark","intersectionPoint","tempData","intersection","sortPointsClockWise","sort","cy","cx","center","startAng","forEach","ang","atan2","PI","angle","ccwPoints","reverse","unshift","pop","map","attr","dotProduct","v1","v2","magnitude","v","angleBetweenVectors","dot","magV1","magV2","acos","pointInAngle","commonPoint","point1","point2","testPoint","vector1","vector2","testVector","angle1","angle2","angleSum","tolerance","abs","removeDuplicatesFromArray","array","obj","index","findIndex","o","removeDuplicateAndFilterSections","sections","section","findSectionsInSolutionSetForOneLine","concat","findSectionsInSolutionSetForTwoLines","gssLineData","mark1","mark2","cornerPoints","intersectPoint","intersectionPoint1","intersectionPoint2","j","bucket","newCornerPoints","k","sections1","sections2","o1","some","o2","sections3","findSectionsInSolutionSet","numberOfLines","pointInsidePolygon","num_vertices","p1","p2","x_intersection","checkIfLinesAreAdded"],"sources":["../src/utils.js"],"sourcesContent":["import { isEqual } from 'lodash-es';\n\n/*Valid grid values*/\nconst VALID_GRID_VALUES = [\n 0.01, 0.02, 0.04, 0.05, 0.0625, 0.1, 0.125, 0.2, 0.25, 0.5, 1, 2, 3, 4, 5, 8, 10, 12, 15, 20, 40, 50, 64, 100, 500,\n 1000,\n];\n\n// same as VALID_GRID_VALUES but next values are excluded: 0.04, 0.0625, 0.125, 3, 4, 8, 12, 15, 40, 64\nconst PREFERRED_VALID_GRID_VALUES = [0.01, 0.02, 0.05, 0.1, 0.2, 0.25, 0.5, 1, 2, 5, 10, 20, 50, 100, 500, 1000];\n\n/*Valid label values*/\nexport const VALID_LABEL_VALUES = {\n 0.01: [0, 0.01, 0.02, 0.04, 0.05, 0.1],\n 0.02: [0, 0.02, 0.04, 0.1],\n 0.04: [0, 0.04, 0.08, 0.16, 0.2],\n 0.05: [0, 0.05, 0.1, 0.2, 0.25],\n 0.0625: [0, 0.0625, 0.125, 0.25, 0.5],\n 0.1: [0, 0.1, 0.2, 0.4, 0.5, 1],\n 0.125: [0, 0.125, 0.25, 0.5, 1],\n 0.2: [0, 0.2, 0.5, 0.1],\n 0.25: [0, 0.25, 0.5, 1, 2],\n 0.5: [0, 0.5, 1, 2],\n 1: [0, 1, 2, 4, 5, 10],\n 2: [0, 2, 4, 8, 10],\n 3: [0, 3, 6, 12, 15],\n 4: [0, 4, 8, 16, 20],\n 5: [0, 5, 10, 20, 25],\n 8: [0, 8, 16, 32, 40, 64],\n 10: [0, 10, 20, 40, 50, 100],\n 12: [0, 12, 24],\n 15: [0, 15, 30, 60],\n 20: [0, 20, 40, 80, 100],\n 40: [0, 40, 80, 160, 200],\n 50: [0, 50, 100, 200, 250],\n 64: [0, 64, 128],\n 100: [0, 100, 200, 400, 500],\n 500: [0, 500, 1000, 2500],\n 1000: [0, 1000, 2000, 4000, 5000],\n};\n\n/*\n * Function to get grid values\n * @param {Object} axis - axis object\n * @param {Number} size - size of the axis\n * @param {Boolean} prefferedValues - flag to get preffered values\n * */\nexport const getGridValues = (axis, size, prefferedValues = false) => {\n const minValue = (10 * (axis.max - axis.min)) / size;\n const maxValue = minValue * 10;\n const values = prefferedValues ? PREFERRED_VALID_GRID_VALUES : VALID_GRID_VALUES;\n return values.filter((value) => value >= minValue && value <= maxValue);\n};\n\n/*\n * Function to get label values\n * @param {Number} value - value of the axis step\n * */\nexport const getLabelValues = (value) => VALID_LABEL_VALUES[value] || [];\n\n/*\n * Function to apply constraints\n * @param {Object} axis - axis object\n * @param {Number} size - size of the axis\n * @param {Array} oldGridValues - old grid values\n * @param {Array} oldLabelValues - old label values\n * */\nexport const applyConstraints = (axis, size, oldGridValues, oldLabelValues) => {\n const gridValues = getGridValues(axis, size);\n let labelValues = getLabelValues(axis.step);\n if (!isEqual(oldGridValues, gridValues) && !gridValues.includes(axis.step)) {\n const preferredValues = getGridValues(axis, size, true);\n const lowestValue = preferredValues[0] || 1;\n axis.step = lowestValue;\n labelValues = getLabelValues(lowestValue);\n if (!labelValues.includes(axis.labelStep)) {\n axis.labelStep = lowestValue;\n }\n return { gridValues, labelValues };\n }\n if (!isEqual(oldLabelValues, labelValues) && !labelValues.includes(axis.labelStep)) {\n axis.labelStep = axis.step;\n }\n return { gridValues, labelValues };\n};\n\n// also used in pie-lib/graphing/utils as 'getTickValues'\n/*\n * Function to get plotable points\n * @param {Object} prop - axis object\n * */\nconst getPlotablePoints = (prop) => {\n const tickValues = [];\n let tickVal = 0;\n while (tickVal >= prop.min && tickValues.indexOf(tickVal) < 0) {\n tickValues.push(tickVal);\n tickVal = Math.round((tickVal - prop.step) * 10000) / 10000;\n }\n tickVal = Math.round(prop.step * 10000) / 10000;\n while (tickVal <= prop.max && tickValues.indexOf(tickVal) < 0) {\n tickValues.push(tickVal);\n tickVal = Math.round((tickVal + prop.step) * 10000) / 10000;\n }\n // return only ticks that are inside the min-max interval\n if (tickValues) {\n return tickValues.filter((tV) => tV >= prop.min && tV <= prop.max);\n }\n return [];\n};\n\n/*\n * Function to get plotable marks\n * @param {Object} domain - domain object\n * @param {Object} range - range object\n * @param {Object} answers - answers object\n * */\nexport const filterPlotableMarks = (domain, range, answers) => {\n const domainValues = getPlotablePoints(domain);\n const rangeValues = getPlotablePoints(range);\n const isPointPlotable = (x, y) => domainValues.includes(x) && rangeValues.includes(y);\n return Object.entries(answers || {}).reduce((newAnswers, [key, answer]) => {\n newAnswers[key] = {\n ...answer,\n marks: (answer.marks || []).filter((mark) => {\n if (mark.type === 'point') {\n return isPointPlotable(mark.x, mark.y);\n }\n if (mark.type === 'polygon') {\n return !mark.points.find((point) => !isPointPlotable(point.x, point.y));\n }\n const from = mark.from || mark.root;\n const to = mark.to || mark.edge;\n return mark.building\n ? isPointPlotable(from.x, from.y)\n : isPointPlotable(from.x, from.y) && isPointPlotable(to.x, to.y);\n }),\n };\n return newAnswers;\n }, {});\n};\n\n//////////////////////////////////////////////////////////////////////////////////\n// BELOW FUNCTIONS ARE USED IN src/utils as well\n//////////////////////////////////////////////////////////////////////////////////\n\n/*\n * Function to calculate the distance between two points\n * @param {Object} a - point a\n * @param {Object} b - point b\n * */\nconst distance = (a, b) => {\n return Number(Math.sqrt((a.x - b.x) ** 2 + (a.y - b.y) ** 2).toFixed(3));\n};\n\n/*\n * Function to check if a point lies on edges of a polygon\n * @param {Object} point - point object\n * @param {Array} polygon - polygon points array\n * */\nconst pointInPolygon = (point, polygon) => {\n let c = point;\n let inside = false;\n let clonePolygon = [...polygon];\n clonePolygon.push(polygon[0]);\n for (let i = 0; i < clonePolygon.length - 1; i++) {\n let a = clonePolygon[i];\n let b = clonePolygon[i + 1];\n // check if point is on the edge\n if (distance(a, c) + distance(c, b) === distance(a, b)) {\n inside = true;\n break;\n }\n }\n return inside;\n};\n\n/*\n * Function to get the intersection point of two lines\n * @param {Number} x1 - x coordinate of point 1 of line 1\n * @param {Number} y1 - y coordinate of point 1 of line 1\n * @param {Number} x2 - x coordinate of point 2 of line 1\n * @param {Number} y2 - y coordinate of point 2 of line 1\n * @param {Number} x3 - x coordinate of point 1 of line 2\n * @param {Number} y3 - y coordinate of point 1 of line 2\n * @param {Number} x4 - x coordinate of point 2 of line 2\n * @param {Number} y4 - y coordinate of point 2 of line 2\n * */\nconst lineIntersect = (x1, y1, x2, y2, x3, y3, x4, y4) => {\n let ua,\n denominator = (y4 - y3) * (x2 - x1) - (x4 - x3) * (y2 - y1);\n if (denominator === 0) {\n return null;\n }\n ua = ((x4 - x3) * (y1 - y3) - (y4 - y3) * (x1 - x3)) / denominator;\n return {\n x: Number((x1 + ua * (x2 - x1)).toFixed(3)),\n y: Number((y1 + ua * (y2 - y1)).toFixed(3)),\n };\n};\n\n/*\n * Check if a point is inside the graph\n * @param {Object} point - point object\n * @param {Object} domain - domain object\n * @param {Object} range - range object\n * */\nconst isPointInsideGraph = (point, domain, range) => {\n return point.x > domain.min && point.x < domain.max && point.y > range.min && point.y < range.max;\n};\n\n/*\n * Check if a point is on or inside the graph\n * @param {Object} point - point object\n * @param {Object} domain - domain object\n * @param {Object} range - range object\n * */\nconst isPointOnOrInsideGraph = (point, domain, range) => {\n return point.x >= domain.min && point.x <= domain.max && point.y >= range.min && point.y <= range.max;\n};\n\n/*\n * Find the intersection point of a mark with the graph\n * @param {Object} mark - mark object\n * @param {Object} domain - domain object\n * @param {Object} range - range object\n * */\nconst findIntersectionPointForMark = (mark, domain, range) => {\n let intersectionPoint = [];\n let tempData = [\n [domain.max, range.max, domain.max, range.min],\n [domain.min, range.max, domain.min, range.min],\n [domain.min, range.max, domain.max, range.max],\n [domain.min, range.min, domain.max, range.min],\n ];\n for (let i = 0; i < tempData.length; i++) {\n let intersection = lineIntersect(\n mark.from.x,\n mark.from.y,\n mark.to.x,\n mark.to.y,\n tempData[i][0],\n tempData[i][1],\n tempData[i][2],\n tempData[i][3],\n );\n if (intersection && isPointOnOrInsideGraph(intersection, domain, range)) {\n intersectionPoint.push(intersection);\n }\n }\n return intersectionPoint;\n};\n\n/*\n * Sort points in clockwise direction for a polygon\n * @param {Array} points - points array\n * */\nconst sortPointsClockWise = (points) => {\n // Find min max to get center and Sort from top to bottom\n points.sort((a, b) => a.y - b.y);\n // Get center y\n const cy = (points[0].y + points[points.length - 1].y) / 2;\n // Sort from right to left\n points.sort((a, b) => b.x - a.x);\n // Get center x\n const cx = (points[0].x + points[points.length - 1].x) / 2;\n // Center point\n const center = { x: cx, y: cy };\n // As the points are sorted from right to left the first point is the rightmost Starting angle used to reference other angles\n let startAng;\n points.forEach((point) => {\n let ang = Math.atan2(point.y - center.y, point.x - center.x);\n if (!startAng) {\n startAng = ang;\n } else {\n if (ang < startAng) {\n // ensure that all points are clockwise of the start point\n ang += Math.PI * 2;\n }\n }\n point.angle = ang; // add the angle to the point\n });\n // first sort clockwise\n points.sort((a, b) => a.angle - b.angle);\n // then reverse the order\n const ccwPoints = points.reverse();\n // move the last point back to the start\n ccwPoints.unshift(ccwPoints.pop());\n return ccwPoints.map(({ angle, ...attr }) => attr);\n};\n\n/*\n * Function to calculate the dot product of two vectors\n * @param {Object} v1 - point 1\n * @param {Object} v2 - point 2\n * */\nconst dotProduct = (v1, v2) => {\n return v1.x * v2.x + v1.y * v2.y;\n};\n\n/*\n * Function to calculate the magnitude of a vector\n * @param {Object} v - point object\n * */\nconst magnitude = (v) => {\n return Math.sqrt(v.x * v.x + v.y * v.y);\n};\n\n/*\n * Function to calculate the angle between two vectors in radians\n * @param {Object} v1 - point 1\n * @param {Object} v2 - point 2\n * */\nconst angleBetweenVectors = (v1, v2) => {\n const dot = dotProduct(v1, v2);\n const magV1 = magnitude(v1);\n const magV2 = magnitude(v2);\n // Ensure the dot product is within the domain of the acos function\n return Math.acos(dot / (magV1 * magV2));\n};\n\n/*\n * Function to check if a point lies between the angle formed by two lines\n * @param {Object} commonPoint - common point of the two lines\n * @param {Object} point1 - point 1 of cone\n * @param {Object} point2 - point 2 of cone\n * @param {Object} testPoint - point to be tested\n * */\nconst pointInAngle = (commonPoint, point1, point2, testPoint) => {\n const vector1 = { x: point1.x - commonPoint.x, y: point1.y - commonPoint.y };\n const vector2 = { x: point2.x - commonPoint.x, y: point2.y - commonPoint.y };\n const testVector = { x: testPoint.x - commonPoint.x, y: testPoint.y - commonPoint.y };\n const angle1 = angleBetweenVectors(vector1, testVector);\n const angle2 = angleBetweenVectors(vector2, testVector);\n const angleSum = angle1 + angle2;\n // Check if the sum of angles is approximately equal to the angle between the two lines\n // You may need to adjust the tolerance (e.g., 0.0001) based on your specific requirements\n const tolerance = 0.0001;\n return Math.abs(angleSum - angleBetweenVectors(vector1, vector2)) < tolerance;\n};\n\n/*\n * Function to remove duplicate points from an array\n * @param {Array} array - array of points\n * */\nconst removeDuplicatesFromArray = (array) => {\n return array.filter((obj, index) => {\n return index === array.findIndex((o) => obj.x === o.x && obj.y === o.y);\n });\n};\n\n/*\n * Function to remove duplicate points and filter sections\n * @param {Array} sections - array of sections\n * */\nconst removeDuplicateAndFilterSections = (sections) => {\n //removing duplicate points.\n for (let i = 0; i < sections.length; i++) {\n sections[i] = sections[i].filter((obj, index) => {\n return index === sections[i].findIndex((o) => obj.x === o.x && obj.y === o.y);\n });\n }\n //removing arrays with two points\n sections = sections.filter((section) => section.length > 2);\n //sorting the points in clockwise direction\n for (let i = 0; i < sections.length; i++) {\n sections[i] = sortPointsClockWise(sections[i]);\n }\n return sections;\n};\n\n/*\n * Function to find sections in solution set for one line\n * @param {Array} intersectionPoint - intersection point\n * @param {Object} domain - domain object\n * @param {Object} range - range object\n * */\nconst findSectionsInSolutionSetForOneLine = (intersectionPoint, domain, range) => {\n let sections = [];\n sections.push([].concat(intersectionPoint));\n sections.push([].concat(intersectionPoint));\n if (\n (intersectionPoint[0].x === domain.max && intersectionPoint[1].y === range.max) ||\n (intersectionPoint[1].x === domain.max && intersectionPoint[0].y === range.max)\n ) {\n sections[0].push({ x: domain.max, y: range.max });\n sections[1].push({ x: domain.min, y: range.max }, { x: domain.min, y: range.min }, { x: domain.max, y: range.min });\n } else if (\n (intersectionPoint[0].x === domain.min && intersectionPoint[1].y === range.max) ||\n (intersectionPoint[1].x === domain.min && intersectionPoint[0].y === range.max)\n ) {\n sections[0].push({ x: domain.min, y: range.max });\n sections[1].push({ x: domain.max, y: range.max }, { x: domain.max, y: range.min }, { x: domain.min, y: range.min });\n } else if (\n (intersectionPoint[0].x === domain.min && intersectionPoint[1].y === range.min) ||\n (intersectionPoint[1].x === domain.min && intersectionPoint[0].y === range.min)\n ) {\n sections[0].push({ x: domain.min, y: range.min });\n sections[1].push({ x: domain.max, y: range.min }, { x: domain.max, y: range.max }, { x: domain.min, y: range.max });\n } else if (\n (intersectionPoint[0].x === domain.max && intersectionPoint[1].y === range.min) ||\n (intersectionPoint[1].x === domain.max && intersectionPoint[0].y === range.min)\n ) {\n sections[0].push({ x: domain.max, y: range.min });\n sections[1].push({ x: domain.min, y: range.min }, { x: domain.min, y: range.max }, { x: domain.max, y: range.max });\n } else if (\n (intersectionPoint[0].x === domain.min && intersectionPoint[1].x === domain.max) ||\n (intersectionPoint[0].x === domain.max && intersectionPoint[1].x === domain.min)\n ) {\n sections[0].push({ x: domain.min, y: range.max }, { x: domain.max, y: range.max });\n sections[1].push({ x: domain.min, y: range.min }, { x: domain.max, y: range.min });\n } else if (\n (intersectionPoint[0].y === range.min && intersectionPoint[1].y === range.max) ||\n (intersectionPoint[0].y === range.max && intersectionPoint[1].y === range.min)\n ) {\n sections[0].push({ x: domain.min, y: range.min }, { x: domain.min, y: range.max });\n sections[1].push({ x: domain.max, y: range.min }, { x: domain.max, y: range.max });\n }\n return removeDuplicateAndFilterSections(sections);\n};\n\n/*\n * Function to find sections in solution set for two lines\n * @param {Object} gssLineData - graphing solution set line data\n * @param {Array} answers - answers array\n * @param {Object} domain - domain object\n * @param {Object} range - range object\n * */\nconst findSectionsInSolutionSetForTwoLines = (gssLineData, answers, domain, range) => {\n let mark1 = answers[0];\n let mark2 = answers[1];\n let cornerPoints = [\n { x: domain.min, y: range.min },\n { x: domain.min, y: range.max },\n { x: domain.max, y: range.min },\n { x: domain.max, y: range.max },\n ];\n let intersectPoint = lineIntersect(\n mark1.from.x,\n mark1.from.y,\n mark1.to.x,\n mark1.to.y,\n mark2.from.x,\n mark2.from.y,\n mark2.to.x,\n mark2.to.y,\n );\n let sections = [];\n let intersectionPoint1 = findIntersectionPointForMark(mark1, domain, range);\n intersectionPoint1 = removeDuplicatesFromArray(intersectionPoint1);\n let intersectionPoint2 = findIntersectionPointForMark(mark2, domain, range);\n intersectionPoint2 = removeDuplicatesFromArray(intersectionPoint2);\n if (intersectPoint && isPointInsideGraph(intersectPoint, domain, range)) {\n for (let i = 0; i < intersectionPoint1.length; i++) {\n for (let j = 0; j < intersectionPoint2.length; j++) {\n let bucket = [];\n let newCornerPoints = [];\n bucket.push(intersectPoint);\n bucket.push(intersectionPoint1[i]);\n bucket.push(intersectionPoint2[j]);\n for (let k = 0; k < cornerPoints.length; k++) {\n if (pointInAngle(intersectPoint, intersectionPoint1[i], intersectionPoint2[j], cornerPoints[k])) {\n bucket.push(cornerPoints[k]);\n } else {\n newCornerPoints.push(cornerPoints[k]);\n }\n }\n cornerPoints = newCornerPoints;\n sections.push(bucket);\n }\n }\n } else {\n let sections1 = findSectionsInSolutionSetForOneLine(intersectionPoint1, domain, range);\n let sections2 = findSectionsInSolutionSetForOneLine(intersectionPoint2, domain, range);\n for (let i = 0; i < sections1.length; i++) {\n if (\n !(pointInPolygon(intersectionPoint2[0], sections1[i]) && pointInPolygon(intersectionPoint2[1], sections1[i]))\n ) {\n sections.push(sections1[i]);\n }\n }\n for (let i = 0; i < sections2.length; i++) {\n if (\n !(pointInPolygon(intersectionPoint1[0], sections2[i]) && pointInPolygon(intersectionPoint1[1], sections2[i]))\n ) {\n sections.push(sections2[i]);\n }\n }\n for (let i = 0; i < sections.length; i++) {\n cornerPoints = cornerPoints.filter(function (o1) {\n return !sections[i].some(function (o2) {\n return o1.x === o2.x && o1.y === o2.y;\n });\n });\n }\n let sections3 = cornerPoints.concat(intersectionPoint1, intersectionPoint2);\n sections.push(sections3);\n }\n return removeDuplicateAndFilterSections(sections);\n};\n\n/*\n * Function to find sections in solution set\n * @param {Object} gssLineData - graphing solution set line data\n * @param {Array} answers - answers array\n * @param {Object} domain - domain object\n * @param {Object} range - range object\n * */\nexport const findSectionsInSolutionSet = (gssLineData, answers, domain, range) => {\n if (gssLineData.numberOfLines === 1) {\n const intersectionPoint = findIntersectionPointForMark(answers[0], domain, range);\n gssLineData.sections = findSectionsInSolutionSetForOneLine(intersectionPoint, domain, range);\n } else {\n gssLineData.sections = findSectionsInSolutionSetForTwoLines(gssLineData, answers, domain, range);\n }\n return gssLineData;\n};\n\n/*\n * Function to check if a point is inside a polygon\n * @param {Object} point - point to be checked\n * @param {Array} polygon - polygon points array\n * */\nexport const pointInsidePolygon = (point, polygon) => {\n const num_vertices = polygon.length;\n const x = point.x;\n const y = point.y;\n let inside = false;\n let p1 = polygon[0];\n let p2;\n for (let i = 1; i <= num_vertices; i++) {\n p2 = polygon[i % num_vertices];\n if (y > Math.min(p1.y, p2.y)) {\n if (y <= Math.max(p1.y, p2.y)) {\n if (x <= Math.max(p1.x, p2.x)) {\n const x_intersection = ((y - p1.y) * (p2.x - p1.x)) / (p2.y - p1.y) + p1.x;\n if (p1.x === p2.x || x <= x_intersection) {\n inside = !inside;\n }\n }\n }\n }\n p1 = p2;\n }\n return inside;\n};\n\n/*\n * Function to check if lines are added in the graph\n * @param {Object} gssLineData - graphing solution set line data\n * @param {Array} answer - answer array\n * */\nexport const checkIfLinesAreAdded = (gssLineData, answer) => {\n if (answer.length === 0) {\n return false;\n }\n if (gssLineData.numberOfLines === 1) {\n if (answer.length === 1) {\n return !answer[0].building;\n }\n } else {\n if (answer.length !== 2) {\n return false;\n } else {\n return !answer[1].building;\n }\n }\n};\n"],"mappings":"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","ignoreList":[]}
|
package/configure/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@pie-element/graphing-solution-set-configure",
|
|
3
3
|
"private": true,
|
|
4
|
-
"version": "4.
|
|
4
|
+
"version": "4.1.0-next.0",
|
|
5
5
|
"description": "",
|
|
6
6
|
"main": "lib/index.js",
|
|
7
7
|
"module": "src/index.js",
|
|
@@ -12,16 +12,16 @@
|
|
|
12
12
|
"@mui/icons-material": "^7.3.4",
|
|
13
13
|
"@mui/material": "^7.3.4",
|
|
14
14
|
"@pie-framework/pie-configure-events": "^1.3.0",
|
|
15
|
-
"@pie-lib/config-ui": "12.1.1-next.
|
|
16
|
-
"@pie-lib/editable-html-tip-tap": "1.1.1-next.
|
|
17
|
-
"@pie-lib/graphing-solution-set": "3.1.1-next.
|
|
18
|
-
"@pie-lib/math-rendering": "4.1.1-next.
|
|
15
|
+
"@pie-lib/config-ui": "12.1.1-next.3",
|
|
16
|
+
"@pie-lib/editable-html-tip-tap": "1.1.1-next.3",
|
|
17
|
+
"@pie-lib/graphing-solution-set": "3.1.1-next.1",
|
|
18
|
+
"@pie-lib/math-rendering": "4.1.1-next.1",
|
|
19
19
|
"classnames": "^2.2.5",
|
|
20
20
|
"core-js": "^3.40.0",
|
|
21
21
|
"debug": "^4.1.1",
|
|
22
22
|
"prop-types": "^15.6.2",
|
|
23
|
-
"react": "18.
|
|
24
|
-
"react-dom": "18.
|
|
23
|
+
"react": "18.3.1",
|
|
24
|
+
"react-dom": "18.3.1"
|
|
25
25
|
},
|
|
26
26
|
"scripts": {
|
|
27
27
|
"test": "./node_modules/.bin/jest"
|
package/controller/lib/index.js
CHANGED
|
@@ -10,9 +10,7 @@ exports.normalize = void 0;
|
|
|
10
10
|
exports.outcome = outcome;
|
|
11
11
|
exports.validate = void 0;
|
|
12
12
|
var _debug = _interopRequireDefault(require("debug"));
|
|
13
|
-
var
|
|
14
|
-
var _uniqWith = _interopRequireDefault(require("lodash/uniqWith"));
|
|
15
|
-
var _isEmpty = _interopRequireDefault(require("lodash/isEmpty"));
|
|
13
|
+
var _lodashEs = require("lodash-es");
|
|
16
14
|
var _defaults = _interopRequireDefault(require("./defaults"));
|
|
17
15
|
var _utils = require("./utils");
|
|
18
16
|
const log = (0, _debug.default)('@pie-element:graphing-solution-set:controller');
|
|
@@ -43,13 +41,13 @@ const getAnswerCorrected = ({
|
|
|
43
41
|
}) => {
|
|
44
42
|
sessionAnswers = sessionAnswers || [];
|
|
45
43
|
correctAnswers = correctAnswers || [];
|
|
46
|
-
const rez = (0,
|
|
44
|
+
const rez = (0, _lodashEs.cloneDeep)(sessionAnswers).reduce((correctedAnswer, answer) => {
|
|
47
45
|
const answerIsCorrect = correctAnswers.find(mark => compareMarks(answer, mark));
|
|
48
46
|
answer.correctness = answerIsCorrect ? 'correct' : 'incorrect';
|
|
49
47
|
return [...correctedAnswer, answer];
|
|
50
48
|
}, []);
|
|
51
49
|
// add missing objects from correct answer
|
|
52
|
-
const missingAnswers = (0,
|
|
50
|
+
const missingAnswers = (0, _lodashEs.cloneDeep)(correctAnswers).reduce((correctedAnswer, answer) => {
|
|
53
51
|
const answerIndex = sessionAnswers.find(mark => compareMarks(answer, mark));
|
|
54
52
|
if (!answerIndex) {
|
|
55
53
|
// means that corrected answer is missing from session, so we mark it as missing object
|
|
@@ -87,7 +85,7 @@ const getBestAnswer = (question, session, env = {}) => {
|
|
|
87
85
|
// initialize answer if no values
|
|
88
86
|
answer = answer || [];
|
|
89
87
|
// initialize one possible answer if no values
|
|
90
|
-
if ((0,
|
|
88
|
+
if ((0, _lodashEs.isEmpty)(questionPossibleAnswers)) {
|
|
91
89
|
questionPossibleAnswers = {
|
|
92
90
|
correctAnswer: initializeGraphMap()
|
|
93
91
|
};
|
|
@@ -98,7 +96,7 @@ const getBestAnswer = (question, session, env = {}) => {
|
|
|
98
96
|
};
|
|
99
97
|
}
|
|
100
98
|
// student's answers without DUPLICATES
|
|
101
|
-
const sessionAnswers = (0,
|
|
99
|
+
const sessionAnswers = (0, _lodashEs.uniqWith)(answer, compareMarks);
|
|
102
100
|
// array of possible answers entries
|
|
103
101
|
const possibleAnswers = Object.entries(questionPossibleAnswers);
|
|
104
102
|
return possibleAnswers.reduce((acc, entry) => {
|
|
@@ -140,7 +138,7 @@ const getBestAnswer = (question, session, env = {}) => {
|
|
|
140
138
|
bestScore: 0,
|
|
141
139
|
bestScoreAnswerKey: null,
|
|
142
140
|
// initially we just suppose all the answers are incorrect
|
|
143
|
-
answersCorrected: (0,
|
|
141
|
+
answersCorrected: (0, _lodashEs.cloneDeep)(sessionAnswers).map(answer => ({
|
|
144
142
|
...answer,
|
|
145
143
|
correctness: 'incorrect'
|
|
146
144
|
})),
|
|
@@ -218,7 +216,7 @@ function model(question, session, env) {
|
|
|
218
216
|
prompt: promptEnabled ? prompt : null,
|
|
219
217
|
rationale: null,
|
|
220
218
|
size: graph,
|
|
221
|
-
showToggle: env.mode === 'evaluate' && !(0,
|
|
219
|
+
showToggle: env.mode === 'evaluate' && !(0, _lodashEs.isEmpty)(answers) && answers.correctAnswer && answers.correctAnswer.marks && !(0, _lodashEs.isEmpty)(answers.correctAnswer.marks),
|
|
222
220
|
teacherInstructions: null,
|
|
223
221
|
toolbarTools,
|
|
224
222
|
extraCSSRules
|
|
@@ -234,7 +232,7 @@ function model(question, session, env) {
|
|
|
234
232
|
base.teacherInstructions = teacherInstructionsEnabled ? teacherInstructions : null;
|
|
235
233
|
}
|
|
236
234
|
if (mode === 'evaluate') {
|
|
237
|
-
if (!(0,
|
|
235
|
+
if (!(0, _lodashEs.isEmpty)(answers) && answers.correctAnswer && answers.correctAnswer.marks && !(0, _lodashEs.isEmpty)(answers.correctAnswer.marks)) {
|
|
238
236
|
const {
|
|
239
237
|
answersCorrected,
|
|
240
238
|
bestScoreAnswerKey,
|
|
@@ -262,13 +260,13 @@ function model(question, session, env) {
|
|
|
262
260
|
* */
|
|
263
261
|
function outcome(question, session, env = {}) {
|
|
264
262
|
return new Promise(resolve => {
|
|
265
|
-
if (!session || (0,
|
|
263
|
+
if (!session || (0, _lodashEs.isEmpty)(session)) {
|
|
266
264
|
resolve({
|
|
267
265
|
score: 0,
|
|
268
266
|
empty: true
|
|
269
267
|
});
|
|
270
268
|
}
|
|
271
|
-
if (env.mode !== 'evaluate' || (0,
|
|
269
|
+
if (env.mode !== 'evaluate' || (0, _lodashEs.isEmpty)(question.answers) || question.answers && question.answers.correctAnswer && (0, _lodashEs.isEmpty)(question.answers.correctAnswer.marks)) {
|
|
272
270
|
resolve({
|
|
273
271
|
score: 0
|
|
274
272
|
});
|
|
@@ -344,7 +342,7 @@ const validate = (model = {}) => {
|
|
|
344
342
|
if (!found && (!gssLineData.selectedTool === 'solutionSet' || !polygon)) {
|
|
345
343
|
correctAnswerErrors.correctAnswer = 'Please select a solution set for the graphing solution set item.';
|
|
346
344
|
}
|
|
347
|
-
if (!(0,
|
|
345
|
+
if (!(0, _lodashEs.isEmpty)(correctAnswerErrors)) {
|
|
348
346
|
errors.correctAnswerErrors = correctAnswerErrors;
|
|
349
347
|
}
|
|
350
348
|
return errors;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","names":["_debug","_interopRequireDefault","require","_cloneDeep","_uniqWith","_isEmpty","_defaults","_utils","log","debug","initializeGraphMap","line","compareMarks","mark1","mark2","type","equalMarks","exports","getAnswerCorrected","sessionAnswers","marks","correctAnswers","rez","cloneDeep","reduce","correctedAnswer","answer","answerIsCorrect","find","mark","correctness","missingAnswers","answerIndex","getBestAnswer","question","session","env","answers","questionPossibleAnswers","scoringType","Object","entries","forEach","key","value","filter","building","isEmpty","correctAnswer","sortedAnswers","uniqWith","possibleAnswers","acc","entry","possibleAnswerKey","possibleAnswer","length","correctMarks","scoredCorrectedAnswer","maxScore","score","bestScore","foundOneSolution","Math","floor","bestScoreAnswerKey","answersCorrected","map","normalize","defaults","model","Promise","resolve","normalizedQuestion","removeInvalidAnswers","defaultTool","extraCSSRules","prompt","promptEnabled","graph","toolbarTools","questionProps","arrows","mode","role","left","right","up","down","base","disabled","rationale","size","showToggle","teacherInstructions","rationaleEnabled","teacherInstructionsEnabled","correctResponse","outcome","empty","createCorrectResponseSession","values","id","validate","gssLineData","errors","correctAnswerErrors","found","numberOfLines","polygon","selectedTool"],"sources":["../src/index.js"],"sourcesContent":["import debug from 'debug';\nimport cloneDeep from 'lodash/cloneDeep';\nimport uniqWith from 'lodash/uniqWith';\nimport isEmpty from 'lodash/isEmpty';\nimport defaults from './defaults';\nimport { equalMarks, sortedAnswers, removeInvalidAnswers } from './utils';\n\nconst log = debug('@pie-element:graphing-solution-set:controller');\n\nconst initializeGraphMap = () => ({\n line: [],\n});\n\n/*\n * Function to compare two marks\n * @param {Object} mark1 - first mark\n * @param {Object} mark2 - second mark\n * */\nexport const compareMarks = (mark1, mark2) => {\n // marks can be compared with equalMarks[type] function only if they have the same type;\n // if type is different, they are clearly not equal\n return !!(\n mark1 &&\n mark2 &&\n mark1.type === mark2.type &&\n equalMarks[mark1.type] &&\n equalMarks[mark1.type](mark1, mark2)\n );\n};\n\n/*\n * Function to get the corrected answer\n * @param {Object} sessionAnswers - array of marks from session\n * @param {Object} marks - array of marks from correct answer\n * */\nexport const getAnswerCorrected = ({ sessionAnswers, marks: correctAnswers }) => {\n sessionAnswers = sessionAnswers || [];\n correctAnswers = correctAnswers || [];\n const rez = cloneDeep(sessionAnswers).reduce((correctedAnswer, answer) => {\n const answerIsCorrect = correctAnswers.find((mark) => compareMarks(answer, mark));\n answer.correctness = answerIsCorrect ? 'correct' : 'incorrect';\n return [...correctedAnswer, answer];\n }, []);\n // add missing objects from correct answer\n const missingAnswers = cloneDeep(correctAnswers).reduce((correctedAnswer, answer) => {\n const answerIndex = sessionAnswers.find((mark) => compareMarks(answer, mark));\n if (!answerIndex) {\n // means that corrected answer is missing from session, so we mark it as missing object\n return [...correctedAnswer, { ...answer, correctness: 'missing' }];\n }\n return correctedAnswer;\n }, []);\n return [...rez, ...missingAnswers];\n};\n\n/*\n * Function to get the best answer\n * @param {Object} question - question object\n * @param {Object} session - session object\n * @param {Object} env - env object\n * */\nexport const getBestAnswer = (question, session, env = {}) => {\n // questionPossibleAnswers contains all possible answers (correct response and alternates);\n let { answers: questionPossibleAnswers = {}, scoringType } = question || {};\n let { answer } = session || {};\n // filter the incomplete objects\n Object.entries(questionPossibleAnswers || {}).forEach(\n ([key, value]) =>\n (questionPossibleAnswers[key] = { ...value, marks: value?.marks.filter((mark) => !mark.building) }),\n );\n // initialize answer if no values\n answer = answer || [];\n // initialize one possible answer if no values\n if (isEmpty(questionPossibleAnswers)) {\n questionPossibleAnswers = { correctAnswer: initializeGraphMap() };\n } else {\n questionPossibleAnswers = {\n correctAnswer: questionPossibleAnswers.correctAnswer,\n ...sortedAnswers(questionPossibleAnswers),\n };\n }\n // student's answers without DUPLICATES\n const sessionAnswers = uniqWith(answer, compareMarks);\n // array of possible answers entries\n const possibleAnswers = Object.entries(questionPossibleAnswers);\n return possibleAnswers.reduce(\n (acc, entry) => {\n // iterating each possible answer (main + alternates)\n const possibleAnswerKey = entry[0];\n const possibleAnswer = entry[1] || {};\n let { marks } = possibleAnswer;\n if (!marks || !marks.length) {\n return acc;\n }\n // returns array of marks, each having 'correctness' property\n const correctedAnswer = getAnswerCorrected({ sessionAnswers, marks });\n const correctMarks = correctedAnswer.filter((answer) => answer.correctness === 'correct');\n // filter out missing objects because they do not affect the calculation of the score\n // only correct and incorrect are needed\n const scoredCorrectedAnswer = correctedAnswer.filter((answer) => answer.correctness !== 'missing');\n const maxScore = marks.length;\n let score = correctMarks.length;\n // if extra placements\n if (scoredCorrectedAnswer.length > maxScore) {\n score -= scoredCorrectedAnswer.length - maxScore;\n }\n if (score < 0) {\n score = 0;\n }\n if (score / maxScore > acc.bestScore || !acc.foundOneSolution) {\n acc.bestScore = Math.floor(score / maxScore);\n acc.bestScoreAnswerKey = possibleAnswerKey;\n acc.answersCorrected = correctedAnswer;\n acc.foundOneSolution = true;\n }\n return acc;\n },\n {\n bestScore: 0,\n bestScoreAnswerKey: null,\n // initially we just suppose all the answers are incorrect\n answersCorrected: cloneDeep(sessionAnswers).map((answer) => ({ ...answer, correctness: 'incorrect' })),\n foundOneSolution: false,\n },\n );\n};\n\n/*\n * Constant normalize\n * @param {Object} question - question object\n * */\nexport const normalize = (question) => ({ ...defaults, ...question });\n\n/*\n * Function to set model\n * @param {Object} question - question object\n * @param {Object} session - session object\n * @param {Object} env - env object\n * */\nexport function model(question, session, env) {\n return new Promise((resolve) => {\n const normalizedQuestion = normalize(question);\n // ensure removing of invalid answers\n // need this if undo redo was last operation\n session.answer = removeInvalidAnswers(session.answer);\n // console.log('normalizedQuestion', normalizedQuestion);\n const { defaultTool, extraCSSRules, prompt, promptEnabled, graph, answers, toolbarTools, ...questionProps } =\n normalizedQuestion || {};\n let { arrows } = normalizedQuestion;\n const { mode, role } = env || {};\n\n // This is used for offering support for old models which have the property arrows: boolean\n // Same thing is set in authoring : packages/graphing/configure/src/configure.jsx - componentDidMount\n if (typeof arrows === 'boolean') {\n if (arrows) {\n arrows = {\n left: true,\n right: true,\n up: true,\n down: true,\n };\n } else {\n arrows = {\n left: false,\n right: false,\n up: false,\n down: false,\n };\n }\n }\n\n const base = {\n ...questionProps,\n answers,\n arrows,\n defaultTool: 'line',\n disabled: env.mode !== 'gather',\n prompt: promptEnabled ? prompt : null,\n rationale: null,\n size: graph,\n showToggle:\n env.mode === 'evaluate' &&\n !isEmpty(answers) &&\n answers.correctAnswer &&\n answers.correctAnswer.marks &&\n !isEmpty(answers.correctAnswer.marks),\n teacherInstructions: null,\n toolbarTools,\n extraCSSRules,\n };\n\n if (role === 'instructor' && (mode === 'view' || mode === 'evaluate')) {\n const { rationale, rationaleEnabled, teacherInstructions, teacherInstructionsEnabled } = normalizedQuestion || {};\n\n base.rationale = rationaleEnabled ? rationale : null;\n base.teacherInstructions = teacherInstructionsEnabled ? teacherInstructions : null;\n }\n\n if (mode === 'evaluate') {\n if (\n !isEmpty(answers) &&\n answers.correctAnswer &&\n answers.correctAnswer.marks &&\n !isEmpty(answers.correctAnswer.marks)\n ) {\n const { answersCorrected, bestScoreAnswerKey, bestScore } = getBestAnswer(normalizedQuestion, session, env);\n // array of marks from session with 'correctness' property set\n base.answersCorrected = answersCorrected;\n base.correctResponse = bestScoreAnswerKey ? (answers[bestScoreAnswerKey] || {}).marks : [];\n base.showToggle = base.showToggle && bestScore !== 1;\n } else {\n base.answersCorrected = (session && session.answer) || [];\n base.correctResponse = [];\n }\n }\n\n log('base: ', base);\n resolve(base);\n });\n}\n\n/*\n * Function to check the outcome\n * @param {Object} question - question object\n * @param {Object} session - session object\n * @param {Object} env - env object\n * */\nexport function outcome(question, session, env = {}) {\n return new Promise((resolve) => {\n if (!session || isEmpty(session)) {\n resolve({ score: 0, empty: true });\n }\n if (\n env.mode !== 'evaluate' ||\n isEmpty(question.answers) ||\n (question.answers && question.answers.correctAnswer && isEmpty(question.answers.correctAnswer.marks))\n ) {\n resolve({ score: 0 });\n }\n const { bestScore } = getBestAnswer(question, session, env);\n resolve({ score: bestScore });\n });\n}\n\n/*\n * Constant to create correct response session\n * @param {Object} question - question object\n * @param {Object} env - env object\n * */\nexport const createCorrectResponseSession = (question, env) => {\n return new Promise((resolve) => {\n if (env.mode !== 'evaluate' && env.role === 'instructor') {\n const { answers } = question || {};\n let marks = [];\n if (answers && Object.values(answers)) {\n const correctAnswer = answers.correctAnswer || Object.values(answers)[0] || {};\n marks = correctAnswer.marks || [];\n }\n resolve({\n answer: marks,\n id: '1',\n });\n } else {\n resolve(null);\n }\n });\n};\n\n/*\n * Constant to validate model before saving item\n * @param {Object} model - model object\n * */\nexport const validate = (model = {}) => {\n const { answers, gssLineData } = model;\n const errors = {};\n const correctAnswerErrors = {};\n let found = false;\n if (gssLineData.numberOfLines === 1) {\n if (answers.correctAnswer.marks.length < 1) {\n found = true;\n correctAnswerErrors.correctAnswer = 'At least 1 line object should be defined.';\n } else if (answers.correctAnswer.marks.length === 1 && answers.correctAnswer.marks[0].building) {\n found = true;\n correctAnswerErrors.correctAnswer = '1 or more graph object should be correctly defined.';\n }\n } else {\n if (answers.correctAnswer.marks.length < 2) {\n found = true;\n correctAnswerErrors.correctAnswer = 'At least 2 line object should be defined.';\n } else if (answers.correctAnswer.marks.length === 2) {\n if (answers.correctAnswer.marks[0].building || answers.correctAnswer.marks[1].building) {\n found = true;\n correctAnswerErrors.correctAnswer = '1 or more graph object should be correctly defined.';\n }\n }\n }\n let polygon = answers.correctAnswer.marks.find((mark) => mark.type === 'polygon');\n if (!found && (!gssLineData.selectedTool === 'solutionSet' || !polygon)) {\n correctAnswerErrors.correctAnswer = 'Please select a solution set for the graphing solution set item.';\n }\n if (!isEmpty(correctAnswerErrors)) {\n errors.correctAnswerErrors = correctAnswerErrors;\n }\n return errors;\n};\n"],"mappings":"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","ignoreList":[]}
|
|
1
|
+
{"version":3,"file":"index.js","names":["_debug","_interopRequireDefault","require","_lodashEs","_defaults","_utils","log","debug","initializeGraphMap","line","compareMarks","mark1","mark2","type","equalMarks","exports","getAnswerCorrected","sessionAnswers","marks","correctAnswers","rez","cloneDeep","reduce","correctedAnswer","answer","answerIsCorrect","find","mark","correctness","missingAnswers","answerIndex","getBestAnswer","question","session","env","answers","questionPossibleAnswers","scoringType","Object","entries","forEach","key","value","filter","building","isEmpty","correctAnswer","sortedAnswers","uniqWith","possibleAnswers","acc","entry","possibleAnswerKey","possibleAnswer","length","correctMarks","scoredCorrectedAnswer","maxScore","score","bestScore","foundOneSolution","Math","floor","bestScoreAnswerKey","answersCorrected","map","normalize","defaults","model","Promise","resolve","normalizedQuestion","removeInvalidAnswers","defaultTool","extraCSSRules","prompt","promptEnabled","graph","toolbarTools","questionProps","arrows","mode","role","left","right","up","down","base","disabled","rationale","size","showToggle","teacherInstructions","rationaleEnabled","teacherInstructionsEnabled","correctResponse","outcome","empty","createCorrectResponseSession","values","id","validate","gssLineData","errors","correctAnswerErrors","found","numberOfLines","polygon","selectedTool"],"sources":["../src/index.js"],"sourcesContent":["import debug from 'debug';\nimport { cloneDeep, isEmpty, uniqWith } from 'lodash-es';\nimport defaults from './defaults';\nimport { equalMarks, sortedAnswers, removeInvalidAnswers } from './utils';\n\nconst log = debug('@pie-element:graphing-solution-set:controller');\n\nconst initializeGraphMap = () => ({\n line: [],\n});\n\n/*\n * Function to compare two marks\n * @param {Object} mark1 - first mark\n * @param {Object} mark2 - second mark\n * */\nexport const compareMarks = (mark1, mark2) => {\n // marks can be compared with equalMarks[type] function only if they have the same type;\n // if type is different, they are clearly not equal\n return !!(\n mark1 &&\n mark2 &&\n mark1.type === mark2.type &&\n equalMarks[mark1.type] &&\n equalMarks[mark1.type](mark1, mark2)\n );\n};\n\n/*\n * Function to get the corrected answer\n * @param {Object} sessionAnswers - array of marks from session\n * @param {Object} marks - array of marks from correct answer\n * */\nexport const getAnswerCorrected = ({ sessionAnswers, marks: correctAnswers }) => {\n sessionAnswers = sessionAnswers || [];\n correctAnswers = correctAnswers || [];\n const rez = cloneDeep(sessionAnswers).reduce((correctedAnswer, answer) => {\n const answerIsCorrect = correctAnswers.find((mark) => compareMarks(answer, mark));\n answer.correctness = answerIsCorrect ? 'correct' : 'incorrect';\n return [...correctedAnswer, answer];\n }, []);\n // add missing objects from correct answer\n const missingAnswers = cloneDeep(correctAnswers).reduce((correctedAnswer, answer) => {\n const answerIndex = sessionAnswers.find((mark) => compareMarks(answer, mark));\n if (!answerIndex) {\n // means that corrected answer is missing from session, so we mark it as missing object\n return [...correctedAnswer, { ...answer, correctness: 'missing' }];\n }\n return correctedAnswer;\n }, []);\n return [...rez, ...missingAnswers];\n};\n\n/*\n * Function to get the best answer\n * @param {Object} question - question object\n * @param {Object} session - session object\n * @param {Object} env - env object\n * */\nexport const getBestAnswer = (question, session, env = {}) => {\n // questionPossibleAnswers contains all possible answers (correct response and alternates);\n let { answers: questionPossibleAnswers = {}, scoringType } = question || {};\n let { answer } = session || {};\n // filter the incomplete objects\n Object.entries(questionPossibleAnswers || {}).forEach(\n ([key, value]) =>\n (questionPossibleAnswers[key] = { ...value, marks: value?.marks.filter((mark) => !mark.building) }),\n );\n // initialize answer if no values\n answer = answer || [];\n // initialize one possible answer if no values\n if (isEmpty(questionPossibleAnswers)) {\n questionPossibleAnswers = { correctAnswer: initializeGraphMap() };\n } else {\n questionPossibleAnswers = {\n correctAnswer: questionPossibleAnswers.correctAnswer,\n ...sortedAnswers(questionPossibleAnswers),\n };\n }\n // student's answers without DUPLICATES\n const sessionAnswers = uniqWith(answer, compareMarks);\n // array of possible answers entries\n const possibleAnswers = Object.entries(questionPossibleAnswers);\n return possibleAnswers.reduce(\n (acc, entry) => {\n // iterating each possible answer (main + alternates)\n const possibleAnswerKey = entry[0];\n const possibleAnswer = entry[1] || {};\n let { marks } = possibleAnswer;\n if (!marks || !marks.length) {\n return acc;\n }\n // returns array of marks, each having 'correctness' property\n const correctedAnswer = getAnswerCorrected({ sessionAnswers, marks });\n const correctMarks = correctedAnswer.filter((answer) => answer.correctness === 'correct');\n // filter out missing objects because they do not affect the calculation of the score\n // only correct and incorrect are needed\n const scoredCorrectedAnswer = correctedAnswer.filter((answer) => answer.correctness !== 'missing');\n const maxScore = marks.length;\n let score = correctMarks.length;\n // if extra placements\n if (scoredCorrectedAnswer.length > maxScore) {\n score -= scoredCorrectedAnswer.length - maxScore;\n }\n if (score < 0) {\n score = 0;\n }\n if (score / maxScore > acc.bestScore || !acc.foundOneSolution) {\n acc.bestScore = Math.floor(score / maxScore);\n acc.bestScoreAnswerKey = possibleAnswerKey;\n acc.answersCorrected = correctedAnswer;\n acc.foundOneSolution = true;\n }\n return acc;\n },\n {\n bestScore: 0,\n bestScoreAnswerKey: null,\n // initially we just suppose all the answers are incorrect\n answersCorrected: cloneDeep(sessionAnswers).map((answer) => ({ ...answer, correctness: 'incorrect' })),\n foundOneSolution: false,\n },\n );\n};\n\n/*\n * Constant normalize\n * @param {Object} question - question object\n * */\nexport const normalize = (question) => ({ ...defaults, ...question });\n\n/*\n * Function to set model\n * @param {Object} question - question object\n * @param {Object} session - session object\n * @param {Object} env - env object\n * */\nexport function model(question, session, env) {\n return new Promise((resolve) => {\n const normalizedQuestion = normalize(question);\n // ensure removing of invalid answers\n // need this if undo redo was last operation\n session.answer = removeInvalidAnswers(session.answer);\n // console.log('normalizedQuestion', normalizedQuestion);\n const { defaultTool, extraCSSRules, prompt, promptEnabled, graph, answers, toolbarTools, ...questionProps } =\n normalizedQuestion || {};\n let { arrows } = normalizedQuestion;\n const { mode, role } = env || {};\n\n // This is used for offering support for old models which have the property arrows: boolean\n // Same thing is set in authoring : packages/graphing/configure/src/configure.jsx - componentDidMount\n if (typeof arrows === 'boolean') {\n if (arrows) {\n arrows = {\n left: true,\n right: true,\n up: true,\n down: true,\n };\n } else {\n arrows = {\n left: false,\n right: false,\n up: false,\n down: false,\n };\n }\n }\n\n const base = {\n ...questionProps,\n answers,\n arrows,\n defaultTool: 'line',\n disabled: env.mode !== 'gather',\n prompt: promptEnabled ? prompt : null,\n rationale: null,\n size: graph,\n showToggle:\n env.mode === 'evaluate' &&\n !isEmpty(answers) &&\n answers.correctAnswer &&\n answers.correctAnswer.marks &&\n !isEmpty(answers.correctAnswer.marks),\n teacherInstructions: null,\n toolbarTools,\n extraCSSRules,\n };\n\n if (role === 'instructor' && (mode === 'view' || mode === 'evaluate')) {\n const { rationale, rationaleEnabled, teacherInstructions, teacherInstructionsEnabled } = normalizedQuestion || {};\n\n base.rationale = rationaleEnabled ? rationale : null;\n base.teacherInstructions = teacherInstructionsEnabled ? teacherInstructions : null;\n }\n\n if (mode === 'evaluate') {\n if (\n !isEmpty(answers) &&\n answers.correctAnswer &&\n answers.correctAnswer.marks &&\n !isEmpty(answers.correctAnswer.marks)\n ) {\n const { answersCorrected, bestScoreAnswerKey, bestScore } = getBestAnswer(normalizedQuestion, session, env);\n // array of marks from session with 'correctness' property set\n base.answersCorrected = answersCorrected;\n base.correctResponse = bestScoreAnswerKey ? (answers[bestScoreAnswerKey] || {}).marks : [];\n base.showToggle = base.showToggle && bestScore !== 1;\n } else {\n base.answersCorrected = (session && session.answer) || [];\n base.correctResponse = [];\n }\n }\n\n log('base: ', base);\n resolve(base);\n });\n}\n\n/*\n * Function to check the outcome\n * @param {Object} question - question object\n * @param {Object} session - session object\n * @param {Object} env - env object\n * */\nexport function outcome(question, session, env = {}) {\n return new Promise((resolve) => {\n if (!session || isEmpty(session)) {\n resolve({ score: 0, empty: true });\n }\n if (\n env.mode !== 'evaluate' ||\n isEmpty(question.answers) ||\n (question.answers && question.answers.correctAnswer && isEmpty(question.answers.correctAnswer.marks))\n ) {\n resolve({ score: 0 });\n }\n const { bestScore } = getBestAnswer(question, session, env);\n resolve({ score: bestScore });\n });\n}\n\n/*\n * Constant to create correct response session\n * @param {Object} question - question object\n * @param {Object} env - env object\n * */\nexport const createCorrectResponseSession = (question, env) => {\n return new Promise((resolve) => {\n if (env.mode !== 'evaluate' && env.role === 'instructor') {\n const { answers } = question || {};\n let marks = [];\n if (answers && Object.values(answers)) {\n const correctAnswer = answers.correctAnswer || Object.values(answers)[0] || {};\n marks = correctAnswer.marks || [];\n }\n resolve({\n answer: marks,\n id: '1',\n });\n } else {\n resolve(null);\n }\n });\n};\n\n/*\n * Constant to validate model before saving item\n * @param {Object} model - model object\n * */\nexport const validate = (model = {}) => {\n const { answers, gssLineData } = model;\n const errors = {};\n const correctAnswerErrors = {};\n let found = false;\n if (gssLineData.numberOfLines === 1) {\n if (answers.correctAnswer.marks.length < 1) {\n found = true;\n correctAnswerErrors.correctAnswer = 'At least 1 line object should be defined.';\n } else if (answers.correctAnswer.marks.length === 1 && answers.correctAnswer.marks[0].building) {\n found = true;\n correctAnswerErrors.correctAnswer = '1 or more graph object should be correctly defined.';\n }\n } else {\n if (answers.correctAnswer.marks.length < 2) {\n found = true;\n correctAnswerErrors.correctAnswer = 'At least 2 line object should be defined.';\n } else if (answers.correctAnswer.marks.length === 2) {\n if (answers.correctAnswer.marks[0].building || answers.correctAnswer.marks[1].building) {\n found = true;\n correctAnswerErrors.correctAnswer = '1 or more graph object should be correctly defined.';\n }\n }\n }\n let polygon = answers.correctAnswer.marks.find((mark) => mark.type === 'polygon');\n if (!found && (!gssLineData.selectedTool === 'solutionSet' || !polygon)) {\n correctAnswerErrors.correctAnswer = 'Please select a solution set for the graphing solution set item.';\n }\n if (!isEmpty(correctAnswerErrors)) {\n errors.correctAnswerErrors = correctAnswerErrors;\n }\n return errors;\n};\n"],"mappings":"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","ignoreList":[]}
|
package/controller/lib/utils.js
CHANGED
|
@@ -1,14 +1,10 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
|
|
3
|
-
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
|
|
4
3
|
Object.defineProperty(exports, "__esModule", {
|
|
5
4
|
value: true
|
|
6
5
|
});
|
|
7
6
|
exports.sortedAnswers = exports.removeInvalidSegments = exports.removeInvalidAnswers = exports.removeDuplicateSegments = exports.equalSegment = exports.equalPolygon = exports.equalMarks = exports.equalLine = exports.constructSegmentsFromPoints = void 0;
|
|
8
|
-
var
|
|
9
|
-
var _lodash = _interopRequireDefault(require("lodash"));
|
|
10
|
-
var _uniqWith = _interopRequireDefault(require("lodash/uniqWith"));
|
|
11
|
-
var _differenceWith = _interopRequireDefault(require("lodash/differenceWith"));
|
|
7
|
+
var _lodashEs = require("lodash-es");
|
|
12
8
|
/*
|
|
13
9
|
* Constant to check equal segments
|
|
14
10
|
* @param {Object} segment1 - segment 1
|
|
@@ -17,7 +13,7 @@ var _differenceWith = _interopRequireDefault(require("lodash/differenceWith"));
|
|
|
17
13
|
const equalSegment = (segment1, segment2) => {
|
|
18
14
|
// A.from = B.from, A.to = B.to OR A.from = B.to, A.to = B.from
|
|
19
15
|
// x1 = x3 & y1 = y3 & x2 = x4 & y2 = y4
|
|
20
|
-
return (0,
|
|
16
|
+
return (0, _lodashEs.isEqual)(segment1.from, segment2.from) && (0, _lodashEs.isEqual)(segment1.to, segment2.to) || (0, _lodashEs.isEqual)(segment1.to, segment2.from) && (0, _lodashEs.isEqual)(segment1.from, segment2.to);
|
|
21
17
|
};
|
|
22
18
|
|
|
23
19
|
// this function is implemented in configure as well
|
|
@@ -102,7 +98,7 @@ const equalLine = (line1, line2) => {
|
|
|
102
98
|
} else if (c1 !== c2) {
|
|
103
99
|
return false;
|
|
104
100
|
}
|
|
105
|
-
return
|
|
101
|
+
return (0, _lodashEs.uniq)(proportions).length === 1 && line1.fill === line2.fill;
|
|
106
102
|
// (y2 - y1)/(x2 - x1) = (y4 - y3)/(x4 - x3);
|
|
107
103
|
// return ((Math.abs((line1.to.y - line1.from.y) / (line1.to.x - line1.from.x))) === (Math.abs((line2.to.y - line2.from.y) / (line2.to.x - line2.from.x))));
|
|
108
104
|
};
|
|
@@ -131,7 +127,7 @@ const removeDuplicateSegments = segments => {
|
|
|
131
127
|
// removes segments that are duplicates; eg. These segments are the same, so one will be removed:
|
|
132
128
|
// segment1: from: { x: 1, y: 1 }, to: { x: 2, y: 1 }
|
|
133
129
|
// segment2: from: { x: 2, y: 1 }, to: { x: 1, y: 1 }
|
|
134
|
-
return (0,
|
|
130
|
+
return (0, _lodashEs.uniqWith)(segments, (s1, s2) => equalSegment(s1, s2));
|
|
135
131
|
};
|
|
136
132
|
|
|
137
133
|
/*
|
|
@@ -142,7 +138,7 @@ exports.removeDuplicateSegments = removeDuplicateSegments;
|
|
|
142
138
|
const removeInvalidSegments = segments => {
|
|
143
139
|
segments = segments || [];
|
|
144
140
|
// removes segments that start in a point and end in the same point (eg.: from: { x: 1, y: 1 }, to: { x: 1, y: 1 })
|
|
145
|
-
return segments.filter(segment => !(0,
|
|
141
|
+
return segments.filter(segment => !(0, _lodashEs.isEqual)(segment.from, segment.to));
|
|
146
142
|
};
|
|
147
143
|
|
|
148
144
|
/*
|
|
@@ -163,8 +159,8 @@ const equalPolygon = (poly1, poly2) => {
|
|
|
163
159
|
const segments2 = constructSegmentsFromPoints(points2);
|
|
164
160
|
const segments1NoDuplicates = removeDuplicateSegments(removeInvalidSegments(segments1));
|
|
165
161
|
const segments2NoDuplicates = removeDuplicateSegments(removeInvalidSegments(segments2));
|
|
166
|
-
const differentSegments1 = (0,
|
|
167
|
-
const differentSegments2 = (0,
|
|
162
|
+
const differentSegments1 = (0, _lodashEs.differenceWith)(segments1NoDuplicates, segments2NoDuplicates, equalSegment);
|
|
163
|
+
const differentSegments2 = (0, _lodashEs.differenceWith)(segments2NoDuplicates, segments1NoDuplicates, equalSegment);
|
|
168
164
|
return (!differentSegments1 || !differentSegments1.length) && (!differentSegments2 || !differentSegments2.length);
|
|
169
165
|
};
|
|
170
166
|
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"utils.js","names":["_isEqual","_interopRequireDefault","require","_lodash","_uniqWith","_differenceWith","equalSegment","segment1","segment2","isEqual","from","to","exports","sortedAnswers","answers","Object","keys","sort","reduce","result","key","returnLineEquationCoefficients","line","xA","x","yA","y","xB","yB","a","b","c","getSignificantDecimals","number","Math","round","equalLine","line1","line2","a1","b1","c1","a2","b2","c2","proportions","push","lodash","uniq","length","fill","constructSegmentsFromPoints","points","map","point","index","removeDuplicateSegments","segments","uniqWith","s1","s2","removeInvalidSegments","filter","segment","equalPolygon","poly1","poly2","points1","points2","segments1","segments2","segments1NoDuplicates","segments2NoDuplicates","differentSegments1","differenceWith","differentSegments2","equalMarks","sessAnswer","mark","polygon","poly","completePoint","Number","isFinite","completeFromTo","item","completeMark","completePoints","removeInvalidAnswers","type","answer"],"sources":["../src/utils.js"],"sourcesContent":["import isEqual from 'lodash/isEqual';\nimport lodash from 'lodash';\nimport uniqWith from 'lodash/uniqWith';\nimport differenceWith from 'lodash/differenceWith';\n\n/*\n * Constant to check equal segments\n * @param {Object} segment1 - segment 1\n * @param {Object} segment2 - segment 2\n * */\nexport const equalSegment = (segment1, segment2) => {\n // A.from = B.from, A.to = B.to OR A.from = B.to, A.to = B.from\n // x1 = x3 & y1 = y3 & x2 = x4 & y2 = y4\n return (\n (isEqual(segment1.from, segment2.from) && isEqual(segment1.to, segment2.to)) ||\n (isEqual(segment1.to, segment2.from) && isEqual(segment1.from, segment2.to))\n );\n};\n\n// this function is implemented in configure as well\n/*\n * Constant to get sorted answers\n * @param {Object} answers - answers\n * */\nexport const sortedAnswers = (answers) =>\n Object.keys(answers || {})\n .sort()\n .reduce((result, key) => {\n if (key !== 'correctAnswer') {\n result[key] = answers[key];\n }\n return result;\n }, {});\n\n/*\n * Constant to return line equation coefficients\n * @param {Object} line - line\n * */\nconst returnLineEquationCoefficients = (line) => {\n line = { ...line, to: { ...line.to }, from: { ...line.from } };\n const xA = line.from.x;\n const yA = line.from.y;\n const xB = line.to.x;\n const yB = line.to.y;\n return {\n a: yB - yA,\n b: xA - xB,\n c: xB * yA - xA * yB,\n };\n};\n\n/*\n * Constant to get significant decimals\n * @param {Number} number - number\n * */\nconst getSignificantDecimals = (number) => Math.round(number * 10000) / 10000;\n\n/*\n * Constant to check equal lines\n * @param {Object} line1 - line 1\n * @param {Object} line2 - line 2\n * */\nexport const equalLine = (line1, line2) => {\n // line equation: ax + by + c = 0\n // 2 lines are equal if a1/a2 = b1/b2 = c1/c2, where a, b, c are the coefficients in line equation\n // line equation knowing 2 points: (y - yA) / (yB - yA) = (x - xA) / (xB - xA)\n // extending this equation, we get: x * (yB - yA) + y * (xA - xB) + (xB * yA - xA * yB) = 0\n // where a = yB - yA; b = xA - xB; c = xB * yA - xA * yB\n const { a: a1, b: b1, c: c1 } = returnLineEquationCoefficients(line1);\n const { a: a2, b: b2, c: c2 } = returnLineEquationCoefficients(line2);\n const proportions = [];\n if (a2 !== 0) {\n proportions.push(getSignificantDecimals(a1 / a2));\n } else if (a1 !== a2) {\n return false;\n }\n if (b2 !== 0) {\n proportions.push(getSignificantDecimals(b1 / b2));\n } else if (b1 !== b2) {\n return false;\n }\n if (c2 !== 0) {\n proportions.push(getSignificantDecimals(c1 / c2));\n } else if (c1 !== c2) {\n return false;\n }\n return lodash.uniq(proportions).length === 1 && line1.fill === line2.fill;\n // (y2 - y1)/(x2 - x1) = (y4 - y3)/(x4 - x3);\n // return ((Math.abs((line1.to.y - line1.from.y) / (line1.to.x - line1.from.x))) === (Math.abs((line2.to.y - line2.from.y) / (line2.to.x - line2.from.x))));\n};\n\n/*\n * Constant to construct segments from points\n * @param {Array} points - points\n * */\nexport const constructSegmentsFromPoints = (points) => {\n // takes the list of points that represent a polygon and transforms it into a list of segments; eg.:\n // points: A, B, C, D => segments: AB, BC, CD, DA\n return (points || []).map((point, index) => ({ from: point, to: points[(index + 1) % points.length] }));\n};\n\n/*\n * Constant to remove duplicate segments\n * @param {Array} segments - segments\n * */\nexport const removeDuplicateSegments = (segments) => {\n segments = segments || [];\n // removes segments that are duplicates; eg. These segments are the same, so one will be removed:\n // segment1: from: { x: 1, y: 1 }, to: { x: 2, y: 1 }\n // segment2: from: { x: 2, y: 1 }, to: { x: 1, y: 1 }\n return uniqWith(segments, (s1, s2) => equalSegment(s1, s2));\n};\n\n/*\n * Constant to remove invalid segments\n * @param {Array} segments - segments\n * */\nexport const removeInvalidSegments = (segments) => {\n segments = segments || [];\n // removes segments that start in a point and end in the same point (eg.: from: { x: 1, y: 1 }, to: { x: 1, y: 1 })\n return segments.filter((segment) => !isEqual(segment.from, segment.to));\n};\n\n/*\n * Constant to check equal polygons\n * @param {Object} poly1 - polygon 1 points\n * @param {Object} poly2 - polygon 2 points\n * */\nexport const equalPolygon = (poly1, poly2) => {\n const { points: points1 } = poly1;\n const { points: points2 } = poly2;\n // generate segments\n const segments1 = constructSegmentsFromPoints(points1);\n const segments2 = constructSegmentsFromPoints(points2);\n const segments1NoDuplicates = removeDuplicateSegments(removeInvalidSegments(segments1));\n const segments2NoDuplicates = removeDuplicateSegments(removeInvalidSegments(segments2));\n const differentSegments1 = differenceWith(segments1NoDuplicates, segments2NoDuplicates, equalSegment);\n const differentSegments2 = differenceWith(segments2NoDuplicates, segments1NoDuplicates, equalSegment);\n return (!differentSegments1 || !differentSegments1.length) && (!differentSegments2 || !differentSegments2.length);\n};\n\n/*\n * Constant to compare equal marks\n * */\nexport const equalMarks = {\n line: (sessAnswer, mark) => equalLine(sessAnswer, mark),\n polygon: (sessAnswer, poly) => equalPolygon(sessAnswer, poly),\n};\n\n/*\n * Check if a point is correct and complete\n * @param {Object} point - point object\n * */\nconst completePoint = (point) => point && Number.isFinite(point.x) && Number.isFinite(point.y);\n\n/*\n * Check if a line is complete\n * @param {Object} item - mark object\n * */\nconst completeFromTo = (item) => item && completeMark.point(item.from) && completeMark.point(item.to);\n\n/*\n * Check if a point is correct and complete\n * @param {Object} item - mark object\n * */\nconst completePoints = (item) =>\n item &&\n item.points &&\n item.points.length &&\n (item.points.filter((point) => completePoint(point)) || []).length === item.points.length;\n\n/*\n * Complete mark object for line and point\n * */\nconst completeMark = {\n point: completePoint,\n line: completeFromTo,\n polygon: completePoints,\n};\n\n/*\n * Function to remove invalid answers\n * @param {Array} answers - answers array\n * */\nexport const removeInvalidAnswers = (answers) =>\n answers\n ? (answers || []).filter(({ type, ...answer }) => (completeMark[type] ? completeMark[type](answer) : false))\n : [];\n"],"mappings":"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","ignoreList":[]}
|
|
1
|
+
{"version":3,"file":"utils.js","names":["_lodashEs","require","equalSegment","segment1","segment2","isEqual","from","to","exports","sortedAnswers","answers","Object","keys","sort","reduce","result","key","returnLineEquationCoefficients","line","xA","x","yA","y","xB","yB","a","b","c","getSignificantDecimals","number","Math","round","equalLine","line1","line2","a1","b1","c1","a2","b2","c2","proportions","push","uniq","length","fill","constructSegmentsFromPoints","points","map","point","index","removeDuplicateSegments","segments","uniqWith","s1","s2","removeInvalidSegments","filter","segment","equalPolygon","poly1","poly2","points1","points2","segments1","segments2","segments1NoDuplicates","segments2NoDuplicates","differentSegments1","differenceWith","differentSegments2","equalMarks","sessAnswer","mark","polygon","poly","completePoint","Number","isFinite","completeFromTo","item","completeMark","completePoints","removeInvalidAnswers","type","answer"],"sources":["../src/utils.js"],"sourcesContent":["import { isEqual, differenceWith, uniq, uniqWith } from 'lodash-es';\n\n/*\n * Constant to check equal segments\n * @param {Object} segment1 - segment 1\n * @param {Object} segment2 - segment 2\n * */\nexport const equalSegment = (segment1, segment2) => {\n // A.from = B.from, A.to = B.to OR A.from = B.to, A.to = B.from\n // x1 = x3 & y1 = y3 & x2 = x4 & y2 = y4\n return (\n (isEqual(segment1.from, segment2.from) && isEqual(segment1.to, segment2.to)) ||\n (isEqual(segment1.to, segment2.from) && isEqual(segment1.from, segment2.to))\n );\n};\n\n// this function is implemented in configure as well\n/*\n * Constant to get sorted answers\n * @param {Object} answers - answers\n * */\nexport const sortedAnswers = (answers) =>\n Object.keys(answers || {})\n .sort()\n .reduce((result, key) => {\n if (key !== 'correctAnswer') {\n result[key] = answers[key];\n }\n return result;\n }, {});\n\n/*\n * Constant to return line equation coefficients\n * @param {Object} line - line\n * */\nconst returnLineEquationCoefficients = (line) => {\n line = { ...line, to: { ...line.to }, from: { ...line.from } };\n const xA = line.from.x;\n const yA = line.from.y;\n const xB = line.to.x;\n const yB = line.to.y;\n return {\n a: yB - yA,\n b: xA - xB,\n c: xB * yA - xA * yB,\n };\n};\n\n/*\n * Constant to get significant decimals\n * @param {Number} number - number\n * */\nconst getSignificantDecimals = (number) => Math.round(number * 10000) / 10000;\n\n/*\n * Constant to check equal lines\n * @param {Object} line1 - line 1\n * @param {Object} line2 - line 2\n * */\nexport const equalLine = (line1, line2) => {\n // line equation: ax + by + c = 0\n // 2 lines are equal if a1/a2 = b1/b2 = c1/c2, where a, b, c are the coefficients in line equation\n // line equation knowing 2 points: (y - yA) / (yB - yA) = (x - xA) / (xB - xA)\n // extending this equation, we get: x * (yB - yA) + y * (xA - xB) + (xB * yA - xA * yB) = 0\n // where a = yB - yA; b = xA - xB; c = xB * yA - xA * yB\n const { a: a1, b: b1, c: c1 } = returnLineEquationCoefficients(line1);\n const { a: a2, b: b2, c: c2 } = returnLineEquationCoefficients(line2);\n const proportions = [];\n if (a2 !== 0) {\n proportions.push(getSignificantDecimals(a1 / a2));\n } else if (a1 !== a2) {\n return false;\n }\n if (b2 !== 0) {\n proportions.push(getSignificantDecimals(b1 / b2));\n } else if (b1 !== b2) {\n return false;\n }\n if (c2 !== 0) {\n proportions.push(getSignificantDecimals(c1 / c2));\n } else if (c1 !== c2) {\n return false;\n }\n return uniq(proportions).length === 1 && line1.fill === line2.fill;\n // (y2 - y1)/(x2 - x1) = (y4 - y3)/(x4 - x3);\n // return ((Math.abs((line1.to.y - line1.from.y) / (line1.to.x - line1.from.x))) === (Math.abs((line2.to.y - line2.from.y) / (line2.to.x - line2.from.x))));\n};\n\n/*\n * Constant to construct segments from points\n * @param {Array} points - points\n * */\nexport const constructSegmentsFromPoints = (points) => {\n // takes the list of points that represent a polygon and transforms it into a list of segments; eg.:\n // points: A, B, C, D => segments: AB, BC, CD, DA\n return (points || []).map((point, index) => ({ from: point, to: points[(index + 1) % points.length] }));\n};\n\n/*\n * Constant to remove duplicate segments\n * @param {Array} segments - segments\n * */\nexport const removeDuplicateSegments = (segments) => {\n segments = segments || [];\n // removes segments that are duplicates; eg. These segments are the same, so one will be removed:\n // segment1: from: { x: 1, y: 1 }, to: { x: 2, y: 1 }\n // segment2: from: { x: 2, y: 1 }, to: { x: 1, y: 1 }\n return uniqWith(segments, (s1, s2) => equalSegment(s1, s2));\n};\n\n/*\n * Constant to remove invalid segments\n * @param {Array} segments - segments\n * */\nexport const removeInvalidSegments = (segments) => {\n segments = segments || [];\n // removes segments that start in a point and end in the same point (eg.: from: { x: 1, y: 1 }, to: { x: 1, y: 1 })\n return segments.filter((segment) => !isEqual(segment.from, segment.to));\n};\n\n/*\n * Constant to check equal polygons\n * @param {Object} poly1 - polygon 1 points\n * @param {Object} poly2 - polygon 2 points\n * */\nexport const equalPolygon = (poly1, poly2) => {\n const { points: points1 } = poly1;\n const { points: points2 } = poly2;\n // generate segments\n const segments1 = constructSegmentsFromPoints(points1);\n const segments2 = constructSegmentsFromPoints(points2);\n const segments1NoDuplicates = removeDuplicateSegments(removeInvalidSegments(segments1));\n const segments2NoDuplicates = removeDuplicateSegments(removeInvalidSegments(segments2));\n const differentSegments1 = differenceWith(segments1NoDuplicates, segments2NoDuplicates, equalSegment);\n const differentSegments2 = differenceWith(segments2NoDuplicates, segments1NoDuplicates, equalSegment);\n return (!differentSegments1 || !differentSegments1.length) && (!differentSegments2 || !differentSegments2.length);\n};\n\n/*\n * Constant to compare equal marks\n * */\nexport const equalMarks = {\n line: (sessAnswer, mark) => equalLine(sessAnswer, mark),\n polygon: (sessAnswer, poly) => equalPolygon(sessAnswer, poly),\n};\n\n/*\n * Check if a point is correct and complete\n * @param {Object} point - point object\n * */\nconst completePoint = (point) => point && Number.isFinite(point.x) && Number.isFinite(point.y);\n\n/*\n * Check if a line is complete\n * @param {Object} item - mark object\n * */\nconst completeFromTo = (item) => item && completeMark.point(item.from) && completeMark.point(item.to);\n\n/*\n * Check if a point is correct and complete\n * @param {Object} item - mark object\n * */\nconst completePoints = (item) =>\n item &&\n item.points &&\n item.points.length &&\n (item.points.filter((point) => completePoint(point)) || []).length === item.points.length;\n\n/*\n * Complete mark object for line and point\n * */\nconst completeMark = {\n point: completePoint,\n line: completeFromTo,\n polygon: completePoints,\n};\n\n/*\n * Function to remove invalid answers\n * @param {Array} answers - answers array\n * */\nexport const removeInvalidAnswers = (answers) =>\n answers\n ? (answers || []).filter(({ type, ...answer }) => (completeMark[type] ? completeMark[type](answer) : false))\n : [];\n"],"mappings":"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","ignoreList":[]}
|
package/controller/package.json
CHANGED
package/package.json
CHANGED
|
@@ -1,10 +1,13 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@pie-element/graphing-solution-set",
|
|
3
|
+
"repository": {
|
|
4
|
+
"type": "git",
|
|
5
|
+
"url": "https://github.com/pie-framework/pie-elements"
|
|
6
|
+
},
|
|
3
7
|
"publishConfig": {
|
|
4
8
|
"access": "public"
|
|
5
9
|
},
|
|
6
|
-
"
|
|
7
|
-
"version": "5.0.0-next.43+4249fa78f",
|
|
10
|
+
"version": "5.1.0-next.0+20d879b",
|
|
8
11
|
"description": "",
|
|
9
12
|
"scripts": {
|
|
10
13
|
"test": "echo \"Error: no test specified\" && exit 1",
|
|
@@ -16,11 +19,11 @@
|
|
|
16
19
|
"@mui/icons-material": "^7.3.4",
|
|
17
20
|
"@mui/material": "^7.3.4",
|
|
18
21
|
"@pie-framework/pie-player-events": "^0.1.0",
|
|
19
|
-
"@pie-lib/config-ui": "12.1.1-next.
|
|
20
|
-
"@pie-lib/correct-answer-toggle": "3.1.1-next.
|
|
21
|
-
"@pie-lib/graphing-solution-set": "3.1.1-next.
|
|
22
|
-
"@pie-lib/math-rendering": "4.1.1-next.
|
|
23
|
-
"@pie-lib/render-ui": "5.1.1-next.
|
|
22
|
+
"@pie-lib/config-ui": "12.1.1-next.3",
|
|
23
|
+
"@pie-lib/correct-answer-toggle": "3.1.1-next.1",
|
|
24
|
+
"@pie-lib/graphing-solution-set": "3.1.1-next.1",
|
|
25
|
+
"@pie-lib/math-rendering": "4.1.1-next.1",
|
|
26
|
+
"@pie-lib/render-ui": "5.1.1-next.1",
|
|
24
27
|
"classnames": "^2.2.5",
|
|
25
28
|
"core-js": "^3.40.0",
|
|
26
29
|
"debug": "^4.1.1",
|
|
@@ -29,7 +32,7 @@
|
|
|
29
32
|
},
|
|
30
33
|
"author": "",
|
|
31
34
|
"license": "ISC",
|
|
32
|
-
"gitHead": "
|
|
35
|
+
"gitHead": "20d879b8b8fa74decf5028d860d54cd09cbdf051",
|
|
33
36
|
"main": "lib/index.js",
|
|
34
37
|
"module": "src/index.js"
|
|
35
38
|
}
|