@pie-element/graphing 4.8.1-beta.0 → 4.8.1-beta.1

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 +0,0 @@
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","InsertSoundEvent","DeleteSoundEvent","el","React","createElement","Configure","onModelChanged","onConfigurationChanged","imageSupport","add","insertImage","onDeleteImage","uploadSoundSupport","insertSound","bind","onDeleteSound","ReactDOM","render","HTMLElement","normalizedModel","domain","defaultTool","graph","range","standardGrid","toolbarTools","toolbarToolsNoLabel","filter","tool","normalizedDefaultTool","length","correctAnswer","min","max","step","labelStep","height","width"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;AAAA;;AACA;;AACA;;AACA;;AAOA;;AACA;;AACA;;;;;;;;;;AAEA,IAAMA,GAAG,GAAG,uBAAM,iCAAN,CAAZ,C,CAEA;;AACA,IAAMC,aAAa,GAAG,SAAhBA,aAAgB,CAACC,OAAD;AAAA,SACpBC,MAAM,CAACC,IAAP,CAAYF,OAAO,IAAI,EAAvB,EACGG,IADH,GAEGC,MAFH,CAEU,UAACC,MAAD,EAASC,GAAT,EAAiB;AACvB,QAAIA,GAAG,KAAK,eAAZ,EAA6B;AAC3BD,MAAAA,MAAM,CAACC,GAAD,CAAN,GAAcN,OAAO,CAACM,GAAD,CAArB;AACD;;AAED,WAAOD,MAAP;AACD,GARH,EAQK,EARL,CADoB;AAAA,CAAtB;;IAWqBE,mB;;;;;AAwCnB,iCAAc;AAAA;;AAAA;AACZ;AADY,uGAgBG,UAACC,KAAD,EAAW;AAC1B,YAAKC,MAAL,GAAcD,KAAd;;AACA,YAAKE,OAAL;;AAEAZ,MAAAA,GAAG,CAAC,oBAAD,EAAuB,MAAKW,MAA5B,CAAH;;AAEA,YAAKE,aAAL,CAAmB,IAAIC,qCAAJ,CAAsB,MAAKH,MAA3B,CAAnB;AACD,KAvBa;AAAA,+GAyBW,UAACI,MAAD,EAAY;AACnC,YAAKC,cAAL,GAAsBD,MAAtB;;AACA,YAAKH,OAAL;AACD,KA5Ba;AAAA,oGA8BA,UAACK,OAAD,EAAa;AACzB,YAAKJ,aAAL,CAAmB,IAAIK,oCAAJ,CAAqBD,OAArB,CAAnB;AACD,KAhCa;AAAA,sGAkCE,UAACE,GAAD,EAAMC,IAAN,EAAe;AAC7B,YAAKP,aAAL,CAAmB,IAAIQ,oCAAJ,CAAqBF,GAArB,EAA0BC,IAA1B,CAAnB;AACD,KApCa;AAEZ,UAAKT,MAAL,GAAcF,mBAAmB,CAACa,kBAApB,EAAd;AACA,UAAKN,cAAL,GAAsBO,qBAAcC,aAApC;AAHY;AAIb;;;;SAED,aAAUC,CAAV,EAAa;AACX,WAAKd,MAAL,GAAcF,mBAAmB,CAACa,kBAApB,CAAuCG,CAAvC,CAAd;;AACA,WAAKb,OAAL;AACD;;;SAED,aAAkBc,CAAlB,EAAqB;AACnB,WAAKV,cAAL,GAAsBU,CAAtB;;AACA,WAAKd,OAAL;AACD;;;WAwBD,qBAAYK,OAAZ,EAAqB;AACnB,WAAKJ,aAAL,CAAmB,IAAIc,oCAAJ,CAAqBV,OAArB,CAAnB;AACD;;;WAED,uBAAcE,GAAd,EAAmBC,IAAnB,EAAyB;AACvB,WAAKP,aAAL,CAAmB,IAAIe,oCAAJ,CAAqBT,GAArB,EAA0BC,IAA1B,CAAnB;AACD;;;WAED,mBAAU;AAAA;;AACR,UAAI,KAAKT,MAAT,EAAiB;AACf,YAAMkB,EAAE,gBAAGC,kBAAMC,aAAN,CAAoBC,qBAApB,EAA+B;AACxCC,UAAAA,cAAc,EAAE,KAAKA,cADmB;AAExCC,UAAAA,sBAAsB,EAAE,KAAKA,sBAFW;AAGxCxB,UAAAA,KAAK,EAAE,KAAKC,MAH4B;AAIxCa,UAAAA,aAAa,EAAE,KAAKR,cAJoB;AAKxCmB,UAAAA,YAAY,EAAE;AACZC,YAAAA,GAAG,EAAE,KAAKC,WADE;AAEZ,sBAAQ,KAAKC;AAFD,WAL0B;AASxCC,UAAAA,kBAAkB,EAAE;AAClBH,YAAAA,GAAG,EAAE,KAAKI,WAAL,CAAiBC,IAAjB,CAAsB,IAAtB,CADa;AAElB,sBAAQ,KAAKC,aAAL,CAAmBD,IAAnB,CAAwB,IAAxB;AAFU;AAToB,SAA/B,CAAX;;AAeAE,6BAASC,MAAT,CAAgBf,EAAhB,EAAoB,IAApB,EAA0B,YAAM;AAC9B,yCAAW,MAAX;AACD,SAFD;AAGD;AACF;;;kDA3G8CgB,W;;;iCAA5BpC,mB,wBACS,YAAgB;AAAA,MAAfC,KAAe,uEAAP,EAAO;;AAC1C,MAAMoC,eAAe,mCAAQvB,qBAAcb,KAAtB,GAAgCA,KAAhC,CAArB;;AACA,8BAQIoC,eARJ,CACE5C,OADF;AAAA,MACEA,OADF,sCACY,EADZ;AAAA,8BAQI4C,eARJ,CAEEC,MAFF;AAAA,MAEEA,MAFF,sCAEW,EAFX;AAAA,MAGEC,WAHF,GAQIF,eARJ,CAGEE,WAHF;AAAA,8BAQIF,eARJ,CAIEG,KAJF;AAAA,MAIEA,KAJF,sCAIU,EAJV;AAAA,8BAQIH,eARJ,CAKEI,KALF;AAAA,MAKEA,KALF,sCAKU,EALV;AAAA,MAMEC,YANF,GAQIL,eARJ,CAMEK,YANF;AAAA,MAOEC,YAPF,GAQIN,eARJ,CAOEM,YAPF,CAF0C,CAY1C;;AACA,MAAMC,mBAAmB,GAAG,CAACD,YAAY,IAAI,EAAjB,EAAqBE,MAArB,CAA4B,UAACC,IAAD;AAAA,WAAUA,IAAI,KAAK,OAAnB;AAAA,GAA5B,CAA5B;AACA,MAAMC,qBAAqB,GAAGR,WAAW,IAAKK,mBAAmB,CAACI,MAApB,IAA8BJ,mBAAmB,CAAC,CAAD,CAAjE,IAAyE,EAAvG;AAEA,yCACKP,eADL;AAEE5C,IAAAA,OAAO,EACJA,OAAO,IACNA,OAAO,CAACwD,aADT;AAEGA,MAAAA,aAAa,EAAExD,OAAO,CAACwD;AAF1B,OAGMzD,aAAa,CAACC,OAAD,CAHnB,CAAD,IAKAA,OARJ;AASE8C,IAAAA,WAAW,EAAEQ,qBATf;AAUEN,IAAAA,KAAK,EACFC,YAAY,oCACRD,KADQ;AAEXS,MAAAA,GAAG,EAAEZ,MAAM,CAACY,GAFD;AAGXC,MAAAA,GAAG,EAAEb,MAAM,CAACa,GAHD;AAIXC,MAAAA,IAAI,EAAEd,MAAM,CAACc,IAJF;AAKXC,MAAAA,SAAS,EAAEf,MAAM,CAACe;AALP,MAAb,IAOAZ,KAlBJ;AAmBED,IAAAA,KAAK,EAAGE,YAAY,oCAASF,KAAT;AAAgBc,MAAAA,MAAM,EAAEd,KAAK,CAACe;AAA9B,MAAb,IAAuDf;AAnBhE;AAqBD,C","sourcesContent":["import React from 'react';\nimport ReactDOM from 'react-dom';\nimport Configure from './configure';\nimport {\n ModelUpdatedEvent,\n DeleteImageEvent,\n InsertImageEvent,\n InsertSoundEvent,\n DeleteSoundEvent,\n} from '@pie-framework/pie-configure-events';\nimport debug from 'debug';\nimport defaultValues from './defaults';\nimport { renderMath } from '@pie-lib/math-rendering';\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._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 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 ReactDOM.render(el, this, () => {\n renderMath(this);\n });\n }\n }\n}\n"],"file":"index.js"}
@@ -1,165 +0,0 @@
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.filterPlotableMarks = exports.applyConstraints = exports.VALID_LABEL_VALUES = void 0;
9
-
10
- var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
11
-
12
- var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime/helpers/slicedToArray"));
13
-
14
- var _isEqual = _interopRequireDefault(require("lodash/isEqual"));
15
-
16
- 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; }
17
-
18
- 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; }
19
-
20
- 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
21
-
22
- 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];
23
- var VALID_LABEL_VALUES = {
24
- 0.01: [0, 0.01, 0.02, 0.04, 0.05, 0.1],
25
- 0.02: [0, 0.02, 0.04, 0.1],
26
- 0.04: [0, 0.04, 0.08, 0.16, 0.2],
27
- 0.05: [0, 0.05, 0.1, 0.2, 0.25],
28
- 0.0625: [0, 0.0625, 0.125, 0.25, 0.5],
29
- 0.1: [0, 0.1, 0.2, 0.4, 0.5, 1],
30
- 0.125: [0, 0.125, 0.25, 0.5, 1],
31
- 0.2: [0, 0.2, 0.5, 0.1],
32
- 0.25: [0, 0.25, 0.5, 1, 2],
33
- 0.5: [0, 0.5, 1, 2],
34
- 1: [0, 1, 2, 4, 5, 10],
35
- 2: [0, 2, 4, 8, 10],
36
- 3: [0, 3, 6, 12, 15],
37
- 4: [0, 4, 8, 16, 20],
38
- 5: [0, 5, 10, 20, 25],
39
- 8: [0, 8, 16, 32, 40, 64],
40
- 10: [0, 10, 20, 40, 50, 100],
41
- 12: [0, 12, 24],
42
- 15: [0, 15, 30, 60],
43
- 20: [0, 20, 40, 80, 100],
44
- 40: [0, 40, 80, 160, 200],
45
- 50: [0, 50, 100, 200, 250],
46
- 64: [0, 64, 128],
47
- 100: [0, 100, 200, 400, 500],
48
- 500: [0, 500, 1000, 2500],
49
- 1000: [0, 1000, 2000, 4000, 5000]
50
- };
51
- exports.VALID_LABEL_VALUES = VALID_LABEL_VALUES;
52
-
53
- var getGridValues = function getGridValues(axis, size) {
54
- var prefferedValues = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false;
55
- var minValue = 10 * (axis.max - axis.min) / size;
56
- var maxValue = minValue * 10;
57
- var values = prefferedValues ? PREFERRED_VALID_GRID_VALUES : VALID_GRID_VALUES;
58
- return values.filter(function (value) {
59
- return value >= minValue && value <= maxValue;
60
- });
61
- };
62
-
63
- exports.getGridValues = getGridValues;
64
-
65
- var getLabelValues = function getLabelValues(value) {
66
- return VALID_LABEL_VALUES[value] || [];
67
- };
68
-
69
- exports.getLabelValues = getLabelValues;
70
-
71
- var applyConstraints = function applyConstraints(axis, size, oldGridValues, oldLabelValues) {
72
- var gridValues = getGridValues(axis, size);
73
- var labelValues = getLabelValues(axis.step);
74
-
75
- if (!(0, _isEqual["default"])(oldGridValues, gridValues) && !gridValues.includes(axis.step)) {
76
- var preferredValues = getGridValues(axis, size, true);
77
- var lowestValue = preferredValues[0] || 1;
78
- axis.step = lowestValue;
79
- labelValues = getLabelValues(lowestValue);
80
-
81
- if (!labelValues.includes(axis.labelStep)) {
82
- axis.labelStep = lowestValue;
83
- }
84
-
85
- return {
86
- gridValues: gridValues,
87
- labelValues: labelValues
88
- };
89
- }
90
-
91
- if (!(0, _isEqual["default"])(oldLabelValues, labelValues) && !labelValues.includes(axis.labelStep)) {
92
- axis.labelStep = axis.step;
93
- }
94
-
95
- return {
96
- gridValues: gridValues,
97
- labelValues: labelValues
98
- };
99
- }; // also used in pie-lib/graphing/utils as 'getTickValues'
100
-
101
-
102
- exports.applyConstraints = applyConstraints;
103
-
104
- var getPlotablePoints = function getPlotablePoints(prop) {
105
- var tickValues = [];
106
- var tickVal = 0;
107
-
108
- while (tickVal >= prop.min && tickValues.indexOf(tickVal) < 0) {
109
- tickValues.push(tickVal);
110
- tickVal = Math.round((tickVal - prop.step) * 10000) / 10000;
111
- }
112
-
113
- tickVal = Math.round(prop.step * 10000) / 10000;
114
-
115
- while (tickVal <= prop.max && tickValues.indexOf(tickVal) < 0) {
116
- tickValues.push(tickVal);
117
- tickVal = Math.round((tickVal + prop.step) * 10000) / 10000;
118
- } // return only ticks that are inside the min-max interval
119
-
120
-
121
- if (tickValues) {
122
- return tickValues.filter(function (tV) {
123
- return tV >= prop.min && tV <= prop.max;
124
- });
125
- }
126
-
127
- return [];
128
- };
129
-
130
- var filterPlotableMarks = function filterPlotableMarks(domain, range, answers) {
131
- var domainValues = getPlotablePoints(domain);
132
- var rangeValues = getPlotablePoints(range);
133
-
134
- var isPointPlotable = function isPointPlotable(x, y) {
135
- return domainValues.includes(x) && rangeValues.includes(y);
136
- };
137
-
138
- return Object.entries(answers || {}).reduce(function (newAnswers, _ref) {
139
- var _ref2 = (0, _slicedToArray2["default"])(_ref, 2),
140
- key = _ref2[0],
141
- answer = _ref2[1];
142
-
143
- newAnswers[key] = _objectSpread(_objectSpread({}, answer), {}, {
144
- marks: (answer.marks || []).filter(function (mark) {
145
- if (mark.type === 'point') {
146
- return isPointPlotable(mark.x, mark.y);
147
- }
148
-
149
- if (mark.type === 'polygon') {
150
- return !mark.points.find(function (point) {
151
- return !isPointPlotable(point.x, point.y);
152
- });
153
- }
154
-
155
- var from = mark.from || mark.root;
156
- var to = mark.to || mark.edge;
157
- return mark.building ? isPointPlotable(from.x, from.y) : isPointPlotable(from.x, from.y) && isPointPlotable(to.x, to.y);
158
- })
159
- });
160
- return newAnswers;
161
- }, {});
162
- };
163
-
164
- exports.filterPlotableMarks = filterPlotableMarks;
165
- //# sourceMappingURL=utils.js.map
@@ -1 +0,0 @@
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","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"],"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, 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 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\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"],"file":"utils.js"}
@@ -1,55 +0,0 @@
1
- "use strict";
2
-
3
- Object.defineProperty(exports, "__esModule", {
4
- value: true
5
- });
6
- exports["default"] = void 0;
7
- // TODO: This is lifted from @pie-lib/graphing, however importing this will break a controller build because it has jsx source in that package.
8
- var allTools = ['circle', 'line', 'label', 'parabola', 'point', 'polygon', 'ray', 'segment', 'sine', 'vector'];
9
- /* model defaults */
10
-
11
- var _default = {
12
- answers: {},
13
- arrows: {
14
- left: true,
15
- right: true,
16
- up: true,
17
- down: true
18
- },
19
- backgroundMarks: [],
20
- domain: {
21
- min: -5,
22
- max: 5,
23
- step: 1,
24
- labelStep: 1,
25
- axisLabel: 'x'
26
- },
27
- graph: {
28
- width: 500,
29
- height: 500
30
- },
31
- includeAxes: true,
32
- labels: {},
33
- labelsEnabled: true,
34
- coordinatesOnHover: false,
35
- padding: true,
36
- prompt: '',
37
- range: {
38
- min: -5,
39
- max: 5,
40
- step: 1,
41
- labelStep: 1,
42
- axisLabel: 'y'
43
- },
44
- rationale: '',
45
- standardGrid: false,
46
- title: '',
47
- titleEnabled: true,
48
- toolbarTools: allTools,
49
- promptEnabled: true,
50
- rationaleEnabled: true,
51
- teacherInstructionsEnabled: true,
52
- studentInstructionsEnabled: true
53
- };
54
- exports["default"] = _default;
55
- //# sourceMappingURL=defaults.js.map
@@ -1 +0,0 @@
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","labelsEnabled","coordinatesOnHover","padding","prompt","range","rationale","standardGrid","title","titleEnabled","toolbarTools","promptEnabled","rationaleEnabled","teacherInstructionsEnabled","studentInstructionsEnabled"],"mappings":";;;;;;AAAA;AACA,IAAMA,QAAQ,GAAG,CAAC,QAAD,EAAW,MAAX,EAAmB,OAAnB,EAA4B,UAA5B,EAAwC,OAAxC,EAAiD,SAAjD,EAA4D,KAA5D,EAAmE,SAAnE,EAA8E,MAA9E,EAAsF,QAAtF,CAAjB;AAEA;;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,aAAa,EAAE,IAtBF;AAuBbC,EAAAA,kBAAkB,EAAE,KAvBP;AAwBbC,EAAAA,OAAO,EAAE,IAxBI;AAyBbC,EAAAA,MAAM,EAAE,EAzBK;AA0BbC,EAAAA,KAAK,EAAE;AACLd,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,GA1BM;AAiCbW,EAAAA,SAAS,EAAE,EAjCE;AAkCbC,EAAAA,YAAY,EAAE,KAlCD;AAmCbC,EAAAA,KAAK,EAAE,EAnCM;AAoCbC,EAAAA,YAAY,EAAE,IApCD;AAqCbC,EAAAA,YAAY,EAAE5B,QArCD;AAsCb6B,EAAAA,aAAa,EAAE,IAtCF;AAuCbC,EAAAA,gBAAgB,EAAE,IAvCL;AAwCbC,EAAAA,0BAA0B,EAAE,IAxCf;AAyCbC,EAAAA,0BAA0B,EAAE;AAzCf,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 = ['circle', 'line', 'label', 'parabola', 'point', 'polygon', 'ray', 'segment', 'sine', '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 includeAxes: true,\n labels: {},\n labelsEnabled: true,\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 titleEnabled: true,\n toolbarTools: allTools,\n promptEnabled: true,\n rationaleEnabled: true,\n teacherInstructionsEnabled: true,\n studentInstructionsEnabled: true,\n};\n"],"file":"defaults.js"}
@@ -1,368 +0,0 @@
1
- "use strict";
2
-
3
- var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
-
5
- Object.defineProperty(exports, "__esModule", {
6
- value: true
7
- });
8
- exports.getBestAnswer = exports.getAnswerCorrected = exports.createCorrectResponseSession = exports.compareMarks = void 0;
9
- exports.model = model;
10
- exports.normalize = void 0;
11
- exports.outcome = outcome;
12
- exports.validate = void 0;
13
-
14
- var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime/helpers/slicedToArray"));
15
-
16
- var _objectWithoutProperties2 = _interopRequireDefault(require("@babel/runtime/helpers/objectWithoutProperties"));
17
-
18
- var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
19
-
20
- var _toConsumableArray2 = _interopRequireDefault(require("@babel/runtime/helpers/toConsumableArray"));
21
-
22
- var _debug = _interopRequireDefault(require("debug"));
23
-
24
- var _cloneDeep = _interopRequireDefault(require("lodash/cloneDeep"));
25
-
26
- var _uniqWith = _interopRequireDefault(require("lodash/uniqWith"));
27
-
28
- var _isEmpty = _interopRequireDefault(require("lodash/isEmpty"));
29
-
30
- var _defaults = _interopRequireDefault(require("./defaults"));
31
-
32
- var _utils = require("./utils");
33
-
34
- var _controllerUtils = require("@pie-lib/controller-utils");
35
-
36
- var _excluded = ["defaultTool", "prompt", "promptEnabled", "graph", "answers", "toolbarTools"];
37
-
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; }
39
-
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; }
41
-
42
- var log = (0, _debug["default"])('@pie-element:graphing:controller');
43
-
44
- var initializeGraphMap = function initializeGraphMap() {
45
- return {
46
- point: [],
47
- segment: [],
48
- line: [],
49
- ray: [],
50
- vector: [],
51
- polygon: [],
52
- circle: [],
53
- sine: [],
54
- parabola: []
55
- };
56
- };
57
-
58
- var compareMarks = function compareMarks(mark1, mark2) {
59
- // marks can be compared with equalMarks[type] function only if they have the same type;
60
- // if type is different, they are clearly not equal
61
- return !!(mark1 && mark2 && mark1.type === mark2.type && _utils.equalMarks[mark1.type] && _utils.equalMarks[mark1.type](mark1, mark2));
62
- };
63
-
64
- exports.compareMarks = compareMarks;
65
-
66
- var getAnswerCorrected = function getAnswerCorrected(_ref) {
67
- var sessionAnswers = _ref.sessionAnswers,
68
- correctAnswers = _ref.marks;
69
- sessionAnswers = sessionAnswers || [];
70
- correctAnswers = correctAnswers || [];
71
- return (0, _cloneDeep["default"])(sessionAnswers).reduce(function (correctedAnswer, answer) {
72
- var answerIsCorrect = correctAnswers.find(function (mark) {
73
- return compareMarks(answer, mark);
74
- });
75
- answer.correctness = answerIsCorrect ? 'correct' : 'incorrect';
76
- return [].concat((0, _toConsumableArray2["default"])(correctedAnswer), [answer]);
77
- }, []);
78
- };
79
-
80
- exports.getAnswerCorrected = getAnswerCorrected;
81
-
82
- var getPartialScoring = function getPartialScoring(_ref2) {
83
- var scoringType = _ref2.scoringType,
84
- env = _ref2.env;
85
- var pS = scoringType; // if scoringType is undefined, partialScoring should be considered undefined (not set)
86
- // because partialScoring.enabled is using that information
87
- // if it has a value, we check if it is partial scoring or dichotomous
88
-
89
- if (scoringType) {
90
- pS = scoringType === 'partial scoring';
91
- }
92
-
93
- return _controllerUtils.partialScoring.enabled({
94
- partialScoring: pS
95
- }, env);
96
- };
97
-
98
- var getBestAnswer = function getBestAnswer(question, session) {
99
- var env = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};
100
-
101
- // questionPossibleAnswers contains all possible answers (correct response and alternates);
102
- var _ref3 = question || {},
103
- _ref3$answers = _ref3.answers,
104
- questionPossibleAnswers = _ref3$answers === void 0 ? {} : _ref3$answers,
105
- scoringType = _ref3.scoringType;
106
-
107
- var _ref4 = session || {},
108
- answer = _ref4.answer; // initialize answer if no values
109
-
110
-
111
- answer = answer || []; // initialize one possible answer if no values
112
-
113
- if ((0, _isEmpty["default"])(questionPossibleAnswers)) {
114
- questionPossibleAnswers = {
115
- correctAnswer: initializeGraphMap()
116
- };
117
- } else {
118
- questionPossibleAnswers = _objectSpread({
119
- correctAnswer: questionPossibleAnswers.correctAnswer
120
- }, (0, _utils.sortedAnswers)(questionPossibleAnswers));
121
- }
122
-
123
- var partialScoringEnabled = getPartialScoring({
124
- scoringType: scoringType,
125
- env: env
126
- }); // student's answers without DUPLICATES
127
-
128
- var sessionAnswers = (0, _uniqWith["default"])(answer, compareMarks); // array of possible answers entries
129
-
130
- var possibleAnswers = Object.entries(questionPossibleAnswers);
131
- return possibleAnswers.reduce(function (acc, entry) {
132
- // iterating each possible answer (main + alternates)
133
- var possibleAnswerKey = entry[0];
134
- var possibleAnswer = entry[1] || {};
135
- var marks = possibleAnswer.marks;
136
-
137
- if (!marks || !marks.length) {
138
- return acc;
139
- } // returns array of marks, each having 'correctness' property
140
-
141
-
142
- var correctedAnswer = getAnswerCorrected({
143
- sessionAnswers: sessionAnswers,
144
- marks: marks
145
- });
146
- var correctMarks = correctedAnswer.filter(function (answer) {
147
- return answer.correctness === 'correct';
148
- });
149
- var maxScore = marks.length;
150
- var score = correctMarks.length; // if extra placements
151
-
152
- if (correctedAnswer.length > maxScore) {
153
- score -= correctedAnswer.length - maxScore;
154
- }
155
-
156
- if (score < 0) {
157
- score = 0;
158
- }
159
-
160
- if (score / maxScore > acc.bestScore || !acc.foundOneSolution) {
161
- if (partialScoringEnabled) {
162
- acc.bestScore = parseFloat((score / maxScore).toFixed(2));
163
- } else {
164
- acc.bestScore = Math.floor(score / maxScore);
165
- }
166
-
167
- acc.bestScoreAnswerKey = possibleAnswerKey;
168
- acc.answersCorrected = correctedAnswer;
169
- acc.foundOneSolution = true;
170
- }
171
-
172
- return acc;
173
- }, {
174
- bestScore: 0,
175
- bestScoreAnswerKey: null,
176
- // initially we just suppose all the answers are incorrect
177
- answersCorrected: (0, _cloneDeep["default"])(sessionAnswers).map(function (answer) {
178
- return _objectSpread(_objectSpread({}, answer), {}, {
179
- correctness: 'incorrect'
180
- });
181
- }),
182
- foundOneSolution: false
183
- });
184
- };
185
-
186
- exports.getBestAnswer = getBestAnswer;
187
-
188
- var normalize = function normalize(question) {
189
- return _objectSpread(_objectSpread({}, _defaults["default"]), question);
190
- };
191
-
192
- exports.normalize = normalize;
193
-
194
- function model(question, session, env) {
195
- return new Promise(function (resolve) {
196
- var normalizedQuestion = normalize(question);
197
-
198
- var _ref5 = normalizedQuestion || {},
199
- defaultTool = _ref5.defaultTool,
200
- prompt = _ref5.prompt,
201
- promptEnabled = _ref5.promptEnabled,
202
- graph = _ref5.graph,
203
- answers = _ref5.answers,
204
- toolbarTools = _ref5.toolbarTools,
205
- questionProps = (0, _objectWithoutProperties2["default"])(_ref5, _excluded);
206
-
207
- var arrows = normalizedQuestion.arrows;
208
-
209
- var _ref6 = env || {},
210
- mode = _ref6.mode,
211
- role = _ref6.role; // This is used for offering support for old models which have the property arrows: boolean
212
- // Same thing is set in authoring : packages/graphing/configure/src/configure.jsx - componentDidMount
213
-
214
-
215
- if (typeof arrows === 'boolean') {
216
- if (arrows) {
217
- arrows = {
218
- left: true,
219
- right: true,
220
- up: true,
221
- down: true
222
- };
223
- } else {
224
- arrows = {
225
- left: false,
226
- right: false,
227
- up: false,
228
- down: false
229
- };
230
- }
231
- } // added support for models without defaultTool defined; also used in packages/graphing/configure/src/index.js
232
-
233
-
234
- var toolbarToolsNoLabel = (toolbarTools || []).filter(function (tool) {
235
- return tool !== 'label';
236
- });
237
- var normalizedDefaultTool = defaultTool || toolbarToolsNoLabel.length && toolbarToolsNoLabel[0] || '';
238
-
239
- var base = _objectSpread(_objectSpread({}, questionProps), {}, {
240
- answers: answers,
241
- arrows: arrows,
242
- defaultTool: normalizedDefaultTool,
243
- disabled: env.mode !== 'gather',
244
- prompt: promptEnabled ? prompt : null,
245
- rationale: null,
246
- size: graph,
247
- showToggle: env.mode === 'evaluate' && !(0, _isEmpty["default"])(answers),
248
- teacherInstructions: null,
249
- toolbarTools: toolbarTools
250
- });
251
-
252
- if (role === 'instructor' && (mode === 'view' || mode === 'evaluate')) {
253
- var _ref7 = normalizedQuestion || {},
254
- rationale = _ref7.rationale,
255
- rationaleEnabled = _ref7.rationaleEnabled,
256
- teacherInstructions = _ref7.teacherInstructions,
257
- teacherInstructionsEnabled = _ref7.teacherInstructionsEnabled;
258
-
259
- base.rationale = rationaleEnabled ? rationale : null;
260
- base.teacherInstructions = teacherInstructionsEnabled ? teacherInstructions : null;
261
- }
262
-
263
- if (mode === 'evaluate') {
264
- if (!(0, _isEmpty["default"])(answers)) {
265
- var _getBestAnswer = getBestAnswer(normalizedQuestion, session, env),
266
- answersCorrected = _getBestAnswer.answersCorrected,
267
- bestScoreAnswerKey = _getBestAnswer.bestScoreAnswerKey,
268
- bestScore = _getBestAnswer.bestScore; // array of marks from session with 'correctness' property set
269
-
270
-
271
- base.answersCorrected = answersCorrected;
272
- base.correctResponse = bestScoreAnswerKey ? (answers[bestScoreAnswerKey] || {}).marks : [];
273
- base.showToggle = base.showToggle && bestScore !== 1;
274
- } else {
275
- base.answersCorrected = session && session.answer || [];
276
- base.correctResponse = [];
277
- }
278
- }
279
-
280
- log('base: ', base);
281
- resolve(base);
282
- });
283
- }
284
-
285
- function outcome(question, session) {
286
- var env = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};
287
- return new Promise(function (resolve) {
288
- if (!session || (0, _isEmpty["default"])(session)) {
289
- resolve({
290
- score: 0,
291
- empty: true
292
- });
293
- }
294
-
295
- if (env.mode !== 'evaluate' || (0, _isEmpty["default"])(question.answers)) {
296
- resolve({
297
- score: 0
298
- });
299
- }
300
-
301
- var _getBestAnswer2 = getBestAnswer(question, session, env),
302
- bestScore = _getBestAnswer2.bestScore;
303
-
304
- resolve({
305
- score: bestScore
306
- });
307
- });
308
- }
309
-
310
- var createCorrectResponseSession = function createCorrectResponseSession(question, env) {
311
- return new Promise(function (resolve) {
312
- if (env.mode !== 'evaluate' && env.role === 'instructor') {
313
- var _ref8 = question || {},
314
- answers = _ref8.answers;
315
-
316
- var marks = [];
317
-
318
- if (answers && Object.values(answers)) {
319
- var firstCorrectAnswer = Object.values(answers)[0] || {};
320
- marks = firstCorrectAnswer.marks || [];
321
- }
322
-
323
- resolve({
324
- answer: marks,
325
- id: '1'
326
- });
327
- } else {
328
- resolve(null);
329
- }
330
- });
331
- };
332
-
333
- exports.createCorrectResponseSession = createCorrectResponseSession;
334
-
335
- var validate = function validate() {
336
- var model = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
337
- var config = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
338
- var answers = model.answers,
339
- toolbarTools = model.toolbarTools;
340
- var errors = {};
341
- var correctAnswerErrors = {};
342
- var toolbarToolsNoLabel = (toolbarTools || []).filter(function (tool) {
343
- return tool !== 'label';
344
- });
345
-
346
- if (!toolbarToolsNoLabel.length) {
347
- errors.toolbarToolsError = 'There should be at least 1 tool defined.';
348
- }
349
-
350
- Object.entries(answers || {}).forEach(function (_ref9) {
351
- var _ref10 = (0, _slicedToArray2["default"])(_ref9, 2),
352
- key = _ref10[0],
353
- value = _ref10[1];
354
-
355
- if (!value.marks.length) {
356
- correctAnswerErrors[key] = 'At least 1 graph object should be defined.';
357
- }
358
- });
359
-
360
- if (!(0, _isEmpty["default"])(correctAnswerErrors)) {
361
- errors.correctAnswerErrors = correctAnswerErrors;
362
- }
363
-
364
- return errors;
365
- };
366
-
367
- exports.validate = validate;
368
- //# sourceMappingURL=index.js.map