var _ = require('underscore'); var Backbone = require('backbone'); var moment = require('moment'); var NASAView = require('./nasa-view'); var CustomBaselayerModel = require('builder/data/custom-baselayer-model'); var TYPES = { day: { url: 'http://map1.vis.earthdata.nasa.gov/wmts-webmerc/MODIS_Terra_CorrectedReflectance_TrueColor/default/<%- date %>/GoogleMapsCompatible_Level9/{z}/{y}/{x}.jpeg', limit: '2012-05-01', default: '2012-05-01', attribution: 'NASA EOSDIS GIBS', name: 'NASA Terra', maxZoom: 9, minZoom: 1 }, night: { url: 'http://map1.vis.earthdata.nasa.gov/wmts-webmerc/VIIRS_CityLights_2012/default/<%- date %>/GoogleMapsCompatible_Level8/{z}/{y}/{x}.jpeg', limit: '2012-05-01', default: '2012-05-02', attribution: 'NASA EOSDIS GIBS', name: 'NASA Earth at night', maxZoom: 8, minZoom: 1 } }; /** * View model for NASA tab content. */ module.exports = Backbone.Model.extend({ defaults: { name: 'nasa', label: 'NASA', layer: undefined, // gets set on dayOrNight/date changes layerType: 'day', date: undefined, // for date picker current: undefined, format: 'Y-m-d' // YYYY-MM-DD }, initialize: function () { this._initBinds(); }, createView: function (opts) { if (!opts.submitButton) throw new Error('submitButton is required'); this._submitButton = opts.submitButton; var utc = new Date().getTimezoneOffset(); var today = moment(new Date()).utcOffset(utc).format('YYYY-MM-DD'); var yesterday = moment(new Date()).utcOffset(utc).subtract(1, 'days').format('YYYY-MM-DD'); this.set({ current: today, date: yesterday }); return new NASAView({ model: this, submitButton: this._submitButton }); }, hasAlreadyAddedLayer: function (userLayers) { var urlTemplate = this.get('layer').get('urlTemplate'); return _.any(userLayers.isCustomCategory(), function (customLayer) { return customLayer.get('urlTemplate') === urlTemplate; }); }, _initBinds: function () { this.bind('change:date change:layerType', this._onChange, this); }, _onChange: function () { var dateStr = this.get('date'); var layerType = this.get('layerType'); var url = _.template(TYPES[layerType].url)({ date: dateStr }); var name = TYPES[layerType].name; if (layerType === 'day') { name = name + ' ' + dateStr; } var layer = new CustomBaselayerModel({ urlTemplate: url, attribution: TYPES[layerType].attribution, maxZoom: TYPES[layerType].maxZoom, minZoom: TYPES[layerType].minZoom, name: name, category: 'NASA', type: 'Tiled' }); layer.set('className', layer._generateClassName(url)); this.set('layer', layer); } });