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
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
|
|
@@ -170,11 +170,12 @@ define([
|
|
|
170
170
|
this.svgRoot.appendChild(this.layer[i]);
|
|
171
171
|
}
|
|
172
172
|
|
|
173
|
-
//
|
|
173
|
+
// Already documented in JXG.AbstractRenderer
|
|
174
174
|
this.supportsForeignObject = document.implementation.hasFeature("http://w3.org/TR/SVG11/feature#Extensibility", "1.1");
|
|
175
175
|
|
|
176
176
|
if (this.supportsForeignObject) {
|
|
177
177
|
this.foreignObjLayer = this.container.ownerDocument.createElementNS(this.svgNamespace, 'foreignObject');
|
|
178
|
+
this.foreignObjLayer.setAttribute("display", "none");
|
|
178
179
|
this.foreignObjLayer.setAttribute("x", 0);
|
|
179
180
|
this.foreignObjLayer.setAttribute("y", 0);
|
|
180
181
|
this.foreignObjLayer.setAttribute("width", "100%");
|
|
@@ -391,7 +392,7 @@ define([
|
|
|
391
392
|
|
|
392
393
|
},
|
|
393
394
|
|
|
394
|
-
//
|
|
395
|
+
// Already documented in JXG.AbstractRenderer
|
|
395
396
|
_setArrowWidth: function (node, width, parentNode, size) {
|
|
396
397
|
var s, d;
|
|
397
398
|
|
|
@@ -478,7 +479,7 @@ define([
|
|
|
478
479
|
* Text related stuff
|
|
479
480
|
* **************************/
|
|
480
481
|
|
|
481
|
-
//
|
|
482
|
+
// Already documented in JXG.AbstractRenderer
|
|
482
483
|
displayCopyright: function (str, fontsize) {
|
|
483
484
|
var node = this.createPrim('text', 'licenseText'),
|
|
484
485
|
t;
|
|
@@ -490,7 +491,7 @@ define([
|
|
|
490
491
|
this.appendChildPrim(node, 0);
|
|
491
492
|
},
|
|
492
493
|
|
|
493
|
-
//
|
|
494
|
+
// Already documented in JXG.AbstractRenderer
|
|
494
495
|
drawInternalText: function (el) {
|
|
495
496
|
var node = this.createPrim('text', el.id);
|
|
496
497
|
|
|
@@ -506,7 +507,7 @@ define([
|
|
|
506
507
|
return node;
|
|
507
508
|
},
|
|
508
509
|
|
|
509
|
-
//
|
|
510
|
+
// Already documented in JXG.AbstractRenderer
|
|
510
511
|
updateInternalText: function (el) {
|
|
511
512
|
var content = el.plaintext, v,
|
|
512
513
|
ev_ax = el.getAnchorX(),
|
|
@@ -572,7 +573,7 @@ define([
|
|
|
572
573
|
* Image related stuff
|
|
573
574
|
* **************************/
|
|
574
575
|
|
|
575
|
-
//
|
|
576
|
+
// Already documented in JXG.AbstractRenderer
|
|
576
577
|
drawImage: function (el) {
|
|
577
578
|
var node = this.createPrim('image', el.id);
|
|
578
579
|
|
|
@@ -583,7 +584,7 @@ define([
|
|
|
583
584
|
this.updateImage(el);
|
|
584
585
|
},
|
|
585
586
|
|
|
586
|
-
//
|
|
587
|
+
// Already documented in JXG.AbstractRenderer
|
|
587
588
|
transformImage: function (el, t) {
|
|
588
589
|
var s, m,
|
|
589
590
|
node = el.rendNode,
|
|
@@ -598,7 +599,7 @@ define([
|
|
|
598
599
|
}
|
|
599
600
|
},
|
|
600
601
|
|
|
601
|
-
//
|
|
602
|
+
// Already documented in JXG.AbstractRenderer
|
|
602
603
|
updateImageURL: function (el) {
|
|
603
604
|
var url = Type.evaluate(el.url);
|
|
604
605
|
|
|
@@ -613,18 +614,42 @@ define([
|
|
|
613
614
|
return false;
|
|
614
615
|
},
|
|
615
616
|
|
|
616
|
-
//
|
|
617
|
+
// Already documented in JXG.AbstractRenderer
|
|
617
618
|
updateImageStyle: function (el, doHighlight) {
|
|
618
619
|
var css = Type.evaluate(doHighlight ? el.visProp.highlightcssclass : el.visProp.cssclass);
|
|
619
620
|
|
|
620
621
|
el.rendNode.setAttributeNS(null, 'class', css);
|
|
621
622
|
},
|
|
622
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
|
+
|
|
623
648
|
/* **************************
|
|
624
649
|
* Render primitive objects
|
|
625
650
|
* **************************/
|
|
626
651
|
|
|
627
|
-
//
|
|
652
|
+
// Already documented in JXG.AbstractRenderer
|
|
628
653
|
appendChildPrim: function (node, level) {
|
|
629
654
|
if (!Type.exists(level)) { // trace nodes have level not set
|
|
630
655
|
level = 0;
|
|
@@ -637,7 +662,7 @@ define([
|
|
|
637
662
|
return node;
|
|
638
663
|
},
|
|
639
664
|
|
|
640
|
-
//
|
|
665
|
+
// Already documented in JXG.AbstractRenderer
|
|
641
666
|
createPrim: function (type, id) {
|
|
642
667
|
var node = this.container.ownerDocument.createElementNS(this.svgNamespace, type);
|
|
643
668
|
node.setAttributeNS(null, 'id', this.container.id + '_' + id);
|
|
@@ -650,14 +675,14 @@ define([
|
|
|
650
675
|
return node;
|
|
651
676
|
},
|
|
652
677
|
|
|
653
|
-
//
|
|
678
|
+
// Already documented in JXG.AbstractRenderer
|
|
654
679
|
remove: function (shape) {
|
|
655
680
|
if (Type.exists(shape) && Type.exists(shape.parentNode)) {
|
|
656
681
|
shape.parentNode.removeChild(shape);
|
|
657
682
|
}
|
|
658
683
|
},
|
|
659
684
|
|
|
660
|
-
//
|
|
685
|
+
// Already documented in JXG.AbstractRenderer
|
|
661
686
|
setLayer: function (el, level) {
|
|
662
687
|
if (!Type.exists(level)) {
|
|
663
688
|
level = 0;
|
|
@@ -668,7 +693,7 @@ define([
|
|
|
668
693
|
this.layer[level].appendChild(el.rendNode);
|
|
669
694
|
},
|
|
670
695
|
|
|
671
|
-
//
|
|
696
|
+
// Already documented in JXG.AbstractRenderer
|
|
672
697
|
makeArrows: function (el, a) {
|
|
673
698
|
var node2,
|
|
674
699
|
ev_fa = a.evFirst,
|
|
@@ -720,7 +745,7 @@ define([
|
|
|
720
745
|
el.visPropOld.lastarrow = ev_la;
|
|
721
746
|
},
|
|
722
747
|
|
|
723
|
-
//
|
|
748
|
+
// Already documented in JXG.AbstractRenderer
|
|
724
749
|
updateEllipsePrim: function (node, x, y, rx, ry) {
|
|
725
750
|
var huge = 1000000;
|
|
726
751
|
|
|
@@ -738,7 +763,7 @@ define([
|
|
|
738
763
|
node.setAttributeNS(null, 'ry', Math.abs(ry));
|
|
739
764
|
},
|
|
740
765
|
|
|
741
|
-
//
|
|
766
|
+
// Already documented in JXG.AbstractRenderer
|
|
742
767
|
updateLinePrim: function (node, p1x, p1y, p2x, p2y) {
|
|
743
768
|
var huge = 1000000;
|
|
744
769
|
|
|
@@ -758,7 +783,7 @@ define([
|
|
|
758
783
|
}
|
|
759
784
|
},
|
|
760
785
|
|
|
761
|
-
//
|
|
786
|
+
// Already documented in JXG.AbstractRenderer
|
|
762
787
|
updatePathPrim: function (node, pointString) {
|
|
763
788
|
if (pointString === '') {
|
|
764
789
|
pointString = 'M 0 0';
|
|
@@ -766,7 +791,7 @@ define([
|
|
|
766
791
|
node.setAttributeNS(null, 'd', pointString);
|
|
767
792
|
},
|
|
768
793
|
|
|
769
|
-
//
|
|
794
|
+
// Already documented in JXG.AbstractRenderer
|
|
770
795
|
updatePathStringPoint: function (el, size, type) {
|
|
771
796
|
var s = '',
|
|
772
797
|
scr = el.coords.scrCoords,
|
|
@@ -812,7 +837,7 @@ define([
|
|
|
812
837
|
return s;
|
|
813
838
|
},
|
|
814
839
|
|
|
815
|
-
//
|
|
840
|
+
// Already documented in JXG.AbstractRenderer
|
|
816
841
|
updatePathStringPrim: function (el) {
|
|
817
842
|
var i, scr, len,
|
|
818
843
|
symbm = ' M ',
|
|
@@ -868,7 +893,7 @@ define([
|
|
|
868
893
|
return pStr;
|
|
869
894
|
},
|
|
870
895
|
|
|
871
|
-
//
|
|
896
|
+
// Already documented in JXG.AbstractRenderer
|
|
872
897
|
updatePathStringBezierPrim: function (el) {
|
|
873
898
|
var i, j, k, scr, lx, ly, len,
|
|
874
899
|
symbm = ' M ',
|
|
@@ -923,7 +948,7 @@ define([
|
|
|
923
948
|
return pStr;
|
|
924
949
|
},
|
|
925
950
|
|
|
926
|
-
//
|
|
951
|
+
// Already documented in JXG.AbstractRenderer
|
|
927
952
|
updatePolygonPrim: function (node, el) {
|
|
928
953
|
var i,
|
|
929
954
|
pStr = '',
|
|
@@ -953,7 +978,7 @@ define([
|
|
|
953
978
|
}
|
|
954
979
|
},
|
|
955
980
|
|
|
956
|
-
//
|
|
981
|
+
// Already documented in JXG.AbstractRenderer
|
|
957
982
|
updateRectPrim: function (node, x, y, w, h) {
|
|
958
983
|
node.setAttributeNS(null, 'x', x);
|
|
959
984
|
node.setAttributeNS(null, 'y', y);
|
|
@@ -1262,6 +1287,11 @@ define([
|
|
|
1262
1287
|
if (c === 'none') { // This is done only for non-images
|
|
1263
1288
|
// because images have no fill color.
|
|
1264
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');
|
|
1265
1295
|
}
|
|
1266
1296
|
this._setAttribute(function () {
|
|
1267
1297
|
node.setAttributeNS(null, 'fill-opacity', oo);
|
|
@@ -1549,7 +1579,6 @@ define([
|
|
|
1549
1579
|
canvas.height = images[i].getAttribute("height");
|
|
1550
1580
|
try {
|
|
1551
1581
|
ctx.drawImage(images[i], 0, 0, canvas.width, canvas.height);
|
|
1552
|
-
//ctx.drawImage(document.getElementById('testimg2'), 0, 0, canvas.width, canvas.height);
|
|
1553
1582
|
|
|
1554
1583
|
// If the image is not png, the format must be specified here
|
|
1555
1584
|
ur = canvas.toDataURL();
|
|
@@ -1557,7 +1586,6 @@ define([
|
|
|
1557
1586
|
} catch (err) {
|
|
1558
1587
|
console.log("CORS problem! Image can not be used", err);
|
|
1559
1588
|
}
|
|
1560
|
-
//};
|
|
1561
1589
|
}
|
|
1562
1590
|
//canvas.remove();
|
|
1563
1591
|
}
|
|
@@ -1569,7 +1597,7 @@ define([
|
|
|
1569
1597
|
* The SVG code of the construction is base64 encoded. The return string starts
|
|
1570
1598
|
* with "data:image/svg+xml;base64,...".
|
|
1571
1599
|
*
|
|
1572
|
-
* @param {Boolean} ignoreTexts If true, the foreignObject tag is
|
|
1600
|
+
* @param {Boolean} ignoreTexts If true, the foreignObject tag is set to display=none.
|
|
1573
1601
|
* This is necessary for older versions of Safari. Default: false
|
|
1574
1602
|
* @returns {String} data URI string
|
|
1575
1603
|
*/
|
|
@@ -1587,6 +1615,9 @@ define([
|
|
|
1587
1615
|
// input values are not copied. This can be verified by looking at an innerHTML output
|
|
1588
1616
|
// of an input element. Therefore, we do it "by hand".
|
|
1589
1617
|
if (this.container.hasChildNodes() && Type.exists(this.foreignObjLayer)) {
|
|
1618
|
+
if (!ignoreTexts) {
|
|
1619
|
+
this.foreignObjLayer.setAttribute('display', 'inline');
|
|
1620
|
+
}
|
|
1590
1621
|
while (svgRoot.nextSibling) {
|
|
1591
1622
|
|
|
1592
1623
|
// Copy all value attributes
|
|
@@ -1594,13 +1625,6 @@ define([
|
|
|
1594
1625
|
|
|
1595
1626
|
this.foreignObjLayer.appendChild(svgRoot.nextSibling);
|
|
1596
1627
|
}
|
|
1597
|
-
if (ignoreTexts === true) {
|
|
1598
|
-
// Take out foreignObjLayer, so that it will not be visible
|
|
1599
|
-
// in the dump.
|
|
1600
|
-
doc = this.container.ownerDocument;
|
|
1601
|
-
virtualNode = doc.createElement('div');
|
|
1602
|
-
virtualNode.appendChild(this.foreignObjLayer);
|
|
1603
|
-
}
|
|
1604
1628
|
}
|
|
1605
1629
|
|
|
1606
1630
|
this._getImgDataURL(svgRoot);
|
|
@@ -1624,8 +1648,8 @@ define([
|
|
|
1624
1648
|
// }
|
|
1625
1649
|
|
|
1626
1650
|
// In IE we have to remove the namespace again.
|
|
1627
|
-
if ((svg.match(/xmlns
|
|
1628
|
-
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, '');
|
|
1629
1653
|
}
|
|
1630
1654
|
|
|
1631
1655
|
// Safari fails if the svg string contains a " "
|
|
@@ -1635,20 +1659,16 @@ define([
|
|
|
1635
1659
|
// Move all HTML tags back from
|
|
1636
1660
|
// the foreignObject element to the container
|
|
1637
1661
|
if (Type.exists(this.foreignObjLayer) && this.foreignObjLayer.hasChildNodes()) {
|
|
1638
|
-
if (ignoreTexts === true) {
|
|
1639
|
-
// Put foreignObjLayer back into the SVG
|
|
1640
|
-
svgRoot.appendChild(this.foreignObjLayer);
|
|
1641
|
-
}
|
|
1642
1662
|
// Restore all HTML elements
|
|
1643
1663
|
while (this.foreignObjLayer.firstChild) {
|
|
1644
1664
|
this.container.appendChild(this.foreignObjLayer.firstChild);
|
|
1645
1665
|
}
|
|
1666
|
+
this.foreignObjLayer.setAttribute("display", "none");
|
|
1646
1667
|
}
|
|
1647
1668
|
|
|
1648
1669
|
return 'data:image/svg+xml;base64,' + btoa(unescape(encodeURIComponent(svg)));
|
|
1649
1670
|
},
|
|
1650
1671
|
|
|
1651
|
-
|
|
1652
1672
|
/**
|
|
1653
1673
|
* Convert the SVG construction into an HTML canvas image.
|
|
1654
1674
|
* This works for all SVG supporting browsers. Implemented as Promise.
|
|
@@ -1674,17 +1694,16 @@ define([
|
|
|
1674
1694
|
* setTimeout(function() { console.log('done'); }, 400);
|
|
1675
1695
|
*/
|
|
1676
1696
|
dumpToCanvas: function (canvasId, w, h, ignoreTexts) {
|
|
1677
|
-
var
|
|
1678
|
-
svg, tmpImg, cv, ctx;
|
|
1679
|
-
// wOrg, hOrg;
|
|
1680
|
-
|
|
1681
|
-
// wOrg = svgRoot.getAttribute('width');
|
|
1682
|
-
// hOrg = svgRoot.getAttribute('height');
|
|
1697
|
+
var svg, tmpImg, cv, ctx;
|
|
1683
1698
|
|
|
1684
1699
|
// Prepare the canvas element
|
|
1685
1700
|
cv = document.getElementById(canvasId);
|
|
1701
|
+
|
|
1686
1702
|
// Clear the canvas
|
|
1703
|
+
/* eslint-disable no-self-assign */
|
|
1687
1704
|
cv.width = cv.width;
|
|
1705
|
+
/* eslint-enable no-self-assign */
|
|
1706
|
+
|
|
1688
1707
|
ctx = cv.getContext("2d");
|
|
1689
1708
|
if (w !== undefined && h !== undefined) {
|
|
1690
1709
|
cv.style.width = parseFloat(w) + 'px';
|
|
@@ -1771,8 +1790,8 @@ define([
|
|
|
1771
1790
|
return this;
|
|
1772
1791
|
}
|
|
1773
1792
|
|
|
1774
|
-
w = bas.scale *
|
|
1775
|
-
h = bas.scale *
|
|
1793
|
+
w = bas.scale * this.container.getBoundingClientRect().width;
|
|
1794
|
+
h = bas.scale * this.container.getBoundingClientRect().height;
|
|
1776
1795
|
|
|
1777
1796
|
if (imgId === undefined || imgId === '') {
|
|
1778
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
package/src/utils/base64.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,
|
|
@@ -134,7 +134,7 @@ define(['jxg', 'utils/encoding'], function (JXG, Encoding) {
|
|
|
134
134
|
|
|
135
135
|
// deactivate regexp linting. Our regex is secure, because we replace everything with ''
|
|
136
136
|
/*jslint regexp:true*/
|
|
137
|
-
encInput = input.replace(/[^A-Za-z0-9
|
|
137
|
+
encInput = input.replace(/[^A-Za-z0-9+/=]/g, '');
|
|
138
138
|
/*jslint regexp:false*/
|
|
139
139
|
|
|
140
140
|
len = encInput.length;
|