Initial commit
This commit is contained in:
+136
@@ -0,0 +1,136 @@
|
||||
var Backbone = require('backbone');
|
||||
var XYZModel = require('./xyz/xyz-model');
|
||||
var mosaicThumbnail = require('builder/components/mosaic/mosaic-thumbnail.tpl');
|
||||
var MapboxModel = require('./mapbox/mapbox-model');
|
||||
var WMSModel = require('./wms/wms-model');
|
||||
var TileJSONModel = require('./tilejson/tilejson-model');
|
||||
var NASAModel = require('./nasa/nasa-model');
|
||||
|
||||
/**
|
||||
* Add basemap model
|
||||
*/
|
||||
module.exports = Backbone.Model.extend({
|
||||
defaults: {
|
||||
tabs: undefined,
|
||||
contentPane: 'tabs', // [tabs, loading, error]
|
||||
currentTab: 'xyz' // [xyz, wms, nasa, mapbox, tilejson, nasa]
|
||||
},
|
||||
|
||||
initialize: function (attrs, 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');
|
||||
|
||||
this._layerDefinitionsCollection = opts.layerDefinitionsCollection;
|
||||
this._basemapsCollection = opts.basemapsCollection;
|
||||
this._customBaselayersCollection = opts.customBaselayersCollection;
|
||||
this._currentTab = opts.currentTab;
|
||||
|
||||
this._initTabs();
|
||||
this._initBinds();
|
||||
},
|
||||
|
||||
activeTabModel: function () {
|
||||
return this.get('tabs').findWhere({ name: this.get('currentTab') });
|
||||
},
|
||||
|
||||
canSaveBasemap: function () {
|
||||
return this.get('contentPane') === 'tabs' && this._layerToSave();
|
||||
},
|
||||
|
||||
saveBasemap: function () {
|
||||
var self = this;
|
||||
|
||||
this.set('contentPane', 'addingBasemap');
|
||||
|
||||
var customBaselayerModel = this._layerToSave();
|
||||
var attrs = customBaselayerModel.getAttributes();
|
||||
|
||||
if (this.activeTabModel().hasAlreadyAddedLayer(this._customBaselayersCollection)) {
|
||||
// update selected in basemaps collection
|
||||
this._basemapsCollection.updateSelected(attrs.className);
|
||||
// update category if needed in basemaps collection,
|
||||
// this is the case for mapbox basemaps which were stored without category in the editor
|
||||
this._basemapsCollection.updateCategory(attrs.className, attrs.category);
|
||||
|
||||
// update baselayer
|
||||
this._onBasemapSaved(attrs);
|
||||
} else {
|
||||
// Add to customBaselayersCollection before saving, so save URL resolves to the expected endpoint
|
||||
this._customBaselayersCollection.add(customBaselayerModel);
|
||||
|
||||
customBaselayerModel.save({}, {
|
||||
success: function (mdl, mdlAttrs) {
|
||||
var options = mdlAttrs.options;
|
||||
|
||||
var name = options.name ? options.name : 'Custom basemap ' + mdlAttrs.order;
|
||||
var className = options.className;
|
||||
var urlTemplate = options.urlTemplate;
|
||||
|
||||
// add in basemaps collection
|
||||
self._basemapsCollection.add({
|
||||
id: mdlAttrs.id,
|
||||
urlTemplate: urlTemplate,
|
||||
maxZoom: options.minZoom || 21,
|
||||
minZoom: options.minZoom || 0,
|
||||
name: name,
|
||||
className: className,
|
||||
attribution: options.attribution,
|
||||
category: options.category,
|
||||
tms: options.tms,
|
||||
type: options.type,
|
||||
val: className,
|
||||
label: name,
|
||||
template: function (imgURL) {
|
||||
return mosaicThumbnail({
|
||||
imgURL: imgURL
|
||||
});
|
||||
}
|
||||
});
|
||||
|
||||
// update baselayer
|
||||
self._onBasemapSaved(attrs);
|
||||
},
|
||||
error: function () {
|
||||
// Cleanup, remove layer it could not be saved!
|
||||
self._customBaselayersCollection.remove(customBaselayerModel);
|
||||
self.set('contentPane', 'addBasemapFailed');
|
||||
}
|
||||
});
|
||||
}
|
||||
},
|
||||
|
||||
_onBasemapSaved: function (layerAttrs) {
|
||||
// Update baseLayer
|
||||
this._layerDefinitionsCollection.setBaseLayer(layerAttrs);
|
||||
|
||||
this.trigger('saveBasemapDone');
|
||||
},
|
||||
|
||||
_initTabs: function () {
|
||||
var tabs = new Backbone.Collection([
|
||||
new XYZModel(),
|
||||
new MapboxModel(),
|
||||
new WMSModel(null, {
|
||||
customBaselayersCollection: this._customBaselayersCollection
|
||||
}),
|
||||
new TileJSONModel(),
|
||||
new NASAModel()
|
||||
]);
|
||||
this.set({
|
||||
tabs: tabs,
|
||||
currentTab: this._currentTab || tabs.first().get('name')
|
||||
});
|
||||
},
|
||||
|
||||
_initBinds: function () {
|
||||
this.get('tabs').each(function (tabModel) {
|
||||
tabModel.bind('saveBasemap', this.saveBasemap, this);
|
||||
}, this);
|
||||
},
|
||||
|
||||
_layerToSave: function () {
|
||||
return this.activeTabModel().get('layer');
|
||||
}
|
||||
|
||||
});
|
||||
Reference in New Issue
Block a user