58 lines
2 KiB
JavaScript
58 lines
2 KiB
JavaScript
(function() {
|
|
var bind = function(fn, me){ return function(){ return fn.apply(me, arguments); }; };
|
|
|
|
this.NotificationsForm = (function() {
|
|
function NotificationsForm() {
|
|
this.toggleCheckbox = bind(this.toggleCheckbox, this);
|
|
this.removeEventListeners();
|
|
this.initEventListeners();
|
|
}
|
|
|
|
NotificationsForm.prototype.removeEventListeners = function() {
|
|
return $(document).off('change', '.js-custom-notification-event');
|
|
};
|
|
|
|
NotificationsForm.prototype.initEventListeners = function() {
|
|
return $(document).on('change', '.js-custom-notification-event', this.toggleCheckbox);
|
|
};
|
|
|
|
NotificationsForm.prototype.toggleCheckbox = function(e) {
|
|
var $checkbox, $parent;
|
|
$checkbox = $(e.currentTarget);
|
|
$parent = $checkbox.closest('.checkbox');
|
|
return this.saveEvent($checkbox, $parent);
|
|
};
|
|
|
|
NotificationsForm.prototype.showCheckboxLoadingSpinner = function($parent) {
|
|
return $parent.addClass('is-loading').find('.custom-notification-event-loading').removeClass('fa-check').addClass('fa-spin fa-spinner').removeClass('is-done');
|
|
};
|
|
|
|
NotificationsForm.prototype.saveEvent = function($checkbox, $parent) {
|
|
var form;
|
|
form = $parent.parents('form:first');
|
|
return $.ajax({
|
|
url: form.attr('action'),
|
|
method: form.attr('method'),
|
|
dataType: 'json',
|
|
data: form.serialize(),
|
|
beforeSend: (function(_this) {
|
|
return function() {
|
|
return _this.showCheckboxLoadingSpinner($parent);
|
|
};
|
|
})(this)
|
|
}).done(function(data) {
|
|
$checkbox.enable();
|
|
if (data.saved) {
|
|
$parent.find('.custom-notification-event-loading').toggleClass('fa-spin fa-spinner fa-check is-done');
|
|
return setTimeout(function() {
|
|
return $parent.removeClass('is-loading').find('.custom-notification-event-loading').toggleClass('fa-spin fa-spinner fa-check is-done');
|
|
}, 2000);
|
|
}
|
|
});
|
|
};
|
|
|
|
return NotificationsForm;
|
|
|
|
})();
|
|
|
|
}).call(this);
|