summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGitLab Bot <gitlab-bot@gitlab.com>2023-05-10 18:09:05 +0000
committerGitLab Bot <gitlab-bot@gitlab.com>2023-05-10 18:09:05 +0000
commit20a86e7f6fd58882025b1c85b21e891d75220da5 (patch)
tree31d400a3790b2b3650415e5caf1cabfbe8d9092e
parent04ac4180cb5ba0df460034c7e64862056fd498b3 (diff)
downloadgitlab-ce-20a86e7f6fd58882025b1c85b21e891d75220da5.tar.gz
Add latest changes from gitlab-org/gitlab@master
-rw-r--r--.gitlab/ci/review-apps/qa.gitlab-ci.yml1
-rw-r--r--Gemfile2
-rw-r--r--Gemfile.checksum2
-rw-r--r--Gemfile.lock6
-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
-rw-r--r--data/removals/16_0/16.0-runner-api-does-not-return-paused-active.yml12
-rw-r--r--doc/api/geo_sites.md41
-rw-r--r--doc/development/ai_features.md272
-rw-r--r--doc/tutorials/left_sidebar/img/pinned_v16_0.pngbin1475 -> 1369 bytes
-rw-r--r--doc/tutorials/left_sidebar/img/project_selected_v16_0.pngbin24164 -> 23651 bytes
-rw-r--r--doc/tutorials/left_sidebar/index.md1
-rw-r--r--doc/update/removals.md11
-rw-r--r--doc/user/packages/package_registry/index.md16
-rw-r--r--glfm_specification/output_example_snapshots/html.yml603
-rw-r--r--lib/api/ci/runner.rb2
-rw-r--r--lib/gitlab/middleware/compressed_json.rb39
-rw-r--r--locale/gitlab.pot5
-rw-r--r--package.json3
-rw-r--r--scripts/review_apps/base-config.yaml3
-rwxr-xr-xscripts/review_apps/review-apps.sh6
-rw-r--r--spec/controllers/admin/integrations_controller_spec.rb1
-rw-r--r--spec/controllers/groups/settings/integrations_controller_spec.rb1
-rw-r--r--spec/features/admin/integrations/instance_integrations_spec.rb4
-rw-r--r--spec/features/commits_spec.rb6
-rw-r--r--spec/features/groups/integrations/group_integrations_spec.rb16
-rw-r--r--spec/features/projects/integrations/project_integrations_spec.rb12
-rw-r--r--spec/features/projects/integrations/user_activates_prometheus_spec.rb1
-rw-r--r--spec/features/projects/pipelines/pipeline_spec.rb18
-rw-r--r--spec/frontend/content_editor/components/wrappers/__snapshots__/table_of_contents_spec.js.snap52
-rw-r--r--spec/frontend/content_editor/remark_markdown_processing_spec.js2
-rw-r--r--spec/frontend/integrations/index/components/integrations_table_spec.js20
-rw-r--r--spec/frontend/integrations/index/mock_data.js9
-rw-r--r--spec/frontend/notes/components/noteable_note_spec.js2
-rw-r--r--spec/frontend/pipelines/header_component_spec.js6
-rw-r--r--spec/frontend/super_sidebar/components/menu_section_spec.js13
-rw-r--r--spec/frontend/super_sidebar/components/sidebar_menu_spec.js9
-rw-r--r--spec/frontend/vue_shared/components/notes/__snapshots__/placeholder_note_spec.js.snap4
-rw-r--r--spec/frontend_integration/content_editor/content_editor_integration_spec.js2
-rw-r--r--spec/lib/gitlab/middleware/compressed_json_spec.rb66
-rw-r--r--spec/requests/admin/integrations_controller_spec.rb14
-rw-r--r--spec/requests/api/ci/runner/runners_post_spec.rb6
-rw-r--r--spec/support/shared_examples/integrations/integration_settings_form.rb5
-rw-r--r--yarn.lock5
78 files changed, 1090 insertions, 454 deletions
diff --git a/.gitlab/ci/review-apps/qa.gitlab-ci.yml b/.gitlab/ci/review-apps/qa.gitlab-ci.yml
index 8ef86514c54..0cfd4bbfb93 100644
--- a/.gitlab/ci/review-apps/qa.gitlab-ci.yml
+++ b/.gitlab/ci/review-apps/qa.gitlab-ci.yml
@@ -40,7 +40,6 @@ include:
WD_INSTALL_DIR: /usr/local/bin
RSPEC_REPORT_OPTS: --force-color --order random --format documentation --format RspecJunitFormatter --out tmp/rspec-${CI_JOB_ID}.xml
script:
- - export EE_LICENSE="$(cat $REVIEW_APPS_EE_LICENSE_FILE)"
- QA_COMMAND="bundle exec bin/qa ${QA_SCENARIO} ${QA_GITLAB_URL} -- ${QA_TESTS} ${RSPEC_REPORT_OPTS}"
- echo "Running - '${QA_COMMAND}'"
- eval "$QA_COMMAND"
diff --git a/Gemfile b/Gemfile
index e1d07891f06..5c9ddb710b4 100644
--- a/Gemfile
+++ b/Gemfile
@@ -292,7 +292,7 @@ gem 'sanitize', '~> 6.0'
gem 'babosa', '~> 1.0.4'
# Sanitizes SVG input
-gem 'loofah', '~> 2.20.0'
+gem 'loofah', '~> 2.21.0'
# Working with license
# Detects the open source license the repository includes
diff --git a/Gemfile.checksum b/Gemfile.checksum
index 86fe71a7ddb..944e57d417e 100644
--- a/Gemfile.checksum
+++ b/Gemfile.checksum
@@ -341,7 +341,7 @@
{"name":"locale","version":"2.1.3","platform":"ruby","checksum":"b6ddee011e157817cb98e521b3ce7cb626424d5882f1e844aafdee3e8b212725"},
{"name":"lockbox","version":"1.1.1","platform":"ruby","checksum":"0af16b14c54f791c148615a0115387b51903d868c7fe622f49606c97071c2ac0"},
{"name":"lograge","version":"0.11.2","platform":"ruby","checksum":"4cbd1554b86f545d795eff15a0c24fd25057d2ac4e1caa5fc186168b3da932ef"},
-{"name":"loofah","version":"2.20.0","platform":"ruby","checksum":"e8fa874c8e2cd2fbdbecc1b6badc3f713639796aaca3f6dd494c4737828a24d6"},
+{"name":"loofah","version":"2.21.0","platform":"ruby","checksum":"ec407f23abdbd3481640c79342a9179320d297b30456df3b46381ba0981f025b"},
{"name":"lookbook","version":"2.0.1","platform":"ruby","checksum":"0f14729c8c992810de0792a0be865a5792e5765fbaea5950cce74c6e5c73fc4a"},
{"name":"lru_redux","version":"1.1.0","platform":"ruby","checksum":"ee71d0ccab164c51de146c27b480a68b3631d5b4297b8ffe8eda1c72de87affb"},
{"name":"lumberjack","version":"1.2.7","platform":"ruby","checksum":"a5c6aae6b4234f1420dbcd80b23e3bca0817bd239440dde097ebe3fa63c63b1f"},
diff --git a/Gemfile.lock b/Gemfile.lock
index c1fd5ac738f..86cf856547c 100644
--- a/Gemfile.lock
+++ b/Gemfile.lock
@@ -913,7 +913,7 @@ GEM
activesupport (>= 4)
railties (>= 4)
request_store (~> 1.0)
- loofah (2.20.0)
+ loofah (2.21.0)
crass (~> 1.0.2)
nokogiri (>= 1.5.9)
lookbook (2.0.1)
@@ -1814,7 +1814,7 @@ DEPENDENCIES
listen (~> 3.7)
lockbox (~> 1.1.1)
lograge (~> 0.5)
- loofah (~> 2.20.0)
+ loofah (~> 2.21.0)
lookbook (~> 2.0, >= 2.0.1)
lru_redux
mail (= 2.8.1)
@@ -1964,4 +1964,4 @@ DEPENDENCIES
yajl-ruby (~> 1.4.3)
BUNDLED WITH
- 2.4.12
+ 2.4.13
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
diff --git a/data/removals/16_0/16.0-runner-api-does-not-return-paused-active.yml b/data/removals/16_0/16.0-runner-api-does-not-return-paused-active.yml
new file mode 100644
index 00000000000..17ab36d36d2
--- /dev/null
+++ b/data/removals/16_0/16.0-runner-api-does-not-return-paused-active.yml
@@ -0,0 +1,12 @@
+- title: "GraphQL API: Runner status no longer returns `PAUSED` and `ACTIVE` values" # (required) Clearly explain the change. For example, "The `confidential` field for a `Note` is removed" or "CI/CD job names are limited to 250 characters."
+ announcement_milestone: "14.8" # (required) The milestone when this feature was deprecated.
+ removal_milestone: "16.0" # (required) The milestone when this feature is being removed.
+ breaking_change: true # (required) Change to false if this is not a breaking change.
+ reporter: DarrenEastman # (required) GitLab username of the person reporting the removal
+ stage: Verify # (required) String value of the stage that the feature was created in. e.g., Growth
+ issue_url: https://gitlab.com/gitlab-org/gitlab/-/issues/344648 # (required) Link to the deprecation issue in GitLab
+ body: | # (required) Do not modify this line, instead modify the lines below.
+ In GitLab 16.0 and later, the GraphQL query for runners will no longer return the statuses `PAUSED` and `ACTIVE`.
+
+ - `PAUSED` has been replaced with the field, `paused: true`.
+ - `ACTIVE` has been replaced with the field, `paused: false`.
diff --git a/doc/api/geo_sites.md b/doc/api/geo_sites.md
index 3570706c016..40410cdf540 100644
--- a/doc/api/geo_sites.md
+++ b/doc/api/geo_sites.md
@@ -66,9 +66,7 @@ Example response:
"selective_sync_namespace_ids": [1, 25],
"minimum_reverification_interval": 7,
"sync_object_storage": false,
- "clone_protocol": "http",
"web_edit_url": "https://primary.example.com/admin/geo/sites/3/edit",
- "web_geo_projects_url": "https://secondary.example.com/admin/geo/projects",
"web_geo_replication_details_url": "https://secondary.example.com/admin/geo/sites/3/replication/lfs_objects",
"_links": {
"self": "https://primary.example.com/api/v4/geo_sites/3",
@@ -78,10 +76,6 @@ Example response:
}
```
-NOTE:
-The `web_geo_projects_url` attribute is in its end-of-life process. It was [deprecated](https://gitlab.com/gitlab-org/gitlab/-/merge_requests/80106)
-in GitLab 14.9.
-
## Retrieve configuration about all Geo sites
```plaintext
@@ -112,7 +106,6 @@ Example response:
"selective_sync_shards": [],
"selective_sync_namespace_ids": [1, 25],
"minimum_reverification_interval": 7,
- "clone_protocol": "http",
"web_edit_url": "https://primary.example.com/admin/geo/sites/1/edit",
"_links": {
"self": "https://primary.example.com/api/v4/geo_sites/1",
@@ -137,9 +130,7 @@ Example response:
"selective_sync_namespace_ids": [1, 25],
"minimum_reverification_interval": 7,
"sync_object_storage": true,
- "clone_protocol": "http",
"web_edit_url": "https://primary.example.com/admin/geo/sites/2/edit",
- "web_geo_projects_url": "https://secondary.example.com/admin/geo/projects",
"web_geo_replication_details_url": "https://secondary.example.com/admin/geo/sites/2/replication/lfs_objects",
"_links": {
"self":"https://primary.example.com/api/v4/geo_sites/2",
@@ -150,10 +141,6 @@ Example response:
]
```
-NOTE:
-The `web_geo_projects_url` attribute is in its end-of-life process. It was [deprecated](https://gitlab.com/gitlab-org/gitlab/-/merge_requests/80106)
-in GitLab 14.9.
-
## Retrieve configuration about a specific Geo site
```plaintext
@@ -183,7 +170,6 @@ Example response:
"selective_sync_shards": [],
"selective_sync_namespace_ids": [1, 25],
"minimum_reverification_interval": 7,
- "clone_protocol": "http",
"web_edit_url": "https://primary.example.com/admin/geo/sites/1/edit",
"_links": {
"self": "https://primary.example.com/api/v4/geo_sites/1",
@@ -212,7 +198,6 @@ PUT /geo_sites/:id
| `repos_max_capacity` | integer | no | Control the maximum concurrency of repository backfill for this secondary site. |
| `verification_max_capacity` | integer | no | Control the maximum concurrency of verification for this site. |
| `container_repositories_max_capacity` | integer | no | Control the maximum concurrency of container repository sync for this site. |
-| `sync_object_storage` | boolean | no | Flag indicating if the secondary Geo site should replicate blobs in Object Storage. |
| `selective_sync_type` | string | no | Limit syncing to only specific groups or shards. Valid values: `"namespaces"`, `"shards"`, or `null`. |
| `selective_sync_shards` | array | no | The repository storage for the projects synced if `selective_sync_type` == `shards`. |
| `selective_sync_namespace_ids` | array | no | The IDs of groups that should be synced, if `selective_sync_type` == `namespaces`. |
@@ -223,10 +208,10 @@ Example response:
```json
{
"id": 1,
- "name": "cn-site",
- "url": "https://secondary.example.com/",
- "internal_url": "https://secondary.example.com/",
- "primary": false,
+ "name": "us-site",
+ "url": "https://primary.example.com/",
+ "internal_url": "https://internal.example.com/",
+ "primary": true,
"enabled": true,
"current": true,
"files_max_capacity": 10,
@@ -237,22 +222,15 @@ Example response:
"selective_sync_shards": [],
"selective_sync_namespace_ids": [1, 25],
"minimum_reverification_interval": 7,
- "sync_object_storage": true,
- "clone_protocol": "http",
- "web_edit_url": "https://primary.example.com/admin/geo/sites/2/edit",
- "web_geo_projects_url": "https://secondary.example.com/admin/geo/projects",
- "web_geo_replication_details_url": "https://secondary.example.com/admin/geo/sites/2/replication/lfs_objects",
+ "web_edit_url": "https://primary.example.com/admin/geo/sites/1/edit",
"_links": {
- "self":"https://primary.example.com/api/v4/geo_sites/2",
- "status":"https://primary.example.com/api/v4/geo_sites/2/status",
- "repair":"https://primary.example.com/api/v4/geo_sites/2/repair"
+ "self": "https://primary.example.com/api/v4/geo_sites/1",
+ "status": "https://primary.example.com/api/v4/geo_sites/1/status",
+ "repair": "https://primary.example.com/api/v4/geo_sites/1/repair"
}
}
-```
-NOTE:
-The `web_geo_projects_url` attribute is in its end-of-life process. It is [deprecated](https://gitlab.com/gitlab-org/gitlab/-/merge_requests/80106)
-in GitLab 14.9.
+```
## Delete a Geo site
@@ -289,7 +267,6 @@ Example response:
"repos_max_capacity": 25,
"verification_max_capacity": 100,
"container_repositories_max_capacity": 10,
- "clone_protocol": "http",
"web_edit_url": "https://primary.example.com/admin/geo/sites/1/edit",
"_links": {
"self": "https://primary.example.com/api/v4/geo_sites/1",
diff --git a/doc/development/ai_features.md b/doc/development/ai_features.md
index 4168bb3d7ec..11fe4f16e3b 100644
--- a/doc/development/ai_features.md
+++ b/doc/development/ai_features.md
@@ -8,12 +8,34 @@ info: To determine the technical writer assigned to the Stage/Group associated w
[Introduced](https://gitlab.com/gitlab-org/gitlab/-/merge_requests/117296) in GitLab 15.11.
+## Features
+
+- Async execution of the long running API requests
+ - GraphQL Action starts the request
+ - Background workers execute
+ - GraphQL subscriptions deliver results back in real time
+- Abstraction for
+ - OpenAI
+ - Google Vertex AI
+- Rate Limiting
+- Circuit Breaker
+- Multi-Level feature flags
+- License checks on group level
+- Snowplow execution tracking
+- Tracking of Token Spent on Prometheus
+- Configuration for Moderation check of inputs
+- Automatic Markdown Rendering of responses
+- Centralised Group Level settings for experiment and 3rd party
+- Experimental API endpoints for exploration of AI API’s by GitLab team members without the need for credentials
+ - OpenAI
+ - Google Vertex AI
+
## Feature flags
Apply the following two feature flags to any AI feature work:
- A general that applies to all AI features.
-- A flag specific to that feature.
+- A flag specific to that feature. The feature flag name [must be different](feature_flags/index.md#feature-flags-for-licensed-features) than the licensed feature name.
See the [feature flag tracker](https://gitlab.com/gitlab-org/gitlab/-/issues/405161) for the list of all feature flags and how to use them.
@@ -26,6 +48,24 @@ To implement a new AI action, connect to the OpenAI API. You can connect to this
All AI features are experimental.
+## Test AI features locally
+
+1. Enable the required general feature flags:
+
+ ```ruby
+ Feature.enable(:ai_related_settings)
+ Feature.enable(:openai_experimentation)
+ ```
+
+1. Simulate the GDK to [simulate SaaS](ee_features.md#simulate-a-saas-instance) and ensure the group you want to test has an Ultimate license
+1. Enable `Experimental features` and `Third-party AI services`
+ 1. Go to the group with the Ultimate license
+ 1. **Group Settings** > **General** -> **Permissions and group features**
+ 1. Enable **Experiment features**
+ 1. Enable **Third-party AI services**
+1. Enable the specific feature flag for the feature you want to test
+1. Set either the required access token `OpenAi` or `Vertex`. Ask in [`#ai_enablement_team`](https://gitlab.slack.com/archives/C051K31F30R) to receive an access token.
+
## Experimental REST API
Use the [experimental REST API endpoints](https://gitlab.com/gitlab-org/gitlab/-/blob/master/ee/lib/api/ai/experimentation/open_ai.rb) to quickly experiment and prototype AI features.
@@ -42,10 +82,9 @@ To use these endpoints locally, set the OpenAI API key in the application settin
Gitlab::CurrentSettings.update(openai_api_key: "<open-ai-key>")
```
-These endpoints are only for prototyping, not for production.
-
-Production endpoints are available only to GitLab team members. To use the production endpoints, use the
-[GitLab API token](../user/profile/personal_access_tokens.md).
+These endpoints are only for prototyping, not for rolling features out to customers.
+The experimental endpoint is only available to GitLab team members on production. Use the
+[GitLab API token](../user/profile/personal_access_tokens.md) to authenticate.
## Abstraction layer
@@ -83,7 +122,7 @@ to send the response.
#### How to receive a response
As the OpenAI API requests are handled in a background job, we do not keep the request alive and
-the response is sent through a special `aiCompletionResponse` subscription:
+the response is sent through the `aiCompletionResponse` subscription:
```mutation
subscription aiCompletionResponse($userId: UserID, $resourceId: AiModelID!) {
@@ -94,6 +133,9 @@ subscription aiCompletionResponse($userId: UserID, $resourceId: AiModelID!) {
}
```
+WARNING:
+You should only subscribe to the subscription once the mutation is sent. If multiple subscriptions are active on the same page, they currently all receive updates as our identifier is the user and the resource. To mitigate this, you should only subscribe when the mutation is sent. You can use [`skip()`](You can use [`skip()`](https://apollo.vuejs.org/guide/apollo/subscriptions.html#skipping-the-subscription)) for this case. To prevent this problem in the future, we implement a [request identifier](https://gitlab.com/gitlab-org/gitlab/-/issues/408196).
+
#### Current abstraction layer flow
```mermaid
@@ -112,4 +154,220 @@ J --> K[::GitlabSchema.subscriptions.trigger]
## How to implement a new action
-...
+### Register a new method
+
+Go to the `Llm::ExecuteMethodService` and add a new method with the new service class you will create.
+
+```ruby
+class ExecuteMethodService < BaseService
+ METHODS = {
+ # ...
+ amazing_new_ai_feature: Llm::AmazingNewAiFeatureService
+ }.freeze
+```
+
+### Create a Service
+
+1. Create a new service under `ee/app/services/llm/` and inherit it from the `BaseService`.
+1. The `resource` is the object we want to act on. It can be any object that includes the `Ai::Model` concern. For example it could be a `Project`, `MergeRequest`, or `Issue`.
+
+```ruby
+# ee/app/services/llm/amazing_new_ai_feature_service.rb
+
+module Llm
+ class AmazingNewAiFeatureService < BaseService
+ private
+
+ def perform
+ ::Llm::CompletionWorker.perform_async(user.id, resource.id, resource.class.name, :amazing_new_ai_feature)
+ success
+ end
+
+ def valid?
+ super && Ability.allowed?(user, :amazing_new_ai_feature, resource)
+ end
+ end
+end
+```
+
+### Authorization
+
+We recommend to use [policies](policies.md) to deal with authorization for a feature. Currently we need to make sure to cover the following checks:
+
+1. General AI feature flag is enabled
+1. Feature specific feature flag is enabled
+1. The namespace has the required license for the feature
+1. User is a member of the group/project
+1. Resource is allowed to be sent (see `send_to_ai?` method)
+1. `experiment_features_enabled` and `third_party_ai_features_enabled` flags are set on the `Namespace`
+
+For our example, we need to implement the `allowed?(:amazing_new_ai_feature)` call. As an example, you can look at the [Issue Policy for the summarize comments feature](https://gitlab.com/gitlab-org/gitlab/-/blob/master/ee/app/policies/ee/issue_policy.rb). In our example case, we want to implement the feature for Issues as well:
+
+```ruby
+# ee/app/policies/ee/issue_policy.rb
+
+module EE
+ module IssuePolicy
+ extend ActiveSupport::Concern
+ prepended do
+ with_scope :subject
+ condition(:ai_available) do
+ ::Feature.enabled?(:openai_experimentation) &&
+ subject_container.root_ancestor.experiment_features_enabled &&
+ @subject.send_to_ai?
+ end
+
+ with_scope :subject
+ condition(:amazing_new_ai_feature_enabled) do
+ ::Feature.enabled?(:amazing_new_ai_feature, subject_container) &&
+ subject_container.licensed_feature_available?(:amazing_new_ai_feature)
+ end
+
+ rule do
+ ai_available & amazing_new_ai_feature_enabled & is_project_member
+ end.enable :amazing_new_ai_feature
+ end
+ end
+end
+```
+
+### Implement `send_to_ai?`
+
+To make sure we only send data that is allowed to be sent, we have the `send_to_ai?` method. It checks if the resource is not confidential and public data.
+Some resources already implement `send_to_ai?`. Make sure yours does as well. In our case, `Issue` is already covered with the `Issuable` concern. This is an example how it could look like:
+
+```ruby
+# ee/app/models/concerns/ee
+
+def send_to_ai?
+ !try(:confidential) && resource_parent.public? && resource_parent.third_party_ai_features_enabled
+end
+```
+
+### Implement calls to AI APIs and the prompts
+
+The `CompletionWorker` will call the `Completions::Factory` which will initialize the Service and execute the actual call to the API.
+In our example, we will use OpenAI and implement two new classes:
+
+```ruby
+# /ee/lib/gitlab/llm/open_ai/completions/amazing_new_ai_feature.rb
+
+module Gitlab
+ module Llm
+ module OpenAi
+ module Completions
+ class AmazingNewAiFeature
+ def initialize(ai_prompt_class)
+ @ai_prompt_class = ai_prompt_class
+ end
+
+ def execute(user, issue, options)
+ options = ai_prompt_class.get_options(options[:messages])
+
+ ai_response = Gitlab::Llm::OpenAi::Client.new(user).chat(content: nil, **options)
+
+ ::Gitlab::Llm::OpenAi::ResponseService.new(user, issue, ai_response, options: {}).execute(
+ Gitlab::Llm::OpenAi::ResponseModifiers::Chat.new
+ )
+ end
+
+ private
+
+ attr_reader :ai_prompt_class
+ end
+ end
+ end
+ end
+end
+```
+
+```ruby
+# /ee/lib/gitlab/llm/open_ai/templates/amazing_new_ai_feature.rb
+
+module Gitlab
+ module Llm
+ module OpenAi
+ module Templates
+ class AmazingNewAiFeature
+ TEMPERATURE = 0.3
+
+ def self.get_options(messages)
+ system_content = <<-TEMPLATE
+ You are an assistant that writes code for the following input:
+ """
+ TEMPLATE
+
+ {
+ messages: [
+ { role: "system", content: system_content },
+ { role: "user", content: messages },
+ ],
+ temperature: TEMPERATURE
+ }
+ end
+ end
+ end
+ end
+ end
+end
+```
+
+### Add Ai Action to GraphQL
+
+TODO
+
+## Circuit Breaker concern
+
+The `CircuitBreaker` concern is a reusable module that can be included in any class that needs to run code with circuit breaker protection. The concern provides a `run_with_circuit` method that wraps a code block with circuit breaker functionality, which can help prevent cascading failures and improve the resilience of the system. Resources about the circuit breaker pattern:
+
+- [What is Circuit breaker](https://martinfowler.com/bliki/CircuitBreaker.html)
+- [How it works](https://github.com/Netflix/Hystrix/wiki/How-it-Works#circuit-breaker)
+
+The CircuitBreaker module depends on the [Circuitbox](https://github.com/yammer/circuitbox) gem to provide the circuit breaker implementation.
+
+### Usage
+
+To use the `CircuitBreaker` concern, include it in a class and define the `service_name` method, which should return the name of the service that the circuit breaker is protecting. For example:
+
+```ruby
+class MyService
+ include Gitlab::Llm::Concerns::CircuitBreaker
+
+ def call_external_service
+ run_with_circuit do
+ # Code that interacts with external service goes here
+
+ raise InternalServerError
+ end
+ end
+
+ private
+
+ def service_name
+ :my_service
+ end
+end
+```
+
+The `call_external_service` method is an example method that interacts with an external service. By wrapping the code that interacts with the external service with `run_with_circuit`, the method will be executed within the circuit breaker. The circuit breaker is created and configured by the `circuit` method, which is called automatically when the `CircuitBreaker` module is included. The method should raise `InternalServerError` error which will be counted towards the error threshold if raised during the execution of the code block.
+
+The circuit breaker will track the number of errors and the rate of requests, and open the circuit if it reaches the configured error threshold or volume threshold. If the circuit is open, subsequent requests will fail fast without executing the code block, and the circuit breaker will periodically allow a small number of requests through to test the service's availability before closing the circuit again.
+
+### Configuration
+
+The circuit breaker is configured with two constants: `ERROR_THRESHOLD` and `VOLUME_THRESHOLD`, which control the number of errors and requests at which the circuit will open. These values can be adjusted as needed for the specific service and usage pattern. The `InternalServerError` is the exception class that will trigger the circuit breaker when raised by the code that interacts with the external service.
+
+### Testing
+
+To test code that uses the `CircuitBreaker` concern, use RSpec shared examples and pass the `service` and `subject` variables:
+
+```ruby
+it_behaves_like 'has circuit breaker' do
+ let(:service) { dummy_class.new }
+ let(:subject) { service.dummy_method }
+end
+```
+
+## Security
+
+Refer to the [secure coding guidelines for Artificial Intelligence (AI) features](secure_coding_guidelines.md#artificial-intelligence-ai-features).
diff --git a/doc/tutorials/left_sidebar/img/pinned_v16_0.png b/doc/tutorials/left_sidebar/img/pinned_v16_0.png
index da6eba82f86..1c8d0bdd2cd 100644
--- a/doc/tutorials/left_sidebar/img/pinned_v16_0.png
+++ b/doc/tutorials/left_sidebar/img/pinned_v16_0.png
Binary files differ
diff --git a/doc/tutorials/left_sidebar/img/project_selected_v16_0.png b/doc/tutorials/left_sidebar/img/project_selected_v16_0.png
index 65f89968780..534b06ac5de 100644
--- a/doc/tutorials/left_sidebar/img/project_selected_v16_0.png
+++ b/doc/tutorials/left_sidebar/img/project_selected_v16_0.png
Binary files differ
diff --git a/doc/tutorials/left_sidebar/index.md b/doc/tutorials/left_sidebar/index.md
index 17608cac50d..7de50afbe77 100644
--- a/doc/tutorials/left_sidebar/index.md
+++ b/doc/tutorials/left_sidebar/index.md
@@ -32,6 +32,7 @@ Let's get started exploring the GitLab UI and left sidebar.
![Explore](img/explore_v16_0.png)
1. On the right, above the list of projects, type search criteria.
+ The search finds projects with a matching description.
![Search projects](img/search_projects_v16_0.png)
diff --git a/doc/update/removals.md b/doc/update/removals.md
index 8aeaa567f3c..00dff9856cc 100644
--- a/doc/update/removals.md
+++ b/doc/update/removals.md
@@ -102,6 +102,17 @@ Review the details carefully before upgrading.
GitLab administrators can no longer perform actions on protected branches or tags unless they have been explicitly granted that permission. These actions include pushing and merging into a [protected branch](https://docs.gitlab.com/ee/user/project/protected_branches.html), unprotecting a branch, and creating [protected tags](https://docs.gitlab.com/ee/user/project/protected_tags.html).
+### GraphQL API: Runner status no longer returns `PAUSED` and `ACTIVE` values
+
+WARNING:
+This is a [breaking change](https://docs.gitlab.com/ee/development/deprecation_guidelines/).
+Review the details carefully before upgrading.
+
+In GitLab 16.0 and later, the GraphQL query for runners will no longer return the statuses `PAUSED` and `ACTIVE`.
+
+- `PAUSED` has been replaced with the field, `paused: true`.
+- `ACTIVE` has been replaced with the field, `paused: false`.
+
### PipelineSecurityReportFinding name GraphQL field
WARNING:
diff --git a/doc/user/packages/package_registry/index.md b/doc/user/packages/package_registry/index.md
index eb3fd082d33..91186e6c159 100644
--- a/doc/user/packages/package_registry/index.md
+++ b/doc/user/packages/package_registry/index.md
@@ -143,17 +143,17 @@ your project's settings. For example, if you have a public project and set the r
to **Only Project Members**, the Package Registry is then public. Disabling the Package
Registry disables all Package Registry operations.
-| Project visibility | Action | [Role](../../permissions.md#roles) required |
+| Project visibility | Action | Minimum [role](../../permissions.md#roles) required |
|--------------------|-----------------------|---------------------------------------------------------|
| Public | View Package Registry | `n/a`, everyone on the internet can perform this action |
-| Public | Publish a package | Developer or higher |
+| Public | Publish a package | Developer |
| Public | Pull a package | `n/a`, everyone on the internet can perform this action |
-| Internal | View Package Registry | Guest or higher |
-| Internal | Publish a package | Developer or higher |
-| Internal | Pull a package | Guest or higher(1) |
-| Private | View Package Registry | Reporter or higher |
-| Private | Publish a package | Developer or higher |
-| Private | Pull a package | Reporter or higher(1) |
+| Internal | View Package Registry | Guest |
+| Internal | Publish a package | Developer |
+| Internal | Pull a package | Guest (1) |
+| Private | View Package Registry | Reporter |
+| Private | Publish a package | Developer |
+| Private | Pull a package | Reporter (1) |
### Allow anyone to pull from Package Registry
diff --git a/glfm_specification/output_example_snapshots/html.yml b/glfm_specification/output_example_snapshots/html.yml
index f4a7219b407..d1c41e84a26 100644
--- a/glfm_specification/output_example_snapshots/html.yml
+++ b/glfm_specification/output_example_snapshots/html.yml
@@ -4,20 +4,20 @@
static: "<div class=\"gl-relative markdown-code-block js-markdown-code\">\n<pre
data-sourcepos=\"1:2-1:13\" class=\"code highlight js-syntax-highlight language-plaintext\"
lang=\"plaintext\" v-pre=\"true\"><code><span id=\"LC1\" class=\"line\" lang=\"plaintext\">foo\tbaz\t\tbim</span></code></pre>\n<copy-code></copy-code>\n</div>"
- wysiwyg: "<pre class=\"content-editor-code-block undefined code highlight\"><code>foo\tbaz\t\tbim</code></pre>"
+ wysiwyg: "<pre dir=\"auto\" class=\"content-editor-code-block undefined code highlight\"><code>foo\tbaz\t\tbim</code></pre>"
02_01_00__preliminaries__tabs__002:
canonical: "<pre><code>foo\tbaz\t\tbim\n</code></pre>\n"
static: "<div class=\"gl-relative markdown-code-block js-markdown-code\">\n<pre
data-sourcepos=\"1:4-1:15\" class=\"code highlight js-syntax-highlight language-plaintext\"
lang=\"plaintext\" v-pre=\"true\"><code><span id=\"LC1\" class=\"line\" lang=\"plaintext\">foo\tbaz\t\tbim</span></code></pre>\n<copy-code></copy-code>\n</div>"
- wysiwyg: "<pre class=\"content-editor-code-block undefined code highlight\"><code>foo\tbaz\t\tbim</code></pre>"
+ wysiwyg: "<pre dir=\"auto\" class=\"content-editor-code-block undefined code highlight\"><code>foo\tbaz\t\tbim</code></pre>"
02_01_00__preliminaries__tabs__003:
canonical: "<pre><code>a\ta\nὐ\ta\n</code></pre>\n"
static: "<div class=\"gl-relative markdown-code-block js-markdown-code\">\n<pre
data-sourcepos=\"1:5-2:9\" class=\"code highlight js-syntax-highlight language-plaintext\"
lang=\"plaintext\" v-pre=\"true\"><code><span id=\"LC1\" class=\"line\" lang=\"plaintext\">a\ta</span>\n<span
id=\"LC2\" class=\"line\" lang=\"plaintext\">ὐ\ta</span></code></pre>\n<copy-code></copy-code>\n</div>"
- wysiwyg: "<pre class=\"content-editor-code-block undefined code highlight\"><code>a\ta\nὐ\ta</code></pre>"
+ wysiwyg: "<pre dir=\"auto\" class=\"content-editor-code-block undefined code highlight\"><code>a\ta\nὐ\ta</code></pre>"
02_01_00__preliminaries__tabs__004:
canonical: |
<ul>
@@ -34,7 +34,7 @@
</li>
</ul>
wysiwyg: |-
- <ul bullet="*"><li><p>foo</p><p>bar</p></li></ul>
+ <ul dir="auto" bullet="*"><li dir="auto"><p>foo</p><p>bar</p></li></ul>
02_01_00__preliminaries__tabs__005:
canonical: |
<ul>
@@ -55,7 +55,7 @@
</li>
</ul>
wysiwyg: |-
- <ul bullet="*"><li><p>foo</p><pre class="content-editor-code-block undefined code highlight"><code> bar</code></pre></li></ul>
+ <ul dir="auto" bullet="*"><li dir="auto"><p>foo</p><pre dir="auto" class="content-editor-code-block undefined code highlight"><code> bar</code></pre></li></ul>
02_01_00__preliminaries__tabs__006:
canonical: |
<blockquote>
@@ -70,7 +70,7 @@
</div>
</blockquote>
wysiwyg: |-
- <blockquote multiline="false"><pre class="content-editor-code-block undefined code highlight"><code> foo</code></pre></blockquote>
+ <blockquote dir="auto" multiline="false"><pre dir="auto" class="content-editor-code-block undefined code highlight"><code> foo</code></pre></blockquote>
02_01_00__preliminaries__tabs__007:
canonical: |
<ul>
@@ -89,7 +89,7 @@
</li>
</ul>
wysiwyg: |-
- <ul bullet="*"><li><p></p><pre class="content-editor-code-block undefined code highlight"><code> foo</code></pre></li></ul>
+ <ul dir="auto" bullet="*"><li dir="auto"><p></p><pre dir="auto" class="content-editor-code-block undefined code highlight"><code> foo</code></pre></li></ul>
02_01_00__preliminaries__tabs__008:
canonical: |
<pre><code>foo
@@ -102,7 +102,7 @@
<copy-code></copy-code>
</div>
wysiwyg: |-
- <pre class="content-editor-code-block undefined code highlight"><code>foo
+ <pre dir="auto" class="content-editor-code-block undefined code highlight"><code>foo
bar</code></pre>
02_01_00__preliminaries__tabs__009:
canonical: |
@@ -130,7 +130,7 @@
</li>
</ul>
wysiwyg: |-
- <ul bullet="*"><li><p>foo</p><ul bullet="*"><li><p>bar</p><ul bullet="*"><li><p>baz</p></li></ul></li></ul></li></ul>
+ <ul dir="auto" bullet="*"><li dir="auto"><p>foo</p><ul dir="auto" bullet="*"><li dir="auto"><p>bar</p><ul dir="auto" bullet="*"><li dir="auto"><p>baz</p></li></ul></li></ul></li></ul>
02_01_00__preliminaries__tabs__010:
canonical: |
<h1>Foo</h1>
@@ -138,7 +138,7 @@
<h1 data-sourcepos="1:1-1:5" dir="auto">
<a id="user-content-foo" class="anchor" href="#foo" aria-hidden="true"></a>Foo</h1>
wysiwyg: |-
- <h1>Foo</h1>
+ <h1 dir="auto">Foo</h1>
02_01_00__preliminaries__tabs__011:
canonical: |
<hr />
@@ -158,7 +158,7 @@
<li data-sourcepos="2:1-2:6">two`</li>
</ul>
wysiwyg: |-
- <ul bullet="*"><li><p>`one</p></li><li><p>two`</p></li></ul>
+ <ul dir="auto" bullet="*"><li dir="auto"><p>`one</p></li><li dir="auto"><p>two`</p></li></ul>
04_01_00__leaf_blocks__thematic_breaks__001:
canonical: |
<hr />
@@ -222,7 +222,7 @@
<copy-code></copy-code>
</div>
wysiwyg: |-
- <pre class="content-editor-code-block undefined code highlight"><code>***</code></pre>
+ <pre dir="auto" class="content-editor-code-block undefined code highlight"><code>***</code></pre>
04_01_00__leaf_blocks__thematic_breaks__007:
canonical: |
<p>Foo
@@ -306,9 +306,9 @@
<li data-sourcepos="3:1-3:5">bar</li>
</ul>
wysiwyg: |-
- <ul bullet="*"><li><p>foo</p></li></ul>
+ <ul dir="auto" bullet="*"><li dir="auto"><p>foo</p></li></ul>
<hr>
- <ul bullet="*"><li><p>bar</p></li></ul>
+ <ul dir="auto" bullet="*"><li dir="auto"><p>bar</p></li></ul>
04_01_00__leaf_blocks__thematic_breaks__016:
canonical: |
<p>Foo</p>
@@ -331,7 +331,7 @@
<a id="user-content-foo" class="anchor" href="#foo" aria-hidden="true"></a>Foo</h2>
<p data-sourcepos="3:1-3:3" dir="auto">bar</p>
wysiwyg: |-
- <h2>Foo</h2>
+ <h2 dir="auto">Foo</h2>
<p>bar</p>
04_01_00__leaf_blocks__thematic_breaks__018:
canonical: |
@@ -351,9 +351,9 @@
<li data-sourcepos="3:1-3:5">Bar</li>
</ul>
wysiwyg: |-
- <ul bullet="*"><li><p>Foo</p></li></ul>
+ <ul dir="auto" bullet="*"><li dir="auto"><p>Foo</p></li></ul>
<hr>
- <ul bullet="*"><li><p>Bar</p></li></ul>
+ <ul dir="auto" bullet="*"><li dir="auto"><p>Bar</p></li></ul>
04_01_00__leaf_blocks__thematic_breaks__019:
canonical: |
<ul>
@@ -370,7 +370,7 @@
</li>
</ul>
wysiwyg: |-
- <ul bullet="*"><li><p>Foo</p></li><li><p></p><hr></li></ul>
+ <ul dir="auto" bullet="*"><li dir="auto"><p>Foo</p></li><li dir="auto"><p></p><hr></li></ul>
04_02_00__leaf_blocks__atx_headings__001:
canonical: |
<h1>foo</h1>
@@ -393,12 +393,12 @@
<h6 data-sourcepos="6:1-6:10" dir="auto">
<a id="user-content-foo-5" class="anchor" href="#foo-5" aria-hidden="true"></a>foo</h6>
wysiwyg: |-
- <h1>foo</h1>
- <h2>foo</h2>
- <h3>foo</h3>
- <h4>foo</h4>
- <h5>foo</h5>
- <h6>foo</h6>
+ <h1 dir="auto">foo</h1>
+ <h2 dir="auto">foo</h2>
+ <h3 dir="auto">foo</h3>
+ <h4 dir="auto">foo</h4>
+ <h5 dir="auto">foo</h5>
+ <h6 dir="auto">foo</h6>
04_02_00__leaf_blocks__atx_headings__002:
canonical: |
<p>####### foo</p>
@@ -430,7 +430,7 @@
<h1 data-sourcepos="1:1-1:19" dir="auto">
<a id="user-content-foo-bar-baz" class="anchor" href="#foo-bar-baz" aria-hidden="true"></a>foo <em>bar</em> *baz*</h1>
wysiwyg: |-
- <h1>foo <em>bar</em> *baz*</h1>
+ <h1 dir="auto">foo <em>bar</em> *baz*</h1>
04_02_00__leaf_blocks__atx_headings__006:
canonical: |
<h1>foo</h1>
@@ -438,7 +438,7 @@
<h1 data-sourcepos="1:1-1:22" dir="auto">
<a id="user-content-foo" class="anchor" href="#foo" aria-hidden="true"></a>foo</h1>
wysiwyg: |-
- <h1>foo</h1>
+ <h1 dir="auto">foo</h1>
04_02_00__leaf_blocks__atx_headings__007:
canonical: |
<h3>foo</h3>
@@ -452,9 +452,9 @@
<h1 data-sourcepos="3:4-3:8" dir="auto">
<a id="user-content-foo-2" class="anchor" href="#foo-2" aria-hidden="true"></a>foo</h1>
wysiwyg: |-
- <h3>foo</h3>
- <h2>foo</h2>
- <h1>foo</h1>
+ <h3 dir="auto">foo</h3>
+ <h2 dir="auto">foo</h2>
+ <h1 dir="auto">foo</h1>
04_02_00__leaf_blocks__atx_headings__008:
canonical: |
<pre><code># foo
@@ -465,7 +465,7 @@
<copy-code></copy-code>
</div>
wysiwyg: |-
- <pre class="content-editor-code-block undefined code highlight"><code># foo</code></pre>
+ <pre dir="auto" class="content-editor-code-block undefined code highlight"><code># foo</code></pre>
04_02_00__leaf_blocks__atx_headings__009:
canonical: |
<p>foo
@@ -486,8 +486,8 @@
<h3 data-sourcepos="2:3-2:11" dir="auto">
<a id="user-content-bar" class="anchor" href="#bar" aria-hidden="true"></a>bar</h3>
wysiwyg: |-
- <h2>foo</h2>
- <h3>bar</h3>
+ <h2 dir="auto">foo</h2>
+ <h3 dir="auto">bar</h3>
04_02_00__leaf_blocks__atx_headings__011:
canonical: |
<h1>foo</h1>
@@ -498,8 +498,8 @@
<h5 data-sourcepos="2:1-2:9" dir="auto">
<a id="user-content-foo-1" class="anchor" href="#foo-1" aria-hidden="true"></a>foo</h5>
wysiwyg: |-
- <h1>foo</h1>
- <h5>foo</h5>
+ <h1 dir="auto">foo</h1>
+ <h5 dir="auto">foo</h5>
04_02_00__leaf_blocks__atx_headings__012:
canonical: |
<h3>foo</h3>
@@ -507,7 +507,7 @@
<h3 data-sourcepos="1:1-1:7" dir="auto">
<a id="user-content-foo" class="anchor" href="#foo" aria-hidden="true"></a>foo</h3>
wysiwyg: |-
- <h3>foo</h3>
+ <h3 dir="auto">foo</h3>
04_02_00__leaf_blocks__atx_headings__013:
canonical: |
<h3>foo ### b</h3>
@@ -515,7 +515,7 @@
<h3 data-sourcepos="1:1-1:13" dir="auto">
<a id="user-content-foo-b" class="anchor" href="#foo-b" aria-hidden="true"></a>foo ### b</h3>
wysiwyg: |-
- <h3>foo ### b</h3>
+ <h3 dir="auto">foo ### b</h3>
04_02_00__leaf_blocks__atx_headings__014:
canonical: |
<h1>foo#</h1>
@@ -523,7 +523,7 @@
<h1 data-sourcepos="1:1-1:6" dir="auto">
<a id="user-content-foo" class="anchor" href="#foo" aria-hidden="true"></a>foo#</h1>
wysiwyg: |-
- <h1>foo#</h1>
+ <h1 dir="auto">foo#</h1>
04_02_00__leaf_blocks__atx_headings__015:
canonical: |
<h3>foo ###</h3>
@@ -538,9 +538,9 @@
<a id="user-content-foo--2" class="anchor" href="#foo--2" aria-hidden="true"></a>foo <span data-escaped-char>#</span>
</h1>
wysiwyg: |-
- <h3>foo ###</h3>
- <h2>foo ###</h2>
- <h1>foo #</h1>
+ <h3 dir="auto">foo ###</h3>
+ <h2 dir="auto">foo ###</h2>
+ <h1 dir="auto">foo #</h1>
04_02_00__leaf_blocks__atx_headings__016:
canonical: |
<hr />
@@ -553,7 +553,7 @@
<hr data-sourcepos="3:1-3:4">
wysiwyg: |-
<hr>
- <h2>foo</h2>
+ <h2 dir="auto">foo</h2>
<hr>
04_02_00__leaf_blocks__atx_headings__017:
canonical: |
@@ -567,7 +567,7 @@
<p data-sourcepos="3:1-3:7" dir="auto">Bar foo</p>
wysiwyg: |-
<p>Foo bar</p>
- <h1>baz</h1>
+ <h1 dir="auto">baz</h1>
<p>Bar foo</p>
04_02_00__leaf_blocks__atx_headings__018:
canonical: |
@@ -579,9 +579,9 @@
<h1 data-sourcepos="2:1-2:1" dir="auto"></h1>
<h3 data-sourcepos="3:1-3:3" dir="auto"></h3>
wysiwyg: |-
- <h2></h2>
- <h1></h1>
- <h3></h3>
+ <h2 dir="auto"></h2>
+ <h1 dir="auto"></h1>
+ <h3 dir="auto"></h3>
04_03_00__leaf_blocks__setext_headings__001:
canonical: |
<h1>Foo <em>bar</em></h1>
@@ -594,8 +594,8 @@
<a id="user-content-foo-bar-1" class="anchor" href="#foo-bar-1" aria-hidden="true"></a>Foo <em>bar</em>
</h2>
wysiwyg: |-
- <h1>Foo <em>bar</em></h1>
- <h2>Foo <em>bar</em></h2>
+ <h1 dir="auto">Foo <em>bar</em></h1>
+ <h2 dir="auto">Foo <em>bar</em></h2>
04_03_00__leaf_blocks__setext_headings__002:
canonical: |
<h1>Foo <em>bar
@@ -606,7 +606,7 @@
baz</em>
</h1>
wysiwyg: |-
- <h1>Foo <em>bar
+ <h1 dir="auto">Foo <em>bar
baz</em></h1>
04_03_00__leaf_blocks__setext_headings__003:
canonical: |
@@ -618,7 +618,7 @@
baz</em>
</h1>
wysiwyg: |-
- <h1>Foo <em>bar
+ <h1 dir="auto">Foo <em>bar
baz</em></h1>
04_03_00__leaf_blocks__setext_headings__004:
canonical: |
@@ -630,8 +630,8 @@
<h1 data-sourcepos="4:1-5:1" dir="auto">
<a id="user-content-foo-1" class="anchor" href="#foo-1" aria-hidden="true"></a>Foo</h1>
wysiwyg: |-
- <h2>Foo</h2>
- <h1>Foo</h1>
+ <h2 dir="auto">Foo</h2>
+ <h1 dir="auto">Foo</h1>
04_03_00__leaf_blocks__setext_headings__005:
canonical: |
<h2>Foo</h2>
@@ -645,9 +645,9 @@
<h1 data-sourcepos="7:3-8:5" dir="auto">
<a id="user-content-foo-2" class="anchor" href="#foo-2" aria-hidden="true"></a>Foo</h1>
wysiwyg: |-
- <h2>Foo</h2>
- <h2>Foo</h2>
- <h1>Foo</h1>
+ <h2 dir="auto">Foo</h2>
+ <h2 dir="auto">Foo</h2>
+ <h1 dir="auto">Foo</h1>
04_03_00__leaf_blocks__setext_headings__006:
canonical: |
<pre><code>Foo
@@ -666,7 +666,7 @@
</div>
<hr data-sourcepos="5:1-5:3">
wysiwyg: |-
- <pre class="content-editor-code-block undefined code highlight"><code>Foo
+ <pre dir="auto" class="content-editor-code-block undefined code highlight"><code>Foo
---
Foo</code></pre>
@@ -678,7 +678,7 @@
<h2 data-sourcepos="1:1-2:13" dir="auto">
<a id="user-content-foo" class="anchor" href="#foo" aria-hidden="true"></a>Foo</h2>
wysiwyg: |-
- <h2>Foo</h2>
+ <h2 dir="auto">Foo</h2>
04_03_00__leaf_blocks__setext_headings__008:
canonical: |
<p>Foo
@@ -712,7 +712,7 @@
<h2 data-sourcepos="1:1-2:5" dir="auto">
<a id="user-content-foo" class="anchor" href="#foo" aria-hidden="true"></a>Foo</h2>
wysiwyg: |-
- <h2>Foo</h2>
+ <h2 dir="auto">Foo</h2>
04_03_00__leaf_blocks__setext_headings__011:
canonical: |
<h2>Foo\</h2>
@@ -720,7 +720,7 @@
<h2 data-sourcepos="1:1-2:4" dir="auto">
<a id="user-content-foo" class="anchor" href="#foo" aria-hidden="true"></a>Foo\</h2>
wysiwyg: |-
- <h2>Foo\</h2>
+ <h2 dir="auto">Foo\</h2>
04_03_00__leaf_blocks__setext_headings__012:
canonical: |
<h2>`Foo</h2>
@@ -735,9 +735,9 @@
<a id="user-content-a-titlea-lot" class="anchor" href="#a-titlea-lot" aria-hidden="true"></a>&lt;a title="a lot</h2>
<p data-sourcepos="7:1-7:12" dir="auto">of dashes"/&gt;</p>
wysiwyg: |-
- <h2>`Foo</h2>
+ <h2 dir="auto">`Foo</h2>
<p>`</p>
- <h2>&lt;a title="a lot</h2>
+ <h2 dir="auto">&lt;a title="a lot</h2>
<p>of dashes"/&gt;</p>
04_03_00__leaf_blocks__setext_headings__013:
canonical: |
@@ -751,7 +751,7 @@
</blockquote>
<hr data-sourcepos="2:1-2:3">
wysiwyg: |-
- <blockquote multiline="false"><p>Foo</p></blockquote>
+ <blockquote dir="auto" multiline="false"><p>Foo</p></blockquote>
<hr>
04_03_00__leaf_blocks__setext_headings__014:
canonical: |
@@ -767,7 +767,7 @@
===</p>
</blockquote>
wysiwyg: |-
- <blockquote multiline="false"><p>foo
+ <blockquote dir="auto" multiline="false"><p>foo
bar
===</p></blockquote>
04_03_00__leaf_blocks__setext_headings__015:
@@ -782,7 +782,7 @@
</ul>
<hr data-sourcepos="2:1-2:3">
wysiwyg: |-
- <ul bullet="*"><li><p>Foo</p></li></ul>
+ <ul dir="auto" bullet="*"><li dir="auto"><p>Foo</p></li></ul>
<hr>
04_03_00__leaf_blocks__setext_headings__016:
canonical: |
@@ -793,7 +793,7 @@
<a id="user-content-foobar" class="anchor" href="#foobar" aria-hidden="true"></a>Foo
Bar</h2>
wysiwyg: |-
- <h2>Foo
+ <h2 dir="auto">Foo
Bar</h2>
04_03_00__leaf_blocks__setext_headings__017:
canonical: |
@@ -811,7 +811,7 @@
<p data-sourcepos="6:1-6:3" dir="auto">Baz</p>
wysiwyg: |-
<pre language="yaml" class="content-editor-code-block undefined code highlight" isfrontmatter="true"><code>Foo</code></pre>
- <h2>Bar</h2>
+ <h2 dir="auto">Bar</h2>
<p>Baz</p>
04_03_00__leaf_blocks__setext_headings__018:
canonical: |
@@ -843,7 +843,7 @@
</ul>
<hr data-sourcepos="2:1-2:5">
wysiwyg: |-
- <ul bullet="*"><li><p>foo</p></li></ul>
+ <ul dir="auto" bullet="*"><li dir="auto"><p>foo</p></li></ul>
<hr>
04_03_00__leaf_blocks__setext_headings__021:
canonical: |
@@ -857,7 +857,7 @@
</div>
<hr data-sourcepos="2:1-2:3">
wysiwyg: |-
- <pre class="content-editor-code-block undefined code highlight"><code>foo</code></pre>
+ <pre dir="auto" class="content-editor-code-block undefined code highlight"><code>foo</code></pre>
<hr>
04_03_00__leaf_blocks__setext_headings__022:
canonical: |
@@ -871,7 +871,7 @@
</blockquote>
<hr data-sourcepos="2:1-2:5">
wysiwyg: |-
- <blockquote multiline="false"><p>foo</p></blockquote>
+ <blockquote dir="auto" multiline="false"><p>foo</p></blockquote>
<hr>
04_03_00__leaf_blocks__setext_headings__023:
canonical: |
@@ -880,7 +880,7 @@
<h2 data-sourcepos="1:1-2:6" dir="auto">
<a id="user-content--foo" class="anchor" href="#-foo" aria-hidden="true"></a>&gt; foo</h2>
wysiwyg: |-
- <h2>&gt; foo</h2>
+ <h2 dir="auto">&gt; foo</h2>
04_03_00__leaf_blocks__setext_headings__024:
canonical: |
<p>Foo</p>
@@ -893,7 +893,7 @@
<p data-sourcepos="5:1-5:3" dir="auto">baz</p>
wysiwyg: |-
<p>Foo</p>
- <h2>bar</h2>
+ <h2 dir="auto">bar</h2>
<p>baz</p>
04_03_00__leaf_blocks__setext_headings__025:
canonical: |
@@ -955,7 +955,7 @@
<copy-code></copy-code>
</div>
wysiwyg: |-
- <pre class="content-editor-code-block undefined code highlight"><code>a simple
+ <pre dir="auto" class="content-editor-code-block undefined code highlight"><code>a simple
indented code block</code></pre>
04_04_00__leaf_blocks__indented_code_blocks__002:
canonical: |
@@ -973,7 +973,7 @@
</li>
</ul>
wysiwyg: |-
- <ul bullet="*"><li><p>foo</p><p>bar</p></li></ul>
+ <ul dir="auto" bullet="*"><li dir="auto"><p>foo</p><p>bar</p></li></ul>
04_04_00__leaf_blocks__indented_code_blocks__003:
canonical: |
<ol>
@@ -994,7 +994,7 @@
</li>
</ol>
wysiwyg: |-
- <ol parens="false"><li><p>foo</p><ul bullet="*"><li><p>bar</p></li></ul></li></ol>
+ <ol dir="auto" parens="false"><li dir="auto"><p>foo</p><ul dir="auto" bullet="*"><li dir="auto"><p>bar</p></li></ul></li></ol>
04_04_00__leaf_blocks__indented_code_blocks__004:
canonical: |
<pre><code>&lt;a/&gt;
@@ -1011,7 +1011,7 @@
<copy-code></copy-code>
</div>
wysiwyg: |-
- <pre class="content-editor-code-block undefined code highlight"><code>&lt;a/&gt;
+ <pre dir="auto" class="content-editor-code-block undefined code highlight"><code>&lt;a/&gt;
*hi*
- one</code></pre>
@@ -1037,7 +1037,7 @@
<copy-code></copy-code>
</div>
wysiwyg: |-
- <pre class="content-editor-code-block undefined code highlight"><code>chunk1
+ <pre dir="auto" class="content-editor-code-block undefined code highlight"><code>chunk1
chunk2
@@ -1053,7 +1053,7 @@
<span id="LC3" class="line" lang="plaintext"> chunk2</span></code></pre>
<copy-code></copy-code>
</div>
- wysiwyg: "<pre class=\"content-editor-code-block undefined code highlight\"><code>chunk1\n
+ wysiwyg: "<pre dir=\"auto\" class=\"content-editor-code-block undefined code highlight\"><code>chunk1\n
\ \n chunk2</code></pre>"
04_04_00__leaf_blocks__indented_code_blocks__007:
canonical: |
@@ -1077,7 +1077,7 @@
</div>
<p data-sourcepos="2:1-2:3" dir="auto">bar</p>
wysiwyg: |-
- <pre class="content-editor-code-block undefined code highlight"><code>foo</code></pre>
+ <pre dir="auto" class="content-editor-code-block undefined code highlight"><code>foo</code></pre>
<p>bar</p>
04_04_00__leaf_blocks__indented_code_blocks__009:
canonical: |
@@ -1103,10 +1103,10 @@
</div>
<hr data-sourcepos="6:1-6:4">
wysiwyg: |-
- <h1>Heading</h1>
- <pre class="content-editor-code-block undefined code highlight"><code>foo</code></pre>
- <h2>Heading</h2>
- <pre class="content-editor-code-block undefined code highlight"><code>foo</code></pre>
+ <h1 dir="auto">Heading</h1>
+ <pre dir="auto" class="content-editor-code-block undefined code highlight"><code>foo</code></pre>
+ <h2 dir="auto">Heading</h2>
+ <pre dir="auto" class="content-editor-code-block undefined code highlight"><code>foo</code></pre>
<hr>
04_04_00__leaf_blocks__indented_code_blocks__010:
canonical: |
@@ -1120,7 +1120,7 @@
<copy-code></copy-code>
</div>
wysiwyg: |-
- <pre class="content-editor-code-block undefined code highlight"><code> foo
+ <pre dir="auto" class="content-editor-code-block undefined code highlight"><code> foo
bar</code></pre>
04_04_00__leaf_blocks__indented_code_blocks__011:
canonical: |
@@ -1132,7 +1132,7 @@
<copy-code></copy-code>
</div>
wysiwyg: |-
- <pre class="content-editor-code-block undefined code highlight"><code>foo</code></pre>
+ <pre dir="auto" class="content-editor-code-block undefined code highlight"><code>foo</code></pre>
04_04_00__leaf_blocks__indented_code_blocks__012:
canonical: "<pre><code>foo \n</code></pre>\n"
static: |-
@@ -1141,7 +1141,7 @@
<copy-code></copy-code>
</div>
wysiwyg: |-
- <pre class="content-editor-code-block undefined code highlight"><code>foo </code></pre>
+ <pre dir="auto" class="content-editor-code-block undefined code highlight"><code>foo </code></pre>
04_05_00__leaf_blocks__fenced_code_blocks__001:
canonical: |
<pre><code>&lt;
@@ -1154,7 +1154,7 @@
<copy-code></copy-code>
</div>
wysiwyg: |-
- <pre class="content-editor-code-block undefined code highlight"><code>&lt;
+ <pre dir="auto" class="content-editor-code-block undefined code highlight"><code>&lt;
&gt;</code></pre>
04_05_00__leaf_blocks__fenced_code_blocks__002:
canonical: |
@@ -1168,7 +1168,7 @@
<copy-code></copy-code>
</div>
wysiwyg: |-
- <pre class="content-editor-code-block undefined code highlight"><code>&lt;
+ <pre dir="auto" class="content-editor-code-block undefined code highlight"><code>&lt;
&gt;</code></pre>
04_05_00__leaf_blocks__fenced_code_blocks__003:
canonical: |
@@ -1189,7 +1189,7 @@
<copy-code></copy-code>
</div>
wysiwyg: |-
- <pre class="content-editor-code-block undefined code highlight"><code>aaa
+ <pre dir="auto" class="content-editor-code-block undefined code highlight"><code>aaa
~~~</code></pre>
04_05_00__leaf_blocks__fenced_code_blocks__005:
canonical: |
@@ -1203,7 +1203,7 @@
<copy-code></copy-code>
</div>
wysiwyg: |-
- <pre class="content-editor-code-block undefined code highlight"><code>aaa
+ <pre dir="auto" class="content-editor-code-block undefined code highlight"><code>aaa
```</code></pre>
04_05_00__leaf_blocks__fenced_code_blocks__006:
canonical: |
@@ -1217,7 +1217,7 @@
<copy-code></copy-code>
</div>
wysiwyg: |-
- <pre class="content-editor-code-block undefined code highlight"><code>aaa
+ <pre dir="auto" class="content-editor-code-block undefined code highlight"><code>aaa
```</code></pre>
04_05_00__leaf_blocks__fenced_code_blocks__007:
canonical: |
@@ -1231,7 +1231,7 @@
<copy-code></copy-code>
</div>
wysiwyg: |-
- <pre class="content-editor-code-block undefined code highlight"><code>aaa
+ <pre dir="auto" class="content-editor-code-block undefined code highlight"><code>aaa
~~~</code></pre>
04_05_00__leaf_blocks__fenced_code_blocks__008:
canonical: |
@@ -1242,7 +1242,7 @@
<copy-code></copy-code>
</div>
wysiwyg: |-
- <pre class="content-editor-code-block undefined code highlight"><code></code></pre>
+ <pre dir="auto" class="content-editor-code-block undefined code highlight"><code></code></pre>
04_05_00__leaf_blocks__fenced_code_blocks__009:
canonical: |
<pre><code>
@@ -1257,7 +1257,7 @@
<copy-code></copy-code>
</div>
wysiwyg: |-
- <pre class="content-editor-code-block undefined code highlight"><code>
+ <pre dir="auto" class="content-editor-code-block undefined code highlight"><code>
```
aaa</code></pre>
04_05_00__leaf_blocks__fenced_code_blocks__010:
@@ -1276,7 +1276,7 @@
</blockquote>
<p data-sourcepos="4:1-4:3" dir="auto">bbb</p>
wysiwyg: |-
- <blockquote multiline="false"><pre class="content-editor-code-block undefined code highlight"><code>aaa</code></pre></blockquote>
+ <blockquote dir="auto" multiline="false"><pre dir="auto" class="content-editor-code-block undefined code highlight"><code>aaa</code></pre></blockquote>
<p>bbb</p>
04_05_00__leaf_blocks__fenced_code_blocks__011:
canonical: "<pre><code>\n \n</code></pre>\n"
@@ -1287,7 +1287,7 @@
<copy-code></copy-code>
</div>
wysiwyg: |-
- <pre class="content-editor-code-block undefined code highlight"><code></code></pre>
+ <pre dir="auto" class="content-editor-code-block undefined code highlight"><code></code></pre>
04_05_00__leaf_blocks__fenced_code_blocks__012:
canonical: |
<pre><code></code></pre>
@@ -1297,7 +1297,7 @@
<copy-code></copy-code>
</div>
wysiwyg: |-
- <pre class="content-editor-code-block undefined code highlight"><code></code></pre>
+ <pre dir="auto" class="content-editor-code-block undefined code highlight"><code></code></pre>
04_05_00__leaf_blocks__fenced_code_blocks__013:
canonical: |
<pre><code>aaa
@@ -1310,7 +1310,7 @@
<copy-code></copy-code>
</div>
wysiwyg: |-
- <pre class="content-editor-code-block undefined code highlight"><code>aaa
+ <pre dir="auto" class="content-editor-code-block undefined code highlight"><code>aaa
aaa</code></pre>
04_05_00__leaf_blocks__fenced_code_blocks__014:
canonical: |
@@ -1326,7 +1326,7 @@
<copy-code></copy-code>
</div>
wysiwyg: |-
- <pre class="content-editor-code-block undefined code highlight"><code>aaa
+ <pre dir="auto" class="content-editor-code-block undefined code highlight"><code>aaa
aaa
aaa</code></pre>
04_05_00__leaf_blocks__fenced_code_blocks__015:
@@ -1343,7 +1343,7 @@
<copy-code></copy-code>
</div>
wysiwyg: |-
- <pre class="content-editor-code-block undefined code highlight"><code>aaa
+ <pre dir="auto" class="content-editor-code-block undefined code highlight"><code>aaa
aaa
aaa</code></pre>
04_05_00__leaf_blocks__fenced_code_blocks__016:
@@ -1360,7 +1360,7 @@
<copy-code></copy-code>
</div>
wysiwyg: |-
- <pre class="content-editor-code-block undefined code highlight"><code>```
+ <pre dir="auto" class="content-editor-code-block undefined code highlight"><code>```
aaa
```</code></pre>
04_05_00__leaf_blocks__fenced_code_blocks__017:
@@ -1373,7 +1373,7 @@
<copy-code></copy-code>
</div>
wysiwyg: |-
- <pre class="content-editor-code-block undefined code highlight"><code>aaa</code></pre>
+ <pre dir="auto" class="content-editor-code-block undefined code highlight"><code>aaa</code></pre>
04_05_00__leaf_blocks__fenced_code_blocks__018:
canonical: |
<pre><code>aaa
@@ -1384,7 +1384,7 @@
<copy-code></copy-code>
</div>
wysiwyg: |-
- <pre class="content-editor-code-block undefined code highlight"><code>aaa</code></pre>
+ <pre dir="auto" class="content-editor-code-block undefined code highlight"><code>aaa</code></pre>
04_05_00__leaf_blocks__fenced_code_blocks__019:
canonical: |
<pre><code>aaa
@@ -1397,7 +1397,7 @@
<copy-code></copy-code>
</div>
wysiwyg: |-
- <pre class="content-editor-code-block undefined code highlight"><code>aaa
+ <pre dir="auto" class="content-editor-code-block undefined code highlight"><code>aaa
```</code></pre>
04_05_00__leaf_blocks__fenced_code_blocks__020:
canonical: |
@@ -1421,7 +1421,7 @@
<copy-code></copy-code>
</div>
wysiwyg: |-
- <pre class="content-editor-code-block undefined code highlight"><code>aaa
+ <pre dir="auto" class="content-editor-code-block undefined code highlight"><code>aaa
~~~ ~~</code></pre>
04_05_00__leaf_blocks__fenced_code_blocks__022:
canonical: |
@@ -1438,7 +1438,7 @@
<p data-sourcepos="5:1-5:3" dir="auto">baz</p>
wysiwyg: |-
<p>foo</p>
- <pre class="content-editor-code-block undefined code highlight"><code>bar</code></pre>
+ <pre dir="auto" class="content-editor-code-block undefined code highlight"><code>bar</code></pre>
<p>baz</p>
04_05_00__leaf_blocks__fenced_code_blocks__023:
canonical: |
@@ -1456,9 +1456,9 @@
<h1 data-sourcepos="6:1-6:5" dir="auto">
<a id="user-content-baz" class="anchor" href="#baz" aria-hidden="true"></a>baz</h1>
wysiwyg: |-
- <h2>foo</h2>
- <pre class="content-editor-code-block undefined code highlight"><code>bar</code></pre>
- <h1>baz</h1>
+ <h2 dir="auto">foo</h2>
+ <pre dir="auto" class="content-editor-code-block undefined code highlight"><code>bar</code></pre>
+ <h1 dir="auto">baz</h1>
04_05_00__leaf_blocks__fenced_code_blocks__024:
canonical: |
<pre><code class="language-ruby">def foo(x)
@@ -1473,7 +1473,7 @@
<copy-code></copy-code>
</div>
wysiwyg: |-
- <pre language="ruby" class="content-editor-code-block undefined code highlight"><code>def foo(x)
+ <pre dir="auto" language="ruby" class="content-editor-code-block undefined code highlight"><code>def foo(x)
return 3
end</code></pre>
04_05_00__leaf_blocks__fenced_code_blocks__025:
@@ -1490,7 +1490,7 @@
<copy-code></copy-code>
</div>
wysiwyg: |-
- <pre language="ruby" class="content-editor-code-block undefined code highlight"><code>def foo(x)
+ <pre dir="auto" language="ruby" class="content-editor-code-block undefined code highlight"><code>def foo(x)
return 3
end</code></pre>
04_05_00__leaf_blocks__fenced_code_blocks__026:
@@ -1502,7 +1502,7 @@
<copy-code></copy-code>
</div>
wysiwyg: |-
- <pre language=";" class="content-editor-code-block undefined code highlight"><code></code></pre>
+ <pre dir="auto" language=";" class="content-editor-code-block undefined code highlight"><code></code></pre>
04_05_00__leaf_blocks__fenced_code_blocks__027:
canonical: |
<p><code>aa</code>
@@ -1523,7 +1523,7 @@
<copy-code></copy-code>
</div>
wysiwyg: |-
- <pre language="aa" class="content-editor-code-block undefined code highlight"><code>foo</code></pre>
+ <pre dir="auto" language="aa" class="content-editor-code-block undefined code highlight"><code>foo</code></pre>
04_05_00__leaf_blocks__fenced_code_blocks__029:
canonical: |
<pre><code>``` aaa
@@ -1534,7 +1534,7 @@
<copy-code></copy-code>
</div>
wysiwyg: |-
- <pre class="content-editor-code-block undefined code highlight"><code>``` aaa</code></pre>
+ <pre dir="auto" class="content-editor-code-block undefined code highlight"><code>``` aaa</code></pre>
04_06_00__leaf_blocks__html_blocks__001:
canonical: |
<table><tr><td>
@@ -1871,7 +1871,7 @@
</div>
</blockquote>
wysiwyg: |-
- <blockquote multiline="false"><div><p>
+ <blockquote dir="auto" multiline="false"><div><p>
foo
</p></div></blockquote>
<p>bar</p>
@@ -1893,7 +1893,7 @@
</li>
</ul>
wysiwyg: |-
- <ul bullet="*"><li><p></p><div></div></li><li><p>foo</p></li></ul>
+ <ul dir="auto" bullet="*"><li dir="auto"><p></p><div></div></li><li dir="auto"><p>foo</p></li></ul>
04_06_00__leaf_blocks__html_blocks__028:
canonical: |
<style>p{color:red;}</style>
@@ -1995,7 +1995,7 @@
<copy-code></copy-code>
</div>
wysiwyg: |-
- <pre class="content-editor-code-block undefined code highlight"><code>&lt;!-- foo --&gt;</code></pre>
+ <pre dir="auto" class="content-editor-code-block undefined code highlight"><code>&lt;!-- foo --&gt;</code></pre>
04_06_00__leaf_blocks__html_blocks__036:
canonical: |2
<div>
@@ -2009,7 +2009,7 @@
</div>
</div>
wysiwyg: |-
- <div><pre class="content-editor-code-block undefined code highlight"><code>&lt;div&gt;</code></pre></div>
+ <div><pre dir="auto" class="content-editor-code-block undefined code highlight"><code>&lt;div&gt;</code></pre></div>
04_06_00__leaf_blocks__html_blocks__037:
canonical: |
<p>Foo</p>
@@ -2123,7 +2123,7 @@
</tr>
</table>
wysiwyg: |-
- <pre class="content-editor-code-block undefined code highlight"><code>&lt;td&gt;
+ <pre dir="auto" class="content-editor-code-block undefined code highlight"><code>&lt;td&gt;
Hi
&lt;/td&gt;</code></pre>
<table><tbody><tr></tr></tbody></table>
@@ -2313,7 +2313,7 @@
</div>
<p data-sourcepos="3:1-3:5" dir="auto">[foo]</p>
wysiwyg: |-
- <pre class="content-editor-code-block undefined code highlight"><code>[foo]: /url "title"</code></pre>
+ <pre dir="auto" class="content-editor-code-block undefined code highlight"><code>[foo]: /url "title"</code></pre>
<p>[foo]</p>
04_07_00__leaf_blocks__link_reference_definitions__021:
canonical: |
@@ -2327,7 +2327,7 @@
</div>
<p data-sourcepos="5:1-5:5" dir="auto">[foo]</p>
wysiwyg: |-
- <pre class="content-editor-code-block undefined code highlight"><code>[foo]: /url</code></pre>
+ <pre dir="auto" class="content-editor-code-block undefined code highlight"><code>[foo]: /url</code></pre>
<p>[foo]</p>
04_07_00__leaf_blocks__link_reference_definitions__022:
canonical: |
@@ -2356,9 +2356,9 @@
<p data-sourcepos="3:3-3:5">bar</p>
</blockquote>
wysiwyg: |-
- <h1><a target="_blank" rel="noopener noreferrer nofollow" href="/url">Foo</a></h1>
+ <h1 dir="auto"><a target="_blank" rel="noopener noreferrer nofollow" href="/url">Foo</a></h1>
<pre>[foo]: /url</pre>
- <blockquote multiline="false"><p>bar</p></blockquote>
+ <blockquote dir="auto" multiline="false"><p>bar</p></blockquote>
04_07_00__leaf_blocks__link_reference_definitions__024:
canonical: |
<h1>bar</h1>
@@ -2369,7 +2369,7 @@
<p data-sourcepos="4:1-4:5" dir="auto"><a href="/url">foo</a></p>
wysiwyg: |-
<pre>[foo]: /url</pre>
- <h1>bar</h1>
+ <h1 dir="auto">bar</h1>
<p><a target="_blank" rel="noopener noreferrer nofollow" href="/url">foo</a></p>
04_07_00__leaf_blocks__link_reference_definitions__025:
canonical: |
@@ -2409,7 +2409,7 @@
</blockquote>
wysiwyg: |-
<p><a target="_blank" rel="noopener noreferrer nofollow" href="/url">foo</a></p>
- <blockquote multiline="false"><pre>[foo]: /url</pre></blockquote>
+ <blockquote dir="auto" multiline="false"><pre>[foo]: /url</pre></blockquote>
04_07_00__leaf_blocks__link_reference_definitions__028:
canonical: ""
static: ""
@@ -2496,7 +2496,7 @@
</div>
<p data-sourcepos="2:1-2:3" dir="auto">bbb</p>
wysiwyg: |-
- <pre class="content-editor-code-block undefined code highlight"><code>aaa</code></pre>
+ <pre dir="auto" class="content-editor-code-block undefined code highlight"><code>aaa</code></pre>
<p>bbb</p>
04_08_00__leaf_blocks__paragraphs__008:
canonical: |
@@ -2518,7 +2518,7 @@
<a id="user-content-aaa" class="anchor" href="#aaa" aria-hidden="true"></a>aaa</h1>
wysiwyg: |-
<p>aaa</p>
- <h1>aaa</h1>
+ <h1 dir="auto">aaa</h1>
04_10_00__leaf_blocks__tables_extension__001:
canonical: |
<table>
@@ -2659,7 +2659,7 @@
</blockquote>
wysiwyg: |-
<table><tbody><tr><th colspan="1" rowspan="1"><p>abc</p></th><th colspan="1" rowspan="1"><p>def</p></th></tr><tr><td colspan="1" rowspan="1"><p>bar</p></td><td colspan="1" rowspan="1"><p>baz</p></td></tr></tbody></table>
- <blockquote multiline="false"><p>bar</p></blockquote>
+ <blockquote dir="auto" multiline="false"><p>bar</p></blockquote>
04_10_00__leaf_blocks__tables_extension__005:
canonical: |
<table>
@@ -2794,7 +2794,7 @@
baz</p>
</blockquote>
wysiwyg: |-
- <blockquote multiline="false"><h1>Foo</h1><p>bar
+ <blockquote dir="auto" multiline="false"><h1 dir="auto">Foo</h1><p>bar
baz</p></blockquote>
05_01_00__container_blocks__block_quotes__002:
canonical: |
@@ -2811,7 +2811,7 @@
baz</p>
</blockquote>
wysiwyg: |-
- <blockquote multiline="false"><h1>Foo</h1><p>bar
+ <blockquote dir="auto" multiline="false"><h1 dir="auto">Foo</h1><p>bar
baz</p></blockquote>
05_01_00__container_blocks__block_quotes__003:
canonical: |
@@ -2828,7 +2828,7 @@
baz</p>
</blockquote>
wysiwyg: |-
- <blockquote multiline="false"><h1>Foo</h1><p>bar
+ <blockquote dir="auto" multiline="false"><h1 dir="auto">Foo</h1><p>bar
baz</p></blockquote>
05_01_00__container_blocks__block_quotes__004:
canonical: |
@@ -2844,7 +2844,7 @@
<copy-code></copy-code>
</div>
wysiwyg: |-
- <pre class="content-editor-code-block undefined code highlight"><code>&gt; # Foo
+ <pre dir="auto" class="content-editor-code-block undefined code highlight"><code>&gt; # Foo
&gt; bar
&gt; baz</code></pre>
05_01_00__container_blocks__block_quotes__005:
@@ -2862,7 +2862,7 @@
baz</p>
</blockquote>
wysiwyg: |-
- <blockquote multiline="false"><h1>Foo</h1><p>bar
+ <blockquote dir="auto" multiline="false"><h1 dir="auto">Foo</h1><p>bar
baz</p></blockquote>
05_01_00__container_blocks__block_quotes__006:
canonical: |
@@ -2878,7 +2878,7 @@
foo</p>
</blockquote>
wysiwyg: |-
- <blockquote multiline="false"><p>bar
+ <blockquote dir="auto" multiline="false"><p>bar
baz
foo</p></blockquote>
05_01_00__container_blocks__block_quotes__007:
@@ -2893,7 +2893,7 @@
</blockquote>
<hr data-sourcepos="2:1-2:3">
wysiwyg: |-
- <blockquote multiline="false"><p>foo</p></blockquote>
+ <blockquote dir="auto" multiline="false"><p>foo</p></blockquote>
<hr>
05_01_00__container_blocks__block_quotes__008:
canonical: |
@@ -2915,8 +2915,8 @@
<li data-sourcepos="2:1-2:5">bar</li>
</ul>
wysiwyg: |-
- <blockquote multiline="false"><ul bullet="*"><li><p>foo</p></li></ul></blockquote>
- <ul bullet="*"><li><p>bar</p></li></ul>
+ <blockquote dir="auto" multiline="false"><ul dir="auto" bullet="*"><li dir="auto"><p>foo</p></li></ul></blockquote>
+ <ul dir="auto" bullet="*"><li dir="auto"><p>bar</p></li></ul>
05_01_00__container_blocks__block_quotes__009:
canonical: |
<blockquote>
@@ -2937,8 +2937,8 @@
<copy-code></copy-code>
</div>
wysiwyg: |-
- <blockquote multiline="false"><pre class="content-editor-code-block undefined code highlight"><code>foo</code></pre></blockquote>
- <pre class="content-editor-code-block undefined code highlight"><code>bar</code></pre>
+ <blockquote dir="auto" multiline="false"><pre dir="auto" class="content-editor-code-block undefined code highlight"><code>foo</code></pre></blockquote>
+ <pre dir="auto" class="content-editor-code-block undefined code highlight"><code>bar</code></pre>
05_01_00__container_blocks__block_quotes__010:
canonical: |
<blockquote>
@@ -2959,9 +2959,9 @@
<copy-code></copy-code>
</div>
wysiwyg: |-
- <blockquote multiline="false"><pre class="content-editor-code-block undefined code highlight"><code></code></pre></blockquote>
+ <blockquote dir="auto" multiline="false"><pre dir="auto" class="content-editor-code-block undefined code highlight"><code></code></pre></blockquote>
<p>foo</p>
- <pre class="content-editor-code-block undefined code highlight"><code></code></pre>
+ <pre dir="auto" class="content-editor-code-block undefined code highlight"><code></code></pre>
05_01_00__container_blocks__block_quotes__011:
canonical: |
<blockquote>
@@ -2974,7 +2974,7 @@
- bar</p>
</blockquote>
wysiwyg: |-
- <blockquote multiline="false"><p>foo
+ <blockquote dir="auto" multiline="false"><p>foo
- bar</p></blockquote>
05_01_00__container_blocks__block_quotes__012:
canonical: |
@@ -2984,7 +2984,7 @@
<blockquote data-sourcepos="1:1-1:1" dir="auto">
</blockquote>
wysiwyg: |-
- <blockquote multiline="false"><p></p></blockquote>
+ <blockquote dir="auto" multiline="false"><p></p></blockquote>
05_01_00__container_blocks__block_quotes__013:
canonical: |
<blockquote>
@@ -2993,7 +2993,7 @@
<blockquote data-sourcepos="1:1-3:2" dir="auto">
</blockquote>
wysiwyg: |-
- <blockquote multiline="false"><p></p></blockquote>
+ <blockquote dir="auto" multiline="false"><p></p></blockquote>
05_01_00__container_blocks__block_quotes__014:
canonical: |
<blockquote>
@@ -3004,7 +3004,7 @@
<p data-sourcepos="2:3-2:5">foo</p>
</blockquote>
wysiwyg: |-
- <blockquote multiline="false"><p>foo</p></blockquote>
+ <blockquote dir="auto" multiline="false"><p>foo</p></blockquote>
05_01_00__container_blocks__block_quotes__015:
canonical: |
<blockquote>
@@ -3021,8 +3021,8 @@
<p data-sourcepos="3:3-3:5">bar</p>
</blockquote>
wysiwyg: |-
- <blockquote multiline="false"><p>foo</p></blockquote>
- <blockquote multiline="false"><p>bar</p></blockquote>
+ <blockquote dir="auto" multiline="false"><p>foo</p></blockquote>
+ <blockquote dir="auto" multiline="false"><p>bar</p></blockquote>
05_01_00__container_blocks__block_quotes__016:
canonical: |
<blockquote>
@@ -3035,7 +3035,7 @@
bar</p>
</blockquote>
wysiwyg: |-
- <blockquote multiline="false"><p>foo
+ <blockquote dir="auto" multiline="false"><p>foo
bar</p></blockquote>
05_01_00__container_blocks__block_quotes__017:
canonical: |
@@ -3049,7 +3049,7 @@
<p data-sourcepos="3:3-3:5">bar</p>
</blockquote>
wysiwyg: |-
- <blockquote multiline="false"><p>foo</p><p>bar</p></blockquote>
+ <blockquote dir="auto" multiline="false"><p>foo</p><p>bar</p></blockquote>
05_01_00__container_blocks__block_quotes__018:
canonical: |
<p>foo</p>
@@ -3063,7 +3063,7 @@
</blockquote>
wysiwyg: |-
<p>foo</p>
- <blockquote multiline="false"><p>bar</p></blockquote>
+ <blockquote dir="auto" multiline="false"><p>bar</p></blockquote>
05_01_00__container_blocks__block_quotes__019:
canonical: |
<blockquote>
@@ -3082,9 +3082,9 @@
<p data-sourcepos="3:3-3:5">bbb</p>
</blockquote>
wysiwyg: |-
- <blockquote multiline="false"><p>aaa</p></blockquote>
+ <blockquote dir="auto" multiline="false"><p>aaa</p></blockquote>
<hr>
- <blockquote multiline="false"><p>bbb</p></blockquote>
+ <blockquote dir="auto" multiline="false"><p>bbb</p></blockquote>
05_01_00__container_blocks__block_quotes__020:
canonical: |
<blockquote>
@@ -3097,7 +3097,7 @@
baz</p>
</blockquote>
wysiwyg: |-
- <blockquote multiline="false"><p>bar
+ <blockquote dir="auto" multiline="false"><p>bar
baz</p></blockquote>
05_01_00__container_blocks__block_quotes__021:
canonical: |
@@ -3111,7 +3111,7 @@
</blockquote>
<p data-sourcepos="3:1-3:3" dir="auto">baz</p>
wysiwyg: |-
- <blockquote multiline="false"><p>bar</p></blockquote>
+ <blockquote dir="auto" multiline="false"><p>bar</p></blockquote>
<p>baz</p>
05_01_00__container_blocks__block_quotes__022:
canonical: |
@@ -3125,7 +3125,7 @@
</blockquote>
<p data-sourcepos="3:1-3:3" dir="auto">baz</p>
wysiwyg: |-
- <blockquote multiline="false"><p>bar</p></blockquote>
+ <blockquote dir="auto" multiline="false"><p>bar</p></blockquote>
<p>baz</p>
05_01_00__container_blocks__block_quotes__023:
canonical: |
@@ -3147,7 +3147,7 @@
</blockquote>
</blockquote>
wysiwyg: |-
- <blockquote multiline="false"><blockquote multiline="false"><blockquote multiline="false"><p>foo
+ <blockquote dir="auto" multiline="false"><blockquote dir="auto" multiline="false"><blockquote dir="auto" multiline="false"><p>foo
bar</p></blockquote></blockquote></blockquote>
05_01_00__container_blocks__block_quotes__024:
canonical: |
@@ -3171,7 +3171,7 @@
</blockquote>
</blockquote>
wysiwyg: |-
- <blockquote multiline="false"><blockquote multiline="false"><blockquote multiline="false"><p>foo
+ <blockquote dir="auto" multiline="false"><blockquote dir="auto" multiline="false"><blockquote dir="auto" multiline="false"><p>foo
bar
baz</p></blockquote></blockquote></blockquote>
05_01_00__container_blocks__block_quotes__025:
@@ -3194,8 +3194,8 @@
<p data-sourcepos="3:6-3:13">not code</p>
</blockquote>
wysiwyg: |-
- <blockquote multiline="false"><pre class="content-editor-code-block undefined code highlight"><code>code</code></pre></blockquote>
- <blockquote multiline="false"><p>not code</p></blockquote>
+ <blockquote dir="auto" multiline="false"><pre dir="auto" class="content-editor-code-block undefined code highlight"><code>code</code></pre></blockquote>
+ <blockquote dir="auto" multiline="false"><p>not code</p></blockquote>
05_02_00__container_blocks__list_items__001:
canonical: |
<p>A paragraph
@@ -3218,8 +3218,8 @@
wysiwyg: |-
<p>A paragraph
with two lines.</p>
- <pre class="content-editor-code-block undefined code highlight"><code>indented code</code></pre>
- <blockquote multiline="false"><p>A block quote.</p></blockquote>
+ <pre dir="auto" class="content-editor-code-block undefined code highlight"><code>indented code</code></pre>
+ <blockquote dir="auto" multiline="false"><p>A block quote.</p></blockquote>
05_02_00__container_blocks__list_items__002:
canonical: |
<ol>
@@ -3248,8 +3248,8 @@
</li>
</ol>
wysiwyg: |-
- <ol parens="false"><li><p>A paragraph
- with two lines.</p><pre class="content-editor-code-block undefined code highlight"><code>indented code</code></pre><blockquote multiline="false"><p>A block quote.</p></blockquote></li></ol>
+ <ol dir="auto" parens="false"><li dir="auto"><p>A paragraph
+ with two lines.</p><pre dir="auto" class="content-editor-code-block undefined code highlight"><code>indented code</code></pre><blockquote dir="auto" multiline="false"><p>A block quote.</p></blockquote></li></ol>
05_02_00__container_blocks__list_items__003:
canonical: |
<ul>
@@ -3262,7 +3262,7 @@
</ul>
<p data-sourcepos="3:2-3:4" dir="auto">two</p>
wysiwyg: |-
- <ul bullet="*"><li><p>one</p></li></ul>
+ <ul dir="auto" bullet="*"><li dir="auto"><p>one</p></li></ul>
<p>two</p>
05_02_00__container_blocks__list_items__004:
canonical: |
@@ -3280,7 +3280,7 @@
</li>
</ul>
wysiwyg: |-
- <ul bullet="*"><li><p>one</p><p>two</p></li></ul>
+ <ul dir="auto" bullet="*"><li dir="auto"><p>one</p><p>two</p></li></ul>
05_02_00__container_blocks__list_items__005:
canonical: |
<ul>
@@ -3297,8 +3297,8 @@
<copy-code></copy-code>
</div>
wysiwyg: |-
- <ul bullet="*"><li><p>one</p></li></ul>
- <pre class="content-editor-code-block undefined code highlight"><code> two</code></pre>
+ <ul dir="auto" bullet="*"><li dir="auto"><p>one</p></li></ul>
+ <pre dir="auto" class="content-editor-code-block undefined code highlight"><code> two</code></pre>
05_02_00__container_blocks__list_items__006:
canonical: |
<ul>
@@ -3315,7 +3315,7 @@
</li>
</ul>
wysiwyg: |-
- <ul bullet="*"><li><p>one</p><p>two</p></li></ul>
+ <ul dir="auto" bullet="*"><li dir="auto"><p>one</p><p>two</p></li></ul>
05_02_00__container_blocks__list_items__007:
canonical: |
<blockquote>
@@ -3340,7 +3340,7 @@
</blockquote>
</blockquote>
wysiwyg: |-
- <blockquote multiline="false"><blockquote multiline="false"><ol parens="false"><li><p>one</p><p>two</p></li></ol></blockquote></blockquote>
+ <blockquote dir="auto" multiline="false"><blockquote dir="auto" multiline="false"><ol dir="auto" parens="false"><li dir="auto"><p>one</p><p>two</p></li></ol></blockquote></blockquote>
05_02_00__container_blocks__list_items__008:
canonical: |
<blockquote>
@@ -3361,7 +3361,7 @@
</blockquote>
</blockquote>
wysiwyg: |-
- <blockquote multiline="false"><blockquote multiline="false"><ul bullet="*"><li><p>one</p></li></ul><p>two</p></blockquote></blockquote>
+ <blockquote dir="auto" multiline="false"><blockquote dir="auto" multiline="false"><ul dir="auto" bullet="*"><li dir="auto"><p>one</p></li></ul><p>two</p></blockquote></blockquote>
05_02_00__container_blocks__list_items__009:
canonical: |
<p>-one</p>
@@ -3388,7 +3388,7 @@
</li>
</ul>
wysiwyg: |-
- <ul bullet="*"><li><p>foo</p><p>bar</p></li></ul>
+ <ul dir="auto" bullet="*"><li dir="auto"><p>foo</p><p>bar</p></li></ul>
05_02_00__container_blocks__list_items__011:
canonical: |
<ol>
@@ -3417,7 +3417,7 @@
</li>
</ol>
wysiwyg: |-
- <ol parens="false"><li><p>foo</p><pre class="content-editor-code-block undefined code highlight"><code>bar</code></pre><p>baz</p><blockquote multiline="false"><p>bam</p></blockquote></li></ol>
+ <ol dir="auto" parens="false"><li dir="auto"><p>foo</p><pre dir="auto" class="content-editor-code-block undefined code highlight"><code>bar</code></pre><p>baz</p><blockquote dir="auto" multiline="false"><p>bam</p></blockquote></li></ol>
05_02_00__container_blocks__list_items__012:
canonical: |
<ul>
@@ -3444,7 +3444,7 @@
</li>
</ul>
wysiwyg: |-
- <ul bullet="*"><li><p>Foo</p><pre class="content-editor-code-block undefined code highlight"><code>bar
+ <ul dir="auto" bullet="*"><li dir="auto"><p>Foo</p><pre dir="auto" class="content-editor-code-block undefined code highlight"><code>bar
baz</code></pre></li></ul>
@@ -3458,7 +3458,7 @@
<li data-sourcepos="1:1-1:13">ok</li>
</ol>
wysiwyg: |-
- <ol parens="false"><li><p>ok</p></li></ol>
+ <ol dir="auto" parens="false"><li dir="auto"><p>ok</p></li></ol>
05_02_00__container_blocks__list_items__014:
canonical: |
<p>1234567890. not ok</p>
@@ -3476,7 +3476,7 @@
<li data-sourcepos="1:1-1:5">ok</li>
</ol>
wysiwyg: |-
- <ol parens="false"><li><p>ok</p></li></ol>
+ <ol dir="auto" parens="false"><li dir="auto"><p>ok</p></li></ol>
05_02_00__container_blocks__list_items__016:
canonical: |
<ol start="3">
@@ -3487,7 +3487,7 @@
<li data-sourcepos="1:1-1:7">ok</li>
</ol>
wysiwyg: |-
- <ol parens="false"><li><p>ok</p></li></ol>
+ <ol dir="auto" parens="false"><li dir="auto"><p>ok</p></li></ol>
05_02_00__container_blocks__list_items__017:
canonical: |
<p>-1. not ok</p>
@@ -3515,7 +3515,7 @@
</li>
</ul>
wysiwyg: |-
- <ul bullet="*"><li><p>foo</p><pre class="content-editor-code-block undefined code highlight"><code>bar</code></pre></li></ul>
+ <ul dir="auto" bullet="*"><li dir="auto"><p>foo</p><pre dir="auto" class="content-editor-code-block undefined code highlight"><code>bar</code></pre></li></ul>
05_02_00__container_blocks__list_items__019:
canonical: |
<ol start="10">
@@ -3536,7 +3536,7 @@
</li>
</ol>
wysiwyg: |-
- <ol parens="false"><li><p>foo</p><pre class="content-editor-code-block undefined code highlight"><code>bar</code></pre></li></ol>
+ <ol dir="auto" parens="false"><li dir="auto"><p>foo</p><pre dir="auto" class="content-editor-code-block undefined code highlight"><code>bar</code></pre></li></ol>
05_02_00__container_blocks__list_items__020:
canonical: |
<pre><code>indented code
@@ -3555,9 +3555,9 @@
<copy-code></copy-code>
</div>
wysiwyg: |-
- <pre class="content-editor-code-block undefined code highlight"><code>indented code</code></pre>
+ <pre dir="auto" class="content-editor-code-block undefined code highlight"><code>indented code</code></pre>
<p>paragraph</p>
- <pre class="content-editor-code-block undefined code highlight"><code>more code</code></pre>
+ <pre dir="auto" class="content-editor-code-block undefined code highlight"><code>more code</code></pre>
05_02_00__container_blocks__list_items__021:
canonical: |
<ol>
@@ -3584,7 +3584,7 @@
</li>
</ol>
wysiwyg: |-
- <ol parens="false"><li><p></p><pre class="content-editor-code-block undefined code highlight"><code>indented code</code></pre><p>paragraph</p><pre class="content-editor-code-block undefined code highlight"><code>more code</code></pre></li></ol>
+ <ol dir="auto" parens="false"><li dir="auto"><p></p><pre dir="auto" class="content-editor-code-block undefined code highlight"><code>indented code</code></pre><p>paragraph</p><pre dir="auto" class="content-editor-code-block undefined code highlight"><code>more code</code></pre></li></ol>
05_02_00__container_blocks__list_items__022:
canonical: |
<ol>
@@ -3611,7 +3611,7 @@
</li>
</ol>
wysiwyg: |-
- <ol parens="false"><li><p></p><pre class="content-editor-code-block undefined code highlight"><code> indented code</code></pre><p>paragraph</p><pre class="content-editor-code-block undefined code highlight"><code>more code</code></pre></li></ol>
+ <ol dir="auto" parens="false"><li dir="auto"><p></p><pre dir="auto" class="content-editor-code-block undefined code highlight"><code> indented code</code></pre><p>paragraph</p><pre dir="auto" class="content-editor-code-block undefined code highlight"><code>more code</code></pre></li></ol>
05_02_00__container_blocks__list_items__023:
canonical: |
<p>foo</p>
@@ -3634,7 +3634,7 @@
</ul>
<p data-sourcepos="3:3-3:5" dir="auto">bar</p>
wysiwyg: |-
- <ul bullet="*"><li><p>foo</p></li></ul>
+ <ul dir="auto" bullet="*"><li dir="auto"><p>foo</p></li></ul>
<p>bar</p>
05_02_00__container_blocks__list_items__025:
canonical: |
@@ -3652,7 +3652,7 @@
</li>
</ul>
wysiwyg: |-
- <ul bullet="*"><li><p>foo</p><p>bar</p></li></ul>
+ <ul dir="auto" bullet="*"><li dir="auto"><p>foo</p><p>bar</p></li></ul>
05_02_00__container_blocks__list_items__026:
canonical: |
<ul>
@@ -3683,7 +3683,7 @@
</li>
</ul>
wysiwyg: |-
- <ul bullet="*"><li><p>foo</p></li><li><p></p><pre class="content-editor-code-block undefined code highlight"><code>bar</code></pre></li><li><p></p><pre class="content-editor-code-block undefined code highlight"><code>baz</code></pre></li></ul>
+ <ul dir="auto" bullet="*"><li dir="auto"><p>foo</p></li><li dir="auto"><p></p><pre dir="auto" class="content-editor-code-block undefined code highlight"><code>bar</code></pre></li><li dir="auto"><p></p><pre dir="auto" class="content-editor-code-block undefined code highlight"><code>baz</code></pre></li></ul>
05_02_00__container_blocks__list_items__027:
canonical: |
<ul>
@@ -3694,7 +3694,7 @@
<li data-sourcepos="1:1-2:5">foo</li>
</ul>
wysiwyg: |-
- <ul bullet="*"><li><p>foo</p></li></ul>
+ <ul dir="auto" bullet="*"><li dir="auto"><p>foo</p></li></ul>
05_02_00__container_blocks__list_items__028:
canonical: |
<ul>
@@ -3708,7 +3708,7 @@
</ul>
<p data-sourcepos="3:3-3:5" dir="auto">foo</p>
wysiwyg: |-
- <ul bullet="*"><li><p></p></li></ul>
+ <ul dir="auto" bullet="*"><li dir="auto"><p></p></li></ul>
<p>foo</p>
05_02_00__container_blocks__list_items__029:
canonical: |
@@ -3725,7 +3725,7 @@
<li data-sourcepos="3:1-3:5">bar</li>
</ul>
wysiwyg: |-
- <ul bullet="*"><li><p>foo</p></li><li><p></p></li><li><p>bar</p></li></ul>
+ <ul dir="auto" bullet="*"><li dir="auto"><p>foo</p></li><li dir="auto"><p></p></li><li dir="auto"><p>bar</p></li></ul>
05_02_00__container_blocks__list_items__030:
canonical: |
<ul>
@@ -3741,7 +3741,7 @@
<li data-sourcepos="3:1-3:5">bar</li>
</ul>
wysiwyg: |-
- <ul bullet="*"><li><p>foo</p></li><li><p></p></li><li><p>bar</p></li></ul>
+ <ul dir="auto" bullet="*"><li dir="auto"><p>foo</p></li><li dir="auto"><p></p></li><li dir="auto"><p>bar</p></li></ul>
05_02_00__container_blocks__list_items__031:
canonical: |
<ol>
@@ -3757,7 +3757,7 @@
<li data-sourcepos="3:1-3:6">bar</li>
</ol>
wysiwyg: |-
- <ol parens="false"><li><p>foo</p></li><li><p></p></li><li><p>bar</p></li></ol>
+ <ol dir="auto" parens="false"><li dir="auto"><p>foo</p></li><li dir="auto"><p></p></li><li dir="auto"><p>bar</p></li></ol>
05_02_00__container_blocks__list_items__032:
canonical: |
<ul>
@@ -3769,7 +3769,7 @@
</li>
</ul>
wysiwyg: |-
- <ul bullet="*"><li><p></p></li></ul>
+ <ul dir="auto" bullet="*"><li dir="auto"><p></p></li></ul>
05_02_00__container_blocks__list_items__033:
canonical: |
<p>foo
@@ -3814,8 +3814,8 @@
</li>
</ol>
wysiwyg: |-
- <ol parens="false"><li><p>A paragraph
- with two lines.</p><pre class="content-editor-code-block undefined code highlight"><code>indented code</code></pre><blockquote multiline="false"><p>A block quote.</p></blockquote></li></ol>
+ <ol dir="auto" parens="false"><li dir="auto"><p>A paragraph
+ with two lines.</p><pre dir="auto" class="content-editor-code-block undefined code highlight"><code>indented code</code></pre><blockquote dir="auto" multiline="false"><p>A block quote.</p></blockquote></li></ol>
05_02_00__container_blocks__list_items__035:
canonical: |
<ol>
@@ -3844,8 +3844,8 @@
</li>
</ol>
wysiwyg: |-
- <ol parens="false"><li><p>A paragraph
- with two lines.</p><pre class="content-editor-code-block undefined code highlight"><code>indented code</code></pre><blockquote multiline="false"><p>A block quote.</p></blockquote></li></ol>
+ <ol dir="auto" parens="false"><li dir="auto"><p>A paragraph
+ with two lines.</p><pre dir="auto" class="content-editor-code-block undefined code highlight"><code>indented code</code></pre><blockquote dir="auto" multiline="false"><p>A block quote.</p></blockquote></li></ol>
05_02_00__container_blocks__list_items__036:
canonical: |
<ol>
@@ -3874,8 +3874,8 @@
</li>
</ol>
wysiwyg: |-
- <ol parens="false"><li><p>A paragraph
- with two lines.</p><pre class="content-editor-code-block undefined code highlight"><code>indented code</code></pre><blockquote multiline="false"><p>A block quote.</p></blockquote></li></ol>
+ <ol dir="auto" parens="false"><li dir="auto"><p>A paragraph
+ with two lines.</p><pre dir="auto" class="content-editor-code-block undefined code highlight"><code>indented code</code></pre><blockquote dir="auto" multiline="false"><p>A block quote.</p></blockquote></li></ol>
05_02_00__container_blocks__list_items__037:
canonical: |
<pre><code>1. A paragraph
@@ -3896,7 +3896,7 @@
<copy-code></copy-code>
</div>
wysiwyg: |-
- <pre class="content-editor-code-block undefined code highlight"><code>1. A paragraph
+ <pre dir="auto" class="content-editor-code-block undefined code highlight"><code>1. A paragraph
with two lines.
indented code
@@ -3930,8 +3930,8 @@
</li>
</ol>
wysiwyg: |-
- <ol parens="false"><li><p>A paragraph
- with two lines.</p><pre class="content-editor-code-block undefined code highlight"><code>indented code</code></pre><blockquote multiline="false"><p>A block quote.</p></blockquote></li></ol>
+ <ol dir="auto" parens="false"><li dir="auto"><p>A paragraph
+ with two lines.</p><pre dir="auto" class="content-editor-code-block undefined code highlight"><code>indented code</code></pre><blockquote dir="auto" multiline="false"><p>A block quote.</p></blockquote></li></ol>
05_02_00__container_blocks__list_items__039:
canonical: |
<ol>
@@ -3944,7 +3944,7 @@
with two lines.</li>
</ol>
wysiwyg: |-
- <ol parens="false"><li><p>A paragraph
+ <ol dir="auto" parens="false"><li dir="auto"><p>A paragraph
with two lines.</p></li></ol>
05_02_00__container_blocks__list_items__040:
canonical: |
@@ -3970,7 +3970,7 @@
</ol>
</blockquote>
wysiwyg: |-
- <blockquote multiline="false"><ol parens="false"><li><p></p><blockquote multiline="false"><p>Blockquote
+ <blockquote dir="auto" multiline="false"><ol dir="auto" parens="false"><li dir="auto"><p></p><blockquote dir="auto" multiline="false"><p>Blockquote
continued here.</p></blockquote></li></ol></blockquote>
05_02_00__container_blocks__list_items__041:
canonical: |
@@ -3996,7 +3996,7 @@
</ol>
</blockquote>
wysiwyg: |-
- <blockquote multiline="false"><ol parens="false"><li><p></p><blockquote multiline="false"><p>Blockquote
+ <blockquote dir="auto" multiline="false"><ol dir="auto" parens="false"><li dir="auto"><p></p><blockquote dir="auto" multiline="false"><p>Blockquote
continued here.</p></blockquote></li></ol></blockquote>
05_02_00__container_blocks__list_items__042:
canonical: |
@@ -4032,7 +4032,7 @@
</li>
</ul>
wysiwyg: |-
- <ul bullet="*"><li><p>foo</p><ul bullet="*"><li><p>bar</p><ul bullet="*"><li><p>baz</p><ul bullet="*"><li><p>boo</p></li></ul></li></ul></li></ul></li></ul>
+ <ul dir="auto" bullet="*"><li dir="auto"><p>foo</p><ul dir="auto" bullet="*"><li dir="auto"><p>bar</p><ul dir="auto" bullet="*"><li dir="auto"><p>baz</p><ul dir="auto" bullet="*"><li dir="auto"><p>boo</p></li></ul></li></ul></li></ul></li></ul>
05_02_00__container_blocks__list_items__043:
canonical: |
<ul>
@@ -4049,7 +4049,7 @@
<li data-sourcepos="4:4-4:8">boo</li>
</ul>
wysiwyg: |-
- <ul bullet="*"><li><p>foo</p></li><li><p>bar</p></li><li><p>baz</p></li><li><p>boo</p></li></ul>
+ <ul dir="auto" bullet="*"><li dir="auto"><p>foo</p></li><li dir="auto"><p>bar</p></li><li dir="auto"><p>baz</p></li><li dir="auto"><p>boo</p></li></ul>
05_02_00__container_blocks__list_items__044:
canonical: |
<ol start="10">
@@ -4068,7 +4068,7 @@
</li>
</ol>
wysiwyg: |-
- <ol parens="false"><li><p>foo</p><ul bullet="*"><li><p>bar</p></li></ul></li></ol>
+ <ol dir="auto" parens="false"><li dir="auto"><p>foo</p><ul dir="auto" bullet="*"><li dir="auto"><p>bar</p></li></ul></li></ol>
05_02_00__container_blocks__list_items__045:
canonical: |
<ol start="10">
@@ -4085,8 +4085,8 @@
<li data-sourcepos="2:4-2:8">bar</li>
</ul>
wysiwyg: |-
- <ol parens="false"><li><p>foo</p></li></ol>
- <ul bullet="*"><li><p>bar</p></li></ul>
+ <ol dir="auto" parens="false"><li dir="auto"><p>foo</p></li></ol>
+ <ul dir="auto" bullet="*"><li dir="auto"><p>bar</p></li></ul>
05_02_00__container_blocks__list_items__046:
canonical: |
<ul>
@@ -4105,7 +4105,7 @@
</li>
</ul>
wysiwyg: |-
- <ul bullet="*"><li><p></p><ul bullet="*"><li><p>foo</p></li></ul></li></ul>
+ <ul dir="auto" bullet="*"><li dir="auto"><p></p><ul dir="auto" bullet="*"><li dir="auto"><p>foo</p></li></ul></li></ul>
05_02_00__container_blocks__list_items__047:
canonical: |
<ol>
@@ -4132,7 +4132,7 @@
</li>
</ol>
wysiwyg: |-
- <ol parens="false"><li><p></p><ul bullet="*"><li><p></p><ol parens="false"><li><p>foo</p></li></ol></li></ul></li></ol>
+ <ol dir="auto" parens="false"><li dir="auto"><p></p><ul dir="auto" bullet="*"><li dir="auto"><p></p><ol dir="auto" parens="false"><li dir="auto"><p>foo</p></li></ol></li></ul></li></ol>
05_02_00__container_blocks__list_items__048:
canonical: |
<ul>
@@ -4155,7 +4155,7 @@
baz</li>
</ul>
wysiwyg: |-
- <ul bullet="*"><li><p></p><h1>Foo</h1></li><li><p></p><h2>Bar</h2><p>
+ <ul dir="auto" bullet="*"><li dir="auto"><p></p><h1 dir="auto">Foo</h1></li><li dir="auto"><p></p><h2 dir="auto">Bar</h2><p>
baz</p></li></ul>
05_04_00__container_blocks__lists__001:
canonical: |
@@ -4175,8 +4175,8 @@
<li data-sourcepos="3:1-3:5">baz</li>
</ul>
wysiwyg: |-
- <ul bullet="*"><li><p>foo</p></li><li><p>bar</p></li></ul>
- <ul bullet="*"><li><p>baz</p></li></ul>
+ <ul dir="auto" bullet="*"><li dir="auto"><p>foo</p></li><li dir="auto"><p>bar</p></li></ul>
+ <ul dir="auto" bullet="*"><li dir="auto"><p>baz</p></li></ul>
05_04_00__container_blocks__lists__002:
canonical: |
<ol>
@@ -4195,8 +4195,8 @@
<li data-sourcepos="3:1-3:6">baz</li>
</ol>
wysiwyg: |-
- <ol parens="false"><li><p>foo</p></li><li><p>bar</p></li></ol>
- <ol parens="false"><li><p>baz</p></li></ol>
+ <ol dir="auto" parens="false"><li dir="auto"><p>foo</p></li><li dir="auto"><p>bar</p></li></ol>
+ <ol dir="auto" parens="false"><li dir="auto"><p>baz</p></li></ol>
05_04_00__container_blocks__lists__003:
canonical: |
<p>Foo</p>
@@ -4212,7 +4212,7 @@
</ul>
wysiwyg: |-
<p>Foo</p>
- <ul bullet="*"><li><p>bar</p></li><li><p>baz</p></li></ul>
+ <ul dir="auto" bullet="*"><li dir="auto"><p>bar</p></li><li dir="auto"><p>baz</p></li></ul>
05_04_00__container_blocks__lists__004:
canonical: |
<p>The number of windows in my house is
@@ -4236,7 +4236,7 @@
</ol>
wysiwyg: |-
<p>The number of windows in my house is</p>
- <ol parens="false"><li><p>The number of doors is 6.</p></li></ol>
+ <ol dir="auto" parens="false"><li dir="auto"><p>The number of doors is 6.</p></li></ol>
05_04_00__container_blocks__lists__006:
canonical: |
<ul>
@@ -4263,7 +4263,7 @@
</li>
</ul>
wysiwyg: |-
- <ul bullet="*"><li><p>foo</p></li><li><p>bar</p></li><li><p>baz</p></li></ul>
+ <ul dir="auto" bullet="*"><li dir="auto"><p>foo</p></li><li dir="auto"><p>bar</p></li><li dir="auto"><p>baz</p></li></ul>
05_04_00__container_blocks__lists__007:
canonical: |
<ul>
@@ -4296,7 +4296,7 @@
</li>
</ul>
wysiwyg: |-
- <ul bullet="*"><li><p>foo</p><ul bullet="*"><li><p>bar</p><ul bullet="*"><li><p>baz</p><p>bim</p></li></ul></li></ul></li></ul>
+ <ul dir="auto" bullet="*"><li dir="auto"><p>foo</p><ul dir="auto" bullet="*"><li dir="auto"><p>bar</p><ul dir="auto" bullet="*"><li dir="auto"><p>baz</p><p>bim</p></li></ul></li></ul></li></ul>
05_04_00__container_blocks__lists__008:
canonical: |
<ul>
@@ -4319,8 +4319,8 @@
<li data-sourcepos="7:1-7:5">bim</li>
</ul>
wysiwyg: |-
- <ul bullet="*"><li><p>foo</p></li><li><p>bar</p></li></ul>
- <ul bullet="*"><li><p>baz</p></li><li><p>bim</p></li></ul>
+ <ul dir="auto" bullet="*"><li dir="auto"><p>foo</p></li><li dir="auto"><p>bar</p></li></ul>
+ <ul dir="auto" bullet="*"><li dir="auto"><p>baz</p></li><li dir="auto"><p>bim</p></li></ul>
05_04_00__container_blocks__lists__009:
canonical: |
<ul>
@@ -4351,8 +4351,8 @@
<copy-code></copy-code>
</div>
wysiwyg: |-
- <ul bullet="*"><li><p>foo</p><p>notcode</p></li><li><p>foo</p></li></ul>
- <pre class="content-editor-code-block undefined code highlight"><code>code</code></pre>
+ <ul dir="auto" bullet="*"><li dir="auto"><p>foo</p><p>notcode</p></li><li dir="auto"><p>foo</p></li></ul>
+ <pre dir="auto" class="content-editor-code-block undefined code highlight"><code>code</code></pre>
05_04_00__container_blocks__lists__010:
canonical: |
<ul>
@@ -4375,7 +4375,7 @@
<li data-sourcepos="7:1-7:3">g</li>
</ul>
wysiwyg: |-
- <ul bullet="*"><li><p>a</p></li><li><p>b</p></li><li><p>c</p></li><li><p>d</p></li><li><p>e</p></li><li><p>f</p></li><li><p>g</p></li></ul>
+ <ul dir="auto" bullet="*"><li dir="auto"><p>a</p></li><li dir="auto"><p>b</p></li><li dir="auto"><p>c</p></li><li dir="auto"><p>d</p></li><li dir="auto"><p>e</p></li><li dir="auto"><p>f</p></li><li dir="auto"><p>g</p></li></ul>
05_04_00__container_blocks__lists__011:
canonical: |
<ol>
@@ -4402,7 +4402,7 @@
</li>
</ol>
wysiwyg: |-
- <ol parens="false"><li><p>a</p></li><li><p>b</p></li><li><p>c</p></li></ol>
+ <ol dir="auto" parens="false"><li dir="auto"><p>a</p></li><li dir="auto"><p>b</p></li><li dir="auto"><p>c</p></li></ol>
05_04_00__container_blocks__lists__012:
canonical: |
<ul>
@@ -4421,7 +4421,7 @@
- e</li>
</ul>
wysiwyg: |-
- <ul bullet="*"><li><p>a</p></li><li><p>b</p></li><li><p>c</p></li><li><p>d
+ <ul dir="auto" bullet="*"><li dir="auto"><p>a</p></li><li dir="auto"><p>b</p></li><li dir="auto"><p>c</p></li><li dir="auto"><p>d
- e</p></li></ul>
05_04_00__container_blocks__lists__013:
canonical: |
@@ -4449,8 +4449,8 @@
<copy-code></copy-code>
</div>
wysiwyg: |-
- <ol parens="false"><li><p>a</p></li><li><p>b</p></li></ol>
- <pre class="content-editor-code-block undefined code highlight"><code>3. c</code></pre>
+ <ol dir="auto" parens="false"><li dir="auto"><p>a</p></li><li dir="auto"><p>b</p></li></ol>
+ <pre dir="auto" class="content-editor-code-block undefined code highlight"><code>3. c</code></pre>
05_04_00__container_blocks__lists__014:
canonical: |
<ul>
@@ -4477,7 +4477,7 @@
</li>
</ul>
wysiwyg: |-
- <ul bullet="*"><li><p>a</p></li><li><p>b</p></li><li><p>c</p></li></ul>
+ <ul dir="auto" bullet="*"><li dir="auto"><p>a</p></li><li dir="auto"><p>b</p></li><li dir="auto"><p>c</p></li></ul>
05_04_00__container_blocks__lists__015:
canonical: |
<ul>
@@ -4501,7 +4501,7 @@
</li>
</ul>
wysiwyg: |-
- <ul bullet="*"><li><p>a</p></li><li><p></p></li><li><p>c</p></li></ul>
+ <ul dir="auto" bullet="*"><li dir="auto"><p>a</p></li><li dir="auto"><p></p></li><li dir="auto"><p>c</p></li></ul>
05_04_00__container_blocks__lists__016:
canonical: |
<ul>
@@ -4530,7 +4530,7 @@
</li>
</ul>
wysiwyg: |-
- <ul bullet="*"><li><p>a</p></li><li><p>b</p><p>c</p></li><li><p>d</p></li></ul>
+ <ul dir="auto" bullet="*"><li dir="auto"><p>a</p></li><li dir="auto"><p>b</p><p>c</p></li><li dir="auto"><p>d</p></li></ul>
05_04_00__container_blocks__lists__017:
canonical: |
<ul>
@@ -4557,7 +4557,7 @@
</li>
</ul>
wysiwyg: |-
- <ul bullet="*"><li><p>a</p></li><li><p>b</p><pre>[ref]: /url</pre></li><li><p>d</p></li></ul>
+ <ul dir="auto" bullet="*"><li dir="auto"><p>a</p></li><li dir="auto"><p>b</p><pre>[ref]: /url</pre></li><li dir="auto"><p>d</p></li></ul>
05_04_00__container_blocks__lists__018:
canonical: |
<ul>
@@ -4584,7 +4584,7 @@
<li data-sourcepos="7:1-7:3">c</li>
</ul>
wysiwyg: |-
- <ul bullet="*"><li><p>a</p></li><li><p></p><pre class="content-editor-code-block undefined code highlight"><code>b</code></pre></li><li><p>c</p></li></ul>
+ <ul dir="auto" bullet="*"><li dir="auto"><p>a</p></li><li dir="auto"><p></p><pre dir="auto" class="content-editor-code-block undefined code highlight"><code>b</code></pre></li><li dir="auto"><p>c</p></li></ul>
05_04_00__container_blocks__lists__019:
canonical: |
<ul>
@@ -4611,7 +4611,7 @@
<li data-sourcepos="5:1-5:3">d</li>
</ul>
wysiwyg: |-
- <ul bullet="*"><li><p>a</p><ul bullet="*"><li><p>b</p><p>c</p></li></ul></li><li><p>d</p></li></ul>
+ <ul dir="auto" bullet="*"><li dir="auto"><p>a</p><ul dir="auto" bullet="*"><li dir="auto"><p>b</p><p>c</p></li></ul></li><li dir="auto"><p>d</p></li></ul>
05_04_00__container_blocks__lists__020:
canonical: |
<ul>
@@ -4632,7 +4632,7 @@
<li data-sourcepos="4:1-4:3">c</li>
</ul>
wysiwyg: |-
- <ul bullet="*"><li><p>a</p><blockquote multiline="false"><p>b</p></blockquote></li><li><p>c</p></li></ul>
+ <ul dir="auto" bullet="*"><li dir="auto"><p>a</p><blockquote dir="auto" multiline="false"><p>b</p></blockquote></li><li dir="auto"><p>c</p></li></ul>
05_04_00__container_blocks__lists__021:
canonical: |
<ul>
@@ -4659,7 +4659,7 @@
<li data-sourcepos="6:1-6:3">d</li>
</ul>
wysiwyg: |-
- <ul bullet="*"><li><p>a</p><blockquote multiline="false"><p>b</p></blockquote><pre class="content-editor-code-block undefined code highlight"><code>c</code></pre></li><li><p>d</p></li></ul>
+ <ul dir="auto" bullet="*"><li dir="auto"><p>a</p><blockquote dir="auto" multiline="false"><p>b</p></blockquote><pre dir="auto" class="content-editor-code-block undefined code highlight"><code>c</code></pre></li><li dir="auto"><p>d</p></li></ul>
05_04_00__container_blocks__lists__022:
canonical: |
<ul>
@@ -4670,7 +4670,7 @@
<li data-sourcepos="1:1-1:3">a</li>
</ul>
wysiwyg: |-
- <ul bullet="*"><li><p>a</p></li></ul>
+ <ul dir="auto" bullet="*"><li dir="auto"><p>a</p></li></ul>
05_04_00__container_blocks__lists__023:
canonical: |
<ul>
@@ -4689,7 +4689,7 @@
</li>
</ul>
wysiwyg: |-
- <ul bullet="*"><li><p>a</p><ul bullet="*"><li><p>b</p></li></ul></li></ul>
+ <ul dir="auto" bullet="*"><li dir="auto"><p>a</p><ul dir="auto" bullet="*"><li dir="auto"><p>b</p></li></ul></li></ul>
05_04_00__container_blocks__lists__024:
canonical: |
<ol>
@@ -4710,7 +4710,7 @@
</li>
</ol>
wysiwyg: |-
- <ol parens="false"><li><p></p><pre class="content-editor-code-block undefined code highlight"><code>foo</code></pre><p>bar</p></li></ol>
+ <ol dir="auto" parens="false"><li dir="auto"><p></p><pre dir="auto" class="content-editor-code-block undefined code highlight"><code>foo</code></pre><p>bar</p></li></ol>
05_04_00__container_blocks__lists__025:
canonical: |
<ul>
@@ -4733,7 +4733,7 @@
</li>
</ul>
wysiwyg: |-
- <ul bullet="*"><li><p>foo</p><ul bullet="*"><li><p>bar</p></li></ul><p>baz</p></li></ul>
+ <ul dir="auto" bullet="*"><li dir="auto"><p>foo</p><ul dir="auto" bullet="*"><li dir="auto"><p>bar</p></li></ul><p>baz</p></li></ul>
05_04_00__container_blocks__lists__026:
canonical: |
<ul>
@@ -4770,7 +4770,7 @@
</li>
</ul>
wysiwyg: |-
- <ul bullet="*"><li><p>a</p><ul bullet="*"><li><p>b</p></li><li><p>c</p></li></ul></li><li><p>d</p><ul bullet="*"><li><p>e</p></li><li><p>f</p></li></ul></li></ul>
+ <ul dir="auto" bullet="*"><li dir="auto"><p>a</p><ul dir="auto" bullet="*"><li dir="auto"><p>b</p></li><li dir="auto"><p>c</p></li></ul></li><li dir="auto"><p>d</p><ul dir="auto" bullet="*"><li dir="auto"><p>e</p></li><li dir="auto"><p>f</p></li></ul></li></ul>
06_01_00__inlines__001:
canonical: |
<p><code>hi</code>lo`</p>
@@ -4854,7 +4854,7 @@
<copy-code></copy-code>
</div>
wysiwyg: |-
- <pre class="content-editor-code-block undefined code highlight"><code>\[\]</code></pre>
+ <pre dir="auto" class="content-editor-code-block undefined code highlight"><code>\[\]</code></pre>
06_02_00__inlines__backslash_escapes__008:
canonical: |
<pre><code>\[\]
@@ -4865,7 +4865,7 @@
<copy-code></copy-code>
</div>
wysiwyg: |-
- <pre class="content-editor-code-block undefined code highlight"><code>\[\]</code></pre>
+ <pre dir="auto" class="content-editor-code-block undefined code highlight"><code>\[\]</code></pre>
06_02_00__inlines__backslash_escapes__009:
canonical: |
<p><a href="http://example.com?find=%5C*">http://example.com?find=\*</a></p>
@@ -4905,7 +4905,7 @@
<copy-code></copy-code>
</div>
wysiwyg: |-
- <pre language="foo+bar" class="content-editor-code-block undefined code highlight"><code>foo</code></pre>
+ <pre dir="auto" language="foo+bar" class="content-editor-code-block undefined code highlight"><code>foo</code></pre>
06_03_00__inlines__entity_and_numeric_character_references__001:
canonical: |
<p>  &amp; © Æ Ď
@@ -4995,7 +4995,7 @@
<copy-code></copy-code>
</div>
wysiwyg: |-
- <pre language="föö" class="content-editor-code-block undefined code highlight"><code>foo</code></pre>
+ <pre dir="auto" language="föö" class="content-editor-code-block undefined code highlight"><code>foo</code></pre>
06_03_00__inlines__entity_and_numeric_character_references__011:
canonical: |
<p><code>f&amp;ouml;&amp;ouml;</code></p>
@@ -5013,7 +5013,7 @@
<copy-code></copy-code>
</div>
wysiwyg: |-
- <pre class="content-editor-code-block undefined code highlight"><code>f&amp;ouml;f&amp;ouml;</code></pre>
+ <pre dir="auto" class="content-editor-code-block undefined code highlight"><code>f&amp;ouml;f&amp;ouml;</code></pre>
06_03_00__inlines__entity_and_numeric_character_references__013:
canonical: |
<p>*foo*
@@ -5037,7 +5037,7 @@
</ul>
wysiwyg: |-
<p>* foo</p>
- <ul bullet="*"><li><p>foo</p></li></ul>
+ <ul dir="auto" bullet="*"><li dir="auto"><p>foo</p></li></ul>
06_03_00__inlines__entity_and_numeric_character_references__015:
canonical: |
<p>foo
@@ -7460,7 +7460,7 @@
&lt;/blockquote&gt;</strong></p>
wysiwyg: |-
<p></p>
- <blockquote multiline="false"><p></p></blockquote>
+ <blockquote dir="auto" multiline="false"><p></p></blockquote>
06_13_00__inlines__hard_line_breaks__001:
canonical: |
<p>foo<br />
@@ -7580,7 +7580,7 @@
<h3 data-sourcepos="1:1-1:8" dir="auto">
<a id="user-content-foo" class="anchor" href="#foo" aria-hidden="true"></a>foo\</h3>
wysiwyg: |-
- <h3>foo\</h3>
+ <h3 dir="auto">foo\</h3>
06_13_00__inlines__hard_line_breaks__015:
canonical: |
<h3>foo</h3>
@@ -7588,7 +7588,7 @@
<h3 data-sourcepos="1:1-1:7" dir="auto">
<a id="user-content-foo" class="anchor" href="#foo" aria-hidden="true"></a>foo</h3>
wysiwyg: |-
- <h3>foo</h3>
+ <h3 dir="auto">foo</h3>
06_14_00__inlines__soft_line_breaks__001:
canonical: |
<p>foo
@@ -7645,7 +7645,7 @@
<task-button></task-button><input type="checkbox" class="task-list-item-checkbox" disabled> incomplete</li>
</ul>
wysiwyg: |-
- <ul start="1" parens="false" data-type="taskList"><li data-checked="false" data-type="taskItem"><label><input type="checkbox"><span></span></label><div><p>incomplete</p></div></li></ul>
+ <ul dir="auto" start="1" parens="false" data-type="taskList"><li dir="auto" data-checked="false" data-type="taskItem"><label><input type="checkbox"><span></span></label><div><p>incomplete</p></div></li></ul>
07_01_00__gitlab_official_specification_markdown__task_list_items__002:
canonical: |
<ul>
@@ -7661,7 +7661,7 @@
<task-button></task-button><input type="checkbox" class="task-list-item-checkbox" checked disabled> completed</li>
</ul>
wysiwyg: |-
- <ul start="1" parens="false" data-type="taskList"><li data-checked="true" data-type="taskItem"><label><input type="checkbox" checked="checked"><span></span></label><div><p>completed</p></div></li></ul>
+ <ul dir="auto" start="1" parens="false" data-type="taskList"><li dir="auto" data-checked="true" data-type="taskItem"><label><input type="checkbox" checked="checked"><span></span></label><div><p>completed</p></div></li></ul>
07_01_00__gitlab_official_specification_markdown__task_list_items__003:
canonical: |
<ul>
@@ -7763,7 +7763,7 @@
wysiwyg: |-
<p>text</p>
<hr>
- <h2>title: YAML front matter</h2>
+ <h2 dir="auto">title: YAML front matter</h2>
07_02_00__gitlab_official_specification_markdown__front_matter__005:
canonical: |
<hr>
@@ -7774,7 +7774,7 @@
<a id="user-content-title-yaml-front-matter" class="anchor" href="#title-yaml-front-matter" aria-hidden="true"></a>title: YAML front matter</h2>
wysiwyg: |-
<hr>
- <h2>title: YAML front matter</h2>
+ <h2 dir="auto">title: YAML front matter</h2>
07_03_00__gitlab_official_specification_markdown__table_of_contents__001:
canonical: |
<nav>
@@ -7797,8 +7797,8 @@
<a id="user-content-heading-2" class="anchor" href="#heading-2" aria-hidden="true"></a>Heading 2</h2>
wysiwyg: |-
<div class="table-of-contents gl-border-1 gl-border-solid gl-text-center gl-border-gray-100 gl-mb-5">Table of contents</div>
- <h1>Heading 1</h1>
- <h2>Heading 2</h2>
+ <h1 dir="auto">Heading 1</h1>
+ <h2 dir="auto">Heading 2</h2>
07_03_00__gitlab_official_specification_markdown__table_of_contents__002:
canonical: |
<nav>
@@ -7821,8 +7821,8 @@
<a id="user-content-heading-2" class="anchor" href="#heading-2" aria-hidden="true"></a>Heading 2</h2>
wysiwyg: |-
<div class="table-of-contents gl-border-1 gl-border-solid gl-text-center gl-border-gray-100 gl-mb-5">Table of contents</div>
- <h1>Heading 1</h1>
- <h2>Heading 2</h2>
+ <h1 dir="auto">Heading 1</h1>
+ <h2 dir="auto">Heading 2</h2>
07_03_00__gitlab_official_specification_markdown__table_of_contents__003:
canonical: |
<p>[[<em>TOC</em>]]text</p>
@@ -7851,7 +7851,7 @@
<a id="user-content-heading-1" class="anchor" href="#heading-1" aria-hidden="true"></a>Heading 1</h1>
wysiwyg: |-
<div class="table-of-contents gl-border-1 gl-border-solid gl-text-center gl-border-gray-100 gl-mb-5">Table of contents</div>
- <h1>Heading 1</h1>
+ <h1 dir="auto">Heading 1</h1>
08_01_00__gitlab_internal_extension_markdown__audio__001:
canonical: |
<p><audio src="audio.oga" title="audio title"></audio></p>
@@ -7990,9 +7990,9 @@
</li>
</ul>
wysiwyg: |-
- <ul bullet="*"><li><p><span class="media-container audio-container"><audio src="https://gitlab.com/1.mp3" controls="true" data-setup="{}" data-title="Sample Audio"></audio><a href="https://gitlab.com/1.mp3" class="with-attachment-icon">Sample Audio</a></span></p></li><li><p><span class="media-container video-container"><video src="https://gitlab.com/2.mp4" controls="true" data-setup="{}" data-title="Sample Video"></video><a href="https://gitlab.com/2.mp4" class="with-attachment-icon">Sample Video</a></span></p></li></ul>
- <ol parens="false"><li><p><span class="media-container video-container"><video src="https://gitlab.com/1.mp4" controls="true" data-setup="{}" data-title="Sample Video"></video><a href="https://gitlab.com/1.mp4" class="with-attachment-icon">Sample Video</a></span></p></li><li><p><span class="media-container audio-container"><audio src="https://gitlab.com/2.mp3" controls="true" data-setup="{}" data-title="Sample Audio"></audio><a href="https://gitlab.com/2.mp3" class="with-attachment-icon">Sample Audio</a></span></p></li></ol>
- <ul start="1" parens="false" data-type="taskList"><li data-checked="true" data-type="taskItem"><label><input type="checkbox" checked="checked"><span></span></label><div><p><span class="media-container audio-container"><audio src="https://gitlab.com/1.mp3" controls="true" data-setup="{}" data-title="Sample Audio"></audio><a href="https://gitlab.com/1.mp3" class="with-attachment-icon">Sample Audio</a></span></p></div></li><li data-checked="true" data-type="taskItem"><label><input type="checkbox" checked="checked"><span></span></label><div><p><span class="media-container audio-container"><audio src="https://gitlab.com/2.mp3" controls="true" data-setup="{}" data-title="Sample Audio"></audio><a href="https://gitlab.com/2.mp3" class="with-attachment-icon">Sample Audio</a></span></p></div></li><li data-checked="true" data-type="taskItem"><label><input type="checkbox" checked="checked"><span></span></label><div><p><span class="media-container video-container"><video src="https://gitlab.com/3.mp4" controls="true" data-setup="{}" data-title="Sample Video"></video><a href="https://gitlab.com/3.mp4" class="with-attachment-icon">Sample Video</a></span></p></div></li></ul>
+ <ul dir="auto" bullet="*"><li dir="auto"><p><span class="media-container audio-container"><audio src="https://gitlab.com/1.mp3" controls="true" data-setup="{}" data-title="Sample Audio"></audio><a href="https://gitlab.com/1.mp3" class="with-attachment-icon">Sample Audio</a></span></p></li><li dir="auto"><p><span class="media-container video-container"><video src="https://gitlab.com/2.mp4" controls="true" data-setup="{}" data-title="Sample Video"></video><a href="https://gitlab.com/2.mp4" class="with-attachment-icon">Sample Video</a></span></p></li></ul>
+ <ol dir="auto" parens="false"><li dir="auto"><p><span class="media-container video-container"><video src="https://gitlab.com/1.mp4" controls="true" data-setup="{}" data-title="Sample Video"></video><a href="https://gitlab.com/1.mp4" class="with-attachment-icon">Sample Video</a></span></p></li><li dir="auto"><p><span class="media-container audio-container"><audio src="https://gitlab.com/2.mp3" controls="true" data-setup="{}" data-title="Sample Audio"></audio><a href="https://gitlab.com/2.mp3" class="with-attachment-icon">Sample Audio</a></span></p></li></ol>
+ <ul dir="auto" start="1" parens="false" data-type="taskList"><li dir="auto" data-checked="true" data-type="taskItem"><label><input type="checkbox" checked="checked"><span></span></label><div><p><span class="media-container audio-container"><audio src="https://gitlab.com/1.mp3" controls="true" data-setup="{}" data-title="Sample Audio"></audio><a href="https://gitlab.com/1.mp3" class="with-attachment-icon">Sample Audio</a></span></p></div></li><li dir="auto" data-checked="true" data-type="taskItem"><label><input type="checkbox" checked="checked"><span></span></label><div><p><span class="media-container audio-container"><audio src="https://gitlab.com/2.mp3" controls="true" data-setup="{}" data-title="Sample Audio"></audio><a href="https://gitlab.com/2.mp3" class="with-attachment-icon">Sample Audio</a></span></p></div></li><li dir="auto" data-checked="true" data-type="taskItem"><label><input type="checkbox" checked="checked"><span></span></label><div><p><span class="media-container video-container"><video src="https://gitlab.com/3.mp4" controls="true" data-setup="{}" data-title="Sample Video"></video><a href="https://gitlab.com/3.mp4" class="with-attachment-icon">Sample Video</a></span></p></div></li></ul>
08_04_10__gitlab_internal_extension_markdown__migrated_golden_master_examples__blockquote__001:
canonical: |
TODO: Write canonical HTML for this example
@@ -8002,7 +8002,7 @@
<p data-sourcepos="3:3-3:21">This is another one</p>
</blockquote>
wysiwyg: |-
- <blockquote multiline="false"><p>This is a blockquote</p><p>This is another one</p></blockquote>
+ <blockquote dir="auto" multiline="false"><p>This is a blockquote</p><p>This is another one</p></blockquote>
08_04_11__gitlab_internal_extension_markdown__migrated_golden_master_examples__bold__001:
canonical: |
TODO: Write canonical HTML for this example
@@ -8023,7 +8023,7 @@
</li>
</ul>
wysiwyg: |-
- <ul bullet="*"><li><p>list item 1</p></li><li><p>list item 2</p><ul bullet="*"><li><p>embedded list item 3</p></li></ul></li></ul>
+ <ul dir="auto" bullet="*"><li dir="auto"><p>list item 1</p></li><li dir="auto"><p>list item 2</p><ul dir="auto" bullet="*"><li dir="auto"><p>embedded list item 3</p></li></ul></li></ul>
08_04_13__gitlab_internal_extension_markdown__migrated_golden_master_examples__bullet_list_style_2__001:
canonical: |
TODO: Write canonical HTML for this example
@@ -8037,7 +8037,7 @@
</li>
</ul>
wysiwyg: |-
- <ul bullet="*"><li><p>list item 1</p></li><li><p>list item 2</p><ul bullet="*"><li><p>embedded list item 3</p></li></ul></li></ul>
+ <ul dir="auto" bullet="*"><li dir="auto"><p>list item 1</p></li><li dir="auto"><p>list item 2</p><ul dir="auto" bullet="*"><li dir="auto"><p>embedded list item 3</p></li></ul></li></ul>
08_04_14__gitlab_internal_extension_markdown__migrated_golden_master_examples__bullet_list_style_3__001:
canonical: |
TODO: Write canonical HTML for this example
@@ -8051,7 +8051,7 @@
</li>
</ul>
wysiwyg: |-
- <ul bullet="*"><li><p>list item 1</p></li><li><p>list item 2</p><ul bullet="*"><li><p>embedded list item 3</p></li></ul></li></ul>
+ <ul dir="auto" bullet="*"><li dir="auto"><p>list item 1</p></li><li dir="auto"><p>list item 2</p><ul dir="auto" bullet="*"><li dir="auto"><p>embedded list item 3</p></li></ul></li></ul>
08_04_15__gitlab_internal_extension_markdown__migrated_golden_master_examples__code_block_javascript__001:
canonical: |
TODO: Write canonical HTML for this example
@@ -8061,7 +8061,7 @@
<copy-code></copy-code>
</div>
wysiwyg: |-
- <pre language="javascript" class="content-editor-code-block undefined code highlight"><code> console.log('hello world')</code></pre>
+ <pre dir="auto" language="javascript" class="content-editor-code-block undefined code highlight"><code> console.log('hello world')</code></pre>
08_04_16__gitlab_internal_extension_markdown__migrated_golden_master_examples__code_block_plaintext__001:
canonical: |
TODO: Write canonical HTML for this example
@@ -8071,7 +8071,7 @@
<copy-code></copy-code>
</div>
wysiwyg: |-
- <pre class="content-editor-code-block undefined code highlight"><code> plaintext</code></pre>
+ <pre dir="auto" class="content-editor-code-block undefined code highlight"><code> plaintext</code></pre>
08_04_17__gitlab_internal_extension_markdown__migrated_golden_master_examples__code_block_unknown__001:
canonical: |
TODO: Write canonical HTML for this example
@@ -8081,7 +8081,7 @@
<copy-code></copy-code>
</div>
wysiwyg: |-
- <pre language="foobar" class="content-editor-code-block undefined code highlight"><code> custom_language = &gt;&gt; this &lt;&lt;</code></pre>
+ <pre dir="auto" language="foobar" class="content-editor-code-block undefined code highlight"><code> custom_language = &gt;&gt; this &lt;&lt;</code></pre>
08_04_18__gitlab_internal_extension_markdown__migrated_golden_master_examples__color_chips__001:
canonical: |
TODO: Write canonical HTML for this example
@@ -8098,7 +8098,7 @@
<li data-sourcepos="9:1-9:25"><code>HSLA(540,70%,50%,0.3)<span class="gfm-color_chip"><span style="background-color: HSLA(540,70%,50%,0.3);"></span></span></code></li>
</ul>
wysiwyg: |-
- <ul bullet="*"><li><p><code>#F00</code></p></li><li><p><code>#F00A</code></p></li><li><p><code>#FF0000</code></p></li><li><p><code>#FF0000AA</code></p></li><li><p><code>RGB(0,255,0)</code></p></li><li><p><code>RGB(0%,100%,0%)</code></p></li><li><p><code>RGBA(0,255,0,0.3)</code></p></li><li><p><code>HSL(540,70%,50%)</code></p></li><li><p><code>HSLA(540,70%,50%,0.3)</code></p></li></ul>
+ <ul dir="auto" bullet="*"><li dir="auto"><p><code>#F00</code></p></li><li dir="auto"><p><code>#F00A</code></p></li><li dir="auto"><p><code>#FF0000</code></p></li><li dir="auto"><p><code>#FF0000AA</code></p></li><li dir="auto"><p><code>RGB(0,255,0)</code></p></li><li dir="auto"><p><code>RGB(0%,100%,0%)</code></p></li><li dir="auto"><p><code>RGBA(0,255,0,0.3)</code></p></li><li dir="auto"><p><code>HSL(540,70%,50%)</code></p></li><li dir="auto"><p><code>HSLA(540,70%,50%,0.3)</code></p></li></ul>
08_04_19__gitlab_internal_extension_markdown__migrated_golden_master_examples__description_list__001:
canonical: |
TODO: Write canonical HTML for this example
@@ -8149,7 +8149,7 @@
<copy-code></copy-code>
</div>
wysiwyg: |-
- <pre language="nomnoml" class="content-editor-code-block undefined code highlight"><code> #stroke: #a86128
+ <pre dir="auto" language="nomnoml" class="content-editor-code-block undefined code highlight"><code> #stroke: #a86128
[&lt;frame&gt;Decorator pattern|
[&lt;abstract&gt;Component||+ operation()]
[Client] depends --&gt; [Component]
@@ -8246,8 +8246,8 @@
</ol>
</section>
wysiwyg: |-
- <p>A footnote reference tag looks like this: <sup identifier="1">1</sup></p>
- <p>This reference tag is a mix of letters and numbers. <sup identifier="footnote">footnote</sup></p>
+ <p>A footnote reference tag looks like this: <sup dir="auto" identifier="1">1</sup></p>
+ <p>This reference tag is a mix of letters and numbers. <sup dir="auto" identifier="footnote">footnote</sup></p>
<div node="footnoteDefinition(paragraph(&quot;This is the text inside a footnote.&quot;))" htmlattributes="[object Object]"><p>This is the text inside a footnote.</p></div>
<div node="footnoteDefinition(paragraph(&quot;This is another footnote.&quot;))" htmlattributes="[object Object]"><p>This is another footnote.</p></div>
08_04_29__gitlab_internal_extension_markdown__migrated_golden_master_examples__frontmatter_json__001:
@@ -8310,12 +8310,12 @@
<h6 data-sourcepos="11:1-11:16" dir="auto">
<a id="user-content-heading-6" class="anchor" href="#heading-6" aria-hidden="true"></a>Heading 6</h6>
wysiwyg: |-
- <h1>Heading 1</h1>
- <h2>Heading 2</h2>
- <h3>Heading 3</h3>
- <h4>Heading 4</h4>
- <h5>Heading 5</h5>
- <h6>Heading 6</h6>
+ <h1 dir="auto">Heading 1</h1>
+ <h2 dir="auto">Heading 2</h2>
+ <h3 dir="auto">Heading 3</h3>
+ <h4 dir="auto">Heading 4</h4>
+ <h5 dir="auto">Heading 5</h5>
+ <h6 dir="auto">Heading 6</h6>
08_04_34__gitlab_internal_extension_markdown__migrated_golden_master_examples__horizontal_rule__001:
canonical: |
TODO: Write canonical HTML for this example
@@ -8351,17 +8351,20 @@
+ H<sub>2</sub>O</li>\n<li data-sourcepos=\"15:1-15:130\">The <strong>Pythagorean
theorem</strong> is often expressed as <var>a<sup>2</sup></var> + <var>b<sup>2</sup></var>
= <var>c<sup>2</sup></var>\n</li>\n</ul>"
- wysiwyg: "<ul bullet=\"*\"><li><p>Content editor is<s>great</s></p><p>.</p></li><li><p>If
- the changes</p><p>, please</p><p>.</p></li><li><p>The English song</p><p> looks
- like this in Hebrew:</p><p>. In the computer's memory, this is stored as</p><p>.</p></li><li><p>
- by Edvard Munch. Painted in 1893.</p></li><li><p> is the standard markup language
- for creating web pages.</p></li><li><p>Do not forget to buy</p><p> today.</p></li><li><p>This
- is a paragraph and</p><p>.</p></li><li><p>The concert starts at</p><p> and you'll
- be able to enjoy the band for at least</p><p>.</p></li><li><p>Press</p><p> +</p><p>
- to copy text (Windows).</p></li><li><p>WWF's goal is to:</p><p> We hope they succeed.</p></li><li><p>The
- error occurred was:</p></li><li><p>The area of a triangle is: 1/2 x</p><p> x</p><p>,
- where</p><p> is the base, and</p><p> is the vertical height.</p></li><li><p></p></li><li><p>C</p><p>H</p><p>
- + O</p><p> \t CO</p><p> + H</p><p>O</p></li><li><p>The<strong>Pythagorean theorem</strong>
+ wysiwyg: "<ul dir=\"auto\" bullet=\"*\"><li dir=\"auto\"><p>Content editor is<s>great</s></p><p>.</p></li><li
+ dir=\"auto\"><p>If the changes</p><p>, please</p><p>.</p></li><li dir=\"auto\"><p>The
+ English song</p><p> looks like this in Hebrew:</p><p>. In the computer's memory,
+ this is stored as</p><p>.</p></li><li dir=\"auto\"><p> by Edvard Munch. Painted
+ in 1893.</p></li><li dir=\"auto\"><p> is the standard markup language for creating
+ web pages.</p></li><li dir=\"auto\"><p>Do not forget to buy</p><p> today.</p></li><li
+ dir=\"auto\"><p>This is a paragraph and</p><p>.</p></li><li dir=\"auto\"><p>The
+ concert starts at</p><p> and you'll be able to enjoy the band for at least</p><p>.</p></li><li
+ dir=\"auto\"><p>Press</p><p> +</p><p> to copy text (Windows).</p></li><li dir=\"auto\"><p>WWF's
+ goal is to:</p><p> We hope they succeed.</p></li><li dir=\"auto\"><p>The error
+ occurred was:</p></li><li dir=\"auto\"><p>The area of a triangle is: 1/2 x</p><p>
+ x</p><p>, where</p><p> is the base, and</p><p> is the vertical height.</p></li><li
+ dir=\"auto\"><p></p></li><li dir=\"auto\"><p>C</p><p>H</p><p> + O</p><p> \t CO</p><p>
+ + H</p><p>O</p></li><li dir=\"auto\"><p>The<strong>Pythagorean theorem</strong>
is often expressed as</p><p> +</p><p> =</p></li></ul>"
08_04_36__gitlab_internal_extension_markdown__migrated_golden_master_examples__image__001:
canonical: |
@@ -8386,7 +8389,7 @@
<li data-sourcepos="2:1-2:11"><span class="idiff left right addition">added</span></li>
</ul>
wysiwyg: |-
- <ul bullet="*"><li><p>{-deleted-}</p></li><li><p>{+added+}</p></li></ul>
+ <ul dir="auto" bullet="*"><li dir="auto"><p>{-deleted-}</p></li><li dir="auto"><p>{+added+}</p></li></ul>
08_04_39__gitlab_internal_extension_markdown__migrated_golden_master_examples__label__001:
canonical: |
TODO: Write canonical HTML for this example
@@ -8414,7 +8417,7 @@
wysiwyg: |-
<p>This math is inline $<code>a^2+b^2=c^2</code>$.</p>
<p>This is on a separate line:</p>
- <pre language="math" class="content-editor-code-block undefined code highlight"><code>a^2+b^2=c^2</code></pre>
+ <pre dir="auto" language="math" class="content-editor-code-block undefined code highlight"><code>a^2+b^2=c^2</code></pre>
08_04_42__gitlab_internal_extension_markdown__migrated_golden_master_examples__ordered_list__001:
canonical: |
TODO: Write canonical HTML for this example
@@ -8425,7 +8428,7 @@
<li data-sourcepos="3:1-3:14">list item 3</li>
</ol>
wysiwyg: |-
- <ol parens="false"><li><p>list item 1</p></li><li><p>list item 2</p></li><li><p>list item 3</p></li></ol>
+ <ol dir="auto" parens="false"><li dir="auto"><p>list item 1</p></li><li dir="auto"><p>list item 2</p></li><li dir="auto"><p>list item 3</p></li></ol>
08_04_43__gitlab_internal_extension_markdown__migrated_golden_master_examples__ordered_list_with_start_order__001:
canonical: |
TODO: Write canonical HTML for this example
@@ -8436,7 +8439,7 @@
<li data-sourcepos="3:1-3:16">list item 3</li>
</ol>
wysiwyg: |-
- <ol parens="false"><li><p>list item 1</p></li><li><p>list item 2</p></li><li><p>list item 3</p></li></ol>
+ <ol dir="auto" parens="false"><li dir="auto"><p>list item 1</p></li><li dir="auto"><p>list item 2</p></li><li dir="auto"><p>list item 3</p></li></ol>
08_04_44__gitlab_internal_extension_markdown__migrated_golden_master_examples__ordered_task_list__001:
canonical: |
TODO: Write canonical HTML for this example
@@ -8474,7 +8477,7 @@
<task-button></task-button><input type="checkbox" class="task-list-item-checkbox" disabled> example</li>
</ol>
wysiwyg: |-
- <ol start="1" parens="false" data-type="taskList"><li data-checked="true" data-type="taskItem"><label><input type="checkbox" checked="checked"><span></span></label><div><p>hello</p></div></li><li data-checked="true" data-type="taskItem"><label><input type="checkbox" checked="checked"><span></span></label><div><p>world</p></div></li><li data-checked="false" data-type="taskItem"><label><input type="checkbox"><span></span></label><div><p>example</p></div></li></ol>
+ <ol dir="auto" start="1" parens="false" data-type="taskList"><li dir="auto" data-checked="true" data-type="taskItem"><label><input type="checkbox" checked="checked"><span></span></label><div><p>hello</p></div></li><li dir="auto" data-checked="true" data-type="taskItem"><label><input type="checkbox" checked="checked"><span></span></label><div><p>world</p></div></li><li dir="auto" data-checked="false" data-type="taskItem"><label><input type="checkbox"><span></span></label><div><p>example</p></div></li></ol>
08_04_46__gitlab_internal_extension_markdown__migrated_golden_master_examples__reference_for_project_wiki__001:
canonical: |
TODO: Write canonical HTML for this example
@@ -8517,7 +8520,7 @@
<a id="user-content-content-after-table" class="anchor" href="#content-after-table" aria-hidden="true"></a>content after table</h1>
wysiwyg: |-
<table><tbody><tr><th colspan="1" rowspan="1"><p>header</p></th><th colspan="1" rowspan="1"><p>header</p></th></tr><tr><td colspan="1" rowspan="1"><p><code>code</code></p></td><td colspan="1" rowspan="1"><p>cell with <strong>bold</strong></p></td></tr><tr><td colspan="1" rowspan="1"><p><s>strike</s></p></td><td colspan="1" rowspan="1"><p>cell with <em>italic</em></p></td></tr></tbody></table>
- <h1>content after table</h1>
+ <h1 dir="auto">content after table</h1>
08_04_49__gitlab_internal_extension_markdown__migrated_golden_master_examples__table_of_contents__001:
canonical: |
TODO: Write canonical HTML for this example
@@ -8545,12 +8548,12 @@
<a id="user-content-i-dont-know" class="anchor" href="#i-dont-know" aria-hidden="true"></a>I don't know</h3>
wysiwyg: |-
<div class="table-of-contents gl-border-1 gl-border-solid gl-text-center gl-border-gray-100 gl-mb-5">Table of contents</div>
- <h1>Lorem</h1>
+ <h1 dir="auto">Lorem</h1>
<p>Well, that's just like... your opinion.. man.</p>
- <h2>Ipsum</h2>
- <h3>Dolar</h3>
- <h1>Sit amit</h1>
- <h3>I don't know</h3>
+ <h2 dir="auto">Ipsum</h2>
+ <h3 dir="auto">Dolar</h3>
+ <h1 dir="auto">Sit amit</h1>
+ <h3 dir="auto">I don't know</h3>
08_04_50__gitlab_internal_extension_markdown__migrated_golden_master_examples__task_list__001:
canonical: |
TODO: Write canonical HTML for this example
@@ -8645,5 +8648,5 @@
</ol>
</section>
wysiwyg: |-
- <p>footnote reference tag <sup identifier="fortytwo">fortytwo</sup></p>
+ <p>footnote reference tag <sup dir="auto" identifier="fortytwo">fortytwo</sup></p>
<div node="footnoteDefinition(paragraph(&quot;footnote text&quot;))" htmlattributes="[object Object]"><p>footnote text</p></div>
diff --git a/lib/api/ci/runner.rb b/lib/api/ci/runner.rb
index fcf283491ca..d8f4b228797 100644
--- a/lib/api/ci/runner.rb
+++ b/lib/api/ci/runner.rb
@@ -53,7 +53,7 @@ module API
result = ::Ci::Runners::RegisterRunnerService.new(params[:token], attributes).execute
@runner = result.success? ? result.payload[:runner] : nil
- forbidden! unless @runner
+ forbidden!(result.message) unless @runner
if @runner.persisted?
present @runner, with: Entities::Ci::RunnerRegistrationDetails
diff --git a/lib/gitlab/middleware/compressed_json.rb b/lib/gitlab/middleware/compressed_json.rb
index 80916eab5ac..cc485d8a5db 100644
--- a/lib/gitlab/middleware/compressed_json.rb
+++ b/lib/gitlab/middleware/compressed_json.rb
@@ -4,15 +4,23 @@ module Gitlab
module Middleware
class CompressedJson
COLLECTOR_PATH = '/api/v4/error_tracking/collector'
- PACKAGES_PATH = %r{
- \A/api/v4/ (?# prefix)
- (?:projects/
- (?<project_id>
- .+ (?# at least one character)
- )/
- )? (?# projects segment)
- packages/npm/-/npm/v1/security/
- (?:(?:advisories/bulk)|(?:audits/quick))\z (?# end)
+ INSTANCE_PACKAGES_PATH = %r{
+ \A/api/v4/packages/npm/-/npm/v1/security/
+ (?:(?:advisories/bulk)|(?:audits/quick))\z (?# end)
+ }xi.freeze
+ GROUP_PACKAGES_PATH = %r{
+ \A/api/v4/groups/
+ (?<id>
+ [a-zA-Z0-9%-._]{1,255}
+ )/-/packages/npm/-/npm/v1/security/
+ (?:(?:advisories/bulk)|(?:audits/quick))\z (?# end)
+ }xi.freeze
+ PROJECT_PACKAGES_PATH = %r{
+ \A/api/v4/projects/
+ (?<id>
+ [a-zA-Z0-9%-._]{1,255}
+ )/packages/npm/-/npm/v1/security/
+ (?:(?:advisories/bulk)|(?:audits/quick))\z (?# end)
}xi.freeze
MAXIMUM_BODY_SIZE = 200.kilobytes.to_i
UNSAFE_CHARACTERS = %r{[!"#&'()*+,./:;<>=?@\[\]^`{}|~$]}xi.freeze
@@ -76,16 +84,19 @@ module Gitlab
end
def match_packages_path?(env)
- match_data = env['PATH_INFO'].delete_prefix(relative_url).match(PACKAGES_PATH)
+ path = env['PATH_INFO'].delete_prefix(relative_url)
+ match_data = path.match(INSTANCE_PACKAGES_PATH) ||
+ path.match(PROJECT_PACKAGES_PATH) ||
+ path.match(GROUP_PACKAGES_PATH)
return false unless match_data
- return true unless match_data[:project_id] # instance level endpoint was matched
+ return true if match_data.names.empty? # instance level endpoint was matched
- url_encoded?(match_data[:project_id])
+ url_encoded?(match_data[:id])
end
- def url_encoded?(project_id)
- project_id !~ UNSAFE_CHARACTERS
+ def url_encoded?(id)
+ id !~ UNSAFE_CHARACTERS
end
end
end
diff --git a/locale/gitlab.pot b/locale/gitlab.pot
index 0265ade8ad2..da217acab98 100644
--- a/locale/gitlab.pot
+++ b/locale/gitlab.pot
@@ -8697,7 +8697,10 @@ msgstr ""
msgid "Cancel index deletion"
msgstr ""
-msgid "Cancel running"
+msgid "Cancel pipeline"
+msgstr ""
+
+msgid "Cancel the running pipeline"
msgstr ""
msgid "Cancel this job"
diff --git a/package.json b/package.json
index 327cc370d03..6ab6e397808 100644
--- a/package.json
+++ b/package.json
@@ -64,7 +64,6 @@
"@popperjs/core": "^2.11.2",
"@rails/actioncable": "6.1.4-7",
"@rails/ujs": "6.1.4-7",
- "@sourcegraph/code-host-integration": "0.0.91",
"@snowplow/browser-plugin-client-hints": "^3.9.0",
"@snowplow/browser-plugin-form-tracking": "^3.9.0",
"@snowplow/browser-plugin-ga-cookies": "^3.9.0",
@@ -72,6 +71,7 @@
"@snowplow/browser-plugin-performance-timing": "^3.9.0",
"@snowplow/browser-plugin-timezone": "^3.9.0",
"@snowplow/browser-tracker": "^3.9.0",
+ "@sourcegraph/code-host-integration": "0.0.91",
"@tiptap/core": "^2.0.3",
"@tiptap/extension-blockquote": "^2.0.3",
"@tiptap/extension-bold": "^2.0.3",
@@ -159,6 +159,7 @@
"lodash": "^4.17.20",
"lowlight": "^2.6.1",
"marked": "^4.0.18",
+ "marked-bidi": "^1.0.3",
"mathjax": "3",
"mdurl": "^1.0.1",
"mermaid": "10.1.0",
diff --git a/scripts/review_apps/base-config.yaml b/scripts/review_apps/base-config.yaml
index eb1b1faf9d4..9b77ff80d42 100644
--- a/scripts/review_apps/base-config.yaml
+++ b/scripts/review_apps/base-config.yaml
@@ -10,6 +10,9 @@ upgradeCheck:
global:
appConfig:
enableUsagePing: false
+ extraEnv:
+ GITLAB_LICENSE_MODE: test
+ CUSTOMER_PORTAL_URL: https://customers.staging.gitlab.com
image:
pullPolicy: Always
ingress:
diff --git a/scripts/review_apps/review-apps.sh b/scripts/review_apps/review-apps.sh
index 54924fb8a34..6ebb0f61a04 100755
--- a/scripts/review_apps/review-apps.sh
+++ b/scripts/review_apps/review-apps.sh
@@ -208,14 +208,14 @@ function create_application_secret() {
echoinfo "The 'shared-gitlab-initial-root-password' secret already exists in the ${namespace} namespace."
fi
- if [ -z "${REVIEW_APPS_EE_LICENSE_FILE}" ]; then echo "License not found" && return; fi
+ if [ -z "${QA_EE_LICENSE}" ]; then echo "License not found" && return; fi
gitlab_license_shared_secret=$(kubectl get secret --namespace "${namespace}" --no-headers -o=custom-columns=NAME:.metadata.name shared-gitlab-license 2> /dev/null | tail -n 1)
if [[ "${gitlab_license_shared_secret}" == "" ]]; then
echoinfo "Creating the 'shared-gitlab-license' secret in the "${namespace}" namespace..." true
kubectl create secret generic --namespace "${namespace}" \
"shared-gitlab-license" \
- --from-file=license="${REVIEW_APPS_EE_LICENSE_FILE}" \
+ --from-literal=license="${QA_EE_LICENSE}" \
--dry-run=client -o json | kubectl apply -f -
else
echoinfo "The 'shared-gitlab-license' secret already exists in the ${namespace} namespace."
@@ -356,7 +356,7 @@ HELM_CMD=$(cat << EOF
EOF
)
-if [ -n "${REVIEW_APPS_EE_LICENSE_FILE}" ]; then
+if [ -n "${QA_EE_LICENSE}" ]; then
HELM_CMD=$(cat << EOF
${HELM_CMD} \
--set global.gitlab.license.secret="shared-gitlab-license"
diff --git a/spec/controllers/admin/integrations_controller_spec.rb b/spec/controllers/admin/integrations_controller_spec.rb
index fed96f6a6c7..9e2a2900b33 100644
--- a/spec/controllers/admin/integrations_controller_spec.rb
+++ b/spec/controllers/admin/integrations_controller_spec.rb
@@ -6,6 +6,7 @@ RSpec.describe Admin::IntegrationsController do
let(:admin) { create(:admin) }
before do
+ stub_feature_flags(remove_monitor_metrics: false)
sign_in(admin)
end
diff --git a/spec/controllers/groups/settings/integrations_controller_spec.rb b/spec/controllers/groups/settings/integrations_controller_spec.rb
index 377c38ce087..3ae43c8ab7c 100644
--- a/spec/controllers/groups/settings/integrations_controller_spec.rb
+++ b/spec/controllers/groups/settings/integrations_controller_spec.rb
@@ -7,6 +7,7 @@ RSpec.describe Groups::Settings::IntegrationsController do
let_it_be(:group) { create(:group) }
before do
+ stub_feature_flags(remove_monitor_metrics: false)
sign_in(user)
end
diff --git a/spec/features/admin/integrations/instance_integrations_spec.rb b/spec/features/admin/integrations/instance_integrations_spec.rb
index 3b2ed1d9810..d963aa700eb 100644
--- a/spec/features/admin/integrations/instance_integrations_spec.rb
+++ b/spec/features/admin/integrations/instance_integrations_spec.rb
@@ -5,6 +5,10 @@ require 'spec_helper'
RSpec.describe 'Instance integrations', :js, feature_category: :integrations do
include_context 'instance integration activation'
+ before do
+ stub_feature_flags(remove_monitor_metrics: false)
+ end
+
it_behaves_like 'integration settings form' do
let(:integrations) { Integration.find_or_initialize_all_non_project_specific(Integration.for_instance) }
diff --git a/spec/features/commits_spec.rb b/spec/features/commits_spec.rb
index aacba6d2af8..c38ae0c2b0d 100644
--- a/spec/features/commits_spec.rb
+++ b/spec/features/commits_spec.rb
@@ -107,7 +107,7 @@ RSpec.describe 'Commits', feature_category: :source_code_management do
describe 'Cancel all builds' do
it 'cancels commit', :js, :sidekiq_might_not_need_inline do
visit pipeline_path(pipeline)
- click_on 'Cancel running'
+ click_on 'Cancel pipeline'
expect(page).to have_content 'canceled'
end
end
@@ -133,7 +133,7 @@ RSpec.describe 'Commits', feature_category: :source_code_management do
expect(page).to have_content pipeline.sha[0..7]
expect(page).to have_content pipeline.git_commit_message.gsub!(/\s+/, ' ')
expect(page).to have_content pipeline.user.name
- expect(page).not_to have_link('Cancel running')
+ expect(page).not_to have_link('Cancel pipeline')
expect(page).not_to have_link('Retry')
end
@@ -156,7 +156,7 @@ RSpec.describe 'Commits', feature_category: :source_code_management do
expect(page).to have_content pipeline.git_commit_message.gsub!(/\s+/, ' ')
expect(page).to have_content pipeline.user.name
- expect(page).not_to have_link('Cancel running')
+ expect(page).not_to have_link('Cancel pipeline')
expect(page).not_to have_link('Retry')
end
end
diff --git a/spec/features/groups/integrations/group_integrations_spec.rb b/spec/features/groups/integrations/group_integrations_spec.rb
index 0d65fa5964b..8cddda91e89 100644
--- a/spec/features/groups/integrations/group_integrations_spec.rb
+++ b/spec/features/groups/integrations/group_integrations_spec.rb
@@ -5,6 +5,10 @@ require 'spec_helper'
RSpec.describe 'Group integrations', :js do
include_context 'group integration activation'
+ before do
+ stub_feature_flags(remove_monitor_metrics: false)
+ end
+
it_behaves_like 'integration settings form' do
let(:integrations) { Integration.find_or_initialize_all_non_project_specific(Integration.for_group(group)) }
@@ -12,4 +16,16 @@ RSpec.describe 'Group integrations', :js do
visit_group_integration(integration.title)
end
end
+
+ context 'with remove_monitor_metrics flag enabled' do
+ before do
+ stub_feature_flags(remove_monitor_metrics: true)
+ end
+
+ it 'returns a 404 for the prometheus edit page' do
+ visit edit_group_settings_integration_path(group, :prometheus)
+
+ expect(page).to have_content "Page Not Found"
+ end
+ end
end
diff --git a/spec/features/projects/integrations/project_integrations_spec.rb b/spec/features/projects/integrations/project_integrations_spec.rb
index d99b6ca9092..94dbc401726 100644
--- a/spec/features/projects/integrations/project_integrations_spec.rb
+++ b/spec/features/projects/integrations/project_integrations_spec.rb
@@ -12,4 +12,16 @@ RSpec.describe 'Project integrations', :js, feature_category: :integrations do
visit_project_integration(integration.title)
end
end
+
+ context 'with remove_monitor_metrics flag enabled' do
+ before do
+ stub_feature_flags(remove_monitor_metrics: true)
+ end
+
+ it 'returns a 404 for the prometheus edit page' do
+ visit edit_project_settings_integration_path(project, :prometheus)
+
+ expect(page).to have_content "Page Not Found"
+ end
+ end
end
diff --git a/spec/features/projects/integrations/user_activates_prometheus_spec.rb b/spec/features/projects/integrations/user_activates_prometheus_spec.rb
index 5b2d885410f..a47000672ca 100644
--- a/spec/features/projects/integrations/user_activates_prometheus_spec.rb
+++ b/spec/features/projects/integrations/user_activates_prometheus_spec.rb
@@ -6,6 +6,7 @@ RSpec.describe 'User activates Prometheus', feature_category: :integrations do
include_context 'project integration activation'
before do
+ stub_feature_flags(remove_monitor_metrics: false)
stub_request(:get, /.*prometheus.example.com.*/)
end
diff --git a/spec/features/projects/pipelines/pipeline_spec.rb b/spec/features/projects/pipelines/pipeline_spec.rb
index 8af3bf02ce5..7167581eedf 100644
--- a/spec/features/projects/pipelines/pipeline_spec.rb
+++ b/spec/features/projects/pipelines/pipeline_spec.rb
@@ -80,7 +80,7 @@ RSpec.describe 'Pipeline', :js, feature_category: :projects do
expect(page).to have_content('test')
expect(page).to have_content('deploy')
expect(page).to have_content('Retry')
- expect(page).to have_content('Cancel running')
+ expect(page).to have_content('Cancel pipeline')
end
it 'shows link to the pipeline ref' do
@@ -625,11 +625,11 @@ RSpec.describe 'Pipeline', :js, feature_category: :projects do
context 'when canceling' do
before do
- click_on 'Cancel running'
+ click_on 'Cancel pipeline'
end
- it 'does not show a "Cancel running" button', :sidekiq_might_not_need_inline do
- expect(page).not_to have_content('Cancel running')
+ it 'does not show a "Cancel pipeline" button', :sidekiq_might_not_need_inline do
+ expect(page).not_to have_content('Cancel pipeline')
end
end
end
@@ -847,7 +847,7 @@ RSpec.describe 'Pipeline', :js, feature_category: :projects do
expect(page).to have_content('test')
expect(page).to have_content('deploy')
expect(page).to have_content('Retry')
- expect(page).to have_content('Cancel running')
+ expect(page).to have_content('Cancel pipeline')
end
it 'does not link to job', quarantine: 'https://gitlab.com/gitlab-org/gitlab/-/issues/408215' do
@@ -1093,7 +1093,7 @@ RSpec.describe 'Pipeline', :js, feature_category: :projects do
expect(page).to have_content(build_running.id)
expect(page).to have_content(build_external.id)
expect(page).to have_content('Retry')
- expect(page).to have_content('Cancel running')
+ expect(page).to have_content('Cancel pipeline')
expect(page).to have_button('Play')
end
@@ -1128,11 +1128,11 @@ RSpec.describe 'Pipeline', :js, feature_category: :projects do
context 'when canceling' do
before do
- click_on 'Cancel running'
+ click_on 'Cancel pipeline'
end
- it 'does not show a "Cancel running" button', :sidekiq_might_not_need_inline do
- expect(page).not_to have_content('Cancel running')
+ it 'does not show a "Cancel pipeline" button', :sidekiq_might_not_need_inline do
+ expect(page).not_to have_content('Cancel pipeline')
end
end
end
diff --git a/spec/frontend/content_editor/components/wrappers/__snapshots__/table_of_contents_spec.js.snap b/spec/frontend/content_editor/components/wrappers/__snapshots__/table_of_contents_spec.js.snap
index fb091419ad9..a9d42769789 100644
--- a/spec/frontend/content_editor/components/wrappers/__snapshots__/table_of_contents_spec.js.snap
+++ b/spec/frontend/content_editor/components/wrappers/__snapshots__/table_of_contents_spec.js.snap
@@ -8,7 +8,9 @@ exports[`content/components/wrappers/table_of_contents collects all headings and
Table of contents
- <li>
+ <li
+ dir="auto"
+ >
<a
href="#"
>
@@ -17,8 +19,12 @@ exports[`content/components/wrappers/table_of_contents collects all headings and
</a>
- <ul>
- <li>
+ <ul
+ dir="auto"
+ >
+ <li
+ dir="auto"
+ >
<a
href="#"
>
@@ -27,8 +33,12 @@ exports[`content/components/wrappers/table_of_contents collects all headings and
</a>
- <ul>
- <li>
+ <ul
+ dir="auto"
+ >
+ <li
+ dir="auto"
+ >
<a
href="#"
>
@@ -41,7 +51,9 @@ exports[`content/components/wrappers/table_of_contents collects all headings and
</li>
</ul>
</li>
- <li>
+ <li
+ dir="auto"
+ >
<a
href="#"
>
@@ -50,8 +62,12 @@ exports[`content/components/wrappers/table_of_contents collects all headings and
</a>
- <ul>
- <li>
+ <ul
+ dir="auto"
+ >
+ <li
+ dir="auto"
+ >
<a
href="#"
>
@@ -64,7 +80,9 @@ exports[`content/components/wrappers/table_of_contents collects all headings and
</li>
</ul>
</li>
- <li>
+ <li
+ dir="auto"
+ >
<a
href="#"
>
@@ -75,7 +93,9 @@ exports[`content/components/wrappers/table_of_contents collects all headings and
<!---->
</li>
- <li>
+ <li
+ dir="auto"
+ >
<a
href="#"
>
@@ -84,8 +104,12 @@ exports[`content/components/wrappers/table_of_contents collects all headings and
</a>
- <ul>
- <li>
+ <ul
+ dir="auto"
+ >
+ <li
+ dir="auto"
+ >
<a
href="#"
>
@@ -100,7 +124,9 @@ exports[`content/components/wrappers/table_of_contents collects all headings and
</li>
</ul>
</li>
- <li>
+ <li
+ dir="auto"
+ >
<a
href="#"
>
diff --git a/spec/frontend/content_editor/remark_markdown_processing_spec.js b/spec/frontend/content_editor/remark_markdown_processing_spec.js
index bc43af9bd8b..359e69c083a 100644
--- a/spec/frontend/content_editor/remark_markdown_processing_spec.js
+++ b/spec/frontend/content_editor/remark_markdown_processing_spec.js
@@ -1349,7 +1349,7 @@ alert("Hello world")
markdown: `
<h1 class="heading-with-class">Header</h1>
`,
- expectedHtml: '<h1>Header</h1>',
+ expectedHtml: '<h1 dir="auto">Header</h1>',
},
{
markdown: `
diff --git a/spec/frontend/integrations/index/components/integrations_table_spec.js b/spec/frontend/integrations/index/components/integrations_table_spec.js
index 5456a23a98d..54e5b45a5d8 100644
--- a/spec/frontend/integrations/index/components/integrations_table_spec.js
+++ b/spec/frontend/integrations/index/components/integrations_table_spec.js
@@ -1,4 +1,4 @@
-import { GlTable, GlIcon } from '@gitlab/ui';
+import { GlTable, GlIcon, GlLink } from '@gitlab/ui';
import { mount } from '@vue/test-utils';
import IntegrationsTable from '~/integrations/index/components/integrations_table.vue';
import TimeAgoTooltip from '~/vue_shared/components/time_ago_tooltip.vue';
@@ -10,12 +10,15 @@ describe('IntegrationsTable', () => {
const findTable = () => wrapper.findComponent(GlTable);
- const createComponent = (propsData = {}) => {
+ const createComponent = (propsData = {}, glFeatures = {}) => {
wrapper = mount(IntegrationsTable, {
propsData: {
integrations: mockActiveIntegrations,
...propsData,
},
+ provide: {
+ glFeatures,
+ },
});
};
@@ -46,4 +49,17 @@ describe('IntegrationsTable', () => {
expect(findTable().findComponent(GlIcon).exists()).toBe(shouldRenderActiveIcon);
});
});
+
+ describe.each([true, false])(
+ 'when `remove_monitor_metrics` flag is %p',
+ (removeMonitorMetrics) => {
+ beforeEach(() => {
+ createComponent({ integrations: [mockInactiveIntegrations[3]] }, { removeMonitorMetrics });
+ });
+
+ it(`${removeMonitorMetrics ? 'does not render' : 'renders'} prometheus integration`, () => {
+ expect(findTable().findComponent(GlLink).exists()).toBe(!removeMonitorMetrics);
+ });
+ },
+ );
});
diff --git a/spec/frontend/integrations/index/mock_data.js b/spec/frontend/integrations/index/mock_data.js
index 2231687d255..c07b320c0d3 100644
--- a/spec/frontend/integrations/index/mock_data.js
+++ b/spec/frontend/integrations/index/mock_data.js
@@ -47,4 +47,13 @@ export const mockInactiveIntegrations = [
'/gitlab-qa-sandbox-group/project_with_jenkins_6a55a67c-57c6ed0597c9319a/-/services/bamboo/edit',
name: 'bamboo',
},
+ {
+ active: false,
+ title: 'Prometheus',
+ description: 'A monitoring tool for Kubernetes',
+ updated_at: null,
+ edit_path:
+ '/gitlab-qa-sandbox-group/project_with_jenkins_6a55a67c-57c6ed0597c9319a/-/services/prometheus/edit',
+ name: 'prometheus',
+ },
];
diff --git a/spec/frontend/notes/components/noteable_note_spec.js b/spec/frontend/notes/components/noteable_note_spec.js
index bce335aa035..1e7470ace8e 100644
--- a/spec/frontend/notes/components/noteable_note_spec.js
+++ b/spec/frontend/notes/components/noteable_note_spec.js
@@ -333,7 +333,7 @@ describe('issue_note', () => {
await nextTick();
let noteBodyProps = noteBody.props();
- expect(noteBodyProps.note.note_html).toBe(`<p>${updatedText}</p>\n`);
+ expect(noteBodyProps.note.note_html).toBe(`<p dir="auto">${updatedText}</p>\n`);
noteBody.vm.$emit('cancelForm', {});
await nextTick();
diff --git a/spec/frontend/pipelines/header_component_spec.js b/spec/frontend/pipelines/header_component_spec.js
index a4d7d0e30f8..18def4ab62c 100644
--- a/spec/frontend/pipelines/header_component_spec.js
+++ b/spec/frontend/pipelines/header_component_spec.js
@@ -6,7 +6,7 @@ import HeaderComponent from '~/pipelines/components/header_component.vue';
import cancelPipelineMutation from '~/pipelines/graphql/mutations/cancel_pipeline.mutation.graphql';
import deletePipelineMutation from '~/pipelines/graphql/mutations/delete_pipeline.mutation.graphql';
import retryPipelineMutation from '~/pipelines/graphql/mutations/retry_pipeline.mutation.graphql';
-import { BUTTON_TOOLTIP_RETRY } from '~/pipelines/constants';
+import { BUTTON_TOOLTIP_RETRY, BUTTON_TOOLTIP_CANCEL } from '~/pipelines/constants';
import {
mockCancelledPipelineHeader,
mockFailedPipelineHeader,
@@ -169,6 +169,10 @@ describe('Pipeline details header', () => {
});
});
+ it('should render cancel action tooltip', () => {
+ expect(findCancelButton().attributes('title')).toBe(BUTTON_TOOLTIP_CANCEL);
+ });
+
it('should display error message on failure', async () => {
const failureMessage = 'failure message';
jest.spyOn(wrapper.vm.$apollo, 'mutate').mockResolvedValue({
diff --git a/spec/frontend/super_sidebar/components/menu_section_spec.js b/spec/frontend/super_sidebar/components/menu_section_spec.js
index 556e07a2e31..203a65d6a0d 100644
--- a/spec/frontend/super_sidebar/components/menu_section_spec.js
+++ b/spec/frontend/super_sidebar/components/menu_section_spec.js
@@ -10,6 +10,8 @@ describe('MenuSection component', () => {
const findButton = () => wrapper.find('button');
const findCollapse = () => wrapper.getComponent(GlCollapse);
const findNavItems = () => wrapper.findAllComponents(NavItem);
+ const findSectionTitle = () => wrapper.findByTestId('section-title');
+
const createWrapper = (item, otherProps) => {
wrapper = shallowMountExtended(MenuSection, {
propsData: { item, ...otherProps },
@@ -68,6 +70,17 @@ describe('MenuSection component', () => {
});
});
+ describe('`collectionStyle` prop', () => {
+ const newClasses = 'gl-font-sm gl-font-weight-semibold'.split(' ');
+
+ it('applies new classes when using new styles', () => {
+ createWrapper({ title: 'Asdf' }, { collectionStyle: true });
+ const classes = findSectionTitle().classes();
+
+ newClasses.forEach((newClass) => expect(classes).toContain(newClass));
+ });
+ });
+
describe('`separated` prop', () => {
describe('by default (false)', () => {
it('does not render a separator', () => {
diff --git a/spec/frontend/super_sidebar/components/sidebar_menu_spec.js b/spec/frontend/super_sidebar/components/sidebar_menu_spec.js
index 26b146f0c8b..55483c46732 100644
--- a/spec/frontend/super_sidebar/components/sidebar_menu_spec.js
+++ b/spec/frontend/super_sidebar/components/sidebar_menu_spec.js
@@ -1,5 +1,6 @@
import { mountExtended } from 'helpers/vue_test_utils_helper';
import SidebarMenu from '~/super_sidebar/components/sidebar_menu.vue';
+import MenuSection from '~/super_sidebar/components/menu_section.vue';
import { PANELS_WITH_PINS } from '~/super_sidebar/constants';
import { sidebarData } from '../mock_data';
@@ -101,6 +102,10 @@ describe('SidebarMenu component', () => {
'Also with subitems',
]);
});
+
+ it('passes `supportsPin` to menu sections', () => {
+ expect(wrapper.findAllComponents(MenuSection).at(1).props('collectionStyle')).toBe(true);
+ });
});
describe('when the sidebar does not support pins', () => {
@@ -115,6 +120,10 @@ describe('SidebarMenu component', () => {
it('keeps all items as non-static', () => {
expect(wrapper.vm.nonStaticItems).toEqual(menuItems);
});
+
+ it('passes `supportsPin` to menu sections', () => {
+ expect(wrapper.findAllComponents(MenuSection).at(1).props('collectionStyle')).toBe(false);
+ });
});
});
diff --git a/spec/frontend/vue_shared/components/notes/__snapshots__/placeholder_note_spec.js.snap b/spec/frontend/vue_shared/components/notes/__snapshots__/placeholder_note_spec.js.snap
index 3bac96069ec..de53caa66c7 100644
--- a/spec/frontend/vue_shared/components/notes/__snapshots__/placeholder_note_spec.js.snap
+++ b/spec/frontend/vue_shared/components/notes/__snapshots__/placeholder_note_spec.js.snap
@@ -57,7 +57,9 @@ exports[`Issue placeholder note component matches snapshot 1`] = `
<div
class="note-text md"
>
- <p>
+ <p
+ dir="auto"
+ >
Foo
</p>
diff --git a/spec/frontend_integration/content_editor/content_editor_integration_spec.js b/spec/frontend_integration/content_editor/content_editor_integration_spec.js
index b3997fdb676..6bafe609995 100644
--- a/spec/frontend_integration/content_editor/content_editor_integration_spec.js
+++ b/spec/frontend_integration/content_editor/content_editor_integration_spec.js
@@ -52,7 +52,7 @@ describe('content_editor', () => {
});
describe('when the initial content is not empty', () => {
- const initialContent = '<p><strong>bold text</strong></p>';
+ const initialContent = '<strong>bold text</strong> and <em>italic text</em>';
beforeEach(async () => {
mockRenderMarkdownResponse(initialContent);
diff --git a/spec/lib/gitlab/middleware/compressed_json_spec.rb b/spec/lib/gitlab/middleware/compressed_json_spec.rb
index 1444e6a9881..5978b2422e0 100644
--- a/spec/lib/gitlab/middleware/compressed_json_spec.rb
+++ b/spec/lib/gitlab/middleware/compressed_json_spec.rb
@@ -49,21 +49,21 @@ RSpec.describe Gitlab::Middleware::CompressedJson do
end
end
- shared_examples 'handles non integer project ID' do
- context 'with a URL-encoded project ID' do
- let_it_be(:project_id) { 'gitlab-org%2fgitlab' }
+ shared_examples 'handles non integer ID' do
+ context 'with a URL-encoded ID' do
+ let(:id) { 'gitlab-org%2fgitlab' }
it_behaves_like 'decompress middleware'
end
- context 'with a non URL-encoded project ID' do
- let_it_be(:project_id) { '1/repository/files/api/v4' }
+ context 'with a non URL-encoded ID' do
+ let(:id) { '1/repository/files/api/v4' }
it_behaves_like 'passes input'
end
- context 'with a blank project ID' do
- let_it_be(:project_id) { '' }
+ context 'with a blank ID' do
+ let(:id) { '' }
it_behaves_like 'passes input'
end
@@ -116,44 +116,82 @@ RSpec.describe Gitlab::Middleware::CompressedJson do
end
context 'with project level endpoint' do
- let_it_be(:project_id) { 1 }
+ let(:id) { 1 }
context 'with npm advisory bulk url' do
- let(:path) { "/api/v4/projects/#{project_id}/packages/npm/-/npm/v1/security/advisories/bulk" }
+ let(:path) { "/api/v4/projects/#{id}/packages/npm/-/npm/v1/security/advisories/bulk" }
it_behaves_like 'decompress middleware'
include_context 'with relative url' do
- let(:path) { "#{relative_url_root}/api/v4/projects/#{project_id}/packages/npm/-/npm/v1/security/advisories/bulk" } # rubocop disable Layout/LineLength
+ let(:path) { "#{relative_url_root}/api/v4/projects/#{id}/packages/npm/-/npm/v1/security/advisories/bulk" } # rubocop disable Layout/LineLength
it_behaves_like 'decompress middleware'
end
- it_behaves_like 'handles non integer project ID'
+ it_behaves_like 'handles non integer ID'
end
context 'with npm quick audit url' do
- let(:path) { "/api/v4/projects/#{project_id}/packages/npm/-/npm/v1/security/audits/quick" }
+ let(:path) { "/api/v4/projects/#{id}/packages/npm/-/npm/v1/security/audits/quick" }
it_behaves_like 'decompress middleware'
include_context 'with relative url' do
- let(:path) { "#{relative_url_root}/api/v4/projects/#{project_id}/packages/npm/-/npm/v1/security/audits/quick" } # rubocop disable Layout/LineLength
+ let(:path) { "#{relative_url_root}/api/v4/projects/#{id}/packages/npm/-/npm/v1/security/audits/quick" } # rubocop disable Layout/LineLength
it_behaves_like 'decompress middleware'
end
- it_behaves_like 'handles non integer project ID'
+ it_behaves_like 'handles non integer ID'
end
end
end
+ context 'with group level endpoint' do
+ let(:id) { 1 }
+
+ context 'with npm advisory bulk url' do
+ let(:path) { "/api/v4/groups/#{id}/-/packages/npm/-/npm/v1/security/advisories/bulk" }
+
+ it_behaves_like 'decompress middleware'
+
+ include_context 'with relative url' do
+ let(:path) { "#{relative_url_root}/api/v4/groups/#{id}/-/packages/npm/-/npm/v1/security/advisories/bulk" } # rubocop disable Layout/LineLength
+
+ it_behaves_like 'decompress middleware'
+ end
+
+ it_behaves_like 'handles non integer ID'
+ end
+
+ context 'with npm quick audit url' do
+ let(:path) { "/api/v4/groups/#{id}/-/packages/npm/-/npm/v1/security/audits/quick" }
+
+ it_behaves_like 'decompress middleware'
+
+ include_context 'with relative url' do
+ let(:path) { "#{relative_url_root}/api/v4/groups/#{id}/-/packages/npm/-/npm/v1/security/audits/quick" } # rubocop disable Layout/LineLength
+
+ it_behaves_like 'decompress middleware'
+ end
+
+ it_behaves_like 'handles non integer ID'
+ end
+ end
+
context 'with some other route' do
let(:path) { '/api/projects/123' }
it_behaves_like 'passes input'
end
+ context 'with the wrong project path' do
+ let(:path) { '/api/v4/projects/123/-/packages/npm/-/npm/v1/security/advisories/bulk' }
+
+ it_behaves_like 'passes input'
+ end
+
context 'payload is too large' do
let(:body_limit) { Gitlab::Middleware::CompressedJson::MAXIMUM_BODY_SIZE }
let(:decompressed_input) { 'a' * (body_limit + 100) }
diff --git a/spec/requests/admin/integrations_controller_spec.rb b/spec/requests/admin/integrations_controller_spec.rb
index efd0e3d91ee..6240c2406ea 100644
--- a/spec/requests/admin/integrations_controller_spec.rb
+++ b/spec/requests/admin/integrations_controller_spec.rb
@@ -9,6 +9,20 @@ RSpec.describe Admin::IntegrationsController, :enable_admin_mode, feature_catego
sign_in(admin)
end
+ describe 'GET #edit' do
+ context 'when remove_monitor_metrics is true' do
+ before do
+ stub_feature_flags(remove_monitor_metrics: true)
+ end
+
+ it 'renders a 404 for the prometheus integration' do
+ get edit_admin_application_settings_integration_path(:prometheus)
+
+ expect(response).to have_gitlab_http_status(:not_found)
+ end
+ end
+ end
+
describe 'GET #overrides' do
let_it_be(:integration) { create(:jira_integration, :instance) }
let_it_be(:overridden_integration) { create(:jira_integration) }
diff --git a/spec/requests/api/ci/runner/runners_post_spec.rb b/spec/requests/api/ci/runner/runners_post_spec.rb
index 99a8f6b2535..91cb0a572a1 100644
--- a/spec/requests/api/ci/runner/runners_post_spec.rb
+++ b/spec/requests/api/ci/runner/runners_post_spec.rb
@@ -15,14 +15,10 @@ RSpec.describe API::Ci::Runner, :clean_gitlab_redis_shared_state, feature_catego
context 'when invalid token is provided' do
it 'returns 403 error' do
- allow_next_instance_of(::Ci::Runners::RegisterRunnerService) do |service|
- allow(service).to receive(:execute)
- .and_return(ServiceResponse.error(message: 'invalid token supplied', http_status: :forbidden))
- end
-
post api('/runners'), params: { token: 'invalid' }
expect(response).to have_gitlab_http_status(:forbidden)
+ expect(json_response['message']).to eq('403 Forbidden - invalid token supplied')
end
end
diff --git a/spec/support/shared_examples/integrations/integration_settings_form.rb b/spec/support/shared_examples/integrations/integration_settings_form.rb
index a21eddb182c..c43bdfa53ff 100644
--- a/spec/support/shared_examples/integrations/integration_settings_form.rb
+++ b/spec/support/shared_examples/integrations/integration_settings_form.rb
@@ -2,6 +2,11 @@
RSpec.shared_examples 'integration settings form' do
include IntegrationsHelper
+
+ before do
+ stub_feature_flags(remove_monitor_metrics: false)
+ end
+
# Note: these specs don't validate channel fields
# which are present on a few integrations
it 'displays all the integrations', feature_category: :integrations do
diff --git a/yarn.lock b/yarn.lock
index 8334f3ac32d..f47606d2fed 100644
--- a/yarn.lock
+++ b/yarn.lock
@@ -8639,6 +8639,11 @@ markdownlint@~0.26.2:
dependencies:
markdown-it "13.0.1"
+marked-bidi@^1.0.3:
+ version "1.0.3"
+ resolved "https://registry.yarnpkg.com/marked-bidi/-/marked-bidi-1.0.3.tgz#7e637e0e04f7f297939af6b6472c27ac94266947"
+ integrity sha512-nmphpzT5K1jcSZxb7/hhzSfLCpXHdsdrtM/580o3xgtR4YdOEUr/usYcoR8UsV9gcgxL8LDCfYiDy//isSaILA==
+
marked@^4.0.18:
version "4.0.18"
resolved "https://registry.yarnpkg.com/marked/-/marked-4.0.18.tgz#cd0ac54b2e5610cfb90e8fd46ccaa8292c9ed569"