Thanks to visit codestin.com
Credit goes to github.com

Skip to content

Commit ad37e55

Browse files
committed
Images: Fixes before merge!
1 parent 4cbc117 commit ad37e55

File tree

7 files changed

+69
-25
lines changed

7 files changed

+69
-25
lines changed

src/components/images/attributes.js

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -37,7 +37,7 @@ module.exports = {
3737
].join(' ')
3838
},
3939

40-
sizey: {
40+
sizex: {
4141
valType: 'number',
4242
role: 'info',
4343
dflt: 0,
@@ -49,7 +49,7 @@ module.exports = {
4949
].join(' ')
5050
},
5151

52-
sizex: {
52+
sizey: {
5353
valType: 'number',
5454
role: 'info',
5555
dflt: 0,

src/components/images/draw.js

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -91,7 +91,6 @@ module.exports = function draw(gd) {
9191
gd._promises.push(imagePromise);
9292
}
9393

94-
9594
function applyAttributes(d) {
9695

9796
var thisImage = d3.select(this);
@@ -111,8 +110,8 @@ module.exports = function draw(gd) {
111110
var sizing = anchors.x[d.xanchor].sizing + anchors.y[d.yanchor].sizing;
112111

113112
// Final positions
114-
var xPos = (xref ? xref.l2p(d.x) : d.x * width) + xOffset,
115-
yPos = (yref ? yref.l2p(d.y) : -d.y * width) + yOffset;
113+
var xPos = (xref ? xref.l2p(d.x) : d.x * size.w) + xOffset,
114+
yPos = (yref ? yref.l2p(d.y) : size.h - d.y * size.h) + yOffset;
116115

117116

118117
// Construct the proper aspectRatio attribute

src/lib/index.js

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -495,15 +495,15 @@ lib.isIE = function() {
495495
* filled array of the given size.
496496
*
497497
* @example
498-
* lib.toObject('nested.test[2].path', 'value');
498+
* lib.objectFromPath('nested.test[2].path', 'value');
499499
* // returns { nested: { test: [null, null, { path: 'value' }]}
500500
*
501501
* @param {string} path to nested value
502502
* @param {*} any value to be set
503503
*
504504
* @return {Object} the constructed object with a full nested path
505505
*/
506-
lib.toObject = function(path, value) {
506+
lib.objectFromPath = function(path, value) {
507507
var keys = path.split('.'),
508508
tmpObj,
509509
obj = tmpObj = {};

src/plot_api/plot_api.js

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -2300,7 +2300,7 @@ Plotly.relayout = function relayout(gd, astr, val) {
23002300
objModule.draw(gd, objNum, p.parts.slice(2).join('.'), aobj[ai]);
23012301
delete aobj[ai];
23022302
} else if(p.parts[0] === 'images') {
2303-
var update = Lib.toObject(astr, vi);
2303+
var update = Lib.objectFromPath(astr, vi);
23042304
Lib.extendDeepAll(gd.layout, update);
23052305

23062306
Images.supplyLayoutDefaults(gd.layout, gd._fullLayout);
@@ -2652,10 +2652,10 @@ function makePlotFramework(gd) {
26522652
// (only for shapes to be drawn below the whole plot)
26532653
var layerBelow = fullLayout._paper.append('g')
26542654
.classed('layer-below', true);
2655-
fullLayout._shapeLowerLayer = layerBelow.append('g')
2656-
.classed('shapelayer', true);
26572655
fullLayout._imageLowerLayer = layerBelow.append('g')
26582656
.classed('imagelayer', true);
2657+
fullLayout._shapeLowerLayer = layerBelow.append('g')
2658+
.classed('shapelayer', true);
26592659

26602660
var subplots = Plotly.Axes.getSubplots(gd);
26612661
if(subplots.join('') !== Object.keys(gd._fullLayout._plots || {}).join('')) {
@@ -2669,17 +2669,17 @@ function makePlotFramework(gd) {
26692669

26702670
// shape layers in subplots
26712671
var layerSubplot = fullLayout._paper.selectAll('.layer-subplot');
2672-
fullLayout._shapeSubplotLayer = layerSubplot.selectAll('.shapelayer');
26732672
fullLayout._imageSubplotLayer = layerSubplot.selectAll('.imagelayer');
2673+
fullLayout._shapeSubplotLayer = layerSubplot.selectAll('.shapelayer');
26742674

26752675
// upper shape layer
26762676
// (only for shapes to be drawn above the whole plot, including subplots)
26772677
var layerAbove = fullLayout._paper.append('g')
26782678
.classed('layer-above', true);
2679-
fullLayout._shapeUpperLayer = layerAbove.append('g')
2680-
.classed('shapelayer', true);
26812679
fullLayout._imageUpperLayer = layerAbove.append('g')
26822680
.classed('imagelayer', true);
2681+
fullLayout._shapeUpperLayer = layerAbove.append('g')
2682+
.classed('shapelayer', true);
26832683

26842684
// single pie layer for the whole plot
26852685
fullLayout._pielayer = fullLayout._paper.append('g').classed('pielayer', true);

test/image/mocks/layout_image.json

Lines changed: 22 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -12,23 +12,22 @@
1212
"xref": "paper",
1313
"yref": "paper",
1414
"x": 0,
15-
"y": 0,
15+
"y": 1,
1616
"sizex": 0.2,
1717
"sizey": 0.2,
1818
"xanchor": "right",
19-
"yanchor": "bottom"
19+
"yanchor": "bottom"
2020
},
2121
{
2222
"source": "https://images.plot.ly/language-icons/api-home/js-logo.png",
2323
"xref": "x",
2424
"yref": "y",
25-
"x": 2.5,
25+
"x": 1.5,
2626
"y": 2,
2727
"sizex": 1,
2828
"sizey": 1,
29-
"xanchor": "center",
30-
"yanchor": "middle",
31-
"layer": "below"
29+
"xanchor": "right",
30+
"yanchor": "bottom"
3231
},
3332
{
3433
"source": "https://images.plot.ly/language-icons/api-home/r-logo.png",
@@ -39,19 +38,32 @@
3938
"sizex": 2,
4039
"sizey": 2,
4140
"sizing": "stretch",
42-
"opacity": 0.4
41+
"opacity": 0.4,
42+
"layer": "below"
4343
},
4444
{
4545
"source": "https://images.plot.ly/language-icons/api-home/matlab-logo.png",
4646
"xref": "x",
4747
"yref": "paper",
48-
"x": 2.75,
48+
"x": 3,
4949
"y": 0,
5050
"sizex": 0.5,
5151
"sizey": 1,
5252
"opacity": 1,
53-
"xanchor": "left",
54-
"yanchor": "top"
53+
"xanchor": "right",
54+
"yanchor": "middle"
55+
},
56+
{
57+
"source": "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAANwAAAD1CAMAAAAMJ2tNAAAC9FBMVEUAAABEettEettEettEettEettEettEettEettEettEettEettEettEettEettEettEettEettEettEettEettEettEettEettEettEettEettEettEettEettEettEettEettEettEettEettEettEettEettEettEettEettEettEettEettEettEettEettEettEettEettEettEettEettEettEettEettEettEettEettEettEettEettEettEettEettEettEettEettEettEettEettEettEettEettEettEettEettEettEettEettEettEettEettEettEettEettEettEettEettEettEettEettEettEettEettEettEettEettEettEettEettEettEettEettEettEettEettEettEettEettEettEettEettEettEettEettEettEettEettEettEettEettEettEettEettEettEettEettEettEettEettEettEettEettEettEettEettEettEettEettEettEettEettEettEettEettEettEettEettEettEettEettEettEettEettEettEettEettEettEettEettEettEettEettEettEettEettEettEettEettEettEettEettEettEettEettEettEettEettEettEettEettEettEettEettEettEettEettEettEettEettEettEettEettEettEettEettEettEettEettEettEettEettEettEettEettEettEettEettEettEettEettEettEettEettEettEettEettEettEettEettEettEettEettEettEettEettEettEettEettEettEettEettEettEettEettEettEettEettEettEettEettEettEettEettEettEettEettEettEettEets5iYiFAAAA+3RSTlMAABVISkcS8/nwPvY/AUZraWpLAwSrtgZSmJZ7DIzRFIvQCAkXqcHAwlce4XQCI7G/L+z+X+sfBx0K5OWEMNTeN/H8VPuXy8jMdiW5ycc6wzJtyqQPho8FGLBb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9B5+0OOq3ZkGTBM/BPUJx0yKIG1BLZyjlZ0DJbnBwm8MfmRWHY7WXmlW1p53fqU0iJ34XpHkK1efpxlgSIrYl+9UHHUQ51wfgO8f/eDRu6sXRur8zIlD6iOvL5NDH/fnetOWtpuVwYnhWRWLnBMud7/DOzX+9GBg6bApijscLPUkci6tEA4aSF08sJ06vj6sdDgvb9ZlYYjMURbrufuFYto2vjizJ4O7Ub8wLm7FpRze46iGYz50spozKgyOuZagX3Ztybw96V99EF4yhxNoBUNOQmxsQraVG+Qsc2r60ldNppfb/nwiycevJIGxbst7r5tMExavGRnFhoajXaHeHN6PDEHzURjuz35auAAUgOP4lh+AFuGicVNVXEFV/wIdbgCa1/pZGoQDY00xVaRFuBkY+0y5rPIQZCDDARzCFzfapkW4s5j+LF+i9mhuAMOBgZ0Ymp2lPTiHnx2GfuB+1d8xBCwc6Huwk4TjkjUDB/pEq/ArkImdTOh42VesUt23wIM7tf3+oTrrvp0qbh/ywkFDcJ5/3yh3wlN8/hvgcCebPM0nyAENl1aj9lP9xGzgwZ3bzUIR8YvGd74I8HR1RYSHhy+pG0DWMqHsz44uhTdM7Qv0N6JISEhISEhISEhISEhISEieg/wHXMU13xThNeUAAABhdEVYdGNvbW1lbnQARmlsZSBzb3VyY2U6IGh0dHA6Ly9jb21tb25zLndpa2ltZWRpYS5vcmcvd2lraS9GaWxlOlBsb3RseV9sb2dvX2Zvcl9kaWdpdGFsX2ZpbmFsXyg2KS5wbmetqmbcAAAAJXRFWHRkYXRlOmNyZWF0ZQAyMDE0LTA5LTIxVDAzOjM1OjExKzAwOjAwKhOa5QAAACV0RVh0ZGF0ZTptb2RpZnkAMjAxNC0wOS0yMVQwMzozNToxMSswMDowMFtOIlkAAABGdEVYdHNvZnR3YXJlAEltYWdlTWFnaWNrIDYuNi45LTcgMjAxNC0wMy0wNiBRMTYgaHR0cDovL3d3dy5pbWFnZW1hZ2ljay5vcmeB07PDAAAAGHRFWHRUaHVtYjo6RG9jdW1lbnQ6OlBhZ2VzADGn/7svAAAAGXRFWHRUaHVtYjo6SW1hZ2U6OmhlaWdodAAxNzA0VsMjbQAAABh0RVh0VGh1bWI6OkltYWdlOjpXaWR0aAAxNTMxndUDgQAAABl0RVh0VGh1bWI6Ok1pbWV0eXBlAGltYWdlL3BuZz+yVk4AAAAXdEVYdFRodW1iOjpNVGltZQAxNDExMjcwNTEx0Rvi6AAAABN0RVh0VGh1bWI6OlNpemUAMjkuOUtCQvmCzmYAAAAzdEVYdFRodW1iOjpVUkkAZmlsZTovLy90bXAvbG9jYWxjb3B5X2UwNDYwYmM4MDVlYS0xLnBuZ1YfjUoAAAAASUVORK5CYII=",
58+
"xref": "paper",
59+
"yref": "paper",
60+
"x": 0.5,
61+
"y": 1,
62+
"sizex": 0.2,
63+
"sizey": 0.2,
64+
"opacity": 1,
65+
"xanchor": "middle",
66+
"yanchor": "bottom"
5567
}
5668
],
5769
"width": 800,

test/jasmine/tests/lib_test.js

Lines changed: 34 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -441,6 +441,40 @@ describe('Test lib.js:', function() {
441441
});
442442
});
443443

444+
describe('objectFromPath', function() {
445+
446+
it('should return an object', function() {
447+
var obj = Lib.objectFromPath('test', 'object');
448+
449+
expect(obj).toEqual({ test: 'object' });
450+
});
451+
452+
it('should work for deep objects', function() {
453+
var obj = Lib.objectFromPath('deep.nested.test', 'object');
454+
455+
expect(obj).toEqual({ deep: { nested: { test: 'object' }}});
456+
});
457+
458+
it('should work for arrays', function() {
459+
var obj = Lib.objectFromPath('nested[2].array', 'object');
460+
461+
expect(Object.keys(obj)).toEqual(['nested']);
462+
expect(Array.isArray(obj.nested)).toBe(true);
463+
expect(obj.nested[0]).toBe(undefined);
464+
expect(obj.nested[2]).toEqual({ array: 'object' });
465+
});
466+
467+
it('should work for any given value', function() {
468+
var obj = Lib.objectFromPath('test.type', { an: 'object' });
469+
470+
expect(obj).toEqual({ test: { type: { an: 'object' }}});
471+
472+
obj = Lib.objectFromPath('test.type', [42]);
473+
474+
expect(obj).toEqual({ test: { type: [42] }});
475+
});
476+
});
477+
444478
describe('coerce', function() {
445479
var coerce = Lib.coerce,
446480
out;
@@ -811,7 +845,6 @@ describe('Test lib.js:', function() {
811845
el.attr('transform', 'rotate(20)');
812846
expect(Lib.getTranslate(el)).toEqual({ x: 0, y: 0 });
813847
});
814-
815848
});
816849

817850
describe('setTranslate', function() {

test/jasmine/tests/plotschema_test.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -115,7 +115,7 @@ describe('plot schema', function() {
115115

116116
it('should convert _isLinkedToArray attributes to items object', function() {
117117
var astrs = [
118-
'annotations', 'shapes',
118+
'annotations', 'shapes', 'images',
119119
'xaxis.rangeselector.buttons', 'yaxis.rangeselector.buttons'
120120
];
121121

0 commit comments

Comments
 (0)