plotly.js 2.13.3 → 2.14.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/lib/locales/nl.js CHANGED
@@ -3,7 +3,41 @@
3
3
  module.exports = {
4
4
  moduleType: 'locale',
5
5
  name: 'nl',
6
- dictionary: {},
6
+ dictionary: {
7
+ 'Autoscale': 'Automatische schaal',
8
+ 'Click to enter Colorscale title': 'Klik om kleurenschaal titel in te vullen',
9
+ 'Click to enter Component A title': 'Klik om Component A titel in te vullen',
10
+ 'Click to enter Component B title': 'Klik om Component B titel in te vullen',
11
+ 'Click to enter Component C title': 'Klik om Component C titel in te vullen',
12
+ 'Click to enter Plot title': 'Klik om Plot titel in te vullen',
13
+ 'Click to enter X axis title': 'Klik om x-as titel in te vullen',
14
+ 'Click to enter Y axis title': 'Klik om y-as titel in te vullen',
15
+ 'Click to enter radial axis title': 'Klik om radiaal-as titel in te vullen',
16
+ 'Double-click to zoom back out': 'Zoom uit door te dubbel klikken',
17
+ 'Download plot as a png': 'Dowload de plot als een png-bestand',
18
+ 'Download plot': 'Download de plot',
19
+ 'Draw circle': 'Teken cirkel',
20
+ 'Draw closed freeform': 'Teken gesloten vorm',
21
+ 'Draw line': 'Teken lijn',
22
+ 'Draw open freeform': 'Teken open vorm',
23
+ 'Draw rectangle': 'Teken rechthoek',
24
+ 'Edit in Chart Studio': 'In Chart Studio wijzigen',
25
+ 'Erase active shape': 'Wis huidige vorm',
26
+ 'IE only supports svg. Changing format to svg.': 'IE ondersteunt alleen svg bestanden. Formaat gewijzigd naar svg.',
27
+ 'Lasso Select': 'Lasso selectie',
28
+ 'Produced with Plotly.js': 'Gemaakt met Plotly.js',
29
+ 'Zoom': 'Inzoomen',
30
+ 'max:': 'maximum:',
31
+ 'mean ± σ:': 'gemiddelde ± σ:',
32
+ 'mean:': 'gemiddelde:',
33
+ 'min:': 'minimum:',
34
+ 'new text': 'nieuwe tekst',
35
+ 'open:': 'openen:',
36
+ 'high:': 'hoog:',
37
+ 'low:': 'laag:',
38
+ 'source:': 'bron:',
39
+ 'target:': 'doel:',
40
+ },
7
41
  format: {
8
42
  days: [
9
43
  'zondag', 'maandag', 'dinsdag', 'woensdag',
@@ -18,6 +52,12 @@ module.exports = {
18
52
  'jan', 'feb', 'maa', 'apr', 'mei', 'jun',
19
53
  'jul', 'aug', 'sep', 'okt', 'nov', 'dec'
20
54
  ],
21
- date: '%d-%m-%Y'
55
+ date: '%d-%m-%Y',
56
+ decimal: ',',
57
+ thousands: '.',
58
+ year: '%Y',
59
+ month: '%b %Y',
60
+ dayMonth: '%-d %b',
61
+ dayMonthYear: '%-d %b %Y'
22
62
  }
23
63
  };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "plotly.js",
3
- "version": "2.13.3",
3
+ "version": "2.14.0",
4
4
  "description": "The open source javascript graphing library that powers plotly",
5
5
  "license": "MIT",
6
6
  "main": "./lib/index.js",
@@ -46,6 +46,10 @@ function draw(gd) {
46
46
  }
47
47
  }
48
48
 
49
+ function couldHaveActiveSelection(gd) {
50
+ return gd._context.editSelection;
51
+ }
52
+
49
53
  function drawOne(gd, index) {
50
54
  // remove the existing selection if there is one.
51
55
  // because indices can change, we need to look in all selection layers
@@ -82,7 +86,7 @@ function drawOne(gd, index) {
82
86
  lineDash = 'solid';
83
87
  }
84
88
 
85
- var isActiveSelection =
89
+ var isActiveSelection = couldHaveActiveSelection(gd) &&
86
90
  gd._fullLayout._activeSelectionIndex === index;
87
91
 
88
92
  if(isActiveSelection) {
@@ -149,6 +153,8 @@ function setClipPath(selectionPath, gd, selectionOptions) {
149
153
 
150
154
 
151
155
  function activateSelection(gd, path) {
156
+ if(!couldHaveActiveSelection(gd)) return;
157
+
152
158
  var element = path.node();
153
159
  var id = +element.getAttribute('data-index');
154
160
  if(id >= 0) {
@@ -165,6 +171,8 @@ function activateSelection(gd, path) {
165
171
  }
166
172
 
167
173
  function activateLastSelection(gd) {
174
+ if(!couldHaveActiveSelection(gd)) return;
175
+
168
176
  var id = gd._fullLayout.selections.length - 1;
169
177
  gd._fullLayout._activeSelectionIndex = id;
170
178
  gd._fullLayout._deactivateSelection = deactivateSelection;
@@ -172,6 +180,8 @@ function activateLastSelection(gd) {
172
180
  }
173
181
 
174
182
  function deactivateSelection(gd) {
183
+ if(!couldHaveActiveSelection(gd)) return;
184
+
175
185
  var id = gd._fullLayout._activeSelectionIndex;
176
186
  if(id >= 0) {
177
187
  clearOutlineControllers(gd);
@@ -114,6 +114,12 @@ var configAttributes = {
114
114
  }
115
115
  },
116
116
 
117
+ editSelection: {
118
+ valType: 'boolean',
119
+ dflt: true,
120
+ description: 'Enables moving selections.'
121
+ },
122
+
117
123
  autosizable: {
118
124
  valType: 'boolean',
119
125
  dflt: false,
@@ -168,6 +168,14 @@ var attrs = module.exports = overrideAll({
168
168
  },
169
169
 
170
170
  link: {
171
+ arrowlen: {
172
+ valType: 'number',
173
+ min: 0,
174
+ dflt: 0,
175
+ description: [
176
+ 'Sets the length (in px) of the links arrow, if 0 no arrow will be drawn.'
177
+ ].join(' ')
178
+ },
171
179
  label: {
172
180
  valType: 'data_array',
173
181
  dflt: [],
@@ -52,6 +52,7 @@ module.exports = function supplyDefaults(traceIn, traceOut, defaultColor, layout
52
52
  return Lib.coerce(linkIn, linkOut, attributes.link, attr, dflt);
53
53
  }
54
54
  coerceLink('label');
55
+ coerceLink('arrowlen');
55
56
  coerceLink('source');
56
57
  coerceLink('target');
57
58
  coerceLink('value');
@@ -271,6 +271,7 @@ function sankeyModel(layout, d, traceIndex) {
271
271
  nodeLineWidth: trace.node.line.width,
272
272
  linkLineColor: trace.link.line.color,
273
273
  linkLineWidth: trace.link.line.width,
274
+ linkArrowLength: trace.link.arrowlen,
274
275
  valueFormat: trace.valueformat,
275
276
  valueSuffix: trace.valuesuffix,
276
277
  textFont: trace.textfont,
@@ -309,6 +310,7 @@ function linkModel(d, l, i) {
309
310
  linkPath: linkPath,
310
311
  linkLineColor: d.linkLineColor,
311
312
  linkLineWidth: d.linkLineWidth,
313
+ linkArrowLength: d.linkArrowLength,
312
314
  valueFormat: d.valueFormat,
313
315
  valueSuffix: d.valueSuffix,
314
316
  sankey: d.sankey,
@@ -318,7 +320,7 @@ function linkModel(d, l, i) {
318
320
  };
319
321
  }
320
322
 
321
- function createCircularClosedPathString(link) {
323
+ function createCircularClosedPathString(link, arrowLen) {
322
324
  // Using coordinates computed by d3-sankey-circular
323
325
  var pathString = '';
324
326
  var offset = link.width / 2;
@@ -328,17 +330,17 @@ function createCircularClosedPathString(link) {
328
330
  pathString =
329
331
  // start at the left of the target node
330
332
  'M ' +
331
- coords.targetX + ' ' + (coords.targetY + offset) + ' ' +
333
+ (coords.targetX - arrowLen) + ' ' + (coords.targetY + offset) + ' ' +
332
334
  'L' +
333
- coords.rightInnerExtent + ' ' + (coords.targetY + offset) +
335
+ (coords.rightInnerExtent - arrowLen) + ' ' + (coords.targetY + offset) +
334
336
  'A' +
335
337
  (coords.rightLargeArcRadius + offset) + ' ' + (coords.rightSmallArcRadius + offset) + ' 0 0 1 ' +
336
- (coords.rightFullExtent - offset) + ' ' + (coords.targetY - coords.rightSmallArcRadius) +
338
+ (coords.rightFullExtent - offset - arrowLen) + ' ' + (coords.targetY - coords.rightSmallArcRadius) +
337
339
  'L' +
338
- (coords.rightFullExtent - offset) + ' ' + coords.verticalRightInnerExtent +
340
+ (coords.rightFullExtent - offset - arrowLen) + ' ' + coords.verticalRightInnerExtent +
339
341
  'A' +
340
342
  (coords.rightLargeArcRadius + offset) + ' ' + (coords.rightLargeArcRadius + offset) + ' 0 0 1 ' +
341
- coords.rightInnerExtent + ' ' + (coords.verticalFullExtent - offset) +
343
+ (coords.rightInnerExtent - arrowLen) + ' ' + (coords.verticalFullExtent - offset) +
342
344
  'L' +
343
345
  coords.leftInnerExtent + ' ' + (coords.verticalFullExtent - offset) +
344
346
  'A' +
@@ -366,34 +368,35 @@ function createCircularClosedPathString(link) {
366
368
  (coords.leftLargeArcRadius - offset) + ' ' + (coords.leftLargeArcRadius - offset) + ' 0 0 0 ' +
367
369
  coords.leftInnerExtent + ' ' + (coords.verticalFullExtent + offset) +
368
370
  'L' +
369
- coords.rightInnerExtent + ' ' + (coords.verticalFullExtent + offset) +
371
+ (coords.rightInnerExtent - arrowLen) + ' ' + (coords.verticalFullExtent + offset) +
370
372
  'A' +
371
373
  (coords.rightLargeArcRadius - offset) + ' ' + (coords.rightLargeArcRadius - offset) + ' 0 0 0 ' +
372
- (coords.rightFullExtent + offset) + ' ' + coords.verticalRightInnerExtent +
374
+ (coords.rightFullExtent + offset - arrowLen) + ' ' + coords.verticalRightInnerExtent +
373
375
  'L' +
374
- (coords.rightFullExtent + offset) + ' ' + (coords.targetY - coords.rightSmallArcRadius) +
376
+ (coords.rightFullExtent + offset - arrowLen) + ' ' + (coords.targetY - coords.rightSmallArcRadius) +
375
377
  'A' +
376
378
  (coords.rightLargeArcRadius - offset) + ' ' + (coords.rightSmallArcRadius - offset) + ' 0 0 0 ' +
377
- coords.rightInnerExtent + ' ' + (coords.targetY - offset) +
379
+ (coords.rightInnerExtent - arrowLen) + ' ' + (coords.targetY - offset) +
378
380
  'L' +
379
- coords.targetX + ' ' + (coords.targetY - offset) +
381
+ (coords.targetX - arrowLen) + ' ' + (coords.targetY - offset) +
382
+ (arrowLen > 0 ? 'L' + coords.targetX + ' ' + (coords.targetY) : '') +
380
383
  'Z';
381
384
  } else {
382
385
  // Bottom path
383
386
  pathString =
384
387
  // start at the left of the target node
385
388
  'M ' +
386
- coords.targetX + ' ' + (coords.targetY - offset) + ' ' +
389
+ (coords.targetX - arrowLen) + ' ' + (coords.targetY - offset) + ' ' +
387
390
  'L' +
388
- coords.rightInnerExtent + ' ' + (coords.targetY - offset) +
391
+ (coords.rightInnerExtent - arrowLen) + ' ' + (coords.targetY - offset) +
389
392
  'A' +
390
393
  (coords.rightLargeArcRadius + offset) + ' ' + (coords.rightSmallArcRadius + offset) + ' 0 0 0 ' +
391
- (coords.rightFullExtent - offset) + ' ' + (coords.targetY + coords.rightSmallArcRadius) +
394
+ (coords.rightFullExtent - offset - arrowLen) + ' ' + (coords.targetY + coords.rightSmallArcRadius) +
392
395
  'L' +
393
- (coords.rightFullExtent - offset) + ' ' + coords.verticalRightInnerExtent +
396
+ (coords.rightFullExtent - offset - arrowLen) + ' ' + coords.verticalRightInnerExtent +
394
397
  'A' +
395
398
  (coords.rightLargeArcRadius + offset) + ' ' + (coords.rightLargeArcRadius + offset) + ' 0 0 0 ' +
396
- coords.rightInnerExtent + ' ' + (coords.verticalFullExtent + offset) +
399
+ (coords.rightInnerExtent - arrowLen) + ' ' + (coords.verticalFullExtent + offset) +
397
400
  'L' +
398
401
  coords.leftInnerExtent + ' ' + (coords.verticalFullExtent + offset) +
399
402
  'A' +
@@ -421,17 +424,18 @@ function createCircularClosedPathString(link) {
421
424
  (coords.leftLargeArcRadius - offset) + ' ' + (coords.leftLargeArcRadius - offset) + ' 0 0 1 ' +
422
425
  coords.leftInnerExtent + ' ' + (coords.verticalFullExtent - offset) +
423
426
  'L' +
424
- coords.rightInnerExtent + ' ' + (coords.verticalFullExtent - offset) +
427
+ (coords.rightInnerExtent - arrowLen) + ' ' + (coords.verticalFullExtent - offset) +
425
428
  'A' +
426
429
  (coords.rightLargeArcRadius - offset) + ' ' + (coords.rightLargeArcRadius - offset) + ' 0 0 1 ' +
427
- (coords.rightFullExtent + offset) + ' ' + coords.verticalRightInnerExtent +
430
+ (coords.rightFullExtent + offset - arrowLen) + ' ' + coords.verticalRightInnerExtent +
428
431
  'L' +
429
- (coords.rightFullExtent + offset) + ' ' + (coords.targetY + coords.rightSmallArcRadius) +
432
+ (coords.rightFullExtent + offset - arrowLen) + ' ' + (coords.targetY + coords.rightSmallArcRadius) +
430
433
  'A' +
431
434
  (coords.rightLargeArcRadius - offset) + ' ' + (coords.rightSmallArcRadius - offset) + ' 0 0 1 ' +
432
- coords.rightInnerExtent + ' ' + (coords.targetY + offset) +
435
+ (coords.rightInnerExtent - arrowLen) + ' ' + (coords.targetY + offset) +
433
436
  'L' +
434
- coords.targetX + ' ' + (coords.targetY + offset) +
437
+ (coords.targetX - arrowLen) + ' ' + (coords.targetY + offset) +
438
+ (arrowLen > 0 ? 'L' + coords.targetX + ' ' + (coords.targetY) : '') +
435
439
  'Z';
436
440
  }
437
441
  return pathString;
@@ -440,11 +444,16 @@ function createCircularClosedPathString(link) {
440
444
  function linkPath() {
441
445
  var curvature = 0.5;
442
446
  function path(d) {
447
+ var arrowLen = d.linkArrowLength;
443
448
  if(d.link.circular) {
444
- return createCircularClosedPathString(d.link);
449
+ return createCircularClosedPathString(d.link, arrowLen);
445
450
  } else {
451
+ var maxArrowLength = Math.abs((d.link.target.x0 - d.link.source.x1) / 2);
452
+ if(arrowLen > maxArrowLength) {
453
+ arrowLen = maxArrowLength;
454
+ }
446
455
  var x0 = d.link.source.x1;
447
- var x1 = d.link.target.x0;
456
+ var x1 = d.link.target.x0 - arrowLen;
448
457
  var xi = interpolateNumber(x0, x1);
449
458
  var x2 = xi(curvature);
450
459
  var x3 = xi(1 - curvature);
@@ -452,15 +461,17 @@ function linkPath() {
452
461
  var y0b = d.link.y0 + d.link.width / 2;
453
462
  var y1a = d.link.y1 - d.link.width / 2;
454
463
  var y1b = d.link.y1 + d.link.width / 2;
455
- return 'M' + x0 + ',' + y0a +
456
- 'C' + x2 + ',' + y0a +
457
- ' ' + x3 + ',' + y1a +
458
- ' ' + x1 + ',' + y1a +
459
- 'L' + x1 + ',' + y1b +
460
- 'C' + x3 + ',' + y1b +
461
- ' ' + x2 + ',' + y0b +
462
- ' ' + x0 + ',' + y0b +
463
- 'Z';
464
+ var start = 'M' + x0 + ',' + y0a;
465
+ var upperCurve = 'C' + x2 + ',' + y0a +
466
+ ' ' + x3 + ',' + y1a +
467
+ ' ' + x1 + ',' + y1a;
468
+ var lowerCurve = 'C' + x3 + ',' + y1b +
469
+ ' ' + x2 + ',' + y0b +
470
+ ' ' + x0 + ',' + y0b;
471
+
472
+ var rightEnd = arrowLen > 0 ? 'L' + (x1 + arrowLen) + ',' + (y1a + d.link.width / 2) : '';
473
+ rightEnd += 'L' + x1 + ',' + y1b;
474
+ return start + upperCurve + rightEnd + lowerCurve + 'Z';
464
475
  }
465
476
  }
466
477
  return path;
package/src/version.js CHANGED
@@ -1,4 +1,4 @@
1
1
  'use strict';
2
2
 
3
3
  // package version injected by `npm run preprocess`
4
- exports.version = '2.13.3';
4
+ exports.version = '2.14.0';