rgraph-rails 1.0.3 → 1.0.4
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.
- checksums.yaml +8 -8
- data/.travis.yml +1 -0
- data/README.md +5 -5
- data/lib/rgraph-rails/version.rb +1 -1
- data/rgraph-rails.gemspec +2 -2
- data/vendor/assets/images/bg.png +0 -0
- data/vendor/assets/images/bullet.png +0 -0
- data/vendor/assets/images/facebook-large.png +0 -0
- data/vendor/assets/images/google-plus-large.png +0 -0
- data/vendor/assets/images/logo.png +0 -0
- data/vendor/assets/images/meter-image-sd-needle.png +0 -0
- data/vendor/assets/images/meter-image-sd.png +0 -0
- data/vendor/assets/images/meter-sketch-needle.png +0 -0
- data/vendor/assets/images/meter-sketch.png +0 -0
- data/vendor/assets/images/odometer-background.png +0 -0
- data/vendor/assets/images/rgraph.jpg +0 -0
- data/vendor/assets/images/title.png +0 -0
- data/vendor/assets/images/twitter-large.png +0 -0
- data/vendor/assets/javascripts/RGraph.bar.js +258 -30
- data/vendor/assets/javascripts/RGraph.bipolar.js +4 -3
- data/vendor/assets/javascripts/RGraph.common.annotate.js +4 -3
- data/vendor/assets/javascripts/RGraph.common.context.js +4 -3
- data/vendor/assets/javascripts/RGraph.common.core.js +227 -105
- data/vendor/assets/javascripts/RGraph.common.csv.js +4 -3
- data/vendor/assets/javascripts/RGraph.common.deprecated.js +4 -3
- data/vendor/assets/javascripts/RGraph.common.dynamic.js +5 -4
- data/vendor/assets/javascripts/RGraph.common.effects.js +4 -3
- data/vendor/assets/javascripts/RGraph.common.key.js +4 -3
- data/vendor/assets/javascripts/RGraph.common.resizing.js +4 -3
- data/vendor/assets/javascripts/RGraph.common.sheets.js +357 -0
- data/vendor/assets/javascripts/RGraph.common.tooltips.js +6 -4
- data/vendor/assets/javascripts/RGraph.common.zoom.js +4 -3
- data/vendor/assets/javascripts/RGraph.drawing.background.js +4 -3
- data/vendor/assets/javascripts/RGraph.drawing.circle.js +4 -3
- data/vendor/assets/javascripts/RGraph.drawing.image.js +4 -3
- data/vendor/assets/javascripts/RGraph.drawing.marker1.js +4 -3
- data/vendor/assets/javascripts/RGraph.drawing.marker2.js +4 -3
- data/vendor/assets/javascripts/RGraph.drawing.marker3.js +1 -1
- data/vendor/assets/javascripts/RGraph.drawing.poly.js +1 -1
- data/vendor/assets/javascripts/RGraph.drawing.rect.js +1 -1
- data/vendor/assets/javascripts/RGraph.drawing.text.js +1 -1
- data/vendor/assets/javascripts/RGraph.drawing.xaxis.js +1 -1
- data/vendor/assets/javascripts/RGraph.drawing.yaxis.js +33 -30
- data/vendor/assets/javascripts/RGraph.fuel.js +14 -16
- data/vendor/assets/javascripts/RGraph.funnel.js +1 -1
- data/vendor/assets/javascripts/RGraph.gantt.js +1 -1
- data/vendor/assets/javascripts/RGraph.gauge.js +3 -5
- data/vendor/assets/javascripts/RGraph.hbar.js +738 -212
- data/vendor/assets/javascripts/RGraph.hprogress.js +30 -33
- data/vendor/assets/javascripts/RGraph.line.js +246 -31
- data/vendor/assets/javascripts/RGraph.meter.js +72 -36
- data/vendor/assets/javascripts/RGraph.modaldialog.js +1 -1
- data/vendor/assets/javascripts/RGraph.odo.js +3 -5
- data/vendor/assets/javascripts/RGraph.pie.js +23 -15
- data/vendor/assets/javascripts/RGraph.radar.js +1 -1
- data/vendor/assets/javascripts/RGraph.rose.js +2 -2
- data/vendor/assets/javascripts/RGraph.rscatter.js +116 -27
- data/vendor/assets/javascripts/RGraph.scatter.js +14 -15
- data/vendor/assets/javascripts/RGraph.thermometer.js +8 -10
- data/vendor/assets/javascripts/RGraph.vprogress.js +8 -10
- data/vendor/assets/javascripts/RGraph.waterfall.js +1 -1
- data/vendor/assets/stylesheets/website.css +32 -2
- metadata +6 -5
@@ -1,4 +1,4 @@
|
|
1
|
-
// version:
|
1
|
+
// version: 2016-02-06
|
2
2
|
/**
|
3
3
|
* o--------------------------------------------------------------------------------o
|
4
4
|
* | This file is part of the RGraph package - you can learn more at: |
|
@@ -27,26 +27,24 @@
|
|
27
27
|
/**
|
28
28
|
* Allow for object config style
|
29
29
|
*/
|
30
|
-
if ( typeof conf
|
31
|
-
&& typeof conf.min === 'number'
|
32
|
-
&& typeof conf.max === 'number'
|
30
|
+
if ( typeof conf === 'object'
|
33
31
|
&& typeof conf.value !== 'undefined'
|
34
|
-
&& typeof conf.id
|
35
|
-
|
36
|
-
var id = conf.id
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
|
32
|
+
&& typeof conf.id === 'string') {
|
33
|
+
|
34
|
+
var id = conf.id,
|
35
|
+
canvas = document.getElementById(id),
|
36
|
+
min = conf.min,
|
37
|
+
max = conf.max,
|
38
|
+
value = conf.value,
|
39
|
+
parseConfObjectForOptions = true; // Set this so the config is parsed (at the end of the constructor)
|
42
40
|
|
43
41
|
} else {
|
44
42
|
|
45
|
-
var id = conf
|
46
|
-
|
47
|
-
|
48
|
-
|
49
|
-
|
43
|
+
var id = conf,
|
44
|
+
canvas = document.getElementById(id),
|
45
|
+
min = arguments[1],
|
46
|
+
max = arguments[2],
|
47
|
+
value = arguments[3];
|
50
48
|
}
|
51
49
|
|
52
50
|
|
@@ -56,8 +54,8 @@
|
|
56
54
|
this.context = this.canvas.getContext('2d');
|
57
55
|
this.canvas.__object__ = this;
|
58
56
|
|
59
|
-
this.min = min;
|
60
|
-
this.max = max;
|
57
|
+
this.min = RGraph.stringsToNumbers(min);
|
58
|
+
this.max = RGraph.stringsToNumbers(max);
|
61
59
|
this.value = RGraph.stringsToNumbers(value);
|
62
60
|
this.type = 'hprogress';
|
63
61
|
this.coords = [];
|
@@ -319,7 +317,7 @@
|
|
319
317
|
/**
|
320
318
|
* Fire the onbeforedraw event
|
321
319
|
*/
|
322
|
-
RG.
|
320
|
+
RG.fireCustomEvent(this, 'onbeforedraw');
|
323
321
|
|
324
322
|
|
325
323
|
|
@@ -430,7 +428,7 @@
|
|
430
428
|
this.exec = function (func)
|
431
429
|
{
|
432
430
|
func(this);
|
433
|
-
|
431
|
+
|
434
432
|
return this;
|
435
433
|
};
|
436
434
|
|
@@ -446,19 +444,18 @@
|
|
446
444
|
/**
|
447
445
|
* First get the scale
|
448
446
|
*/
|
449
|
-
|
450
447
|
this.scale2 = RG.getScale2(this, {
|
451
|
-
|
452
|
-
|
453
|
-
|
454
|
-
|
455
|
-
|
456
|
-
|
457
|
-
|
458
|
-
|
459
|
-
|
460
|
-
|
461
|
-
|
448
|
+
'max':this.max,
|
449
|
+
'min':this.min,
|
450
|
+
'strict':true,
|
451
|
+
'scale.thousand':prop['chart.scale.thousand'],
|
452
|
+
'scale.point':prop['chart.scale.point'],
|
453
|
+
'scale.decimals':prop['chart.scale.decimals'],
|
454
|
+
'ylabels.count':prop['chart.labels.count'],
|
455
|
+
'scale.round':prop['chart.scale.round'],
|
456
|
+
'units.pre': prop['chart.units.pre'],
|
457
|
+
'units.post': prop['chart.units.post']
|
458
|
+
});
|
462
459
|
|
463
460
|
// Set a shadow if requested
|
464
461
|
if (prop['chart.shadow']) {
|
@@ -1,4 +1,4 @@
|
|
1
|
-
// version:
|
1
|
+
// version: 2016-02-06
|
2
2
|
/**
|
3
3
|
* o--------------------------------------------------------------------------------o
|
4
4
|
* | This file is part of the RGraph package - you can learn more at: |
|
@@ -266,6 +266,7 @@
|
|
266
266
|
'chart.adjustable': false,
|
267
267
|
'chart.noredraw': false,
|
268
268
|
'chart.outofbounds': false,
|
269
|
+
'chart.outofbounds.clip': false,
|
269
270
|
'chart.chromefix': true,
|
270
271
|
'chart.animation.factor': 1,
|
271
272
|
'chart.animation.unfold.x': false,
|
@@ -275,7 +276,15 @@
|
|
275
276
|
'chart.curvy': false,
|
276
277
|
'chart.line.visible': true,
|
277
278
|
'chart.events.click': null,
|
278
|
-
'chart.events.mousemove': null
|
279
|
+
'chart.events.mousemove': null,
|
280
|
+
'chart.errorbars': false,
|
281
|
+
'chart.errorbars.color': 'black',
|
282
|
+
'chart.errorbars.capped': true,
|
283
|
+
'chart.errorbars.capped.width': 12,
|
284
|
+
'chart.errorbars.linewidth': 1,
|
285
|
+
'chart.combinedchart.effect': null,
|
286
|
+
'chart.combinedchart.effect.options': null,
|
287
|
+
'chart.combinedchart.effect.callback': null
|
279
288
|
}
|
280
289
|
|
281
290
|
/**
|
@@ -831,16 +840,39 @@
|
|
831
840
|
} else {
|
832
841
|
var tickmarks = null;
|
833
842
|
}
|
834
|
-
|
835
843
|
|
836
|
-
|
837
|
-
|
838
|
-
|
839
|
-
|
840
|
-
|
841
|
-
|
842
|
-
|
844
|
+
//
|
845
|
+
// Draw the line, accounting for the outofboundsClip option
|
846
|
+
//
|
847
|
+
if (prop['chart.outofbounds.clip']) {
|
848
|
+
pa2(
|
849
|
+
co,
|
850
|
+
'sa b r % % % % cl b',
|
851
|
+
0,
|
852
|
+
this.gutterTop,
|
853
|
+
ca.width,
|
854
|
+
ca.height - this.gutterTop - this.gutterBottom
|
855
|
+
);
|
856
|
+
}
|
857
|
+
this.drawLine(
|
858
|
+
this.data[i],
|
859
|
+
prop['chart.colors'][j],
|
860
|
+
fill,
|
861
|
+
this.getLineWidth(j),
|
862
|
+
tickmarks,
|
863
|
+
i
|
864
|
+
);
|
865
|
+
if (prop['chart.outofbounds.clip']) {
|
866
|
+
co.restore();
|
867
|
+
}
|
868
|
+
|
843
869
|
co.stroke();
|
870
|
+
|
871
|
+
/**
|
872
|
+
* Draw errorbars
|
873
|
+
*
|
874
|
+
* ** This is now done in the redrawLine function **
|
875
|
+
*/
|
844
876
|
}
|
845
877
|
|
846
878
|
/**
|
@@ -869,7 +901,7 @@
|
|
869
901
|
co.stroke();
|
870
902
|
// No fill!
|
871
903
|
}
|
872
|
-
|
904
|
+
|
873
905
|
//Redraw the tickmarks
|
874
906
|
if (prop['chart.tickmarks']) {
|
875
907
|
|
@@ -925,6 +957,10 @@
|
|
925
957
|
|
926
958
|
|
927
959
|
|
960
|
+
|
961
|
+
|
962
|
+
|
963
|
+
|
928
964
|
for (var i=0,len=this.coords2.length; i<len; i+=1) {
|
929
965
|
for (var j=0,len2=this.coords2[i].length; j<len2; ++j) {
|
930
966
|
if (typeof(this.coords2[i][j]) == 'object' && typeof(this.coords2[i][j][0]) == 'number' && typeof(this.coords2[i][j][1]) == 'number') {
|
@@ -1098,11 +1134,6 @@
|
|
1098
1134
|
this.drawAxes =
|
1099
1135
|
this.DrawAxes = function ()
|
1100
1136
|
{
|
1101
|
-
//var RG = RGraph;
|
1102
|
-
//var ca = this.canvas;
|
1103
|
-
//var co = this.context;
|
1104
|
-
//var prop = this.properties;
|
1105
|
-
|
1106
1137
|
// Don't draw the axes?
|
1107
1138
|
if (prop['chart.noaxes']) {
|
1108
1139
|
return;
|
@@ -1112,7 +1143,8 @@
|
|
1112
1143
|
RG.noShadow(this);
|
1113
1144
|
|
1114
1145
|
co.lineWidth = prop['chart.axis.linewidth'] + 0.001;
|
1115
|
-
co.lineCap = '
|
1146
|
+
co.lineCap = 'square';
|
1147
|
+
co.lineJoin = 'miter';
|
1116
1148
|
co.strokeStyle = prop['chart.axis.color'];
|
1117
1149
|
co.beginPath();
|
1118
1150
|
|
@@ -2050,15 +2082,32 @@
|
|
2050
2082
|
co.beginPath();
|
2051
2083
|
co.rect(0,0,ca.width * prop['chart.animation.trace.clip'],ca.height);
|
2052
2084
|
co.clip();
|
2053
|
-
|
2085
|
+
|
2086
|
+
|
2087
|
+
|
2088
|
+
|
2089
|
+
|
2090
|
+
//
|
2091
|
+
// Draw errorbars
|
2092
|
+
//
|
2093
|
+
if (typeof prop['chart.errorbars'] !== 'null') {
|
2094
|
+
this.drawErrorbars();
|
2095
|
+
}
|
2096
|
+
|
2097
|
+
|
2098
|
+
|
2099
|
+
|
2054
2100
|
// Now redraw the lines with the correct line width
|
2055
2101
|
this.SetShadow(index);
|
2056
2102
|
this.RedrawLine(lineCoords, color, linewidth, index);
|
2057
2103
|
co.stroke();
|
2058
2104
|
RG.NoShadow(this);
|
2059
|
-
|
2060
|
-
|
2061
|
-
|
2105
|
+
|
2106
|
+
|
2107
|
+
|
2108
|
+
|
2109
|
+
|
2110
|
+
|
2062
2111
|
|
2063
2112
|
// Draw the tickmarks
|
2064
2113
|
for (var i=0; i<lineCoords.length; ++i) {
|
@@ -2694,15 +2743,15 @@
|
|
2694
2743
|
this.getShape =
|
2695
2744
|
this.getPoint = function (e)
|
2696
2745
|
{
|
2697
|
-
var obj = this
|
2698
|
-
|
2699
|
-
|
2700
|
-
|
2701
|
-
|
2702
|
-
|
2703
|
-
var mouseXY = RG.getMouseXY(e)
|
2704
|
-
|
2705
|
-
|
2746
|
+
var obj = this,
|
2747
|
+
RG = RGraph,
|
2748
|
+
ca = canvas = e.target,
|
2749
|
+
co = context = this.context,
|
2750
|
+
prop = this.properties;
|
2751
|
+
|
2752
|
+
var mouseXY = RG.getMouseXY(e),
|
2753
|
+
mouseX = mouseXY[0],
|
2754
|
+
mouseY = mouseXY[1];
|
2706
2755
|
|
2707
2756
|
// This facilitates you being able to pass in the bar object as a parameter instead of
|
2708
2757
|
// the function getting it from the object
|
@@ -3027,7 +3076,7 @@
|
|
3027
3076
|
|
3028
3077
|
y = ca.height - this.gutterBottom - y;
|
3029
3078
|
}
|
3030
|
-
|
3079
|
+
|
3031
3080
|
return y;
|
3032
3081
|
};
|
3033
3082
|
|
@@ -3424,6 +3473,169 @@
|
|
3424
3473
|
|
3425
3474
|
|
3426
3475
|
|
3476
|
+
//
|
3477
|
+
// Draws error-bars for the Bar and Line charts
|
3478
|
+
//
|
3479
|
+
this.drawErrorbars = function ()
|
3480
|
+
{
|
3481
|
+
// Save the state of the canvas so that it can be restored at the end
|
3482
|
+
co.save();
|
3483
|
+
|
3484
|
+
RG.noShadow(this);
|
3485
|
+
|
3486
|
+
var coords = this.coords,
|
3487
|
+
x = 0,
|
3488
|
+
errorbars = prop['chart.errorbars'],
|
3489
|
+
length = 0;
|
3490
|
+
|
3491
|
+
// If not capped set the width of the cap to zero
|
3492
|
+
if (!prop['chart.errorbars.capped']) {
|
3493
|
+
prop['chart.errorbars.capped.width'] = 0.001;
|
3494
|
+
halfwidth = 0.0005;
|
3495
|
+
}
|
3496
|
+
|
3497
|
+
// Set the linewidth
|
3498
|
+
co.lineWidth = prop['chart.errorbars.linewidth'];
|
3499
|
+
|
3500
|
+
|
3501
|
+
|
3502
|
+
|
3503
|
+
for (var i=0; i<coords.length; ++i) {
|
3504
|
+
|
3505
|
+
var halfwidth = prop['chart.errorbars.capped.width'] / 2 || 5,
|
3506
|
+
color = prop['chart.errorbars.color'] || 'black';
|
3507
|
+
|
3508
|
+
// Set the perbar linewidth if the fourth option in the array
|
3509
|
+
// is specified
|
3510
|
+
if (errorbars[i] && typeof errorbars[i][3] === 'number') {
|
3511
|
+
co.lineWidth = errorbars[i][3];
|
3512
|
+
} else if (typeof prop['chart.errorbars.linewidth'] === 'number') {
|
3513
|
+
co.lineWidth = prop['chart.errorbars.linewidth'];
|
3514
|
+
} else {
|
3515
|
+
co.lineWidth = 1;
|
3516
|
+
}
|
3517
|
+
|
3518
|
+
|
3519
|
+
|
3520
|
+
// Calulate the pixel size
|
3521
|
+
if (typeof errorbars === 'number' || typeof errorbars[i] === 'number') {
|
3522
|
+
|
3523
|
+
if (typeof errorbars === 'number') {
|
3524
|
+
var positiveLength = this.getYCoord(this.min) - this.getYCoord(this.min + errorbars),
|
3525
|
+
negativeLength = positiveLength;
|
3526
|
+
} else {
|
3527
|
+
var positiveLength = this.getYCoord(this.min) - this.getYCoord(this.min + errorbars[i]),
|
3528
|
+
negativeLength = positiveLength;
|
3529
|
+
}
|
3530
|
+
|
3531
|
+
if (positiveLength || negativeLength) {
|
3532
|
+
|
3533
|
+
pa2(
|
3534
|
+
co,
|
3535
|
+
'lj miter lc square b m % % l % % m % % l % % l % % m % % l % % s %',
|
3536
|
+
coords[i][0] - halfwidth,
|
3537
|
+
coords[i][1] + negativeLength,
|
3538
|
+
coords[i][0] + halfwidth,
|
3539
|
+
coords[i][1] + negativeLength,
|
3540
|
+
coords[i][0],
|
3541
|
+
coords[i][1] + negativeLength,
|
3542
|
+
coords[i][0],
|
3543
|
+
coords[i][1] - positiveLength,
|
3544
|
+
coords[i][0] - halfwidth,
|
3545
|
+
coords[i][1] - positiveLength,
|
3546
|
+
coords[i][0],
|
3547
|
+
coords[i][1] - positiveLength,
|
3548
|
+
coords[i][0] + halfwidth,
|
3549
|
+
coords[i][1] - positiveLength,
|
3550
|
+
color
|
3551
|
+
);
|
3552
|
+
|
3553
|
+
pa2(
|
3554
|
+
co,
|
3555
|
+
'lj miter lc square b m % % l % % s %',
|
3556
|
+
coords[i][0] - halfwidth,
|
3557
|
+
coords[i][1] + negativeLength,
|
3558
|
+
coords[i][0] + halfwidth,
|
3559
|
+
coords[i][1] + negativeLength,
|
3560
|
+
color
|
3561
|
+
);
|
3562
|
+
}
|
3563
|
+
|
3564
|
+
|
3565
|
+
|
3566
|
+
} else if (typeof errorbars[i] === 'object' && !RG.isNull(errorbars[i])) {
|
3567
|
+
|
3568
|
+
var positiveLength = this.getYCoord(this.min) - this.getYCoord(this.min + errorbars[i][0]),
|
3569
|
+
negativeLength = this.getYCoord(this.min) - this.getYCoord(this.min + errorbars[i][1]);
|
3570
|
+
|
3571
|
+
|
3572
|
+
// Color
|
3573
|
+
if (typeof errorbars[i][2] === 'string') {
|
3574
|
+
color = errorbars[i][2];
|
3575
|
+
}
|
3576
|
+
|
3577
|
+
// Cap width
|
3578
|
+
halfwidth = typeof errorbars[i][4] === 'number' ? errorbars[i][4] / 2 : halfwidth;
|
3579
|
+
|
3580
|
+
|
3581
|
+
// Set the linewidth
|
3582
|
+
if (typeof errorbars[i] === 'object' && typeof errorbars[i][3] === 'number') {
|
3583
|
+
co.lineWidth = errorbars[i][3];
|
3584
|
+
} else if (typeof prop['chart.errorbars.linewidth'] === 'number') {
|
3585
|
+
co.lineWidth = prop['chart.errorbars.linewidth'];
|
3586
|
+
} else {
|
3587
|
+
co.lineWidth = 1;
|
3588
|
+
}
|
3589
|
+
|
3590
|
+
|
3591
|
+
if (!RG.isNull(errorbars[i][0])) {
|
3592
|
+
|
3593
|
+
pa2(
|
3594
|
+
co,
|
3595
|
+
'lc square b m % % l % % l % % m % % l % % s %',
|
3596
|
+
coords[i][0],
|
3597
|
+
coords[i][1],
|
3598
|
+
coords[i][0],
|
3599
|
+
coords[i][1] - positiveLength,
|
3600
|
+
coords[i][0] - halfwidth,
|
3601
|
+
ma.round(coords[i][1] - positiveLength),
|
3602
|
+
coords[i][0],
|
3603
|
+
ma.round(coords[i][1] - positiveLength),
|
3604
|
+
coords[i][0] + halfwidth,
|
3605
|
+
ma.round(coords[i][1] - positiveLength),
|
3606
|
+
color
|
3607
|
+
);
|
3608
|
+
}
|
3609
|
+
|
3610
|
+
if (typeof errorbars[i][1] === 'number') {
|
3611
|
+
|
3612
|
+
var negativeLength = ma.abs(this.getYCoord(errorbars[i][1]) - this.getYCoord(0));
|
3613
|
+
|
3614
|
+
pa2(
|
3615
|
+
co,
|
3616
|
+
'b m % % l % % l % % m % % l % % s %',
|
3617
|
+
coords[i][0],
|
3618
|
+
coords[i][1],
|
3619
|
+
coords[i][0],
|
3620
|
+
coords[i][1] + negativeLength,
|
3621
|
+
coords[i][0] - halfwidth,
|
3622
|
+
ma.round(coords[i][1] + negativeLength),
|
3623
|
+
coords[i][0],
|
3624
|
+
ma.round(coords[i][1] + negativeLength),
|
3625
|
+
coords[i][0] + halfwidth,
|
3626
|
+
ma.round(coords[i][1] + negativeLength),
|
3627
|
+
color
|
3628
|
+
);
|
3629
|
+
}
|
3630
|
+
}
|
3631
|
+
}
|
3632
|
+
|
3633
|
+
co.restore();
|
3634
|
+
};
|
3635
|
+
|
3636
|
+
|
3637
|
+
|
3638
|
+
|
3427
3639
|
/**
|
3428
3640
|
* Trace
|
3429
3641
|
*
|
@@ -3697,6 +3909,7 @@
|
|
3697
3909
|
function iterator ()
|
3698
3910
|
{
|
3699
3911
|
RG.clear(obj.canvas);
|
3912
|
+
|
3700
3913
|
RG.redrawCanvas(obj.canvas);
|
3701
3914
|
|
3702
3915
|
if (frame++ < frames) {
|
@@ -3829,6 +4042,8 @@
|
|
3829
4042
|
|
3830
4043
|
RG.clear(obj.canvas);
|
3831
4044
|
obj.trace2({frames: frames / 2}, unfoldCallback);
|
4045
|
+
|
4046
|
+
return obj;
|
3832
4047
|
};
|
3833
4048
|
|
3834
4049
|
|