@quartic/bokehjs
Version:
Interactive, novel data visualization
68 lines (55 loc) • 2.14 kB
text/coffeescript
import {HasProps} from "./core/has_props"
import * as p from "./core/properties"
import {isString} from "./core/util/types"
import {isEmpty} from "./core/util/object"
import {logger} from "./core/logging"
export class Model extends HasProps
type: "Model"
{
tags: [ p.Array, [] ]
name: [ p.String ]
js_property_callbacks: [ p.Any, {} ]
js_event_callbacks: [ p.Any, {} ]
subscribed_events: [ p.Array, [] ]
}
initialize: (options) ->
super(options)
for evt, callbacks of
for cb in callbacks
_process_event: (event) ->
if event.is_applicable_to(this)
event = event._customize_event(@)
for callback in [event.event_name] ? []
callback.execute(event, {})
if .some((m) -> m == event.event_name)
.event_manager.send_event(event)
trigger_event: (event) ->
?.event_manager.trigger(event.set_model_id(@.id))
_update_event_callbacks: () ->
if not ?
# File an issue: SidePanel in particular seems to have this issue
logger.warn('WARNING: Document not defined for updating event callbacks')
return
.event_manager.subscribed_models.push()
_doc_attached: () ->
if not isEmpty() or not isEmpty()
select: (selector) ->
if selector.prototype instanceof Model
.filter((ref) -> ref instanceof selector)
else if isString(selector)
.filter((ref) -> ref.name == selector)
else
throw new Error("invalid selector")
select_one: (selector) ->
result =
switch result.length
when 0
null
when 1
result[0]
else
throw new Error("found more than one object matching given selector")