UNPKG

@quartic/bokehjs

Version:

Interactive, novel data visualization

199 lines (198 loc) 7.02 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); var DEFAULT_BOX_OVERLAY, extend = function (child, parent) { for (var key in parent) { if (hasProp.call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor(); child.__super__ = parent.prototype; return child; }, hasProp = {}.hasOwnProperty; var gesture_tool_1 = require("./gesture_tool"); var box_annotation_1 = require("../../annotations/box_annotation"); var p = require("core/properties"); exports.BoxZoomToolView = (function (superClass) { extend(BoxZoomToolView, superClass); function BoxZoomToolView() { return BoxZoomToolView.__super__.constructor.apply(this, arguments); } BoxZoomToolView.prototype._match_aspect = function (basepoint, curpoint, frame) { var a, bottom, h, hend, hstart, left, ref, ref1, right, top, va, vend, vh, vstart, vw, w, xmod, ymod; hend = frame.h_range.end; hstart = frame.h_range.start; vend = frame.v_range.end; vstart = frame.v_range.start; w = hend - hstart; h = vend - vstart; a = w / h; vw = Math.abs(basepoint[0] - curpoint[0]); vh = Math.abs(basepoint[1] - curpoint[1]); if (vh === 0) { va = 0; } else { va = vw / vh; } if (va >= a) { ref = [1, va / a], xmod = ref[0], ymod = ref[1]; } else { ref1 = [a / va, 1], xmod = ref1[0], ymod = ref1[1]; } if (basepoint[0] <= curpoint[0]) { left = basepoint[0]; right = basepoint[0] + vw * xmod; if (right > hend) { right = hend; } } else { right = basepoint[0]; left = basepoint[0] - vw * xmod; if (left < hstart) { left = hstart; } } vw = Math.abs(right - left); if (basepoint[1] <= curpoint[1]) { bottom = basepoint[1]; top = basepoint[1] + vw / a; if (top > vend) { top = vend; } } else { top = basepoint[1]; bottom = basepoint[1] - vw / a; if (bottom < vstart) { bottom = vstart; } } vh = Math.abs(top - bottom); if (basepoint[0] <= curpoint[0]) { right = basepoint[0] + a * vh; } else { left = basepoint[0] - a * vh; } return [[left, right], [bottom, top]]; }; BoxZoomToolView.prototype._pan_start = function (e) { var canvas; canvas = this.plot_view.canvas; this._baseboint = [canvas.sx_to_vx(e.bokeh.sx), canvas.sy_to_vy(e.bokeh.sy)]; return null; }; BoxZoomToolView.prototype._pan = function (e) { var canvas, curpoint, dims, frame, ref, ref1, vx, vy; canvas = this.plot_view.canvas; curpoint = [canvas.sx_to_vx(e.bokeh.sx), canvas.sy_to_vy(e.bokeh.sy)]; frame = this.plot_model.frame; dims = this.model.dimensions; if (this.model.match_aspect && dims === 'both') { ref = this._match_aspect(this._baseboint, curpoint, frame), vx = ref[0], vy = ref[1]; } else { ref1 = this.model._get_dim_limits(this._baseboint, curpoint, frame, dims), vx = ref1[0], vy = ref1[1]; } this.model.overlay.update({ left: vx[0], right: vx[1], top: vy[1], bottom: vy[0] }); return null; }; BoxZoomToolView.prototype._pan_end = function (e) { var canvas, curpoint, dims, frame, ref, ref1, vx, vy; canvas = this.plot_view.canvas; curpoint = [canvas.sx_to_vx(e.bokeh.sx), canvas.sy_to_vy(e.bokeh.sy)]; frame = this.plot_model.frame; dims = this.model.dimensions; if (this.model.match_aspect && dims === 'both') { ref = this._match_aspect(this._baseboint, curpoint, frame), vx = ref[0], vy = ref[1]; } else { ref1 = this.model._get_dim_limits(this._baseboint, curpoint, frame, dims), vx = ref1[0], vy = ref1[1]; } this._update(vx, vy); this.model.overlay.update({ left: null, right: null, top: null, bottom: null }); this._baseboint = null; return null; }; BoxZoomToolView.prototype._update = function (vx, vy) { var end, mapper, name, ref, ref1, ref2, ref3, start, xrs, yrs, zoom_info; if (Math.abs(vx[1] - vx[0]) <= 5 || Math.abs(vy[1] - vy[0]) <= 5) { return; } xrs = {}; ref = this.plot_view.frame.x_mappers; for (name in ref) { mapper = ref[name]; ref1 = mapper.v_map_from_target(vx, true), start = ref1[0], end = ref1[1]; xrs[name] = { start: start, end: end }; } yrs = {}; ref2 = this.plot_view.frame.y_mappers; for (name in ref2) { mapper = ref2[name]; ref3 = mapper.v_map_from_target(vy, true), start = ref3[0], end = ref3[1]; yrs[name] = { start: start, end: end }; } zoom_info = { xrs: xrs, yrs: yrs }; this.plot_view.push_state('box_zoom', { range: zoom_info }); return this.plot_view.update_range(zoom_info); }; return BoxZoomToolView; })(gesture_tool_1.GestureToolView); DEFAULT_BOX_OVERLAY = function () { return new box_annotation_1.BoxAnnotation({ level: "overlay", render_mode: "css", top_units: "screen", left_units: "screen", bottom_units: "screen", right_units: "screen", fill_color: "lightgrey", fill_alpha: 0.5, line_color: "black", line_alpha: 1.0, line_width: 2, line_dash: [4, 4] }); }; exports.BoxZoomTool = (function (superClass) { extend(BoxZoomTool, superClass); function BoxZoomTool() { return BoxZoomTool.__super__.constructor.apply(this, arguments); } BoxZoomTool.prototype.default_view = exports.BoxZoomToolView; BoxZoomTool.prototype.type = "BoxZoomTool"; BoxZoomTool.prototype.tool_name = "Box Zoom"; BoxZoomTool.prototype.icon = "bk-tool-icon-box-zoom"; BoxZoomTool.prototype.event_type = "pan"; BoxZoomTool.prototype.default_order = 20; BoxZoomTool.getters({ tooltip: function () { return this._get_dim_tooltip(this.tool_name, this.dimensions); } }); BoxZoomTool.define({ dimensions: [p.Dimensions, "both"], overlay: [p.Instance, DEFAULT_BOX_OVERLAY], match_aspect: [p.Bool, false] }); return BoxZoomTool; })(gesture_tool_1.GestureTool);