Welcome to mirror list, hosted at ThFree Co, Russian Federation.

notifications_form.js « javascripts « assets « app - gitlab.com/gitlab-org/gitlab-foss.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
blob: d8709a6fa5f2741e744d63ab6cde25e9a1d65493 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
/* eslint-disable func-names, space-before-function-paren, no-var, prefer-rest-params, wrap-iife, one-var, one-var-declaration-per-line, newline-per-chained-call, comma-dangle, consistent-return, prefer-arrow-callback, max-len */
function NotificationsForm() {
  this.toggleCheckbox = this.toggleCheckbox.bind(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);
    }
  });
};

window.NotificationsForm = NotificationsForm;