@pie-element/graphing 9.0.0-next.42 → 9.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/configure.js +2 -2
- package/configure/lib/configure.js.map +1 -1
- package/configure/lib/correct-response.js +4 -4
- package/configure/lib/correct-response.js.map +1 -1
- package/configure/lib/defaults.js +3 -0
- package/configure/lib/defaults.js.map +1 -1
- package/configure/lib/graphing-config.js +2 -2
- package/configure/lib/graphing-config.js.map +1 -1
- package/configure/lib/index.js +2 -2
- package/configure/lib/index.js.map +1 -1
- package/configure/lib/utils.js +3 -4
- package/configure/lib/utils.js.map +1 -1
- package/configure/package.json +8 -8
- package/controller/lib/index.js +11 -13
- package/controller/lib/index.js.map +1 -1
- package/controller/lib/utils.js +14 -18
- package/controller/lib/utils.js.map +1 -1
- package/controller/package.json +3 -3
- package/package.json +12 -9
- package/module/configure.js +0 -1
- package/module/controller.js +0 -41027
- package/module/demo.js +0 -106
- package/module/element.js +0 -1
- package/module/index.html +0 -21
- package/module/manifest.json +0 -26
- package/module/print-demo.js +0 -144
- package/module/print.html +0 -18
package/configure/lib/index.js
CHANGED
|
@@ -13,7 +13,7 @@ var _pieConfigureEvents = require("@pie-framework/pie-configure-events");
|
|
|
13
13
|
var _debug = _interopRequireDefault(require("debug"));
|
|
14
14
|
var _defaults = _interopRequireDefault(require("./defaults"));
|
|
15
15
|
var _mathRendering = require("@pie-lib/math-rendering");
|
|
16
|
-
var
|
|
16
|
+
var _lodashEs = require("lodash-es");
|
|
17
17
|
const log = (0, _debug.default)('pie-elements:graphing:configure');
|
|
18
18
|
|
|
19
19
|
// this function is implemented in controller as well
|
|
@@ -64,7 +64,7 @@ class GraphLinesConfigure extends HTMLElement {
|
|
|
64
64
|
}
|
|
65
65
|
set model(m) {
|
|
66
66
|
this._model = GraphLinesConfigure.createDefaultModel(m);
|
|
67
|
-
this._modelCopy = (0,
|
|
67
|
+
this._modelCopy = (0, _lodashEs.cloneDeep)(this._model);
|
|
68
68
|
this._render();
|
|
69
69
|
}
|
|
70
70
|
set configuration(c) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","names":["_react","_interopRequireDefault","require","_client","_configure","_pieConfigureEvents","_debug","_defaults","_mathRendering","_cloneDeep","log","debug","sortedAnswers","answers","Object","keys","sort","reduce","result","key","GraphLinesConfigure","HTMLElement","constructor","_defineProperty2","default","pieAuthors","document","querySelectorAll","hasPlayerAsParent","Array","from","some","author","contains","_modelCopy","_model","model","_render","dispatchEvent","ModelUpdatedEvent","config","_configuration","handler","InsertImageEvent","src","done","DeleteImageEvent","_root","createDefaultModel","defaultValues","configuration","m","cloneDeep","c","resetModelAfterConfigurationIsSet","language","enabled","languageChoices","options","length","value","settings","insertSound","InsertSoundEvent","onDeleteSound","DeleteSoundEvent","el","React","createElement","Configure","onModelChanged","onConfigurationChanged","imageSupport","add","insertImage","delete","onDeleteImage","uploadSoundSupport","bind","createRoot","render","queueMicrotask","renderMath","disconnectedCallback","unmount","exports","normalizedModel","domain","defaultTool","graph","range","standardGrid","toolbarTools","toolbarToolsNoLabel","filter","tool","normalizedDefaultTool","correctAnswer","min","max","step","labelStep","height","width"],"sources":["../src/index.js"],"sourcesContent":["import React from 'react';\nimport { createRoot } from 'react-dom/client';\nimport Configure from './configure';\nimport {\n DeleteImageEvent,\n DeleteSoundEvent,\n InsertImageEvent,\n InsertSoundEvent,\n ModelUpdatedEvent,\n} from '@pie-framework/pie-configure-events';\nimport debug from 'debug';\nimport defaultValues from './defaults';\nimport { renderMath } from '@pie-lib/math-rendering';\nimport cloneDeep from 'lodash/cloneDeep';\n\nconst log = debug('pie-elements:graphing:configure');\n\n// this function is implemented in controller as well\nconst sortedAnswers = (answers) =>\n Object.keys(answers || {})\n .sort()\n .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 normalizedModel = { ...defaultValues.model, ...model };\n const {\n answers = {},\n domain = {},\n defaultTool,\n graph = {},\n range = {},\n standardGrid,\n toolbarTools,\n } = normalizedModel;\n\n // added support for models without defaultTool defined; also used in packages/graphing/controller/src/index.js\n const toolbarToolsNoLabel = (toolbarTools || []).filter((tool) => tool !== 'label');\n const normalizedDefaultTool = defaultTool || (toolbarToolsNoLabel.length && toolbarToolsNoLabel[0]) || '';\n\n return {\n ...normalizedModel,\n answers:\n (answers &&\n answers.correctAnswer && {\n correctAnswer: answers.correctAnswer,\n ...sortedAnswers(answers),\n }) ||\n answers,\n defaultTool: normalizedDefaultTool,\n range:\n (standardGrid && {\n ...range,\n min: domain.min,\n max: domain.max,\n step: domain.step,\n labelStep: domain.labelStep,\n }) ||\n range,\n graph: (standardGrid && { ...graph, height: graph.width }) || graph,\n };\n };\n\n constructor() {\n super();\n this._root = null;\n this._model = GraphLinesConfigure.createDefaultModel();\n this._configuration = defaultValues.configuration;\n }\n\n set model(m) {\n this._model = GraphLinesConfigure.createDefaultModel(m);\n this._modelCopy = cloneDeep(this._model);\n\n this._render();\n }\n\n resetModelAfterConfigurationIsSet = () => {\n // In environments that use pie-player-components, model is set before configuration.\n // This is the reason why sometimes the model gets altered non-reversible\n // (altered using default configuration instead of client configuration, because at that point client configuration was not set yet)\n // Therefore, in such environments, we will make sure to keep a modelCopy (initialised in set model) and use it to reset\n // the model in set configuration (resetModelAfterConfigurationIsSet) if set configuration is ever called\n const pieAuthors = document.querySelectorAll('pie-author');\n this.hasPlayerAsParent = Array.from(pieAuthors).some((author) => author.contains(this));\n\n if (this.hasPlayerAsParent) {\n if (this._modelCopy) {\n this._model = this._modelCopy;\n } else {\n delete this._modelCopy;\n }\n }\n };\n\n set configuration(c) {\n this._configuration = {\n ...defaultValues.configuration,\n ...c,\n };\n\n this.resetModelAfterConfigurationIsSet();\n\n // if language:enabled is true, then the corresponding default item model should include a language value;\n // if it is false, then the language field should be omitted from the item model.\n // if a default item model includes a language value (e.g., en_US) and the corresponding authoring view settings have language:settings = true,\n // then (a) language:enabled should also be true, and (b) that default language value should be represented in languageChoices[] (as a key).\n //TODO: add logic in controller and add tests\n if (c.language?.enabled) {\n if (c.languageChoices?.options?.length) {\n this._model.language = c.languageChoices.options[0].value;\n }\n } else {\n if (c.language.settings) {\n if (this._model.language) {\n this._configuration.language.enabled = true;\n }\n } else {\n delete this._model.language;\n }\n }\n\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 insertSound(handler) {\n this.dispatchEvent(new InsertSoundEvent(handler));\n }\n\n onDeleteSound(src, done) {\n this.dispatchEvent(new DeleteSoundEvent(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 uploadSoundSupport: {\n add: this.insertSound.bind(this),\n delete: this.onDeleteSound.bind(this),\n },\n });\n\n if (!this._root) {\n this._root = createRoot(this);\n }\n this._root.render(el);\n queueMicrotask(() => {\n renderMath(this);\n });\n }\n }\n\n disconnectedCallback() {\n if (this._root) {\n this._root.unmount();\n }\n }\n}\n"],"mappings":"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","ignoreList":[]}
|
|
1
|
+
{"version":3,"file":"index.js","names":["_react","_interopRequireDefault","require","_client","_configure","_pieConfigureEvents","_debug","_defaults","_mathRendering","_lodashEs","log","debug","sortedAnswers","answers","Object","keys","sort","reduce","result","key","GraphLinesConfigure","HTMLElement","constructor","_defineProperty2","default","pieAuthors","document","querySelectorAll","hasPlayerAsParent","Array","from","some","author","contains","_modelCopy","_model","model","_render","dispatchEvent","ModelUpdatedEvent","config","_configuration","handler","InsertImageEvent","src","done","DeleteImageEvent","_root","createDefaultModel","defaultValues","configuration","m","cloneDeep","c","resetModelAfterConfigurationIsSet","language","enabled","languageChoices","options","length","value","settings","insertSound","InsertSoundEvent","onDeleteSound","DeleteSoundEvent","el","React","createElement","Configure","onModelChanged","onConfigurationChanged","imageSupport","add","insertImage","delete","onDeleteImage","uploadSoundSupport","bind","createRoot","render","queueMicrotask","renderMath","disconnectedCallback","unmount","exports","normalizedModel","domain","defaultTool","graph","range","standardGrid","toolbarTools","toolbarToolsNoLabel","filter","tool","normalizedDefaultTool","correctAnswer","min","max","step","labelStep","height","width"],"sources":["../src/index.js"],"sourcesContent":["import React from 'react';\nimport { createRoot } from 'react-dom/client';\nimport Configure from './configure';\nimport {\n DeleteImageEvent,\n DeleteSoundEvent,\n InsertImageEvent,\n InsertSoundEvent,\n ModelUpdatedEvent,\n} from '@pie-framework/pie-configure-events';\nimport debug from 'debug';\nimport defaultValues from './defaults';\nimport { renderMath } from '@pie-lib/math-rendering';\nimport { cloneDeep } from 'lodash-es';\n\nconst log = debug('pie-elements:graphing:configure');\n\n// this function is implemented in controller as well\nconst sortedAnswers = (answers) =>\n Object.keys(answers || {})\n .sort()\n .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 normalizedModel = { ...defaultValues.model, ...model };\n const {\n answers = {},\n domain = {},\n defaultTool,\n graph = {},\n range = {},\n standardGrid,\n toolbarTools,\n } = normalizedModel;\n\n // added support for models without defaultTool defined; also used in packages/graphing/controller/src/index.js\n const toolbarToolsNoLabel = (toolbarTools || []).filter((tool) => tool !== 'label');\n const normalizedDefaultTool = defaultTool || (toolbarToolsNoLabel.length && toolbarToolsNoLabel[0]) || '';\n\n return {\n ...normalizedModel,\n answers:\n (answers &&\n answers.correctAnswer && {\n correctAnswer: answers.correctAnswer,\n ...sortedAnswers(answers),\n }) ||\n answers,\n defaultTool: normalizedDefaultTool,\n range:\n (standardGrid && {\n ...range,\n min: domain.min,\n max: domain.max,\n step: domain.step,\n labelStep: domain.labelStep,\n }) ||\n range,\n graph: (standardGrid && { ...graph, height: graph.width }) || graph,\n };\n };\n\n constructor() {\n super();\n this._root = null;\n this._model = GraphLinesConfigure.createDefaultModel();\n this._configuration = defaultValues.configuration;\n }\n\n set model(m) {\n this._model = GraphLinesConfigure.createDefaultModel(m);\n this._modelCopy = cloneDeep(this._model);\n\n this._render();\n }\n\n resetModelAfterConfigurationIsSet = () => {\n // In environments that use pie-player-components, model is set before configuration.\n // This is the reason why sometimes the model gets altered non-reversible\n // (altered using default configuration instead of client configuration, because at that point client configuration was not set yet)\n // Therefore, in such environments, we will make sure to keep a modelCopy (initialised in set model) and use it to reset\n // the model in set configuration (resetModelAfterConfigurationIsSet) if set configuration is ever called\n const pieAuthors = document.querySelectorAll('pie-author');\n this.hasPlayerAsParent = Array.from(pieAuthors).some((author) => author.contains(this));\n\n if (this.hasPlayerAsParent) {\n if (this._modelCopy) {\n this._model = this._modelCopy;\n } else {\n delete this._modelCopy;\n }\n }\n };\n\n set configuration(c) {\n this._configuration = {\n ...defaultValues.configuration,\n ...c,\n };\n\n this.resetModelAfterConfigurationIsSet();\n\n // if language:enabled is true, then the corresponding default item model should include a language value;\n // if it is false, then the language field should be omitted from the item model.\n // if a default item model includes a language value (e.g., en_US) and the corresponding authoring view settings have language:settings = true,\n // then (a) language:enabled should also be true, and (b) that default language value should be represented in languageChoices[] (as a key).\n //TODO: add logic in controller and add tests\n if (c.language?.enabled) {\n if (c.languageChoices?.options?.length) {\n this._model.language = c.languageChoices.options[0].value;\n }\n } else {\n if (c.language.settings) {\n if (this._model.language) {\n this._configuration.language.enabled = true;\n }\n } else {\n delete this._model.language;\n }\n }\n\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 insertSound(handler) {\n this.dispatchEvent(new InsertSoundEvent(handler));\n }\n\n onDeleteSound(src, done) {\n this.dispatchEvent(new DeleteSoundEvent(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 uploadSoundSupport: {\n add: this.insertSound.bind(this),\n delete: this.onDeleteSound.bind(this),\n },\n });\n\n if (!this._root) {\n this._root = createRoot(this);\n }\n this._root.render(el);\n queueMicrotask(() => {\n renderMath(this);\n });\n }\n }\n\n disconnectedCallback() {\n if (this._root) {\n this._root.unmount();\n }\n }\n}\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.getLabelValues = exports.getGridValues = exports.filterPlotableMarks = exports.applyConstraints = exports.VALID_LABEL_VALUES = void 0;
|
|
8
|
-
var
|
|
7
|
+
var _lodashEs = require("lodash-es");
|
|
9
8
|
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];
|
|
10
9
|
|
|
11
10
|
// same as VALID_GRID_VALUES but next values are excluded: 0.04, 0.0625, 0.125, 3, 4, 8, 12, 15, 40, 64
|
|
@@ -54,7 +53,7 @@ exports.getLabelValues = getLabelValues;
|
|
|
54
53
|
const applyConstraints = (axis, size, oldGridValues, oldLabelValues) => {
|
|
55
54
|
const gridValues = getGridValues(axis, size);
|
|
56
55
|
let labelValues = getLabelValues(axis.step);
|
|
57
|
-
if (!(0,
|
|
56
|
+
if (!(0, _lodashEs.isEqual)(oldGridValues, gridValues) && !gridValues.includes(axis.step)) {
|
|
58
57
|
const preferredValues = getGridValues(axis, size, true);
|
|
59
58
|
const lowestValue = preferredValues[0] || 1;
|
|
60
59
|
axis.step = lowestValue;
|
|
@@ -67,7 +66,7 @@ const applyConstraints = (axis, size, oldGridValues, oldLabelValues) => {
|
|
|
67
66
|
labelValues
|
|
68
67
|
};
|
|
69
68
|
}
|
|
70
|
-
if (!(0,
|
|
69
|
+
if (!(0, _lodashEs.isEqual)(oldLabelValues, labelValues) && !labelValues.includes(axis.labelStep)) {
|
|
71
70
|
axis.labelStep = axis.step;
|
|
72
71
|
}
|
|
73
72
|
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","useAllValues","includes","step","values","filter","value","getLabelValues","applyConstraints","oldGridValues","oldLabelValues","gridValues","labelValues","isEqual","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"],"sources":["../src/utils.js"],"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, 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\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\n // if preferred values should be used enforce all values to be used if the axis step\n // is included in all supported values and not included in preferred values\n const useAllValues =\n prefferedValues && !PREFERRED_VALID_GRID_VALUES.includes(axis.step) && VALID_GRID_VALUES.includes(axis.step);\n const values = !prefferedValues || useAllValues ? VALID_GRID_VALUES : PREFERRED_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\n// also used in pie-lib/graphing/utils as 'getTickValues'\nconst getPlotablePoints = (prop) => {\n const tickValues = [];\n let tickVal = 0;\n\n while (tickVal >= prop.min && tickValues.indexOf(tickVal) < 0) {\n tickValues.push(tickVal);\n tickVal = Math.round((tickVal - prop.step) * 10000) / 10000;\n }\n\n tickVal = Math.round(prop.step * 10000) / 10000;\n\n while (tickVal <= prop.max && tickValues.indexOf(tickVal) < 0) {\n tickValues.push(tickVal);\n tickVal = Math.round((tickVal + prop.step) * 10000) / 10000;\n }\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\n return [];\n};\n\nexport const filterPlotableMarks = (domain, range, answers) => {\n const domainValues = getPlotablePoints(domain);\n const rangeValues = getPlotablePoints(range);\n\n const isPointPlotable = (x, y) => domainValues.includes(x) && rangeValues.includes(y);\n\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\n if (mark.type === 'polygon') {\n return !mark.points.find((point) => !isPointPlotable(point.x, point.y));\n }\n\n const from = mark.from || mark.root;\n const to = mark.to || mark.edge;\n\n return mark.building\n ? isPointPlotable(from.x, from.y)\n : isPointPlotable(from.x, from.y) && isPointPlotable(to.x, to.y);\n }),\n };\n\n return newAnswers;\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","useAllValues","includes","step","values","filter","value","getLabelValues","applyConstraints","oldGridValues","oldLabelValues","gridValues","labelValues","isEqual","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"],"sources":["../src/utils.js"],"sourcesContent":["import { isEqual } from 'lodash-es';\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, 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\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\n // if preferred values should be used enforce all values to be used if the axis step\n // is included in all supported values and not included in preferred values\n const useAllValues =\n prefferedValues && !PREFERRED_VALID_GRID_VALUES.includes(axis.step) && VALID_GRID_VALUES.includes(axis.step);\n const values = !prefferedValues || useAllValues ? VALID_GRID_VALUES : PREFERRED_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\n// also used in pie-lib/graphing/utils as 'getTickValues'\nconst getPlotablePoints = (prop) => {\n const tickValues = [];\n let tickVal = 0;\n\n while (tickVal >= prop.min && tickValues.indexOf(tickVal) < 0) {\n tickValues.push(tickVal);\n tickVal = Math.round((tickVal - prop.step) * 10000) / 10000;\n }\n\n tickVal = Math.round(prop.step * 10000) / 10000;\n\n while (tickVal <= prop.max && tickValues.indexOf(tickVal) < 0) {\n tickValues.push(tickVal);\n tickVal = Math.round((tickVal + prop.step) * 10000) / 10000;\n }\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\n return [];\n};\n\nexport const filterPlotableMarks = (domain, range, answers) => {\n const domainValues = getPlotablePoints(domain);\n const rangeValues = getPlotablePoints(range);\n\n const isPointPlotable = (x, y) => domainValues.includes(x) && rangeValues.includes(y);\n\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\n if (mark.type === 'polygon') {\n return !mark.points.find((point) => !isPointPlotable(point.x, point.y));\n }\n\n const from = mark.from || mark.root;\n const to = mark.to || mark.edge;\n\n return mark.building\n ? isPointPlotable(from.x, from.y)\n : isPointPlotable(from.x, from.y) && isPointPlotable(to.x, to.y);\n }),\n };\n\n return newAnswers;\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-configure",
|
|
3
3
|
"private": true,
|
|
4
|
-
"version": "8.
|
|
4
|
+
"version": "8.1.0-next.0",
|
|
5
5
|
"description": "",
|
|
6
6
|
"main": "lib/index.js",
|
|
7
7
|
"module": "src/index.js",
|
|
@@ -12,17 +12,17 @@
|
|
|
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": "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": "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
|
-
"lodash": "^4.17.
|
|
22
|
+
"lodash-es": "^4.17.23",
|
|
23
23
|
"prop-types": "^15.8.1",
|
|
24
|
-
"react": "18.
|
|
25
|
-
"react-dom": "18.
|
|
24
|
+
"react": "18.3.1",
|
|
25
|
+
"react-dom": "18.3.1"
|
|
26
26
|
},
|
|
27
27
|
"scripts": {
|
|
28
28
|
"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
|
var _controllerUtils = require("@pie-lib/controller-utils");
|
|
@@ -51,7 +49,7 @@ const getAnswerCorrected = ({
|
|
|
51
49
|
}) => {
|
|
52
50
|
sessionAnswers = sessionAnswers || [];
|
|
53
51
|
correctAnswers = correctAnswers || [];
|
|
54
|
-
const rez = (0,
|
|
52
|
+
const rez = (0, _lodashEs.cloneDeep)(sessionAnswers).reduce((correctedAnswer, answer) => {
|
|
55
53
|
const answerIsCorrect = correctAnswers.find(mark => compareMarks(answer, mark));
|
|
56
54
|
answer.correctness = answerIsCorrect ? 'correct' : 'incorrect';
|
|
57
55
|
if (answerIsCorrect) {
|
|
@@ -63,7 +61,7 @@ const getAnswerCorrected = ({
|
|
|
63
61
|
}, []);
|
|
64
62
|
|
|
65
63
|
// add missing objects from correct answer
|
|
66
|
-
const missingAnswers = (0,
|
|
64
|
+
const missingAnswers = (0, _lodashEs.cloneDeep)(correctAnswers).reduce((correctedAnswer, answer) => {
|
|
67
65
|
const answerIndex = sessionAnswers.find(mark => compareMarks(answer, mark));
|
|
68
66
|
if (!answerIndex) {
|
|
69
67
|
// means that corrected answer is missing from session, so we mark it as missing object
|
|
@@ -116,7 +114,7 @@ const getBestAnswer = (question, session, env = {}) => {
|
|
|
116
114
|
answer = answer.filter(mark => !mark.building);
|
|
117
115
|
|
|
118
116
|
// initialize one possible answer if no values
|
|
119
|
-
if ((0,
|
|
117
|
+
if ((0, _lodashEs.isEmpty)(questionPossibleAnswers)) {
|
|
120
118
|
questionPossibleAnswers = {
|
|
121
119
|
correctAnswer: initializeGraphMap()
|
|
122
120
|
};
|
|
@@ -132,7 +130,7 @@ const getBestAnswer = (question, session, env = {}) => {
|
|
|
132
130
|
});
|
|
133
131
|
|
|
134
132
|
// student's answers without DUPLICATES
|
|
135
|
-
const sessionAnswers = (0,
|
|
133
|
+
const sessionAnswers = (0, _lodashEs.uniqWith)(answer, compareMarks);
|
|
136
134
|
// array of possible answers entries
|
|
137
135
|
const possibleAnswers = Object.entries(questionPossibleAnswers);
|
|
138
136
|
return possibleAnswers.reduce((acc, entry) => {
|
|
@@ -180,7 +178,7 @@ const getBestAnswer = (question, session, env = {}) => {
|
|
|
180
178
|
bestScore: 0,
|
|
181
179
|
bestScoreAnswerKey: null,
|
|
182
180
|
// initially we just suppose all the answers are incorrect
|
|
183
|
-
answersCorrected: (0,
|
|
181
|
+
answersCorrected: (0, _lodashEs.cloneDeep)(sessionAnswers).map(answer => ({
|
|
184
182
|
...answer,
|
|
185
183
|
correctness: 'incorrect'
|
|
186
184
|
})),
|
|
@@ -253,7 +251,7 @@ function model(question, session, env) {
|
|
|
253
251
|
rationale: null,
|
|
254
252
|
size: graph,
|
|
255
253
|
showKeyLegend: env.mode === 'evaluate',
|
|
256
|
-
showToggle: env.mode === 'evaluate' && !(0,
|
|
254
|
+
showToggle: env.mode === 'evaluate' && !(0, _lodashEs.isEmpty)(answers) && answers.correctAnswer && answers.correctAnswer.marks && !(0, _lodashEs.isEmpty)(answers.correctAnswer.marks),
|
|
257
255
|
teacherInstructions: null,
|
|
258
256
|
toolbarTools,
|
|
259
257
|
extraCSSRules
|
|
@@ -269,7 +267,7 @@ function model(question, session, env) {
|
|
|
269
267
|
base.teacherInstructions = teacherInstructionsEnabled ? teacherInstructions : null;
|
|
270
268
|
}
|
|
271
269
|
if (mode === 'evaluate') {
|
|
272
|
-
if (!(0,
|
|
270
|
+
if (!(0, _lodashEs.isEmpty)(answers) && answers.correctAnswer && answers.correctAnswer.marks && !(0, _lodashEs.isEmpty)(answers.correctAnswer.marks)) {
|
|
273
271
|
const {
|
|
274
272
|
answersCorrected,
|
|
275
273
|
bestScoreAnswerKey,
|
|
@@ -290,13 +288,13 @@ function model(question, session, env) {
|
|
|
290
288
|
}
|
|
291
289
|
function outcome(question, session, env = {}) {
|
|
292
290
|
return new Promise(resolve => {
|
|
293
|
-
if (!session || (0,
|
|
291
|
+
if (!session || (0, _lodashEs.isEmpty)(session)) {
|
|
294
292
|
resolve({
|
|
295
293
|
score: 0,
|
|
296
294
|
empty: true
|
|
297
295
|
});
|
|
298
296
|
}
|
|
299
|
-
if (env.mode !== 'evaluate' || (0,
|
|
297
|
+
if (env.mode !== 'evaluate' || (0, _lodashEs.isEmpty)(question.answers) || question.answers && question.answers.correctAnswer && (0, _lodashEs.isEmpty)(question.answers.correctAnswer.marks)) {
|
|
300
298
|
resolve({
|
|
301
299
|
score: 0
|
|
302
300
|
});
|
|
@@ -366,7 +364,7 @@ const validate = (model = {}, config = {}) => {
|
|
|
366
364
|
});
|
|
367
365
|
}
|
|
368
366
|
});
|
|
369
|
-
if (!(0,
|
|
367
|
+
if (!(0, _lodashEs.isEmpty)(correctAnswerErrors)) {
|
|
370
368
|
errors.correctAnswerErrors = correctAnswerErrors;
|
|
371
369
|
}
|
|
372
370
|
return errors;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","names":["_debug","_interopRequireDefault","require","_cloneDeep","_uniqWith","_isEmpty","_defaults","_utils","_controllerUtils","log","debug","initializeGraphMap","point","segment","line","ray","vector","polygon","circle","sine","parabola","absolute","exponential","graphObjectsOrder","incorrect","correct","missing","compareMarks","mark1","mark2","type","equalMarks","exports","comparLabelMarks","label","getAnswerCorrected","sessionAnswers","marks","correctAnswers","rez","cloneDeep","reduce","correctedAnswer","answer","answerIsCorrect","find","mark","correctness","correctnesslabel","correctlabel","missingAnswers","answerIndex","getPartialScoring","scoringType","env","pS","partialScoring","enabled","getBestAnswer","question","session","answers","questionPossibleAnswers","Object","entries","forEach","key","value","filter","building","isEmpty","correctAnswer","sortedAnswers","partialScoringEnabled","uniqWith","possibleAnswers","acc","entry","possibleAnswerKey","possibleAnswer","length","correctMarks","scoredCorrectedAnswer","maxScore","score","bestScore","foundOneSolution","parseFloat","toFixed","Math","floor","bestScoreAnswerKey","answersCorrected","map","normalize","defaults","model","Promise","resolve","normalizedQuestion","undefined","defaultTool","extraCSSRules","prompt","promptEnabled","graph","toolbarTools","questionProps","arrows","mode","role","left","right","up","down","toolbarToolsNoLabel","tool","normalizedDefaultTool","base","disabled","rationale","size","showKeyLegend","showToggle","teacherInstructions","rationaleEnabled","teacherInstructionsEnabled","sort","a","b","correctResponse","outcome","empty","createCorrectResponseSession","values","id","getInnerText","html","replaceAll","getContent","replace","validate","config","errors","correctAnswerErrors","toolbarToolsError","field","required"],"sources":["../src/index.js"],"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 absolute: [],\n exponential: [],\n});\n\nconst graphObjectsOrder = {\n incorrect: 0,\n correct: 1,\n missing: 2,\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 !!(\n mark1 &&\n mark2 &&\n mark1.type === mark2.type &&\n equalMarks[mark1.type] &&\n equalMarks[mark1.type](mark1, mark2)\n );\n};\n\nexport const comparLabelMarks = (mark1, mark2) => {\n return mark1.label === mark2.label ? 'correct' : 'incorrect';\n};\n\nexport const getAnswerCorrected = ({ sessionAnswers, marks: correctAnswers }) => {\n sessionAnswers = sessionAnswers || [];\n correctAnswers = correctAnswers || [];\n\n const rez = cloneDeep(sessionAnswers).reduce((correctedAnswer, answer) => {\n const answerIsCorrect = correctAnswers.find((mark) => compareMarks(answer, mark));\n\n answer.correctness = answerIsCorrect ? 'correct' : 'incorrect';\n if (answerIsCorrect) {\n answer.correctnesslabel = comparLabelMarks(answer, answerIsCorrect);\n answer.correctlabel = answerIsCorrect.label ? answerIsCorrect.label : '';\n answer.label = answer.label ? answer.label : '';\n }\n return [...correctedAnswer, answer];\n }, []);\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\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\n return correctedAnswer;\n }, []);\n\n return [...rez, ...missingAnswers];\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 // 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\n // initialize answer if no values\n answer = answer || [];\n\n //filter the incomplete objects for student response - Fix for SC-33160\n answer = answer.filter((mark) => !mark.building);\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(\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\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 // 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\n const maxScore = marks.length;\n let score = correctMarks.length;\n\n // if extra placements\n if (scoredCorrectedAnswer.length > maxScore) {\n score -= scoredCorrectedAnswer.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 {\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\nexport const normalize = (question) => ({ ...defaults, ...question });\n\nexport function model(question, session, env) {\n return new Promise((resolve) => {\n const normalizedQuestion = normalize(question);\n\n // added a sanity check for session for environments where it is not passed initially (ex. pie-website)\n if (session === undefined || session === null) {\n session = {};\n }\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 // added support for models without defaultTool defined; also used in packages/graphing/configure/src/index.js\n const toolbarToolsNoLabel = (toolbarTools || []).filter((tool) => tool !== 'label');\n const normalizedDefaultTool = defaultTool || (toolbarToolsNoLabel.length && toolbarToolsNoLabel[0]) || '';\n\n const base = {\n ...questionProps,\n answers,\n arrows,\n defaultTool: normalizedDefaultTool,\n disabled: env.mode !== 'gather',\n prompt: promptEnabled ? prompt : null,\n rationale: null,\n size: graph,\n showKeyLegend: env.mode === 'evaluate',\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.sort(\n (a, b) => graphObjectsOrder[a.correctness] - graphObjectsOrder[b.correctness],\n );\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 (\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\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 correctAnswer = answers.correctAnswer || Object.values(answers)[0] || {};\n marks = correctAnswer.marks || [];\n }\n\n resolve({\n answer: marks,\n id: '1',\n });\n } else {\n resolve(null);\n }\n });\n};\n\n// remove all html tags\nconst getInnerText = (html) => (html || '').replaceAll(/<[^>]*>/g, '');\n\n// remove all html tags except img, iframe and source tag for audio\nconst getContent = (html) => (html || '').replace(/(<(?!img|iframe|source)([^>]+)>)/gi, '');\n\nexport const validate = (model = {}, config = {}) => {\n const { answers, toolbarTools } = model;\n const errors = {};\n const correctAnswerErrors = {};\n const toolbarToolsNoLabel = (toolbarTools || []).filter((tool) => tool !== 'label');\n\n if (!toolbarToolsNoLabel.length) {\n errors.toolbarToolsError = 'There should be at least 1 tool defined.';\n }\n\n ['teacherInstructions', 'prompt', 'rationale'].forEach((field) => {\n if (config[field]?.required && !getContent(model[field])) {\n errors[field] = 'This field is required.';\n }\n });\n\n Object.entries(answers || {}).forEach(([key, value]) => {\n if (!value.marks.length) {\n correctAnswerErrors[key] = 'At least 1 graph object should be defined.';\n }\n\n // check if all graph objects are correctly defined with respect to root, edge and from, to\n if (value.marks.length > 0) {\n value.marks.forEach((mark) => {\n if (mark.building) {\n correctAnswerErrors[key] = 'At least 1 graph object is not correctly defined.';\n }\n });\n }\n });\n\n if (!isEmpty(correctAnswerErrors)) {\n errors.correctAnswerErrors = correctAnswerErrors;\n }\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","_controllerUtils","log","debug","initializeGraphMap","point","segment","line","ray","vector","polygon","circle","sine","parabola","absolute","exponential","graphObjectsOrder","incorrect","correct","missing","compareMarks","mark1","mark2","type","equalMarks","exports","comparLabelMarks","label","getAnswerCorrected","sessionAnswers","marks","correctAnswers","rez","cloneDeep","reduce","correctedAnswer","answer","answerIsCorrect","find","mark","correctness","correctnesslabel","correctlabel","missingAnswers","answerIndex","getPartialScoring","scoringType","env","pS","partialScoring","enabled","getBestAnswer","question","session","answers","questionPossibleAnswers","Object","entries","forEach","key","value","filter","building","isEmpty","correctAnswer","sortedAnswers","partialScoringEnabled","uniqWith","possibleAnswers","acc","entry","possibleAnswerKey","possibleAnswer","length","correctMarks","scoredCorrectedAnswer","maxScore","score","bestScore","foundOneSolution","parseFloat","toFixed","Math","floor","bestScoreAnswerKey","answersCorrected","map","normalize","defaults","model","Promise","resolve","normalizedQuestion","undefined","defaultTool","extraCSSRules","prompt","promptEnabled","graph","toolbarTools","questionProps","arrows","mode","role","left","right","up","down","toolbarToolsNoLabel","tool","normalizedDefaultTool","base","disabled","rationale","size","showKeyLegend","showToggle","teacherInstructions","rationaleEnabled","teacherInstructionsEnabled","sort","a","b","correctResponse","outcome","empty","createCorrectResponseSession","values","id","getInnerText","html","replaceAll","getContent","replace","validate","config","errors","correctAnswerErrors","toolbarToolsError","field","required"],"sources":["../src/index.js"],"sourcesContent":["import debug from 'debug';\n\nimport { cloneDeep, isEmpty, uniqWith } from 'lodash-es';\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 absolute: [],\n exponential: [],\n});\n\nconst graphObjectsOrder = {\n incorrect: 0,\n correct: 1,\n missing: 2,\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 !!(\n mark1 &&\n mark2 &&\n mark1.type === mark2.type &&\n equalMarks[mark1.type] &&\n equalMarks[mark1.type](mark1, mark2)\n );\n};\n\nexport const comparLabelMarks = (mark1, mark2) => {\n return mark1.label === mark2.label ? 'correct' : 'incorrect';\n};\n\nexport const getAnswerCorrected = ({ sessionAnswers, marks: correctAnswers }) => {\n sessionAnswers = sessionAnswers || [];\n correctAnswers = correctAnswers || [];\n\n const rez = cloneDeep(sessionAnswers).reduce((correctedAnswer, answer) => {\n const answerIsCorrect = correctAnswers.find((mark) => compareMarks(answer, mark));\n\n answer.correctness = answerIsCorrect ? 'correct' : 'incorrect';\n if (answerIsCorrect) {\n answer.correctnesslabel = comparLabelMarks(answer, answerIsCorrect);\n answer.correctlabel = answerIsCorrect.label ? answerIsCorrect.label : '';\n answer.label = answer.label ? answer.label : '';\n }\n return [...correctedAnswer, answer];\n }, []);\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\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\n return correctedAnswer;\n }, []);\n\n return [...rez, ...missingAnswers];\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 // 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\n // initialize answer if no values\n answer = answer || [];\n\n //filter the incomplete objects for student response - Fix for SC-33160\n answer = answer.filter((mark) => !mark.building);\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(\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\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 // 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\n const maxScore = marks.length;\n let score = correctMarks.length;\n\n // if extra placements\n if (scoredCorrectedAnswer.length > maxScore) {\n score -= scoredCorrectedAnswer.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 {\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\nexport const normalize = (question) => ({ ...defaults, ...question });\n\nexport function model(question, session, env) {\n return new Promise((resolve) => {\n const normalizedQuestion = normalize(question);\n\n // added a sanity check for session for environments where it is not passed initially (ex. pie-website)\n if (session === undefined || session === null) {\n session = {};\n }\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 // added support for models without defaultTool defined; also used in packages/graphing/configure/src/index.js\n const toolbarToolsNoLabel = (toolbarTools || []).filter((tool) => tool !== 'label');\n const normalizedDefaultTool = defaultTool || (toolbarToolsNoLabel.length && toolbarToolsNoLabel[0]) || '';\n\n const base = {\n ...questionProps,\n answers,\n arrows,\n defaultTool: normalizedDefaultTool,\n disabled: env.mode !== 'gather',\n prompt: promptEnabled ? prompt : null,\n rationale: null,\n size: graph,\n showKeyLegend: env.mode === 'evaluate',\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.sort(\n (a, b) => graphObjectsOrder[a.correctness] - graphObjectsOrder[b.correctness],\n );\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 (\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\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 correctAnswer = answers.correctAnswer || Object.values(answers)[0] || {};\n marks = correctAnswer.marks || [];\n }\n\n resolve({\n answer: marks,\n id: '1',\n });\n } else {\n resolve(null);\n }\n });\n};\n\n// remove all html tags\nconst getInnerText = (html) => (html || '').replaceAll(/<[^>]*>/g, '');\n\n// remove all html tags except img, iframe and source tag for audio\nconst getContent = (html) => (html || '').replace(/(<(?!img|iframe|source)([^>]+)>)/gi, '');\n\nexport const validate = (model = {}, config = {}) => {\n const { answers, toolbarTools } = model;\n const errors = {};\n const correctAnswerErrors = {};\n const toolbarToolsNoLabel = (toolbarTools || []).filter((tool) => tool !== 'label');\n\n if (!toolbarToolsNoLabel.length) {\n errors.toolbarToolsError = 'There should be at least 1 tool defined.';\n }\n\n ['teacherInstructions', 'prompt', 'rationale'].forEach((field) => {\n if (config[field]?.required && !getContent(model[field])) {\n errors[field] = 'This field is required.';\n }\n });\n\n Object.entries(answers || {}).forEach(([key, value]) => {\n if (!value.marks.length) {\n correctAnswerErrors[key] = 'At least 1 graph object should be defined.';\n }\n\n // check if all graph objects are correctly defined with respect to root, edge and from, to\n if (value.marks.length > 0) {\n value.marks.forEach((mark) => {\n if (mark.building) {\n correctAnswerErrors[key] = 'At least 1 graph object is not correctly defined.';\n }\n });\n }\n });\n\n if (!isEmpty(correctAnswerErrors)) {\n errors.correctAnswerErrors = correctAnswerErrors;\n }\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.removeDuplicateSegments = exports.equalVector = exports.equalSine = exports.equalSegment = exports.equalRay = exports.equalPolygon = exports.equalPoint = exports.equalParabola = exports.equalMarks = exports.equalLine = exports.equalExponential = exports.equalCircle = exports.equalAbsolute = 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
|
var _graphingUtils = require("@pie-lib/graphing-utils");
|
|
13
9
|
const equalPoint = (A, B) => {
|
|
14
10
|
// x1 = x2 & y1 = y2
|
|
@@ -20,21 +16,21 @@ const equalPoint = (A, B) => {
|
|
|
20
16
|
...B
|
|
21
17
|
};
|
|
22
18
|
if (A.label || B.label) {
|
|
23
|
-
equalLabel = (0,
|
|
19
|
+
equalLabel = (0, _lodashEs.isEqual)(A.label, B.label);
|
|
24
20
|
}
|
|
25
|
-
return (0,
|
|
21
|
+
return (0, _lodashEs.isEqual)(A.x, B.x) && (0, _lodashEs.isEqual)(A.y, B.y);
|
|
26
22
|
};
|
|
27
23
|
exports.equalPoint = equalPoint;
|
|
28
24
|
const equalSegment = (segment1, segment2) => {
|
|
29
25
|
// A.from = B.from, A.to = B.to OR A.from = B.to, A.to = B.from
|
|
30
26
|
// x1 = x3 & y1 = y3 & x2 = x4 & y2 = y4
|
|
31
|
-
return (0,
|
|
27
|
+
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);
|
|
32
28
|
};
|
|
33
29
|
exports.equalSegment = equalSegment;
|
|
34
30
|
const equalVector = (vector1, vector2) => {
|
|
35
31
|
// A.from = B.from, A.to = B.to;
|
|
36
32
|
// x1 = x3 & y1 = y3 & x2 = x4 & y2 = y4
|
|
37
|
-
return (0,
|
|
33
|
+
return (0, _lodashEs.isEqual)(vector1.from, vector2.from) && (0, _lodashEs.isEqual)(vector1.to, vector2.to);
|
|
38
34
|
};
|
|
39
35
|
|
|
40
36
|
// this function is implemented in configure as well
|
|
@@ -101,7 +97,7 @@ const equalLine = (line1, line2) => {
|
|
|
101
97
|
} else if (c1 !== c2) {
|
|
102
98
|
return false;
|
|
103
99
|
}
|
|
104
|
-
return
|
|
100
|
+
return (0, _lodashEs.uniq)(proportions).length === 1;
|
|
105
101
|
|
|
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))));
|
|
@@ -150,14 +146,14 @@ const removeDuplicateSegments = segments => {
|
|
|
150
146
|
// removes segments that are duplicates; eg. These segments are the same, so one will be removed:
|
|
151
147
|
// segment1: from: { x: 1, y: 1 }, to: { x: 2, y: 1 }
|
|
152
148
|
// segment2: from: { x: 2, y: 1 }, to: { x: 1, y: 1 }
|
|
153
|
-
return (0,
|
|
149
|
+
return (0, _lodashEs.uniqWith)(segments, (s1, s2) => equalSegment(s1, s2));
|
|
154
150
|
};
|
|
155
151
|
exports.removeDuplicateSegments = removeDuplicateSegments;
|
|
156
152
|
const removeInvalidSegments = segments => {
|
|
157
153
|
segments = segments || [];
|
|
158
154
|
// removes segments that start in a point and end in the same point (eg.: from: { x: 1, y: 1 }, to: { x: 1, y: 1 })
|
|
159
155
|
|
|
160
|
-
return segments.filter(segment => !(0,
|
|
156
|
+
return segments.filter(segment => !(0, _lodashEs.isEqual)(segment.from, segment.to));
|
|
161
157
|
};
|
|
162
158
|
exports.removeInvalidSegments = removeInvalidSegments;
|
|
163
159
|
const equalPolygon = (poly1, poly2) => {
|
|
@@ -173,8 +169,8 @@ const equalPolygon = (poly1, poly2) => {
|
|
|
173
169
|
const segments2 = constructSegmentsFromPoints(points2);
|
|
174
170
|
const segments1NoDuplicates = removeDuplicateSegments(removeInvalidSegments(segments1));
|
|
175
171
|
const segments2NoDuplicates = removeDuplicateSegments(removeInvalidSegments(segments2));
|
|
176
|
-
const differentSegments1 = (0,
|
|
177
|
-
const differentSegments2 = (0,
|
|
172
|
+
const differentSegments1 = (0, _lodashEs.differenceWith)(segments1NoDuplicates, segments2NoDuplicates, equalSegment);
|
|
173
|
+
const differentSegments2 = (0, _lodashEs.differenceWith)(segments2NoDuplicates, segments1NoDuplicates, equalSegment);
|
|
178
174
|
return (!differentSegments1 || !differentSegments1.length) && (!differentSegments2 || !differentSegments2.length);
|
|
179
175
|
};
|
|
180
176
|
exports.equalPolygon = equalPolygon;
|
|
@@ -197,7 +193,7 @@ const equalCircle = (c1, c2) => {
|
|
|
197
193
|
...c2.edge
|
|
198
194
|
}
|
|
199
195
|
};
|
|
200
|
-
const equalRootAndEdge = (0,
|
|
196
|
+
const equalRootAndEdge = (0, _lodashEs.isEqual)(c2.edge, c1.edge) && (0, _lodashEs.isEqual)(c2.root, c1.root);
|
|
201
197
|
|
|
202
198
|
// if both edge and root are the same, it means the shapes are exactly the same
|
|
203
199
|
if (equalRootAndEdge) return true;
|
|
@@ -205,7 +201,7 @@ const equalCircle = (c1, c2) => {
|
|
|
205
201
|
const rC2 = Math.sqrt((c2.edge.x - c2.root.x) ** 2 + (c2.edge.y - c2.root.y) ** 2);
|
|
206
202
|
|
|
207
203
|
// if both root and radius are the same, it means the shapes are equal
|
|
208
|
-
return (0,
|
|
204
|
+
return (0, _lodashEs.isEqual)(c2.root, c1.root) && (0, _lodashEs.isEqual)(rC1, rC2);
|
|
209
205
|
};
|
|
210
206
|
exports.equalCircle = equalCircle;
|
|
211
207
|
const equalSine = (sine1, sine2) => {
|
|
@@ -361,7 +357,7 @@ const equalAbsolute = (p1, p2) => {
|
|
|
361
357
|
const p2a2 = (0, _graphingUtils.pointsToAForAbsolute)(rootP2, p2edge);
|
|
362
358
|
|
|
363
359
|
// if both root and a value are equal
|
|
364
|
-
return (0,
|
|
360
|
+
return (0, _lodashEs.isEqual)(rootP2, rootP1) && (0, _lodashEs.isEqual)(p2a2, p1a1);
|
|
365
361
|
};
|
|
366
362
|
|
|
367
363
|
/*
|
|
@@ -406,7 +402,7 @@ const equalExponential = (p1, p2) => {
|
|
|
406
402
|
} = (0, _graphingUtils.pointsToABForExponential)(rootP2, p2edge);
|
|
407
403
|
|
|
408
404
|
// if both a and b value are equal
|
|
409
|
-
return (0,
|
|
405
|
+
return (0, _lodashEs.isEqual)(a2, a1) && (0, _lodashEs.isEqual)(b2, b1);
|
|
410
406
|
};
|
|
411
407
|
exports.equalExponential = equalExponential;
|
|
412
408
|
const equalMarks = exports.equalMarks = {
|