summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLuke "Jared" Bennett <lbennett@gitlab.com>2017-01-09 08:45:08 +0000
committerLuke "Jared" Bennett <lbennett@gitlab.com>2017-01-12 10:26:31 +0000
commitd3b2ae8680dac36fd74ddd1525d61537c4e1a76b (patch)
tree99b767304e018c8736c411d2713ccfb47b64ab68
parent826adaaff876d2b6b5886e6d8133b0d0c2cd4a2d (diff)
downloadgitlab-ce-26455-use-jquery-for-all-event-listener-registration.tar.gz
Added eslint-plugin-turbolinks-event-handling
-rw-r--r--.eslintrc8
-rw-r--r--app/assets/javascripts/abuse_reports.js.es64
-rw-r--r--app/assets/javascripts/activities.js.es611
-rw-r--r--app/assets/javascripts/admin.js4
-rw-r--r--app/assets/javascripts/application.js116
-rw-r--r--app/assets/javascripts/aside.js3
-rw-r--r--app/assets/javascripts/autosave.js2
-rw-r--r--app/assets/javascripts/awards_handler.js15
-rw-r--r--app/assets/javascripts/behaviors/autosize.js4
-rw-r--r--app/assets/javascripts/behaviors/details_behavior.js4
-rw-r--r--app/assets/javascripts/behaviors/requires_input.js3
-rw-r--r--app/assets/javascripts/behaviors/toggler_behavior.js2
-rw-r--r--app/assets/javascripts/blob/blob_file_dropzone.js8
-rw-r--r--app/assets/javascripts/blob/template_selector.js.es63
-rw-r--r--app/assets/javascripts/blob_edit/edit_blob.js3
-rw-r--r--app/assets/javascripts/broadcast_message.js6
-rw-r--r--app/assets/javascripts/build.js12
-rw-r--r--app/assets/javascripts/build_artifacts.js21
-rw-r--r--app/assets/javascripts/build_variables.js.es62
-rw-r--r--app/assets/javascripts/ci_lint_editor.js.es62
-rw-r--r--app/assets/javascripts/commit/image_file.js17
-rw-r--r--app/assets/javascripts/commits.js2
-rw-r--r--app/assets/javascripts/compare_autocomplete.js.es64
-rw-r--r--app/assets/javascripts/confirm_danger_modal.js28
-rw-r--r--app/assets/javascripts/copy_to_clipboard.js4
-rw-r--r--app/assets/javascripts/create_label.js.es628
-rw-r--r--app/assets/javascripts/cycle_analytics/cycle_analytics_bundle.js.es615
-rw-r--r--app/assets/javascripts/diff.js.es67
-rw-r--r--app/assets/javascripts/dropzone_input.js2
-rw-r--r--app/assets/javascripts/due_date_select.js.es620
-rw-r--r--app/assets/javascripts/files_comment_button.js6
-rw-r--r--app/assets/javascripts/flash.js2
-rw-r--r--app/assets/javascripts/gl_dropdown.js45
-rw-r--r--app/assets/javascripts/gl_field_error.js.es63
-rw-r--r--app/assets/javascripts/gl_field_errors.js.es63
-rw-r--r--app/assets/javascripts/gl_form.js8
-rw-r--r--app/assets/javascripts/graphs/stat_graph_contributors_graph.js3
-rw-r--r--app/assets/javascripts/group_label_subscription.js.es66
-rw-r--r--app/assets/javascripts/header.js2
-rw-r--r--app/assets/javascripts/importer_status.js4
-rw-r--r--app/assets/javascripts/issuable.js.es634
-rw-r--r--app/assets/javascripts/issuable_context.js29
-rw-r--r--app/assets/javascripts/issuable_form.js9
-rw-r--r--app/assets/javascripts/issue.js7
-rw-r--r--app/assets/javascripts/issues_bulk_assignment.js.es63
-rw-r--r--app/assets/javascripts/label_manager.js.es63
-rw-r--r--app/assets/javascripts/labels.js12
-rw-r--r--app/assets/javascripts/labels_select.js3
-rw-r--r--app/assets/javascripts/layout_nav.js2
-rw-r--r--app/assets/javascripts/lib/utils/text_utility.js2
-rw-r--r--app/assets/javascripts/line_highlighter.js10
-rw-r--r--app/assets/javascripts/logo.js18
-rw-r--r--app/assets/javascripts/member_expiration_date.js.es617
-rw-r--r--app/assets/javascripts/members.js.es69
-rw-r--r--app/assets/javascripts/merge_conflicts/components/diff_file_editor.js.es67
-rw-r--r--app/assets/javascripts/merge_request.js43
-rw-r--r--app/assets/javascripts/merge_request_tabs.js.es630
-rw-r--r--app/assets/javascripts/merge_request_widget/ci_bundle.js.es644
-rw-r--r--app/assets/javascripts/merged_buttons.js17
-rw-r--r--app/assets/javascripts/mini_pipeline_graph_dropdown.js.es64
-rw-r--r--app/assets/javascripts/new_branch_form.js2
-rw-r--r--app/assets/javascripts/notes.js110
-rw-r--r--app/assets/javascripts/notifications_dropdown.js44
-rw-r--r--app/assets/javascripts/notifications_form.js5
-rw-r--r--app/assets/javascripts/preview_markdown.js123
-rw-r--r--app/assets/javascripts/profile/gl_crop.js.es630
-rw-r--r--app/assets/javascripts/profile/profile.js.es618
-rw-r--r--app/assets/javascripts/project.js10
-rw-r--r--app/assets/javascripts/project_find_file.js3
-rw-r--r--app/assets/javascripts/project_fork.js2
-rw-r--r--app/assets/javascripts/project_label_subscription.js.es62
-rw-r--r--app/assets/javascripts/project_new.js8
-rw-r--r--app/assets/javascripts/project_variables.js.es62
-rw-r--r--app/assets/javascripts/projects_list.js11
-rw-r--r--app/assets/javascripts/protected_branches/protected_branch_dropdown.js.es63
-rw-r--r--app/assets/javascripts/render_gfm.js7
-rw-r--r--app/assets/javascripts/right_sidebar.js30
-rw-r--r--app/assets/javascripts/search.js5
-rw-r--r--app/assets/javascripts/search_autocomplete.js.es614
-rw-r--r--app/assets/javascripts/sidebar.js.es615
-rw-r--r--app/assets/javascripts/single_file_diff.js2
-rw-r--r--app/assets/javascripts/smart_interval.js.es68
-rw-r--r--app/assets/javascripts/snippet/snippet_bundle.js2
-rw-r--r--app/assets/javascripts/snippets_list.js.es62
-rw-r--r--app/assets/javascripts/star.js9
-rw-r--r--app/assets/javascripts/templates/issuable_template_selector.js.es64
-rw-r--r--app/assets/javascripts/terminal/terminal.js.es62
-rw-r--r--app/assets/javascripts/todos.js.es615
-rw-r--r--app/assets/javascripts/tree.js2
-rw-r--r--app/assets/javascripts/u2f/authenticate.js.es62
-rw-r--r--app/assets/javascripts/u2f/register.js4
-rw-r--r--app/assets/javascripts/user.js.es62
-rw-r--r--app/assets/javascripts/username_validator.js.es64
-rw-r--r--app/assets/javascripts/users/calendar.js2
-rw-r--r--app/assets/javascripts/users_select.js2
-rw-r--r--app/assets/javascripts/zen_mode.js17
-rw-r--r--package.json3
-rw-r--r--spec/javascripts/.eslintrc5
98 files changed, 722 insertions, 554 deletions
diff --git a/.eslintrc b/.eslintrc
index e13f76b213c..cf54157e7a5 100644
--- a/.eslintrc
+++ b/.eslintrc
@@ -12,9 +12,13 @@
"localStorage": false
},
"plugins": [
- "filenames"
+ "filenames",
+ "turbolinks-event-handling"
],
"rules": {
- "filenames/match-regex": [2, "^[a-z0-9_]+(.js)?$"]
+ "filenames/match-regex": [2, "^[a-z0-9_]+(.js)?$"],
+ "turbolinks-event-handling/jquery-off-before-on": 2,
+ "turbolinks-event-handling/jquery-use-event-namespaces": 2
+ # "turbolinks-event-handling/vanilla-addeventlistener-needs-function-reference": 2
}
}
diff --git a/app/assets/javascripts/abuse_reports.js.es6 b/app/assets/javascripts/abuse_reports.js.es6
index 8a260aae1b1..9e897890d98 100644
--- a/app/assets/javascripts/abuse_reports.js.es6
+++ b/app/assets/javascripts/abuse_reports.js.es6
@@ -8,8 +8,8 @@
constructor() {
$(MESSAGE_CELL_SELECTOR).each(this.truncateLongMessage);
$(document)
- .off('click', MESSAGE_CELL_SELECTOR)
- .on('click', MESSAGE_CELL_SELECTOR, this.toggleMessageTruncation);
+ .off('click.toggleMessageTruncation', MESSAGE_CELL_SELECTOR)
+ .on('click.toggleMessageTruncation', MESSAGE_CELL_SELECTOR, this.toggleMessageTruncation);
}
truncateLongMessage() {
diff --git a/app/assets/javascripts/activities.js.es6 b/app/assets/javascripts/activities.js.es6
index 648cb4d5d85..2f3f68c0c88 100644
--- a/app/assets/javascripts/activities.js.es6
+++ b/app/assets/javascripts/activities.js.es6
@@ -6,11 +6,12 @@
class Activities {
constructor() {
Pager.init(20, true, false, this.updateTooltips);
- $('.event-filter-link').on('click', (e) => {
- e.preventDefault();
- this.toggleFilter(e.currentTarget);
- this.reloadActivities();
- });
+ $('.event-filter-link').off('click.reloadActivities')
+ .on('click.reloadActivities', (e) => {
+ e.preventDefault();
+ this.toggleFilter(e.currentTarget);
+ this.reloadActivities();
+ });
}
updateTooltips() {
diff --git a/app/assets/javascripts/admin.js b/app/assets/javascripts/admin.js
index 5a7d823e84c..b4a2ec088f0 100644
--- a/app/assets/javascripts/admin.js
+++ b/app/assets/javascripts/admin.js
@@ -5,7 +5,7 @@
this.Admin = (function() {
function Admin() {
var modal, showBlacklistType;
- $('input#user_force_random_password').on('change', function(elem) {
+ $('input#user_force_random_password').off('change.forceRandomPassword').on('change.forceRandomPassword', function(elem) {
var elems;
elems = $('#user_password, #user_password_confirmation');
if ($(this).attr('checked')) {
@@ -14,7 +14,7 @@
return elems.removeAttr('disabled');
}
});
- $('body').on('click', '.js-toggle-colors-link', function(e) {
+ $('body').off('click.toggleColorsContainer').on('click.toggleColorsContainer', '.js-toggle-colors-link', function(e) {
e.preventDefault();
return $('.js-toggle-colors-container').toggle();
});
diff --git a/app/assets/javascripts/application.js b/app/assets/javascripts/application.js
index e43afbb4cc9..2fcc21ffaf7 100644
--- a/app/assets/javascripts/application.js
+++ b/app/assets/javascripts/application.js
@@ -65,7 +65,9 @@
(function () {
document.addEventListener('page:fetch', function () {
// Unbind scroll events
+ /* eslint-disable turbolinks-event-handling/jquery-use-event-namespaces */
$(document).off('scroll');
+ /* eslint-enable turbolinks-event-handling/jquery-use-event-namespaces */
// Close any open tooltips
$('.has-tooltip, [data-toggle="tooltip"]').tooltip('destroy');
});
@@ -90,12 +92,13 @@
Cookies.defaults.path = gon.relative_url_root || '/';
// `hashchange` is not triggered when link target is already in window.location
- $body.on('click', 'a[href^="#"]', function() {
- var href = this.getAttribute('href');
- if (href.substr(1) === gl.utils.getLocationHash()) {
- setTimeout(gl.utils.handleLocationHash, 1);
- }
- });
+ $body.off('click.handleLocationHash')
+ .on('click.handleLocationHash', 'a[href^="#"]', function() {
+ var href = this.getAttribute('href');
+ if (href.substr(1) === gl.utils.getLocationHash()) {
+ setTimeout(gl.utils.handleLocationHash, 1);
+ }
+ });
// prevent default action for disabled buttons
$('.btn').click(function(e) {
@@ -111,13 +114,14 @@
cursorcolor: '#FFF',
cursorborder: '1px solid #FFF'
});
- $('.js-select-on-focus').on('focusin', function () {
- return $(this).select().one('mouseup', function (e) {
- return e.preventDefault();
+ $('.js-select-on-focus').off('focusin.selectOnFocus')
+ .on('focusin.selectOnFocus', function () {
+ return $(this).select().one('mouseup', function (e) {
+ return e.preventDefault();
+ });
+ // Click a .js-select-on-focus field, select the contents
+ // Prevent a mouseup event from deselecting the input
});
- // Click a .js-select-on-focus field, select the contents
- // Prevent a mouseup event from deselecting the input
- });
$('.remove-row').bind('ajax:success', function () {
$(this).tooltip('destroy')
.closest('li')
@@ -149,7 +153,7 @@
return $(el).data('placement') || 'bottom';
}
});
- $('.trigger-submit').on('change', function () {
+ $('.trigger-submit').off('change.triggerSubmit').on('change.triggerSubmit', function () {
return $(this).parents('form').submit();
// Form submitter
});
@@ -162,17 +166,18 @@
$flash.show();
}
// Disable form buttons while a form is submitting
- $body.on('ajax:complete, ajax:beforeSend, submit', 'form', function (e) {
- var buttons;
- buttons = $('[type="submit"]', this);
- switch (e.type) {
- case 'ajax:beforeSend':
- case 'submit':
- return buttons.disable();
- default:
- return buttons.enable();
- }
- });
+ $body.off('ajax:complete.submitting, ajax:beforeSend.submitting, submit.submitting')
+ .on('ajax:complete.submitting, ajax:beforeSend.submitting, submit.submitting', 'form', function (e) {
+ var buttons;
+ buttons = $('[type="submit"]', this);
+ switch (e.type) {
+ case 'ajax:beforeSend':
+ case 'submit':
+ return buttons.disable();
+ default:
+ return buttons.enable();
+ }
+ });
$(document).ajaxError(function (e, xhrObj) {
var ref = xhrObj.status;
if (xhrObj.status === 401) {
@@ -185,21 +190,22 @@
// Show/Hide the profile menu when hovering the account box
return $(this).toggleClass('hover');
});
- $document.on('click', '.diff-content .js-show-suppressed-diff', function () {
- var $container;
- $container = $(this).parent();
- $container.next('table').show();
- return $container.remove();
- // Commit show suppressed diff
- });
- $('.navbar-toggle').on('click', function () {
+ $document.off('click.showSuppressedDiff')
+ .on('click.showSuppressedDiff', '.diff-content .js-show-suppressed-diff', function () {
+ var $container;
+ $container = $(this).parent();
+ $container.next('table').show();
+ return $container.remove();
+ // Commit show suppressed diff
+ });
+ $('.navbar-toggle').off('click.toggleNavbar').on('click.toggleNavbar', function () {
$('.header-content .title').toggle();
$('.header-content .header-logo').toggle();
$('.header-content .navbar-collapse').toggle();
return $('.navbar-toggle').toggleClass('active');
});
// Show/hide comments on diff
- $body.on('click', '.js-toggle-diff-comments', function (e) {
+ $body.off('click.toggleComments').on('click.toggleComments', '.js-toggle-diff-comments', function (e) {
var $this = $(this);
var notesHolders = $this.closest('.diff-file').find('.notes_holder');
$this.toggleClass('active');
@@ -211,32 +217,34 @@
$this.trigger('blur');
return e.preventDefault();
});
- $document.off('click', '.js-confirm-danger');
- $document.on('click', '.js-confirm-danger', function (e) {
- var btn = $(e.target);
- var form = btn.closest('form');
- var text = btn.data('confirm-danger-message');
- e.preventDefault();
- return new ConfirmDangerModal(form, text);
- });
+ $document.off('click.confirmDanger', '.js-confirm-danger')
+ .on('click.confirmDanger', '.js-confirm-danger', function (e) {
+ var btn = $(e.target);
+ var form = btn.closest('form');
+ var text = btn.data('confirm-danger-message');
+ e.preventDefault();
+ return new ConfirmDangerModal(form, text);
+ });
$('input[type="search"]').each(function () {
var $this = $(this);
$this.attr('value', $this.val());
});
- $document.off('keyup', 'input[type="search"]').on('keyup', 'input[type="search"]', function () {
- var $this;
- $this = $(this);
- return $this.attr('value', $this.val());
- });
- $document.off('breakpoint:change').on('breakpoint:change', function (e, breakpoint) {
- var $gutterIcon;
- if (breakpoint === 'sm' || breakpoint === 'xs') {
- $gutterIcon = $sidebarGutterToggle.find('i');
- if ($gutterIcon.hasClass('fa-angle-double-right')) {
- return $sidebarGutterToggle.trigger('click');
+ $document.off('keyup.searchInput', 'input[type="search"]')
+ .on('keyup.searchInput', 'input[type="search"]', function () {
+ var $this;
+ $this = $(this);
+ return $this.attr('value', $this.val());
+ });
+ $document.off('breakpoint:change.sidebarGutterToggle')
+ .on('breakpoint:change.sidebarGutterToggle', function (e, breakpoint) {
+ var $gutterIcon;
+ if (breakpoint === 'sm' || breakpoint === 'xs') {
+ $gutterIcon = $sidebarGutterToggle.find('i');
+ if ($gutterIcon.hasClass('fa-angle-double-right')) {
+ return $sidebarGutterToggle.trigger('click');
+ }
}
- }
- });
+ });
fitSidebarForSize = function () {
var oldBootstrapBreakpoint;
oldBootstrapBreakpoint = bootstrapBreakpoint;
diff --git a/app/assets/javascripts/aside.js b/app/assets/javascripts/aside.js
index 9417afc2ea7..9a9e37dc1a4 100644
--- a/app/assets/javascripts/aside.js
+++ b/app/assets/javascripts/aside.js
@@ -2,8 +2,7 @@
(function() {
this.Aside = (function() {
function Aside() {
- $(document).off("click", "a.show-aside");
- $(document).on("click", 'a.show-aside', function(e) {
+ $(document).off("click.showAside", "a.show-aside").on("click.showAside", 'a.show-aside', function(e) {
var btn, icon;
e.preventDefault();
btn = $(e.currentTarget);
diff --git a/app/assets/javascripts/autosave.js b/app/assets/javascripts/autosave.js
index f45dbe4cbf2..7805302e3d8 100644
--- a/app/assets/javascripts/autosave.js
+++ b/app/assets/javascripts/autosave.js
@@ -9,7 +9,7 @@
this.key = "autosave/" + key;
this.field.data("autosave", this);
this.restore();
- this.field.on("input", (function(_this) {
+ this.field.off('input.save').on("input.save", (function(_this) {
return function() {
return _this.save();
};
diff --git a/app/assets/javascripts/awards_handler.js b/app/assets/javascripts/awards_handler.js
index 107a7978a87..e54d32f4b86 100644
--- a/app/assets/javascripts/awards_handler.js
+++ b/app/assets/javascripts/awards_handler.js
@@ -6,14 +6,14 @@
var FROM_SENTENCE_REGEX = /(?:, and | and |, )/; //For separating lists produced by ruby's Array#toSentence
function AwardsHandler() {
this.aliases = gl.emojiAliases();
- $(document).off('click', '.js-add-award').on('click', '.js-add-award', (function(_this) {
+ $(document).off('click.showMenu', '.js-add-award').on('click.showMenu', '.js-add-award', (function(_this) {
return function(e) {
e.stopPropagation();
e.preventDefault();
return _this.showEmojiMenu($(e.currentTarget));
};
})(this));
- $('html').on('click', function(e) {
+ $('html').off('click.removeFocus').on('click.removeFocus', function(e) {
var $target;
$target = $(e.target);
if (!$target.closest('.emoji-menu-content').length) {
@@ -26,7 +26,7 @@
}
}
});
- $(document).off('click', '.js-emoji-btn').on('click', '.js-emoji-btn', (function(_this) {
+ $(document).off('click.addAward', '.js-emoji-btn').on('click.addAward', '.js-emoji-btn', (function(_this) {
return function(e) {
var $target, emoji;
e.preventDefault();
@@ -263,9 +263,10 @@
var className = 'pulse animated once short';
$emoji.addClass(className);
- $emoji.on('webkitAnimationEnd animationEnd', function() {
- $(this).removeClass(className);
- });
+ $emoji.off('webkitAnimationEnd.removeClass animationEnd.removeClass')
+ .on('webkitAnimationEnd.removeClass animationEnd.removeClass', function() {
+ $(this).removeClass(className);
+ });
};
AwardsHandler.prototype.createEmoji = function(votesBlock, emoji) {
@@ -349,7 +350,7 @@
};
AwardsHandler.prototype.setupSearch = function() {
- return $('input.emoji-search').on('keyup', (function(_this) {
+ return $('input.emoji-search').off('keyup.search').on('keyup.search', (function(_this) {
return function(ev) {
var found_emojis, h5, term, ul;
term = $(ev.target).val();
diff --git a/app/assets/javascripts/behaviors/autosize.js b/app/assets/javascripts/behaviors/autosize.js
index c62a4c5a456..56b2831b1c4 100644
--- a/app/assets/javascripts/behaviors/autosize.js
+++ b/app/assets/javascripts/behaviors/autosize.js
@@ -8,12 +8,12 @@
$(function() {
var $fields;
$fields = $('.js-autosize');
- $fields.on('autosize:resized', function() {
+ $fields.off('autosize:resized.setHeight').on('autosize:resized.setHeight', function() {
var $field;
$field = $(this);
return $field.data('height', $field.outerHeight());
});
- $fields.on('resize.autosize', function() {
+ $fields.off('resize.autosize.updateFields').on('resize.autosize.updateFields', function() {
var $field;
$field = $(this);
if ($field.data('height') !== $field.outerHeight()) {
diff --git a/app/assets/javascripts/behaviors/details_behavior.js b/app/assets/javascripts/behaviors/details_behavior.js
index 3998ee9a0a0..85bdac5b783 100644
--- a/app/assets/javascripts/behaviors/details_behavior.js
+++ b/app/assets/javascripts/behaviors/details_behavior.js
@@ -1,7 +1,7 @@
/* eslint-disable func-names, space-before-function-paren, prefer-arrow-callback, quotes, no-var, vars-on-top, padded-blocks, max-len */
(function() {
$(function() {
- $("body").on("click", ".js-details-target", function() {
+ $("body").off('click.detailsTarget').on("click.detailsTarget", ".js-details-target", function() {
var container;
container = $(this).closest(".js-details-container");
return container.toggleClass("open");
@@ -12,7 +12,7 @@
// %a.js-details-expand
// %div.js-details-content
//
- return $("body").on("click", ".js-details-expand", function(e) {
+ return $("body").off('click.detailsExpand').on("click.detailsExpand", ".js-details-expand", function(e) {
$(this).next('.js-details-content').removeClass("hide");
$(this).hide();
diff --git a/app/assets/javascripts/behaviors/requires_input.js b/app/assets/javascripts/behaviors/requires_input.js
index 72362988b2e..0e6e4c6801a 100644
--- a/app/assets/javascripts/behaviors/requires_input.js
+++ b/app/assets/javascripts/behaviors/requires_input.js
@@ -36,7 +36,8 @@
};
// Set initial button state
requireInput();
- return $form.on('change input', fieldSelector, requireInput);
+ return $form.off('change.requireInput input.requireInput')
+ .on('change.requireInput input.requireInput', fieldSelector, requireInput);
};
$(function() {
diff --git a/app/assets/javascripts/behaviors/toggler_behavior.js b/app/assets/javascripts/behaviors/toggler_behavior.js
index 6a49715590c..924f9540604 100644
--- a/app/assets/javascripts/behaviors/toggler_behavior.js
+++ b/app/assets/javascripts/behaviors/toggler_behavior.js
@@ -8,7 +8,7 @@
// %a.js-toggle-button
// %div.js-toggle-content
//
- $('body').on('click', '.js-toggle-button', function(e) {
+ $('body').off('click.toggler').on('click.toggler', '.js-toggle-button', function(e) {
e.preventDefault();
$(this)
.find('.fa')
diff --git a/app/assets/javascripts/blob/blob_file_dropzone.js b/app/assets/javascripts/blob/blob_file_dropzone.js
index eab686c45c3..fcf3b487a40 100644
--- a/app/assets/javascripts/blob/blob_file_dropzone.js
+++ b/app/assets/javascripts/blob/blob_file_dropzone.js
@@ -26,16 +26,16 @@
"X-CSRF-Token": $("meta[name=\"csrf-token\"]").attr("content")
},
init: function() {
- this.on('addedfile', function(file) {
+ this.off('addedfile.alertsHide').on('addedfile.alertsHide', function(file) {
$('.dropzone-alerts').html('').hide();
});
- this.on('success', function(header, response) {
+ this.off('success.visitFile').on('success.visitFile', function(header, response) {
window.location.href = response.filePath;
});
- this.on('maxfilesexceeded', function(file) {
+ this.off('maxfilesexceeded.removeFile').on('maxfilesexceeded.removeFile', function(file) {
this.removeFile(file);
});
- return this.on('sending', function(file, xhr, formData) {
+ return this.off('sending.appendData').on('sending.appendData', function(file, xhr, formData) {
formData.append('target_branch', form.find('.js-target-branch').val());
formData.append('create_merge_request', form.find('.js-create-merge-request').val());
formData.append('commit_message', form.find('.js-commit-message').val());
diff --git a/app/assets/javascripts/blob/template_selector.js.es6 b/app/assets/javascripts/blob/template_selector.js.es6
index 7a1ee9998c8..75ab278a2be 100644
--- a/app/assets/javascripts/blob/template_selector.js.es6
+++ b/app/assets/javascripts/blob/template_selector.js.es6
@@ -37,7 +37,8 @@
}
bindEvents() {
- return this.$input.on('keyup blur', (e) => this.onFilenameUpdate());
+ return this.$input.off('keyup.onFilenameUpdate blur.onFilenameUpdate')
+ .on('keyup.onFilenameUpdate blur.onFilenameUpdate', (e) => this.onFilenameUpdate());
}
toggleLabel(item) {
diff --git a/app/assets/javascripts/blob_edit/edit_blob.js b/app/assets/javascripts/blob_edit/edit_blob.js
index fa43ff611cc..3a33dd476c0 100644
--- a/app/assets/javascripts/blob_edit/edit_blob.js
+++ b/app/assets/javascripts/blob_edit/edit_blob.js
@@ -74,7 +74,8 @@
EditBlob.prototype.initSoftWrap = function() {
this.isSoftWrapped = false;
this.$toggleButton = $('.soft-wrap-toggle');
- this.$toggleButton.on('click', this.toggleSoftWrap.bind(this));
+ this.$toggleButton.off('click.toggleSoftWrap')
+ .on('click.toggleSoftWrap', this.toggleSoftWrap.bind(this));
};
EditBlob.prototype.toggleSoftWrap = function(e) {
diff --git a/app/assets/javascripts/broadcast_message.js b/app/assets/javascripts/broadcast_message.js
index 30432dae278..5233ac03d8b 100644
--- a/app/assets/javascripts/broadcast_message.js
+++ b/app/assets/javascripts/broadcast_message.js
@@ -2,18 +2,18 @@
(function() {
$(function() {
var previewPath;
- $('input#broadcast_message_color').on('input', function() {
+ $('input#broadcast_message_color').off('input.messageColor').on('input.messageColor', function() {
var previewColor;
previewColor = $(this).val();
return $('div.broadcast-message-preview').css('background-color', previewColor);
});
- $('input#broadcast_message_font').on('input', function() {
+ $('input#broadcast_message_font').off('input.messageFont').on('input.messageFont', function() {
var previewColor;
previewColor = $(this).val();
return $('div.broadcast-message-preview').css('color', previewColor);
});
previewPath = $('textarea#broadcast_message_message').data('preview-path');
- return $('textarea#broadcast_message_message').on('input', function() {
+ return $('textarea#broadcast_message_message').off('input.messageText').on('input.messageText', function() {
var message;
message = $(this).val();
if (message === '') {
diff --git a/app/assets/javascripts/build.js b/app/assets/javascripts/build.js
index bc13c46443a..37addb866c1 100644
--- a/app/assets/javascripts/build.js
+++ b/app/assets/javascripts/build.js
@@ -42,9 +42,12 @@
this.updateStageDropdownText(this.buildStage);
this.sidebarOnResize();
- this.$document.off('click', '.js-sidebar-build-toggle').on('click', '.js-sidebar-build-toggle', this.sidebarOnClick.bind(this));
- this.$document.off('click', '.stage-item').on('click', '.stage-item', this.updateDropdown);
- this.$document.on('scroll', this.initScrollMonitor.bind(this));
+ this.$document.off('click.sidebarOnClick', '.js-sidebar-build-toggle')
+ .on('click.sidebarOnClick', '.js-sidebar-build-toggle', this.sidebarOnClick.bind(this));
+ this.$document.off('click.updateDropdown', '.stage-item')
+ .on('click.updateDropdown', '.stage-item', this.updateDropdown);
+ this.$document.off('scroll.initScrollMonitor')
+ .on('scroll.initScrollMonitor', this.initScrollMonitor.bind(this));
$(window).off('resize.build').on('resize.build', this.sidebarOnResize.bind(this));
$('a', this.$buildScroll).off('click.stepTrace').on('click.stepTrace', this.stepTrace);
this.updateArtifactRemoveDate();
@@ -75,7 +78,8 @@
top: this.sidebarTranslationLimits.max
});
this.$sidebar.niceScroll();
- this.$document.off('click', '.js-sidebar-build-toggle').on('click', '.js-sidebar-build-toggle', this.toggleSidebar);
+ this.$document.off('click.toggleSidebar', '.js-sidebar-build-toggle')
+ .on('click.toggleSidebar', '.js-sidebar-build-toggle', this.toggleSidebar);
this.$document.off('scroll.translateSidebar').on('scroll.translateSidebar', this.translateSidebar.bind(this));
};
diff --git a/app/assets/javascripts/build_artifacts.js b/app/assets/javascripts/build_artifacts.js
index c423a548a30..e2110e05915 100644
--- a/app/assets/javascripts/build_artifacts.js
+++ b/app/assets/javascripts/build_artifacts.js
@@ -7,18 +7,21 @@
}
BuildArtifacts.prototype.disablePropagation = function() {
- $('.top-block').on('click', '.download', function(e) {
- return e.stopPropagation();
- });
- return $('.tree-holder').on('click', 'tr[data-link] a', function(e) {
- return e.stopImmediatePropagation();
- });
+ $('.top-block').off('click.download')
+ .on('click.download', '.download', function(e) {
+ return e.stopPropagation();
+ });
+ return $('.tree-holder').off('click.treeHolder')
+ .on('click.treeHolder', 'tr[data-link] a', function(e) {
+ return e.stopImmediatePropagation();
+ });
};
BuildArtifacts.prototype.setupEntryClick = function() {
- return $('.tree-holder').on('click', 'tr[data-link]', function(e) {
- return window.location = this.dataset.link;
- });
+ return $('.tree-holder').off('click.visitLink')
+ .on('click.visitLink', 'tr[data-link]', function(e) {
+ return window.location = this.dataset.link;
+ });
};
return BuildArtifacts;
diff --git a/app/assets/javascripts/build_variables.js.es6 b/app/assets/javascripts/build_variables.js.es6
index 993424d422f..9871aad5e04 100644
--- a/app/assets/javascripts/build_variables.js.es6
+++ b/app/assets/javascripts/build_variables.js.es6
@@ -1,7 +1,7 @@
/* eslint-disable func-names, prefer-arrow-callback, space-before-blocks, space-before-function-paren, comma-spacing, max-len */
$(function(){
- $('.reveal-variables').off('click').on('click',function(){
+ $('.reveal-variables').off('click.revealVariables').on('click.revealVariables',function(){
$('.js-build').toggle().niceScroll();
$(this).hide();
});
diff --git a/app/assets/javascripts/ci_lint_editor.js.es6 b/app/assets/javascripts/ci_lint_editor.js.es6
index 56ffaa765a8..d141c2086dc 100644
--- a/app/assets/javascripts/ci_lint_editor.js.es6
+++ b/app/assets/javascripts/ci_lint_editor.js.es6
@@ -7,7 +7,7 @@
this.textarea = document.querySelector('#content');
this.editor.getSession().setMode('ace/mode/yaml');
- this.editor.on('input', () => {
+ this.editor.off('input.updateContent').on('input.updateContent', () => {
const content = this.editor.getSession().getValue();
this.textarea.value = content;
});
diff --git a/app/assets/javascripts/commit/image_file.js b/app/assets/javascripts/commit/image_file.js
index fd8910e916f..2d8cf91c011 100644
--- a/app/assets/javascripts/commit/image_file.js
+++ b/app/assets/javascripts/commit/image_file.js
@@ -28,13 +28,14 @@
var viewMode;
viewMode = ImageFile.viewModes[0];
$('.view-modes', this.file).removeClass('hide');
- $('.view-modes-menu', this.file).on('click', 'li', (function(_this) {
- return function(event) {
- if (!$(event.currentTarget).hasClass('active')) {
- return _this.activateViewMode(event.currentTarget.className);
- }
- };
- })(this));
+ $('.view-modes-menu', this.file).off('click.activateViewMode')
+ .on('click.activateViewMode', 'li', (function(_this) {
+ return function(event) {
+ if (!$(event.currentTarget).hasClass('active')) {
+ return _this.activateViewMode(event.currentTarget.className);
+ }
+ };
+ })(this));
return this.activateViewMode(viewMode);
};
@@ -162,7 +163,7 @@
if (domImg.complete) {
return callback.call(this, domImg.naturalWidth, domImg.naturalHeight);
} else {
- return img.on('load', (function(_this) {
+ return img.off('load.requestImageInfo').on('load.requestImageInfo', (function(_this) {
return function() {
return callback.call(_this, domImg.naturalWidth, domImg.naturalHeight);
};
diff --git a/app/assets/javascripts/commits.js b/app/assets/javascripts/commits.js
index 24a6e4ff0e9..348fc1f5459 100644
--- a/app/assets/javascripts/commits.js
+++ b/app/assets/javascripts/commits.js
@@ -8,7 +8,7 @@
CommitsList.timer = null;
CommitsList.init = function(limit) {
- $("body").on("click", ".day-commits-table li.commit", function(e) {
+ $("body").off('click.visitCommit').on("click.visitCommit", ".day-commits-table li.commit", function(e) {
if (e.target.nodeName !== "A") {
location.href = $(this).attr("url");
e.stopPropagation();
diff --git a/app/assets/javascripts/compare_autocomplete.js.es6 b/app/assets/javascripts/compare_autocomplete.js.es6
index 251f2ded347..b09df29b9c7 100644
--- a/app/assets/javascripts/compare_autocomplete.js.es6
+++ b/app/assets/javascripts/compare_autocomplete.js.es6
@@ -47,7 +47,7 @@
return $el.text().trim();
}
});
- $filterInput.on('keyup', (e) => {
+ $filterInput.off('keyup.filterInput').on('keyup.filterInput', (e) => {
const keyCode = e.keyCode || e.which;
if (keyCode !== 13) return;
const text = $filterInput.val();
@@ -56,7 +56,7 @@
$dropdownContainer.removeClass('open');
});
- $dropdownContainer.on('click', '.dropdown-content a', (e) => {
+ $dropdownContainer.off('click.dropdownTooltip').on('click.dropdownTooltip', '.dropdown-content a', (e) => {
$dropdown.prop('title', e.target.text.replace(/_+?/g, '-'));
if ($dropdown.hasClass('has-tooltip')) {
$dropdown.tooltip('fixTitle');
diff --git a/app/assets/javascripts/confirm_danger_modal.js b/app/assets/javascripts/confirm_danger_modal.js
index 686a48486f3..857ace97071 100644
--- a/app/assets/javascripts/confirm_danger_modal.js
+++ b/app/assets/javascripts/confirm_danger_modal.js
@@ -10,20 +10,20 @@
project_path = $('.js-confirm-danger-match').text();
submit = $('.js-confirm-danger-submit');
submit.disable();
- $('.js-confirm-danger-input').off('input');
- $('.js-confirm-danger-input').on('input', function() {
- if (gl.utils.rstrip($(this).val()) === project_path) {
- return submit.enable();
- } else {
- return submit.disable();
- }
- });
- $('.js-confirm-danger-submit').off('click');
- $('.js-confirm-danger-submit').on('click', (function(_this) {
- return function() {
- return _this.form.submit();
- };
- })(this));
+ $('.js-confirm-danger-input').off('input.confirmInput')
+ .on('input.confirmInput', function() {
+ if (gl.utils.rstrip($(this).val()) === project_path) {
+ return submit.enable();
+ } else {
+ return submit.disable();
+ }
+ });
+ $('.js-confirm-danger-submit').off('click.confirmSubmit')
+ .on('click.confirmSubmit', (function(_this) {
+ return function() {
+ return _this.form.submit();
+ };
+ })(this));
}
return ConfirmDangerModal;
diff --git a/app/assets/javascripts/copy_to_clipboard.js b/app/assets/javascripts/copy_to_clipboard.js
index 6a13f38588d..f71aa5f63da 100644
--- a/app/assets/javascripts/copy_to_clipboard.js
+++ b/app/assets/javascripts/copy_to_clipboard.js
@@ -43,8 +43,8 @@
var clipboard;
clipboard = new Clipboard('[data-clipboard-target], [data-clipboard-text]');
- clipboard.on('success', genericSuccess);
- return clipboard.on('error', genericError);
+ clipboard.off('success.genericSuccess').on('success.genericSuccess', genericSuccess);
+ return clipboard.off('error.genericError').on('error.genericError', genericError);
});
}).call(this);
diff --git a/app/assets/javascripts/create_label.js.es6 b/app/assets/javascripts/create_label.js.es6
index 947c129d5b5..fe1aa440918 100644
--- a/app/assets/javascripts/create_label.js.es6
+++ b/app/assets/javascripts/create_label.js.es6
@@ -24,28 +24,32 @@
}
cleanBinding () {
- this.$colorSuggestions.off('click');
- this.$newLabelField.off('keyup change');
- this.$newColorField.off('keyup change');
- this.$dropdownBack.off('click');
- this.$cancelButton.off('click');
- this.$newLabelCreateButton.off('click');
+ this.$colorSuggestions.off('click.addColorValue');
+ this.$newLabelField.off('keyup.enableLabelCreateButton change.enableLabelCreateButton');
+ this.$newColorField.off('keyup.enableLabelCreateButton change.enableLabelCreateButton');
+ this.$dropdownBack.off('click.resetForm');
+ this.$cancelButton.off('click.cancelForm');
+ this.$newLabelCreateButton.off('click.saveLabel');
}
addBinding () {
const self = this;
- this.$colorSuggestions.on('click', function (e) {
+ this.$colorSuggestions.off('click.addColorValue').on('click.addColorValue', function (e) {
const $this = $(this);
self.addColorValue(e, $this);
});
- this.$newLabelField.on('keyup change', this.enableLabelCreateButton.bind(this));
- this.$newColorField.on('keyup change', this.enableLabelCreateButton.bind(this));
+ this.$newLabelField
+ .off('keyup.enableLabelCreateButton change.enableLabelCreateButton')
+ .on('keyup.enableLabelCreateButton change.enableLabelCreateButton', this.enableLabelCreateButton.bind(this));
+ this.$newColorField
+ .off('keyup.enableLabelCreateButton change.enableLabelCreateButton')
+ .on('keyup.enableLabelCreateButton change.enableLabelCreateButton', this.enableLabelCreateButton.bind(this));
- this.$dropdownBack.on('click', this.resetForm.bind(this));
+ this.$dropdownBack.off('click.resetForm').on('click.resetForm', this.resetForm.bind(this));
- this.$cancelButton.on('click', function(e) {
+ this.$cancelButton.off('click.cancelForm').on('click.cancelForm', function(e) {
e.preventDefault();
e.stopPropagation();
@@ -53,7 +57,7 @@
self.$dropdownBack.trigger('click');
});
- this.$newLabelCreateButton.on('click', this.saveLabel.bind(this));
+ this.$newLabelCreateButton.off('click.saveLabel').on('click.saveLabel', this.saveLabel.bind(this));
}
addColorValue (e, $this) {
diff --git a/app/assets/javascripts/cycle_analytics/cycle_analytics_bundle.js.es6 b/app/assets/javascripts/cycle_analytics/cycle_analytics_bundle.js.es6
index 2f810a69758..480267ac613 100644
--- a/app/assets/javascripts/cycle_analytics/cycle_analytics_bundle.js.es6
+++ b/app/assets/javascripts/cycle_analytics/cycle_analytics_bundle.js.es6
@@ -52,14 +52,15 @@ $(() => {
const $dropdown = $('.js-ca-dropdown');
const $label = $dropdown.find('.dropdown-label');
- $dropdown.find('li a').off('click').on('click', (e) => {
- e.preventDefault();
- const $target = $(e.currentTarget);
- this.startDate = $target.data('value');
+ $dropdown.find('li a').off('click.fetchCycleAnalyticsData')
+ .on('click.fetchCycleAnalyticsData', (e) => {
+ e.preventDefault();
+ const $target = $(e.currentTarget);
+ this.startDate = $target.data('value');
- $label.text($target.text().trim());
- this.fetchCycleAnalyticsData({ startDate: this.startDate });
- });
+ $label.text($target.text().trim());
+ this.fetchCycleAnalyticsData({ startDate: this.startDate });
+ });
},
fetchCycleAnalyticsData(options) {
const fetchOptions = options || { startDate: this.startDate };
diff --git a/app/assets/javascripts/diff.js.es6 b/app/assets/javascripts/diff.js.es6
index 9cf33e62958..d125d425348 100644
--- a/app/assets/javascripts/diff.js.es6
+++ b/app/assets/javascripts/diff.js.es6
@@ -16,9 +16,10 @@
}
$(document)
- .off('click', '.js-unfold, .diff-line-num a')
- .on('click', '.js-unfold', this.handleClickUnfold.bind(this))
- .on('click', '.diff-line-num a', this.handleClickLineNum.bind(this));
+ .off('click.handleClickUnfold', '.js-unfold')
+ .on('click.handleClickUnfold', '.js-unfold', this.handleClickUnfold.bind(this))
+ .off('click.handleClickLineNum', '.diff-line-num a')
+ .on('click.handleClickLineNum', '.diff-line-num a', this.handleClickLineNum.bind(this));
this.highlighSelectedLine();
}
diff --git a/app/assets/javascripts/dropzone_input.js b/app/assets/javascripts/dropzone_input.js
index 56cb39be642..257a0a65023 100644
--- a/app/assets/javascripts/dropzone_input.js
+++ b/app/assets/javascripts/dropzone_input.js
@@ -21,7 +21,7 @@
max_file_size = gon.max_file_size || 10;
form_textarea = $(form).find(".js-gfm-input");
form_textarea.wrap("<div class=\"div-dropzone\"></div>");
- form_textarea.on('paste', (function(_this) {
+ form_textarea.off('paste.handlePaste').on('paste.handlePaste', (function(_this) {
return function(event) {
return handlePaste(event);
};
diff --git a/app/assets/javascripts/due_date_select.js.es6 b/app/assets/javascripts/due_date_select.js.es6
index 201f9fdc3fe..c03008e88ac 100644
--- a/app/assets/javascripts/due_date_select.js.es6
+++ b/app/assets/javascripts/due_date_select.js.es6
@@ -54,7 +54,7 @@
}
initRemoveDueDate() {
- this.$block.on('click', '.js-remove-due-date', (e) => {
+ this.$block.off('click.removeDueDate').on('click.removeDueDate', '.js-remove-due-date', (e) => {
e.preventDefault();
if (this.$dropdown.hasClass('js-issue-boards-due-date')) {
@@ -68,9 +68,10 @@
}
initStopPropagation() {
- $(document).off('click', '.ui-datepicker-header a').on('click', '.ui-datepicker-header a', (e) => {
- return e.stopImmediatePropagation();
- });
+ $(document).off('click.stopImmediatePropagation', '.ui-datepicker-header a')
+ .on('click.stopImmediatePropagation', '.ui-datepicker-header a', (e) => {
+ return e.stopImmediatePropagation();
+ });
}
saveDueDate(isDropdown) {
@@ -158,11 +159,12 @@
dateFormat: 'yy-mm-dd'
});
- $('.js-clear-due-date,.js-clear-start-date').on('click', (e) => {
- e.preventDefault();
- const datepicker = $(e.target).siblings('.datepicker');
- $.datepicker._clearDate(datepicker);
- });
+ $('.js-clear-due-date,.js-clear-start-date').off('click.clearDate')
+ .on('click.clearDate', (e) => {
+ e.preventDefault();
+ const datepicker = $(e.target).siblings('.datepicker');
+ $.datepicker._clearDate(datepicker);
+ });
}
initIssuableSelect() {
diff --git a/app/assets/javascripts/files_comment_button.js b/app/assets/javascripts/files_comment_button.js
index 785f2869970..bf385d268e4 100644
--- a/app/assets/javascripts/files_comment_button.js
+++ b/app/assets/javascripts/files_comment_button.js
@@ -36,7 +36,11 @@
this.render = bind(this.render, this);
this.VIEW_TYPE = $('input#view[type=hidden]').val();
debounce = _.debounce(this.render, DEBOUNCE_TIMEOUT_DURATION);
- $(this.filesContainerElement).off('mouseover', LINE_COLUMN_CLASSES).off('mouseleave', LINE_COLUMN_CLASSES).on('mouseover', LINE_COLUMN_CLASSES, debounce).on('mouseleave', LINE_COLUMN_CLASSES, this.destroy);
+ $(this.filesContainerElement)
+ .off('mouseover.debounce', LINE_COLUMN_CLASSES)
+ .on('mouseover.debounce', LINE_COLUMN_CLASSES, debounce)
+ .off('mouseleave.destroy', LINE_COLUMN_CLASSES)
+ .on('mouseleave.destroy', LINE_COLUMN_CLASSES, this.destroy);
}
FilesCommentButton.prototype.render = function(e) {
diff --git a/app/assets/javascripts/flash.js b/app/assets/javascripts/flash.js
index 804d7d9c4ab..1e055269a1b 100644
--- a/app/assets/javascripts/flash.js
+++ b/app/assets/javascripts/flash.js
@@ -24,7 +24,7 @@
flash = $('<div/>', {
"class": "flash-" + type
});
- flash.on('click', hideFlash);
+ flash.off('click.hideFlash').on('click.hideFlash', hideFlash);
textDiv = $('<div/>', {
"class": 'flash-text',
text: message
diff --git a/app/assets/javascripts/gl_dropdown.js b/app/assets/javascripts/gl_dropdown.js
index bb516b3d2df..0b2782a2429 100644
--- a/app/assets/javascripts/gl_dropdown.js
+++ b/app/assets/javascripts/gl_dropdown.js
@@ -23,7 +23,7 @@
this.filterInputBlur = (ref = this.options.filterInputBlur) != null ? ref : true;
$inputContainer = this.input.parent();
$clearButton = $inputContainer.find('.js-dropdown-input-clear');
- $clearButton.on('click', (function(_this) {
+ $clearButton.off('click.clear').on('click.clear', (function(_this) {
// Clear click
return function(e) {
e.preventDefault();
@@ -34,13 +34,15 @@
// Key events
timeout = "";
this.input
- .on('keydown', function (e) {
+ .off('keydown.preventDefault')
+ .on('keydown.preventDefault', function (e) {
var keyCode = e.which;
if (keyCode === 13 && !options.elIsInput) {
e.preventDefault()
}
})
- .on('input', function() {
+ .off('input.filter')
+ .on('input.filter', function() {
if (this.input.val() !== "" && !$inputContainer.hasClass(HAS_VALUE_CLASS)) {
$inputContainer.addClass(HAS_VALUE_CLASS);
} else if (this.input.val() === "" && $inputContainer.hasClass(HAS_VALUE_CLASS)) {
@@ -304,11 +306,15 @@
});
}
// Event listeners
- this.dropdown.on("shown.bs.dropdown", this.opened);
- this.dropdown.on("hidden.bs.dropdown", this.hidden);
- $(this.el).on("update.label", this.updateLabel);
- this.dropdown.on("click", ".dropdown-menu, .dropdown-menu-close", this.shouldPropagate);
- this.dropdown.on('keyup', (function(_this) {
+ this.dropdown.off('shown.bs.dropdown.opened')
+ .on("shown.bs.dropdown.opened", this.opened);
+ this.dropdown.off('hidden.bs.dropdown.hidden')
+ .on("hidden.bs.dropdown.hidden", this.hidden);
+ $(this.el).off('update.label.updateLabel')
+ .on("update.label.updateLabel", this.updateLabel);
+ this.dropdown.off('click.shouldPropagate')
+ .on("click.shouldPropagate", ".dropdown-menu, .dropdown-menu-close", this.shouldPropagate);
+ this.dropdown.off('keyup.escape').on('keyup.escape', (function(_this) {
return function(e) {
// Escape key
if (e.which === 27) {
@@ -316,7 +322,7 @@
}
};
})(this));
- this.dropdown.on('blur', 'a', (function(_this) {
+ this.dropdown.off('blur.removeOpen').on('blur.removeOpen', 'a', (function(_this) {
return function(e) {
var $dropdownMenu, $relatedTarget;
if (e.relatedTarget != null) {
@@ -329,20 +335,21 @@
};
})(this));
if (this.dropdown.find(".dropdown-toggle-page").length) {
- this.dropdown.find(".dropdown-toggle-page, .dropdown-menu-back").on("click", (function(_this) {
- return function(e) {
- e.preventDefault();
- e.stopPropagation();
- return _this.togglePage();
- };
- })(this));
+ this.dropdown.find(".dropdown-toggle-page, .dropdown-menu-back").off('click.togglePage')
+ .on("click.togglePage", (function(_this) {
+ return function(e) {
+ e.preventDefault();
+ e.stopPropagation();
+ return _this.togglePage();
+ };
+ })(this));
}
if (this.options.selectable) {
selector = ".dropdown-content a";
if (this.dropdown.find(".dropdown-toggle-page").length) {
selector = ".dropdown-page-one .dropdown-content a";
}
- this.dropdown.on("click", selector, function(e) {
+ this.dropdown.off('click.updateLabel').on("click.updateLabel", selector, function(e) {
var $el, selected, selectedObj, isMarking;
$el = $(this);
selected = self.rowClicked($el);
@@ -739,7 +746,7 @@
if (this.dropdown.find(".dropdown-toggle-page").length) {
selector = ".dropdown-page-one " + selector;
}
- return $('body').on('keydown', (function(_this) {
+ return $('body').off('keydown.arrowEvents').on('keydown.arrowEvents', (function(_this) {
return function(e) {
var $listItems, PREV_INDEX, currentKeyCode;
currentKeyCode = e.which;
@@ -775,7 +782,7 @@
};
GitLabDropdown.prototype.removeArrayKeyEvent = function() {
- return $('body').off('keydown');
+ return $('body').off('keydown.arrowEvents');
};
GitLabDropdown.prototype.resetRows = function resetRows() {
diff --git a/app/assets/javascripts/gl_field_error.js.es6 b/app/assets/javascripts/gl_field_error.js.es6
index f7cbecc0385..f9260a1527a 100644
--- a/app/assets/javascripts/gl_field_error.js.es6
+++ b/app/assets/javascripts/gl_field_error.js.es6
@@ -78,7 +78,8 @@
// hidden when injected into DOM
errorAnchor.after(this.fieldErrorElement);
- this.inputElement.off('invalid').on('invalid', this.handleInvalidSubmit.bind(this));
+ this.inputElement.off('invalid.handleInvalidSubmit')
+ .on('invalid.handleInvalidSubmit', this.handleInvalidSubmit.bind(this));
this.scopedSiblings = this.safelySelectSiblings();
}
diff --git a/app/assets/javascripts/gl_field_errors.js.es6 b/app/assets/javascripts/gl_field_errors.js.es6
index 63f9cafa8d0..c3eabcbe6fd 100644
--- a/app/assets/javascripts/gl_field_errors.js.es6
+++ b/app/assets/javascripts/gl_field_errors.js.es6
@@ -24,7 +24,8 @@
.filter((input) => !input.classList.contains(customValidationFlag))
.map((input) => new global.GlFieldError({ input, formErrors: this }));
- this.form.on('submit', this.catchInvalidFormSubmit);
+ this.form.off('submit.catchInvalidFormSubmit')
+ .on('submit.catchInvalidFormSubmit', this.catchInvalidFormSubmit);
}
/* Neccessary to prevent intercept and override invalid form submit
diff --git a/app/assets/javascripts/gl_form.js b/app/assets/javascripts/gl_form.js
index 04814fa0843..2a05674cb2b 100644
--- a/app/assets/javascripts/gl_form.js
+++ b/app/assets/javascripts/gl_form.js
@@ -43,16 +43,16 @@
};
GLForm.prototype.clearEventListeners = function() {
- this.textarea.off('focus');
- this.textarea.off('blur');
+ this.textarea.off('focus.addFocus');
+ this.textarea.off('blur.removeFocus');
return gl.text.removeListeners(this.form);
};
GLForm.prototype.addEventListeners = function() {
- this.textarea.on('focus', function() {
+ this.textarea.off('focus.addFocus').on('focus.addFocus', function() {
return $(this).closest('.md-area').addClass('is-focused');
});
- return this.textarea.on('blur', function() {
+ return this.textarea.off('blur.removeFocus').on('blur.removeFocus', function() {
return $(this).closest('.md-area').removeClass('is-focused');
});
};
diff --git a/app/assets/javascripts/graphs/stat_graph_contributors_graph.js b/app/assets/javascripts/graphs/stat_graph_contributors_graph.js
index 9c5e9381e52..056c51c9a28 100644
--- a/app/assets/javascripts/graphs/stat_graph_contributors_graph.js
+++ b/app/assets/javascripts/graphs/stat_graph_contributors_graph.js
@@ -154,7 +154,8 @@
};
ContributorsMasterGraph.prototype.create_brush = function() {
- return this.brush = d3.svg.brush().x(this.x).on("brushend", this.update_content);
+ return this.brush = d3.svg.brush().x(this.x).off('brushend.updateContent')
+ .on("brushend.updateContent", this.update_content);
};
ContributorsMasterGraph.prototype.draw_path = function(data) {
diff --git a/app/assets/javascripts/group_label_subscription.js.es6 b/app/assets/javascripts/group_label_subscription.js.es6
index 8e10e424412..3e0b786f0f5 100644
--- a/app/assets/javascripts/group_label_subscription.js.es6
+++ b/app/assets/javascripts/group_label_subscription.js.es6
@@ -8,8 +8,10 @@
this.$subscribeButtons = $container.find('.js-subscribe-button');
this.$unsubscribeButtons = $container.find('.js-unsubscribe-button');
- this.$subscribeButtons.on('click', this.subscribe.bind(this));
- this.$unsubscribeButtons.on('click', this.unsubscribe.bind(this));
+ this.$subscribeButtons.off('click.subscribe')
+ .on('click.subscribe', this.subscribe.bind(this));
+ this.$unsubscribeButtons.off('click.unsubscribe')
+ .on('click.unsubscribe', this.unsubscribe.bind(this));
}
unsubscribe(event) {
diff --git a/app/assets/javascripts/header.js b/app/assets/javascripts/header.js
index c7cbf9ca44b..34e9b37c76b 100644
--- a/app/assets/javascripts/header.js
+++ b/app/assets/javascripts/header.js
@@ -1,7 +1,7 @@
/* eslint-disable wrap-iife, func-names, space-before-function-paren, padded-blocks, prefer-arrow-callback, no-var, max-len */
(function() {
- $(document).on('todo:toggle', function(e, count) {
+ $(document).off('todo:toggle.pendingCount').on('todo:toggle.pendingCount', function(e, count) {
var $todoPendingCount = $('.todos-pending-count');
$todoPendingCount.text(gl.text.addDelimiter(count));
$todoPendingCount.toggleClass('hidden', count === 0);
diff --git a/app/assets/javascripts/importer_status.js b/app/assets/javascripts/importer_status.js
index fa795be07ed..22b96001f98 100644
--- a/app/assets/javascripts/importer_status.js
+++ b/app/assets/javascripts/importer_status.js
@@ -10,7 +10,7 @@
}
ImporterStatus.prototype.initStatusPage = function() {
- $('.js-add-to-import').off('click').on('click', (function(_this) {
+ $('.js-add-to-import').off('click.addToImport').on('click.addToImport', (function(_this) {
return function(e) {
var $btn, $namespace_input, $target_field, $tr, id, target_namespace, newName;
$btn = $(e.currentTarget);
@@ -35,7 +35,7 @@
});
};
})(this));
- return $('.js-import-all').off('click').on('click', function(e) {
+ return $('.js-import-all').off('click.importAll').on('click.importAll', function(e) {
var $btn;
$btn = $(this);
$btn.disable().addClass('is-loading');
diff --git a/app/assets/javascripts/issuable.js.es6 b/app/assets/javascripts/issuable.js.es6
index 9c3c96c20ed..5fccb0586fb 100644
--- a/app/assets/javascripts/issuable.js.es6
+++ b/app/assets/javascripts/issuable.js.es6
@@ -27,10 +27,10 @@
// `immediate` param set to false debounces on the `trailing` edge, lets user finish typing
const debouncedExecSearch = _.debounce(Issuable.executeSearch, 1000, false);
- $searchInput.off('keyup').on('keyup', debouncedExecSearch);
+ $searchInput.off('keyup.debouncedExecSearch').on('keyup.debouncedExecSearch', debouncedExecSearch);
// ensures existing filters are preserved when manually submitted
- $('#issuable_search_form').on('submit', (e) => {
+ $('#issuable_search_form').off('submit.debouncedExecSearch').on('submit.debouncedExecSearch', (e) => {
e.preventDefault();
debouncedExecSearch(e);
});
@@ -97,16 +97,17 @@
Issuable.filterResults($filtersForm);
},
initLabelFilterRemove: function() {
- return $(document).off('click', '.js-label-filter-remove').on('click', '.js-label-filter-remove', function(e) {
- var $button;
- $button = $(this);
- // Remove the label input box
- $('input[name="label_name[]"]').filter(function() {
- return this.value === $button.data('label');
- }).remove();
- // Submit the form to get new data
- Issuable.filterResults($('.filter-form'));
- });
+ return $(document).off('click.filterResults', '.js-label-filter-remove')
+ .on('click.filterResults', '.js-label-filter-remove', function(e) {
+ var $button;
+ $button = $(this);
+ // Remove the label input box
+ $('input[name="label_name[]"]').filter(function() {
+ return this.value === $button.data('label');
+ }).remove();
+ // Submit the form to get new data
+ Issuable.filterResults($('.filter-form'));
+ });
},
filterResults: (function(_this) {
return function(form) {
@@ -124,7 +125,7 @@
};
})(this),
initResetFilters: function() {
- $('.reset-filters').on('click', function(e) {
+ $('.reset-filters').off('click.resetFilters').on('click.resetFilters', function(e) {
e.preventDefault();
const target = e.target;
const $form = $(target).parents('.js-filter-form');
@@ -136,11 +137,12 @@
},
initChecks: function() {
this.issuableBulkActions = $('.bulk-update').data('bulkActions');
- $('.check_all_issues').off('click').on('click', function() {
+ $('.check_all_issues').off('click.checkChanged').on('click.checkChanged', function() {
$('.selected_issue').prop('checked', this.checked);
return Issuable.checkChanged();
});
- return $('.selected_issue').off('change').on('change', Issuable.checkChanged.bind(this));
+ return $('.selected_issue').off('change.checkChanged')
+ .on('change.checkChanged', Issuable.checkChanged.bind(this));
},
checkChanged: function() {
const $checkedIssues = $('.selected_issue:checked');
@@ -167,7 +169,7 @@
},
resetIncomingEmailToken: function() {
- $('.incoming-email-token-reset').on('click', function(e) {
+ $('.incoming-email-token-reset').off('click.resetToken').on('click.resetToken', function(e) {
e.preventDefault();
$.ajax({
diff --git a/app/assets/javascripts/issuable_context.js b/app/assets/javascripts/issuable_context.js
index 4aaad111082..023701d2ca6 100644
--- a/app/assets/javascripts/issuable_context.js
+++ b/app/assets/javascripts/issuable_context.js
@@ -4,22 +4,28 @@
(function() {
this.IssuableContext = (function() {
function IssuableContext(currentUser) {
+ var $document = $(document);
+
this.initParticipants();
new UsersSelect(currentUser);
$('select.select2').select2({
width: 'resolve',
dropdownAutoWidth: true
});
- $(".issuable-sidebar .inline-update").on("change", "select", function() {
- return $(this).submit();
- });
- $(".issuable-sidebar .inline-update").on("change", ".js-assignee", function() {
- return $(this).submit();
- });
- $(document).off('click', '.issuable-sidebar .dropdown-content a').on('click', '.issuable-sidebar .dropdown-content a', function(e) {
- return e.preventDefault();
- });
- $(document).off('click', '.edit-link').on('click', '.edit-link', function(e) {
+ $(".issuable-sidebar .inline-update").off('change.submitSelect')
+ .on("change.submitSelect", "select", function() {
+ return $(this).submit();
+ });
+ $(".issuable-sidebar .inline-update").off('change.submitAssignee')
+ .on("change.submitAssignee", ".js-assignee", function() {
+ return $(this).submit();
+ });
+
+ $document.off('click.preventDefault', '.issuable-sidebar .dropdown-content a')
+ .on('click.preventDefault', '.issuable-sidebar .dropdown-content a', function(e) {
+ return e.preventDefault();
+ });
+ $document.off('click.editLink', '.edit-link').on('click.editLink', '.edit-link', function(e) {
var $block, $selectbox;
e.preventDefault();
$block = $(this).parents('.block');
@@ -43,7 +49,8 @@
IssuableContext.prototype.initParticipants = function() {
var _this;
_this = this;
- $(document).on("click", ".js-participants-more", this.toggleHiddenParticipants);
+ $(document).off('click.toggleHiddenParticipants')
+ .on("click.toggleHiddenParticipants", ".js-participants-more", this.toggleHiddenParticipants);
return $(".js-participants-author").each(function(i) {
if (i >= _this.PARTICIPANTS_ROW_COUNT) {
return $(this).addClass("js-participants-hidden").hide();
diff --git a/app/assets/javascripts/issuable_form.js b/app/assets/javascripts/issuable_form.js
index 1c4086517fe..2e696127aea 100644
--- a/app/assets/javascripts/issuable_form.js
+++ b/app/assets/javascripts/issuable_form.js
@@ -29,8 +29,8 @@
return;
}
this.initAutosave();
- this.form.on("submit", this.handleSubmit);
- this.form.on("click", ".btn-cancel", this.resetAutosave);
+ this.form.off('submit.handleSubmit').on("submit.handleSubmit", this.handleSubmit);
+ this.form.off('click.resetAutosave').on("click.resetAutosave", ".btn-cancel", this.resetAutosave);
this.initWip();
this.initMoveDropdown();
$issuableDueDate = $('#issuable-due-date');
@@ -70,8 +70,9 @@
if (!(this.$wipExplanation.length && this.$noWipExplanation.length)) {
return;
}
- this.form.on("click", ".js-toggle-wip", this.toggleWip);
- this.titleField.on("keyup blur", this.renderWipExplanation);
+ this.form.off('click.toggleWip').on("click.toggleWip", ".js-toggle-wip", this.toggleWip);
+ this.titleField.off('keyup.renderWipExplanation blur.renderWipExplanation')
+ .on("keyup.renderWipExplanation blur.renderWipExplanation", this.renderWipExplanation);
return this.renderWipExplanation();
};
diff --git a/app/assets/javascripts/issue.js b/app/assets/javascripts/issue.js
index 61e8531153b..2e8ebc9c3c6 100644
--- a/app/assets/javascripts/issue.js
+++ b/app/assets/javascripts/issue.js
@@ -24,14 +24,15 @@
Issue.prototype.initTaskList = function() {
$('.detail-page-description .js-task-list-container').taskList('enable');
- return $(document).on('tasklist:changed', '.detail-page-description .js-task-list-container', this.updateTaskList);
+ return $(document).off('tasklist:changed.updateTaskList')
+ .on('tasklist:changed.updateTaskList', '.detail-page-description .js-task-list-container', this.updateTaskList);
};
Issue.prototype.initIssueBtnEventListeners = function() {
var _this, issueFailMessage;
_this = this;
issueFailMessage = 'Unable to update this issue at this time.';
- return $('a.btn-close, a.btn-reopen').on('click', function(e) {
+ return $('a.btn-close, a.btn-reopen').off('click.submitIssue').on('click.submitIssue', function(e) {
var $this, isClose, shouldSubmit, url;
e.preventDefault();
e.stopImmediatePropagation();
@@ -84,7 +85,7 @@
Issue.prototype.disableTaskList = function() {
$('.detail-page-description .js-task-list-container').taskList('disable');
- return $(document).off('tasklist:changed', '.detail-page-description .js-task-list-container');
+ return $(document).off('tasklist:changed.updateTaskList', '.detail-page-description .js-task-list-container');
};
Issue.prototype.updateTaskList = function() {
diff --git a/app/assets/javascripts/issues_bulk_assignment.js.es6 b/app/assets/javascripts/issues_bulk_assignment.js.es6
index 52fd5d71b18..47fa248285f 100644
--- a/app/assets/javascripts/issues_bulk_assignment.js.es6
+++ b/app/assets/javascripts/issues_bulk_assignment.js.es6
@@ -18,7 +18,8 @@
}
bindEvents() {
- return this.form.off('submit').on('submit', this.onFormSubmit.bind(this));
+ return this.form.off('submit.onFormSubmit')
+ .on('submit.onFormSubmit', this.onFormSubmit.bind(this));
}
onFormSubmit(e) {
diff --git a/app/assets/javascripts/label_manager.js.es6 b/app/assets/javascripts/label_manager.js.es6
index 33c5e35324d..ef3dbbc6903 100644
--- a/app/assets/javascripts/label_manager.js.es6
+++ b/app/assets/javascripts/label_manager.js.es6
@@ -19,7 +19,8 @@
}
bindEvents() {
- return this.togglePriorityButton.on('click', this, this.onTogglePriorityClick);
+ return this.off('click.onTogglePriorityClick')
+ .on('click.onTogglePriorityClick', this, this.onTogglePriorityClick);
}
onTogglePriorityClick(e) {
diff --git a/app/assets/javascripts/labels.js b/app/assets/javascripts/labels.js
index 10de13c9a8a..78801ef86b1 100644
--- a/app/assets/javascripts/labels.js
+++ b/app/assets/javascripts/labels.js
@@ -14,13 +14,17 @@
}
Labels.prototype.addBinding = function() {
- $(document).on('click', '.suggest-colors a', this.setSuggestedColor);
- return $(document).on('input', 'input#label_color', this.updateColorPreview);
+ var $document = $(document);
+ $document.off('click.setSuggestedColor')
+ .on('click.setSuggestedColor', '.suggest-colors a', this.setSuggestedColor);
+ return $document.off('input.updateColorPreview')
+ .on('input.updateColorPreview', 'input#label_color', this.updateColorPreview);
};
Labels.prototype.cleanBinding = function() {
- $(document).off('click', '.suggest-colors a');
- return $(document).off('input', 'input#label_color');
+ var $document = $(document);
+ $document.off('click.setSuggestedColor', '.suggest-colors a');
+ return $document.off('input.updateColorPreview', 'input#label_color');
};
Labels.prototype.updateColorPreview = function() {
diff --git a/app/assets/javascripts/labels_select.js b/app/assets/javascripts/labels_select.js
index ec2fc87bece..9e0dc367f13 100644
--- a/app/assets/javascripts/labels_select.js
+++ b/app/assets/javascripts/labels_select.js
@@ -412,7 +412,8 @@
}
LabelsSelect.prototype.bindEvents = function() {
- return $('body').on('change', '.selected_issue', this.onSelectCheckboxIssue);
+ return $('body').off('change.onSelectCheckboxIssue')
+ .on('change.onSelectCheckboxIssue', '.selected_issue', this.onSelectCheckboxIssue);
};
LabelsSelect.prototype.onSelectCheckboxIssue = function() {
diff --git a/app/assets/javascripts/layout_nav.js b/app/assets/javascripts/layout_nav.js
index 2b700539c2b..815b1684491 100644
--- a/app/assets/javascripts/layout_nav.js
+++ b/app/assets/javascripts/layout_nav.js
@@ -17,7 +17,7 @@
$(window).off('resize.nav').on('resize.nav', function() {
return hideEndFade($scrollingTabs);
});
- $scrollingTabs.off('scroll').on('scroll', function(event) {
+ $scrollingTabs.off('scroll.initScrolling').on('scroll.initScrolling', function(event) {
var $this, currentPosition, maxPosition;
$this = $(this);
currentPosition = $this.scrollLeft();
diff --git a/app/assets/javascripts/lib/utils/text_utility.js b/app/assets/javascripts/lib/utils/text_utility.js
index 5066e3282d7..4e5b3cc5450 100644
--- a/app/assets/javascripts/lib/utils/text_utility.js
+++ b/app/assets/javascripts/lib/utils/text_utility.js
@@ -133,7 +133,7 @@
gl.text.init = function(form) {
var self;
self = this;
- return $('.js-md', form).off('click').on('click', function() {
+ return $('.js-md', form).off('click.updateText').on('click.updateText', function() {
var $this;
$this = $(this);
return self.updateText($this.closest('.md-area').find('textarea'), $this.data('md-tag'), $this.data('md-block'), !$this.data('md-prepend'));
diff --git a/app/assets/javascripts/line_highlighter.js b/app/assets/javascripts/line_highlighter.js
index 9af89b79f84..d0d1e5d4cf9 100644
--- a/app/assets/javascripts/line_highlighter.js
+++ b/app/assets/javascripts/line_highlighter.js
@@ -67,16 +67,18 @@
}
LineHighlighter.prototype.bindEvents = function() {
- $('#blob-content-holder').on('mousedown', 'a[data-line-number]', this.clickHandler);
+ $('#blob-content-holder').off('mousedown.clickHandler')
+ .on('mousedown.clickHandler', 'a[data-line-number]', this.clickHandler);
// While it may seem odd to bind to the mousedown event and then throw away
// the click event, there is a method to our madness.
//
// If not done this way, the line number anchor will sometimes keep its
// active state even when the event is cancelled, resulting in an ugly border
// around the link and/or a persisted underline text decoration.
- return $('#blob-content-holder').on('click', 'a[data-line-number]', function(event) {
- return event.preventDefault();
- });
+ return $('#blob-content-holder').off('click.preventDefault')
+ .on('click.preventDefault', 'a[data-line-number]', function(event) {
+ return event.preventDefault();
+ });
};
LineHighlighter.prototype.clickHandler = function(event) {
diff --git a/app/assets/javascripts/logo.js b/app/assets/javascripts/logo.js
index 0ae6df311bb..b87980b1882 100644
--- a/app/assets/javascripts/logo.js
+++ b/app/assets/javascripts/logo.js
@@ -1,15 +1,19 @@
-/* eslint-disable func-names, space-before-function-paren, prefer-arrow-callback, padded-blocks */
+/* eslint-disable func-names, space-before-function-paren, prefer-arrow-callback, padded-blocks, no-var, max-len */
/* global Turbolinks */
(function() {
+ var $document = $(document);
+
Turbolinks.enableProgressBar();
- $(document).on('page:fetch', function() {
- $('.tanuki-logo').addClass('animate');
- });
+ $document.off('page:fetch.startAnimation')
+ .on('page:fetch.startAnimation', function() {
+ $('.tanuki-logo').addClass('animate');
+ });
- $(document).on('page:change', function() {
- $('.tanuki-logo').removeClass('animate');
- });
+ $document.off('page:change.stopAnimation')
+ .on('page:change.stopAnimation', function() {
+ $('.tanuki-logo').removeClass('animate');
+ });
}).call(this);
diff --git a/app/assets/javascripts/member_expiration_date.js.es6 b/app/assets/javascripts/member_expiration_date.js.es6
index bf6c0ec2798..ca72cbc86bd 100644
--- a/app/assets/javascripts/member_expiration_date.js.es6
+++ b/app/assets/javascripts/member_expiration_date.js.es6
@@ -20,16 +20,17 @@
},
});
- inputs.next('.js-clear-input').on('click', function clicked(event) {
- event.preventDefault();
+ inputs.next('.js-clear-input').off('click.clearInput')
+ .on('click.clearInput', function clicked(event) {
+ event.preventDefault();
- const input = $(this).closest('.clearable-input').find(selector);
- input.datepicker('setDate', null)
- .trigger('change');
- toggleClearInput.call(input);
- });
+ const input = $(this).closest('.clearable-input').find(selector);
+ input.datepicker('setDate', null)
+ .trigger('change');
+ toggleClearInput.call(input);
+ });
- inputs.on('blur', toggleClearInput);
+ inputs.off('blur.toggleClearInput').on('blur.toggleClearInput', toggleClearInput);
inputs.each(toggleClearInput);
};
diff --git a/app/assets/javascripts/members.js.es6 b/app/assets/javascripts/members.js.es6
index e3f367a11eb..bedaab8447b 100644
--- a/app/assets/javascripts/members.js.es6
+++ b/app/assets/javascripts/members.js.es6
@@ -9,9 +9,12 @@
}
addListeners() {
- $('.project_member, .group_member').off('ajax:success').on('ajax:success', this.removeRow);
- $('.js-member-update-control').off('change').on('change', this.formSubmit.bind(this));
- $('.js-edit-member-form').off('ajax:success').on('ajax:success', this.formSuccess.bind(this));
+ $('.project_member, .group_member').off('ajax:success.removeRow')
+ .on('ajax:success.removeRow', this.removeRow);
+ $('.js-member-update-control').off('change.formSubmit')
+ .on('change.formSubmit', this.formSubmit.bind(this));
+ $('.js-edit-member-form').off('ajax:success.formSuccess')
+ .on('ajax:success.formSuccess', this.formSuccess.bind(this));
gl.utils.disableButtonIfEmptyField('#user_ids', 'input[name=commit]', 'change');
}
diff --git a/app/assets/javascripts/merge_conflicts/components/diff_file_editor.js.es6 b/app/assets/javascripts/merge_conflicts/components/diff_file_editor.js.es6
index f95b079c972..1efa6cd0002 100644
--- a/app/assets/javascripts/merge_conflicts/components/diff_file_editor.js.es6
+++ b/app/assets/javascripts/merge_conflicts/components/diff_file_editor.js.es6
@@ -61,9 +61,10 @@
this.editor = ace.edit(content);
this.editor.$blockScrolling = Infinity; // Turn off annoying warning
this.editor.getSession().setMode(`ace/mode/${file.blob_ace_mode}`);
- this.editor.on('change', () => {
- this.saveDiffResolution();
- });
+ this.editor.off('change.saveDiffResolution')
+ .on('change.saveDiffResolution', () => {
+ this.saveDiffResolution();
+ });
this.saveDiffResolution();
})
.fail(() => {
diff --git a/app/assets/javascripts/merge_request.js b/app/assets/javascripts/merge_request.js
index 244c2f6746c..6cb4bc33c17 100644
--- a/app/assets/javascripts/merge_request.js
+++ b/app/assets/javascripts/merge_request.js
@@ -18,11 +18,12 @@
this.opts = opts != null ? opts : {};
this.submitNoteForm = bind(this.submitNoteForm, this);
this.$el = $('.merge-request');
- this.$('.show-all-commits').on('click', (function(_this) {
- return function() {
- return _this.showAllCommits();
- };
- })(this));
+ this.$('.show-all-commits').off('click.showAllCommits')
+ .on('click.showAllCommits', (function(_this) {
+ return function() {
+ return _this.showAllCommits();
+ };
+ })(this));
this.initTabs();
// Prevent duplicate event bindings
this.disableTaskList();
@@ -52,13 +53,13 @@
MergeRequest.prototype.initTaskList = function() {
$('.detail-page-description .js-task-list-container').taskList('enable');
- return $(document).on('tasklist:changed', '.detail-page-description .js-task-list-container', this.updateTaskList);
+ return $(document).on('tasklist:changed.updateTaskList', '.detail-page-description .js-task-list-container', this.updateTaskList);
};
MergeRequest.prototype.initMRBtnListeners = function() {
var _this;
_this = this;
- return $('a.btn-close, a.btn-reopen').on('click', function(e) {
+ return $('a.btn-close, a.btn-reopen').off('click.submitNoteForm').on('click.submitNoteForm', function(e) {
var $this, shouldSubmit;
$this = $(this);
shouldSubmit = $this.hasClass('btn-comment');
@@ -87,7 +88,7 @@
MergeRequest.prototype.disableTaskList = function() {
$('.detail-page-description .js-task-list-container').taskList('disable');
- return $(document).off('tasklist:changed', '.detail-page-description .js-task-list-container');
+ return $(document).off('tasklist:changed.updateTaskList', '.detail-page-description .js-task-list-container');
};
MergeRequest.prototype.updateTaskList = function() {
@@ -112,21 +113,23 @@
MergeRequest.prototype.initCommitMessageListeners = function() {
var textarea = $('textarea.js-commit-message');
- $('a.js-with-description-link').on('click', function(e) {
- e.preventDefault();
+ $('a.js-with-description-link').off('click.hideDescriptionHint')
+ .on('click.hideDescriptionHint', function(e) {
+ e.preventDefault();
- textarea.val(textarea.data('messageWithDescription'));
- $('p.js-with-description-hint').hide();
- $('p.js-without-description-hint').show();
- });
+ textarea.val(textarea.data('messageWithDescription'));
+ $('p.js-with-description-hint').hide();
+ $('p.js-without-description-hint').show();
+ });
- $('a.js-without-description-link').on('click', function(e) {
- e.preventDefault();
+ $('a.js-without-description-link').off('click.showDescriptionHint')
+ .on('click.showDescriptionHint', function(e) {
+ e.preventDefault();
- textarea.val(textarea.data('messageWithoutDescription'));
- $('p.js-with-description-hint').show();
- $('p.js-without-description-hint').hide();
- });
+ textarea.val(textarea.data('messageWithoutDescription'));
+ $('p.js-with-description-hint').show();
+ $('p.js-without-description-hint').hide();
+ });
};
return MergeRequest;
diff --git a/app/assets/javascripts/merge_request_tabs.js.es6 b/app/assets/javascripts/merge_request_tabs.js.es6
index 860e7e066a0..2fae550302f 100644
--- a/app/assets/javascripts/merge_request_tabs.js.es6
+++ b/app/assets/javascripts/merge_request_tabs.js.es6
@@ -81,14 +81,16 @@
bindEvents() {
$(document)
- .on('shown.bs.tab', '.merge-request-tabs a[data-toggle="tab"]', this.tabShown)
- .on('click', '.js-show-tab', this.showTab);
+ .off('shown.bs.tab.tabShown')
+ .on('shown.bs.tab.tabShown', '.merge-request-tabs a[data-toggle="tab"]', this.tabShown)
+ .off('click.showTab')
+ .on('click.showTab', '.js-show-tab', this.showTab);
}
unbindEvents() {
$(document)
- .off('shown.bs.tab', '.merge-request-tabs a[data-toggle="tab"]', this.tabShown)
- .off('click', '.js-show-tab', this.showTab);
+ .off('shown.bs.tab.tabShown', '.merge-request-tabs a[data-toggle="tab"]', this.tabShown)
+ .off('click.showTab', '.js-show-tab', this.showTab);
}
showTab(e) {
@@ -347,16 +349,16 @@
const $fixedNav = $('.navbar-fixed-top');
const $layoutNav = $('.layout-nav');
- $tabs.off('affix.bs.affix affix-top.bs.affix')
- .affix({
- offset: {
- top: () => (
- $diffTabs.offset().top - $tabs.height() - $fixedNav.height() - $layoutNav.height()
- ),
- },
- })
- .on('affix.bs.affix', () => $diffTabs.css({ marginTop: $tabs.height() }))
- .on('affix-top.bs.affix', () => $diffTabs.css({ marginTop: '' }));
+ $tabs.affix({
+ offset: {
+ top: () => (
+ $diffTabs.offset().top - $tabs.height() - $fixedNav.height() - $layoutNav.height()
+ ),
+ },
+ }).off('affix.bs.affix.diffTabsHeight')
+ .on('affix.bs.affix.diffTabsHeight', () => $diffTabs.css({ marginTop: $tabs.height() }))
+ .off('affix-top.bs.affix.diffTabsMargin')
+ .on('affix-top.bs.affix.diffTabsMargin', () => $diffTabs.css({ marginTop: '' }));
// Fix bug when reloading the page already scrolling
if ($tabs.hasClass('affix')) {
diff --git a/app/assets/javascripts/merge_request_widget/ci_bundle.js.es6 b/app/assets/javascripts/merge_request_widget/ci_bundle.js.es6
index 2b074994b4a..db5d8061c25 100644
--- a/app/assets/javascripts/merge_request_widget/ci_bundle.js.es6
+++ b/app/assets/javascripts/merge_request_widget/ci_bundle.js.es6
@@ -9,32 +9,38 @@
* */
if ($('.accept-mr-form').length) {
- $('.accept-mr-form').on('ajax:send', () => {
- $('.accept-mr-form :input').disable();
- });
+ $('.accept-mr-form').off('ajax:send.acceptMRSend')
+ .on('ajax:send.acceptMRSend', () => {
+ $('.accept-mr-form :input').disable();
+ });
- $('.accept_merge_request').on('click', () => {
- $('.js-merge-button').html('<i class="fa fa-spinner fa-spin"></i> Merge in progress');
- });
+ $('.accept_merge_request').off('click.mergeInProgress')
+ .on('click.mergeInProgress', () => {
+ $('.js-merge-button').html('<i class="fa fa-spinner fa-spin"></i> Merge in progress');
+ });
- $('.merge_when_build_succeeds').on('click', () => {
- $('#merge_when_build_succeeds').val('1');
- });
+ $('.merge_when_build_succeeds').off('click.whenBuildSucceeds')
+ .on('click.whenBuildSucceeds', () => {
+ $('#merge_when_build_succeeds').val('1');
+ });
- $('.js-merge-dropdown a').on('click', (e) => {
- e.preventDefault();
- $(this).closest('form').submit();
- });
+ $('.js-merge-dropdown a').off('click.mergeMRSubmit')
+ .on('click.mergeMRSubmit', (e) => {
+ e.preventDefault();
+ $(this).closest('form').submit();
+ });
} else if ($('.rebase-in-progress').length) {
merge_request_widget.rebaseInProgress();
} else if ($('.rebase-mr-form').length) {
- $('.rebase-mr-form').on('ajax:send', () => {
- $('.rebase-mr-form :input').disable();
- });
+ $('.rebase-mr-form').off('ajax:send.rebaseMRSend')
+ .on('ajax:send.rebaseMRSend', () => {
+ $('.rebase-mr-form :input').disable();
+ });
- $('.js-rebase-button').on('click', () => {
- $('.js-rebase-button').html("<i class='fa fa-spinner fa-spin'></i> Rebase in progress");
- });
+ $('.js-rebase-button').off('click.rebaseInProgress')
+ .on('click.rebaseInProgress', () => {
+ $('.js-rebase-button').html("<i class='fa fa-spinner fa-spin'></i> Rebase in progress");
+ });
} else {
merge_request_widget.getMergeStatus();
}
diff --git a/app/assets/javascripts/merged_buttons.js b/app/assets/javascripts/merged_buttons.js
index 9f8af46c715..1648a9b6470 100644
--- a/app/assets/javascripts/merged_buttons.js
+++ b/app/assets/javascripts/merged_buttons.js
@@ -14,15 +14,20 @@
}
MergedButtons.prototype.cleanEventListeners = function() {
- $(document).off('click', '.remove_source_branch');
- $(document).off('ajax:success', '.remove_source_branch');
- return $(document).off('ajax:error', '.remove_source_branch');
+ var $document = $(document);
+ $document.off('click.removeSourceBranch', '.remove_source_branch');
+ $document.off('ajax:success.removeBranchSuccess', '.remove_source_branch');
+ return $document.off('ajax:error.removeBranchError', '.remove_source_branch');
};
MergedButtons.prototype.initEventListeners = function() {
- $(document).on('click', '.remove_source_branch', this.removeSourceBranch);
- $(document).on('ajax:success', '.remove_source_branch', this.removeBranchSuccess);
- return $(document).on('ajax:error', '.remove_source_branch', this.removeBranchError);
+ var $document = $(document);
+ $document.off('click.removeSourceBranch')
+ .on('click.removeSourceBranch', '.remove_source_branch', this.removeSourceBranch);
+ $document.off('ajax:success.removeBranchSuccess')
+ .on('ajax:success.removeBranchSuccess', '.remove_source_branch', this.removeBranchSuccess);
+ return $document.off('ajax:error.removeBranchError')
+ .on('ajax:error.removeBranchError', '.remove_source_branch', this.removeBranchError);
};
MergedButtons.prototype.removeSourceBranch = function() {
diff --git a/app/assets/javascripts/mini_pipeline_graph_dropdown.js.es6 b/app/assets/javascripts/mini_pipeline_graph_dropdown.js.es6
index 90b3366f14b..4fd11bc57e7 100644
--- a/app/assets/javascripts/mini_pipeline_graph_dropdown.js.es6
+++ b/app/assets/javascripts/mini_pipeline_graph_dropdown.js.es6
@@ -31,8 +31,8 @@
bindEvents() {
const dropdownButtonSelector = 'button.js-builds-dropdown-button';
- $(this.container).off('click', dropdownButtonSelector, this.getBuildsList)
- .on('click', dropdownButtonSelector, this.getBuildsList);
+ $(this.container).off('click.getBuildsList', dropdownButtonSelector, this.getBuildsList)
+ .on('click.getBuildsList', dropdownButtonSelector, this.getBuildsList);
}
/**
diff --git a/app/assets/javascripts/new_branch_form.js b/app/assets/javascripts/new_branch_form.js
index 29a323dd4c6..963f948d0ba 100644
--- a/app/assets/javascripts/new_branch_form.js
+++ b/app/assets/javascripts/new_branch_form.js
@@ -16,7 +16,7 @@
}
NewBranchForm.prototype.addBinding = function() {
- return this.name.on('blur', this.validate);
+ return this.name.off('blur.validate').on('blur.validate', this.validate);
};
NewBranchForm.prototype.init = function() {
diff --git a/app/assets/javascripts/notes.js b/app/assets/javascripts/notes.js
index 603db88567d..d7446dad290 100644
--- a/app/assets/javascripts/notes.js
+++ b/app/assets/javascripts/notes.js
@@ -61,71 +61,94 @@
}
Notes.prototype.addBinding = function() {
+ var $document = $(document);
// add note to UI after creation
- $(document).on("ajax:success", ".js-main-target-form", this.addNote);
- $(document).on("ajax:success", ".js-discussion-note-form", this.addDiscussionNote);
+ $document.off('ajax:success.addNote')
+ .on("ajax:success.addNote", ".js-main-target-form", this.addNote);
+ $document.off('ajax:success.addDiscussionNote')
+ .on("ajax:success.addDiscussionNote", ".js-discussion-note-form", this.addDiscussionNote);
// catch note ajax errors
- $(document).on("ajax:error", ".js-main-target-form", this.addNoteError);
+ $document.off('ajax:error.addNoteError')
+ .on("ajax:error.addNoteError", ".js-main-target-form", this.addNoteError);
// change note in UI after update
- $(document).on("ajax:success", "form.edit-note", this.updateNote);
+ $document.off('ajax:success.updateNote')
+ .on("ajax:success.updateNote", "form.edit-note", this.updateNote);
// Edit note link
- $(document).on("click", ".js-note-edit", this.showEditForm.bind(this));
- $(document).on("click", ".note-edit-cancel", this.cancelEdit);
+ $document.off('click.showEditForm')
+ .on("click.showEditForm", ".js-note-edit", this.showEditForm.bind(this));
+ $document.off('click.cancelEdit')
+ .on("click.cancelEdit", ".note-edit-cancel", this.cancelEdit);
// Reopen and close actions for Issue/MR combined with note form submit
- $(document).on("click", ".js-comment-button", this.updateCloseButton);
- $(document).on("keyup input", ".js-note-text", this.updateTargetButtons);
+ $document.off('click.updateCloseButton')
+ .on("click.updateCloseButton", ".js-comment-button", this.updateCloseButton);
+ $document.off('keyup.updateTargetButtons input.updateTargetButtons')
+ .on("keyup.updateTargetButtons input.updateTargetButtons", ".js-note-text", this.updateTargetButtons);
// resolve a discussion
- $(document).on('click', '.js-comment-resolve-button', this.resolveDiscussion);
+ $document.off('click.resolveDiscussion')
+ .on('click.resolveDiscussion', '.js-comment-resolve-button', this.resolveDiscussion);
// remove a note (in general)
- $(document).on("click", ".js-note-delete", this.removeNote);
+ $document.off('click.removeNote')
+ .on("click.removeNote", ".js-note-delete", this.removeNote);
// delete note attachment
- $(document).on("click", ".js-note-attachment-delete", this.removeAttachment);
+ $document.off('click.removeAttachment')
+ .on("click.removeAttachment", ".js-note-attachment-delete", this.removeAttachment);
// reset main target form after submit
- $(document).on("ajax:complete", ".js-main-target-form", this.reenableTargetFormSubmitButton);
- $(document).on("ajax:success", ".js-main-target-form", this.resetMainTargetForm);
+ $document.off('ajax:complete.reenableTargetFormSubmitButton')
+ .on("ajax:complete.reenableTargetFormSubmitButton", ".js-main-target-form", this.reenableTargetFormSubmitButton);
+ $document.off('ajax:success.resetMainTargetForm')
+ .on("ajax:success.resetMainTargetForm", ".js-main-target-form", this.resetMainTargetForm);
// reset main target form when clicking discard
- $(document).on("click", ".js-note-discard", this.resetMainTargetForm);
+ $document.off('click.resetMainTargetForm')
+ .on("click.resetMainTargetForm", ".js-note-discard", this.resetMainTargetForm);
// update the file name when an attachment is selected
- $(document).on("change", ".js-note-attachment-input", this.updateFormAttachment);
+ $document.off('change.updateFormAttachment')
+ .on("change.updateFormAttachment", ".js-note-attachment-input", this.updateFormAttachment);
// reply to diff/discussion notes
- $(document).on("click", ".js-discussion-reply-button", this.replyToDiscussionNote);
+ $document.off('click.replyToDiscussionNote')
+ .on("click.replyToDiscussionNote", ".js-discussion-reply-button", this.replyToDiscussionNote);
// add diff note
- $(document).on("click", ".js-add-diff-note-button", this.addDiffNote);
+ $document.off('click.addDiffNote')
+ .on("click.addDiffNote", ".js-add-diff-note-button", this.addDiffNote);
// hide diff note form
- $(document).on("click", ".js-close-discussion-note-form", this.cancelDiscussionForm);
+ $document.off('click.cancelDiscussionForm')
+ .on("click.cancelDiscussionForm", ".js-close-discussion-note-form", this.cancelDiscussionForm);
// toggle commit list
- $(document).on("click", '.system-note-commit-list-toggler', this.toggleCommitList);
+ $document.off('click.toggleCommitList')
+ .on("click.toggleCommitList", '.system-note-commit-list-toggler', this.toggleCommitList);
// fetch notes when tab becomes visible
- $(document).on("visibilitychange", this.visibilityChange);
+ $document.off('visibilitychange.visibilityChange')
+ .on("visibilitychange.visibilityChange", this.visibilityChange);
// when issue status changes, we need to refresh data
- $(document).on("issuable:change", this.refresh);
+ $document.off('issuable:change.refresh')
+ .on("issuable:change.refresh", this.refresh);
// when a key is clicked on the notes
- return $(document).on("keydown", ".js-note-text", this.keydownNoteText);
+ return $document.off('keydown.keydownNoteText')
+ .on("keydown.keydownNoteText", ".js-note-text", this.keydownNoteText);
};
Notes.prototype.cleanBinding = function() {
- $(document).off("ajax:success", ".js-main-target-form");
- $(document).off("ajax:success", ".js-discussion-note-form");
- $(document).off("ajax:success", "form.edit-note");
- $(document).off("click", ".js-note-edit");
- $(document).off("click", ".note-edit-cancel");
- $(document).off("click", ".js-note-delete");
- $(document).off("click", ".js-note-attachment-delete");
- $(document).off("ajax:complete", ".js-main-target-form");
- $(document).off("ajax:success", ".js-main-target-form");
- $(document).off("click", ".js-discussion-reply-button");
- $(document).off("click", ".js-add-diff-note-button");
- $(document).off("visibilitychange");
- $(document).off("keyup", ".js-note-text");
- $(document).off("click", ".js-note-target-reopen");
- $(document).off("click", ".js-note-target-close");
- $(document).off("click", ".js-note-discard");
- $(document).off("keydown", ".js-note-text");
- $(document).off('click', '.js-comment-resolve-button');
- $(document).off("click", '.system-note-commit-list-toggler');
+ var $document = $(document);
+
+ $document.off("ajax:success.addNote", ".js-main-target-form");
+ $document.off("ajax:success.addDiscussionNote", ".js-discussion-note-form");
+ $document.off("ajax:success.updateNote", "form.edit-note");
+ $document.off("click.showEditForm", ".js-note-edit");
+ $document.off("click.cancelEdit", ".note-edit-cancel");
+ $document.off("click.removeNote", ".js-note-delete");
+ $document.off("click.removeAttachment", ".js-note-attachment-delete");
+ $document.off("ajax:complete.reenableTargetFormSubmitButton", ".js-main-target-form");
+ $document.off("ajax:success.resetMainTargetForm", ".js-main-target-form");
+ $document.off("click.replyToDiscussionNote", ".js-discussion-reply-button");
+ $document.off("click.addDiffNote", ".js-add-diff-note-button");
+ $document.off("visibilitychange.visibilityChange");
+ $document.off("keyup.updateTargetButtons", ".js-note-text");
+ $document.off("click.resetMainTargetForm", ".js-note-discard");
+ $document.off("keydown.keydownNoteText", ".js-note-text");
+ $document.off('click.resolveDiscussion', '.js-comment-resolve-button');
+ $document.off("click.toggleCommitList", '.system-note-commit-list-toggler');
$('.note .js-task-list-container').taskList('disable');
- return $(document).off('tasklist:changed', '.note .js-task-list-container');
+ return $document.off('tasklist:changed.updateTaskList', '.note .js-task-list-container');
};
Notes.prototype.keydownNoteText = function(e) {
@@ -874,7 +897,8 @@
Notes.prototype.initTaskList = function() {
this.enableTaskList();
- return $(document).on('tasklist:changed', '.note .js-task-list-container', this.updateTaskList.bind(this));
+ return $(document).off('tasklist:changed.updateTaskList')
+ .on('tasklist:changed.updateTaskList', '.note .js-task-list-container', this.updateTaskList.bind(this));
};
Notes.prototype.enableTaskList = function() {
diff --git a/app/assets/javascripts/notifications_dropdown.js b/app/assets/javascripts/notifications_dropdown.js
index 5d0d594073d..ff187b045a7 100644
--- a/app/assets/javascripts/notifications_dropdown.js
+++ b/app/assets/javascripts/notifications_dropdown.js
@@ -4,26 +4,30 @@
(function() {
this.NotificationsDropdown = (function() {
function NotificationsDropdown() {
- $(document).off('click', '.update-notification').on('click', '.update-notification', function(e) {
- var form, label, notificationLevel;
- e.preventDefault();
- if ($(this).is('.is-active') && $(this).data('notification-level') === 'custom') {
- return;
- }
- notificationLevel = $(this).data('notification-level');
- label = $(this).data('notification-title');
- form = $(this).parents('.notification-form:first');
- form.find('.js-notification-loading').toggleClass('fa-bell fa-spin fa-spinner');
- form.find('#notification_setting_level').val(notificationLevel);
- return form.submit();
- });
- $(document).off('ajax:success', '.notification-form').on('ajax:success', '.notification-form', function(e, data) {
- if (data.saved) {
- return $(e.currentTarget).closest('.js-notification-dropdown').replaceWith(data.html);
- } else {
- return new Flash('Failed to save new settings', 'alert');
- }
- });
+ var $document = $(document);
+
+ $document.off('click.updateNotificationSettings', '.update-notification')
+ .on('click.updateNotificationSettings', '.update-notification', function(e) {
+ var form, label, notificationLevel;
+ e.preventDefault();
+ if ($(this).is('.is-active') && $(this).data('notification-level') === 'custom') {
+ return;
+ }
+ notificationLevel = $(this).data('notification-level');
+ label = $(this).data('notification-title');
+ form = $(this).parents('.notification-form:first');
+ form.find('.js-notification-loading').toggleClass('fa-bell fa-spin fa-spinner');
+ form.find('#notification_setting_level').val(notificationLevel);
+ return form.submit();
+ });
+ $document.off('ajax:success.saveNotificationSettings', '.notification-form')
+ .on('ajax:success.saveNotificationSettings', '.notification-form', function(e, data) {
+ if (data.saved) {
+ return $(e.currentTarget).closest('.js-notification-dropdown').replaceWith(data.html);
+ } else {
+ return new Flash('Failed to save new settings', 'alert');
+ }
+ });
}
return NotificationsDropdown;
diff --git a/app/assets/javascripts/notifications_form.js b/app/assets/javascripts/notifications_form.js
index 2034f9a748a..b649b682f22 100644
--- a/app/assets/javascripts/notifications_form.js
+++ b/app/assets/javascripts/notifications_form.js
@@ -10,11 +10,12 @@
}
NotificationsForm.prototype.removeEventListeners = function() {
- return $(document).off('change', '.js-custom-notification-event');
+ return $(document).off('change.toggleCheckbox', '.js-custom-notification-event');
};
NotificationsForm.prototype.initEventListeners = function() {
- return $(document).on('change', '.js-custom-notification-event', this.toggleCheckbox);
+ return $(document).off('change.toggleCheckbox')
+ .on('change.toggleCheckbox', '.js-custom-notification-event', this.toggleCheckbox);
};
NotificationsForm.prototype.toggleCheckbox = function(e) {
diff --git a/app/assets/javascripts/preview_markdown.js b/app/assets/javascripts/preview_markdown.js
index 89f7e976934..1c6bf97d57e 100644
--- a/app/assets/javascripts/preview_markdown.js
+++ b/app/assets/javascripts/preview_markdown.js
@@ -10,6 +10,7 @@
var markdownPreview;
var previewButtonSelector;
var writeButtonSelector;
+ var $document;
window.MarkdownPreview = (function () {
function MarkdownPreview() {}
@@ -95,63 +96,71 @@
$.fn.setupMarkdownPreview = function () {
var $form = $(this);
- $form.find('textarea.markdown-area').on('input', function () {
- markdownPreview.hideReferencedUsers($form);
- });
+ $form.find('textarea.markdown-area').off('input.hideReferencedUsers')
+ .on('input.hideReferencedUsers', function () {
+ markdownPreview.hideReferencedUsers($form);
+ });
};
- $(document).on('markdown-preview:show', function (e, $form) {
- if (!$form) {
- return;
- }
- lastTextareaPreviewed = $form.find('textarea.markdown-area');
- // toggle tabs
- $form.find(writeButtonSelector).parent().removeClass('active');
- $form.find(previewButtonSelector).parent().addClass('active');
- // toggle content
- $form.find('.md-write-holder').hide();
- $form.find('.md-preview-holder').show();
- markdownPreview.showPreview($form);
- });
-
- $(document).on('markdown-preview:hide', function (e, $form) {
- if (!$form) {
- return;
- }
- lastTextareaPreviewed = null;
- // toggle tabs
- $form.find(writeButtonSelector).parent().addClass('active');
- $form.find(previewButtonSelector).parent().removeClass('active');
- // toggle content
- $form.find('.md-write-holder').show();
- $form.find('textarea.markdown-area').focus();
- $form.find('.md-preview-holder').hide();
- });
-
- $(document).on('markdown-preview:toggle', function (e, keyboardEvent) {
- var $target;
- $target = $(keyboardEvent.target);
- if ($target.is('textarea.markdown-area')) {
- $(document).triggerHandler('markdown-preview:show', [$target.closest('form')]);
- keyboardEvent.preventDefault();
- } else if (lastTextareaPreviewed) {
- $target = lastTextareaPreviewed;
- $(document).triggerHandler('markdown-preview:hide', [$target.closest('form')]);
- keyboardEvent.preventDefault();
- }
- });
-
- $(document).on('click', previewButtonSelector, function (e) {
- var $form;
- e.preventDefault();
- $form = $(this).closest('form');
- $(document).triggerHandler('markdown-preview:show', [$form]);
- });
-
- $(document).on('click', writeButtonSelector, function (e) {
- var $form;
- e.preventDefault();
- $form = $(this).closest('form');
- $(document).triggerHandler('markdown-preview:hide', [$form]);
- });
+ $document = $(document);
+
+ $document.off('markdown-preview:show.showPreview')
+ .on('markdown-preview:show.showPreview', function (e, $form) {
+ if (!$form) {
+ return;
+ }
+ lastTextareaPreviewed = $form.find('textarea.markdown-area');
+ // toggle tabs
+ $form.find(writeButtonSelector).parent().removeClass('active');
+ $form.find(previewButtonSelector).parent().addClass('active');
+ // toggle content
+ $form.find('.md-write-holder').hide();
+ $form.find('.md-preview-holder').show();
+ markdownPreview.showPreview($form);
+ });
+
+ $document.off('markdown-preview:hide.hidePreview')
+ .on('markdown-preview:hide.hidePreview', function (e, $form) {
+ if (!$form) {
+ return;
+ }
+ lastTextareaPreviewed = null;
+ // toggle tabs
+ $form.find(writeButtonSelector).parent().addClass('active');
+ $form.find(previewButtonSelector).parent().removeClass('active');
+ // toggle content
+ $form.find('.md-write-holder').show();
+ $form.find('textarea.markdown-area').focus();
+ $form.find('.md-preview-holder').hide();
+ });
+
+ $document.off('markdown-preview:toggle.togglePreview')
+ .on('markdown-preview:toggle.togglePreview', function (e, keyboardEvent) {
+ var $target;
+ $target = $(keyboardEvent.target);
+ if ($target.is('textarea.markdown-area')) {
+ $(document).triggerHandler('markdown-preview:show', [$target.closest('form')]);
+ keyboardEvent.preventDefault();
+ } else if (lastTextareaPreviewed) {
+ $target = lastTextareaPreviewed;
+ $(document).triggerHandler('markdown-preview:hide', [$target.closest('form')]);
+ keyboardEvent.preventDefault();
+ }
+ });
+
+ $document.off('click.triggerPreviewShow')
+ .on('click.triggerPreviewShow', previewButtonSelector, function (e) {
+ var $form;
+ e.preventDefault();
+ $form = $(this).closest('form');
+ $(document).triggerHandler('markdown-preview:show', [$form]);
+ });
+
+ $document.off('click.triggerPreviewHide')
+ .on('click.triggerPreviewHide', writeButtonSelector, function (e) {
+ var $form;
+ e.preventDefault();
+ $form = $(this).closest('form');
+ $(document).triggerHandler('markdown-preview:hide', [$form]);
+ });
}());
diff --git a/app/assets/javascripts/profile/gl_crop.js.es6 b/app/assets/javascripts/profile/gl_crop.js.es6
index b4b6da41f63..0cb6d461be5 100644
--- a/app/assets/javascripts/profile/gl_crop.js.es6
+++ b/app/assets/javascripts/profile/gl_crop.js.es6
@@ -44,18 +44,24 @@
bindEvents() {
var _this;
_this = this;
- this.fileInput.on('change', function(e) {
- return _this.onFileInputChange(e, this);
- });
- this.pickImageEl.on('click', this.onPickImageClick);
- this.modalCrop.on('shown.bs.modal', this.onModalShow);
- this.modalCrop.on('hidden.bs.modal', this.onModalHide);
- this.uploadImageBtn.on('click', this.onUploadImageBtnClick);
- this.cropActionsBtn.on('click', function(e) {
- var btn;
- btn = this;
- return _this.onActionBtnClick(btn);
- });
+ this.fileInput.off('change.onFileInputChange')
+ .on('change.onFileInputChange', function(e) {
+ return _this.onFileInputChange(e, this);
+ });
+ this.pickImageEl.off('click.onPickImageClick')
+ .on('click.onPickImageClick', this.onPickImageClick);
+ this.modalCrop.off('shown.bs.modal.onModalShowCrop')
+ .on('shown.bs.modal.onModalShowCrop', this.onModalShow);
+ this.modalCrop.off('hidden.bs.modal.onModalHideCrop')
+ .on('hidden.bs.modal.onModalHideCrop', this.onModalHide);
+ this.uploadImageBtn.off('click.onUploadImageBtnClick')
+ .on('click.onUploadImageBtnClick', this.onUploadImageBtnClick);
+ this.cropActionsBtn.off('click.onActionBtnClick')
+ .on('click.onActionBtnClick', function(e) {
+ var btn;
+ btn = this;
+ return _this.onActionBtnClick(btn);
+ });
return this.croppedImageBlob = null;
}
diff --git a/app/assets/javascripts/profile/profile.js.es6 b/app/assets/javascripts/profile/profile.js.es6
index aef2e3a3fa8..9dc9dfc61ad 100644
--- a/app/assets/javascripts/profile/profile.js.es6
+++ b/app/assets/javascripts/profile/profile.js.es6
@@ -24,12 +24,18 @@
}
bindEvents() {
- $('.js-preferences-form').on('change.preference', 'input[type=radio]', this.submitForm);
- $('#user_notification_email').on('change', this.submitForm);
- $('.update-username').on('ajax:before', this.beforeUpdateUsername);
- $('.update-username').on('ajax:complete', this.afterUpdateUsername);
- $('.update-notifications').on('ajax:success', this.onUpdateNotifs);
- this.form.on('submit', this.onSubmitForm);
+ $('.js-preferences-form').off('change.preference')
+ .on('change.preference', 'input[type=radio]', this.submitForm);
+ $('#user_notification_email').off('change.submitForm')
+ .on('change.submitForm', this.submitForm);
+ $('.update-username').off('ajax:before.beforeUpdateUsername')
+ .on('ajax:before.beforeUpdateUsername', this.beforeUpdateUsername);
+ $('.update-username').off('ajax:complete.afterUpdateUsername')
+ .on('ajax:complete.afterUpdateUsername', this.afterUpdateUsername);
+ $('.update-notifications').off('ajax:success.onUpdateNotifs')
+ .on('ajax:success.onUpdateNotifs', this.onUpdateNotifs);
+ this.form.off('submit.onSubmitFormProfile')
+ .on('submit.onSubmitFormProfile', this.onSubmitForm);
}
submitForm() {
diff --git a/app/assets/javascripts/project.js b/app/assets/javascripts/project.js
index fcf3a4af956..da3f115403e 100644
--- a/app/assets/javascripts/project.js
+++ b/app/assets/javascripts/project.js
@@ -24,15 +24,15 @@
});
// Ref switcher
this.initRefSwitcher();
- $('.project-refs-select').on('change', function() {
+ $('.project-refs-select').off('change.submitRefs').on('change.submitRefs', function() {
return $(this).parents('form').submit();
});
- $('.hide-no-ssh-message').on('click', function(e) {
+ $('.hide-no-ssh-message').off('click.hideNoSSH').on('click.hideNoSSH', function(e) {
Cookies.set('hide_no_ssh_message', 'false');
$(this).parents('.no-ssh-key-message').remove();
return e.preventDefault();
});
- $('.hide-no-password-message').on('click', function(e) {
+ $('.hide-no-password-message').off('click.hideNoPassword').on('click.hideNoPassword', function(e) {
Cookies.set('hide_no_password_message', 'false');
$(this).parents('.no-password-message').remove();
return e.preventDefault();
@@ -42,12 +42,12 @@
Project.prototype.projectSelectDropdown = function() {
new ProjectSelect();
- $('.project-item-select').on('click', (function(_this) {
+ $('.project-item-select').off('click.changeProject').on('click.changeProject', (function(_this) {
return function(e) {
return _this.changeProject($(e.currentTarget).val());
};
})(this));
- return $('.js-projects-dropdown-toggle').on('click', function(e) {
+ return $('.js-projects-dropdown-toggle').off('click.toggleProjectDropdown').on('click.toggleProjectDropdown', function(e) {
e.preventDefault();
return $('.js-projects-dropdown').select2('open');
});
diff --git a/app/assets/javascripts/project_find_file.js b/app/assets/javascripts/project_find_file.js
index 1bd232314d0..91ac4bec6f6 100644
--- a/app/assets/javascripts/project_find_file.js
+++ b/app/assets/javascripts/project_find_file.js
@@ -25,8 +25,7 @@
}
ProjectFindFile.prototype.initEvent = function() {
- this.inputElement.off("keyup");
- this.inputElement.on("keyup", (function(_this) {
+ this.inputElement.off("keyup.findFile").on("keyup.findFile", (function(_this) {
return function(event) {
var oldValue, ref, target, value;
target = $(event.target);
diff --git a/app/assets/javascripts/project_fork.js b/app/assets/javascripts/project_fork.js
index 4aedc9a2330..ada6b8bbfe9 100644
--- a/app/assets/javascripts/project_fork.js
+++ b/app/assets/javascripts/project_fork.js
@@ -2,7 +2,7 @@
(function() {
this.ProjectFork = (function() {
function ProjectFork() {
- $('.fork-thumbnail a').on('click', function() {
+ $('.fork-thumbnail a').off('click.saveFork').on('click.saveFork', function() {
$('.fork-namespaces').hide();
return $('.save-project-loader').show();
});
diff --git a/app/assets/javascripts/project_label_subscription.js.es6 b/app/assets/javascripts/project_label_subscription.js.es6
index b8d6a198996..cfebe327ed9 100644
--- a/app/assets/javascripts/project_label_subscription.js.es6
+++ b/app/assets/javascripts/project_label_subscription.js.es6
@@ -6,7 +6,7 @@
this.$container = $(container);
this.$buttons = this.$container.find('.js-subscribe-button');
- this.$buttons.on('click', this.toggleSubscription.bind(this));
+ this.$buttons.off('click.toggleSubscription').on('click.toggleSubscription', this.toggleSubscription.bind(this));
}
toggleSubscription(event) {
diff --git a/app/assets/javascripts/project_new.js b/app/assets/javascripts/project_new.js
index 7fc611d0dad..1efc7a27af3 100644
--- a/app/assets/javascripts/project_new.js
+++ b/app/assets/javascripts/project_new.js
@@ -8,7 +8,7 @@
this.$selects = $('.features select');
this.$repoSelects = this.$selects.filter('.js-repo-select');
- $('.project-edit-container').on('ajax:before', (function(_this) {
+ $('.project-edit-container').off('ajax:before.saveProject').on('ajax:before.saveProject', (function(_this) {
return function() {
$('.project-edit-container').hide();
return $('.save-project-loader').show();
@@ -31,7 +31,7 @@
};
ProjectNew.prototype.toggleSettingsOnclick = function() {
- this.$selects.on('change', this.toggleSettings);
+ this.$selects.off('change.toggleSettings').on('change.toggleSettings', this.toggleSettings);
};
ProjectNew.prototype._showOrHide = function(checkElement, container) {
@@ -53,8 +53,8 @@
.nextAll()
.hide();
- $repoAccessLevel.off('change')
- .on('change', function () {
+ $repoAccessLevel.off('change.updateAccessLevel')
+ .on('change.updateAccessLevel', function () {
var selectedVal = parseInt($repoAccessLevel.val());
this.$repoSelects.each(function () {
diff --git a/app/assets/javascripts/project_variables.js.es6 b/app/assets/javascripts/project_variables.js.es6
index 4ee2e49306d..836f069e473 100644
--- a/app/assets/javascripts/project_variables.js.es6
+++ b/app/assets/javascripts/project_variables.js.es6
@@ -4,7 +4,7 @@
class ProjectVariables {
constructor() {
this.$revealBtn = $('.js-btn-toggle-reveal-values');
- this.$revealBtn.on('click', this.toggleRevealState.bind(this));
+ this.$revealBtn.off('click.toggleRevealState').on('click.toggleRevealState', this.toggleRevealState.bind(this));
}
toggleRevealState(e) {
diff --git a/app/assets/javascripts/projects_list.js b/app/assets/javascripts/projects_list.js
index 4548dc68fe1..296040f0ef3 100644
--- a/app/assets/javascripts/projects_list.js
+++ b/app/assets/javascripts/projects_list.js
@@ -3,7 +3,7 @@
(function() {
window.ProjectsList = {
init: function() {
- $(".projects-list-filter").off('keyup');
+ $(".projects-list-filter").off('keyup.debounceProjectFilter');
this.initSearch();
return this.initPagination();
},
@@ -11,7 +11,7 @@
var debounceFilter, projectsListFilter;
projectsListFilter = $('.projects-list-filter');
debounceFilter = _.debounce(window.ProjectsList.filterResults, 500);
- return projectsListFilter.on('keyup', function(e) {
+ return projectsListFilter.off('keyup.debounceProjectFilter').on('keyup.debounceProjectFilter', function(e) {
if (projectsListFilter.val() !== '') {
return debounceFilter();
}
@@ -42,9 +42,10 @@
});
},
initPagination: function() {
- return $('.projects-list-holder .pagination').on('ajax:success', function(e, data) {
- return $('.projects-list-holder').replaceWith(data.html);
- });
+ return $('.projects-list-holder .pagination').off('ajax:success.replaceProjectList')
+ .on('ajax:success.replaceProjectList', function(e, data) {
+ return $('.projects-list-holder').replaceWith(data.html);
+ });
}
};
diff --git a/app/assets/javascripts/protected_branches/protected_branch_dropdown.js.es6 b/app/assets/javascripts/protected_branches/protected_branch_dropdown.js.es6
index 03f4531abf5..60078550255 100644
--- a/app/assets/javascripts/protected_branches/protected_branch_dropdown.js.es6
+++ b/app/assets/javascripts/protected_branches/protected_branch_dropdown.js.es6
@@ -43,7 +43,8 @@ class ProtectedBranchDropdown {
}
bindEvents() {
- this.$protectedBranch.on('click', this.onClickCreateWildcard.bind(this));
+ this.$protectedBranch.off('click.onClickCreateWildcard')
+ .on('click.onClickCreateWildcard', this.onClickCreateWildcard.bind(this));
}
onClickCreateWildcard() {
diff --git a/app/assets/javascripts/render_gfm.js b/app/assets/javascripts/render_gfm.js
index bbb2f186655..4f7001cbd24 100644
--- a/app/assets/javascripts/render_gfm.js
+++ b/app/assets/javascripts/render_gfm.js
@@ -9,8 +9,9 @@
this.find('.js-render-math').renderMath();
};
- $(document).on('ready page:load', function() {
- return $('body').renderGFM();
- });
+ $(document).off('ready.renderGFM page:load.renderGFM')
+ .on('ready.renderGFM page:load.renderGFM', function() {
+ return $('body').renderGFM();
+ });
}).call(this);
diff --git a/app/assets/javascripts/right_sidebar.js b/app/assets/javascripts/right_sidebar.js
index b1e844b7302..29ca51834d8 100644
--- a/app/assets/javascripts/right_sidebar.js
+++ b/app/assets/javascripts/right_sidebar.js
@@ -13,19 +13,26 @@
}
Sidebar.prototype.removeListeners = function () {
- this.sidebar.off('click', '.sidebar-collapsed-icon');
- $('.dropdown').off('hidden.gl.dropdown');
- $('.dropdown').off('loading.gl.dropdown');
- $('.dropdown').off('loaded.gl.dropdown');
- $(document).off('click', '.js-sidebar-toggle');
+ var $dropdown = $('.dropdown');
+ this.sidebar.off('click.sidebarCollapseClicked', '.sidebar-collapsed-icon');
+ $dropdown.off('hidden.gl.dropdown.onSidebarDropdownHidden');
+ $dropdown.off('loading.gl.dropdown.sidebarDropdownLoading');
+ $dropdown.off('loaded.gl.dropdown.sidebarDropdownLoaded');
+ $(document).off('click.toggleRightSidebar', '.js-sidebar-toggle');
}
Sidebar.prototype.addEventListeners = function() {
- this.sidebar.on('click', '.sidebar-collapsed-icon', this, this.sidebarCollapseClicked);
- $('.dropdown').on('hidden.gl.dropdown', this, this.onSidebarDropdownHidden);
- $('.dropdown').on('loading.gl.dropdown', this.sidebarDropdownLoading);
- $('.dropdown').on('loaded.gl.dropdown', this.sidebarDropdownLoaded);
- $(document).on('click', '.js-sidebar-toggle', function(e, triggered) {
+ var $dropdown = $('.dropdown');
+ var $document = $(document);
+ this.sidebar.off('click.sidebarCollapseClicked')
+ .on('click.sidebarCollapseClicked', '.sidebar-collapsed-icon', this, this.sidebarCollapseClicked);
+ $dropdown.off('hidden.gl.dropdown.onSidebarDropdownHidden')
+ .on('hidden.gl.dropdown.onSidebarDropdownHidden', this, this.onSidebarDropdownHidden);
+ $dropdown.off('loading.gl.dropdown.sidebarDropdownLoading')
+ .on('loading.gl.dropdown.sidebarDropdownLoading', this.sidebarDropdownLoading);
+ $dropdown.off('loaded.gl.dropdown.sidebarDropdownLoaded')
+ .on('loaded.gl.dropdown.sidebarDropdownLoaded', this.sidebarDropdownLoaded);
+ $document.off('click.toggleRightSidebar').on('click.toggleRightSidebar', '.js-sidebar-toggle', function(e, triggered) {
var $allGutterToggleIcons, $this, $thisIcon;
e.preventDefault();
$this = $(this);
@@ -44,7 +51,8 @@
return Cookies.set("collapsed_gutter", $('.right-sidebar').hasClass('right-sidebar-collapsed'));
}
});
- return $(document).off('click', '.js-issuable-todo').on('click', '.js-issuable-todo', this.toggleTodo);
+ return $document.off('click.rightSidebarToggleTodo', '.js-issuable-todo')
+ .on('click.rightSidebarToggleTodo', '.js-issuable-todo', this.toggleTodo);
};
Sidebar.prototype.toggleTodo = function(e) {
diff --git a/app/assets/javascripts/search.js b/app/assets/javascripts/search.js
index 4b6ebadeac7..3114dba0f2b 100644
--- a/app/assets/javascripts/search.js
+++ b/app/assets/javascripts/search.js
@@ -67,8 +67,9 @@
}
Search.prototype.eventListeners = function() {
- $(document).off('keyup', '.js-search-input').on('keyup', '.js-search-input', this.searchKeyUp);
- return $(document).off('click', '.js-search-clear').on('click', '.js-search-clear', this.clearSearchField);
+ var $document = $(document);
+ $document.off('keyup.searchKeyUp', '.js-search-input').on('keyup.searchKeyUp', '.js-search-input', this.searchKeyUp);
+ return $document.off('click.clearSearchField', '.js-search-clear').on('click.clearSearchField', '.js-search-clear', this.clearSearchField);
};
Search.prototype.submitSearch = function() {
diff --git a/app/assets/javascripts/search_autocomplete.js.es6 b/app/assets/javascripts/search_autocomplete.js.es6
index 437f5dbbf7d..449f7dc671a 100644
--- a/app/assets/javascripts/search_autocomplete.js.es6
+++ b/app/assets/javascripts/search_autocomplete.js.es6
@@ -190,13 +190,13 @@
}
bindEvents() {
- this.searchInput.on('keydown', this.onSearchInputKeyDown);
- this.searchInput.on('keyup', this.onSearchInputKeyUp);
- this.searchInput.on('click', this.onSearchInputClick);
- this.searchInput.on('focus', this.onSearchInputFocus);
- this.searchInput.on('blur', this.onSearchInputBlur);
- this.clearInput.on('click', this.onClearInputClick);
- return this.locationBadgeEl.on('click', (function(_this) {
+ this.searchInput.off('keydown.onSearchInputKeyDown').on('keydown.onSearchInputKeyDown', this.onSearchInputKeyDown);
+ this.searchInput.off('keyup.onSearchInputKeyUp').on('keyup.onSearchInputKeyUp', this.onSearchInputKeyUp);
+ this.searchInput.off('click.onSearchInputClick').on('click.onSearchInputClick', this.onSearchInputClick);
+ this.searchInput.off('focus.onSearchInputFocus').on('focus.onSearchInputFocus', this.onSearchInputFocus);
+ this.searchInput.off('blur.onSearchInputBlur').on('blur.onSearchInputBlur', this.onSearchInputBlur);
+ this.clearInput.off('click.onClearInputClick').on('click.onClearInputClick', this.onClearInputClick);
+ return this.locationBadgeEl.off('click.focusInputBadge').on('click.focusInputBadge', (function(_this) {
return function() {
return _this.searchInput.focus();
};
diff --git a/app/assets/javascripts/sidebar.js.es6 b/app/assets/javascripts/sidebar.js.es6
index 9790a44972d..f785d83e059 100644
--- a/app/assets/javascripts/sidebar.js.es6
+++ b/app/assets/javascripts/sidebar.js.es6
@@ -37,11 +37,16 @@
$(pageSelector).hasClass(expandedPageClass)
);
$(document)
- .on('click', sidebarToggleSelector, () => this.toggleSidebar())
- .on('click', pinnedToggleSelector, () => this.togglePinnedState())
- .on('click', 'html, body', (e) => this.handleClickEvent(e))
- .on('page:change', () => this.renderState())
- .on('todo:toggle', (e, count) => this.updateTodoCount(count));
+ .off('click.toggleSidebar')
+ .on('click.toggleSidebar', sidebarToggleSelector, () => this.toggleSidebar())
+ .off('click.togglePinnedState')
+ .on('click.togglePinnedState', pinnedToggleSelector, () => this.togglePinnedState())
+ .off('click.sidebarHandleClickEvent')
+ .on('click.sidebarHandleClickEvent', 'html, body', (e) => this.handleClickEvent(e))
+ .off('page:change.sidebarRenderState')
+ .on('page:change.sidebarRenderState', () => this.renderState())
+ .off('todo:toggle.updateTodoCount')
+ .on('todo:toggle.updateTodoCount', (e, count) => this.updateTodoCount(count));
this.renderState();
}
diff --git a/app/assets/javascripts/single_file_diff.js b/app/assets/javascripts/single_file_diff.js
index ac8603ccd10..42b3d593205 100644
--- a/app/assets/javascripts/single_file_diff.js
+++ b/app/assets/javascripts/single_file_diff.js
@@ -33,7 +33,7 @@
this.content.after(this.collapsedContent);
this.$toggleIcon.addClass('fa-caret-down');
}
- clickTarget = $('.file-title, .click-to-expand', this.file).on('click', this.toggleDiff);
+ clickTarget = $('.file-title, .click-to-expand', this.file).off('click.toggleDiff').on('click.toggleDiff', this.toggleDiff);
if (forceLoad) {
this.toggleDiff({ target: clickTarget }, cb);
}
diff --git a/app/assets/javascripts/smart_interval.js.es6 b/app/assets/javascripts/smart_interval.js.es6
index 40f67637c7c..bc5f45ff5c8 100644
--- a/app/assets/javascripts/smart_interval.js.es6
+++ b/app/assets/javascripts/smart_interval.js.es6
@@ -88,8 +88,10 @@
destroy() {
this.cancel();
- document.removeEventListener('visibilitychange', this.handleVisibilityChange);
- $(document).off('visibilitychange').off('page:before-unload');
+ const $document = $(document);
+ $document.off('visibilitychange.handleVisibilityChange')
+ .on('visibilitychange.handleVisibilityChange', this.handleVisibilityChange);
+ $document.off('page:before-unload.cancelSmartInterval');
}
/* private */
@@ -112,7 +114,7 @@
initPageUnloadHandling() {
// prevent interval continuing after page change, when kept in cache by Turbolinks
- $(document).on('page:before-unload', () => this.cancel());
+ $(document).off('page:before-unload.cancelSmartInterval').on('page:before-unload.cancelSmartInterval', () => this.cancel());
}
handleVisibilityChange(e) {
diff --git a/app/assets/javascripts/snippet/snippet_bundle.js b/app/assets/javascripts/snippet/snippet_bundle.js
index 18512d179b3..f7cc3b69c36 100644
--- a/app/assets/javascripts/snippet/snippet_bundle.js
+++ b/app/assets/javascripts/snippet/snippet_bundle.js
@@ -7,7 +7,7 @@
$(function() {
var editor = ace.edit("editor")
- $(".snippet-form-holder form").on('submit', function() {
+ $(".snippet-form-holder form").off('submit.setSnippetValue').on('submit.setSnippetValue', function() {
$(".snippet-file-content").val(editor.getValue());
});
});
diff --git a/app/assets/javascripts/snippets_list.js.es6 b/app/assets/javascripts/snippets_list.js.es6
index 6f913326a3a..b93564971fd 100644
--- a/app/assets/javascripts/snippets_list.js.es6
+++ b/app/assets/javascripts/snippets_list.js.es6
@@ -6,7 +6,7 @@
gl.SnippetsList = function() {
var $holder = $('.snippets-list-holder');
- $holder.find('.pagination').on('ajax:success', (e, data) => {
+ $holder.find('.pagination').off('ajax:success.snippetPagination').on('ajax:success.snippetPagination', (e, data) => {
$holder.replaceWith(data.html);
});
}
diff --git a/app/assets/javascripts/star.js b/app/assets/javascripts/star.js
index f1fc526bf2e..c5cbbbe31b7 100644
--- a/app/assets/javascripts/star.js
+++ b/app/assets/javascripts/star.js
@@ -4,7 +4,7 @@
(function() {
this.Star = (function() {
function Star() {
- $('.project-home-panel .toggle-star').on('ajax:success', function(e, data, status, xhr) {
+ $('.project-home-panel .toggle-star').off('ajax:success.toggleStar').on('ajax:success.toggleStar', function(e, data, status, xhr) {
var $starIcon, $starSpan, $this, toggleStar;
$this = $(this);
$starSpan = $this.find('span');
@@ -20,9 +20,10 @@
}
};
toggleStar($starSpan.hasClass('starred'));
- }).on('ajax:error', function(e, xhr, status, error) {
- new Flash('Star toggle failed. Try again later.', 'alert');
- });
+ }).off('ajax:error.toggleStar')
+ .on('ajax:error.toggleStar', function(e, xhr, status, error) {
+ new Flash('Star toggle failed. Try again later.', 'alert');
+ });
}
return Star;
diff --git a/app/assets/javascripts/templates/issuable_template_selector.js.es6 b/app/assets/javascripts/templates/issuable_template_selector.js.es6
index bdec948fb63..f6e000cc0d1 100644
--- a/app/assets/javascripts/templates/issuable_template_selector.js.es6
+++ b/app/assets/javascripts/templates/issuable_template_selector.js.es6
@@ -18,11 +18,11 @@
if (initialQuery.name) this.requestFile(initialQuery);
- $('.reset-template', this.dropdown.parent()).on('click', () => {
+ $('.reset-template', this.dropdown.parent()).off('click.resetTemplate').on('click.resetTemplate', () => {
this.setInputValueToTemplateContent();
});
- $('.no-template', this.dropdown.parent()).on('click', () => {
+ $('.no-template', this.dropdown.parent()).off('click.removeTemplate').on('click.removeTemplate', () => {
this.currentTemplate.content = '';
this.setInputValueToTemplateContent();
$('.dropdown-toggle-text', this.dropdown).text('Choose a template');
diff --git a/app/assets/javascripts/terminal/terminal.js.es6 b/app/assets/javascripts/terminal/terminal.js.es6
index 6b9422b1816..01fbfe4c1c3 100644
--- a/app/assets/javascripts/terminal/terminal.js.es6
+++ b/app/assets/javascripts/terminal/terminal.js.es6
@@ -39,7 +39,7 @@
const decoder = new TextDecoder('utf-8');
const encoder = new TextEncoder('utf-8');
- this.terminal.on('data', (data) => {
+ this.terminal.off('data.sendEncodedData').on('data.sendEncodedData', (data) => {
this.socket.send(encoder.encode(data));
});
diff --git a/app/assets/javascripts/todos.js.es6 b/app/assets/javascripts/todos.js.es6
index d8713600030..4908aed804f 100644
--- a/app/assets/javascripts/todos.js.es6
+++ b/app/assets/javascripts/todos.js.es6
@@ -10,21 +10,20 @@
this.doneClicked = this.doneClicked.bind(this);
this.el = el || $('.js-todos-options');
this.perPage = this.el.data('perPage');
- this.clearListeners();
this.initBtnListeners();
this.initFilters();
}
clearListeners() {
- $('.done-todo').off('click');
- $('.js-todos-mark-all').off('click');
- return $('.todo').off('click');
+ $('.done-todo').off('click.doneClicked');
+ $('.js-todos-mark-all').off('click.allDoneClicked');
+ return $('.todo').off('click.goToTodoUrl');
}
initBtnListeners() {
- $('.done-todo').on('click', this.doneClicked);
- $('.js-todos-mark-all').on('click', this.allDoneClicked);
- return $('.todo').on('click', this.goToTodoUrl);
+ $('.done-todo').off('click.doneClicked').on('click.doneClicked', this.doneClicked);
+ $('.js-todos-mark-all').off('click.allDoneClicked').on('click.allDoneClicked', this.allDoneClicked);
+ return $('.todo').off('click.goToTodoUrl').on('click.goToTodoUrl', this.goToTodoUrl);
}
initFilters() {
@@ -33,7 +32,7 @@
this.initFilterDropdown($('.js-type-search'), 'type');
this.initFilterDropdown($('.js-action-search'), 'action_id');
- $('form.filter-form').on('submit', function (event) {
+ $('form.filter-form').off('submit.submitFilters').on('submit.submitFilters', function (event) {
event.preventDefault();
Turbolinks.visit(this.action + '&' + $(this).serialize());
});
diff --git a/app/assets/javascripts/tree.js b/app/assets/javascripts/tree.js
index f48a7ee0f55..20a997d3d33 100644
--- a/app/assets/javascripts/tree.js
+++ b/app/assets/javascripts/tree.js
@@ -6,7 +6,7 @@
this.initKeyNav();
// Code browser tree slider
// Make the entire tree-item row clickable, but not if clicking another link (like a commit message)
- $(".tree-content-holder .tree-item").on('click', function(e) {
+ $(".tree-content-holder .tree-item").off('click.openItem').on('click.openItem', function(e) {
var $clickedEl, path;
$clickedEl = $(e.target);
path = $('.tree-item-file-name a', this).attr('href');
diff --git a/app/assets/javascripts/u2f/authenticate.js.es6 b/app/assets/javascripts/u2f/authenticate.js.es6
index 2b992109a8c..cc6e69a0535 100644
--- a/app/assets/javascripts/u2f/authenticate.js.es6
+++ b/app/assets/javascripts/u2f/authenticate.js.es6
@@ -92,7 +92,7 @@
error_message: error.message(),
error_code: error.errorCode
});
- return this.container.find('#js-u2f-try-again').on('click', this.renderInProgress);
+ return this.container.find('#js-u2f-try-again').off('click.renderInProgress').on('click.renderInProgress', this.renderInProgress);
};
U2FAuthenticate.prototype.renderAuthenticated = function(deviceResponse) {
diff --git a/app/assets/javascripts/u2f/register.js b/app/assets/javascripts/u2f/register.js
index 050c9bfc02e..9839e5ff3d7 100644
--- a/app/assets/javascripts/u2f/register.js
+++ b/app/assets/javascripts/u2f/register.js
@@ -66,7 +66,7 @@
U2FRegister.prototype.renderSetup = function() {
this.renderTemplate('setup');
- return this.container.find('#js-setup-u2f-device').on('click', this.renderInProgress);
+ return this.container.find('#js-setup-u2f-device').off('click.renderInProgress').on('click.renderInProgress', this.renderInProgress);
};
U2FRegister.prototype.renderInProgress = function() {
@@ -79,7 +79,7 @@
error_message: error.message(),
error_code: error.errorCode
});
- return this.container.find('#js-u2f-try-again').on('click', this.renderSetup);
+ return this.container.find('#js-u2f-try-again').off('click.renderSetup').on('click.renderSetup', this.renderSetup);
};
U2FRegister.prototype.renderRegistered = function(deviceResponse) {
diff --git a/app/assets/javascripts/user.js.es6 b/app/assets/javascripts/user.js.es6
index 0a2db7c05fe..e071f3a5b8a 100644
--- a/app/assets/javascripts/user.js.es6
+++ b/app/assets/javascripts/user.js.es6
@@ -24,7 +24,7 @@
}
hideProjectLimitMessage() {
- $('.hide-project-limit-message').on('click', e => {
+ $('.hide-project-limit-message').off('click.hideProjectLimitMessage').on('click.hideProjectLimitMessage', e => {
e.preventDefault();
Cookies.set('hide_project_limit_message', 'false');
$(this).parents('.project-limit-message').remove();
diff --git a/app/assets/javascripts/username_validator.js.es6 b/app/assets/javascripts/username_validator.js.es6
index 137cefa3b8e..7d5b5d8425b 100644
--- a/app/assets/javascripts/username_validator.js.es6
+++ b/app/assets/javascripts/username_validator.js.es6
@@ -24,7 +24,7 @@
this.validateUsername(username);
}, debounceTimeoutDuration);
- this.inputElement.on('keyup.username_check', () => {
+ this.inputElement.off('keyup.username_check').on('keyup.username_check', () => {
const username = this.inputElement.val();
this.state.valid = this.inputDomElement.validity.valid;
@@ -38,7 +38,7 @@
});
// Override generic field validation
- this.inputElement.on('invalid', this.interceptInvalid.bind(this));
+ this.inputElement.off('invalid.interceptInvalid').on('invalid.interceptInvalid', this.interceptInvalid.bind(this));
}
renderState() {
diff --git a/app/assets/javascripts/users/calendar.js b/app/assets/javascripts/users/calendar.js
index 578be7c3590..9990fc55f9a 100644
--- a/app/assets/javascripts/users/calendar.js
+++ b/app/assets/javascripts/users/calendar.js
@@ -133,7 +133,7 @@
return '#ededed';
}
};
- })(this)).attr('data-container', 'body').on('click', this.clickDay);
+ })(this)).attr('data-container', 'body').off('click.renderDays').on('click.renderDays', this.clickDay);
};
Calendar.prototype.renderDayTitles = function() {
diff --git a/app/assets/javascripts/users_select.js b/app/assets/javascripts/users_select.js
index d4b5e03aa35..852d2027a52 100644
--- a/app/assets/javascripts/users_select.js
+++ b/app/assets/javascripts/users_select.js
@@ -52,7 +52,7 @@
});
};
- $block.on('click', '.js-assign-yourself', function(e) {
+ $block.off('click.assignYourself').on('click.assignYourself', '.js-assign-yourself', function(e) {
e.preventDefault();
if ($dropdown.hasClass('js-issue-board-sidebar')) {
diff --git a/app/assets/javascripts/zen_mode.js b/app/assets/javascripts/zen_mode.js
index e09b59dd5aa..5d6ad81fc4d 100644
--- a/app/assets/javascripts/zen_mode.js
+++ b/app/assets/javascripts/zen_mode.js
@@ -1,4 +1,4 @@
-/* eslint-disable func-names, space-before-function-paren, wrap-iife, prefer-arrow-callback, no-unused-vars, consistent-return, camelcase, comma-dangle, padded-blocks, max-len */
+/* eslint-disable func-names, space-before-function-paren, wrap-iife, prefer-arrow-callback, no-unused-vars, consistent-return, camelcase, comma-dangle, padded-blocks, max-len, no-var */
/* global Dropzone */
/* global Mousetrap */
@@ -36,31 +36,34 @@
(function() {
this.ZenMode = (function() {
function ZenMode() {
+ var $document = $(document);
+
this.active_backdrop = null;
this.active_textarea = null;
- $(document).on('click', '.js-zen-enter', function(e) {
+
+ $document.off('click.zenEnter').on('click.zenEnter', '.js-zen-enter', function(e) {
e.preventDefault();
return $(e.currentTarget).trigger('zen_mode:enter');
});
- $(document).on('click', '.js-zen-leave', function(e) {
+ $document.off('click.zenLeave').on('click.zenLeave', '.js-zen-leave', function(e) {
e.preventDefault();
return $(e.currentTarget).trigger('zen_mode:leave');
});
- $(document).on('zen_mode:enter', (function(_this) {
+ $document.off('zen_mode:enter.zenBackdrop').on('zen_mode:enter.zenBackdrop', (function(_this) {
return function(e) {
return _this.enter($(e.target).closest('.md-area').find('.zen-backdrop'));
};
})(this));
- $(document).on('zen_mode:leave', (function(_this) {
+ $document.off('zen_mode:leave.exit').on('zen_mode:leave.exit', (function(_this) {
return function(e) {
return _this.exit();
};
})(this));
- $(document).on('keydown', function(e) {
+ $document.off('keydown.zenEscape').on('keydown.zenEscape', function(e) {
// Esc
if (e.keyCode === 27) {
e.preventDefault();
- return $(document).trigger('zen_mode:leave');
+ return $document.trigger('zen_mode:leave');
}
});
}
diff --git a/package.json b/package.json
index 49b8210e427..2b9ec1ae138 100644
--- a/package.json
+++ b/package.json
@@ -6,11 +6,12 @@
"eslint-report": "npm run eslint -- --format html --output-file ./eslint-report.html"
},
"devDependencies": {
- "eslint": "^3.10.1",
+ "eslint": "^3.12.2",
"eslint-config-airbnb-base": "^10.0.1",
"eslint-plugin-filenames": "^1.1.0",
"eslint-plugin-import": "^2.2.0",
"eslint-plugin-jasmine": "^2.1.0",
+ "eslint-plugin-turbolinks-event-handling": "0.0.1",
"istanbul": "^0.4.5"
}
}
diff --git a/spec/javascripts/.eslintrc b/spec/javascripts/.eslintrc
index dcbcd014dc3..c0147d737ed 100644
--- a/spec/javascripts/.eslintrc
+++ b/spec/javascripts/.eslintrc
@@ -23,6 +23,9 @@
"plugins": ["jasmine"],
"rules": {
"prefer-arrow-callback": 0,
- "func-names": 0
+ "func-names": 0,
+ "turbolinks-event-handling/jquery-off-before-on": 0,
+ "turbolinks-event-handling/jquery-use-event-namespaces": 0
+ # "turbolinks-event-handling/vanilla-addeventlistener-needs-function-reference": 0
}
}