From 7efa4ab6491a796bd9ffa00af9afe2ab64575741 Mon Sep 17 00:00:00 2001 From: Stanislav Lashmanov Date: Thu, 15 Dec 2022 17:22:09 +0400 Subject: [PATCH 1/3] Remove jQuery from Autosave class --- app/assets/javascripts/autosave.js | 41 +++++++------------ .../components/submit_dropdown.vue | 3 +- app/assets/javascripts/deprecated_notes.js | 2 +- .../design_notes/design_reply_form.vue | 3 +- .../javascripts/issuable/issuable_form.js | 21 +++++----- .../notes/components/comment_form.vue | 2 +- .../javascripts/notes/mixins/autosave.js | 3 +- .../show/components/issuable_edit_form.vue | 5 +-- .../javascripts/epic/components/epic_form.vue | 9 +--- .../epic/components/epic_form_spec.js | 11 +++-- spec/frontend/autosave_spec.js | 38 ++++------------- .../design_notes/design_reply_form_spec.js | 14 +++---- .../components/diff_line_note_form_spec.js | 3 +- spec/frontend/issuable/issuable_form_spec.js | 10 +++-- 14 files changed, 63 insertions(+), 102 deletions(-) diff --git a/app/assets/javascripts/autosave.js b/app/assets/javascripts/autosave.js index 5ab66acaf8079f..e6d72f9a16d57d 100644 --- a/app/assets/javascripts/autosave.js +++ b/app/assets/javascripts/autosave.js @@ -1,56 +1,44 @@ -/* eslint-disable no-param-reassign, consistent-return */ - import AccessorUtilities from './lib/utils/accessor'; export default class Autosave { constructor(field, key, fallbackKey, lockVersion) { this.field = field; - this.type = this.field.prop('type'); + this.type = this.field.getAttribute('type'); this.isLocalStorageAvailable = AccessorUtilities.canUseLocalStorage(); - if (key.join != null) { - key = key.join('/'); - } - this.key = `autosave/${key}`; + this.key = Array.isArray(key) ? `autosave/${key.join('/')}` : `autosave/${key}`; this.fallbackKey = fallbackKey; this.lockVersionKey = `${this.key}/lockVersion`; this.lockVersion = lockVersion; - this.field.data('autosave', this); this.restore(); - this.field.on('input', () => this.save()); + this.field.addEventListener('input', this.save); } restore() { if (!this.isLocalStorageAvailable) return; - if (!this.field.length) return; const text = window.localStorage.getItem(this.key); const fallbackText = window.localStorage.getItem(this.fallbackKey); if (this.type === 'checkbox') { - this.field.prop('checked', text || fallbackText); + this.field.checked = text || fallbackText; } else if (text) { - this.field.val(text); + this.field.value = text; } else if (fallbackText) { - this.field.val(fallbackText); + this.field.value = fallbackText; } - this.field.trigger('input'); - // v-model does not update with jQuery trigger - // https://github.com/vuejs/vue/issues/2804#issuecomment-216968137 - const event = new Event('change', { bubbles: true, cancelable: false }); - const field = this.field.get(0); - if (field) { - field.dispatchEvent(event); - } + const inputEvent = new Event('input', { bubbles: true, cancelable: false }); + const changeEvent = new Event('change', { bubbles: true, cancelable: false }); + this.field.dispatchEvent(inputEvent); + this.field.dispatchEvent(changeEvent); } getSavedLockVersion() { - if (!this.isLocalStorageAvailable) return; + if (!this.isLocalStorageAvailable) return undefined; return window.localStorage.getItem(this.lockVersionKey); } save() { - if (!this.field.length) return; - const value = this.type === 'checkbox' ? this.field.is(':checked') : this.field.val(); + const value = this.type === 'checkbox' ? this.field.checked : this.field.value; if (this.isLocalStorageAvailable && value) { if (this.fallbackKey) { @@ -66,7 +54,7 @@ export default class Autosave { } reset() { - if (!this.isLocalStorageAvailable) return; + if (!this.isLocalStorageAvailable) return undefined; window.localStorage.removeItem(this.lockVersionKey); window.localStorage.removeItem(this.fallbackKey); @@ -74,7 +62,6 @@ export default class Autosave { } dispose() { - // eslint-disable-next-line @gitlab/no-global-event-off - this.field.off('input'); + this.field.removeEventListener('input', this.save); } } diff --git a/app/assets/javascripts/batch_comments/components/submit_dropdown.vue b/app/assets/javascripts/batch_comments/components/submit_dropdown.vue index acc3cbe10a0f6a..ed0481e7a48d2a 100644 --- a/app/assets/javascripts/batch_comments/components/submit_dropdown.vue +++ b/app/assets/javascripts/batch_comments/components/submit_dropdown.vue @@ -1,5 +1,4 @@