From b7c735c8ac11b8182807070fc6f84f2606e15427 Mon Sep 17 00:00:00 2001 From: GitLab Bot Date: Wed, 15 Apr 2020 12:09:18 +0000 Subject: [PATCH] Add latest changes from gitlab-org/gitlab@master --- .../edit/components/active_toggle.vue | 53 +++++++++++++++ .../integrations/edit/event_hub.js | 3 + .../javascripts/integrations/edit/index.js | 30 +++++++++ .../integrations/integration_settings_form.js | 29 ++++---- .../notes/components/note_header.vue | 17 ++++- .../projects/releases_controller.rb | 2 +- app/helpers/snippets_helper.rb | 10 +++ app/models/diff_note_position.rb | 15 ++++- app/models/note.rb | 1 + .../prometheus_panel.rb | 2 +- .../capture_diff_note_position_service.rb | 65 ++++++++++++++++++ .../capture_diff_note_positions_service.rb | 34 ++++++++++ .../mergeability_check_service.rb | 7 ++ app/services/notes/create_service.rb | 4 ++ .../groups/settings/_permissions.html.haml | 1 + app/views/shared/_service_settings.html.haml | 6 +- app/views/shared/snippets/_snippet.html.haml | 5 +- app/workers/all_queues.yml | 2 +- app/workers/background_migration_worker.rb | 1 + ...99882-update-active-checkbox-component.yml | 5 ++ ...ecate-returning-token-from-runners-api.yml | 5 ++ ...rd-does-not-load-when-max_value-is-set.yml | 6 ++ .../31015-migrate-legacy-attachments.yml | 5 ++ ...lease_asset_link_editing-fleature-flag.yml | 5 ++ ...200409211607_migrate_legacy_attachments.rb | 30 +++++++++ db/structure.sql | 1 + .../raketasks/uploads/migrate.md | 18 ----- doc/api/runners.md | 8 +++ doc/user/group/saml_sso/index.md | 26 +++++++ doc/user/project/integrations/bamboo.md | 2 +- .../integrations/discord_notifications.md | 2 +- .../project/integrations/generic_alerts.md | 2 +- doc/user/project/integrations/github.md | 2 +- .../project/integrations/hangouts_chat.md | 2 +- doc/user/project/integrations/hipchat.md | 2 +- doc/user/project/integrations/irker.md | 2 +- .../integrations/mattermost_slash_commands.md | 2 +- doc/user/project/integrations/slack.md | 2 +- .../integrations/slack_slash_commands.md | 2 +- .../project/integrations/unify_circuit.md | 2 +- doc/user/project/releases/index.md | 4 +- lib/api/entities/runner_details.rb | 4 ++ .../import_export/project/relation_factory.rb | 3 +- .../dashboard/stages/panel_ids_inserter.rb | 3 + lib/tasks/gitlab/uploads/legacy.rake | 27 -------- locale/gitlab.pot | 23 +++++++ spec/features/admin/admin_settings_spec.rb | 1 - spec/features/dashboard/snippets_spec.rb | 52 ++++++++++++-- .../user_activates_issue_tracker_spec.rb | 2 +- .../services/user_activates_jira_spec.rb | 3 +- ...activates_mattermost_slash_command_spec.rb | 5 +- ...user_activates_slack_slash_command_spec.rb | 9 ++- .../services/user_activates_youtrack_spec.rb | 2 +- .../metrics/dashboard/sample_dashboard.yml | 1 + .../metrics/dashboard/schemas/panels.json | 1 + .../edit/components/active_toggle_spec.js | 65 ++++++++++++++++++ .../notes/components/note_header_spec.js | 42 +++++++++--- spec/helpers/snippets_helper_spec.rb | 31 +++++++++ .../integration_settings_form_spec.js | 21 ++++-- spec/lib/gitlab/import_export/all_models.yml | 4 ++ .../project/tree_restorer_spec.rb | 3 +- .../import_export/project/tree_saver_spec.rb | 3 +- .../metrics/dashboard/processor_spec.rb | 17 +++-- .../stages/panel_ids_inserter_spec.rb | 19 ++++++ spec/models/diff_note_position_spec.rb | 37 +++++++--- ...capture_diff_note_position_service_spec.rb | 31 +++++++++ ...apture_diff_note_positions_service_spec.rb | 67 +++++++++++++++++++ .../mergeability_check_service_spec.rb | 18 +++++ spec/services/notes/create_service_spec.rb | 13 ++++ spec/support/helpers/test_env.rb | 4 +- spec/support/import_export/common_util.rb | 9 +-- 71 files changed, 800 insertions(+), 142 deletions(-) create mode 100644 app/assets/javascripts/integrations/edit/components/active_toggle.vue create mode 100644 app/assets/javascripts/integrations/edit/event_hub.js create mode 100644 app/assets/javascripts/integrations/edit/index.js create mode 100644 app/services/discussions/capture_diff_note_position_service.rb create mode 100644 app/services/discussions/capture_diff_note_positions_service.rb create mode 100644 changelogs/unreleased/199882-update-active-checkbox-component.yml create mode 100644 changelogs/unreleased/214320-deprecate-returning-token-from-runners-api.yml create mode 100644 changelogs/unreleased/214360-custom-metrics-dashboard-does-not-load-when-max_value-is-set.yml create mode 100644 changelogs/unreleased/31015-migrate-legacy-attachments.yml create mode 100644 changelogs/unreleased/nfriend-enable-release_asset_link_editing-fleature-flag.yml create mode 100644 db/post_migrate/20200409211607_migrate_legacy_attachments.rb delete mode 100644 lib/tasks/gitlab/uploads/legacy.rake create mode 100644 spec/frontend/integrations/edit/components/active_toggle_spec.js create mode 100644 spec/services/discussions/capture_diff_note_position_service_spec.rb create mode 100644 spec/services/discussions/capture_diff_note_positions_service_spec.rb diff --git a/app/assets/javascripts/integrations/edit/components/active_toggle.vue b/app/assets/javascripts/integrations/edit/components/active_toggle.vue new file mode 100644 index 00000000000..2b0aa2586e4 --- /dev/null +++ b/app/assets/javascripts/integrations/edit/components/active_toggle.vue @@ -0,0 +1,53 @@ + + + diff --git a/app/assets/javascripts/integrations/edit/event_hub.js b/app/assets/javascripts/integrations/edit/event_hub.js new file mode 100644 index 00000000000..0948c2e5352 --- /dev/null +++ b/app/assets/javascripts/integrations/edit/event_hub.js @@ -0,0 +1,3 @@ +import Vue from 'vue'; + +export default new Vue(); diff --git a/app/assets/javascripts/integrations/edit/index.js b/app/assets/javascripts/integrations/edit/index.js new file mode 100644 index 00000000000..a2ba581d429 --- /dev/null +++ b/app/assets/javascripts/integrations/edit/index.js @@ -0,0 +1,30 @@ +import Vue from 'vue'; +import { parseBoolean } from '~/lib/utils/common_utils'; +import ActiveToggle from './components/active_toggle.vue'; + +export default el => { + if (!el) { + return null; + } + + const { showActive: showActiveStr, activated: activatedStr, disabled: disabledStr } = el.dataset; + const showActive = parseBoolean(showActiveStr); + const activated = parseBoolean(activatedStr); + const disabled = parseBoolean(disabledStr); + + if (!showActive) { + return null; + } + + return new Vue({ + el, + render(createElement) { + return createElement(ActiveToggle, { + props: { + initialActivated: activated, + disabled, + }, + }); + }, + }); +}; diff --git a/app/assets/javascripts/integrations/integration_settings_form.js b/app/assets/javascripts/integrations/integration_settings_form.js index 1c9b94ade8a..3067f4090b1 100644 --- a/app/assets/javascripts/integrations/integration_settings_form.js +++ b/app/assets/javascripts/integrations/integration_settings_form.js @@ -2,28 +2,33 @@ import $ from 'jquery'; import axios from '../lib/utils/axios_utils'; import flash from '../flash'; import { __ } from '~/locale'; +import initForm from './edit'; +import eventHub from './edit/event_hub'; export default class IntegrationSettingsForm { constructor(formSelector) { this.$form = $(formSelector); + this.formActive = false; // Form Metadata this.canTestService = this.$form.data('canTest'); this.testEndPoint = this.$form.data('testUrl'); // Form Child Elements - this.$serviceToggle = this.$form.find('#service_active'); this.$submitBtn = this.$form.find('button[type="submit"]'); this.$submitBtnLoader = this.$submitBtn.find('.js-btn-spinner'); this.$submitBtnLabel = this.$submitBtn.find('.js-btn-label'); } init() { - // Initialize View - this.toggleServiceState(this.$serviceToggle.is(':checked')); + // Init Vue component + initForm(document.querySelector('.js-vue-integration-settings')); + eventHub.$on('toggle', active => { + this.formActive = active; + this.handleServiceToggle(); + }); // Bind Event Listeners - this.$serviceToggle.on('change', e => this.handleServiceToggle(e)); this.$submitBtn.on('click', e => this.handleSettingsSave(e)); } @@ -31,7 +36,7 @@ export default class IntegrationSettingsForm { // Check if Service is marked active, as if not marked active, // We can skip testing it and directly go ahead to allow form to // be submitted - if (!this.$serviceToggle.is(':checked')) { + if (!this.formActive) { return; } @@ -47,16 +52,16 @@ export default class IntegrationSettingsForm { } } - handleServiceToggle(e) { - this.toggleServiceState($(e.currentTarget).is(':checked')); + handleServiceToggle() { + this.toggleServiceState(); } /** * Change Form's validation enforcement based on service status (active/inactive) */ - toggleServiceState(serviceActive) { - this.toggleSubmitBtnLabel(serviceActive); - if (serviceActive) { + toggleServiceState() { + this.toggleSubmitBtnLabel(); + if (this.formActive) { this.$form.removeAttr('novalidate'); } else if (!this.$form.attr('novalidate')) { this.$form.attr('novalidate', 'novalidate'); @@ -66,10 +71,10 @@ export default class IntegrationSettingsForm { /** * Toggle Submit button label based on Integration status and ability to test service */ - toggleSubmitBtnLabel(serviceActive) { + toggleSubmitBtnLabel() { let btnLabel = __('Save changes'); - if (serviceActive && this.canTestService) { + if (this.formActive && this.canTestService) { btnLabel = __('Test settings and save changes'); } diff --git a/app/assets/javascripts/notes/components/note_header.vue b/app/assets/javascripts/notes/components/note_header.vue index 9cb592ceedb..f82b3554cac 100644 --- a/app/assets/javascripts/notes/components/note_header.vue +++ b/app/assets/javascripts/notes/components/note_header.vue @@ -39,13 +39,18 @@ export default { required: false, default: true, }, + showSpinner: { + type: Boolean, + required: false, + default: true, + }, }, computed: { toggleChevronClass() { return this.expanded ? 'fa-chevron-up' : 'fa-chevron-down'; }, noteTimestampLink() { - return `#note_${this.noteId}`; + return this.noteId ? `#note_${this.noteId}` : undefined; }, hasAuthor() { return this.author && Object.keys(this.author).length; @@ -60,7 +65,9 @@ export default { this.$emit('toggleHandler'); }, updateTargetNoteHash() { - this.setTargetNoteHash(this.noteTimestampLink); + if (this.$store) { + this.setTargetNoteHash(this.noteTimestampLink); + } }, }, }; @@ -101,16 +108,20 @@ export default { +