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.
- 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 +651 -448
- package/distrib/intergeo.min.js +3 -3
- package/distrib/jsxgraph.css +4 -13
- package/distrib/jsxgraphcore.js +9 -25
- package/distrib/jsxgraphsrc.js +28203 -25234
- package/distrib/sketch.min.js +3 -3
- package/package.json +11 -22
- package/src/base/board.js +674 -469
- 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 +32 -11
- package/src/base/coords.js +4 -4
- package/src/base/coordselement.js +51 -24
- package/src/base/curve.js +308 -117
- package/src/base/element.js +79 -50
- 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 +108 -21
- package/src/base/point.js +24 -28
- package/src/base/polygon.js +75 -18
- package/src/base/text.js +116 -63
- package/src/base/ticks.js +29 -11
- 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 +127 -19
- 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 +155 -126
- 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 +377 -114
- 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 +275 -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 +21 -13
- package/src/renderer/abstract.js +21 -6
- package/src/renderer/canvas.js +22 -15
- package/src/renderer/no.js +11 -4
- package/src/renderer/svg.js +76 -53
- 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 +148 -3
- package/src/utils/dump.js +21 -15
- package/src/utils/env.js +63 -104
- 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 -1281
package/src/reader/cinderella.js
CHANGED
package/src/reader/file.js
CHANGED
package/src/reader/geogebra.js
CHANGED
package/src/reader/geonext.js
CHANGED
package/src/reader/graph.js
CHANGED
package/src/reader/intergeo.js
CHANGED
package/src/reader/sketch.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,
|
|
@@ -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
|
|
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
|
|
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
|
|
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
|
|
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 += '>>; '
|
|
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
|
-
|
|
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
|
|
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++) {
|
package/src/renderer/abstract.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,
|
|
@@ -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,
|
|
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.
|
|
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.
|
|
1097
|
-
// take the node off the DOM, assign innerHTML,
|
|
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
|
|
package/src/renderer/canvas.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,
|
|
@@ -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
|
-
*
|
|
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.
|
|
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
|
-
//
|
|
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
|
-
//
|
|
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
|
-
//
|
|
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
|
-
//
|
|
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
|
-
//
|
|
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
|
-
//
|
|
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
|
-
//
|
|
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
|
-
//
|
|
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
|
-
//
|
|
1426
|
+
// Already documented in JXG.AbstractRenderer
|
|
1420
1427
|
display: function(el, val) {
|
|
1421
1428
|
if (el && el.rendNode) {
|
|
1422
1429
|
el.visPropOld.visible = val;
|
package/src/renderer/no.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,
|
|
@@ -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
|
-
*
|
|
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.
|
|
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;
|