CartoDB/cartodb20

View on GitHub
lib/assets/javascripts/builder/editor/layers/basemap-content-views/basemap-mosaic-view.js

Summary

Maintainability
A
1 hr
Test Coverage
var template = require('builder/components/mosaic/mosaic.tpl');
var MosaicView = require('builder/components/mosaic/mosaic-view');
var MosaicItemModel = require('builder/components/mosaic/mosaic-item-model');
var BasemapMosaicItemView = require('./basemap-mosaic-item-view');
var MosaicAddItemView = require('./basemap-mosaic-add-item-view');

module.exports = MosaicView.extend({

  initialize: function (opts) {
    if (!opts.layerDefinitionsCollection) throw new Error('layerDefinitionsCollection is required');
    if (!opts.basemapsCollection) throw new Error('basemapsCollection is required');
    if (!opts.customBaselayersCollection) throw new Error('customBaselayersCollection is required');
    if (!opts.modals) throw new Error('modals is required');

    this._layerDefinitionsCollection = opts.layerDefinitionsCollection;
    this._basemapsCollection = opts.basemapsCollection;
    this._customBaselayersCollection = opts.customBaselayersCollection;
    this._modals = opts.modals;
    this._disabled = opts.disabled;
    this._currentTab = opts.currentTab;
  },

  render: function () {
    this.clearSubViews();
    this.$el.html(template());
    this._renderList();
    this._createAddItem();
    return this;
  },

  _createItem: function (mdl) {
    var view = new BasemapMosaicItemView({
      model: mdl,
      disabled: this._disabled,
      basemapsCollection: this._basemapsCollection
    });
    this.$('.js-mosaic').append(view.render().el);
    this.addView(view);
  },

  _createAddItem: function () {
    var view = new MosaicAddItemView({
      model: new MosaicItemModel({
        label: 'Add',
        val: 'add',
        template: function () {
          return '<div class="Mosaic-button">+</div>';
        }
      }),
      layerDefinitionsCollection: this._layerDefinitionsCollection,
      basemapsCollection: this._basemapsCollection,
      customBaselayersCollection: this._customBaselayersCollection,
      mosaicModel: this.model,
      modals: this._modals,
      currentTab: this._currentTab
    });
    this.$('.js-mosaic').append(view.render().el);
    this.addView(view);
  }

});