@quartic/bokehjs
Version:
Interactive, novel data visualization
60 lines (47 loc) • 1.59 kB
text/coffeescript
import {SelectTool, SelectToolView} from "./select_tool"
import * as p from "core/properties"
import {isFunction} from "core/util/types"
export class TapToolView extends SelectToolView
_tap: (e) ->
canvas = .canvas
vx = canvas.sx_to_vx(e.bokeh.sx)
vy = canvas.sy_to_vy(e.bokeh.sy)
append = e.srcEvent.shiftKey ? false
_select: (vx, vy, final, append) ->
geometry = {
type: 'point'
vx: vx
vy: vy
}
callback = .callback
cb_data =
geometries: .plot.tool_events.geometries
for r in .computed_renderers
ds = r.data_source
sm = ds.selection_manager
view = .renderer_views[r.id]
if .behavior == "select"
did_hit = sm.select(@, view, geometry, final, append)
else
did_hit = sm.inspect(@, view, geometry, {geometry: geometry})
if did_hit and callback?
if isFunction(callback)
callback(ds, cb_data)
else
callback.execute(ds, cb_data)
if .behavior == "select"
.push_state('tap', {selection: .get_selection()})
return null
export class TapTool extends SelectTool
default_view: TapToolView
type: "TapTool"
tool_name: "Tap"
icon: "bk-tool-icon-tap-select"
event_type: "tap"
default_order: 10
{
behavior: [ p.String, "select" ] # TODO: Enum("select", "inspect")
callback: [ p.Any ] # TODO: p.Either(p.Instance(Callback), p.Function) ]
}