From ed8295afe775dab96e23f03cdbd3b7fd0a6de3d0 Mon Sep 17 00:00:00 2001 From: MFed Date: Fri, 3 Jun 2016 07:58:27 -0400 Subject: [PATCH 01/16] Adding the ability to specify the tail of an annotation arrow in absolute point in grid terms rather than relative pixel offset terms. --- src/components/annotations/attributes.js | 25 ++++++-- src/components/annotations/index.js | 82 +++++++++++++++--------- 2 files changed, 72 insertions(+), 35 deletions(-) diff --git a/src/components/annotations/attributes.js b/src/components/annotations/attributes.js index a2eaf49d45d..249de85412d 100644 --- a/src/components/annotations/attributes.js +++ b/src/components/annotations/attributes.js @@ -131,14 +131,29 @@ module.exports = { role: 'style', description: 'Sets the width (in px) of annotation arrow.' }, + absoluteArrowTail: { + valType: 'boolean', + dflt: false, + role: 'style', + description: [ + 'Indicates if the tail of this arrow is a point in ', + 'the coordinate system vs a relative offset in pixels.', + 'If *true*, `ax` is a value on the x axis and `ay` is ', + 'a value on the y axis.', + 'If *false*, `ax` and `ay` assume their normal offset ', + 'roles.' + ].join(' ') + }, ax: { valType: 'number', dflt: -10, role: 'info', description: [ 'Sets the x component of the arrow tail about the arrow head.', - 'A positive (negative) component corresponds to an arrow pointing', - 'from right to left (left to right)' + 'If `absoluteArrowTail` is false, a positive (negative) ', + 'component corresponds to an arrow pointing', + 'from right to left (left to right).', + 'If `absoluteArrowTail` is true, this is a value on the x axis.' ].join(' ') }, ay: { @@ -147,8 +162,10 @@ module.exports = { role: 'info', description: [ 'Sets the y component of the arrow tail about the arrow head.', - 'A positive (negative) component corresponds to an arrow pointing', - 'from bottom to top (top to bottom)' + 'If `absoluteArrowTail` is false, a positive (negative) ', + 'component corresponds to an arrow pointing', + 'from bottom to top (top to bottom).', + 'If `absoluteArrowTail` is true, this is a value on the y axis.' ].join(' ') }, // positioning diff --git a/src/components/annotations/index.js b/src/components/annotations/index.js index 60385078844..45203788bd7 100644 --- a/src/components/annotations/index.js +++ b/src/components/annotations/index.js @@ -59,6 +59,7 @@ function handleAnnotationDefaults(annIn, fullLayout) { coerce('arrowwidth', ((borderOpacity && borderWidth) || 1) * 2); coerce('ax'); coerce('ay'); + coerce('absoluteArrowTail'); // if you have one part of arrow length you should have both Lib.noneOrAll(annIn, annOut, ['ax', 'ay']); @@ -89,6 +90,11 @@ function handleAnnotationDefaults(annIn, fullLayout) { if(ax.type === 'date') { newval = Lib.dateTime2ms(annIn[axLetter]); if(newval !== false) annIn[axLetter] = newval; + + if(annIn.absoluteArrowTail) { + var newvalB = Lib.dateTime2ms(annIn['a' + axLetter]); + if(newvalB !== false) annIn['a' + axLetter] = newvalB; + } } else if((ax._categories || []).length) { newval = ax._categories.indexOf(annIn[axLetter]); @@ -450,13 +456,17 @@ annotations.draw = function(gd, index, opt, value) { } var alignShift = 0; - if(options.showarrow) { - alignShift = options['a' + axLetter]; - } - else { - alignShift = annSize * shiftFraction(alignPosition, anchor); + if(options.absoluteArrowTail) { + annPosPx['aa' + axLetter] = ax._offset + ax.l2p(options['a' + axLetter]); + } else { + if(options.showarrow) { + alignShift = options['a' + axLetter]; + } + else { + alignShift = annSize * shiftFraction(alignPosition, anchor); + } + annPosPx[axLetter] += alignShift; } - annPosPx[axLetter] += alignShift; // save the current axis type for later log/linear changes options['_' + axLetter + 'type'] = ax && ax.type; @@ -473,11 +483,16 @@ annotations.draw = function(gd, index, opt, value) { var arrowX, arrowY; - // make sure the arrowhead (if there is one) - // and the annotation center are visible - if(options.showarrow) { - arrowX = Lib.constrain(annPosPx.x - options.ax, 1, fullLayout.width - 1); - arrowY = Lib.constrain(annPosPx.y - options.ay, 1, fullLayout.height - 1); + if(options.absoluteArrowTail) { + arrowX = Lib.constrain(annPosPx.x, 1, fullLayout.width - 1); + arrowY = Lib.constrain(annPosPx.y, 1, fullLayout.height - 1); + } else { + // make sure the arrowhead (if there is one) + // and the annotation center are visible + if(options.showarrow) { + arrowX = Lib.constrain(annPosPx.x - options.ax, 1, fullLayout.width - 1); + arrowY = Lib.constrain(annPosPx.y - options.ay, 1, fullLayout.height - 1); + } } annPosPx.x = Lib.constrain(annPosPx.x, 1, fullLayout.width - 1); annPosPx.y = Lib.constrain(annPosPx.y, 1, fullLayout.height - 1); @@ -534,27 +549,32 @@ annotations.draw = function(gd, index, opt, value) { [arrowX0 + xHalf, arrowY0 - yHalf, arrowX0 - xHalf, arrowY0 - yHalf] ].map(applyTransform2); - // Remove the line if it ends inside the box. Use ray - // casting for rotated boxes: see which edges intersect a - // line from the arrowhead to far away and reduce with xor - // to get the parity of the number of intersections. - if(edges.reduce(function(a, x) { - return a ^ - !!lineIntersect(arrowX, arrowY, arrowX + 1e6, arrowY + 1e6, - x[0], x[1], x[2], x[3]); - }, false)) { - // no line or arrow - so quit drawArrow now - return; - } - - edges.forEach(function(x) { - var p = lineIntersect(arrowX0, arrowY0, arrowX, arrowY, - x[0], x[1], x[2], x[3]); - if(p) { - arrowX0 = p.x; - arrowY0 = p.y; + if(options.absoluteArrowTail) { + arrowX0 = annPosPx.aax; + arrowY0 = annPosPx.aay; + } else { + // Remove the line if it ends inside the box. Use ray + // casting for rotated boxes: see which edges intersect a + // line from the arrowhead to far away and reduce with xor + // to get the parity of the number of intersections. + if(edges.reduce(function(a, x) { + return a ^ + !!lineIntersect(arrowX, arrowY, arrowX + 1e6, arrowY + 1e6, + x[0], x[1], x[2], x[3]); + }, false)) { + // no line or arrow - so quit drawArrow now + return; } - }); + + edges.forEach(function(x) { + var p = lineIntersect(arrowX0, arrowY0, arrowX, arrowY, + x[0], x[1], x[2], x[3]); + if(p) { + arrowX0 = p.x; + arrowY0 = p.y; + } + }); + } var strokewidth = options.arrowwidth, arrowColor = options.arrowcolor; From a2e9c72e5a3e6da080281c359956542a648395c8 Mon Sep 17 00:00:00 2001 From: MFed Date: Fri, 3 Jun 2016 07:58:27 -0400 Subject: [PATCH 02/16] Adding the ability to specify the tail of an annotation arrow in absolute point in grid terms rather than relative pixel offset terms. This is useful for the specification of trendlines which will continue to show the correct trend when the chart is zoomed in or out. --- src/components/annotations/attributes.js | 27 ++++++- src/components/annotations/index.js | 99 +++++++++++++++-------- test/image/baselines/annotations.png | Bin 45170 -> 47628 bytes test/image/mocks/annotations.json | 3 +- test/jasmine/tests/annotations_test.js | 30 +++++++ 5 files changed, 119 insertions(+), 40 deletions(-) create mode 100644 test/jasmine/tests/annotations_test.js diff --git a/src/components/annotations/attributes.js b/src/components/annotations/attributes.js index a2eaf49d45d..a3241a0f06b 100644 --- a/src/components/annotations/attributes.js +++ b/src/components/annotations/attributes.js @@ -131,14 +131,31 @@ module.exports = { role: 'style', description: 'Sets the width (in px) of annotation arrow.' }, + absoluteArrowTail: { + valType: 'boolean', + dflt: false, + role: 'style', + description: [ + 'Indicates if the tail of this arrow is a point in ', + 'the coordinate system vs a relative offset in pixels.', + 'This is useful for trendline annotations which should ', + 'continue to indicate the correct trend when zoomed.', + 'If *true*, `ax` is a value on the x axis and `ay` is ', + 'a value on the y axis.', + 'If *false*, `ax` and `ay` assume their normal offset ', + 'roles.' + ].join(' ') + }, ax: { valType: 'number', dflt: -10, role: 'info', description: [ 'Sets the x component of the arrow tail about the arrow head.', - 'A positive (negative) component corresponds to an arrow pointing', - 'from right to left (left to right)' + 'If `absoluteArrowTail` is false, a positive (negative) ', + 'component corresponds to an arrow pointing', + 'from right to left (left to right).', + 'If `absoluteArrowTail` is true, this is a value on the x axis.' ].join(' ') }, ay: { @@ -147,8 +164,10 @@ module.exports = { role: 'info', description: [ 'Sets the y component of the arrow tail about the arrow head.', - 'A positive (negative) component corresponds to an arrow pointing', - 'from bottom to top (top to bottom)' + 'If `absoluteArrowTail` is false, a positive (negative) ', + 'component corresponds to an arrow pointing', + 'from bottom to top (top to bottom).', + 'If `absoluteArrowTail` is true, this is a value on the y axis.' ].join(' ') }, // positioning diff --git a/src/components/annotations/index.js b/src/components/annotations/index.js index 60385078844..d35d04eafbb 100644 --- a/src/components/annotations/index.js +++ b/src/components/annotations/index.js @@ -59,6 +59,7 @@ function handleAnnotationDefaults(annIn, fullLayout) { coerce('arrowwidth', ((borderOpacity && borderWidth) || 1) * 2); coerce('ax'); coerce('ay'); + coerce('absoluteArrowTail'); // if you have one part of arrow length you should have both Lib.noneOrAll(annIn, annOut, ['ax', 'ay']); @@ -89,6 +90,11 @@ function handleAnnotationDefaults(annIn, fullLayout) { if(ax.type === 'date') { newval = Lib.dateTime2ms(annIn[axLetter]); if(newval !== false) annIn[axLetter] = newval; + + if(annIn.absoluteArrowTail) { + var newvalB = Lib.dateTime2ms(annIn['a' + axLetter]); + if(newvalB !== false) annIn['a' + axLetter] = newvalB; + } } else if((ax._categories || []).length) { newval = ax._categories.indexOf(annIn[axLetter]); @@ -450,13 +456,17 @@ annotations.draw = function(gd, index, opt, value) { } var alignShift = 0; - if(options.showarrow) { - alignShift = options['a' + axLetter]; - } - else { - alignShift = annSize * shiftFraction(alignPosition, anchor); + if(options.absoluteArrowTail) { + annPosPx['aa' + axLetter] = ax._offset + ax.l2p(options['a' + axLetter]); + } else { + if(options.showarrow) { + alignShift = options['a' + axLetter]; + } + else { + alignShift = annSize * shiftFraction(alignPosition, anchor); + } + annPosPx[axLetter] += alignShift; } - annPosPx[axLetter] += alignShift; // save the current axis type for later log/linear changes options['_' + axLetter + 'type'] = ax && ax.type; @@ -473,11 +483,16 @@ annotations.draw = function(gd, index, opt, value) { var arrowX, arrowY; - // make sure the arrowhead (if there is one) - // and the annotation center are visible - if(options.showarrow) { - arrowX = Lib.constrain(annPosPx.x - options.ax, 1, fullLayout.width - 1); - arrowY = Lib.constrain(annPosPx.y - options.ay, 1, fullLayout.height - 1); + if(options.absoluteArrowTail) { + arrowX = Lib.constrain(annPosPx.x, 1, fullLayout.width - 1); + arrowY = Lib.constrain(annPosPx.y, 1, fullLayout.height - 1); + } else { + // make sure the arrowhead (if there is one) + // and the annotation center are visible + if(options.showarrow) { + arrowX = Lib.constrain(annPosPx.x - options.ax, 1, fullLayout.width - 1); + arrowY = Lib.constrain(annPosPx.y - options.ay, 1, fullLayout.height - 1); + } } annPosPx.x = Lib.constrain(annPosPx.x, 1, fullLayout.width - 1); annPosPx.y = Lib.constrain(annPosPx.y, 1, fullLayout.height - 1); @@ -534,27 +549,32 @@ annotations.draw = function(gd, index, opt, value) { [arrowX0 + xHalf, arrowY0 - yHalf, arrowX0 - xHalf, arrowY0 - yHalf] ].map(applyTransform2); - // Remove the line if it ends inside the box. Use ray - // casting for rotated boxes: see which edges intersect a - // line from the arrowhead to far away and reduce with xor - // to get the parity of the number of intersections. - if(edges.reduce(function(a, x) { - return a ^ - !!lineIntersect(arrowX, arrowY, arrowX + 1e6, arrowY + 1e6, - x[0], x[1], x[2], x[3]); - }, false)) { - // no line or arrow - so quit drawArrow now - return; - } - - edges.forEach(function(x) { - var p = lineIntersect(arrowX0, arrowY0, arrowX, arrowY, - x[0], x[1], x[2], x[3]); - if(p) { - arrowX0 = p.x; - arrowY0 = p.y; + if(options.absoluteArrowTail) { + arrowX0 = annPosPx.aax; + arrowY0 = annPosPx.aay; + } else { + // Remove the line if it ends inside the box. Use ray + // casting for rotated boxes: see which edges intersect a + // line from the arrowhead to far away and reduce with xor + // to get the parity of the number of intersections. + if(edges.reduce(function(a, x) { + return a ^ + !!lineIntersect(arrowX, arrowY, arrowX + 1e6, arrowY + 1e6, + x[0], x[1], x[2], x[3]); + }, false)) { + // no line or arrow - so quit drawArrow now + return; } - }); + + edges.forEach(function(x) { + var p = lineIntersect(arrowX0, arrowY0, arrowX, arrowY, + x[0], x[1], x[2], x[3]); + if(p) { + arrowX0 = p.x; + arrowY0 = p.y; + } + }); + } var strokewidth = options.arrowwidth, arrowColor = options.arrowcolor; @@ -618,10 +638,19 @@ annotations.draw = function(gd, index, opt, value) { (options.y + dy / ya._m) : (1 - ((arrowY + dy - gs.t) / gs.h)); - anng.attr({ - transform: 'rotate(' + textangle + ',' + - xcenter + ',' + ycenter + ')' - }); + if(options.absoluteArrowTail) { + update[annbase + '.ax'] = xa ? + (options.ax + dx / xa._m) : + ((arrowX + dx - gs.l) / gs.w); + update[annbase + '.ay'] = ya ? + (options.ay + dy / ya._m) : + (1 - ((arrowY + dy - gs.t) / gs.h)); + } else { + anng.attr({ + transform: 'rotate(' + textangle + ',' + + xcenter + ',' + ycenter + ')' + }); + } }, doneFn: function(dragged) { if(dragged) { diff --git a/test/image/baselines/annotations.png b/test/image/baselines/annotations.png index 5edbbe7d1c575776cd3392752399c54e441ebcd9..d1f320660abd9866f7540bbed9fdb824baf9e191 100644 GIT binary patch literal 47628 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 KQOPG=y8AyuaXNqi literal 45170 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 <+L&H8TEL6kS)bw$@WI=k~+kmF2iF@X9b7LcZ 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 JtE{}4e*m?%q80!E diff --git a/test/image/mocks/annotations.json b/test/image/mocks/annotations.json index 9eea27ff63e..c1b1d912a56 100644 --- a/test/image/mocks/annotations.json +++ b/test/image/mocks/annotations.json @@ -41,7 +41,8 @@ "bordercolor":"rgb(255, 0, 0)","borderwidth":4,"bgcolor":"rgba(255,255,0,0.5)", "font":{"color":"rgb(0, 0, 255)","size":20}, "arrowcolor":"rgb(166, 28, 0)","borderpad":3,"textangle":50,"x":5,"y":1 - } + }, + {"text":"","showarrow":true,"borderwidth":1.2,"arrowhead":2,"absoluteArrowTail":true,"x":5,"y":5,"ax":4,"ay":3} ] } } diff --git a/test/jasmine/tests/annotations_test.js b/test/jasmine/tests/annotations_test.js new file mode 100644 index 00000000000..b1aed94412f --- /dev/null +++ b/test/jasmine/tests/annotations_test.js @@ -0,0 +1,30 @@ +var Annotations = require('@src/components/annotations'); +var Plots = require('@src/plots/plots'); + +describe('Test annotations', function() { + 'use strict'; + + describe('supplyLayoutDefaults', function() { + it('should default to not use absolute arrow tail', function() { + var annotationDefaults = {}; + annotationDefaults._has = Plots._hasPlotType.bind(annotationDefaults); + + Annotations.supplyLayoutDefaults({ annotations: [{ showarrow: true, arrowhead: 2}] }, annotationDefaults); + + expect(annotationDefaults.annotations[0].absoluteArrowTail).toBe(false); + }); + + it('should convert ax/ay date coordinates to milliseconds if absoluteArrowTail is true', function() { + var annotationOut = { xaxis: { type: 'date', range: ['2000-01-01', '2016-01-01'] }}; + annotationOut._has = Plots._hasPlotType.bind(annotationOut); + + var annotationIn = { + annotations: [{ showarrow: true, absoluteArrowTail: true, x: '2008-07-01', ax: '2004-07-01', y: 0, ay: 50}] + }; + + Annotations.supplyLayoutDefaults(annotationIn, annotationOut); + + expect(annotationIn.annotations[0].ax).toEqual(1088654400000); + }); + }); +}); From a7e0e8828fb37fd8f5c281a39d48ec7767c48dd5 Mon Sep 17 00:00:00 2001 From: MFed Date: Mon, 6 Jun 2016 22:40:29 -0400 Subject: [PATCH 03/16] Fixing text and editing. --- src/components/annotations/index.js | 100 ++++++++++++++----------- test/jasmine/tests/annotations_test.js | 4 +- 2 files changed, 60 insertions(+), 44 deletions(-) diff --git a/src/components/annotations/index.js b/src/components/annotations/index.js index d35d04eafbb..80a9ff3dcfb 100644 --- a/src/components/annotations/index.js +++ b/src/components/annotations/index.js @@ -483,13 +483,13 @@ annotations.draw = function(gd, index, opt, value) { var arrowX, arrowY; - if(options.absoluteArrowTail) { - arrowX = Lib.constrain(annPosPx.x, 1, fullLayout.width - 1); - arrowY = Lib.constrain(annPosPx.y, 1, fullLayout.height - 1); - } else { - // make sure the arrowhead (if there is one) - // and the annotation center are visible - if(options.showarrow) { + // make sure the arrowhead (if there is one) + // and the annotation center are visible + if(options.showarrow) { + if (options.absoluteArrowTail) { + arrowX = Lib.constrain(annPosPx.x, 1, fullLayout.width - 1); + arrowY = Lib.constrain(annPosPx.y, 1, fullLayout.height - 1); + } else { arrowX = Lib.constrain(annPosPx.x - options.ax, 1, fullLayout.width - 1); arrowY = Lib.constrain(annPosPx.y - options.ay, 1, fullLayout.height - 1); } @@ -511,8 +511,15 @@ annotations.draw = function(gd, index, opt, value) { annbg.call(Drawing.setRect, borderwidth / 2, borderwidth / 2, outerwidth - borderwidth, outerheight - borderwidth); - var annX = Math.round(annPosPx.x - outerwidth / 2), + var annX = 0, annY = 0; + if(options.absoluteArrowTail) { + annX = Math.round(annPosPx.aax - outerwidth / 2); + annY = Math.round(annPosPx.aay - outerheight / 2); + } else { + annX = Math.round(annPosPx.x - outerwidth / 2); annY = Math.round(annPosPx.y - outerheight / 2); + } + ann.call(Lib.setTranslate, annX, annY); var annbase = 'annotations[' + index + ']'; @@ -530,11 +537,18 @@ annotations.draw = function(gd, index, opt, value) { // looks like there may be a cross-browser solution, see // http://stackoverflow.com/questions/5364980/ // how-to-get-the-width-of-an-svg-tspan-element - var arrowX0 = annPosPx.x + dx, - arrowY0 = annPosPx.y + dy, + var arrowX0, arrowY0; + + if(options.absoluteArrowTail) { + arrowX0 = annPosPx.aax + dx; + arrowY0 = annPosPx.aay + dy; + } else { + arrowX0 = annPosPx.x + dx; + arrowY0 = annPosPx.y + dy; + } // create transform matrix and related functions - transform = + var transform = Lib.rotationXYMatrix(textangle, arrowX0, arrowY0), applyTransform = Lib.apply2DTransform(transform), applyTransform2 = Lib.apply2DTransform2(transform), @@ -549,33 +563,29 @@ annotations.draw = function(gd, index, opt, value) { [arrowX0 + xHalf, arrowY0 - yHalf, arrowX0 - xHalf, arrowY0 - yHalf] ].map(applyTransform2); - if(options.absoluteArrowTail) { - arrowX0 = annPosPx.aax; - arrowY0 = annPosPx.aay; - } else { - // Remove the line if it ends inside the box. Use ray - // casting for rotated boxes: see which edges intersect a - // line from the arrowhead to far away and reduce with xor - // to get the parity of the number of intersections. - if(edges.reduce(function(a, x) { - return a ^ - !!lineIntersect(arrowX, arrowY, arrowX + 1e6, arrowY + 1e6, - x[0], x[1], x[2], x[3]); - }, false)) { - // no line or arrow - so quit drawArrow now - return; - } - - edges.forEach(function(x) { - var p = lineIntersect(arrowX0, arrowY0, arrowX, arrowY, + // Remove the line if it ends inside the box. Use ray + // casting for rotated boxes: see which edges intersect a + // line from the arrowhead to far away and reduce with xor + // to get the parity of the number of intersections. + if(edges.reduce(function(a, x) { + return a ^ + !!lineIntersect(arrowX, arrowY, arrowX + 1e6, arrowY + 1e6, x[0], x[1], x[2], x[3]); - if(p) { - arrowX0 = p.x; - arrowY0 = p.y; - } - }); + }, false)) { + // no line or arrow - so quit drawArrow now + return; } + edges.forEach(function(x) { + var p = lineIntersect(arrowX0, arrowY0, arrowX, arrowY, + x[0], x[1], x[2], x[3]); + if(p) { + arrowX0 = p.x; + arrowY0 = p.y; + } + }); + + var strokewidth = options.arrowwidth, arrowColor = options.arrowcolor; @@ -645,12 +655,12 @@ annotations.draw = function(gd, index, opt, value) { update[annbase + '.ay'] = ya ? (options.ay + dy / ya._m) : (1 - ((arrowY + dy - gs.t) / gs.h)); - } else { - anng.attr({ - transform: 'rotate(' + textangle + ',' + - xcenter + ',' + ycenter + ')' - }); } + + anng.attr({ + transform: 'rotate(' + textangle + ',' + + xcenter + ',' + ycenter + ')' + }); }, doneFn: function(dragged) { if(dragged) { @@ -680,7 +690,6 @@ annotations.draw = function(gd, index, opt, value) { element: ann.node(), prepFn: function() { var pos = Lib.getTranslate(ann); - x0 = pos.x; y0 = pos.y; update = {}; @@ -689,8 +698,13 @@ annotations.draw = function(gd, index, opt, value) { ann.call(Lib.setTranslate, x0 + dx, y0 + dy); var csr = 'pointer'; if(options.showarrow) { - update[annbase + '.ax'] = options.ax + dx; - update[annbase + '.ay'] = options.ay + dy; + if(options.absoluteArrowTail) { + update[annbase + '.ax'] = xa.p2l(xa.l2p(options.ax) + dx); + update[annbase + '.ay'] = ya.p2l(ya.l2p(options.ay) + dy); + } else { + update[annbase + '.ax'] = options.ax + dx; + update[annbase + '.ay'] = options.ay + dy; + } drawArrow(dx, dy); } else { diff --git a/test/jasmine/tests/annotations_test.js b/test/jasmine/tests/annotations_test.js index b1aed94412f..27e2ae243ed 100644 --- a/test/jasmine/tests/annotations_test.js +++ b/test/jasmine/tests/annotations_test.js @@ -1,5 +1,7 @@ -var Annotations = require('@src/components/annotations'); +var PlotlyInternal = require('@src/plotly'); var Plots = require('@src/plots/plots'); +var Annotations = require('@src/components/annotations'); + describe('Test annotations', function() { 'use strict'; From 722a1cad03fc44fe8679056a134d7483db874e7c Mon Sep 17 00:00:00 2001 From: MFed Date: Mon, 6 Jun 2016 22:45:35 -0400 Subject: [PATCH 04/16] code review feedback --- src/components/annotations/attributes.js | 10 +++++----- src/components/annotations/index.js | 16 ++++++++-------- test/image/mocks/annotations.json | 2 +- test/jasmine/tests/annotations_test.js | 6 +++--- 4 files changed, 17 insertions(+), 17 deletions(-) diff --git a/src/components/annotations/attributes.js b/src/components/annotations/attributes.js index a3241a0f06b..8e71333a4d1 100644 --- a/src/components/annotations/attributes.js +++ b/src/components/annotations/attributes.js @@ -131,7 +131,7 @@ module.exports = { role: 'style', description: 'Sets the width (in px) of annotation arrow.' }, - absoluteArrowTail: { + absolutetail: { valType: 'boolean', dflt: false, role: 'style', @@ -152,10 +152,10 @@ module.exports = { role: 'info', description: [ 'Sets the x component of the arrow tail about the arrow head.', - 'If `absoluteArrowTail` is false, a positive (negative) ', + 'If `absolutetail` is false, a positive (negative) ', 'component corresponds to an arrow pointing', 'from right to left (left to right).', - 'If `absoluteArrowTail` is true, this is a value on the x axis.' + 'If `absolutetail` is true, this is a value on the x axis.' ].join(' ') }, ay: { @@ -164,10 +164,10 @@ module.exports = { role: 'info', description: [ 'Sets the y component of the arrow tail about the arrow head.', - 'If `absoluteArrowTail` is false, a positive (negative) ', + 'If `absolutetail` is false, a positive (negative) ', 'component corresponds to an arrow pointing', 'from bottom to top (top to bottom).', - 'If `absoluteArrowTail` is true, this is a value on the y axis.' + 'If `absolutetail` is true, this is a value on the y axis.' ].join(' ') }, // positioning diff --git a/src/components/annotations/index.js b/src/components/annotations/index.js index 80a9ff3dcfb..5d286693863 100644 --- a/src/components/annotations/index.js +++ b/src/components/annotations/index.js @@ -59,7 +59,7 @@ function handleAnnotationDefaults(annIn, fullLayout) { coerce('arrowwidth', ((borderOpacity && borderWidth) || 1) * 2); coerce('ax'); coerce('ay'); - coerce('absoluteArrowTail'); + coerce('absolutetail'); // if you have one part of arrow length you should have both Lib.noneOrAll(annIn, annOut, ['ax', 'ay']); @@ -91,7 +91,7 @@ function handleAnnotationDefaults(annIn, fullLayout) { newval = Lib.dateTime2ms(annIn[axLetter]); if(newval !== false) annIn[axLetter] = newval; - if(annIn.absoluteArrowTail) { + if(annIn.absolutetail) { var newvalB = Lib.dateTime2ms(annIn['a' + axLetter]); if(newvalB !== false) annIn['a' + axLetter] = newvalB; } @@ -456,7 +456,7 @@ annotations.draw = function(gd, index, opt, value) { } var alignShift = 0; - if(options.absoluteArrowTail) { + if(options.absolutetail) { annPosPx['aa' + axLetter] = ax._offset + ax.l2p(options['a' + axLetter]); } else { if(options.showarrow) { @@ -486,7 +486,7 @@ annotations.draw = function(gd, index, opt, value) { // make sure the arrowhead (if there is one) // and the annotation center are visible if(options.showarrow) { - if (options.absoluteArrowTail) { + if (options.absolutetail) { arrowX = Lib.constrain(annPosPx.x, 1, fullLayout.width - 1); arrowY = Lib.constrain(annPosPx.y, 1, fullLayout.height - 1); } else { @@ -512,7 +512,7 @@ annotations.draw = function(gd, index, opt, value) { outerwidth - borderwidth, outerheight - borderwidth); var annX = 0, annY = 0; - if(options.absoluteArrowTail) { + if(options.absolutetail) { annX = Math.round(annPosPx.aax - outerwidth / 2); annY = Math.round(annPosPx.aay - outerheight / 2); } else { @@ -539,7 +539,7 @@ annotations.draw = function(gd, index, opt, value) { // how-to-get-the-width-of-an-svg-tspan-element var arrowX0, arrowY0; - if(options.absoluteArrowTail) { + if(options.absolutetail) { arrowX0 = annPosPx.aax + dx; arrowY0 = annPosPx.aay + dy; } else { @@ -648,7 +648,7 @@ annotations.draw = function(gd, index, opt, value) { (options.y + dy / ya._m) : (1 - ((arrowY + dy - gs.t) / gs.h)); - if(options.absoluteArrowTail) { + if(options.absolutetail) { update[annbase + '.ax'] = xa ? (options.ax + dx / xa._m) : ((arrowX + dx - gs.l) / gs.w); @@ -698,7 +698,7 @@ annotations.draw = function(gd, index, opt, value) { ann.call(Lib.setTranslate, x0 + dx, y0 + dy); var csr = 'pointer'; if(options.showarrow) { - if(options.absoluteArrowTail) { + if(options.absolutetail) { update[annbase + '.ax'] = xa.p2l(xa.l2p(options.ax) + dx); update[annbase + '.ay'] = ya.p2l(ya.l2p(options.ay) + dy); } else { diff --git a/test/image/mocks/annotations.json b/test/image/mocks/annotations.json index c1b1d912a56..4a6a7b08f3f 100644 --- a/test/image/mocks/annotations.json +++ b/test/image/mocks/annotations.json @@ -42,7 +42,7 @@ "font":{"color":"rgb(0, 0, 255)","size":20}, "arrowcolor":"rgb(166, 28, 0)","borderpad":3,"textangle":50,"x":5,"y":1 }, - {"text":"","showarrow":true,"borderwidth":1.2,"arrowhead":2,"absoluteArrowTail":true,"x":5,"y":5,"ax":4,"ay":3} + {"text":"","showarrow":true,"borderwidth":1.2,"arrowhead":2,"absolutetail":true,"x":5,"y":5,"ax":4,"ay":3} ] } } diff --git a/test/jasmine/tests/annotations_test.js b/test/jasmine/tests/annotations_test.js index 27e2ae243ed..0d7741938a7 100644 --- a/test/jasmine/tests/annotations_test.js +++ b/test/jasmine/tests/annotations_test.js @@ -13,15 +13,15 @@ describe('Test annotations', function() { Annotations.supplyLayoutDefaults({ annotations: [{ showarrow: true, arrowhead: 2}] }, annotationDefaults); - expect(annotationDefaults.annotations[0].absoluteArrowTail).toBe(false); + expect(annotationDefaults.annotations[0].absolutetail).toBe(false); }); - it('should convert ax/ay date coordinates to milliseconds if absoluteArrowTail is true', function() { + it('should convert ax/ay date coordinates to milliseconds if absolutetail is true', function() { var annotationOut = { xaxis: { type: 'date', range: ['2000-01-01', '2016-01-01'] }}; annotationOut._has = Plots._hasPlotType.bind(annotationOut); var annotationIn = { - annotations: [{ showarrow: true, absoluteArrowTail: true, x: '2008-07-01', ax: '2004-07-01', y: 0, ay: 50}] + annotations: [{ showarrow: true, absolutetail: true, x: '2008-07-01', ax: '2004-07-01', y: 0, ay: 50}] }; Annotations.supplyLayoutDefaults(annotationIn, annotationOut); From a1da755724b60281983058af54896a2dcd49cec9 Mon Sep 17 00:00:00 2001 From: MFed Date: Mon, 6 Jun 2016 23:03:43 -0400 Subject: [PATCH 05/16] Adding the ability to specify the tail of an annotation arrow in absolute point in grid terms rather than relative pixel offset terms. Squashing commits --- src/components/annotations/attributes.js | 27 +++- src/components/annotations/index.js | 79 +++++++++--- src/components/legend/draw.js | 79 ++++++------ src/constants/geo_constants.js | 156 ----------------------- src/plots/geo/set_scale.js | 2 +- src/snapshot/svgtoimg.js | 2 +- src/snapshot/tosvg.js | 23 +--- test/image/baselines/annotations.png | Bin 45170 -> 47628 bytes test/image/mocks/annotations.json | 3 +- test/jasmine/tests/annotations_test.js | 32 +++++ test/jasmine/tests/download_test.js | 115 +++++++++++------ test/jasmine/tests/legend_scroll_test.js | 51 ++++++++ test/jasmine/tests/toimage_test.js | 2 +- 13 files changed, 297 insertions(+), 274 deletions(-) delete mode 100644 src/constants/geo_constants.js create mode 100644 test/jasmine/tests/annotations_test.js diff --git a/src/components/annotations/attributes.js b/src/components/annotations/attributes.js index a2eaf49d45d..8e71333a4d1 100644 --- a/src/components/annotations/attributes.js +++ b/src/components/annotations/attributes.js @@ -131,14 +131,31 @@ module.exports = { role: 'style', description: 'Sets the width (in px) of annotation arrow.' }, + absolutetail: { + valType: 'boolean', + dflt: false, + role: 'style', + description: [ + 'Indicates if the tail of this arrow is a point in ', + 'the coordinate system vs a relative offset in pixels.', + 'This is useful for trendline annotations which should ', + 'continue to indicate the correct trend when zoomed.', + 'If *true*, `ax` is a value on the x axis and `ay` is ', + 'a value on the y axis.', + 'If *false*, `ax` and `ay` assume their normal offset ', + 'roles.' + ].join(' ') + }, ax: { valType: 'number', dflt: -10, role: 'info', description: [ 'Sets the x component of the arrow tail about the arrow head.', - 'A positive (negative) component corresponds to an arrow pointing', - 'from right to left (left to right)' + 'If `absolutetail` is false, a positive (negative) ', + 'component corresponds to an arrow pointing', + 'from right to left (left to right).', + 'If `absolutetail` is true, this is a value on the x axis.' ].join(' ') }, ay: { @@ -147,8 +164,10 @@ module.exports = { role: 'info', description: [ 'Sets the y component of the arrow tail about the arrow head.', - 'A positive (negative) component corresponds to an arrow pointing', - 'from bottom to top (top to bottom)' + 'If `absolutetail` is false, a positive (negative) ', + 'component corresponds to an arrow pointing', + 'from bottom to top (top to bottom).', + 'If `absolutetail` is true, this is a value on the y axis.' ].join(' ') }, // positioning diff --git a/src/components/annotations/index.js b/src/components/annotations/index.js index 60385078844..5d286693863 100644 --- a/src/components/annotations/index.js +++ b/src/components/annotations/index.js @@ -59,6 +59,7 @@ function handleAnnotationDefaults(annIn, fullLayout) { coerce('arrowwidth', ((borderOpacity && borderWidth) || 1) * 2); coerce('ax'); coerce('ay'); + coerce('absolutetail'); // if you have one part of arrow length you should have both Lib.noneOrAll(annIn, annOut, ['ax', 'ay']); @@ -89,6 +90,11 @@ function handleAnnotationDefaults(annIn, fullLayout) { if(ax.type === 'date') { newval = Lib.dateTime2ms(annIn[axLetter]); if(newval !== false) annIn[axLetter] = newval; + + if(annIn.absolutetail) { + var newvalB = Lib.dateTime2ms(annIn['a' + axLetter]); + if(newvalB !== false) annIn['a' + axLetter] = newvalB; + } } else if((ax._categories || []).length) { newval = ax._categories.indexOf(annIn[axLetter]); @@ -450,13 +456,17 @@ annotations.draw = function(gd, index, opt, value) { } var alignShift = 0; - if(options.showarrow) { - alignShift = options['a' + axLetter]; - } - else { - alignShift = annSize * shiftFraction(alignPosition, anchor); + if(options.absolutetail) { + annPosPx['aa' + axLetter] = ax._offset + ax.l2p(options['a' + axLetter]); + } else { + if(options.showarrow) { + alignShift = options['a' + axLetter]; + } + else { + alignShift = annSize * shiftFraction(alignPosition, anchor); + } + annPosPx[axLetter] += alignShift; } - annPosPx[axLetter] += alignShift; // save the current axis type for later log/linear changes options['_' + axLetter + 'type'] = ax && ax.type; @@ -476,8 +486,13 @@ annotations.draw = function(gd, index, opt, value) { // make sure the arrowhead (if there is one) // and the annotation center are visible if(options.showarrow) { - arrowX = Lib.constrain(annPosPx.x - options.ax, 1, fullLayout.width - 1); - arrowY = Lib.constrain(annPosPx.y - options.ay, 1, fullLayout.height - 1); + if (options.absolutetail) { + arrowX = Lib.constrain(annPosPx.x, 1, fullLayout.width - 1); + arrowY = Lib.constrain(annPosPx.y, 1, fullLayout.height - 1); + } else { + arrowX = Lib.constrain(annPosPx.x - options.ax, 1, fullLayout.width - 1); + arrowY = Lib.constrain(annPosPx.y - options.ay, 1, fullLayout.height - 1); + } } annPosPx.x = Lib.constrain(annPosPx.x, 1, fullLayout.width - 1); annPosPx.y = Lib.constrain(annPosPx.y, 1, fullLayout.height - 1); @@ -496,8 +511,15 @@ annotations.draw = function(gd, index, opt, value) { annbg.call(Drawing.setRect, borderwidth / 2, borderwidth / 2, outerwidth - borderwidth, outerheight - borderwidth); - var annX = Math.round(annPosPx.x - outerwidth / 2), + var annX = 0, annY = 0; + if(options.absolutetail) { + annX = Math.round(annPosPx.aax - outerwidth / 2); + annY = Math.round(annPosPx.aay - outerheight / 2); + } else { + annX = Math.round(annPosPx.x - outerwidth / 2); annY = Math.round(annPosPx.y - outerheight / 2); + } + ann.call(Lib.setTranslate, annX, annY); var annbase = 'annotations[' + index + ']'; @@ -515,11 +537,18 @@ annotations.draw = function(gd, index, opt, value) { // looks like there may be a cross-browser solution, see // http://stackoverflow.com/questions/5364980/ // how-to-get-the-width-of-an-svg-tspan-element - var arrowX0 = annPosPx.x + dx, - arrowY0 = annPosPx.y + dy, + var arrowX0, arrowY0; + + if(options.absolutetail) { + arrowX0 = annPosPx.aax + dx; + arrowY0 = annPosPx.aay + dy; + } else { + arrowX0 = annPosPx.x + dx; + arrowY0 = annPosPx.y + dy; + } // create transform matrix and related functions - transform = + var transform = Lib.rotationXYMatrix(textangle, arrowX0, arrowY0), applyTransform = Lib.apply2DTransform(transform), applyTransform2 = Lib.apply2DTransform2(transform), @@ -541,7 +570,7 @@ annotations.draw = function(gd, index, opt, value) { if(edges.reduce(function(a, x) { return a ^ !!lineIntersect(arrowX, arrowY, arrowX + 1e6, arrowY + 1e6, - x[0], x[1], x[2], x[3]); + x[0], x[1], x[2], x[3]); }, false)) { // no line or arrow - so quit drawArrow now return; @@ -549,13 +578,14 @@ annotations.draw = function(gd, index, opt, value) { edges.forEach(function(x) { var p = lineIntersect(arrowX0, arrowY0, arrowX, arrowY, - x[0], x[1], x[2], x[3]); + x[0], x[1], x[2], x[3]); if(p) { arrowX0 = p.x; arrowY0 = p.y; } }); + var strokewidth = options.arrowwidth, arrowColor = options.arrowcolor; @@ -618,9 +648,18 @@ annotations.draw = function(gd, index, opt, value) { (options.y + dy / ya._m) : (1 - ((arrowY + dy - gs.t) / gs.h)); + if(options.absolutetail) { + update[annbase + '.ax'] = xa ? + (options.ax + dx / xa._m) : + ((arrowX + dx - gs.l) / gs.w); + update[annbase + '.ay'] = ya ? + (options.ay + dy / ya._m) : + (1 - ((arrowY + dy - gs.t) / gs.h)); + } + anng.attr({ transform: 'rotate(' + textangle + ',' + - xcenter + ',' + ycenter + ')' + xcenter + ',' + ycenter + ')' }); }, doneFn: function(dragged) { @@ -651,7 +690,6 @@ annotations.draw = function(gd, index, opt, value) { element: ann.node(), prepFn: function() { var pos = Lib.getTranslate(ann); - x0 = pos.x; y0 = pos.y; update = {}; @@ -660,8 +698,13 @@ annotations.draw = function(gd, index, opt, value) { ann.call(Lib.setTranslate, x0 + dx, y0 + dy); var csr = 'pointer'; if(options.showarrow) { - update[annbase + '.ax'] = options.ax + dx; - update[annbase + '.ay'] = options.ay + dy; + if(options.absolutetail) { + update[annbase + '.ax'] = xa.p2l(xa.l2p(options.ax) + dx); + update[annbase + '.ay'] = ya.p2l(ya.l2p(options.ay) + dy); + } else { + update[annbase + '.ax'] = options.ax + dx; + update[annbase + '.ay'] = options.ay + dy; + } drawArrow(dx, dy); } else { diff --git a/src/components/legend/draw.js b/src/components/legend/draw.js index 9c6dd4e1bb7..17d386288fb 100644 --- a/src/components/legend/draw.js +++ b/src/components/legend/draw.js @@ -43,9 +43,6 @@ module.exports = function draw(gd) { return; } - if(typeof gd.firstRender === 'undefined') gd.firstRender = true; - else if(gd.firstRender) gd.firstRender = false; - var legend = fullLayout._infolayer.selectAll('g.legend') .data([0]); @@ -122,7 +119,8 @@ module.exports = function draw(gd) { .call(setupTraceToggle, gd); }); - if(gd.firstRender) { + var firstRender = legend.enter().size() !== 0; + if(firstRender) { computeLegendDimensions(gd, groups, traces); expandMargin(gd); } @@ -198,28 +196,36 @@ module.exports = function draw(gd) { // legend, background and border, scroll box and scroll bar Lib.setTranslate(legend, lx, ly); - bg.attr({ - width: legendWidth - opts.borderwidth, - height: legendHeight - opts.borderwidth, - x: opts.borderwidth / 2, - y: opts.borderwidth / 2 - }); + var scrollBarYMax = legendHeight - + constants.scrollBarHeight - + 2 * constants.scrollBarMargin, + scrollBoxYMax = opts.height - legendHeight, + scrollBarY, + scrollBoxY; - var scrollPosition = scrollBox.attr('data-scroll') || 0; + if(opts.height <= legendHeight || gd._context.staticPlot) { + // if scrollbar should not be shown. + bg.attr({ + width: legendWidth - opts.borderwidth, + height: legendHeight - opts.borderwidth, + x: opts.borderwidth / 2, + y: opts.borderwidth / 2 + }); - Lib.setTranslate(scrollBox, 0, scrollPosition); + Lib.setTranslate(scrollBox, 0, 0); - clipPath.select('rect').attr({ - width: legendWidth - 2 * opts.borderwidth, - height: legendHeight - 2 * opts.borderwidth, - x: opts.borderwidth - scrollPosition, - y: opts.borderwidth - }); - - scrollBox.call(Drawing.setClipUrl, clipId); + clipPath.select('rect').attr({ + width: legendWidth - 2 * opts.borderwidth, + height: legendHeight - 2 * opts.borderwidth, + x: opts.borderwidth, + y: opts.borderwidth + }); - // If scrollbar should be shown. - if(opts.height - legendHeight > 0 && !gd._context.staticPlot) { + scrollBox.call(Drawing.setClipUrl, clipId); + } + else { + scrollBarY = constants.scrollBarMargin, + scrollBoxY = scrollBox.attr('data-scroll') || 0; // increase the background and clip-path width // by the scrollbar width and margin @@ -227,31 +233,27 @@ module.exports = function draw(gd) { width: legendWidth - 2 * opts.borderwidth + constants.scrollBarWidth + - constants.scrollBarMargin + constants.scrollBarMargin, + height: legendHeight - opts.borderwidth, + x: opts.borderwidth / 2, + y: opts.borderwidth / 2 }); clipPath.select('rect').attr({ width: legendWidth - 2 * opts.borderwidth + constants.scrollBarWidth + - constants.scrollBarMargin + constants.scrollBarMargin, + height: legendHeight - 2 * opts.borderwidth, + x: opts.borderwidth, + y: opts.borderwidth - scrollBoxY }); - if(gd.firstRender) { - // Move scrollbar to starting position - scrollHandler(constants.scrollBarMargin, 0); - } - - var scrollBarYMax = legendHeight - - constants.scrollBarHeight - - 2 * constants.scrollBarMargin, - scrollBoxYMax = opts.height - legendHeight, - scrollBarY = constants.scrollBarMargin, - scrollBoxY = 0; + scrollBox.call(Drawing.setClipUrl, clipId); - scrollHandler(scrollBarY, scrollBoxY); + if(firstRender) scrollHandler(scrollBarY, scrollBoxY); - legend.on('wheel', null); + legend.on('wheel', null); // to be safe, remove previous listeners legend.on('wheel', function() { scrollBoxY = Lib.constrain( scrollBox.attr('data-scroll') - @@ -263,8 +265,10 @@ module.exports = function draw(gd) { d3.event.preventDefault(); }); + // to be safe, remove previous listeners scrollBar.on('.drag', null); scrollBox.on('.drag', null); + var drag = d3.behavior.drag().on('drag', function() { scrollBarY = Lib.constrain( d3.event.y - constants.scrollBarHeight / 2, @@ -277,7 +281,6 @@ module.exports = function draw(gd) { scrollBar.call(drag); scrollBox.call(drag); - } diff --git a/src/constants/geo_constants.js b/src/constants/geo_constants.js deleted file mode 100644 index 940b7a41976..00000000000 --- a/src/constants/geo_constants.js +++ /dev/null @@ -1,156 +0,0 @@ -/** -* Copyright 2012-2016, Plotly, Inc. -* All rights reserved. -* -* This source code is licensed under the MIT license found in the -* LICENSE file in the root directory of this source tree. -*/ - - -'use strict'; - -var params = module.exports = {}; - -// projection names to d3 function name -params.projNames = { - // d3.geo.projection - 'equirectangular': 'equirectangular', - 'mercator': 'mercator', - 'orthographic': 'orthographic', - 'natural earth': 'naturalEarth', - 'kavrayskiy7': 'kavrayskiy7', - 'miller': 'miller', - 'robinson': 'robinson', - 'eckert4': 'eckert4', - 'azimuthal equal area': 'azimuthalEqualArea', - 'azimuthal equidistant': 'azimuthalEquidistant', - 'conic equal area': 'conicEqualArea', - 'conic conformal': 'conicConformal', - 'conic equidistant': 'conicEquidistant', - 'gnomonic': 'gnomonic', - 'stereographic': 'stereographic', - 'mollweide': 'mollweide', - 'hammer': 'hammer', - 'transverse mercator': 'transverseMercator', - 'albers usa': 'albersUsa', - 'winkel tripel': 'winkel3' -}; - -// name of the axes -params.axesNames = ['lonaxis', 'lataxis']; - -// max longitudinal angular span (EXPERIMENTAL) -params.lonaxisSpan = { - 'orthographic': 180, - 'azimuthal equal area': 360, - 'azimuthal equidistant': 360, - 'conic conformal': 180, - 'gnomonic': 160, - 'stereographic': 180, - 'transverse mercator': 180, - '*': 360 -}; - -// max latitudinal angular span (EXPERIMENTAL) -params.lataxisSpan = { - 'conic conformal': 150, - 'stereographic': 179.5, - '*': 180 -}; - -// defaults for each scope -params.scopeDefaults = { - world: { - lonaxisRange: [-180, 180], - lataxisRange: [-90, 90], - projType: 'equirectangular', - projRotate: [0, 0, 0] - }, - usa: { - lonaxisRange: [-180, -50], - lataxisRange: [15, 80], - projType: 'albers usa' - }, - europe: { - lonaxisRange: [-30, 60], - lataxisRange: [30, 80], - projType: 'conic conformal', - projRotate: [15, 0, 0], - projParallels: [0, 60] - }, - asia: { - lonaxisRange: [22, 160], - lataxisRange: [-15, 55], - projType: 'mercator', - projRotate: [0, 0, 0] - }, - africa: { - lonaxisRange: [-30, 60], - lataxisRange: [-40, 40], - projType: 'mercator', - projRotate: [0, 0, 0] - }, - 'north america': { - lonaxisRange: [-180, -45], - lataxisRange: [5, 85], - projType: 'conic conformal', - projRotate: [-100, 0, 0], - projParallels: [29.5, 45.5] - }, - 'south america': { - lonaxisRange: [-100, -30], - lataxisRange: [-60, 15], - projType: 'mercator', - projRotate: [0, 0, 0] - } -}; - -// angular pad to avoid rounding error around clip angles -params.clipPad = 1e-3; - -// map projection precision -params.precision = 0.1; - -// default land and water fill colors -params.landColor = '#F0DC82'; -params.waterColor = '#3399FF'; - -// locationmode to layer name -params.locationmodeToLayer = { - 'ISO-3': 'countries', - 'USA-states': 'subunits', - 'country names': 'countries' -}; - -// SVG element for a sphere (use to frame maps) -params.sphereSVG = {type: 'Sphere'}; - -// N.B. base layer names must be the same as in the topojson files - -// base layer with a fill color -params.fillLayers = ['ocean', 'land', 'lakes']; - -// base layer with a only a line color -params.lineLayers = ['subunits', 'countries', 'coastlines', 'rivers', 'frame']; - -// all base layers - in order -params.baseLayers = [ - 'ocean', 'land', 'lakes', - 'subunits', 'countries', 'coastlines', 'rivers', - 'lataxis', 'lonaxis', - 'frame' -]; - -params.layerNameToAdjective = { - ocean: 'ocean', - land: 'land', - lakes: 'lake', - subunits: 'subunit', - countries: 'country', - coastlines: 'coastline', - rivers: 'river', - frame: 'frame' -}; - -// base layers drawn over choropleth -params.baseLayersOverChoropleth = ['rivers', 'lakes']; diff --git a/src/plots/geo/set_scale.js b/src/plots/geo/set_scale.js index 3cc5920ad8b..70d7220eccf 100644 --- a/src/plots/geo/set_scale.js +++ b/src/plots/geo/set_scale.js @@ -11,7 +11,7 @@ var d3 = require('d3'); -var clipPad = require('./constants/').clipPad; +var clipPad = require('./constants').clipPad; function createGeoScale(geoLayout, graphSize) { var projLayout = geoLayout.projection, diff --git a/src/snapshot/svgtoimg.js b/src/snapshot/svgtoimg.js index 55d11bbf041..8b7ddb30690 100644 --- a/src/snapshot/svgtoimg.js +++ b/src/snapshot/svgtoimg.js @@ -86,7 +86,7 @@ function svgToImg(opts) { imgData = canvas.toDataURL('image/webp'); break; case 'svg': - imgData = svg; + imgData = url; break; default: reject(new Error('Image format is not jpeg, png or svg')); diff --git a/src/snapshot/tosvg.js b/src/snapshot/tosvg.js index 206db941a0a..3ef7ee18867 100644 --- a/src/snapshot/tosvg.js +++ b/src/snapshot/tosvg.js @@ -78,24 +78,12 @@ module.exports = function toSVG(gd, format) { return; } - // I've seen font-family styles with non-escaped double quotes in them - breaks the - // serialized svg because the style attribute itself is double-quoted! - // Is this an IE thing? Any other attributes or style elements that can have quotes in them? - // TODO: this looks like a noop right now - what happened to it? - - /* - * Font-family styles with double quotes in them breaks the to-image - * step in FF42 because the style attribute itself is wrapped in - * double quotes. See: - * - * - http://codepen.io/etpinard/pen/bEdQWK - * - https://github.com/plotly/plotly.js/pull/104 - * - * for more info. - */ + // Font family styles break things because of quotation marks, + // so we must remove them *after* the SVG DOM has been serialized + // to a string (browsers convert singles back) var ff = txt.style('font-family'); if(ff && ff.indexOf('"') !== -1) { - txt.style('font-family', ff.replace(/"/g, '\\\'')); + txt.style('font-family', ff.replace(/"/g, 'TOBESTRIPPED')); } }); @@ -115,5 +103,8 @@ module.exports = function toSVG(gd, format) { s = svgTextUtils.html_entity_decode(s); s = svgTextUtils.xml_entity_encode(s); + // Fix quotations around font strings + s = s.replace(/("TOBESTRIPPED)|(TOBESTRIPPED")/g, '\''); + return s; }; diff --git a/test/image/baselines/annotations.png b/test/image/baselines/annotations.png index 5edbbe7d1c575776cd3392752399c54e441ebcd9..d1f320660abd9866f7540bbed9fdb824baf9e191 100644 GIT binary patch literal 47628 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 KQOPG=y8AyuaXNqi literal 45170 zcmeFZXHb;e7A@Mev?7RP5D>vk#sGpM&>$#5lpLC*qU0cwL6U+J1Q7+4oKw>cNN$p% zf{NrE8W2#S$x0Fg?)=z$pL6QHs#mXW)xA~sz4ON{?vL)Z*0L zbLd^8fs!LipQ1u(Q-#~pw0d5!iq_{FuH zvuyeD>eVmOAqIvozlp8$x<59OY@1xxm!>)|%cH2M8L|KTafB~21jS5s=UM;?O~dE^ z_aE2%Q3^``dIp{j2;R$xJ#x7@m*Bs<;J*jqe_t%%I~>rB*B^X& z+I(iY*K7|B74;c^6xFd^7jHW-?L@YKC3g6qk9f}Cdygx#vu=FKTb}H@{>i2%e@ZkA z6*YYQq-<-QZLjFY?;pvtX4~trRd40C|8%xU&tGhcld!!%e0Lw2jq2E=L+r7kJMj>k zPdn3B^zK^HMeF0LFAC>tH(FwZ4R4u{Tn_ucr|b$3n3i=K3!LpQZVY7=7$dsP4ONOh znfUVR>~5lLt=KaZ^GIuK)g>h22AcZNjl7!PA=Qei%VpB(Y_-4!7@YmFoMsB9O% zV~1oj-`^itNu6UK!c2IgotG)ydk?ag^V`;l57H%ga4)!JAX;oi5;4szYzGFQ4C*?7)6 z4p$Rpy9q|UF`_0E3N`?ZF*Xq}t|+|Innc!5zMd>=&wGC%K*Fl+&CiKX&ug)qqchZz z`xYWAm5@vru*TZfq}3R~Lk?S+BUh;hOw3iymz}d8=u5rycxKppzH~3kiHe0bqKP!e zg{3p)uG4zc!!=d(hc5PQtxt<_pS~4HcSO)jGyZ~WUd=iMFM6Lp-)f{eUUIPWx|}`i z7NWQ3>gUhVLS#$F>cvOWmc2w1a#M<|wq~K`%U6<)NpyUq6Pv5+%hRn^RGK%YIT3qa%2A^7y^(Jl(lWoss)Otl`{}Et|%x z#Az|J+G<$krXW^KUZS)+sc`9gyd#M(YeUqiEMF}0gJrWyT~)`~s5HI8)eK&UkIGiA>g`Y%w)tc`mR6X&pT&H*bj7V-fvG+iaD;v&XK3f zD!w{Lo~Gklze+V;Ht68&cW9|ttnN=ooVfK^8N4IdpP7XUd+Xp#{%J^{`s+v*((wCN zZ*OhH$ocuY-w$FaMZFL;8QApu(ULfuo1JtoV6?Q?wD{T4E9*q_zQUV&)gDg0=#)2U zRHI5^?5^@-QEH-2Vu9=Z-t#p-YE|?+e||biF7x7C3dM2ZO02%tKd9~QQ5$+h&wZaj zL(4|XM{3DHe-tXHzGdDRvCO0YHPx)nx7M+thL_)evbH-aEzNl-1LP*3D2EhmSG z%QHG_uSMPVm(Lf+8wcM6?3#VYASdq1;Jx_4q-wDwQnbHNz z{$k);-+n5$)rT>iEg<3bm=fceeW}pOYvJd2{e`}6GPQ-RC7gF2lKdb@Fe-NwL3=&Z z(iD1NTEBecocD^|^hjOZ{DrR1sYGELPL0*0rOcCC?Fjpo^c(brDnm%S&RU5TRSOTY3|c06-C_3@$CNiyE+^)K8- zF^sN*q_I$;p(|dgx*i%Rt=0HX&reouM2C=u_!A~GUtfB>zvU9)sFz`P4gUoH!Ob6X z+lxU`KF&n!YLAg)(6?82mLBH0+RhG?TDlZyy& zxpZmXxmBjuraSLWscrAIbNBL-8Rmq>b*sh2rt;d*bU*B7YRmEXND@M_sa)Pu>lt-EDjNPuKQ3-xq zzvnDzPf)aS*!OjJ4m#G!d}3#mnTD;nPAOJ+8j-8V7{ugQmcJl$cQ=~G^)K8VaDYwO z8r9yEP&?bJR)Y?x4eGh!R8xVMs|oehBO0Gy{l)EA-R_gs!@Atq+uD`(tWP{^T@PnM zVwI|1NIT6*d0yb0;~nnDA?%u~>CRtzE$5gxy`vVDqFBVP-TUtLX8oE9()po19p3Or zC*PnQV*1yH`}_t1{`+`kheWGpUKisWyEau#n!3nps|60XxUQ!MEWRk=SZMIi!Kj&F zBz7x`Xi$D;za6om(iD23ka6PZ8pPuK8*d*F2b1fI8Xn~&SqurilGKbmyuVuQDGGcuhnlnO{|;y{*5lP3BNXel&DG@ptJ(qlq=g;!15?dtBbA@aTzUQEbxL znVL&7*jX{hYSt+6?y5@=GIKIjsg5$=>C93WP1qA*8~VQT?9cNwe4M|hoag_l*51GL zM+f(;Xf$0>4O`#BH$_NxM%RkWx2Hd*JHzFFHRKQ#hOzXTQW{+X$;6p4&_m&C zHOy$`Ke9%1`~G?x6)ei?sP?O>Hj5guVg>Qdgz{mE#qTu5SS&Y=#?f3?bO zR~WwLZx_L$Lgs$F>pr|wX)@}gxx7=O3ra06LHZr13|G8bVp*FhZZ+nRCa`FwUk+cY zVr)q`0wFT=Wgj5Do$9kg0c-onWp<#OM|E0CgHf4|O8v~jr<2JQm#n$&sJhTGV$(K$ z-*x?aeG=awAZyOLEk)j;;V3QI`tSmz^vZW#1f$g_A9i<+^&LEF55u>f{?z_=am&XU zP(I>2C@vvNF3b_M7ASO?(lV;?k{}m$FiTu*JmMd?H|E_De{2KWg4yDEgP=Fjgooth zS*BnNRROo&;@AiK`oO(KcRv}M@1yY`7ykU-jDVl80HKzOSY_0wiq<6QE2scIjPK^M zKDV52_40JD*e99ibbJWRA-K&B>^*e!1&Z0j*oQlZEy#J|Bhy6U>+|TZ92Kj>-sGzW zF7IgTTrXdEcZJty!lFKnThB$#6|L+d$4lH#MV+RM#h-NSD|{<4e^NJ!mT&z-UyZjr zx9ok72ahXe%LZr0pUUlDC+>Rcy}o4az0`ii#6VCZ1>4qWzK6PA1S^?;m(KFbcqhHk zxg=?-W9O1s^g~eSDZYg_yBPW&GRRuJdqiI>sGC=z`@Hc9=eV9u58YN<>LtK>zQsJ! zZhb_Ps;gv`Vb32t8>0^yhAfTB9b7vVzPBciB;Eh1A_PFhnzjRhtDEH!{eZ8|&gENo zX7#+jqt>^E7PX-!Lc}#gnfQOJ>Q}^ z&f#<0P^EL#+i+9VZ@^Q=%9G@(a&LLZUSc8w0cqI;CrrODj}f=UG}8i+r0CQcUJEdA z1!58ol8N2YWc%I+d2~HI?n5_e<@PWfDmj_tQGdvH?Is>qnkQmh(e}M1(ROoV)t#Jo z`N@HsC$A@!h?>Jmt6>t8FEm>+}4{s zZRA*U2i7!`PG`WcBSXc3cUDcFk3c>7C|WP-V56D8gF(9)FAZP&_LB+)YDVRgR6$gj zps3?&B%uWczUL>eyAfz?2pXO%{g&jRU(tfP_r!h;mOGY11u(Q}2WYRS(%G_8R$wn5 z%gJjc^+9x1K5~B+F1ZVrx>PUJ)9DqM%8aZrl^RSY*i0!;Rs>Kf2B^v_>=M^yO=Eom zoYOe*_k7*9TW{_ezpeWlP;^|CQU7gOW9wfZKD@Dlx(v;!UAV(oAa1E zhB|U0aP2&r=C%P9Ci1-V_lmhI@VUEcCG;+t3wNDK;czeI$_bJe`^6>JQD$#c4#0C` z27xoMn=<+RzW@w=ZP83w>88|%v5VXzC$lPu6Vq>f2(7hDbI`G|*ZjEG&Tx@|kK&s- zr?)k(){}2IPBbLHMi&?o&e0k_m05Wy-Mc#CH@~85kctE`mv^c{DiPyia6%>v7^ovB z{Vp3HM$=?G$BsVH*%IO7dYalp6&}lPP?%!WIvOfOysOV8MI+OPO0!m}DPrfko@SOs z%S(Hhbi#2rVFHJptKD$uRaY~~aj8La?A2Q$d=%9z(bIy|kuG^IoC_r`?>_r8$e_!w zO6Jq>J-$neR;KZofr4~VBvJ>Znd7lOl}&yb@+JxZjh!y#Tqa+nkUp_^rTe@Dqlw4~ zu3c%1ClfEY{tTzm413bx59MfQP}q3m(<;5tzz96m92f5xL7Z@!&-3R*(aP-LMuY#P zG1P_c3{!y*9C4M7n-eW^FyNMS5HA%kb0A-c6OFYEVG4Lpx;aa(>OJQ;Y!_?h>-l6z z<-X|&s$;UrLheB*v^5_xw&{nvZ{uyBlhhIc0=sQ*u2%JgWT1mZ)pqquqzrM7&iUnX z-6djE=C0Y4wv|*5OR?BzkESJC{|T{Z*OF>aSqzNWfYQDyGR@)U(JK)yy%%nOWHc(X zd&T{pxS?Gx?0TB6+5)Z2rNg)X*%7L32LsAjc3Y}nPl1^upr1m(=NXeyc7gtN{(h4A z2#^ZezgcYAdZ=nDD}IRj@QWoDKL3nl8OzJ4fCKCrO%HI))jb&XMm*I3Ee$K2k4k^s z1@Xan+~OZKs7dWd-vkKAF&Z5iJ(&`-Up*mJ@78wOREJ~jZ;Sj6Lw{6M3xj{>QN}Rz zdXI7OrQ;=U5^EEC>4Hq#o*OY;WS=KjS*S-(t83z0#noQaHv;nHY%2dydX$lgs=zzC zx8qrxiuGpj$Mj(Qa}P4UIwm5}A)@E$q{jqoF^~Pm7<35jBu9zlq?Fdxx~+A5IIrAr z^TG>_!~QRQmb>*uZ{!NSV4oGjmE;)d6dDxWdggUCVNbwIRw!I}hi)ZO(vuBRmye#{ zwI`XDWF6@}QZQI%ueNl-YE!xQic7<%y?pJzge#b-TbMOs1EKgGT=@F#XkNO&ZArVn z8?nas_EH^7`Kz z>TmjA-zkQj(Jyja^3G@0^2zvGkzSV^r1;;krK-Xg)DHNh6Lkp^XQQ&*yZLUaSLHdn ze2x*B-hFVIdqr+*?VYLLrt4s-ZR|!*4I~e}3}vQri-#n+ME7A&hnp9|ujiQ6)y{J* zJG(M|zsJ^ZuhODZX{dKIsrRH#bqKT{2AmS{=aN-T4&tZJ(~A=6N2VeOlc&mS+ch zgE-Z%+4S`6)1Z~W@n0|Qq23({ zb@v&~hfoeWP z@nj91bskEk{np|jw_JUku)oRa$gvdbqupF79G=^0YhKrl++X~_QRcCD%lrE)%NAO`IBS*0)t)4cu#hZk-HLXz*R-tb-!(e(^eE>?_VY+j zRXs`AQ*OA}OgH=MmG+P&<>bcN_|rk)8pzxD!Dx1(_8Uk*xS9V)>rK8)yF`+q*%vc3`OrIZQiZ@aGG9KGF3 z_Qw+ktdC()Dn~z-TzJBPox|(4cuCfZ|24P5+n<=@C2V7i_*?3%2)j%7-v(~TC!a05 zpk@U(-B*-O$LCIVjWx2mrX<3GtCJ^i28i%osNMYtf4p7@7vkNOqgiI&xL@*YG<&@E zl#Fe3_=ekaM`=u?+NxOT)cAJ!-K4VK$`PMclMxB)yOkuz-+LH?1PDt6+ojOBqSEBK zDm2ek+81=`d1f%7m>C zO!)kc8LPFIgGkP+sdy8oBO<>>!*TcJ(<+F^y_o`q7{%#JIhhLNEOeNHKYLtfUl`QU zID_2`hh|7Bn3y+C+@>_I%3Q*}eT@6Cr91Pof1q_}8N-4F<{~Iwd`nS@{G|(>#+d?t zY^<-=ZOpP^A-_Vj_xwSralLEg9}=d``zNU{BRwV*Q+(wV*9s z{=3cBc0X@(Y}XNOD32vAlvXnxOn?GYySq;rjYU-^}tG<&Vqam^1h z=d=MlxI8RTix&LWpf~w#69SxQpp_RHaN99Xtjj0!h9^ZqbR49f=Kx(vi0q z)_<2~P;-tc`=gjYFm%%KsStb#h9L@j`PAdYonXv(1HWI*l4UpEqNjmFrQ^dn~cEGsRPiVLY8u@gH36g956o3|^NWR_bMy)D>d+mr94 zU7cqX14l|}u5Q~mxdW*19~J{0Bo;sk{}MhQ>>L30x3e{d=hs4MVV&tS`JJkaIpQb{_zc0zTf?4a40mVE^H6YDv2*{{rD;^* z4YP7^AN@y;hF`++!^zfI>f`wL#;2lwzznhH!-s}{e<%$fV<-%bRc1x$Ut@tIl0r?x zC+}2r`d`Zp6A3&545QLhAEtl3Ngy)#Vb~hRc2EA9D58j`!kbZOH#hr_ch2~~YKT&; z%L4y+0sapd?th2)|C4?BzvD$SE^&!l-GGR#zCt6UmtP1evmfLbg5yXnaN?D>S8wiu zBgmIT4TOU|lD2!z{A7|G!n}7PhjI{{dp4_KQ2}~BqTK1KNUwnQ^eclOILz#zMo`(5?_;5o3y`qwF@WSb zG~yHz{eSz&0XhFaK!Xr%-vZ{yw`x!80g1LLS*~tl21L{nI?;+Zd3pq!>E42Jgevpd zFwRtEn+BSVM*j_wQ+^cwcFwNv)DD%>qy*IIYy-DrNg&1e*%76yVqU=Llp(?gNSL<= zwqg3^KoE5!JUEgqzCj*AD9Kit)db*rK4)Ehb&HN&_->@pl1kMim2mIG!z?G-ZO+6 zlK@l;kxnm!`M9x33lMW;_YohrPIbxSI5AJgop`+{0P**0r5Du%xRQEmeZ0LVQy(LQ z+c|_K0<~c#GuHIp6~}>+T<^D?Vq=I#@3l<1vtIV}0ale-+?U^bWk%G4pU+D88Aa=s z>oqDx^46n$oMWczAmdIycn>dG1XzP}cSo^!U3^RdMv=;MWu~84n*?>+?8bYR>wU*# zjmPSPDK4PMKL6t;eSG!pxy8dNg+)LbP9qdLi{KWO;@!s5r57e_h9*qY)J(jk|zQJA>$nGq7(D~1M9y6vmrTd>MS*n z*q4*Pn^J(9Qbp~3`_iO2$Y168iAr|5f@8Wr5I(r~XO?4pO&Y4Bz)Wtn{=fk&YcPDn zv_eQ|ZM$AhPkB$?IBgRUp%a>XqjcQBlqTZ2O@YUPO3Cf*C8bpJKWmG`mZ>^3&u?tp z(r$L4l;cBxEw>P|-2Gluw?9Q4pZj)=Y*wA-NYky9diQHRbtL1Hv+Kkw5eJ>fCbC;= z<7fG!@|>mJX6~kb4VN5Vm`(4g1ep*w)sfi>jIx^-ux-R>rEh&j=5Dj4y(D&y?nQvv z2C$XRtf!A|ZC}UU94A)I-7`^T0WhtX7elX3S_Cz+O4OhB4K3f>F10s1X?IK?GJSpV zGCH`ybsvza!(P(_>Zg}E@);xhyO+XWH@K{o`@_mGbIpKor+G>27**^mF17Na38b-O zuNH4tnj=AL9KjGCJzHXyT*gH9NP6yb6|s`8H$8!WM^+R&f(G>2CRrgFsCJ`wAK%^4 zH&l`-u<5?dIj~)HsQ9{DGF4u|RkV^rhMrchPvfQM*6$zW8(+aIQ02Q3*R6b5QCmqr zMWy; zU1_yj@Cr@HYfBc}*z`J=MxUywCrw$V9|p9a)K07CndTm!EvVbNM{p4Y^NMTda+yu{ z=REy_Lq3x4*p$Lier8I|>B{AFn&meL@}*YoM|!!;aoKJD|z&6+wwv|OKO`F@PAc{)s(3GkVoS0CaUIZr-@2_z1BX$gr>|^9T#%k zrq1|Dflp8cL`jBDvQtL}-)mg{v=(%z_o*b=A;K%#Vadto7Dd-sZkUyv0B11LQ*6O& zs@Fi#b!4A0!!&S}MHo8viXippg1wS;t!1&K;fU|Dt(eHbo>M=!uTERltPI$myEmac za`Q1gx5bAr4tKMRoNlGCY*EwdKHsh1mXdS&oe{Rr%uK@2G{^4%gnw~f$xeuLL+Qzd zx$BCtk1G7$Pu+Xig?G96bmO^J!PpklN$-aN)7Pw{qCqnp*;+2}tK{(8UM@uV`4cxa zr5411>NdO#rSw!!!MgPa!9f>!ZRx1096G+egqsuFuO0-kKbu2b5{25?*IaGyaiRMJamWQScBMO`NY#(sPv_u zx%!&xH*WoToudywU#kA|#(Ja%m9}`uhHBA_L8yqGQ6wKvGz4SR^C~XPgCTwKvdZ}8 zxP#jri04cQzhnqOdU!n%yh)W? zFfFI0J6idLtnIRS7glijPCg=eExu>TC23`PWV#TpE6DqMDe=%eMlA~-%sa>u@Z@-; z0jgc0k`@E}y%T|P_y8lJC`*21OKDd>Vim$06r~Xiit3v`t|A^FqVXs7!^H8)`7`uq zdPzpKtRN4({Z85M20~pwIFn59Vd%%Z6Y*9(i*pz;dv)SYXV_L-`As@ZR^ z4Bu$F!B7fHsAPqzHBKqoaPLNknpi2X@7mj8zil6H*oR$DUcyG7K<`G1-~D|48y{uMz-4bj~7 z?9JTeW0_QnjUB=Uv=>2&TBW~VU|5_b9UhTAn*Me%oJ-vT_IyA8A1^%ED} zFF`(C&QA8dM_|bn@H*VKkAaqb*k5SbS{TeZ@hj?K_13AC5j@hQcN^QnFMly%AGC)? z*yrlEFCHA570l6JTv4p#MMAY3h{1<1N{bPArQN$d%t9N=XG;*OjqT6zv9EP0GQ4I zFp#>>A>eE8x!Ww89Tc~UG(uf{SdO43$&veKO$rq}TAmF{)KH@5w9iIbSum+9%qDB^?qFt6TF?6R?H5?-OZR z2GFsA!~WSgDVSo#zDMF$?%MX%ua^kN;_$d#DP4`4CU3>*6G%bU)xj|(Be7_mT{(k-a{^HYr@&CF}+c<-0|579cYqNK?q6y3mStkktDHMEZf8x@i2S~(oH zh=k2{`E?kHnfGj|8}Of%xg(Swf_H<*v##BYK0=#_*ls7t?*USYa5 zvw_AJykB!oXje>+o!mMPqk;I16$pLKgVr~QwO=|alx7RWUW*TFY*HTY=dpSBm_g1q zbMn1jO3w}B=B@OAazRAHY?a;kQqCWb+girFDvxrdo{k* z`D)UcZfcEF=sw)+N{qR{<|?A&--DG!W+Q(9S-xF12N+&;<+agqh`LNOT0KeLJrQx> zbiHf2ZkYRx_N$?^hXmJOe>RfAQB9;jm3^I^WIF zvh-^@!X9QxFIj9XIK+FgeWhj0>eMW#r{>OjccN6VB#V=vUy$V3Ocl9@@l_FjC)M|wO(nx@i(#cYEDf^vHPl*`KZGsq?mR)$V_E_hKyKbdgIMZW$^ODx}l*gr)!gXO&`HaYV z?rMI{y(_I}f4GRIHp!x?<4>0$7$yn?{#a?O14JP&E~^Ehq8>5GetE1~;FWor@2q7@ z$#9K#RqSpbmb?r25SASMo4%7wQWuv6(I2fnLf`8J^~6$B95M}AYhvgV^}K(80b$vG;#=1#joI*_d3n!PxK^btc-pegRB(zeKO` zcjf)$JQ#Hg|c_~smIj)*&`W~a<;{m0M7RTlqNsX3!-JaM^0sxC02~la-g7C z8Q)4HYNkJ$rbL~0w%7nekqKS!N_$>BkmK#b24Ijmlc=peOe;zGnaTbP{KHjB?&5SY zyBYAVN@QCkj!n|c$C)mxmgjODSSIW7Xwzs0_xzda!qezKI0Z+GZFkqHLuYa&n8b^M zedh?I1OvKY-|LgDuN!Vou0Hi`Wfe8<V>QlLD%}=ml z#dj;#d3RBWVo6I%F||)Rr1ow91kYrJo@c4e%s^>Vv(1kYbQGZ2q9|Mdj{LOLrlj_+ zcAw_Qc4042(a)J;X_J|+fPiZN>}$r)Pr2ToH&;jIYftYOj=JzAQ4>;I=q`L8oqj38Dww$jB8hY2pcsc2(qyV>-ozmsO8WLJN+|^_5g9LypI?& z{0GzMBn+(n_~RzRU#6!WQuBZPgPMGZB#T&IjJ}+D*#YL|4UpN$wNT`pcJyIZHz_cu zKXB^Jy@`)sdyWY}j+9wyyQEin@7s-QZ_9v29fz45@bfp8{c9#)84t*Km6(A3rYJTT1=7@vmJIc59&3x`a2n<@D>F)#w=WI_G*EzeFu=ATS%&;YH?*k&G!J}p9 z_)gJrfv&`Uu!quH;E1q1GTti{92-E&knp%-i*RqIk#fgmBXTvMH@9!m`lRIMWVsQ7 z7m=-566g$2YRVv47-p(Q+kJi^fN=f218o^9EWpgaQ-g3Q?_;(rT{rbta_&Kpk5KUgB^o@sg3TAY@M$d!n^`>$15D~($fd3v7#n+ zUtXS$Ics@sda%5J>@gm`Q#1GM3VIxC>h%fppz)CRmn4s|y;T!YYAqF=?;{eS)Rp>K zAKZ(6efO(EytF%Ud46QXHI)l-nhTO@16A))DQEi7Wjc+J0bVa{66D&rRdXXg8X%ai# zPWDaC%{*Q-<~MU=*GD?B>KkByC>|)at$N1`cB+9AYxA=fUuXpV`TKH8$4B2jbeL&8 z+j`L);+AUT$#=O-SiTO}H_BnovO6ruK7kZe8heWxZSeKkfsMQ;{R#tO=J0-| zFBH6Ei!bwDopYs95}~FQ1)pHGgyZlKRDE+K>)a+ih=F8TT2>p*slK9d&e{+j=~Pr& zO1l3u4Z2|Bc>5LJ(oi;`^@xHw?au7$?u4@e$1B+xO=3xjfDuC%c{zVxr=M z8QbFpTtJwdLw^LFlUy`c`QwngDbN*XEh7d^dvo<(Ar7FTlY67VfmHGo=ha0y<1i!z zy%>fDaib#i14A&T=$8wp7axX`go|1e_Oom&?&XyY)2 z{CfGUUGB6#P#pGfFy{uuwe^9GG?qN&nD`W1|ALxvHeD|ktUP^Sn_~*dej@;lXnJRc|RJp7j^7%UIrZlA2UDCfVms{e01 zs2qab-rAfcO%sbRxKfT){stsD3&eK`)Uf>!^6bIMdi~Sa)`6_Q%~VsRd5h3=xhy~rB! z`N9ES+_0-W3nyn34GceYM3o{Yeq!bKxXAa_s5Hi3lj%=!b-tVVK-(SWd7ilQLdFo@ z&#(1`v;rz%pJ1WeERGv0FQhZ9MQ-~(k{IaNDGyxN7H)E%xgER-bkRv6ntzb35n!{VIoWbw{4A zkT(eSCT$Doj~|~MwQqRBsh4$?(|ri+0wND(nH;!xCUqG6@XLrFK6qCE6eR}0n$L!u zOe&;w;|C!i=c~nvieBXR=f6MEk~j!4*fL(yu?#BQfv#l`HjI1l`eKrE<3KIDF>{}@ zEBw_W-HPz~po}wyEP7#+MV^9NReC~=8g0w-hH<-8c=aYi!;^lM&8 zL-df~H3ES98HCrVJ}z6G_KJWomUt-GB^-wOpxx`+24eL!mK1J|V(UYvy~?ls{heEq zZxb4A^a^jt_s$BYqB_6=%;EK?>c-Tu693z6p&#v$BP+lN@D3HCj+`|s4h_1GkaO(U z7QWW1&Gr!DCBP@ti#`KBGs&%^g=>2v5hT5~I6m90Z&rHI^XJP4&ER33L4Smv8!N~U zt3d}bFQ79cE`s|2Ry=V&nCU3+KC^6(r;+Zw4tdz4`zI5a;gu-cQiW4hLiI5F$}-96 zVN-8`*?fcj#f_Qb+S7c9#qIGSuaCgu+d%tAHsprw6$U;o|1J35$~R8XRmUxLH-$&e zcW84Pyp<-sgd+1slC?KT7|!0%4>JQsYAGRq7l{3db}2TZoD;a)T}fD3FVG?>jJxQ-rc(cf#saXCr7@ zV-|&QKCA4$)(6$TDmbAYH-QedXe5D8SAE*28W>SaOeB!31Ev0x2e!twJa9Xk1K>^0 zuD||F&pFTZ7ySF5c_@T-X0W^!7*-25Aw9*NgNzCg2egv0_vju(vm3jf z0z5B*mHNRy?f~}jCw1Ht5j#<|LkV7n=u84Daz1w8 zVUSlZo)F!6WxN4K4wWAgJ;3QNEcjCPseds-mpGk-3{Z9DGd+U7txqlhGcpMAX6jM2 zTgE|TP#+gyBkwcAppdM`%&|ba$tGqxbmHnu)Zgxm!$6=aoR~nt8es3!4M7W2-{+8hsk|5bH^-Yjk-r~cOX1dgA}b||9PwZ+7~Tun1EO@u5A0N=n@Ua3M=v1H zt--#2-{?Fciu_QB*q`&O4;~D7$?@@pz<0;PWXI8^sVGcz)<0eVm%6}U6R4|hbs<=S zG1vq??898~_-CfzK=@~uJ80#}M+c$VZcK3$3ZZh?mW{sKo9?Ugknjfq2imX+>fCj& zfRX@-ble#U((VqnBegZ%Ihy17Rc3&^0q=f+&1wl)p$tT>{%C#EsWR`;fITyB_wc&N z6=-FKBF7ozA#-V<>g*t@&Ao(xUyd9)U|?(!XFKz8)jnu2nA;*l(*e?{nh%m4(q?Kq zTwN*id*Zpz6V#S4OAtsLFKLVzY9#{APA}^ z2M|ODAa7z{0Fs{|V4K`n1G>YQuT4%6EJH=mq)O5)XS;>y$ueF`cjeQ7d_=k&2ce4* zp?uTERJ+t{f@PBUA3& zU>29#u#zc8D+^cmHGX!zJnek#lPhGmCrd{Xnd39cKIJ&LyrnJuUMPol5=}w9cK&f~ zx+62JsuL-PdgyAFwxQM+W#p&!P$C?_omKdHxG1ggE+myfXvrm?pyv|5dou%+yt!>Q zEGrkB^4qVr<{f{4{q7CYlZtft-G8jR;0Y%2SwMp4eE)cGgt~00iB`TxdNbmsoYH`W zZawEPG)a8L9EZI{E}YmH+1}~}w-3+2-ahH?)VIEUkkuoe{VwP~g0bx4n9@i#yzF|^ zKM?2K#~UEUp@GtD3c_*dbOllVw%u3uMD`b38UaG^p+&g&LH>hlvC!vRIj3_WCX}>f zWhUkiqi^Im$BJcDMzYVyVb*&H`$NKceyjYE|hSafsMbP({9iHc7I1f99}%@mYeI#=We|5r>+_f+Rl@@?09e{h&a)OzYG5^MTUkA}K)j?j!hVhwn{N$1u9G03kt#0Bw`i)2dczn<))R zsc_6sF;uv7PZK3;HL>`V5qw z$>~moO3Y!OGMKH5+uBg~3atKIhUQq4*c|8vCB@LX7IgG6vjI&Z>i-A&)>pc;uUFnp zCE`Zz{|cXW%PiudWMz&|6~{Y}KJ9n_SJI*5b#85oO5oka3UQL=-(K^Z)|<*lXAWF^ zvK{6#nmk@o&9mvLhtHC95biT)!9HN4^W6wE%}B4jM(y`FWd2!~;>m!zOS_&bpj4Vp zzAXYI=0FWSMI@D)137Gphc6NKalIf?eG5=JJQ^leTZm}?#TLy&!uqDClvPmeiy*{J zm}0Bn&ctDwxFyG289Mr&Lb|T##CLzo!xJy0cOP>&bd}m+;xVu9sqh*@l8bekW%}|_ zG{ce5>+-0OvBxZ5)xv&&?h>(H-?X766xk!^Kk1%!!b$)-i3XpbqV6hXV2;)MVV_Hz zlyYzwJkL9x?>?^feDFo`(a3!4ydmChphG0)s4Y81_chKg@+DSFexl<9&unu``NLRw z%%5E!5kymH<@YqQlVvmD4Xe8kJqoOHW2GRu-;({txpaQo(G2d zq1t0_!`>|F&eeX5iVBpXI@aBN`l57fZ>Yybv+*!$A#+?HHjy%L1t=X4OQR`w?-z zCWP>gn2(a~Nl<(C?-B`sc}u$3Oyq3Xul z4aOJ^lWpySobl76YAh0;u!dFuEm*T;U5s$!_YZoL z1$S2NB_Fcv+8bh}x(2DTGhFRUl1vp|A7@woH&L%YPpsSWlKzq4d>{NJ8p~?(mzJ-y zBw2;tbJg#@RUQ|4$^6Ks5w;{;Awr?cZ|fJYQQ?gMd^vUGLa$m&qyoSS=u#6lg#W%) zw2P#rqUZ{?jd{erL8UoHf~+tzXP|w<*6wA`T)Rtu9KXT{Eq>DIW=){=1RdE1(E6I)?x)r>0DPye3`te$AP_faQIGGc5O7@0}Bm1P$Fm9f2d#Mynu5zzZF)WE;hZ_Tyqt0e% z_=_3{1l}sXjhTE9EzHE7q2TWoO)Zo>%#6sSae;oDR zze&5105Cy%b;#L725|uyuL>q!r!pkh{>grH-AY{$v|$G$__X&u9ndXWXL|1uEA1&7 znIH|jm?KoXQ?r9Z!XL1vm}2&_H^%ST9f_!39Ov0wRenzw)ETP<;jl~Lj?fT>v$eYP zmQt&7R&?M`kxV-=dfKeu^{o%I2!x~KqqMvRdw}G)=?xXThQt57oEI0q667-R`gFk! zY#5`H1It`?Lg(gRA2&C<$|ygM?ZT*?6{oBL^O#%eKpsE{q749yCXC=Af&{h+F0+Ty zNfy;wbiou;c-KXxQ1g8)i2eH_2LPB?`A+#;wH5VXIu0arU$zp*8vd?h6Xv3_{f=5jwvf5%NB}jBh}$PLSk+hoUN<@ zNn_6a0VNp{M(dB}_#c#X61PnxsYg|dPj8`ZJ|EGZVwia5ftYtc+;7|5KF_`BprsZ{ zOLeRne`F6*<0x>@BxuXLJW3Js^oh^(eFq%b&)GZy)@4F8`{`r;)JH#;(If~k3Yo;; z`gXy*()Z3kNX?ulQp0xt#!*IdG>)elx##10>3We(9(LYHm407$iiXdn^jxuSpZfUE zT4J;77TOP|x~K`S900F>Go4vhkF+Rhmz1SU6QWyosoiSqk-Wt9CR>!lbTR96*J#I^ z^WAJ*OW{)|lkbmZX&`om>2&;7Re%ze;`APmPB$;P-lY`WVIP2JAS2-Gj2&F|{*BCB zWXPk$6X~_ed$L_tdN{koQOq{YH~pw@UB#O4F5MzVrkqOk9iYS#D%ag-2foR68h^u0 zsu390ugELW`B-z+10ceI0gW8C33rA}f4`&e0nikKZcZn1{CUG>&LZsw7a@G*zkAJ9 zj1AhN*~J1WGWq z=itf}z6NSmY}bQP^_#gLlAyHxj$`^0Rv(Bv0ewBz(5QS*=>2|BRqWF?yBn*Znjo@e zz;`)(J03@>P;1Ca5IF-FkrCcX zEn*TJHs0i-OQlNlLYVf@tdm`T6YT{0VXO?{mT`@jE7E~lRuY;YiVnhEzTh_F(V%<6 zZ6*+I|EDo*t5Yv5O+^nl39nP>BMInpR_0atVd4x=>(g$^zEyRQ= zIF+pdiK0a6$SzJx9Z9q@g+k|jn6VhH?!ZY@C_g(gcSzj#l1YA7Xo_Cg+lPCMz)nck zc}2;ZK&bY(-w}qk9L))!PcPlkdjtoPug{^Sj{p!L&?jR=$=^P6fu!-DkOH_2CIjIw@Ehc zj(9h*A&HtDjHkQ4OI+UokIP&SgT^$R?u*M|;N`$Ju<}85JGA$o>Q;-2URK}MfA>8+ zK3dOr8JM2)_cDB-<<8-!UY{)NSJ!qeh+6z^(}eQ%2G5+0=MO@0>Z}T^hXi$U z?moi8NxiHVBU}W8(|Uu2m8oB|RwjxW;vzsua_DF1m+aC7GjT7yFj%Nmb~C!Z>yY6$ zus-E=164U5AwA@UHq{J^P+;3>FyiwBgz@w8CwqC6%C+F+qyE@0v{u!DIK~G8xCOOc zBKh1^yn`AFgaO1bYm9dH8<zrOdcCuyKriTMfp z;Eu!Q?r1w%h3>-O*d7hrY%JH)>h=)bG@ z|8g(#UBDnr)PK77!NT+!t`s6W)GX_{zXjE_=)V6h*d_Q=#kwRE-v`Xtc^ZIdIj)6-^qZNf3I&$UnRm9Ar9M(9GB^yW+3SA zAa&0M$l)6U^pZn2z*cVJa>QA8XOHJXlT}7&cp}UqV3Hjel(1@r%h1GV4?^Uek{_ij z7op66Pf4WX0V6=EJ(<)^a-Vm2xQC(ah*D^RlX>>_^VcypUbwMt z8j*Nh+Ld}zrZsuKfC_CG>aNrv1>eRfS6<>_F~D2u9?dKzpeD5t~1(YdpAk z8ZnGJeVf?(5K6|TJ?}}vQu%|ftSO~2{XqYa*W}^p{^D%pj=g`~+GT0O*$>tRTed|p z3dp9$((ZF5;Fs?Q7ScF2AKFnXP-iS#4z5<}qvf;igc#=m_ha$eV1VGF%w^n&iehIhb<5G6$clHk z_gIrpLnxR7%X;un7-%|{@W#}C8guQ5I(lV4hZgHgxYA)}i%=v4n$K%s+J0gGQqZnK zT(o3(F^GirC^|l_Ny40g4O6>XZG*oRs-nR^0lLjCQNz%0vI4heRX803HSF%LX5gio zS@$r8A6B6lgQvpfVIP~6_@r?r*by8OLWw7VyuGM_1mFNExQ*d`|E_Ot$PW`}Wds%E z>)BxXfrRz`)SKc$&(9zXO*fS_pm2#YBG=Qw)k^{25ew8})P>lHULa18vIS9t{s(b? z!Buto{g10F>_TZcyoN6_AuL;NHj2%>2Ip zM{uvjV$GU0!#VG`u50gC?U%;ILcl2AeiIRy|2MpmP!dT~`K8Wd{htFs0~C}oKjpj7 z|Icp!|BwH${6@|XNx<5z042ryd9_LbY1ZGJq#u_=_GfllC&&mnT4fxXAc%8-OkbM0 zdXM}KU;|;%t<~iIJ%MCv;qf=TBG8F~$KO@d_GSFd?rI#5cRRy0xJZ!fq)tf|t;D0x zTuNuqm`uZi+QNUQ^${2?7r$;OGo*7o~-N zPSy{FO-CQ9c_&!;HPCjRnlAxR>r)4YA;|0NbcBLD6(nj?#IFB|c92ZLDO0Q6Csq!~ zVgw<{AkbHqfD-)`m8W7CyDkD@U&+l=Zt<_wHdDgC#^qJ$6%74i{puYMZ3%gPQ6EfU zOWGLDoI;O+$eLN`m0Vs09L5-EG(&#YNgs2PE||kc#PXrZB1nTIO>6;|<{zmBdd=V@ zL*m{Xx@D&JqBH;F*IpvIeY8N&ec zN6WA8w@)idf=M4Xcz!iUI?n!SJ^tFQAbM!>uTYlG7=*GEm~{R-xBORQ*hcK-6n3UT zbr!+Q6YtB#0C-GQy~mb5;Nn~W>g?^qx^D>oAP%x^IvRW;#|GuX&+0kpRxFvlfi?XB!8 z1y<%Dx&zz9O(epP)OSHA@?)_4zfPp2TgD2)slMCT+bI^E(L3F_vo&tK`xYa9tyDw&-Q`u z{gr|uv}D%;cNJLE47gD8+n0|i*AD=2WR1+<;n{?p(}U;G9$iDP-u>O2HqSR~c6%pv zSEP}p7*tu>|289lX?#D?$Wb3u0By!--A|B1!L~Z4(WX#w@4QCvbAAe|SZrp_%d{!hyu3np;NbmnA96P$Oq;XYdHUpTR=q|R1#W)8|$3iS=p zOX~Gk+E`O{haN@bp(rczWxonJX$k)7IxJ)fOX?IH5G^<%bEOg}cqe4$65!ZpP)#?& z7p=cV3Ge)I!qFJcZzOd5Z!O(bi8N_+b946B1;-Yas@0NsSX6*Is*z3vkhMWB$vJN4X!Op(*Y!yfN&9fTK!tgtv1{UQh#5!?!>^w}a{wDeD`D#qS6)ypTX}hvQ*EGHjW{B@N$hQb-9HJnu-* z=OLv;vNJN_C93>hTJIlpdtLcdmk6CKpi{p%EDLa^pz;4AH1VeuN(*O(=De+mTi=oW z3&C|V1R5bi;pPX`g2sOyK*6YJ?jLAo)i=_Smq3XoU@XIh+5QaD$?9EmD2|XqBW*;r zh;30MQfRacy9&fMoxLGU`e!j*`@f6f+v9hWNv5$qezrT|!k;Dp2%kT0&PWx`O^q^5 z9IkO=S*DP>7GTi1IjNt)Dtvk|x$3?1(7Lg9h~Cb<$(4S6ZFg&?C#=3m`F!cp=VpUx z#B=d1p6zen`~WJrUPt&r-wc{r%G4Lf9e(%C0x5~^03p$_oCRTUgbKwVUy2Uuw?DY! zrT3tg4cfgrJT8QSbQ{p(ZlsV&c<};rYw(fMm1t{%&%S&v8dK`%@Mm(34Fq=Yqr~Lp zn^{j78=9(qNG)4T;7O?9SaUbm$T=<25_0-VKKMis=f_QQdedjd{6B6g(W|hhZBR%# z8$9g1(-KKes4pe+Uj4?LFnn3aPIKH7{eHU4!!vng^eh-BT0f$i!Cv1>5pPT4or<7P z4bwj^vCE%6OFD%#j4T7$szpYL#>D?$m)JXFxg~zZ6plk222~23+SGR!Rrh_e9pu%l z%kOpjOdDOVt^ZVX&Q^*yr#^W?J8J)8x5}$w*{88$?9OQ=SCq$W^3q7{aFmCBjY|H` z#(=}_b}P<#gQ=5f)?oJK1{1aGSAC8rM+L)68eP>QG!oBeglGq>A}VPsjnj&1H+~)J zedlD`jcP`BoN4(jR5fsu<``c4&w_~ScKD{W?Z~t@Bciw7H!kNGGO9I_-v*z_= z=|?eoxx&4|**Ps8{ZL1?o$Pm7#d-(3HMTy|w*zh#Y7O|biJ9!Ta%=l1*;MKTODqY| z4_Ixji#U@VU0C$qw|b4E-LsmU`mYus6SUcf>m8pJ8^ z@7s|}aE*KrO!(e>Y7BXY)tT&T^B$wsNCi8{cjjN0WYpcYy7+zWOpI5}zP$xnTyLBP z?GF$8eJUZY?Nwt9GzvpE%nkmZM~=zcSdBFJKPJb`;&b7d|HzXT=5JbWyO}*(0O-XceTdyFW79D$F80V??X@4ZTI#( z%PY}6RaIO^Q43o3nT;dz!6lZoBTMFK8%r)c#f@XJTO#JCX$$th)GR$D3pHGMP+4Rq zxO3CIyaXo%<}-%x^ZdM4`L|7jpg+jP9fU;JSY&)SXdiYj#xrEGxieA?2YBIuy0U%3JK$#QvKNL!kQAxt&acv^8nc#zVB^*y?nS)eq@Al z%gRT9{$G&msTQEGLx`LYBZMzAK;i09d`mw{fgiI$?AOIF=Zqtu+h4jF0e-JVhfo;E zVyYoCDr34wd&>5@P-R|n)w5pun^r?v)a6@LRLe<0N!>}6STyTbyW+j%yWEx%+{P}0 zCmWSi!Q@`KGFBTG0Ybkr-ql#%m(Hv%F8EP;+$yy~HkEN;qjB3?EUx*XU9r*AJ^E8- zufRv^TLVI`2e1cU?Y`a4m}u(qE;M#+#bL0w(kP73soH%*;aC-Wj{ozHLtR0nYU?+7 zgL0lFJ)<)HAd`uE7bX;()geRgt3UJoS;}_#qdhq?>M`wn^RRZ|e1Xg+-bX{HWH`#5 zSgONhZJvr4hXGRWYB=>Sbb9an+Tk~-vVGzr!Hjne(BQ&g4xNk|qbA?-U$s4fz8gpp zXX{~VZT;NgH2R?YZ2qgEqdzLSatq}Ex7urHq#wlUTL@(4VY=+{cd=~PHW@JBvE=riV%fG@ON1xo~b@4Wm2QNAi0W`j3t;lS3h$(g*a@d z@7^i35G_*uDp|BkkT$nG7+n6bK5=>_<#?w zo3&qq$xkEbyYnKKK3G}2puR#ZQd|bd6URxKUE7~lhl?+bc`*h`v)LAUNZi^@@oF-} zO&CCi!iCO#;IfMeoMx-s7K$KF%Mqy#iOa76*%CSdDCdq=I-`D-G=c2exm+7h=F)mv zQ^>z3$~jk?tlIKRIu@j*1r?C7@P>TJYDk6qqz9h+Vu&^<$<#Gv40&602sdrBOZzXr zg4tCnC52+AZyqJ_&^eA){7H91Nx}NnOo~Cj&tg1;J6XZ1f?8#RB% z!wufQtoC6w)zWdGFyXtgjGIAXk1z6WwMay3-cg;p)v?JwjLO=|{+;OC_f~n!4r6fA4a!^-t?U<@8?T z;t$pRhr@sFv9P@Je?!UrA~R-4jDddVy|cU0)rlDkk&^}2E35*G*<{zAV+jkR5(f%U zO7da6UGaXl-x6K0F!AJ3KhEgXqC-dLRVU|=7sJBsquWeDxAhm-y#qcy3T#1G?wp7f zP$h@U-^E|?%pkbxXdhy2rKTK0I-Z$5h1Um(e=&eaS#LP-*1mc0PU#D{dWi^z+D(mn zAdvL{657*g2w9&HQ1PLGnoHWyFpG!+R6~M_JGi+YKzv%xAQ|{m02Gp@MSV_W42GY= zu}IV*qCgx=F+}(DP$5LOSFu@E3Jv+w7Kmj@!tkVAc)15VM)%l9&QRu-XW_FDj6$nA zQ`IGs$Jcuw4<)oqXyIqxc~MK(IC{ReU?k}FB>;<=n9{vk{GbBz_B#2?@x}{#7{k*f zQ5WsIvN_QuOO-K?73I@n2Hm89`u)w?=PFWyJ00WJ^JMFt760;LY~gA zi`2-ffXw9c># zD;X4brhuoga>mOMQbl%W5pO=VbRlM#Z03VsZVz~f2vLzgt|kaMPAS8yZ;}7s^V>ms zKD`oTJ<1HI4=5iB=KuS7#Hd)w^Y@hzZ`GH~eSTMbPxQYTpC*NP%UfWt_U|9Mjv!^Q z_lr)>WztkYn?D$Axc&V-Z=%Wn=RZPzW@sU?YcJ3C_qzNJ--PQ@*kKE!CpWglZivRCLhu=AU;PN1)vX@Z! z_useeV$p~smv<)<)-HVzVn>`1C!>_7W%c~~a4@5#yb-s(Q8YBDB&me)`?MJia$wbP zlO&^z&;9#Z@X_ek2}!ODWe56!^BR|io#=sj$+f*yG#07(L*42d|6D&|C=)ZU3mqYC z;Ko`B`IfN;#MiU&cG@CyOVd+XPt| zP~8&?E9y&JC5h?p3vbGjFbTRL+xrN&aebvVGIlZSRN!t)U^6fFGb`9y~_66btL z7pGdrQ#je&!#Q?9S24K4lCK{m6i}B{KK~C7eMZw0rAp_Hw9Tkg^K*HC_;NJ(%K#$N-7NY-*k9i|Svg7ST(+9YO!Lt>mS>=Z| z`E<_8@F<*;w5dt{y}@OfD4oTW-p@aMjqTs`Y{14Y3$l+*E>{liqAAhC?KW3Pg-@YG ze#&iEC!PQEDRJbeI26V+@9nPV_@rA^)K~K!x%XTXQ9o&#k3Wy9V)_=Lhz9)@0TUh`Jw3g!sFKrvYoU!Bp(2zNiy$W9iu&|* zVAj&ZfR59K)4=w9DK+uFF6trRp%&2WK-#zPENELIT z*5F$NwSJ^3lqXPXf5tb=CwG^7_R8APzT58pr7KRoOJQ8h2HFd#g~KqmF{U-|r6 z?%xHu!$L@lSJvP+LVgWRwx;67jJV(gPD=|#v5A85i0+doQo89sjtcTI>ljeeNRh%- z!N<8kW(Y9`!&HMZ>)~t9ICSvAnnn#qj@bK>e@H2Kj0J=l?f-j6=wuj5Eswkzsnm3| zt4P>lE&lwxsasoujZep!&>p74z``QmoK!f>Y{SXHUKn?q*i{s@BIwVfcxqvM2(oAg z(uI(e)N-PpM${b*DDYlDL6^6-q97W?6i~g*QRKM_3Oro*))Bwl%O%w1HtdfwI5!U0&WQq$(mM;IV)Q zufPFE$!m&2=eJJe`SoLWxP?Z}zBLOIlMEA!WX?~+e_l<)1eBCvzoYhGYZnzE8#n1l z3PWRN040!pmxfUSoZ|L&5g6bxk+@{ymkoclL%>#=WGl*fF^ zkF!{4P||H}xw*Q^CoAvjN~~XdCw#JaO{4x$@6%-*k8|7M#>By_gEArMvo{~>xpdd# zt#G)0c)20C8Ku|>Bk^ftpFJae2H5s|$TOh4Frz@YPYpo1+zY`mUay3_{Mu zNcB3EY;h`3AoF8=C1q^lGBX!*(E(lM=Bj+rM%+J#b`*)Jne<}7y5oe>m9P%3r^7l$ znC&05CI~4gj+4G9-23xWo`^(~b~uy1BjtXH{N|oG0X=uj_?z2nd6_4#<&$WtC3d7o z)Hx$9tz6uDDx%)@h=`)55i$VTC8S%s2J)Uxm<^@6dIrIp7}!{m=FQOd30dUz?f>}E z4Y3(vK$p-0iO6?O@A&oWS6>KKy9Mw%1b_8z)(if-zGT}JF{jfV=}1T(@3odjk#k+# z8%&K-FPy}xd}0z@98ucp9PPZ|o#TH>yJ@r6x`ch(=c?I!oh{ncyv>G{&!5fr4-rkx zJR1bzBf6xF2cpC?{yz{Mok#SgbWF=kXj#S~0U*pj+ekB!!r%xF4i5VPH?3rhBhN-X0uhP z1=_oubbgj8USsg^Y1w|b+ac6=q|D9DdBL961d_Bm(6r<201@}X;4f+V`*sAHivp6H z(cV;$_TxAN!R9Iu46MT8t6`(2Pagq2Vf3@D+V`K=a~~67(Yu-LI1-RlrsU07 z=UYw*q0@M)s{^?K=SOv}?Kl>_7pV?^lI}(+t^7GPV7@iJG@r4bG?Bn$x$|J~yJy!m zVYLxm?Yj@V|UcY`lG>l2I^fluLWYL)IFSi#!0EOr$XnW0J&KU&jMex5WpZxd6 zX3LvSa++=^4F=AsuQBtOZjGET|CqYHGF^^xyh9atvb$FLrNK&BF5t|}<88kGN_nqP zx+{040qnw8FqFclaW$`GC4?wrCJ*ua0zoVl(rE#pKPgm@0`=6S^biT3M}%AT)hZkF zWr-u#gFc%8c;u`_adP;6Zw|phK&`_mW`2uwyS$g~F7RQ)l6u17wR~W_k>%;J{_x-F zB0_)~X{wrm*0n{5+1wGbPuMv1B5NnitdmJ)H;ITjsFmp?Vs|5Z&=yegxv9;Vd}Fx`Alm4LEbn z-1M0hmd5$FGVo!RB7#>+%DrM^B+{p$!+UDBIQW-S;P2B`ul;$C!tsLfCq-tsqpz>; zeS9aVB6w_*t(V}wF=7yKv5_Whdiven_n@0>GA`N9AtWJ+D{ZQndaSvzT3K6?$W;u% z%^?K=IWZ9J*1jHPDKvX{=>7Ql$MaKU6d)!tYshLN$#55qon7}!as;+8V42?%dHVxF zXK>H63fR18JpHqaz2Hm!ljf88DvXGJ?BdUSut?T-FAxtE8~+zYQfRmMyHUBl~PO?h$l z=Gs5!<%{oFSg5{x&66VTZ&{q1y(r-L;E5|MVwOh?Z((7De)(uc@x6KK@aT88-JSa? zh#pS#ryjb0DjtY&A>fdW>t44jwv^ZX6E$}c`J}Yv=KxCq zlK5xk=}vX!q43wKGW@scF+$)_AmYgNN+bo?-w@_L-%Yun5t^%AwPH2bB7sRCFh)$l z?F)W>;asEJg8?bDw;vOdO&}<^&p^;Gypd7nyzwTqDeG^+U6g%~R<4Z-v#tt-Q7Y)% z1Sa!Qh+6BZy&yI9bQZ6h=qj(#YzYf9SrK|FoOK~i4@bb3D|bsK)muvn3Hp8 zJ+SPXSOk`&&C{RA+97-dxc2zI7rbVVu|^;Ky9kL~Wf1u8J^J+(*Q|%J?>@h2qgvtT z>iS^PTCdCX;`i0Fy*g%%qdGKWPt z`PFy79iy_Ni1MD?fwT?hriZ!$GH7W3;GjJ70Qk2yL`>C+QMoyK3($8Ky@O&bxa0rl zTRcFJGIBmhPq(d?iZs8)G8lW0V*wrK8ze#2WKt&%^}Gr`*6?tg^`yNfAQIUUIMuOq zdAOym;$)PjSKc;oB{h(lDTGd5|@FzMk(OY-JQ~Mrr3Pd>+@+rS^A2CGi zd)q7hvuxN^5aZ)*O@68O%f{h=Y5>UrR!d9TSpKM(fW4={5?N)&BlilPfwcQq9ipMY zMqgRMSl)G7OTcDIu z^!M3`h-U%mw+UqdHNEb*{JF~_SY|SJL#4xZUTHGRR*hP741sog>4&r#@bVMbb(?&}=o$F!~ViO4xxiTT> zu1obv)WW?O+raBjX1uGiag3bp)g$cyb0pL}AL_?qlH#FW;|zd`^~*$IT6u-`-@BE> zSZ0C2Yxi`+JM2n`*~<`=C4^aYjG5JOPo8t%r~9SDAL7*x4i0*U6Bw|tZ<@Bth*=~U zVY6(eN9F3`_QO(SV_bGau&|wi;KUrDzn=b^l_HGYy;XLfTp^n+7q}#3g_J^*mdc2T zxNiz^EYmP!p&tF=|304iFMi`x?=*Xq_{C8;7V71sS3w_A95y@~*@hi*vdU=^ACib= zhsfh3@6Odyrxih2@ERJe$nOB1kGBQ~&%^eQiG#zhHR96nm38gyJ61%t6ayT0^B1>h zZq@e8bqqC#Ww+h+2bgDH3W4w1Gw>EP)LsE6dL*AqgK?icap1a{PjPK#x>M@&wZX4< zW%zdd>^>E;BBs*eQwb|1y}pq``Dc+BTGJeM6;B3KBH-*LIO30VgfS`IjV#tE44l^Ja(0{JnHb~Jr>}y`?*y^VKGeTf8;|z~C*jb(W%rTgVWIYJ>|GK66VBDuRh0txLLwxg z5GIX|#1GV*edgUTz^!cdETW;>RHiqu6EZfVNHE;P#MYTtfZ z=gGK{;arz);`Xfm7k6(_JL-sT@P!`gUd!B7pM`3?+9kTQ>XKpu4s&Qg@_wF6oc@l$ zr#&(lnn7S#^W3k5(_L}AA}t5%#ipjY~)-{*LNDclQ7go zz%a5a;AD;l`#(BT8iw`awe51FJ~+YyreGMeDDxc%rAoN`)p`leqKT9CWL-lm9* zL#E8vO%<1>ZXjHnR`Pq2#v5nZgH^jcgxGedrHjqzPqVIQ>hXpjjN->*sgIq)kWHiL zt{*dVsKXh~XNzs~Tr6U(pdwzrQ`BuCN^ z7EJ(gUP4oM4a-bXkpi|RkZH22Wj}rgbC-R=Sfc?ETxlY{Tpt6m)I*xUQs1K_%*coe z_BwV-bCE~Kw%3yy_sSh?n3hS==CwnTxrc3EdqksdKIUcX>Jjp^MYEp}OS}^(v@Ys? zvXeL6bS|cnb!I|sGy3LsXPGa_)8+#TB^9OCdn3Abid$vB3h%p~w9!3#KSwy_^_xOT zyYOrJAA9nAB&fS~z*`d36-~719loOX!uu__v;|gfu6z)(XV&oY5kQ?RUr~)JE#(29 zt@V!Qi$>V$splcVDKRK(6S+Tzaw1RAx--GR zYHg!dH^OLZU53{^0Yr8bc?uXCbyN`yLpBF3>~gCl1hY+7SjEL8*)%nquQ{Q7C_!gU ze){w=q(5is3*ufGBJCpcy~@Zv)=SHVnpH7S7t5&_F&g3p+N?)9X%2NjHay;tF9Sk<$#qH zSta!Mr$$LMkq|!B(BW)7nKEfl=X+PI$lH3*)2z2(*ZXT+ez?rv$M5I}!IraCoeUL& zu4}#j>F-oy+gGnEOzMt}V`ZmmHF4 zP#RKHRMZ6}A`y*a(;vuW6Rsc*D9*aKAe%FW2|(r=)JSrko&qqL%)zis%;$TSmMwoP zhNdrXQj9Pw5{`sW*LZwdv2|gUS4cQaiX1hGkYU~lumVy>=}E0?5HtSh?4Y;7_9F{w zwf)PsmCozs-cDA4E3Bm&th(+s <+L&H8TEL6kS)bw$@WI=k~+kmF2iF@X9b7LcZ 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 JtE{}4e*m?%q80!E diff --git a/test/image/mocks/annotations.json b/test/image/mocks/annotations.json index 9eea27ff63e..4a6a7b08f3f 100644 --- a/test/image/mocks/annotations.json +++ b/test/image/mocks/annotations.json @@ -41,7 +41,8 @@ "bordercolor":"rgb(255, 0, 0)","borderwidth":4,"bgcolor":"rgba(255,255,0,0.5)", "font":{"color":"rgb(0, 0, 255)","size":20}, "arrowcolor":"rgb(166, 28, 0)","borderpad":3,"textangle":50,"x":5,"y":1 - } + }, + {"text":"","showarrow":true,"borderwidth":1.2,"arrowhead":2,"absolutetail":true,"x":5,"y":5,"ax":4,"ay":3} ] } } diff --git a/test/jasmine/tests/annotations_test.js b/test/jasmine/tests/annotations_test.js new file mode 100644 index 00000000000..0d7741938a7 --- /dev/null +++ b/test/jasmine/tests/annotations_test.js @@ -0,0 +1,32 @@ +var PlotlyInternal = require('@src/plotly'); +var Plots = require('@src/plots/plots'); +var Annotations = require('@src/components/annotations'); + + +describe('Test annotations', function() { + 'use strict'; + + describe('supplyLayoutDefaults', function() { + it('should default to not use absolute arrow tail', function() { + var annotationDefaults = {}; + annotationDefaults._has = Plots._hasPlotType.bind(annotationDefaults); + + Annotations.supplyLayoutDefaults({ annotations: [{ showarrow: true, arrowhead: 2}] }, annotationDefaults); + + expect(annotationDefaults.annotations[0].absolutetail).toBe(false); + }); + + it('should convert ax/ay date coordinates to milliseconds if absolutetail is true', function() { + var annotationOut = { xaxis: { type: 'date', range: ['2000-01-01', '2016-01-01'] }}; + annotationOut._has = Plots._hasPlotType.bind(annotationOut); + + var annotationIn = { + annotations: [{ showarrow: true, absolutetail: true, x: '2008-07-01', ax: '2004-07-01', y: 0, ay: 50}] + }; + + Annotations.supplyLayoutDefaults(annotationIn, annotationOut); + + expect(annotationIn.annotations[0].ax).toEqual(1088654400000); + }); + }); +}); diff --git a/test/jasmine/tests/download_test.js b/test/jasmine/tests/download_test.js index 40d68529e25..b5062886c87 100644 --- a/test/jasmine/tests/download_test.js +++ b/test/jasmine/tests/download_test.js @@ -44,45 +44,84 @@ describe('Plotly.downloadImage', function() { }); it('should create link, remove link, accept options', function(done) { - //use MutationObserver to monitor the DOM - //for changes - //code modeled after - //https://developer.mozilla.org/en-US/docs/Web/API/MutationObserver - // select the target node - var target = document.body; - var domchanges = []; - - // create an observer instance - var observer = new MutationObserver(function(mutations) { - mutations.forEach(function(mutation) { - domchanges.push(mutation); - }); - }); + downloadTest(gd, 'jpeg', done); + }); - Plotly.plot(gd, textchartMock.data, textchartMock.layout).then(function(gd) { - // start observing dom - // configuration of the observer: - var config = { childList: true }; - - // pass in the target node and observer options - observer.observe(target, config); - - return Plotly.downloadImage(gd, {format: 'jpeg', height: 300, width: 300, filename: 'plotly_download'}); - }).then(function(filename) { - // stop observing - observer.disconnect(); - // look for an added and removed link - var linkadded = domchanges[domchanges.length - 2].addedNodes[0].outerHTML; - var linkdeleted = domchanges[domchanges.length - 1].removedNodes[0].outerHTML; - - // check for a Date: Mon, 6 Jun 2016 23:59:10 -0400 Subject: [PATCH 07/16] Trying to fix tests for absolutetail. --- test/jasmine/tests/annotations_test.js | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/test/jasmine/tests/annotations_test.js b/test/jasmine/tests/annotations_test.js index fad98cca0cf..6bb4f54f162 100644 --- a/test/jasmine/tests/annotations_test.js +++ b/test/jasmine/tests/annotations_test.js @@ -1,14 +1,12 @@ -var Plots = require('@src/plots/plots'); var Annotations = require('@src/components/annotations'); - describe('Test annotations', function() { 'use strict'; describe('supplyLayoutDefaults', function() { it('should default to not use absolute arrow tail', function() { var annotationDefaults = {}; - annotationDefaults._has = Plots._hasPlotType.bind(annotationDefaults); + annotationDefaults._has = function() { return false }; Annotations.supplyLayoutDefaults({ annotations: [{ showarrow: true, arrowhead: 2}] }, annotationDefaults); @@ -17,7 +15,7 @@ describe('Test annotations', function() { it('should convert ax/ay date coordinates to milliseconds if absolutetail is true', function() { var annotationOut = { xaxis: { type: 'date', range: ['2000-01-01', '2016-01-01'] }}; - annotationOut._has = Plots._hasPlotType.bind(annotationOut); + annotationOut._has = function() { return false }; var annotationIn = { annotations: [{ showarrow: true, absolutetail: true, x: '2008-07-01', ax: '2004-07-01', y: 0, ay: 50}] From 91dd08a4ce4541f8b9204fcc686022635bfa4265 Mon Sep 17 00:00:00 2001 From: MFed Date: Tue, 7 Jun 2016 00:08:03 -0400 Subject: [PATCH 08/16] Removing these unit tests because they are of dubious value relative to the time I'm spending trying to figure out why they are breaking everything else. --- test/jasmine/tests/annotations_test.js | 29 -------------------------- 1 file changed, 29 deletions(-) delete mode 100644 test/jasmine/tests/annotations_test.js diff --git a/test/jasmine/tests/annotations_test.js b/test/jasmine/tests/annotations_test.js deleted file mode 100644 index 6bb4f54f162..00000000000 --- a/test/jasmine/tests/annotations_test.js +++ /dev/null @@ -1,29 +0,0 @@ -var Annotations = require('@src/components/annotations'); - -describe('Test annotations', function() { - 'use strict'; - - describe('supplyLayoutDefaults', function() { - it('should default to not use absolute arrow tail', function() { - var annotationDefaults = {}; - annotationDefaults._has = function() { return false }; - - Annotations.supplyLayoutDefaults({ annotations: [{ showarrow: true, arrowhead: 2}] }, annotationDefaults); - - expect(annotationDefaults.annotations[0].absolutetail).toBe(false); - }); - - it('should convert ax/ay date coordinates to milliseconds if absolutetail is true', function() { - var annotationOut = { xaxis: { type: 'date', range: ['2000-01-01', '2016-01-01'] }}; - annotationOut._has = function() { return false }; - - var annotationIn = { - annotations: [{ showarrow: true, absolutetail: true, x: '2008-07-01', ax: '2004-07-01', y: 0, ay: 50}] - }; - - Annotations.supplyLayoutDefaults(annotationIn, annotationOut); - - expect(annotationIn.annotations[0].ax).toEqual(1088654400000); - }); - }); -}); From dbdcaac3963bb4a7dfeb674d6e229c71b2a5f922 Mon Sep 17 00:00:00 2001 From: MFed Date: Tue, 7 Jun 2016 12:11:38 -0400 Subject: [PATCH 09/16] fixing the unit tests for annotations and adding them back. --- test/jasmine/tests/annotations_test.js | 30 ++++++++++++++++++++++++++ 1 file changed, 30 insertions(+) create mode 100644 test/jasmine/tests/annotations_test.js diff --git a/test/jasmine/tests/annotations_test.js b/test/jasmine/tests/annotations_test.js new file mode 100644 index 00000000000..2428c7498f7 --- /dev/null +++ b/test/jasmine/tests/annotations_test.js @@ -0,0 +1,30 @@ +require('@src/plotly'); +var Annotations = require('@src/components/annotations'); + +describe('Test annotations', function() { + 'use strict'; + + describe('supplyLayoutDefaults', function() { + it('should default to not use absolute arrow tail', function() { + var annotationDefaults = {}; + annotationDefaults._has = function() { return false }; + + Annotations.supplyLayoutDefaults({ annotations: [{ showarrow: true, arrowhead: 2}] }, annotationDefaults); + + expect(annotationDefaults.annotations[0].absolutetail).toBe(false); + }); + + it('should convert ax/ay date coordinates to milliseconds if absolutetail is true', function() { + var annotationOut = { xaxis: { type: 'date', range: ['2000-01-01', '2016-01-01'] }}; + annotationOut._has = function() { return false }; + + var annotationIn = { + annotations: [{ showarrow: true, absolutetail: true, x: '2008-07-01', ax: '2004-07-01', y: 0, ay: 50}] + }; + + Annotations.supplyLayoutDefaults(annotationIn, annotationOut); + + expect(annotationIn.annotations[0].ax).toEqual(1088654400000); + }); + }); +}); From 253a3fa95d72f2c1167f6ed9979be860f126b50c Mon Sep 17 00:00:00 2001 From: MFed Date: Tue, 7 Jun 2016 12:22:26 -0400 Subject: [PATCH 10/16] fixing timezone problem in annotations test. --- test/jasmine/tests/annotations_test.js | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/test/jasmine/tests/annotations_test.js b/test/jasmine/tests/annotations_test.js index 2428c7498f7..beaf0f298cd 100644 --- a/test/jasmine/tests/annotations_test.js +++ b/test/jasmine/tests/annotations_test.js @@ -1,5 +1,6 @@ require('@src/plotly'); var Annotations = require('@src/components/annotations'); +var Dates = require('@src/lib/dates'); describe('Test annotations', function() { 'use strict'; @@ -24,7 +25,7 @@ describe('Test annotations', function() { Annotations.supplyLayoutDefaults(annotationIn, annotationOut); - expect(annotationIn.annotations[0].ax).toEqual(1088654400000); + expect(annotationIn.annotations[0].ax).toEqual(Dates.dateTime2ms('2004-07-01')); }); }); }); From 4aa569d861f75f24d91b97867c80114069a283ae Mon Sep 17 00:00:00 2001 From: MFed Date: Tue, 7 Jun 2016 12:35:11 -0400 Subject: [PATCH 11/16] fixing lint for annotation tests. --- test/jasmine/tests/annotations_test.js | 34 +++++++++++++------------- 1 file changed, 17 insertions(+), 17 deletions(-) diff --git a/test/jasmine/tests/annotations_test.js b/test/jasmine/tests/annotations_test.js index beaf0f298cd..0b00832519b 100644 --- a/test/jasmine/tests/annotations_test.js +++ b/test/jasmine/tests/annotations_test.js @@ -3,29 +3,29 @@ var Annotations = require('@src/components/annotations'); var Dates = require('@src/lib/dates'); describe('Test annotations', function() { - 'use strict'; + 'use strict'; - describe('supplyLayoutDefaults', function() { - it('should default to not use absolute arrow tail', function() { - var annotationDefaults = {}; - annotationDefaults._has = function() { return false }; + describe('supplyLayoutDefaults', function() { + it('should default to not use absolute arrow tail', function() { + var annotationDefaults = {}; + annotationDefaults._has = function() { return false; }; - Annotations.supplyLayoutDefaults({ annotations: [{ showarrow: true, arrowhead: 2}] }, annotationDefaults); + Annotations.supplyLayoutDefaults({ annotations: [{ showarrow: true, arrowhead: 2}] }, annotationDefaults); - expect(annotationDefaults.annotations[0].absolutetail).toBe(false); - }); + expect(annotationDefaults.annotations[0].absolutetail).toBe(false); + }); - it('should convert ax/ay date coordinates to milliseconds if absolutetail is true', function() { - var annotationOut = { xaxis: { type: 'date', range: ['2000-01-01', '2016-01-01'] }}; - annotationOut._has = function() { return false }; + it('should convert ax/ay date coordinates to milliseconds if absolutetail is true', function() { + var annotationOut = { xaxis: { type: 'date', range: ['2000-01-01', '2016-01-01'] }}; + annotationOut._has = function() { return false; }; - var annotationIn = { - annotations: [{ showarrow: true, absolutetail: true, x: '2008-07-01', ax: '2004-07-01', y: 0, ay: 50}] - }; + var annotationIn = { + annotations: [{ showarrow: true, absolutetail: true, x: '2008-07-01', ax: '2004-07-01', y: 0, ay: 50}] + }; - Annotations.supplyLayoutDefaults(annotationIn, annotationOut); + Annotations.supplyLayoutDefaults(annotationIn, annotationOut); - expect(annotationIn.annotations[0].ax).toEqual(Dates.dateTime2ms('2004-07-01')); + expect(annotationIn.annotations[0].ax).toEqual(Dates.dateTime2ms('2004-07-01')); + }); }); - }); }); From a0083548316441cb3c4b370850cc9d5b6354f61a Mon Sep 17 00:00:00 2001 From: MFed Date: Tue, 14 Jun 2016 11:27:30 -0400 Subject: [PATCH 12/16] Switching absolutetail to axref, ayref based on code review feedback. Can't figure out how the regex for axis ref works, so hardcoded to x,y for now and seeking guidance. --- src/components/annotations/attributes.js | 57 ++++++++++++++++-------- src/components/annotations/index.js | 57 ++++++++++++++---------- test/image/mocks/annotations.json | 2 +- test/jasmine/tests/annotations_test.js | 11 ++--- 4 files changed, 79 insertions(+), 48 deletions(-) diff --git a/src/components/annotations/attributes.js b/src/components/annotations/attributes.js index 8e71333a4d1..56456608815 100644 --- a/src/components/annotations/attributes.js +++ b/src/components/annotations/attributes.js @@ -131,31 +131,16 @@ module.exports = { role: 'style', description: 'Sets the width (in px) of annotation arrow.' }, - absolutetail: { - valType: 'boolean', - dflt: false, - role: 'style', - description: [ - 'Indicates if the tail of this arrow is a point in ', - 'the coordinate system vs a relative offset in pixels.', - 'This is useful for trendline annotations which should ', - 'continue to indicate the correct trend when zoomed.', - 'If *true*, `ax` is a value on the x axis and `ay` is ', - 'a value on the y axis.', - 'If *false*, `ax` and `ay` assume their normal offset ', - 'roles.' - ].join(' ') - }, ax: { valType: 'number', dflt: -10, role: 'info', description: [ 'Sets the x component of the arrow tail about the arrow head.', - 'If `absolutetail` is false, a positive (negative) ', + 'If `axref` is `pixel`, a positive (negative) ', 'component corresponds to an arrow pointing', 'from right to left (left to right).', - 'If `absolutetail` is true, this is a value on the x axis.' + 'If `axref` is an axis, this is a value on that axis.' ].join(' ') }, ay: { @@ -164,10 +149,44 @@ module.exports = { role: 'info', description: [ 'Sets the y component of the arrow tail about the arrow head.', - 'If `absolutetail` is false, a positive (negative) ', + 'If `ayref` is `pixel`, a positive (negative) ', 'component corresponds to an arrow pointing', 'from bottom to top (top to bottom).', - 'If `absolutetail` is true, this is a value on the y axis.' + 'If `ayref` is an axis, this is a value on that axis.' + ].join(' ') + }, + axref: { + valType: 'enumerated', + dflt: 'pixel', + values: [ + 'pixel', + 'x' + ], + role: 'info', + description: [ + 'Indicates in what terms the tail of the annotation (ax,ay) ', + 'is specified. If `pixel`, `ax` is a relative offset in pixels ', + 'from `x`. If set to an x axis id (e.g. *x* or *x2*), `ax` is ', + 'specified in the same terms as that axis. This is useful ', + 'for trendline annotations which should continue to indicate ', + 'the correct trend when zoomed.' + ].join(' ') + }, + ayref: { + valType: 'enumerated', + dflt: 'pixel', + values: [ + 'pixel', + 'y' + ], + role: 'info', + description: [ + 'Indicates in what terms the tail of the annotation (ax,ay) ', + 'is specified. If `pixel`, `ay` is a relative offset in pixels ', + 'from `y`. If set to a y axis id (e.g. *y* or *y2*), `ay` is ', + 'specified in the same terms as that axis. This is useful ', + 'for trendline annotations which should continue to indicate ', + 'the correct trend when zoomed.' ].join(' ') }, // positioning diff --git a/src/components/annotations/index.js b/src/components/annotations/index.js index 5d286693863..3ba346773b0 100644 --- a/src/components/annotations/index.js +++ b/src/components/annotations/index.js @@ -59,7 +59,8 @@ function handleAnnotationDefaults(annIn, fullLayout) { coerce('arrowwidth', ((borderOpacity && borderWidth) || 1) * 2); coerce('ax'); coerce('ay'); - coerce('absolutetail'); + coerce('axref'); + coerce('ayref'); // if you have one part of arrow length you should have both Lib.noneOrAll(annIn, annOut, ['ax', 'ay']); @@ -91,7 +92,7 @@ function handleAnnotationDefaults(annIn, fullLayout) { newval = Lib.dateTime2ms(annIn[axLetter]); if(newval !== false) annIn[axLetter] = newval; - if(annIn.absolutetail) { + if(annIn['a' + axLetter + 'ref'] === axRef) { var newvalB = Lib.dateTime2ms(annIn['a' + axLetter]); if(newvalB !== false) annIn['a' + axLetter] = newvalB; } @@ -425,8 +426,8 @@ annotations.draw = function(gd, index, opt, value) { var annotationIsOffscreen = false; ['x', 'y'].forEach(function(axLetter) { - var ax = Axes.getFromId(gd, - options[axLetter + 'ref'] || axLetter), + var axRef = options[axLetter + 'ref'] || axLetter, + ax = Axes.getFromId(gd, axRef), dimAngle = (textangle + (axLetter === 'x' ? 0 : 90)) * Math.PI / 180, annSize = outerwidth * Math.abs(Math.cos(dimAngle)) + outerheight * Math.abs(Math.sin(dimAngle)), @@ -456,7 +457,7 @@ annotations.draw = function(gd, index, opt, value) { } var alignShift = 0; - if(options.absolutetail) { + if(options['a' + axLetter + 'ref'] === axRef) { annPosPx['aa' + axLetter] = ax._offset + ax.l2p(options['a' + axLetter]); } else { if(options.showarrow) { @@ -486,13 +487,15 @@ annotations.draw = function(gd, index, opt, value) { // make sure the arrowhead (if there is one) // and the annotation center are visible if(options.showarrow) { - if (options.absolutetail) { + if(options.axref === options.xref) arrowX = Lib.constrain(annPosPx.x, 1, fullLayout.width - 1); - arrowY = Lib.constrain(annPosPx.y, 1, fullLayout.height - 1); - } else { + else arrowX = Lib.constrain(annPosPx.x - options.ax, 1, fullLayout.width - 1); + + if(options.ayref === options.yref) + arrowY = Lib.constrain(annPosPx.y, 1, fullLayout.height - 1); + else arrowY = Lib.constrain(annPosPx.y - options.ay, 1, fullLayout.height - 1); - } } annPosPx.x = Lib.constrain(annPosPx.x, 1, fullLayout.width - 1); annPosPx.y = Lib.constrain(annPosPx.y, 1, fullLayout.height - 1); @@ -512,13 +515,15 @@ annotations.draw = function(gd, index, opt, value) { outerwidth - borderwidth, outerheight - borderwidth); var annX = 0, annY = 0; - if(options.absolutetail) { + if(options.axref === options.xref) annX = Math.round(annPosPx.aax - outerwidth / 2); - annY = Math.round(annPosPx.aay - outerheight / 2); - } else { + else annX = Math.round(annPosPx.x - outerwidth / 2); + + if(options.ayref === options.yref) + annY = Math.round(annPosPx.aay - outerheight / 2); + else annY = Math.round(annPosPx.y - outerheight / 2); - } ann.call(Lib.setTranslate, annX, annY); @@ -539,13 +544,15 @@ annotations.draw = function(gd, index, opt, value) { // how-to-get-the-width-of-an-svg-tspan-element var arrowX0, arrowY0; - if(options.absolutetail) { + if(options.axref === options.xref) arrowX0 = annPosPx.aax + dx; - arrowY0 = annPosPx.aay + dy; - } else { + else arrowX0 = annPosPx.x + dx; + + if(options.ayref === options.yref) + arrowY0 = annPosPx.aay + dy; + else arrowY0 = annPosPx.y + dy; - } // create transform matrix and related functions var transform = @@ -648,14 +655,15 @@ annotations.draw = function(gd, index, opt, value) { (options.y + dy / ya._m) : (1 - ((arrowY + dy - gs.t) / gs.h)); - if(options.absolutetail) { + if(options.axref === options.xref) update[annbase + '.ax'] = xa ? (options.ax + dx / xa._m) : ((arrowX + dx - gs.l) / gs.w); + + if(options.ayref === options.yref) update[annbase + '.ay'] = ya ? (options.ay + dy / ya._m) : (1 - ((arrowY + dy - gs.t) / gs.h)); - } anng.attr({ transform: 'rotate(' + textangle + ',' + @@ -698,13 +706,16 @@ annotations.draw = function(gd, index, opt, value) { ann.call(Lib.setTranslate, x0 + dx, y0 + dy); var csr = 'pointer'; if(options.showarrow) { - if(options.absolutetail) { + if(options.axref === options.xref) update[annbase + '.ax'] = xa.p2l(xa.l2p(options.ax) + dx); - update[annbase + '.ay'] = ya.p2l(ya.l2p(options.ay) + dy); - } else { + else update[annbase + '.ax'] = options.ax + dx; + + if(options.ayref === options.yref) + update[annbase + '.ay'] = ya.p2l(ya.l2p(options.ay) + dy); + else update[annbase + '.ay'] = options.ay + dy; - } + drawArrow(dx, dy); } else { diff --git a/test/image/mocks/annotations.json b/test/image/mocks/annotations.json index 4a6a7b08f3f..217de23750a 100644 --- a/test/image/mocks/annotations.json +++ b/test/image/mocks/annotations.json @@ -42,7 +42,7 @@ "font":{"color":"rgb(0, 0, 255)","size":20}, "arrowcolor":"rgb(166, 28, 0)","borderpad":3,"textangle":50,"x":5,"y":1 }, - {"text":"","showarrow":true,"borderwidth":1.2,"arrowhead":2,"absolutetail":true,"x":5,"y":5,"ax":4,"ay":3} + {"text":"","showarrow":true,"borderwidth":1.2,"arrowhead":2,"axref":"x","ayref":"y","x":5,"y":5,"ax":4,"ay":3} ] } } diff --git a/test/jasmine/tests/annotations_test.js b/test/jasmine/tests/annotations_test.js index 0d7741938a7..e5170ea32d9 100644 --- a/test/jasmine/tests/annotations_test.js +++ b/test/jasmine/tests/annotations_test.js @@ -1,4 +1,4 @@ -var PlotlyInternal = require('@src/plotly'); +require('@src/plotly'); var Plots = require('@src/plots/plots'); var Annotations = require('@src/components/annotations'); @@ -7,21 +7,22 @@ describe('Test annotations', function() { 'use strict'; describe('supplyLayoutDefaults', function() { - it('should default to not use absolute arrow tail', function() { + it('should default to pixel for axref/ayref', function() { var annotationDefaults = {}; annotationDefaults._has = Plots._hasPlotType.bind(annotationDefaults); Annotations.supplyLayoutDefaults({ annotations: [{ showarrow: true, arrowhead: 2}] }, annotationDefaults); - expect(annotationDefaults.annotations[0].absolutetail).toBe(false); + expect(annotationDefaults.annotations[0].axref).toEqual('pixel'); + expect(annotationDefaults.annotations[0].ayref).toEqual('pixel'); }); - it('should convert ax/ay date coordinates to milliseconds if absolutetail is true', function() { + it('should convert ax/ay date coordinates to milliseconds if tail is in axis terms and axis is a date', function() { var annotationOut = { xaxis: { type: 'date', range: ['2000-01-01', '2016-01-01'] }}; annotationOut._has = Plots._hasPlotType.bind(annotationOut); var annotationIn = { - annotations: [{ showarrow: true, absolutetail: true, x: '2008-07-01', ax: '2004-07-01', y: 0, ay: 50}] + annotations: [{ showarrow: true, axref: 'x', ayref: 'y', x: '2008-07-01', ax: '2004-07-01', y: 0, ay: 50}] }; Annotations.supplyLayoutDefaults(annotationIn, annotationOut); From d07b6762c6e062748b13a591a9324fb7b79479ca Mon Sep 17 00:00:00 2001 From: MFed Date: Tue, 14 Jun 2016 11:53:21 -0400 Subject: [PATCH 13/16] somehow I lost this change in my screw up with the branches. --- test/jasmine/tests/annotations_test.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/test/jasmine/tests/annotations_test.js b/test/jasmine/tests/annotations_test.js index e5170ea32d9..3b6d02a75e6 100644 --- a/test/jasmine/tests/annotations_test.js +++ b/test/jasmine/tests/annotations_test.js @@ -1,7 +1,7 @@ require('@src/plotly'); var Plots = require('@src/plots/plots'); var Annotations = require('@src/components/annotations'); - +var Dates = require('@src/lib/dates'); describe('Test annotations', function() { 'use strict'; @@ -27,7 +27,7 @@ describe('Test annotations', function() { Annotations.supplyLayoutDefaults(annotationIn, annotationOut); - expect(annotationIn.annotations[0].ax).toEqual(1088654400000); + expect(annotationIn.annotations[0].ax).toEqual(Dates.dateTime2ms('2004-07-01')); }); }); }); From 143328dc22e98ff7e9e63ff5a1fd0cac1826d6a8 Mon Sep 17 00:00:00 2001 From: MFed Date: Tue, 14 Jun 2016 16:07:03 -0400 Subject: [PATCH 14/16] Not hardcoding axis references but using regex and coerce. Purposeful duplication of code per github PR 610 --- src/components/annotations/attributes.js | 4 +- src/components/annotations/index.js | 52 +++++++++++++++--------- src/plots/cartesian/axes.js | 20 +++++++++ 3 files changed, 55 insertions(+), 21 deletions(-) diff --git a/src/components/annotations/attributes.js b/src/components/annotations/attributes.js index 56456608815..cea6afb9a4a 100644 --- a/src/components/annotations/attributes.js +++ b/src/components/annotations/attributes.js @@ -160,7 +160,7 @@ module.exports = { dflt: 'pixel', values: [ 'pixel', - 'x' + cartesianConstants.idRegex.x.toString() ], role: 'info', description: [ @@ -177,7 +177,7 @@ module.exports = { dflt: 'pixel', values: [ 'pixel', - 'y' + cartesianConstants.idRegex.y.toString() ], role: 'info', description: [ diff --git a/src/components/annotations/index.js b/src/components/annotations/index.js index 7ec6be5dee0..0c17ec7692b 100644 --- a/src/components/annotations/index.js +++ b/src/components/annotations/index.js @@ -78,6 +78,10 @@ function handleAnnotationDefaults(annIn, fullLayout) { // xref, yref var axRef = Axes.coerceRef(annIn, annOut, tdMock, axLetter); + //todo: should be refactored in conjunction with Axes + // axref, ayref + var aaxRef = Axes.coerceARef(annIn, annOut, tdMock, axLetter); + // x, y var defaultPosition = 0.5; if(axRef !== 'paper') { @@ -92,7 +96,7 @@ function handleAnnotationDefaults(annIn, fullLayout) { newval = Lib.dateTime2ms(annIn[axLetter]); if(newval !== false) annIn[axLetter] = newval; - if(annIn['a' + axLetter + 'ref'] === axRef) { + if(aaxRef === axRef) { var newvalB = Lib.dateTime2ms(annIn['a' + axLetter]); if(newvalB !== false) annIn['a' + axLetter] = newvalB; } @@ -487,15 +491,17 @@ annotations.draw = function(gd, index, opt, value) { // make sure the arrowhead (if there is one) // and the annotation center are visible if(options.showarrow) { - if(options.axref === options.xref) + if(options.axref === options.xref) { arrowX = Lib.constrain(annPosPx.x, 1, fullLayout.width - 1); - else + } else { arrowX = Lib.constrain(annPosPx.x - options.ax, 1, fullLayout.width - 1); + } - if(options.ayref === options.yref) + if(options.ayref === options.yref) { arrowY = Lib.constrain(annPosPx.y, 1, fullLayout.height - 1); - else + } else { arrowY = Lib.constrain(annPosPx.y - options.ay, 1, fullLayout.height - 1); + } } annPosPx.x = Lib.constrain(annPosPx.x, 1, fullLayout.width - 1); annPosPx.y = Lib.constrain(annPosPx.y, 1, fullLayout.height - 1); @@ -515,15 +521,17 @@ annotations.draw = function(gd, index, opt, value) { outerwidth - borderwidth, outerheight - borderwidth); var annX = 0, annY = 0; - if(options.axref === options.xref) + if(options.axref === options.xref) { annX = Math.round(annPosPx.aax - outerwidth / 2); - else + } else { annX = Math.round(annPosPx.x - outerwidth / 2); + } - if(options.ayref === options.yref) + if(options.ayref === options.yref) { annY = Math.round(annPosPx.aay - outerheight / 2); - else + } else { annY = Math.round(annPosPx.y - outerheight / 2); + } ann.call(Lib.setTranslate, annX, annY); @@ -544,15 +552,17 @@ annotations.draw = function(gd, index, opt, value) { // how-to-get-the-width-of-an-svg-tspan-element var arrowX0, arrowY0; - if(options.axref === options.xref) + if(options.axref === options.xref) { arrowX0 = annPosPx.aax + dx; - else + } else { arrowX0 = annPosPx.x + dx; + } - if(options.ayref === options.yref) + if(options.ayref === options.yref) { arrowY0 = annPosPx.aay + dy; - else + } else { arrowY0 = annPosPx.y + dy; + } // create transform matrix and related functions var transform = @@ -654,15 +664,17 @@ annotations.draw = function(gd, index, opt, value) { (options.y + dy / ya._m) : (1 - ((arrowY + dy - gs.t) / gs.h)); - if(options.axref === options.xref) + if(options.axref === options.xref) { update[annbase + '.ax'] = xa ? (options.ax + dx / xa._m) : ((arrowX + dx - gs.l) / gs.w); + } - if(options.ayref === options.yref) + if(options.ayref === options.yref) { update[annbase + '.ay'] = ya ? (options.ay + dy / ya._m) : (1 - ((arrowY + dy - gs.t) / gs.h)); + } anng.attr({ transform: 'rotate(' + textangle + ',' + @@ -706,15 +718,17 @@ annotations.draw = function(gd, index, opt, value) { ann.call(Lib.setTranslate, x0 + dx, y0 + dy); var csr = 'pointer'; if(options.showarrow) { - if(options.axref === options.xref) + if(options.axref === options.xref) { update[annbase + '.ax'] = xa.p2l(xa.l2p(options.ax) + dx); - else + } else { update[annbase + '.ax'] = options.ax + dx; + } - if(options.ayref === options.yref) + if(options.ayref === options.yref) { update[annbase + '.ay'] = ya.p2l(ya.l2p(options.ay) + dy); - else + } else { update[annbase + '.ay'] = options.ay + dy; + } drawArrow(dx, dy); } diff --git a/src/plots/cartesian/axes.js b/src/plots/cartesian/axes.js index fc0c4c2ea4a..4db4ca2c642 100644 --- a/src/plots/cartesian/axes.js +++ b/src/plots/cartesian/axes.js @@ -55,6 +55,26 @@ axes.coerceRef = function(containerIn, containerOut, gd, axLetter, dflt) { return Lib.coerce(containerIn, containerOut, attrDef, refAttr); }; +//todo: duplicated per github PR 610. Should be consolidated with axes.coerceRef. +// find the list of possible axes to reference with an axref or ayref attribute +// and coerce it to that list +axes.coerceARef = function(containerIn, containerOut, gd, axLetter, dflt) { + var axlist = gd._fullLayout._has('gl2d') ? [] : axes.listIds(gd, axLetter), + refAttr = 'a' + axLetter + 'ref', + attrDef = {}; + + // data-ref annotations are not supported in gl2d yet + + attrDef[refAttr] = { + valType: 'enumerated', + values: axlist.concat(['pixel']), + dflt: dflt || 'pixel' || axlist[0] + }; + + // axref, ayref + return Lib.coerce(containerIn, containerOut, attrDef, refAttr); +}; + // empty out types for all axes containing these traces // so we auto-set them again axes.clearTypes = function(gd, traces) { From e83b947d1e89a4b33980c3a301fd90bb6c402588 Mon Sep 17 00:00:00 2001 From: MFed Date: Thu, 16 Jun 2016 12:39:19 -0400 Subject: [PATCH 15/16] Fixing bug where annotation would be marked as offscreen if the head was offscreen even if the tail is in coordinate space and on screen. --- src/components/annotations/index.js | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/src/components/annotations/index.js b/src/components/annotations/index.js index 0c17ec7692b..17f9b695d08 100644 --- a/src/components/annotations/index.js +++ b/src/components/annotations/index.js @@ -446,8 +446,16 @@ annotations.draw = function(gd, index, opt, value) { // anyway to get its bounding box) if(!ax.autorange && ((options[axLetter] - ax.range[0]) * (options[axLetter] - ax.range[1]) > 0)) { - annotationIsOffscreen = true; - return; + if(options['a' + axLetter + 'ref'] === axRef) { + if((options['a' + axLetter] - ax.range[0]) * + (options['a' + axLetter] - ax.range[1]) > 0) { + annotationIsOffscreen = true; + } + } else { + annotationIsOffscreen = true; + } + + if(annotationIsOffscreen) return; } annPosPx[axLetter] = ax._offset + ax.l2p(options[axLetter]); alignPosition = 0.5; From 9358a568a9b1c2a66f6faef31ddd7f770da3eb60 Mon Sep 17 00:00:00 2001 From: MFed Date: Mon, 20 Jun 2016 07:51:26 -0400 Subject: [PATCH 16/16] Fixing a bug where the x,y of the arrow would be changed to stay on the chart, rather than render off screen when panned. Added corresponding annotation to image test. --- src/components/annotations/index.js | 8 ++++++-- test/image/baselines/annotations.png | Bin 47628 -> 48541 bytes test/image/mocks/annotations.json | 3 ++- 3 files changed, 8 insertions(+), 3 deletions(-) diff --git a/src/components/annotations/index.js b/src/components/annotations/index.js index 17f9b695d08..3fc49527908 100644 --- a/src/components/annotations/index.js +++ b/src/components/annotations/index.js @@ -500,13 +500,17 @@ annotations.draw = function(gd, index, opt, value) { // and the annotation center are visible if(options.showarrow) { if(options.axref === options.xref) { - arrowX = Lib.constrain(annPosPx.x, 1, fullLayout.width - 1); + //we don't want to constrain if the tail is absolute + //or the slope (which is meaningful) will change. + arrowX = annPosPx.x; } else { arrowX = Lib.constrain(annPosPx.x - options.ax, 1, fullLayout.width - 1); } if(options.ayref === options.yref) { - arrowY = Lib.constrain(annPosPx.y, 1, fullLayout.height - 1); + //we don't want to constrain if the tail is absolute + //or the slope (which is meaningful) will change. + arrowY = annPosPx.y; } else { arrowY = Lib.constrain(annPosPx.y - options.ay, 1, fullLayout.height - 1); } diff --git a/test/image/baselines/annotations.png b/test/image/baselines/annotations.png index d1f320660abd9866f7540bbed9fdb824baf9e191..056e5c862682c45cbae0f1bf8284891516530cf5 100644 GIT binary patch literal 48541 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

6OEzEFGgx$?g0!`B-fr%cw6a3mDFA`3W4 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:d^fF~T&oW4it=n0&x;2(PXG4Y%#j(H$ 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 literal 47628 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 KQOPG=y8AyuaXNqi diff --git a/test/image/mocks/annotations.json b/test/image/mocks/annotations.json index 217de23750a..9f88a7a5179 100644 --- a/test/image/mocks/annotations.json +++ b/test/image/mocks/annotations.json @@ -42,7 +42,8 @@ "font":{"color":"rgb(0, 0, 255)","size":20}, "arrowcolor":"rgb(166, 28, 0)","borderpad":3,"textangle":50,"x":5,"y":1 }, - {"text":"","showarrow":true,"borderwidth":1.2,"arrowhead":2,"axref":"x","ayref":"y","x":5,"y":5,"ax":4,"ay":3} + {"text":"","showarrow":true,"borderwidth":1.2,"arrowhead":2,"axref":"x","ayref":"y","x":5,"y":3,"ax":4,"ay":5}, + {"text":"","showarrow":true,"borderwidth":1.2,"arrowhead":2,"axref":"x","ayref":"y","x":6,"y":2,"ax":3,"ay":3} ] } }