From 18e3bc06240b8444a6ed3335b8cd510bed23f6c9 Mon Sep 17 00:00:00 2001 From: L M Date: Thu, 21 Nov 2019 19:48:31 +0100 Subject: [PATCH] Allow filling above and below with different colors (#6318) Two colors allowed : first one to fill above the target, second to fill below Tests added Docs edited --- docs/charts/area.md | 25 ++++ src/plugins/plugin.filler.js | 137 ++++++++++++++---- .../fill-line-boundary-origin-span-dual.json | 54 +++++++ .../fill-line-boundary-origin-span-dual.png | Bin 0 -> 17450 bytes ...ill-line-boundary-origin-spline-above.json | 54 +++++++ ...fill-line-boundary-origin-spline-above.png | Bin 0 -> 10011 bytes .../plugin.filler/fill-line-dataset-dual.json | 48 ++++++ .../plugin.filler/fill-line-dataset-dual.png | Bin 0 -> 6188 bytes .../fill-line-dataset-span-dual.json | 71 +++++++++ .../fill-line-dataset-span-dual.png | Bin 0 -> 14823 bytes .../fill-line-dataset-spline-span-above.json | 66 +++++++++ .../fill-line-dataset-spline-span-above.png | Bin 0 -> 16842 bytes .../fill-line-dataset-spline-span-below.json | 66 +++++++++ .../fill-line-dataset-spline-span-below.png | Bin 0 -> 12119 bytes test/specs/plugin.filler.tests.js | 2 - 15 files changed, 495 insertions(+), 28 deletions(-) create mode 100644 test/fixtures/plugin.filler/fill-line-boundary-origin-span-dual.json create mode 100644 test/fixtures/plugin.filler/fill-line-boundary-origin-span-dual.png create mode 100644 test/fixtures/plugin.filler/fill-line-boundary-origin-spline-above.json create mode 100644 test/fixtures/plugin.filler/fill-line-boundary-origin-spline-above.png create mode 100644 test/fixtures/plugin.filler/fill-line-dataset-dual.json create mode 100644 test/fixtures/plugin.filler/fill-line-dataset-dual.png create mode 100644 test/fixtures/plugin.filler/fill-line-dataset-span-dual.json create mode 100644 test/fixtures/plugin.filler/fill-line-dataset-span-dual.png create mode 100644 test/fixtures/plugin.filler/fill-line-dataset-spline-span-above.json create mode 100644 test/fixtures/plugin.filler/fill-line-dataset-spline-span-above.png create mode 100644 test/fixtures/plugin.filler/fill-line-dataset-spline-span-below.json create mode 100644 test/fixtures/plugin.filler/fill-line-dataset-spline-span-below.png diff --git a/docs/charts/area.md b/docs/charts/area.md index 824a469e8..d18f6bdb8 100644 --- a/docs/charts/area.md +++ b/docs/charts/area.md @@ -32,6 +32,31 @@ new Chart(ctx, { }); ``` +If you need to support multiple colors when filling from one dataset to another, you may specify an object with the following option : + +| Param | Type | Description | +| :--- | :--- | :--- | +| `target` | `number`, `string`, `boolean` | The accepted values are the same as the filling mode values, so you may use absolute and relative dataset indexes and/or boundaries. | +| `above` | `Color` | If no color is set, the default color will be the background color of the chart. | +| `below` | `Color` | Same as the above. | + +**Example** +```javascript +new Chart(ctx, { + data: { + datasets: [ + { + fill: { + target: 'origin', + above: 'rgb(255, 0, 0)', // Area will be red above the origin + below: 'rgb(0, 0, 255)' // And blue below the origin + } + } + ] + } +}); +``` + ## Configuration | Option | Type | Default | Description | | :--- | :--- | :--- | :--- | diff --git a/src/plugins/plugin.filler.js b/src/plugins/plugin.filler.js index 8f652aba8..7209a104b 100644 --- a/src/plugins/plugin.filler.js +++ b/src/plugins/plugin.filler.js @@ -56,7 +56,8 @@ var mappers = { // @todo if (fill[0] === '#') function decodeFill(el, index, count) { var model = el._model || {}; - var fill = model.fill; + var fillOption = model.fill; + var fill = fillOption && typeof fillOption.target !== 'undefined' ? fillOption.target : fillOption; var target; if (fill === undefined) { @@ -235,50 +236,121 @@ function isDrawable(point) { return point && !point.skip; } -function drawArea(ctx, curve0, curve1, len0, len1, stepped, tension) { - const lineTo = stepped ? helpers.canvas._steppedLineTo : helpers.canvas._bezierCurveTo; - let i, cx, cy, r, target; +function fillPointsSets(ctx, curve0, curve1, len0, len1, area, pointSets) { + const fillAreaPointsSet = []; + const clipAboveAreaPointsSet = []; + const clipBelowAreaPointsSet = []; + const radialSet = []; + const jointPoint = {}; + let i, cx, cy, r; if (!len0 || !len1) { return; } + clipAboveAreaPointsSet.push({x: curve1[len1 - 1].x, y: area.top}); + clipBelowAreaPointsSet.push({x: curve0[0].x, y: area.top}); + clipBelowAreaPointsSet.push(curve0[0]); // building first area curve (normal) - ctx.moveTo(curve0[0].x, curve0[0].y); + fillAreaPointsSet.push(curve0[0]); for (i = 1; i < len0; ++i) { - target = curve0[i]; - if (!target.boundary && (tension || stepped)) { - lineTo(ctx, curve0[i - 1], target, false, stepped); - } else { - ctx.lineTo(target.x, target.y); - } + curve0[i].flip = false; + fillAreaPointsSet.push(curve0[i]); + clipBelowAreaPointsSet.push(curve0[i]); } if (curve1[0].angle !== undefined) { + pointSets.fill.push(fillAreaPointsSet); cx = curve1[0].cx; cy = curve1[0].cy; r = Math.sqrt(Math.pow(curve1[0].x - cx, 2) + Math.pow(curve1[0].y - cy, 2)); for (i = len1 - 1; i > 0; --i) { - ctx.arc(cx, cy, r, curve1[i].angle, curve1[i - 1].angle, true); + radialSet.push({cx: cx, cy: cy, radius: r, startAngle: curve1[i].angle, endAngle: curve1[i - 1].angle}); + } + if (radialSet.length) { + pointSets.fill.push(radialSet); } return; } - // joining the two area curves - ctx.lineTo(curve1[len1 - 1].x, curve1[len1 - 1].y); + for (var key in curve1[len1 - 1]) { + if (Object.prototype.hasOwnProperty.call(curve1[len1 - 1], key)) { + jointPoint[key] = curve1[len1 - 1][key]; + } + } + jointPoint.joint = true; + fillAreaPointsSet.push(jointPoint); // building opposite area curve (reverse) for (i = len1 - 1; i > 0; --i) { - target = curve1[i - 1]; - if (!target.boundary && (tension || stepped)) { - lineTo(ctx, curve1[i], target, true, stepped); + curve1[i].flip = true; + clipAboveAreaPointsSet.push(curve1[i]); + curve1[i - 1].flip = true; + fillAreaPointsSet.push(curve1[i - 1]); + } + clipAboveAreaPointsSet.push(curve1[0]); + clipAboveAreaPointsSet.push({x: curve1[0].x, y: area.top}); + clipBelowAreaPointsSet.push({x: curve0[len0 - 1].x, y: area.top}); + + pointSets.clipAbove.push(clipAboveAreaPointsSet); + pointSets.clipBelow.push(clipBelowAreaPointsSet); + pointSets.fill.push(fillAreaPointsSet); +} + +function clipAndFill(ctx, clippingPointsSets, fillingPointsSets, color, stepped, tension) { + const lineTo = stepped ? helpers.canvas._steppedLineTo : helpers.canvas._bezierCurveTo; + let i, ilen, j, jlen, set, target; + if (clippingPointsSets) { + ctx.save(); + ctx.beginPath(); + for (i = 0, ilen = clippingPointsSets.length; i < ilen; i++) { + set = clippingPointsSets[i]; + // Have edge lines straight + ctx.moveTo(set[0].x, set[0].y); + ctx.lineTo(set[1].x, set[1].y); + for (j = 2, jlen = set.length; j < jlen - 1; j++) { + target = set[j]; + if (!target.boundary && (tension || stepped)) { + lineTo(ctx, set[j - 1], target, target.flip, stepped); + } else { + ctx.lineTo(target.x, target.y); + } + } + ctx.lineTo(set[j].x, set[j].y); + } + ctx.closePath(); + ctx.clip(); + ctx.beginPath(); + } + for (i = 0, ilen = fillingPointsSets.length; i < ilen; i++) { + set = fillingPointsSets[i]; + if (set[0].startAngle !== undefined) { + for (j = 0, jlen = set.length; j < jlen; j++) { + ctx.arc(set[j].cx, set[j].cy, set[j].radius, set[j].startAngle, set[j].endAngle, true); + } } else { - ctx.lineTo(target.x, target.y); + ctx.moveTo(set[0].x, set[0].y); + for (j = 1, jlen = set.length; j < jlen; j++) { + if (set[j].joint) { + ctx.lineTo(set[j].x, set[j].y); + } else { + target = set[j]; + if (!target.boundary && (tension || stepped)) { + lineTo(ctx, set[j - 1], target, target.flip, stepped); + } else { + ctx.lineTo(target.x, target.y); + } + } + } } } + ctx.closePath(); + ctx.fillStyle = color; + ctx.fill(); + ctx.restore(); } -function doFill(ctx, points, mapper, el) { +function doFill(ctx, points, mapper, colors, el, area) { const count = points.length; const view = el._view; const loop = el._loop; @@ -289,8 +361,10 @@ function doFill(ctx, points, mapper, el) { let curve1 = []; let len0 = 0; let len1 = 0; + let pointSets = {clipBelow: [], clipAbove: [], fill: []}; let i, ilen, index, p0, p1, d0, d1, loopOffset; + ctx.save(); ctx.beginPath(); for (i = 0, ilen = count; i < ilen; ++i) { @@ -310,7 +384,7 @@ function doFill(ctx, points, mapper, el) { len1 = curve1.push(p1); } else if (len0 && len1) { if (!span) { - drawArea(ctx, curve0, curve1, len0, len1, stepped, tension); + fillPointsSets(ctx, curve0, curve1, len0, len1, area, pointSets); len0 = len1 = 0; curve0 = []; curve1 = []; @@ -325,11 +399,14 @@ function doFill(ctx, points, mapper, el) { } } - drawArea(ctx, curve0, curve1, len0, len1, stepped, tension); + fillPointsSets(ctx, curve0, curve1, len0, len1, area, pointSets); - ctx.closePath(); - ctx.fillStyle = view.backgroundColor; - ctx.fill(); + if (colors.below !== colors.above) { + clipAndFill(ctx, pointSets.clipAbove, pointSets.fill, colors.above, stepped, tension); + clipAndFill(ctx, pointSets.clipBelow, pointSets.fill, colors.below, stepped, tension); + } else { + clipAndFill(ctx, false, pointSets.fill, colors.above, stepped, tension); + } } module.exports = { @@ -375,7 +452,7 @@ module.exports = { beforeDatasetsDraw: function(chart) { var metasets = chart._getSortedVisibleDatasetMetas(); var ctx = chart.ctx; - var meta, i, el, points, mapper; + var meta, i, el, view, points, mapper, color, colors, fillOption; for (i = metasets.length - 1; i >= 0; --i) { meta = metasets[i].$filler; @@ -385,12 +462,20 @@ module.exports = { } el = meta.el; + view = el._view; points = el._children || []; mapper = meta.mapper; + fillOption = meta.el._model.fill; + color = view.backgroundColor || defaults.global.defaultColor; + colors = {above: color, below: color}; + if (fillOption && typeof fillOption === 'object') { + colors.above = fillOption.above || color; + colors.below = fillOption.below || color; + } if (mapper && points.length) { helpers.canvas.clipArea(ctx, chart.chartArea); - doFill(ctx, points, mapper, el); + doFill(ctx, points, mapper, colors, el, chart.chartArea); helpers.canvas.unclipArea(ctx); } } diff --git a/test/fixtures/plugin.filler/fill-line-boundary-origin-span-dual.json b/test/fixtures/plugin.filler/fill-line-boundary-origin-span-dual.json new file mode 100644 index 000000000..968c4ae87 --- /dev/null +++ b/test/fixtures/plugin.filler/fill-line-boundary-origin-span-dual.json @@ -0,0 +1,54 @@ +{ + "config": { + "type": "line", + "data": { + "labels": ["0", "1", "2", "3", "4", "5", "6", "7", "8"], + "datasets": [{ + "backgroundColor": "rgba(0, 0, 192, 0.25)", + "data": [null, null, 2, 3, 4, -4, -2, 1, 0] + }, { + "backgroundColor": "rgba(0, 192, 0, 0.25)", + "data": [6, 2, null, 4, 5, null, null, 2, 1] + }, { + "backgroundColor": "rgba(192, 0, 0, 0.25)", + "data": [7, 3, 4, 5, 6, 1, 4, null, null] + }, { + "backgroundColor": "rgba(0, 64, 192, 0.25)", + "data": [8, 7, 6, -6, -4, -6, 4, 5, 8] + }] + }, + "options": { + "responsive": false, + "spanGaps": true, + "legend": false, + "title": false, + "scales": { + "xAxes": [{ + "display": false + }], + "yAxes": [{ + "display": false + }] + }, + "elements": { + "point": { + "radius": 0 + }, + "line": { + "borderColor": "transparent", + "fill": { + "target": "origin", + "below": "rgba(255, 0, 0, 0.25)" + }, + "tension": 0 + } + } + } + }, + "options": { + "canvas": { + "height": 256, + "width": 512 + } + } +} diff --git a/test/fixtures/plugin.filler/fill-line-boundary-origin-span-dual.png b/test/fixtures/plugin.filler/fill-line-boundary-origin-span-dual.png new file mode 100644 index 0000000000000000000000000000000000000000..eeecfcc1fc56a11c1d394add37426642ffa3e627 GIT binary patch literal 17450 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 SOU|EX00K`}KbLh*2~7Y?X%8;| literal 0 Hc-jL100001 diff --git a/test/fixtures/plugin.filler/fill-line-boundary-origin-spline-above.json b/test/fixtures/plugin.filler/fill-line-boundary-origin-spline-above.json new file mode 100644 index 000000000..751945e2e --- /dev/null +++ b/test/fixtures/plugin.filler/fill-line-boundary-origin-spline-above.json @@ -0,0 +1,54 @@ +{ + "config": { + "type": "line", + "data": { + "labels": ["0", "1", "2", "3", "4", "5", "6", "7", "8"], + "datasets": [{ + "backgroundColor": "rgba(0, 0, 192, 0.25)", + "data": [null, null, 2, 4, 2, 1, -1, 1, 2] + }, { + "backgroundColor": "rgba(0, 192, 0, 0.25)", + "data": [4, 2, null, 3, 2.5, null, -2, 1.5, 3] + }, { + "backgroundColor": "rgba(192, 0, 0, 0.25)", + "data": [3.5, 2, 1, 2.5, -2, 3, -1, null, null] + }, { + "backgroundColor": "rgba(128, 0, 128, 0.25)", + "data": [5, 6, 5, -2, -4, -3, 4, 2, 4.5] + }] + }, + "options": { + "responsive": false, + "spanGaps": false, + "legend": false, + "title": false, + "scales": { + "xAxes": [{ + "display": false + }], + "yAxes": [{ + "display": false + }] + }, + "elements": { + "point": { + "radius": 0 + }, + "line": { + "cubicInterpolationMode": "monotone", + "borderColor": "transparent", + "fill": { + "target": "origin", + "below": "transparent" + } + } + } + } + }, + "options": { + "canvas": { + "height": 256, + "width": 512 + } + } +} diff --git a/test/fixtures/plugin.filler/fill-line-boundary-origin-spline-above.png b/test/fixtures/plugin.filler/fill-line-boundary-origin-spline-above.png new file mode 100644 index 0000000000000000000000000000000000000000..c0b25469d6900651f0c026224412ceed61fef591 GIT binary patch literal 10011 zc-rl{=R*_S^FF*GKoF!!?+7BjC`F_OL8?G#(u*QR5CK7Y2_QvL0g>LKfFdA8dJig1 zL?kF3LXSvG=p~Tf;{Eyl56_Ed-z1yl%*>g&X6Bl+d5SR7p{3@e1^|FoPglzn0LZ|% z5P*sjeCbO5;RXQwfS#6yc~I{9^r|IuV7nCFjYFRO@`C$YCMH3BWRNDa^oyUhV@Q4x zD%wXiX^C+Q3RozmydT4r5<_MvChq}uAYn$4mF#4MbLYc+b zI#)FRWRqE}#GcxtCHk8gVw~C|H9EvZAO)afODhT;)EgHv|07N6+SvzKV9uC*idVPta z&LJjU+WwCcEqPOh&;1uWq54`{_w<-DgA|@1Dxx15ur+A-#xqQG-$5oMU>txbmf_3@ z>zH~h8HLw!TGWYI<^=!ADH9`OmcE9hC1RYj)^z16D=)b|^RLS@7NClktZ=8BRBtRX zZ3ow>7#K}#5QxE&EZhCB{UhJ9c*q@IpSC6>B$z%rmoXwzGL7l-_`>|sS;g#VTM*n@ zLUc&?xdwtY|2U>Vh>_9cRt?wwqBTk}?{zq}nC4N9kbpo48QVSw@BXFBqk54)w6wGU zUY5uT3hJwp7jB4H9?1#|yp?R+IU(WJdsp5>@smsKwLjK=JQXia zq5xGvss9Gc*YF#*0vs0aG?aU7DV`?u%A{u6^~^Usm}2wwt=qYBLraV9^L&GjoO^ND zXMRS;;^$r7lPc2TYYdDjwABae1){f3?2Z%#1O#$2zb-b9TP)2}bo)^83kbwiAMoVW zVS3mY8LiJJs!Psip}*E(dN>&w&zT{_-(Sfq*6_1N<+A(D-$o4T@`Y+?UDDE6uZ445 zxhiTpbtO4LMAaJgguT=KCv{PhhJe5YetY=yuyc``V(YE&P7u53+M}CioaM1bJk)2GV!7$J@CsY{}q`LeK0=7 z|GS-&8R=K-mMu;)0B$7RyLORX%tN=P{G8ujT;c~*fwUk->6ei~+4=T4t^xPU-> zsuX88<}hoApr@rpSq<-#VSPdAmGtlSi0kX@aIzFf_tu;RARquc$6s|LW;vRIIcrfhc)t9;h~5DVpb^y@ukHVS%bV4`V}OClFfs}mX?WTEX{B4a zduNT2HrwEc|FXc_uea`QHFf=1O_pNqzHKcYF2lrV62|o6?&`!{; zK(iAP?tT#^fUizx5D{Zp%Cn$E`>XtXP*wEmU{fu z;wh+Ot1ant`KGkAYO5G-*v_jK6fVGZVkq=ut4%J;5XyHn@^f`58G?Be9*_%Mhu_0J zc;rf|!9^*H7n9Pov^hZ!P}KSEwd3=s#dI{h%n^g)r(fMX%`%UI1#piVDeXItvX25* zKs(b^R-meCDNFE03jR+l3Cxg`PX}8*^mx3>EL{WqvQF05ML&a&)T5}hIEHUad)PhM zsHbjBsu^G8|4=tm+G}izZjKYa6R2rk(>R|rvi!Qb0*&w`1+w@^(;u|Uonjm%=&6z3 z5gwm87l>$Es9jh_M#aQ$6Aw-4V>$ z*f5B{H}H zyO;`;@@)IhjNg`m_6pC1%tZYDkg7BaC?Z1aX&d)*=cKblG(48;)im3WIps2c4K7N?D!{ zS+QB7k#WBCK!t{7ReiA+!C;>-!wXzCqA4O~i zebR&v5I8$1s1s5QQ`+N?NVWWgn*pyH>?JQ9TLT@4X&vmXiw{FDB+_0^^C%Ht+6{j-<^pgHg%h z1?(QGG3;SVzmHGY`o9A*IrZteo-W~`QkP}PU+-j`C;tSk!@&3iQyFel7Dbeh7C2^) zW422?~ik<}_7M9ns_d$$R((89j+WFNae8iEp> zBjns+X3F15g!6cmR(naX5OPgVgC|*y{=2ep<6;9%!!;MYu@Vg(5aD>c@#FR5kgoCR z;lA?_9j=%8>1qe;+kT8}mcoIV?==tosQ4HD?4bDsO-l|gbrzK{?;j=!C(;2!2NT;B zytnSA@Q+dyIo_ZWs^)S~N>h&quEtSHIvyQ&Se5TCB0>=eaTfFHp#sD25dO5A(LyIe z&?vhK8r_Ubr?Th{Ock+kE*rq~P-)-Ri`;h>dh)XjvzeL)_FC64DFQ7}bN_x{Q$R_F zkHFkxNUQ3qJPiaPcQ_c({GF`H>TB6)kDZRcnKKeltMLXEmr z&DG6jN5H*XdfYi=)x_)M$qt}jB=K!Y;$Y_#K8di-8uz^ZiW7L7NZvoVk*|M`N@P`R zmCLsOF~rDd%?(;bEckA}QD~%Ra#?~|mS1U|V_rfZ7k;{+hk?RBC6YHup$|EF4g~1G z=;5$L=Ox~P676#|7k5f`_En!U)89=t9>@jT$1rOB+Hs9;FrXWd;?(~p-Iazr;W@rrW}7$v&Q-tA{OCCUmYn->&KZ9Sb!VaWc>fiL8U&IT1v>x6{guVQ z1e|sER3n10*5|aINg%3>UDxwG2$5e3r^G4R=UGcHH$lsrX~y=32BoMOqs^G^wz$@!ZU{QNHu%>`YSwhpp7W*Hk$k9>y3MeLQA?WGsymV&Vgsb+v zbrw$z>GhFR4G8&O5+Ke8RH^~`0&r_NdSJ8xzHtrdC1q%PI71?TC3vEyZ%V1UD16%{ z(Kbh)Ob8lx9vHeAJ);Ca&@sQ)@$c%HbeKGFswC5O* z{9Qm}gKakV*4+Ay*-i&Sv~d7nCDNl!iFota84LT^+hiU8y;A%uIRIAkwA4s}kjqeEM=Vx7LRA)|IkRpk@X;NBhNM>En{>w(=+*!VlU%C5`3~ z?HR~FKUKyc9i$3FQp86O(cs%>Vn2IIjytlc)j3^i{z$`2;}Aj@1;2DMfSn@b5_aL(mldv zRz9zzK#hk7ei=cX2Im2q;=MXQ5sN$#;-5NLesEpXS;CH24* zlm#o5SP5Hk2TuEDOuf$0i9AN`ouk6m360B>R$3iS8)ue|KfvsM7pd`11x=N)2fj(& z=2U8mZlj0oOTVvr)LTD1P=)Zgd<5?8uDxhbV^^lxE7@sC{xjfa2$<>WFz!}pg5$dp z6pL=;DD98iEBj+qshMFvO7wr=wPtSzR9cS?L8MT5fL%xNze8UNVwqV72E(M?$#gc!9E)z!}iguki^(a}dw z8FLhbY>DX{09er*S%*+seFR)->m$&b668h6)zhPr1JG~CJ?-O1%41>nMeBpqe z8*icah!2?O^0a$aFQzJeBK_$y3h}qj@Qz2!&i-`yt-Bb;NoVnrH0n~T!F|^U>sBt| zhT)+mkwb{9UEUudP72km=bE7#G~w3a@@J}?C-6_btG5E@0(|(|xf!H`Tj+spzv9Mo z^d`?k$718hqP?r=7(KBK58uJi4uUY`_(i9dubzIr%j&)^d(y79>WaDp4@O%pEB7xY zbCrC2Sg~=dct=th&|>mTaq5YBNx2e}YT~kf(CGVNE6J6%y@EwLM3@$M5u;%z>UD$M zWqZCG$~>#)&`IhHAwmb)Ljr10kz`!YrAY1@P;1xrdRIAhp_4qegiu0!qIChKS3K{g z=HScxg&8{UN{24*6$pAW@uYEXVq(IKRZ($R!M@Ri&-k##M>#XGqc)MPZI}}ICk-ha zkL>ZIFFv3PWze7#2!aHzx9o>YP+JA?i70pi34n_u)bo32cs=%5eVn;W$2M^?9y1rv zk3duj#QJ|A!HYVM2-msQJ39E-qyLXjD#C{a zAa)-g&yDy9K#`y!>Rswx`OW(m+DlZCW$QYGi6-syl(={31sb-XusN@IsM+!kV&L$R$R!*B-zC`Nj)SxVCDys2y4Ma8vO+WzlA_GTr#|`=8z&na&Lz!a2y`J{%N)#!EQhg>3dBw zUp5a8xA-f5#G?*qEqL~alYTaR9$oIpY<7Ok18$lp%fU|h_7n9>7XOm`bHR^n6CxME z#gM}sXIk9x3qZ^gVgq?Snh9$Jv=G76SZ#j(}nBIhmXh%MWZo?!Vq&0}X4Upfl|$;u>9j zC3)J^hmK+1`Lc2$$Mg zgbSt1|J)ctjBZqfti=5Kalf-Ndsi%y?IA31*64kHR|j2SX_;@ebk=;58z6!|_#7N> zTk(`FQPRy#d$Qr#IdxGtYBR2#utDdnZvWdVq>7iH zUs48E9=G}ry&nJ=3{P@*AxrB^s&;G)k<048jR#edNQ&wD1h?6W2Dzx45h3T#)QqJk zl5xRe+|Qk#4IGy@;sylJG#Hl-tDOmc5yL=|f!M_-=dq&#Nc6KH%1`a(?b%=4=wL-O zYF;p)Lt1=lsCG%)p9Fwvi9abTXcE%E)_33huqAn-0=eq*zBwQ&^l*S32zV{;=s4nY z$Gr7t>HrMJnX3R~R^uW+1p|#cK`*HP2Cw)<=lyH41uKLZX}op0}!c8w9*5;Dy4Yde|Zk6G)N- z0b`*B`E?@>;FK%qcJre1&7?L6vw8kbaOb=6QdIh?Z@J;!M|qT9k>#Yp?yYXtl^Zyq zN^8Q%mGt(LvZJRW=BGy#^w-sMbI(Q-vAdl1r$Z_)TGF1rCaHz}EDaxuLsh>9CjUL2jhrCQj1u+YoLexM~V zlki7#rJpK3sjXba0Sue`KVSI`SURdOg9Nge-gM>pg8og>hkH5yQvcysY#8Bmrr>+q zi8dWj-zM%9@$O~q#A6`g`-5X~2fXhobCuxu=!c-=f`>z>brXd2S58XiUxT1pGemyS zX`n4#ot*7Ty&4^GZgGe3(c4jT^U6w$+128Mlk2koidh)3N&NOv(Y5^B?;33+6QswdiWcHQRuGS;Xz{M7ZQW+nNYy4)BWMwRvgdHZ(TkoSM9ri&mF=fgvR${ z*YkN}mw#JZEmOuaNPACHB6Y^8wIoiab~ll~F<{1RKn8`5Y>EeIzc2iwlkOk?q)QRB z{AP1Q{g3-Dr`ZQ@*rdD3sa)d*mO&042F?uL&gG^@NLfKsDEdYNlyyO}BWtPP8&I{4 z7=E!7&@SmS2UZ^LS;zD-xA67^T2_+etMI3-MqTeo)?!d=sLr(8G+R->O3GrxXzZ4U za^(-{a5~@$CDJ|ODU+Aw>{@IzD4943QEd$CUfcTL2BdH2HAy(kcAp1a(EG*kd$J7H z6@Kx;l4KGc^g$AcWxXY-Dz%x>QrCzAR&{lm(sIv0%QpY4o*a9gy5Zm+CG3C_H!hh>zrbm21dd*+W^aOIC9~AjyzOd)~cPf=+ee}NU-PT{?<^wgAAi;bL4oF4=vpX8_ zN5I%~Wl5IIwKOr3ISkOTqtJbz`7RuNl7Und& z%wqy`qJOeKw5UJ4dTph=U9Kimns6rcE5ILxmeXDrb*7p z%6pb}2eA&tgAjN;WVXi^27 zyOhJ?BPcp|N}61ND~e=&A9QLx+;{aA4Bp4%G*n<>o;#T7wqxk&>zV35*FtIE`5FCY zwEoye%FQyD)SCdh47C8d3|F!m#I+Z?Se3Qp7@Opf#2P8*Mb+-S4?%$hs`7)XvZTZE zJQVFbPD`xPNSZts35@7v)Xy~0-;><25k5PRKve%rRaFqbWnN>C9)|7K6W_< z$+5H<)7-3k7=OY}TksWs6Rf>woMbx)dy{aZVG)qIhTVkmK7_P~DCBRE*s4C0xp?Vr zklC_=?Z}{j2_rh)(!Baz>Xf+W{AMaUf4@k-0E+B{BJ(P!*sY0Ojq)KE-q2@=MXGCm zkz{XQdjfItbLmkA8Ra3w>EQ+sdHVpxspr65C^|d`d)#5Z0V(#YBoird!Qf*2^#@1t z7hKa$^Ycp+ZC8!k@*W3?RM3Vf0*X#RrZSb)V|qy8Hxh$dj{BFc)#`6pFvu`%HUH25 z2%T4;0qPHcx0*tK@j}zDE^o-<8O8+de`&jJ*Z^JYk%k72w;c_KD4Z>iH#hg6d#MMT zx>)XTwPz+lk+Cp9oFwO@b;#E#JiP9A`=}??mHg&I*soBaYFaXCtE)qociFp3T7krq z#exy?y2lF$QCle}1BnADB zgv+MPlYDv5$;+Taj^DiFnlIi+00AtlnSaxBFjT~Y2)o)}Of#7Wa_=djnWVqm2Ha* zFnt7YxOyylnjSa09*_m%&Jcw4p(-6rP1`edsDeZd3M z@tKR$yq}%HAXdT0d%odHHd^C0l*G>i#Rt2d)e3uh3hPu3e&2xPO+xtHL|ZaR#NPHc zI8_<$`l-fN_*o(*{6{H0DNdQPEE?vhXQDxNX{{u=E5Ez`L1JxkWGuwR?^)7R-6KW7 z3N^d%uNGhbtE2`W^sRv*V-5y_RA<5_6Xr8od487sS6wPM!ZcfFy%YiFg>|!#@ODY6 z^L85dQ~mp-(>k2Z%yyI`pggpg;+5C6;AD7tpDl8zH^8yqrOa#M3xt0FhU_s@Iq>9G z4TswAevsg;)hFmU@2w+2R%Aq+fz!wAr4E1eH9(Ca_?2R6 zJNn=Af0xWRmPSSSl=fhxC6s zA^+xia>LF8V#D#eQn>%OH66T-C^sO17<+X)fBoRlU}Kf8jt;D>Ynt$uFE9(BAx=g%jA6r~|0QQ+ z?doH~+lEdc*%`k?>cT{yLO$$5NHoeVY)1|=TER*FSrd}NV#c*yq0*5`68HsB06HCt z%xZvUUjY`agWcdX%%r3Yl5{}|JMeZz$FpI4kn7;WaXjns!-#~aLQJtohX3Z@ibPy} z`_$i>O@oYzw9gPUnb3F0Y@ghnpzr@P#3FD*p75#R0C3t{BE@2&X0{!joa;E2Nb)1U zq;{u?+`scMT^{l0EBPwK{yH8FwVyTL@g?ZX$=-M<0MZXSz;&9=eFVT`7)dOkBs`GZ zaWtR~0F)zV{{@I~95u*@loR&7)B9YR;xu|dvbw!s^X_7Tf2YlLg2Yk3w>sl1DVwr5 zD3U@y6N*l~vKj!dp+xey42*X5&wPf$Ma|#)69xx`%17Pxp-VIk*zxl$k`QFD| zt4ZR+vdtg^@I5yjz$$Ww4xs6NJqa23Z_dr0s4<(5_3nf?UEc`dl2N&2e?YUO!l?|_ zg87q|4xK@<{zEob&YngXtS|RioN@z-z*rz4vlIZAg&_x6cs8H0wNt>5miX~=D{mde zrvLo;9qQ{;jwRuiu|97Nn;(2kfAd1~cOrHk$7_HKJ-!b306t%VpU>vRjsBTXwX{cG zg$59=o&BWk1)V^WV|Bf0C1kcTs964V^FF~zY%*L~5(M7p^r~71;&5|)`?+5=9}J)a z=-2_HJHPPYW_SUK24O&&)RRZIlTVTz;Tv)W4wwS+3>QN~pzW!cF3&XcYnFjhtr!yi z2@~IV|5=vU&;cO7%8`-VD1x9Lg_2Rx1HlKi8qH%&dNgFvkg3a=fA)7+^(l)IN2%}o z)g7{mkyKUF*qWN?|0(AJY-EVdsgy{vq^>>k*(K7YIOJ)RZLd=HgF_N@kk5Fz<>-tu z(pX*n!WCC$hqM1;{5sNYS14Wm-+FF9N#-bjm=Z8pKgVx%%F(!*CbexIhrCxwPNZmB z?+dexOvLzMge0;sKQO1l{UoaXf-^k5|7Uid0$}A~3^<%#3#S5i3VU_Z9+6-sT$E@f za8@`aBIy8b0OJF=cmJ&YXJhP{jgdTYNLpWd$bR)y&bR$t)^A5e{bOt7kDzt`Ti_44 z_w-I0aRCxF!brs7?^ox;c$34D1c)dA;kE$x$< zn&M`hF-s5pn*#!WtJn7#cep*zA^Ly?BsmTWr-_qR_5!ND{#(hyd*Z3pJh$1Fxa1&s zraVVvGeyc>P_{j!^)1L0W`|}@aZ`okEI9R7Qn%j6{+D3zwOT><-U{Tav-BqmB}=e7 z?XVUGnbER@P3TT5DYDw`ChB%`$qW5p&)~r%`aMyO;Nnt}=E^7kyJsEh$#vlCi7axX zg-o9wnE$sva=X@Fk1KE6eIr*LAbQ_xSUH@2{MQ0mKi?C0-2ZXo7~U+B$N9hXBowoB zUdvSg5;o7F`$=&^2@9v@d!!^`qZVqJv$Kkl4);GMhubObXSwJD;GN~BqEhxjJTM1^ z&ABDPq>B52s;;>V5)OAkZ1UAKNj+b2T?{$8x&9(O(jkw;vl8te@_&Z%@x^I_OCMCM z1qs_z0@r4?3^G2Ao8WVaoSq&pj_8z^#NhpJ(wE&2y}{8}$o}OD!~dCyyA-Dh0%c3J z-5BEnlziz$`d>6yG&JAk+T{uOY=NBH{bDh+h28LMlCXcia^bxBBJRCk`;%+pd9uiq zFy&(Un8{rtwhTLM^B|Ucd^J#yNXkAQH~f1vJ}$~8^GS2gKi`CO?8Z2e{ykC}>-=JE zx~zUVRC|kFF84?3X+x12Tg!KGD literal 0 Hc-jL100001 diff --git a/test/fixtures/plugin.filler/fill-line-dataset-dual.json b/test/fixtures/plugin.filler/fill-line-dataset-dual.json new file mode 100644 index 000000000..6ccdf228f --- /dev/null +++ b/test/fixtures/plugin.filler/fill-line-dataset-dual.json @@ -0,0 +1,48 @@ +{ + "config": { + "type": "line", + "data": { + "labels": ["0", "1", "2", "3", "4", "5", "6", "7", "8"], + "datasets": [{ + "backgroundColor": "rgba(255, 0, 0, 0.25)", + "data": [0, 1, 2, -1, 0, 2, 1, -1, -2], + "fill": { + "target": "+1", + "above": "rgba(255, 0, 0, 0.25)", + "below": "rgba(0, 0, 255, 0.25)" + } + }, { + "data": [0, 0, 0, 0, 0, 0, 0, 0, 0] + }] + }, + "options": { + "responsive": false, + "spanGaps": true, + "legend": false, + "title": false, + "scales": { + "xAxes": [{ + "display": false + }], + "yAxes": [{ + "display": false + }] + }, + "elements": { + "point": { + "radius": 0 + }, + "line": { + "borderColor": "transparent", + "tension": 0 + } + } + } + }, + "options": { + "canvas": { + "height": 256, + "width": 512 + } + } +} diff --git a/test/fixtures/plugin.filler/fill-line-dataset-dual.png b/test/fixtures/plugin.filler/fill-line-dataset-dual.png new file mode 100644 index 0000000000000000000000000000000000000000..ae2c77dffba5dd8473f28fc57ed05f86202740c7 GIT binary patch literal 6188 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 literal 0 Hc-jL100001 diff --git a/test/fixtures/plugin.filler/fill-line-dataset-spline-span-above.json b/test/fixtures/plugin.filler/fill-line-dataset-spline-span-above.json new file mode 100644 index 000000000..70b80f6fa --- /dev/null +++ b/test/fixtures/plugin.filler/fill-line-dataset-spline-span-above.json @@ -0,0 +1,66 @@ +{ + "config": { + "type": "line", + "data": { + "labels": ["0", "1", "2", "3", "4", "5", "6", "7", "8"], + "datasets": [{ + "backgroundColor": "rgba(255, 0, 0, 0.25)", + "data": [null, null, 0, -1, 0, 1, 0, -1, 0], + "fill": { + "target": 1, + "below": "transparent" + } + }, { + "backgroundColor": "rgba(0, 255, 0, 0.25)", + "data": [1, 0, null, 1, 0, null, -1, 0, 1], + "fill": { + "target": "+1", + "below": "transparent" + } + }, { + "backgroundColor": "rgba(255, 0, 255, 0.25)", + "data": [2, 0, -2, 0, 2, 0, -2, 0, 2], + "fill": { + "target": "-2", + "below": "transparent" + } + }, { + "backgroundColor": "rgba(255, 255, 0, 0.25)", + "data": [3, 1, -1, -3, -1, 1, 3, 1, -1], + "fill": { + "target": "-1", + "below": "transparent" + } + }] + }, + "options": { + "responsive": false, + "spanGaps": true, + "legend": false, + "title": false, + "scales": { + "xAxes": [{ + "display": false + }], + "yAxes": [{ + "display": false + }] + }, + "elements": { + "point": { + "radius": 0 + }, + "line": { + "cubicInterpolationMode": "monotone", + "borderColor": "transparent" + } + } + } + }, + "options": { + "canvas": { + "height": 256, + "width": 512 + } + } +} diff --git a/test/fixtures/plugin.filler/fill-line-dataset-spline-span-above.png b/test/fixtures/plugin.filler/fill-line-dataset-spline-span-above.png new file mode 100644 index 0000000000000000000000000000000000000000..838a24b5db3f11c9ea0fe9df3eb09b0910d559ec GIT binary patch literal 16842 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 BeRBW+ literal 0 Hc-jL100001 diff --git a/test/fixtures/plugin.filler/fill-line-dataset-spline-span-below.json b/test/fixtures/plugin.filler/fill-line-dataset-spline-span-below.json new file mode 100644 index 000000000..87314029c --- /dev/null +++ b/test/fixtures/plugin.filler/fill-line-dataset-spline-span-below.json @@ -0,0 +1,66 @@ +{ + "config": { + "type": "line", + "data": { + "labels": ["0", "1", "2", "3", "4", "5", "6", "7", "8"], + "datasets": [{ + "backgroundColor": "rgba(255, 0, 0, 0.25)", + "data": [null, null, 0, -1, 0, 1, 0, -1, 0], + "fill": { + "target": 1, + "above": "transparent" + } + }, { + "backgroundColor": "rgba(0, 255, 0, 0.25)", + "data": [1, 0, null, 1, 0, null, -1, 0, 1], + "fill": { + "target": "+1", + "above": "transparent" + } + }, { + "backgroundColor": "rgba(255, 0, 255, 0.25)", + "data": [2, 0, -2, 0, 2, 0, -2, 0, 2], + "fill": { + "target": "-2", + "above": "transparent" + } + }, { + "backgroundColor": "rgba(255, 255, 0, 0.25)", + "data": [3, 1, -1, -3, -1, 1, 3, 1, -1], + "fill": { + "target": "-1", + "above": "transparent" + } + }] + }, + "options": { + "responsive": false, + "spanGaps": true, + "legend": false, + "title": false, + "scales": { + "xAxes": [{ + "display": false + }], + "yAxes": [{ + "display": false + }] + }, + "elements": { + "point": { + "radius": 0 + }, + "line": { + "cubicInterpolationMode": "monotone", + "borderColor": "transparent" + } + } + } + }, + "options": { + "canvas": { + "height": 256, + "width": 512 + } + } +} diff --git a/test/fixtures/plugin.filler/fill-line-dataset-spline-span-below.png b/test/fixtures/plugin.filler/fill-line-dataset-spline-span-below.png new file mode 100644 index 0000000000000000000000000000000000000000..45e15c5d8ad198ef856fa08baf05889c8eccbb6c GIT binary patch literal 12119 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 S4I%>w_%qfw)2q;RM*kmcoJm;# literal 0 Hc-jL100001 diff --git a/test/specs/plugin.filler.tests.js b/test/specs/plugin.filler.tests.js index 0164dc1dd..9b9eb214d 100644 --- a/test/specs/plugin.filler.tests.js +++ b/test/specs/plugin.filler.tests.js @@ -135,7 +135,6 @@ describe('Plugin.filler', function() { {fill: ''}, {fill: null}, {fill: []}, - {fill: {}}, ] } }); @@ -153,7 +152,6 @@ describe('Plugin.filler', function() { false, // empty string false, // null false, // array - false, // object ]); }); }); -- 2.47.2