1
0
mirror of https://github.com/beestat/app.git synced 2025-05-23 18:04:14 -04:00
beestat/js/component/modal/newsletter.js
2022-08-04 21:32:10 -04:00

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;
};