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.
Files changed (90) hide show
  1. package/README.md +2 -2
  2. package/distrib/README.md +2 -2
  3. package/distrib/geogebra.min.js +3 -3
  4. package/distrib/geonext.min.js +3 -3
  5. package/distrib/index.d.ts +651 -448
  6. package/distrib/intergeo.min.js +3 -3
  7. package/distrib/jsxgraph.css +4 -13
  8. package/distrib/jsxgraphcore.js +9 -25
  9. package/distrib/jsxgraphsrc.js +28203 -25234
  10. package/distrib/sketch.min.js +3 -3
  11. package/package.json +11 -22
  12. package/src/base/board.js +674 -469
  13. package/src/base/chart.js +1 -1
  14. package/src/base/circle.js +23 -1
  15. package/src/base/composition.js +1 -1
  16. package/src/base/constants.js +32 -11
  17. package/src/base/coords.js +4 -4
  18. package/src/base/coordselement.js +51 -24
  19. package/src/base/curve.js +308 -117
  20. package/src/base/element.js +79 -50
  21. package/src/base/foreignobject.js +463 -0
  22. package/src/base/group.js +2 -2
  23. package/src/base/image.js +12 -15
  24. package/src/base/line.js +108 -21
  25. package/src/base/point.js +24 -28
  26. package/src/base/polygon.js +75 -18
  27. package/src/base/text.js +116 -63
  28. package/src/base/ticks.js +29 -11
  29. package/src/base/transformation.js +1 -1
  30. package/src/base/turtle.js +1 -1
  31. package/src/element/arc.js +1 -1
  32. package/src/element/button.js +29 -2
  33. package/src/element/checkbox.js +31 -1
  34. package/src/element/comb.js +5 -2
  35. package/src/element/composition.js +127 -19
  36. package/src/element/conic.js +46 -5
  37. package/src/element/input.js +32 -1
  38. package/src/element/locus.js +2 -2
  39. package/src/element/measure.js +9 -4
  40. package/src/element/sector.js +46 -12
  41. package/src/element/slider.js +17 -12
  42. package/src/element/slopetriangle.js +1 -1
  43. package/src/jsxgraph.js +28 -9
  44. package/src/jxg.js +4 -3
  45. package/src/loadjsxgraph.js +3 -2
  46. package/src/math/bst.js +1 -1
  47. package/src/math/clip.js +550 -345
  48. package/src/math/complex.js +1 -1
  49. package/src/math/extrapolate.js +1 -1
  50. package/src/math/geometry.js +155 -126
  51. package/src/math/ia.js +290 -21
  52. package/src/math/math.js +30 -1
  53. package/src/math/metapost.js +1 -1
  54. package/src/math/nlp.js +25 -5
  55. package/src/math/numerics.js +183 -4
  56. package/src/math/plot.js +4 -4
  57. package/src/math/poly.js +1 -1
  58. package/src/math/probfuncs.js +2 -1
  59. package/src/math/qdt.js +68 -62
  60. package/src/math/statistics.js +58 -7
  61. package/src/math/symbolic.js +1 -1
  62. package/src/options.js +377 -114
  63. package/src/parser/ca.js +1297 -1291
  64. package/src/parser/datasource.js +1 -1
  65. package/src/parser/geonext.js +6 -6
  66. package/src/parser/jessiecode.js +275 -79
  67. package/src/parser/jessiescript.js +1 -1
  68. package/src/reader/cinderella.js +1 -1
  69. package/src/reader/file.js +1 -1
  70. package/src/reader/geogebra.js +1 -1
  71. package/src/reader/geonext.js +1 -1
  72. package/src/reader/graph.js +1 -1
  73. package/src/reader/intergeo.js +1 -1
  74. package/src/reader/sketch.js +21 -13
  75. package/src/renderer/abstract.js +21 -6
  76. package/src/renderer/canvas.js +22 -15
  77. package/src/renderer/no.js +11 -4
  78. package/src/renderer/svg.js +76 -53
  79. package/src/renderer/vml.js +36 -32
  80. package/src/server/server.js +1 -1
  81. package/src/utils/base64.js +2 -2
  82. package/src/utils/color.js +148 -3
  83. package/src/utils/dump.js +21 -15
  84. package/src/utils/env.js +63 -104
  85. package/src/utils/event.js +1 -1
  86. package/src/utils/expect.js +1 -1
  87. package/src/utils/type.js +30 -19
  88. package/src/utils/xml.js +1 -1
  89. package/src/utils/zip.js +1 -1
  90. package/CHANGELOG.md +0 -1281
@@ -1,5 +1,5 @@
1
1
  /*
2
- Copyright 2008-2021
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.AbstractRenderer
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
- // already documented in JXG.AbstractRenderer
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
- // already documented in JXG.AbstractRenderer
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
- // already documented in JXG.AbstractRenderer
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
- // already documented in JXG.AbstractRenderer
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
- // already documented in JXG.AbstractRenderer
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
- // already documented in JXG.AbstractRenderer
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
- // already documented in JXG.AbstractRenderer
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
- // already documented in JXG.AbstractRenderer
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
- // already documented in JXG.AbstractRenderer
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
- // already documented in JXG.AbstractRenderer
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
- // already documented in JXG.AbstractRenderer
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
- // already documented in JXG.AbstractRenderer
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
- // already documented in JXG.AbstractRenderer
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
- // already documented in JXG.AbstractRenderer
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
- // already documented in JXG.AbstractRenderer
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
- // already documented in JXG.AbstractRenderer
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
- // already documented in JXG.AbstractRenderer
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
- // already documented in JXG.AbstractRenderer
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
- // already documented in JXG.AbstractRenderer
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
- // already documented in JXG.AbstractRenderer
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
- // already documented in JXG.AbstractRenderer
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
- // already documented in JXG.AbstractRenderer
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 = parseFloat(w) + 'px';
1417
- this.svgRoot.style.height = parseFloat(h) + 'px';
1418
- this.svgRoot.setAttribute("width", parseFloat(w));
1419
- this.svgRoot.setAttribute("height", parseFloat(h));
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 taken out from the SVG root.
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=\"http:\/\/www.w3.org\/2000\/svg\"/g) || []).length > 1) {
1624
- svg = svg.replace(/xmlns=\"http:\/\/www.w3.org\/2000\/svg\"/g, '');
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 //svgRoot = this.svgRoot,
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 * parseFloat(this.container.style.width);
1771
- h = bas.scale * parseFloat(this.container.style.height);
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;
@@ -1,5 +1,5 @@
1
1
  /*
2
- Copyright 2008-2021
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
- * @class JXG.AbstractRenderer
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
- // already documented in JXG.AbstractRenderer
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
- // already documented in JXG.AbstractRenderer
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
- // already documented in JXG.AbstractRenderer
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
- // already documented in JXG.AbstractRenderer
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
- // already documented in JXG.AbstractRenderer
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
- // already documented in JXG.AbstractRenderer
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
- // already documented in JXG.AbstractRenderer
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
- // already documented in JXG.AbstractRenderer
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
- // already documented in JXG.AbstractRenderer
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
- // already documented in JXG.AbstractRenderer
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
- // already documented in JXG.AbstractRenderer
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
- // already documented in JXG.AbstractRenderer
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
- // already documented in JXG.AbstractRenderer
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
- // already documented in JXG.AbstractRenderer
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
- // already documented in JXG.AbstractRenderer
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
- // already documented in JXG.AbstractRenderer
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
- // already documented in JXG.AbstractRenderer
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
- // already documented in JXG.AbstractRenderer
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
- // already documented in JXG.AbstractRenderer
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
- // already documented in JXG.AbstractRenderer
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
- // already documented in JXG.AbstractRenderer
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
- // already documented in JXG.AbstractRenderer
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
- // already documented in JXG.AbstractRenderer
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
- // already documented in JXG.AbstractRenderer
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
- // already documented in JXG.AbstractRenderer
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
- // already documented in JXG.AbstractRenderer
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
- // already documented in JXG.AbstractRenderer
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
- // already documented in JXG.AbstractRenderer
1034
+ // Already documented in JXG.AbstractRenderer
1031
1035
  suspendRedraw: function () {
1032
1036
  this.container.style.display = 'none';
1033
1037
  },
1034
1038
 
1035
- // already documented in JXG.AbstractRenderer
1039
+ // Already documented in JXG.AbstractRenderer
1036
1040
  unsuspendRedraw: function () {
1037
1041
  this.container.style.display = '';
1038
1042
  }
@@ -1,5 +1,5 @@
1
1
  /*
2
- Copyright 2008-2021
2
+ Copyright 2008-2022
3
3
  Matthias Ehmann,
4
4
  Michael Gerhaeuser,
5
5
  Carsten Miller,