summaryrefslogtreecommitdiff
path: root/app
diff options
context:
space:
mode:
Diffstat (limited to 'app')
-rw-r--r--app/assets/javascripts/ci/runner/graphql/edit/runner_fields_shared.fragment.graphql2
-rw-r--r--app/assets/javascripts/ci/runner/graphql/list/list_item_shared.fragment.graphql2
-rw-r--r--app/assets/javascripts/ci/runner/graphql/show/runner_details_shared.fragment.graphql2
-rw-r--r--app/assets/javascripts/content_editor/components/wrappers/code_block.vue1
-rw-r--r--app/assets/javascripts/content_editor/components/wrappers/details.vue2
-rw-r--r--app/assets/javascripts/content_editor/components/wrappers/footnote_definition.vue1
-rw-r--r--app/assets/javascripts/content_editor/components/wrappers/table_cell_base.vue1
-rw-r--r--app/assets/javascripts/content_editor/components/wrappers/table_of_contents_heading.vue4
-rw-r--r--app/assets/javascripts/content_editor/extensions/blockquote.js9
-rw-r--r--app/assets/javascripts/content_editor/extensions/bullet_list.js9
-rw-r--r--app/assets/javascripts/content_editor/extensions/code_block_highlight.js14
-rw-r--r--app/assets/javascripts/content_editor/extensions/description_item.js12
-rw-r--r--app/assets/javascripts/content_editor/extensions/description_list.js14
-rw-r--r--app/assets/javascripts/content_editor/extensions/details_content.js12
-rw-r--r--app/assets/javascripts/content_editor/extensions/figure.js12
-rw-r--r--app/assets/javascripts/content_editor/extensions/figure_caption.js12
-rw-r--r--app/assets/javascripts/content_editor/extensions/footnote_reference.js10
-rw-r--r--app/assets/javascripts/content_editor/extensions/footnotes_section.js16
-rw-r--r--app/assets/javascripts/content_editor/extensions/heading.js9
-rw-r--r--app/assets/javascripts/content_editor/extensions/list_item.js13
-rw-r--r--app/assets/javascripts/content_editor/extensions/ordered_list.js9
-rw-r--r--app/assets/javascripts/content_editor/extensions/paragraph.js13
-rw-r--r--app/assets/javascripts/content_editor/extensions/sourcemap.js2
-rw-r--r--app/assets/javascripts/content_editor/extensions/task_item.js3
-rw-r--r--app/assets/javascripts/content_editor/extensions/task_list.js13
-rw-r--r--app/assets/javascripts/integrations/index/components/integrations_table.vue10
-rw-r--r--app/assets/javascripts/lib/utils/text_utility.js2
-rw-r--r--app/assets/javascripts/notes/utils.js3
-rw-r--r--app/assets/javascripts/pipelines/components/header_component.vue7
-rw-r--r--app/assets/javascripts/pipelines/constants.js2
-rw-r--r--app/assets/javascripts/super_sidebar/components/menu_section.vue13
-rw-r--r--app/assets/javascripts/super_sidebar/components/pinned_section.vue1
-rw-r--r--app/assets/javascripts/super_sidebar/components/sidebar_menu.vue1
-rw-r--r--app/controllers/concerns/integrations/actions.rb3
-rw-r--r--app/controllers/projects/settings/integrations_controller.rb1
-rw-r--r--app/views/projects/settings/integrations/_form.html.haml5
36 files changed, 215 insertions, 30 deletions
diff --git a/app/assets/javascripts/ci/runner/graphql/edit/runner_fields_shared.fragment.graphql b/app/assets/javascripts/ci/runner/graphql/edit/runner_fields_shared.fragment.graphql
index 29abddf84f5..d18b80511fb 100644
--- a/app/assets/javascripts/ci/runner/graphql/edit/runner_fields_shared.fragment.graphql
+++ b/app/assets/javascripts/ci/runner/graphql/edit/runner_fields_shared.fragment.graphql
@@ -10,5 +10,5 @@ fragment RunnerFieldsShared on CiRunner {
maximumTimeout
tagList
createdAt
- status(legacyMode: null)
+ status
}
diff --git a/app/assets/javascripts/ci/runner/graphql/list/list_item_shared.fragment.graphql b/app/assets/javascripts/ci/runner/graphql/list/list_item_shared.fragment.graphql
index 0a449ef0435..4eebcd01be6 100644
--- a/app/assets/javascripts/ci/runner/graphql/list/list_item_shared.fragment.graphql
+++ b/app/assets/javascripts/ci/runner/graphql/list/list_item_shared.fragment.graphql
@@ -16,7 +16,7 @@ fragment ListItemShared on CiRunner {
...User
}
contactedAt
- status(legacyMode: null)
+ status
jobExecutionStatus
userPermissions {
updateRunner
diff --git a/app/assets/javascripts/ci/runner/graphql/show/runner_details_shared.fragment.graphql b/app/assets/javascripts/ci/runner/graphql/show/runner_details_shared.fragment.graphql
index b5689ff7687..bd53fb29bd0 100644
--- a/app/assets/javascripts/ci/runner/graphql/show/runner_details_shared.fragment.graphql
+++ b/app/assets/javascripts/ci/runner/graphql/show/runner_details_shared.fragment.graphql
@@ -15,7 +15,7 @@ fragment RunnerDetailsShared on CiRunner {
jobCount
tagList
createdAt
- status(legacyMode: null)
+ status
contactedAt
tokenExpiresAt
version
diff --git a/app/assets/javascripts/content_editor/components/wrappers/code_block.vue b/app/assets/javascripts/content_editor/components/wrappers/code_block.vue
index 55cf38dfcbb..4a3dfe3656c 100644
--- a/app/assets/javascripts/content_editor/components/wrappers/code_block.vue
+++ b/app/assets/javascripts/content_editor/components/wrappers/code_block.vue
@@ -82,6 +82,7 @@ export default {
<node-view-wrapper
:class="`content-editor-code-block gl-relative code highlight gl-p-3 ${$options.userColorScheme}`"
as="pre"
+ dir="auto"
>
<div
v-if="node.attrs.showPreview"
diff --git a/app/assets/javascripts/content_editor/components/wrappers/details.vue b/app/assets/javascripts/content_editor/components/wrappers/details.vue
index aff15ac3e53..e09f2fd1456 100644
--- a/app/assets/javascripts/content_editor/components/wrappers/details.vue
+++ b/app/assets/javascripts/content_editor/components/wrappers/details.vue
@@ -28,6 +28,6 @@ export default {
:class="{ 'is-open': open }"
@click="open = !open"
></div>
- <node-view-content as="ul" class="details-content" :class="{ 'is-open': open }" />
+ <node-view-content as="ul" class="details-content" :class="{ 'is-open': open }" dir="auto" />
</node-view-wrapper>
</template>
diff --git a/app/assets/javascripts/content_editor/components/wrappers/footnote_definition.vue b/app/assets/javascripts/content_editor/components/wrappers/footnote_definition.vue
index 8b7b02605f7..b96b7400d85 100644
--- a/app/assets/javascripts/content_editor/components/wrappers/footnote_definition.vue
+++ b/app/assets/javascripts/content_editor/components/wrappers/footnote_definition.vue
@@ -21,6 +21,7 @@ export default {
data-testid="footnote-label"
contenteditable="false"
class="gl-display-inline-flex gl-mr-2"
+ dir="auto"
>{{ node.attrs.label }}:</span
>
<node-view-content />
diff --git a/app/assets/javascripts/content_editor/components/wrappers/table_cell_base.vue b/app/assets/javascripts/content_editor/components/wrappers/table_cell_base.vue
index 4d948f4ec05..5624bae34c2 100644
--- a/app/assets/javascripts/content_editor/components/wrappers/table_cell_base.vue
+++ b/app/assets/javascripts/content_editor/components/wrappers/table_cell_base.vue
@@ -110,6 +110,7 @@ export default {
<node-view-wrapper
class="gl-relative gl-padding-5 gl-min-w-10"
:as="cellType"
+ dir="auto"
@click="hideDropdown"
>
<span
diff --git a/app/assets/javascripts/content_editor/components/wrappers/table_of_contents_heading.vue b/app/assets/javascripts/content_editor/components/wrappers/table_of_contents_heading.vue
index edd75d232e8..9f0709ca83a 100644
--- a/app/assets/javascripts/content_editor/components/wrappers/table_of_contents_heading.vue
+++ b/app/assets/javascripts/content_editor/components/wrappers/table_of_contents_heading.vue
@@ -10,11 +10,11 @@ export default {
};
</script>
<template>
- <li>
+ <li dir="auto">
<a v-if="heading.text" href="#" @click.prevent>
{{ heading.text }}
</a>
- <ul v-if="heading.subHeadings.length">
+ <ul v-if="heading.subHeadings.length" dir="auto">
<table-of-contents-heading
v-for="(child, index) in heading.subHeadings"
:key="index"
diff --git a/app/assets/javascripts/content_editor/extensions/blockquote.js b/app/assets/javascripts/content_editor/extensions/blockquote.js
index 9b424ac8367..f5ffc990061 100644
--- a/app/assets/javascripts/content_editor/extensions/blockquote.js
+++ b/app/assets/javascripts/content_editor/extensions/blockquote.js
@@ -4,6 +4,15 @@ import { getParents } from '~/lib/utils/dom_utils';
import { getMarkdownSource } from '../services/markdown_sourcemap';
export default Blockquote.extend({
+ addOptions() {
+ return {
+ ...this.parent?.(),
+ HTMLAttributes: {
+ dir: 'auto',
+ },
+ };
+ },
+
addAttributes() {
return {
...this.parent?.(),
diff --git a/app/assets/javascripts/content_editor/extensions/bullet_list.js b/app/assets/javascripts/content_editor/extensions/bullet_list.js
index 8d0faf7a9fe..dfd9cac4c66 100644
--- a/app/assets/javascripts/content_editor/extensions/bullet_list.js
+++ b/app/assets/javascripts/content_editor/extensions/bullet_list.js
@@ -2,6 +2,15 @@ import { BulletList } from '@tiptap/extension-bullet-list';
import { getMarkdownSource } from '../services/markdown_sourcemap';
export default BulletList.extend({
+ addOptions() {
+ return {
+ ...this.parent?.(),
+ HTMLAttributes: {
+ dir: 'auto',
+ },
+ };
+ },
+
addAttributes() {
return {
...this.parent?.(),
diff --git a/app/assets/javascripts/content_editor/extensions/code_block_highlight.js b/app/assets/javascripts/content_editor/extensions/code_block_highlight.js
index 1d85bfcc965..8917417e55e 100644
--- a/app/assets/javascripts/content_editor/extensions/code_block_highlight.js
+++ b/app/assets/javascripts/content_editor/extensions/code_block_highlight.js
@@ -1,6 +1,6 @@
import { lowlight } from 'lowlight/lib/core';
import { CodeBlockLowlight } from '@tiptap/extension-code-block-lowlight';
-import { textblockTypeInputRule } from '@tiptap/core';
+import { mergeAttributes, textblockTypeInputRule } from '@tiptap/core';
import { VueNodeViewRenderer } from '@tiptap/vue-2';
import languageLoader from '../services/code_block_language_loader';
import CodeBlockWrapper from '../components/wrappers/code_block.vue';
@@ -13,6 +13,16 @@ export const tildeInputRegex = /^~~~([a-z]+)?[\s\n]$/;
export default CodeBlockLowlight.extend({
isolating: true,
exitOnArrowDown: false,
+
+ addOptions() {
+ return {
+ ...this.parent?.(),
+ HTMLAttributes: {
+ dir: 'auto',
+ },
+ };
+ },
+
addAttributes() {
return {
language: {
@@ -61,7 +71,7 @@ export default CodeBlockLowlight.extend({
return [
'pre',
{
- ...HTMLAttributes,
+ ...mergeAttributes(this.options.HTMLAttributes, HTMLAttributes),
class: `content-editor-code-block ${gon.user_color_scheme} ${HTMLAttributes.class}`,
},
['code', {}, 0],
diff --git a/app/assets/javascripts/content_editor/extensions/description_item.js b/app/assets/javascripts/content_editor/extensions/description_item.js
index 957fdede27b..06fecf8196d 100644
--- a/app/assets/javascripts/content_editor/extensions/description_item.js
+++ b/app/assets/javascripts/content_editor/extensions/description_item.js
@@ -5,6 +5,14 @@ export default Node.create({
content: 'block+',
defining: true,
+ addOptions() {
+ return {
+ HTMLAttributes: {
+ dir: 'auto',
+ },
+ };
+ },
+
addAttributes() {
return {
isTerm: {
@@ -21,7 +29,9 @@ export default Node.create({
renderHTML({ HTMLAttributes: { isTerm, ...HTMLAttributes } }) {
return [
'li',
- mergeAttributes(HTMLAttributes, { class: isTerm ? 'dl-term' : 'dl-description' }),
+ mergeAttributes(this.options.HTMLAttributes, HTMLAttributes, {
+ class: isTerm ? 'dl-term' : 'dl-description',
+ }),
0,
];
},
diff --git a/app/assets/javascripts/content_editor/extensions/description_list.js b/app/assets/javascripts/content_editor/extensions/description_list.js
index 8f5b145cfa3..72c191757d0 100644
--- a/app/assets/javascripts/content_editor/extensions/description_list.js
+++ b/app/assets/javascripts/content_editor/extensions/description_list.js
@@ -6,12 +6,24 @@ export default Node.create({
group: 'block list',
content: 'descriptionItem+',
+ addOptions() {
+ return {
+ HTMLAttributes: {
+ dir: 'auto',
+ },
+ };
+ },
+
parseHTML() {
return [{ tag: 'dl' }];
},
renderHTML({ HTMLAttributes }) {
- return ['ul', mergeAttributes(HTMLAttributes, { class: 'dl-content' }), 0];
+ return [
+ 'ul',
+ mergeAttributes(this.options.HTMLAttributes, HTMLAttributes, { class: 'dl-content' }),
+ 0,
+ ];
},
addInputRules() {
diff --git a/app/assets/javascripts/content_editor/extensions/details_content.js b/app/assets/javascripts/content_editor/extensions/details_content.js
index fb6c49d91aa..fbe58664a10 100644
--- a/app/assets/javascripts/content_editor/extensions/details_content.js
+++ b/app/assets/javascripts/content_editor/extensions/details_content.js
@@ -1,4 +1,4 @@
-import { Node } from '@tiptap/core';
+import { Node, mergeAttributes } from '@tiptap/core';
import { PARSE_HTML_PRIORITY_HIGHEST } from '../constants';
export default Node.create({
@@ -6,6 +6,14 @@ export default Node.create({
content: 'block+',
defining: true,
+ addOptions() {
+ return {
+ HTMLAttributes: {
+ dir: 'auto',
+ },
+ };
+ },
+
parseHTML() {
return [
{ tag: '*', consuming: false, context: 'details/', priority: PARSE_HTML_PRIORITY_HIGHEST },
@@ -13,7 +21,7 @@ export default Node.create({
},
renderHTML({ HTMLAttributes }) {
- return ['li', HTMLAttributes, 0];
+ return ['li', mergeAttributes(this.options.HTMLAttributes, HTMLAttributes), 0];
},
addKeyboardShortcuts() {
diff --git a/app/assets/javascripts/content_editor/extensions/figure.js b/app/assets/javascripts/content_editor/extensions/figure.js
index b2076894412..e82c2cb9813 100644
--- a/app/assets/javascripts/content_editor/extensions/figure.js
+++ b/app/assets/javascripts/content_editor/extensions/figure.js
@@ -1,4 +1,4 @@
-import { Node } from '@tiptap/core';
+import { Node, mergeAttributes } from '@tiptap/core';
export default Node.create({
name: 'figure',
@@ -6,11 +6,19 @@ export default Node.create({
group: 'block',
defining: true,
+ addOptions() {
+ return {
+ HTMLAttributes: {
+ dir: 'auto',
+ },
+ };
+ },
+
parseHTML() {
return [{ tag: 'figure' }];
},
renderHTML({ HTMLAttributes }) {
- return ['figure', HTMLAttributes, 0];
+ return ['figure', mergeAttributes(this.options.HTMLAttributes, HTMLAttributes), 0];
},
});
diff --git a/app/assets/javascripts/content_editor/extensions/figure_caption.js b/app/assets/javascripts/content_editor/extensions/figure_caption.js
index ffd1b474f03..c08db6d9f4d 100644
--- a/app/assets/javascripts/content_editor/extensions/figure_caption.js
+++ b/app/assets/javascripts/content_editor/extensions/figure_caption.js
@@ -1,4 +1,4 @@
-import { Node } from '@tiptap/core';
+import { Node, mergeAttributes } from '@tiptap/core';
export default Node.create({
name: 'figureCaption',
@@ -6,11 +6,19 @@ export default Node.create({
group: 'block',
defining: true,
+ addOptions() {
+ return {
+ HTMLAttributes: {
+ dir: 'auto',
+ },
+ };
+ },
+
parseHTML() {
return [{ tag: 'figcaption' }];
},
renderHTML({ HTMLAttributes }) {
- return ['figcaption', HTMLAttributes, 0];
+ return ['figcaption', mergeAttributes(this.options.HTMLAttributes, HTMLAttributes), 0];
},
});
diff --git a/app/assets/javascripts/content_editor/extensions/footnote_reference.js b/app/assets/javascripts/content_editor/extensions/footnote_reference.js
index ae5b8edc7af..270f0977a7a 100644
--- a/app/assets/javascripts/content_editor/extensions/footnote_reference.js
+++ b/app/assets/javascripts/content_editor/extensions/footnote_reference.js
@@ -17,6 +17,14 @@ export default Node.create({
selectable: true,
+ addOptions() {
+ return {
+ HTMLAttributes: {
+ dir: 'auto',
+ },
+ };
+ },
+
addAttributes() {
return {
identifier: {
@@ -35,6 +43,6 @@ export default Node.create({
},
renderHTML({ HTMLAttributes: { label, ...HTMLAttributes } }) {
- return ['sup', mergeAttributes(HTMLAttributes), label];
+ return ['sup', mergeAttributes(this.options.HTMLAttributes, HTMLAttributes), label];
},
});
diff --git a/app/assets/javascripts/content_editor/extensions/footnotes_section.js b/app/assets/javascripts/content_editor/extensions/footnotes_section.js
index 2b2c4177e1d..2fdad39635e 100644
--- a/app/assets/javascripts/content_editor/extensions/footnotes_section.js
+++ b/app/assets/javascripts/content_editor/extensions/footnotes_section.js
@@ -9,6 +9,14 @@ export default Node.create({
isolating: true,
+ addOptions() {
+ return {
+ HTMLAttributes: {
+ dir: 'auto',
+ },
+ };
+ },
+
parseHTML() {
return [
{ tag: 'section.footnotes', skip: true },
@@ -17,6 +25,12 @@ export default Node.create({
},
renderHTML({ HTMLAttributes }) {
- return ['ol', mergeAttributes(HTMLAttributes, { class: 'footnotes gl-font-sm' }), 0];
+ return [
+ 'ol',
+ mergeAttributes(this.options.HTMLAttributes, HTMLAttributes, {
+ class: 'footnotes gl-font-sm',
+ }),
+ 0,
+ ];
},
});
diff --git a/app/assets/javascripts/content_editor/extensions/heading.js b/app/assets/javascripts/content_editor/extensions/heading.js
index 41903162ba5..8927d7b9c1e 100644
--- a/app/assets/javascripts/content_editor/extensions/heading.js
+++ b/app/assets/javascripts/content_editor/extensions/heading.js
@@ -2,6 +2,15 @@ import { Heading } from '@tiptap/extension-heading';
import { textblockTypeInputRule } from '@tiptap/core';
export default Heading.extend({
+ addOptions() {
+ return {
+ ...this.parent?.(),
+ HTMLAttributes: {
+ dir: 'auto',
+ },
+ };
+ },
+
addInputRules() {
return this.options.levels.map((level) => {
return textblockTypeInputRule({
diff --git a/app/assets/javascripts/content_editor/extensions/list_item.js b/app/assets/javascripts/content_editor/extensions/list_item.js
index 72454b0905d..7b9ca4e14c8 100644
--- a/app/assets/javascripts/content_editor/extensions/list_item.js
+++ b/app/assets/javascripts/content_editor/extensions/list_item.js
@@ -1 +1,12 @@
-export { ListItem as default } from '@tiptap/extension-list-item';
+import ListItem from '@tiptap/extension-list-item';
+
+export default ListItem.extend({
+ addOptions() {
+ return {
+ ...this.parent?.(),
+ HTMLAttributes: {
+ dir: 'auto',
+ },
+ };
+ },
+});
diff --git a/app/assets/javascripts/content_editor/extensions/ordered_list.js b/app/assets/javascripts/content_editor/extensions/ordered_list.js
index 57d5bd6ebf8..d0b760010de 100644
--- a/app/assets/javascripts/content_editor/extensions/ordered_list.js
+++ b/app/assets/javascripts/content_editor/extensions/ordered_list.js
@@ -2,6 +2,15 @@ import { OrderedList } from '@tiptap/extension-ordered-list';
import { getMarkdownSource } from '../services/markdown_sourcemap';
export default OrderedList.extend({
+ addOptions() {
+ return {
+ ...this.parent?.(),
+ HTMLAttributes: {
+ dir: 'auto',
+ },
+ };
+ },
+
addAttributes() {
return {
...this.parent?.(),
diff --git a/app/assets/javascripts/content_editor/extensions/paragraph.js b/app/assets/javascripts/content_editor/extensions/paragraph.js
index 33bf1c94003..c63b64fd784 100644
--- a/app/assets/javascripts/content_editor/extensions/paragraph.js
+++ b/app/assets/javascripts/content_editor/extensions/paragraph.js
@@ -1 +1,12 @@
-export { Paragraph as default } from '@tiptap/extension-paragraph';
+import Paragraph from '@tiptap/extension-paragraph';
+
+export default Paragraph.extend({
+ addOptions() {
+ return {
+ ...this.parent?.(),
+ HTMLAttributes: {
+ dir: 'auto',
+ },
+ };
+ },
+});
diff --git a/app/assets/javascripts/content_editor/extensions/sourcemap.js b/app/assets/javascripts/content_editor/extensions/sourcemap.js
index 54d69d83188..f02d0c2ca52 100644
--- a/app/assets/javascripts/content_editor/extensions/sourcemap.js
+++ b/app/assets/javascripts/content_editor/extensions/sourcemap.js
@@ -31,6 +31,8 @@ import TableOfContents from './table_of_contents';
import Video from './video';
export default Extension.create({
+ name: 'sourcemap',
+
addGlobalAttributes() {
return [
{
diff --git a/app/assets/javascripts/content_editor/extensions/task_item.js b/app/assets/javascripts/content_editor/extensions/task_item.js
index 6efef3f8198..849fd55034e 100644
--- a/app/assets/javascripts/content_editor/extensions/task_item.js
+++ b/app/assets/javascripts/content_editor/extensions/task_item.js
@@ -4,8 +4,9 @@ import { PARSE_HTML_PRIORITY_HIGHEST } from '../constants';
export default TaskItem.extend({
addOptions() {
return {
+ ...this.parent?.(),
nested: true,
- HTMLAttributes: {},
+ HTMLAttributes: { dir: 'auto' },
};
},
diff --git a/app/assets/javascripts/content_editor/extensions/task_list.js b/app/assets/javascripts/content_editor/extensions/task_list.js
index 72c6e020102..01e5bddb97a 100644
--- a/app/assets/javascripts/content_editor/extensions/task_list.js
+++ b/app/assets/javascripts/content_editor/extensions/task_list.js
@@ -4,6 +4,13 @@ import { PARSE_HTML_PRIORITY_HIGHEST } from '../constants';
import { getMarkdownSource } from '../services/markdown_sourcemap';
export default TaskList.extend({
+ addOptions() {
+ return {
+ ...this.parent?.(),
+ HTMLAttributes: { dir: 'auto' },
+ };
+ },
+
addAttributes() {
return {
numeric: {
@@ -33,6 +40,10 @@ export default TaskList.extend({
},
renderHTML({ HTMLAttributes: { numeric, ...HTMLAttributes } }) {
- return [numeric ? 'ol' : 'ul', mergeAttributes(HTMLAttributes, { 'data-type': 'taskList' }), 0];
+ return [
+ numeric ? 'ol' : 'ul',
+ mergeAttributes(this.options.HTMLAttributes, HTMLAttributes, { 'data-type': 'taskList' }),
+ 0,
+ ];
},
});
diff --git a/app/assets/javascripts/integrations/index/components/integrations_table.vue b/app/assets/javascripts/integrations/index/components/integrations_table.vue
index 439c243f418..59a29f81727 100644
--- a/app/assets/javascripts/integrations/index/components/integrations_table.vue
+++ b/app/assets/javascripts/integrations/index/components/integrations_table.vue
@@ -2,6 +2,7 @@
import { GlIcon, GlLink, GlTable, GlTooltipDirective } from '@gitlab/ui';
import { sprintf, s__, __ } from '~/locale';
import TimeAgoTooltip from '~/vue_shared/components/time_ago_tooltip.vue';
+import glFeatureFlagsMixin from '~/vue_shared/mixins/gl_feature_flags_mixin';
export default {
components: {
@@ -13,6 +14,7 @@ export default {
directives: {
GlTooltip: GlTooltipDirective,
},
+ mixins: [glFeatureFlagsMixin()],
props: {
integrations: {
type: Array,
@@ -55,6 +57,12 @@ export default {
},
];
},
+ filteredIntegrations() {
+ return this.integrations.filter(
+ (integration) =>
+ !(integration.name === 'prometheus' && this.glFeatures.removeMonitorMetrics),
+ );
+ },
},
methods: {
getStatusTooltipTitle(integration) {
@@ -67,7 +75,7 @@ export default {
</script>
<template>
- <gl-table :items="integrations" :fields="fields" :empty-text="emptyText" show-empty fixed>
+ <gl-table :items="filteredIntegrations" :fields="fields" :empty-text="emptyText" show-empty fixed>
<template #cell(active)="{ item }">
<gl-icon
v-if="item.active"
diff --git a/app/assets/javascripts/lib/utils/text_utility.js b/app/assets/javascripts/lib/utils/text_utility.js
index 1bed38b7dbe..963041dd5d0 100644
--- a/app/assets/javascripts/lib/utils/text_utility.js
+++ b/app/assets/javascripts/lib/utils/text_utility.js
@@ -483,7 +483,7 @@ export const markdownConfig = {
'ul',
'var',
],
- ALLOWED_ATTR: ['class', 'style', 'href', 'src'],
+ ALLOWED_ATTR: ['class', 'style', 'href', 'src', 'dir'],
ALLOW_DATA_ATTR: false,
};
diff --git a/app/assets/javascripts/notes/utils.js b/app/assets/javascripts/notes/utils.js
index 9a1323cdaf2..ed1c80e7a6e 100644
--- a/app/assets/javascripts/notes/utils.js
+++ b/app/assets/javascripts/notes/utils.js
@@ -1,4 +1,5 @@
import { marked } from 'marked';
+import markedBidi from 'marked-bidi';
import { sanitize } from '~/lib/dompurify';
import { markdownConfig } from '~/lib/utils/text_utility';
@@ -13,6 +14,8 @@ export const trackToggleTimelineView = (enabled) => ({
property: enabled,
});
+marked.use(markedBidi());
+
export const renderMarkdown = (rawMarkdown) => {
return sanitize(marked(rawMarkdown), markdownConfig);
};
diff --git a/app/assets/javascripts/pipelines/components/header_component.vue b/app/assets/javascripts/pipelines/components/header_component.vue
index a36d5d9b58f..065e40bd3ea 100644
--- a/app/assets/javascripts/pipelines/components/header_component.vue
+++ b/app/assets/javascripts/pipelines/components/header_component.vue
@@ -16,6 +16,7 @@ import {
DELETE_FAILURE,
DEFAULT,
BUTTON_TOOLTIP_RETRY,
+ BUTTON_TOOLTIP_CANCEL,
} from '../constants';
import cancelPipelineMutation from '../graphql/mutations/cancel_pipeline.mutation.graphql';
import deletePipelineMutation from '../graphql/mutations/delete_pipeline.mutation.graphql';
@@ -29,6 +30,7 @@ const POLL_INTERVAL = 10000;
export default {
name: 'PipelineHeaderSection',
BUTTON_TOOLTIP_RETRY,
+ BUTTON_TOOLTIP_CANCEL,
pipelineCancel: 'pipelineCancel',
pipelineRetry: 'pipelineRetry',
finishedStatuses: ['FAILED', 'SUCCESS', 'CANCELED'],
@@ -275,6 +277,9 @@ export default {
<gl-button
v-if="canCancelPipeline"
+ v-gl-tooltip
+ :aria-label="$options.BUTTON_TOOLTIP_CANCEL"
+ :title="$options.BUTTON_TOOLTIP_CANCEL"
:loading="isCanceling"
:disabled="isCanceling"
class="gl-ml-3"
@@ -282,7 +287,7 @@ export default {
data-testid="cancelPipeline"
@click="cancelPipeline()"
>
- {{ __('Cancel running') }}
+ {{ __('Cancel pipeline') }}
</gl-button>
<gl-button
diff --git a/app/assets/javascripts/pipelines/constants.js b/app/assets/javascripts/pipelines/constants.js
index abeeea1f888..d092c3ca630 100644
--- a/app/assets/javascripts/pipelines/constants.js
+++ b/app/assets/javascripts/pipelines/constants.js
@@ -79,7 +79,7 @@ export const PipelineKeyOptions = [
export const TOAST_MESSAGE = s__('Pipeline|Creating pipeline.');
export const BUTTON_TOOLTIP_RETRY = __('Retry all failed or cancelled jobs');
-export const BUTTON_TOOLTIP_CANCEL = __('Cancel');
+export const BUTTON_TOOLTIP_CANCEL = __('Cancel the running pipeline');
export const DEFAULT_FIELDS = [
{
diff --git a/app/assets/javascripts/super_sidebar/components/menu_section.vue b/app/assets/javascripts/super_sidebar/components/menu_section.vue
index 5de6e04d827..b57a4e3013c 100644
--- a/app/assets/javascripts/super_sidebar/components/menu_section.vue
+++ b/app/assets/javascripts/super_sidebar/components/menu_section.vue
@@ -30,6 +30,11 @@ export default {
required: false,
default: 'div',
},
+ collectionStyle: {
+ type: Boolean,
+ required: false,
+ default: false,
+ },
},
data() {
return {
@@ -89,7 +94,13 @@ export default {
</slot>
</span>
- <span class="gl-pr-3 gl-text-gray-900 gl-truncate-end">
+ <span
+ class="gl-pr-3 gl-truncate-end gl-text-gray-900"
+ :class="{
+ 'gl-font-sm gl-font-weight-semibold': collectionStyle,
+ }"
+ data-testid="section-title"
+ >
{{ item.title }}
</span>
diff --git a/app/assets/javascripts/super_sidebar/components/pinned_section.vue b/app/assets/javascripts/super_sidebar/components/pinned_section.vue
index 4fc86e41ef2..93d9cf71a18 100644
--- a/app/assets/javascripts/super_sidebar/components/pinned_section.vue
+++ b/app/assets/javascripts/super_sidebar/components/pinned_section.vue
@@ -70,6 +70,7 @@ export default {
:item="sectionItem"
:expanded="expanded"
:separated="true"
+ collection-style
@collapse-toggle="expanded = !expanded"
>
<draggable
diff --git a/app/assets/javascripts/super_sidebar/components/sidebar_menu.vue b/app/assets/javascripts/super_sidebar/components/sidebar_menu.vue
index 12abd727ef0..055886621f1 100644
--- a/app/assets/javascripts/super_sidebar/components/sidebar_menu.vue
+++ b/app/assets/javascripts/super_sidebar/components/sidebar_menu.vue
@@ -150,6 +150,7 @@ export default {
v-for="item in nonStaticItems"
:key="item.id"
:item="item"
+ :collection-style="supportsPins"
tag="li"
@pin-add="createPin"
@pin-remove="destroyPin"
diff --git a/app/controllers/concerns/integrations/actions.rb b/app/controllers/concerns/integrations/actions.rb
index 7bebafae0fd..c0816c2fe9c 100644
--- a/app/controllers/concerns/integrations/actions.rb
+++ b/app/controllers/concerns/integrations/actions.rb
@@ -8,6 +8,9 @@ module Integrations::Actions
include IntegrationsHelper
before_action :integration, only: [:edit, :update, :overrides, :test]
+ before_action :render_404, only: :edit, if: -> do
+ integration.to_param == 'prometheus' && Feature.enabled?(:remove_monitor_metrics)
+ end
urgency :low, [:test]
end
diff --git a/app/controllers/projects/settings/integrations_controller.rb b/app/controllers/projects/settings/integrations_controller.rb
index 16c1373df2b..a0e72fb1687 100644
--- a/app/controllers/projects/settings/integrations_controller.rb
+++ b/app/controllers/projects/settings/integrations_controller.rb
@@ -25,6 +25,7 @@ module Projects
end
def edit
+ render_404 if integration.to_param == 'prometheus' && Feature.enabled?(:remove_monitor_metrics)
end
def update
diff --git a/app/views/projects/settings/integrations/_form.html.haml b/app/views/projects/settings/integrations/_form.html.haml
index de5c63cc7fd..97d90976f18 100644
--- a/app/views/projects/settings/integrations/_form.html.haml
+++ b/app/views/projects/settings/integrations/_form.html.haml
@@ -21,6 +21,5 @@
= render 'shared/integration_settings', integration: integration
- if lookup_context.template_exists?('show', "shared/integrations/#{integration.to_param}", true)
- - if !(integration.to_param == 'prometheus' && Feature.enabled?(:remove_monitor_metrics))
- %hr
- = render "shared/integrations/#{integration.to_param}/show", integration: integration
+ %hr
+ = render "shared/integrations/#{integration.to_param}/show", integration: integration