<commit_before><a name="niclabs"></a>
#niclabs
[NIC Chile Research Labs](http://niclabs.cl/) is the Internet Laboratory of the
[Faculty of Physical and Mathematical Sciences of the University of Chile (FCFM)](http://www.fcfm.uchile.cl/),
founded by [NIC Chile](http://www.nic.cl) and host of [INRIA Chile Internet Project](http://www.inria.cl/?page_id=23&lang=en).

Our main research areas are: Internet protocols (layer 3-4), DNS, Internet QoS, Internet QoE, and computer networks.

We are based in Santiago, Chile, in front of the FCFM, Universidad de Chile.

**Members**

* [niclabs](#niclabs)
  * [niclabs.insight](#niclabs.insight)
    * [insight.handler(name, [kind], [handler])](#niclabs.insight.handler)
    * [insight.dashboard([options])](#niclabs.insight.dashboard)
    * [insight.info([obj])](#niclabs.insight.info(2))
    * [insight.layer(obj, [activate])](#niclabs.insight.layer(2))
    * [insight.map([obj])](#niclabs.insight.map(2))
    * [insight.info](#niclabs.insight.info)
      * [class: info.Block](#niclabs.insight.info.Block)
        * [new info.Block(dashboard, options)](#new_niclabs.insight.info.Block)
        * [Block.id](#niclabs.insight.info.Block.id)
        * [Block.element](#niclabs.insight.info.Block.element)
        * [Block.$](#niclabs.insight.info.Block.$)
        * [Block.content](#niclabs.insight.info.Block.content)
        * [Block.remove()](#niclabs.insight.info.Block.remove)
        * [Block.data([data])](#niclabs.insight.info.Block.data)
        * [Block.refresh([data])](#niclabs.insight.info.Block.refresh)
      * [class: info.ChartistBlock](#niclabs.insight.info.ChartistBlock)
        * [new info.ChartistBlock(dashboard, constructor, options)](#new_niclabs.insight.info.ChartistBlock)
        * [type: ChartistBlock.Chartist](#niclabs.insight.info.ChartistBlock.Chartist)
      * [class: info.SummaryBlock](#niclabs.insight.info.SummaryBlock)
        * [new info.SummaryBlock(dashboard, options)](#new_niclabs.insight.info.SummaryBlock)
    * [insight.event](#niclabs.insight.event)
      * [event.on(event, listener)](#niclabs.insight.event.on)
      * [event.off(event, listener)](#niclabs.insight.event.off)
      * [event.trigger(event, [data])](#niclabs.insight.event.trigger)
      * [callback: event~listener](#niclabs.insight.event..listener)
    * [insight.layer](#niclabs.insight.layer)
      * [class: layer.Layer](#niclabs.insight.layer.Layer)
        * [new layer.Layer(dashboard, options)](#new_niclabs.insight.layer.Layer)
        * [Layer.id](#niclabs.insight.layer.Layer.id)
        * [Layer.data([obj])](#niclabs.insight.layer.Layer.data)
        * [Layer.load()](#niclabs.insight.layer.Layer.load)
        * [Layer.draw(data)](#niclabs.insight.layer.Layer.draw)
        * [Layer.filter(fn)](#niclabs.insight.layer.Layer.filter)
        * [Layer.clear()](#niclabs.insight.layer.Layer.clear)
        * [event: "layer_data"](#niclabs.insight.layer.Layer#event_layer_data)
        * [event: "layer_sumary"](#niclabs.insight.layer.Layer#event_layer_sumary)
      * [class: layer.MarkerLayer](#niclabs.insight.layer.MarkerLayer)
        * [new layer.MarkerLayer(dashboard, options)](#new_niclabs.insight.layer.MarkerLayer)
        * [MarkerLayer.layer.draw(data, data[].lat, data[].lng, [data[].description])](#niclabs.insight.layer.MarkerLayer.layer.draw)
        * [MarkerLayer.layer.clear()](#niclabs.insight.layer.MarkerLayer.layer.clear)
        * [MarkerLayer.layer.filter(fn)](#niclabs.insight.layer.MarkerLayer.layer.filter)
        * [event: "layer_data"](#niclabs.insight.layer.MarkerLayer#event_layer_data)
        * [event: "layer_sumary"](#niclabs.insight.layer.MarkerLayer#event_layer_sumary)
    * [insight.map](#niclabs.insight.map)
      * [map.marker](#niclabs.insight.map.marker)
        * [class: marker.SimpleMarker](#niclabs.insight.map.marker.SimpleMarker)
          * [new marker.SimpleMarker(dashboard, options)](#new_niclabs.insight.map.marker.SimpleMarker)
        * [class: marker.ImageMarker](#niclabs.insight.map.marker.ImageMarker)
          * [new marker.ImageMarker(dashboard, options)](#new_niclabs.insight.map.marker.ImageMarker)
        * [class: marker.Marker](#niclabs.insight.map.marker.Marker)
          * [new marker.Marker(dashboard, options)](#new_niclabs.insight.map.marker.Marker)
          * [Marker.map](#niclabs.insight.map.marker.Marker.map)
          * [Marker.layer](#niclabs.insight.map.marker.Marker.layer)
          * [Marker.marker()](#niclabs.insight.map.marker.Marker.marker)
          * [Marker.clickable([activate])](#niclabs.insight.map.marker.Marker.clickable)
          * [Marker.clear()](#niclabs.insight.map.marker.Marker.clear)
          * [Marker.visible([visible])](#niclabs.insight.map.marker.Marker.visible)
        * [class: marker.SimpleMarker](#niclabs.insight.map.marker.SimpleMarker)
          * [new marker.SimpleMarker(dashboard, options)](#new_niclabs.insight.map.marker.SimpleMarker)
      * [class: map.GoogleMap](#niclabs.insight.map.GoogleMap)
        * [new map.GoogleMap(options)](#new_niclabs.insight.map.GoogleMap)
        * [GoogleMap.map.zoom([zoom])](#niclabs.insight.map.GoogleMap.map.zoom)
        * [GoogleMap.map.center([lat], [lng])](#niclabs.insight.map.GoogleMap.map.center)
        * [event: "map_element_selected"](#niclabs.insight.map.GoogleMap#event_map_element_selected)
    * [callback: insight~handler](#niclabs.insight..handler)
    * [class: insight.Dashboard](#niclabs.insight.Dashboard)
      * [new insight.Dashboard(options)](#new_niclabs.insight.Dashboard)
      * [Dashboard.element](#niclabs.insight.Dashboard.element)
      * [Dashboard.$](#niclabs.insight.Dashboard.$)
      * [Dashboard.config(name)](#niclabs.insight.Dashboard.config)
      * [Dashboard.info([obj])](#niclabs.insight.Dashboard.info)
      * [Dashboard.map([obj])](#niclabs.insight.Dashboard.map)
      * [Dashboard.layer(obj, [activate])](#niclabs.insight.Dashboard.layer)
      * [Dashboard.data([obj])](#niclabs.insight.Dashboard.data)
      * [Dashboard.active([id])](#niclabs.insight.Dashboard.active)
      * [Dashboard.filter(filter)](#niclabs.insight.Dashboard.filter)
      * [Dashboard.clear()](#niclabs.insight.Dashboard.clear)
      * [event: "active_layer_data"](#niclabs.insight.Dashboard#event_active_layer_data)
    * [class: insight.FilterBar](#niclabs.insight.FilterBar)
      * [new insight.FilterBar()](#new_niclabs.insight.FilterBar)
      * [FilterBar.element](#niclabs.insight.FilterBar.element)
      * [FilterBar.$](#niclabs.insight.FilterBar.$)
      * [FilterBar.filter(filter)](#niclabs.insight.FilterBar.filter)
      * [callback: FilterBar~filter](#niclabs.insight.FilterBar..filter)
      * [event: "filter_changed"](#niclabs.insight.FilterBar#event_filter_changed)
    * [class: insight.MapView](#niclabs.insight.MapView)
      * [new insight.MapView(options)](#new_niclabs.insight.MapView)
      * [MapView.element](#niclabs.insight.MapView.element)
      * [MapView.$](#niclabs.insight.MapView.$)
      * [MapView.center([lat], [lng])](#niclabs.insight.MapView.center)
      * [MapView.lat()](#niclabs.insight.MapView.lat)
      * [MapView.lng()](#niclabs.insight.MapView.lng)
      * [MapView.zoom([zoom])](#niclabs.insight.MapView.zoom)
      * [type: MapView.Coordinates](#niclabs.insight.MapView.Coordinates)
      * [event: "map_element_selected"](#niclabs.insight.MapView#event_map_element_selected)
    * [class: insight.InfoView](#niclabs.insight.InfoView)
      * [new insight.InfoView(dashboard, options)](#new_niclabs.insight.InfoView)
      * [InfoView.element](#niclabs.insight.InfoView.element)
      * [InfoView.$](#niclabs.insight.InfoView.$)
      * [InfoView.block(obj)](#niclabs.insight.InfoView.block)

<a name="niclabs.insight"></a>
##niclabs.insight
Insight is a generic web dashboard for smart city projects.

It allows to combine different chart and visualization tools to better
understand what is going on in the city

**Members**

* [niclabs.insight](#niclabs.insight)
  * [insight.handler(name, [kind], [handler])](#niclabs.insight.handler)
  * [insight.dashboard([options])](#niclabs.insight.dashboard)
  * [insight.info([obj])](#niclabs.insight.info(2))
  * [insight.layer(obj, [activate])](#niclabs.insight.layer(2))
  * [insight.map([obj])](#niclabs.insight.map(2))
  * [insight.info](#niclabs.insight.info)
    * [class: info.Block](#niclabs.insight.info.Block)
      * [new info.Block(dashboard, options)](#new_niclabs.insight.info.Block)
      * [Block.id](#niclabs.insight.info.Block.id)
      * [Block.element](#niclabs.insight.info.Block.element)
      * [Block.$](#niclabs.insight.info.Block.$)
      * [Block.content](#niclabs.insight.info.Block.content)
      * [Block.remove()](#niclabs.insight.info.Block.remove)
      * [Block.data([data])](#niclabs.insight.info.Block.data)
      * [Block.refresh([data])](#niclabs.insight.info.Block.refresh)
    * [class: info.ChartistBlock](#niclabs.insight.info.ChartistBlock)
      * [new info.ChartistBlock(dashboard, constructor, options)](#new_niclabs.insight.info.ChartistBlock)
      * [type: ChartistBlock.Chartist](#niclabs.insight.info.ChartistBlock.Chartist)
    * [class: info.SummaryBlock](#niclabs.insight.info.SummaryBlock)
      * [new info.SummaryBlock(dashboard, options)](#new_niclabs.insight.info.SummaryBlock)
  * [insight.event](#niclabs.insight.event)
    * [event.on(event, listener)](#niclabs.insight.event.on)
    * [event.off(event, listener)](#niclabs.insight.event.off)
    * [event.trigger(event, [data])](#niclabs.insight.event.trigger)
    * [callback: event~listener](#niclabs.insight.event..listener)
  * [insight.layer](#niclabs.insight.layer)
    * [class: layer.Layer](#niclabs.insight.layer.Layer)
      * [new layer.Layer(dashboard, options)](#new_niclabs.insight.layer.Layer)
      * [Layer.id](#niclabs.insight.layer.Layer.id)
      * [Layer.data([obj])](#niclabs.insight.layer.Layer.data)
      * [Layer.load()](#niclabs.insight.layer.Layer.load)
      * [Layer.draw(data)](#niclabs.insight.layer.Layer.draw)
      * [Layer.filter(fn)](#niclabs.insight.layer.Layer.filter)
      * [Layer.clear()](#niclabs.insight.layer.Layer.clear)
      * [event: "layer_data"](#niclabs.insight.layer.Layer#event_layer_data)
      * [event: "layer_sumary"](#niclabs.insight.layer.Layer#event_layer_sumary)
    * [class: layer.MarkerLayer](#niclabs.insight.layer.MarkerLayer)
      * [new layer.MarkerLayer(dashboard, options)](#new_niclabs.insight.layer.MarkerLayer)
      * [MarkerLayer.layer.draw(data, data[].lat, data[].lng, [data[].description])](#niclabs.insight.layer.MarkerLayer.layer.draw)
      * [MarkerLayer.layer.clear()](#niclabs.insight.layer.MarkerLayer.layer.clear)
      * [MarkerLayer.layer.filter(fn)](#niclabs.insight.layer.MarkerLayer.layer.filter)
      * [event: "layer_data"](#niclabs.insight.layer.MarkerLayer#event_layer_data)
      * [event: "layer_sumary"](#niclabs.insight.layer.MarkerLayer#event_layer_sumary)
  * [insight.map](#niclabs.insight.map)
    * [map.marker](#niclabs.insight.map.marker)
      * [class: marker.SimpleMarker](#niclabs.insight.map.marker.SimpleMarker)
        * [new marker.SimpleMarker(dashboard, options)](#new_niclabs.insight.map.marker.SimpleMarker)
      * [class: marker.ImageMarker](#niclabs.insight.map.marker.ImageMarker)
        * [new marker.ImageMarker(dashboard, options)](#new_niclabs.insight.map.marker.ImageMarker)
      * [class: marker.Marker](#niclabs.insight.map.marker.Marker)
        * [new marker.Marker(dashboard, options)](#new_niclabs.insight.map.marker.Marker)
        * [Marker.map](#niclabs.insight.map.marker.Marker.map)
        * [Marker.layer](#niclabs.insight.map.marker.Marker.layer)
        * [Marker.marker()](#niclabs.insight.map.marker.Marker.marker)
        * [Marker.clickable([activate])](#niclabs.insight.map.marker.Marker.clickable)
        * [Marker.clear()](#niclabs.insight.map.marker.Marker.clear)
        * [Marker.visible([visible])](#niclabs.insight.map.marker.Marker.visible)
      * [class: marker.SimpleMarker](#niclabs.insight.map.marker.SimpleMarker)
        * [new marker.SimpleMarker(dashboard, options)](#new_niclabs.insight.map.marker.SimpleMarker)
    * [class: map.GoogleMap](#niclabs.insight.map.GoogleMap)
      * [new map.GoogleMap(options)](#new_niclabs.insight.map.GoogleMap)
      * [GoogleMap.map.zoom([zoom])](#niclabs.insight.map.GoogleMap.map.zoom)
      * [GoogleMap.map.center([lat], [lng])](#niclabs.insight.map.GoogleMap.map.center)
      * [event: "map_element_selected"](#niclabs.insight.map.GoogleMap#event_map_element_selected)
  * [callback: insight~handler](#niclabs.insight..handler)
  * [class: insight.Dashboard](#niclabs.insight.Dashboard)
    * [new insight.Dashboard(options)](#new_niclabs.insight.Dashboard)
    * [Dashboard.element](#niclabs.insight.Dashboard.element)
    * [Dashboard.$](#niclabs.insight.Dashboard.$)
    * [Dashboard.config(name)](#niclabs.insight.Dashboard.config)
    * [Dashboard.info([obj])](#niclabs.insight.Dashboard.info)
    * [Dashboard.map([obj])](#niclabs.insight.Dashboard.map)
    * [Dashboard.layer(obj, [activate])](#niclabs.insight.Dashboard.layer)
    * [Dashboard.data([obj])](#niclabs.insight.Dashboard.data)
    * [Dashboard.active([id])](#niclabs.insight.Dashboard.active)
    * [Dashboard.filter(filter)](#niclabs.insight.Dashboard.filter)
    * [Dashboard.clear()](#niclabs.insight.Dashboard.clear)
    * [event: "active_layer_data"](#niclabs.insight.Dashboard#event_active_layer_data)
  * [class: insight.FilterBar](#niclabs.insight.FilterBar)
    * [new insight.FilterBar()](#new_niclabs.insight.FilterBar)
    * [FilterBar.element](#niclabs.insight.FilterBar.element)
    * [FilterBar.$](#niclabs.insight.FilterBar.$)
    * [FilterBar.filter(filter)](#niclabs.insight.FilterBar.filter)
    * [callback: FilterBar~filter](#niclabs.insight.FilterBar..filter)
    * [event: "filter_changed"](#niclabs.insight.FilterBar#event_filter_changed)
  * [class: insight.MapView](#niclabs.insight.MapView)
    * [new insight.MapView(options)](#new_niclabs.insight.MapView)
    * [MapView.element](#niclabs.insight.MapView.element)
    * [MapView.$](#niclabs.insight.MapView.$)
    * [MapView.center([lat], [lng])](#niclabs.insight.MapView.center)
    * [MapView.lat()](#niclabs.insight.MapView.lat)
    * [MapView.lng()](#niclabs.insight.MapView.lng)
    * [MapView.zoom([zoom])](#niclabs.insight.MapView.zoom)
    * [type: MapView.Coordinates](#niclabs.insight.MapView.Coordinates)
    * [event: "map_element_selected"](#niclabs.insight.MapView#event_map_element_selected)
  * [class: insight.InfoView](#niclabs.insight.InfoView)
    * [new insight.InfoView(dashboard, options)](#new_niclabs.insight.InfoView)
    * [InfoView.element](#niclabs.insight.InfoView.element)
    * [InfoView.$](#niclabs.insight.InfoView.$)
    * [InfoView.block(obj)](#niclabs.insight.InfoView.block)

<a name="niclabs.insight.handler"></a>
###insight.handler(name, [kind], [handler])
Register a handler of a specific insight element ('layer', 'visualization', etc.)
to manage the creation, rendering of a specific part of the UI.

Third-party extensions to the insight need only to register their visualization
elements with this function for the dashboard UI to correctly recognize them
TODO: improve this

**Params**

- name `string` - name for the handler to return, register  
- \[kind\] `string` - kind for the handler  
- \[handler\] <code>[handler](#niclabs.insight..handler)</code> - callback to create the element  

**Returns**: [handler](#niclabs.insight..handler) - handler for the registered name  
<a name="niclabs.insight.dashboard"></a>
###insight.dashboard([options])
Get/construct a [Dashboard](#niclabs.insight.Dashboard)

Returns the dashboard for the namespace if options are not provided

**Params**

- \[options\] `Object` - list of configuration options for the dashboard see [Dashboard](#niclabs.insight.Dashboard)  

**Returns**: [Dashboard](#niclabs.insight.Dashboard) - dashboard object  
**Example**  
```javascript
// Create a map with the info view to the left
var dashboard = niclabs.insight.dashboard({
    'anchor': '#dashboard',
    'layout': 'left'
});
```

<a name="niclabs.insight.info(2)"></a>
###insight.info([obj])
Helper method to assign/get the information view to/from the dashboard

**Params**

- \[obj\] `Object` | <code>[InfoView](#niclabs.insight.InfoView)</code> - configuration for the information view or information view object  
  - handler `String` - name of the handler to construct the info view  

**Returns**: [InfoView](#niclabs.insight.InfoView) - the dashboard information view  
**Example**  
```javascript
// Create the info view
niclabs.insight.info({
     handler: 'basic-info-view', // The view constructor
     blocks: [{
         'handler': 'summary-block', // The block constructor
         'id': '#summary',
         'title': 'My Marker Summary',
         'data': { // Default data
             'description': 'This block will show the details of the selected markers'
       },
       ignore: ['layer', 'type', 'src'] // Data elements we don't want on the block
   }]
});
```

<a name="niclabs.insight.layer(2)"></a>
###insight.layer(obj, [activate])
Helper method to add/get a [Layer](#niclabs.insight.layer.Layer) for the dashboard

A layer acts as a link between a source of data and a visualization on the map

- If a number or string is provided as value for obj, the layer with that id is returned
- If a generic object is provided with the handler defined in the 'handler' property, a new layer
is created using the handler and the layer is added to the list of
layers of the dashboard
- If an object is provided without handler, it is assumed to be a Layer object and added to the
layer list as is.

**Params**

- obj `string` | `number` | `Object` | <code>[Layer](#niclabs.insight.layer.Layer)</code> - layer id to get or configuration options for the new layer  
- \[activate=false\] `boolean` - if true, set the layer as the active layer of the dashboard  

**Returns**: `niclabs.insight.info.Layer` - - layer for the provided id  
**Example**  
```javascript
niclabs.insight.layer({
     handler: 'marker-layer',
     data: [{
         'lat': 48.8556,
         'lng': 2.2986,
         'landmark': 'Champ de Mars'
     }, {
         'lat': 48.8583,
         'lng': 2.2944,
         'landmark': 'Eiffel Tower',
         'fun-fact': 'Was built in 1889.'
     }],
     marker: {
         'type': 'image-marker',
         'src': 'antenna.svg'
     }
});
```

<a name="niclabs.insight.map(2)"></a>
###insight.map([obj])
Helper method to assign/get the map view to/from the dashboard

**Params**

- \[obj\] `Object` | <code>[MapView](#niclabs.insight.MapView)</code> - configuration for the map view or map view object  
  - handler `String` - name of the handler to construct the map view  

**Returns**: [MapView](#niclabs.insight.MapView) - the dashboard map view  
**Example**  
```javascript
// Create the map
var map = niclabs.insight.map({
     'handler': 'google-map', // Map constructor
     'lat': 48.8583,
     'lng': 2.2944,
     'zoom': 15
});
```

<a name="niclabs.insight.info"></a>
###insight.info
Contains the definitions for the information blocks supported by insight

**Members**

* [insight.info](#niclabs.insight.info)
  * [class: info.Block](#niclabs.insight.info.Block)
    * [new info.Block(dashboard, options)](#new_niclabs.insight.info.Block)
    * [Block.id](#niclabs.insight.info.Block.id)
    * [Block.element](#niclabs.insight.info.Block.element)
    * [Block.$](#niclabs.insight.info.Block.$)
    * [Block.content](#niclabs.insight.info.Block.content)
    * [Block.remove()](#niclabs.insight.info.Block.remove)
    * [Block.data([data])](#niclabs.insight.info.Block.data)
    * [Block.refresh([data])](#niclabs.insight.info.Block.refresh)
  * [class: info.ChartistBlock](#niclabs.insight.info.ChartistBlock)
    * [new info.ChartistBlock(dashboard, constructor, options)](#new_niclabs.insight.info.ChartistBlock)
    * [type: ChartistBlock.Chartist](#niclabs.insight.info.ChartistBlock.Chartist)
  * [class: info.SummaryBlock](#niclabs.insight.info.SummaryBlock)
    * [new info.SummaryBlock(dashboard, options)](#new_niclabs.insight.info.SummaryBlock)

<a name="niclabs.insight.info.Block"></a>
####class: info.Block
**Members**

* [class: info.Block](#niclabs.insight.info.Block)
  * [new info.Block(dashboard, options)](#new_niclabs.insight.info.Block)
  * [Block.id](#niclabs.insight.info.Block.id)
  * [Block.element](#niclabs.insight.info.Block.element)
  * [Block.$](#niclabs.insight.info.Block.$)
  * [Block.content](#niclabs.insight.info.Block.content)
  * [Block.remove()](#niclabs.insight.info.Block.remove)
  * [Block.data([data])](#niclabs.insight.info.Block.data)
  * [Block.refresh([data])](#niclabs.insight.info.Block.refresh)

<a name="new_niclabs.insight.info.Block"></a>
#####new info.Block(dashboard, options)
Construct a information block

**Params**

- dashboard <code>[Dashboard](#niclabs.insight.Dashboard)</code> - dashboard to which the block belongs to  
- options `Object` - configuration options for the block  
  - id `string` - html identifier for the block  
  - \[title\] `string` - title for the block  
  - \[closable=true\] `boolean` - make the block closable  
  - \[movable=true\] `boolean` - make the block movable  
  - \[data\] `Object` - default data for the block  

<a name="niclabs.insight.info.Block.id"></a>
#####Block.id
id of the block

**Type**: `string`  
<a name="niclabs.insight.info.Block.element"></a>
#####Block.element
HTML DOM element for the block container

**Type**: `Element`  
<a name="niclabs.insight.info.Block.$"></a>
#####Block.$
jQuery object for info block container

**Type**: `jQuery`  
<a name="niclabs.insight.info.Block.content"></a>
#####Block.content
jQuery element for the content container

The content of the block is the HTML container that
comes after the block title

**Type**: `jQuery`  
<a name="niclabs.insight.info.Block.remove"></a>
#####Block.remove()
Remove the block from the dashboard.
This method triggers an event to alert all elements of the
dashboard of the block removal

<a name="niclabs.insight.info.Block.data"></a>
#####Block.data([data])
Set/get the data for the block

**Params**

- \[data\] `Object` - data for the block  

**Returns**: `Object` - the current data in the blokc  
<a name="niclabs.insight.info.Block.refresh"></a>
#####Block.refresh([data])
Refresh the block using the provided data

**Params**

- \[data\] `Object` - data to refresh  

<a name="niclabs.insight.info.ChartistBlock"></a>
####class: info.ChartistBlock
**Extends**: `niclabs.insight.info.Block`  
**Members**

* [class: info.ChartistBlock](#niclabs.insight.info.ChartistBlock)
  * [new info.ChartistBlock(dashboard, constructor, options)](#new_niclabs.insight.info.ChartistBlock)
  * [type: ChartistBlock.Chartist](#niclabs.insight.info.ChartistBlock.Chartist)

<a name="new_niclabs.insight.info.ChartistBlock"></a>
#####new info.ChartistBlock(dashboard, constructor, options)
Construct a new chartist information block

For the configuration options see [http://gionkunz.github.io/chartist-js/](http://gionkunz.github.io/chartist-js/)

**Params**

- dashboard <code>[Dashboard](#niclabs.insight.Dashboard)</code> - parent dashboard for the block  
- constructor `Object` - chartist object to use as constructor  
- options `Object` - configuration options for the block  
  - id `string` - html identifier for the block  
  - \[title\] `string` - title for the block  
  - chartist <code>[Chartist](#niclabs.insight.info.ChartistBlock.Chartist)</code> - chartist configuration  
  - \[closable=true\] `boolean` - make the block closable  
  - \[movable=true\] `boolean` - make the block movable  
  - \[data\] `Object` - default data for the summary  

**Extends**: `niclabs.insight.info.Block`  
<a name="niclabs.insight.info.ChartistBlock.Chartist"></a>
#####type: ChartistBlock.Chartist
Configuration options for chartist charts

**Params**

  - class `Object` - chartist css class  
  - labels `Object` - chart labels  
  - \[options\] `Object` - chartist options  
  - \[responsiveOptions\] `Object` - chartist responsive options  

**Type**: `Object`  
<a name="niclabs.insight.info.SummaryBlock"></a>
####class: info.SummaryBlock
**Extends**: `niclabs.insight.info.Block`  
**Members**

* [class: info.SummaryBlock](#niclabs.insight.info.SummaryBlock)
  * [new info.SummaryBlock(dashboard, options)](#new_niclabs.insight.info.SummaryBlock)

<a name="new_niclabs.insight.info.SummaryBlock"></a>
#####new info.SummaryBlock(dashboard, options)
Construct a new summary information block
TODO: describe what is a summary information block

**Params**

- dashboard <code>[Dashboard](#niclabs.insight.Dashboard)</code> - parent dashboard for the block  
- options `Object` - configuration options for the block  
  - id `string` - html identifier for the block  
  - \[title\] `string` - title for the block  
  - \[closable=true\] `boolean` - make the block closable  
  - \[movable=true\] `boolean` - make the block movable  
  - \[data\] `Object` - default data for the summary  

**Extends**: `niclabs.insight.info.Block`  
<a name="niclabs.insight.event"></a>
###insight.event
Very basic event manager for the dashboard

**Example**  
```javascript
// Subscribe to the event
var eventId = niclabs.insight.event.on('hello', function(who) {
     alert("HELLO "+who+"!!!");
});

// Trigger the event
niclabs.insight.event.trigger('hello', "John"); // Shows alert 'HELLO John!!!'

// Unsubscribe
niclabs.insight.event.off('hello', eventId);
```

**Members**

* [insight.event](#niclabs.insight.event)
  * [event.on(event, listener)](#niclabs.insight.event.on)
  * [event.off(event, listener)](#niclabs.insight.event.off)
  * [event.trigger(event, [data])](#niclabs.insight.event.trigger)
  * [callback: event~listener](#niclabs.insight.event..listener)

<a name="niclabs.insight.event.on"></a>
####event.on(event, listener)
Listen for an event. A listener callback can only be assigned once for an event

**Params**

- event `string` - event type  
- listener <code>[listener](#niclabs.insight.event..listener)</code> - callback to process the event  

**Returns**: `number` - id of the listener  
<a name="niclabs.insight.event.off"></a>
####event.off(event, listener)
Stop listening for an event.

**Params**

- event `string` - event type  
- listener <code>[listener](#niclabs.insight.event..listener)</code> | `number` - callback to remove or id of the listener provided by `niclabs.insight.event.on()`  

**Returns**: `boolean` - true if the listener was found and was succesfully removed  
<a name="niclabs.insight.event.trigger"></a>
####event.trigger(event, [data])
Trigger an event

**Params**

- event `string` - event type  
- \[data\] `Object` - data to pass to the callback  

<a name="niclabs.insight.event..listener"></a>
####callback: event~listener
Insight event listener

**Params**

- data `Object` - data for the callback function, dependant on the event  

**Scope**: inner typedef of [event](#niclabs.insight.event)  
**Type**: `function`  
<a name="niclabs.insight.layer"></a>
###insight.layer
Visualization layers for the dashboard

**Members**

* [insight.layer](#niclabs.insight.layer)
  * [class: layer.Layer](#niclabs.insight.layer.Layer)
    * [new layer.Layer(dashboard, options)](#new_niclabs.insight.layer.Layer)
    * [Layer.id](#niclabs.insight.layer.Layer.id)
    * [Layer.data([obj])](#niclabs.insight.layer.Layer.data)
    * [Layer.load()](#niclabs.insight.layer.Layer.load)
    * [Layer.draw(data)](#niclabs.insight.layer.Layer.draw)
    * [Layer.filter(fn)](#niclabs.insight.layer.Layer.filter)
    * [Layer.clear()](#niclabs.insight.layer.Layer.clear)
    * [event: "layer_data"](#niclabs.insight.layer.Layer#event_layer_data)
    * [event: "layer_sumary"](#niclabs.insight.layer.Layer#event_layer_sumary)
  * [class: layer.MarkerLayer](#niclabs.insight.layer.MarkerLayer)
    * [new layer.MarkerLayer(dashboard, options)](#new_niclabs.insight.layer.MarkerLayer)
    * [MarkerLayer.layer.draw(data, data[].lat, data[].lng, [data[].description])](#niclabs.insight.layer.MarkerLayer.layer.draw)
    * [MarkerLayer.layer.clear()](#niclabs.insight.layer.MarkerLayer.layer.clear)
    * [MarkerLayer.layer.filter(fn)](#niclabs.insight.layer.MarkerLayer.layer.filter)
    * [event: "layer_data"](#niclabs.insight.layer.MarkerLayer#event_layer_data)
    * [event: "layer_sumary"](#niclabs.insight.layer.MarkerLayer#event_layer_sumary)

<a name="niclabs.insight.layer.Layer"></a>
####class: layer.Layer
**Members**

* [class: layer.Layer](#niclabs.insight.layer.Layer)
  * [new layer.Layer(dashboard, options)](#new_niclabs.insight.layer.Layer)
  * [Layer.id](#niclabs.insight.layer.Layer.id)
  * [Layer.data([obj])](#niclabs.insight.layer.Layer.data)
  * [Layer.load()](#niclabs.insight.layer.Layer.load)
  * [Layer.draw(data)](#niclabs.insight.layer.Layer.draw)
  * [Layer.filter(fn)](#niclabs.insight.layer.Layer.filter)
  * [Layer.clear()](#niclabs.insight.layer.Layer.clear)
  * [event: "layer_data"](#niclabs.insight.layer.Layer#event_layer_data)
  * [event: "layer_sumary"](#niclabs.insight.layer.Layer#event_layer_sumary)

<a name="new_niclabs.insight.layer.Layer"></a>
#####new layer.Layer(dashboard, options)
Construct a layer

A layer provides a link between a data source and a visualization on the map.

**Params**

- dashboard <code>[Dashboard](#niclabs.insight.Dashboard)</code> - dashboard that this layer belongs to  
- options `Object` - configuration options for the layer  
  - id `string` - identifier for the layer  
  - data `string` | `Array.<Object>` - uri or data array for the layer  
  - \[summary\] `Object` | `function` - summary data  

<a name="niclabs.insight.layer.Layer.id"></a>
#####Layer.id
id of the layer

**Type**: `string`  
<a name="niclabs.insight.layer.Layer.data"></a>
#####Layer.data([obj])
Set/get the data for the layer

If a new source for the data is provided, this method updates the internal
data and reloads the layer by calling [load](#niclabs.insight.layer.Layer.load)

**Params**

- \[obj\] `string` | `Array.<Object>` - optional new data source or data array for the layer  

**Returns**: `string` | `Array.<Object>` - data source for the layer if the data has not been loaded yet or object array if the
 data has been loaded  
<a name="niclabs.insight.layer.Layer.load"></a>
#####Layer.load()
Load the data from the layer and redraw

If data provided as configuration to the layer is a URL, this methods loads the data from the URL and
redraws the layer (invoking [clear](#niclabs.insight.layer.Layer.clear) and [draw](#niclabs.insight.layer.Layer.draw))
when the content is available

<a name="niclabs.insight.layer.Layer.draw"></a>
#####Layer.draw(data)
Draw the layer on the map.

This method must be overriden by the implementing layers

**Params**

- data `Array.<Object>` - data to use for drawing the layer  

<a name="niclabs.insight.layer.Layer.filter"></a>
#####Layer.filter(fn)
Filter the layer according to the provided function.

This method must be overriden by the implementing layers

**Params**

- fn `niclabs.insight.layer.Layer~Filter` - filtering function  

<a name="niclabs.insight.layer.Layer.clear"></a>
#####Layer.clear()
Clear the layer changes on the map. This method must be
overriden by implementing layers

<a name="niclabs.insight.layer.Layer#event_layer_data"></a>
#####event: "layer_data"
Event triggered when an update to the layer data (filtering/update) has ocurred

**Properties**

- id `string` - id for the layer to which the data belongs to  
- data `Array.<Object>` - new data array  

**Type**: `object`  
<a name="niclabs.insight.layer.Layer#event_layer_sumary"></a>
#####event: "layer_sumary"
Event triggered when an update to the (filtering/update) has ocurred

The event provides summary data for blocks to show

**Properties**

- id `string` - id for the layer to which the data belongs to  
- data `Array.<Object>` - new data array  

**Type**: `object`  
<a name="niclabs.insight.layer.MarkerLayer"></a>
####class: layer.MarkerLayer
**Extends**: `niclabs.insight.layer.Layer`  
**Members**

* [class: layer.MarkerLayer](#niclabs.insight.layer.MarkerLayer)
  * [new layer.MarkerLayer(dashboard, options)](#new_niclabs.insight.layer.MarkerLayer)
  * [MarkerLayer.layer.draw(data, data[].lat, data[].lng, [data[].description])](#niclabs.insight.layer.MarkerLayer.layer.draw)
  * [MarkerLayer.layer.clear()](#niclabs.insight.layer.MarkerLayer.layer.clear)
  * [MarkerLayer.layer.filter(fn)](#niclabs.insight.layer.MarkerLayer.layer.filter)
  * [event: "layer_data"](#niclabs.insight.layer.MarkerLayer#event_layer_data)
  * [event: "layer_sumary"](#niclabs.insight.layer.MarkerLayer#event_layer_sumary)

<a name="new_niclabs.insight.layer.MarkerLayer"></a>
#####new layer.MarkerLayer(dashboard, options)
Construct a new marker layer

**Params**

- dashboard <code>[Dashboard](#niclabs.insight.Dashboard)</code> - dashboard that this layer belongs to  
- options `Object` - configuration options for the layer  
  - id `string` - identifier for the layer  
  - data `string` | `Array.<Object>` - uri or data array for the layer  

**Extends**: `niclabs.insight.layer.Layer`  
<a name="niclabs.insight.layer.MarkerLayer.layer.draw"></a>
#####MarkerLayer.layer.draw(data, data[].lat, data[].lng, [data[].description])
Draw the markers according to the internal data on the map

**Params**

- data `Array.<Object>` - data to draw  
- data[].lat `float` - latitude for the marker  
- data[].lng `float` - longitude for the marker  
- \[data[].description\] `string` - description for the marker  

<a name="niclabs.insight.layer.MarkerLayer.layer.clear"></a>
#####MarkerLayer.layer.clear()
Clear the markers from the map

<a name="niclabs.insight.layer.MarkerLayer.layer.filter"></a>
#####MarkerLayer.layer.filter(fn)
Filter the layer according to the provided function.

**Params**

- fn `niclabs.insight.layer.Layer~Filter` - filtering function  

<a name="niclabs.insight.layer.MarkerLayer#event_layer_data"></a>
#####event: "layer_data"
Event triggered when an update to the layer data (filtering/update) has ocurred

**Properties**

- id `string` - id for the layer to which the data belongs to  
- data `Array.<Object>` - new data array  

**Type**: `object`  
<a name="niclabs.insight.layer.MarkerLayer#event_layer_sumary"></a>
#####event: "layer_sumary"
Event triggered when an update to the (filtering/update) has ocurred

The event provides summary data for blocks to show

**Properties**

- id `string` - id for the layer to which the data belongs to  
- data `Array.<Object>` - new data array  

**Type**: `object`  
<a name="niclabs.insight.map"></a>
###insight.map
Map compatibility for the insight dashboard

**Members**

* [insight.map](#niclabs.insight.map)
  * [map.marker](#niclabs.insight.map.marker)
    * [class: marker.SimpleMarker](#niclabs.insight.map.marker.SimpleMarker)
      * [new marker.SimpleMarker(dashboard, options)](#new_niclabs.insight.map.marker.SimpleMarker)
    * [class: marker.ImageMarker](#niclabs.insight.map.marker.ImageMarker)
      * [new marker.ImageMarker(dashboard, options)](#new_niclabs.insight.map.marker.ImageMarker)
    * [class: marker.Marker](#niclabs.insight.map.marker.Marker)
      * [new marker.Marker(dashboard, options)](#new_niclabs.insight.map.marker.Marker)
      * [Marker.map](#niclabs.insight.map.marker.Marker.map)
      * [Marker.layer](#niclabs.insight.map.marker.Marker.layer)
      * [Marker.marker()](#niclabs.insight.map.marker.Marker.marker)
      * [Marker.clickable([activate])](#niclabs.insight.map.marker.Marker.clickable)
      * [Marker.clear()](#niclabs.insight.map.marker.Marker.clear)
      * [Marker.visible([visible])](#niclabs.insight.map.marker.Marker.visible)
    * [class: marker.SimpleMarker](#niclabs.insight.map.marker.SimpleMarker)
      * [new marker.SimpleMarker(dashboard, options)](#new_niclabs.insight.map.marker.SimpleMarker)
  * [class: map.GoogleMap](#niclabs.insight.map.GoogleMap)
    * [new map.GoogleMap(options)](#new_niclabs.insight.map.GoogleMap)
    * [GoogleMap.map.zoom([zoom])](#niclabs.insight.map.GoogleMap.map.zoom)
    * [GoogleMap.map.center([lat], [lng])](#niclabs.insight.map.GoogleMap.map.center)
    * [event: "map_element_selected"](#niclabs.insight.map.GoogleMap#event_map_element_selected)

<a name="niclabs.insight.map.marker"></a>
####map.marker
Collection of markers available for drawing on the map

**Members**

* [map.marker](#niclabs.insight.map.marker)
  * [class: marker.SimpleMarker](#niclabs.insight.map.marker.SimpleMarker)
    * [new marker.SimpleMarker(dashboard, options)](#new_niclabs.insight.map.marker.SimpleMarker)
  * [class: marker.ImageMarker](#niclabs.insight.map.marker.ImageMarker)
    * [new marker.ImageMarker(dashboard, options)](#new_niclabs.insight.map.marker.ImageMarker)
  * [class: marker.Marker](#niclabs.insight.map.marker.Marker)
    * [new marker.Marker(dashboard, options)](#new_niclabs.insight.map.marker.Marker)
    * [Marker.map](#niclabs.insight.map.marker.Marker.map)
    * [Marker.layer](#niclabs.insight.map.marker.Marker.layer)
    * [Marker.marker()](#niclabs.insight.map.marker.Marker.marker)
    * [Marker.clickable([activate])](#niclabs.insight.map.marker.Marker.clickable)
    * [Marker.clear()](#niclabs.insight.map.marker.Marker.clear)
    * [Marker.visible([visible])](#niclabs.insight.map.marker.Marker.visible)
  * [class: marker.SimpleMarker](#niclabs.insight.map.marker.SimpleMarker)
    * [new marker.SimpleMarker(dashboard, options)](#new_niclabs.insight.map.marker.SimpleMarker)

<a name="niclabs.insight.map.marker.SimpleMarker"></a>
#####class: marker.SimpleMarker
**Extends**: `niclabs.insight.map.marker.Marker`  
**Members**

* [class: marker.SimpleMarker](#niclabs.insight.map.marker.SimpleMarker)
  * [new marker.SimpleMarker(dashboard, options)](#new_niclabs.insight.map.marker.SimpleMarker)

<a name="new_niclabs.insight.map.marker.SimpleMarker"></a>
######new marker.SimpleMarker(dashboard, options)
Constructor for circle markers

Circle markers are drawn in the map as circular waypoints

**Params**

- dashboard <code>[Dashboard](#niclabs.insight.Dashboard)</code> - dashboard that this marker belongs to  
- options `Object` - configuration options for the layer  
  - layer `string` - identifier for the layer that this marker belongs to  

**Extends**: `niclabs.insight.map.marker.Marker`  
<a name="niclabs.insight.map.marker.ImageMarker"></a>
#####class: marker.ImageMarker
**Extends**: `niclabs.insight.map.marker.Marker`  
**Members**

* [class: marker.ImageMarker](#niclabs.insight.map.marker.ImageMarker)
  * [new marker.ImageMarker(dashboard, options)](#new_niclabs.insight.map.marker.ImageMarker)

<a name="new_niclabs.insight.map.marker.ImageMarker"></a>
######new marker.ImageMarker(dashboard, options)
Constructor for an image marker

An image marker includes an image for each waypoint

**Params**

- dashboard <code>[Dashboard](#niclabs.insight.Dashboard)</code> - dashboard that this marker belongs to  
- options `Object` - configuration options for the layer  
  - layer `string` - identifier for the layer that this marker belongs to  

**Extends**: `niclabs.insight.map.marker.Marker`  
<a name="niclabs.insight.map.marker.Marker"></a>
#####class: marker.Marker
**Members**

* [class: marker.Marker](#niclabs.insight.map.marker.Marker)
  * [new marker.Marker(dashboard, options)](#new_niclabs.insight.map.marker.Marker)
  * [Marker.map](#niclabs.insight.map.marker.Marker.map)
  * [Marker.layer](#niclabs.insight.map.marker.Marker.layer)
  * [Marker.marker()](#niclabs.insight.map.marker.Marker.marker)
  * [Marker.clickable([activate])](#niclabs.insight.map.marker.Marker.clickable)
  * [Marker.clear()](#niclabs.insight.map.marker.Marker.clear)
  * [Marker.visible([visible])](#niclabs.insight.map.marker.Marker.visible)

<a name="new_niclabs.insight.map.marker.Marker"></a>
######new marker.Marker(dashboard, options)
Construct a new marker

**Params**

- dashboard <code>[Dashboard](#niclabs.insight.Dashboard)</code> - dashboard that this marker belongs to  
- options `Object` - configuration options for the layer  
  - layer `string` - identifier for the layer that this marker belongs to  

<a name="niclabs.insight.map.marker.Marker.map"></a>
######Marker.map
Map view where the map belongs to

**Type**: [MapView](#niclabs.insight.MapView)  
<a name="niclabs.insight.map.marker.Marker.layer"></a>
######Marker.layer
Layer to which the marker belongs to

**Type**: [Layer](#niclabs.insight.layer.Layer)  
<a name="niclabs.insight.map.marker.Marker.marker"></a>
######Marker.marker()<commit_msg>Updated documentation<commit_after><a name="niclabs"></a>
#niclabs
[NIC Chile Research Labs](http://niclabs.cl/) is the Internet Laboratory of the
[Faculty of Physical and Mathematical Sciences of the University of Chile (FCFM)](http://www.fcfm.uchile.cl/),
founded by [NIC Chile](http://www.nic.cl) and host of [INRIA Chile Internet Project](http://www.inria.cl/?page_id=23&lang=en).

Our main research areas are: Internet protocols (layer 3-4), DNS, Internet QoS, Internet QoE, and computer networks.

We are based in Santiago, Chile, in front of the FCFM, Universidad de Chile.

**Members**

* [niclabs](#niclabs)
  * [niclabs.insight](#niclabs.insight)
    * [insight.handler(name, [kind], [handler])](#niclabs.insight.handler)
    * [insight.dashboard([options])](#niclabs.insight.dashboard)
    * [insight.info([obj])](#niclabs.insight.info(2))
    * [insight.layer(obj, [activate])](#niclabs.insight.layer(2))
    * [insight.map([obj])](#niclabs.insight.map(2))
    * [insight.event](#niclabs.insight.event)
      * [event.on(event, listener)](#niclabs.insight.event.on)
      * [event.off(event, listener)](#niclabs.insight.event.off)
      * [event.trigger(event, [data])](#niclabs.insight.event.trigger)
      * [callback: event~listener](#niclabs.insight.event..listener)
    * [insight.info](#niclabs.insight.info)
      * [class: info.Block](#niclabs.insight.info.Block)
        * [new info.Block(dashboard, options)](#new_niclabs.insight.info.Block)
        * [Block.id](#niclabs.insight.info.Block.id)
        * [Block.element](#niclabs.insight.info.Block.element)
        * [Block.$](#niclabs.insight.info.Block.$)
        * [Block.content](#niclabs.insight.info.Block.content)
        * [Block.remove()](#niclabs.insight.info.Block.remove)
        * [Block.data([data])](#niclabs.insight.info.Block.data)
        * [Block.refresh([data])](#niclabs.insight.info.Block.refresh)
      * [class: info.ChartistBlock](#niclabs.insight.info.ChartistBlock)
        * [new info.ChartistBlock(dashboard, constructor, options)](#new_niclabs.insight.info.ChartistBlock)
        * [type: ChartistBlock.Chartist](#niclabs.insight.info.ChartistBlock.Chartist)
      * [class: info.SummaryBlock](#niclabs.insight.info.SummaryBlock)
        * [new info.SummaryBlock(dashboard, options)](#new_niclabs.insight.info.SummaryBlock)
    * [insight.layer](#niclabs.insight.layer)
      * [class: layer.HeatmapLayer](#niclabs.insight.layer.HeatmapLayer)
        * [new layer.HeatmapLayer(dashboard, options)](#new_niclabs.insight.layer.HeatmapLayer)
        * [HeatmapLayer.layer.draw(data, data[].lat, data[].lng, [data[].description])](#niclabs.insight.layer.HeatmapLayer.layer.draw)
        * [HeatmapLayer.layer.clear()](#niclabs.insight.layer.HeatmapLayer.layer.clear)
        * [HeatmapLayer.layer.filter(fn)](#niclabs.insight.layer.HeatmapLayer.layer.filter)
        * [event: "layer_data"](#niclabs.insight.layer.HeatmapLayer#event_layer_data)
        * [event: "layer_sumary"](#niclabs.insight.layer.HeatmapLayer#event_layer_sumary)
      * [class: layer.Layer](#niclabs.insight.layer.Layer)
        * [new layer.Layer(dashboard, options)](#new_niclabs.insight.layer.Layer)
        * [Layer.id](#niclabs.insight.layer.Layer.id)
        * [Layer.data([obj])](#niclabs.insight.layer.Layer.data)
        * [Layer.load()](#niclabs.insight.layer.Layer.load)
        * [Layer.draw(data)](#niclabs.insight.layer.Layer.draw)
        * [Layer.filter(fn)](#niclabs.insight.layer.Layer.filter)
        * [Layer.clear()](#niclabs.insight.layer.Layer.clear)
        * [event: "layer_data"](#niclabs.insight.layer.Layer#event_layer_data)
        * [event: "layer_sumary"](#niclabs.insight.layer.Layer#event_layer_sumary)
      * [class: layer.MarkerLayer](#niclabs.insight.layer.MarkerLayer)
        * [new layer.MarkerLayer(dashboard, options)](#new_niclabs.insight.layer.MarkerLayer)
        * [MarkerLayer.layer.draw(data, data[].lat, data[].lng, [data[].description])](#niclabs.insight.layer.MarkerLayer.layer.draw)
        * [MarkerLayer.layer.clear()](#niclabs.insight.layer.MarkerLayer.layer.clear)
        * [MarkerLayer.layer.filter(fn)](#niclabs.insight.layer.MarkerLayer.layer.filter)
        * [event: "layer_data"](#niclabs.insight.layer.MarkerLayer#event_layer_data)
        * [event: "layer_sumary"](#niclabs.insight.layer.MarkerLayer#event_layer_sumary)
    * [insight.map](#niclabs.insight.map)
      * [map.heatmap](#niclabs.insight.map.heatmap)
        * [class: heatmap.Heatmap](#niclabs.insight.map.heatmap.Heatmap)
          * [new heatmap.Heatmap(dashboard, options)](#new_niclabs.insight.map.heatmap.Heatmap)
          * [Heatmap.map](#niclabs.insight.map.heatmap.Heatmap.map)
          * [Heatmap.layer](#niclabs.insight.map.heatmap.Heatmap.layer)
        * [class: heatmap.PointHeatmap](#niclabs.insight.map.heatmap.PointHeatmap)
          * [new heatmap.PointHeatmap(dashboard, options)](#new_niclabs.insight.map.heatmap.PointHeatmap)
          * [PointHeatmap.self.clear()](#niclabs.insight.map.heatmap.PointHeatmap.self.clear)
          * [type: PointHeatmap.Data](#niclabs.insight.map.heatmap.PointHeatmap.Data)
      * [map.marker](#niclabs.insight.map.marker)
        * [class: marker.SimpleMarker](#niclabs.insight.map.marker.SimpleMarker)
          * [new marker.SimpleMarker(dashboard, options)](#new_niclabs.insight.map.marker.SimpleMarker)
        * [class: marker.ImageMarker](#niclabs.insight.map.marker.ImageMarker)
          * [new marker.ImageMarker(dashboard, options)](#new_niclabs.insight.map.marker.ImageMarker)
        * [class: marker.Marker](#niclabs.insight.map.marker.Marker)
          * [new marker.Marker(dashboard, options)](#new_niclabs.insight.map.marker.Marker)
          * [Marker.map](#niclabs.insight.map.marker.Marker.map)
          * [Marker.layer](#niclabs.insight.map.marker.Marker.layer)
          * [Marker.clear()](#niclabs.insight.map.marker.Marker.clear)
          * [Marker.marker()](#niclabs.insight.map.marker.Marker.marker)
          * [Marker.clickable([activate])](#niclabs.insight.map.marker.Marker.clickable)
          * [Marker.clear()](#niclabs.insight.map.marker.Marker.clear)
          * [Marker.visible([visible])](#niclabs.insight.map.marker.Marker.visible)
        * [class: marker.SimpleMarker](#niclabs.insight.map.marker.SimpleMarker)
          * [new marker.SimpleMarker(dashboard, options)](#new_niclabs.insight.map.marker.SimpleMarker)
      * [class: map.GoogleMap](#niclabs.insight.map.GoogleMap)
        * [new map.GoogleMap(options)](#new_niclabs.insight.map.GoogleMap)
        * [GoogleMap.map.zoom([zoom])](#niclabs.insight.map.GoogleMap.map.zoom)
        * [GoogleMap.map.center([lat], [lng])](#niclabs.insight.map.GoogleMap.map.center)
        * [event: "map_element_selected"](#niclabs.insight.map.GoogleMap#event_map_element_selected)
    * [callback: insight~handler](#niclabs.insight..handler)
    * [class: insight.Dashboard](#niclabs.insight.Dashboard)
      * [new insight.Dashboard(options)](#new_niclabs.insight.Dashboard)
      * [Dashboard.element](#niclabs.insight.Dashboard.element)
      * [Dashboard.$](#niclabs.insight.Dashboard.$)
      * [Dashboard.config(name)](#niclabs.insight.Dashboard.config)
      * [Dashboard.info([obj])](#niclabs.insight.Dashboard.info)
      * [Dashboard.map([obj])](#niclabs.insight.Dashboard.map)
      * [Dashboard.layer(obj, [activate])](#niclabs.insight.Dashboard.layer)
      * [Dashboard.data([obj])](#niclabs.insight.Dashboard.data)
      * [Dashboard.active([id])](#niclabs.insight.Dashboard.active)
      * [Dashboard.filter(filter)](#niclabs.insight.Dashboard.filter)
      * [Dashboard.clear()](#niclabs.insight.Dashboard.clear)
      * [event: "active_layer_data"](#niclabs.insight.Dashboard#event_active_layer_data)
    * [class: insight.FilterBar](#niclabs.insight.FilterBar)
      * [new insight.FilterBar()](#new_niclabs.insight.FilterBar)
      * [FilterBar.element](#niclabs.insight.FilterBar.element)
      * [FilterBar.$](#niclabs.insight.FilterBar.$)
      * [FilterBar.filter(filter)](#niclabs.insight.FilterBar.filter)
      * [callback: FilterBar~filter](#niclabs.insight.FilterBar..filter)
      * [event: "filter_changed"](#niclabs.insight.FilterBar#event_filter_changed)
    * [class: insight.MapView](#niclabs.insight.MapView)
      * [new insight.MapView(options)](#new_niclabs.insight.MapView)
      * [MapView.element](#niclabs.insight.MapView.element)
      * [MapView.$](#niclabs.insight.MapView.$)
      * [MapView.center([lat], [lng])](#niclabs.insight.MapView.center)
      * [MapView.lat()](#niclabs.insight.MapView.lat)
      * [MapView.lng()](#niclabs.insight.MapView.lng)
      * [MapView.zoom([zoom])](#niclabs.insight.MapView.zoom)
      * [type: MapView.Coordinates](#niclabs.insight.MapView.Coordinates)
      * [event: "map_element_selected"](#niclabs.insight.MapView#event_map_element_selected)
    * [class: insight.InfoView](#niclabs.insight.InfoView)
      * [new insight.InfoView(dashboard, options)](#new_niclabs.insight.InfoView)
      * [InfoView.element](#niclabs.insight.InfoView.element)
      * [InfoView.$](#niclabs.insight.InfoView.$)
      * [InfoView.block(obj)](#niclabs.insight.InfoView.block)

<a name="niclabs.insight"></a>
##niclabs.insight
Insight is a generic web dashboard for smart city projects.

It allows to combine different chart and visualization tools to better
understand what is going on in the city

**Members**

* [niclabs.insight](#niclabs.insight)
  * [insight.handler(name, [kind], [handler])](#niclabs.insight.handler)
  * [insight.dashboard([options])](#niclabs.insight.dashboard)
  * [insight.info([obj])](#niclabs.insight.info(2))
  * [insight.layer(obj, [activate])](#niclabs.insight.layer(2))
  * [insight.map([obj])](#niclabs.insight.map(2))
  * [insight.event](#niclabs.insight.event)
    * [event.on(event, listener)](#niclabs.insight.event.on)
    * [event.off(event, listener)](#niclabs.insight.event.off)
    * [event.trigger(event, [data])](#niclabs.insight.event.trigger)
    * [callback: event~listener](#niclabs.insight.event..listener)
  * [insight.info](#niclabs.insight.info)
    * [class: info.Block](#niclabs.insight.info.Block)
      * [new info.Block(dashboard, options)](#new_niclabs.insight.info.Block)
      * [Block.id](#niclabs.insight.info.Block.id)
      * [Block.element](#niclabs.insight.info.Block.element)
      * [Block.$](#niclabs.insight.info.Block.$)
      * [Block.content](#niclabs.insight.info.Block.content)
      * [Block.remove()](#niclabs.insight.info.Block.remove)
      * [Block.data([data])](#niclabs.insight.info.Block.data)
      * [Block.refresh([data])](#niclabs.insight.info.Block.refresh)
    * [class: info.ChartistBlock](#niclabs.insight.info.ChartistBlock)
      * [new info.ChartistBlock(dashboard, constructor, options)](#new_niclabs.insight.info.ChartistBlock)
      * [type: ChartistBlock.Chartist](#niclabs.insight.info.ChartistBlock.Chartist)
    * [class: info.SummaryBlock](#niclabs.insight.info.SummaryBlock)
      * [new info.SummaryBlock(dashboard, options)](#new_niclabs.insight.info.SummaryBlock)
  * [insight.layer](#niclabs.insight.layer)
    * [class: layer.HeatmapLayer](#niclabs.insight.layer.HeatmapLayer)
      * [new layer.HeatmapLayer(dashboard, options)](#new_niclabs.insight.layer.HeatmapLayer)
      * [HeatmapLayer.layer.draw(data, data[].lat, data[].lng, [data[].description])](#niclabs.insight.layer.HeatmapLayer.layer.draw)
      * [HeatmapLayer.layer.clear()](#niclabs.insight.layer.HeatmapLayer.layer.clear)
      * [HeatmapLayer.layer.filter(fn)](#niclabs.insight.layer.HeatmapLayer.layer.filter)
      * [event: "layer_data"](#niclabs.insight.layer.HeatmapLayer#event_layer_data)
      * [event: "layer_sumary"](#niclabs.insight.layer.HeatmapLayer#event_layer_sumary)
    * [class: layer.Layer](#niclabs.insight.layer.Layer)
      * [new layer.Layer(dashboard, options)](#new_niclabs.insight.layer.Layer)
      * [Layer.id](#niclabs.insight.layer.Layer.id)
      * [Layer.data([obj])](#niclabs.insight.layer.Layer.data)
      * [Layer.load()](#niclabs.insight.layer.Layer.load)
      * [Layer.draw(data)](#niclabs.insight.layer.Layer.draw)
      * [Layer.filter(fn)](#niclabs.insight.layer.Layer.filter)
      * [Layer.clear()](#niclabs.insight.layer.Layer.clear)
      * [event: "layer_data"](#niclabs.insight.layer.Layer#event_layer_data)
      * [event: "layer_sumary"](#niclabs.insight.layer.Layer#event_layer_sumary)
    * [class: layer.MarkerLayer](#niclabs.insight.layer.MarkerLayer)
      * [new layer.MarkerLayer(dashboard, options)](#new_niclabs.insight.layer.MarkerLayer)
      * [MarkerLayer.layer.draw(data, data[].lat, data[].lng, [data[].description])](#niclabs.insight.layer.MarkerLayer.layer.draw)
      * [MarkerLayer.layer.clear()](#niclabs.insight.layer.MarkerLayer.layer.clear)
      * [MarkerLayer.layer.filter(fn)](#niclabs.insight.layer.MarkerLayer.layer.filter)
      * [event: "layer_data"](#niclabs.insight.layer.MarkerLayer#event_layer_data)
      * [event: "layer_sumary"](#niclabs.insight.layer.MarkerLayer#event_layer_sumary)
  * [insight.map](#niclabs.insight.map)
    * [map.heatmap](#niclabs.insight.map.heatmap)
      * [class: heatmap.Heatmap](#niclabs.insight.map.heatmap.Heatmap)
        * [new heatmap.Heatmap(dashboard, options)](#new_niclabs.insight.map.heatmap.Heatmap)
        * [Heatmap.map](#niclabs.insight.map.heatmap.Heatmap.map)
        * [Heatmap.layer](#niclabs.insight.map.heatmap.Heatmap.layer)
      * [class: heatmap.PointHeatmap](#niclabs.insight.map.heatmap.PointHeatmap)
        * [new heatmap.PointHeatmap(dashboard, options)](#new_niclabs.insight.map.heatmap.PointHeatmap)
        * [PointHeatmap.self.clear()](#niclabs.insight.map.heatmap.PointHeatmap.self.clear)
        * [type: PointHeatmap.Data](#niclabs.insight.map.heatmap.PointHeatmap.Data)
    * [map.marker](#niclabs.insight.map.marker)
      * [class: marker.SimpleMarker](#niclabs.insight.map.marker.SimpleMarker)
        * [new marker.SimpleMarker(dashboard, options)](#new_niclabs.insight.map.marker.SimpleMarker)
      * [class: marker.ImageMarker](#niclabs.insight.map.marker.ImageMarker)
        * [new marker.ImageMarker(dashboard, options)](#new_niclabs.insight.map.marker.ImageMarker)
      * [class: marker.Marker](#niclabs.insight.map.marker.Marker)
        * [new marker.Marker(dashboard, options)](#new_niclabs.insight.map.marker.Marker)
        * [Marker.map](#niclabs.insight.map.marker.Marker.map)
        * [Marker.layer](#niclabs.insight.map.marker.Marker.layer)
        * [Marker.clear()](#niclabs.insight.map.marker.Marker.clear)
        * [Marker.marker()](#niclabs.insight.map.marker.Marker.marker)
        * [Marker.clickable([activate])](#niclabs.insight.map.marker.Marker.clickable)
        * [Marker.clear()](#niclabs.insight.map.marker.Marker.clear)
        * [Marker.visible([visible])](#niclabs.insight.map.marker.Marker.visible)
      * [class: marker.SimpleMarker](#niclabs.insight.map.marker.SimpleMarker)
        * [new marker.SimpleMarker(dashboard, options)](#new_niclabs.insight.map.marker.SimpleMarker)
    * [class: map.GoogleMap](#niclabs.insight.map.GoogleMap)
      * [new map.GoogleMap(options)](#new_niclabs.insight.map.GoogleMap)
      * [GoogleMap.map.zoom([zoom])](#niclabs.insight.map.GoogleMap.map.zoom)
      * [GoogleMap.map.center([lat], [lng])](#niclabs.insight.map.GoogleMap.map.center)
      * [event: "map_element_selected"](#niclabs.insight.map.GoogleMap#event_map_element_selected)
  * [callback: insight~handler](#niclabs.insight..handler)
  * [class: insight.Dashboard](#niclabs.insight.Dashboard)
    * [new insight.Dashboard(options)](#new_niclabs.insight.Dashboard)
    * [Dashboard.element](#niclabs.insight.Dashboard.element)
    * [Dashboard.$](#niclabs.insight.Dashboard.$)
    * [Dashboard.config(name)](#niclabs.insight.Dashboard.config)
    * [Dashboard.info([obj])](#niclabs.insight.Dashboard.info)
    * [Dashboard.map([obj])](#niclabs.insight.Dashboard.map)
    * [Dashboard.layer(obj, [activate])](#niclabs.insight.Dashboard.layer)
    * [Dashboard.data([obj])](#niclabs.insight.Dashboard.data)
    * [Dashboard.active([id])](#niclabs.insight.Dashboard.active)
    * [Dashboard.filter(filter)](#niclabs.insight.Dashboard.filter)
    * [Dashboard.clear()](#niclabs.insight.Dashboard.clear)
    * [event: "active_layer_data"](#niclabs.insight.Dashboard#event_active_layer_data)
  * [class: insight.FilterBar](#niclabs.insight.FilterBar)
    * [new insight.FilterBar()](#new_niclabs.insight.FilterBar)
    * [FilterBar.element](#niclabs.insight.FilterBar.element)
    * [FilterBar.$](#niclabs.insight.FilterBar.$)
    * [FilterBar.filter(filter)](#niclabs.insight.FilterBar.filter)
    * [callback: FilterBar~filter](#niclabs.insight.FilterBar..filter)
    * [event: "filter_changed"](#niclabs.insight.FilterBar#event_filter_changed)
  * [class: insight.MapView](#niclabs.insight.MapView)
    * [new insight.MapView(options)](#new_niclabs.insight.MapView)
    * [MapView.element](#niclabs.insight.MapView.element)
    * [MapView.$](#niclabs.insight.MapView.$)
    * [MapView.center([lat], [lng])](#niclabs.insight.MapView.center)
    * [MapView.lat()](#niclabs.insight.MapView.lat)
    * [MapView.lng()](#niclabs.insight.MapView.lng)
    * [MapView.zoom([zoom])](#niclabs.insight.MapView.zoom)
    * [type: MapView.Coordinates](#niclabs.insight.MapView.Coordinates)
    * [event: "map_element_selected"](#niclabs.insight.MapView#event_map_element_selected)
  * [class: insight.InfoView](#niclabs.insight.InfoView)
    * [new insight.InfoView(dashboard, options)](#new_niclabs.insight.InfoView)
    * [InfoView.element](#niclabs.insight.InfoView.element)
    * [InfoView.$](#niclabs.insight.InfoView.$)
    * [InfoView.block(obj)](#niclabs.insight.InfoView.block)

<a name="niclabs.insight.handler"></a>
###insight.handler(name, [kind], [handler])
Register a handler of a specific insight element ('layer', 'visualization', etc.)
to manage the creation, rendering of a specific part of the UI.

Third-party extensions to the insight need only to register their visualization
elements with this function for the dashboard UI to correctly recognize them
TODO: improve this

**Params**

- name `string` - name for the handler to return, register  
- \[kind\] `string` - kind for the handler  
- \[handler\] <code>[handler](#niclabs.insight..handler)</code> - callback to create the element  

**Returns**: [handler](#niclabs.insight..handler) - handler for the registered name  
<a name="niclabs.insight.dashboard"></a>
###insight.dashboard([options])
Get/construct a [Dashboard](#niclabs.insight.Dashboard)

Returns the dashboard for the namespace if options are not provided

**Params**

- \[options\] `Object` - list of configuration options for the dashboard see [Dashboard](#niclabs.insight.Dashboard)  

**Returns**: [Dashboard](#niclabs.insight.Dashboard) - dashboard object  
**Example**  
```javascript
// Create a map with the info view to the left
var dashboard = niclabs.insight.dashboard({
    'anchor': '#dashboard',
    'layout': 'left'
});
```

<a name="niclabs.insight.info(2)"></a>
###insight.info([obj])
Helper method to assign/get the information view to/from the dashboard

**Params**

- \[obj\] `Object` | <code>[InfoView](#niclabs.insight.InfoView)</code> - configuration for the information view or information view object  
  - handler `String` - name of the handler to construct the info view  

**Returns**: [InfoView](#niclabs.insight.InfoView) - the dashboard information view  
**Example**  
```javascript
// Create the info view
niclabs.insight.info({
     handler: 'basic-info-view', // The view constructor
     blocks: [{
         'handler': 'summary-block', // The block constructor
         'id': '#summary',
         'title': 'My Marker Summary',
         'data': { // Default data
             'description': 'This block will show the details of the selected markers'
       },
       ignore: ['layer', 'type', 'src'] // Data elements we don't want on the block
   }]
});
```

<a name="niclabs.insight.layer(2)"></a>
###insight.layer(obj, [activate])
Helper method to add/get a [Layer](#niclabs.insight.layer.Layer) for the dashboard

A layer acts as a link between a source of data and a visualization on the map

- If a number or string is provided as value for obj, the layer with that id is returned
- If a generic object is provided with the handler defined in the 'handler' property, a new layer
is created using the handler and the layer is added to the list of
layers of the dashboard
- If an object is provided without handler, it is assumed to be a Layer object and added to the
layer list as is.

**Params**

- obj `string` | `number` | `Object` | <code>[Layer](#niclabs.insight.layer.Layer)</code> - layer id to get or configuration options for the new layer  
- \[activate=false\] `boolean` - if true, set the layer as the active layer of the dashboard  

**Returns**: `niclabs.insight.info.Layer` - - layer for the provided id  
**Example**  
```javascript
niclabs.insight.layer({
     handler: 'marker-layer',
     data: [{
         'lat': 48.8556,
         'lng': 2.2986,
         'landmark': 'Champ de Mars'
     }, {
         'lat': 48.8583,
         'lng': 2.2944,
         'landmark': 'Eiffel Tower',
         'fun-fact': 'Was built in 1889.'
     }],
     marker: {
         'type': 'image-marker',
         'src': 'antenna.svg'
     }
});
```

<a name="niclabs.insight.map(2)"></a>
###insight.map([obj])
Helper method to assign/get the map view to/from the dashboard

**Params**

- \[obj\] `Object` | <code>[MapView](#niclabs.insight.MapView)</code> - configuration for the map view or map view object  
  - handler `String` - name of the handler to construct the map view  

**Returns**: [MapView](#niclabs.insight.MapView) - the dashboard map view  
**Example**  
```javascript
// Create the map
var map = niclabs.insight.map({
     'handler': 'google-map', // Map constructor
     'lat': 48.8583,
     'lng': 2.2944,
     'zoom': 15
});
```

<a name="niclabs.insight.event"></a>
###insight.event
Very basic event manager for the dashboard

**Example**  
```javascript
// Subscribe to the event
var eventId = niclabs.insight.event.on('hello', function(who) {
     alert("HELLO "+who+"!!!");
});

// Trigger the event
niclabs.insight.event.trigger('hello', "John"); // Shows alert 'HELLO John!!!'

// Unsubscribe
niclabs.insight.event.off('hello', eventId);
```

**Members**

* [insight.event](#niclabs.insight.event)
  * [event.on(event, listener)](#niclabs.insight.event.on)
  * [event.off(event, listener)](#niclabs.insight.event.off)
  * [event.trigger(event, [data])](#niclabs.insight.event.trigger)
  * [callback: event~listener](#niclabs.insight.event..listener)

<a name="niclabs.insight.event.on"></a>
####event.on(event, listener)
Listen for an event. A listener callback can only be assigned once for an event

**Params**

- event `string` - event type  
- listener <code>[listener](#niclabs.insight.event..listener)</code> - callback to process the event  

**Returns**: `number` - id of the listener  
<a name="niclabs.insight.event.off"></a>
####event.off(event, listener)
Stop listening for an event.

**Params**

- event `string` - event type  
- listener <code>[listener](#niclabs.insight.event..listener)</code> | `number` - callback to remove or id of the listener provided by `niclabs.insight.event.on()`  

**Returns**: `boolean` - true if the listener was found and was succesfully removed  
<a name="niclabs.insight.event.trigger"></a>
####event.trigger(event, [data])
Trigger an event

**Params**

- event `string` - event type  
- \[data\] `Object` - data to pass to the callback  

<a name="niclabs.insight.event..listener"></a>
####callback: event~listener
Insight event listener

**Params**

- data `Object` - data for the callback function, dependant on the event  

**Scope**: inner typedef of [event](#niclabs.insight.event)  
**Type**: `function`  
<a name="niclabs.insight.info"></a>
###insight.info
Contains the definitions for the information blocks supported by insight

**Members**

* [insight.info](#niclabs.insight.info)
  * [class: info.Block](#niclabs.insight.info.Block)
    * [new info.Block(dashboard, options)](#new_niclabs.insight.info.Block)
    * [Block.id](#niclabs.insight.info.Block.id)
    * [Block.element](#niclabs.insight.info.Block.element)
    * [Block.$](#niclabs.insight.info.Block.$)
    * [Block.content](#niclabs.insight.info.Block.content)
    * [Block.remove()](#niclabs.insight.info.Block.remove)
    * [Block.data([data])](#niclabs.insight.info.Block.data)
    * [Block.refresh([data])](#niclabs.insight.info.Block.refresh)
  * [class: info.ChartistBlock](#niclabs.insight.info.ChartistBlock)
    * [new info.ChartistBlock(dashboard, constructor, options)](#new_niclabs.insight.info.ChartistBlock)
    * [type: ChartistBlock.Chartist](#niclabs.insight.info.ChartistBlock.Chartist)
  * [class: info.SummaryBlock](#niclabs.insight.info.SummaryBlock)
    * [new info.SummaryBlock(dashboard, options)](#new_niclabs.insight.info.SummaryBlock)

<a name="niclabs.insight.info.Block"></a>
####class: info.Block
**Members**

* [class: info.Block](#niclabs.insight.info.Block)
  * [new info.Block(dashboard, options)](#new_niclabs.insight.info.Block)
  * [Block.id](#niclabs.insight.info.Block.id)
  * [Block.element](#niclabs.insight.info.Block.element)
  * [Block.$](#niclabs.insight.info.Block.$)
  * [Block.content](#niclabs.insight.info.Block.content)
  * [Block.remove()](#niclabs.insight.info.Block.remove)
  * [Block.data([data])](#niclabs.insight.info.Block.data)
  * [Block.refresh([data])](#niclabs.insight.info.Block.refresh)

<a name="new_niclabs.insight.info.Block"></a>
#####new info.Block(dashboard, options)
Construct a information block

**Params**

- dashboard <code>[Dashboard](#niclabs.insight.Dashboard)</code> - dashboard to which the block belongs to  
- options `Object` - configuration options for the block  
  - id `string` - html identifier for the block  
  - \[title\] `string` - title for the block  
  - \[closable=true\] `boolean` - make the block closable  
  - \[movable=true\] `boolean` - make the block movable  
  - \[data\] `Object` - default data for the block  

<a name="niclabs.insight.info.Block.id"></a>
#####Block.id
id of the block

**Type**: `string`  
<a name="niclabs.insight.info.Block.element"></a>
#####Block.element
HTML DOM element for the block container

**Type**: `Element`  
<a name="niclabs.insight.info.Block.$"></a>
#####Block.$
jQuery object for info block container

**Type**: `jQuery`  
<a name="niclabs.insight.info.Block.content"></a>
#####Block.content
jQuery element for the content container

The content of the block is the HTML container that
comes after the block title

**Type**: `jQuery`  
<a name="niclabs.insight.info.Block.remove"></a>
#####Block.remove()
Remove the block from the dashboard.
This method triggers an event to alert all elements of the
dashboard of the block removal

<a name="niclabs.insight.info.Block.data"></a>
#####Block.data([data])
Set/get the data for the block

**Params**

- \[data\] `Object` - data for the block  

**Returns**: `Object` - the current data in the blokc  
<a name="niclabs.insight.info.Block.refresh"></a>
#####Block.refresh([data])
Refresh the block using the provided data

**Params**

- \[data\] `Object` - data to refresh  

<a name="niclabs.insight.info.ChartistBlock"></a>
####class: info.ChartistBlock
**Extends**: `niclabs.insight.info.Block`  
**Members**

* [class: info.ChartistBlock](#niclabs.insight.info.ChartistBlock)
  * [new info.ChartistBlock(dashboard, constructor, options)](#new_niclabs.insight.info.ChartistBlock)
  * [type: ChartistBlock.Chartist](#niclabs.insight.info.ChartistBlock.Chartist)

<a name="new_niclabs.insight.info.ChartistBlock"></a>
#####new info.ChartistBlock(dashboard, constructor, options)
Construct a new chartist information block

For the configuration options see [http://gionkunz.github.io/chartist-js/](http://gionkunz.github.io/chartist-js/)

**Params**

- dashboard <code>[Dashboard](#niclabs.insight.Dashboard)</code> - parent dashboard for the block  
- constructor `Object` - chartist object to use as constructor  
- options `Object` - configuration options for the block  
  - id `string` - html identifier for the block  
  - \[title\] `string` - title for the block  
  - chartist <code>[Chartist](#niclabs.insight.info.ChartistBlock.Chartist)</code> - chartist configuration  
  - \[closable=true\] `boolean` - make the block closable  
  - \[movable=true\] `boolean` - make the block movable  
  - \[data\] `Object` - default data for the summary  

**Extends**: `niclabs.insight.info.Block`  
<a name="niclabs.insight.info.ChartistBlock.Chartist"></a>
#####type: ChartistBlock.Chartist
Configuration options for chartist charts

**Params**

- class `Object` - chartist css class  
- labels `Object` - chart labels  
- \[options\] `Object` - chartist options  
- \[responsiveOptions\] `Object` - chartist responsive options  

**Type**: `Object`  
<a name="niclabs.insight.info.SummaryBlock"></a>
####class: info.SummaryBlock
**Extends**: `niclabs.insight.info.Block`  
**Members**

* [class: info.SummaryBlock](#niclabs.insight.info.SummaryBlock)
  * [new info.SummaryBlock(dashboard, options)](#new_niclabs.insight.info.SummaryBlock)

<a name="new_niclabs.insight.info.SummaryBlock"></a>
#####new info.SummaryBlock(dashboard, options)
Construct a new summary information block
TODO: describe what is a summary information block

**Params**

- dashboard <code>[Dashboard](#niclabs.insight.Dashboard)</code> - parent dashboard for the block  
- options `Object` - configuration options for the block  
  - id `string` - html identifier for the block  
  - \[title\] `string` - title for the block  
  - \[closable=true\] `boolean` - make the block closable  
  - \[movable=true\] `boolean` - make the block movable  
  - \[data\] `Object` - default data for the summary  

**Extends**: `niclabs.insight.info.Block`  
<a name="niclabs.insight.layer"></a>
###insight.layer
Visualization layers for the dashboard

**Members**

* [insight.layer](#niclabs.insight.layer)
  * [class: layer.HeatmapLayer](#niclabs.insight.layer.HeatmapLayer)
    * [new layer.HeatmapLayer(dashboard, options)](#new_niclabs.insight.layer.HeatmapLayer)
    * [HeatmapLayer.layer.draw(data, data[].lat, data[].lng, [data[].description])](#niclabs.insight.layer.HeatmapLayer.layer.draw)
    * [HeatmapLayer.layer.clear()](#niclabs.insight.layer.HeatmapLayer.layer.clear)
    * [HeatmapLayer.layer.filter(fn)](#niclabs.insight.layer.HeatmapLayer.layer.filter)
    * [event: "layer_data"](#niclabs.insight.layer.HeatmapLayer#event_layer_data)
    * [event: "layer_sumary"](#niclabs.insight.layer.HeatmapLayer#event_layer_sumary)
  * [class: layer.Layer](#niclabs.insight.layer.Layer)
    * [new layer.Layer(dashboard, options)](#new_niclabs.insight.layer.Layer)
    * [Layer.id](#niclabs.insight.layer.Layer.id)
    * [Layer.data([obj])](#niclabs.insight.layer.Layer.data)
    * [Layer.load()](#niclabs.insight.layer.Layer.load)
    * [Layer.draw(data)](#niclabs.insight.layer.Layer.draw)
    * [Layer.filter(fn)](#niclabs.insight.layer.Layer.filter)
    * [Layer.clear()](#niclabs.insight.layer.Layer.clear)
    * [event: "layer_data"](#niclabs.insight.layer.Layer#event_layer_data)
    * [event: "layer_sumary"](#niclabs.insight.layer.Layer#event_layer_sumary)
  * [class: layer.MarkerLayer](#niclabs.insight.layer.MarkerLayer)
    * [new layer.MarkerLayer(dashboard, options)](#new_niclabs.insight.layer.MarkerLayer)
    * [MarkerLayer.layer.draw(data, data[].lat, data[].lng, [data[].description])](#niclabs.insight.layer.MarkerLayer.layer.draw)
    * [MarkerLayer.layer.clear()](#niclabs.insight.layer.MarkerLayer.layer.clear)
    * [MarkerLayer.layer.filter(fn)](#niclabs.insight.layer.MarkerLayer.layer.filter)
    * [event: "layer_data"](#niclabs.insight.layer.MarkerLayer#event_layer_data)
    * [event: "layer_sumary"](#niclabs.insight.layer.MarkerLayer#event_layer_sumary)

<a name="niclabs.insight.layer.HeatmapLayer"></a>
####class: layer.HeatmapLayer
**Extends**: `niclabs.insight.layer.Layer`  
**Members**

* [class: layer.HeatmapLayer](#niclabs.insight.layer.HeatmapLayer)
  * [new layer.HeatmapLayer(dashboard, options)](#new_niclabs.insight.layer.HeatmapLayer)
  * [HeatmapLayer.layer.draw(data, data[].lat, data[].lng, [data[].description])](#niclabs.insight.layer.HeatmapLayer.layer.draw)
  * [HeatmapLayer.layer.clear()](#niclabs.insight.layer.HeatmapLayer.layer.clear)
  * [HeatmapLayer.layer.filter(fn)](#niclabs.insight.layer.HeatmapLayer.layer.filter)
  * [event: "layer_data"](#niclabs.insight.layer.HeatmapLayer#event_layer_data)
  * [event: "layer_sumary"](#niclabs.insight.layer.HeatmapLayer#event_layer_sumary)

<a name="new_niclabs.insight.layer.HeatmapLayer"></a>
#####new layer.HeatmapLayer(dashboard, options)
Construct a new heatmap layer

**Params**

- dashboard <code>[Dashboard](#niclabs.insight.Dashboard)</code> - dashboard that this layer belongs to  
- options `Object` - configuration options for the layer  
  - id `string` - identifier for the layer  
  - data `string` | `Array.<Object>` - uri or data array for the layer  
  - \[heatmap\] `Object` - options for the heatmap  

**Extends**: `niclabs.insight.layer.Layer`  
<a name="niclabs.insight.layer.HeatmapLayer.layer.draw"></a>
#####HeatmapLayer.layer.draw(data, data[].lat, data[].lng, [data[].description])
Draw the heatmap according to the internal data on the map

**Params**

- data `Array.<Object>` - data to draw  
- data[].lat `float` - latitude for the marker  
- data[].lng `float` - longitude for the marker  
- \[data[].description\] `string` - description for the marker  

<a name="niclabs.insight.layer.HeatmapLayer.layer.clear"></a>
#####HeatmapLayer.layer.clear()
Clear the heatmap from the map

<a name="niclabs.insight.layer.HeatmapLayer.layer.filter"></a>
#####HeatmapLayer.layer.filter(fn)
Filter the layer according to the provided function.

**Params**

- fn `niclabs.insight.layer.Layer~Filter` - filtering function  

<a name="niclabs.insight.layer.HeatmapLayer#event_layer_data"></a>
#####event: "layer_data"
Event triggered when an update to the layer data (filtering/update) has ocurred

**Properties**

- id `string` - id for the layer to which the data belongs to  
- data `Array.<Object>` - new data array  

**Type**: `object`  
<a name="niclabs.insight.layer.HeatmapLayer#event_layer_sumary"></a>
#####event: "layer_sumary"
Event triggered when an update to the (filtering/update) has ocurred

The event provides summary data for blocks to show

**Properties**

- id `string` - id for the layer to which the data belongs to  
- data `Array.<Object>` - new data array  

**Type**: `object`  
<a name="niclabs.insight.layer.Layer"></a>
####class: layer.Layer
**Members**

* [class: layer.Layer](#niclabs.insight.layer.Layer)
  * [new layer.Layer(dashboard, options)](#new_niclabs.insight.layer.Layer)
  * [Layer.id](#niclabs.insight.layer.Layer.id)
  * [Layer.data([obj])](#niclabs.insight.layer.Layer.data)
  * [Layer.load()](#niclabs.insight.layer.Layer.load)
  * [Layer.draw(data)](#niclabs.insight.layer.Layer.draw)
  * [Layer.filter(fn)](#niclabs.insight.layer.Layer.filter)
  * [Layer.clear()](#niclabs.insight.layer.Layer.clear)
  * [event: "layer_data"](#niclabs.insight.layer.Layer#event_layer_data)
  * [event: "layer_sumary"](#niclabs.insight.layer.Layer#event_layer_sumary)

<a name="new_niclabs.insight.layer.Layer"></a>
#####new layer.Layer(dashboard, options)
Construct a layer

A layer provides a link between a data source and a visualization on the map.

**Params**

- dashboard <code>[Dashboard](#niclabs.insight.Dashboard)</code> - dashboard that this layer belongs to  
- options `Object` - configuration options for the layer  
  - id `string` - identifier for the layer  
  - data `string` | `Array.<Object>` - uri or data array for the layer  
  - \[summary\] `Object` | `function` - summary data  

<a name="niclabs.insight.layer.Layer.id"></a>
#####Layer.id
id of the layer

**Type**: `string`  
<a name="niclabs.insight.layer.Layer.data"></a>
#####Layer.data([obj])
Set/get the data for the layer

If a new source for the data is provided, this method updates the internal
data and reloads the layer by calling [load](#niclabs.insight.layer.Layer.load)

**Params**

- \[obj\] `string` | `Array.<Object>` - optional new data source or data array for the layer  

**Returns**: `string` | `Array.<Object>` - data source for the layer if the data has not been loaded yet or object array if the
 data has been loaded  
<a name="niclabs.insight.layer.Layer.load"></a>
#####Layer.load()
Load the data from the layer and redraw

If data provided as configuration to the layer is a URL, this methods loads the data from the URL and
redraws the layer (invoking [clear](#niclabs.insight.layer.Layer.clear) and [draw](#niclabs.insight.layer.Layer.draw))
when the content is available

<a name="niclabs.insight.layer.Layer.draw"></a>
#####Layer.draw(data)
Draw the layer on the map.

This method must be overriden by the implementing layers

**Params**

- data `Array.<Object>` - data to use for drawing the layer  

<a name="niclabs.insight.layer.Layer.filter"></a>
#####Layer.filter(fn)
Filter the layer according to the provided function.

This method must be overriden by the implementing layers

**Params**

- fn `niclabs.insight.layer.Layer~Filter` - filtering function  

<a name="niclabs.insight.layer.Layer.clear"></a>
#####Layer.clear()
Clear the layer changes on the map. This method must be
overriden by implementing layers

<a name="niclabs.insight.layer.Layer#event_layer_data"></a>
#####event: "layer_data"
Event triggered when an update to the layer data (filtering/update) has ocurred

**Properties**

- id `string` - id for the layer to which the data belongs to  
- data `Array.<Object>` - new data array  

**Type**: `object`  
<a name="niclabs.insight.layer.Layer#event_layer_sumary"></a>
#####event: "layer_sumary"
Event triggered when an update to the (filtering/update) has ocurred

The event provides summary data for blocks to show

**Properties**

- id `string` - id for the layer to which the data belongs to  
- data `Array.<Object>` - new data array  

**Type**: `object`  
<a name="niclabs.insight.layer.MarkerLayer"></a>
####class: layer.MarkerLayer
**Extends**: `niclabs.insight.layer.Layer`  
**Members**

* [class: layer.MarkerLayer](#niclabs.insight.layer.MarkerLayer)
  * [new layer.MarkerLayer(dashboard, options)](#new_niclabs.insight.layer.MarkerLayer)
  * [MarkerLayer.layer.draw(data, data[].lat, data[].lng, [data[].description])](#niclabs.insight.layer.MarkerLayer.layer.draw)
  * [MarkerLayer.layer.clear()](#niclabs.insight.layer.MarkerLayer.layer.clear)
  * [MarkerLayer.layer.filter(fn)](#niclabs.insight.layer.MarkerLayer.layer.filter)
  * [event: "layer_data"](#niclabs.insight.layer.MarkerLayer#event_layer_data)
  * [event: "layer_sumary"](#niclabs.insight.layer.MarkerLayer#event_layer_sumary)

<a name="new_niclabs.insight.layer.MarkerLayer"></a>
#####new layer.MarkerLayer(dashboard, options)
Construct a new marker layer

**Params**

- dashboard <code>[Dashboard](#niclabs.insight.Dashboard)</code> - dashboard that this layer belongs to  
- options `Object` - configuration options for the layer  
  - id `string` - identifier for the layer  
  - data `string` | `Array.<Object>` - uri or data array for the layer  

**Extends**: `niclabs.insight.layer.Layer`  
<a name="niclabs.insight.layer.MarkerLayer.layer.draw"></a>
#####MarkerLayer.layer.draw(data, data[].lat, data[].lng, [data[].description])
Draw the markers according to the internal data on the map

**Params**

- data `Array.<Object>` - data to draw  
- data[].lat `float` - latitude for the marker  
- data[].lng `float` - longitude for the marker  
- \[data[].description\] `string` - description for the marker  

<a name="niclabs.insight.layer.MarkerLayer.layer.clear"></a>
#####MarkerLayer.layer.clear()
Clear the markers from the map

<a name="niclabs.insight.layer.MarkerLayer.layer.filter"></a>
#####MarkerLayer.layer.filter(fn)
Filter the layer according to the provided function.

**Params**

- fn `niclabs.insight.layer.Layer~Filter` - filtering function  

<a name="niclabs.insight.layer.MarkerLayer#event_layer_data"></a>
#####event: "layer_data"
Event triggered when an update to the layer data (filtering/update) has ocurred

**Properties**

- id `string` - id for the layer to which the data belongs to  
- data `Array.<Object>` - new data array  

**Type**: `object`  
<a name="niclabs.insight.layer.MarkerLayer#event_layer_sumary"></a>
#####event: "layer_sumary"
Event triggered when an update to the (filtering/update) has ocurred

The event provides summary data for blocks to show

**Properties**

- id `string` - id for the layer to which the data belongs to  
- data `Array.<Object>` - new data array  

**Type**: `object`  
<a name="niclabs.insight.map"></a>
###insight.map
Map compatibility for the insight dashboard

**Members**

* [insight.map](#niclabs.insight.map)
  * [map.heatmap](#niclabs.insight.map.heatmap)
    * [class: heatmap.Heatmap](#niclabs.insight.map.heatmap.Heatmap)
      * [new heatmap.Heatmap(dashboard, options)](#new_niclabs.insight.map.heatmap.Heatmap)
      * [Heatmap.map](#niclabs.insight.map.heatmap.Heatmap.map)
      * [Heatmap.layer](#niclabs.insight.map.heatmap.Heatmap.layer)
    * [class: heatmap.PointHeatmap](#niclabs.insight.map.heatmap.PointHeatmap)
      * [new heatmap.PointHeatmap(dashboard, options)](#new_niclabs.insight.map.heatmap.PointHeatmap)
      * [PointHeatmap.self.clear()](#niclabs.insight.map.heatmap.PointHeatmap.self.clear)
      * [type: PointHeatmap.Data](#niclabs.insight.map.heatmap.PointHeatmap.Data)
  * [map.marker](#niclabs.insight.map.marker)
    * [class: marker.SimpleMarker](#niclabs.insight.map.marker.SimpleMarker)
      * [new marker.SimpleMarker(dashboard, options)](#new_niclabs.insight.map.marker.SimpleMarker)
    * [class: marker.ImageMarker](#niclabs.insight.map.marker.ImageMarker)
      * [new marker.ImageMarker(dashboard, options)](#new_niclabs.insight.map.marker.ImageMarker)
    * [class: marker.Marker](#niclabs.insight.map.marker.Marker)
      * [new marker.Marker(dashboard, options)](#new_niclabs.insight.map.marker.Marker)
      * [Marker.map](#niclabs.insight.map.marker.Marker.map)
      * [Marker.layer](#niclabs.insight.map.marker.Marker.layer)
      * [Marker.clear()](#niclabs.insight.map.marker.Marker.clear)
      * [Marker.marker()](#niclabs.insight.map.marker.Marker.marker)
      * [Marker.clickable([activate])](#niclabs.insight.map.marker.Marker.clickable)
      * [Marker.clear()](#niclabs.insight.map.marker.Marker.clear)
      * [Marker.visible([visible])](#niclabs.insight.map.marker.Marker.visible)
    * [class: marker.SimpleMarker](#niclabs.insight.map.marker.SimpleMarker)
      * [new marker.SimpleMarker(dashboard, options)](#new_niclabs.insight.map.marker.SimpleMarker)
  * [class: map.GoogleMap](#niclabs.insight.map.GoogleMap)
    * [new map.GoogleMap(options)](#new_niclabs.insight.map.GoogleMap)
    * [GoogleMap.map.zoom([zoom])](#niclabs.insight.map.GoogleMap.map.zoom)
    * [GoogleMap.map.center([lat], [lng])](#niclabs.insight.map.GoogleMap.map.center)
    * [event: "map_element_selected"](#niclabs.insight.map.GoogleMap#event_map_element_selected)

<a name="niclabs.insight.map.heatmap"></a>
####map.heatmap
Tools for drawing heatmaps on the map

**Members**

* [map.heatmap](#niclabs.insight.map.heatmap)
  * [class: heatmap.Heatmap](#niclabs.insight.map.heatmap.Heatmap)
    * [new heatmap.Heatmap(dashboard, options)](#new_niclabs.insight.map.heatmap.Heatmap)
    * [Heatmap.map](#niclabs.insight.map.heatmap.Heatmap.map)
    * [Heatmap.layer](#niclabs.insight.map.heatmap.Heatmap.layer)
  * [class: heatmap.PointHeatmap](#niclabs.insight.map.heatmap.PointHeatmap)
    * [new heatmap.PointHeatmap(dashboard, options)](#new_niclabs.insight.map.heatmap.PointHeatmap)
    * [PointHeatmap.self.clear()](#niclabs.insight.map.heatmap.PointHeatmap.self.clear)
    * [type: PointHeatmap.Data](#niclabs.insight.map.heatmap.PointHeatmap.Data)

<a name="niclabs.insight.map.heatmap.Heatmap"></a>
#####class: heatmap.Heatmap
**Members**

* [class: heatmap.Heatmap](#niclabs.insight.map.heatmap.Heatmap)
  * [new heatmap.Heatmap(dashboard, options)](#new_niclabs.insight.map.heatmap.Heatmap)
  * [Heatmap.map](#niclabs.insight.map.heatmap.Heatmap.map)
  * [Heatmap.layer](#niclabs.insight.map.heatmap.Heatmap.layer)

<a name="new_niclabs.insight.map.heatmap.Heatmap"></a>
######new heatmap.Heatmap(dashboard, options)
Construct a heatmap over the map

**Params**

- dashboard <code>[Dashboard](#niclabs.insight.Dashboard)</code> - dashboard that this marker belongs to  
- options `Object` - configuration options for the heatmap  

<a name="niclabs.insight.map.heatmap.Heatmap.map"></a>
######Heatmap.map
Map view where the heatmap belongs to

**Type**: [MapView](#niclabs.insight.MapView)  
<a name="niclabs.insight.map.heatmap.Heatmap.layer"></a>
######Heatmap.layer
Layer to which the heatmap belongs to

**Type**: [Layer](#niclabs.insight.layer.Layer)  
<a name="niclabs.insight.map.heatmap.PointHeatmap"></a>
#####class: heatmap.PointHeatmap
**Members**

* [class: heatmap.PointHeatmap](#niclabs.insight.map.heatmap.PointHeatmap)
  * [new heatmap.PointHeatmap(dashboard, options)](#new_niclabs.insight.map.heatmap.PointHeatmap)
  * [PointHeatmap.self.clear()](#niclabs.insight.map.heatmap.PointHeatmap.self.clear)
  * [type: PointHeatmap.Data](#niclabs.insight.map.heatmap.PointHeatmap.Data)

<a name="new_niclabs.insight.map.heatmap.PointHeatmap"></a>
######new heatmap.PointHeatmap(dashboard, options)
Draw a point base heatmap over the map

In a point based heatmap, each data point is a location with an optional
weight. A heatmap point is drawn for each location with the provided configuration

**Params**

- dashboard <code>[Dashboard](#niclabs.insight.Dashboard)</code> - dashboard that this marker belongs to  
- options `Object` - configuration options for the heatmap  
  - data <code>[Array.&lt;Data&gt;](#niclabs.insight.map.heatmap.PointHeatmap.Data)</code> - array of points to draw the heatmap  
  - dissipating `boolean` - Specifies whether heatmaps dissipate on zoom. When dissipating is false the radius of influence increases with zoom level to ensure that the color intensity is preserved at any given geographic location. Defaults to false.  
  - gradient `Array.<string>` - The color gradient of the heatmap, specified as an array of CSS color strings. All CSS3 colors — including RGBA — are supported except for extended named colors and HSL(A) values.  
  - radius `integer` - The radius of influence for each data point, in pixels.  
  - opacity: `float` - The opacity of the heatmap, expressed as a number between 0 and 1.  

<a name="niclabs.insight.map.heatmap.PointHeatmap.self.clear"></a>
######PointHeatmap.self.clear()
Clear the map

<a name="niclabs.insight.map.heatmap.PointHeatmap.Data"></a>
######type: PointHeatmap.Data
Data point for PointHeatmap

**Params**

- lat `float` - latitude for the heatmap point  
- lng `float` - longitude for the heatmap point  
- \[weight\] `float` - weight for the heatmap point  

**Type**: `Object`  
<a name="niclabs.insight.map.marker"></a>
####map.marker
Collection of markers available for drawing on the map

**Members**

* [map.marker](#niclabs.insight.map.marker)
  * [class: marker.SimpleMarker](#niclabs.insight.map.marker.SimpleMarker)
    * [new marker.SimpleMarker(dashboard, options)](#new_niclabs.insight.map.marker.SimpleMarker)
  * [class: marker.ImageMarker](#niclabs.insight.map.marker.ImageMarker)
    * [new marker.ImageMarker(dashboard, options)](#new_niclabs.insight.map.marker.ImageMarker)
  * [class: marker.Marker](#niclabs.insight.map.marker.Marker)
    * [new marker.Marker(dashboard, options)](#new_niclabs.insight.map.marker.Marker)
    * [Marker.map](#niclabs.insight.map.marker.Marker.map)
    * [Marker.layer](#niclabs.insight.map.marker.Marker.layer)
    * [Marker.clear()](#niclabs.insight.map.marker.Marker.clear)
    * [Marker.marker()](#niclabs.insight.map.marker.Marker.marker)
    * [Marker.clickable([activate])](#niclabs.insight.map.marker.Marker.clickable)
    * [Marker.clear()](#niclabs.insight.map.marker.Marker.clear)
    * [Marker.visible([visible])](#niclabs.insight.map.marker.Marker.visible)
  * [class: marker.SimpleMarker](#niclabs.insight.map.marker.SimpleMarker)
    * [new marker.SimpleMarker(dashboard, options)](#new_niclabs.insight.map.marker.SimpleMarker)

<a name="niclabs.insight.map.marker.SimpleMarker"></a>
#####class: marker.SimpleMarker
**Extends**: `niclabs.insight.map.marker.Marker`  
**Members**

* [class: marker.SimpleMarker](#niclabs.insight.map.marker.SimpleMarker)
  * [new marker.SimpleMarker(dashboard, options)](#new_niclabs.insight.map.marker.SimpleMarker)

<a name="new_niclabs.insight.map.marker.SimpleMarker"></a>
######new marker.SimpleMarker(dashboard, options)
Constructor for circle markers

Circle markers are drawn in the map as circular waypoints

**Params**

- dashboard <code>[Dashboard](#niclabs.insight.Dashboard)</code> - dashboard that this marker belongs to  
- options `Object` - configuration options for the layer  
  - layer `string` - identifier for the layer that this marker belongs to  

**Extends**: `niclabs.insight.map.marker.Marker`  
<a name="niclabs.insight.map.marker.ImageMarker"></a>
#####class: marker.ImageMarker
**Extends**: `niclabs.insight.map.marker.Marker`  
**Members**

* [class: marker.ImageMarker](#niclabs.insight.map.marker.ImageMarker)
  * [new marker.ImageMarker(dashboard, options)](#new_niclabs.insight.map.marker.ImageMarker)

<a name="new_niclabs.insight.map.marker.ImageMarker"></a>
######new marker.ImageMarker(dashboard, options)
Constructor for an image marker

An image marker includes an image for each waypoint

**Params**

- dashboard <code>[Dashboard](#niclabs.insight.Dashboard)</code> - dashboard that this marker belongs to  
- options `Object` - configuration options for the layer  
  - layer `string` - identifier for the layer that this marker belongs to  

**Extends**: `niclabs.insight.map.marker.Marker`  
<a name="niclabs.insight.map.marker.Marker"></a>
#####class: marker.Marker
**Members**

* [class: marker.Marker](#niclabs.insight.map.marker.Marker)
  * [new marker.Marker(dashboard, options)](#new_niclabs.insight.map.marker.Marker)
  * [Marker.map](#niclabs.insight.map.marker.Marker.map)
  * [Marker.layer](#niclabs.insight.map.marker.Marker.layer)
  * [Marker.clear()](#niclabs.insight.map.marker.Marker.clear)
  * [Marker.marker()](#niclabs.insight.map.marker.Marker.marker)
  * [Marker.clickable([activate])](#niclabs.insight.map.marker.Marker.clickable)
  * [Marker.clear()](#niclabs.insight.map.marker.Marker.clear)
  * [Marker.visible([visible])](#niclabs.insight.map.marker.Marker.visible)

<a name="new_niclabs.insight.map.marker.Marker"></a>
######new marker.Marker(dashboard, options)
Construct a new marker

**Params**

- dashboard <code>[Dashboard](#niclabs.insight.Dashboard)</code> - dashboard that this marker belongs to  
- options `Object` - configuration options for the layer  
  - layer `string` - identifier for the layer that this marker belongs to  

<a name="niclabs.insight.map.marker.Marker.map"></a>
######Marker.map
Map view where the map belongs to

**Type**: [MapView](#niclabs.insight.MapView)  
<a name="niclabs.insight.map.marker.Marker.layer"></a>
######Marker.layer
Layer to which the marker belongs to

**Type**: [Layer](#niclabs.insight.layer.Layer)  
<a name="niclabs.insight.map.marker.Marker.clear"></a>
######Marker.clear()
Clear the heatmap from the map

<a name="niclabs.insight.map.marker.Marker.marker"></a>
######Marker.marker()
{'fraction_non_alphanumeric': 0.16732017671775928, 'fraction_numerical': 0.0011557946358166716, 'mean_word_length': 4.593836858006043, 'pattern_counts': {'":': 0, '<': 354, '<?xml version=': 0, '>': 354, 'https://': 0, 'lorem ipsum': 0, 'www.': 6, 'xml': 0}, 'pii_count': 0, 'substrings_counts': 0, 'word_list_counts': {'cursed_substrings.json': 0, 'profanity_word_list.json': 0, 'sexual_word_list.json': 0, 'zh_pornsignals.json': 0}}
{'dir': 'git-commits-cleaned', 'id': '5223770', 'n_tokens_mistral': 32415, 'n_tokens_neox': 31158, 'n_words': 5416}