jsxgraph 1.3.1 → 1.4.2

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.
Files changed (90) hide show
  1. package/README.md +2 -2
  2. package/distrib/README.md +2 -2
  3. package/distrib/geogebra.min.js +3 -3
  4. package/distrib/geonext.min.js +3 -3
  5. package/distrib/index.d.ts +4964 -4627
  6. package/distrib/intergeo.min.js +3 -3
  7. package/distrib/jsxgraph.css +10 -15
  8. package/distrib/jsxgraphcore.js +9 -25
  9. package/distrib/jsxgraphsrc.js +28437 -25331
  10. package/distrib/sketch.min.js +3 -3
  11. package/package.json +11 -22
  12. package/src/base/board.js +555 -427
  13. package/src/base/chart.js +1 -1
  14. package/src/base/circle.js +23 -1
  15. package/src/base/composition.js +1 -1
  16. package/src/base/constants.js +33 -11
  17. package/src/base/coords.js +4 -4
  18. package/src/base/coordselement.js +47 -20
  19. package/src/base/curve.js +308 -117
  20. package/src/base/element.js +80 -51
  21. package/src/base/foreignobject.js +463 -0
  22. package/src/base/group.js +2 -2
  23. package/src/base/image.js +12 -15
  24. package/src/base/line.js +1 -1
  25. package/src/base/point.js +20 -41
  26. package/src/base/polygon.js +75 -18
  27. package/src/base/text.js +116 -63
  28. package/src/base/ticks.js +35 -12
  29. package/src/base/transformation.js +1 -1
  30. package/src/base/turtle.js +1 -1
  31. package/src/element/arc.js +1 -1
  32. package/src/element/button.js +29 -2
  33. package/src/element/checkbox.js +31 -1
  34. package/src/element/comb.js +5 -2
  35. package/src/element/composition.js +27 -6
  36. package/src/element/conic.js +46 -5
  37. package/src/element/input.js +32 -1
  38. package/src/element/locus.js +2 -2
  39. package/src/element/measure.js +9 -4
  40. package/src/element/sector.js +46 -12
  41. package/src/element/slider.js +17 -12
  42. package/src/element/slopetriangle.js +1 -1
  43. package/src/jsxgraph.js +28 -9
  44. package/src/jxg.js +4 -3
  45. package/src/loadjsxgraph.js +3 -2
  46. package/src/math/bst.js +1 -1
  47. package/src/math/clip.js +550 -345
  48. package/src/math/complex.js +1 -1
  49. package/src/math/extrapolate.js +1 -1
  50. package/src/math/geometry.js +109 -128
  51. package/src/math/ia.js +290 -21
  52. package/src/math/math.js +30 -1
  53. package/src/math/metapost.js +1 -1
  54. package/src/math/nlp.js +25 -5
  55. package/src/math/numerics.js +183 -4
  56. package/src/math/plot.js +4 -4
  57. package/src/math/poly.js +1 -1
  58. package/src/math/probfuncs.js +2 -1
  59. package/src/math/qdt.js +68 -62
  60. package/src/math/statistics.js +58 -7
  61. package/src/math/symbolic.js +1 -1
  62. package/src/options.js +393 -115
  63. package/src/parser/ca.js +1297 -1291
  64. package/src/parser/datasource.js +1 -1
  65. package/src/parser/geonext.js +6 -6
  66. package/src/parser/jessiecode.js +378 -79
  67. package/src/parser/jessiescript.js +1 -1
  68. package/src/reader/cinderella.js +1 -1
  69. package/src/reader/file.js +1 -1
  70. package/src/reader/geogebra.js +1 -1
  71. package/src/reader/geonext.js +1 -1
  72. package/src/reader/graph.js +1 -1
  73. package/src/reader/intergeo.js +1 -1
  74. package/src/reader/sketch.js +25 -17
  75. package/src/renderer/abstract.js +25 -7
  76. package/src/renderer/canvas.js +20 -15
  77. package/src/renderer/no.js +11 -4
  78. package/src/renderer/svg.js +68 -49
  79. package/src/renderer/vml.js +36 -32
  80. package/src/server/server.js +1 -1
  81. package/src/utils/base64.js +2 -2
  82. package/src/utils/color.js +147 -3
  83. package/src/utils/dump.js +20 -14
  84. package/src/utils/env.js +26 -62
  85. package/src/utils/event.js +1 -1
  86. package/src/utils/expect.js +1 -1
  87. package/src/utils/type.js +30 -19
  88. package/src/utils/xml.js +1 -1
  89. package/src/utils/zip.js +1 -1
  90. package/CHANGELOG.md +0 -1305
@@ -1,5 +1,5 @@
1
1
  /*
2
- Copyright 2008-2021
2
+ Copyright 2008-2022
3
3
  Matthias Ehmann,
4
4
  Michael Gerhaeuser,
5
5
  Carsten Miller,
@@ -1,5 +1,5 @@
1
1
  /*
2
- Copyright 2008-2021
2
+ Copyright 2008-2022
3
3
  Matthias Ehmann,
4
4
  Michael Gerhaeuser,
5
5
  Carsten Miller,
@@ -1,5 +1,5 @@
1
1
  /*
2
- Copyright 2008-2021
2
+ Copyright 2008-2022
3
3
  Matthias Ehmann,
4
4
  Michael Gerhaeuser,
5
5
  Carsten Miller,
@@ -1,5 +1,5 @@
1
1
  /*
2
- Copyright 2008-2021
2
+ Copyright 2008-2022
3
3
  Matthias Ehmann,
4
4
  Michael Gerhaeuser,
5
5
  Carsten Miller,
@@ -1,5 +1,5 @@
1
1
  /*
2
- Copyright 2008-2021
2
+ Copyright 2008-2022
3
3
  Matthias Ehmann,
4
4
  Michael Gerhaeuser,
5
5
  Carsten Miller,
@@ -1,5 +1,5 @@
1
1
  /*
2
- Copyright 2008-2021
2
+ Copyright 2008-2022
3
3
  Matthias Ehmann,
4
4
  Michael Gerhaeuser,
5
5
  Carsten Miller,
@@ -1,5 +1,5 @@
1
1
  /*
2
- Copyright 2008-2021
2
+ Copyright 2008-2022
3
3
  Matthias Ehmann,
4
4
  Michael Gerhaeuser,
5
5
  Carsten Miller,
@@ -1,5 +1,5 @@
1
1
  /*
2
- Copyright 2008-2021
2
+ Copyright 2008-2022
3
3
  Matthias Ehmann,
4
4
  Michael Gerhaeuser,
5
5
  Carsten Miller,
@@ -45,14 +45,14 @@ Copyright 2008-2021
45
45
  utils/type
46
46
  */
47
47
 
48
- (function () {
48
+ (function() {
49
49
 
50
50
  'use strict';
51
51
 
52
52
  // this is a small workaround to adapt the SketchReader to our new file API
53
53
  // we don't have to change anything in sketchometry.
54
- JXG.SketchReader = function (board, str) {
55
- this.read = function () {
54
+ JXG.SketchReader = function(board, str) {
55
+ this.read = function() {
56
56
  var i, t, arr, unzipped, meta, constr;
57
57
 
58
58
  unzipped = new JXG.Util.Unzip(JXG.Util.Base64.decodeAsArray(str)).unzip();
@@ -101,11 +101,11 @@ Copyright 2008-2021
101
101
 
102
102
  // No prototype here
103
103
  JXG.extend(JXG.SketchReader, /** @lends JXG.SketchReader */ {
104
- generateJCodeMeta: function () {
104
+ generateJCodeMeta: function() {
105
105
  return ['', '', '', ''];
106
106
  },
107
107
 
108
- id: function () {
108
+ id: function() {
109
109
  return JXG.Util.genUUID();
110
110
  },
111
111
 
@@ -129,7 +129,7 @@ Copyright 2008-2021
129
129
  * @param {Array} step_log The complete step log
130
130
  * @returns {Array} JessieCode to set and reset the step.
131
131
  */
132
- generateJCode: function (step, board, step_log) {
132
+ generateJCode: function(step, board, step_log) {
133
133
  var i, j, k, sub_id, str, str1, str2, objects, pid1, pid2, pid3,
134
134
  xstart, ystart, el, arr, step2, options, assign, attrid,
135
135
  le, x, y,
@@ -144,7 +144,7 @@ Copyright 2008-2021
144
144
 
145
145
  // print number -- helper to prepare numbers
146
146
  // for printing, e.g. trim them with toFixed()
147
- pn = function (v) {
147
+ pn = function(v) {
148
148
  if (options.toFixed > 0) {
149
149
  v = parseFloat(v);
150
150
  return JXG.toFixed(v, options.toFixed);
@@ -153,7 +153,7 @@ Copyright 2008-2021
153
153
  return v;
154
154
  },
155
155
 
156
- getObject = function (v) {
156
+ getObject = function(v) {
157
157
  var o;
158
158
 
159
159
  if (options.useSymbols) {
@@ -1125,13 +1125,17 @@ Copyright 2008-2021
1125
1125
  break;
1126
1126
 
1127
1127
  case JXG.GENTYPE_TEXT:
1128
+ if (step.args.str.substr(0, 1) !== '\'' && step.args.str.substr(0, 1) !== '"' && step.args.str.substr(0, 8) !== 'function') {
1129
+ step.args.str = '\'' + step.args.str + '\'';
1130
+ }
1131
+
1128
1132
  set_str = assign + 'text(' + pn(step.args.x) + ', ' + pn(step.args.y) + ', ' + step.args.str + ') <<';
1129
1133
  set_str += attrid + 'name: \'\'';
1130
1134
  if (typeof step.args.anchor != 'undefined') {
1131
1135
  set_str += ', anchor: ' + step.args.anchor;
1132
1136
  }
1133
- set_str += '>>; ' + step.dest_id + '.setText(' + step.args.str;
1134
- set_str += '); ';
1137
+ set_str += '>>; ';
1138
+ // set_str += step.dest_id + '.setText(' + step.args.str + '); ';
1135
1139
  reset_str = 'remove(' + step.dest_id + '); ';
1136
1140
  break;
1137
1141
 
@@ -1314,7 +1318,11 @@ Copyright 2008-2021
1314
1318
  set_str += 'dot: <<priv:true, id: \'' + step.dest_sub_ids[0] + '\', name: \'\'>>, ';
1315
1319
  set_str += attrid + ' fillOpacity: ' + JXG.Options.opacityLevel;
1316
1320
  if (JXG.exists(step.args) && JXG.exists(step.args.radius))
1317
- set_str += ', radius: ' + step.args.radius;
1321
+ if (JXG.isNumber(step.args.radius)) {
1322
+ set_str += ', radius: ' + step.args.radius;
1323
+ } else {
1324
+ set_str += ', radius: \'' + step.args.radius + '\'';
1325
+ }
1318
1326
  set_str += '>>; ';
1319
1327
  reset_str = 'remove(' + step.dest_id + '); ';
1320
1328
  reset_str += 'remove(' + step.dest_sub_ids[0] + '); ';
@@ -1368,10 +1376,10 @@ Copyright 2008-2021
1368
1376
 
1369
1377
  set_str = assign + step.args.plot_type + '(' + step.args.func;
1370
1378
 
1371
- if (isNaN(step.args.a) || step.args.a === null || step.args.a === undefined)
1372
- step.args.a = '-infinity';
1373
- if (isNaN(step.args.b) || step.args.b === null || step.args.b === undefined)
1374
- step.args.b = 'infinity';
1379
+ if (isNaN(step.args.a) || step.args.a === null || step.args.a === undefined|| step.args.a ==='-infinity')
1380
+ step.args.a = '';
1381
+ if (isNaN(step.args.b) || step.args.b === null || step.args.b === undefined|| step.args.b ==='infinity')
1382
+ step.args.b = '';
1375
1383
 
1376
1384
  if (step.args.a != step.args.b)
1377
1385
  set_str += ', ' + step.args.a + ', ' + step.args.b;
@@ -1714,7 +1722,7 @@ Copyright 2008-2021
1714
1722
  return [set_str, ctx_set_str, reset_str, ctx_reset_str];
1715
1723
  },
1716
1724
 
1717
- replaceStepDestIds: function (step, id_map) {
1725
+ replaceStepDestIds: function(step, id_map) {
1718
1726
  var i, j, copy_ids = [];
1719
1727
 
1720
1728
  for (i = 0; i < id_map.length; i++) {
@@ -1,5 +1,5 @@
1
1
  /*
2
- Copyright 2008-2021
2
+ Copyright 2008-2022
3
3
  Matthias Ehmann,
4
4
  Michael Gerhaeuser,
5
5
  Carsten Miller,
@@ -38,6 +38,7 @@
38
38
  newcap: AsciiMathMl exposes non-constructor functions beginning with upper case letters
39
39
  */
40
40
  /*jslint nomen: true, plusplus: true, newcap: true, unparam: true*/
41
+ /*eslint no-unused-vars: "off"*/
41
42
 
42
43
  /* depends:
43
44
  jxg
@@ -1010,7 +1011,8 @@ define([
1010
1011
  * @see JXG.AbstractRenderer#updateTextStyle
1011
1012
  */
1012
1013
  updateText: function (el) {
1013
- var content = el.plaintext, v, c,
1014
+ var content = el.plaintext,
1015
+ v, c,
1014
1016
  parentNode,
1015
1017
  scale, vshift, id, wrap_id,
1016
1018
  ax, ay;
@@ -1091,10 +1093,18 @@ define([
1091
1093
  // Set the content
1092
1094
  if (el.htmlStr !== content) {
1093
1095
  try {
1094
- el.rendNode.innerHTML = content;
1096
+ if (el.type === Type.OBJECT_TYPE_BUTTON) {
1097
+ el.rendNodeButton.innerHTML = content;
1098
+ } else if (el.type === Type.OBJECT_TYPE_CHECKBOX ||
1099
+ el.type === Type.OBJECT_TYPE_INPUT) {
1100
+ el.rendNodeLabel.innerHTML = content;
1101
+ } else {
1102
+ el.rendNode.innerHTML = content;
1103
+ }
1095
1104
  } catch (e) {
1096
- // Setting innerHTML sometimes fails in IE8. A workaround is to
1097
- // take the node off the DOM, assign innerHTML, then append back.
1105
+ // Setting innerHTML sometimes fails in IE8.
1106
+ // A workaround is to take the node off the DOM, assign innerHTML,
1107
+ // then append back.
1098
1108
  // Works for text elements as they are absolutely positioned.
1099
1109
  parentNode = el.rendNode.parentNode;
1100
1110
  el.rendNode.parentNode.removeChild(el.rendNode);
@@ -1130,9 +1140,11 @@ define([
1130
1140
  }
1131
1141
  } else if (Type.evaluate(el.visProp.usekatex)) {
1132
1142
  try {
1143
+ /* eslint-disable no-undef */
1133
1144
  katex.render(content, el.rendNode, {
1134
1145
  throwOnError: false
1135
1146
  });
1147
+ /* eslint-enable no-undef */
1136
1148
  } catch (e) {
1137
1149
  JXG.debug('KaTeX (not yet) loaded');
1138
1150
  }
@@ -1418,6 +1430,9 @@ define([
1418
1430
  el.rendNode.className = Type.evaluate(doHighlight ? el.visProp.highlightcssclass : el.visProp.cssclass);
1419
1431
  },
1420
1432
 
1433
+ drawForeignObject: function (el) { /* stub */ },
1434
+
1435
+ updateForeignObject: function(el) { /* stub */ },
1421
1436
 
1422
1437
  /* **************************
1423
1438
  * Render primitive objects
@@ -1569,8 +1584,11 @@ define([
1569
1584
 
1570
1585
  setTabindex: function(element) {
1571
1586
  var val;
1572
- if (Type.exists(element.rendNode)) {
1587
+ if (element.board.attr.keyboard.enabled && Type.exists(element.rendNode)) {
1573
1588
  val = Type.evaluate(element.visProp.tabindex);
1589
+ if (!element.visPropCalc.visible || Type.evaluate(element.visProp.fixed)) {
1590
+ val = null;
1591
+ }
1574
1592
  if (val !== element.visPropOld.tabindex) {
1575
1593
  element.rendNode.setAttribute('tabindex', val);
1576
1594
  element.visPropOld.tabindex = val;
@@ -1923,7 +1941,7 @@ define([
1923
1941
 
1924
1942
  if (board.attr.showfullscreen) {
1925
1943
  createButton(board.attr.fullscreen.symbol, function () {
1926
- board.toFullscreen();
1944
+ board.toFullscreen(board.attr.fullscreen.id);
1927
1945
  });
1928
1946
  }
1929
1947
 
@@ -1,5 +1,5 @@
1
1
  /*
2
- Copyright 2008-2021
2
+ Copyright 2008-2022
3
3
  Matthias Ehmann,
4
4
  Michael Gerhaeuser,
5
5
  Carsten Miller,
@@ -56,7 +56,8 @@ define([
56
56
 
57
57
  /**
58
58
  * Uses HTML Canvas to implement the rendering methods defined in {@link JXG.AbstractRenderer}.
59
- * @class JXG.AbstractRenderer
59
+ *
60
+ * @class JXG.CanvasRenderer
60
61
  * @augments JXG.AbstractRenderer
61
62
  * @param {Node} container Reference to a DOM node containing the board.
62
63
  * @param {Object} dim The dimensions of the board
@@ -88,13 +89,17 @@ define([
88
89
  'px" height="', dim.height,
89
90
  'px"><', '/canvas>'].join('');
90
91
  this.canvasRoot = this.container.ownerDocument.getElementById(this.canvasId);
91
- this.context = this.canvasRoot.getContext('2d');
92
92
  this.canvasRoot.style.display = 'block';
93
+ this.context = this.canvasRoot.getContext('2d');
93
94
 
94
95
  } else if (Env.isNode()) {
95
- this.canvasId = (typeof module === 'object' ? module.require('canvas') : require('canvas'));
96
- this.canvasRoot = new this.canvasId(500, 500);
97
- this.context = this.canvasRoot.getContext('2d');
96
+ try {
97
+ this.canvasId = (typeof module === 'object' ? module.require('canvas') : require('canvas'));
98
+ this.canvasRoot = new this.canvasId(500, 500);
99
+ this.context = this.canvasRoot.getContext('2d');
100
+ } catch (err) {
101
+ console.log("Warning: 'canvas' not found. You might need to call 'npm install canvas'");
102
+ }
98
103
  }
99
104
 
100
105
  this.dashArray = [[2, 2], [5, 5], [10, 10], [20, 20], [20, 10, 10, 10], [20, 5, 10, 5]];
@@ -1059,7 +1064,7 @@ define([
1059
1064
  * Text related stuff
1060
1065
  * **************************/
1061
1066
 
1062
- // already documented in JXG.AbstractRenderer
1067
+ // Already documented in JXG.AbstractRenderer
1063
1068
  displayCopyright: function (str, fontSize) {
1064
1069
  var context = this.context;
1065
1070
 
@@ -1072,7 +1077,7 @@ define([
1072
1077
  context.restore();
1073
1078
  },
1074
1079
 
1075
- // already documented in JXG.AbstractRenderer
1080
+ // Already documented in JXG.AbstractRenderer
1076
1081
  drawInternalText: function (el) {
1077
1082
  var ev_fs = Type.evaluate(el.visProp.fontsize),
1078
1083
  fontUnit = Type.evaluate(el.visProp.fontunit),
@@ -1106,7 +1111,7 @@ define([
1106
1111
  return null;
1107
1112
  },
1108
1113
 
1109
- // already documented in JXG.AbstractRenderer
1114
+ // Already documented in JXG.AbstractRenderer
1110
1115
  updateInternalText: function (el) {
1111
1116
  this.drawInternalText(el);
1112
1117
  },
@@ -1152,7 +1157,7 @@ define([
1152
1157
  * Image related stuff
1153
1158
  * **************************/
1154
1159
 
1155
- // already documented in JXG.AbstractRenderer
1160
+ // Already documented in JXG.AbstractRenderer
1156
1161
  drawImage: function (el) {
1157
1162
  el.rendNode = new Image();
1158
1163
  // Store the file name of the image.
@@ -1164,7 +1169,7 @@ define([
1164
1169
  this.updateImage(el);
1165
1170
  },
1166
1171
 
1167
- // already documented in JXG.AbstractRenderer
1172
+ // Already documented in JXG.AbstractRenderer
1168
1173
  updateImage: function (el) {
1169
1174
  var context = this.context,
1170
1175
  o = Type.evaluate(el.visProp.fillopacity),
@@ -1195,7 +1200,7 @@ define([
1195
1200
  }
1196
1201
  },
1197
1202
 
1198
- // already documented in JXG.AbstractRenderer
1203
+ // Already documented in JXG.AbstractRenderer
1199
1204
  transformImage: function (el, t) {
1200
1205
  var m, len = t.length,
1201
1206
  ctx = this.context;
@@ -1208,7 +1213,7 @@ define([
1208
1213
  }
1209
1214
  },
1210
1215
 
1211
- // already documented in JXG.AbstractRenderer
1216
+ // Already documented in JXG.AbstractRenderer
1212
1217
  updateImageURL: function (el) {
1213
1218
  var url;
1214
1219
 
@@ -1312,7 +1317,7 @@ define([
1312
1317
  this._stroke(el);
1313
1318
  },
1314
1319
 
1315
- // already documented in JXG.AbstractRenderer
1320
+ // Already documented in JXG.AbstractRenderer
1316
1321
  updatePathStringBezierPrim: function (el) {
1317
1322
  var i, j, k, scr, lx, ly, len,
1318
1323
  symbm = 'M',
@@ -1418,7 +1423,7 @@ define([
1418
1423
 
1419
1424
  // ************************** Set Attributes *************************
1420
1425
 
1421
- // already documented in JXG.AbstractRenderer
1426
+ // Already documented in JXG.AbstractRenderer
1422
1427
  display: function(el, val) {
1423
1428
  if (el && el.rendNode) {
1424
1429
  el.visPropOld.visible = val;
@@ -1,5 +1,5 @@
1
1
  /*
2
- Copyright 2008-2021
2
+ Copyright 2008-2022
3
3
  Matthias Ehmann,
4
4
  Michael Gerhaeuser,
5
5
  Carsten Miller,
@@ -32,6 +32,7 @@
32
32
 
33
33
  /*global JXG: true, define: true, AMprocessNode: true, MathJax: true, document: true */
34
34
  /*jslint nomen: true, plusplus: true, newcap:true, unparam: true*/
35
+ /*eslint no-unused-vars: "off"*/
35
36
 
36
37
  /* depends:
37
38
  jxg
@@ -52,8 +53,11 @@ define(['jxg', 'renderer/abstract'], function (JXG, AbstractRenderer) {
52
53
 
53
54
  /**
54
55
  * This renderer draws nothing. It is intended to be used in environments where none of our rendering engines
55
- * are available, e.g. WebWorkers.
56
- * @class JXG.AbstractRenderer
56
+ * are available, e.g. WebWorkers. All methods are empty.
57
+ *
58
+ * @class JXG.NoRenderer
59
+ * @augments JXG.AbstractRenderer
60
+ * @see JXG.AbstractRenderer
57
61
  */
58
62
  JXG.NoRenderer = function () {
59
63
  /**
@@ -75,7 +79,7 @@ define(['jxg', 'renderer/abstract'], function (JXG, AbstractRenderer) {
75
79
  this.type = 'no';
76
80
  };
77
81
 
78
- JXG.extend(JXG.NoRenderer.prototype, /** @lends JXG.AbstractRenderer.prototype */ {
82
+ JXG.extend(JXG.NoRenderer.prototype, /** @lends JXG.NoRenderer.prototype */ {
79
83
  /* ******************************** *
80
84
  * Point drawing and updating *
81
85
  * ******************************** */
@@ -656,6 +660,9 @@ define(['jxg', 'renderer/abstract'], function (JXG, AbstractRenderer) {
656
660
 
657
661
  });
658
662
 
663
+ /**
664
+ * @ignore
665
+ */
659
666
  JXG.NoRenderer.prototype = new AbstractRenderer();
660
667
 
661
668
  return JXG.NoRenderer;