cartodb-4.42/lib/assets/javascripts/builder/components/modals/add-basemap/nasa/nasa-view.js

107 lines
2.6 KiB
JavaScript
Raw Normal View History

2024-04-06 13:25:13 +08:00
var $ = require('jquery');
var moment = require('moment');
var CoreView = require('backbone/core-view');
var DatePickerView = require('builder/components/date-picker/date-picker-view');
var EditFieldModel = require('builder/components/date-picker/edit-field-model');
var TipsyTooltipView = require('builder/components/tipsy-tooltip-view');
var template = require('./nasa.tpl');
/**
* Represents the NASA tab content
*/
module.exports = CoreView.extend({
options: {
dateFormat: 'YYYY-MM-DD'
},
events: {
'click .js-day': '_onChangeToDay',
'click .js-night': '_onChangeToNight'
},
initialize: function (opts) {
if (!opts.submitButton) throw new Error('submitButton is required');
this._submitButton = opts.submitButton;
this.dateModel = new EditFieldModel({
value: this.model.get('date'),
type: 'date'
});
this._initBinds();
},
render: function () {
this.clearSubViews();
this._updateOkBtn();
this._disableOkBtn(false);
this.$el.html(
template({
layerType: this.model.get('layerType')
})
);
this._renderDatePicker();
return this;
},
_initBinds: function () {
this.model.bind('change:layerType', function () {
this.dateModel.set('readOnly', this.model.get('layerType') === 'night');
this.render();
}, this);
this.dateModel.bind('change:value', function () {
var date = moment(this.dateModel.get('value')).format(this.options.dateFormat);
this.model.set('date', date);
}, this);
this.add_related_model(this.dateModel);
},
_renderDatePicker: function () {
// Date picker
var datepicker = this.datepicker = new DatePickerView({
className: 'DatePicker DatePicker--withBorder',
model: this.dateModel
});
this._$datePicker().html(datepicker.render().el);
this.addView(datepicker);
// Disabled tooltip
if (this.dateModel.get('readOnly')) {
var tooltip = new TipsyTooltipView({
el: this._$datePicker(),
title: function (e) {
return $(this).attr('data-title');
}
});
this.addView(tooltip);
}
},
_onChangeToNight: function () {
this.model.set('layerType', 'night');
},
_onChangeToDay: function () {
this.model.set('layerType', 'day');
},
_$datePicker: function () {
return this.$('.js-datePicker');
},
_updateOkBtn: function () {
this._submitButton.find('span').text(_t('components.modals.add-basemap.add-btn'));
},
_disableOkBtn: function (disable) {
this._submitButton.toggleClass('is-disabled', disable);
}
});