From 0978fc4c40151a0dccbcb3d348969a6920a58e09 Mon Sep 17 00:00:00 2001 From: GitLab Bot Date: Fri, 23 Sep 2022 21:13:22 +0000 Subject: [PATCH] Add latest changes from gitlab-org/gitlab@master --- .../components/content_editor.vue | 13 ++++- .../content_editor/constants/index.js | 2 + .../shared/wikis/components/wiki_form.vue | 2 +- .../components/markdown/markdown_editor.vue | 43 +++++++++++---- app/models/ci/pipeline.rb | 18 ++++++- .../projects/settings/ci_cd/_form.html.haml | 2 +- app/views/shared/_custom_attributes.html.haml | 19 +++---- ...3504_finalize_task_system_note_renaming.rb | 22 ++++++++ ...move_task_system_note_rename_temp_index.rb | 15 ++++++ ...0236_remove_trace_column_from_ci_builds.rb | 9 ++++ db/schema_migrations/20220920213504 | 1 + db/schema_migrations/20220920214524 | 1 + db/schema_migrations/20220922090236 | 1 + db/structure.sql | 3 -- doc/administration/feature_flags.md | 5 +- .../testing_guide/testing_migrations_guide.md | 3 +- doc/user/group/access_and_permissions.md | 6 +-- .../importer/diff_notes_importer.rb | 2 +- .../importer/issue_events_importer.rb | 2 +- .../github_import/importer/issues_importer.rb | 2 +- .../github_import/importer/labels_importer.rb | 6 +-- .../importer/milestones_importer.rb | 16 +++--- .../github_import/importer/notes_importer.rb | 2 +- .../importer/pull_requests_importer.rb | 6 +-- .../pull_requests_reviews_importer.rb | 4 +- .../importer/releases_importer.rb | 16 +++--- .../single_endpoint_issue_events_importer.rb | 8 +-- .../github_import/representation/diff_note.rb | 30 +++++------ .../github_import/representation/issue.rb | 24 ++++----- .../representation/issue_event.rb | 28 +++++----- .../github_import/representation/note.rb | 14 ++--- .../representation/pull_request.rb | 36 ++++++------- .../representation/pull_request_review.rb | 15 +++--- .../github_import/representation/user.rb | 4 +- .../single_endpoint_notes_importing.rb | 2 +- lib/gitlab/github_import/user_finder.rb | 19 +++---- scripts/slack | 2 +- .../components/content_editor_spec.js | 19 +++++-- .../shared/wikis/components/wiki_form_spec.js | 2 +- .../markdown/markdown_editor_spec.js | 54 +++++++++++++++++-- .../lib/gitlab/ci/pipeline/chain/seed_spec.rb | 4 +- .../importer/diff_notes_importer_spec.rb | 7 ++- .../importer/issues_importer_spec.rb | 13 +++-- .../importer/labels_importer_spec.rb | 6 +-- .../importer/milestones_importer_spec.rb | 10 ++-- .../importer/notes_importer_spec.rb | 7 ++- .../pull_request_merged_by_importer_spec.rb | 15 +++--- .../pull_request_review_importer_spec.rb | 2 +- .../importer/pull_requests_importer_spec.rb | 50 ++++++++--------- .../pull_requests_reviews_importer_spec.rb | 10 ++-- .../importer/releases_importer_spec.rb | 27 +++++----- ...ingle_endpoint_diff_notes_importer_spec.rb | 4 +- ...gle_endpoint_issue_events_importer_spec.rb | 10 ++-- ...ngle_endpoint_issue_notes_importer_spec.rb | 4 +- ...point_merge_request_notes_importer_spec.rb | 4 +- .../representation/diff_note_spec.rb | 9 ++-- .../representation/issue_spec.rb | 17 +++--- .../github_import/representation/note_spec.rb | 11 ++-- .../pull_request_review_spec.rb | 11 ++-- .../representation/pull_request_spec.rb | 33 +++++------- .../github_import/representation/user_spec.rb | 2 +- .../gitlab/github_import/user_finder_spec.rb | 34 ++++++------ spec/models/ci/build_spec.rb | 20 ++++++- 63 files changed, 468 insertions(+), 320 deletions(-) create mode 100644 db/post_migrate/20220920213504_finalize_task_system_note_renaming.rb create mode 100644 db/post_migrate/20220920214524_remove_task_system_note_rename_temp_index.rb create mode 100644 db/post_migrate/20220922090236_remove_trace_column_from_ci_builds.rb create mode 100644 db/schema_migrations/20220920213504 create mode 100644 db/schema_migrations/20220920214524 create mode 100644 db/schema_migrations/20220922090236 diff --git a/app/assets/javascripts/content_editor/components/content_editor.vue b/app/assets/javascripts/content_editor/components/content_editor.vue index 659c447e861..b5a88f97d83 100644 --- a/app/assets/javascripts/content_editor/components/content_editor.vue +++ b/app/assets/javascripts/content_editor/components/content_editor.vue @@ -3,7 +3,7 @@ import { EditorContent as TiptapEditorContent } from '@tiptap/vue-2'; import { __ } from '~/locale'; import { VARIANT_DANGER } from '~/flash'; import { createContentEditor } from '../services/create_content_editor'; -import { ALERT_EVENT } from '../constants'; +import { ALERT_EVENT, TIPTAP_AUTOFOCUS_OPTIONS } from '../constants'; import ContentEditorAlert from './content_editor_alert.vue'; import ContentEditorProvider from './content_editor_provider.vue'; import EditorStateObserver from './editor_state_observer.vue'; @@ -51,6 +51,12 @@ export default { required: false, default: '', }, + autofocus: { + type: [String, Boolean], + required: false, + default: false, + validator: (autofocus) => TIPTAP_AUTOFOCUS_OPTIONS.includes(autofocus), + }, }, data() { return { @@ -67,7 +73,7 @@ export default { }, }, created() { - const { renderMarkdown, uploadsPath, extensions, serializerConfig } = this; + const { renderMarkdown, uploadsPath, extensions, serializerConfig, autofocus } = this; // This is a non-reactive attribute intentionally since this is a complex object. this.contentEditor = createContentEditor({ @@ -75,6 +81,9 @@ export default { uploadsPath, extensions, serializerConfig, + tiptapOptions: { + autofocus, + }, }); }, mounted() { diff --git a/app/assets/javascripts/content_editor/constants/index.js b/app/assets/javascripts/content_editor/constants/index.js index 564cca23afa..96bf9a23cdc 100644 --- a/app/assets/javascripts/content_editor/constants/index.js +++ b/app/assets/javascripts/content_editor/constants/index.js @@ -66,3 +66,5 @@ export const SAFE_VIDEO_EXT = ['mp4', 'm4v', 'mov', 'webm', 'ogv']; export const SAFE_AUDIO_EXT = ['mp3', 'oga', 'ogg', 'spx', 'wav']; export const DIAGRAM_LANGUAGES = ['plantuml', 'mermaid']; + +export const TIPTAP_AUTOFOCUS_OPTIONS = [true, false, 'start', 'end', 'all']; diff --git a/app/assets/javascripts/pages/shared/wikis/components/wiki_form.vue b/app/assets/javascripts/pages/shared/wikis/components/wiki_form.vue index bd3929c5f59..647cfd1c5b4 100644 --- a/app/assets/javascripts/pages/shared/wikis/components/wiki_form.vue +++ b/app/assets/javascripts/pages/shared/wikis/components/wiki_form.vue @@ -299,7 +299,7 @@ export default { :uploads-path="pageInfo.uploadsPath" :enable-content-editor="isMarkdownFormat" :enable-preview="isMarkdownFormat" - :autofocus="pageInfo.persisted" + :init-on-autofocus="pageInfo.persisted" :form-field-placeholder="$options.i18n.content.placeholder" :form-field-aria-label="$options.i18n.content.label" form-field-id="wiki_content" diff --git a/app/assets/javascripts/vue_shared/components/markdown/markdown_editor.vue b/app/assets/javascripts/vue_shared/components/markdown/markdown_editor.vue index fd8496fa313..4f0fb7e1844 100644 --- a/app/assets/javascripts/vue_shared/components/markdown/markdown_editor.vue +++ b/app/assets/javascripts/vue_shared/components/markdown/markdown_editor.vue @@ -31,7 +31,8 @@ export default { }, uploadsPath: { type: String, - required: true, + required: false, + default: () => window.uploads_path, }, enableContentEditor: { type: Boolean, @@ -56,11 +57,6 @@ export default { required: false, default: true, }, - autofocus: { - type: Boolean, - required: false, - default: false, - }, formFieldPlaceholder: { type: String, required: false, @@ -71,17 +67,30 @@ export default { required: false, default: '', }, + initOnAutofocus: { + type: Boolean, + required: false, + default: false, + }, }, data() { return { editingMode: EDITING_MODE_MARKDOWN_FIELD, switchEditingControlEnabled: true, + autofocus: this.initOnAutofocus, }; }, computed: { isContentEditorActive() { return this.enableContentEditor && this.editingMode === EDITING_MODE_CONTENT_EDITOR; }, + contentEditorAutofocus() { + // Match textarea focus behavior + return this.autofocus ? 'end' : false; + }, + }, + mounted() { + this.autofocusTextarea(this.editingMode); }, methods: { updateMarkdownFromContentEditor({ markdown }) { @@ -99,9 +108,25 @@ export default { renderMarkdown(markdown) { return axios.post(this.renderMarkdownPath, { text: markdown }).then(({ data }) => data.body); }, + onEditingModeChange(editingMode) { + this.notifyEditingModeChange(editingMode); + this.enableAutofocus(editingMode); + }, + onEditingModeRestored(editingMode) { + this.notifyEditingModeChange(editingMode); + }, notifyEditingModeChange(editingMode) { this.$emit(editingMode); }, + enableAutofocus(editingMode) { + this.autofocus = true; + this.autofocusTextarea(editingMode); + }, + autofocusTextarea(editingMode) { + if (this.autofocus && editingMode === EDITING_MODE_MARKDOWN_FIELD) { + this.$refs.textarea.focus(); + } + }, }, switchEditingControlOptions: [ { text: __('Source'), value: EDITING_MODE_MARKDOWN_FIELD }, @@ -119,13 +144,13 @@ export default { class="gl-display-flex" :options="$options.switchEditingControlOptions" :disabled="!enableContentEditor || !switchEditingControlEnabled" - @change="notifyEditingModeChange" + @change="onEditingModeChange" />