From 0a850868dfb85086cba8320cee9dac4657dcae6c Mon Sep 17 00:00:00 2001 From: GitLab Bot Date: Wed, 9 Oct 2019 12:06:13 +0000 Subject: Add latest changes from gitlab-org/gitlab@master --- .../behaviors/markdown/editor_extensions.js | 2 + .../javascripts/behaviors/markdown/nodes/audio.js | 53 +++ app/assets/javascripts/blob/viewer/index.js | 6 +- .../clusters/components/applications.vue | 4 +- .../clusters/components/knative_domain_editor.vue | 2 +- .../javascripts/diffs/components/commit_item.vue | 2 +- .../diffs/components/diff_file_header.vue | 2 +- .../javascripts/jobs/components/commit_block.vue | 2 +- .../monitoring/components/dashboard.vue | 88 ++++- .../monitoring/components/graph_group.vue | 2 +- .../monitoring/components/panel_type.vue | 2 +- app/assets/javascripts/registry/components/app.vue | 4 +- .../repository/components/last_commit.vue | 2 +- .../javascripts/serverless/components/url.vue | 2 +- .../components/mr_widget_header.vue | 2 +- .../components/states/mr_widget_merged.vue | 2 +- .../vue_shared/components/clipboard_button.vue | 2 +- app/assets/stylesheets/pages/prometheus.scss | 35 +- app/controllers/concerns/uploads_actions.rb | 6 +- app/controllers/groups/uploads_controller.rb | 2 +- app/controllers/help_controller.rb | 4 +- app/controllers/projects/uploads_controller.rb | 2 +- app/helpers/blob_helper.rb | 4 +- app/helpers/button_helper.rb | 2 +- app/helpers/search_helper.rb | 2 +- app/models/application_setting_implementation.rb | 3 + app/models/blob.rb | 4 + app/models/commit.rb | 2 +- .../admin/application_settings/network.html.haml | 2 + app/views/admin/applications/show.html.haml | 4 +- .../admin/impersonation_tokens/index.html.haml | 2 +- app/views/ci/runner/_how_to_setup_runner.html.haml | 4 +- app/views/doorkeeper/applications/show.html.haml | 4 +- app/views/projects/_new_project_push_tip.html.haml | 2 +- app/views/projects/buttons/_clone.html.haml | 4 +- app/views/projects/commit/_commit_box.html.haml | 2 +- app/views/projects/commits/_commit.html.haml | 2 +- .../deploy_tokens/_new_deploy_token.html.haml | 4 +- .../merge_requests/_how_to_merge.html.haml | 6 +- .../notes/_more_actions_dropdown.html.haml | 2 +- app/views/projects/pipelines/_info.html.haml | 2 +- app/views/projects/triggers/_trigger.html.haml | 2 +- app/views/shared/_clone_panel.html.haml | 2 +- ...sonal_access_tokens_created_container.html.haml | 2 +- app/views/shared/issuable/_sidebar.html.haml | 4 +- app/views/shared/milestones/_sidebar.html.haml | 4 +- app/views/shared/snippets/_header.html.haml | 2 +- changelogs/unreleased/16654-audio-in-markdown.yml | 5 + ...d-resize-panels-in-dashboard-save-to-branch.yml | 5 + .../unreleased/33668-fix-search-term-xss.yml | 5 + config/initializers/rack_attack_new.rb | 1 + config/locales/sherlock.en.yml | 2 +- ...ment_throttle_columns_to_application_setting.rb | 30 ++ db/schema.rb | 5 +- doc/integration/saml.md | 114 ++++++ doc/security/asset_proxy.md | 6 +- doc/user/img/markdown_audio.mp3 | Bin 0 -> 68064 bytes doc/user/markdown.md | 19 +- .../integrations/jira_cloud_configuration.md | 2 +- doc/user/project/issues/issue_data_and_actions.md | 6 +- .../project/merge_requests/allow_collaboration.md | 2 +- doc/user/snippets.md | 4 +- lib/banzai/filter/audio_link_filter.rb | 66 ++++ lib/banzai/filter/relative_link_filter.rb | 4 +- lib/banzai/filter/wiki_link_filter.rb | 2 +- lib/banzai/pipeline/gfm_pipeline.rb | 1 + lib/gitlab/database/migration_helpers.rb | 2 +- lib/gitlab/file_markdown_link_builder.rb | 4 +- lib/gitlab/file_type_detection.rb | 18 +- lib/gitlab/profiler.rb | 3 +- locale/gitlab.pot | 80 ++-- spec/features/markdown/copy_as_gfm_spec.rb | 6 + spec/features/markdown/markdown_spec.rb | 4 + spec/features/projects/branches_spec.rb | 2 +- spec/fixtures/audio_sample.wav | Bin 0 -> 127020 bytes spec/fixtures/markdown.md.erb | 4 + .../__snapshots__/last_commit_spec.js.snap | 4 +- .../components/modal_copy_button_spec.js | 2 +- spec/helpers/button_helper_spec.rb | 2 +- spec/helpers/search_helper_spec.rb | 4 +- spec/javascripts/blob/viewer/index_spec.js | 4 +- .../monitoring/components/dashboard_spec.js | 102 ++++- .../vue_shared/components/clipboard_button_spec.js | 6 +- spec/lib/banzai/filter/audio_link_filter_spec.rb | 120 ++++++ .../lib/banzai/filter/relative_link_filter_spec.rb | 17 + spec/lib/banzai/filter/wiki_link_filter_spec.rb | 8 + spec/lib/banzai/pipeline/wiki_pipeline_spec.rb | 24 +- spec/lib/gitlab/file_markdown_link_builder_spec.rb | 56 ++- spec/lib/gitlab/file_type_detection_spec.rb | 419 ++++++++++++++++++--- spec/lib/gitlab/utils/sanitize_node_link_spec.rb | 5 + spec/models/commit_spec.rb | 2 + spec/requests/rack_attack_global_spec.rb | 38 +- spec/support/helpers/rack_attack_spec_helpers.rb | 33 ++ spec/support/helpers/test_env.rb | 1 + spec/support/matchers/markdown_matchers.rb | 11 + .../shared_contexts/rack_attack_shared_context.rb | 13 + 96 files changed, 1314 insertions(+), 260 deletions(-) create mode 100644 app/assets/javascripts/behaviors/markdown/nodes/audio.js create mode 100644 changelogs/unreleased/16654-audio-in-markdown.yml create mode 100644 changelogs/unreleased/27835-move-and-resize-panels-in-dashboard-save-to-branch.yml create mode 100644 changelogs/unreleased/33668-fix-search-term-xss.yml create mode 100644 db/migrate/20190930025655_add_incident_management_throttle_columns_to_application_setting.rb create mode 100644 doc/user/img/markdown_audio.mp3 create mode 100644 lib/banzai/filter/audio_link_filter.rb create mode 100644 spec/fixtures/audio_sample.wav create mode 100644 spec/lib/banzai/filter/audio_link_filter_spec.rb create mode 100644 spec/support/helpers/rack_attack_spec_helpers.rb create mode 100644 spec/support/shared_contexts/rack_attack_shared_context.rb diff --git a/app/assets/javascripts/behaviors/markdown/editor_extensions.js b/app/assets/javascripts/behaviors/markdown/editor_extensions.js index 47e5fc65c48..8bd2145db1c 100644 --- a/app/assets/javascripts/behaviors/markdown/editor_extensions.js +++ b/app/assets/javascripts/behaviors/markdown/editor_extensions.js @@ -21,6 +21,7 @@ import Reference from './nodes/reference'; import TableOfContents from './nodes/table_of_contents'; import Video from './nodes/video'; +import Audio from './nodes/audio'; import BulletList from './nodes/bullet_list'; import OrderedList from './nodes/ordered_list'; @@ -78,6 +79,7 @@ export default [ new TableOfContents(), new Video(), + new Audio(), new BulletList(), new OrderedList(), diff --git a/app/assets/javascripts/behaviors/markdown/nodes/audio.js b/app/assets/javascripts/behaviors/markdown/nodes/audio.js new file mode 100644 index 00000000000..48ac408cf24 --- /dev/null +++ b/app/assets/javascripts/behaviors/markdown/nodes/audio.js @@ -0,0 +1,53 @@ +/* eslint-disable class-methods-use-this */ + +import { Node } from 'tiptap'; +import { defaultMarkdownSerializer } from 'prosemirror-markdown'; + +// Transforms generated HTML back to GFM for Banzai::Filter::AudioLinkFilter +export default class Audio extends Node { + get name() { + return 'audio'; + } + + get schema() { + return { + attrs: { + src: {}, + alt: { + default: null, + }, + }, + group: 'block', + draggable: true, + parseDOM: [ + { + tag: '.audio-container', + skip: true, + }, + { + tag: '.audio-container p', + priority: 51, + ignore: true, + }, + { + tag: 'audio[src]', + getAttrs: el => ({ src: el.getAttribute('src'), alt: el.dataset.title }), + }, + ], + toDOM: node => [ + 'audio', + { + src: node.attrs.src, + controls: true, + 'data-setup': '{}', + 'data-title': node.attrs.alt, + }, + ], + }; + } + + toMarkdown(state, node) { + defaultMarkdownSerializer.nodes.image(state, node); + state.closeBlock(node); + } +} diff --git a/app/assets/javascripts/blob/viewer/index.js b/app/assets/javascripts/blob/viewer/index.js index 9ea455069f3..07e4dde41d9 100644 --- a/app/assets/javascripts/blob/viewer/index.js +++ b/app/assets/javascripts/blob/viewer/index.js @@ -107,18 +107,18 @@ export default class BlobViewer { toggleCopyButtonState() { if (!this.copySourceBtn) return; if (this.simpleViewer.getAttribute('data-loaded')) { - this.copySourceBtn.setAttribute('title', __('Copy source to clipboard')); + this.copySourceBtn.setAttribute('title', __('Copy file contents')); this.copySourceBtn.classList.remove('disabled'); } else if (this.activeViewer === this.simpleViewer) { this.copySourceBtn.setAttribute( 'title', - __('Wait for the source to load to copy it to the clipboard'), + __('Wait for the file to load to copy its contents'), ); this.copySourceBtn.classList.add('disabled'); } else { this.copySourceBtn.setAttribute( 'title', - __('Switch to the source to copy it to the clipboard'), + __('Switch to the source to copy the file contents'), ); this.copySourceBtn.classList.add('disabled'); } diff --git a/app/assets/javascripts/clusters/components/applications.vue b/app/assets/javascripts/clusters/components/applications.vue index 4d3e759d8d4..b95f97077f6 100644 --- a/app/assets/javascripts/clusters/components/applications.vue +++ b/app/assets/javascripts/clusters/components/applications.vue @@ -294,7 +294,7 @@ export default { @@ -472,7 +472,7 @@ export default { diff --git a/app/assets/javascripts/clusters/components/knative_domain_editor.vue b/app/assets/javascripts/clusters/components/knative_domain_editor.vue index e26ef135bc5..25347b11b6c 100644 --- a/app/assets/javascripts/clusters/components/knative_domain_editor.vue +++ b/app/assets/javascripts/clusters/components/knative_domain_editor.vue @@ -103,7 +103,7 @@ export default { diff --git a/app/assets/javascripts/diffs/components/commit_item.vue b/app/assets/javascripts/diffs/components/commit_item.vue index 761fd1583ed..43a7703f611 100644 --- a/app/assets/javascripts/diffs/components/commit_item.vue +++ b/app/assets/javascripts/diffs/components/commit_item.vue @@ -121,7 +121,7 @@ export default {
diff --git a/app/assets/javascripts/diffs/components/diff_file_header.vue b/app/assets/javascripts/diffs/components/diff_file_header.vue index bfcc726a030..665328eb234 100644 --- a/app/assets/javascripts/diffs/components/diff_file_header.vue +++ b/app/assets/javascripts/diffs/components/diff_file_header.vue @@ -209,7 +209,7 @@ export default { diff --git a/app/assets/javascripts/monitoring/components/dashboard.vue b/app/assets/javascripts/monitoring/components/dashboard.vue index 084f736911f..9ecb9324f8c 100644 --- a/app/assets/javascripts/monitoring/components/dashboard.vue +++ b/app/assets/javascripts/monitoring/components/dashboard.vue @@ -1,4 +1,7 @@