We've allowed plugins to devise their own mutually acceptable signaling strategy that range from plundering the dom to streaming over websockets.
# Data
The Data plugin held mostly tabular data which could be constructed by a Factory on drop of a csv file. The plugin both emitted and listened for thumb events that would scroll through the available data. See About Data Plugin
$(div).trigger('thumb', thumb)
$(".main").on 'thumb', (evt, thumb) ->
Items of type 'data' kept their tabular data in a corresponding field that could be indexed by the thumb.
field = item.data[thumb]
# Scatter
The Scatter plugin could render multi-dimensional data graphically choosing 'total' for y and one other dimension for x selected by thumb events. The plugin would scan the dom for a plugin known to support the Data style interaction and pull the json derived item.data out of it. See About Scatter Plugin
who = $('.chart,.data,.calculator').last() data = who.data('item').data
who.bind 'thumb', (e, thumb) ->
# Chart
The Chart plugin holds time-series data as tuples. It both emits and listens for thumb events to select a specific point in time. See About Chart Plugin
for data in item.data return data if data[0] is thumb
# Line
The Line plugin renders time-series data as a graph where data points are circles and one, the thumb, is larger than others. Line queries the dom for a .sequence-source and failing that queries the wiki global. See About Line Plugin
candidates = $(".item:lt(#{$('.item').index(div)})") who = candidates.filter ".sequence-source"
The older Scatter data location logic was added to the wiki global with the thought that it might know the names of sources before this false start was abandoned. github
series = wiki.getData()