Initial commit
This commit is contained in:
@@ -0,0 +1,70 @@
|
||||
const Backbone = require('backbone');
|
||||
const MapLayer = require('dashboard/data/map-layer-model');
|
||||
const checkAndBuildOpts = require('builder/helpers/required-opts');
|
||||
|
||||
const TILED_LAYER_TYPE = 'Tiled';
|
||||
const CARTODB_LAYER_TYPE = 'CartoDB';
|
||||
const TORQUE_LAYER_TYPE = 'torque';
|
||||
|
||||
const REQUIRED_OPTS = [
|
||||
'configModel'
|
||||
];
|
||||
|
||||
const LayersCollection = Backbone.Collection.extend({
|
||||
model: MapLayer,
|
||||
|
||||
initialize: function (models, options) {
|
||||
checkAndBuildOpts(options, REQUIRED_OPTS, this);
|
||||
|
||||
this.comparator = function (m) {
|
||||
return parseInt(m.get('order'), 10);
|
||||
};
|
||||
this.bind('add', this._assignIndexes);
|
||||
this.bind('remove', this._assignIndexes);
|
||||
},
|
||||
|
||||
url: function (method) {
|
||||
var version = this._configModel.urlVersion('layer', method);
|
||||
return `/api/${version}/maps/${this.map.id}/layers`;
|
||||
},
|
||||
|
||||
parse: function (data) {
|
||||
return data.layers;
|
||||
},
|
||||
|
||||
/**
|
||||
* each time a layer is added or removed
|
||||
* the index should be recalculated
|
||||
*/
|
||||
_assignIndexes: function (model, col, options) {
|
||||
if (this.size() > 0) {
|
||||
// Assign an order of 0 to the first layer
|
||||
this.at(0).set({ order: 0 });
|
||||
|
||||
if (this.size() > 1) {
|
||||
var layersByType = {};
|
||||
for (var i = 1; i < this.size(); ++i) {
|
||||
var layer = this.at(i);
|
||||
var layerType = layer.get('type');
|
||||
layersByType[layerType] = layersByType[layerType] || [];
|
||||
layersByType[layerType].push(layer);
|
||||
}
|
||||
|
||||
var lastOrder = 0;
|
||||
var sortedTypes = [CARTODB_LAYER_TYPE, TORQUE_LAYER_TYPE, TILED_LAYER_TYPE];
|
||||
for (var index = 0; index < sortedTypes.length; ++index) {
|
||||
var type = sortedTypes[index];
|
||||
var layers = layersByType[type] || [];
|
||||
for (var j = 0; j < layers.length; ++j) {
|
||||
var layerModel = layers[j];
|
||||
layerModel.set({
|
||||
order: ++lastOrder
|
||||
});
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
module.exports = LayersCollection;
|
||||
Reference in New Issue
Block a user