jsxgraph 1.3.0 → 1.4.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.
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 +651 -448
  6. package/distrib/intergeo.min.js +3 -3
  7. package/distrib/jsxgraph.css +4 -13
  8. package/distrib/jsxgraphcore.js +9 -25
  9. package/distrib/jsxgraphsrc.js +28203 -25234
  10. package/distrib/sketch.min.js +3 -3
  11. package/package.json +11 -22
  12. package/src/base/board.js +674 -469
  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 +32 -11
  17. package/src/base/coords.js +4 -4
  18. package/src/base/coordselement.js +51 -24
  19. package/src/base/curve.js +308 -117
  20. package/src/base/element.js +79 -50
  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 +108 -21
  25. package/src/base/point.js +24 -28
  26. package/src/base/polygon.js +75 -18
  27. package/src/base/text.js +116 -63
  28. package/src/base/ticks.js +29 -11
  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 +127 -19
  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 +155 -126
  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 +377 -114
  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 +275 -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 +21 -13
  75. package/src/renderer/abstract.js +21 -6
  76. package/src/renderer/canvas.js +22 -15
  77. package/src/renderer/no.js +11 -4
  78. package/src/renderer/svg.js +76 -53
  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 +148 -3
  83. package/src/utils/dump.js +21 -15
  84. package/src/utils/env.js +63 -104
  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 -1281
@@ -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] + '); ';
@@ -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
@@ -1923,7 +1938,7 @@ define([
1923
1938
 
1924
1939
  if (board.attr.showfullscreen) {
1925
1940
  createButton(board.attr.fullscreen.symbol, function () {
1926
- board.toFullscreen();
1941
+ board.toFullscreen(board.attr.fullscreen.id);
1927
1942
  });
1928
1943
  }
1929
1944
 
@@ -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,11 +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
- } else if (Env.isNode()) {
93
- this.canvasId = (typeof module === 'object' ? module.require('canvas') : require('canvas'));
94
- this.canvasRoot = new this.canvasId(500, 500);
92
+ this.canvasRoot.style.display = 'block';
95
93
  this.context = this.canvasRoot.getContext('2d');
94
+
95
+ } else if (Env.isNode()) {
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
+ }
96
103
  }
97
104
 
98
105
  this.dashArray = [[2, 2], [5, 5], [10, 10], [20, 20], [20, 10, 10, 10], [20, 5, 10, 5]];
@@ -1057,7 +1064,7 @@ define([
1057
1064
  * Text related stuff
1058
1065
  * **************************/
1059
1066
 
1060
- // already documented in JXG.AbstractRenderer
1067
+ // Already documented in JXG.AbstractRenderer
1061
1068
  displayCopyright: function (str, fontSize) {
1062
1069
  var context = this.context;
1063
1070
 
@@ -1070,7 +1077,7 @@ define([
1070
1077
  context.restore();
1071
1078
  },
1072
1079
 
1073
- // already documented in JXG.AbstractRenderer
1080
+ // Already documented in JXG.AbstractRenderer
1074
1081
  drawInternalText: function (el) {
1075
1082
  var ev_fs = Type.evaluate(el.visProp.fontsize),
1076
1083
  fontUnit = Type.evaluate(el.visProp.fontunit),
@@ -1104,7 +1111,7 @@ define([
1104
1111
  return null;
1105
1112
  },
1106
1113
 
1107
- // already documented in JXG.AbstractRenderer
1114
+ // Already documented in JXG.AbstractRenderer
1108
1115
  updateInternalText: function (el) {
1109
1116
  this.drawInternalText(el);
1110
1117
  },
@@ -1150,7 +1157,7 @@ define([
1150
1157
  * Image related stuff
1151
1158
  * **************************/
1152
1159
 
1153
- // already documented in JXG.AbstractRenderer
1160
+ // Already documented in JXG.AbstractRenderer
1154
1161
  drawImage: function (el) {
1155
1162
  el.rendNode = new Image();
1156
1163
  // Store the file name of the image.
@@ -1162,7 +1169,7 @@ define([
1162
1169
  this.updateImage(el);
1163
1170
  },
1164
1171
 
1165
- // already documented in JXG.AbstractRenderer
1172
+ // Already documented in JXG.AbstractRenderer
1166
1173
  updateImage: function (el) {
1167
1174
  var context = this.context,
1168
1175
  o = Type.evaluate(el.visProp.fillopacity),
@@ -1193,7 +1200,7 @@ define([
1193
1200
  }
1194
1201
  },
1195
1202
 
1196
- // already documented in JXG.AbstractRenderer
1203
+ // Already documented in JXG.AbstractRenderer
1197
1204
  transformImage: function (el, t) {
1198
1205
  var m, len = t.length,
1199
1206
  ctx = this.context;
@@ -1206,7 +1213,7 @@ define([
1206
1213
  }
1207
1214
  },
1208
1215
 
1209
- // already documented in JXG.AbstractRenderer
1216
+ // Already documented in JXG.AbstractRenderer
1210
1217
  updateImageURL: function (el) {
1211
1218
  var url;
1212
1219
 
@@ -1310,7 +1317,7 @@ define([
1310
1317
  this._stroke(el);
1311
1318
  },
1312
1319
 
1313
- // already documented in JXG.AbstractRenderer
1320
+ // Already documented in JXG.AbstractRenderer
1314
1321
  updatePathStringBezierPrim: function (el) {
1315
1322
  var i, j, k, scr, lx, ly, len,
1316
1323
  symbm = 'M',
@@ -1416,7 +1423,7 @@ define([
1416
1423
 
1417
1424
  // ************************** Set Attributes *************************
1418
1425
 
1419
- // already documented in JXG.AbstractRenderer
1426
+ // Already documented in JXG.AbstractRenderer
1420
1427
  display: function(el, val) {
1421
1428
  if (el && el.rendNode) {
1422
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;