jsxgraph 1.4.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.
@@ -842,7 +842,7 @@ define('base/constants',['jxg'], function (JXG) {
842
842
 
843
843
  var major = 1,
844
844
  minor = 4,
845
- patch = 1,
845
+ patch = 2,
846
846
  add = '', //'dev'
847
847
  version = major + '.' + minor + '.' + patch + (add ? '-' + add : ''),
848
848
  constants;
@@ -911,6 +911,7 @@ define('base/constants',['jxg'], function (JXG) {
911
911
  OBJECT_TYPE_BUTTON: 29,
912
912
  OBJECT_TYPE_TRANSFORMATION: 30,
913
913
  OBJECT_TYPE_FOREIGNOBJECT: 31,
914
+ OBJECT_TYPE_VIEW3D: 32,
914
915
 
915
916
  // IMPORTANT:
916
917
  // ----------
@@ -25020,8 +25021,7 @@ define('utils/color',['jxg', 'utils/type', 'math/math'],
25020
25021
  green: '#009E73', // bluishgreen
25021
25022
  purple: '#CC79A7', // reddishpurple
25022
25023
  white: '#ffffff'
25023
- },
25024
-
25024
+ }
25025
25025
  });
25026
25026
 
25027
25027
  /**
@@ -26542,7 +26542,20 @@ define('options',[
26542
26542
  */
26543
26543
  isLabel: false,
26544
26544
 
26545
-
26545
+ /**
26546
+ * Controls if an element can get the focus with the tab key.
26547
+ * See <a href="https://developer.mozilla.org/en-US/docs/Web/HTML/Global_attributes/tabindex">descriptiona at MDN</a>.
26548
+ * The additional value null completely disables focus of an element.
26549
+ * The value will be ignored if keyboard control of the board is not enabled or
26550
+ * the element is fixed or not visible.
26551
+ *
26552
+ * @name JXG.GeometryElement#tabindex
26553
+ * @type Number
26554
+ * @default 0
26555
+ * @see JXG.Board#keyboard
26556
+ * @see JXG.GeometryElement#fixed
26557
+ * @see JXG.GeometryElement#visible
26558
+ */
26546
26559
  tabindex: 0
26547
26560
 
26548
26561
  // close the meta tag
@@ -29742,6 +29755,7 @@ define('options',[
29742
29755
  visible: 'inherit',
29743
29756
  fixed: true,
29744
29757
  scalable: false,
29758
+ tabindex: null,
29745
29759
  name: '',
29746
29760
  strokeWidth: 1,
29747
29761
  strokeColor: '#000000',
@@ -29791,6 +29805,7 @@ define('options',[
29791
29805
  strokeWidth: 3,
29792
29806
  visible: 'inherit',
29793
29807
  fixed: true,
29808
+ tabindex: null,
29794
29809
  name: '',
29795
29810
  strokeColor: '#000000',
29796
29811
  highlightStrokeColor: '#888888'
@@ -32720,8 +32735,11 @@ define('renderer/abstract',[
32720
32735
 
32721
32736
  setTabindex: function(element) {
32722
32737
  var val;
32723
- if (Type.exists(element.rendNode)) {
32738
+ if (element.board.attr.keyboard.enabled && Type.exists(element.rendNode)) {
32724
32739
  val = Type.evaluate(element.visProp.tabindex);
32740
+ if (!element.visPropCalc.visible || Type.evaluate(element.visProp.fixed)) {
32741
+ val = null;
32742
+ }
32725
32743
  if (val !== element.visPropOld.tabindex) {
32726
32744
  element.rendNode.setAttribute('tabindex', val);
32727
32745
  element.visPropOld.tabindex = val;
@@ -34253,7 +34271,7 @@ define('base/element',[
34253
34271
 
34254
34272
  /**
34255
34273
  * Inherits contains the subelements, which may have an attribute
34256
- * (in partuclar the attribute "visible") having value 'inherit'.
34274
+ * (in particular the attribute "visible") having value 'inherit'.
34257
34275
  * @type Object
34258
34276
  */
34259
34277
  this.inherits = [];
@@ -39664,6 +39682,12 @@ define('parser/jessiecode',[
39664
39682
  */
39665
39683
  this.builtIn = this.defineBuiltIn();
39666
39684
 
39685
+ /**
39686
+ * List of all possible operands in JessieCode (except of JSXGraph objects).
39687
+ * @type Object
39688
+ */
39689
+ this.operands = this.getPossibleOperands();
39690
+
39667
39691
  /**
39668
39692
  * The board which currently is used to create and look up elements.
39669
39693
  * @type JXG.Board
@@ -41956,6 +41980,103 @@ define('parser/jessiecode',[
41956
41980
  return builtIn;
41957
41981
  },
41958
41982
 
41983
+ /**
41984
+ * Returns information about the possible functions and constants.
41985
+ * @returns {Object}
41986
+ */
41987
+ getPossibleOperands: function () {
41988
+ var FORBIDDEN = ['E'],
41989
+ jessiecode = this.defineBuiltIn(),
41990
+ math = Math,
41991
+ jc, ma, merge,
41992
+ i, j, p, len, e,
41993
+ funcs, funcsJC, consts, operands,
41994
+ sort, pack;
41995
+
41996
+ sort = function (a, b) {
41997
+ return a.toLowerCase().localeCompare(b.toLowerCase());
41998
+ };
41999
+
42000
+ pack = function (name, origin) {
42001
+ var that = null;
42002
+
42003
+ if (origin === 'jc') that = jessiecode[name];
42004
+ else if (origin === 'Math') that = math[name];
42005
+ else return;
42006
+
42007
+ if (FORBIDDEN.includes(name)) {
42008
+ return;
42009
+ } else if (JXG.isFunction(that)) {
42010
+ return {
42011
+ name: name,
42012
+ type: 'function',
42013
+ numParams: that.length,
42014
+ origin: origin,
42015
+ };
42016
+ } else if (JXG.isNumber(that)) {
42017
+ return {
42018
+ name: name,
42019
+ type: 'constant',
42020
+ value: that,
42021
+ origin: origin,
42022
+ };
42023
+ } else if (that !== undefined) {
42024
+ console.error('undefined type', that);
42025
+ }
42026
+ };
42027
+
42028
+ jc = Object.getOwnPropertyNames(jessiecode).sort(sort);
42029
+ ma = Object.getOwnPropertyNames(math).sort(sort);
42030
+ merge = [];
42031
+ i = 0;
42032
+ j = 0;
42033
+
42034
+ while (i < jc.length || j < ma.length) {
42035
+ if (jc[i] === ma[j]) {
42036
+ p = pack(ma[j], 'Math');
42037
+ if (JXG.exists(p)) merge.push(p);
42038
+ i++;
42039
+ j++;
42040
+ } else if (!JXG.exists(ma[j]) || jc[i].toLowerCase().localeCompare(ma[j].toLowerCase()) < 0) {
42041
+ p = pack(jc[i], 'jc');
42042
+ if (JXG.exists(p)) merge.push(p);
42043
+ i++;
42044
+ } else {
42045
+ p = pack(ma[j], 'Math');
42046
+ if (JXG.exists(p)) merge.push(p);
42047
+ j++;
42048
+ }
42049
+ }
42050
+
42051
+ funcs = [];
42052
+ funcsJC = [];
42053
+ consts = [];
42054
+ operands = {};
42055
+ len = merge.length;
42056
+ for (i = 0; i < len; i++) {
42057
+ e = merge[i];
42058
+ switch (e.type) {
42059
+ case 'function':
42060
+ funcs.push(e.name);
42061
+ if (e.origin === 'jc')
42062
+ funcsJC.push(e.name);
42063
+ break;
42064
+ case 'constant':
42065
+ consts.push(e.name);
42066
+ break;
42067
+ }
42068
+ operands[e.name] = e;
42069
+ }
42070
+
42071
+ return {
42072
+ all: operands,
42073
+ list: merge,
42074
+ functions: funcs,
42075
+ functions_jessiecode: funcsJC,
42076
+ constants: consts,
42077
+ };
42078
+ },
42079
+
41959
42080
  /**
41960
42081
  * Output a debugging message. Uses debug console, if available. Otherwise an HTML element with the
41961
42082
  * id "debug" and an innerHTML property is used.
@@ -44888,7 +45009,7 @@ define('base/board',[
44888
45009
  },
44889
45010
 
44890
45011
  addKeyboardEventHandlers: function() {
44891
- if (!this.hasKeyboardHandlers && Env.isBrowser) {
45012
+ if (this.attr.keyboard.enabled && !this.hasKeyboardHandlers && Env.isBrowser) {
44892
45013
  Env.addEvent(this.containerObj, 'keydown', this.keyDownListener, this);
44893
45014
  Env.addEvent(this.containerObj, 'focusin', this.keyFocusInListener, this);
44894
45015
  Env.addEvent(this.containerObj, 'focusout', this.keyFocusOutListener, this);
@@ -45815,7 +45936,7 @@ define('base/board',[
45815
45936
  obj.type === Const.OBJECT_TYPE_TICKS ||
45816
45937
  obj.type === Const.OBJECT_TYPE_IMAGE) {
45817
45938
  // It's a point, so it's single touch, so we just push it to our touches
45818
- targets = [obj];
45939
+ targets = [target];
45819
45940
 
45820
45941
  // For the UNDO/REDO of object moves
45821
45942
  this.saveStartPos(obj, targets[0]);
@@ -46360,6 +46481,7 @@ define('base/board',[
46360
46481
  dx = Type.evaluate(this.attr.keyboard.dx) / this.unitX,
46361
46482
  dy = Type.evaluate(this.attr.keyboard.dy) / this.unitY,
46362
46483
  doZoom = false,
46484
+ done = true,
46363
46485
  dir, actPos;
46364
46486
 
46365
46487
  if (!this.attr.keyboard.enabled || id_node === '') {
@@ -46388,6 +46510,8 @@ define('base/board',[
46388
46510
  this.clickLeftArrow();
46389
46511
  } else if (evt.keyCode === 39) { // right
46390
46512
  this.clickRightArrow();
46513
+ } else {
46514
+ done = false;
46391
46515
  }
46392
46516
  } else {
46393
46517
  // Adapt dx, dy to snapToGrid and attractToGrid
@@ -46440,7 +46564,10 @@ define('base/board',[
46440
46564
  this.zoomOut();
46441
46565
  } else if (doZoom && evt.key === 'o') { // o
46442
46566
  this.zoom100();
46567
+ } else {
46568
+ done = false;
46443
46569
  }
46570
+
46444
46571
  if (dir && el.isDraggable &&
46445
46572
  el.visPropCalc.visible &&
46446
46573
  ((this.geonextCompatibilityMode &&
@@ -46466,6 +46593,9 @@ define('base/board',[
46466
46593
 
46467
46594
  this.update();
46468
46595
 
46596
+ if (done) {
46597
+ evt.preventDefault();
46598
+ }
46469
46599
  return true;
46470
46600
  },
46471
46601
 
@@ -48064,6 +48194,7 @@ define('base/board',[
48064
48194
  for (i = 0; i < parents.length; i++) {
48065
48195
  if (Type.isString(parents[i]) &&
48066
48196
  !(elementType === 'text' && i === 2) &&
48197
+ !(elementType === 'solidofrevolution3d' && i === 2) &&
48067
48198
  !((elementType === 'input' || elementType === 'checkbox' || elementType === 'button') &&
48068
48199
  (i === 2 || i === 3)) &&
48069
48200
  !(elementType === 'curve' && i > 0) // Allow curve plots with jessiecode
@@ -55395,6 +55526,7 @@ define('base/point',[
55395
55526
  this.board.renderer.drawPoint(this);
55396
55527
  this.board.finalizeAdding(this);
55397
55528
 
55529
+ this.createGradient();
55398
55530
  this.createLabel();
55399
55531
 
55400
55532
  };
@@ -75831,12 +75963,13 @@ define('base/ticks',[
75831
75963
  * @private
75832
75964
  */
75833
75965
  formatLabelText: function(value) {
75834
- var labelText = value.toString(),
75966
+ var labelText,
75835
75967
  digits,
75836
75968
  ev_s = Type.evaluate(this.visProp.scalesymbol);
75837
75969
 
75838
75970
  // if value is Number
75839
75971
  if (Type.isNumber(value)) {
75972
+ labelText = (Math.round(value * 1.e13) / 1.e13).toString();
75840
75973
  if (labelText.length > Type.evaluate(this.visProp.maxlabellength) ||
75841
75974
  labelText.indexOf('e') !== -1) {
75842
75975
 
@@ -75845,7 +75978,9 @@ define('base/ticks',[
75845
75978
  // Use the deprecated attribute "precision"
75846
75979
  digits = Type.evaluate(this.visProp.precision);
75847
75980
  }
75848
- labelText = value.toPrecision(digits).toString();
75981
+
75982
+ //labelText = value.toPrecision(digits).toString();
75983
+ labelText = value.toExponential(digits).toString();
75849
75984
  }
75850
75985
 
75851
75986
  if (Type.evaluate(this.visProp.beautifulscientificticklabels)) {
@@ -75858,6 +75993,8 @@ define('base/ticks',[
75858
75993
  // trim trailing .
75859
75994
  labelText = labelText.replace(/\.$/, '');
75860
75995
  }
75996
+ } else {
75997
+ labelText = value.toString();
75861
75998
  }
75862
75999
 
75863
76000
  if (ev_s.length > 0) {
@@ -1,5 +1,5 @@
1
1
  /*
2
- JSXGraph 1.4.1
2
+ JSXGraph 1.4.2
3
3
 
4
4
  Copyright 2008-2022
5
5
  Matthias Ehmann,
@@ -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.SketchReader=function(s,e){this.read=function(){var r,i,t,o,a,d;if(o=new JXG.Util.Unzip(JXG.Util.Base64.decodeAsArray(e)).unzip(),!JXG.exists(o[0]))return"";for(o=JXG.Util.UTF8.decode(o[0][0]),a=(d=jQuery.parseJSON(o)).pop(),i=JXG.exists(a.unredo)?a.unredo:d.length-1,r=0;r<=i;r++)if(0!==d[r].type){try{t=d[r].type>50?JXG.SketchReader.generateJCodeMeta(d[r],s):JXG.SketchReader.generateJCode(d[r],s,d)}catch(s){JXG.debug("#steps: "+d.length),JXG.debug("step: "+r+", type: "+d[r].type),JXG.debug(d[r])}s.jc.parse(t[0],!0)}return t=a.boundingBox,s.jc.parse("$board.setView("+JSON.stringify(t)+");"),""}},JXG.extend(JXG.SketchReader,{generateJCodeMeta:function(){return["","","",""]},id:function(){return JXG.Util.genUUID()},generator:{toFixed:8,freeLine:!1,useGlider:!1,useSymbols:!1},generateJCode:function(s,e,r){var i,t,o,a,d,n,_,p,g,l,c,u,m,b,G,f,J,X,v,h,O,y,C,E=[],T="",P="",k="",N="",L=function(s){return J.toFixed>0?(s=parseFloat(s),JXG.toFixed(s,J.toFixed)):s},I=function(s){return J.useSymbols&&e.jc.scope.locals[s]?e.jc.scope.locals[s]:p[s]};if(J=JXG.SketchReader.generator,p=e.objects,X="",v="id: '"+s.dest_id+"', ",JXG.exists(e)&&J.useSymbols&&s.type!==JXG.GENTYPE_ABLATION)for(v="",X=s.dest_id+" = ",i=0;i<s.src_ids.length;i++)(d=e.jc.findSymbol(I(s.src_ids[i]),0)).length>0&&(s.src_ids[i]=d[0]);if(s.type>50)return JXG.SketchReader.generateJCodeMeta(s,e);switch(s.type){case JXG.GENTYPE_TRUNCATE:T="trunclen = "+JXG.Options.trunclen+"; ";break;case JXG.GENTYPE_JCODE:T=s.args.code;break;case JXG.GENTYPE_AXIS:T=s.args.name[0]+" = point("+s.args.coords[0].usrCoords[1]+", ",T+=s.args.coords[0].usrCoords[2]+") <<id: '"+s.dest_sub_ids[0]+"', name: '",T+=s.args.name[0]+"', fixed: true, priv: true, visible: false>>; "+s.args.name[1],T+=" = point("+s.args.coords[1].usrCoords[1]+", ",T+=s.args.coords[1].usrCoords[2]+") <<id: '"+s.dest_sub_ids[1]+"', name: '",T+=s.args.name[1]+"', fixed: true, priv: true, visible: false>>; "+s.args.name[2],T+=" = point("+s.args.coords[2].usrCoords[1]+", ",T+=s.args.coords[2].usrCoords[2]+") <<id: '"+s.dest_sub_ids[2]+"', name: '",T+=s.args.name[2]+"', fixed: true, priv: true, visible: false>>; ",T+=s.args.name[3]+" = axis("+s.args.name[0]+", "+s.args.name[1]+") ",T+="<<id: '"+s.dest_sub_ids[3]+"', name: '"+s.args.name[3]+"', ticks: ",T+="<<minorHeight:0, majorHeight:10, insertTicks: true, ticksDistance: 1, drawLabels: true",T+=', label: <<offset: [-4, -16], parse: false, display: "internal">>',T+=", drawZero: false>>>>; ",T+=s.args.name[4]+" = axis("+s.args.name[0]+", "+s.args.name[2]+") ",T+="<<id: '"+s.dest_sub_ids[4]+"', name: '"+s.args.name[4]+"', ticks: ",T+="<<minorHeight:0, majorHeight:10, insertTicks: true, ticksDistance: 1, drawLabels: true",T+=', label: <<offset: [10, 0], parse: false, display: "internal">>',T+=", drawZero: false>>>>; ",T+=s.dest_sub_ids[3]+".visible = false; ",T+=s.dest_sub_ids[4]+".visible = false; ",P="remove("+s.dest_sub_ids[4]+"); remove("+s.dest_sub_ids[3],P+="); remove("+s.dest_sub_ids[2]+"); ",P+="remove("+s.dest_sub_ids[1]+"); remove("+s.dest_sub_ids[0]+"); ";break;case JXG.GENTYPE_MID:T=X+"midpoint("+s.src_ids[0]+", "+s.src_ids[1]+") <<"+v,T+="fillColor: '"+s.args.fillColor+"'",JXG.exists(s.args.strokeColor)&&(T+=", strokeColor: '"+s.args.strokeColor+"'"),T+=">>; ",P="remove("+s.dest_id+"); ";break;case JXG.GENTYPE_REFLECTION:case JXG.GENTYPE_REFLECTION_ON_LINE:if("polygon"===s.args.type){for(T="",b=s.src_ids[s.src_ids.length-1],i=1;i<s.src_ids.length-1;i++)T+=X+"reflection("+s.src_ids[i]+", "+b+') <<id:"'+s.dest_sub_ids[i-1]+'"',JXG.exists(s.args.subnames)?T+=', name:"'+s.args.subnames[i-1]+'"':T+=', name: ""',T+=", color: '"+s.args.strokeColor+"'",T+=", snaptogrid: "+JXG.Options.elements.snapToGrid,T+=", snaptopoints: "+JXG.Options.elements.snapToPoints+">>;\n";for(h=s.dest_sub_ids.length/2,T+=X+"polygon(",T+=s.dest_sub_ids.slice(0,h).join(),T+=") <<borders: <<ids: ['"+s.dest_sub_ids.slice(h,2*h).join("', '")+"']",O=[],i=0;i<h;i++)O.push("''");T+=", names: ["+O.join()+"]",T+=">>, "+v+" fillOpacity: ",T+=s.args.opacity+", name: '' ",T+=", hasInnerPoints_Org: "+JXG.Options.polygon.hasInnerPoints,T+=", hasInnerPoints: "+JXG.Options.polygon.hasInnerPoints,""!==s.args.name&&(T+=', name: "'+s.args.name+'"',T+=", withLabel: true"),T+=", fillColor: '"+s.args.fillColor+"'",T+=", snaptogrid: "+JXG.Options.elements.snapToGrid,T+=", snaptopoints: "+JXG.Options.elements.snapToPoints+">>; "}else if("line"===s.args.type||"vector"===s.args.type){for(T="",b=s.src_ids[s.src_ids.length-1],i=1;i<s.src_ids.length-1;i++)T+=X+"reflection("+s.src_ids[i]+", "+b+') <<id:"'+s.dest_sub_ids[i-1]+'"',JXG.exists(s.args.subnames)?T+=', name:"'+s.args.subnames[i-1]+'"':T+=', name: ""',T+=", color: '"+s.args.strokeColor+"'",T+=", snaptogrid: "+JXG.Options.elements.snapToGrid,T+=", snaptopoints: "+JXG.Options.elements.snapToPoints+">>;\n";if("vector"===s.args.type?T+=X+"arrow("+s.dest_sub_ids[0]+","+s.dest_sub_ids[1]+") ":T+=X+"line("+s.dest_sub_ids[0]+","+s.dest_sub_ids[1]+") ",T+="<<",T+=v,T+="strokeColor: '"+s.args.strokeColor+"'",T+=", opacity: '"+s.args.opacity+"'",T+=', name: "'+s.args.name+'"',T+=', id: "'+s.dest_id+'"',JXG.exists(s.args.attr))for(C in s.args.attr)s.args.attr.hasOwnProperty(C)&&(T+=", "+C+": "+s.args.attr[C]);""!==s.args.name&&(T+=", withLabel: true"),T+=">>; "}else if("circle"===s.args.type){if(T+=X+"reflection("+s.src_ids[0]+","+s.src_ids[2]+") ",T+="<<",T+=v,T+="strokeColor: '"+s.args.strokeColor+"'",T+=", opacity: '"+s.args.opacity+"'",T+=', name: "'+s.args.name+'"',T+=', id: "'+s.dest_id+'"',JXG.exists(s.args.attr))for(C in s.args.attr)s.args.attr.hasOwnProperty(C)&&(T+=", "+C+": "+s.args.attr[C]);""!==s.args.name&&(T+=", withLabel: true"),T+=', center: <<id:"'+s.dest_sub_ids[0]+'"',JXG.exists(s.args.subnames)?T+=', name:"'+s.args.subnames[0]+'"':T+=', name: ""',T+=", color: '"+s.args.strokeColor+"'",T+=", snaptogrid: "+JXG.Options.elements.snapToGrid,T+=", snaptopoints: "+JXG.Options.elements.snapToPoints+">>",T+=">>; "}else{if(T=X+"reflection("+s.src_ids[0]+", "+s.src_ids[1]+") <<"+v,T+="fillColor: '"+s.args.fillColor+"'",JXG.exists(s.args.strokeColor)&&(T+=", strokeColor: '"+s.args.strokeColor+"'",T+=", opacity: '"+s.args.opacity+"'"),T+=', name: "'+s.args.name+'"',T+=', id: "'+s.dest_id+'"',JXG.exists(s.args.attr))for(C in s.args.attr)s.args.attr.hasOwnProperty(C)&&(T+=", "+C+": "+s.args.attr[C]);""!==s.args.name&&(T+=", withLabel: true"),T+=">>; "}for(P="",i=0;i<s.dest_sub_ids.length;i++)0!==s.dest_sub_ids[i]&&(P+="remove("+s.dest_sub_ids[i]+"); ");P+="remove("+s.dest_id+"); ";break;case JXG.GENTYPE_MIRRORELEMENT:case JXG.GENTYPE_REFLECTION_ON_POINT:if("polygon"===s.args.type){for(T="",b=s.src_ids[s.src_ids.length-1],i=1;i<s.src_ids.length-1;i++)T+=X+"mirrorelement("+s.src_ids[i]+", "+b+') <<id:"'+s.dest_sub_ids[i-1]+'"',JXG.exists(s.args.subnames)?T+=', name:"'+s.args.subnames[i-1]+'"':T+=', name: ""',T+=", color: '"+s.args.strokeColor+"'",T+=", snaptogrid: "+JXG.Options.elements.snapToGrid,T+=", snaptopoints: "+JXG.Options.elements.snapToPoints+">>;\n";for(h=s.dest_sub_ids.length/2,T+=X+"polygon(",T+=s.dest_sub_ids.slice(0,h).join(),T+=") <<borders: <<ids: ['"+s.dest_sub_ids.slice(h,2*h).join("', '")+"']",O=[],i=0;i<h;i++)O.push("''");T+=", names: ["+O.join()+"]",T+=">>, "+v+" fillOpacity: ",T+=s.args.opacity+", name: '' ",T+=", hasInnerPoints_Org: "+JXG.Options.polygon.hasInnerPoints,T+=", hasInnerPoints: "+JXG.Options.polygon.hasInnerPoints,""!==s.args.name&&(T+=', name: "'+s.args.name+'"',T+=", withLabel: true"),T+=", fillColor: '"+s.args.fillColor+"'",T+=", snaptogrid: "+JXG.Options.elements.snapToGrid,T+=", snaptopoints: "+JXG.Options.elements.snapToPoints+">>; "}else if("line"===s.args.type||"vector"===s.args.type){for(T="",b=s.src_ids[s.src_ids.length-1],i=1;i<s.src_ids.length-1;i++)T+=X+"mirrorelement("+s.src_ids[i]+", "+b+') <<id:"'+s.dest_sub_ids[i-1]+'"',JXG.exists(s.args.subnames)?T+=', name:"'+s.args.subnames[i-1]+'"':T+=', name: ""',T+=", color: '"+s.args.strokeColor+"'",T+=", snaptogrid: "+JXG.Options.elements.snapToGrid,T+=", snaptopoints: "+JXG.Options.elements.snapToPoints+">>;\n";if("vector"===s.args.type?T+=X+"arrow("+s.dest_sub_ids[0]+","+s.dest_sub_ids[1]+") ":T+=X+"line("+s.dest_sub_ids[0]+","+s.dest_sub_ids[1]+") ",T+="<<",T+=v,T+="strokeColor: '"+s.args.strokeColor+"'",T+=", opacity: '"+s.args.opacity+"'",T+=', name: "'+s.args.name+'"',T+=', id: "'+s.dest_id+'"',JXG.exists(s.args.attr))for(C in s.args.attr)s.args.attr.hasOwnProperty(C)&&(T+=", "+C+": "+s.args.attr[C]);""!==s.args.name&&(T+=", withLabel: true"),T+=">>; "}else if("circle"===s.args.type){if(T+=X+"mirrorelement("+s.src_ids[0]+","+s.src_ids[2]+") ",T+="<<",T+=v,T+="strokeColor: '"+s.args.strokeColor+"'",T+=", opacity: '"+s.args.opacity+"'",T+=', name: "'+s.args.name+'"',T+=', id: "'+s.dest_id+'"',JXG.exists(s.args.attr))for(C in s.args.attr)s.args.attr.hasOwnProperty(C)&&(T+=", "+C+": "+s.args.attr[C]);""!==s.args.name&&(T+=", withLabel: true"),T+=', center: <<id:"'+s.dest_sub_ids[0]+'"',JXG.exists(s.args.subnames)?T+=', name:"'+s.args.subnames[0]+'"':T+=', name: ""',T+=", color: '"+s.args.strokeColor+"'",T+=", snaptogrid: "+JXG.Options.elements.snapToGrid,T+=", snaptopoints: "+JXG.Options.elements.snapToPoints+">>",T+=">>; "}else{if(T=X+"mirrorelement("+s.src_ids[0]+", "+s.src_ids[1]+") <<"+v,T+="fillColor: '"+s.args.fillColor+"'",JXG.exists(s.args.strokeColor)&&(T+=", strokeColor: '"+s.args.strokeColor+"'",T+=", opacity: '"+s.args.opacity+"'"),T+=', id: "'+s.dest_id+'"',T+=', name: "'+s.args.name+'"',JXG.exists(s.args.attr))for(C in s.args.attr)s.args.attr.hasOwnProperty(C)&&(T+=", "+C+": "+s.args.attr[C]);""!==s.args.name&&(T+=", withLabel: true"),T+=">>; "}for(P="",i=0;i<s.dest_sub_ids.length;i++)0!==s.dest_sub_ids[i]&&(P+="remove("+s.dest_sub_ids[i]+"); "+P);P+="remove("+s.dest_id+"); "+P;break;case JXG.GENTYPE_TANGENT:s.args.create_point?(a=s.dest_sub_ids[2],T="point("+L(s.args.usrCoords[1])+","+L(s.args.usrCoords[2])+") <<id: '",T+=a+"', fillColor: '"+s.args.fillColor+"'",JXG.exists(s.args.strokeColor)&&(T+=", strokeColor: '"+s.args.strokeColor+"'"),T+=">>; "+a+".glide(",T+=s.src_ids[0]+"); ",P="remove("+a+"); "):a=s.src_ids[0],T+=X+"tangent("+a+") <<"+v+"point1: <<name: '",T+="', id: '"+s.dest_sub_ids[0]+"', priv: true>>, point2: <<name: '",T+="', id: '"+s.dest_sub_ids[1]+"', priv: true>> >>; ",P="remove("+s.dest_sub_ids[0]+"); "+P,P="remove("+s.dest_id+"); remove("+s.dest_sub_ids[1]+"); "+P;break;case JXG.GENTYPE_PARALLEL:s.args.create_point?(a=s.dest_sub_ids[1],T="point("+L(s.args.usrCoords[1])+", "+L(s.args.usrCoords[2])+") <<id: '",T+=a+"', name: '', visible: false, priv: true>>; ",P="remove("+a+"); "):a=s.src_ids[1],T+=X+"parallel("+s.src_ids[0]+", "+a+") <<"+v+"name: '', point: <<id: '",T+=s.dest_sub_ids[0]+"', name: ''>> >>; ",P="remove("+s.dest_id+"); remove("+s.dest_sub_ids[0]+"); "+P;break;case JXG.GENTYPE_BISECTORLINES:T=(T="bisectorlines("+s.src_ids[0]+", "+s.src_ids[1]+") <<line1: <<id: '")+s.dest_sub_ids[2]+"', point1: <<id: '"+s.dest_sub_ids[1],T+="', name: ''>>, point2: <<id: '"+s.dest_sub_ids[0],T+="', name: ''>>>>, line2: <<id: '"+s.dest_sub_ids[5],T+="', point1: <<id: '"+s.dest_sub_ids[4]+"', name: '",T+="'>>, point2: <<id: '"+s.dest_sub_ids[3]+"', name: '",T+="'>>>>>>; ",P="remove("+s.dest_sub_ids[5]+"); remove("+s.dest_sub_ids[4]+"); remove(",P+=s.dest_sub_ids[3]+"); remove("+s.dest_sub_ids[2]+"); remove(",P+=s.dest_sub_ids[1]+"); remove("+s.dest_sub_ids[0]+"); ";break;case JXG.GENTYPE_BOARDIMG:T="image('"+s.args.s+"', [ "+s.args.anchor+" ], [ "+s.args.scale+" ]) ",T+="<<id: '"+s.dest_id+"'>>; ",P="remove("+s.dest_id+"); ";break;case JXG.GENTYPE_BISECTOR:s.args.create_point?(T="",P="",g=s.dest_sub_ids[1],l=s.dest_sub_ids[2],J.useGlider?(T+="glider("+L(s.args.usrCoords[1])+", "+L(s.args.usrCoords[2])+", "+s.src_ids[0]+")",T+="<<id: '"+g+"', name:'', withLabel:false, priv:true, visible:false >>; ",T+="glider("+L(s.args.usrCoords[1])+", "+L(s.args.usrCoords[2])+", "+s.src_ids[1]+")",T+="<<id: '"+l+"', name:'', withLabel:false, priv:true, visible:false >>; "):(T+="point("+L(s.args.usrCoords[1])+", "+L(s.args.usrCoords[2])+") ",T+="<<id:'"+g+"', ",T+="name:'', withLabel:false, priv:true, visible:false >>; ",T+=g+".glide("+s.src_ids[0]+"); ",T+="point("+L(s.args.usrCoords[1])+", "+L(s.args.usrCoords[2])+") ",T+="<<id:'"+l+"', ",T+="name:'', priv:true, visible:false >>; ",T+=l+".glide("+s.src_ids[1]+"); "),P+="remove("+g+"); ",P+="remove("+l+"); ",s.args.create_intersection?(c=s.dest_sub_ids[3],T+="intersection("+s.src_ids[0]+", "+s.src_ids[1]+", 0) ",T+="<<id:'"+c+"', fillColor: '"+s.args.fillColor+"', ",T+="name:'', priv:true, visible:false >>; ",P+="remove("+c+"); "):c=s.src_ids[2],T+=X+"bisector("+g+", "+c+", "+l+") ",T+="<<"+v+"name: '', point: <<id: '"+s.dest_sub_ids[0]+"', priv: true, name: '",T+=s.dest_sub_ids[0]+"'>> >>;",P+="remove("+s.dest_id+"); remove("+s.dest_sub_ids[0]+");"):(T=X+"bisector("+s.src_ids[1]+", "+s.src_ids[2]+", "+s.src_ids[0],T+=") <<"+v+"name: '', point: <<id: '"+s.dest_sub_ids[0]+"', priv: true, name: '",T+=s.dest_sub_ids[0]+"'>>>>;",P="remove("+s.dest_id+"); remove("+s.dest_sub_ids[0]+");");break;case JXG.GENTYPE_NORMAL:s.args.create_point?(a=s.dest_sub_ids[1],T="point("+L(s.args.usrCoords[1])+", "+L(s.args.usrCoords[2]),T+=") <<id: '"+a+"', name: '', visible: false, priv: true>>; ",P="remove("+a+"); "):a=s.src_ids[1],T+=X+"normal("+a+", "+s.src_ids[0]+") <<"+v,T+="name: '', point: <<id: '"+s.dest_sub_ids[0]+"', name: '",T+="'>> >>; ",P="remove("+s.dest_id+"); remove("+s.dest_sub_ids[0]+"); "+P;break;case JXG.GENTYPE_PERPSEGMENT:T+=X+"perpendicularsegment("+s.src_ids[1]+", "+s.src_ids[0]+") <<"+v,T+="name: '', point: <<id: '"+s.dest_sub_ids[0]+"', name: '",T+="'>> >>; ",P="remove("+s.dest_id+"); remove("+s.dest_sub_ids[0]+"); "+P;break;case JXG.GENTYPE_POINT:T=X+"point("+L(s.args.usrCoords[1])+", "+L(s.args.usrCoords[2]),T+=")"+(J.useSymbols?"":" <<id: '"+s.dest_id+"', snaptogrid: "+JXG.Options.elements.snapToGrid+", snaptopoints: "+JXG.Options.elements.snapToPoints+">>")+"; ",P="remove("+s.dest_id+"); ";break;case JXG.GENTYPE_GLIDER:J.useGlider?(T=X+"glider("+L(s.args.usrCoords[1])+", "+L(s.args.usrCoords[2]),T+=", "+s.src_ids[0]+")",T+=(J.useSymbols?"":"<<id: '"+s.dest_id+"', snaptogrid: false, snaptopoints: false, snaptopoints: "+JXG.Options.elements.snapToPoints+">>")+";"):(T=X+"point("+L(s.args.usrCoords[1])+", "+L(s.args.usrCoords[2]),T+=") <<"+v+"fillColor: '"+JXG.Options.glider.fillColor+"'",T+=", strokeColor: '"+JXG.Options.glider.strokeColor+"'",T+=", snapToGrid: false, snapToPoints: false",T+=">>; "+s.dest_id,T+=".glide("+s.src_ids[0]+"); "),T+=s.dest_id+".onPolygon = "+!!s.args.onPolygon+";",s.args&&s.args.undoIsEmpty||(P="remove("+s.dest_id+"); ");break;case JXG.GENTYPE_INTERSECTION:T=X+"intersection("+s.src_ids[0]+", "+s.src_ids[1]+", "+s.args.choice,T+=") <<"+v+" fillColor: '"+JXG.Options.intersection.fillColor+"'",T+=", strokeColor: '"+JXG.Options.intersection.strokeColor+"'",T+=">>; ",s.args&&s.args.undoIsEmpty||(P="remove("+s.dest_id+"); ");break;case JXG.GENTYPE_MIGRATE:var x,Y;if(T="$board.migratePoint("+s.src_ids[0]+", "+s.dest_id+", false); ",s.args&&s.args.migrateToGlider)P=s.dest_id+".free(); "+s.dest_id,P+=".fillColor = '"+s.args.fillColor+"'; "+s.dest_id,P+=".strokeColor = '"+s.args.strokeColor+"'; ",P+="point("+s.args.usrCoords[1]+", "+s.args.usrCoords[2]+")",P+=" <<id: '"+s.src_ids[0]+"', name: ''>>; ",P+="$board.migratePoint("+s.dest_id+", "+s.src_ids[0]+", false); ",P+=s.src_ids[0]+".name = '"+s.args.orig_name+"'; ",P+=s.src_ids[0]+".label.setText('"+s.args.orig_name+"'); ",Y=(x=e.objects[s.dest_id]).slideObject.id,P+=X+"point("+x.coords.usrCoords[1]+", "+x.coords.usrCoords[2]+") ",P+="<<"+v+"fillColor: '"+JXG.Options.glider.fillColor+"'>>; ",P+=s.dest_id+".glide("+Y+"); ";break;case JXG.GENTYPE_COMBINED:for(T=P="",i=0;i<s.args.steps.length;i++)T+=(G=this.generateJCode(s.args.steps[i],e,r))[0],P=G[2]+P;break;case JXG.GENTYPE_CIRCLE:var R="name: '', withLabel: true,";s.args.withName&&(R="withLabel: true,"),s.args.create_by_additional_point||s.args.create_point?(JXG.exists(s.args.center_existing)&&s.args.center_existing||(T="point("+L(s.args.usrCoords[1])+", "+L(s.args.usrCoords[2])+") ",T+="<<id: '"+s.dest_sub_ids[0]+"', "+R+" visible: true, priv: false>>; "),T+=X+"circle("+s.dest_sub_ids[0]+", "+s.src_ids[0]+") <<"+v,T+="name: '', fillOpacity: "+JXG.Options.opacityLevel+", snaptogrid: "+JXG.Options.elements.snapToGrid+", snaptopoints: "+JXG.Options.elements.snapToPoints+">>;",P="remove("+s.dest_id+"); remove("+s.dest_sub_ids[0]+"); "):s.args.create_by_radius?(T="",JXG.exists(s.args.center_existing)&&s.args.center_existing||(JXG.exists(s.args.x)&&JXG.exists(s.args.y)?T+="point("+L(s.args.x)+", "+L(s.args.y)+") ":T+="point("+L(s.args.usrCoords[1])+", "+L(s.args.usrCoords[2])+") ",T+="<<id: '"+s.dest_sub_ids[0]+"', "+R+" visible: true, priv: false>>; "),JXG.exists(s.args.r)?T+=X+"circle('"+s.dest_sub_ids[0]+"', "+L(s.args.r)+") <<"+v:T+=X+"circle('"+s.dest_sub_ids[0]+"', "+L(s.args.radius)+") <<"+v,T+="name: '', fillOpacity: "+JXG.Options.opacityLevel+", snaptogrid: "+JXG.Options.elements.snapToGrid+", snaptopoints: "+JXG.Options.elements.snapToPoints+">>;",P="remove("+s.dest_id+"); remove("+s.dest_sub_ids[0]+"); "):2===s.src_ids.length?(T="midpoint("+s.src_ids[0]+", "+s.src_ids[1]+")",T+="<<id: '"+s.dest_sub_ids[0]+"', "+R+" visible: true, priv: false>>; ",T+=X+"circle("+s.dest_sub_ids[0]+", "+s.src_ids[0]+") <<"+v,T+="name: '', fillOpacity: "+JXG.Options.opacityLevel+", snaptogrid: "+JXG.Options.elements.snapToGrid+", snaptopoints: "+JXG.Options.elements.snapToPoints+">>;",P="remove("+s.dest_id+"); remove("+s.dest_sub_ids[0]+"); "):(T=X+"circle("+s.src_ids[0]+", "+s.src_ids[1]+", "+s.src_ids[2],T+=") <<center: <<id: '"+s.dest_sub_ids[0]+"', "+R,T+=" visible: true>>, "+v+"name: '', fillOpacity: "+JXG.Options.opacityLevel+", snaptogrid: "+JXG.Options.elements.snapToGrid+", snaptopoints: "+JXG.Options.elements.snapToPoints+">>; ",P="remove("+s.dest_id+"); remove("+s.dest_sub_ids[0]+"); ");break;case JXG.GENTYPE_CIRCLE2POINTS:s.args.create_two_points?(T="point("+L(s.args.x1)+", "+L(s.args.y1)+") <<id: '"+s.dest_sub_ids[0],T+="'>>; ",T+="point("+L(s.args.x2)+", "+L(s.args.y2)+") <<id: '",T+=s.dest_sub_ids[1]+"'>>; ",T+=X+"circle("+s.dest_sub_ids[0]+", "+s.dest_sub_ids[1]+") <<"+v,T+="name: '', fillOpacity: "+JXG.Options.opacityLevel+", snaptogrid: "+JXG.Options.elements.snapToGrid+", snaptopoints: "+JXG.Options.elements.snapToPoints+">>; ",P="remove("+s.dest_id+"); remove("+s.dest_sub_ids[1]+"); remove(",P+=s.dest_sub_ids[0]+"); "):s.args.create_point?(T="point("+L(s.args.x)+", "+L(s.args.y)+") <<id: '"+s.dest_sub_ids[0],T+="'>>; ",T+=X+"circle("+s.dest_sub_ids[0]+", "+s.src_ids[0]+") <<"+v,T+="name: '', fillOpacity: "+JXG.Options.opacityLevel+", snaptogrid: "+JXG.Options.elements.snapToGrid+", snaptopoints: "+JXG.Options.elements.snapToPoints+">>; ",P="remove("+s.dest_id+"); remove("+s.dest_sub_ids[0]+"); "):s.args.create_by_radius?(T=X+"circle("+s.src_ids[0]+", "+s.args.r+") <<"+v,T+="name: '', fillOpacity: "+JXG.Options.opacityLevel+", snaptogrid: "+JXG.Options.elements.snapToGrid+", snaptopoints: "+JXG.Options.elements.snapToPoints+">>; ",P="remove("+s.dest_id+"); "):(T=X+"circle("+s.src_ids[0]+", "+s.src_ids[1]+") <<"+v,T+="name: '', fillOpacity: "+JXG.Options.opacityLevel+", snaptogrid: "+JXG.Options.elements.snapToGrid+", snaptopoints: "+JXG.Options.elements.snapToPoints+">>; ",P="remove("+s.dest_id+"); ");break;case JXG.GENTYPE_LINE:if(o=0,t=0,s.args.create_point1){for(g=s.dest_sub_ids[o],o+=1,n=[],i=0;i<s.args.p1.length;i++)n[i]=L(s.args.p1[i]);T="point("+n.join(", ")+") <<id: '"+g+"', name: '', visible: false, ",T+="snaptogrid: false, snaptopoints: false, priv: true>>; ",P="remove("+g+"); "}else g=s.src_ids[t],t+=1;if(s.args.create_point2){for(l=s.dest_sub_ids[o++],n=[],i=0;i<s.args.p2.length;i++)n[i]=L(s.args.p2[i]);T+="point("+n.join(", ")+") <<id: '"+l+"', name: '', visible: false, ",T+="snaptogrid: false, snaptopoints: false, priv: true>>; ",P="remove("+l+"); "+P}else l=s.src_ids[t],t+=1;if(d="line",n="",_=g+", "+l,s.args.create_point1&&s.args.create_point2&&J.freeLine){for(T="",P="",2===s.args.p1.length&&s.args.p1.unshift(1),2===s.args.p2.length&&s.args.p2.unshift(1),_=JXG.Math.crossProduct(s.args.p1,s.args.p2),i=0;i<_.length;i++)_[i]=L(_[i]);_=_.join(", ")}s.args.first||s.args.last?(s.args.first||(n="straightFirst: "+s.args.first),s.args.last||(n="straightLast: "+s.args.last),n.length>0&&!J.useSymbols&&(n+=", ")):d="segment",J.useSymbols||(v="id: '"+s.dest_id+"'"),T+=X+d+"("+_+")",n.length+v.length>0?T+=" <<"+n+v+", name: '', snaptogrid: "+JXG.Options.elements.snapToGrid+", snaptopoints: "+JXG.Options.elements.snapToPoints+">>; ":T+=" <<name: '', snaptogrid: "+JXG.Options.elements.snapToGrid+", snaptopoints: "+JXG.Options.elements.snapToPoints+">>; ",P="remove("+s.dest_id+"); "+P;break;case JXG.GENTYPE_VECTOR:if(o=0,t=0,s.args.create_point1){for(g=s.dest_sub_ids[o],o+=1,n=[],i=0;i<s.args.p1.length;i++)n[i]=L(s.args.p1[i]);T="point("+n.join(", ")+") <<id: '"+g+"', name: '', visible: true, ",T+="snaptogrid: "+JXG.Options.elements.snapToGrid+", snaptopoints: false, priv: false>>; ",P="remove("+g+"); "}else g=s.src_ids[t],t+=1;if(s.args.create_point2){for(l=s.dest_sub_ids[o++],n=[],i=0;i<s.args.p2.length;i++)n[i]=L(s.args.p2[i]);T+="point("+n.join(", ")+") <<id: '"+l+"', name: '', visible: true, ",T+="layer: "+JXG.Options.layer.line+", opacity: 0.2, ",T+="snaptogrid: "+JXG.Options.elements.snapToGrid+", snaptopoints: false, priv: false>>; ",P="remove("+l+"); "+P}else l=s.src_ids[t],t+=1;n="",_=g+", "+l,d="arrow",J.useSymbols||(v="id: '"+s.dest_id+"'"),T+=X+d+"("+_+")",n.length+v.length>0?T+=" <<"+n+v+", name: '', strokeColor: 'black', snaptogrid: "+JXG.Options.elements.snapToGrid+", snaptopoints: "+JXG.Options.elements.snapToPoints+">>; ":T+=" <<name: '', strokeColor: 'black', snaptogrid: "+JXG.Options.elements.snapToGrid+", snaptopoints: "+JXG.Options.elements.snapToPoints+">>; ",P="remove("+s.dest_id+"); "+P;break;case JXG.GENTYPE_TRIANGLE:for(i=0;i<s.args.create_point.length;i++)s.args.create_point[i]&&(T+="point("+L(s.args.coords[i].usrCoords[1])+", ",T+=L(s.args.coords[i].usrCoords[2])+") <<id: '"+s.dest_sub_ids[i],T+="', snaptogrid: "+JXG.Options.elements.snapToGrid,T+=", snaptopoints: "+JXG.Options.elements.snapToPoints+">>; ");for(i=0;i<s.dest_sub_ids.length;i++)0!==s.dest_sub_ids[i]&&(P="remove("+s.dest_sub_ids[i]+"); "+P);for(P="remove("+s.dest_id+"); "+P,T+=X+"polygon(",i=0;i<s.src_ids.length;i++)T+=s.src_ids[i],i<s.src_ids.length-1&&(T+=", ");for(i=0;i<3;i++)0!==s.dest_sub_ids[i]&&((s.src_ids.length>0||i>0)&&(T+=", "),T+=s.dest_sub_ids[i]);T+=") <<borders: <<ids: ['"+s.dest_sub_ids[3]+"', '"+s.dest_sub_ids[4]+"', '"+s.dest_sub_ids[5]+"']",T+=", names: ['', '', '']",T+=">>, "+v+" fillOpacity: ",T+=JXG.Options.opacityLevel+", name: '' ",T+=", hasInnerPoints_Org: "+JXG.Options.polygon.hasInnerPoints,T+=", hasInnerPoints: "+JXG.Options.polygon.hasInnerPoints,T+=", snaptogrid: "+JXG.Options.elements.snapToGrid,T+=", snaptopoints: "+JXG.Options.elements.snapToPoints+">>; ";break;case JXG.GENTYPE_QUADRILATERAL:for(i=0;i<s.args.create_point.length;i++)s.args.create_point[i]&&(T+="point("+L(s.args.coords[i].usrCoords[1])+", ",T+=L(s.args.coords[i].usrCoords[2])+") <<id: '"+s.dest_sub_ids[i],T+="', snaptogrid: "+JXG.Options.elements.snapToGrid,T+=", snaptopoints: "+JXG.Options.elements.snapToPoints+">>; ");for(i=0;i<s.dest_sub_ids.length;i++)0!==s.dest_sub_ids[i]&&(P="remove("+s.dest_sub_ids[i]+"); "+P);for(P="remove("+s.dest_id+"); "+P,T+=X+"polygon(",i=0;i<s.src_ids.length;i++)T+=s.src_ids[i],i<s.src_ids.length-1&&(T+=", ");T+=") <<borders: <<ids: [ '"+s.dest_sub_ids[4]+"', '"+s.dest_sub_ids[5],T+="', '",T+=s.dest_sub_ids[6]+"', '"+s.dest_sub_ids[7]+"' ]",T+=", names: ['', '', '', '']",T+=">>, "+v,T+=" fillOpacity: ",T+=JXG.Options.opacityLevel+", name: '' ",T+=", hasInnerPoints_Org: "+JXG.Options.polygon.hasInnerPoints,T+=", hasInnerPoints: "+JXG.Options.polygon.hasInnerPoints,T+=", snaptogrid: "+JXG.Options.elements.snapToGrid,T+=", snaptopoints: "+JXG.Options.elements.snapToPoints+">>; ";break;case JXG.GENTYPE_TEXT:"'"!==s.args.str.substr(0,1)&&'"'!==s.args.str.substr(0,1)&&"function"!==s.args.str.substr(0,8)&&(s.args.str="'"+s.args.str+"'"),T=X+"text("+L(s.args.x)+", "+L(s.args.y)+", "+s.args.str+") <<",T+=v+"name: ''",void 0!==s.args.anchor&&(T+=", anchor: "+s.args.anchor),T+=">>; ",P="remove("+s.dest_id+"); ";break;case JXG.GENTYPE_RULER:T=X+"tapemeasure([ "+s.args.p1+" ], [ "+s.args.p2+" ]) <<",T+=v+"name: '', precision: "+JXG.Options.trunclen+", point1: <<id: '"+s.dest_sub_ids[0]+"', snaptogrid: "+JXG.Options.elements.snapToGrid+">>, point2: <<id: '"+s.dest_sub_ids[1]+"', snaptogrid: "+JXG.Options.elements.snapToGrid+">> >>; ",P="remove("+s.dest_id+"); ";break;case JXG.GENTYPE_POLYGON:if(s.args.create_point)for(i=0;i<s.args.create_point.length;i++)s.args.create_point[i]&&(T+="point("+L(s.args.coords[i].usrCoords[1])+", ",T+=L(s.args.coords[i].usrCoords[2])+") <<id: '"+s.dest_sub_ids[i],T+="', snaptogrid: "+JXG.Options.elements.snapToGrid,T+=", snaptopoints: "+JXG.Options.elements.snapToPoints+">>; ");if(s.dest_sub_ids)for(i=0;i<s.dest_sub_ids.length;i++)0!==s.dest_sub_ids[i]&&(P="remove("+s.dest_sub_ids[i]+"); "+P);for(P="remove("+s.dest_id+"); "+P,T+=X+"polygon(",i=0;i<s.src_ids.length;i++)T+=s.src_ids[i],i!==s.src_ids.length-1&&(T+=", ");for(T+=") <<borders: <<ids: ['",i=0;i<s.dest_sub_ids.length;i++)T+=s.dest_sub_ids[i],i<s.dest_sub_ids.length-1&&(T+="', '");for(T+="']",T+=", names: [",i=0;i<s.dest_sub_ids.length;i++)T+="''",i<s.dest_sub_ids.length-1&&(T+=", ");T+="]",T+=">>, "+v+" fillOpacity: "+JXG.Options.opacityLevel,T+=", hasInnerPoints_Org: "+JXG.Options.polygon.hasInnerPoints,T+=", hasInnerPoints: "+JXG.Options.polygon.hasInnerPoints,T+=", name: ''>>; ",P="remove("+s.dest_id+"); ";break;case JXG.GENTYPE_POLYGONCOPY:for(h=s.args.num_vertices,T="",P="",i=0;i<h;++i)T+=X+"point("+L(s.args.points[i][1])+", "+L(s.args.points[i][2]),T+=")"+(J.useSymbols?"":" <<id: '"+s.dest_sub_ids[i]+"', snaptogrid: "+JXG.Options.elements.snapToGrid+", snaptopoints: "+JXG.Options.elements.snapToPoints+">>")+"; ",P+="remove("+s.dest_sub_ids[i]+"); ";for(T+=X+"polygon(",i=0;i<h;++i)T+=s.dest_sub_ids[i],i!==h-1&&(T+=", ");for(T+=") <<borders: <<ids: ['",i=h;i<s.dest_sub_ids.length;i++)T+=s.dest_sub_ids[i],i<s.dest_sub_ids.length-1&&(T+="', '");for(T+="']",T+=", names: [",i=h;i<s.dest_sub_ids.length;i++)T+="''",i<s.dest_sub_ids.length-1&&(T+=", ");T+="]",T+=">>, "+v+" fillOpacity: "+JXG.Options.opacityLevel,T+=", hasInnerPoints_Org: "+JXG.Options.polygon.hasInnerPoints,T+=", hasInnerPoints: "+JXG.Options.polygon.hasInnerPoints,T+=", name: ''>>; ",P+="remove("+s.dest_id+"); ";break;case JXG.GENTYPE_REGULARPOLYGON:for(T=X+"regularpolygon("+s.src_ids.join(", ")+", ",T+=s.args.corners+") <<borders: <<ids: [ ",i=0;i<s.args.corners;i++)T+="'"+s.dest_sub_ids[i]+"'",i!==s.args.corners-1&&(T+=", "),P="remove("+s.dest_sub_ids[i]+"); "+P;for(T+="]",T+=", names: [",i=0;i<s.args.corners;i++)T+="''",i<s.args.corners-1&&(T+=", ");for(T+="]",T+=">>, vertices: <<ids: [ ",i=0;i<s.args.corners-2;i++)T+="'"+s.dest_sub_ids[i+parseInt(s.args.corners,10)]+"'",i!==s.args.corners-3&&(T+=", "),P="remove("+s.dest_sub_ids[i+parseInt(s.args.corners,10)]+"); "+P;T+=" ]",T+=", name: ''",T+=">>, "+v,T+=" fillOpacity: "+JXG.Options.opacityLevel,T+=", hasInnerPoints_Org: "+JXG.Options.polygon.hasInnerPoints,T+=", hasInnerPoints: "+JXG.Options.polygon.hasInnerPoints,T+=", name: ''>>; ",P="remove("+s.dest_id+"); "+P;break;case JXG.GENTYPE_SECTOR:T=X+"sector("+s.src_ids.join(", ")+") ",T+="<<",T+=v+" name: '', fillOpacity: "+JXG.Options.opacityLevel,T+=", arc: <<id: '"+s.dest_sub_ids[0]+"', priv: true>> >>; ",P="remove("+s.dest_id+"); ";break;case JXG.GENTYPE_ANGLE:T=X+"angle("+s.src_ids.join(", ")+") ",T+="<<",T+="dot: <<priv:true, id: '"+s.dest_sub_ids[0]+"', name: ''>>, ",T+=v+" fillOpacity: "+JXG.Options.opacityLevel,JXG.exists(s.args)&&JXG.exists(s.args.radius)&&(JXG.isNumber(s.args.radius)?T+=", radius: "+s.args.radius:T+=", radius: '"+s.args.radius+"'"),T+=">>; ",P="remove("+s.dest_id+"); ",P+="remove("+s.dest_sub_ids[0]+"); ";break;case JXG.GENTYPE_NONREFLEXANGLE:T=X+"nonreflexangle("+s.src_ids.join(", ")+") ",T+="<<",T+="dot: <<priv:true, id: '"+s.dest_sub_ids[0]+"', ",T+="name: ''>>, ",T+=v+" fillOpacity: "+JXG.Options.opacityLevel,JXG.exists(s.args)&&JXG.exists(s.args.radius)&&(T+=", radius: "+s.args.radius),T+=">>; ",P="remove("+s.dest_id+"); ",P+="remove("+s.dest_sub_ids[0]+"); ";break;case JXG.GENTYPE_REFLEXANGLE:T=X+"reflexangle("+s.src_ids.join(", ")+") ",T+="<<",T+="dot: <<priv:true, id: '"+s.dest_sub_ids[0]+"', ",T+="name: ''>>, ",T+=v+" fillOpacity: "+JXG.Options.opacityLevel,JXG.exists(s.args)&&JXG.exists(s.args.radius)&&(T+=", radius: "+s.args.radius),T+=">>; ",P="remove("+s.dest_id+"); ",P+="remove("+s.dest_sub_ids[0]+"); ";break;case JXG.GENTYPE_SLOPETRIANGLE:T=X+"slopetriangle("+s.src_ids.join(", ")+") <<",T+=v+" name: '',",T+="borders: <<ids: ['"+s.dest_sub_ids[4]+"', '"+s.dest_sub_ids[5]+"', '"+s.dest_sub_ids[6]+"']>>,",T+="basepoint: <<id: '"+s.dest_sub_ids[0]+"', name: '', priv: true >>, ",T+="baseline: <<id: '"+s.dest_sub_ids[1]+"', name: '', priv: true >>,",T+="glider: <<id: '"+s.dest_sub_ids[2]+"', name: '', priv: false >>, ",T+="toppoint: <<id: '"+s.dest_sub_ids[3]+"', name: '', priv: false >>",8===s.dest_sub_ids.length&&(T+=", tangent: <<id: '"+s.dest_sub_ids[7]+"', priv: true, point1: <<name: '', priv: true >>, point2: <<name: '', priv: true >> >>"),T+=">>;",P="remove("+s.dest_id+"); ";break;case JXG.GENTYPE_PLOT:T=X+s.args.plot_type+"("+s.args.func,(isNaN(s.args.a)||null===s.args.a||void 0===s.args.a)&&(s.args.a="-infinity"),(isNaN(s.args.b)||null===s.args.b||void 0===s.args.b)&&(s.args.b="infinity"),s.args.a!=s.args.b&&(T+=", "+s.args.a+", "+s.args.b),T+=") <<",s.args.isPolar&&(T+="curveType: 'polar', "),T+=v+"name: '', withLabel: true, strokeColor: '"+s.args.color+"', doAdvancedPlot: true, doAdvancedPlotOld: false >>; ",P="remove("+s.dest_id+"); ";break;case JXG.GENTYPE_PATH:for(h=s.args.points.length,T=X+"cardinalspline([",i=0;i<s.args.points.length;i++)JXG.isString(s.args.points[i])?T+="'"+s.args.points[i]+"'":(3===s.args.points[i].length?(O=s.args.points[i][1].toPrecision(4),y=s.args.points[i][2].toPrecision(4)):(O=s.args.points[i][0].toPrecision(4),y=s.args.points[i][1].toPrecision(4)),T+="["+O+","+y+"]"),i<h-1&&(T+=",");T+="], "+s.args.tau+", "+s.args.type,T+=") <<",T+=v+"name: '', withLabel: false, ",T+="fixed: false, ",s.args.createPoints||(T+="createPoints: false, "),T+="isArrayOfCoordinates: true, ",T+="strokeWidth: "+s.args.strokeWidth+", ",T+="strokeColor: '"+s.args.strokeColor+"' >>; ",P="remove("+s.dest_id+"); ";break;case JXG.GENTYPE_DERIVATIVE:T=X+"derivative("+s.src_ids+")",T+=" <<",T+="dash: 2",T+=" >>;";break;case JXG.GENTYPE_SLIDER:T=X+"slider(["+L(s.args.x1)+", "+L(s.args.y1)+"], ["+L(s.args.x2),T+=", "+L(s.args.y2)+"], ["+L(s.args.start)+", "+L(s.args.ini)+", ",T+=L(s.args.end)+"]) <<"+v,T+=" snapWidth: 0.1, ",T+="baseline: <<id: '",T+=s.dest_sub_ids[0]+"', name: '', priv: true>>, highline: <<id: '",T+=s.dest_sub_ids[1]+"', name: '', priv: true>>, point1: <<id: '",T+=s.dest_sub_ids[2]+"', name: '', priv: false, frozen: true>>, point2: <<id: '",T+=s.dest_sub_ids[3]+"', name: '', priv: false, frozen: true>>, label: <<id: '",T+=s.dest_sub_ids[4]+"', name: '', priv: true>>",T+=", name: '"+s.args.name+"'>>; ",P="remove("+s.dest_id+"); remove("+s.dest_sub_ids[4]+"); remove(",P+=s.dest_sub_ids[3]+"); remove("+s.dest_sub_ids[2]+"); remove(",P+=s.dest_sub_ids[1]+"); remove(",P+=s.dest_sub_ids[0]+"); ";break;case JXG.GENTYPE_DELETE:for(G=[],k=[],N=[],i=0;i<s.args.steps.length;i++)(G=r[s.args.steps[i]].type>50?this.generateJCodeMeta(r[s.args.steps[i]],e):this.generateJCode(r[s.args.steps[i]],e,r)).length>=3&&""!==JXG.trim(G[2])&&(T=G[2]+T),G.length>=4&&JXG.isFunction(G[3])&&k.unshift(G[3]),G.length>=1&&""!==JXG.trim(G[0])&&(P+=G[0]),G.length>=2&&JXG.isFunction(G[1])&&N.push(G[1]);break;case JXG.GENTYPE_COPY:for(b in E=[],s.args.steps)if(s.args.steps.hasOwnProperty(b)){if((f=JXG.deepCopy(r[s.args.steps[b]])).type===JXG.GENTYPE_COPY){for(i=0;i<f.args.map.length;i++)for(t=0;t<s.args.map.length;t++)f.args.map[i].copy===s.args.map[t].orig&&(f.args.map[i].copy=s.args.map[t].copy);f=JXG.SketchReader.replaceStepDestIds(f,f.args.map)}else f=JXG.SketchReader.replaceStepDestIds(f,s.args.map);E.push(f)}for(i=0;i<E.length;i++)G=E[i].type>50?this.generateJCodeMeta(E[i],e):this.generateJCode(E[i],e,r),""!==JXG.trim(G[0])&&(T+=G[0]),JXG.isFunction(G[1])&&k.push(G[1]),""!==JXG.trim(G[2])&&(P=G[2]+P),JXG.isFunction(G[3])&&N.unshift(G[3]);if(s.args.dep_copy)for(i=0;i<s.args.map.length;i++)I(s.args.map[i].orig).elementClass===JXG.OBJECT_CLASS_POINT&&(T+=s.args.map[i].copy,T+=".X = function() { return ("+s.args.map[i].orig+".X() - ",T+=L(s.args.x)+"); }; ",T+=s.args.map[i].copy,T+=".Y = function() { return ("+s.args.map[i].orig+".Y() - ",T+=L(s.args.y)+"); }; ");else for(i=0;i<s.args.free_points.length;i++)u=I(s.args.free_points[i].orig).coords.usrCoords[1],m=I(s.args.free_points[i].orig).coords.usrCoords[2],T+=s.args.free_points[i].copy+".X = function() { return ",T+=L(u-s.args.x)+"; }; ",T+=s.args.free_points[i].copy+".Y = function() { return ",T+=L(m-s.args.y)+"; }; ",T+=s.args.free_points[i].copy+".free(); ";for(t=0;t<s.args.map.length;t++)(b=I(s.args.map[t].orig)).type!==JXG.OBJECT_TYPE_CIRCLE||JXG.exists(b.point2)||(T+=s.args.map[t].copy+".setRadius(function () { return ",T+=s.args.map[t].orig+".radius(); }); ");break;case JXG.GENTYPE_ABLATION:for(u=I(s.src_ids[0]).coords.usrCoords[1],m=I(s.src_ids[0]).coords.usrCoords[2],T="point("+L(u-s.args.x)+", "+L(m-s.args.y)+") <<id: '",T+=s.dest_sub_ids[0]+"', name: '', withLabel: false>>; ",T+="circle('"+s.dest_sub_ids[0]+"', 1) <<id: '"+s.dest_sub_ids[1],T+="', fillOpacity: "+JXG.Options.opacityLevel,T+=", strokeColor: '#888888', visible: true, name: '', withLabel: false>>; ",1===s.args.fids.length?s.args.func=s.args.fids[0]+".radius()":s.args.func="dist("+s.args.fids[0]+", "+s.args.fids[1]+")",T+=s.dest_sub_ids[1]+".setRadius(function() { return "+s.args.func+"; }); ",t=0;t<s.src_ids.length;t++)T+=s.src_ids[t]+".addChild("+s.dest_sub_ids[0]+"); ",T+=s.src_ids[t]+".addChild("+s.dest_sub_ids[1]+"); ";0!==s.args.migrate&&-1!==s.args.migrate&&(T+="$board.migratePoint("+s.dest_sub_ids[0]+", "+s.args.migrate+"); "),P="remove("+s.dest_sub_ids[1]+"); remove("+s.dest_sub_ids[0]+"); ";break;case JXG.GENTYPE_VECTORCOPY:for(u=I(s.src_ids[0]).coords.usrCoords[1],m=I(s.src_ids[0]).coords.usrCoords[2],T="point("+L(u-s.args.x)+", "+L(m-s.args.y)+") <<id: '",T+=s.dest_sub_ids[0]+"', name: '', withLabel: false>>; ",T+="parallelpoint('"+s.src_ids[0]+"','"+s.src_ids[1]+"','"+s.dest_sub_ids[0]+"') <<id: '"+s.dest_sub_ids[1],T+="', strokeColor: '#888888', visible: true, priv: false, name: '', ",T+="layer: "+JXG.Options.layer.line+", opacity: 0.2, withLabel: false>>; ",T+="arrow('"+s.dest_sub_ids[0]+"','"+s.dest_sub_ids[1]+"') <<id: '"+s.dest_sub_ids[2],T+="', strokeColor: '#888888', visible: true, name: '', withLabel: false>>; ",t=0;t<s.src_ids.length;t++)T+=s.src_ids[t]+".addChild("+s.dest_sub_ids[0]+"); ",T+=s.src_ids[t]+".addChild("+s.dest_sub_ids[1]+"); ",T+=s.src_ids[t]+".addChild("+s.dest_sub_ids[2]+"); ";0!==s.args.migrate&&-1!==s.args.migrate&&(T+="$board.migratePoint("+s.dest_sub_ids[0]+", "+s.args.migrate+"); "),P="remove("+s.dest_sub_ids[1]+"); remove("+s.dest_sub_ids[0]+"); remove("+s.dest_sub_ids[2]+");";break;case JXG.GENTYPE_MOVEMENT:if(s.args.obj_type===JXG.OBJECT_TYPE_LINE||s.args.obj_type===JXG.OBJECT_TYPE_VECTOR)T=s.src_ids[0]+".move(["+L(s.args.coords[0].usrCoords[0])+", ",T+=L(s.args.coords[0].usrCoords[1])+", "+L(s.args.coords[0].usrCoords[2])+"]); ",P=s.src_ids[0]+".move(["+s.args.zstart[0]+", "+s.args.xstart[0]+", ",P+=s.args.ystart[0]+"]); ",T+=s.src_ids[1]+".move(["+L(s.args.coords[1].usrCoords[0])+", ",T+=L(s.args.coords[1].usrCoords[1])+", "+L(s.args.coords[1].usrCoords[2])+"]); ",P+=s.src_ids[1]+".move(["+s.args.zstart[1]+", "+s.args.xstart[1]+", ",P+=s.args.ystart[1]+"]); ";else if(s.args.obj_type===JXG.OBJECT_TYPE_CIRCLE)T=s.src_ids[0]+".move(["+L(s.args.coords[0].usrCoords[1])+", ",T+=L(s.args.coords[0].usrCoords[2])+"]); ",P=s.src_ids[0]+".move(["+s.args.xstart+", "+s.args.ystart+"]); ",s.args.has_point2&&(T+=s.src_ids[1]+".move(["+L(s.args.coords[1].usrCoords[1])+", ",T+=L(s.args.coords[1].usrCoords[2])+"]); ",P+=s.src_ids[1]+".move(["+s.args.old_p2x+", "+s.args.old_p2y,P+="]); ");else if(s.args.obj_type===JXG.OBJECT_TYPE_POLYGON)for(T=P="",i=0;i<s.src_ids.length;i++)T+=s.src_ids[i]+".move(["+L(s.args.coords[i].usrCoords[1])+", ",T+=L(s.args.coords[i].usrCoords[2])+"]); ",P+=s.src_ids[i]+".move(["+s.args.xstart[i]+", "+s.args.ystart[i],P+="]); ";else JXG.exists(s.args.coords[0])&&(T=s.src_ids[0]+".move(["+L(s.args.coords[0].usrCoords[1])+", ",T+=L(s.args.coords[0].usrCoords[2])+"]); ",P=s.src_ids[0]+".move(["+s.args.xstart+", "+s.args.ystart+"]); ");break;default:return JXG.debug("No such GENTYPE!"+s.type),[]}return[T,k,P,N]},replaceStepDestIds:function(s,e){var r,i,t=[];for(r=0;r<e.length;r++){for(t.push(e[r].copy),s.dest_id===e[r].orig&&(s.dest_id=e[r].copy),i=0;i<s.dest_sub_ids.length;i++)s.dest_sub_ids[i]===e[r].orig&&(s.dest_sub_ids[i]=e[r].copy);for(i=0;i<s.src_ids.length;i++)s.src_ids[i]===e[r].orig&&(s.src_ids[i]=e[r].copy)}for(i=0;i<s.dest_sub_ids.length;i++)JXG.isInArray(t,s.dest_sub_ids[i])||(s.dest_sub_ids[i]=this.id());return s.src_ids=JXG.uniqueArray(s.src_ids),s.dest_sub_ids=JXG.uniqueArray(s.dest_sub_ids),s}}),JXG.registerReader(JXG.SketchReader,["sketch","sketchometry"])}();
61
+ !function(){"use strict";JXG.SketchReader=function(s,e){this.read=function(){var r,i,t,o,a,d;if(o=new JXG.Util.Unzip(JXG.Util.Base64.decodeAsArray(e)).unzip(),!JXG.exists(o[0]))return"";for(o=JXG.Util.UTF8.decode(o[0][0]),a=(d=jQuery.parseJSON(o)).pop(),i=JXG.exists(a.unredo)?a.unredo:d.length-1,r=0;r<=i;r++)if(0!==d[r].type){try{t=d[r].type>50?JXG.SketchReader.generateJCodeMeta(d[r],s):JXG.SketchReader.generateJCode(d[r],s,d)}catch(s){JXG.debug("#steps: "+d.length),JXG.debug("step: "+r+", type: "+d[r].type),JXG.debug(d[r])}s.jc.parse(t[0],!0)}return t=a.boundingBox,s.jc.parse("$board.setView("+JSON.stringify(t)+");"),""}},JXG.extend(JXG.SketchReader,{generateJCodeMeta:function(){return["","","",""]},id:function(){return JXG.Util.genUUID()},generator:{toFixed:8,freeLine:!1,useGlider:!1,useSymbols:!1},generateJCode:function(s,e,r){var i,t,o,a,d,n,_,g,p,l,c,u,m,b,G,f,J,X,v,h,O,y,C,E=[],T="",P="",k="",N="",L=function(s){return J.toFixed>0?(s=parseFloat(s),JXG.toFixed(s,J.toFixed)):s},I=function(s){return J.useSymbols&&e.jc.scope.locals[s]?e.jc.scope.locals[s]:g[s]};if(J=JXG.SketchReader.generator,g=e.objects,X="",v="id: '"+s.dest_id+"', ",JXG.exists(e)&&J.useSymbols&&s.type!==JXG.GENTYPE_ABLATION)for(v="",X=s.dest_id+" = ",i=0;i<s.src_ids.length;i++)(d=e.jc.findSymbol(I(s.src_ids[i]),0)).length>0&&(s.src_ids[i]=d[0]);if(s.type>50)return JXG.SketchReader.generateJCodeMeta(s,e);switch(s.type){case JXG.GENTYPE_TRUNCATE:T="trunclen = "+JXG.Options.trunclen+"; ";break;case JXG.GENTYPE_JCODE:T=s.args.code;break;case JXG.GENTYPE_AXIS:T=s.args.name[0]+" = point("+s.args.coords[0].usrCoords[1]+", ",T+=s.args.coords[0].usrCoords[2]+") <<id: '"+s.dest_sub_ids[0]+"', name: '",T+=s.args.name[0]+"', fixed: true, priv: true, visible: false>>; "+s.args.name[1],T+=" = point("+s.args.coords[1].usrCoords[1]+", ",T+=s.args.coords[1].usrCoords[2]+") <<id: '"+s.dest_sub_ids[1]+"', name: '",T+=s.args.name[1]+"', fixed: true, priv: true, visible: false>>; "+s.args.name[2],T+=" = point("+s.args.coords[2].usrCoords[1]+", ",T+=s.args.coords[2].usrCoords[2]+") <<id: '"+s.dest_sub_ids[2]+"', name: '",T+=s.args.name[2]+"', fixed: true, priv: true, visible: false>>; ",T+=s.args.name[3]+" = axis("+s.args.name[0]+", "+s.args.name[1]+") ",T+="<<id: '"+s.dest_sub_ids[3]+"', name: '"+s.args.name[3]+"', ticks: ",T+="<<minorHeight:0, majorHeight:10, insertTicks: true, ticksDistance: 1, drawLabels: true",T+=', label: <<offset: [-4, -16], parse: false, display: "internal">>',T+=", drawZero: false>>>>; ",T+=s.args.name[4]+" = axis("+s.args.name[0]+", "+s.args.name[2]+") ",T+="<<id: '"+s.dest_sub_ids[4]+"', name: '"+s.args.name[4]+"', ticks: ",T+="<<minorHeight:0, majorHeight:10, insertTicks: true, ticksDistance: 1, drawLabels: true",T+=', label: <<offset: [10, 0], parse: false, display: "internal">>',T+=", drawZero: false>>>>; ",T+=s.dest_sub_ids[3]+".visible = false; ",T+=s.dest_sub_ids[4]+".visible = false; ",P="remove("+s.dest_sub_ids[4]+"); remove("+s.dest_sub_ids[3],P+="); remove("+s.dest_sub_ids[2]+"); ",P+="remove("+s.dest_sub_ids[1]+"); remove("+s.dest_sub_ids[0]+"); ";break;case JXG.GENTYPE_MID:T=X+"midpoint("+s.src_ids[0]+", "+s.src_ids[1]+") <<"+v,T+="fillColor: '"+s.args.fillColor+"'",JXG.exists(s.args.strokeColor)&&(T+=", strokeColor: '"+s.args.strokeColor+"'"),T+=">>; ",P="remove("+s.dest_id+"); ";break;case JXG.GENTYPE_REFLECTION:case JXG.GENTYPE_REFLECTION_ON_LINE:if("polygon"===s.args.type){for(T="",b=s.src_ids[s.src_ids.length-1],i=1;i<s.src_ids.length-1;i++)T+=X+"reflection("+s.src_ids[i]+", "+b+') <<id:"'+s.dest_sub_ids[i-1]+'"',JXG.exists(s.args.subnames)?T+=', name:"'+s.args.subnames[i-1]+'"':T+=', name: ""',T+=", color: '"+s.args.strokeColor+"'",T+=", snaptogrid: "+JXG.Options.elements.snapToGrid,T+=", snaptopoints: "+JXG.Options.elements.snapToPoints+">>;\n";for(h=s.dest_sub_ids.length/2,T+=X+"polygon(",T+=s.dest_sub_ids.slice(0,h).join(),T+=") <<borders: <<ids: ['"+s.dest_sub_ids.slice(h,2*h).join("', '")+"']",O=[],i=0;i<h;i++)O.push("''");T+=", names: ["+O.join()+"]",T+=">>, "+v+" fillOpacity: ",T+=s.args.opacity+", name: '' ",T+=", hasInnerPoints_Org: "+JXG.Options.polygon.hasInnerPoints,T+=", hasInnerPoints: "+JXG.Options.polygon.hasInnerPoints,""!==s.args.name&&(T+=', name: "'+s.args.name+'"',T+=", withLabel: true"),T+=", fillColor: '"+s.args.fillColor+"'",T+=", snaptogrid: "+JXG.Options.elements.snapToGrid,T+=", snaptopoints: "+JXG.Options.elements.snapToPoints+">>; "}else if("line"===s.args.type||"vector"===s.args.type){for(T="",b=s.src_ids[s.src_ids.length-1],i=1;i<s.src_ids.length-1;i++)T+=X+"reflection("+s.src_ids[i]+", "+b+') <<id:"'+s.dest_sub_ids[i-1]+'"',JXG.exists(s.args.subnames)?T+=', name:"'+s.args.subnames[i-1]+'"':T+=', name: ""',T+=", color: '"+s.args.strokeColor+"'",T+=", snaptogrid: "+JXG.Options.elements.snapToGrid,T+=", snaptopoints: "+JXG.Options.elements.snapToPoints+">>;\n";if("vector"===s.args.type?T+=X+"arrow("+s.dest_sub_ids[0]+","+s.dest_sub_ids[1]+") ":T+=X+"line("+s.dest_sub_ids[0]+","+s.dest_sub_ids[1]+") ",T+="<<",T+=v,T+="strokeColor: '"+s.args.strokeColor+"'",T+=", opacity: '"+s.args.opacity+"'",T+=', name: "'+s.args.name+'"',T+=', id: "'+s.dest_id+'"',JXG.exists(s.args.attr))for(C in s.args.attr)s.args.attr.hasOwnProperty(C)&&(T+=", "+C+": "+s.args.attr[C]);""!==s.args.name&&(T+=", withLabel: true"),T+=">>; "}else if("circle"===s.args.type){if(T+=X+"reflection("+s.src_ids[0]+","+s.src_ids[2]+") ",T+="<<",T+=v,T+="strokeColor: '"+s.args.strokeColor+"'",T+=", opacity: '"+s.args.opacity+"'",T+=', name: "'+s.args.name+'"',T+=', id: "'+s.dest_id+'"',JXG.exists(s.args.attr))for(C in s.args.attr)s.args.attr.hasOwnProperty(C)&&(T+=", "+C+": "+s.args.attr[C]);""!==s.args.name&&(T+=", withLabel: true"),T+=', center: <<id:"'+s.dest_sub_ids[0]+'"',JXG.exists(s.args.subnames)?T+=', name:"'+s.args.subnames[0]+'"':T+=', name: ""',T+=", color: '"+s.args.strokeColor+"'",T+=", snaptogrid: "+JXG.Options.elements.snapToGrid,T+=", snaptopoints: "+JXG.Options.elements.snapToPoints+">>",T+=">>; "}else{if(T=X+"reflection("+s.src_ids[0]+", "+s.src_ids[1]+") <<"+v,T+="fillColor: '"+s.args.fillColor+"'",JXG.exists(s.args.strokeColor)&&(T+=", strokeColor: '"+s.args.strokeColor+"'",T+=", opacity: '"+s.args.opacity+"'"),T+=', name: "'+s.args.name+'"',T+=', id: "'+s.dest_id+'"',JXG.exists(s.args.attr))for(C in s.args.attr)s.args.attr.hasOwnProperty(C)&&(T+=", "+C+": "+s.args.attr[C]);""!==s.args.name&&(T+=", withLabel: true"),T+=">>; "}for(P="",i=0;i<s.dest_sub_ids.length;i++)0!==s.dest_sub_ids[i]&&(P+="remove("+s.dest_sub_ids[i]+"); ");P+="remove("+s.dest_id+"); ";break;case JXG.GENTYPE_MIRRORELEMENT:case JXG.GENTYPE_REFLECTION_ON_POINT:if("polygon"===s.args.type){for(T="",b=s.src_ids[s.src_ids.length-1],i=1;i<s.src_ids.length-1;i++)T+=X+"mirrorelement("+s.src_ids[i]+", "+b+') <<id:"'+s.dest_sub_ids[i-1]+'"',JXG.exists(s.args.subnames)?T+=', name:"'+s.args.subnames[i-1]+'"':T+=', name: ""',T+=", color: '"+s.args.strokeColor+"'",T+=", snaptogrid: "+JXG.Options.elements.snapToGrid,T+=", snaptopoints: "+JXG.Options.elements.snapToPoints+">>;\n";for(h=s.dest_sub_ids.length/2,T+=X+"polygon(",T+=s.dest_sub_ids.slice(0,h).join(),T+=") <<borders: <<ids: ['"+s.dest_sub_ids.slice(h,2*h).join("', '")+"']",O=[],i=0;i<h;i++)O.push("''");T+=", names: ["+O.join()+"]",T+=">>, "+v+" fillOpacity: ",T+=s.args.opacity+", name: '' ",T+=", hasInnerPoints_Org: "+JXG.Options.polygon.hasInnerPoints,T+=", hasInnerPoints: "+JXG.Options.polygon.hasInnerPoints,""!==s.args.name&&(T+=', name: "'+s.args.name+'"',T+=", withLabel: true"),T+=", fillColor: '"+s.args.fillColor+"'",T+=", snaptogrid: "+JXG.Options.elements.snapToGrid,T+=", snaptopoints: "+JXG.Options.elements.snapToPoints+">>; "}else if("line"===s.args.type||"vector"===s.args.type){for(T="",b=s.src_ids[s.src_ids.length-1],i=1;i<s.src_ids.length-1;i++)T+=X+"mirrorelement("+s.src_ids[i]+", "+b+') <<id:"'+s.dest_sub_ids[i-1]+'"',JXG.exists(s.args.subnames)?T+=', name:"'+s.args.subnames[i-1]+'"':T+=', name: ""',T+=", color: '"+s.args.strokeColor+"'",T+=", snaptogrid: "+JXG.Options.elements.snapToGrid,T+=", snaptopoints: "+JXG.Options.elements.snapToPoints+">>;\n";if("vector"===s.args.type?T+=X+"arrow("+s.dest_sub_ids[0]+","+s.dest_sub_ids[1]+") ":T+=X+"line("+s.dest_sub_ids[0]+","+s.dest_sub_ids[1]+") ",T+="<<",T+=v,T+="strokeColor: '"+s.args.strokeColor+"'",T+=", opacity: '"+s.args.opacity+"'",T+=', name: "'+s.args.name+'"',T+=', id: "'+s.dest_id+'"',JXG.exists(s.args.attr))for(C in s.args.attr)s.args.attr.hasOwnProperty(C)&&(T+=", "+C+": "+s.args.attr[C]);""!==s.args.name&&(T+=", withLabel: true"),T+=">>; "}else if("circle"===s.args.type){if(T+=X+"mirrorelement("+s.src_ids[0]+","+s.src_ids[2]+") ",T+="<<",T+=v,T+="strokeColor: '"+s.args.strokeColor+"'",T+=", opacity: '"+s.args.opacity+"'",T+=', name: "'+s.args.name+'"',T+=', id: "'+s.dest_id+'"',JXG.exists(s.args.attr))for(C in s.args.attr)s.args.attr.hasOwnProperty(C)&&(T+=", "+C+": "+s.args.attr[C]);""!==s.args.name&&(T+=", withLabel: true"),T+=', center: <<id:"'+s.dest_sub_ids[0]+'"',JXG.exists(s.args.subnames)?T+=', name:"'+s.args.subnames[0]+'"':T+=', name: ""',T+=", color: '"+s.args.strokeColor+"'",T+=", snaptogrid: "+JXG.Options.elements.snapToGrid,T+=", snaptopoints: "+JXG.Options.elements.snapToPoints+">>",T+=">>; "}else{if(T=X+"mirrorelement("+s.src_ids[0]+", "+s.src_ids[1]+") <<"+v,T+="fillColor: '"+s.args.fillColor+"'",JXG.exists(s.args.strokeColor)&&(T+=", strokeColor: '"+s.args.strokeColor+"'",T+=", opacity: '"+s.args.opacity+"'"),T+=', id: "'+s.dest_id+'"',T+=', name: "'+s.args.name+'"',JXG.exists(s.args.attr))for(C in s.args.attr)s.args.attr.hasOwnProperty(C)&&(T+=", "+C+": "+s.args.attr[C]);""!==s.args.name&&(T+=", withLabel: true"),T+=">>; "}for(P="",i=0;i<s.dest_sub_ids.length;i++)0!==s.dest_sub_ids[i]&&(P+="remove("+s.dest_sub_ids[i]+"); "+P);P+="remove("+s.dest_id+"); "+P;break;case JXG.GENTYPE_TANGENT:s.args.create_point?(a=s.dest_sub_ids[2],T="point("+L(s.args.usrCoords[1])+","+L(s.args.usrCoords[2])+") <<id: '",T+=a+"', fillColor: '"+s.args.fillColor+"'",JXG.exists(s.args.strokeColor)&&(T+=", strokeColor: '"+s.args.strokeColor+"'"),T+=">>; "+a+".glide(",T+=s.src_ids[0]+"); ",P="remove("+a+"); "):a=s.src_ids[0],T+=X+"tangent("+a+") <<"+v+"point1: <<name: '",T+="', id: '"+s.dest_sub_ids[0]+"', priv: true>>, point2: <<name: '",T+="', id: '"+s.dest_sub_ids[1]+"', priv: true>> >>; ",P="remove("+s.dest_sub_ids[0]+"); "+P,P="remove("+s.dest_id+"); remove("+s.dest_sub_ids[1]+"); "+P;break;case JXG.GENTYPE_PARALLEL:s.args.create_point?(a=s.dest_sub_ids[1],T="point("+L(s.args.usrCoords[1])+", "+L(s.args.usrCoords[2])+") <<id: '",T+=a+"', name: '', visible: false, priv: true>>; ",P="remove("+a+"); "):a=s.src_ids[1],T+=X+"parallel("+s.src_ids[0]+", "+a+") <<"+v+"name: '', point: <<id: '",T+=s.dest_sub_ids[0]+"', name: ''>> >>; ",P="remove("+s.dest_id+"); remove("+s.dest_sub_ids[0]+"); "+P;break;case JXG.GENTYPE_BISECTORLINES:T=(T="bisectorlines("+s.src_ids[0]+", "+s.src_ids[1]+") <<line1: <<id: '")+s.dest_sub_ids[2]+"', point1: <<id: '"+s.dest_sub_ids[1],T+="', name: ''>>, point2: <<id: '"+s.dest_sub_ids[0],T+="', name: ''>>>>, line2: <<id: '"+s.dest_sub_ids[5],T+="', point1: <<id: '"+s.dest_sub_ids[4]+"', name: '",T+="'>>, point2: <<id: '"+s.dest_sub_ids[3]+"', name: '",T+="'>>>>>>; ",P="remove("+s.dest_sub_ids[5]+"); remove("+s.dest_sub_ids[4]+"); remove(",P+=s.dest_sub_ids[3]+"); remove("+s.dest_sub_ids[2]+"); remove(",P+=s.dest_sub_ids[1]+"); remove("+s.dest_sub_ids[0]+"); ";break;case JXG.GENTYPE_BOARDIMG:T="image('"+s.args.s+"', [ "+s.args.anchor+" ], [ "+s.args.scale+" ]) ",T+="<<id: '"+s.dest_id+"'>>; ",P="remove("+s.dest_id+"); ";break;case JXG.GENTYPE_BISECTOR:s.args.create_point?(T="",P="",p=s.dest_sub_ids[1],l=s.dest_sub_ids[2],J.useGlider?(T+="glider("+L(s.args.usrCoords[1])+", "+L(s.args.usrCoords[2])+", "+s.src_ids[0]+")",T+="<<id: '"+p+"', name:'', withLabel:false, priv:true, visible:false >>; ",T+="glider("+L(s.args.usrCoords[1])+", "+L(s.args.usrCoords[2])+", "+s.src_ids[1]+")",T+="<<id: '"+l+"', name:'', withLabel:false, priv:true, visible:false >>; "):(T+="point("+L(s.args.usrCoords[1])+", "+L(s.args.usrCoords[2])+") ",T+="<<id:'"+p+"', ",T+="name:'', withLabel:false, priv:true, visible:false >>; ",T+=p+".glide("+s.src_ids[0]+"); ",T+="point("+L(s.args.usrCoords[1])+", "+L(s.args.usrCoords[2])+") ",T+="<<id:'"+l+"', ",T+="name:'', priv:true, visible:false >>; ",T+=l+".glide("+s.src_ids[1]+"); "),P+="remove("+p+"); ",P+="remove("+l+"); ",s.args.create_intersection?(c=s.dest_sub_ids[3],T+="intersection("+s.src_ids[0]+", "+s.src_ids[1]+", 0) ",T+="<<id:'"+c+"', fillColor: '"+s.args.fillColor+"', ",T+="name:'', priv:true, visible:false >>; ",P+="remove("+c+"); "):c=s.src_ids[2],T+=X+"bisector("+p+", "+c+", "+l+") ",T+="<<"+v+"name: '', point: <<id: '"+s.dest_sub_ids[0]+"', priv: true, name: '",T+=s.dest_sub_ids[0]+"'>> >>;",P+="remove("+s.dest_id+"); remove("+s.dest_sub_ids[0]+");"):(T=X+"bisector("+s.src_ids[1]+", "+s.src_ids[2]+", "+s.src_ids[0],T+=") <<"+v+"name: '', point: <<id: '"+s.dest_sub_ids[0]+"', priv: true, name: '",T+=s.dest_sub_ids[0]+"'>>>>;",P="remove("+s.dest_id+"); remove("+s.dest_sub_ids[0]+");");break;case JXG.GENTYPE_NORMAL:s.args.create_point?(a=s.dest_sub_ids[1],T="point("+L(s.args.usrCoords[1])+", "+L(s.args.usrCoords[2]),T+=") <<id: '"+a+"', name: '', visible: false, priv: true>>; ",P="remove("+a+"); "):a=s.src_ids[1],T+=X+"normal("+a+", "+s.src_ids[0]+") <<"+v,T+="name: '', point: <<id: '"+s.dest_sub_ids[0]+"', name: '",T+="'>> >>; ",P="remove("+s.dest_id+"); remove("+s.dest_sub_ids[0]+"); "+P;break;case JXG.GENTYPE_PERPSEGMENT:T+=X+"perpendicularsegment("+s.src_ids[1]+", "+s.src_ids[0]+") <<"+v,T+="name: '', point: <<id: '"+s.dest_sub_ids[0]+"', name: '",T+="'>> >>; ",P="remove("+s.dest_id+"); remove("+s.dest_sub_ids[0]+"); "+P;break;case JXG.GENTYPE_POINT:T=X+"point("+L(s.args.usrCoords[1])+", "+L(s.args.usrCoords[2]),T+=")"+(J.useSymbols?"":" <<id: '"+s.dest_id+"', snaptogrid: "+JXG.Options.elements.snapToGrid+", snaptopoints: "+JXG.Options.elements.snapToPoints+">>")+"; ",P="remove("+s.dest_id+"); ";break;case JXG.GENTYPE_GLIDER:J.useGlider?(T=X+"glider("+L(s.args.usrCoords[1])+", "+L(s.args.usrCoords[2]),T+=", "+s.src_ids[0]+")",T+=(J.useSymbols?"":"<<id: '"+s.dest_id+"', snaptogrid: false, snaptopoints: false, snaptopoints: "+JXG.Options.elements.snapToPoints+">>")+";"):(T=X+"point("+L(s.args.usrCoords[1])+", "+L(s.args.usrCoords[2]),T+=") <<"+v+"fillColor: '"+JXG.Options.glider.fillColor+"'",T+=", strokeColor: '"+JXG.Options.glider.strokeColor+"'",T+=", snapToGrid: false, snapToPoints: false",T+=">>; "+s.dest_id,T+=".glide("+s.src_ids[0]+"); "),T+=s.dest_id+".onPolygon = "+!!s.args.onPolygon+";",s.args&&s.args.undoIsEmpty||(P="remove("+s.dest_id+"); ");break;case JXG.GENTYPE_INTERSECTION:T=X+"intersection("+s.src_ids[0]+", "+s.src_ids[1]+", "+s.args.choice,T+=") <<"+v+" fillColor: '"+JXG.Options.intersection.fillColor+"'",T+=", strokeColor: '"+JXG.Options.intersection.strokeColor+"'",T+=">>; ",s.args&&s.args.undoIsEmpty||(P="remove("+s.dest_id+"); ");break;case JXG.GENTYPE_MIGRATE:var x,Y;if(T="$board.migratePoint("+s.src_ids[0]+", "+s.dest_id+", false); ",s.args&&s.args.migrateToGlider)P=s.dest_id+".free(); "+s.dest_id,P+=".fillColor = '"+s.args.fillColor+"'; "+s.dest_id,P+=".strokeColor = '"+s.args.strokeColor+"'; ",P+="point("+s.args.usrCoords[1]+", "+s.args.usrCoords[2]+")",P+=" <<id: '"+s.src_ids[0]+"', name: ''>>; ",P+="$board.migratePoint("+s.dest_id+", "+s.src_ids[0]+", false); ",P+=s.src_ids[0]+".name = '"+s.args.orig_name+"'; ",P+=s.src_ids[0]+".label.setText('"+s.args.orig_name+"'); ",Y=(x=e.objects[s.dest_id]).slideObject.id,P+=X+"point("+x.coords.usrCoords[1]+", "+x.coords.usrCoords[2]+") ",P+="<<"+v+"fillColor: '"+JXG.Options.glider.fillColor+"'>>; ",P+=s.dest_id+".glide("+Y+"); ";break;case JXG.GENTYPE_COMBINED:for(T=P="",i=0;i<s.args.steps.length;i++)T+=(G=this.generateJCode(s.args.steps[i],e,r))[0],P=G[2]+P;break;case JXG.GENTYPE_CIRCLE:var R="name: '', withLabel: true,";s.args.withName&&(R="withLabel: true,"),s.args.create_by_additional_point||s.args.create_point?(JXG.exists(s.args.center_existing)&&s.args.center_existing||(T="point("+L(s.args.usrCoords[1])+", "+L(s.args.usrCoords[2])+") ",T+="<<id: '"+s.dest_sub_ids[0]+"', "+R+" visible: true, priv: false>>; "),T+=X+"circle("+s.dest_sub_ids[0]+", "+s.src_ids[0]+") <<"+v,T+="name: '', fillOpacity: "+JXG.Options.opacityLevel+", snaptogrid: "+JXG.Options.elements.snapToGrid+", snaptopoints: "+JXG.Options.elements.snapToPoints+">>;",P="remove("+s.dest_id+"); remove("+s.dest_sub_ids[0]+"); "):s.args.create_by_radius?(T="",JXG.exists(s.args.center_existing)&&s.args.center_existing||(JXG.exists(s.args.x)&&JXG.exists(s.args.y)?T+="point("+L(s.args.x)+", "+L(s.args.y)+") ":T+="point("+L(s.args.usrCoords[1])+", "+L(s.args.usrCoords[2])+") ",T+="<<id: '"+s.dest_sub_ids[0]+"', "+R+" visible: true, priv: false>>; "),JXG.exists(s.args.r)?T+=X+"circle('"+s.dest_sub_ids[0]+"', "+L(s.args.r)+") <<"+v:T+=X+"circle('"+s.dest_sub_ids[0]+"', "+L(s.args.radius)+") <<"+v,T+="name: '', fillOpacity: "+JXG.Options.opacityLevel+", snaptogrid: "+JXG.Options.elements.snapToGrid+", snaptopoints: "+JXG.Options.elements.snapToPoints+">>;",P="remove("+s.dest_id+"); remove("+s.dest_sub_ids[0]+"); "):2===s.src_ids.length?(T="midpoint("+s.src_ids[0]+", "+s.src_ids[1]+")",T+="<<id: '"+s.dest_sub_ids[0]+"', "+R+" visible: true, priv: false>>; ",T+=X+"circle("+s.dest_sub_ids[0]+", "+s.src_ids[0]+") <<"+v,T+="name: '', fillOpacity: "+JXG.Options.opacityLevel+", snaptogrid: "+JXG.Options.elements.snapToGrid+", snaptopoints: "+JXG.Options.elements.snapToPoints+">>;",P="remove("+s.dest_id+"); remove("+s.dest_sub_ids[0]+"); "):(T=X+"circle("+s.src_ids[0]+", "+s.src_ids[1]+", "+s.src_ids[2],T+=") <<center: <<id: '"+s.dest_sub_ids[0]+"', "+R,T+=" visible: true>>, "+v+"name: '', fillOpacity: "+JXG.Options.opacityLevel+", snaptogrid: "+JXG.Options.elements.snapToGrid+", snaptopoints: "+JXG.Options.elements.snapToPoints+">>; ",P="remove("+s.dest_id+"); remove("+s.dest_sub_ids[0]+"); ");break;case JXG.GENTYPE_CIRCLE2POINTS:s.args.create_two_points?(T="point("+L(s.args.x1)+", "+L(s.args.y1)+") <<id: '"+s.dest_sub_ids[0],T+="'>>; ",T+="point("+L(s.args.x2)+", "+L(s.args.y2)+") <<id: '",T+=s.dest_sub_ids[1]+"'>>; ",T+=X+"circle("+s.dest_sub_ids[0]+", "+s.dest_sub_ids[1]+") <<"+v,T+="name: '', fillOpacity: "+JXG.Options.opacityLevel+", snaptogrid: "+JXG.Options.elements.snapToGrid+", snaptopoints: "+JXG.Options.elements.snapToPoints+">>; ",P="remove("+s.dest_id+"); remove("+s.dest_sub_ids[1]+"); remove(",P+=s.dest_sub_ids[0]+"); "):s.args.create_point?(T="point("+L(s.args.x)+", "+L(s.args.y)+") <<id: '"+s.dest_sub_ids[0],T+="'>>; ",T+=X+"circle("+s.dest_sub_ids[0]+", "+s.src_ids[0]+") <<"+v,T+="name: '', fillOpacity: "+JXG.Options.opacityLevel+", snaptogrid: "+JXG.Options.elements.snapToGrid+", snaptopoints: "+JXG.Options.elements.snapToPoints+">>; ",P="remove("+s.dest_id+"); remove("+s.dest_sub_ids[0]+"); "):s.args.create_by_radius?(T=X+"circle("+s.src_ids[0]+", "+s.args.r+") <<"+v,T+="name: '', fillOpacity: "+JXG.Options.opacityLevel+", snaptogrid: "+JXG.Options.elements.snapToGrid+", snaptopoints: "+JXG.Options.elements.snapToPoints+">>; ",P="remove("+s.dest_id+"); "):(T=X+"circle("+s.src_ids[0]+", "+s.src_ids[1]+") <<"+v,T+="name: '', fillOpacity: "+JXG.Options.opacityLevel+", snaptogrid: "+JXG.Options.elements.snapToGrid+", snaptopoints: "+JXG.Options.elements.snapToPoints+">>; ",P="remove("+s.dest_id+"); ");break;case JXG.GENTYPE_LINE:if(o=0,t=0,s.args.create_point1){for(p=s.dest_sub_ids[o],o+=1,n=[],i=0;i<s.args.p1.length;i++)n[i]=L(s.args.p1[i]);T="point("+n.join(", ")+") <<id: '"+p+"', name: '', visible: false, ",T+="snaptogrid: false, snaptopoints: false, priv: true>>; ",P="remove("+p+"); "}else p=s.src_ids[t],t+=1;if(s.args.create_point2){for(l=s.dest_sub_ids[o++],n=[],i=0;i<s.args.p2.length;i++)n[i]=L(s.args.p2[i]);T+="point("+n.join(", ")+") <<id: '"+l+"', name: '', visible: false, ",T+="snaptogrid: false, snaptopoints: false, priv: true>>; ",P="remove("+l+"); "+P}else l=s.src_ids[t],t+=1;if(d="line",n="",_=p+", "+l,s.args.create_point1&&s.args.create_point2&&J.freeLine){for(T="",P="",2===s.args.p1.length&&s.args.p1.unshift(1),2===s.args.p2.length&&s.args.p2.unshift(1),_=JXG.Math.crossProduct(s.args.p1,s.args.p2),i=0;i<_.length;i++)_[i]=L(_[i]);_=_.join(", ")}s.args.first||s.args.last?(s.args.first||(n="straightFirst: "+s.args.first),s.args.last||(n="straightLast: "+s.args.last),n.length>0&&!J.useSymbols&&(n+=", ")):d="segment",J.useSymbols||(v="id: '"+s.dest_id+"'"),T+=X+d+"("+_+")",n.length+v.length>0?T+=" <<"+n+v+", name: '', snaptogrid: "+JXG.Options.elements.snapToGrid+", snaptopoints: "+JXG.Options.elements.snapToPoints+">>; ":T+=" <<name: '', snaptogrid: "+JXG.Options.elements.snapToGrid+", snaptopoints: "+JXG.Options.elements.snapToPoints+">>; ",P="remove("+s.dest_id+"); "+P;break;case JXG.GENTYPE_VECTOR:if(o=0,t=0,s.args.create_point1){for(p=s.dest_sub_ids[o],o+=1,n=[],i=0;i<s.args.p1.length;i++)n[i]=L(s.args.p1[i]);T="point("+n.join(", ")+") <<id: '"+p+"', name: '', visible: true, ",T+="snaptogrid: "+JXG.Options.elements.snapToGrid+", snaptopoints: false, priv: false>>; ",P="remove("+p+"); "}else p=s.src_ids[t],t+=1;if(s.args.create_point2){for(l=s.dest_sub_ids[o++],n=[],i=0;i<s.args.p2.length;i++)n[i]=L(s.args.p2[i]);T+="point("+n.join(", ")+") <<id: '"+l+"', name: '', visible: true, ",T+="layer: "+JXG.Options.layer.line+", opacity: 0.2, ",T+="snaptogrid: "+JXG.Options.elements.snapToGrid+", snaptopoints: false, priv: false>>; ",P="remove("+l+"); "+P}else l=s.src_ids[t],t+=1;n="",_=p+", "+l,d="arrow",J.useSymbols||(v="id: '"+s.dest_id+"'"),T+=X+d+"("+_+")",n.length+v.length>0?T+=" <<"+n+v+", name: '', strokeColor: 'black', snaptogrid: "+JXG.Options.elements.snapToGrid+", snaptopoints: "+JXG.Options.elements.snapToPoints+">>; ":T+=" <<name: '', strokeColor: 'black', snaptogrid: "+JXG.Options.elements.snapToGrid+", snaptopoints: "+JXG.Options.elements.snapToPoints+">>; ",P="remove("+s.dest_id+"); "+P;break;case JXG.GENTYPE_TRIANGLE:for(i=0;i<s.args.create_point.length;i++)s.args.create_point[i]&&(T+="point("+L(s.args.coords[i].usrCoords[1])+", ",T+=L(s.args.coords[i].usrCoords[2])+") <<id: '"+s.dest_sub_ids[i],T+="', snaptogrid: "+JXG.Options.elements.snapToGrid,T+=", snaptopoints: "+JXG.Options.elements.snapToPoints+">>; ");for(i=0;i<s.dest_sub_ids.length;i++)0!==s.dest_sub_ids[i]&&(P="remove("+s.dest_sub_ids[i]+"); "+P);for(P="remove("+s.dest_id+"); "+P,T+=X+"polygon(",i=0;i<s.src_ids.length;i++)T+=s.src_ids[i],i<s.src_ids.length-1&&(T+=", ");for(i=0;i<3;i++)0!==s.dest_sub_ids[i]&&((s.src_ids.length>0||i>0)&&(T+=", "),T+=s.dest_sub_ids[i]);T+=") <<borders: <<ids: ['"+s.dest_sub_ids[3]+"', '"+s.dest_sub_ids[4]+"', '"+s.dest_sub_ids[5]+"']",T+=", names: ['', '', '']",T+=">>, "+v+" fillOpacity: ",T+=JXG.Options.opacityLevel+", name: '' ",T+=", hasInnerPoints_Org: "+JXG.Options.polygon.hasInnerPoints,T+=", hasInnerPoints: "+JXG.Options.polygon.hasInnerPoints,T+=", snaptogrid: "+JXG.Options.elements.snapToGrid,T+=", snaptopoints: "+JXG.Options.elements.snapToPoints+">>; ";break;case JXG.GENTYPE_QUADRILATERAL:for(i=0;i<s.args.create_point.length;i++)s.args.create_point[i]&&(T+="point("+L(s.args.coords[i].usrCoords[1])+", ",T+=L(s.args.coords[i].usrCoords[2])+") <<id: '"+s.dest_sub_ids[i],T+="', snaptogrid: "+JXG.Options.elements.snapToGrid,T+=", snaptopoints: "+JXG.Options.elements.snapToPoints+">>; ");for(i=0;i<s.dest_sub_ids.length;i++)0!==s.dest_sub_ids[i]&&(P="remove("+s.dest_sub_ids[i]+"); "+P);for(P="remove("+s.dest_id+"); "+P,T+=X+"polygon(",i=0;i<s.src_ids.length;i++)T+=s.src_ids[i],i<s.src_ids.length-1&&(T+=", ");T+=") <<borders: <<ids: [ '"+s.dest_sub_ids[4]+"', '"+s.dest_sub_ids[5],T+="', '",T+=s.dest_sub_ids[6]+"', '"+s.dest_sub_ids[7]+"' ]",T+=", names: ['', '', '', '']",T+=">>, "+v,T+=" fillOpacity: ",T+=JXG.Options.opacityLevel+", name: '' ",T+=", hasInnerPoints_Org: "+JXG.Options.polygon.hasInnerPoints,T+=", hasInnerPoints: "+JXG.Options.polygon.hasInnerPoints,T+=", snaptogrid: "+JXG.Options.elements.snapToGrid,T+=", snaptopoints: "+JXG.Options.elements.snapToPoints+">>; ";break;case JXG.GENTYPE_TEXT:"'"!==s.args.str.substr(0,1)&&'"'!==s.args.str.substr(0,1)&&"function"!==s.args.str.substr(0,8)&&(s.args.str="'"+s.args.str+"'"),T=X+"text("+L(s.args.x)+", "+L(s.args.y)+", "+s.args.str+") <<",T+=v+"name: ''",void 0!==s.args.anchor&&(T+=", anchor: "+s.args.anchor),T+=">>; ",P="remove("+s.dest_id+"); ";break;case JXG.GENTYPE_RULER:T=X+"tapemeasure([ "+s.args.p1+" ], [ "+s.args.p2+" ]) <<",T+=v+"name: '', precision: "+JXG.Options.trunclen+", point1: <<id: '"+s.dest_sub_ids[0]+"', snaptogrid: "+JXG.Options.elements.snapToGrid+">>, point2: <<id: '"+s.dest_sub_ids[1]+"', snaptogrid: "+JXG.Options.elements.snapToGrid+">> >>; ",P="remove("+s.dest_id+"); ";break;case JXG.GENTYPE_POLYGON:if(s.args.create_point)for(i=0;i<s.args.create_point.length;i++)s.args.create_point[i]&&(T+="point("+L(s.args.coords[i].usrCoords[1])+", ",T+=L(s.args.coords[i].usrCoords[2])+") <<id: '"+s.dest_sub_ids[i],T+="', snaptogrid: "+JXG.Options.elements.snapToGrid,T+=", snaptopoints: "+JXG.Options.elements.snapToPoints+">>; ");if(s.dest_sub_ids)for(i=0;i<s.dest_sub_ids.length;i++)0!==s.dest_sub_ids[i]&&(P="remove("+s.dest_sub_ids[i]+"); "+P);for(P="remove("+s.dest_id+"); "+P,T+=X+"polygon(",i=0;i<s.src_ids.length;i++)T+=s.src_ids[i],i!==s.src_ids.length-1&&(T+=", ");for(T+=") <<borders: <<ids: ['",i=0;i<s.dest_sub_ids.length;i++)T+=s.dest_sub_ids[i],i<s.dest_sub_ids.length-1&&(T+="', '");for(T+="']",T+=", names: [",i=0;i<s.dest_sub_ids.length;i++)T+="''",i<s.dest_sub_ids.length-1&&(T+=", ");T+="]",T+=">>, "+v+" fillOpacity: "+JXG.Options.opacityLevel,T+=", hasInnerPoints_Org: "+JXG.Options.polygon.hasInnerPoints,T+=", hasInnerPoints: "+JXG.Options.polygon.hasInnerPoints,T+=", name: ''>>; ",P="remove("+s.dest_id+"); ";break;case JXG.GENTYPE_POLYGONCOPY:for(h=s.args.num_vertices,T="",P="",i=0;i<h;++i)T+=X+"point("+L(s.args.points[i][1])+", "+L(s.args.points[i][2]),T+=")"+(J.useSymbols?"":" <<id: '"+s.dest_sub_ids[i]+"', snaptogrid: "+JXG.Options.elements.snapToGrid+", snaptopoints: "+JXG.Options.elements.snapToPoints+">>")+"; ",P+="remove("+s.dest_sub_ids[i]+"); ";for(T+=X+"polygon(",i=0;i<h;++i)T+=s.dest_sub_ids[i],i!==h-1&&(T+=", ");for(T+=") <<borders: <<ids: ['",i=h;i<s.dest_sub_ids.length;i++)T+=s.dest_sub_ids[i],i<s.dest_sub_ids.length-1&&(T+="', '");for(T+="']",T+=", names: [",i=h;i<s.dest_sub_ids.length;i++)T+="''",i<s.dest_sub_ids.length-1&&(T+=", ");T+="]",T+=">>, "+v+" fillOpacity: "+JXG.Options.opacityLevel,T+=", hasInnerPoints_Org: "+JXG.Options.polygon.hasInnerPoints,T+=", hasInnerPoints: "+JXG.Options.polygon.hasInnerPoints,T+=", name: ''>>; ",P+="remove("+s.dest_id+"); ";break;case JXG.GENTYPE_REGULARPOLYGON:for(T=X+"regularpolygon("+s.src_ids.join(", ")+", ",T+=s.args.corners+") <<borders: <<ids: [ ",i=0;i<s.args.corners;i++)T+="'"+s.dest_sub_ids[i]+"'",i!==s.args.corners-1&&(T+=", "),P="remove("+s.dest_sub_ids[i]+"); "+P;for(T+="]",T+=", names: [",i=0;i<s.args.corners;i++)T+="''",i<s.args.corners-1&&(T+=", ");for(T+="]",T+=">>, vertices: <<ids: [ ",i=0;i<s.args.corners-2;i++)T+="'"+s.dest_sub_ids[i+parseInt(s.args.corners,10)]+"'",i!==s.args.corners-3&&(T+=", "),P="remove("+s.dest_sub_ids[i+parseInt(s.args.corners,10)]+"); "+P;T+=" ]",T+=", name: ''",T+=">>, "+v,T+=" fillOpacity: "+JXG.Options.opacityLevel,T+=", hasInnerPoints_Org: "+JXG.Options.polygon.hasInnerPoints,T+=", hasInnerPoints: "+JXG.Options.polygon.hasInnerPoints,T+=", name: ''>>; ",P="remove("+s.dest_id+"); "+P;break;case JXG.GENTYPE_SECTOR:T=X+"sector("+s.src_ids.join(", ")+") ",T+="<<",T+=v+" name: '', fillOpacity: "+JXG.Options.opacityLevel,T+=", arc: <<id: '"+s.dest_sub_ids[0]+"', priv: true>> >>; ",P="remove("+s.dest_id+"); ";break;case JXG.GENTYPE_ANGLE:T=X+"angle("+s.src_ids.join(", ")+") ",T+="<<",T+="dot: <<priv:true, id: '"+s.dest_sub_ids[0]+"', name: ''>>, ",T+=v+" fillOpacity: "+JXG.Options.opacityLevel,JXG.exists(s.args)&&JXG.exists(s.args.radius)&&(JXG.isNumber(s.args.radius)?T+=", radius: "+s.args.radius:T+=", radius: '"+s.args.radius+"'"),T+=">>; ",P="remove("+s.dest_id+"); ",P+="remove("+s.dest_sub_ids[0]+"); ";break;case JXG.GENTYPE_NONREFLEXANGLE:T=X+"nonreflexangle("+s.src_ids.join(", ")+") ",T+="<<",T+="dot: <<priv:true, id: '"+s.dest_sub_ids[0]+"', ",T+="name: ''>>, ",T+=v+" fillOpacity: "+JXG.Options.opacityLevel,JXG.exists(s.args)&&JXG.exists(s.args.radius)&&(T+=", radius: "+s.args.radius),T+=">>; ",P="remove("+s.dest_id+"); ",P+="remove("+s.dest_sub_ids[0]+"); ";break;case JXG.GENTYPE_REFLEXANGLE:T=X+"reflexangle("+s.src_ids.join(", ")+") ",T+="<<",T+="dot: <<priv:true, id: '"+s.dest_sub_ids[0]+"', ",T+="name: ''>>, ",T+=v+" fillOpacity: "+JXG.Options.opacityLevel,JXG.exists(s.args)&&JXG.exists(s.args.radius)&&(T+=", radius: "+s.args.radius),T+=">>; ",P="remove("+s.dest_id+"); ",P+="remove("+s.dest_sub_ids[0]+"); ";break;case JXG.GENTYPE_SLOPETRIANGLE:T=X+"slopetriangle("+s.src_ids.join(", ")+") <<",T+=v+" name: '',",T+="borders: <<ids: ['"+s.dest_sub_ids[4]+"', '"+s.dest_sub_ids[5]+"', '"+s.dest_sub_ids[6]+"']>>,",T+="basepoint: <<id: '"+s.dest_sub_ids[0]+"', name: '', priv: true >>, ",T+="baseline: <<id: '"+s.dest_sub_ids[1]+"', name: '', priv: true >>,",T+="glider: <<id: '"+s.dest_sub_ids[2]+"', name: '', priv: false >>, ",T+="toppoint: <<id: '"+s.dest_sub_ids[3]+"', name: '', priv: false >>",8===s.dest_sub_ids.length&&(T+=", tangent: <<id: '"+s.dest_sub_ids[7]+"', priv: true, point1: <<name: '', priv: true >>, point2: <<name: '', priv: true >> >>"),T+=">>;",P="remove("+s.dest_id+"); ";break;case JXG.GENTYPE_PLOT:T=X+s.args.plot_type+"("+s.args.func,(isNaN(s.args.a)||null===s.args.a||void 0===s.args.a||"-infinity"===s.args.a)&&(s.args.a=""),(isNaN(s.args.b)||null===s.args.b||void 0===s.args.b||"infinity"===s.args.b)&&(s.args.b=""),s.args.a!=s.args.b&&(T+=", "+s.args.a+", "+s.args.b),T+=") <<",s.args.isPolar&&(T+="curveType: 'polar', "),T+=v+"name: '', withLabel: true, strokeColor: '"+s.args.color+"', doAdvancedPlot: true, doAdvancedPlotOld: false >>; ",P="remove("+s.dest_id+"); ";break;case JXG.GENTYPE_PATH:for(h=s.args.points.length,T=X+"cardinalspline([",i=0;i<s.args.points.length;i++)JXG.isString(s.args.points[i])?T+="'"+s.args.points[i]+"'":(3===s.args.points[i].length?(O=s.args.points[i][1].toPrecision(4),y=s.args.points[i][2].toPrecision(4)):(O=s.args.points[i][0].toPrecision(4),y=s.args.points[i][1].toPrecision(4)),T+="["+O+","+y+"]"),i<h-1&&(T+=",");T+="], "+s.args.tau+", "+s.args.type,T+=") <<",T+=v+"name: '', withLabel: false, ",T+="fixed: false, ",s.args.createPoints||(T+="createPoints: false, "),T+="isArrayOfCoordinates: true, ",T+="strokeWidth: "+s.args.strokeWidth+", ",T+="strokeColor: '"+s.args.strokeColor+"' >>; ",P="remove("+s.dest_id+"); ";break;case JXG.GENTYPE_DERIVATIVE:T=X+"derivative("+s.src_ids+")",T+=" <<",T+="dash: 2",T+=" >>;";break;case JXG.GENTYPE_SLIDER:T=X+"slider(["+L(s.args.x1)+", "+L(s.args.y1)+"], ["+L(s.args.x2),T+=", "+L(s.args.y2)+"], ["+L(s.args.start)+", "+L(s.args.ini)+", ",T+=L(s.args.end)+"]) <<"+v,T+=" snapWidth: 0.1, ",T+="baseline: <<id: '",T+=s.dest_sub_ids[0]+"', name: '', priv: true>>, highline: <<id: '",T+=s.dest_sub_ids[1]+"', name: '', priv: true>>, point1: <<id: '",T+=s.dest_sub_ids[2]+"', name: '', priv: false, frozen: true>>, point2: <<id: '",T+=s.dest_sub_ids[3]+"', name: '', priv: false, frozen: true>>, label: <<id: '",T+=s.dest_sub_ids[4]+"', name: '', priv: true>>",T+=", name: '"+s.args.name+"'>>; ",P="remove("+s.dest_id+"); remove("+s.dest_sub_ids[4]+"); remove(",P+=s.dest_sub_ids[3]+"); remove("+s.dest_sub_ids[2]+"); remove(",P+=s.dest_sub_ids[1]+"); remove(",P+=s.dest_sub_ids[0]+"); ";break;case JXG.GENTYPE_DELETE:for(G=[],k=[],N=[],i=0;i<s.args.steps.length;i++)(G=r[s.args.steps[i]].type>50?this.generateJCodeMeta(r[s.args.steps[i]],e):this.generateJCode(r[s.args.steps[i]],e,r)).length>=3&&""!==JXG.trim(G[2])&&(T=G[2]+T),G.length>=4&&JXG.isFunction(G[3])&&k.unshift(G[3]),G.length>=1&&""!==JXG.trim(G[0])&&(P+=G[0]),G.length>=2&&JXG.isFunction(G[1])&&N.push(G[1]);break;case JXG.GENTYPE_COPY:for(b in E=[],s.args.steps)if(s.args.steps.hasOwnProperty(b)){if((f=JXG.deepCopy(r[s.args.steps[b]])).type===JXG.GENTYPE_COPY){for(i=0;i<f.args.map.length;i++)for(t=0;t<s.args.map.length;t++)f.args.map[i].copy===s.args.map[t].orig&&(f.args.map[i].copy=s.args.map[t].copy);f=JXG.SketchReader.replaceStepDestIds(f,f.args.map)}else f=JXG.SketchReader.replaceStepDestIds(f,s.args.map);E.push(f)}for(i=0;i<E.length;i++)G=E[i].type>50?this.generateJCodeMeta(E[i],e):this.generateJCode(E[i],e,r),""!==JXG.trim(G[0])&&(T+=G[0]),JXG.isFunction(G[1])&&k.push(G[1]),""!==JXG.trim(G[2])&&(P=G[2]+P),JXG.isFunction(G[3])&&N.unshift(G[3]);if(s.args.dep_copy)for(i=0;i<s.args.map.length;i++)I(s.args.map[i].orig).elementClass===JXG.OBJECT_CLASS_POINT&&(T+=s.args.map[i].copy,T+=".X = function() { return ("+s.args.map[i].orig+".X() - ",T+=L(s.args.x)+"); }; ",T+=s.args.map[i].copy,T+=".Y = function() { return ("+s.args.map[i].orig+".Y() - ",T+=L(s.args.y)+"); }; ");else for(i=0;i<s.args.free_points.length;i++)u=I(s.args.free_points[i].orig).coords.usrCoords[1],m=I(s.args.free_points[i].orig).coords.usrCoords[2],T+=s.args.free_points[i].copy+".X = function() { return ",T+=L(u-s.args.x)+"; }; ",T+=s.args.free_points[i].copy+".Y = function() { return ",T+=L(m-s.args.y)+"; }; ",T+=s.args.free_points[i].copy+".free(); ";for(t=0;t<s.args.map.length;t++)(b=I(s.args.map[t].orig)).type!==JXG.OBJECT_TYPE_CIRCLE||JXG.exists(b.point2)||(T+=s.args.map[t].copy+".setRadius(function () { return ",T+=s.args.map[t].orig+".radius(); }); ");break;case JXG.GENTYPE_ABLATION:for(u=I(s.src_ids[0]).coords.usrCoords[1],m=I(s.src_ids[0]).coords.usrCoords[2],T="point("+L(u-s.args.x)+", "+L(m-s.args.y)+") <<id: '",T+=s.dest_sub_ids[0]+"', name: '', withLabel: false>>; ",T+="circle('"+s.dest_sub_ids[0]+"', 1) <<id: '"+s.dest_sub_ids[1],T+="', fillOpacity: "+JXG.Options.opacityLevel,T+=", strokeColor: '#888888', visible: true, name: '', withLabel: false>>; ",1===s.args.fids.length?s.args.func=s.args.fids[0]+".radius()":s.args.func="dist("+s.args.fids[0]+", "+s.args.fids[1]+")",T+=s.dest_sub_ids[1]+".setRadius(function() { return "+s.args.func+"; }); ",t=0;t<s.src_ids.length;t++)T+=s.src_ids[t]+".addChild("+s.dest_sub_ids[0]+"); ",T+=s.src_ids[t]+".addChild("+s.dest_sub_ids[1]+"); ";0!==s.args.migrate&&-1!==s.args.migrate&&(T+="$board.migratePoint("+s.dest_sub_ids[0]+", "+s.args.migrate+"); "),P="remove("+s.dest_sub_ids[1]+"); remove("+s.dest_sub_ids[0]+"); ";break;case JXG.GENTYPE_VECTORCOPY:for(u=I(s.src_ids[0]).coords.usrCoords[1],m=I(s.src_ids[0]).coords.usrCoords[2],T="point("+L(u-s.args.x)+", "+L(m-s.args.y)+") <<id: '",T+=s.dest_sub_ids[0]+"', name: '', withLabel: false>>; ",T+="parallelpoint('"+s.src_ids[0]+"','"+s.src_ids[1]+"','"+s.dest_sub_ids[0]+"') <<id: '"+s.dest_sub_ids[1],T+="', strokeColor: '#888888', visible: true, priv: false, name: '', ",T+="layer: "+JXG.Options.layer.line+", opacity: 0.2, withLabel: false>>; ",T+="arrow('"+s.dest_sub_ids[0]+"','"+s.dest_sub_ids[1]+"') <<id: '"+s.dest_sub_ids[2],T+="', strokeColor: '#888888', visible: true, name: '', withLabel: false>>; ",t=0;t<s.src_ids.length;t++)T+=s.src_ids[t]+".addChild("+s.dest_sub_ids[0]+"); ",T+=s.src_ids[t]+".addChild("+s.dest_sub_ids[1]+"); ",T+=s.src_ids[t]+".addChild("+s.dest_sub_ids[2]+"); ";0!==s.args.migrate&&-1!==s.args.migrate&&(T+="$board.migratePoint("+s.dest_sub_ids[0]+", "+s.args.migrate+"); "),P="remove("+s.dest_sub_ids[1]+"); remove("+s.dest_sub_ids[0]+"); remove("+s.dest_sub_ids[2]+");";break;case JXG.GENTYPE_MOVEMENT:if(s.args.obj_type===JXG.OBJECT_TYPE_LINE||s.args.obj_type===JXG.OBJECT_TYPE_VECTOR)T=s.src_ids[0]+".move(["+L(s.args.coords[0].usrCoords[0])+", ",T+=L(s.args.coords[0].usrCoords[1])+", "+L(s.args.coords[0].usrCoords[2])+"]); ",P=s.src_ids[0]+".move(["+s.args.zstart[0]+", "+s.args.xstart[0]+", ",P+=s.args.ystart[0]+"]); ",T+=s.src_ids[1]+".move(["+L(s.args.coords[1].usrCoords[0])+", ",T+=L(s.args.coords[1].usrCoords[1])+", "+L(s.args.coords[1].usrCoords[2])+"]); ",P+=s.src_ids[1]+".move(["+s.args.zstart[1]+", "+s.args.xstart[1]+", ",P+=s.args.ystart[1]+"]); ";else if(s.args.obj_type===JXG.OBJECT_TYPE_CIRCLE)T=s.src_ids[0]+".move(["+L(s.args.coords[0].usrCoords[1])+", ",T+=L(s.args.coords[0].usrCoords[2])+"]); ",P=s.src_ids[0]+".move(["+s.args.xstart+", "+s.args.ystart+"]); ",s.args.has_point2&&(T+=s.src_ids[1]+".move(["+L(s.args.coords[1].usrCoords[1])+", ",T+=L(s.args.coords[1].usrCoords[2])+"]); ",P+=s.src_ids[1]+".move(["+s.args.old_p2x+", "+s.args.old_p2y,P+="]); ");else if(s.args.obj_type===JXG.OBJECT_TYPE_POLYGON)for(T=P="",i=0;i<s.src_ids.length;i++)T+=s.src_ids[i]+".move(["+L(s.args.coords[i].usrCoords[1])+", ",T+=L(s.args.coords[i].usrCoords[2])+"]); ",P+=s.src_ids[i]+".move(["+s.args.xstart[i]+", "+s.args.ystart[i],P+="]); ";else JXG.exists(s.args.coords[0])&&(T=s.src_ids[0]+".move(["+L(s.args.coords[0].usrCoords[1])+", ",T+=L(s.args.coords[0].usrCoords[2])+"]); ",P=s.src_ids[0]+".move(["+s.args.xstart+", "+s.args.ystart+"]); ");break;default:return JXG.debug("No such GENTYPE!"+s.type),[]}return[T,k,P,N]},replaceStepDestIds:function(s,e){var r,i,t=[];for(r=0;r<e.length;r++){for(t.push(e[r].copy),s.dest_id===e[r].orig&&(s.dest_id=e[r].copy),i=0;i<s.dest_sub_ids.length;i++)s.dest_sub_ids[i]===e[r].orig&&(s.dest_sub_ids[i]=e[r].copy);for(i=0;i<s.src_ids.length;i++)s.src_ids[i]===e[r].orig&&(s.src_ids[i]=e[r].copy)}for(i=0;i<s.dest_sub_ids.length;i++)JXG.isInArray(t,s.dest_sub_ids[i])||(s.dest_sub_ids[i]=this.id());return s.src_ids=JXG.uniqueArray(s.src_ids),s.dest_sub_ids=JXG.uniqueArray(s.dest_sub_ids),s}}),JXG.registerReader(JXG.SketchReader,["sketch","sketchometry"])}();
package/package.json CHANGED
@@ -2,7 +2,7 @@
2
2
  "name": "jsxgraph",
3
3
  "description": "Interactive geometry, plotting, visualization",
4
4
  "homepage": "https://jsxgraph.org",
5
- "version": "1.4.1",
5
+ "version": "1.4.2",
6
6
  "main": "distrib/jsxgraphcore.js",
7
7
  "types": "distrib/index.d.ts",
8
8
  "maintainers": [
package/src/base/board.js CHANGED
@@ -1664,7 +1664,7 @@ define([
1664
1664
  },
1665
1665
 
1666
1666
  addKeyboardEventHandlers: function() {
1667
- if (!this.hasKeyboardHandlers && Env.isBrowser) {
1667
+ if (this.attr.keyboard.enabled && !this.hasKeyboardHandlers && Env.isBrowser) {
1668
1668
  Env.addEvent(this.containerObj, 'keydown', this.keyDownListener, this);
1669
1669
  Env.addEvent(this.containerObj, 'focusin', this.keyFocusInListener, this);
1670
1670
  Env.addEvent(this.containerObj, 'focusout', this.keyFocusOutListener, this);
@@ -2591,7 +2591,7 @@ define([
2591
2591
  obj.type === Const.OBJECT_TYPE_TICKS ||
2592
2592
  obj.type === Const.OBJECT_TYPE_IMAGE) {
2593
2593
  // It's a point, so it's single touch, so we just push it to our touches
2594
- targets = [obj];
2594
+ targets = [target];
2595
2595
 
2596
2596
  // For the UNDO/REDO of object moves
2597
2597
  this.saveStartPos(obj, targets[0]);
@@ -3136,6 +3136,7 @@ define([
3136
3136
  dx = Type.evaluate(this.attr.keyboard.dx) / this.unitX,
3137
3137
  dy = Type.evaluate(this.attr.keyboard.dy) / this.unitY,
3138
3138
  doZoom = false,
3139
+ done = true,
3139
3140
  dir, actPos;
3140
3141
 
3141
3142
  if (!this.attr.keyboard.enabled || id_node === '') {
@@ -3164,6 +3165,8 @@ define([
3164
3165
  this.clickLeftArrow();
3165
3166
  } else if (evt.keyCode === 39) { // right
3166
3167
  this.clickRightArrow();
3168
+ } else {
3169
+ done = false;
3167
3170
  }
3168
3171
  } else {
3169
3172
  // Adapt dx, dy to snapToGrid and attractToGrid
@@ -3216,7 +3219,10 @@ define([
3216
3219
  this.zoomOut();
3217
3220
  } else if (doZoom && evt.key === 'o') { // o
3218
3221
  this.zoom100();
3222
+ } else {
3223
+ done = false;
3219
3224
  }
3225
+
3220
3226
  if (dir && el.isDraggable &&
3221
3227
  el.visPropCalc.visible &&
3222
3228
  ((this.geonextCompatibilityMode &&
@@ -3242,6 +3248,9 @@ define([
3242
3248
 
3243
3249
  this.update();
3244
3250
 
3251
+ if (done) {
3252
+ evt.preventDefault();
3253
+ }
3245
3254
  return true;
3246
3255
  },
3247
3256
 
@@ -4840,6 +4849,7 @@ define([
4840
4849
  for (i = 0; i < parents.length; i++) {
4841
4850
  if (Type.isString(parents[i]) &&
4842
4851
  !(elementType === 'text' && i === 2) &&
4852
+ !(elementType === 'solidofrevolution3d' && i === 2) &&
4843
4853
  !((elementType === 'input' || elementType === 'checkbox' || elementType === 'button') &&
4844
4854
  (i === 2 || i === 3)) &&
4845
4855
  !(elementType === 'curve' && i > 0) // Allow curve plots with jessiecode