cartodb/lib/assets/javascripts/builder/editor/layers/basemap-content-views/basemaps-collection.js
2020-06-15 10:58:47 +08:00

79 lines
1.8 KiB
JavaScript
Executable File

var Backbone = require('backbone');
var BasemapModel = require('./basemap-model');
var _ = require('underscore');
/*
* Basemap collection, extends Mosaic collection
*/
module.exports = Backbone.Collection.extend({
model: BasemapModel,
initialize: function () {
this._initBinds();
},
_initBinds: function () {
this.bind('change:selected', this._onSelectedChange, this);
},
_onSelectedChange: function (changedModel, isSelected) {
if (isSelected) {
this.each(function (m) {
if (m.cid !== changedModel.cid && m.get('selected')) {
m.set('selected', false);
}
});
}
},
findByCategory: function (category) {
return this.where({ category: category });
},
getDefaultCategory: function () {
var defaultCategory = this.findWhere({ default: true });
defaultCategory = defaultCategory || this.first();
return defaultCategory.get('category');
},
getCategories: function () {
var categories = this.chain()
.map(function (model) { return model.get('category'); })
.concat('Custom')
.concat('NASA')
.concat('TileJSON')
.concat('Mapbox')
.concat('WMS')
.uniq()
.value();
return categories;
},
getSelected: function () {
return this.findWhere({ selected: true });
},
updateSelected: function (value) {
var newSelected = this.getByValue(value);
newSelected.set({ selected: true });
},
updateCategory: function (value, category) {
var newCategory = this.getByValue(value);
newCategory.set({ category: category });
},
getByValue: function (value) {
return _.first(this.where({ val: value }));
},
getThumbnailImage: function (urlTemplate, subdomains) {
return this._lowerXYZ(urlTemplate, subdomains);
}
});