UNPKG

@quartic/bokehjs

Version:

Interactive, novel data visualization

155 lines (154 loc) 5.86 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); var DEFAULT_POLY_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 select_tool_1 = require("./select_tool"); var poly_annotation_1 = require("../../annotations/poly_annotation"); var p = require("core/properties"); exports.LassoSelectToolView = (function (superClass) { extend(LassoSelectToolView, superClass); function LassoSelectToolView() { return LassoSelectToolView.__super__.constructor.apply(this, arguments); } LassoSelectToolView.prototype.initialize = function (options) { LassoSelectToolView.__super__.initialize.call(this, options); this.listenTo(this.model, 'change:active', this._active_change); return this.data = null; }; LassoSelectToolView.prototype._active_change = function () { if (!this.model.active) { return this._clear_overlay(); } }; LassoSelectToolView.prototype._keyup = function (e) { if (e.keyCode === 13) { return this._clear_overlay(); } }; LassoSelectToolView.prototype._pan_start = function (e) { var canvas, vx, vy; canvas = this.plot_view.canvas; vx = canvas.sx_to_vx(e.bokeh.sx); vy = canvas.sy_to_vy(e.bokeh.sy); this.data = { vx: [vx], vy: [vy] }; return null; }; LassoSelectToolView.prototype._pan = function (e) { var append, canvas, h_range, overlay, ref, v_range, vx, vy; canvas = this.plot_view.canvas; vx = canvas.sx_to_vx(e.bokeh.sx); vy = canvas.sy_to_vy(e.bokeh.sy); h_range = this.plot_model.frame.h_range; v_range = this.plot_model.frame.v_range; if (vx > h_range.end) { vx = h_range.end; } if (vx < h_range.start) { vx = h_range.start; } if (vy > v_range.end) { vy = v_range.end; } if (vy < v_range.start) { vy = v_range.start; } this.data.vx.push(vx); this.data.vy.push(vy); overlay = this.model.overlay; overlay.update({ xs: this.data.vx, ys: this.data.vy }); if (this.model.select_every_mousemove) { append = (ref = e.srcEvent.shiftKey) != null ? ref : false; return this._select(this.data.vx, this.data.vy, false, append); } }; LassoSelectToolView.prototype._pan_end = function (e) { var append, ref; this._clear_overlay(); append = (ref = e.srcEvent.shiftKey) != null ? ref : false; this._select(this.data.vx, this.data.vy, true, append); return this.plot_view.push_state('lasso_select', { selection: this.plot_view.get_selection() }); }; LassoSelectToolView.prototype._clear_overlay = function () { return this.model.overlay.update({ xs: [], ys: [] }); }; LassoSelectToolView.prototype._select = function (vx, vy, final, append) { var ds, geometry, i, len, r, ref, sm; geometry = { type: 'poly', vx: vx, vy: vy }; ref = this.model.computed_renderers; for (i = 0, len = ref.length; i < len; i++) { r = ref[i]; ds = r.data_source; sm = ds.selection_manager; sm.select(this, this.plot_view.renderer_views[r.id], geometry, final, append); } if (this.model.callback != null) { this._emit_callback(geometry); } this._save_geometry(geometry, final, append); return null; }; LassoSelectToolView.prototype._emit_callback = function (geometry) { var canvas, frame, r, xmapper, ymapper; r = this.model.computed_renderers[0]; canvas = this.plot_model.canvas; frame = this.plot_model.frame; geometry['sx'] = canvas.v_vx_to_sx(geometry.vx); geometry['sy'] = canvas.v_vy_to_sy(geometry.vy); xmapper = frame.x_mappers[r.x_range_name]; ymapper = frame.y_mappers[r.y_range_name]; geometry['x'] = xmapper.v_map_from_target(geometry.vx); geometry['y'] = ymapper.v_map_from_target(geometry.vy); this.model.callback.execute(this.model, { geometry: geometry }); }; return LassoSelectToolView; })(select_tool_1.SelectToolView); DEFAULT_POLY_OVERLAY = function () { return new poly_annotation_1.PolyAnnotation({ level: "overlay", xs_units: "screen", ys_units: "screen", fill_color: "lightgrey", fill_alpha: 0.5, line_color: "black", line_alpha: 1.0, line_width: 2, line_dash: [4, 4] }); }; exports.LassoSelectTool = (function (superClass) { extend(LassoSelectTool, superClass); function LassoSelectTool() { return LassoSelectTool.__super__.constructor.apply(this, arguments); } LassoSelectTool.prototype.default_view = exports.LassoSelectToolView; LassoSelectTool.prototype.type = "LassoSelectTool"; LassoSelectTool.prototype.tool_name = "Lasso Select"; LassoSelectTool.prototype.icon = "bk-tool-icon-lasso-select"; LassoSelectTool.prototype.event_type = "pan"; LassoSelectTool.prototype.default_order = 12; LassoSelectTool.define({ select_every_mousemove: [p.Bool, true], callback: [p.Instance], overlay: [p.Instance, DEFAULT_POLY_OVERLAY] }); return LassoSelectTool; })(select_tool_1.SelectTool);