(function() { cdb.vis.Overlay.register('logo', function(data, vis) { }); cdb.vis.Overlay.register('slides_controller', function(data, vis) { var slides_controller = new cdb.geo.ui.SlidesController({ transitions: data.transitions, visualization: vis }); return slides_controller.render(); }); cdb.vis.Overlay.register('mobile', function(data, vis) { var template = cdb.core.Template.compile( data.template || '\
\
\
\ \ \
\
\ \
\
\
    \
    \
    \
    \ \
    \ ', data.templateType || 'mustache' ); var mobile = new cdb.geo.ui.Mobile({ template: template, mapView: vis.mapView, overlays: data.overlays, transitions: data.transitions, slides_data: data.slides, visualization: vis, layerView: data.layerView, visibility_options: data.options, torqueLayer: data.torqueLayer, map: data.map }); return mobile.render(); }); cdb.vis.Overlay.register('image', function(data, vis) { var options = data.options; var template = cdb.core.Template.compile( data.template || '\
    \
    {{{ content }}}
    \
    ', data.templateType || 'mustache' ); var widget = new cdb.geo.ui.Image({ model: new cdb.core.Model(options), template: template }); return widget.render(); }); cdb.vis.Overlay.register('text', function(data, vis) { var options = data.options; var template = cdb.core.Template.compile( data.template || '\
    \
    {{{ text }}}
    \
    ', data.templateType || 'mustache' ); var widget = new cdb.geo.ui.Text({ model: new cdb.core.Model(options), template: template, className: "cartodb-overlay overlay-text " + options.device }); return widget.render(); }); cdb.vis.Overlay.register('annotation', function(data, vis) { var options = data.options; var template = cdb.core.Template.compile( data.template || '\
    \
    {{{ text }}}
    \
    \
    ', data.templateType || 'mustache' ); var options = data.options; var widget = new cdb.geo.ui.Annotation({ className: "cartodb-overlay overlay-annotation " + options.device, template: template, mapView: vis.mapView, device: options.device, text: options.extra.rendered_text, minZoom: options.style["min-zoom"], maxZoom: options.style["max-zoom"], latlng: options.extra.latlng, style: options.style }); return widget.render(); }); cdb.vis.Overlay.register('zoom_info', function(data, vis) { //console.log("placeholder for the zoom_info overlay"); }); cdb.vis.Overlay.register('header', function(data, vis) { var options = data.options; var template = cdb.core.Template.compile( data.template || '\
    \
    {{{ title }}}
    \
    {{{ description }}}
    \
    ', data.templateType || 'mustache' ); var widget = new cdb.geo.ui.Header({ model: new cdb.core.Model(options), transitions: data.transitions, slides: vis.slides, template: template }); return widget.render(); }); // map zoom control cdb.vis.Overlay.register('zoom', function(data, vis) { if(!data.template) { vis.trigger('error', 'zoom template is empty') return; } var zoom = new cdb.geo.ui.Zoom({ model: data.map, template: cdb.core.Template.compile(data.template) }); return zoom.render(); }); // Tiles loader cdb.vis.Overlay.register('loader', function(data) { var tilesLoader = new cdb.geo.ui.TilesLoader({ template: cdb.core.Template.compile(data.template) }); return tilesLoader.render(); }); cdb.vis.Overlay.register('time_slider', function(data, viz) { var slider = new cdb.geo.ui.TimeSlider(data); return slider.render(); }); // Header to show informtion (title and description) cdb.vis.Overlay.register('_header', function(data, vis) { var MAX_SHORT_DESCRIPTION_LENGTH = 100; // Add the complete url for facebook and twitter if (location.href) { data.share_url = encodeURIComponent(location.href); } else { data.share_url = data.url; } var template = cdb.core.Template.compile( data.template || "\ {{#title}}\

    \ {{#url}}\ {{title}}\ {{/url}}\ {{^url}}\ {{title}}\ {{/url}}\

    \ {{/title}}\ {{#description}}

    {{{description}}}

    {{/description}}\ {{#mobile_shareable}}\
    \ F\ T\
    \ {{/mobile_shareable}}\ ", data.templateType || 'mustache' ); function truncate(s, length) { return s.substr(0, length-1) + (s.length > length ? '…' : ''); } var title = data.map.get('title'); var description = data.map.get('description'); var facebook_title = title + ": " + description; var twitter_title; if (title && description) { twitter_title = truncate(title + ": " + description, 112) + " %23map " } else if (title) { twitter_title = truncate(title, 112) + " %23map" } else if (description){ twitter_title = truncate(description, 112) + " %23map" } else { twitter_title = "%23map" } var shareable = (data.shareable == "false" || !data.shareable) ? null : data.shareable; var mobile_shareable = shareable; mobile_shareable = mobile_shareable && (/Android|webOS|iPhone|iPad|iPod|BlackBerry|IEMobile|Opera Mini/i.test(navigator.userAgent)); var header = new cdb.geo.ui.Header({ title: title, description: description, facebook_title: facebook_title, twitter_title: twitter_title, url: data.url, share_url: data.share_url, mobile_shareable: mobile_shareable, shareable: shareable && !mobile_shareable, template: template }); return header.render(); }); // infowindow cdb.vis.Overlay.register('infowindow', function(data, vis) { if (_.size(data.fields) == 0) { return null; } var infowindowModel = new cdb.geo.ui.InfowindowModel({ template: data.template, template_type: data.templateType, alternative_names: data.alternative_names, fields: data.fields, template_name: data.template_name }); var infowindow = new cdb.geo.ui.Infowindow({ model: infowindowModel, mapView: vis.mapView, template: data.template }); return infowindow; }); // layer_selector cdb.vis.Overlay.register('layer_selector', function(data, vis) { var options = data.options; //if (!options.display) return; var template = cdb.core.Template.compile( data.template || '\ Visible layers
    \ ', data.templateType || 'underscore' ); var dropdown_template = cdb.core.Template.compile( data.template || '\
    \ ', data.templateType || 'underscore' ); var layerSelector = new cdb.geo.ui.LayerSelector({ model: new cdb.core.Model(options), mapView: vis.mapView, template: template, dropdown_template: dropdown_template, layer_names: data.layer_names }); var timeSlider = vis.timeSlider; if (timeSlider) { layerSelector.bind('change:visible', function(visible, order, layer) { if (layer.get('type') === 'torque') { timeSlider[visible ? 'show': 'hide'](); } }); } if (vis.legends) { layerSelector.bind('change:visible', function(visible, order, layer) { if (layer.get('type') === 'layergroup' || layer.get('type') === 'torque') { var legend = vis.legends && vis.legends.getLegendByIndex(order); if (legend) { legend[visible ? 'show': 'hide'](); } } }); } return layerSelector.render(); }); // fullscreen cdb.vis.Overlay.register('fullscreen', function(data, vis) { var options = data.options; options.allowWheelOnFullscreen = false; var template = cdb.core.Template.compile( data.template || '', data.templateType || 'mustache' ); var fullscreen = new cdb.ui.common.FullScreen({ doc: "#map > div", model: new cdb.core.Model(options), mapView: vis.mapView, template: template }); return fullscreen.render(); }); // share content cdb.vis.Overlay.register('share', function(data, vis) { var options = data.options; var template = cdb.core.Template.compile( data.template || '', data.templateType || 'mustache' ); var widget = new cdb.geo.ui.Share({ model: new cdb.core.Model(options), vis: vis, map: vis.map, template: template }); widget.createDialog(); return widget.render(); }); // search content cdb.vis.Overlay.register('search', function(data, vis) { var template = cdb.core.Template.compile( data.template || '\
    \ \ \ \
    \ ', data.templateType || 'mustache' ); var search = new cdb.geo.ui.Search( _.extend(data, { template: template, mapView: vis.mapView, model: vis.map }) ); return search.render(); }); // tooltip cdb.vis.Overlay.register('tooltip', function(data, vis) { if (!data.layer && vis.getLayers().length <= 1) { throw new Error("layer is null"); } data.layer = data.layer || vis.getLayers()[1]; data.layer.setInteraction(true); data.mapView = vis.mapView; return new cdb.geo.ui.Tooltip(data); }); cdb.vis.Overlay.register('infobox', function(data, vis) { var layer; var layers = vis.getLayers(); if (!data.layer) { if(layers.length > 1) { layer = layers[1]; } data.layer = layer; } if(!data.layer) { throw new Error("layer is null"); } data.layer.setInteraction(true); var infobox = new cdb.geo.ui.InfoBox(data); return infobox; }); })();