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.
- package/README.md +2 -2
- package/distrib/README.md +2 -2
- package/distrib/geogebra.min.js +3 -3
- package/distrib/geonext.min.js +3 -3
- package/distrib/index.d.ts +4964 -4627
- package/distrib/intergeo.min.js +3 -3
- package/distrib/jsxgraph.css +10 -15
- package/distrib/jsxgraphcore.js +9 -25
- package/distrib/jsxgraphsrc.js +28437 -25331
- package/distrib/sketch.min.js +3 -3
- package/package.json +11 -22
- package/src/base/board.js +555 -427
- package/src/base/chart.js +1 -1
- package/src/base/circle.js +23 -1
- package/src/base/composition.js +1 -1
- package/src/base/constants.js +33 -11
- package/src/base/coords.js +4 -4
- package/src/base/coordselement.js +47 -20
- package/src/base/curve.js +308 -117
- package/src/base/element.js +80 -51
- package/src/base/foreignobject.js +463 -0
- package/src/base/group.js +2 -2
- package/src/base/image.js +12 -15
- package/src/base/line.js +1 -1
- package/src/base/point.js +20 -41
- package/src/base/polygon.js +75 -18
- package/src/base/text.js +116 -63
- package/src/base/ticks.js +35 -12
- package/src/base/transformation.js +1 -1
- package/src/base/turtle.js +1 -1
- package/src/element/arc.js +1 -1
- package/src/element/button.js +29 -2
- package/src/element/checkbox.js +31 -1
- package/src/element/comb.js +5 -2
- package/src/element/composition.js +27 -6
- package/src/element/conic.js +46 -5
- package/src/element/input.js +32 -1
- package/src/element/locus.js +2 -2
- package/src/element/measure.js +9 -4
- package/src/element/sector.js +46 -12
- package/src/element/slider.js +17 -12
- package/src/element/slopetriangle.js +1 -1
- package/src/jsxgraph.js +28 -9
- package/src/jxg.js +4 -3
- package/src/loadjsxgraph.js +3 -2
- package/src/math/bst.js +1 -1
- package/src/math/clip.js +550 -345
- package/src/math/complex.js +1 -1
- package/src/math/extrapolate.js +1 -1
- package/src/math/geometry.js +109 -128
- package/src/math/ia.js +290 -21
- package/src/math/math.js +30 -1
- package/src/math/metapost.js +1 -1
- package/src/math/nlp.js +25 -5
- package/src/math/numerics.js +183 -4
- package/src/math/plot.js +4 -4
- package/src/math/poly.js +1 -1
- package/src/math/probfuncs.js +2 -1
- package/src/math/qdt.js +68 -62
- package/src/math/statistics.js +58 -7
- package/src/math/symbolic.js +1 -1
- package/src/options.js +393 -115
- package/src/parser/ca.js +1297 -1291
- package/src/parser/datasource.js +1 -1
- package/src/parser/geonext.js +6 -6
- package/src/parser/jessiecode.js +378 -79
- package/src/parser/jessiescript.js +1 -1
- package/src/reader/cinderella.js +1 -1
- package/src/reader/file.js +1 -1
- package/src/reader/geogebra.js +1 -1
- package/src/reader/geonext.js +1 -1
- package/src/reader/graph.js +1 -1
- package/src/reader/intergeo.js +1 -1
- package/src/reader/sketch.js +25 -17
- package/src/renderer/abstract.js +25 -7
- package/src/renderer/canvas.js +20 -15
- package/src/renderer/no.js +11 -4
- package/src/renderer/svg.js +68 -49
- package/src/renderer/vml.js +36 -32
- package/src/server/server.js +1 -1
- package/src/utils/base64.js +2 -2
- package/src/utils/color.js +147 -3
- package/src/utils/dump.js +20 -14
- package/src/utils/env.js +26 -62
- package/src/utils/event.js +1 -1
- package/src/utils/expect.js +1 -1
- package/src/utils/type.js +30 -19
- package/src/utils/xml.js +1 -1
- package/src/utils/zip.js +1 -1
- package/CHANGELOG.md +0 -1305
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
/*
|
|
2
|
-
Copyright 2008-
|
|
2
|
+
Copyright 2008-2022
|
|
3
3
|
Matthias Ehmann,
|
|
4
4
|
Michael Gerhaeuser,
|
|
5
5
|
Carsten Miller,
|
|
@@ -153,7 +153,13 @@ define([
|
|
|
153
153
|
|
|
154
154
|
t.update();
|
|
155
155
|
|
|
156
|
-
|
|
156
|
+
/**
|
|
157
|
+
* Used to generate a polynomial for the orthogonal projection
|
|
158
|
+
* @name Orthogonalprojection#generatePolynomial
|
|
159
|
+
* @returns {Array} An array containing the generated polynomial.
|
|
160
|
+
* @private
|
|
161
|
+
*/
|
|
162
|
+
t.generatePolynomial = function () {
|
|
157
163
|
/*
|
|
158
164
|
* Perpendicular takes point P and line L and creates point T and line M:
|
|
159
165
|
*
|
|
@@ -353,7 +359,13 @@ define([
|
|
|
353
359
|
|
|
354
360
|
t.update();
|
|
355
361
|
|
|
356
|
-
|
|
362
|
+
/**
|
|
363
|
+
* Used to generate a polynomial for the perpendicular point
|
|
364
|
+
* @name PerpendicularPoint#generatePolynomial
|
|
365
|
+
* @returns {Array} An array containing the generated polynomial.
|
|
366
|
+
* @private
|
|
367
|
+
*/
|
|
368
|
+
t.generatePolynomial = function () {
|
|
357
369
|
/*
|
|
358
370
|
* Perpendicular takes point P and line L and creates point T and line M:
|
|
359
371
|
*
|
|
@@ -588,7 +600,13 @@ define([
|
|
|
588
600
|
|
|
589
601
|
t.prepareUpdate().update();
|
|
590
602
|
|
|
591
|
-
|
|
603
|
+
/**
|
|
604
|
+
* Used to generate a polynomial for the midpoint.
|
|
605
|
+
* @name Midpoint#generatePolynomial
|
|
606
|
+
* @returns {Array} An array containing the generated polynomial.
|
|
607
|
+
* @private
|
|
608
|
+
*/
|
|
609
|
+
t.generatePolynomial = function () {
|
|
592
610
|
/*
|
|
593
611
|
* Midpoint takes two point A and B or line L (with points P and Q) and creates point T:
|
|
594
612
|
*
|
|
@@ -2276,7 +2294,7 @@ define([
|
|
|
2276
2294
|
* within the interval <tt>i</tt>.
|
|
2277
2295
|
* @example
|
|
2278
2296
|
* var c1 = board.create('functiongraph', [function (t) { return t*t*t; }]);
|
|
2279
|
-
* var i1 = board.create('integral', [[-
|
|
2297
|
+
* var i1 = board.create('integral', [[-2.0, 2.0], c1]);
|
|
2280
2298
|
* </pre><div class="jxgbox" id="JXGd45d7188-6624-4d6e-bebb-1efa2a305c8a" style="width: 400px; height: 400px;"></div>
|
|
2281
2299
|
* <script type="text/javascript">
|
|
2282
2300
|
* var intex1_board = JXG.JSXGraph.initBoard('JXGd45d7188-6624-4d6e-bebb-1efa2a305c8a', {boundingbox: [-5, 5, 5, -5], axis: true, showcopyright: false, shownavigation: false});
|
|
@@ -2627,7 +2645,10 @@ define([
|
|
|
2627
2645
|
c.elType = 'grid';
|
|
2628
2646
|
c.type = Const.OBJECT_TYPE_GRID;
|
|
2629
2647
|
|
|
2630
|
-
|
|
2648
|
+
/**
|
|
2649
|
+
* @ignore
|
|
2650
|
+
*/
|
|
2651
|
+
c.updateDataArray = function () {
|
|
2631
2652
|
var start, end, i, topLeft, bottomRight,
|
|
2632
2653
|
gridX = Type.evaluate(this.visProp.gridx),
|
|
2633
2654
|
gridY = Type.evaluate(this.visProp.gridy);
|
package/src/element/conic.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
/*
|
|
2
|
-
Copyright 2008-
|
|
2
|
+
Copyright 2008-2022
|
|
3
3
|
Matthias Ehmann,
|
|
4
4
|
Michael Gerhaeuser,
|
|
5
5
|
Carsten Miller,
|
|
@@ -69,7 +69,8 @@ define([
|
|
|
69
69
|
* numbers describing the coordinates of a point. In the latter case the point will be constructed automatically as a fixed invisible point.
|
|
70
70
|
* @param {JXG.Point,array_JXG.Point,array_number,function} point1,point2,number Parent elements can be two elements either of type {@link JXG.Point} or array of
|
|
71
71
|
* numbers describing the coordinates of a point. The third parameter is a number/function which defines the length of the major axis
|
|
72
|
-
*
|
|
72
|
+
* @param {Number} start (Optional) parameter of the curve start, default: 0.
|
|
73
|
+
* @param {Number} end (Optional) parameter for the curve end, default: 2π.
|
|
73
74
|
* @example
|
|
74
75
|
* // Create an Ellipse by three points
|
|
75
76
|
* var A = board.create('point', [-1,4]);
|
|
@@ -78,12 +79,45 @@ define([
|
|
|
78
79
|
* var el = board.create('ellipse',[A,B,C]);
|
|
79
80
|
* </pre><div class="jxgbox" id="JXGa4d7fb6f-8708-4e45-87f2-2379ae2bd2c0" style="width: 300px; height: 300px;"></div>
|
|
80
81
|
* <script type="text/javascript">
|
|
82
|
+
* (function() {
|
|
81
83
|
* var glex1_board = JXG.JSXGraph.initBoard('JXGa4d7fb6f-8708-4e45-87f2-2379ae2bd2c0', {boundingbox:[-6,6,6,-6], keepaspectratio:true, showcopyright: false, shownavigation: false});
|
|
82
84
|
* var A = glex1_board.create('point', [-1,4]);
|
|
83
85
|
* var B = glex1_board.create('point', [-1,-4]);
|
|
84
86
|
* var C = glex1_board.create('point', [1,1]);
|
|
85
87
|
* var el = glex1_board.create('ellipse',[A,B,C]);
|
|
88
|
+
* })();
|
|
86
89
|
* </script><pre>
|
|
90
|
+
*
|
|
91
|
+
* @example
|
|
92
|
+
* // Create an elliptical arc
|
|
93
|
+
* var p1 = board.create('point', [-1, 2]);
|
|
94
|
+
* var p2 = board.create('point', [ 1, 2]);
|
|
95
|
+
* var p3 = board.create('point', [0, 3]);
|
|
96
|
+
*
|
|
97
|
+
* var ell = board.create('ellipse', [
|
|
98
|
+
* p1, p2, p3, 0, Math.PI], {
|
|
99
|
+
* lastArrow: {type: 7}
|
|
100
|
+
* });
|
|
101
|
+
*
|
|
102
|
+
* </pre><div id="JXG950f7c07-27a4-4c67-9505-c73c22ce9345" class="jxgbox" style="width: 300px; height: 300px;"></div>
|
|
103
|
+
* <script type="text/javascript">
|
|
104
|
+
* (function() {
|
|
105
|
+
* var board = JXG.JSXGraph.initBoard('JXG950f7c07-27a4-4c67-9505-c73c22ce9345',
|
|
106
|
+
* {boundingbox: [-8, 8, 8,-8], axis: true, showcopyright: false, shownavigation: false});
|
|
107
|
+
* var p1 = board.create('point', [-1, 2]);
|
|
108
|
+
* var p2 = board.create('point', [ 1, 2]);
|
|
109
|
+
* var p3 = board.create('point', [0, 3]);
|
|
110
|
+
*
|
|
111
|
+
* var ell = board.create('ellipse', [
|
|
112
|
+
* p1, p2, p3, 0, Math.PI], {
|
|
113
|
+
* lastArrow: {type: 7}
|
|
114
|
+
* });
|
|
115
|
+
*
|
|
116
|
+
* })();
|
|
117
|
+
*
|
|
118
|
+
* </script><pre>
|
|
119
|
+
*
|
|
120
|
+
*
|
|
87
121
|
*/
|
|
88
122
|
JXG.createEllipse = function (board, parents, attributes) {
|
|
89
123
|
var polarForm, curve, M, C, majorAxis, i,
|
|
@@ -287,7 +321,8 @@ define([
|
|
|
287
321
|
* numbers describing the coordinates of a point. In the latter case the point will be constructed automatically as a fixed invisible point.
|
|
288
322
|
* @param {JXG.Point,array_JXG.Point,array_number,function} point1,point2,number Parent elements can be two elements either of type {@link JXG.Point} or array of
|
|
289
323
|
* numbers describing the coordinates of a point. The third parameter is a number/function which defines the length of the major axis
|
|
290
|
-
*
|
|
324
|
+
* @param {Number} start (Optional) parameter of the curve start, default: -π.
|
|
325
|
+
* @param {Number} end (Optional) parameter for the curve end, default: π.
|
|
291
326
|
* @example
|
|
292
327
|
* // Create an Hyperbola by three points
|
|
293
328
|
* var A = board.create('point', [-1,4]);
|
|
@@ -296,11 +331,13 @@ define([
|
|
|
296
331
|
* var el = board.create('hyperbola',[A,B,C]);
|
|
297
332
|
* </pre><div class="jxgbox" id="JXGcf99049d-a3fe-407f-b936-27d76550f8c4" style="width: 300px; height: 300px;"></div>
|
|
298
333
|
* <script type="text/javascript">
|
|
334
|
+
* (function(){
|
|
299
335
|
* var glex1_board = JXG.JSXGraph.initBoard('JXGcf99049d-a3fe-407f-b936-27d76550f8c4', {boundingbox:[-6,6,6,-6], keepaspectratio:true, showcopyright: false, shownavigation: false});
|
|
300
336
|
* var A = glex1_board.create('point', [-1,4]);
|
|
301
337
|
* var B = glex1_board.create('point', [-1,-4]);
|
|
302
338
|
* var C = glex1_board.create('point', [1,1]);
|
|
303
339
|
* var el = glex1_board.create('hyperbola',[A,B,C]);
|
|
340
|
+
* })();
|
|
304
341
|
* </script><pre>
|
|
305
342
|
*/
|
|
306
343
|
JXG.createHyperbola = function (board, parents, attributes) {
|
|
@@ -482,12 +519,14 @@ define([
|
|
|
482
519
|
* var el = board.create('parabola',[C,l]);
|
|
483
520
|
* </pre><div class="jxgbox" id="JXG524d1aae-217d-44d4-ac58-a19c7ab1de36" style="width: 300px; height: 300px;"></div>
|
|
484
521
|
* <script type="text/javascript">
|
|
522
|
+
* (function() {
|
|
485
523
|
* var glex1_board = JXG.JSXGraph.initBoard('JXG524d1aae-217d-44d4-ac58-a19c7ab1de36', {boundingbox:[-6,6,6,-6], keepaspectratio:true, showcopyright: false, shownavigation: false});
|
|
486
524
|
* var A = glex1_board.create('point', [-1,4]);
|
|
487
525
|
* var B = glex1_board.create('point', [-1,-4]);
|
|
488
526
|
* var l = glex1_board.create('line', [A,B]);
|
|
489
527
|
* var C = glex1_board.create('point', [1,1]);
|
|
490
528
|
* var el = glex1_board.create('parabola',[C,l]);
|
|
529
|
+
* })();
|
|
491
530
|
* </script><pre>
|
|
492
531
|
*
|
|
493
532
|
* @example
|
|
@@ -506,7 +545,7 @@ define([
|
|
|
506
545
|
*
|
|
507
546
|
*/
|
|
508
547
|
JXG.createParabola = function (board, parents, attributes) {
|
|
509
|
-
var polarForm, curve, M,
|
|
548
|
+
var polarForm, curve, M,
|
|
510
549
|
// focus
|
|
511
550
|
F1 = parents[0],
|
|
512
551
|
// directrix
|
|
@@ -535,7 +574,7 @@ define([
|
|
|
535
574
|
}
|
|
536
575
|
|
|
537
576
|
// Create line if given as array of two points.
|
|
538
|
-
if (Type.isArray(l) && l.length
|
|
577
|
+
if (Type.isArray(l) && l.length === 2) {
|
|
539
578
|
attr_line = Type.copyAttributes(attributes, board.options, 'conic', 'line');
|
|
540
579
|
l = board.create('line', l, attr_line);
|
|
541
580
|
}
|
|
@@ -684,6 +723,7 @@ define([
|
|
|
684
723
|
* var conic = board.create('conic',[A,B,C,D,E]);
|
|
685
724
|
* </pre><div class="jxgbox" id="JXG2d79bd6a-db9b-423c-9cba-2497f0b06320" style="width: 300px; height: 300px;"></div>
|
|
686
725
|
* <script type="text/javascript">
|
|
726
|
+
* (function(){
|
|
687
727
|
* var glex1_board = JXG.JSXGraph.initBoard('JXG2d79bd6a-db9b-423c-9cba-2497f0b06320', {boundingbox:[-6,6,6,-6], keepaspectratio:true, showcopyright: false, shownavigation: false});
|
|
688
728
|
* var A = glex1_board.create('point', [1,5]);
|
|
689
729
|
* var B = glex1_board.create('point', [1,2]);
|
|
@@ -691,6 +731,7 @@ define([
|
|
|
691
731
|
* var D = glex1_board.create('point', [0,0]);
|
|
692
732
|
* var E = glex1_board.create('point', [-1,5]);
|
|
693
733
|
* var conic = glex1_board.create('conic',[A,B,C,D,E]);
|
|
734
|
+
* })();
|
|
694
735
|
* </script><pre>
|
|
695
736
|
*
|
|
696
737
|
* @example
|
package/src/element/input.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
/*
|
|
2
|
-
Copyright 2008-
|
|
2
|
+
Copyright 2008-2022
|
|
3
3
|
Matthias Ehmann,
|
|
4
4
|
Michael Gerhaeuser,
|
|
5
5
|
Carsten Miller,
|
|
@@ -171,6 +171,7 @@ define([
|
|
|
171
171
|
t.Value = function () {
|
|
172
172
|
return this._value;
|
|
173
173
|
};
|
|
174
|
+
|
|
174
175
|
/**
|
|
175
176
|
* Sets value of the input element.
|
|
176
177
|
* @name set
|
|
@@ -180,6 +181,36 @@ define([
|
|
|
180
181
|
* @param {String} val
|
|
181
182
|
* @returns {JXG.GeometryElement} Reference to the element.
|
|
182
183
|
*
|
|
184
|
+
* @example
|
|
185
|
+
* var i1 = board.create('input', [-3, 4, 'sin(x)', 'f(x)='], {cssStyle: 'width:4em', maxlength: 2});
|
|
186
|
+
* var c1 = board.create('checkbox', [-3, 2, 'label 1'], {});
|
|
187
|
+
* var b1 = board.create('button', [-3, -1, 'Change texts', function () {
|
|
188
|
+
* i1.setText('g(x)');
|
|
189
|
+
* i1.set('cos(x)');
|
|
190
|
+
* c1.setText('label 2');
|
|
191
|
+
* b1.setText('Texts are changed');
|
|
192
|
+
* }],
|
|
193
|
+
* {cssStyle: 'width:400px'});
|
|
194
|
+
*
|
|
195
|
+
* </pre><div id="JXG11cac8ff-2354-47e7-9da4-eb298e53de05" class="jxgbox" style="width: 300px; height: 300px;"></div>
|
|
196
|
+
* <script type="text/javascript">
|
|
197
|
+
* (function() {
|
|
198
|
+
* var board = JXG.JSXGraph.initBoard('JXG11cac8ff-2354-47e7-9da4-eb298e53de05',
|
|
199
|
+
* {boundingbox: [-8, 8, 8,-8], axis: true, showcopyright: false, shownavigation: false});
|
|
200
|
+
* var i1 = board.create('input', [-3, 4, 'sin(x)', 'f(x)='], {cssStyle: 'width:4em', maxlength: 2});
|
|
201
|
+
* var c1 = board.create('checkbox', [-3, 2, 'label 1'], {});
|
|
202
|
+
* var b1 = board.create('button', [-3, -1, 'Change texts', function () {
|
|
203
|
+
* i1.setText('g(x)');
|
|
204
|
+
* i1.set('cos(x)');
|
|
205
|
+
* c1.setText('label 2');
|
|
206
|
+
* b1.setText('Texts are changed');
|
|
207
|
+
* }],
|
|
208
|
+
* {cssStyle: 'width:400px'});
|
|
209
|
+
*
|
|
210
|
+
* })();
|
|
211
|
+
*
|
|
212
|
+
* </script><pre>
|
|
213
|
+
*
|
|
183
214
|
*/
|
|
184
215
|
t.set = function (val) {
|
|
185
216
|
this._value = val;
|
package/src/element/locus.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
/*
|
|
2
|
-
Copyright 2008-
|
|
2
|
+
Copyright 2008-2022
|
|
3
3
|
Matthias Ehmann,
|
|
4
4
|
Michael Gerhaeuser,
|
|
5
5
|
Carsten Miller,
|
|
@@ -112,7 +112,7 @@ define([
|
|
|
112
112
|
c.setParents([p.id]);
|
|
113
113
|
|
|
114
114
|
/**
|
|
115
|
-
*
|
|
115
|
+
* Should be documented in JXG.Curve
|
|
116
116
|
* @ignore
|
|
117
117
|
*/
|
|
118
118
|
c.updateDataArray = function () {
|
package/src/element/measure.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
/*
|
|
2
|
-
Copyright 2008-
|
|
2
|
+
Copyright 2008-2022
|
|
3
3
|
Matthias Ehmann,
|
|
4
4
|
Michael Gerhaeuser,
|
|
5
5
|
Carsten Miller,
|
|
@@ -85,7 +85,7 @@ define([
|
|
|
85
85
|
*/
|
|
86
86
|
JXG.createTapemeasure = function (board, parents, attributes) {
|
|
87
87
|
var pos0, pos1,
|
|
88
|
-
attr, withTicks, withText,
|
|
88
|
+
attr, withTicks, withText, digits,
|
|
89
89
|
li, p1, p2, n, ti;
|
|
90
90
|
|
|
91
91
|
pos0 = parents[0];
|
|
@@ -106,7 +106,12 @@ define([
|
|
|
106
106
|
attr = Type.copyAttributes(attributes, board.options, 'tapemeasure');
|
|
107
107
|
withTicks = attr.withticks;
|
|
108
108
|
withText = attr.withlabel;
|
|
109
|
-
|
|
109
|
+
digits = attr.digits;
|
|
110
|
+
|
|
111
|
+
if (digits === 2 && attr.precision !== 2) {
|
|
112
|
+
// Backward compatibility
|
|
113
|
+
digits = attr.precision;
|
|
114
|
+
}
|
|
110
115
|
|
|
111
116
|
// Below, we will replace the label by the measurement function.
|
|
112
117
|
if (withText) {
|
|
@@ -122,7 +127,7 @@ define([
|
|
|
122
127
|
n = '';
|
|
123
128
|
}
|
|
124
129
|
li.label.setText(function () {
|
|
125
|
-
return n + Type.toFixed(p1.Dist(p2),
|
|
130
|
+
return n + Type.toFixed(p1.Dist(p2), digits);
|
|
126
131
|
});
|
|
127
132
|
}
|
|
128
133
|
|
package/src/element/sector.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
/*
|
|
2
|
-
Copyright 2008-
|
|
2
|
+
Copyright 2008-2022
|
|
3
3
|
Matthias Ehmann,
|
|
4
4
|
Michael Gerhaeuser,
|
|
5
5
|
Carsten Miller,
|
|
@@ -198,7 +198,10 @@ define([
|
|
|
198
198
|
};
|
|
199
199
|
|
|
200
200
|
if (type === '2lines') {
|
|
201
|
-
|
|
201
|
+
/**
|
|
202
|
+
* @ignore
|
|
203
|
+
*/
|
|
204
|
+
el.Radius = function () {
|
|
202
205
|
var r = Type.evaluate(parents[4]);
|
|
203
206
|
if (r === 'auto') {
|
|
204
207
|
return this.autoRadius();
|
|
@@ -299,8 +302,8 @@ define([
|
|
|
299
302
|
};
|
|
300
303
|
|
|
301
304
|
el.methodMap = JXG.deepCopy(el.methodMap, {
|
|
302
|
-
radius: '
|
|
303
|
-
getRadius: '
|
|
305
|
+
radius: 'Radius',
|
|
306
|
+
getRadius: 'Radius',
|
|
304
307
|
setRadius: 'setRadius'
|
|
305
308
|
});
|
|
306
309
|
|
|
@@ -364,8 +367,8 @@ define([
|
|
|
364
367
|
center: 'center',
|
|
365
368
|
radiuspoint: 'radiuspoint',
|
|
366
369
|
anglepoint: 'anglepoint',
|
|
367
|
-
radius: '
|
|
368
|
-
getRadius: '
|
|
370
|
+
radius: 'Radius',
|
|
371
|
+
getRadius: 'Radius',
|
|
369
372
|
setRadius: 'setRadius'
|
|
370
373
|
});
|
|
371
374
|
|
|
@@ -579,7 +582,10 @@ define([
|
|
|
579
582
|
* @param {Number, Function} value New radius.
|
|
580
583
|
*/
|
|
581
584
|
el.setRadius = function (val) {
|
|
582
|
-
|
|
585
|
+
/**
|
|
586
|
+
* @ignore
|
|
587
|
+
*/
|
|
588
|
+
el.Radius = function () {
|
|
583
589
|
var r = Type.evaluate(val);
|
|
584
590
|
if (r === 'auto') {
|
|
585
591
|
return this.autoRadius();
|
|
@@ -965,8 +971,11 @@ define([
|
|
|
965
971
|
*/
|
|
966
972
|
el.pointsquare = el.point3 = el.anglepoint = points[2];
|
|
967
973
|
|
|
968
|
-
|
|
974
|
+
/**
|
|
975
|
+
* @ignore
|
|
976
|
+
*/
|
|
969
977
|
el.Radius = function () {
|
|
978
|
+
// Set the angle radius, also @see @link Sector#autoRadius
|
|
970
979
|
var r = Type.evaluate(radius);
|
|
971
980
|
if (r === 'auto') {
|
|
972
981
|
return el.autoRadius();
|
|
@@ -1110,14 +1119,35 @@ define([
|
|
|
1110
1119
|
*
|
|
1111
1120
|
*/
|
|
1112
1121
|
el.setAngle = function (val) {
|
|
1113
|
-
var
|
|
1122
|
+
var t1, t2, val2,
|
|
1114
1123
|
p = this.anglepoint,
|
|
1115
1124
|
q = this.radiuspoint;
|
|
1116
1125
|
|
|
1117
1126
|
if (p.draggable()) {
|
|
1118
|
-
|
|
1119
|
-
p.addTransform(q,
|
|
1120
|
-
//
|
|
1127
|
+
t1 = this.board.create('transform', [val, this.center], {type: 'rotate'});
|
|
1128
|
+
p.addTransform(q, t1);
|
|
1129
|
+
// Immediately apply the transformation.
|
|
1130
|
+
// This prevents that jumping elements can be watched.
|
|
1131
|
+
t1.update();
|
|
1132
|
+
p.moveTo(Mat.matVecMult(t1.matrix, q.coords.usrCoords));
|
|
1133
|
+
|
|
1134
|
+
if (Type.isFunction(val)) {
|
|
1135
|
+
/**
|
|
1136
|
+
* @ignore
|
|
1137
|
+
*/
|
|
1138
|
+
val2 = function() { return Math.PI * 2 - val(); };
|
|
1139
|
+
} else {
|
|
1140
|
+
/**
|
|
1141
|
+
* @ignore
|
|
1142
|
+
*/
|
|
1143
|
+
val2 = function() { return Math.PI * 2 - val; };
|
|
1144
|
+
}
|
|
1145
|
+
t2 = this.board.create('transform', [val2, this.center], {type: 'rotate'});
|
|
1146
|
+
p.coords.on('update', function() {
|
|
1147
|
+
t2.update();
|
|
1148
|
+
q.moveTo(Mat.matVecMult(t2.matrix, p.coords.usrCoords));
|
|
1149
|
+
});
|
|
1150
|
+
|
|
1121
1151
|
p.setParents(q);
|
|
1122
1152
|
}
|
|
1123
1153
|
return this;
|
|
@@ -1134,11 +1164,15 @@ define([
|
|
|
1134
1164
|
*/
|
|
1135
1165
|
el.free = function () {
|
|
1136
1166
|
var p = this.anglepoint;
|
|
1167
|
+
|
|
1137
1168
|
if (p.transformations.length > 0) {
|
|
1138
1169
|
p.transformations.pop();
|
|
1139
1170
|
p.isDraggable = true;
|
|
1140
1171
|
p.parents = [];
|
|
1172
|
+
|
|
1173
|
+
p.coords.off('update');
|
|
1141
1174
|
}
|
|
1175
|
+
|
|
1142
1176
|
return this;
|
|
1143
1177
|
};
|
|
1144
1178
|
|
package/src/element/slider.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
/*
|
|
2
|
-
Copyright 2008-
|
|
2
|
+
Copyright 2008-2022
|
|
3
3
|
Matthias Ehmann,
|
|
4
4
|
Michael Gerhaeuser,
|
|
5
5
|
Carsten Miller,
|
|
@@ -143,7 +143,7 @@ define([
|
|
|
143
143
|
* @example
|
|
144
144
|
* // Set colors
|
|
145
145
|
* var sl = board.create('slider', [[-3, 1], [1, 1], [-10, 1, 10]], {
|
|
146
|
-
*
|
|
146
|
+
*
|
|
147
147
|
* baseline: { strokeColor: 'blue'},
|
|
148
148
|
* highline: { strokeColor: 'red'},
|
|
149
149
|
* fillColor: 'yellow',
|
|
@@ -151,16 +151,16 @@ define([
|
|
|
151
151
|
* name: 'xyz', // Not shown, if suffixLabel is set
|
|
152
152
|
* suffixLabel: 'x = ',
|
|
153
153
|
* postLabel: ' u'
|
|
154
|
-
*
|
|
154
|
+
*
|
|
155
155
|
* });
|
|
156
|
-
*
|
|
156
|
+
*
|
|
157
157
|
* </pre><div id="JXGd96c9e2c-2c25-4131-b6cf-9dbb80819401" class="jxgbox" style="width: 300px; height: 300px;"></div>
|
|
158
158
|
* <script type="text/javascript">
|
|
159
159
|
* (function() {
|
|
160
160
|
* var board = JXG.JSXGraph.initBoard('JXGd96c9e2c-2c25-4131-b6cf-9dbb80819401',
|
|
161
161
|
* {boundingbox: [-8, 8, 8,-8], axis: true, showcopyright: false, shownavigation: false});
|
|
162
162
|
* var sl = board.create('slider', [[-3, 1], [1, 1], [-10, 1, 10]], {
|
|
163
|
-
*
|
|
163
|
+
*
|
|
164
164
|
* baseline: { strokeColor: 'blue'},
|
|
165
165
|
* highline: { strokeColor: 'red'},
|
|
166
166
|
* fillColor: 'yellow',
|
|
@@ -168,24 +168,23 @@ define([
|
|
|
168
168
|
* name: 'xyz', // Not shown, if suffixLabel is set
|
|
169
169
|
* suffixLabel: 'x = ',
|
|
170
170
|
* postLabel: ' u'
|
|
171
|
-
*
|
|
171
|
+
*
|
|
172
172
|
* });
|
|
173
|
-
*
|
|
173
|
+
*
|
|
174
174
|
* })();
|
|
175
|
-
*
|
|
175
|
+
*
|
|
176
176
|
* </script><pre>
|
|
177
|
-
*
|
|
177
|
+
*
|
|
178
178
|
*/
|
|
179
179
|
JXG.createSlider = function (board, parents, attributes) {
|
|
180
180
|
var pos0, pos1, smin, start, smax, sdiff,
|
|
181
181
|
p1, p2, l1, ticks, ti, startx, starty, p3, l2, t,
|
|
182
|
-
withText, withTicks, snapWidth, sw, s, attr,
|
|
182
|
+
withText, withTicks, snapWidth, sw, s, attr, digits;
|
|
183
183
|
|
|
184
184
|
attr = Type.copyAttributes(attributes, board.options, 'slider');
|
|
185
185
|
withTicks = attr.withticks;
|
|
186
186
|
withText = attr.withlabel;
|
|
187
187
|
snapWidth = attr.snapwidth;
|
|
188
|
-
precision = attr.precision;
|
|
189
188
|
|
|
190
189
|
// start point
|
|
191
190
|
attr = Type.copyAttributes(attributes, board.options, 'slider', 'point1');
|
|
@@ -324,10 +323,16 @@ define([
|
|
|
324
323
|
},
|
|
325
324
|
function () {
|
|
326
325
|
var n,
|
|
326
|
+
d = Type.evaluate(p3.visProp.digits),
|
|
327
327
|
sl = Type.evaluate(p3.visProp.suffixlabel),
|
|
328
328
|
ul = Type.evaluate(p3.visProp.unitlabel),
|
|
329
329
|
pl = Type.evaluate(p3.visProp.postlabel);
|
|
330
330
|
|
|
331
|
+
if (d === 2 && Type.evaluate(p3.visProp.precision) !== 2) {
|
|
332
|
+
// Backwards compatibility
|
|
333
|
+
d = Type.evaluate(p3.visProp.precision);
|
|
334
|
+
}
|
|
335
|
+
|
|
331
336
|
if (sl !== null) {
|
|
332
337
|
n = sl;
|
|
333
338
|
} else if (p3.name && p3.name !== '') {
|
|
@@ -336,7 +341,7 @@ define([
|
|
|
336
341
|
n = '';
|
|
337
342
|
}
|
|
338
343
|
|
|
339
|
-
n += Type.toFixed(p3.Value(),
|
|
344
|
+
n += Type.toFixed(p3.Value(), d);
|
|
340
345
|
|
|
341
346
|
if (ul !== null) {
|
|
342
347
|
n += ul;
|
package/src/jsxgraph.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
/*
|
|
2
|
-
Copyright 2008-
|
|
2
|
+
Copyright 2008-2022
|
|
3
3
|
Matthias Ehmann,
|
|
4
4
|
Michael Gerhaeuser,
|
|
5
5
|
Carsten Miller,
|
|
@@ -192,6 +192,7 @@ define([
|
|
|
192
192
|
attr.navbar = Type.copyAttributes(attr.navbar, Options, 'navbar');
|
|
193
193
|
attr.screenshot = Type.copyAttributes(attr, Options, 'board', 'screenshot');
|
|
194
194
|
attr.resize = Type.copyAttributes(attr, Options, 'board', 'resize');
|
|
195
|
+
attr.fullscreen = Type.copyAttributes(attr, Options, 'board', 'fullscreen');
|
|
195
196
|
|
|
196
197
|
// Treat moveTarget separately, because deepCopy will not work here.
|
|
197
198
|
// Reason: moveTarget will be an HTML node and it is prevented that Type.deepCopy will copy it.
|
|
@@ -303,6 +304,8 @@ define([
|
|
|
303
304
|
initBoard: function (box, attributes) {
|
|
304
305
|
var originX, originY, unitX, unitY,
|
|
305
306
|
renderer,
|
|
307
|
+
offX = 0,
|
|
308
|
+
offY = 0,
|
|
306
309
|
w, h, dimensions,
|
|
307
310
|
bbox, attr, axattr, axattr_x, axattr_y,
|
|
308
311
|
board;
|
|
@@ -338,15 +341,19 @@ define([
|
|
|
338
341
|
|
|
339
342
|
if (Math.abs(unitX) < Math.abs(unitY)) {
|
|
340
343
|
unitY = Math.abs(unitX) * unitY / Math.abs(unitY);
|
|
344
|
+
// Add the additional units in equal portions above and below
|
|
345
|
+
offY = (h / unitY - (bbox[1] - bbox[3])) * 0.5;
|
|
341
346
|
} else {
|
|
342
347
|
unitX = Math.abs(unitY) * unitX / Math.abs(unitX);
|
|
348
|
+
// Add the additional units in equal portions left and right
|
|
349
|
+
offX = (w / unitX - (bbox[2] - bbox[0])) * 0.5;
|
|
343
350
|
}
|
|
344
351
|
} else {
|
|
345
352
|
unitX = w / (bbox[2] - bbox[0]);
|
|
346
353
|
unitY = h / (bbox[1] - bbox[3]);
|
|
347
354
|
}
|
|
348
|
-
originX = -unitX * bbox[0];
|
|
349
|
-
originY = unitY * bbox[1];
|
|
355
|
+
originX = -unitX * (bbox[0] - offX);
|
|
356
|
+
originY = unitY * (bbox[1] + offY);
|
|
350
357
|
}
|
|
351
358
|
|
|
352
359
|
renderer = this.initRenderer(box, dimensions, attr.document, attr.renderer);
|
|
@@ -541,8 +548,9 @@ define([
|
|
|
541
548
|
if (Env.isBrowser && typeof window === 'object' && typeof document === 'object') {
|
|
542
549
|
Env.addEvent(window, 'load', function () {
|
|
543
550
|
var type, i, j, div,
|
|
544
|
-
id, board,
|
|
545
|
-
|
|
551
|
+
id, board, txt,
|
|
552
|
+
width, height, maxWidth, aspectRatio, cssClasses,
|
|
553
|
+
bbox, axis, grid, code,
|
|
546
554
|
src, request, postpone = false,
|
|
547
555
|
scripts = document.getElementsByTagName('script'),
|
|
548
556
|
init = function (code, type, bbox) {
|
|
@@ -576,8 +584,11 @@ define([
|
|
|
576
584
|
if (Type.exists(type) &&
|
|
577
585
|
(type.toLowerCase() === 'text/jessiescript' || type.toLowerCase() === 'jessiescript' ||
|
|
578
586
|
type.toLowerCase() === 'text/jessiecode' || type.toLowerCase() === 'jessiecode')) {
|
|
579
|
-
|
|
580
|
-
|
|
587
|
+
cssClasses = scripts[i].getAttribute('class', false) || '';
|
|
588
|
+
width = scripts[i].getAttribute('width', false) || '';
|
|
589
|
+
height = scripts[i].getAttribute('height', false) || '';
|
|
590
|
+
maxWidth = scripts[i].getAttribute('maxwidth', false) || '100%';
|
|
591
|
+
aspectRatio = scripts[i].getAttribute('aspectratio', false) || '1/1';
|
|
581
592
|
bbox = scripts[i].getAttribute('boundingbox', false) || '-5, 5, 5, -5';
|
|
582
593
|
id = scripts[i].getAttribute('container', false);
|
|
583
594
|
src = scripts[i].getAttribute('src', false);
|
|
@@ -597,8 +608,14 @@ define([
|
|
|
597
608
|
id = 'jessiescript_autgen_jxg_' + i;
|
|
598
609
|
div = document.createElement('div');
|
|
599
610
|
div.setAttribute('id', id);
|
|
600
|
-
|
|
601
|
-
|
|
611
|
+
|
|
612
|
+
txt = (width !== '') ? ('width:' + width + ';') : '';
|
|
613
|
+
txt += (height !== '') ? ('height:' + height + ';') : '';
|
|
614
|
+
txt += (maxWidth !== '') ? ('max-width:' + maxWidth + ';') : '';
|
|
615
|
+
txt += (aspectRatio !== '') ? ('aspect-ratio:' + aspectRatio + ';') : '';
|
|
616
|
+
|
|
617
|
+
div.setAttribute('style', txt);
|
|
618
|
+
div.setAttribute('class', 'jxgbox ' + cssClasses);
|
|
602
619
|
try {
|
|
603
620
|
document.body.insertBefore(div, scripts[i]);
|
|
604
621
|
} catch (e) {
|
|
@@ -618,6 +635,7 @@ define([
|
|
|
618
635
|
request = new XMLHttpRequest();
|
|
619
636
|
request.open("GET", src);
|
|
620
637
|
request.overrideMimeType("text/plain; charset=x-user-defined");
|
|
638
|
+
/* jshint ignore:start */
|
|
621
639
|
request.addEventListener("load", function() {
|
|
622
640
|
if (this.status < 400) {
|
|
623
641
|
code = this.responseText + '\n' + code;
|
|
@@ -630,6 +648,7 @@ define([
|
|
|
630
648
|
request.addEventListener("error", function(e) {
|
|
631
649
|
throw new Error("\nJSXGraph: failed to load file", src, ":", e);
|
|
632
650
|
});
|
|
651
|
+
/* jshint ignore:end */
|
|
633
652
|
request.send();
|
|
634
653
|
} else {
|
|
635
654
|
postpone = false;
|
package/src/jxg.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
/*
|
|
2
|
-
Copyright 2008-
|
|
2
|
+
Copyright 2008-2022
|
|
3
3
|
Matthias Ehmann,
|
|
4
4
|
Michael Gerhaeuser,
|
|
5
5
|
Carsten Miller,
|
|
@@ -53,6 +53,7 @@ define([], function () {
|
|
|
53
53
|
|
|
54
54
|
/**
|
|
55
55
|
* JXG is the top object of JSXGraph and defines the namespace
|
|
56
|
+
* @exports jxg as JXG
|
|
56
57
|
*/
|
|
57
58
|
var jxg = {};
|
|
58
59
|
|
|
@@ -130,9 +131,9 @@ define([], function () {
|
|
|
130
131
|
onlyOwn = onlyOwn || false;
|
|
131
132
|
toUpper = toUpper || false;
|
|
132
133
|
|
|
133
|
-
//
|
|
134
|
+
// The purpose of this for...in loop is indeed to use hasOwnProperty only if the caller explicitly wishes so.
|
|
134
135
|
for (e in constants) {
|
|
135
|
-
if (!onlyOwn || (onlyOwn &&
|
|
136
|
+
if (!onlyOwn || (onlyOwn && constants.hasOwnProperty(e))) {
|
|
136
137
|
if (toUpper) {
|
|
137
138
|
e2 = e.toUpperCase();
|
|
138
139
|
} else {
|