From 25b2045044aff15ebd71bd4787aeab9d097a1cd0 Mon Sep 17 00:00:00 2001 From: Winnie Hellmann <winnie@gitlab.com> Date: Thu, 19 Sep 2019 18:37:04 +0000 Subject: [PATCH] Enable ESLint rules to discourage jQuery Ajax --- .eslintrc.yml | 6 ++++++ app/assets/javascripts/filterable_list.js | 1 + .../javascripts/integrations/integration_settings_form.js | 1 + app/assets/javascripts/main.js | 1 + app/assets/javascripts/notes.js | 1 + .../javascripts/pages/projects/commit/pipelines/index.js | 1 + app/assets/javascripts/pages/projects/commit/show/index.js | 1 + ee/app/assets/javascripts/jira_connect.js | 2 ++ .../assets/javascripts/projects/custom_project_templates.js | 2 ++ package.json | 1 + .../integrations/integration_settings_form_spec.js | 1 + yarn.lock | 5 +++++ 12 files changed, 23 insertions(+) diff --git a/.eslintrc.yml b/.eslintrc.yml index 70a71baa590fd..59eec634e8b6b 100644 --- a/.eslintrc.yml +++ b/.eslintrc.yml @@ -10,6 +10,7 @@ plugins: - import - "@gitlab/i18n" - "@gitlab/vue-i18n" + - no-jquery settings: import/resolver: webpack: @@ -36,6 +37,11 @@ rules: vue/no-use-v-if-with-v-for: off vue/no-v-html: off vue/use-v-on-exact: off + no-jquery/no-ajax: error + no-jquery/no-ajax-events: error + no-jquery/no-load: error + no-jquery/no-load-shorthand: error + no-jquery/no-serialize: error overrides: files: - '**/spec/**/*' diff --git a/app/assets/javascripts/filterable_list.js b/app/assets/javascripts/filterable_list.js index 77080691dcb32..c21fba06d42c5 100644 --- a/app/assets/javascripts/filterable_list.js +++ b/app/assets/javascripts/filterable_list.js @@ -22,6 +22,7 @@ export default class FilterableList { getPagePath() { const action = this.filterForm.getAttribute('action'); + // eslint-disable-next-line no-jquery/no-serialize const params = $(this.filterForm).serialize(); return `${action}${action.indexOf('?') > 0 ? '&' : '?'}${params}`; } diff --git a/app/assets/javascripts/integrations/integration_settings_form.js b/app/assets/javascripts/integrations/integration_settings_form.js index a7746bb3a0b7d..1c9b94ade8ac9 100644 --- a/app/assets/javascripts/integrations/integration_settings_form.js +++ b/app/assets/javascripts/integrations/integration_settings_form.js @@ -42,6 +42,7 @@ export default class IntegrationSettingsForm { // and test the service using provided configuration. if (this.$form.get(0).checkValidity() && this.canTestService) { e.preventDefault(); + // eslint-disable-next-line no-jquery/no-serialize this.testSettings(this.$form.serialize()); } } diff --git a/app/assets/javascripts/main.js b/app/assets/javascripts/main.js index 49be11d466d2e..c19a845eb69d8 100644 --- a/app/assets/javascripts/main.js +++ b/app/assets/javascripts/main.js @@ -314,6 +314,7 @@ document.addEventListener('DOMContentLoaded', () => { const action = `${this.action}${link.search === '' ? '?' : '&'}`; event.preventDefault(); + // eslint-disable-next-line no-jquery/no-serialize visitUrl(`${action}${$(this).serialize()}`); }); diff --git a/app/assets/javascripts/notes.js b/app/assets/javascripts/notes.js index 9cc56b34c757e..ed52eec8b1883 100644 --- a/app/assets/javascripts/notes.js +++ b/app/assets/javascripts/notes.js @@ -1461,6 +1461,7 @@ export default class Notes { getFormData($form) { const content = $form.find('.js-note-text').val(); return { + // eslint-disable-next-line no-jquery/no-serialize formData: $form.serialize(), formContent: _.escape(content), formAction: $form.attr('action'), diff --git a/app/assets/javascripts/pages/projects/commit/pipelines/index.js b/app/assets/javascripts/pages/projects/commit/pipelines/index.js index 8cc3cb0a57c92..9f08260c3d6cd 100644 --- a/app/assets/javascripts/pages/projects/commit/pipelines/index.js +++ b/app/assets/javascripts/pages/projects/commit/pipelines/index.js @@ -6,6 +6,7 @@ document.addEventListener('DOMContentLoaded', () => { new MiniPipelineGraph({ container: '.js-commit-pipeline-graph', }).bindEvents(); + // eslint-disable-next-line no-jquery/no-load $('.commit-info.branches').load(document.querySelector('.js-commit-box').dataset.commitPath); initPipelines(); }); diff --git a/app/assets/javascripts/pages/projects/commit/show/index.js b/app/assets/javascripts/pages/projects/commit/show/index.js index 6fc982967eb3f..5aa4734244e70 100644 --- a/app/assets/javascripts/pages/projects/commit/show/index.js +++ b/app/assets/javascripts/pages/projects/commit/show/index.js @@ -21,6 +21,7 @@ document.addEventListener('DOMContentLoaded', () => { }).bindEvents(); initNotes(); initChangesDropdown(document.querySelector('.navbar-gitlab').offsetHeight + performanceHeight); + // eslint-disable-next-line no-jquery/no-load $('.commit-info.branches').load(document.querySelector('.js-commit-box').dataset.commitPath); fetchCommitMergeRequests(); initDiffNotes(); diff --git a/ee/app/assets/javascripts/jira_connect.js b/ee/app/assets/javascripts/jira_connect.js index 0716a94ea8512..4ab5d6368d0e7 100644 --- a/ee/app/assets/javascripts/jira_connect.js +++ b/ee/app/assets/javascripts/jira_connect.js @@ -24,6 +24,7 @@ e.preventDefault(); AP.context.getToken(function(token) { + // eslint-disable-next-line no-jquery/no-ajax $.post(actionUrl, { jwt: token, namespace_path: $('#namespace-input').val(), @@ -39,6 +40,7 @@ e.preventDefault(); AP.context.getToken(function(token) { + // eslint-disable-next-line no-jquery/no-ajax $.ajax({ url: href, method: 'DELETE', diff --git a/ee/app/assets/javascripts/projects/custom_project_templates.js b/ee/app/assets/javascripts/projects/custom_project_templates.js index 9f7f0e53edb42..f4930f73fc014 100644 --- a/ee/app/assets/javascripts/projects/custom_project_templates.js +++ b/ee/app/assets/javascripts/projects/custom_project_templates.js @@ -120,10 +120,12 @@ export default () => { $groupTabContent.on('ajax:success', bindEvents); $navElement.one('click', () => { + // eslint-disable-next-line no-jquery/no-ajax $.get($tabContent.data('initialTemplates')); }); $groupNavElement.one('click', () => { + // eslint-disable-next-line no-jquery/no-ajax $.get($groupTabContent.data('initialTemplates')); }); diff --git a/package.json b/package.json index 3e9b7fca77311..9e1ea86b6925b 100644 --- a/package.json +++ b/package.json @@ -166,6 +166,7 @@ "eslint-plugin-import": "^2.14.0", "eslint-plugin-jasmine": "^2.10.1", "eslint-plugin-jest": "^22.3.0", + "eslint-plugin-no-jquery": "^2.1.0", "gettext-extractor": "^3.4.3", "gettext-extractor-vue": "^4.0.2", "graphql-tag": "^2.10.0", diff --git a/spec/javascripts/integrations/integration_settings_form_spec.js b/spec/javascripts/integrations/integration_settings_form_spec.js index 069e2cb07b5bc..82d1f815ca819 100644 --- a/spec/javascripts/integrations/integration_settings_form_spec.js +++ b/spec/javascripts/integrations/integration_settings_form_spec.js @@ -126,6 +126,7 @@ describe('IntegrationSettingsForm', () => { spyOn(axios, 'put').and.callThrough(); integrationSettingsForm = new IntegrationSettingsForm('.js-integration-settings-form'); + // eslint-disable-next-line no-jquery/no-serialize formData = integrationSettingsForm.$form.serialize(); }); diff --git a/yarn.lock b/yarn.lock index 923f0305ea4b6..8e6fd5b1a2e8c 100644 --- a/yarn.lock +++ b/yarn.lock @@ -4624,6 +4624,11 @@ eslint-plugin-jest@^22.3.0: resolved "https://registry.yarnpkg.com/eslint-plugin-jest/-/eslint-plugin-jest-22.3.0.tgz#a10f10dedfc92def774ec9bb5bfbd2fb8e1c96d2" integrity sha512-P1mYVRNlOEoO5T9yTqOfucjOYf1ktmJ26NjwjH8sxpCFQa6IhBGr5TpKl3hcAAT29hOsRJVuMWmTsHoUVo9FoA== +eslint-plugin-no-jquery@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/eslint-plugin-no-jquery/-/eslint-plugin-no-jquery-2.1.0.tgz#d03b74224c5cfbc7fc0bdd12ce4eb400d09e0c0b" + integrity sha512-5sr5tOJRfuRviyAvFTe/mr80TXWxTteD/JHRuJtDN8q/bxAh16eSKoKLAevLC7wZCRN2iwnEfhQPQV4rp/gYtg== + eslint-plugin-promise@^4.1.1: version "4.1.1" resolved "https://registry.yarnpkg.com/eslint-plugin-promise/-/eslint-plugin-promise-4.1.1.tgz#1e08cb68b5b2cd8839f8d5864c796f56d82746db" -- GitLab