CartoDB/cartodb20

View on GitHub
lib/assets/javascripts/builder/data/overlays-definition-collection.js

Summary

Maintainability
B
5 hrs
Test Coverage
var Backbone = require('backbone');

module.exports = Backbone.Collection.extend({
  initialize: function (models, opts) {
    if (!opts.configModel) throw new Error('configModel is required');
    if (!opts.visId) throw new Error('visId is required');

    this._configModel = opts.configModel;
    this._visId = opts.visId;
  },

  url: function () {
    var baseUrl = this._configModel.get('base_url');
    var version = this._configModel.urlVersion('overlays');
    return baseUrl + '/api/' + version + '/viz/' + this._visId + '/overlays';
  },

  hasFetched: function () {
    return this.length > 0;
  },

  removeOverlay: function (type) {
    var overlay = this.findWhere({type: type});
    overlay && overlay.destroy();
  },

  createOverlay: function (type) {
    var types = {
      'fullscreen': this._createFullScreenOverlay,
      'layer_selector': this._createLayerSelectorOverlay,
      'search': this._createSearchOverlay,
      'zoom': this._createZoomOverlay,
      'logo': this._createLogoOverlay
    };
    var fn = types[type];
    fn && fn.call(this);
  },

  _createZoomOverlay: function () {
    var options = {
      type: 'zoom',
      order: 6,
      display: true,
      x: 20,
      y: 20
    };
    this.create(options);
  },

  _createLogoOverlay: function () {
    var options = {
      type: 'logo',
      order: 10,
      display: true,
      x: 10,
      y: 40
    };
    this.create(options);
  },

  _createSearchOverlay: function () {
    var options = {
      type: 'search',
      order: 3,
      display: true,
      x: 60,
      y: 20
    };
    this.create(options);
  },

  _createFullScreenOverlay: function () {
    var options = {
      type: 'fullscreen',
      order: 7,
      display: true,
      x: 20,
      y: 172
    };

    this.create(options);
  }
});