plotly.js 1.51.2 → 1.52.2
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/CHANGELOG.md +93 -0
- package/LICENSE +1 -1
- package/README.md +1 -1
- package/dist/README.md +25 -25
- package/dist/plot-schema.json +529 -77
- package/dist/plotly-basic.js +1560 -689
- package/dist/plotly-basic.min.js +3 -3
- package/dist/plotly-cartesian.js +2373 -1050
- package/dist/plotly-cartesian.min.js +3 -3
- package/dist/plotly-finance.js +1880 -900
- package/dist/plotly-finance.min.js +3 -3
- package/dist/plotly-geo-assets.js +4 -4
- package/dist/plotly-geo.js +4066 -1010
- package/dist/plotly-geo.min.js +3 -3
- package/dist/plotly-gl2d.js +1142 -556
- package/dist/plotly-gl2d.min.js +3 -3
- package/dist/plotly-gl3d.js +1773 -1022
- package/dist/plotly-gl3d.min.js +3 -3
- package/dist/plotly-locale-af.js +1 -1
- package/dist/plotly-locale-am.js +1 -1
- package/dist/plotly-locale-ar-dz.js +1 -1
- package/dist/plotly-locale-ar-eg.js +1 -1
- package/dist/plotly-locale-ar.js +1 -1
- package/dist/plotly-locale-az.js +1 -1
- package/dist/plotly-locale-bg.js +1 -1
- package/dist/plotly-locale-bs.js +1 -1
- package/dist/plotly-locale-ca.js +1 -1
- package/dist/plotly-locale-cs.js +1 -1
- package/dist/plotly-locale-cy.js +1 -1
- package/dist/plotly-locale-da.js +1 -1
- package/dist/plotly-locale-de-ch.js +1 -1
- package/dist/plotly-locale-de.js +1 -1
- package/dist/plotly-locale-el.js +1 -1
- package/dist/plotly-locale-eo.js +1 -1
- package/dist/plotly-locale-es-ar.js +1 -1
- package/dist/plotly-locale-es-pe.js +1 -1
- package/dist/plotly-locale-es.js +1 -1
- package/dist/plotly-locale-et.js +1 -1
- package/dist/plotly-locale-eu.js +1 -1
- package/dist/plotly-locale-fa.js +1 -1
- package/dist/plotly-locale-fi.js +1 -1
- package/dist/plotly-locale-fo.js +1 -1
- package/dist/plotly-locale-fr-ch.js +1 -1
- package/dist/plotly-locale-fr.js +1 -1
- package/dist/plotly-locale-gl.js +1 -1
- package/dist/plotly-locale-gu.js +1 -1
- package/dist/plotly-locale-he.js +1 -1
- package/dist/plotly-locale-hi-in.js +1 -1
- package/dist/plotly-locale-hr.js +1 -1
- package/dist/plotly-locale-hu.js +1 -1
- package/dist/plotly-locale-hy.js +1 -1
- package/dist/plotly-locale-id.js +1 -1
- package/dist/plotly-locale-is.js +1 -1
- package/dist/plotly-locale-it.js +1 -1
- package/dist/plotly-locale-ja.js +1 -1
- package/dist/plotly-locale-ka.js +1 -1
- package/dist/plotly-locale-km.js +1 -1
- package/dist/plotly-locale-ko.js +1 -1
- package/dist/plotly-locale-lt.js +1 -1
- package/dist/plotly-locale-lv.js +1 -1
- package/dist/plotly-locale-me-me.js +1 -1
- package/dist/plotly-locale-me.js +1 -1
- package/dist/plotly-locale-mk.js +1 -1
- package/dist/plotly-locale-ml.js +1 -1
- package/dist/plotly-locale-ms.js +1 -1
- package/dist/plotly-locale-mt.js +1 -1
- package/dist/plotly-locale-nl-be.js +1 -1
- package/dist/plotly-locale-nl.js +1 -1
- package/dist/plotly-locale-no.js +1 -1
- package/dist/plotly-locale-pa.js +1 -1
- package/dist/plotly-locale-pl.js +1 -1
- package/dist/plotly-locale-pt-br.js +1 -1
- package/dist/plotly-locale-rm.js +1 -1
- package/dist/plotly-locale-ro.js +1 -1
- package/dist/plotly-locale-ru.js +1 -1
- package/dist/plotly-locale-sk.js +1 -1
- package/dist/plotly-locale-sl.js +1 -1
- package/dist/plotly-locale-sq.js +1 -1
- package/dist/plotly-locale-sr-sr.js +1 -1
- package/dist/plotly-locale-sr.js +1 -1
- package/dist/plotly-locale-sv.js +1 -1
- package/dist/plotly-locale-sw.js +1 -1
- package/dist/plotly-locale-ta.js +1 -1
- package/dist/plotly-locale-th.js +1 -1
- package/dist/plotly-locale-tr.js +1 -1
- package/dist/plotly-locale-tt.js +1 -1
- package/dist/plotly-locale-uk.js +1 -1
- package/dist/plotly-locale-ur.js +1 -1
- package/dist/plotly-locale-vi.js +1 -1
- package/dist/plotly-locale-zh-cn.js +1 -1
- package/dist/plotly-locale-zh-hk.js +1 -1
- package/dist/plotly-locale-zh-tw.js +1 -1
- package/dist/plotly-mapbox.js +1749 -1849
- package/dist/plotly-mapbox.min.js +3 -3
- package/dist/plotly-with-meta.js +6225 -3884
- package/dist/plotly.js +5898 -3754
- package/dist/plotly.min.js +3 -3
- package/dist/translation-keys.txt +17 -17
- package/lib/aggregate.js +1 -1
- package/lib/bar.js +1 -1
- package/lib/barpolar.js +1 -1
- package/lib/box.js +1 -1
- package/lib/calendars.js +1 -1
- package/lib/candlestick.js +1 -1
- package/lib/carpet.js +1 -1
- package/lib/choropleth.js +1 -1
- package/lib/choroplethmapbox.js +1 -1
- package/lib/cone.js +1 -1
- package/lib/contour.js +1 -1
- package/lib/contourcarpet.js +1 -1
- package/lib/contourgl.js +1 -1
- package/lib/core.js +1 -1
- package/lib/densitymapbox.js +1 -1
- package/lib/filter.js +1 -1
- package/lib/funnel.js +1 -1
- package/lib/funnelarea.js +1 -1
- package/lib/groupby.js +1 -1
- package/lib/heatmap.js +1 -1
- package/lib/heatmapgl.js +1 -1
- package/lib/histogram.js +1 -1
- package/lib/histogram2d.js +1 -1
- package/lib/histogram2dcontour.js +1 -1
- package/lib/image.js +1 -1
- package/lib/index-basic.js +1 -1
- package/lib/index-cartesian.js +1 -1
- package/lib/index-finance.js +1 -1
- package/lib/index-geo.js +1 -1
- package/lib/index-gl2d.js +1 -1
- package/lib/index-gl3d.js +1 -1
- package/lib/index-mapbox.js +1 -1
- package/lib/index.js +1 -1
- package/lib/indicator.js +1 -1
- package/lib/isosurface.js +1 -1
- package/lib/locales/af.js +1 -1
- package/lib/locales/am.js +1 -1
- package/lib/locales/ar-dz.js +1 -1
- package/lib/locales/ar-eg.js +1 -1
- package/lib/locales/ar.js +1 -1
- package/lib/locales/az.js +1 -1
- package/lib/locales/bg.js +1 -1
- package/lib/locales/bs.js +1 -1
- package/lib/locales/ca.js +1 -1
- package/lib/locales/cs.js +1 -1
- package/lib/locales/cy.js +1 -1
- package/lib/locales/da.js +1 -1
- package/lib/locales/de-ch.js +1 -1
- package/lib/locales/de.js +1 -1
- package/lib/locales/el.js +1 -1
- package/lib/locales/eo.js +1 -1
- package/lib/locales/es-ar.js +1 -1
- package/lib/locales/es-pe.js +1 -1
- package/lib/locales/es.js +1 -1
- package/lib/locales/et.js +1 -1
- package/lib/locales/eu.js +1 -1
- package/lib/locales/fa.js +1 -1
- package/lib/locales/fi.js +1 -1
- package/lib/locales/fo.js +1 -1
- package/lib/locales/fr-ch.js +1 -1
- package/lib/locales/fr.js +1 -1
- package/lib/locales/gl.js +1 -1
- package/lib/locales/gu.js +1 -1
- package/lib/locales/he.js +1 -1
- package/lib/locales/hi-in.js +1 -1
- package/lib/locales/hr.js +1 -1
- package/lib/locales/hu.js +1 -1
- package/lib/locales/hy.js +1 -1
- package/lib/locales/id.js +1 -1
- package/lib/locales/is.js +1 -1
- package/lib/locales/it.js +1 -1
- package/lib/locales/ja.js +1 -1
- package/lib/locales/ka.js +1 -1
- package/lib/locales/km.js +1 -1
- package/lib/locales/ko.js +54 -2
- package/lib/locales/lt.js +1 -1
- package/lib/locales/lv.js +1 -1
- package/lib/locales/me-me.js +1 -1
- package/lib/locales/me.js +1 -1
- package/lib/locales/mk.js +1 -1
- package/lib/locales/ml.js +1 -1
- package/lib/locales/ms.js +1 -1
- package/lib/locales/mt.js +1 -1
- package/lib/locales/nl-be.js +1 -1
- package/lib/locales/nl.js +1 -1
- package/lib/locales/no.js +1 -1
- package/lib/locales/pa.js +1 -1
- package/lib/locales/pl.js +1 -1
- package/lib/locales/pt-br.js +1 -1
- package/lib/locales/rm.js +1 -1
- package/lib/locales/ro.js +1 -1
- package/lib/locales/ru.js +1 -1
- package/lib/locales/sk.js +1 -1
- package/lib/locales/sl.js +1 -1
- package/lib/locales/sq.js +1 -1
- package/lib/locales/sr-sr.js +1 -1
- package/lib/locales/sr.js +1 -1
- package/lib/locales/sv.js +1 -1
- package/lib/locales/sw.js +1 -1
- package/lib/locales/ta.js +1 -1
- package/lib/locales/th.js +1 -1
- package/lib/locales/tr.js +1 -1
- package/lib/locales/tt.js +1 -1
- package/lib/locales/uk.js +1 -1
- package/lib/locales/ur.js +1 -1
- package/lib/locales/vi.js +1 -1
- package/lib/locales/zh-cn.js +1 -1
- package/lib/locales/zh-hk.js +1 -1
- package/lib/locales/zh-tw.js +1 -1
- package/lib/mesh3d.js +1 -1
- package/lib/ohlc.js +1 -1
- package/lib/parcats.js +1 -1
- package/lib/parcoords.js +1 -1
- package/lib/pie.js +1 -1
- package/lib/pointcloud.js +1 -1
- package/lib/sankey.js +1 -1
- package/lib/scatter.js +1 -1
- package/lib/scatter3d.js +1 -1
- package/lib/scattercarpet.js +1 -1
- package/lib/scattergeo.js +1 -1
- package/lib/scattergl.js +1 -1
- package/lib/scattermapbox.js +1 -1
- package/lib/scatterpolar.js +1 -1
- package/lib/scatterpolargl.js +1 -1
- package/lib/scatterternary.js +1 -1
- package/lib/sort.js +1 -1
- package/lib/splom.js +1 -1
- package/lib/streamtube.js +1 -1
- package/lib/sunburst.js +1 -1
- package/lib/surface.js +1 -1
- package/lib/table.js +1 -1
- package/lib/treemap.js +1 -1
- package/lib/violin.js +1 -1
- package/lib/volume.js +1 -1
- package/lib/waterfall.js +1 -1
- package/package.json +25 -23
- package/src/assets/geo_assets.js +2 -2
- package/src/components/annotations/arrow_paths.js +1 -1
- package/src/components/annotations/attributes.js +2 -2
- package/src/components/annotations/calc_autorange.js +1 -1
- package/src/components/annotations/click.js +1 -1
- package/src/components/annotations/common_defaults.js +1 -1
- package/src/components/annotations/convert_coords.js +1 -1
- package/src/components/annotations/defaults.js +1 -1
- package/src/components/annotations/draw.js +1 -1
- package/src/components/annotations/draw_arrow_head.js +1 -1
- package/src/components/annotations/index.js +1 -1
- package/src/components/annotations3d/attributes.js +1 -1
- package/src/components/annotations3d/convert.js +1 -1
- package/src/components/annotations3d/defaults.js +1 -1
- package/src/components/annotations3d/draw.js +1 -1
- package/src/components/annotations3d/index.js +1 -1
- package/src/components/calendars/calendars.js +1 -1
- package/src/components/calendars/index.js +1 -1
- package/src/components/color/attributes.js +1 -1
- package/src/components/color/index.js +1 -1
- package/src/components/colorbar/attributes.js +1 -1
- package/src/components/colorbar/constants.js +1 -1
- package/src/components/colorbar/defaults.js +1 -1
- package/src/components/colorbar/draw.js +1 -1
- package/src/components/colorbar/has_colorbar.js +1 -1
- package/src/components/colorbar/index.js +1 -1
- package/src/components/colorscale/attributes.js +1 -1
- package/src/components/colorscale/calc.js +1 -1
- package/src/components/colorscale/cross_trace_defaults.js +1 -1
- package/src/components/colorscale/defaults.js +5 -2
- package/src/components/colorscale/helpers.js +1 -1
- package/src/components/colorscale/index.js +1 -1
- package/src/components/colorscale/layout_attributes.js +1 -1
- package/src/components/colorscale/layout_defaults.js +1 -1
- package/src/components/colorscale/scales.js +1 -1
- package/src/components/dragelement/align.js +1 -1
- package/src/components/dragelement/cursor.js +1 -1
- package/src/components/dragelement/index.js +1 -1
- package/src/components/dragelement/unhover.js +1 -1
- package/src/components/drawing/attributes.js +1 -1
- package/src/components/drawing/index.js +40 -15
- package/src/components/drawing/symbol_defs.js +1 -1
- package/src/components/errorbars/attributes.js +1 -1
- package/src/components/errorbars/calc.js +1 -1
- package/src/components/errorbars/compute_error.js +1 -1
- package/src/components/errorbars/defaults.js +1 -1
- package/src/components/errorbars/index.js +1 -1
- package/src/components/errorbars/plot.js +1 -1
- package/src/components/errorbars/style.js +1 -1
- package/src/components/fx/attributes.js +1 -1
- package/src/components/fx/calc.js +1 -1
- package/src/components/fx/click.js +1 -1
- package/src/components/fx/constants.js +1 -1
- package/src/components/fx/defaults.js +1 -1
- package/src/components/fx/helpers.js +1 -1
- package/src/components/fx/hover.js +1 -1
- package/src/components/fx/hoverlabel_defaults.js +1 -1
- package/src/components/fx/index.js +1 -1
- package/src/components/fx/layout_attributes.js +1 -1
- package/src/components/fx/layout_defaults.js +1 -1
- package/src/components/fx/layout_global_defaults.js +1 -1
- package/src/components/grid/index.js +1 -1
- package/src/components/images/attributes.js +1 -1
- package/src/components/images/convert_coords.js +1 -1
- package/src/components/images/defaults.js +1 -1
- package/src/components/images/draw.js +1 -1
- package/src/components/images/index.js +1 -1
- package/src/components/legend/attributes.js +34 -1
- package/src/components/legend/constants.js +3 -1
- package/src/components/legend/defaults.js +15 -2
- package/src/components/legend/draw.js +96 -29
- package/src/components/legend/get_legend_data.js +1 -1
- package/src/components/legend/handle_click.js +7 -4
- package/src/components/legend/helpers.js +1 -1
- package/src/components/legend/index.js +1 -1
- package/src/components/legend/style.js +128 -3
- package/src/components/modebar/buttons.js +43 -5
- package/src/components/modebar/index.js +1 -1
- package/src/components/modebar/manage.js +2 -1
- package/src/components/modebar/modebar.js +1 -1
- package/src/components/rangeselector/attributes.js +1 -1
- package/src/components/rangeselector/constants.js +1 -1
- package/src/components/rangeselector/defaults.js +1 -1
- package/src/components/rangeselector/draw.js +1 -1
- package/src/components/rangeselector/get_update_object.js +1 -1
- package/src/components/rangeselector/index.js +1 -1
- package/src/components/rangeslider/attributes.js +1 -1
- package/src/components/rangeslider/calc_autorange.js +1 -1
- package/src/components/rangeslider/constants.js +1 -1
- package/src/components/rangeslider/defaults.js +1 -1
- package/src/components/rangeslider/draw.js +1 -1
- package/src/components/rangeslider/helpers.js +1 -1
- package/src/components/rangeslider/index.js +1 -1
- package/src/components/rangeslider/oppaxis_attributes.js +1 -1
- package/src/components/shapes/attributes.js +1 -1
- package/src/components/shapes/calc_autorange.js +1 -1
- package/src/components/shapes/constants.js +1 -1
- package/src/components/shapes/defaults.js +1 -1
- package/src/components/shapes/draw.js +1 -1
- package/src/components/shapes/helpers.js +1 -1
- package/src/components/shapes/index.js +1 -1
- package/src/components/sliders/attributes.js +1 -1
- package/src/components/sliders/constants.js +1 -1
- package/src/components/sliders/defaults.js +1 -1
- package/src/components/sliders/draw.js +1 -1
- package/src/components/sliders/index.js +1 -1
- package/src/components/titles/index.js +1 -1
- package/src/components/updatemenus/attributes.js +1 -1
- package/src/components/updatemenus/constants.js +1 -1
- package/src/components/updatemenus/defaults.js +1 -1
- package/src/components/updatemenus/draw.js +1 -1
- package/src/components/updatemenus/index.js +1 -1
- package/src/components/updatemenus/scrollbox.js +1 -1
- package/src/constants/alignment.js +1 -1
- package/src/constants/delta.js +1 -1
- package/src/constants/docs.js +1 -1
- package/src/constants/filter_ops.js +1 -1
- package/src/constants/gl3d_dashes.js +1 -1
- package/src/constants/gl3d_markers.js +1 -1
- package/src/constants/interactions.js +1 -1
- package/src/constants/numerical.js +1 -1
- package/src/constants/xmlns_namespaces.js +1 -1
- package/src/core.js +8 -2
- package/src/fonts/mathjax_config.js +1 -1
- package/src/fonts/ploticon.js +1 -1
- package/src/lib/anchor_utils.js +1 -1
- package/src/lib/angles.js +1 -1
- package/src/lib/array.js +1 -1
- package/src/lib/clean_number.js +1 -1
- package/src/lib/clear_gl_canvases.js +1 -1
- package/src/lib/clear_responsive.js +1 -1
- package/src/lib/coerce.js +1 -1
- package/src/lib/dates.js +1 -1
- package/src/lib/dom.js +1 -1
- package/src/lib/events.js +1 -1
- package/src/lib/extend.js +1 -1
- package/src/lib/filter_unique.js +1 -1
- package/src/lib/filter_visible.js +1 -1
- package/src/lib/geo_location_utils.js +312 -7
- package/src/lib/geojson_utils.js +1 -1
- package/src/lib/geometry2d.js +1 -1
- package/src/lib/gl_format_color.js +1 -1
- package/src/lib/gup.js +1 -1
- package/src/lib/identity.js +1 -1
- package/src/lib/index.js +57 -31
- package/src/lib/is_plain_object.js +1 -1
- package/src/lib/keyed_container.js +1 -1
- package/src/lib/localize.js +1 -1
- package/src/lib/loggers.js +36 -10
- package/src/lib/make_trace_groups.js +1 -1
- package/src/lib/matrix.js +1 -1
- package/src/lib/mod.js +1 -1
- package/src/lib/nested_property.js +1 -1
- package/src/lib/noop.js +1 -1
- package/src/lib/notifier.js +13 -7
- package/src/lib/override_cursor.js +1 -1
- package/src/lib/polygon.js +1 -1
- package/src/lib/prepare_regl.js +1 -1
- package/src/lib/push_unique.js +1 -1
- package/src/lib/queue.js +1 -1
- package/src/lib/regex.js +1 -1
- package/src/lib/relative_attr.js +1 -1
- package/src/lib/relink_private.js +1 -1
- package/src/lib/search.js +1 -1
- package/src/lib/setcursor.js +1 -1
- package/src/lib/show_no_webgl_msg.js +1 -1
- package/src/lib/stats.js +1 -1
- package/src/lib/str2rgbarray.js +1 -1
- package/src/lib/svg_text_utils.js +1 -1
- package/src/lib/throttle.js +1 -1
- package/src/lib/to_log_range.js +1 -1
- package/src/lib/topojson_utils.js +1 -1
- package/src/locale-en-us.js +1 -1
- package/src/locale-en.js +1 -1
- package/src/plot_api/container_array_match.js +1 -1
- package/src/plot_api/edit_types.js +1 -1
- package/src/plot_api/helpers.js +1 -1
- package/src/plot_api/index.js +1 -1
- package/src/plot_api/manage_arrays.js +1 -1
- package/src/plot_api/plot_api.js +2 -2
- package/src/plot_api/plot_config.js +19 -2
- package/src/plot_api/plot_schema.js +1 -1
- package/src/plot_api/plot_template.js +1 -1
- package/src/plot_api/subroutines.js +7 -1
- package/src/plot_api/template_api.js +1 -1
- package/src/plot_api/to_image.js +1 -1
- package/src/plot_api/validate.js +5 -4
- package/src/plots/animation_attributes.js +1 -1
- package/src/plots/array_container_defaults.js +1 -1
- package/src/plots/attributes.js +1 -1
- package/src/plots/cartesian/attributes.js +1 -1
- package/src/plots/cartesian/autorange.js +1 -1
- package/src/plots/cartesian/axes.js +7 -3
- package/src/plots/cartesian/axis_autotype.js +1 -1
- package/src/plots/cartesian/axis_defaults.js +1 -1
- package/src/plots/cartesian/axis_ids.js +1 -1
- package/src/plots/cartesian/category_order_defaults.js +1 -1
- package/src/plots/cartesian/clean_ticks.js +1 -1
- package/src/plots/cartesian/constants.js +2 -3
- package/src/plots/cartesian/constraints.js +1 -1
- package/src/plots/cartesian/dragbox.js +1 -1
- package/src/plots/cartesian/graph_interact.js +1 -1
- package/src/plots/cartesian/include_components.js +1 -1
- package/src/plots/cartesian/index.js +1 -1
- package/src/plots/cartesian/layout_attributes.js +1 -1
- package/src/plots/cartesian/layout_defaults.js +113 -28
- package/src/plots/cartesian/line_grid_defaults.js +1 -1
- package/src/plots/cartesian/position_defaults.js +1 -1
- package/src/plots/cartesian/scale_zoom.js +1 -1
- package/src/plots/cartesian/select.js +1 -1
- package/src/plots/cartesian/set_convert.js +1 -1
- package/src/plots/cartesian/tick_label_defaults.js +1 -1
- package/src/plots/cartesian/tick_mark_defaults.js +1 -1
- package/src/plots/cartesian/tick_value_defaults.js +1 -1
- package/src/plots/cartesian/transition_axes.js +1 -1
- package/src/plots/cartesian/type_defaults.js +11 -3
- package/src/plots/command.js +1 -1
- package/src/plots/domain.js +1 -1
- package/src/plots/font_attributes.js +1 -1
- package/src/plots/frame_attributes.js +1 -1
- package/src/plots/geo/constants.js +1 -1
- package/src/plots/geo/geo.js +114 -51
- package/src/plots/geo/index.js +1 -1
- package/src/plots/geo/layout_attributes.js +34 -1
- package/src/plots/geo/layout_defaults.js +80 -15
- package/src/plots/geo/projections.js +1 -1
- package/src/plots/geo/zoom.js +2 -2
- package/src/plots/get_data.js +1 -1
- package/src/plots/gl2d/camera.js +1 -1
- package/src/plots/gl2d/convert.js +1 -1
- package/src/plots/gl2d/index.js +1 -1
- package/src/plots/gl2d/scene2d.js +1 -1
- package/src/plots/gl3d/index.js +1 -1
- package/src/plots/gl3d/layout/attributes.js +1 -1
- package/src/plots/gl3d/layout/axis_attributes.js +1 -1
- package/src/plots/gl3d/layout/axis_defaults.js +1 -1
- package/src/plots/gl3d/layout/convert.js +1 -1
- package/src/plots/gl3d/layout/defaults.js +1 -1
- package/src/plots/gl3d/layout/layout_attributes.js +1 -1
- package/src/plots/gl3d/layout/spikes.js +1 -1
- package/src/plots/gl3d/layout/tick_marks.js +1 -1
- package/src/plots/gl3d/project.js +1 -1
- package/src/plots/gl3d/scene.js +362 -324
- package/src/plots/gl3d/zip3.js +1 -1
- package/src/plots/layout_attributes.js +33 -3
- package/src/plots/mapbox/constants.js +1 -1
- package/src/plots/mapbox/convert_text_opts.js +1 -1
- package/src/plots/mapbox/index.js +2 -1
- package/src/plots/mapbox/layers.js +28 -1
- package/src/plots/mapbox/layout_attributes.js +1 -1
- package/src/plots/mapbox/layout_defaults.js +1 -1
- package/src/plots/mapbox/mapbox.js +46 -54
- package/src/plots/pad_attributes.js +1 -1
- package/src/plots/plots.js +55 -14
- package/src/plots/polar/constants.js +1 -1
- package/src/plots/polar/helpers.js +1 -1
- package/src/plots/polar/index.js +1 -1
- package/src/plots/polar/layout_attributes.js +1 -1
- package/src/plots/polar/layout_defaults.js +1 -1
- package/src/plots/polar/legacy/area_attributes.js +1 -1
- package/src/plots/polar/legacy/axis_attributes.js +1 -1
- package/src/plots/polar/legacy/index.js +1 -1
- package/src/plots/polar/legacy/micropolar.js +1 -1
- package/src/plots/polar/legacy/micropolar_manager.js +1 -1
- package/src/plots/polar/legacy/undo_manager.js +1 -1
- package/src/plots/polar/polar.js +1 -1
- package/src/plots/polar/set_convert.js +1 -1
- package/src/plots/subplot_defaults.js +1 -1
- package/src/plots/template_attributes.js +1 -1
- package/src/plots/ternary/index.js +1 -1
- package/src/plots/ternary/layout_attributes.js +1 -1
- package/src/plots/ternary/layout_defaults.js +1 -1
- package/src/plots/ternary/ternary.js +1 -1
- package/src/registry.js +1 -1
- package/src/snapshot/cloneplot.js +1 -1
- package/src/snapshot/download.js +1 -1
- package/src/snapshot/filesaver.js +1 -1
- package/src/snapshot/helpers.js +1 -1
- package/src/snapshot/index.js +1 -1
- package/src/snapshot/svgtoimg.js +1 -1
- package/src/snapshot/toimage.js +1 -1
- package/src/snapshot/tosvg.js +21 -13
- package/src/traces/bar/arrays_to_calcdata.js +1 -1
- package/src/traces/bar/attributes.js +1 -1
- package/src/traces/bar/calc.js +1 -1
- package/src/traces/bar/constants.js +1 -1
- package/src/traces/bar/cross_trace_calc.js +1 -1
- package/src/traces/bar/defaults.js +10 -2
- package/src/traces/bar/event_data.js +1 -1
- package/src/traces/bar/helpers.js +1 -1
- package/src/traces/bar/hover.js +7 -2
- package/src/traces/bar/index.js +1 -1
- package/src/traces/bar/layout_attributes.js +1 -1
- package/src/traces/bar/layout_defaults.js +1 -1
- package/src/traces/bar/plot.js +139 -91
- package/src/traces/bar/select.js +1 -1
- package/src/traces/bar/sieve.js +1 -1
- package/src/traces/bar/style.js +9 -4
- package/src/traces/bar/style_defaults.js +1 -1
- package/src/traces/bar/uniform_text.js +84 -0
- package/src/traces/barpolar/attributes.js +1 -1
- package/src/traces/barpolar/calc.js +1 -1
- package/src/traces/barpolar/defaults.js +1 -1
- package/src/traces/barpolar/hover.js +1 -1
- package/src/traces/barpolar/index.js +1 -1
- package/src/traces/barpolar/layout_attributes.js +1 -1
- package/src/traces/barpolar/layout_defaults.js +1 -1
- package/src/traces/barpolar/plot.js +1 -1
- package/src/traces/box/attributes.js +204 -42
- package/src/traces/box/calc.js +286 -92
- package/src/traces/box/cross_trace_calc.js +1 -1
- package/src/traces/box/defaults.js +186 -22
- package/src/traces/box/event_data.js +1 -1
- package/src/traces/box/hover.js +1 -1
- package/src/traces/box/index.js +25 -12
- package/src/traces/box/layout_attributes.js +1 -1
- package/src/traces/box/layout_defaults.js +1 -1
- package/src/traces/box/plot.js +1 -1
- package/src/traces/box/select.js +1 -1
- package/src/traces/box/style.js +1 -1
- package/src/traces/candlestick/attributes.js +1 -1
- package/src/traces/candlestick/calc.js +1 -1
- package/src/traces/candlestick/defaults.js +1 -1
- package/src/traces/candlestick/index.js +1 -1
- package/src/traces/carpet/ab_defaults.js +1 -1
- package/src/traces/carpet/array_minmax.js +1 -1
- package/src/traces/carpet/attributes.js +1 -1
- package/src/traces/carpet/axis_aligned_line.js +1 -1
- package/src/traces/carpet/axis_attributes.js +1 -1
- package/src/traces/carpet/axis_defaults.js +1 -1
- package/src/traces/carpet/calc.js +1 -1
- package/src/traces/carpet/calc_clippath.js +1 -1
- package/src/traces/carpet/calc_gridlines.js +1 -1
- package/src/traces/carpet/calc_labels.js +1 -1
- package/src/traces/carpet/catmull_rom.js +1 -1
- package/src/traces/carpet/cheater_basis.js +1 -1
- package/src/traces/carpet/compute_control_points.js +1 -1
- package/src/traces/carpet/constants.js +1 -1
- package/src/traces/carpet/create_i_derivative_evaluator.js +1 -1
- package/src/traces/carpet/create_j_derivative_evaluator.js +1 -1
- package/src/traces/carpet/create_spline_evaluator.js +1 -1
- package/src/traces/carpet/defaults.js +1 -1
- package/src/traces/carpet/index.js +1 -1
- package/src/traces/carpet/lookup_carpetid.js +1 -1
- package/src/traces/carpet/makepath.js +1 -1
- package/src/traces/carpet/map_1d_array.js +1 -1
- package/src/traces/carpet/orient_text.js +1 -1
- package/src/traces/carpet/plot.js +1 -1
- package/src/traces/carpet/set_convert.js +1 -1
- package/src/traces/carpet/smooth_fill_2d_array.js +1 -1
- package/src/traces/carpet/smooth_fill_array.js +1 -1
- package/src/traces/carpet/xy_defaults.js +1 -1
- package/src/traces/choropleth/attributes.js +18 -2
- package/src/traces/choropleth/calc.js +1 -1
- package/src/traces/choropleth/defaults.js +13 -3
- package/src/traces/choropleth/event_data.js +4 -2
- package/src/traces/choropleth/hover.js +1 -1
- package/src/traces/choropleth/index.js +3 -2
- package/src/traces/choropleth/plot.js +39 -122
- package/src/traces/choropleth/select.js +1 -1
- package/src/traces/choropleth/style.js +1 -1
- package/src/traces/choroplethmapbox/attributes.js +16 -9
- package/src/traces/choroplethmapbox/convert.js +17 -106
- package/src/traces/choroplethmapbox/defaults.js +3 -1
- package/src/traces/choroplethmapbox/index.js +2 -2
- package/src/traces/choroplethmapbox/plot.js +1 -1
- package/src/traces/cone/attributes.js +4 -2
- package/src/traces/cone/calc.js +1 -1
- package/src/traces/cone/convert.js +1 -1
- package/src/traces/cone/defaults.js +1 -1
- package/src/traces/cone/index.js +2 -2
- package/src/traces/contour/attributes.js +1 -1
- package/src/traces/contour/calc.js +1 -1
- package/src/traces/contour/close_boundaries.js +1 -1
- package/src/traces/contour/colorbar.js +6 -4
- package/src/traces/contour/constants.js +1 -1
- package/src/traces/contour/constraint_defaults.js +1 -1
- package/src/traces/contour/constraint_mapping.js +1 -1
- package/src/traces/contour/contours_defaults.js +1 -1
- package/src/traces/contour/convert_to_constraints.js +1 -1
- package/src/traces/contour/defaults.js +1 -1
- package/src/traces/contour/empty_pathinfo.js +1 -1
- package/src/traces/contour/end_plus.js +1 -1
- package/src/traces/contour/find_all_paths.js +1 -1
- package/src/traces/contour/hover.js +1 -1
- package/src/traces/contour/index.js +1 -1
- package/src/traces/contour/label_defaults.js +1 -1
- package/src/traces/contour/make_color_map.js +1 -1
- package/src/traces/contour/make_crossings.js +1 -1
- package/src/traces/contour/plot.js +1 -1
- package/src/traces/contour/set_contours.js +1 -1
- package/src/traces/contour/style.js +1 -1
- package/src/traces/contour/style_defaults.js +1 -1
- package/src/traces/contourcarpet/attributes.js +1 -1
- package/src/traces/contourcarpet/calc.js +1 -1
- package/src/traces/contourcarpet/defaults.js +1 -1
- package/src/traces/contourcarpet/index.js +1 -1
- package/src/traces/contourcarpet/plot.js +1 -1
- package/src/traces/contourgl/convert.js +1 -1
- package/src/traces/contourgl/index.js +1 -1
- package/src/traces/densitymapbox/attributes.js +3 -2
- package/src/traces/densitymapbox/calc.js +1 -1
- package/src/traces/densitymapbox/convert.js +1 -1
- package/src/traces/densitymapbox/defaults.js +1 -1
- package/src/traces/densitymapbox/event_data.js +1 -1
- package/src/traces/densitymapbox/hover.js +1 -1
- package/src/traces/densitymapbox/index.js +2 -2
- package/src/traces/densitymapbox/plot.js +1 -1
- package/src/traces/funnel/arrays_to_calcdata.js +1 -1
- package/src/traces/funnel/attributes.js +1 -1
- package/src/traces/funnel/calc.js +1 -1
- package/src/traces/funnel/constants.js +1 -1
- package/src/traces/funnel/cross_trace_calc.js +1 -1
- package/src/traces/funnel/defaults.js +1 -1
- package/src/traces/funnel/event_data.js +1 -1
- package/src/traces/funnel/hover.js +1 -1
- package/src/traces/funnel/index.js +1 -1
- package/src/traces/funnel/layout_attributes.js +1 -1
- package/src/traces/funnel/layout_defaults.js +1 -1
- package/src/traces/funnel/plot.js +6 -3
- package/src/traces/funnel/style.js +5 -3
- package/src/traces/funnelarea/attributes.js +1 -1
- package/src/traces/funnelarea/base_plot.js +1 -1
- package/src/traces/funnelarea/calc.js +1 -1
- package/src/traces/funnelarea/defaults.js +11 -9
- package/src/traces/funnelarea/index.js +1 -1
- package/src/traces/funnelarea/layout_attributes.js +1 -1
- package/src/traces/funnelarea/layout_defaults.js +1 -1
- package/src/traces/funnelarea/plot.js +23 -14
- package/src/traces/funnelarea/style.js +6 -2
- package/src/traces/heatmap/attributes.js +4 -2
- package/src/traces/heatmap/calc.js +1 -1
- package/src/traces/heatmap/clean_2d_array.js +1 -1
- package/src/traces/heatmap/colorbar.js +1 -1
- package/src/traces/heatmap/convert_column_xyz.js +6 -1
- package/src/traces/heatmap/defaults.js +1 -1
- package/src/traces/heatmap/find_empties.js +1 -1
- package/src/traces/heatmap/hover.js +2 -2
- package/src/traces/heatmap/index.js +2 -2
- package/src/traces/heatmap/interp2d.js +1 -1
- package/src/traces/heatmap/make_bound_array.js +1 -1
- package/src/traces/heatmap/plot.js +1 -1
- package/src/traces/heatmap/style.js +1 -1
- package/src/traces/heatmap/style_defaults.js +1 -1
- package/src/traces/heatmap/xyz_defaults.js +1 -1
- package/src/traces/heatmapgl/attributes.js +1 -1
- package/src/traces/heatmapgl/convert.js +1 -1
- package/src/traces/heatmapgl/index.js +1 -1
- package/src/traces/histogram/attributes.js +1 -1
- package/src/traces/histogram/average.js +1 -1
- package/src/traces/histogram/bin_attributes.js +1 -1
- package/src/traces/histogram/bin_functions.js +1 -1
- package/src/traces/histogram/bin_label_vals.js +1 -1
- package/src/traces/histogram/calc.js +1 -1
- package/src/traces/histogram/constants.js +1 -1
- package/src/traces/histogram/cross_trace_defaults.js +2 -2
- package/src/traces/histogram/defaults.js +1 -1
- package/src/traces/histogram/event_data.js +1 -1
- package/src/traces/histogram/hover.js +1 -1
- package/src/traces/histogram/index.js +1 -1
- package/src/traces/histogram/norm_functions.js +1 -1
- package/src/traces/histogram2d/attributes.js +4 -2
- package/src/traces/histogram2d/calc.js +1 -1
- package/src/traces/histogram2d/defaults.js +1 -1
- package/src/traces/histogram2d/hover.js +1 -1
- package/src/traces/histogram2d/index.js +2 -3
- package/src/traces/histogram2d/sample_defaults.js +1 -1
- package/src/traces/histogram2dcontour/attributes.js +1 -1
- package/src/traces/histogram2dcontour/defaults.js +1 -1
- package/src/traces/histogram2dcontour/index.js +1 -1
- package/src/traces/image/attributes.js +1 -1
- package/src/traces/image/calc.js +1 -1
- package/src/traces/image/constants.js +1 -1
- package/src/traces/image/defaults.js +1 -1
- package/src/traces/image/event_data.js +1 -1
- package/src/traces/image/hover.js +1 -1
- package/src/traces/image/index.js +1 -1
- package/src/traces/image/plot.js +1 -1
- package/src/traces/image/style.js +1 -1
- package/src/traces/indicator/attributes.js +1 -1
- package/src/traces/indicator/base_plot.js +1 -1
- package/src/traces/indicator/calc.js +1 -1
- package/src/traces/indicator/constants.js +1 -1
- package/src/traces/indicator/defaults.js +1 -1
- package/src/traces/indicator/index.js +1 -1
- package/src/traces/indicator/plot.js +1 -1
- package/src/traces/isosurface/attributes.js +3 -2
- package/src/traces/isosurface/calc.js +23 -6
- package/src/traces/isosurface/convert.js +54 -44
- package/src/traces/isosurface/defaults.js +1 -1
- package/src/traces/isosurface/index.js +2 -2
- package/src/traces/mesh3d/attributes.js +16 -4
- package/src/traces/mesh3d/calc.js +1 -1
- package/src/traces/mesh3d/convert.js +13 -8
- package/src/traces/mesh3d/defaults.js +2 -1
- package/src/traces/mesh3d/index.js +2 -2
- package/src/traces/ohlc/attributes.js +1 -1
- package/src/traces/ohlc/calc.js +1 -1
- package/src/traces/ohlc/defaults.js +1 -1
- package/src/traces/ohlc/hover.js +1 -1
- package/src/traces/ohlc/index.js +1 -1
- package/src/traces/ohlc/ohlc_defaults.js +1 -1
- package/src/traces/ohlc/plot.js +1 -1
- package/src/traces/ohlc/select.js +1 -1
- package/src/traces/ohlc/style.js +1 -1
- package/src/traces/parcats/attributes.js +1 -1
- package/src/traces/parcats/base_plot.js +1 -1
- package/src/traces/parcats/calc.js +1 -1
- package/src/traces/parcats/defaults.js +1 -1
- package/src/traces/parcats/index.js +1 -1
- package/src/traces/parcats/parcats.js +1 -1
- package/src/traces/parcats/plot.js +1 -1
- package/src/traces/parcoords/attributes.js +1 -1
- package/src/traces/parcoords/axisbrush.js +1 -1
- package/src/traces/parcoords/base_plot.js +1 -1
- package/src/traces/parcoords/calc.js +1 -1
- package/src/traces/parcoords/constants.js +1 -1
- package/src/traces/parcoords/defaults.js +1 -1
- package/src/traces/parcoords/helpers.js +1 -1
- package/src/traces/parcoords/index.js +1 -1
- package/src/traces/parcoords/lines.js +1 -1
- package/src/traces/parcoords/merge_length.js +1 -1
- package/src/traces/parcoords/parcoords.js +1 -1
- package/src/traces/parcoords/plot.js +1 -1
- package/src/traces/pie/attributes.js +17 -1
- package/src/traces/pie/base_plot.js +1 -1
- package/src/traces/pie/calc.js +7 -8
- package/src/traces/pie/defaults.js +50 -10
- package/src/traces/pie/event_data.js +1 -1
- package/src/traces/pie/helpers.js +1 -1
- package/src/traces/pie/index.js +2 -2
- package/src/traces/pie/layout_attributes.js +1 -1
- package/src/traces/pie/layout_defaults.js +1 -1
- package/src/traces/pie/plot.js +196 -72
- package/src/traces/pie/style.js +6 -2
- package/src/traces/pie/style_one.js +1 -1
- package/src/traces/pointcloud/attributes.js +1 -1
- package/src/traces/pointcloud/convert.js +1 -1
- package/src/traces/pointcloud/defaults.js +1 -1
- package/src/traces/pointcloud/index.js +1 -1
- package/src/traces/sankey/attributes.js +1 -1
- package/src/traces/sankey/base_plot.js +1 -1
- package/src/traces/sankey/calc.js +1 -1
- package/src/traces/sankey/constants.js +1 -1
- package/src/traces/sankey/defaults.js +1 -1
- package/src/traces/sankey/index.js +1 -1
- package/src/traces/sankey/plot.js +10 -6
- package/src/traces/sankey/render.js +1 -1
- package/src/traces/sankey/select.js +1 -1
- package/src/traces/scatter/arrays_to_calcdata.js +1 -1
- package/src/traces/scatter/attributes.js +1 -1
- package/src/traces/scatter/calc.js +1 -1
- package/src/traces/scatter/calc_selection.js +1 -1
- package/src/traces/scatter/colorscale_calc.js +1 -1
- package/src/traces/scatter/constants.js +1 -1
- package/src/traces/scatter/cross_trace_calc.js +1 -1
- package/src/traces/scatter/cross_trace_defaults.js +1 -1
- package/src/traces/scatter/defaults.js +1 -1
- package/src/traces/scatter/fillcolor_defaults.js +1 -1
- package/src/traces/scatter/format_labels.js +1 -1
- package/src/traces/scatter/get_trace_color.js +1 -1
- package/src/traces/scatter/hover.js +1 -1
- package/src/traces/scatter/index.js +1 -1
- package/src/traces/scatter/line_defaults.js +1 -1
- package/src/traces/scatter/line_points.js +1 -1
- package/src/traces/scatter/line_shape_defaults.js +1 -1
- package/src/traces/scatter/link_traces.js +1 -1
- package/src/traces/scatter/make_bubble_size_func.js +1 -1
- package/src/traces/scatter/marker_colorbar.js +1 -1
- package/src/traces/scatter/marker_defaults.js +1 -1
- package/src/traces/scatter/plot.js +1 -1
- package/src/traces/scatter/select.js +1 -1
- package/src/traces/scatter/stack_defaults.js +1 -1
- package/src/traces/scatter/style.js +1 -1
- package/src/traces/scatter/subtypes.js +1 -1
- package/src/traces/scatter/text_defaults.js +1 -1
- package/src/traces/scatter/xy_defaults.js +1 -1
- package/src/traces/scatter3d/attributes.js +1 -1
- package/src/traces/scatter3d/calc.js +1 -1
- package/src/traces/scatter3d/calc_errors.js +1 -1
- package/src/traces/scatter3d/convert.js +1 -1
- package/src/traces/scatter3d/defaults.js +1 -1
- package/src/traces/scatter3d/index.js +1 -1
- package/src/traces/scattercarpet/attributes.js +1 -1
- package/src/traces/scattercarpet/calc.js +1 -1
- package/src/traces/scattercarpet/defaults.js +1 -1
- package/src/traces/scattercarpet/event_data.js +1 -1
- package/src/traces/scattercarpet/format_labels.js +1 -1
- package/src/traces/scattercarpet/hover.js +1 -1
- package/src/traces/scattercarpet/index.js +1 -1
- package/src/traces/scattercarpet/plot.js +1 -1
- package/src/traces/scattergeo/attributes.js +35 -3
- package/src/traces/scattergeo/calc.js +13 -2
- package/src/traces/scattergeo/defaults.js +26 -24
- package/src/traces/scattergeo/event_data.js +8 -2
- package/src/traces/scattergeo/format_labels.js +1 -1
- package/src/traces/scattergeo/hover.js +1 -1
- package/src/traces/scattergeo/index.js +3 -2
- package/src/traces/scattergeo/plot.js +55 -20
- package/src/traces/scattergeo/select.js +1 -1
- package/src/traces/scattergeo/style.js +1 -1
- package/src/traces/scattergl/attributes.js +1 -1
- package/src/traces/scattergl/calc.js +1 -1
- package/src/traces/scattergl/constants.js +1 -1
- package/src/traces/scattergl/convert.js +14 -10
- package/src/traces/scattergl/defaults.js +3 -2
- package/src/traces/scattergl/edit_style.js +1 -1
- package/src/traces/scattergl/format_labels.js +1 -1
- package/src/traces/scattergl/helpers.js +23 -0
- package/src/traces/scattergl/hover.js +5 -5
- package/src/traces/scattergl/index.js +1 -1
- package/src/traces/scattergl/plot.js +1 -1
- package/src/traces/scattergl/scene_update.js +1 -1
- package/src/traces/scattergl/select.js +1 -1
- package/src/traces/scattermapbox/attributes.js +1 -1
- package/src/traces/scattermapbox/convert.js +1 -1
- package/src/traces/scattermapbox/defaults.js +1 -1
- package/src/traces/scattermapbox/event_data.js +1 -1
- package/src/traces/scattermapbox/format_labels.js +1 -1
- package/src/traces/scattermapbox/hover.js +1 -1
- package/src/traces/scattermapbox/index.js +1 -1
- package/src/traces/scattermapbox/plot.js +1 -1
- package/src/traces/scattermapbox/select.js +1 -1
- package/src/traces/scatterpolar/attributes.js +1 -1
- package/src/traces/scatterpolar/calc.js +1 -1
- package/src/traces/scatterpolar/defaults.js +1 -1
- package/src/traces/scatterpolar/format_labels.js +1 -1
- package/src/traces/scatterpolar/hover.js +1 -1
- package/src/traces/scatterpolar/index.js +1 -1
- package/src/traces/scatterpolar/plot.js +1 -1
- package/src/traces/scatterpolargl/attributes.js +1 -1
- package/src/traces/scatterpolargl/calc.js +1 -1
- package/src/traces/scatterpolargl/defaults.js +1 -1
- package/src/traces/scatterpolargl/format_labels.js +1 -1
- package/src/traces/scatterpolargl/hover.js +1 -1
- package/src/traces/scatterpolargl/index.js +1 -1
- package/src/traces/scatterpolargl/plot.js +1 -1
- package/src/traces/scatterternary/attributes.js +1 -1
- package/src/traces/scatterternary/calc.js +1 -1
- package/src/traces/scatterternary/defaults.js +1 -1
- package/src/traces/scatterternary/event_data.js +1 -1
- package/src/traces/scatterternary/format_labels.js +1 -1
- package/src/traces/scatterternary/hover.js +1 -1
- package/src/traces/scatterternary/index.js +1 -1
- package/src/traces/scatterternary/plot.js +1 -1
- package/src/traces/splom/attributes.js +1 -1
- package/src/traces/splom/base_plot.js +1 -1
- package/src/traces/splom/calc.js +1 -1
- package/src/traces/splom/defaults.js +3 -3
- package/src/traces/splom/edit_style.js +1 -1
- package/src/traces/splom/helpers.js +1 -1
- package/src/traces/splom/hover.js +1 -1
- package/src/traces/splom/index.js +1 -1
- package/src/traces/splom/plot.js +1 -1
- package/src/traces/splom/scene_update.js +1 -1
- package/src/traces/splom/select.js +1 -1
- package/src/traces/streamtube/attributes.js +3 -2
- package/src/traces/streamtube/calc.js +112 -54
- package/src/traces/streamtube/convert.js +7 -7
- package/src/traces/streamtube/defaults.js +1 -1
- package/src/traces/streamtube/index.js +3 -3
- package/src/traces/sunburst/attributes.js +11 -2
- package/src/traces/sunburst/base_plot.js +1 -1
- package/src/traces/sunburst/calc.js +4 -2
- package/src/traces/sunburst/constants.js +1 -1
- package/src/traces/sunburst/defaults.js +7 -2
- package/src/traces/sunburst/fx.js +24 -23
- package/src/traces/sunburst/helpers.js +16 -9
- package/src/traces/sunburst/index.js +1 -1
- package/src/traces/sunburst/layout_attributes.js +1 -1
- package/src/traces/sunburst/layout_defaults.js +1 -1
- package/src/traces/sunburst/plot.js +52 -25
- package/src/traces/sunburst/style.js +6 -2
- package/src/traces/surface/attributes.js +3 -2
- package/src/traces/surface/calc.js +1 -1
- package/src/traces/surface/convert.js +1 -1
- package/src/traces/surface/defaults.js +1 -1
- package/src/traces/surface/index.js +2 -2
- package/src/traces/table/attributes.js +1 -1
- package/src/traces/table/base_plot.js +1 -1
- package/src/traces/table/calc.js +1 -1
- package/src/traces/table/constants.js +1 -1
- package/src/traces/table/data_preparation_helper.js +1 -1
- package/src/traces/table/data_split_helpers.js +1 -1
- package/src/traces/table/defaults.js +1 -1
- package/src/traces/table/index.js +1 -1
- package/src/traces/table/plot.js +1 -1
- package/src/traces/treemap/attributes.js +10 -2
- package/src/traces/treemap/base_plot.js +1 -1
- package/src/traces/treemap/calc.js +1 -1
- package/src/traces/treemap/constants.js +1 -1
- package/src/traces/treemap/defaults.js +8 -5
- package/src/traces/treemap/draw_ancestors.js +9 -11
- package/src/traces/treemap/draw_descendants.js +6 -2
- package/src/traces/treemap/index.js +1 -1
- package/src/traces/treemap/layout_attributes.js +1 -1
- package/src/traces/treemap/layout_defaults.js +1 -1
- package/src/traces/treemap/partition.js +1 -1
- package/src/traces/treemap/plot.js +62 -47
- package/src/traces/treemap/style.js +6 -2
- package/src/traces/violin/attributes.js +5 -2
- package/src/traces/violin/calc.js +1 -1
- package/src/traces/violin/cross_trace_calc.js +1 -1
- package/src/traces/violin/defaults.js +1 -1
- package/src/traces/violin/helpers.js +1 -1
- package/src/traces/violin/hover.js +1 -1
- package/src/traces/violin/index.js +1 -1
- package/src/traces/violin/layout_attributes.js +1 -1
- package/src/traces/violin/layout_defaults.js +1 -1
- package/src/traces/violin/plot.js +1 -1
- package/src/traces/violin/style.js +1 -1
- package/src/traces/volume/attributes.js +3 -2
- package/src/traces/volume/convert.js +13 -13
- package/src/traces/volume/defaults.js +1 -1
- package/src/traces/volume/index.js +2 -2
- package/src/traces/waterfall/attributes.js +1 -1
- package/src/traces/waterfall/calc.js +1 -1
- package/src/traces/waterfall/constants.js +1 -1
- package/src/traces/waterfall/cross_trace_calc.js +1 -1
- package/src/traces/waterfall/defaults.js +1 -1
- package/src/traces/waterfall/event_data.js +1 -1
- package/src/traces/waterfall/hover.js +1 -1
- package/src/traces/waterfall/index.js +1 -1
- package/src/traces/waterfall/layout_attributes.js +1 -1
- package/src/traces/waterfall/layout_defaults.js +1 -1
- package/src/traces/waterfall/plot.js +6 -3
- package/src/traces/waterfall/style.js +5 -3
- package/src/transforms/aggregate.js +1 -1
- package/src/transforms/filter.js +1 -1
- package/src/transforms/groupby.js +2 -2
- package/src/transforms/helpers.js +1 -1
- package/src/transforms/sort.js +1 -1
- package/tasks/noci_test.sh +1 -1
- package/tasks/test_syntax.js +1 -1
- package/tasks/util/constants.js +1 -1
- package/tasks/util/wrap_locale.js +2 -2
package/src/plots/gl3d/scene.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* Copyright 2012-
|
|
2
|
+
* Copyright 2012-2020, Plotly, Inc.
|
|
3
3
|
* All rights reserved.
|
|
4
4
|
*
|
|
5
5
|
* This source code is licensed under the MIT license found in the
|
|
@@ -30,10 +30,269 @@ var createAxesOptions = require('./layout/convert');
|
|
|
30
30
|
var createSpikeOptions = require('./layout/spikes');
|
|
31
31
|
var computeTickMarks = require('./layout/tick_marks');
|
|
32
32
|
|
|
33
|
+
var isMobile = require('is-mobile');
|
|
34
|
+
var tablet = isTablet();
|
|
35
|
+
|
|
36
|
+
function isTablet() {
|
|
37
|
+
if(!navigator) return false;
|
|
38
|
+
|
|
39
|
+
var ua;
|
|
40
|
+
// same interface as applied by is-mobile module
|
|
41
|
+
if(!ua && typeof navigator !== 'undefined') ua = navigator.userAgent;
|
|
42
|
+
if(ua && ua.headers && typeof ua.headers['user-agent'] === 'string') {
|
|
43
|
+
ua = ua.headers['user-agent'];
|
|
44
|
+
}
|
|
45
|
+
if(typeof ua !== 'string') return false;
|
|
46
|
+
|
|
47
|
+
var result = isMobile({
|
|
48
|
+
ua: ua,
|
|
49
|
+
tablet: true
|
|
50
|
+
});
|
|
51
|
+
|
|
52
|
+
// handle iPad pro or iPad with iOs 13 using Safari
|
|
53
|
+
// see https://github.com/plotly/plotly.js/issues/4502
|
|
54
|
+
if(
|
|
55
|
+
result === false &&
|
|
56
|
+
ua.indexOf('Macintosh') !== -1 &&
|
|
57
|
+
ua.indexOf('Safari') !== -1 &&
|
|
58
|
+
navigator.maxTouchPoints > 1
|
|
59
|
+
) {
|
|
60
|
+
result = true;
|
|
61
|
+
}
|
|
62
|
+
|
|
63
|
+
return result;
|
|
64
|
+
}
|
|
65
|
+
|
|
33
66
|
|
|
34
67
|
var STATIC_CANVAS, STATIC_CONTEXT;
|
|
35
68
|
|
|
36
|
-
function
|
|
69
|
+
function Scene(options, fullLayout) {
|
|
70
|
+
// create sub container for plot
|
|
71
|
+
var sceneContainer = document.createElement('div');
|
|
72
|
+
var plotContainer = options.container;
|
|
73
|
+
|
|
74
|
+
// keep a ref to the graph div to fire hover+click events
|
|
75
|
+
this.graphDiv = options.graphDiv;
|
|
76
|
+
|
|
77
|
+
// create SVG container for hover text
|
|
78
|
+
var svgContainer = document.createElementNS(
|
|
79
|
+
'http://www.w3.org/2000/svg',
|
|
80
|
+
'svg');
|
|
81
|
+
svgContainer.style.position = 'absolute';
|
|
82
|
+
svgContainer.style.top = svgContainer.style.left = '0px';
|
|
83
|
+
svgContainer.style.width = svgContainer.style.height = '100%';
|
|
84
|
+
svgContainer.style['z-index'] = 20;
|
|
85
|
+
svgContainer.style['pointer-events'] = 'none';
|
|
86
|
+
sceneContainer.appendChild(svgContainer);
|
|
87
|
+
this.svgContainer = svgContainer;
|
|
88
|
+
|
|
89
|
+
// Tag the container with the sceneID
|
|
90
|
+
sceneContainer.id = options.id;
|
|
91
|
+
sceneContainer.style.position = 'absolute';
|
|
92
|
+
sceneContainer.style.top = sceneContainer.style.left = '0px';
|
|
93
|
+
sceneContainer.style.width = sceneContainer.style.height = '100%';
|
|
94
|
+
plotContainer.appendChild(sceneContainer);
|
|
95
|
+
|
|
96
|
+
this.fullLayout = fullLayout;
|
|
97
|
+
this.id = options.id || 'scene';
|
|
98
|
+
this.fullSceneLayout = fullLayout[this.id];
|
|
99
|
+
|
|
100
|
+
// Saved from last call to plot()
|
|
101
|
+
this.plotArgs = [ [], {}, {} ];
|
|
102
|
+
|
|
103
|
+
/*
|
|
104
|
+
* Move this to calc step? Why does it work here?
|
|
105
|
+
*/
|
|
106
|
+
this.axesOptions = createAxesOptions(fullLayout, fullLayout[this.id]);
|
|
107
|
+
this.spikeOptions = createSpikeOptions(fullLayout[this.id]);
|
|
108
|
+
this.container = sceneContainer;
|
|
109
|
+
this.staticMode = !!options.staticPlot;
|
|
110
|
+
this.pixelRatio = this.pixelRatio || options.plotGlPixelRatio || 2;
|
|
111
|
+
|
|
112
|
+
// Coordinate rescaling
|
|
113
|
+
this.dataScale = [1, 1, 1];
|
|
114
|
+
|
|
115
|
+
this.contourLevels = [ [], [], [] ];
|
|
116
|
+
|
|
117
|
+
this.convertAnnotations = Registry.getComponentMethod('annotations3d', 'convert');
|
|
118
|
+
this.drawAnnotations = Registry.getComponentMethod('annotations3d', 'draw');
|
|
119
|
+
|
|
120
|
+
this.initializeGLPlot();
|
|
121
|
+
}
|
|
122
|
+
|
|
123
|
+
var proto = Scene.prototype;
|
|
124
|
+
|
|
125
|
+
proto.tryCreatePlot = function() {
|
|
126
|
+
var scene = this;
|
|
127
|
+
var opts = {
|
|
128
|
+
canvas: scene.canvas,
|
|
129
|
+
gl: scene.gl,
|
|
130
|
+
glOptions: {
|
|
131
|
+
preserveDrawingBuffer: tablet,
|
|
132
|
+
premultipliedAlpha: true,
|
|
133
|
+
antialias: true
|
|
134
|
+
},
|
|
135
|
+
container: scene.container,
|
|
136
|
+
axes: scene.axesOptions,
|
|
137
|
+
spikes: scene.spikeOptions,
|
|
138
|
+
pickRadius: 10,
|
|
139
|
+
snapToData: true,
|
|
140
|
+
autoScale: true,
|
|
141
|
+
autoBounds: false,
|
|
142
|
+
cameraObject: scene.camera,
|
|
143
|
+
pixelRatio: scene.pixelRatio
|
|
144
|
+
};
|
|
145
|
+
|
|
146
|
+
// for static plots, we reuse the WebGL context
|
|
147
|
+
// as WebKit doesn't collect them reliably
|
|
148
|
+
if(scene.staticMode) {
|
|
149
|
+
if(!STATIC_CONTEXT) {
|
|
150
|
+
STATIC_CANVAS = document.createElement('canvas');
|
|
151
|
+
STATIC_CONTEXT = getContext({
|
|
152
|
+
canvas: STATIC_CANVAS,
|
|
153
|
+
preserveDrawingBuffer: true,
|
|
154
|
+
premultipliedAlpha: true,
|
|
155
|
+
antialias: true
|
|
156
|
+
});
|
|
157
|
+
if(!STATIC_CONTEXT) {
|
|
158
|
+
throw new Error('error creating static canvas/context for image server');
|
|
159
|
+
}
|
|
160
|
+
}
|
|
161
|
+
|
|
162
|
+
opts.gl = STATIC_CONTEXT;
|
|
163
|
+
opts.canvas = STATIC_CANVAS;
|
|
164
|
+
}
|
|
165
|
+
|
|
166
|
+
var failed = 0;
|
|
167
|
+
|
|
168
|
+
try {
|
|
169
|
+
scene.glplot = createPlot(opts);
|
|
170
|
+
} catch(e) {
|
|
171
|
+
failed++;
|
|
172
|
+
try { // try second time to fix issue with Chrome 77 https://github.com/plotly/plotly.js/issues/4233
|
|
173
|
+
scene.glplot = createPlot(opts);
|
|
174
|
+
} catch(e) {
|
|
175
|
+
failed++;
|
|
176
|
+
}
|
|
177
|
+
}
|
|
178
|
+
|
|
179
|
+
return failed < 2;
|
|
180
|
+
};
|
|
181
|
+
|
|
182
|
+
proto.initializeGLCamera = function() {
|
|
183
|
+
var scene = this;
|
|
184
|
+
var cameraData = scene.fullSceneLayout.camera;
|
|
185
|
+
var isOrtho = (cameraData.projection.type === 'orthographic');
|
|
186
|
+
|
|
187
|
+
scene.camera = createCamera(scene.container, {
|
|
188
|
+
center: [cameraData.center.x, cameraData.center.y, cameraData.center.z],
|
|
189
|
+
eye: [cameraData.eye.x, cameraData.eye.y, cameraData.eye.z],
|
|
190
|
+
up: [cameraData.up.x, cameraData.up.y, cameraData.up.z],
|
|
191
|
+
_ortho: isOrtho,
|
|
192
|
+
zoomMin: 0.01,
|
|
193
|
+
zoomMax: 100,
|
|
194
|
+
mode: 'orbit'
|
|
195
|
+
});
|
|
196
|
+
};
|
|
197
|
+
|
|
198
|
+
proto.initializeGLPlot = function() {
|
|
199
|
+
var scene = this;
|
|
200
|
+
|
|
201
|
+
scene.initializeGLCamera();
|
|
202
|
+
|
|
203
|
+
var success = scene.tryCreatePlot();
|
|
204
|
+
/*
|
|
205
|
+
* createPlot will throw when webgl is not enabled in the client.
|
|
206
|
+
* Lets return an instance of the module with all functions noop'd.
|
|
207
|
+
* The destroy method - which will remove the container from the DOM
|
|
208
|
+
* is overridden with a function that removes the container only.
|
|
209
|
+
*/
|
|
210
|
+
if(!success) return showNoWebGlMsg(scene);
|
|
211
|
+
|
|
212
|
+
// List of scene objects
|
|
213
|
+
scene.traces = {};
|
|
214
|
+
|
|
215
|
+
scene.make4thDimension();
|
|
216
|
+
|
|
217
|
+
var gd = scene.graphDiv;
|
|
218
|
+
var layout = gd.layout;
|
|
219
|
+
|
|
220
|
+
var makeUpdate = function() {
|
|
221
|
+
var update = {};
|
|
222
|
+
|
|
223
|
+
if(scene.isCameraChanged(layout)) {
|
|
224
|
+
// camera updates
|
|
225
|
+
update[scene.id + '.camera'] = scene.getCamera();
|
|
226
|
+
}
|
|
227
|
+
|
|
228
|
+
if(scene.isAspectChanged(layout)) {
|
|
229
|
+
// scene updates
|
|
230
|
+
update[scene.id + '.aspectratio'] = scene.glplot.getAspectratio();
|
|
231
|
+
}
|
|
232
|
+
|
|
233
|
+
return update;
|
|
234
|
+
};
|
|
235
|
+
|
|
236
|
+
var relayoutCallback = function(scene) {
|
|
237
|
+
if(scene.fullSceneLayout.dragmode === false) return;
|
|
238
|
+
|
|
239
|
+
var update = makeUpdate();
|
|
240
|
+
scene.saveLayout(layout);
|
|
241
|
+
scene.graphDiv.emit('plotly_relayout', update);
|
|
242
|
+
};
|
|
243
|
+
|
|
244
|
+
scene.glplot.canvas.addEventListener('mouseup', function() {
|
|
245
|
+
relayoutCallback(scene);
|
|
246
|
+
});
|
|
247
|
+
|
|
248
|
+
scene.glplot.canvas.addEventListener('wheel', function(e) {
|
|
249
|
+
if(gd._context._scrollZoom.gl3d) {
|
|
250
|
+
if(scene.camera._ortho) {
|
|
251
|
+
var s = (e.deltaX > e.deltaY) ? 1.1 : 1.0 / 1.1;
|
|
252
|
+
var o = scene.glplot.getAspectratio();
|
|
253
|
+
scene.glplot.setAspectratio({
|
|
254
|
+
x: s * o.x,
|
|
255
|
+
y: s * o.y,
|
|
256
|
+
z: s * o.z
|
|
257
|
+
});
|
|
258
|
+
}
|
|
259
|
+
|
|
260
|
+
relayoutCallback(scene);
|
|
261
|
+
}
|
|
262
|
+
}, passiveSupported ? {passive: false} : false);
|
|
263
|
+
|
|
264
|
+
scene.glplot.canvas.addEventListener('mousemove', function() {
|
|
265
|
+
if(scene.fullSceneLayout.dragmode === false) return;
|
|
266
|
+
if(scene.camera.mouseListener.buttons === 0) return;
|
|
267
|
+
|
|
268
|
+
var update = makeUpdate();
|
|
269
|
+
scene.graphDiv.emit('plotly_relayouting', update);
|
|
270
|
+
});
|
|
271
|
+
|
|
272
|
+
if(!scene.staticMode) {
|
|
273
|
+
scene.glplot.canvas.addEventListener('webglcontextlost', function(event) {
|
|
274
|
+
if(gd && gd.emit) {
|
|
275
|
+
gd.emit('plotly_webglcontextlost', {
|
|
276
|
+
event: event,
|
|
277
|
+
layer: scene.id
|
|
278
|
+
});
|
|
279
|
+
}
|
|
280
|
+
}, false);
|
|
281
|
+
}
|
|
282
|
+
|
|
283
|
+
scene.glplot.oncontextloss = function() {
|
|
284
|
+
scene.recoverContext();
|
|
285
|
+
};
|
|
286
|
+
|
|
287
|
+
scene.glplot.onrender = function() {
|
|
288
|
+
scene.render();
|
|
289
|
+
};
|
|
290
|
+
|
|
291
|
+
return true;
|
|
292
|
+
};
|
|
293
|
+
|
|
294
|
+
proto.render = function() {
|
|
295
|
+
var scene = this;
|
|
37
296
|
var gd = scene.graphDiv;
|
|
38
297
|
var trace;
|
|
39
298
|
|
|
@@ -128,7 +387,7 @@ function render(scene) {
|
|
|
128
387
|
}
|
|
129
388
|
tx = vectorTx.join('<br>');
|
|
130
389
|
} else if(trace.type === 'isosurface' || trace.type === 'volume') {
|
|
131
|
-
labels.valueLabel = Axes.tickText(scene.
|
|
390
|
+
labels.valueLabel = Axes.tickText(scene._mockAxis, scene._mockAxis.d2l(selection.traceCoordinate[3]), 'hover').text;
|
|
132
391
|
vectorTx.push('value: ' + labels.valueLabel);
|
|
133
392
|
if(selection.textLabel) {
|
|
134
393
|
vectorTx.push(selection.textLabel);
|
|
@@ -195,242 +454,25 @@ function render(scene) {
|
|
|
195
454
|
}
|
|
196
455
|
|
|
197
456
|
scene.drawAnnotations(scene);
|
|
198
|
-
}
|
|
199
|
-
|
|
200
|
-
function tryCreatePlot(scene, cameraObject, pixelRatio, canvas, gl) {
|
|
201
|
-
var glplotOptions = {
|
|
202
|
-
canvas: canvas,
|
|
203
|
-
gl: gl,
|
|
204
|
-
container: scene.container,
|
|
205
|
-
axes: scene.axesOptions,
|
|
206
|
-
spikes: scene.spikeOptions,
|
|
207
|
-
pickRadius: 10,
|
|
208
|
-
snapToData: true,
|
|
209
|
-
autoScale: true,
|
|
210
|
-
autoBounds: false,
|
|
211
|
-
cameraObject: cameraObject,
|
|
212
|
-
pixelRatio: pixelRatio
|
|
213
|
-
};
|
|
214
|
-
|
|
215
|
-
// for static plots, we reuse the WebGL context
|
|
216
|
-
// as WebKit doesn't collect them reliably
|
|
217
|
-
if(scene.staticMode) {
|
|
218
|
-
if(!STATIC_CONTEXT) {
|
|
219
|
-
STATIC_CANVAS = document.createElement('canvas');
|
|
220
|
-
STATIC_CONTEXT = getContext({
|
|
221
|
-
canvas: STATIC_CANVAS,
|
|
222
|
-
preserveDrawingBuffer: true,
|
|
223
|
-
premultipliedAlpha: true,
|
|
224
|
-
antialias: true
|
|
225
|
-
});
|
|
226
|
-
if(!STATIC_CONTEXT) {
|
|
227
|
-
throw new Error('error creating static canvas/context for image server');
|
|
228
|
-
}
|
|
229
|
-
}
|
|
230
|
-
glplotOptions.pixelRatio = scene.pixelRatio;
|
|
231
|
-
glplotOptions.gl = STATIC_CONTEXT;
|
|
232
|
-
glplotOptions.canvas = STATIC_CANVAS;
|
|
233
|
-
}
|
|
234
|
-
|
|
235
|
-
var failed = 0;
|
|
236
|
-
|
|
237
|
-
try {
|
|
238
|
-
scene.glplot = createPlot(glplotOptions);
|
|
239
|
-
} catch(e) {
|
|
240
|
-
failed++;
|
|
241
|
-
try { // try second time to fix issue with Chrome 77 https://github.com/plotly/plotly.js/issues/4233
|
|
242
|
-
scene.glplot = createPlot(glplotOptions);
|
|
243
|
-
} catch(e) {
|
|
244
|
-
failed++;
|
|
245
|
-
}
|
|
246
|
-
}
|
|
247
|
-
|
|
248
|
-
return failed < 2;
|
|
249
|
-
}
|
|
250
|
-
|
|
251
|
-
function initializeGLPlot(scene, canvas, gl) {
|
|
252
|
-
scene.initializeGLCamera();
|
|
253
|
-
|
|
254
|
-
var success = tryCreatePlot(scene, scene.camera, scene.pixelRatio, canvas, gl);
|
|
255
|
-
/*
|
|
256
|
-
* createPlot will throw when webgl is not enabled in the client.
|
|
257
|
-
* Lets return an instance of the module with all functions noop'd.
|
|
258
|
-
* The destroy method - which will remove the container from the DOM
|
|
259
|
-
* is overridden with a function that removes the container only.
|
|
260
|
-
*/
|
|
261
|
-
if(!success) return showNoWebGlMsg(scene);
|
|
262
|
-
|
|
263
|
-
var gd = scene.graphDiv;
|
|
264
|
-
var layout = gd.layout;
|
|
265
|
-
|
|
266
|
-
var makeUpdate = function() {
|
|
267
|
-
var update = {};
|
|
268
|
-
|
|
269
|
-
if(scene.isCameraChanged(layout)) {
|
|
270
|
-
// camera updates
|
|
271
|
-
update[scene.id + '.camera'] = scene.getCamera();
|
|
272
|
-
}
|
|
273
|
-
|
|
274
|
-
if(scene.isAspectChanged(layout)) {
|
|
275
|
-
// scene updates
|
|
276
|
-
update[scene.id + '.aspectratio'] = scene.glplot.getAspectratio();
|
|
277
|
-
}
|
|
278
|
-
|
|
279
|
-
return update;
|
|
280
|
-
};
|
|
281
|
-
|
|
282
|
-
var relayoutCallback = function(scene) {
|
|
283
|
-
if(scene.fullSceneLayout.dragmode === false) return;
|
|
284
|
-
|
|
285
|
-
var update = makeUpdate();
|
|
286
|
-
scene.saveLayout(layout);
|
|
287
|
-
scene.graphDiv.emit('plotly_relayout', update);
|
|
288
|
-
};
|
|
289
|
-
|
|
290
|
-
scene.glplot.canvas.addEventListener('mouseup', function() {
|
|
291
|
-
relayoutCallback(scene);
|
|
292
|
-
});
|
|
293
|
-
|
|
294
|
-
scene.glplot.canvas.addEventListener('wheel', function(e) {
|
|
295
|
-
if(gd._context._scrollZoom.gl3d) {
|
|
296
|
-
if(scene.glplot.camera._ortho) {
|
|
297
|
-
var s = (e.deltaX > e.deltaY) ? 1.1 : 1.0 / 1.1;
|
|
298
|
-
var o = scene.glplot.getAspectratio();
|
|
299
|
-
scene.glplot.setAspectratio({
|
|
300
|
-
x: s * o.x,
|
|
301
|
-
y: s * o.y,
|
|
302
|
-
z: s * o.z
|
|
303
|
-
});
|
|
304
|
-
}
|
|
305
|
-
|
|
306
|
-
relayoutCallback(scene);
|
|
307
|
-
}
|
|
308
|
-
}, passiveSupported ? {passive: false} : false);
|
|
309
|
-
|
|
310
|
-
scene.glplot.canvas.addEventListener('mousemove', function() {
|
|
311
|
-
if(scene.fullSceneLayout.dragmode === false) return;
|
|
312
|
-
if(scene.camera.mouseListener.buttons === 0) return;
|
|
313
|
-
|
|
314
|
-
var update = makeUpdate();
|
|
315
|
-
scene.graphDiv.emit('plotly_relayouting', update);
|
|
316
|
-
});
|
|
317
|
-
|
|
318
|
-
if(!scene.staticMode) {
|
|
319
|
-
scene.glplot.canvas.addEventListener('webglcontextlost', function(event) {
|
|
320
|
-
if(gd && gd.emit) {
|
|
321
|
-
gd.emit('plotly_webglcontextlost', {
|
|
322
|
-
event: event,
|
|
323
|
-
layer: scene.id
|
|
324
|
-
});
|
|
325
|
-
}
|
|
326
|
-
}, false);
|
|
327
|
-
}
|
|
328
|
-
|
|
329
|
-
scene.glplot.camera = scene.camera;
|
|
330
|
-
|
|
331
|
-
scene.glplot.oncontextloss = function() {
|
|
332
|
-
scene.recoverContext();
|
|
333
|
-
};
|
|
334
|
-
|
|
335
|
-
scene.glplot.onrender = render.bind(null, scene);
|
|
336
|
-
|
|
337
|
-
// List of scene objects
|
|
338
|
-
scene.traces = {};
|
|
339
|
-
|
|
340
|
-
scene.make4thDimension();
|
|
341
|
-
|
|
342
|
-
return true;
|
|
343
|
-
}
|
|
344
|
-
|
|
345
|
-
function Scene(options, fullLayout) {
|
|
346
|
-
// create sub container for plot
|
|
347
|
-
var sceneContainer = document.createElement('div');
|
|
348
|
-
var plotContainer = options.container;
|
|
349
|
-
|
|
350
|
-
// keep a ref to the graph div to fire hover+click events
|
|
351
|
-
this.graphDiv = options.graphDiv;
|
|
352
|
-
|
|
353
|
-
// create SVG container for hover text
|
|
354
|
-
var svgContainer = document.createElementNS(
|
|
355
|
-
'http://www.w3.org/2000/svg',
|
|
356
|
-
'svg');
|
|
357
|
-
svgContainer.style.position = 'absolute';
|
|
358
|
-
svgContainer.style.top = svgContainer.style.left = '0px';
|
|
359
|
-
svgContainer.style.width = svgContainer.style.height = '100%';
|
|
360
|
-
svgContainer.style['z-index'] = 20;
|
|
361
|
-
svgContainer.style['pointer-events'] = 'none';
|
|
362
|
-
sceneContainer.appendChild(svgContainer);
|
|
363
|
-
this.svgContainer = svgContainer;
|
|
364
|
-
|
|
365
|
-
// Tag the container with the sceneID
|
|
366
|
-
sceneContainer.id = options.id;
|
|
367
|
-
sceneContainer.style.position = 'absolute';
|
|
368
|
-
sceneContainer.style.top = sceneContainer.style.left = '0px';
|
|
369
|
-
sceneContainer.style.width = sceneContainer.style.height = '100%';
|
|
370
|
-
plotContainer.appendChild(sceneContainer);
|
|
371
|
-
|
|
372
|
-
this.fullLayout = fullLayout;
|
|
373
|
-
this.id = options.id || 'scene';
|
|
374
|
-
this.fullSceneLayout = fullLayout[this.id];
|
|
375
|
-
|
|
376
|
-
// Saved from last call to plot()
|
|
377
|
-
this.plotArgs = [ [], {}, {} ];
|
|
378
|
-
|
|
379
|
-
/*
|
|
380
|
-
* Move this to calc step? Why does it work here?
|
|
381
|
-
*/
|
|
382
|
-
this.axesOptions = createAxesOptions(fullLayout, fullLayout[this.id]);
|
|
383
|
-
this.spikeOptions = createSpikeOptions(fullLayout[this.id]);
|
|
384
|
-
this.container = sceneContainer;
|
|
385
|
-
this.staticMode = !!options.staticPlot;
|
|
386
|
-
this.pixelRatio = this.pixelRatio || options.plotGlPixelRatio || 2;
|
|
387
|
-
|
|
388
|
-
// Coordinate rescaling
|
|
389
|
-
this.dataScale = [1, 1, 1];
|
|
390
|
-
|
|
391
|
-
this.contourLevels = [ [], [], [] ];
|
|
392
|
-
|
|
393
|
-
this.convertAnnotations = Registry.getComponentMethod('annotations3d', 'convert');
|
|
394
|
-
this.drawAnnotations = Registry.getComponentMethod('annotations3d', 'draw');
|
|
395
|
-
|
|
396
|
-
initializeGLPlot(this);
|
|
397
|
-
}
|
|
398
|
-
|
|
399
|
-
var proto = Scene.prototype;
|
|
400
|
-
|
|
401
|
-
proto.initializeGLCamera = function() {
|
|
402
|
-
var cameraData = this.fullSceneLayout.camera;
|
|
403
|
-
var isOrtho = (cameraData.projection.type === 'orthographic');
|
|
404
|
-
|
|
405
|
-
this.camera = createCamera(this.container, {
|
|
406
|
-
center: [cameraData.center.x, cameraData.center.y, cameraData.center.z],
|
|
407
|
-
eye: [cameraData.eye.x, cameraData.eye.y, cameraData.eye.z],
|
|
408
|
-
up: [cameraData.up.x, cameraData.up.y, cameraData.up.z],
|
|
409
|
-
_ortho: isOrtho,
|
|
410
|
-
zoomMin: 0.01,
|
|
411
|
-
zoomMax: 100,
|
|
412
|
-
mode: 'orbit'
|
|
413
|
-
});
|
|
414
457
|
};
|
|
415
458
|
|
|
416
459
|
proto.recoverContext = function() {
|
|
417
460
|
var scene = this;
|
|
418
|
-
var gl = this.glplot.gl;
|
|
419
|
-
var canvas = this.glplot.canvas;
|
|
420
461
|
|
|
421
|
-
|
|
462
|
+
scene.glplot.dispose();
|
|
422
463
|
|
|
423
|
-
|
|
424
|
-
if(gl.isContextLost()) {
|
|
464
|
+
var tryRecover = function() {
|
|
465
|
+
if(scene.glplot.gl.isContextLost()) {
|
|
425
466
|
requestAnimationFrame(tryRecover);
|
|
426
467
|
return;
|
|
427
468
|
}
|
|
428
|
-
if(!initializeGLPlot(
|
|
469
|
+
if(!scene.initializeGLPlot()) {
|
|
429
470
|
Lib.error('Catastrophic and unrecoverable WebGL error. Context lost.');
|
|
430
471
|
return;
|
|
431
472
|
}
|
|
432
473
|
scene.plot.apply(scene, scene.plotArgs);
|
|
433
|
-
}
|
|
474
|
+
};
|
|
475
|
+
|
|
434
476
|
requestAnimationFrame(tryRecover);
|
|
435
477
|
};
|
|
436
478
|
|
|
@@ -498,39 +540,35 @@ function computeAnnotationBounds(scene, bounds) {
|
|
|
498
540
|
}
|
|
499
541
|
|
|
500
542
|
proto.plot = function(sceneData, fullLayout, layout) {
|
|
543
|
+
var scene = this;
|
|
544
|
+
|
|
501
545
|
// Save parameters
|
|
502
|
-
|
|
546
|
+
scene.plotArgs = [sceneData, fullLayout, layout];
|
|
503
547
|
|
|
504
|
-
if(
|
|
548
|
+
if(scene.glplot.contextLost) return;
|
|
505
549
|
|
|
506
550
|
var data, trace;
|
|
507
551
|
var i, j, axis, axisType;
|
|
508
|
-
var fullSceneLayout = fullLayout[
|
|
509
|
-
var sceneLayout = layout[
|
|
510
|
-
|
|
511
|
-
if(fullSceneLayout.bgcolor) this.glplot.clearColor = str2RGBAarray(fullSceneLayout.bgcolor);
|
|
512
|
-
else this.glplot.clearColor = [0, 0, 0, 0];
|
|
513
|
-
|
|
514
|
-
this.glplot.snapToData = true;
|
|
552
|
+
var fullSceneLayout = fullLayout[scene.id];
|
|
553
|
+
var sceneLayout = layout[scene.id];
|
|
515
554
|
|
|
516
555
|
// Update layout
|
|
517
|
-
|
|
518
|
-
|
|
556
|
+
scene.fullLayout = fullLayout;
|
|
557
|
+
scene.fullSceneLayout = fullSceneLayout;
|
|
519
558
|
|
|
520
|
-
|
|
521
|
-
|
|
522
|
-
this.spikeOptions.merge(fullSceneLayout);
|
|
559
|
+
scene.axesOptions.merge(fullLayout, fullSceneLayout);
|
|
560
|
+
scene.spikeOptions.merge(fullSceneLayout);
|
|
523
561
|
|
|
524
562
|
// Update camera and camera mode
|
|
525
|
-
|
|
526
|
-
|
|
527
|
-
|
|
563
|
+
scene.setViewport(fullSceneLayout);
|
|
564
|
+
scene.updateFx(fullSceneLayout.dragmode, fullSceneLayout.hovermode);
|
|
565
|
+
scene.camera.enableWheel = scene.graphDiv._context._scrollZoom.gl3d;
|
|
528
566
|
|
|
529
|
-
// Update scene
|
|
530
|
-
|
|
567
|
+
// Update scene background
|
|
568
|
+
scene.glplot.setClearColor(str2RGBAarray(fullSceneLayout.bgcolor));
|
|
531
569
|
|
|
532
570
|
// Update axes functions BEFORE updating traces
|
|
533
|
-
|
|
571
|
+
scene.setConvert(axis);
|
|
534
572
|
|
|
535
573
|
// Convert scene data
|
|
536
574
|
if(!sceneData) sceneData = [];
|
|
@@ -560,10 +598,10 @@ proto.plot = function(sceneData, fullLayout, layout) {
|
|
|
560
598
|
}
|
|
561
599
|
|
|
562
600
|
// Save scale
|
|
563
|
-
|
|
601
|
+
scene.dataScale = dataScale;
|
|
564
602
|
|
|
565
603
|
// after computeTraceBounds where ax._categories are filled in
|
|
566
|
-
|
|
604
|
+
scene.convertAnnotations(this);
|
|
567
605
|
|
|
568
606
|
// Update traces
|
|
569
607
|
for(i = 0; i < sceneData.length; ++i) {
|
|
@@ -571,24 +609,24 @@ proto.plot = function(sceneData, fullLayout, layout) {
|
|
|
571
609
|
if(data.visible !== true || data._length === 0) {
|
|
572
610
|
continue;
|
|
573
611
|
}
|
|
574
|
-
trace =
|
|
612
|
+
trace = scene.traces[data.uid];
|
|
575
613
|
if(trace) {
|
|
576
614
|
if(trace.data.type === data.type) {
|
|
577
615
|
trace.update(data);
|
|
578
616
|
} else {
|
|
579
617
|
trace.dispose();
|
|
580
618
|
trace = data._module.plot(this, data);
|
|
581
|
-
|
|
619
|
+
scene.traces[data.uid] = trace;
|
|
582
620
|
}
|
|
583
621
|
} else {
|
|
584
622
|
trace = data._module.plot(this, data);
|
|
585
|
-
|
|
623
|
+
scene.traces[data.uid] = trace;
|
|
586
624
|
}
|
|
587
625
|
trace.name = data.name;
|
|
588
626
|
}
|
|
589
627
|
|
|
590
628
|
// Remove empty traces
|
|
591
|
-
var traceIds = Object.keys(
|
|
629
|
+
var traceIds = Object.keys(scene.traces);
|
|
592
630
|
|
|
593
631
|
traceIdLoop:
|
|
594
632
|
for(i = 0; i < traceIds.length; ++i) {
|
|
@@ -598,13 +636,13 @@ proto.plot = function(sceneData, fullLayout, layout) {
|
|
|
598
636
|
continue traceIdLoop;
|
|
599
637
|
}
|
|
600
638
|
}
|
|
601
|
-
trace =
|
|
639
|
+
trace = scene.traces[traceIds[i]];
|
|
602
640
|
trace.dispose();
|
|
603
|
-
delete
|
|
641
|
+
delete scene.traces[traceIds[i]];
|
|
604
642
|
}
|
|
605
643
|
|
|
606
644
|
// order object per trace index
|
|
607
|
-
|
|
645
|
+
scene.glplot.objects.sort(function(a, b) {
|
|
608
646
|
return a._trace.data.index - b._trace.data.index;
|
|
609
647
|
});
|
|
610
648
|
|
|
@@ -631,8 +669,8 @@ proto.plot = function(sceneData, fullLayout, layout) {
|
|
|
631
669
|
sceneBounds[0][i] = Infinity;
|
|
632
670
|
sceneBounds[1][i] = -Infinity;
|
|
633
671
|
|
|
634
|
-
var objects =
|
|
635
|
-
var annotations =
|
|
672
|
+
var objects = scene.glplot.objects;
|
|
673
|
+
var annotations = scene.fullSceneLayout.annotations || [];
|
|
636
674
|
var axLetter = axis._name.charAt(0);
|
|
637
675
|
|
|
638
676
|
for(j = 0; j < objects.length; j++) {
|
|
@@ -690,8 +728,10 @@ proto.plot = function(sceneData, fullLayout, layout) {
|
|
|
690
728
|
axisDataRange[i] = sceneBounds[1][i] - sceneBounds[0][i];
|
|
691
729
|
|
|
692
730
|
// Update plot bounds
|
|
693
|
-
|
|
694
|
-
|
|
731
|
+
scene.glplot.setBounds(i, {
|
|
732
|
+
min: sceneBounds[0][i] * dataScale[i],
|
|
733
|
+
max: sceneBounds[1][i] * dataScale[i]
|
|
734
|
+
});
|
|
695
735
|
}
|
|
696
736
|
|
|
697
737
|
var axesScaleRatio = [1, 1, 1];
|
|
@@ -746,11 +786,11 @@ proto.plot = function(sceneData, fullLayout, layout) {
|
|
|
746
786
|
* Finally assign the computed aspecratio to the glplot module. This will have an effect
|
|
747
787
|
* on the next render cycle.
|
|
748
788
|
*/
|
|
749
|
-
|
|
789
|
+
scene.glplot.setAspectratio(fullSceneLayout.aspectratio);
|
|
750
790
|
|
|
751
791
|
// save 'initial' camera view settings for modebar button
|
|
752
|
-
if(!
|
|
753
|
-
|
|
792
|
+
if(!scene.viewInitial.aspectratio) {
|
|
793
|
+
scene.viewInitial.aspectratio = {
|
|
754
794
|
x: fullSceneLayout.aspectratio.x,
|
|
755
795
|
y: fullSceneLayout.aspectratio.y,
|
|
756
796
|
z: fullSceneLayout.aspectratio.z
|
|
@@ -762,7 +802,7 @@ proto.plot = function(sceneData, fullLayout, layout) {
|
|
|
762
802
|
var size = fullLayout._size || null;
|
|
763
803
|
|
|
764
804
|
if(domain && size) {
|
|
765
|
-
var containerStyle =
|
|
805
|
+
var containerStyle = scene.container.style;
|
|
766
806
|
containerStyle.position = 'absolute';
|
|
767
807
|
containerStyle.left = (size.l + domain.x[0] * size.w) + 'px';
|
|
768
808
|
containerStyle.top = (size.t + (1 - domain.y[1]) * size.h) + 'px';
|
|
@@ -771,18 +811,19 @@ proto.plot = function(sceneData, fullLayout, layout) {
|
|
|
771
811
|
}
|
|
772
812
|
|
|
773
813
|
// force redraw so that promise is returned when rendering is completed
|
|
774
|
-
|
|
814
|
+
scene.glplot.redraw();
|
|
775
815
|
};
|
|
776
816
|
|
|
777
817
|
proto.destroy = function() {
|
|
778
|
-
|
|
779
|
-
|
|
780
|
-
|
|
781
|
-
|
|
782
|
-
|
|
783
|
-
|
|
784
|
-
|
|
785
|
-
|
|
818
|
+
var scene = this;
|
|
819
|
+
|
|
820
|
+
if(!scene.glplot) return;
|
|
821
|
+
scene.camera.mouseListener.enabled = false;
|
|
822
|
+
scene.container.removeEventListener('wheel', scene.camera.wheelListener);
|
|
823
|
+
scene.camera = null;
|
|
824
|
+
scene.glplot.dispose();
|
|
825
|
+
scene.container.parentNode.removeChild(scene.container);
|
|
826
|
+
scene.glplot = null;
|
|
786
827
|
};
|
|
787
828
|
|
|
788
829
|
// getCameraArrays :: plotly_coords -> gl-plot3d_coords
|
|
@@ -808,42 +849,34 @@ function getLayoutCamera(camera) {
|
|
|
808
849
|
|
|
809
850
|
// get camera position in plotly coords from 'gl-plot3d' coords
|
|
810
851
|
proto.getCamera = function() {
|
|
811
|
-
this
|
|
812
|
-
|
|
852
|
+
var scene = this;
|
|
853
|
+
scene.camera.view.recalcMatrix(scene.camera.view.lastT());
|
|
854
|
+
return getLayoutCamera(scene.camera);
|
|
813
855
|
};
|
|
814
856
|
|
|
815
857
|
// set gl-plot3d camera position and scene aspects with a set of plotly coords
|
|
816
858
|
proto.setViewport = function(sceneLayout) {
|
|
859
|
+
var scene = this;
|
|
817
860
|
var cameraData = sceneLayout.camera;
|
|
818
861
|
|
|
819
|
-
|
|
820
|
-
|
|
862
|
+
scene.camera.lookAt.apply(this, getCameraArrays(cameraData));
|
|
863
|
+
scene.glplot.setAspectratio(sceneLayout.aspectratio);
|
|
821
864
|
|
|
822
865
|
var newOrtho = (cameraData.projection.type === 'orthographic');
|
|
823
|
-
var oldOrtho =
|
|
866
|
+
var oldOrtho = scene.camera._ortho;
|
|
824
867
|
|
|
825
868
|
if(newOrtho !== oldOrtho) {
|
|
826
|
-
|
|
827
|
-
|
|
828
|
-
|
|
829
|
-
|
|
830
|
-
RGBA[0], RGBA[1], RGBA[2], RGBA[3]
|
|
831
|
-
);
|
|
832
|
-
this.glplot.gl.clear(
|
|
833
|
-
this.glplot.gl.DEPTH_BUFFER_BIT |
|
|
834
|
-
this.glplot.gl.COLOR_BUFFER_BIT
|
|
835
|
-
);
|
|
836
|
-
|
|
837
|
-
this.glplot.dispose();
|
|
838
|
-
|
|
839
|
-
initializeGLPlot(this);
|
|
840
|
-
this.glplot.camera._ortho = newOrtho;
|
|
869
|
+
scene.glplot.redraw(); // TODO: figure out why we need to redraw here?
|
|
870
|
+
scene.glplot.clearRGBA();
|
|
871
|
+
scene.glplot.dispose();
|
|
872
|
+
scene.initializeGLPlot();
|
|
841
873
|
}
|
|
842
874
|
};
|
|
843
875
|
|
|
844
876
|
proto.isCameraChanged = function(layout) {
|
|
845
|
-
var
|
|
846
|
-
var
|
|
877
|
+
var scene = this;
|
|
878
|
+
var cameraData = scene.getCamera();
|
|
879
|
+
var cameraNestedProp = Lib.nestedProperty(layout, scene.id + '.camera');
|
|
847
880
|
var cameraDataLastSave = cameraNestedProp.get();
|
|
848
881
|
|
|
849
882
|
function same(x, y, i, j) {
|
|
@@ -876,8 +909,9 @@ proto.isCameraChanged = function(layout) {
|
|
|
876
909
|
};
|
|
877
910
|
|
|
878
911
|
proto.isAspectChanged = function(layout) {
|
|
879
|
-
var
|
|
880
|
-
var
|
|
912
|
+
var scene = this;
|
|
913
|
+
var aspectData = scene.glplot.getAspectratio();
|
|
914
|
+
var aspectNestedProp = Lib.nestedProperty(layout, scene.id + '.aspectratio');
|
|
881
915
|
var aspectDataLastSave = aspectNestedProp.get();
|
|
882
916
|
|
|
883
917
|
return (
|
|
@@ -890,7 +924,8 @@ proto.isAspectChanged = function(layout) {
|
|
|
890
924
|
|
|
891
925
|
// save camera to user layout (i.e. gd.layout)
|
|
892
926
|
proto.saveLayout = function(layout) {
|
|
893
|
-
var
|
|
927
|
+
var scene = this;
|
|
928
|
+
var fullLayout = scene.fullLayout;
|
|
894
929
|
|
|
895
930
|
var cameraData;
|
|
896
931
|
var cameraNestedProp;
|
|
@@ -900,42 +935,42 @@ proto.saveLayout = function(layout) {
|
|
|
900
935
|
var aspectNestedProp;
|
|
901
936
|
var aspectDataLastSave;
|
|
902
937
|
|
|
903
|
-
var cameraChanged =
|
|
904
|
-
var aspectChanged =
|
|
938
|
+
var cameraChanged = scene.isCameraChanged(layout);
|
|
939
|
+
var aspectChanged = scene.isAspectChanged(layout);
|
|
905
940
|
|
|
906
941
|
var hasChanged = cameraChanged || aspectChanged;
|
|
907
942
|
if(hasChanged) {
|
|
908
943
|
var preGUI = {};
|
|
909
944
|
if(cameraChanged) {
|
|
910
|
-
cameraData =
|
|
911
|
-
cameraNestedProp = Lib.nestedProperty(layout,
|
|
945
|
+
cameraData = scene.getCamera();
|
|
946
|
+
cameraNestedProp = Lib.nestedProperty(layout, scene.id + '.camera');
|
|
912
947
|
cameraDataLastSave = cameraNestedProp.get();
|
|
913
948
|
|
|
914
|
-
preGUI[
|
|
949
|
+
preGUI[scene.id + '.camera'] = cameraDataLastSave;
|
|
915
950
|
}
|
|
916
951
|
if(aspectChanged) {
|
|
917
|
-
aspectData =
|
|
918
|
-
aspectNestedProp = Lib.nestedProperty(layout,
|
|
952
|
+
aspectData = scene.glplot.getAspectratio();
|
|
953
|
+
aspectNestedProp = Lib.nestedProperty(layout, scene.id + '.aspectratio');
|
|
919
954
|
aspectDataLastSave = aspectNestedProp.get();
|
|
920
955
|
|
|
921
|
-
preGUI[
|
|
956
|
+
preGUI[scene.id + '.aspectratio'] = aspectDataLastSave;
|
|
922
957
|
}
|
|
923
958
|
Registry.call('_storeDirectGUIEdit', layout, fullLayout._preGUI, preGUI);
|
|
924
959
|
|
|
925
960
|
if(cameraChanged) {
|
|
926
961
|
cameraNestedProp.set(cameraData);
|
|
927
962
|
|
|
928
|
-
var cameraFullNP = Lib.nestedProperty(fullLayout,
|
|
963
|
+
var cameraFullNP = Lib.nestedProperty(fullLayout, scene.id + '.camera');
|
|
929
964
|
cameraFullNP.set(cameraData);
|
|
930
965
|
}
|
|
931
966
|
|
|
932
967
|
if(aspectChanged) {
|
|
933
968
|
aspectNestedProp.set(aspectData);
|
|
934
969
|
|
|
935
|
-
var aspectFullNP = Lib.nestedProperty(fullLayout,
|
|
970
|
+
var aspectFullNP = Lib.nestedProperty(fullLayout, scene.id + '.aspectratio');
|
|
936
971
|
aspectFullNP.set(aspectData);
|
|
937
972
|
|
|
938
|
-
|
|
973
|
+
scene.glplot.redraw();
|
|
939
974
|
}
|
|
940
975
|
}
|
|
941
976
|
|
|
@@ -943,7 +978,8 @@ proto.saveLayout = function(layout) {
|
|
|
943
978
|
};
|
|
944
979
|
|
|
945
980
|
proto.updateFx = function(dragmode, hovermode) {
|
|
946
|
-
var
|
|
981
|
+
var scene = this;
|
|
982
|
+
var camera = scene.camera;
|
|
947
983
|
if(camera) {
|
|
948
984
|
// rotate and orbital are synonymous
|
|
949
985
|
if(dragmode === 'orbit') {
|
|
@@ -957,15 +993,15 @@ proto.updateFx = function(dragmode, hovermode) {
|
|
|
957
993
|
// The setter for camera.mode animates the transition to z-up,
|
|
958
994
|
// but only if we *don't* explicitly set z-up earlier via the
|
|
959
995
|
// relayout. So push `up` back to layout & fullLayout manually now.
|
|
960
|
-
var gd =
|
|
996
|
+
var gd = scene.graphDiv;
|
|
961
997
|
var fullLayout = gd._fullLayout;
|
|
962
|
-
var fullCamera =
|
|
998
|
+
var fullCamera = scene.fullSceneLayout.camera;
|
|
963
999
|
var x = fullCamera.up.x;
|
|
964
1000
|
var y = fullCamera.up.y;
|
|
965
1001
|
var z = fullCamera.up.z;
|
|
966
1002
|
// only push `up` back to (full)layout if it's going to change
|
|
967
1003
|
if(z / Math.sqrt(x * x + y * y + z * z) < 0.999) {
|
|
968
|
-
var attr =
|
|
1004
|
+
var attr = scene.id + '.camera.up';
|
|
969
1005
|
var zUp = {x: 0, y: 0, z: 1};
|
|
970
1006
|
var edits = {};
|
|
971
1007
|
edits[attr] = zUp;
|
|
@@ -981,19 +1017,20 @@ proto.updateFx = function(dragmode, hovermode) {
|
|
|
981
1017
|
}
|
|
982
1018
|
|
|
983
1019
|
// to put dragmode and hovermode on the same grounds from relayout
|
|
984
|
-
|
|
1020
|
+
scene.fullSceneLayout.hovermode = hovermode;
|
|
985
1021
|
};
|
|
986
1022
|
|
|
987
1023
|
proto.toImage = function(format) {
|
|
988
|
-
|
|
1024
|
+
var scene = this;
|
|
989
1025
|
|
|
990
|
-
if(
|
|
1026
|
+
if(!format) format = 'png';
|
|
1027
|
+
if(scene.staticMode) scene.container.appendChild(STATIC_CANVAS);
|
|
991
1028
|
|
|
992
1029
|
// Force redraw
|
|
993
|
-
|
|
1030
|
+
scene.glplot.redraw();
|
|
994
1031
|
|
|
995
1032
|
// Grab context and yank out pixels
|
|
996
|
-
var gl =
|
|
1033
|
+
var gl = scene.glplot.gl;
|
|
997
1034
|
var w = gl.drawingBufferWidth;
|
|
998
1035
|
var h = gl.drawingBufferHeight;
|
|
999
1036
|
|
|
@@ -1034,31 +1071,32 @@ proto.toImage = function(format) {
|
|
|
1034
1071
|
dataURL = canvas.toDataURL('image/png');
|
|
1035
1072
|
}
|
|
1036
1073
|
|
|
1037
|
-
if(
|
|
1074
|
+
if(scene.staticMode) scene.container.removeChild(STATIC_CANVAS);
|
|
1038
1075
|
|
|
1039
1076
|
return dataURL;
|
|
1040
1077
|
};
|
|
1041
1078
|
|
|
1042
1079
|
proto.setConvert = function() {
|
|
1080
|
+
var scene = this;
|
|
1043
1081
|
for(var i = 0; i < 3; i++) {
|
|
1044
|
-
var ax =
|
|
1045
|
-
Axes.setConvert(ax,
|
|
1082
|
+
var ax = scene.fullSceneLayout[axisProperties[i]];
|
|
1083
|
+
Axes.setConvert(ax, scene.fullLayout);
|
|
1046
1084
|
ax.setScale = Lib.noop;
|
|
1047
1085
|
}
|
|
1048
1086
|
};
|
|
1049
1087
|
|
|
1050
1088
|
proto.make4thDimension = function() {
|
|
1051
|
-
var
|
|
1052
|
-
var gd =
|
|
1089
|
+
var scene = this;
|
|
1090
|
+
var gd = scene.graphDiv;
|
|
1053
1091
|
var fullLayout = gd._fullLayout;
|
|
1054
1092
|
|
|
1055
1093
|
// mock axis for hover formatting
|
|
1056
|
-
|
|
1094
|
+
scene._mockAxis = {
|
|
1057
1095
|
type: 'linear',
|
|
1058
1096
|
showexponent: 'all',
|
|
1059
1097
|
exponentformat: 'B'
|
|
1060
1098
|
};
|
|
1061
|
-
Axes.setConvert(
|
|
1099
|
+
Axes.setConvert(scene._mockAxis, fullLayout);
|
|
1062
1100
|
};
|
|
1063
1101
|
|
|
1064
1102
|
module.exports = Scene;
|