mirror of
https://github.com/beestat/app.git
synced 2025-05-23 18:04:14 -04:00
128 lines
3.8 KiB
JavaScript
128 lines
3.8 KiB
JavaScript
/**
|
|
* Newsletter
|
|
*/
|
|
beestat.component.modal.newsletter = function() {
|
|
beestat.component.modal.apply(this, arguments);
|
|
};
|
|
beestat.extend(beestat.component.modal.newsletter, beestat.component.modal);
|
|
|
|
/**
|
|
* Decorate
|
|
*
|
|
* @param {rocket.Elements} parent
|
|
*/
|
|
beestat.component.modal.newsletter.prototype.decorate_contents_ = function(parent) {
|
|
parent.appendChild($.createElement('p').innerHTML('Interested in following beestat development? Subscribe to the newsletter for an updates. Emails are sparse; only a few every year.'));
|
|
|
|
this.email_address_ = new beestat.component.input.text()
|
|
.set_width('50%');
|
|
|
|
if (this.subscribed_ === true) {
|
|
this.email_address_.set_icon('check');
|
|
this.email_address_.set_enabled(false);
|
|
this.email_address_.set_value(this.state_.email_address_);
|
|
} else if (this.subscribed_ === false) {
|
|
this.email_address_.set_icon('email');
|
|
this.email_address_.set_value(this.state_.email_address_);
|
|
} else {
|
|
this.email_address_.set_icon('email');
|
|
this.email_address_.set_value(beestat.user.get().email_address);
|
|
}
|
|
|
|
this.email_address_.render(parent);
|
|
|
|
if (this.subscribed_ === true) {
|
|
parent.appendChild($.createElement('p').innerHTML('You are now subscribed to the beestat newsletter!'));
|
|
} else if (this.subscribed_ === false) {
|
|
parent.appendChild(
|
|
$.createElement('p')
|
|
.innerHTML(this.error_)
|
|
.style('color', beestat.style.color.red.base)
|
|
);
|
|
}
|
|
};
|
|
|
|
/**
|
|
* Get title.
|
|
*
|
|
* @return {string} Tht title.
|
|
*/
|
|
beestat.component.modal.newsletter.prototype.get_title_ = function() {
|
|
return 'Newsletter';
|
|
};
|
|
|
|
/**
|
|
* Get the buttons that go on the bottom of this modal.
|
|
*
|
|
* @return {[beestat.component.button]} The buttons.
|
|
*/
|
|
beestat.component.modal.newsletter.prototype.get_buttons_ = function() {
|
|
var self = this;
|
|
|
|
let buttons = [];
|
|
if (this.subscribed_ === true) {
|
|
const ok = new beestat.component.button()
|
|
.set_background_color(beestat.style.color.green.base)
|
|
.set_background_hover_color(beestat.style.color.green.light)
|
|
.set_text_color('#fff')
|
|
.set_text('Close')
|
|
.addEventListener('click', function() {
|
|
self.dispose();
|
|
});
|
|
buttons.push(ok);
|
|
} else {
|
|
const no_thanks = new beestat.component.button()
|
|
.set_background_color('#fff')
|
|
.set_text_color(beestat.style.color.gray.base)
|
|
.set_text_hover_color(beestat.style.color.red.base)
|
|
.set_text('No Thanks')
|
|
.addEventListener('click', function() {
|
|
self.dispose();
|
|
});
|
|
buttons.push(no_thanks);
|
|
|
|
const subscribe = new beestat.component.button()
|
|
.set_background_color(beestat.style.color.green.base)
|
|
.set_background_hover_color(beestat.style.color.green.light)
|
|
.set_text_color('#fff')
|
|
.set_text('Subscribe')
|
|
.addEventListener('click', function() {
|
|
self.state_.email_address_ = self.email_address_.get_value();
|
|
|
|
if (self.state_.email_address_.match(/.+@.+\..+/) === null) {
|
|
self.subscribed_ = false;
|
|
self.error_ = 'Invalid email address.';
|
|
self.rerender();
|
|
return;
|
|
}
|
|
|
|
this
|
|
.set_background_color(beestat.style.color.gray.base)
|
|
.set_background_hover_color()
|
|
.removeEventListener('click');
|
|
|
|
no_thanks.removeEventListener('click');
|
|
|
|
new beestat.api()
|
|
.add_call(
|
|
'mailgun',
|
|
'subscribe',
|
|
{'email_address': self.state_.email_address_}
|
|
)
|
|
.set_callback(function(response) {
|
|
if (response.subscribed === true) {
|
|
self.subscribed_ = true;
|
|
} else {
|
|
self.subscribed_ = false;
|
|
self.error_ = 'Subscribe failed; please try again later.';
|
|
}
|
|
self.rerender();
|
|
})
|
|
.send();
|
|
});
|
|
buttons.push(subscribe);
|
|
}
|
|
|
|
return buttons;
|
|
};
|