@quartic/bokehjs
Version:
Interactive, novel data visualization
75 lines (62 loc) • 2.33 kB
text/coffeescript
import * as p from "core/properties"
import {any, sortBy} from "core/util/array"
import {ActionTool} from "./actions/action_tool"
import {HelpTool} from "./actions/help_tool"
import {GestureTool} from "./gestures/gesture_tool"
import {InspectTool} from "./inspectors/inspect_tool"
import {ToolbarBase, ToolbarBaseView} from "./toolbar_base"
export class Toolbar extends ToolbarBase
type: 'Toolbar'
default_view: ToolbarBaseView
initialize: (attrs, options) ->
super(attrs, options)
(@, 'change:tools', )
()
_init_tools: () ->
for tool in
if tool instanceof InspectTool
if not any(, (t) => t.id == tool.id)
= .concat([tool])
else if tool instanceof HelpTool
if not any(, (t) => t.id == tool.id)
= .concat([tool])
else if tool instanceof ActionTool
if not any(, (t) => t.id == tool.id)
= .concat([tool])
else if tool instanceof GestureTool
et = tool.event_type
if et not of
logger.warn("Toolbar: unknown event type '#{et}' for tool:
#{tool.type} (#{tool.id})")
continue
if not any([et].tools, (t) => t.id == tool.id)
[et].tools = [et].tools.concat([tool])
(tool, 'change:active', .bind(tool))
for et of
tools = [et].tools
if tools.length == 0
continue
[et].tools = sortBy(tools, (tool) -> tool.default_order)
if et == 'tap'
if is null
continue
if is 'auto'
[et].tools[0].active = true
else
.active = true
if et == 'pan'
if is null
continue
if is 'auto'
[et].tools[0].active = true
else
.active = true
if et in ['pinch', 'scroll']
if is null or is 'auto'
continue
.active = true
{
active_drag: [ p.Any, 'auto' ]
active_scroll: [ p.Any, 'auto' ]
active_tap: [ p.Any, 'auto' ]
}