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.
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 +4964 -4627
  6. package/distrib/intergeo.min.js +3 -3
  7. package/distrib/jsxgraph.css +10 -15
  8. package/distrib/jsxgraphcore.js +9 -25
  9. package/distrib/jsxgraphsrc.js +28437 -25331
  10. package/distrib/sketch.min.js +3 -3
  11. package/package.json +11 -22
  12. package/src/base/board.js +555 -427
  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 +33 -11
  17. package/src/base/coords.js +4 -4
  18. package/src/base/coordselement.js +47 -20
  19. package/src/base/curve.js +308 -117
  20. package/src/base/element.js +80 -51
  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 +1 -1
  25. package/src/base/point.js +20 -41
  26. package/src/base/polygon.js +75 -18
  27. package/src/base/text.js +116 -63
  28. package/src/base/ticks.js +35 -12
  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 +27 -6
  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 +109 -128
  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 +393 -115
  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 +378 -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 +25 -17
  75. package/src/renderer/abstract.js +25 -7
  76. package/src/renderer/canvas.js +20 -15
  77. package/src/renderer/no.js +11 -4
  78. package/src/renderer/svg.js +68 -49
  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 +147 -3
  83. package/src/utils/dump.js +20 -14
  84. package/src/utils/env.js +26 -62
  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 -1305
@@ -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
@@ -170,11 +170,12 @@ define([
170
170
  this.svgRoot.appendChild(this.layer[i]);
171
171
  }
172
172
 
173
- // already documented in JXG.AbstractRenderer
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
- // already documented in JXG.AbstractRenderer
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
- // already documented in JXG.AbstractRenderer
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
- // already documented in JXG.AbstractRenderer
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
- // already documented in JXG.AbstractRenderer
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
- // already documented in JXG.AbstractRenderer
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
- // already documented in JXG.AbstractRenderer
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
- // already documented in JXG.AbstractRenderer
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
- // already documented in JXG.AbstractRenderer
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
- // already documented in JXG.AbstractRenderer
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
- // already documented in JXG.AbstractRenderer
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
- // already documented in JXG.AbstractRenderer
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
- // already documented in JXG.AbstractRenderer
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
- // already documented in JXG.AbstractRenderer
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
- // already documented in JXG.AbstractRenderer
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
- // already documented in JXG.AbstractRenderer
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
- // already documented in JXG.AbstractRenderer
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
- // already documented in JXG.AbstractRenderer
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
- // already documented in JXG.AbstractRenderer
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
- // already documented in JXG.AbstractRenderer
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
- // already documented in JXG.AbstractRenderer
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
- // already documented in JXG.AbstractRenderer
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 taken out from the SVG root.
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=\"http:\/\/www.w3.org\/2000\/svg\"/g) || []).length > 1) {
1628
- 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, '');
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 //svgRoot = this.svgRoot,
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 * parseFloat(this.container.style.width);
1775
- h = bas.scale * parseFloat(this.container.style.height);
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;
@@ -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,
@@ -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,
@@ -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\+\/=]/g, '');
137
+ encInput = input.replace(/[^A-Za-z0-9+/=]/g, '');
138
138
  /*jslint regexp:false*/
139
139
 
140
140
  len = encInput.length;