jsxgraph 1.9.0 → 1.9.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 (113) hide show
  1. package/CHANGELOG.md +49 -0
  2. package/distrib/docs.zip +0 -0
  3. package/distrib/geogebra.min.js +2 -2
  4. package/distrib/geonext.min.js +3 -3
  5. package/distrib/index.d.ts +1 -1
  6. package/distrib/intergeo.min.js +2 -2
  7. package/distrib/jsxgraph.css +1 -1
  8. package/distrib/jsxgraph.zip +0 -0
  9. package/distrib/jsxgraphcore.js +3 -3
  10. package/distrib/jsxgraphcore.mjs +3 -3
  11. package/distrib/jsxgraphcore.mjs.map +1 -1
  12. package/distrib/jsxgraphsrc.js +7680 -6865
  13. package/distrib/jsxgraphsrc.mjs +7964 -7150
  14. package/distrib/jsxgraphsrc.mjs.map +1 -1
  15. package/distrib/sketch.min.js +3 -3
  16. package/distrib/themes/mono_thin.js +1 -1
  17. package/package.json +4 -4
  18. package/src/3d/box3d.js +6 -3
  19. package/src/3d/circle3d.js +11 -10
  20. package/src/3d/curve3d.js +3 -1
  21. package/src/3d/element3d.js +1 -1
  22. package/src/3d/linspace3d.js +20 -57
  23. package/src/3d/point3d.js +7 -1
  24. package/src/3d/polygon3d.js +2 -1
  25. package/src/3d/sphere3d.js +48 -44
  26. package/src/3d/surface3d.js +2 -1
  27. package/src/3d/view3d.js +1505 -1068
  28. package/src/base/board.js +177 -56
  29. package/src/base/chart.js +5 -6
  30. package/src/base/circle.js +4 -2
  31. package/src/base/composition.js +1 -1
  32. package/src/base/constants.js +2 -2
  33. package/src/base/coords.js +1 -1
  34. package/src/base/coordselement.js +1 -1
  35. package/src/base/curve.js +2 -1
  36. package/src/base/element.js +39 -31
  37. package/src/base/foreignobject.js +1 -1
  38. package/src/base/group.js +1 -1
  39. package/src/base/image.js +1 -1
  40. package/src/base/line.js +94 -106
  41. package/src/base/point.js +1 -1
  42. package/src/base/polygon.js +2 -2
  43. package/src/base/text.js +6 -2
  44. package/src/base/ticks.js +1 -1
  45. package/src/base/transformation.js +1 -1
  46. package/src/base/turtle.js +1 -1
  47. package/src/element/arc.js +1 -1
  48. package/src/element/button.js +63 -13
  49. package/src/element/checkbox.js +7 -3
  50. package/src/element/comb.js +1 -1
  51. package/src/element/composition.js +1 -1
  52. package/src/element/conic.js +1 -1
  53. package/src/element/grid.js +7 -7
  54. package/src/element/input.js +10 -7
  55. package/src/element/locus.js +1 -1
  56. package/src/element/measure.js +1 -1
  57. package/src/element/sector.js +1 -1
  58. package/src/element/slider.js +43 -40
  59. package/src/element/slopetriangle.js +1 -1
  60. package/src/element/smartlabel.js +1 -1
  61. package/src/element/vectorfield.js +1 -1
  62. package/src/index.d.ts +1 -1
  63. package/src/jsxgraph.js +6 -4
  64. package/src/jxg.js +1 -1
  65. package/src/math/bqdt.js +1 -1
  66. package/src/math/clip.js +1 -1
  67. package/src/math/complex.js +1 -1
  68. package/src/math/extrapolate.js +1 -1
  69. package/src/math/geometry.js +87 -65
  70. package/src/math/ia.js +12 -12
  71. package/src/math/implicitplot.js +1 -1
  72. package/src/math/math.js +48 -6
  73. package/src/math/metapost.js +1 -1
  74. package/src/math/nlp.js +1 -1
  75. package/src/math/numerics.js +1 -1
  76. package/src/math/plot.js +25 -26
  77. package/src/math/poly.js +1 -1
  78. package/src/math/probfuncs.js +1 -1
  79. package/src/math/qdt.js +1 -1
  80. package/src/math/statistics.js +1 -1
  81. package/src/math/symbolic.js +1 -1
  82. package/src/options.js +49 -4
  83. package/src/options3d.js +82 -5
  84. package/src/parser/datasource.js +1 -1
  85. package/src/parser/geonext.js +1 -1
  86. package/src/parser/jessiecode.js +12 -11
  87. package/src/parser/jessiescript.js +1 -1
  88. package/src/parser/prefix.js +9 -2
  89. package/src/reader/cinderella.js +1 -1
  90. package/src/reader/file.js +1 -1
  91. package/src/reader/geogebra.js +1 -1
  92. package/src/reader/geonext.js +1 -1
  93. package/src/reader/graph.js +1 -1
  94. package/src/reader/intergeo.js +1 -1
  95. package/src/reader/sketch.js +107 -1
  96. package/src/renderer/abstract.js +1 -1
  97. package/src/renderer/canvas.js +1 -1
  98. package/src/renderer/no.js +1 -1
  99. package/src/renderer/svg.js +17 -7
  100. package/src/renderer/vml.js +1 -1
  101. package/src/server/server.js +1 -1
  102. package/src/themes/mono_thin.js +1 -1
  103. package/src/unused/bst.js +1 -1
  104. package/src/unused/heap.js +1 -1
  105. package/src/utils/base64.js +1 -1
  106. package/src/utils/color.js +1 -1
  107. package/src/utils/dump.js +1 -1
  108. package/src/utils/env.js +3 -3
  109. package/src/utils/event.js +1 -1
  110. package/src/utils/expect.js +1 -1
  111. package/src/utils/type.js +30 -18
  112. package/src/utils/xml.js +1 -1
  113. package/src/utils/zip.js +1 -1
package/src/math/math.js CHANGED
@@ -1,5 +1,5 @@
1
1
  /*
2
- Copyright 2008-2023
2
+ Copyright 2008-2024
3
3
  Matthias Ehmann,
4
4
  Michael Gerhaeuser,
5
5
  Carsten Miller,
@@ -109,6 +109,48 @@ JXG.Math = {
109
109
  return a - Math.floor(a / m) * m;
110
110
  },
111
111
 
112
+ /**
113
+ * Translate <code>x</code> into the interval <code>[a, b)</code> by adding
114
+ * a multiple of <code>b - a</code>.
115
+ * @param {Number} x
116
+ * @param {Number} a
117
+ * @param {Number} b
118
+ */
119
+ wrap: function (x, a, b) {
120
+ return a + this.mod(x - a, b - a);
121
+ },
122
+
123
+ /**
124
+ * Clamp <code>x</code> within the interval <code>[a, b]</code>. If
125
+ * <code>x</code> is below <code>a</code>, increase it to <code>a</code>. If
126
+ * it's above <code>b</code>, decrease it to <code>b</code>.
127
+ */
128
+ clamp: function (x, a, b) {
129
+ return Math.min(Math.max(x, a), b);
130
+ },
131
+
132
+ /**
133
+ * A way of clamping a periodic variable. If <code>x</code> is congruent mod
134
+ * <code>period</code> to a point in <code>[a, b]</code>, return that point.
135
+ * Otherwise, wrap it into <code>[mid - period/2, mid + period/2]</code>,
136
+ * where <code>mid</code> is the mean of <code>a</code> and <code>b</code>,
137
+ * and then clamp it to <code>[a, b]</code> from there.
138
+ */
139
+ wrapAndClamp: function (x, a, b, period) {
140
+ var mid = 0.5 * (a + b),
141
+ half_period = 0.5 * period;
142
+
143
+ return this.clamp(
144
+ this.wrap(
145
+ x,
146
+ mid - half_period,
147
+ mid + half_period
148
+ ),
149
+ a,
150
+ b
151
+ );
152
+ },
153
+
112
154
  /**
113
155
  * Initializes a vector of size <tt>n</tt> wih coefficients set to the init value (default 0)
114
156
  * @param {Number} n Length of the vector
@@ -882,7 +924,7 @@ JXG.Math = {
882
924
 
883
925
  minOr0 = min || 0;
884
926
 
885
- if ( JXG.exists(step)) {
927
+ if (JXG.exists(step)) {
886
928
  tmp = (n - minOr0) / step;
887
929
  if (Number.isInteger(tmp)) {
888
930
  return n;
@@ -968,7 +1010,7 @@ JXG.Math = {
968
1010
  * @param {Number} a Variable number of arguments.
969
1011
  * @returns Number
970
1012
  */
971
- hypot: function() {
1013
+ hypot: function () {
972
1014
  var i, le, a, sum;
973
1015
 
974
1016
  le = arguments.length;
@@ -985,7 +1027,7 @@ JXG.Math = {
985
1027
  * @param {Number} x
986
1028
  * @returns Number
987
1029
  */
988
- hstep: function(x) {
1030
+ hstep: function (x) {
989
1031
  return (x > 0.0) ? 1 :
990
1032
  ((x < 0.0) ? 0.0 : 0.5);
991
1033
  },
@@ -997,7 +1039,7 @@ JXG.Math = {
997
1039
  * @param {Number} z
998
1040
  * @returns Number
999
1041
  */
1000
- gamma: function(z) {
1042
+ gamma: function (z) {
1001
1043
  var x, y, t, i, le,
1002
1044
  g = 7,
1003
1045
  // n = 9,
@@ -1164,7 +1206,7 @@ JXG.Math = {
1164
1206
  * JXG.Math.decToFraction(-10.66666666666667);
1165
1207
  * // Result: [-1, 10, 2, 3 ]
1166
1208
  */
1167
- decToFraction: function(x, order) {
1209
+ decToFraction: function (x, order) {
1168
1210
  var lead, sign, a,
1169
1211
  n, n1, n2,
1170
1212
  d, d1, d2,
@@ -1,5 +1,5 @@
1
1
  /*
2
- Copyright 2008-2023
2
+ Copyright 2008-2024
3
3
  Matthias Ehmann,
4
4
  Michael Gerhaeuser,
5
5
  Carsten Miller,
package/src/math/nlp.js CHANGED
@@ -1,5 +1,5 @@
1
1
  /*
2
- Copyright 2008-2023
2
+ Copyright 2008-2024
3
3
  Matthias Ehmann,
4
4
  Carsten Miller,
5
5
  Reinhard Oldenburg,
@@ -1,5 +1,5 @@
1
1
  /*
2
- Copyright 2008-2023
2
+ Copyright 2008-2024
3
3
  Matthias Ehmann,
4
4
  Michael Gerhaeuser,
5
5
  Carsten Miller,
package/src/math/plot.js CHANGED
@@ -1,5 +1,5 @@
1
1
  /*
2
- Copyright 2008-2023
2
+ Copyright 2008-2024
3
3
  Matthias Ehmann,
4
4
  Michael Gerhaeuser,
5
5
  Carsten Miller,
@@ -2028,7 +2028,9 @@ Mat.Plot = {
2028
2028
  },
2029
2029
 
2030
2030
  getInterval: function (curve, ta, tb) {
2031
- var t_int, x_int, y_int;
2031
+ var t_int,
2032
+ // x_int,
2033
+ y_int;
2032
2034
 
2033
2035
  //console.log('critical point', ta, tb);
2034
2036
  IntervalArithmetic.disable();
@@ -2036,7 +2038,7 @@ Mat.Plot = {
2036
2038
  t_int = IntervalArithmetic.Interval(ta, tb);
2037
2039
  curve.board.mathLib = IntervalArithmetic;
2038
2040
  curve.board.mathLibJXG = IntervalArithmetic;
2039
- x_int = curve.X(t_int, true);
2041
+ // x_int = curve.X(t_int, true);
2040
2042
  y_int = curve.Y(t_int, true);
2041
2043
  curve.board.mathLib = Math;
2042
2044
  curve.board.mathLibJXG = JXG.Math;
@@ -2221,16 +2223,16 @@ Mat.Plot = {
2221
2223
  i1,
2222
2224
  i2,
2223
2225
  x,
2224
- y,
2226
+ // y,
2225
2227
  lo,
2226
2228
  hi,
2227
2229
  d_lft,
2228
2230
  d_rgt,
2229
2231
  d_thresh = 100,
2232
+ // d1,
2233
+ // d2,
2230
2234
  di1 = 5,
2231
- di2 = 3,
2232
- d1,
2233
- d2;
2235
+ di2 = 3;
2234
2236
 
2235
2237
  t = group.t;
2236
2238
  console.log("HandleSingularity at t =", t);
@@ -2366,7 +2368,7 @@ Mat.Plot = {
2366
2368
 
2367
2369
  plot_v4: function (curve, ta, tb, steps) {
2368
2370
  var i,
2369
- j,
2371
+ // j,
2370
2372
  le,
2371
2373
  components,
2372
2374
  idx,
@@ -2375,17 +2377,14 @@ Mat.Plot = {
2375
2377
  g,
2376
2378
  start,
2377
2379
  ret,
2378
- x_table,
2379
- y_table,
2380
- t,
2381
- t1,
2382
- t2,
2383
- good,
2384
- bad,
2385
- x_int,
2380
+ x_table, y_table,
2381
+ t, t1, t2,
2382
+ // good,
2383
+ // bad,
2384
+ // x_int,
2386
2385
  y_int,
2387
- degree_x,
2388
- degree_y,
2386
+ // degree_x,
2387
+ // degree_y,
2389
2388
  h = (tb - ta) / steps,
2390
2389
  Ypl = function (x) {
2391
2390
  return curve.Y(x, true);
@@ -2402,9 +2401,9 @@ Mat.Plot = {
2402
2401
  groups = ret[0];
2403
2402
  x_table = ret[1];
2404
2403
  y_table = ret[2];
2405
- degree_x = ret[3];
2406
- degree_y = ret[4];
2407
2404
 
2405
+ // degree_x = ret[3];
2406
+ // degree_y = ret[4];
2408
2407
  // if (degree_x >= 0) {
2409
2408
  // console.log("x polynomial of degree", degree_x);
2410
2409
  // }
@@ -2439,8 +2438,8 @@ Mat.Plot = {
2439
2438
  le = groups[g].idx - 1;
2440
2439
  }
2441
2440
 
2442
- good = 0;
2443
- bad = 0;
2441
+ // good = 0;
2442
+ // bad = 0;
2444
2443
  // Insert all uncritical points until next critical point
2445
2444
  for (i = start; i < le - 2; i++) {
2446
2445
  this._insertPoint_v4(
@@ -2448,7 +2447,7 @@ Mat.Plot = {
2448
2447
  [1, comp.x_values[i], comp.y_values[i]],
2449
2448
  comp.t_values[i]
2450
2449
  );
2451
- j = Math.max(0, i - 2);
2450
+ // j = Math.max(0, i - 2);
2452
2451
  // Add more points in critical intervals
2453
2452
  if (
2454
2453
  //degree_y === -1 && // No polynomial
@@ -2497,9 +2496,9 @@ Mat.Plot = {
2497
2496
  );
2498
2497
  }
2499
2498
  }
2500
- bad++;
2501
- } else {
2502
- good++;
2499
+ // bad++;
2500
+ // } else {
2501
+ // good++;
2503
2502
  }
2504
2503
  }
2505
2504
  // console.log("GOOD", good, "BAD", bad);
package/src/math/poly.js CHANGED
@@ -1,5 +1,5 @@
1
1
  /*
2
- Copyright 2008-2023
2
+ Copyright 2008-2024
3
3
  Matthias Ehmann,
4
4
  Michael Gerhaeuser,
5
5
  Carsten Miller,
@@ -1,5 +1,5 @@
1
1
  /*
2
- Copyright 2008-2023
2
+ Copyright 2008-2024
3
3
  Matthias Ehmann,
4
4
  Carsten Miller,
5
5
  Andreas Walter,
package/src/math/qdt.js CHANGED
@@ -1,5 +1,5 @@
1
1
  /*
2
- Copyright 2008-2023
2
+ Copyright 2008-2024
3
3
  Matthias Ehmann,
4
4
  Michael Gerhaeuser,
5
5
  Carsten Miller,
@@ -1,5 +1,5 @@
1
1
  /*
2
- Copyright 2008-2023
2
+ Copyright 2008-2024
3
3
  Matthias Ehmann,
4
4
  Michael Gerhaeuser,
5
5
  Carsten Miller,
@@ -1,5 +1,5 @@
1
1
  /*
2
- Copyright 2008-2023
2
+ Copyright 2008-2024
3
3
  Matthias Ehmann,
4
4
  Michael Gerhaeuser,
5
5
  Carsten Miller,
package/src/options.js CHANGED
@@ -1,5 +1,5 @@
1
1
  /*
2
- Copyright 2008-2023
2
+ Copyright 2008-2024
3
3
  Matthias Ehmann,
4
4
  Michael Gerhaeuser,
5
5
  Carsten Miller,
@@ -2054,6 +2054,50 @@ JXG.Options = {
2054
2054
  */
2055
2055
  needsRegularUpdate: true,
2056
2056
 
2057
+ /**
2058
+ * If some size of an element is controlled by a function, like the circle radius
2059
+ * or segments of fixed length, this attribute controls what happens if the value
2060
+ * is negative. By default, the absolute value is taken. If true, the maximum
2061
+ * of 0 and the value is used.
2062
+ *
2063
+ * @type Boolean
2064
+ * @default false
2065
+ * @name JXG.GeometryElement#nonnegativeOnly
2066
+ * @example
2067
+ * var slider = board.create('slider', [[4, -3], [4, 3], [-4, 1, 4]], { name: 'a'});
2068
+ * var circle = board.create('circle', [[-1, 0], 1], {
2069
+ * nonnegativeOnly: true
2070
+ * });
2071
+ * circle.setRadius('a'); // Use JessieCode
2072
+ * var seg = board.create('segment', [[-4, 3], [0, 3], () => slider.Value()], {
2073
+ * point1: {visible: true},
2074
+ * point2: {visible: true},
2075
+ * nonnegativeOnly: true
2076
+ * });
2077
+ *
2078
+ * </pre><div id="JXG9cb76224-1f78-4488-b20f-800788768bc9" class="jxgbox" style="width: 300px; height: 300px;"></div>
2079
+ * <script type="text/javascript">
2080
+ * (function() {
2081
+ * var board = JXG.JSXGraph.initBoard('JXG9cb76224-1f78-4488-b20f-800788768bc9',
2082
+ * {boundingbox: [-8, 8, 8,-8], axis: true, showcopyright: false, shownavigation: false});
2083
+ * var slider = board.create('slider', [[4, -3], [4, 3], [-4, 1, 4]], { name: 'a'});
2084
+ * var circle = board.create('circle', [[-1, 0], 1], {
2085
+ * nonnegativeOnly: true
2086
+ * });
2087
+ * circle.setRadius('a'); // Use JessieCode
2088
+ * var seg = board.create('segment', [[-4, 3], [0, 3], () => slider.Value()], {
2089
+ * point1: {visible: true},
2090
+ * point2: {visible: true},
2091
+ * nonnegativeOnly: true
2092
+ * });
2093
+ *
2094
+ * })();
2095
+ *
2096
+ * </script><pre>
2097
+ *
2098
+ */
2099
+ nonnegativeOnly: false,
2100
+
2057
2101
  /**
2058
2102
  * Precision options for JSXGraph elements.
2059
2103
  * This attributes takes either the value 'inherit' or an object of the form:
@@ -4410,6 +4454,7 @@ JXG.Options = {
4410
4454
  label: {
4411
4455
  position: 'urt'
4412
4456
  }
4457
+
4413
4458
  /**#@-*/
4414
4459
  },
4415
4460
 
@@ -9478,9 +9523,9 @@ JXG.Options = {
9478
9523
  validatePositiveInteger = function (v) {
9479
9524
  return validateInteger(v) && v > 0;
9480
9525
  },
9481
- validateScreenCoords = function (v) {
9482
- return v.length >= 2 && validateInteger(v[0]) && validateInteger(v[1]);
9483
- },
9526
+ // validateScreenCoords = function (v) {
9527
+ // return v.length >= 2 && validateInteger(v[0]) && validateInteger(v[1]);
9528
+ // },
9484
9529
  validateRenderer = function (v) {
9485
9530
  return (v === 'vml' || v === 'svg' || v === 'canvas' || v === 'no');
9486
9531
  },
package/src/options3d.js CHANGED
@@ -31,7 +31,7 @@ JXG.extend(Options, {
31
31
  * @type Line3D
32
32
  * @name View3D#xAxis
33
33
  */
34
- xAxis: { visible: true, point2: { name: "x" } },
34
+ xAxis: { visible: true, point2: { name: "x" }, strokeColor: JXG.palette.red },
35
35
 
36
36
  /**
37
37
  * Attributes of the 3D y-axis.
@@ -39,7 +39,7 @@ JXG.extend(Options, {
39
39
  * @type Line3D
40
40
  * @name View3D#yAxis
41
41
  */
42
- yAxis: { visible: true, point2: { name: "y" } },
42
+ yAxis: { visible: true, point2: { name: "y" }, strokeColor: JXG.palette.green },
43
43
 
44
44
  /**
45
45
  * Attributes of the 3D z-axis.
@@ -47,7 +47,7 @@ JXG.extend(Options, {
47
47
  * @type Line3D
48
48
  * @name View3D#zAxis
49
49
  */
50
- zAxis: { visible: true, point2: { name: "z" } },
50
+ zAxis: { visible: true, point2: { name: "z" }, strokeColor: JXG.palette.blue },
51
51
 
52
52
  // Planes
53
53
  /**
@@ -492,7 +492,7 @@ JXG.extend(Options, {
492
492
  },
493
493
  continuous: true,
494
494
  slider: {
495
- visible: true,
495
+ visible: 'inherit',
496
496
  style: 6,
497
497
  point1: { frozen: true },
498
498
  point2: { frozen: true },
@@ -560,7 +560,7 @@ JXG.extend(Options, {
560
560
  },
561
561
  continuous: true,
562
562
  slider: {
563
- visible: true,
563
+ visible: 'inherit',
564
564
  style: 6,
565
565
  point1: { frozen: true },
566
566
  point2: { frozen: true },
@@ -570,6 +570,74 @@ JXG.extend(Options, {
570
570
  }
571
571
  },
572
572
 
573
+ /**
574
+ * Specify the user handling of the bank angle.
575
+ * <ul>
576
+ * <li><tt>pointer</tt> sub-attributes:
577
+ * <ul>
578
+ * <li><tt>enabled</tt>: Boolean that specifies whether pointer navigation is allowed by elevation.
579
+ * <li><tt>speed</tt>: Number indicating how many passes the range of the el_slider makes when the cursor crosses the entire board once in the horizontal direction.
580
+ * <li><tt>outside</tt>: Boolean that specifies whether the pointer navigation is continued when the cursor leaves the board.
581
+ * <li><tt>button</tt>: Which button of the pointer should be used? (<tt>'-1'</tt> (=no button), <tt>'0'</tt> or <tt>'2'</tt>)
582
+ * <li><tt>key</tt>: Should an additional key be pressed? (<tt>'none'</tt>, <tt>'shift'</tt> or <tt>'ctrl'</tt>)
583
+ * </ul>
584
+ * <li><tt>keyboard</tt> sub-attributes:
585
+ * <ul>
586
+ * <li><tt>enabled</tt>: Boolean that specifies whether the keyboard (arrow keys) can be used to navigate the board.
587
+ * <li><tt>step</tt>: Size of the step per keystroke.
588
+ * <li><tt>key</tt>: Should an additional key be pressed? (<tt>'none'</tt>, <tt>'shift'</tt> or <tt>'ctrl'</tt>)
589
+ * </ul>
590
+ * <li><tt>continuous</tt>: Boolean that specifies whether the el_slider starts again from the beginning when its end is reached.
591
+ * <li><tt>slider</tt> attributes of the el_slider ({@link Slider}) with additional
592
+ * <ul>
593
+ * <li><tt>min</tt>: Minimum value.
594
+ * <li><tt>max</tt>: Maximum value.
595
+ * <li><tt>start</tt>: Start value.
596
+ * </ul>
597
+ * </ul>
598
+ *
599
+ * @name View3D#bank
600
+ * @type Object
601
+ * @default <pre>{
602
+ * pointer: {enabled: true, speed: 1, outside: true, button: -1, key: 'none'},
603
+ * keyboard: {enabled: true, step: 10, key: 'ctrl'},
604
+ * continuous: true,
605
+ * slider: {
606
+ * visible: true,
607
+ * style: 6,
608
+ * point1: {frozen: true},
609
+ * point2: {frozen: true},
610
+ * min: 0,
611
+ * max: 2 * Math.PI,
612
+ * start: 0.3
613
+ * },
614
+ * }<pre>
615
+ */
616
+ bank: {
617
+ pointer: {
618
+ enabled: true,
619
+ speed: 0.08,
620
+ outside: true,
621
+ button: -1,
622
+ key: 'none'
623
+ },
624
+ keyboard: {
625
+ enabled: true,
626
+ step: 10,
627
+ key: 'ctrl'
628
+ },
629
+ continuous: true,
630
+ slider: {
631
+ visible: 'inherit',
632
+ style: 6,
633
+ point1: { frozen: true },
634
+ point2: { frozen: true },
635
+ min: -Math.PI,
636
+ max: Math.PI,
637
+ start: 0.0
638
+ }
639
+ },
640
+
573
641
  trackball: {
574
642
  enabled: false,
575
643
  outside: true,
@@ -594,6 +662,15 @@ JXG.extend(Options, {
594
662
  */
595
663
  fov: 1 / 5 * 2 * Math.PI,
596
664
 
665
+ /**
666
+ * When this option is enabled, points closer to the screen are drawn
667
+ * over points further from the screen within each layer.
668
+ *
669
+ * @name View3D#depthOrderPoints
670
+ * @default false
671
+ */
672
+ depthOrderPoints: false,
673
+
597
674
  /**
598
675
  * Fixed values for the view, which can be changed using keyboard keys `picture-up` and `picture-down`.
599
676
  * Array of the form: [[el0, az0, r0], [el1, az1, r1, ...[eln, azn, rn]]
@@ -1,5 +1,5 @@
1
1
  /*
2
- Copyright 2008-2023
2
+ Copyright 2008-2024
3
3
  Matthias Ehmann,
4
4
  Michael Gerhaeuser,
5
5
  Carsten Miller,
@@ -1,5 +1,5 @@
1
1
  /*
2
- Copyright 2008-2023
2
+ Copyright 2008-2024
3
3
  Matthias Ehmann,
4
4
  Michael Gerhaeuser,
5
5
  Carsten Miller,
@@ -1,7 +1,7 @@
1
1
  /*
2
2
  JessieCode Interpreter and Compiler
3
3
 
4
- Copyright 2011-2023
4
+ Copyright 2011-2024
5
5
  Michael Gerhaeuser,
6
6
  Alfred Wassermann
7
7
 
@@ -36,15 +36,15 @@
36
36
  * JSXGraph to display interactive math graphics.
37
37
  */
38
38
 
39
- import JXG from "../jxg";
40
- import Const from "../base/constants";
41
- import Text from "../base/text";
42
- import Mat from "../math/math";
43
- import Interval from "../math/ia";
44
- import Geometry from "../math/geometry";
45
- import Statistics from "../math/statistics";
46
- import Type from "../utils/type";
47
- import Env from "../utils/env";
39
+ import JXG from "../jxg.js";
40
+ import Const from "../base/constants.js";
41
+ import Text from "../base/text.js";
42
+ import Mat from "../math/math.js";
43
+ import Interval from "../math/ia.js";
44
+ import Geometry from "../math/geometry.js";
45
+ import Statistics from "../math/statistics.js";
46
+ import Type from "../utils/type.js";
47
+ import Env from "../utils/env.js";
48
48
 
49
49
  // IE 6-8 compatibility
50
50
  if (!Object.create) {
@@ -1110,7 +1110,8 @@ JXG.extend(JXG.JessieCode.prototype, /** @lends JXG.JessieCode.prototype */ {
1110
1110
 
1111
1111
  // The $()-function-calls are special because their parameter is given as a string, not as a node_var.
1112
1112
  if (node.type === 'node_op' && node.value === 'op_execfun' &&
1113
- node.children.length > 1 && node.children[0].value === '$' &&
1113
+ node.children.length > 1 &&
1114
+ (node.children[0].value === '$' || node.children[0].value === '$value') &&
1114
1115
  node.children[1].length > 0) {
1115
1116
 
1116
1117
  e = node.children[1][0].value;
@@ -1,5 +1,5 @@
1
1
  /*
2
- Copyright 2008-2023
2
+ Copyright 2008-2024
3
3
  Matthias Ehmann,
4
4
  Michael Gerhaeuser,
5
5
  Carsten Miller,
@@ -1,5 +1,5 @@
1
1
  /*
2
- Copyright 2008-2023
2
+ Copyright 2008-2024
3
3
  Matthias Ehmann,
4
4
  Carsten Miller,
5
5
  Alfred Wassermann
@@ -156,12 +156,19 @@ JXG.PrefixParser = {
156
156
  throw new Error("PrefixParser.parse: " + fun + " is not allowed");
157
157
  }
158
158
  } else {
159
- // Allow shortcut 'V' for 'Value'
160
159
  fun = term[0];
160
+
161
+ // Allow shortcut 'V' for 'Value'
161
162
  if (fun === 'V') {
162
163
  fun = 'Value';
163
164
  }
164
165
 
166
+ // get coords always with z
167
+ // (its visibility is controlled by the attribute function formatCoords)
168
+ if (fun === 'Coords') {
169
+ term[2] = 'true';
170
+ }
171
+
165
172
  if (!Type.exists(term[1][fun])) {
166
173
  throw new Error("PrefixParser.parse: " + fun + " is not a method of " + term[1]);
167
174
  }
@@ -1,5 +1,5 @@
1
1
  /*
2
- Copyright 2008-2023
2
+ Copyright 2008-2024
3
3
  Matthias Ehmann,
4
4
  Michael Gerhaeuser,
5
5
  Carsten Miller,
@@ -1,5 +1,5 @@
1
1
  /*
2
- Copyright 2008-2023
2
+ Copyright 2008-2024
3
3
  Matthias Ehmann,
4
4
  Michael Gerhaeuser,
5
5
  Carsten Miller,
@@ -1,5 +1,5 @@
1
1
  /*
2
- Copyright 2008-2023
2
+ Copyright 2008-2024
3
3
  Matthias Ehmann,
4
4
  Michael Gerhaeuser,
5
5
  Carsten Miller,
@@ -1,5 +1,5 @@
1
1
  /*
2
- Copyright 2008-2023
2
+ Copyright 2008-2024
3
3
  Matthias Ehmann,
4
4
  Michael Gerhaeuser,
5
5
  Carsten Miller,
@@ -1,5 +1,5 @@
1
1
  /*
2
- Copyright 2008-2023
2
+ Copyright 2008-2024
3
3
  Matthias Ehmann,
4
4
  Michael Gerhaeuser,
5
5
  Carsten Miller,
@@ -1,5 +1,5 @@
1
1
  /*
2
- Copyright 2008-2023
2
+ Copyright 2008-2024
3
3
  Matthias Ehmann,
4
4
  Michael Gerhaeuser,
5
5
  Carsten Miller,