@pie-element/graphing 3.7.21 → 3.7.22

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/graphing-config.jsx"],"names":["tools","allTools","AuthoringColumn","columnKey","axis","classes","model","rows","key","inputs","label","className","smallInput","type","column","toUpperCase","map","row","input","target","onChangeInputValue","value","event","propTypes","PropTypes","String","object","styles","theme","container","marginTop","spacing","unit","marginBottom","display","flex","settings","flexDirection","width","GraphingConfig","props","onChange","content","backgroundMarks","authoringEnabled","arrows","coordinatesOnHover","domain","graph","labels","range","title","includeArrows","changeBackgroundMarks","height","React","Component","isRequired","func","bool"],"mappings":"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","sourcesContent":["import * as React from 'react';\nimport classnames from 'classnames';\nimport PropTypes from 'prop-types';\nimport { NumberTextField } from '@pie-lib/config-ui';\nimport { GraphContainer, tools } from '@pie-lib/graphing';\nimport { TextField, Typography } from '@material-ui/core';\nimport { withStyles } from '@material-ui/core/styles';\nimport { get, set } from 'lodash';\n\nconst { allTools = [] } = tools;\n\nexport const AuthoringColumn = ({ columnKey, axis, classes, model }) => {\n const rows = [{\n key: '${columnKey}-min-max',\n inputs: [\n {\n key: `${columnKey}.min`,\n label: 'Min value',\n className: classes.smallInput\n },\n {\n key: `${columnKey}.max`,\n label: 'Max value',\n className: classes.smallInput\n }\n ]\n }, {\n key: `${columnKey}-tick-frequency`,\n inputs: [\n {\n key: `${columnKey}.step`,\n label: 'Tick frequency'\n }\n ]\n },\n {\n key: `${columnKey}-tick-label-frequency`,\n inputs: [\n {\n key: `${columnKey}.labelStep`,\n label: 'Tick label frequency'\n }\n ]\n },\n {\n key: `${columnKey}-axis-label`,\n inputs: [\n {\n type: 'text',\n key: `${axis}-axis-label-input`,\n label: `${axis} Axis Label`\n }\n ]\n }\n ];\n\n return (\n <div className={classes.column} key={columnKey}>\n {`${columnKey.toUpperCase()} (${axis.toUpperCase()})`}\n\n {rows.map(row => (\n <div className={classes.row} key={row.key}>\n {row.inputs.map(input => {\n if (input.type === 'text') {\n return (\n <TextField\n className={classes.input}\n label={input.label.toUpperCase()}\n value={model[`${axis}AxisLabel`]}\n onChange={({ target }) => this.onChangeInputValue(`${axis}AxisLabel`, target.value)}\n />\n );\n }\n\n return (\n <TextField\n type=\"number\"\n key={input.key}\n label={input.label.toUpperCase()}\n onChange={(event, value) => this.onChangeInputValue(input.key, value)}\n value={get(model, input.key)}\n className={input.className || classes.input}\n />\n );\n })}\n </div>\n ))}\n </div>\n );\n};\n\nAuthoringColumn.propTypes = {\n axis: PropTypes.String,\n classes: PropTypes.object,\n columnKey: PropTypes.String,\n model: PropTypes.object,\n};\n\nconst styles = theme => ({\n container: {\n marginTop: theme.spacing.unit * 3,\n marginBottom: theme.spacing.unit * 3,\n display: 'flex',\n flex: 1,\n },\n column: {\n flex: 1\n },\n row: {\n marginTop: theme.spacing.unit * 2,\n flex: 1\n },\n settings: {\n display: 'flex',\n flexDirection: 'row'\n },\n input: {\n width: 'calc(100% - 32px)'\n },\n smallInput: {\n width: 'calc(50% - 32px)'\n }\n});\n\nexport class GraphingConfig extends React.Component {\n static propTypes = {\n classes: PropTypes.object.isRequired,\n model: PropTypes.object.isRequired,\n onChange: PropTypes.func.isRequired,\n authoringEnabled: PropTypes.bool,\n };\n\n onChangeInputValue = (key, value) => {\n const { model } = this.props;\n\n set(model, key, value);\n this.props.onChange(model);\n };\n\n renderInput = (key, label, className) => {\n const { classes, model } = this.props;\n\n return (\n <NumberTextField\n key={key}\n label={label.toUpperCase()}\n onChange={(event, value) => this.onChangeInputValue(key, value)}\n value={get(model, key)}\n className={className || classes.input}\n />\n )\n };\n\n renderRow = (key, content) => {\n const { classes } = this.props;\n\n return (\n <div className={classes.row} key={key}>\n {content}\n </div>\n );\n };\n\n changeBackgroundMarks = backgroundMarks => {\n const model = { ...this.props.model, backgroundMarks };\n this.props.onChange(model);\n };\n\n render() {\n const { classes, model, authoringEnabled } = this.props;\n const { arrows, backgroundMarks, coordinatesOnHover, domain, graph = {}, labels, range, title } = model || {};\n\n return (\n <div>\n Define Graph Attributes\n\n <div className={classes.container}>\n {authoringEnabled && (\n <div className={classnames(classes.column, classes.settings)} key=\"settings\">\n <AuthoringColumn columnKey=\"domain\" axis=\"x\" classes={classes} model={model} />\n <AuthoringColumn columnKey=\"range\" axis=\"y\" classes={classes} model={model} />\n </div>\n )}\n\n <div className={classes.column} key=\"graph\">\n <Typography component=\"div\" type=\"body1\">\n <span>Use the tools below to set background shapes</span>\n </Typography>\n\n <GraphContainer\n axesSettings={{ includeArrows: arrows }}\n backgroundMarks={[]}\n coordinatesOnHover={coordinatesOnHover}\n domain={domain}\n key=\"graphing-config\"\n labels={labels}\n marks={backgroundMarks}\n onChangeMarks={this.changeBackgroundMarks}\n range={range}\n size={{ width: graph.width, height: graph.height }}\n title={title}\n toolbarTools={allTools}\n />\n </div>\n\n </div>\n </div>\n );\n }\n};\n\nexport default withStyles(styles)(GraphingConfig);\n"],"file":"graphing-config.js"}
1
+ {"version":3,"sources":["../src/graphing-config.jsx"],"names":["tools","allTools","styles","theme","container","display","flexWrap","marginBottom","spacing","unit","gridConfig","flexDirection","marginRight","graphConfig","subheading","body","GraphingConfig","props","backgroundMarks","model","onChange","config","state","oldGridValues","gridValues","oldLabelValues","labelValues","updatedModel","domain","graph","range","standardGrid","domainConstraints","width","step","labelStep","rangeConstraints","height","setState","classes","graphDimensions","arrows","coordinatesOnHover","includeAxes","labels","title","enabled","min","max","sizeConstraints","Math","onConfigChange","includeArrows","changeBackgroundMarks","React","Component","PropTypes","object","isRequired","authoringEnabled","bool","func"],"mappings":"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","sourcesContent":["import * as React from 'react';\nimport PropTypes from 'prop-types';\nimport { GraphContainer, GridSetup, tools } from '@pie-lib/graphing';\nimport { Typography } from '@material-ui/core';\nimport { withStyles } from '@material-ui/core/styles';\nimport { applyConstraints, getGridValues, getLabelValues } from './utils';\n\nconst { allTools = [] } = tools;\n\nconst styles = theme => ({\n container: {\n display: 'flex',\n flexWrap: 'wrap',\n marginBottom: theme.spacing.unit * 7\n },\n gridConfig: {\n display: 'flex',\n flexDirection: 'column',\n marginRight: theme.spacing.unit * 4,\n marginBottom: theme.spacing.unit * 3\n },\n graphConfig: {\n display: 'flex',\n flexDirection: 'column'\n },\n subheading: {\n marginBottom: theme.spacing.unit * 2\n },\n body: {\n marginBottom: theme.spacing.unit\n }\n});\n\nexport class GraphingConfig extends React.Component {\n static propTypes = {\n classes: PropTypes.object.isRequired,\n authoringEnabled: PropTypes.bool,\n graphDimensions: PropTypes.object,\n model: PropTypes.object.isRequired,\n onChange: PropTypes.func.isRequired,\n };\n\n constructor(props) {\n super(props);\n const { domain, range, graph } = props.model || {};\n\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\n this.state = { gridValues, labelValues };\n };\n\n changeBackgroundMarks = backgroundMarks => {\n const model = { ...this.props.model, backgroundMarks };\n\n this.props.onChange(model);\n };\n\n onConfigChange = config => {\n const { model, onChange } = this.props;\n const { gridValues: oldGridValues, labelValues: oldLabelValues } = this.state;\n const updatedModel = { ...model, ...config };\n const { domain, graph, range, standardGrid } = updatedModel;\n const gridValues = {};\n const labelValues = {};\n\n const domainConstraints = applyConstraints(domain, graph.width, oldGridValues.domain, oldLabelValues.domain);\n\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 const rangeConstraints = applyConstraints(range, graph.height, oldGridValues.range, oldLabelValues.range);\n\n gridValues.range = rangeConstraints.gridValues;\n labelValues.range = rangeConstraints.labelValues;\n }\n\n this.setState({ gridValues, labelValues });\n onChange(updatedModel);\n };\n\n render() {\n const { classes, model, graphDimensions } = this.props;\n const {\n arrows,\n backgroundMarks,\n coordinatesOnHover,\n domain,\n includeAxes,\n labels,\n range,\n standardGrid,\n title\n } = model || {};\n const graph = (model || {}).graph || {};\n const { enabled, min, max, step } = graphDimensions || {};\n const { gridValues, labelValues } = this.state;\n\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\n return (\n <div className={classes.container}>\n <div className={classes.gridConfig}>\n <GridSetup\n domain={domain}\n dimensionsEnabled={enabled}\n gridValues={gridValues}\n includeAxes={includeAxes}\n labelValues={labelValues}\n range={range}\n size={graph}\n sizeConstraints={sizeConstraints}\n standardGrid={standardGrid}\n onChange={this.onConfigChange}\n />\n </div>\n\n <div className={classes.graphConfig} key=\"graph\">\n <Typography component=\"div\" variant=\"subheading2\" className={classes.subheading}>\n <span>Define Graph Attributes</span>\n </Typography>\n\n <Typography component=\"div\" variant=\"body1\" className={classes.body}>\n <span>Use this interface to add/edit a title and/or labels, and to set background shapes</span>\n </Typography>\n\n <GraphContainer\n axesSettings={{ includeArrows: arrows }}\n backgroundMarks={[]}\n coordinatesOnHover={coordinatesOnHover}\n domain={domain}\n key=\"graphing-config\"\n labels={labels}\n marks={backgroundMarks}\n onChangeMarks={this.changeBackgroundMarks}\n range={range}\n size={{ width: graph.width, height: graph.height }}\n title={title}\n toolbarTools={allTools}\n />\n </div>\n </div>\n );\n }\n};\n\nexport default withStyles(styles)(GraphingConfig);\n"],"file":"graphing-config.js"}
@@ -35,8 +35,6 @@ var _debug = _interopRequireDefault(require("debug"));
35
35
 
36
36
  var _defaults = _interopRequireDefault(require("./defaults"));
37
37
 
38
- var _isEmpty = _interopRequireDefault(require("lodash/isEmpty"));
39
-
40
38
  function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }
41
39
 
42
40
  function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { (0, _defineProperty2["default"])(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }
@@ -45,13 +43,14 @@ function _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflec
45
43
 
46
44
  function _isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }
47
45
 
48
- var log = (0, _debug["default"])('pie-elements:graphing:configure');
46
+ var log = (0, _debug["default"])('pie-elements:graphing:configure'); // this function is implemented in controller as well
49
47
 
50
- // this function is implemented in controller as well
51
48
  var sortedAnswers = function sortedAnswers(answers) {
52
- answers = answers || {};
53
- return Object.keys(answers).sort().reduce(function (result, key) {
54
- result[key] = answers[key];
49
+ return Object.keys(answers || {}).sort().reduce(function (result, key) {
50
+ if (key !== 'correctAnswer') {
51
+ result[key] = answers[key];
52
+ }
53
+
55
54
  return result;
56
55
  }, {});
57
56
  };
@@ -130,13 +129,31 @@ var GraphLinesConfigure = /*#__PURE__*/function (_HTMLElement) {
130
129
  exports["default"] = GraphLinesConfigure;
131
130
  (0, _defineProperty2["default"])(GraphLinesConfigure, "createDefaultModel", function () {
132
131
  var model = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
133
-
134
- if (!(0, _isEmpty["default"])(model.answers) && model.answers.hasOwnProperty('correctAnswer')) {
135
- model.answers = Object.assign({
136
- correctAnswer: model.answers.correctAnswer
137
- }, sortedAnswers(model.answers));
138
- }
139
-
140
- return _objectSpread(_objectSpread({}, _defaults["default"].model), model);
132
+ var _model$answers = model.answers,
133
+ answers = _model$answers === void 0 ? {} : _model$answers,
134
+ _model$domain = model.domain,
135
+ domain = _model$domain === void 0 ? {} : _model$domain,
136
+ _model$graph = model.graph,
137
+ graph = _model$graph === void 0 ? {} : _model$graph,
138
+ _model$range = model.range,
139
+ range = _model$range === void 0 ? {} : _model$range,
140
+ standardGrid = model.standardGrid;
141
+
142
+ var normalizedModel = _objectSpread(_objectSpread(_objectSpread({}, _defaults["default"].model), model), {}, {
143
+ answers: answers && answers.correctAnswer && _objectSpread({
144
+ correctAnswer: answers.correctAnswer
145
+ }, sortedAnswers(answers)) || answers,
146
+ range: standardGrid && _objectSpread(_objectSpread({}, range), {}, {
147
+ min: domain.min,
148
+ max: domain.max,
149
+ step: domain.step,
150
+ labelStep: domain.labelStep
151
+ }) || range,
152
+ graph: standardGrid && _objectSpread(_objectSpread({}, graph), {}, {
153
+ height: graph.width
154
+ }) || graph
155
+ });
156
+
157
+ return normalizedModel;
141
158
  });
142
159
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/index.js"],"names":["log","sortedAnswers","answers","Object","keys","sort","reduce","result","key","GraphLinesConfigure","model","_model","_render","dispatchEvent","ModelUpdatedEvent","config","_configuration","handler","InsertImageEvent","src","done","DeleteImageEvent","createDefaultModel","defaultValues","configuration","m","c","el","React","createElement","Configure","onModelChanged","onConfigurationChanged","imageSupport","add","insertImage","onDeleteImage","ReactDOM","render","HTMLElement","hasOwnProperty","assign","correctAnswer"],"mappings":"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","sourcesContent":["import React from 'react';\nimport ReactDOM from 'react-dom';\nimport Configure from './configure';\nimport { DeleteImageEvent, InsertImageEvent, ModelUpdatedEvent } from '@pie-framework/pie-configure-events';\nimport debug from 'debug';\n\nimport defaultValues from './defaults';\n\nconst log = debug('pie-elements:graphing:configure');\nimport isEmpty from 'lodash/isEmpty';\n\n// this function is implemented in controller as well\nconst sortedAnswers = (answers) => {\n answers = answers || {};\n\n return Object.keys(answers).sort().reduce((result, key) => {\n result[key] = answers[key];\n\n return result;\n }, {});\n};\n\nexport default class GraphLinesConfigure extends HTMLElement {\n static createDefaultModel = (model = {}) => {\n\n if (!isEmpty(model.answers) && model.answers.hasOwnProperty('correctAnswer')) {\n model.answers = Object.assign({ correctAnswer: model.answers.correctAnswer }, sortedAnswers(model.answers));\n }\n\n return { ...defaultValues.model, ...model }\n };\n\n constructor() {\n super();\n this._model = GraphLinesConfigure.createDefaultModel();\n this._configuration = defaultValues.configuration;\n }\n\n set model(m) {\n this._model = GraphLinesConfigure.createDefaultModel(m);\n this._render();\n }\n\n set configuration(c) {\n this._configuration = c;\n this._render();\n }\n\n onModelChanged = (model) => {\n this._model = model;\n this._render();\n\n log('[onModelChanged]: ', this._model);\n\n this.dispatchEvent(new ModelUpdatedEvent(this._model));\n };\n\n onConfigurationChanged = (config) => {\n this._configuration = config;\n this._render();\n };\n\n insertImage = (handler) => {\n this.dispatchEvent(new InsertImageEvent(handler));\n };\n\n onDeleteImage = (src, done) => {\n this.dispatchEvent(new DeleteImageEvent(src, done));\n };\n\n _render() {\n if (this._model) {\n const el = React.createElement(Configure, {\n onModelChanged: this.onModelChanged,\n onConfigurationChanged: this.onConfigurationChanged,\n model: this._model,\n configuration: this._configuration,\n imageSupport: {\n add: this.insertImage,\n delete: this.onDeleteImage,\n }\n });\n ReactDOM.render(el, this);\n }\n }\n}\n"],"file":"index.js"}
1
+ {"version":3,"sources":["../src/index.js"],"names":["log","sortedAnswers","answers","Object","keys","sort","reduce","result","key","GraphLinesConfigure","model","_model","_render","dispatchEvent","ModelUpdatedEvent","config","_configuration","handler","InsertImageEvent","src","done","DeleteImageEvent","createDefaultModel","defaultValues","configuration","m","c","el","React","createElement","Configure","onModelChanged","onConfigurationChanged","imageSupport","add","insertImage","onDeleteImage","ReactDOM","render","HTMLElement","domain","graph","range","standardGrid","normalizedModel","correctAnswer","min","max","step","labelStep","height","width"],"mappings":"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","sourcesContent":["import React from 'react';\nimport ReactDOM from 'react-dom';\nimport Configure from './configure';\nimport { DeleteImageEvent, InsertImageEvent, ModelUpdatedEvent } from '@pie-framework/pie-configure-events';\nimport debug from 'debug';\nimport defaultValues from './defaults';\n\nconst log = debug('pie-elements:graphing:configure');\n\n// this function is implemented in controller as well\nconst sortedAnswers = answers => Object.keys(answers || {}).sort().reduce((result, key) => {\n if (key !== 'correctAnswer') {\n result[key] = answers[key];\n }\n\n return result;\n}, {});\n\nexport default class GraphLinesConfigure extends HTMLElement {\n static createDefaultModel = (model = {}) => {\n const { answers = {}, domain = {}, graph = {}, range = {}, standardGrid } = model;\n const normalizedModel = {\n ...defaultValues.model,\n ...model,\n answers: answers && answers.correctAnswer && {\n correctAnswer: answers.correctAnswer,\n ...sortedAnswers(answers)\n } || answers,\n range: standardGrid && {\n ...range,\n min: domain.min,\n max: domain.max,\n step: domain.step,\n labelStep: domain.labelStep\n } || range,\n graph: standardGrid && { ...graph, height: graph.width } || graph\n };\n\n return normalizedModel;\n };\n\n constructor() {\n super();\n this._model = GraphLinesConfigure.createDefaultModel();\n this._configuration = defaultValues.configuration;\n }\n\n set model(m) {\n this._model = GraphLinesConfigure.createDefaultModel(m);\n this._render();\n }\n\n set configuration(c) {\n this._configuration = c;\n this._render();\n }\n\n onModelChanged = (model) => {\n this._model = model;\n this._render();\n\n log('[onModelChanged]: ', this._model);\n\n this.dispatchEvent(new ModelUpdatedEvent(this._model));\n };\n\n onConfigurationChanged = (config) => {\n this._configuration = config;\n this._render();\n };\n\n insertImage = (handler) => {\n this.dispatchEvent(new InsertImageEvent(handler));\n };\n\n onDeleteImage = (src, done) => {\n this.dispatchEvent(new DeleteImageEvent(src, done));\n };\n\n _render() {\n if (this._model) {\n const el = React.createElement(Configure, {\n onModelChanged: this.onModelChanged,\n onConfigurationChanged: this.onConfigurationChanged,\n model: this._model,\n configuration: this._configuration,\n imageSupport: {\n add: this.insertImage,\n delete: this.onDeleteImage,\n }\n });\n ReactDOM.render(el, this);\n }\n }\n}\n"],"file":"index.js"}
@@ -0,0 +1,94 @@
1
+ "use strict";
2
+
3
+ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
+
5
+ Object.defineProperty(exports, "__esModule", {
6
+ value: true
7
+ });
8
+ exports.getLabelValues = exports.getGridValues = exports.applyConstraints = exports.VALID_LABEL_VALUES = void 0;
9
+
10
+ var _isEqual = _interopRequireDefault(require("lodash/isEqual"));
11
+
12
+ var 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]; // same as VALID_GRID_VALUES but next values are excluded: 0.04, 0.0625, 0.125, 3, 4, 8, 12, 15, 40, 64
13
+
14
+ var 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];
15
+ var VALID_LABEL_VALUES = {
16
+ '0.01': [0, 0.01, 0.02, 0.04, 0.05, 0.1],
17
+ '0.02': [0, 0.02, 0.04, 0.1],
18
+ '0.04': [0, 0.04, 0.08, 0.16, 0.2],
19
+ '0.05': [0, 0.05, 0.1, 0.2, 0.25],
20
+ '0.0625': [0, 0.0625, 0.125, 0.25, 0.5],
21
+ '0.1': [0, 0.1, 0.2, 0.4, 0.5, 1],
22
+ '0.125': [0, 0.125, 0.25, 0.5, 1],
23
+ '0.2': [0, 0.2, 0.5, 0.1],
24
+ '0.25': [0, 0.25, 0.5, 1, 2],
25
+ '0.5': [0, 0.5, 1, 2],
26
+ '1': [0, 1, 2, 4, 5, 10],
27
+ '2': [0, 2, 4, 8, 10],
28
+ '3': [0, 3, 6, 12, 15],
29
+ '4': [0, 4, 8, 16, 20],
30
+ '5': [0, 5, 10, 20, 25],
31
+ '8': [0, 8, 16, 32, 40, 64],
32
+ '10': [0, 10, 20, 40, 50, 100],
33
+ '12': [0, 12, 24],
34
+ '15': [0, 15, 30, 60],
35
+ '20': [0, 20, 40, 80, 100],
36
+ '40': [0, 40, 80, 160, 200],
37
+ '50': [0, 50, 100, 200, 250],
38
+ '64': [0, 64, 128],
39
+ '100': [0, 100, 200, 400, 500],
40
+ '500': [0, 500, 1000, 2500],
41
+ '1000': [0, 1000, 2000, 4000, 5000]
42
+ };
43
+ exports.VALID_LABEL_VALUES = VALID_LABEL_VALUES;
44
+
45
+ var getGridValues = function getGridValues(axis, size) {
46
+ var prefferedValues = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false;
47
+ var minValue = 10 * (axis.max - axis.min) / size;
48
+ var maxValue = minValue * 10;
49
+ var values = prefferedValues ? PREFERRED_VALID_GRID_VALUES : VALID_GRID_VALUES;
50
+ return values.filter(function (value) {
51
+ return value >= minValue && value <= maxValue;
52
+ });
53
+ };
54
+
55
+ exports.getGridValues = getGridValues;
56
+
57
+ var getLabelValues = function getLabelValues(value) {
58
+ return VALID_LABEL_VALUES[value] || [];
59
+ };
60
+
61
+ exports.getLabelValues = getLabelValues;
62
+
63
+ var applyConstraints = function applyConstraints(axis, size, oldGridValues, oldLabelValues) {
64
+ var gridValues = getGridValues(axis, size);
65
+ var labelValues = getLabelValues(axis.step);
66
+
67
+ if (!(0, _isEqual["default"])(oldGridValues, gridValues) && !gridValues.includes(axis.step)) {
68
+ var preferredValues = getGridValues(axis, size, true);
69
+ var lowestValue = preferredValues[0] || 1;
70
+ axis.step = lowestValue;
71
+ labelValues = getLabelValues(lowestValue);
72
+
73
+ if (!labelValues.includes(axis.labelStep)) {
74
+ axis.labelStep = lowestValue;
75
+ }
76
+
77
+ return {
78
+ gridValues: gridValues,
79
+ labelValues: labelValues
80
+ };
81
+ }
82
+
83
+ if (!(0, _isEqual["default"])(oldLabelValues, labelValues) && !labelValues.includes(axis.labelStep)) {
84
+ axis.labelStep = axis.step;
85
+ }
86
+
87
+ return {
88
+ gridValues: gridValues,
89
+ labelValues: labelValues
90
+ };
91
+ };
92
+
93
+ exports.applyConstraints = applyConstraints;
94
+ //# sourceMappingURL=utils.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/utils.js"],"names":["VALID_GRID_VALUES","PREFERRED_VALID_GRID_VALUES","VALID_LABEL_VALUES","getGridValues","axis","size","prefferedValues","minValue","max","min","maxValue","values","filter","value","getLabelValues","applyConstraints","oldGridValues","oldLabelValues","gridValues","labelValues","step","includes","preferredValues","lowestValue","labelStep"],"mappings":"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","sourcesContent":["import isEqual from 'lodash/isEqual';\n\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,\n 1, 2, 3, 4, 5, 8, 10, 12, 15, 20, 40, 50, 64, 100, 500, 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\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\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\n return values.filter(value => value >= minValue && value <= maxValue);\n};\n\nexport const getLabelValues = value => VALID_LABEL_VALUES[value] || [];\n\nexport const applyConstraints = (axis, size, oldGridValues, oldLabelValues) => {\n const gridValues = getGridValues(axis, size);\n let labelValues = getLabelValues(axis.step);\n\n if (!isEqual(oldGridValues, gridValues) && !gridValues.includes(axis.step)) {\n const preferredValues = getGridValues(axis, size, true);\n const lowestValue = preferredValues[0] || 1;\n\n axis.step = lowestValue;\n labelValues = getLabelValues(lowestValue);\n\n if (!labelValues.includes(axis.labelStep)) {\n axis.labelStep = lowestValue;\n }\n\n return { gridValues, labelValues };\n }\n\n if (!isEqual(oldLabelValues, labelValues) && !labelValues.includes(axis.labelStep)) {\n axis.labelStep = axis.step;\n }\n\n return { gridValues, labelValues };\n};\n"],"file":"utils.js"}
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@pie-element/graphing-configure",
3
3
  "private": true,
4
- "version": "3.3.21",
4
+ "version": "3.3.22",
5
5
  "description": "",
6
6
  "main": "lib/index.js",
7
7
  "module": "src/index.js",
@@ -9,9 +9,9 @@
9
9
  "dependencies": {
10
10
  "@material-ui/core": "^3.9.2",
11
11
  "@pie-framework/pie-configure-events": "^1.2.0",
12
- "@pie-lib/config-ui": "^10.13.2",
13
- "@pie-lib/editable-html": "^7.22.5",
14
- "@pie-lib/graphing": "^2.6.2",
12
+ "@pie-lib/config-ui": "^10.13.3",
13
+ "@pie-lib/editable-html": "^7.22.6",
14
+ "@pie-lib/graphing": "^2.6.3",
15
15
  "classnames": "^2.2.5",
16
16
  "debug": "^4.1.1",
17
17
  "prop-types": "^15.6.2",
@@ -3,6 +3,14 @@
3
3
  All notable changes to this project will be documented in this file.
4
4
  See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
5
5
 
6
+ ## [3.4.6](https://github.com/pie-framework/pie-elements/compare/@pie-element/graphing-controller@3.4.5...@pie-element/graphing-controller@3.4.6) (2022-06-13)
7
+
8
+ **Note:** Version bump only for package @pie-element/graphing-controller
9
+
10
+
11
+
12
+
13
+
6
14
  ## [3.4.5](https://github.com/pie-framework/pie-elements/compare/@pie-element/graphing-controller@3.4.4...@pie-element/graphing-controller@3.4.5) (2022-02-21)
7
15
 
8
16
  **Note:** Version bump only for package @pie-element/graphing-controller
@@ -28,6 +28,7 @@ var _default = {
28
28
  width: 500,
29
29
  height: 500
30
30
  },
31
+ includeAxes: true,
31
32
  labels: {},
32
33
  coordinatesOnHover: false,
33
34
  padding: true,
@@ -40,6 +41,7 @@ var _default = {
40
41
  axisLabel: 'y'
41
42
  },
42
43
  rationale: '',
44
+ standardGrid: false,
43
45
  title: '',
44
46
  toolbarTools: allTools,
45
47
  promptEnabled: true,
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/defaults.js"],"names":["allTools","answers","arrows","left","right","up","down","backgroundMarks","domain","min","max","step","labelStep","axisLabel","graph","width","height","labels","coordinatesOnHover","padding","prompt","range","rationale","title","toolbarTools","promptEnabled","rationaleEnabled","teacherInstructionsEnabled","studentInstructionsEnabled"],"mappings":";;;;;;AAAA;AACA,IAAMA,QAAQ,GAAG,CACf,QADe,EAEf,MAFe,EAGf,OAHe,EAIf,UAJe,EAKf,OALe,EAMf,SANe,EAOf,KAPe,EAQf,SARe,EASf,MATe,EAUf,QAVe,CAAjB;AAYA;;eACe;AACbC,EAAAA,OAAO,EAAE,EADI;AAEbC,EAAAA,MAAM,EAAE;AACNC,IAAAA,IAAI,EAAE,IADA;AAENC,IAAAA,KAAK,EAAE,IAFD;AAGNC,IAAAA,EAAE,EAAE,IAHE;AAINC,IAAAA,IAAI,EAAE;AAJA,GAFK;AAQbC,EAAAA,eAAe,EAAE,EARJ;AASbC,EAAAA,MAAM,EAAE;AACNC,IAAAA,GAAG,EAAE,CAAC,CADA;AAENC,IAAAA,GAAG,EAAE,CAFC;AAGNC,IAAAA,IAAI,EAAE,CAHA;AAINC,IAAAA,SAAS,EAAE,CAJL;AAKNC,IAAAA,SAAS,EAAE;AALL,GATK;AAgBbC,EAAAA,KAAK,EAAE;AACLC,IAAAA,KAAK,EAAE,GADF;AAELC,IAAAA,MAAM,EAAE;AAFH,GAhBM;AAoBbC,EAAAA,MAAM,EAAE,EApBK;AAqBbC,EAAAA,kBAAkB,EAAE,KArBP;AAsBbC,EAAAA,OAAO,EAAE,IAtBI;AAuBbC,EAAAA,MAAM,EAAE,EAvBK;AAwBbC,EAAAA,KAAK,EAAE;AACLZ,IAAAA,GAAG,EAAE,CAAC,CADD;AAELC,IAAAA,GAAG,EAAE,CAFA;AAGLC,IAAAA,IAAI,EAAE,CAHD;AAILC,IAAAA,SAAS,EAAE,CAJN;AAKLC,IAAAA,SAAS,EAAE;AALN,GAxBM;AA+BbS,EAAAA,SAAS,EAAE,EA/BE;AAgCbC,EAAAA,KAAK,EAAE,EAhCM;AAiCbC,EAAAA,YAAY,EAAExB,QAjCD;AAkCbyB,EAAAA,aAAa,EAAE,IAlCF;AAmCbC,EAAAA,gBAAgB,EAAE,IAnCL;AAoCbC,EAAAA,0BAA0B,EAAE,IApCf;AAqCbC,EAAAA,0BAA0B,EAAE;AArCf,C","sourcesContent":["// TODO: This is lifted from @pie-lib/graphing, however importing this will break a controller build because it has jsx source in that package.\nconst allTools = [\n 'circle',\n 'line',\n 'label',\n 'parabola',\n 'point',\n 'polygon',\n 'ray',\n 'segment',\n 'sine',\n 'vector'];\n\n/* model defaults */\nexport default {\n answers: {},\n arrows: {\n left: true,\n right: true,\n up: true,\n down: true\n },\n backgroundMarks: [],\n domain: {\n min: -5,\n max: 5,\n step: 1,\n labelStep: 1,\n axisLabel: 'x'\n },\n graph: {\n width: 500,\n height: 500\n },\n labels: {},\n coordinatesOnHover: false,\n padding: true,\n prompt: '',\n range: {\n min: -5,\n max: 5,\n step: 1,\n labelStep: 1,\n axisLabel: 'y'\n },\n rationale: '',\n title: '',\n toolbarTools: allTools,\n promptEnabled: true,\n rationaleEnabled: true,\n teacherInstructionsEnabled: true,\n studentInstructionsEnabled: true\n};\n"],"file":"defaults.js"}
1
+ {"version":3,"sources":["../src/defaults.js"],"names":["allTools","answers","arrows","left","right","up","down","backgroundMarks","domain","min","max","step","labelStep","axisLabel","graph","width","height","includeAxes","labels","coordinatesOnHover","padding","prompt","range","rationale","standardGrid","title","toolbarTools","promptEnabled","rationaleEnabled","teacherInstructionsEnabled","studentInstructionsEnabled"],"mappings":";;;;;;AAAA;AACA,IAAMA,QAAQ,GAAG,CACf,QADe,EAEf,MAFe,EAGf,OAHe,EAIf,UAJe,EAKf,OALe,EAMf,SANe,EAOf,KAPe,EAQf,SARe,EASf,MATe,EAUf,QAVe,CAAjB;AAaA;;eACe;AACbC,EAAAA,OAAO,EAAE,EADI;AAEbC,EAAAA,MAAM,EAAE;AACNC,IAAAA,IAAI,EAAE,IADA;AAENC,IAAAA,KAAK,EAAE,IAFD;AAGNC,IAAAA,EAAE,EAAE,IAHE;AAINC,IAAAA,IAAI,EAAE;AAJA,GAFK;AAQbC,EAAAA,eAAe,EAAE,EARJ;AASbC,EAAAA,MAAM,EAAE;AACNC,IAAAA,GAAG,EAAE,CAAC,CADA;AAENC,IAAAA,GAAG,EAAE,CAFC;AAGNC,IAAAA,IAAI,EAAE,CAHA;AAINC,IAAAA,SAAS,EAAE,CAJL;AAKNC,IAAAA,SAAS,EAAE;AALL,GATK;AAgBbC,EAAAA,KAAK,EAAE;AACLC,IAAAA,KAAK,EAAE,GADF;AAELC,IAAAA,MAAM,EAAE;AAFH,GAhBM;AAoBbC,EAAAA,WAAW,EAAE,IApBA;AAqBbC,EAAAA,MAAM,EAAE,EArBK;AAsBbC,EAAAA,kBAAkB,EAAE,KAtBP;AAuBbC,EAAAA,OAAO,EAAE,IAvBI;AAwBbC,EAAAA,MAAM,EAAE,EAxBK;AAyBbC,EAAAA,KAAK,EAAE;AACLb,IAAAA,GAAG,EAAE,CAAC,CADD;AAELC,IAAAA,GAAG,EAAE,CAFA;AAGLC,IAAAA,IAAI,EAAE,CAHD;AAILC,IAAAA,SAAS,EAAE,CAJN;AAKLC,IAAAA,SAAS,EAAE;AALN,GAzBM;AAgCbU,EAAAA,SAAS,EAAE,EAhCE;AAiCbC,EAAAA,YAAY,EAAE,KAjCD;AAkCbC,EAAAA,KAAK,EAAE,EAlCM;AAmCbC,EAAAA,YAAY,EAAE1B,QAnCD;AAoCb2B,EAAAA,aAAa,EAAE,IApCF;AAqCbC,EAAAA,gBAAgB,EAAE,IArCL;AAsCbC,EAAAA,0BAA0B,EAAE,IAtCf;AAuCbC,EAAAA,0BAA0B,EAAE;AAvCf,C","sourcesContent":["// TODO: This is lifted from @pie-lib/graphing, however importing this will break a controller build because it has jsx source in that package.\nconst allTools = [\n 'circle',\n 'line',\n 'label',\n 'parabola',\n 'point',\n 'polygon',\n 'ray',\n 'segment',\n 'sine',\n 'vector'\n];\n\n/* model defaults */\nexport default {\n answers: {},\n arrows: {\n left: true,\n right: true,\n up: true,\n down: true\n },\n backgroundMarks: [],\n domain: {\n min: -5,\n max: 5,\n step: 1,\n labelStep: 1,\n axisLabel: 'x'\n },\n graph: {\n width: 500,\n height: 500\n },\n includeAxes: true,\n labels: {},\n coordinatesOnHover: false,\n padding: true,\n prompt: '',\n range: {\n min: -5,\n max: 5,\n step: 1,\n labelStep: 1,\n axisLabel: 'y'\n },\n rationale: '',\n standardGrid: false,\n title: '',\n toolbarTools: allTools,\n promptEnabled: true,\n rationaleEnabled: true,\n teacherInstructionsEnabled: true,\n studentInstructionsEnabled: true\n};\n"],"file":"defaults.js"}
@@ -7,7 +7,7 @@ Object.defineProperty(exports, "__esModule", {
7
7
  });
8
8
  exports.getBestAnswer = exports.getAnswerCorrected = exports.createCorrectResponseSession = exports.compareMarks = void 0;
9
9
  exports.model = model;
10
- exports.orderCorrectAnswers = exports.normalize = void 0;
10
+ exports.normalize = void 0;
11
11
  exports.outcome = outcome;
12
12
 
13
13
  var _objectWithoutProperties2 = _interopRequireDefault(require("@babel/runtime/helpers/objectWithoutProperties"));
@@ -92,26 +92,13 @@ var getPartialScoring = function getPartialScoring(_ref2) {
92
92
  }, env);
93
93
  };
94
94
 
95
- var orderCorrectAnswers = function orderCorrectAnswers(questionPossibleAnswers) {
96
- questionPossibleAnswers = questionPossibleAnswers || {};
97
-
98
- if (!questionPossibleAnswers.hasOwnProperty('correctAnswer')) {
99
- (0, _utils.sortedAnswers)(questionPossibleAnswers);
100
- }
101
-
102
- return Object.assign({
103
- correctAnswer: questionPossibleAnswers.correctAnswer
104
- }, (0, _utils.sortedAnswers)(questionPossibleAnswers));
105
- };
106
-
107
- exports.orderCorrectAnswers = orderCorrectAnswers;
108
-
109
95
  var getBestAnswer = function getBestAnswer(question, session) {
110
96
  var env = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};
111
97
 
112
98
  // questionPossibleAnswers contains all possible answers (correct response and alternates);
113
99
  var _ref3 = question || {},
114
- questionPossibleAnswers = _ref3.answers,
100
+ _ref3$answers = _ref3.answers,
101
+ questionPossibleAnswers = _ref3$answers === void 0 ? {} : _ref3$answers,
115
102
  scoringType = _ref3.scoringType;
116
103
 
117
104
  var _ref4 = session || {},
@@ -125,7 +112,9 @@ var getBestAnswer = function getBestAnswer(question, session) {
125
112
  correctAnswer: initializeGraphMap()
126
113
  };
127
114
  } else {
128
- orderCorrectAnswers(questionPossibleAnswers);
115
+ questionPossibleAnswers = _objectSpread({
116
+ correctAnswer: questionPossibleAnswers.correctAnswer
117
+ }, (0, _utils.sortedAnswers)(questionPossibleAnswers));
129
118
  }
130
119
 
131
120
  var partialScoringEnabled = getPartialScoring({
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/index.js"],"names":["log","initializeGraphMap","point","segment","line","ray","vector","polygon","circle","sine","parabola","compareMarks","mark1","mark2","type","equalMarks","getAnswerCorrected","sessionAnswers","correctAnswers","marks","reduce","correctedAnswer","answer","answerIsCorrect","find","mark","correctness","getPartialScoring","scoringType","env","pS","partialScoring","enabled","orderCorrectAnswers","questionPossibleAnswers","hasOwnProperty","Object","assign","correctAnswer","getBestAnswer","question","session","answers","partialScoringEnabled","possibleAnswers","entries","acc","entry","possibleAnswerKey","possibleAnswer","length","correctMarks","filter","maxScore","score","bestScore","foundOneSolution","parseFloat","toFixed","Math","floor","bestScoreAnswerKey","answersCorrected","map","normalize","defaults","model","Promise","resolve","normalizedQuestion","prompt","promptEnabled","graph","questionProps","arrows","mode","role","left","right","up","down","base","disabled","rationale","size","showToggle","teacherInstructions","rationaleEnabled","teacherInstructionsEnabled","correctResponse","outcome","empty","createCorrectResponseSession","values","firstCorrectAnswer","id"],"mappings":"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","sourcesContent":["import debug from 'debug';\n\nimport cloneDeep from 'lodash/cloneDeep';\nimport uniqWith from 'lodash/uniqWith';\nimport isEmpty from 'lodash/isEmpty';\nimport defaults from './defaults';\nimport { equalMarks, sortedAnswers } from './utils';\n\nimport { partialScoring } from '@pie-lib/controller-utils';\n\nconst log = debug('@pie-element:graphing:controller');\n\nconst initializeGraphMap = () => ({\n point: [],\n segment: [],\n line: [],\n ray: [],\n vector: [],\n polygon: [],\n circle: [],\n sine: [],\n parabola: []\n});\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 !!(mark1 && mark2 && mark1.type === mark2.type && equalMarks[mark1.type] && equalMarks[mark1.type](mark1, mark2));\n};\n\nexport const getAnswerCorrected = ({ sessionAnswers, marks: correctAnswers }) => {\n sessionAnswers = sessionAnswers || [];\n correctAnswers = correctAnswers || [];\n\n return cloneDeep(sessionAnswers).reduce((correctedAnswer, answer) => {\n const answerIsCorrect = correctAnswers.find(mark => compareMarks(answer, mark));\n\n answer.correctness = answerIsCorrect ? 'correct' : 'incorrect';\n\n return [...correctedAnswer, answer];\n }, []);\n};\n\nconst getPartialScoring = ({ scoringType, env }) => {\n let pS = scoringType;\n\n // if scoringType is undefined, partialScoring should be considered undefined (not set)\n // because partialScoring.enabled is using that information\n // if it has a value, we check if it is partial scoring or dichotomous\n if (scoringType) {\n pS = scoringType === 'partial scoring';\n }\n\n return partialScoring.enabled({ partialScoring: pS }, env);\n};\n\nexport const orderCorrectAnswers = (questionPossibleAnswers) => {\n questionPossibleAnswers = questionPossibleAnswers || {};\n\n if (!questionPossibleAnswers.hasOwnProperty('correctAnswer')) {\n sortedAnswers(questionPossibleAnswers);\n }\n\n return Object.assign({ correctAnswer: questionPossibleAnswers.correctAnswer }, sortedAnswers(questionPossibleAnswers));\n};\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\n // initialize answer if no values\n answer = answer || [];\n\n // initialize one possible answer if no values\n if (isEmpty(questionPossibleAnswers)) {\n questionPossibleAnswers = { correctAnswer: initializeGraphMap() };\n } else {\n orderCorrectAnswers(questionPossibleAnswers);\n }\n\n const partialScoringEnabled = getPartialScoring({ scoringType, env });\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\n return possibleAnswers.reduce((acc, entry) => {\n // iterating each possible answer (main + alternates)\n const possibleAnswerKey = entry[0];\n const possibleAnswer = entry[1] || {};\n let { marks } = possibleAnswer;\n\n if (!marks || !marks.length) {\n return acc;\n }\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\n const maxScore = marks.length;\n let score = correctMarks.length;\n\n // if extra placements\n if (correctedAnswer.length > maxScore) {\n score -= correctedAnswer.length - maxScore;\n }\n\n if (score < 0) {\n score = 0;\n }\n\n if (score / maxScore > acc.bestScore || !acc.foundOneSolution) {\n if (partialScoringEnabled) {\n acc.bestScore = parseFloat((score / maxScore).toFixed(2));\n } else {\n acc.bestScore = Math.floor(score / maxScore);\n }\n\n acc.bestScoreAnswerKey = possibleAnswerKey;\n acc.answersCorrected = correctedAnswer;\n acc.foundOneSolution = true;\n }\n\n return acc;\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\nexport const normalize = question => ({ ...defaults, ...question });\n\nexport function model(question, session, env) {\n return new Promise(resolve => {\n const normalizedQuestion = normalize(question);\n const { prompt, promptEnabled, graph, answers, ...questionProps } = 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 disabled: env.mode !== 'gather',\n prompt: promptEnabled ? prompt : null,\n rationale: null,\n size: graph,\n showToggle: env.mode === 'evaluate' && !isEmpty(answers),\n teacherInstructions: null,\n arrows\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 (!isEmpty(answers)) {\n const { answersCorrected, bestScoreAnswerKey, bestScore } = getBestAnswer(normalizedQuestion, session, env);\n\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\nexport function outcome(question, session, env = {}) {\n return new Promise(resolve => {\n if (!session || isEmpty(session)) {\n resolve({ score: 0, empty: true });\n }\n\n if (env.mode !== 'evaluate' || isEmpty(question.answers)) {\n resolve({ score: 0 });\n }\n\n const { bestScore } = getBestAnswer(question, session, env);\n\n resolve({ score: bestScore });\n });\n}\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\n if (answers && Object.values(answers)) {\n const firstCorrectAnswer = Object.values(answers)[0] || {};\n\n marks = firstCorrectAnswer.marks || [];\n }\n\n resolve({\n answer: marks,\n id: '1'\n });\n } else {\n resolve(null);\n }\n });\n};\n"],"file":"index.js"}
1
+ {"version":3,"sources":["../src/index.js"],"names":["log","initializeGraphMap","point","segment","line","ray","vector","polygon","circle","sine","parabola","compareMarks","mark1","mark2","type","equalMarks","getAnswerCorrected","sessionAnswers","correctAnswers","marks","reduce","correctedAnswer","answer","answerIsCorrect","find","mark","correctness","getPartialScoring","scoringType","env","pS","partialScoring","enabled","getBestAnswer","question","session","answers","questionPossibleAnswers","correctAnswer","partialScoringEnabled","possibleAnswers","Object","entries","acc","entry","possibleAnswerKey","possibleAnswer","length","correctMarks","filter","maxScore","score","bestScore","foundOneSolution","parseFloat","toFixed","Math","floor","bestScoreAnswerKey","answersCorrected","map","normalize","defaults","model","Promise","resolve","normalizedQuestion","prompt","promptEnabled","graph","questionProps","arrows","mode","role","left","right","up","down","base","disabled","rationale","size","showToggle","teacherInstructions","rationaleEnabled","teacherInstructionsEnabled","correctResponse","outcome","empty","createCorrectResponseSession","values","firstCorrectAnswer","id"],"mappings":"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","sourcesContent":["import debug from 'debug';\n\nimport cloneDeep from 'lodash/cloneDeep';\nimport uniqWith from 'lodash/uniqWith';\nimport isEmpty from 'lodash/isEmpty';\nimport defaults from './defaults';\nimport { equalMarks, sortedAnswers } from './utils';\n\nimport { partialScoring } from '@pie-lib/controller-utils';\n\nconst log = debug('@pie-element:graphing:controller');\n\nconst initializeGraphMap = () => ({\n point: [],\n segment: [],\n line: [],\n ray: [],\n vector: [],\n polygon: [],\n circle: [],\n sine: [],\n parabola: []\n});\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 !!(mark1 && mark2 && mark1.type === mark2.type && equalMarks[mark1.type] && equalMarks[mark1.type](mark1, mark2));\n};\n\nexport const getAnswerCorrected = ({ sessionAnswers, marks: correctAnswers }) => {\n sessionAnswers = sessionAnswers || [];\n correctAnswers = correctAnswers || [];\n\n return cloneDeep(sessionAnswers).reduce((correctedAnswer, answer) => {\n const answerIsCorrect = correctAnswers.find(mark => compareMarks(answer, mark));\n\n answer.correctness = answerIsCorrect ? 'correct' : 'incorrect';\n\n return [...correctedAnswer, answer];\n }, []);\n};\n\nconst getPartialScoring = ({ scoringType, env }) => {\n let pS = scoringType;\n\n // if scoringType is undefined, partialScoring should be considered undefined (not set)\n // because partialScoring.enabled is using that information\n // if it has a value, we check if it is partial scoring or dichotomous\n if (scoringType) {\n pS = scoringType === 'partial scoring';\n }\n\n return partialScoring.enabled({ partialScoring: pS }, env);\n};\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\n // initialize answer if no values\n answer = answer || [];\n\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\n const partialScoringEnabled = getPartialScoring({ scoringType, env });\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\n return possibleAnswers.reduce((acc, entry) => {\n // iterating each possible answer (main + alternates)\n const possibleAnswerKey = entry[0];\n const possibleAnswer = entry[1] || {};\n let { marks } = possibleAnswer;\n\n if (!marks || !marks.length) {\n return acc;\n }\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\n const maxScore = marks.length;\n let score = correctMarks.length;\n\n // if extra placements\n if (correctedAnswer.length > maxScore) {\n score -= correctedAnswer.length - maxScore;\n }\n\n if (score < 0) {\n score = 0;\n }\n\n if (score / maxScore > acc.bestScore || !acc.foundOneSolution) {\n if (partialScoringEnabled) {\n acc.bestScore = parseFloat((score / maxScore).toFixed(2));\n } else {\n acc.bestScore = Math.floor(score / maxScore);\n }\n\n acc.bestScoreAnswerKey = possibleAnswerKey;\n acc.answersCorrected = correctedAnswer;\n acc.foundOneSolution = true;\n }\n\n return acc;\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\nexport const normalize = question => ({ ...defaults, ...question });\n\nexport function model(question, session, env) {\n return new Promise(resolve => {\n const normalizedQuestion = normalize(question);\n const { prompt, promptEnabled, graph, answers, ...questionProps } = 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 disabled: env.mode !== 'gather',\n prompt: promptEnabled ? prompt : null,\n rationale: null,\n size: graph,\n showToggle: env.mode === 'evaluate' && !isEmpty(answers),\n teacherInstructions: null,\n arrows\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 (!isEmpty(answers)) {\n const { answersCorrected, bestScoreAnswerKey, bestScore } = getBestAnswer(normalizedQuestion, session, env);\n\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\nexport function outcome(question, session, env = {}) {\n return new Promise(resolve => {\n if (!session || isEmpty(session)) {\n resolve({ score: 0, empty: true });\n }\n\n if (env.mode !== 'evaluate' || isEmpty(question.answers)) {\n resolve({ score: 0 });\n }\n\n const { bestScore } = getBestAnswer(question, session, env);\n\n resolve({ score: bestScore });\n });\n}\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\n if (answers && Object.values(answers)) {\n const firstCorrectAnswer = Object.values(answers)[0] || {};\n\n marks = firstCorrectAnswer.marks || [];\n }\n\n resolve({\n answer: marks,\n id: '1'\n });\n } else {\n resolve(null);\n }\n });\n};\n"],"file":"index.js"}
@@ -54,9 +54,11 @@ var equalVector = function equalVector(vector1, vector2) {
54
54
  exports.equalVector = equalVector;
55
55
 
56
56
  var sortedAnswers = function sortedAnswers(answers) {
57
- answers = answers || {};
58
- return Object.keys(answers).sort().reduce(function (result, key) {
59
- result[key] = answers[key];
57
+ return Object.keys(answers || {}).sort().reduce(function (result, key) {
58
+ if (key !== 'correctAnswer') {
59
+ result[key] = answers[key];
60
+ }
61
+
60
62
  return result;
61
63
  }, {});
62
64
  };
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/utils.js"],"names":["equalPoint","A","B","equalLabel","label","x","y","equalSegment","segment1","segment2","from","to","equalVector","vector1","vector2","sortedAnswers","answers","Object","keys","sort","reduce","result","key","returnLineEquationCoefficients","line","xA","yA","xB","yB","a","b","c","getSignificantDecimals","number","Math","round","equalLine","line1","line2","a1","b1","c1","a2","b2","c2","proportions","push","lodash","uniq","length","equalRay","ray1","ray2","mRay1","mRay2","angleRay1","atan2","PI","angleRay2","constructSegmentsFromPoints","points","map","point","index","removeDuplicateSegments","segments","s1","s2","removeInvalidSegments","filter","segment","equalPolygon","poly1","poly2","points1","points2","segments1","segments2","segments1NoDuplicates","segments2NoDuplicates","differentSegments1","differentSegments2","equalCircle","equalRootAndEdge","edge","root","rC1","sqrt","rC2","equalSine","sine1","sine2","getPoints","amplitude","freq","tY","abs","tXRoot","tX","edgeAboveZeroX","edgeAboveZeroY","min","max","studentAnswerBpY","correctAnswerBpY","amplitude1","freq1","min1","max1","edgeAboveZeroX1","edgeAboveZeroY1","amplitude2","freq2","min2","max2","edgeAboveZeroX2","edgeAboveZeroY2","equalParabola","p1","p2","edgeP1","rootP1","edgeP2","rootP2","p1edge","p2edge","p1mirrorEdge","p2mirrorEdge","equalMarks","circle","sessAnswer","mark","parabola","polygon","poly","ray","sine","vector"],"mappings":"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","sourcesContent":["import isEqual from 'lodash/isEqual';\nimport lodash from 'lodash';\nimport uniqWith from 'lodash/uniqWith';\nimport differenceWith from 'lodash/differenceWith';\nimport { getAmplitudeAndFreq, pointsToABC } from '@pie-lib/graphing-utils';\n\nexport const equalPoint = (A, B) => {\n // x1 = x2 & y1 = y2\n let equalLabel = true;\n\n if (A.label || B.label) {\n equalLabel = isEqual(A.label, B.label);\n }\n\n return isEqual(A.x, B.x) && isEqual(A.y, B.y) && equalLabel;\n};\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 ((isEqual(segment1.from, segment2.from) && isEqual(segment1.to, segment2.to)) ||\n ((isEqual(segment1.to, segment2.from) && isEqual(segment1.from, segment2.to))));\n};\n\nexport const equalVector = (vector1, vector2) => {\n // A.from = B.from, A.to = B.to;\n // x1 = x3 & y1 = y3 & x2 = x4 & y2 = y4\n return ((isEqual(vector1.from, vector2.from) && isEqual(vector1.to, vector2.to)));\n};\n\n// this function is implemented in configure as well\nexport const sortedAnswers = (answers) => {\n answers = answers || {};\n\n return Object.keys(answers).sort().reduce((result, key) => {\n result[key] = answers[key];\n\n return result;\n }, {});\n};\n\nconst returnLineEquationCoefficients = line => {\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\n return {\n a: yB - yA,\n b: xA - xB,\n c: (xB * yA) - (xA * yB)\n };\n};\n\nconst getSignificantDecimals = number => Math.round(number * 10000) / 10000;\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\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\n const { a: a1, b: b1, c: c1 } = returnLineEquationCoefficients(line1);\n const { a: a2, b: b2, c: c2 } = returnLineEquationCoefficients(line2);\n\n const proportions = [];\n\n if (a2 !== 0) {\n proportions.push(getSignificantDecimals((a1 / a2)));\n } else if (a1 !== a2) {\n return false;\n }\n\n if (b2 !== 0) {\n proportions.push(getSignificantDecimals((b1 / b2)));\n } else if (b1 !== b2) {\n return false;\n }\n\n if (c2 !== 0) {\n proportions.push(getSignificantDecimals(c1 / c2));\n } else if (c1 !== c2) {\n return false;\n }\n\n return lodash.uniq(proportions).length === 1;\n\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\nexport const equalRay = (ray1, ray2) => {\n // slope: m = (y2-y1)/(x2-x1)\n // slope & x1 = x3 & y1 = y3 & angle between (x1, y1) (x2, y2) is same as angle between (x3, y3) (x4, y4)\n const mRay1 = (ray1.to.y - ray1.from.y) / (ray1.to.x - ray1.from.x);\n const mRay2 = (ray2.to.y - ray2.from.y) / (ray2.to.x - ray2.from.x);\n const angleRay1 = Math.atan2(ray1.to.y - ray1.from.y, ray1.to.x - ray1.from.x) * 180 / Math.PI;\n const angleRay2 = Math.atan2(ray2.to.y - ray2.from.y, ray2.to.x - ray2.from.x) * 180 / Math.PI;\n\n return mRay1 === mRay2 && ray1.from.x === ray2.from.x && ray1.from.y === ray2.from.y && angleRay1 === angleRay2;\n};\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\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\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\n return segments.filter(segment => !isEqual(segment.from, segment.to));\n};\n\nexport const equalPolygon = (poly1, poly2) => {\n const { points: points1 } = poly1;\n const { points: points2 } = poly2;\n\n // generate segments\n const segments1 = constructSegmentsFromPoints(points1);\n const segments2 = constructSegmentsFromPoints(points2);\n\n const segments1NoDuplicates = removeDuplicateSegments(removeInvalidSegments(segments1));\n const segments2NoDuplicates = removeDuplicateSegments(removeInvalidSegments(segments2));\n\n const differentSegments1 = differenceWith(segments1NoDuplicates, segments2NoDuplicates, equalSegment);\n const differentSegments2 = differenceWith(segments2NoDuplicates, segments1NoDuplicates, equalSegment);\n\n return (!differentSegments1 || !differentSegments1.length) && (!differentSegments2 || !differentSegments2.length);\n};\n\nexport const equalCircle = (c1, c2) => {\n const equalRootAndEdge = isEqual(c2.edge, c1.edge) && isEqual(c2.root, c1.root);\n\n // if both edge and root are the same, it means the shapes are exactly the same\n if (equalRootAndEdge) return true;\n\n const rC1 = Math.sqrt(((c1.edge.x - c1.root.x) ** 2) + ((c1.edge.y - c1.root.y) ** 2));\n const rC2 = Math.sqrt(((c2.edge.x - c2.root.x) ** 2) + ((c2.edge.y - c2.root.y) ** 2));\n\n // if both root and radius are the same, it means the shapes are equal\n return isEqual(c2.root, c1.root) && isEqual(rC1, rC2);\n};\n\nexport const equalSine = (sine1, sine2) => {\n const getPoints = ({ root, edge }) => {\n const { amplitude, freq } = getAmplitudeAndFreq(root, edge);\n // the height of the sine wave\n const tY = Math.abs(root.y - edge.y) * 2;\n // the distance on x axis between edge and root\n const tXRoot = Math.abs(root.x - edge.x);\n // the distance on x axis between 2 edges for sine wave (min & max)\n const tX = tXRoot * 2;\n // the first edge placed east side of root\n let edgeAboveZeroX = edge.x;\n let edgeAboveZeroY = edge.y;\n\n // if edge less then 0, find out the appropriate edge placed east side of zero (0)\n while (edgeAboveZeroX < 0 && tX !== 0) {\n edgeAboveZeroX = edgeAboveZeroX + tX;\n edgeAboveZeroY = edgeAboveZeroY < root.y ? edgeAboveZeroY + tY : edgeAboveZeroY - tY;\n }\n\n // if edge more then 0, find out the appropriate edge placed east side of zero (0)\n while (edgeAboveZeroX - tX > 0 && tX !== 0) {\n edgeAboveZeroX = edgeAboveZeroX - tX;\n edgeAboveZeroY = edgeAboveZeroY < root.y ? edgeAboveZeroY + tY : edgeAboveZeroY - tY;\n }\n\n return {\n amplitude: getSignificantDecimals(amplitude),\n freq: getSignificantDecimals(freq),\n min: getSignificantDecimals(edge.y < root.y ? edge.y : edge.y - tY),\n max: getSignificantDecimals(edge.y < root.y ? edge.y + tY : edge.y),\n edgeAboveZeroX: getSignificantDecimals(edgeAboveZeroX),\n edgeAboveZeroY: getSignificantDecimals(edgeAboveZeroY)\n };\n };\n\n const studentAnswerBpY = getPoints(sine1);\n const correctAnswerBpY = getPoints(sine2);\n\n const {\n amplitude: amplitude1,\n freq: freq1,\n min: min1,\n max: max1,\n edgeAboveZeroX: edgeAboveZeroX1,\n edgeAboveZeroY: edgeAboveZeroY1\n } = studentAnswerBpY;\n const {\n amplitude: amplitude2,\n freq: freq2,\n min: min2,\n max: max2,\n edgeAboveZeroX: edgeAboveZeroX2,\n edgeAboveZeroY: edgeAboveZeroY2\n } = correctAnswerBpY;\n\n return (Math.abs(amplitude1) === Math.abs(amplitude2) &&\n Math.abs(freq1) === Math.abs(freq2) &&\n min1 === min2 && max1 === max2 &&\n edgeAboveZeroX1 === edgeAboveZeroX2 &&\n edgeAboveZeroY1 === edgeAboveZeroY2);\n // rootDiff1 === rootDiff2);\n};\n\nexport const equalParabola = (p1, p2) => {\n const { edge: edgeP1, root: rootP1 } = p1;\n const { edge: edgeP2, root: rootP2 } = p2;\n const p1edge = edgeP1 || { ...rootP1 };\n const p2edge = edgeP2 || { ...rootP2 };\n\n const p1mirrorEdge = { x: rootP1.x - (p1edge.x - rootP1.x), y: p1edge.y };\n const p2mirrorEdge = { x: rootP2.x - (p2edge.x - rootP2.x), y: p2edge.y };\n\n const { a: a1, b: b1, c: c1 } = pointsToABC(rootP1, edgeP1, p1mirrorEdge);\n const { a: a2, b: b2, c: c2 } = pointsToABC(rootP2, edgeP2, p2mirrorEdge);\n\n // sometimes numbers have this form: 1.00000000002 because of calculations, we have to round them\n const round = number => Math.round(number * 10000) / 10000;\n\n return round(a1) === round(a2) && round(b1) === round(b2) && round(c1) === round(c2);\n};\n\nexport const equalMarks = {\n circle: (sessAnswer, mark) => equalCircle(sessAnswer, mark),\n line: (sessAnswer, mark) => equalLine(sessAnswer, mark),\n parabola: (sessAnswer, mark) => equalParabola(sessAnswer, mark),\n point: (sessAnswer, mark) => equalPoint(sessAnswer, mark),\n polygon: (sessAnswer, poly) => equalPolygon(sessAnswer, poly),\n ray: (sessAnswer, mark) => equalRay(sessAnswer, mark),\n segment: (sessAnswer, mark) => equalSegment(sessAnswer, mark),\n sine: (sessAnswer, mark) => equalSine(sessAnswer, mark),\n vector: (sessAnswer, mark) => equalVector(sessAnswer, mark),\n};\n"],"file":"utils.js"}
1
+ {"version":3,"sources":["../src/utils.js"],"names":["equalPoint","A","B","equalLabel","label","x","y","equalSegment","segment1","segment2","from","to","equalVector","vector1","vector2","sortedAnswers","answers","Object","keys","sort","reduce","result","key","returnLineEquationCoefficients","line","xA","yA","xB","yB","a","b","c","getSignificantDecimals","number","Math","round","equalLine","line1","line2","a1","b1","c1","a2","b2","c2","proportions","push","lodash","uniq","length","equalRay","ray1","ray2","mRay1","mRay2","angleRay1","atan2","PI","angleRay2","constructSegmentsFromPoints","points","map","point","index","removeDuplicateSegments","segments","s1","s2","removeInvalidSegments","filter","segment","equalPolygon","poly1","poly2","points1","points2","segments1","segments2","segments1NoDuplicates","segments2NoDuplicates","differentSegments1","differentSegments2","equalCircle","equalRootAndEdge","edge","root","rC1","sqrt","rC2","equalSine","sine1","sine2","getPoints","amplitude","freq","tY","abs","tXRoot","tX","edgeAboveZeroX","edgeAboveZeroY","min","max","studentAnswerBpY","correctAnswerBpY","amplitude1","freq1","min1","max1","edgeAboveZeroX1","edgeAboveZeroY1","amplitude2","freq2","min2","max2","edgeAboveZeroX2","edgeAboveZeroY2","equalParabola","p1","p2","edgeP1","rootP1","edgeP2","rootP2","p1edge","p2edge","p1mirrorEdge","p2mirrorEdge","equalMarks","circle","sessAnswer","mark","parabola","polygon","poly","ray","sine","vector"],"mappings":"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","sourcesContent":["import isEqual from 'lodash/isEqual';\nimport lodash from 'lodash';\nimport uniqWith from 'lodash/uniqWith';\nimport differenceWith from 'lodash/differenceWith';\nimport { getAmplitudeAndFreq, pointsToABC } from '@pie-lib/graphing-utils';\n\nexport const equalPoint = (A, B) => {\n // x1 = x2 & y1 = y2\n let equalLabel = true;\n\n if (A.label || B.label) {\n equalLabel = isEqual(A.label, B.label);\n }\n\n return isEqual(A.x, B.x) && isEqual(A.y, B.y) && equalLabel;\n};\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 ((isEqual(segment1.from, segment2.from) && isEqual(segment1.to, segment2.to)) ||\n ((isEqual(segment1.to, segment2.from) && isEqual(segment1.from, segment2.to))));\n};\n\nexport const equalVector = (vector1, vector2) => {\n // A.from = B.from, A.to = B.to;\n // x1 = x3 & y1 = y3 & x2 = x4 & y2 = y4\n return ((isEqual(vector1.from, vector2.from) && isEqual(vector1.to, vector2.to)));\n};\n\n// this function is implemented in configure as well\nexport const sortedAnswers = answers => Object.keys(answers || {}).sort().reduce((result, key) => {\n if (key !== 'correctAnswer') {\n result[key] = answers[key];\n }\n\n return result;\n}, {});\n\nconst returnLineEquationCoefficients = line => {\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\n return {\n a: yB - yA,\n b: xA - xB,\n c: (xB * yA) - (xA * yB)\n };\n};\n\nconst getSignificantDecimals = number => Math.round(number * 10000) / 10000;\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\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\n const { a: a1, b: b1, c: c1 } = returnLineEquationCoefficients(line1);\n const { a: a2, b: b2, c: c2 } = returnLineEquationCoefficients(line2);\n\n const proportions = [];\n\n if (a2 !== 0) {\n proportions.push(getSignificantDecimals((a1 / a2)));\n } else if (a1 !== a2) {\n return false;\n }\n\n if (b2 !== 0) {\n proportions.push(getSignificantDecimals((b1 / b2)));\n } else if (b1 !== b2) {\n return false;\n }\n\n if (c2 !== 0) {\n proportions.push(getSignificantDecimals(c1 / c2));\n } else if (c1 !== c2) {\n return false;\n }\n\n return lodash.uniq(proportions).length === 1;\n\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\nexport const equalRay = (ray1, ray2) => {\n // slope: m = (y2-y1)/(x2-x1)\n // slope & x1 = x3 & y1 = y3 & angle between (x1, y1) (x2, y2) is same as angle between (x3, y3) (x4, y4)\n const mRay1 = (ray1.to.y - ray1.from.y) / (ray1.to.x - ray1.from.x);\n const mRay2 = (ray2.to.y - ray2.from.y) / (ray2.to.x - ray2.from.x);\n const angleRay1 = Math.atan2(ray1.to.y - ray1.from.y, ray1.to.x - ray1.from.x) * 180 / Math.PI;\n const angleRay2 = Math.atan2(ray2.to.y - ray2.from.y, ray2.to.x - ray2.from.x) * 180 / Math.PI;\n\n return mRay1 === mRay2 && ray1.from.x === ray2.from.x && ray1.from.y === ray2.from.y && angleRay1 === angleRay2;\n};\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\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\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\n return segments.filter(segment => !isEqual(segment.from, segment.to));\n};\n\nexport const equalPolygon = (poly1, poly2) => {\n const { points: points1 } = poly1;\n const { points: points2 } = poly2;\n\n // generate segments\n const segments1 = constructSegmentsFromPoints(points1);\n const segments2 = constructSegmentsFromPoints(points2);\n\n const segments1NoDuplicates = removeDuplicateSegments(removeInvalidSegments(segments1));\n const segments2NoDuplicates = removeDuplicateSegments(removeInvalidSegments(segments2));\n\n const differentSegments1 = differenceWith(segments1NoDuplicates, segments2NoDuplicates, equalSegment);\n const differentSegments2 = differenceWith(segments2NoDuplicates, segments1NoDuplicates, equalSegment);\n\n return (!differentSegments1 || !differentSegments1.length) && (!differentSegments2 || !differentSegments2.length);\n};\n\nexport const equalCircle = (c1, c2) => {\n const equalRootAndEdge = isEqual(c2.edge, c1.edge) && isEqual(c2.root, c1.root);\n\n // if both edge and root are the same, it means the shapes are exactly the same\n if (equalRootAndEdge) return true;\n\n const rC1 = Math.sqrt(((c1.edge.x - c1.root.x) ** 2) + ((c1.edge.y - c1.root.y) ** 2));\n const rC2 = Math.sqrt(((c2.edge.x - c2.root.x) ** 2) + ((c2.edge.y - c2.root.y) ** 2));\n\n // if both root and radius are the same, it means the shapes are equal\n return isEqual(c2.root, c1.root) && isEqual(rC1, rC2);\n};\n\nexport const equalSine = (sine1, sine2) => {\n const getPoints = ({ root, edge }) => {\n const { amplitude, freq } = getAmplitudeAndFreq(root, edge);\n // the height of the sine wave\n const tY = Math.abs(root.y - edge.y) * 2;\n // the distance on x axis between edge and root\n const tXRoot = Math.abs(root.x - edge.x);\n // the distance on x axis between 2 edges for sine wave (min & max)\n const tX = tXRoot * 2;\n // the first edge placed east side of root\n let edgeAboveZeroX = edge.x;\n let edgeAboveZeroY = edge.y;\n\n // if edge less then 0, find out the appropriate edge placed east side of zero (0)\n while (edgeAboveZeroX < 0 && tX !== 0) {\n edgeAboveZeroX = edgeAboveZeroX + tX;\n edgeAboveZeroY = edgeAboveZeroY < root.y ? edgeAboveZeroY + tY : edgeAboveZeroY - tY;\n }\n\n // if edge more then 0, find out the appropriate edge placed east side of zero (0)\n while (edgeAboveZeroX - tX > 0 && tX !== 0) {\n edgeAboveZeroX = edgeAboveZeroX - tX;\n edgeAboveZeroY = edgeAboveZeroY < root.y ? edgeAboveZeroY + tY : edgeAboveZeroY - tY;\n }\n\n return {\n amplitude: getSignificantDecimals(amplitude),\n freq: getSignificantDecimals(freq),\n min: getSignificantDecimals(edge.y < root.y ? edge.y : edge.y - tY),\n max: getSignificantDecimals(edge.y < root.y ? edge.y + tY : edge.y),\n edgeAboveZeroX: getSignificantDecimals(edgeAboveZeroX),\n edgeAboveZeroY: getSignificantDecimals(edgeAboveZeroY)\n };\n };\n\n const studentAnswerBpY = getPoints(sine1);\n const correctAnswerBpY = getPoints(sine2);\n\n const {\n amplitude: amplitude1,\n freq: freq1,\n min: min1,\n max: max1,\n edgeAboveZeroX: edgeAboveZeroX1,\n edgeAboveZeroY: edgeAboveZeroY1\n } = studentAnswerBpY;\n const {\n amplitude: amplitude2,\n freq: freq2,\n min: min2,\n max: max2,\n edgeAboveZeroX: edgeAboveZeroX2,\n edgeAboveZeroY: edgeAboveZeroY2\n } = correctAnswerBpY;\n\n return (Math.abs(amplitude1) === Math.abs(amplitude2) &&\n Math.abs(freq1) === Math.abs(freq2) &&\n min1 === min2 && max1 === max2 &&\n edgeAboveZeroX1 === edgeAboveZeroX2 &&\n edgeAboveZeroY1 === edgeAboveZeroY2);\n // rootDiff1 === rootDiff2);\n};\n\nexport const equalParabola = (p1, p2) => {\n const { edge: edgeP1, root: rootP1 } = p1;\n const { edge: edgeP2, root: rootP2 } = p2;\n const p1edge = edgeP1 || { ...rootP1 };\n const p2edge = edgeP2 || { ...rootP2 };\n\n const p1mirrorEdge = { x: rootP1.x - (p1edge.x - rootP1.x), y: p1edge.y };\n const p2mirrorEdge = { x: rootP2.x - (p2edge.x - rootP2.x), y: p2edge.y };\n\n const { a: a1, b: b1, c: c1 } = pointsToABC(rootP1, edgeP1, p1mirrorEdge);\n const { a: a2, b: b2, c: c2 } = pointsToABC(rootP2, edgeP2, p2mirrorEdge);\n\n // sometimes numbers have this form: 1.00000000002 because of calculations, we have to round them\n const round = number => Math.round(number * 10000) / 10000;\n\n return round(a1) === round(a2) && round(b1) === round(b2) && round(c1) === round(c2);\n};\n\nexport const equalMarks = {\n circle: (sessAnswer, mark) => equalCircle(sessAnswer, mark),\n line: (sessAnswer, mark) => equalLine(sessAnswer, mark),\n parabola: (sessAnswer, mark) => equalParabola(sessAnswer, mark),\n point: (sessAnswer, mark) => equalPoint(sessAnswer, mark),\n polygon: (sessAnswer, poly) => equalPolygon(sessAnswer, poly),\n ray: (sessAnswer, mark) => equalRay(sessAnswer, mark),\n segment: (sessAnswer, mark) => equalSegment(sessAnswer, mark),\n sine: (sessAnswer, mark) => equalSine(sessAnswer, mark),\n vector: (sessAnswer, mark) => equalVector(sessAnswer, mark),\n};\n"],"file":"utils.js"}