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/renderer/svg.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,
|
|
@@ -51,7 +51,7 @@ define([
|
|
|
51
51
|
|
|
52
52
|
/**
|
|
53
53
|
* Uses SVG to implement the rendering methods defined in {@link JXG.AbstractRenderer}.
|
|
54
|
-
* @class JXG.
|
|
54
|
+
* @class JXG.SVGRenderer
|
|
55
55
|
* @augments JXG.AbstractRenderer
|
|
56
56
|
* @param {Node} container Reference to a DOM node containing the board.
|
|
57
57
|
* @param {Object} dim The dimensions of the board
|
|
@@ -103,6 +103,7 @@ define([
|
|
|
103
103
|
|
|
104
104
|
this.svgRoot = this.container.ownerDocument.createElementNS(this.svgNamespace, "svg");
|
|
105
105
|
this.svgRoot.style.overflow = 'hidden';
|
|
106
|
+
this.svgRoot.style.display = 'block';
|
|
106
107
|
|
|
107
108
|
this.resize(dim.width, dim.height);
|
|
108
109
|
|
|
@@ -169,11 +170,12 @@ define([
|
|
|
169
170
|
this.svgRoot.appendChild(this.layer[i]);
|
|
170
171
|
}
|
|
171
172
|
|
|
172
|
-
//
|
|
173
|
+
// Already documented in JXG.AbstractRenderer
|
|
173
174
|
this.supportsForeignObject = document.implementation.hasFeature("http://w3.org/TR/SVG11/feature#Extensibility", "1.1");
|
|
174
175
|
|
|
175
176
|
if (this.supportsForeignObject) {
|
|
176
177
|
this.foreignObjLayer = this.container.ownerDocument.createElementNS(this.svgNamespace, 'foreignObject');
|
|
178
|
+
this.foreignObjLayer.setAttribute("display", "none");
|
|
177
179
|
this.foreignObjLayer.setAttribute("x", 0);
|
|
178
180
|
this.foreignObjLayer.setAttribute("y", 0);
|
|
179
181
|
this.foreignObjLayer.setAttribute("width", "100%");
|
|
@@ -390,7 +392,7 @@ define([
|
|
|
390
392
|
|
|
391
393
|
},
|
|
392
394
|
|
|
393
|
-
//
|
|
395
|
+
// Already documented in JXG.AbstractRenderer
|
|
394
396
|
_setArrowWidth: function (node, width, parentNode, size) {
|
|
395
397
|
var s, d;
|
|
396
398
|
|
|
@@ -477,7 +479,7 @@ define([
|
|
|
477
479
|
* Text related stuff
|
|
478
480
|
* **************************/
|
|
479
481
|
|
|
480
|
-
//
|
|
482
|
+
// Already documented in JXG.AbstractRenderer
|
|
481
483
|
displayCopyright: function (str, fontsize) {
|
|
482
484
|
var node = this.createPrim('text', 'licenseText'),
|
|
483
485
|
t;
|
|
@@ -489,7 +491,7 @@ define([
|
|
|
489
491
|
this.appendChildPrim(node, 0);
|
|
490
492
|
},
|
|
491
493
|
|
|
492
|
-
//
|
|
494
|
+
// Already documented in JXG.AbstractRenderer
|
|
493
495
|
drawInternalText: function (el) {
|
|
494
496
|
var node = this.createPrim('text', el.id);
|
|
495
497
|
|
|
@@ -505,7 +507,7 @@ define([
|
|
|
505
507
|
return node;
|
|
506
508
|
},
|
|
507
509
|
|
|
508
|
-
//
|
|
510
|
+
// Already documented in JXG.AbstractRenderer
|
|
509
511
|
updateInternalText: function (el) {
|
|
510
512
|
var content = el.plaintext, v,
|
|
511
513
|
ev_ax = el.getAnchorX(),
|
|
@@ -571,7 +573,7 @@ define([
|
|
|
571
573
|
* Image related stuff
|
|
572
574
|
* **************************/
|
|
573
575
|
|
|
574
|
-
//
|
|
576
|
+
// Already documented in JXG.AbstractRenderer
|
|
575
577
|
drawImage: function (el) {
|
|
576
578
|
var node = this.createPrim('image', el.id);
|
|
577
579
|
|
|
@@ -582,7 +584,7 @@ define([
|
|
|
582
584
|
this.updateImage(el);
|
|
583
585
|
},
|
|
584
586
|
|
|
585
|
-
//
|
|
587
|
+
// Already documented in JXG.AbstractRenderer
|
|
586
588
|
transformImage: function (el, t) {
|
|
587
589
|
var s, m,
|
|
588
590
|
node = el.rendNode,
|
|
@@ -597,7 +599,7 @@ define([
|
|
|
597
599
|
}
|
|
598
600
|
},
|
|
599
601
|
|
|
600
|
-
//
|
|
602
|
+
// Already documented in JXG.AbstractRenderer
|
|
601
603
|
updateImageURL: function (el) {
|
|
602
604
|
var url = Type.evaluate(el.url);
|
|
603
605
|
|
|
@@ -612,18 +614,42 @@ define([
|
|
|
612
614
|
return false;
|
|
613
615
|
},
|
|
614
616
|
|
|
615
|
-
//
|
|
617
|
+
// Already documented in JXG.AbstractRenderer
|
|
616
618
|
updateImageStyle: function (el, doHighlight) {
|
|
617
619
|
var css = Type.evaluate(doHighlight ? el.visProp.highlightcssclass : el.visProp.cssclass);
|
|
618
620
|
|
|
619
621
|
el.rendNode.setAttributeNS(null, 'class', css);
|
|
620
622
|
},
|
|
621
623
|
|
|
624
|
+
// Already documented in JXG.AbstractRenderer
|
|
625
|
+
drawForeignObject: function (el) {
|
|
626
|
+
el.rendNode = this.appendChildPrim(this.createPrim('foreignObject', el.id),
|
|
627
|
+
Type.evaluate(el.visProp.layer));
|
|
628
|
+
|
|
629
|
+
this.appendNodesToElement(el, 'foreignObject');
|
|
630
|
+
this.updateForeignObject(el);
|
|
631
|
+
},
|
|
632
|
+
|
|
633
|
+
// Already documented in JXG.AbstractRenderer
|
|
634
|
+
updateForeignObject: function(el) {
|
|
635
|
+
if (el._useUserSize) {
|
|
636
|
+
el.rendNode.style.overflow = 'hidden';
|
|
637
|
+
} else {
|
|
638
|
+
el.rendNode.style.overflow = 'visible';
|
|
639
|
+
}
|
|
640
|
+
|
|
641
|
+
this.updateRectPrim(el.rendNode, el.coords.scrCoords[1],
|
|
642
|
+
el.coords.scrCoords[2] - el.size[1], el.size[0], el.size[1]);
|
|
643
|
+
|
|
644
|
+
el.rendNode.innerHTML = el.content;
|
|
645
|
+
this._updateVisual(el, {stroke: true, dash: true}, true);
|
|
646
|
+
},
|
|
647
|
+
|
|
622
648
|
/* **************************
|
|
623
649
|
* Render primitive objects
|
|
624
650
|
* **************************/
|
|
625
651
|
|
|
626
|
-
//
|
|
652
|
+
// Already documented in JXG.AbstractRenderer
|
|
627
653
|
appendChildPrim: function (node, level) {
|
|
628
654
|
if (!Type.exists(level)) { // trace nodes have level not set
|
|
629
655
|
level = 0;
|
|
@@ -636,7 +662,7 @@ define([
|
|
|
636
662
|
return node;
|
|
637
663
|
},
|
|
638
664
|
|
|
639
|
-
//
|
|
665
|
+
// Already documented in JXG.AbstractRenderer
|
|
640
666
|
createPrim: function (type, id) {
|
|
641
667
|
var node = this.container.ownerDocument.createElementNS(this.svgNamespace, type);
|
|
642
668
|
node.setAttributeNS(null, 'id', this.container.id + '_' + id);
|
|
@@ -649,14 +675,14 @@ define([
|
|
|
649
675
|
return node;
|
|
650
676
|
},
|
|
651
677
|
|
|
652
|
-
//
|
|
678
|
+
// Already documented in JXG.AbstractRenderer
|
|
653
679
|
remove: function (shape) {
|
|
654
680
|
if (Type.exists(shape) && Type.exists(shape.parentNode)) {
|
|
655
681
|
shape.parentNode.removeChild(shape);
|
|
656
682
|
}
|
|
657
683
|
},
|
|
658
684
|
|
|
659
|
-
//
|
|
685
|
+
// Already documented in JXG.AbstractRenderer
|
|
660
686
|
setLayer: function (el, level) {
|
|
661
687
|
if (!Type.exists(level)) {
|
|
662
688
|
level = 0;
|
|
@@ -667,7 +693,7 @@ define([
|
|
|
667
693
|
this.layer[level].appendChild(el.rendNode);
|
|
668
694
|
},
|
|
669
695
|
|
|
670
|
-
//
|
|
696
|
+
// Already documented in JXG.AbstractRenderer
|
|
671
697
|
makeArrows: function (el, a) {
|
|
672
698
|
var node2,
|
|
673
699
|
ev_fa = a.evFirst,
|
|
@@ -719,7 +745,7 @@ define([
|
|
|
719
745
|
el.visPropOld.lastarrow = ev_la;
|
|
720
746
|
},
|
|
721
747
|
|
|
722
|
-
//
|
|
748
|
+
// Already documented in JXG.AbstractRenderer
|
|
723
749
|
updateEllipsePrim: function (node, x, y, rx, ry) {
|
|
724
750
|
var huge = 1000000;
|
|
725
751
|
|
|
@@ -737,7 +763,7 @@ define([
|
|
|
737
763
|
node.setAttributeNS(null, 'ry', Math.abs(ry));
|
|
738
764
|
},
|
|
739
765
|
|
|
740
|
-
//
|
|
766
|
+
// Already documented in JXG.AbstractRenderer
|
|
741
767
|
updateLinePrim: function (node, p1x, p1y, p2x, p2y) {
|
|
742
768
|
var huge = 1000000;
|
|
743
769
|
|
|
@@ -757,7 +783,7 @@ define([
|
|
|
757
783
|
}
|
|
758
784
|
},
|
|
759
785
|
|
|
760
|
-
//
|
|
786
|
+
// Already documented in JXG.AbstractRenderer
|
|
761
787
|
updatePathPrim: function (node, pointString) {
|
|
762
788
|
if (pointString === '') {
|
|
763
789
|
pointString = 'M 0 0';
|
|
@@ -765,7 +791,7 @@ define([
|
|
|
765
791
|
node.setAttributeNS(null, 'd', pointString);
|
|
766
792
|
},
|
|
767
793
|
|
|
768
|
-
//
|
|
794
|
+
// Already documented in JXG.AbstractRenderer
|
|
769
795
|
updatePathStringPoint: function (el, size, type) {
|
|
770
796
|
var s = '',
|
|
771
797
|
scr = el.coords.scrCoords,
|
|
@@ -811,7 +837,7 @@ define([
|
|
|
811
837
|
return s;
|
|
812
838
|
},
|
|
813
839
|
|
|
814
|
-
//
|
|
840
|
+
// Already documented in JXG.AbstractRenderer
|
|
815
841
|
updatePathStringPrim: function (el) {
|
|
816
842
|
var i, scr, len,
|
|
817
843
|
symbm = ' M ',
|
|
@@ -867,7 +893,7 @@ define([
|
|
|
867
893
|
return pStr;
|
|
868
894
|
},
|
|
869
895
|
|
|
870
|
-
//
|
|
896
|
+
// Already documented in JXG.AbstractRenderer
|
|
871
897
|
updatePathStringBezierPrim: function (el) {
|
|
872
898
|
var i, j, k, scr, lx, ly, len,
|
|
873
899
|
symbm = ' M ',
|
|
@@ -922,7 +948,7 @@ define([
|
|
|
922
948
|
return pStr;
|
|
923
949
|
},
|
|
924
950
|
|
|
925
|
-
//
|
|
951
|
+
// Already documented in JXG.AbstractRenderer
|
|
926
952
|
updatePolygonPrim: function (node, el) {
|
|
927
953
|
var i,
|
|
928
954
|
pStr = '',
|
|
@@ -952,7 +978,7 @@ define([
|
|
|
952
978
|
}
|
|
953
979
|
},
|
|
954
980
|
|
|
955
|
-
//
|
|
981
|
+
// Already documented in JXG.AbstractRenderer
|
|
956
982
|
updateRectPrim: function (node, x, y, w, h) {
|
|
957
983
|
node.setAttributeNS(null, 'x', x);
|
|
958
984
|
node.setAttributeNS(null, 'y', y);
|
|
@@ -1261,6 +1287,11 @@ define([
|
|
|
1261
1287
|
if (c === 'none') { // This is done only for non-images
|
|
1262
1288
|
// because images have no fill color.
|
|
1263
1289
|
oo = 0;
|
|
1290
|
+
// This is necessary if there is a foreignObject below.
|
|
1291
|
+
node.setAttributeNS(null, 'pointer-events', 'visibleStroke');
|
|
1292
|
+
} else {
|
|
1293
|
+
// This is the default
|
|
1294
|
+
node.setAttributeNS(null, 'pointer-events', 'visiblePainted');
|
|
1264
1295
|
}
|
|
1265
1296
|
this._setAttribute(function () {
|
|
1266
1297
|
node.setAttributeNS(null, 'fill-opacity', oo);
|
|
@@ -1413,10 +1444,13 @@ define([
|
|
|
1413
1444
|
|
|
1414
1445
|
// documented in AbstractRenderer
|
|
1415
1446
|
resize: function (w, h) {
|
|
1416
|
-
this.svgRoot.style.width
|
|
1417
|
-
this.svgRoot.style.height = parseFloat(h) + 'px';
|
|
1418
|
-
|
|
1419
|
-
this.svgRoot.setAttribute(
|
|
1447
|
+
// this.svgRoot.style.width = parseFloat(w) + 'px';
|
|
1448
|
+
// this.svgRoot.style.height = parseFloat(h) + 'px';
|
|
1449
|
+
|
|
1450
|
+
this.svgRoot.setAttribute('width', parseFloat(w));
|
|
1451
|
+
this.svgRoot.setAttribute('height', parseFloat(h));
|
|
1452
|
+
// this.svgRoot.setAttribute('width', '100%');
|
|
1453
|
+
// this.svgRoot.setAttribute('height', '100%');
|
|
1420
1454
|
},
|
|
1421
1455
|
|
|
1422
1456
|
// documented in JXG.AbstractRenderer
|
|
@@ -1545,7 +1579,6 @@ define([
|
|
|
1545
1579
|
canvas.height = images[i].getAttribute("height");
|
|
1546
1580
|
try {
|
|
1547
1581
|
ctx.drawImage(images[i], 0, 0, canvas.width, canvas.height);
|
|
1548
|
-
//ctx.drawImage(document.getElementById('testimg2'), 0, 0, canvas.width, canvas.height);
|
|
1549
1582
|
|
|
1550
1583
|
// If the image is not png, the format must be specified here
|
|
1551
1584
|
ur = canvas.toDataURL();
|
|
@@ -1553,7 +1586,6 @@ define([
|
|
|
1553
1586
|
} catch (err) {
|
|
1554
1587
|
console.log("CORS problem! Image can not be used", err);
|
|
1555
1588
|
}
|
|
1556
|
-
//};
|
|
1557
1589
|
}
|
|
1558
1590
|
//canvas.remove();
|
|
1559
1591
|
}
|
|
@@ -1565,7 +1597,7 @@ define([
|
|
|
1565
1597
|
* The SVG code of the construction is base64 encoded. The return string starts
|
|
1566
1598
|
* with "data:image/svg+xml;base64,...".
|
|
1567
1599
|
*
|
|
1568
|
-
* @param {Boolean} ignoreTexts If true, the foreignObject tag is
|
|
1600
|
+
* @param {Boolean} ignoreTexts If true, the foreignObject tag is set to display=none.
|
|
1569
1601
|
* This is necessary for older versions of Safari. Default: false
|
|
1570
1602
|
* @returns {String} data URI string
|
|
1571
1603
|
*/
|
|
@@ -1583,6 +1615,9 @@ define([
|
|
|
1583
1615
|
// input values are not copied. This can be verified by looking at an innerHTML output
|
|
1584
1616
|
// of an input element. Therefore, we do it "by hand".
|
|
1585
1617
|
if (this.container.hasChildNodes() && Type.exists(this.foreignObjLayer)) {
|
|
1618
|
+
if (!ignoreTexts) {
|
|
1619
|
+
this.foreignObjLayer.setAttribute('display', 'inline');
|
|
1620
|
+
}
|
|
1586
1621
|
while (svgRoot.nextSibling) {
|
|
1587
1622
|
|
|
1588
1623
|
// Copy all value attributes
|
|
@@ -1590,13 +1625,6 @@ define([
|
|
|
1590
1625
|
|
|
1591
1626
|
this.foreignObjLayer.appendChild(svgRoot.nextSibling);
|
|
1592
1627
|
}
|
|
1593
|
-
if (ignoreTexts === true) {
|
|
1594
|
-
// Take out foreignObjLayer, so that it will not be visible
|
|
1595
|
-
// in the dump.
|
|
1596
|
-
doc = this.container.ownerDocument;
|
|
1597
|
-
virtualNode = doc.createElement('div');
|
|
1598
|
-
virtualNode.appendChild(this.foreignObjLayer);
|
|
1599
|
-
}
|
|
1600
1628
|
}
|
|
1601
1629
|
|
|
1602
1630
|
this._getImgDataURL(svgRoot);
|
|
@@ -1620,8 +1648,8 @@ define([
|
|
|
1620
1648
|
// }
|
|
1621
1649
|
|
|
1622
1650
|
// In IE we have to remove the namespace again.
|
|
1623
|
-
if ((svg.match(/xmlns
|
|
1624
|
-
svg = svg.replace(/xmlns
|
|
1651
|
+
if ((svg.match(/xmlns="http:\/\/www.w3.org\/2000\/svg"/g) || []).length > 1) {
|
|
1652
|
+
svg = svg.replace(/xmlns="http:\/\/www.w3.org\/2000\/svg"/g, '');
|
|
1625
1653
|
}
|
|
1626
1654
|
|
|
1627
1655
|
// Safari fails if the svg string contains a " "
|
|
@@ -1631,20 +1659,16 @@ define([
|
|
|
1631
1659
|
// Move all HTML tags back from
|
|
1632
1660
|
// the foreignObject element to the container
|
|
1633
1661
|
if (Type.exists(this.foreignObjLayer) && this.foreignObjLayer.hasChildNodes()) {
|
|
1634
|
-
if (ignoreTexts === true) {
|
|
1635
|
-
// Put foreignObjLayer back into the SVG
|
|
1636
|
-
svgRoot.appendChild(this.foreignObjLayer);
|
|
1637
|
-
}
|
|
1638
1662
|
// Restore all HTML elements
|
|
1639
1663
|
while (this.foreignObjLayer.firstChild) {
|
|
1640
1664
|
this.container.appendChild(this.foreignObjLayer.firstChild);
|
|
1641
1665
|
}
|
|
1666
|
+
this.foreignObjLayer.setAttribute("display", "none");
|
|
1642
1667
|
}
|
|
1643
1668
|
|
|
1644
1669
|
return 'data:image/svg+xml;base64,' + btoa(unescape(encodeURIComponent(svg)));
|
|
1645
1670
|
},
|
|
1646
1671
|
|
|
1647
|
-
|
|
1648
1672
|
/**
|
|
1649
1673
|
* Convert the SVG construction into an HTML canvas image.
|
|
1650
1674
|
* This works for all SVG supporting browsers. Implemented as Promise.
|
|
@@ -1670,17 +1694,16 @@ define([
|
|
|
1670
1694
|
* setTimeout(function() { console.log('done'); }, 400);
|
|
1671
1695
|
*/
|
|
1672
1696
|
dumpToCanvas: function (canvasId, w, h, ignoreTexts) {
|
|
1673
|
-
var
|
|
1674
|
-
svg, tmpImg, cv, ctx;
|
|
1675
|
-
// wOrg, hOrg;
|
|
1676
|
-
|
|
1677
|
-
// wOrg = svgRoot.getAttribute('width');
|
|
1678
|
-
// hOrg = svgRoot.getAttribute('height');
|
|
1697
|
+
var svg, tmpImg, cv, ctx;
|
|
1679
1698
|
|
|
1680
1699
|
// Prepare the canvas element
|
|
1681
1700
|
cv = document.getElementById(canvasId);
|
|
1701
|
+
|
|
1682
1702
|
// Clear the canvas
|
|
1703
|
+
/* eslint-disable no-self-assign */
|
|
1683
1704
|
cv.width = cv.width;
|
|
1705
|
+
/* eslint-enable no-self-assign */
|
|
1706
|
+
|
|
1684
1707
|
ctx = cv.getContext("2d");
|
|
1685
1708
|
if (w !== undefined && h !== undefined) {
|
|
1686
1709
|
cv.style.width = parseFloat(w) + 'px';
|
|
@@ -1767,8 +1790,8 @@ define([
|
|
|
1767
1790
|
return this;
|
|
1768
1791
|
}
|
|
1769
1792
|
|
|
1770
|
-
w = bas.scale *
|
|
1771
|
-
h = bas.scale *
|
|
1793
|
+
w = bas.scale * this.container.getBoundingClientRect().width;
|
|
1794
|
+
h = bas.scale * this.container.getBoundingClientRect().height;
|
|
1772
1795
|
|
|
1773
1796
|
if (imgId === undefined || imgId === '') {
|
|
1774
1797
|
newImg = true;
|
package/src/renderer/vml.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,
|
|
@@ -51,10 +51,14 @@ define([
|
|
|
51
51
|
|
|
52
52
|
/**
|
|
53
53
|
* Uses VML to implement the rendering methods defined in {@link JXG.AbstractRenderer}.
|
|
54
|
-
*
|
|
54
|
+
* VML was used in very old Internet Explorer versions upto IE 8.
|
|
55
|
+
*
|
|
56
|
+
*
|
|
57
|
+
* @class JXG.VMLRenderer
|
|
55
58
|
* @augments JXG.AbstractRenderer
|
|
56
59
|
* @param {Node} container Reference to a DOM node containing the board.
|
|
57
60
|
* @see JXG.AbstractRenderer
|
|
61
|
+
* @deprecated
|
|
58
62
|
*/
|
|
59
63
|
JXG.VMLRenderer = function (container) {
|
|
60
64
|
this.type = 'vml';
|
|
@@ -99,7 +103,7 @@ define([
|
|
|
99
103
|
|
|
100
104
|
JXG.VMLRenderer.prototype = new AbstractRenderer();
|
|
101
105
|
|
|
102
|
-
JXG.extend(JXG.VMLRenderer.prototype, /** @lends JXG.VMLRenderer */ {
|
|
106
|
+
JXG.extend(JXG.VMLRenderer.prototype, /** @lends JXG.VMLRenderer.prototype */ {
|
|
103
107
|
|
|
104
108
|
/**
|
|
105
109
|
* Sets attribute <tt>key</tt> of node <tt>node</tt> to <tt>value</tt>.
|
|
@@ -165,7 +169,7 @@ define([
|
|
|
165
169
|
* Text related stuff
|
|
166
170
|
* **************************/
|
|
167
171
|
|
|
168
|
-
//
|
|
172
|
+
// Already documented in JXG.AbstractRenderer
|
|
169
173
|
displayCopyright: function (str, fontsize) {
|
|
170
174
|
var node, t;
|
|
171
175
|
|
|
@@ -303,7 +307,7 @@ define([
|
|
|
303
307
|
* Image related stuff
|
|
304
308
|
* **************************/
|
|
305
309
|
|
|
306
|
-
//
|
|
310
|
+
// Already documented in JXG.AbstractRenderer
|
|
307
311
|
drawImage: function (el) {
|
|
308
312
|
// IE 8: Bilder ueber data URIs werden bis 32kB unterstuetzt.
|
|
309
313
|
var node;
|
|
@@ -325,7 +329,7 @@ define([
|
|
|
325
329
|
this.updateImage(el);
|
|
326
330
|
},
|
|
327
331
|
|
|
328
|
-
//
|
|
332
|
+
// Already documented in JXG.AbstractRenderer
|
|
329
333
|
transformImage: function (el, t) {
|
|
330
334
|
var m, s, maxX, maxY, minX, minY, i, nt,
|
|
331
335
|
node = el.rendNode,
|
|
@@ -375,7 +379,7 @@ define([
|
|
|
375
379
|
}
|
|
376
380
|
},
|
|
377
381
|
|
|
378
|
-
//
|
|
382
|
+
// Already documented in JXG.AbstractRenderer
|
|
379
383
|
updateImageURL: function (el) {
|
|
380
384
|
var url = Type.evaluate(el.url);
|
|
381
385
|
|
|
@@ -386,7 +390,7 @@ define([
|
|
|
386
390
|
* Render primitive objects
|
|
387
391
|
* **************************/
|
|
388
392
|
|
|
389
|
-
//
|
|
393
|
+
// Already documented in JXG.AbstractRenderer
|
|
390
394
|
appendChildPrim: function (node, level) {
|
|
391
395
|
// For trace nodes
|
|
392
396
|
if (!Type.exists(level)) {
|
|
@@ -399,7 +403,7 @@ define([
|
|
|
399
403
|
return node;
|
|
400
404
|
},
|
|
401
405
|
|
|
402
|
-
//
|
|
406
|
+
// Already documented in JXG.AbstractRenderer
|
|
403
407
|
appendNodesToElement: function (el, type) {
|
|
404
408
|
if (type === 'shape' || type === 'path' || type === 'polygon') {
|
|
405
409
|
el.rendNodePath = this.getElementById(el.id + '_path');
|
|
@@ -410,7 +414,7 @@ define([
|
|
|
410
414
|
el.rendNode = this.getElementById(el.id);
|
|
411
415
|
},
|
|
412
416
|
|
|
413
|
-
//
|
|
417
|
+
// Already documented in JXG.AbstractRenderer
|
|
414
418
|
createPrim: function (type, id) {
|
|
415
419
|
var node, pathNode,
|
|
416
420
|
fillNode = this.createNode('fill'),
|
|
@@ -449,14 +453,14 @@ define([
|
|
|
449
453
|
return node;
|
|
450
454
|
},
|
|
451
455
|
|
|
452
|
-
//
|
|
456
|
+
// Already documented in JXG.AbstractRenderer
|
|
453
457
|
remove: function (node) {
|
|
454
458
|
if (Type.exists(node)) {
|
|
455
459
|
node.removeNode(true);
|
|
456
460
|
}
|
|
457
461
|
},
|
|
458
462
|
|
|
459
|
-
//
|
|
463
|
+
// Already documented in JXG.AbstractRenderer
|
|
460
464
|
makeArrows: function (el) {
|
|
461
465
|
var nodeStroke,
|
|
462
466
|
ev_fa = Type.evaluate(el.visProp.firstarrow),
|
|
@@ -492,7 +496,7 @@ define([
|
|
|
492
496
|
el.visPropOld.lastarrow = ev_la;
|
|
493
497
|
},
|
|
494
498
|
|
|
495
|
-
//
|
|
499
|
+
// Already documented in JXG.AbstractRenderer
|
|
496
500
|
updateEllipsePrim: function (node, x, y, rx, ry) {
|
|
497
501
|
node.style.left = Math.floor(x - rx) + 'px';
|
|
498
502
|
node.style.top = Math.floor(y - ry) + 'px';
|
|
@@ -500,7 +504,7 @@ define([
|
|
|
500
504
|
node.style.height = Math.floor(Math.abs(ry) * 2) + 'px';
|
|
501
505
|
},
|
|
502
506
|
|
|
503
|
-
//
|
|
507
|
+
// Already documented in JXG.AbstractRenderer
|
|
504
508
|
updateLinePrim: function (node, p1x, p1y, p2x, p2y, board) {
|
|
505
509
|
var s, r = this.resolution;
|
|
506
510
|
|
|
@@ -510,7 +514,7 @@ define([
|
|
|
510
514
|
}
|
|
511
515
|
},
|
|
512
516
|
|
|
513
|
-
//
|
|
517
|
+
// Already documented in JXG.AbstractRenderer
|
|
514
518
|
updatePathPrim: function (node, pointString, board) {
|
|
515
519
|
var x = board.canvasWidth,
|
|
516
520
|
y = board.canvasHeight;
|
|
@@ -523,7 +527,7 @@ define([
|
|
|
523
527
|
this._setAttr(node, 'path', pointString.join(""));
|
|
524
528
|
},
|
|
525
529
|
|
|
526
|
-
//
|
|
530
|
+
// Already documented in JXG.AbstractRenderer
|
|
527
531
|
updatePathStringPoint: function (el, size, type) {
|
|
528
532
|
var s = [],
|
|
529
533
|
mround = Math.round,
|
|
@@ -588,7 +592,7 @@ define([
|
|
|
588
592
|
return s;
|
|
589
593
|
},
|
|
590
594
|
|
|
591
|
-
//
|
|
595
|
+
// Already documented in JXG.AbstractRenderer
|
|
592
596
|
updatePathStringPrim: function (el) {
|
|
593
597
|
var i, scr,
|
|
594
598
|
pStr = [],
|
|
@@ -659,7 +663,7 @@ define([
|
|
|
659
663
|
return pStr;
|
|
660
664
|
},
|
|
661
665
|
|
|
662
|
-
//
|
|
666
|
+
// Already documented in JXG.AbstractRenderer
|
|
663
667
|
updatePathStringBezierPrim: function (el) {
|
|
664
668
|
var i, j, k, scr, lx, ly,
|
|
665
669
|
pStr = [],
|
|
@@ -723,7 +727,7 @@ define([
|
|
|
723
727
|
return pStr;
|
|
724
728
|
},
|
|
725
729
|
|
|
726
|
-
//
|
|
730
|
+
// Already documented in JXG.AbstractRenderer
|
|
727
731
|
updatePolygonPrim: function (node, el) {
|
|
728
732
|
var i,
|
|
729
733
|
len = el.vertices.length,
|
|
@@ -761,7 +765,7 @@ define([
|
|
|
761
765
|
this.updatePathPrim(node, pStr, el.board);
|
|
762
766
|
},
|
|
763
767
|
|
|
764
|
-
//
|
|
768
|
+
// Already documented in JXG.AbstractRenderer
|
|
765
769
|
updateRectPrim: function (node, x, y, w, h) {
|
|
766
770
|
node.style.left = Math.floor(x) + 'px';
|
|
767
771
|
node.style.top = Math.floor(y) + 'px';
|
|
@@ -779,7 +783,7 @@ define([
|
|
|
779
783
|
* Set Attributes
|
|
780
784
|
* **************************/
|
|
781
785
|
|
|
782
|
-
//
|
|
786
|
+
// Already documented in JXG.AbstractRenderer
|
|
783
787
|
setPropertyPrim: function (node, key, val) {
|
|
784
788
|
var keyVml = '',
|
|
785
789
|
v;
|
|
@@ -802,7 +806,7 @@ define([
|
|
|
802
806
|
}
|
|
803
807
|
},
|
|
804
808
|
|
|
805
|
-
//
|
|
809
|
+
// Already documented in JXG.AbstractRenderer
|
|
806
810
|
display: function(el, val) {
|
|
807
811
|
if (el && el.rendNode) {
|
|
808
812
|
el.visPropOld.visible = val;
|
|
@@ -814,7 +818,7 @@ define([
|
|
|
814
818
|
}
|
|
815
819
|
},
|
|
816
820
|
|
|
817
|
-
//
|
|
821
|
+
// Already documented in JXG.AbstractRenderer
|
|
818
822
|
show: function (el) {
|
|
819
823
|
JXG.deprecated('Board.renderer.show()', 'Board.renderer.display()');
|
|
820
824
|
|
|
@@ -823,7 +827,7 @@ define([
|
|
|
823
827
|
}
|
|
824
828
|
},
|
|
825
829
|
|
|
826
|
-
//
|
|
830
|
+
// Already documented in JXG.AbstractRenderer
|
|
827
831
|
hide: function (el) {
|
|
828
832
|
JXG.deprecated('Board.renderer.hide()', 'Board.renderer.display()');
|
|
829
833
|
|
|
@@ -832,7 +836,7 @@ define([
|
|
|
832
836
|
}
|
|
833
837
|
},
|
|
834
838
|
|
|
835
|
-
//
|
|
839
|
+
// Already documented in JXG.AbstractRenderer
|
|
836
840
|
setDashStyle: function (el, visProp) {
|
|
837
841
|
var node;
|
|
838
842
|
if (visProp.dash >= 0) {
|
|
@@ -841,7 +845,7 @@ define([
|
|
|
841
845
|
}
|
|
842
846
|
},
|
|
843
847
|
|
|
844
|
-
//
|
|
848
|
+
// Already documented in JXG.AbstractRenderer
|
|
845
849
|
setGradient: function (el) {
|
|
846
850
|
var nodeFill = el.rendNodeFill,
|
|
847
851
|
ev_g = Type.evaluate(el.visProp.gradient);
|
|
@@ -863,7 +867,7 @@ define([
|
|
|
863
867
|
}
|
|
864
868
|
},
|
|
865
869
|
|
|
866
|
-
//
|
|
870
|
+
// Already documented in JXG.AbstractRenderer
|
|
867
871
|
setObjectFillColor: function (el, color, opacity) {
|
|
868
872
|
var rgba = Type.evaluate(color), c, rgbo,
|
|
869
873
|
o = Type.evaluate(opacity), oo,
|
|
@@ -918,7 +922,7 @@ define([
|
|
|
918
922
|
el.visPropOld.fillopacity = o;
|
|
919
923
|
},
|
|
920
924
|
|
|
921
|
-
//
|
|
925
|
+
// Already documented in JXG.AbstractRenderer
|
|
922
926
|
setObjectStrokeColor: function (el, color, opacity) {
|
|
923
927
|
var rgba = Type.evaluate(color), c, rgbo, t,
|
|
924
928
|
o = Type.evaluate(opacity), oo,
|
|
@@ -978,7 +982,7 @@ define([
|
|
|
978
982
|
el.visPropOld.strokeopacity = o;
|
|
979
983
|
},
|
|
980
984
|
|
|
981
|
-
//
|
|
985
|
+
// Already documented in JXG.AbstractRenderer
|
|
982
986
|
setObjectStrokeWidth: function (el, width) {
|
|
983
987
|
var w = Type.evaluate(width),
|
|
984
988
|
node;
|
|
@@ -1002,7 +1006,7 @@ define([
|
|
|
1002
1006
|
|
|
1003
1007
|
},
|
|
1004
1008
|
|
|
1005
|
-
//
|
|
1009
|
+
// Already documented in JXG.AbstractRenderer
|
|
1006
1010
|
setShadow: function (el) {
|
|
1007
1011
|
var nodeShadow = el.rendNodeShadow,
|
|
1008
1012
|
ev_s = Type.evaluate(el.visProp.shadow);
|
|
@@ -1027,12 +1031,12 @@ define([
|
|
|
1027
1031
|
* renderer control
|
|
1028
1032
|
* **************************/
|
|
1029
1033
|
|
|
1030
|
-
//
|
|
1034
|
+
// Already documented in JXG.AbstractRenderer
|
|
1031
1035
|
suspendRedraw: function () {
|
|
1032
1036
|
this.container.style.display = 'none';
|
|
1033
1037
|
},
|
|
1034
1038
|
|
|
1035
|
-
//
|
|
1039
|
+
// Already documented in JXG.AbstractRenderer
|
|
1036
1040
|
unsuspendRedraw: function () {
|
|
1037
1041
|
this.container.style.display = '';
|
|
1038
1042
|
}
|
package/src/server/server.js
CHANGED