jsxgraph 1.4.0 → 1.4.3

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 (98) hide show
  1. package/README.md +1 -1
  2. package/distrib/README.md +1 -1
  3. package/distrib/geogebra.min.js +3 -3
  4. package/distrib/geonext.min.js +3 -3
  5. package/distrib/index.d.ts +5205 -4629
  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 +4497 -2180
  10. package/distrib/sketch.min.js +3 -3
  11. package/package.json +3 -2
  12. package/src/3d/box3d.js +264 -0
  13. package/src/3d/curve3d.js +97 -0
  14. package/src/3d/linspace3d.js +375 -0
  15. package/src/3d/point3d.js +200 -0
  16. package/src/3d/surface3d.js +81 -0
  17. package/src/3d/threed.js +38 -0
  18. package/src/3d/view3d.js +459 -0
  19. package/src/base/board.js +139 -85
  20. package/src/base/chart.js +1 -1
  21. package/src/base/circle.js +1 -1
  22. package/src/base/composition.js +1 -1
  23. package/src/base/constants.js +15 -14
  24. package/src/base/coords.js +3 -3
  25. package/src/base/coordselement.js +5 -8
  26. package/src/base/curve.js +1 -1
  27. package/src/base/element.js +36 -28
  28. package/src/base/foreignobject.js +12 -2
  29. package/src/base/group.js +1 -1
  30. package/src/base/image.js +1 -1
  31. package/src/base/line.js +2 -2
  32. package/src/base/point.js +8 -18
  33. package/src/base/polygon.js +89 -34
  34. package/src/base/text.js +8 -7
  35. package/src/base/ticks.js +17 -3
  36. package/src/base/transformation.js +1 -1
  37. package/src/base/turtle.js +1 -1
  38. package/src/element/arc.js +1 -1
  39. package/src/element/button.js +1 -1
  40. package/src/element/checkbox.js +1 -1
  41. package/src/element/comb.js +1 -1
  42. package/src/element/composition.js +2 -2
  43. package/src/element/conic.js +3 -3
  44. package/src/element/input.js +1 -1
  45. package/src/element/locus.js +1 -1
  46. package/src/element/measure.js +9 -4
  47. package/src/element/sector.js +5 -5
  48. package/src/element/slider.js +29 -12
  49. package/src/element/slopetriangle.js +1 -1
  50. package/src/jsxgraph.js +9 -3
  51. package/src/jxg.js +3 -3
  52. package/src/loadjsxgraph.js +18 -12
  53. package/src/math/bst.js +1 -1
  54. package/src/math/clip.js +550 -345
  55. package/src/math/complex.js +1 -1
  56. package/src/math/extrapolate.js +1 -1
  57. package/src/math/geometry.js +85 -6
  58. package/src/math/ia.js +69 -69
  59. package/src/math/math.js +10 -1
  60. package/src/math/metapost.js +1 -1
  61. package/src/math/nlp.js +4 -4
  62. package/src/math/numerics.js +2 -1
  63. package/src/math/plot.js +4 -4
  64. package/src/math/poly.js +1 -1
  65. package/src/math/probfuncs.js +2 -1
  66. package/src/math/qdt.js +11 -11
  67. package/src/math/statistics.js +10 -10
  68. package/src/math/symbolic.js +1 -1
  69. package/src/options.js +96 -40
  70. package/src/options3d.js +123 -0
  71. package/src/parser/ca.js +1297 -1291
  72. package/src/parser/datasource.js +1 -1
  73. package/src/parser/geonext.js +6 -6
  74. package/src/parser/jessiecode.js +369 -73
  75. package/src/parser/jessiescript.js +1 -1
  76. package/src/reader/cinderella.js +1 -1
  77. package/src/reader/file.js +1 -1
  78. package/src/reader/geogebra.js +1 -1
  79. package/src/reader/geonext.js +1 -1
  80. package/src/reader/graph.js +1 -1
  81. package/src/reader/intergeo.js +1 -1
  82. package/src/reader/sketch.js +7 -7
  83. package/src/renderer/abstract.js +8 -2
  84. package/src/renderer/canvas.js +9 -5
  85. package/src/renderer/no.js +2 -1
  86. package/src/renderer/svg.js +10 -13
  87. package/src/renderer/vml.js +1 -1
  88. package/src/server/server.js +1 -1
  89. package/src/utils/base64.js +2 -2
  90. package/src/utils/color.js +8 -9
  91. package/src/utils/dump.js +20 -5
  92. package/src/utils/env.js +13 -54
  93. package/src/utils/event.js +1 -1
  94. package/src/utils/expect.js +1 -1
  95. package/src/utils/type.js +12 -10
  96. package/src/utils/xml.js +1 -1
  97. package/src/utils/zip.js +1 -1
  98. package/CHANGELOG.md +0 -1366
@@ -1,7 +1,7 @@
1
1
  /*
2
- JSXGraph 1.4.0
2
+ JSXGraph 1.4.3
3
3
 
4
- Copyright 2008-2021
4
+ Copyright 2008-2022
5
5
  Matthias Ehmann,
6
6
  Michael Gerhaeuser,
7
7
  Carsten Miller,
@@ -58,4 +58,4 @@
58
58
  * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
59
59
  * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
60
60
  */
61
- (function(){"use strict";JXG.IntergeoReader=function(board,str){var xmlStr;this.board=board;xmlStr=this.prepareString(str);this.tree=JXG.XML.parse(xmlStr)};JXG.extend(JXG.IntergeoReader.prototype,{objects:{},read:function(){this.board.origin={};this.board.origin.usrCoords=[1,0,0];this.board.origin.scrCoords=[1,400,300];this.board.unitX=30;this.board.unitY=30;this.readElements(this.tree.getElementsByTagName("elements"));this.readConstraints(this.tree.getElementsByTagName("constraints"));this.cleanUp();this.board.fullUpdate();this.readDisplay(this.tree.getElementsByTagName("display"));this.board.fullUpdate()},readElement:function(tree,s){var node;node=tree[0].childNodes[s];if(node.nodeType>1){return}if(node.nodeName==="point"){this.storePoint(node)}else if(node.nodeName==="line"||node.nodeName==="line_segment"||node.nodeName==="ray"||node.nodeName==="vector"){this.storeLine(node)}else if(node.nodeName==="circle"){this.storeConic(node)}else if(node.nodeName==="conic"){this.storeConic(node)}else{JXG.debug("Not implemented: "+node.nodeName+" "+node.getAttribute("id"))}},readElements:function(tree){var s;for(s=0;s<tree[0].childNodes.length;s++){this.readElement(tree,s)}},storePoint:function(node){var i=0,j=0,l=0,p=node.childNodes[i],c=[],parents=[];while(p.nodeType>1){i+=1;p=node.childNodes[i]}if(p.nodeName==="homogeneous_coordinates"){for(j=0;j<p.childNodes.length;j++){if(p.childNodes[j].nodeType===1){if(p.childNodes[j].nodeName==="double"){c.push(p.childNodes[j].firstChild.data)}else if(p.childNodes[j].nodeName==="complex"){for(l=0;l<p.childNodes[j].childNodes.length;l++){if(p.childNodes[j].childNodes[l].nodeName==="double"){c.push(p.childNodes[j].childNodes[l].firstChild.data)}}}else{JXG.debug("Not implemented: "+p.childNodes[j].nodeName);return}}}for(j=0;j<c.length;j++){c[j]=parseFloat(c[j])}if(c.length===3){parents=[c[2],c[0],c[1]]}else if(c.length===6&&Math.abs(c[1])<1e-10&&Math.abs(c[3])<1e-10&&Math.abs(c[5])<1e-10){parents=[c[4],c[0],c[2]]}else{JXG.debug("type not supported, yet");return}}else if(p.nodeName==="euclidean_coordinates"||p.nodeName==="euclidian_coordinates"){for(j=0;j<p.childNodes.length;j++){if(p.childNodes[j].nodeType===1){c.push(p.childNodes[j].firstChild.data)}}for(j=0;j<c.length;j++){c[j]=parseFloat(c[j])}parents=[c[0],c[1]]}else if(p.nodeName==="polar_coordinates"){for(j=0;j<p.childNodes.length;j++){if(p.childNodes[j].nodeType===1){c.push(p.childNodes[j].firstChild.data)}}for(j=0;j<c.length;j++){c[j]=parseFloat(c[j])}parents=[c[0]*Math.cos(c[1]),c[0]*Math.sin(c[1])]}else{JXG.debug("This coordinate type is not yet implemented: "+p.nodeName);return}this.objects[node.getAttribute("id")]={id:node.getAttribute("id"),coords:null};this.objects[node.getAttribute("id")].coords=parents;this.objects[node.getAttribute("id")].id=node.getAttribute("id");this.objects[node.getAttribute("id")].exists=false;this.objects[node.getAttribute("id")].i2geoType="point"},storeLine:function(node){var i,p,c,j;this.objects[node.getAttribute("id")]={id:node.getAttribute("id"),coords:null};i=0;p=node.childNodes[i];while(p.nodeType>1){i+=1;p=node.childNodes[i]}if(p.nodeName==="homogeneous_coordinates"){c=[];for(j=0;j<p.childNodes.length;j++){if(p.childNodes[j].nodeType===1){if(p.childNodes[j].nodeName==="double"){c.push(parseFloat(p.childNodes[j].firstChild.data))}}}this.objects[node.getAttribute("id")].coords=c;this.objects[node.getAttribute("id")].id=node.getAttribute("id");this.objects[node.getAttribute("id")].exists=false;this.objects[node.getAttribute("id")].i2geoType="line"}},storeConic:function(node){var i,j,p,c;this.objects[node.getAttribute("id")]={id:node.getAttribute("id"),coords:null};i=0;p=node.childNodes[i];while(p.nodeType>1){i+=1;p=node.childNodes[i]}if(p.nodeName==="matrix"){c=[];for(j=0;j<p.childNodes.length;j++){if(p.childNodes[j].nodeType===1){if(p.childNodes[j].nodeName==="double"){c.push(parseFloat(p.childNodes[j].firstChild.data))}}}this.objects[node.getAttribute("id")].coords=c;this.objects[node.getAttribute("id")].id=node.getAttribute("id");this.objects[node.getAttribute("id")].exists=false;this.objects[node.getAttribute("id")].i2geoType="conic"}},readConstraint:function(tree,s){var param,node;node=tree[0].childNodes[s];if(node.nodeType>1){return}if(node.nodeName==="line_through_two_points"){this.addLineThroughTwoPoints(node,false)}else if(node.nodeName==="ray_from_point_through_point"){this.addLineThroughTwoPoints(node,true)}else if(node.nodeName==="line_through_point"){this.addLineThroughPoint(node)}else if(node.nodeName==="line_parallel_to_line_through_point"){this.addLineParallelToLineThroughPoint(node,false)}else if(node.nodeName==="ray_from_point_and_vector"){this.addLineParallelToLineThroughPoint(node,true)}else if(node.nodeName==="line_perpendicular_to_line_through_point"){this.addLinePerpendicularToLineThroughPoint(node)}else if(node.nodeName==="line_segment_by_points"){this.addLineSegmentByTwoPoints(node)}else if(node.nodeName==="vector_from_point_to_point"){this.addVectorFromPointToPoint(node)}else if(node.nodeName==="endpoints_of_line_segment"){this.addEndpointsOfLineSegment(node)}else if(node.nodeName==="free_line"){this.addFreeLine(node)}else if(node.nodeName==="point_on_line"){this.addPointOnLine(node)}else if(node.nodeName==="point_on_line_segment"){this.addPointOnLine(node)}else if(node.nodeName==="point_on_circle"){this.addPointOnCircle(node)}else if(node.nodeName==="angular_bisector_of_three_points"){this.addAngularBisectorOfThreePoints(node,false)}else if(node.nodeName==="angular_bisectors_of_two_lines"){this.addAngularBisectorsOfTwoLines(node)}else if(node.nodeName==="line_angular_bisector_of_three_points"){this.addAngularBisectorOfThreePoints(node,true)}else if(node.nodeName==="line_angular_bisectors_of_two_lines"){this.addAngularBisectorsOfTwoLines(node)}else if(node.nodeName==="midpoint_of_two_points"){this.addMidpointOfTwoPoints(node)}else if(node.nodeName==="midpoint"){this.addMidpointOfTwoPoints(node)}else if(node.nodeName==="midpoint_of_line_segment"||node.nodeName==="midpoint_line_segment"){this.addMidpointOfLineSegment(node)}else if(node.nodeName==="point_intersection_of_two_lines"){this.addPointIntersectionOfTwoLines(node)}else if(node.nodeName==="locus_defined_by_point"){this.addLocusDefinedByPoint(node)}else if(node.nodeName==="locus_defined_by_point_on_line"){this.addLocusDefinedByPointOnLine(node)}else if(node.nodeName==="locus_defined_by_point_on_line_segment"){this.addLocusDefinedByPointOnLine(node)}else if(node.nodeName==="locus_defined_by_line_through_point"){this.addLocusDefinedByLineThroughPoint(node)}else if(node.nodeName==="locus_defined_by_point_on_circle"){this.addLocusDefinedByPointOnCircle(node)}else if(node.nodeName==="circle_by_three_points"){this.addCircleByThreePoints(node)}else if(node.nodeName==="circle_by_center_and_point"){this.addCircleByCenterAndPoint(node)}else if(node.nodeName==="center_of_circle"){this.addCenterOfCircle(node)}else if(node.nodeName==="intersection_points_of_two_circles"){this.addIntersectionPointsOfTwoCircles(node)}else if(node.nodeName==="intersection_points_of_circle_and_line"){this.addIntersectionPointsOfCircleAndLine(node)}else if(node.nodeName==="other_intersection_point_of_two_circles"){this.addOtherIntersectionPointOfTwoCircles(node)}else if(node.nodeName==="other_intersection_point_of_circle_and_line"){this.addOtherIntersectionPointOfCircleAndLine(node)}else if(node.nodeName==="circle_tangent_lines_by_point"){this.addCircleTangentLinesByPoint(node)}else if(node.nodeName==="polygon_by_vertices"){this.addPolygonByVertices(node)}else{param=this.readParams(node);JXG.debug("readConstraints: not implemented: "+node.nodeName+": "+param[0])}},readConstraints:function(tree){var s;this.board.options.point.strokeColor="blue";this.board.options.point.fillColor="blue";for(s=0;s<tree[0].childNodes.length;s++){this.readConstraint(tree,s)}},setAttributes:function(o){o.setAttribute({strokecolor:this.board.options.point.strokeColor,fillColor:this.board.options.point.fillColor})},readParams:function(node){var j,param=[];for(j=0;j<node.childNodes.length;j++){if(node.childNodes[j].nodeType===1){param.push(node.childNodes[j].firstChild.data)}}return param},addPoint:function(p){if(!p.exists){p.exists=true;p=this.board.create("point",p.coords,{name:p.id});p.setAttribute({strokecolor:"red",fillColor:"red"})}return p},addLine:function(id){var j,c=this.objects[id].coords,el;for(j=0;j<c.length;j++){c[j]=parseFloat(c[j])}el=this.board.create("line",[c[2],c[0],c[1]],{name:id,strokeColor:"black",withLabel:true});this.objects[id]=el},addConic:function(p){var c;if(!p.exists){c=p.coords;p=this.board.create("conic",[c[0],c[4],c[8],c[1],c[5],c[2]],{name:p.id});p.exists=true}return p},cleanUp:function(){var p;for(p in this.objects){if(this.objects.hasOwnProperty(p)){if(this.objects[p].exists===false){if(this.objects[p].i2geoType==="point"){this.addPoint(this.objects[p])}else if(this.objects[p].i2geoType==="line"){this.addLine(this.objects[p])}else if(this.objects[p].i2geoType==="conic"){this.addConic(this.objects[p])}else{JXG.debug("forgotten: "+this.objects[p].id+" of type "+this.objects[p].i2geoType)}}}}},addLineThroughTwoPoints:function(node,isRay){var el1,el2,el,param=this.readParams(node);el1=this.addPoint(this.objects[param[1]]);el2=this.addPoint(this.objects[param[2]]);el=this.board.create("line",[el1.id,el2.id],{name:param[0],withLabel:true,straightFirst:!isRay,straightLast:true});this.objects[param[0]]=el;this.objects[param[0]].exists=true},addLineThroughPoint:function(node){var param=this.readParams(node),j,c=this.objects[param[0]].coords,p=this.addPoint(this.objects[param[1]]),el;for(j=0;j<c.length;j++){c[j]=parseFloat(c[j])}el=this.board.create("line",[function(){return c[2]-c[0]*p.X()-c[1]*p.Y()-c[2]*p.Z()},c[0],c[1]],{name:param[0],strokeColor:"black",withLabel:true});this.objects[param[0]]=el;this.objects[param[0]].exists=true},addLineParallelToLineThroughPoint:function(node,isRay){var el1,el2,el,param=this.readParams(node);el1=this.addPoint(this.objects[param[1]]);el2=this.addPoint(this.objects[param[2]]);el=this.board.create("parallel",[el1.id,el2.id],{name:param[0],withLabel:true,straightFirst:!isRay,straightLast:true});this.objects[param[0]]=el;this.objects[param[0]].exists=true},addLinePerpendicularToLineThroughPoint:function(node){var el1,el2,el,param=this.readParams(node);el1=this.addPoint(this.objects[param[1]]);el2=this.addPoint(this.objects[param[2]]);el=this.board.create("perpendicular",[el1.id,el2.id],{name:param[0],id:param[0],straightFirst:true,straightLast:true,point:{name:param[0]+"foot",id:param[0]+"foot"},withLabel:true});this.objects[param[0]]=el;this.objects[param[0]].exists=true},addLineSegmentByTwoPoints:function(node){var el1,el2,el,param=this.readParams(node);el1=this.addPoint(this.objects[param[1]]);el2=this.addPoint(this.objects[param[2]]);el=this.board.create("line",[el1.id,el2.id],{name:param[0],straightFirst:false,straightLast:false,strokeColor:"black",withLabel:true});this.objects[param[0]]=el;this.objects[param[0]].exists=true},addPointIntersectionOfTwoLines:function(node){var param=this.readParams(node),l1=this.objects[param[1]],l2=this.objects[param[2]];this.objects[param[0]]=this.board.create("intersection",[l1,l2,0],{name:param[0],id:param[0],withLabel:true});this.setAttributes(this.objects[param[0]]);this.objects[param[0]].exists=true},addFreeLine:function(node){var param=this.readParams(node),a=this.objects[param[0]].coords[0],b=this.objects[param[0]].coords[1],c=this.objects[param[0]].coords[2];this.objects[param[0]]=this.board.create("line",[c,a,b],{name:param[0],id:param[0],withLabel:true});this.objects[param[0]].exists=true},addPointOnLine:function(node){var param=this.readParams(node),l=this.board.select(param[1]);this.board.create("glider",[0,0,l],{name:param[0],id:param[0],withLabel:true});this.objects[param[0]].exists=true},addPointOnCircle:function(node){var param=this.readParams(node),c=this.board.select(param[1]);c.update();this.board.create("glider",[this.objects[param[0]].coords[1],this.objects[param[0]].coords[2],c],{name:param[0],id:param[0],withLabel:true});this.objects[param[0]].exists=true},addEndpointsOfLineSegment:function(node){var param=this.readParams(node),line=this.objects[param[2]],p=this.addPoint(this.objects[param[0]]),q=this.addPoint(this.objects[param[1]]);p.addConstraint([function(){return line.point1.Z()},function(){return line.point1.X()},function(){return line.point1.Y()}]);q.addConstraint([function(){return line.point2.Z()},function(){return line.point2.X()},function(){return line.point2.Y()}]);this.setAttributes(p);this.setAttributes(q)},addAngularBisectorOfThreePoints:function(node,isLine){var el1,el2,el3,el,param=this.readParams(node);el1=this.addPoint(this.objects[param[1]]);el2=this.addPoint(this.objects[param[2]]);el3=this.addPoint(this.objects[param[3]]);el=this.board.create("bisector",[el1.id,el2.id,el3.id],{name:param[0],id:param[0],withLabel:true,straightFirst:isLine,straightLast:true,strokeColor:"#000000"});this.objects[param[0]]=el;this.objects[param[0]].exists=true},addMidpointOfTwoPoints:function(node){var el1,el2,el,param=this.readParams(node);el1=this.addPoint(this.objects[param[1]]);el2=this.addPoint(this.objects[param[2]]);el=this.board.create("midpoint",[el1.id,el2.id],{name:param[0]});this.setAttributes(el);this.objects[param[0]].exists=true},addMidpointOfLineSegment:function(node){var param=this.readParams(node),l=this.board.select(param[1]),el=this.board.create("midpoint",[l.point1,l.point2],{name:param[0]});this.setAttributes(el);this.objects[param[0]].exists=true},addCircleByThreePoints:function(node){var i,param=this.readParams(node),p=[];for(i=0;i<3;i++){p[i]=this.addPoint(this.objects[param[i+1]])}this.board.create("circumcircle",p,{name:param[0],id:param[0],point:{name:param[0]+"c",id:param[0]+"c"},withLabel:true});this.objects[param[0]].exists=true},addCenterOfCircle:function(node){var param=this.readParams(node),c=this.board.select(param[1]),el=this.board.create("point",[function(){return c.center.X()},function(){return c.center.Y()}],{name:param[0],id:param[0],withLabel:true});this.setAttributes(el);this.objects[param[0]].exists=true},addCircleTangentLinesByPoint:function(node){var polar,i1,i2,t1,t2,param=this.readParams(node),c=this.board.select(param[2]),p=this.addPoint(this.objects[param[3]]);polar=this.board.create("line",[function(){return JXG.Math.matVecMult(c.quadraticform,p.coords.usrCoords)[0]},function(){return JXG.Math.matVecMult(c.quadraticform,p.coords.usrCoords)[1]},function(){return JXG.Math.matVecMult(c.quadraticform,p.coords.usrCoords)[2]}],{visible:false});i1=this.board.create("intersection",[c,polar,0],{visible:false});i2=this.board.create("intersection",[c,polar,1],{visible:false});t1=this.board.create("tangent",[i1,c]);t2=this.board.create("tangent",[i2,c]);this.objects[param[0]]=t1;this.objects[param[1]]=t2;this.objects[param[0]].exists=true;this.objects[param[1]].exists=true},addIntersectionPointsOfTwoCircles:function(node){var p1,p2,param=this.readParams(node),c1=this.board.select(param[2]),c2=this.board.select(param[3]);p1=this.board.create("intersection",[c1,c2,0],{name:param[0],id:param[0],withLabel:true});p2=this.board.create("intersection",[c1,c2,1],{name:param[1],id:param[1],withLabel:true});this.setAttributes(p1);this.setAttributes(p2);this.objects[param[0]].exists=true;this.objects[param[1]].exists=true},addIntersectionPointsOfCircleAndLine:function(node){var p1,p2,param=this.readParams(node),c1=this.board.select(param[2]),c2=this.board.select(param[3]);p1=this.board.create("intersection",[c1,c2,0],{name:param[0],id:param[0],withLabel:true});p2=this.board.create("intersection",[c1,c2,1],{name:param[1],id:param[1],withLabel:true});this.setAttributes(p1);this.setAttributes(p2);this.objects[param[0]].exists=true;this.objects[param[1]].exists=true},addCircleByCenterAndPoint:function(node){var param=this.readParams(node),el1=this.addPoint(this.objects[param[1]]),el2=this.addPoint(this.objects[param[2]]);this.board.create("circle",[el1.id,el2.id],{name:param[0],id:param[0],withLabel:true});this.objects[param[0]].exists=true},addOtherIntersectionPointOfTwoCircles:function(node){var param=this.readParams(node),c1=this.board.select(param[2]),c2=this.board.select(param[3]),p1=this.board.select(param[1]),p2;p2=this.board.create("otherintersection",[c1,c2,p1],{name:param[0],id:param[0],withLabel:true});this.setAttributes(p2);this.objects[param[0]].exists=true},addOtherIntersectionPointOfCircleAndLine:function(node){this.addOtherIntersectionPointOfTwoCircles(node)},addAngularBisectorsOfTwoLines:function(node){var param=this.readParams(node),l1=this.objects[param[2]],l2=this.objects[param[3]];this.board.create("bisectorlines",[l1,l2],{line1:{name:param[0],id:param[0],straightFirst:true,straightLast:true},line2:{name:param[1],id:param[1],straightFirst:true,straightLast:true},withLabel:true});this.objects[param[0]].exists=true;this.objects[param[1]].exists=true},addPolygonByVertices:function(node){var j,n,param2=[],p=[],param=this.readParams(node);for(j=0;j<node.childNodes.length;j++){if(node.childNodes[j].nodeType===1){if(node.childNodes[j].nodeName==="list_of_vertices"){n=node.childNodes[j];param2=this.readParams(n);break}}}for(j=0;j<param2.length;j++){p.push(this.addPoint(this.objects[param2[j]]))}this.board.create("polygon",p,{name:param[0],id:param[0],withLabel:true});this.objects[param[0]].exists=true},addVectorFromPointToPoint:function(node){var el,el1,el2,param=this.readParams(node);el1=this.addPoint(this.objects[param[1]]);el2=this.addPoint(this.objects[param[2]]);el=this.board.create("arrow",[el1.id,el2.id],{name:param[0]});this.setAttributes(el);this.objects[param[0]].exists=true},addLocusDefinedByPoint:function(node){var param=this.readParams(node),el=this.board.select(param[1]);el.setAttribute({trace:true});this.objects[param[1]]=el;this.setAttributes(el)},addLocusDefinedByPointOnLine:function(node){var param=this.readParams(node),el=this.board.select(param[1]);el.setAttribute({trace:true});this.objects[param[1]]=el;this.setAttributes(el)},addLocusDefinedByLineThroughPoint:function(node){var param=this.readParams(node),el=this.board.select(param[1]);el.setAttribute({trace:true});this.objects[param[1]]=el;this.setAttributes(el)},addLocusDefinedByPointOnCircle:function(node){var param=this.readParams(node),el=this.board.select(param[1]);el.setAttribute({trace:true});this.objects[param[1]]=el;this.setAttributes(el)},prepareString:function(fileStr){var i,bA=[],isZip=false;if(fileStr.slice(0,2)==="PK"||JXG.Util.UTF8.asciiCharCodeAt(fileStr.slice(0,1),0)===31){isZip=true}if(!isZip&&fileStr.indexOf("<")!==0){fileStr=JXG.Util.Base64.decode(fileStr)}if(fileStr.indexOf("<")!==0){for(i=0;i<fileStr.length;i++){bA[i]=JXG.Util.UTF8.asciiCharCodeAt(fileStr,i)}fileStr=new JXG.Util.Unzip(bA).unzipFile("construction/intergeo.xml")}return fileStr},readDisplayProperty:function(tree,s){var j,node,el,prop={},key,val;node=tree[0].childNodes[s];if(node.nodeType>1){return}if(node.nodeName==="background-color"){this.board.containerObj.style.backgroundColor=node.firstChild.data}else if(node.nodeName==="style"){el=this.board.select(node.getAttribute("ref"));for(j=0;j<node.childNodes.length;j++){if(node.childNodes[j].nodeType===1){key=node.childNodes[j].nodeName;val=node.childNodes[j].firstChild.data;if(key==="stroke"){key="strokeColor"}else if(key==="stroke-width"||key==="border-width"){key="strokeWidth"}else if(key==="fill"){key="fillColor"}else if(key==="fill-opacity"){key="fillOpacity"}else if(key==="border-opacity"){key="strokeOpacity"}else if(key==="point-size"){key="size"}else if(key==="label"){key="name"}else if(key==="point-style"){key="face";if(val==="circle"){val="o"}else if(val==="cross"){val="+"}else if(val==="x-mark"){val="x"}else if(val==="square"){val="[]"}else if(val==="triangle"){val="triangleup"}else if(val==="point"){val="o"}else{JXG.debug("Display: not implemented"+node.nodeName)}}prop[key]=val}}el.setAttribute(prop)}else{JXG.debug("Display: not implemented"+node.nodeName)}},readDisplay:function(tree){var s;if(!JXG.exists(tree)||!JXG.isArray(tree)){return}for(s=0;s<tree[0].childNodes.length;s++){this.readDisplayProperty(tree,s)}}});JXG.registerReader(JXG.IntergeoReader,["i2g","xml","intergeo"])})();
61
+ !function(){"use strict";JXG.IntergeoReader=function(t,e){var i;this.board=t,i=this.prepareString(e),this.tree=JXG.XML.parse(i)},JXG.extend(JXG.IntergeoReader.prototype,{objects:{},read:function(){this.board.origin={},this.board.origin.usrCoords=[1,0,0],this.board.origin.scrCoords=[1,400,300],this.board.unitX=30,this.board.unitY=30,this.readElements(this.tree.getElementsByTagName("elements")),this.readConstraints(this.tree.getElementsByTagName("constraints")),this.cleanUp(),this.board.fullUpdate(),this.readDisplay(this.tree.getElementsByTagName("display")),this.board.fullUpdate()},readElement:function(t,e){var i;(i=t[0].childNodes[e]).nodeType>1||("point"===i.nodeName?this.storePoint(i):"line"===i.nodeName||"line_segment"===i.nodeName||"ray"===i.nodeName||"vector"===i.nodeName?this.storeLine(i):"circle"===i.nodeName||"conic"===i.nodeName?this.storeConic(i):JXG.debug("Not implemented: "+i.nodeName+" "+i.getAttribute("id")))},readElements:function(t){var e;for(e=0;e<t[0].childNodes.length;e++)this.readElement(t,e)},storePoint:function(t){for(var e=0,i=0,s=0,o=t.childNodes[e],n=[],d=[];o.nodeType>1;)e+=1,o=t.childNodes[e];if("homogeneous_coordinates"===o.nodeName){for(i=0;i<o.childNodes.length;i++)if(1===o.childNodes[i].nodeType)if("double"===o.childNodes[i].nodeName)n.push(o.childNodes[i].firstChild.data);else{if("complex"!==o.childNodes[i].nodeName)return void JXG.debug("Not implemented: "+o.childNodes[i].nodeName);for(s=0;s<o.childNodes[i].childNodes.length;s++)"double"===o.childNodes[i].childNodes[s].nodeName&&n.push(o.childNodes[i].childNodes[s].firstChild.data)}for(i=0;i<n.length;i++)n[i]=parseFloat(n[i]);if(3===n.length)d=[n[2],n[0],n[1]];else{if(!(6===n.length&&Math.abs(n[1])<1e-10&&Math.abs(n[3])<1e-10&&Math.abs(n[5])<1e-10))return void JXG.debug("type not supported, yet");d=[n[4],n[0],n[2]]}}else if("euclidean_coordinates"===o.nodeName||"euclidian_coordinates"===o.nodeName){for(i=0;i<o.childNodes.length;i++)1===o.childNodes[i].nodeType&&n.push(o.childNodes[i].firstChild.data);for(i=0;i<n.length;i++)n[i]=parseFloat(n[i]);d=[n[0],n[1]]}else{if("polar_coordinates"!==o.nodeName)return void JXG.debug("This coordinate type is not yet implemented: "+o.nodeName);for(i=0;i<o.childNodes.length;i++)1===o.childNodes[i].nodeType&&n.push(o.childNodes[i].firstChild.data);for(i=0;i<n.length;i++)n[i]=parseFloat(n[i]);d=[n[0]*Math.cos(n[1]),n[0]*Math.sin(n[1])]}this.objects[t.getAttribute("id")]={id:t.getAttribute("id"),coords:null},this.objects[t.getAttribute("id")].coords=d,this.objects[t.getAttribute("id")].id=t.getAttribute("id"),this.objects[t.getAttribute("id")].exists=!1,this.objects[t.getAttribute("id")].i2geoType="point"},storeLine:function(t){var e,i,s,o;for(this.objects[t.getAttribute("id")]={id:t.getAttribute("id"),coords:null},e=0,i=t.childNodes[e];i.nodeType>1;)e+=1,i=t.childNodes[e];if("homogeneous_coordinates"===i.nodeName){for(s=[],o=0;o<i.childNodes.length;o++)1===i.childNodes[o].nodeType&&"double"===i.childNodes[o].nodeName&&s.push(parseFloat(i.childNodes[o].firstChild.data));this.objects[t.getAttribute("id")].coords=s,this.objects[t.getAttribute("id")].id=t.getAttribute("id"),this.objects[t.getAttribute("id")].exists=!1,this.objects[t.getAttribute("id")].i2geoType="line"}},storeConic:function(t){var e,i,s,o;for(this.objects[t.getAttribute("id")]={id:t.getAttribute("id"),coords:null},e=0,s=t.childNodes[e];s.nodeType>1;)e+=1,s=t.childNodes[e];if("matrix"===s.nodeName){for(o=[],i=0;i<s.childNodes.length;i++)1===s.childNodes[i].nodeType&&"double"===s.childNodes[i].nodeName&&o.push(parseFloat(s.childNodes[i].firstChild.data));this.objects[t.getAttribute("id")].coords=o,this.objects[t.getAttribute("id")].id=t.getAttribute("id"),this.objects[t.getAttribute("id")].exists=!1,this.objects[t.getAttribute("id")].i2geoType="conic"}},readConstraint:function(t,e){var i,s;(s=t[0].childNodes[e]).nodeType>1||("line_through_two_points"===s.nodeName?this.addLineThroughTwoPoints(s,!1):"ray_from_point_through_point"===s.nodeName?this.addLineThroughTwoPoints(s,!0):"line_through_point"===s.nodeName?this.addLineThroughPoint(s):"line_parallel_to_line_through_point"===s.nodeName?this.addLineParallelToLineThroughPoint(s,!1):"ray_from_point_and_vector"===s.nodeName?this.addLineParallelToLineThroughPoint(s,!0):"line_perpendicular_to_line_through_point"===s.nodeName?this.addLinePerpendicularToLineThroughPoint(s):"line_segment_by_points"===s.nodeName?this.addLineSegmentByTwoPoints(s):"vector_from_point_to_point"===s.nodeName?this.addVectorFromPointToPoint(s):"endpoints_of_line_segment"===s.nodeName?this.addEndpointsOfLineSegment(s):"free_line"===s.nodeName?this.addFreeLine(s):"point_on_line"===s.nodeName||"point_on_line_segment"===s.nodeName?this.addPointOnLine(s):"point_on_circle"===s.nodeName?this.addPointOnCircle(s):"angular_bisector_of_three_points"===s.nodeName?this.addAngularBisectorOfThreePoints(s,!1):"angular_bisectors_of_two_lines"===s.nodeName?this.addAngularBisectorsOfTwoLines(s):"line_angular_bisector_of_three_points"===s.nodeName?this.addAngularBisectorOfThreePoints(s,!0):"line_angular_bisectors_of_two_lines"===s.nodeName?this.addAngularBisectorsOfTwoLines(s):"midpoint_of_two_points"===s.nodeName||"midpoint"===s.nodeName?this.addMidpointOfTwoPoints(s):"midpoint_of_line_segment"===s.nodeName||"midpoint_line_segment"===s.nodeName?this.addMidpointOfLineSegment(s):"point_intersection_of_two_lines"===s.nodeName?this.addPointIntersectionOfTwoLines(s):"locus_defined_by_point"===s.nodeName?this.addLocusDefinedByPoint(s):"locus_defined_by_point_on_line"===s.nodeName||"locus_defined_by_point_on_line_segment"===s.nodeName?this.addLocusDefinedByPointOnLine(s):"locus_defined_by_line_through_point"===s.nodeName?this.addLocusDefinedByLineThroughPoint(s):"locus_defined_by_point_on_circle"===s.nodeName?this.addLocusDefinedByPointOnCircle(s):"circle_by_three_points"===s.nodeName?this.addCircleByThreePoints(s):"circle_by_center_and_point"===s.nodeName?this.addCircleByCenterAndPoint(s):"center_of_circle"===s.nodeName?this.addCenterOfCircle(s):"intersection_points_of_two_circles"===s.nodeName?this.addIntersectionPointsOfTwoCircles(s):"intersection_points_of_circle_and_line"===s.nodeName?this.addIntersectionPointsOfCircleAndLine(s):"other_intersection_point_of_two_circles"===s.nodeName?this.addOtherIntersectionPointOfTwoCircles(s):"other_intersection_point_of_circle_and_line"===s.nodeName?this.addOtherIntersectionPointOfCircleAndLine(s):"circle_tangent_lines_by_point"===s.nodeName?this.addCircleTangentLinesByPoint(s):"polygon_by_vertices"===s.nodeName?this.addPolygonByVertices(s):(i=this.readParams(s),JXG.debug("readConstraints: not implemented: "+s.nodeName+": "+i[0])))},readConstraints:function(t){var e;for(this.board.options.point.strokeColor="blue",this.board.options.point.fillColor="blue",e=0;e<t[0].childNodes.length;e++)this.readConstraint(t,e)},setAttributes:function(t){t.setAttribute({strokecolor:this.board.options.point.strokeColor,fillColor:this.board.options.point.fillColor})},readParams:function(t){var e,i=[];for(e=0;e<t.childNodes.length;e++)1===t.childNodes[e].nodeType&&i.push(t.childNodes[e].firstChild.data);return i},addPoint:function(t){return t.exists||(t.exists=!0,(t=this.board.create("point",t.coords,{name:t.id})).setAttribute({strokecolor:"red",fillColor:"red"})),t},addLine:function(t){var e,i,s=this.objects[t].coords;for(e=0;e<s.length;e++)s[e]=parseFloat(s[e]);i=this.board.create("line",[s[2],s[0],s[1]],{name:t,strokeColor:"black",withLabel:!0}),this.objects[t]=i},addConic:function(t){var e;return t.exists||(e=t.coords,(t=this.board.create("conic",[e[0],e[4],e[8],e[1],e[5],e[2]],{name:t.id})).exists=!0),t},cleanUp:function(){var t;for(t in this.objects)this.objects.hasOwnProperty(t)&&!1===this.objects[t].exists&&("point"===this.objects[t].i2geoType?this.addPoint(this.objects[t]):"line"===this.objects[t].i2geoType?this.addLine(this.objects[t]):"conic"===this.objects[t].i2geoType?this.addConic(this.objects[t]):JXG.debug("forgotten: "+this.objects[t].id+" of type "+this.objects[t].i2geoType))},addLineThroughTwoPoints:function(t,e){var i,s,o,n=this.readParams(t);i=this.addPoint(this.objects[n[1]]),s=this.addPoint(this.objects[n[2]]),o=this.board.create("line",[i.id,s.id],{name:n[0],withLabel:!0,straightFirst:!e,straightLast:!0}),this.objects[n[0]]=o,this.objects[n[0]].exists=!0},addLineThroughPoint:function(t){var e,i,s=this.readParams(t),o=this.objects[s[0]].coords,n=this.addPoint(this.objects[s[1]]);for(e=0;e<o.length;e++)o[e]=parseFloat(o[e]);i=this.board.create("line",[function(){return o[2]-o[0]*n.X()-o[1]*n.Y()-o[2]*n.Z()},o[0],o[1]],{name:s[0],strokeColor:"black",withLabel:!0}),this.objects[s[0]]=i,this.objects[s[0]].exists=!0},addLineParallelToLineThroughPoint:function(t,e){var i,s,o,n=this.readParams(t);i=this.addPoint(this.objects[n[1]]),s=this.addPoint(this.objects[n[2]]),o=this.board.create("parallel",[i.id,s.id],{name:n[0],withLabel:!0,straightFirst:!e,straightLast:!0}),this.objects[n[0]]=o,this.objects[n[0]].exists=!0},addLinePerpendicularToLineThroughPoint:function(t){var e,i,s,o=this.readParams(t);e=this.addPoint(this.objects[o[1]]),i=this.addPoint(this.objects[o[2]]),s=this.board.create("perpendicular",[e.id,i.id],{name:o[0],id:o[0],straightFirst:!0,straightLast:!0,point:{name:o[0]+"foot",id:o[0]+"foot"},withLabel:!0}),this.objects[o[0]]=s,this.objects[o[0]].exists=!0},addLineSegmentByTwoPoints:function(t){var e,i,s,o=this.readParams(t);e=this.addPoint(this.objects[o[1]]),i=this.addPoint(this.objects[o[2]]),s=this.board.create("line",[e.id,i.id],{name:o[0],straightFirst:!1,straightLast:!1,strokeColor:"black",withLabel:!0}),this.objects[o[0]]=s,this.objects[o[0]].exists=!0},addPointIntersectionOfTwoLines:function(t){var e=this.readParams(t),i=this.objects[e[1]],s=this.objects[e[2]];this.objects[e[0]]=this.board.create("intersection",[i,s,0],{name:e[0],id:e[0],withLabel:!0}),this.setAttributes(this.objects[e[0]]),this.objects[e[0]].exists=!0},addFreeLine:function(t){var e=this.readParams(t),i=this.objects[e[0]].coords[0],s=this.objects[e[0]].coords[1],o=this.objects[e[0]].coords[2];this.objects[e[0]]=this.board.create("line",[o,i,s],{name:e[0],id:e[0],withLabel:!0}),this.objects[e[0]].exists=!0},addPointOnLine:function(t){var e=this.readParams(t),i=this.board.select(e[1]);this.board.create("glider",[0,0,i],{name:e[0],id:e[0],withLabel:!0}),this.objects[e[0]].exists=!0},addPointOnCircle:function(t){var e=this.readParams(t),i=this.board.select(e[1]);i.update(),this.board.create("glider",[this.objects[e[0]].coords[1],this.objects[e[0]].coords[2],i],{name:e[0],id:e[0],withLabel:!0}),this.objects[e[0]].exists=!0},addEndpointsOfLineSegment:function(t){var e=this.readParams(t),i=this.objects[e[2]],s=this.addPoint(this.objects[e[0]]),o=this.addPoint(this.objects[e[1]]);s.addConstraint([function(){return i.point1.Z()},function(){return i.point1.X()},function(){return i.point1.Y()}]),o.addConstraint([function(){return i.point2.Z()},function(){return i.point2.X()},function(){return i.point2.Y()}]),this.setAttributes(s),this.setAttributes(o)},addAngularBisectorOfThreePoints:function(t,e){var i,s,o,n,d=this.readParams(t);i=this.addPoint(this.objects[d[1]]),s=this.addPoint(this.objects[d[2]]),o=this.addPoint(this.objects[d[3]]),n=this.board.create("bisector",[i.id,s.id,o.id],{name:d[0],id:d[0],withLabel:!0,straightFirst:e,straightLast:!0,strokeColor:"#000000"}),this.objects[d[0]]=n,this.objects[d[0]].exists=!0},addMidpointOfTwoPoints:function(t){var e,i,s,o=this.readParams(t);e=this.addPoint(this.objects[o[1]]),i=this.addPoint(this.objects[o[2]]),s=this.board.create("midpoint",[e.id,i.id],{name:o[0]}),this.setAttributes(s),this.objects[o[0]].exists=!0},addMidpointOfLineSegment:function(t){var e=this.readParams(t),i=this.board.select(e[1]),s=this.board.create("midpoint",[i.point1,i.point2],{name:e[0]});this.setAttributes(s),this.objects[e[0]].exists=!0},addCircleByThreePoints:function(t){var e,i=this.readParams(t),s=[];for(e=0;e<3;e++)s[e]=this.addPoint(this.objects[i[e+1]]);this.board.create("circumcircle",s,{name:i[0],id:i[0],point:{name:i[0]+"c",id:i[0]+"c"},withLabel:!0}),this.objects[i[0]].exists=!0},addCenterOfCircle:function(t){var e=this.readParams(t),i=this.board.select(e[1]),s=this.board.create("point",[function(){return i.center.X()},function(){return i.center.Y()}],{name:e[0],id:e[0],withLabel:!0});this.setAttributes(s),this.objects[e[0]].exists=!0},addCircleTangentLinesByPoint:function(t){var e,i,s,o,n,d=this.readParams(t),r=this.board.select(d[2]),a=this.addPoint(this.objects[d[3]]);e=this.board.create("line",[function(){return JXG.Math.matVecMult(r.quadraticform,a.coords.usrCoords)[0]},function(){return JXG.Math.matVecMult(r.quadraticform,a.coords.usrCoords)[1]},function(){return JXG.Math.matVecMult(r.quadraticform,a.coords.usrCoords)[2]}],{visible:!1}),i=this.board.create("intersection",[r,e,0],{visible:!1}),s=this.board.create("intersection",[r,e,1],{visible:!1}),o=this.board.create("tangent",[i,r]),n=this.board.create("tangent",[s,r]),this.objects[d[0]]=o,this.objects[d[1]]=n,this.objects[d[0]].exists=!0,this.objects[d[1]].exists=!0},addIntersectionPointsOfTwoCircles:function(t){var e,i,s=this.readParams(t),o=this.board.select(s[2]),n=this.board.select(s[3]);e=this.board.create("intersection",[o,n,0],{name:s[0],id:s[0],withLabel:!0}),i=this.board.create("intersection",[o,n,1],{name:s[1],id:s[1],withLabel:!0}),this.setAttributes(e),this.setAttributes(i),this.objects[s[0]].exists=!0,this.objects[s[1]].exists=!0},addIntersectionPointsOfCircleAndLine:function(t){var e,i,s=this.readParams(t),o=this.board.select(s[2]),n=this.board.select(s[3]);e=this.board.create("intersection",[o,n,0],{name:s[0],id:s[0],withLabel:!0}),i=this.board.create("intersection",[o,n,1],{name:s[1],id:s[1],withLabel:!0}),this.setAttributes(e),this.setAttributes(i),this.objects[s[0]].exists=!0,this.objects[s[1]].exists=!0},addCircleByCenterAndPoint:function(t){var e=this.readParams(t),i=this.addPoint(this.objects[e[1]]),s=this.addPoint(this.objects[e[2]]);this.board.create("circle",[i.id,s.id],{name:e[0],id:e[0],withLabel:!0}),this.objects[e[0]].exists=!0},addOtherIntersectionPointOfTwoCircles:function(t){var e,i=this.readParams(t),s=this.board.select(i[2]),o=this.board.select(i[3]),n=this.board.select(i[1]);e=this.board.create("otherintersection",[s,o,n],{name:i[0],id:i[0],withLabel:!0}),this.setAttributes(e),this.objects[i[0]].exists=!0},addOtherIntersectionPointOfCircleAndLine:function(t){this.addOtherIntersectionPointOfTwoCircles(t)},addAngularBisectorsOfTwoLines:function(t){var e=this.readParams(t),i=this.objects[e[2]],s=this.objects[e[3]];this.board.create("bisectorlines",[i,s],{line1:{name:e[0],id:e[0],straightFirst:!0,straightLast:!0},line2:{name:e[1],id:e[1],straightFirst:!0,straightLast:!0},withLabel:!0}),this.objects[e[0]].exists=!0,this.objects[e[1]].exists=!0},addPolygonByVertices:function(t){var e,i,s=[],o=[],n=this.readParams(t);for(e=0;e<t.childNodes.length;e++)if(1===t.childNodes[e].nodeType&&"list_of_vertices"===t.childNodes[e].nodeName){i=t.childNodes[e],s=this.readParams(i);break}for(e=0;e<s.length;e++)o.push(this.addPoint(this.objects[s[e]]));this.board.create("polygon",o,{name:n[0],id:n[0],withLabel:!0}),this.objects[n[0]].exists=!0},addVectorFromPointToPoint:function(t){var e,i,s,o=this.readParams(t);i=this.addPoint(this.objects[o[1]]),s=this.addPoint(this.objects[o[2]]),e=this.board.create("arrow",[i.id,s.id],{name:o[0]}),this.setAttributes(e),this.objects[o[0]].exists=!0},addLocusDefinedByPoint:function(t){var e=this.readParams(t),i=this.board.select(e[1]);i.setAttribute({trace:!0}),this.objects[e[1]]=i,this.setAttributes(i)},addLocusDefinedByPointOnLine:function(t){var e=this.readParams(t),i=this.board.select(e[1]);i.setAttribute({trace:!0}),this.objects[e[1]]=i,this.setAttributes(i)},addLocusDefinedByLineThroughPoint:function(t){var e=this.readParams(t),i=this.board.select(e[1]);i.setAttribute({trace:!0}),this.objects[e[1]]=i,this.setAttributes(i)},addLocusDefinedByPointOnCircle:function(t){var e=this.readParams(t),i=this.board.select(e[1]);i.setAttribute({trace:!0}),this.objects[e[1]]=i,this.setAttributes(i)},prepareString:function(t){var e,i=[],s=!1;if("PK"!==t.slice(0,2)&&31!==JXG.Util.UTF8.asciiCharCodeAt(t.slice(0,1),0)||(s=!0),s||0===t.indexOf("<")||(t=JXG.Util.Base64.decode(t)),0!==t.indexOf("<")){for(e=0;e<t.length;e++)i[e]=JXG.Util.UTF8.asciiCharCodeAt(t,e);t=new JXG.Util.Unzip(i).unzipFile("construction/intergeo.xml")}return t},readDisplayProperty:function(t,e){var i,s,o,n,d,r={};if(!((s=t[0].childNodes[e]).nodeType>1))if("background-color"===s.nodeName)this.board.containerObj.style.backgroundColor=s.firstChild.data;else if("style"===s.nodeName){for(o=this.board.select(s.getAttribute("ref")),i=0;i<s.childNodes.length;i++)1===s.childNodes[i].nodeType&&(n=s.childNodes[i].nodeName,d=s.childNodes[i].firstChild.data,"stroke"===n?n="strokeColor":"stroke-width"===n||"border-width"===n?n="strokeWidth":"fill"===n?n="fillColor":"fill-opacity"===n?n="fillOpacity":"border-opacity"===n?n="strokeOpacity":"point-size"===n?n="size":"label"===n?n="name":"point-style"===n&&(n="face","circle"===d?d="o":"cross"===d?d="+":"x-mark"===d?d="x":"square"===d?d="[]":"triangle"===d?d="triangleup":"point"===d?d="o":JXG.debug("Display: not implemented"+s.nodeName)),r[n]=d);o.setAttribute(r)}else JXG.debug("Display: not implemented"+s.nodeName)},readDisplay:function(t){var e;if(JXG.exists(t)&&JXG.isArray(t))for(e=0;e<t[0].childNodes.length;e++)this.readDisplayProperty(t,e)}}),JXG.registerReader(JXG.IntergeoReader,["i2g","xml","intergeo"])}();
@@ -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,
@@ -39,10 +39,10 @@
39
39
  border-width: 1px;
40
40
  border-color: #356aa0;
41
41
  border-radius: 10px;
42
- margin: 0px;
42
+ margin: 0;
43
43
  -webkit-border-radius: 10px;
44
44
  -ms-touch-action: none;
45
- /* touch-action: none; */ /* Set with JavaScript */
45
+ /* "touch-action: none;" is set with JavaScript. */
46
46
  }
47
47
 
48
48
  .jxgbox svg text {
@@ -55,23 +55,20 @@ margin: 0px;
55
55
 
56
56
  .JXGtext {
57
57
  font-family: Courier, monospace;
58
- /**
58
+ /*
59
59
  * The default font family is now set in
60
60
  * JXG.Options.text.cssdefaultstyle = 'font-family: Arial, Helvetica, Geneva, sans-serif;'
61
61
  */
62
62
 
63
- /* font-family: Arial, Helvetica, Geneva, sans-serif; */
64
63
  /* "background-color: transparent;" may produce artefacts in IE. Solution: setting a color explicitly. */
65
-
66
64
  background-color: transparent;
67
- /*background-color: rgba(255, 255, 255, 0.6);*/ /* From 1.2.4 */
68
65
  padding: 0;
69
66
  margin: 0;
70
67
  }
71
68
 
72
69
  .JXGinfobox {
73
70
  border-style: none;
74
- border-width: 0px;
71
+ border-width: 0;
75
72
  border-color: black;
76
73
  }
77
74
 
@@ -79,13 +76,16 @@ margin: 0px;
79
76
  .JXGimage {
80
77
  /* opacity: 1.0; */
81
78
  }
82
-
83
79
  .JXGimageHighlight {
84
80
  /* opacity: 0.6; */
85
81
  }
86
82
 
87
- /* CSS rules for the navigation bar */
83
+ .jxgbox :focus {
84
+ outline-width: 0.5px;
85
+ outline-style: dotted;
86
+ }
88
87
 
88
+ /* CSS rules for the navigation bar */
89
89
  .JXG_navigation {
90
90
  position: absolute;
91
91
  right: 5px;
@@ -99,17 +99,12 @@ margin: 0px;
99
99
  cursor: pointer;
100
100
  }
101
101
 
102
- .JXG_navigation:hover {
103
-
104
- }
105
-
106
102
  .JXG_navigation_button {
107
103
  color: #666;
108
104
  }
109
105
 
110
106
  .JXG_navigation_button:hover {
111
107
  border-radius: 2px;
112
- background-color: #c0c0c0;
113
108
  background: rgba(184, 184, 184, 0.5);
114
109
  }
115
110