UNPKG

@spalger/kibana

Version:

Kibana is an open source (Apache Licensed), browser based analytics and search dashboard for Elasticsearch. Kibana is a snap to setup and start using. Kibana strives to be easy to get started with, while also being flexible and powerful, just like Elastic

129 lines (111 loc) 3.35 kB
define(function (require) { return function TileMapFactory(Private) { var d3 = require('d3'); var _ = require('lodash'); var $ = require('jquery'); var Chart = Private(require('ui/vislib/visualizations/_chart')); var TileMapMap = Private(require('ui/vislib/visualizations/_map')); /** * Tile Map Visualization: renders maps * * @class TileMap * @constructor * @extends Chart * @param handler {Object} Reference to the Handler Class Constructor * @param chartEl {HTMLElement} HTML element to which the map will be appended * @param chartData {Object} Elasticsearch query results for this map */ _.class(TileMap).inherits(Chart); function TileMap(handler, chartEl, chartData) { if (!(this instanceof TileMap)) { return new TileMap(handler, chartEl, chartData); } TileMap.Super.apply(this, arguments); // track the map objects this.maps = []; this._chartData = chartData || {}; _.assign(this, this._chartData); this._appendGeoExtents(); } /** * Draws tile map, called on chart render * * @method draw * @return {Function} - function to add a map to a selection */ TileMap.prototype.draw = function () { var self = this; // clean up old maps self.destroy(); return function (selection) { selection.each(function () { self._appendMap(this); }); }; }; /** * Invalidate the size of the map, so that leaflet will resize to fit. * then moves to center * * @method resizeArea * @return {undefined} */ TileMap.prototype.resizeArea = function () { this.maps.forEach(function (map) { map.updateSize(); }); }; /** * clean up the maps * * @method destroy * @return {undefined} */ TileMap.prototype.destroy = function () { this.maps = this.maps.filter(function (map) { map.destroy(); }); }; /** * Adds allmin and allmax properties to geoJson data * * @method _appendMap * @param selection {Object} d3 selection */ TileMap.prototype._appendGeoExtents = function () { // add allmin and allmax to geoJson var geoMinMax = this.handler.data.getGeoExtents(); this.geoJson.properties.allmin = geoMinMax.min; this.geoJson.properties.allmax = geoMinMax.max; }; /** * Renders map * * @method _appendMap * @param selection {Object} d3 selection */ TileMap.prototype._appendMap = function (selection) { var container = $(selection).addClass('tilemap'); var map = new TileMapMap(container, this._chartData, { // center: this._attr.mapCenter, // zoom: this._attr.mapZoom, events: this.events, markerType: this._attr.mapType, tooltipFormatter: this.tooltipFormatter, valueFormatter: this.valueFormatter, attr: this._attr }); // add title for splits if (this.title) { map.addTitle(this.title); } // add fit to bounds control if (_.get(this.geoJson, 'features.length') > 0) { map.addFitControl(); map.addBoundingControl(); } this.maps.push(map); }; return TileMap; }; });