Welcome to mirror list, hosted at ThFree Co, Russian Federation.

gitlab.com/gitlab-org/gitlab-foss.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--GITALY_SERVER_VERSION2
-rw-r--r--app/assets/javascripts/content_editor/services/hast_to_prosemirror_converter.js81
-rw-r--r--app/assets/javascripts/content_editor/services/remark_markdown_deserializer.js28
-rw-r--r--app/assets/javascripts/content_editor/services/serialization_helpers.js5
-rw-r--r--app/assets/javascripts/lib/utils/url_utility.js24
-rw-r--r--app/assets/stylesheets/components/rich_content_editor.scss54
-rw-r--r--app/models/deploy_key.rb5
-rw-r--r--app/models/key.rb1
-rw-r--r--app/models/user.rb6
-rw-r--r--config/feature_flags/development/audit_event_streaming_git_operations_deploy_key_event.yml (renamed from config/feature_flags/development/uncached_mr_attention_requests_count.yml)10
-rw-r--r--doc/administration/audit_event_streaming.md76
-rw-r--r--doc/user/discussions/index.md12
-rw-r--r--doc/user/group/index.md23
-rw-r--r--doc/user/group/manage.md11
-rw-r--r--glfm_specification/example_snapshots/html.yml324
-rw-r--r--glfm_specification/example_snapshots/prosemirror_json.yml630
-rw-r--r--lib/api/support/git_access_actor.rb4
-rw-r--r--lib/gitlab/audit/deploy_key_author.rb15
-rw-r--r--lib/gitlab/audit/null_author.rb2
-rw-r--r--lib/tasks/contracts/pipelines.rake15
-rw-r--r--lib/tasks/gitlab/gitaly.rake2
-rw-r--r--locale/gitlab.pot3
-rw-r--r--package.json1
-rw-r--r--spec/contracts/consumer/fixtures/project/pipeline/delete_pipeline.fixture.js19
-rw-r--r--spec/contracts/consumer/resources/graphql/pipelines.js21
-rw-r--r--spec/contracts/consumer/specs/project/pipeline/show.spec.js48
-rw-r--r--spec/contracts/contracts/project/pipeline/show/pipelines#show-delete_pipeline.json44
-rw-r--r--spec/contracts/provider/pact_helpers/project/pipeline/show/delete_pipeline_helper.rb16
-rw-r--r--spec/contracts/provider/pact_helpers/project/pipeline/show/get_pipeline_header_data_helper.rb (renamed from spec/contracts/provider/pact_helpers/project/pipeline/get_pipeline_header_data_helper.rb)4
-rw-r--r--spec/contracts/provider/states/project/pipeline/show_state.rb28
-rw-r--r--spec/frontend/content_editor/remark_markdown_processing_spec.js74
-rw-r--r--spec/frontend/content_editor/services/markdown_serializer_spec.js75
-rw-r--r--spec/frontend/lib/utils/url_utility_spec.js24
-rw-r--r--spec/graphql/mutations/merge_requests/set_labels_spec.rb2
-rw-r--r--spec/graphql/mutations/releases/create_spec.rb6
-rw-r--r--spec/graphql/mutations/releases/delete_spec.rb2
-rw-r--r--spec/graphql/mutations/releases/update_spec.rb4
-rw-r--r--spec/graphql/resolvers/ci/runner_jobs_resolver_spec.rb2
-rw-r--r--spec/graphql/resolvers/group_members/notification_email_resolver_spec.rb2
-rw-r--r--spec/graphql/resolvers/project_jobs_resolver_spec.rb2
-rw-r--r--spec/graphql/resolvers/projects/grafana_integration_resolver_spec.rb4
-rw-r--r--spec/graphql/resolvers/projects_resolver_spec.rb2
-rw-r--r--spec/graphql/types/ci/job_token_scope_type_spec.rb2
-rw-r--r--spec/graphql/types/issue_type_spec.rb6
-rw-r--r--spec/graphql/types/user_type_spec.rb2
-rw-r--r--spec/lib/api/support/git_access_actor_spec.rb30
-rw-r--r--spec/lib/gitlab/audit/deploy_key_author_spec.rb17
-rw-r--r--spec/lib/gitlab/audit/null_author_spec.rb9
-rw-r--r--spec/models/user_spec.rb17
-rw-r--r--spec/requests/api/boards_spec.rb2
-rw-r--r--spec/requests/api/branches_spec.rb2
-rw-r--r--spec/requests/api/ci/jobs_spec.rb2
-rw-r--r--spec/requests/api/ci/runner/jobs_request_post_spec.rb2
-rw-r--r--spec/requests/api/ci/runner/jobs_trace_spec.rb4
-rw-r--r--spec/requests/api/ci/secure_files_spec.rb6
-rw-r--r--spec/requests/api/ci/triggers_spec.rb8
-rw-r--r--spec/requests/api/ci/variables_spec.rb10
-rw-r--r--spec/requests/api/clusters/agents_spec.rb4
-rw-r--r--spec/requests/api/commits_spec.rb14
-rw-r--r--spec/requests/api/conan_instance_packages_spec.rb2
-rw-r--r--spec/requests/api/conan_project_packages_spec.rb2
-rw-r--r--spec/requests/api/dependency_proxy_spec.rb2
-rw-r--r--spec/requests/api/deployments_spec.rb2
-rw-r--r--spec/requests/api/go_proxy_spec.rb2
-rw-r--r--spec/requests/api/graphql/boards/board_list_issues_query_spec.rb2
-rw-r--r--spec/requests/api/graphql/boards/board_lists_query_spec.rb2
-rw-r--r--spec/requests/api/graphql/mutations/award_emojis/add_spec.rb2
-rw-r--r--spec/requests/api/graphql/mutations/award_emojis/toggle_spec.rb2
-rw-r--r--spec/requests/api/graphql/mutations/releases/create_spec.rb6
-rw-r--r--spec/requests/api/graphql/mutations/releases/update_spec.rb2
-rw-r--r--spec/requests/api/graphql/mutations/snippets/create_spec.rb6
-rw-r--r--spec/requests/api/graphql/mutations/timelogs/delete_spec.rb2
-rw-r--r--spec/requests/api/graphql/mutations/work_items/create_spec.rb2
-rw-r--r--spec/requests/api/graphql/mutations/work_items/update_spec.rb4
-rw-r--r--spec/requests/api/graphql/namespace/root_storage_statistics_spec.rb2
-rw-r--r--spec/requests/api/graphql/packages/conan_spec.rb2
-rw-r--r--spec/requests/api/graphql/packages/helm_spec.rb2
-rw-r--r--spec/requests/api/graphql/packages/package_spec.rb2
-rw-r--r--spec/requests/api/graphql/project/base_service_spec.rb2
-rw-r--r--spec/requests/api/graphql/project/jira_import_spec.rb14
-rw-r--r--spec/requests/api/group_variables_spec.rb8
-rw-r--r--spec/requests/api/groups_spec.rb2
-rw-r--r--spec/requests/api/helpers_spec.rb4
-rw-r--r--spec/requests/api/internal/base_spec.rb10
-rw-r--r--spec/requests/api/markdown_spec.rb4
-rw-r--r--spec/requests/api/maven_packages_spec.rb2
-rw-r--r--spec/requests/api/members_spec.rb4
-rw-r--r--spec/requests/api/metrics/dashboard/annotations_spec.rb2
-rw-r--r--spec/requests/api/notes_spec.rb2
-rw-r--r--spec/requests/api/npm_project_packages_spec.rb8
-rw-r--r--spec/requests/api/nuget_group_packages_spec.rb2
-rw-r--r--spec/requests/api/pages/pages_spec.rb2
-rw-r--r--spec/requests/api/pages_domains_spec.rb4
-rw-r--r--spec/requests/api/personal_access_tokens_spec.rb2
-rw-r--r--spec/requests/api/project_templates_spec.rb4
-rw-r--r--spec/requests/api/projects_spec.rb2
-rw-r--r--spec/requests/api/pypi_packages_spec.rb4
-rw-r--r--spec/requests/api/release/links_spec.rb8
-rw-r--r--spec/requests/api/releases_spec.rb8
-rw-r--r--spec/requests/api/snippets_spec.rb10
-rw-r--r--spec/requests/api/unleash_spec.rb6
-rw-r--r--spec/requests/git_http_spec.rb2
-rw-r--r--spec/requests/groups/milestones_controller_spec.rb2
-rw-r--r--spec/requests/jira_connect/subscriptions_controller_spec.rb4
-rw-r--r--spec/requests/lfs_http_spec.rb14
-rw-r--r--spec/requests/oauth/tokens_controller_spec.rb2
-rw-r--r--spec/tasks/gitlab/gitaly_rake_spec.rb8
-rw-r--r--yarn.lock5
108 files changed, 1235 insertions, 814 deletions
diff --git a/GITALY_SERVER_VERSION b/GITALY_SERVER_VERSION
index c074ed50eee..e8b44180f9e 100644
--- a/GITALY_SERVER_VERSION
+++ b/GITALY_SERVER_VERSION
@@ -1 +1 @@
-0fa08d953e0d5497fe5366836d0ed54b9ff557d8
+31ea786fbf0a7874b44efcb1f8b43bc4536d9b7e
diff --git a/app/assets/javascripts/content_editor/services/hast_to_prosemirror_converter.js b/app/assets/javascripts/content_editor/services/hast_to_prosemirror_converter.js
index 312ab88de4a..5eda0ff8b1a 100644
--- a/app/assets/javascripts/content_editor/services/hast_to_prosemirror_converter.js
+++ b/app/assets/javascripts/content_editor/services/hast_to_prosemirror_converter.js
@@ -21,7 +21,7 @@
import { Mark } from 'prosemirror-model';
import { visitParents, SKIP } from 'unist-util-visit-parents';
-import { isFunction, isString, noop } from 'lodash';
+import { isFunction, isString, noop, mapValues } from 'lodash';
const NO_ATTRIBUTES = {};
@@ -73,28 +73,47 @@ function createSourceMapAttributes(hastNode, markdown) {
}
/**
- * Compute ProseMirror node’s attributes from a Hast node.
- * By default, this function includes sourcemap position
- * information in the object returned.
- *
- * Other attributes are retrieved by invoking a getAttrs
- * function provided by the ProseMirror node factory spec.
- *
- * @param {*} proseMirrorNodeSpec ProseMirror node spec object
- * @param {HastNode} hastNode A hast node
- * @param {Array<HastNode>} hastParents All the ancestors of the hastNode
- * @param {String} markdown Markdown source file’s content
- *
- * @returns An object that contains a ProseMirror node’s attributes
+ * Creates a function that resolves the attributes
+ * of a ProseMirror node based on a hast node.
+ *
+ * @param {Object} params Parameters
+ * @param {String} params.markdown Markdown source from which the AST was generated
+ * @param {Object} params.attributeTransformer An object that allows applying a transformation
+ * function to all the attributes listed in the attributes property.
+ * @param {Array} params.attributeTransformer.attributes A list of attributes names
+ * that the getAttrs function should apply the transformation
+ * @param {Function} params.attributeTransformer.transform A function that applies
+ * a transform operation on an attribute value.
+ * @returns A `getAttrs` function
*/
-function getAttrs(proseMirrorNodeSpec, hastNode, hastParents, markdown) {
- const { getAttrs: specGetAttrs } = proseMirrorNodeSpec;
+const getAttrsFactory = ({ attributeTransformer, markdown }) =>
+ /**
+ * Compute ProseMirror node’s attributes from a Hast node.
+ * By default, this function includes sourcemap position
+ * information in the object returned.
+ *
+ * Other attributes are retrieved by invoking a getAttrs
+ * function provided by the ProseMirror node factory spec.
+ *
+ * @param {Object} proseMirrorNodeSpec ProseMirror node spec object
+ * @param {Object} hastNode A hast node
+ * @param {Array} hastParents All the ancestors of the hastNode
+ * @param {String} markdown Markdown source file’s content
+ * @returns An object that contains a ProseMirror node’s attributes
+ */
+ function getAttrs(proseMirrorNodeSpec, hastNode, hastParents) {
+ const { getAttrs: specGetAttrs } = proseMirrorNodeSpec;
+ const attributes = {
+ ...createSourceMapAttributes(hastNode, markdown),
+ ...(isFunction(specGetAttrs) ? specGetAttrs(hastNode, hastParents, markdown) : {}),
+ };
- return {
- ...createSourceMapAttributes(hastNode, markdown),
- ...(isFunction(specGetAttrs) ? specGetAttrs(hastNode, hastParents, markdown) : {}),
+ return mapValues(attributes, (value, key) =>
+ attributeTransformer.attributes.includes(key)
+ ? attributeTransformer.transform(value, key)
+ : value,
+ );
};
-}
/**
* Keeps track of the Hast -> ProseMirror conversion process.
@@ -322,7 +341,13 @@ class HastToProseMirrorConverterState {
*
* @returns An object that contains ProseMirror node factories
*/
-const createProseMirrorNodeFactories = (schema, proseMirrorFactorySpecs, markdown) => {
+const createProseMirrorNodeFactories = (
+ schema,
+ proseMirrorFactorySpecs,
+ attributeTransformer,
+ markdown,
+) => {
+ const getAttrs = getAttrsFactory({ attributeTransformer, markdown });
const factories = {
root: {
selector: 'root',
@@ -355,20 +380,20 @@ const createProseMirrorNodeFactories = (schema, proseMirrorFactorySpecs, markdow
const nodeType = schema.nodeType(proseMirrorName);
state.closeUntil(parent);
- state.openNode(nodeType, hastNode, getAttrs(factory, hastNode, parent, markdown), factory);
+ state.openNode(nodeType, hastNode, getAttrs(factory, hastNode, parent), factory);
};
} else if (factory.type === 'inline') {
const nodeType = schema.nodeType(proseMirrorName);
factory.handle = (state, hastNode, parent) => {
state.closeUntil(parent);
- state.openNode(nodeType, hastNode, getAttrs(factory, hastNode, parent, markdown), factory);
+ state.openNode(nodeType, hastNode, getAttrs(factory, hastNode, parent), factory);
// Inline nodes do not have children therefore they are immediately closed
state.closeNode();
};
} else if (factory.type === 'mark') {
const markType = schema.marks[proseMirrorName];
factory.handle = (state, hastNode, parent) => {
- state.openMark(markType, hastNode, getAttrs(factory, hastNode, parent, markdown), factory);
+ state.openMark(markType, hastNode, getAttrs(factory, hastNode, parent), factory);
};
} else if (factory.type === 'ignore') {
factory.handle = noop;
@@ -581,9 +606,15 @@ export const createProseMirrorDocFromMdastTree = ({
factorySpecs,
wrappableTags,
tree,
+ attributeTransformer,
markdown,
}) => {
- const proseMirrorNodeFactories = createProseMirrorNodeFactories(schema, factorySpecs, markdown);
+ const proseMirrorNodeFactories = createProseMirrorNodeFactories(
+ schema,
+ factorySpecs,
+ attributeTransformer,
+ markdown,
+ );
const state = new HastToProseMirrorConverterState();
visitParents(tree, (hastNode, ancestors) => {
diff --git a/app/assets/javascripts/content_editor/services/remark_markdown_deserializer.js b/app/assets/javascripts/content_editor/services/remark_markdown_deserializer.js
index e38be672063..b9203daf0e8 100644
--- a/app/assets/javascripts/content_editor/services/remark_markdown_deserializer.js
+++ b/app/assets/javascripts/content_editor/services/remark_markdown_deserializer.js
@@ -125,6 +125,7 @@ const factorySpecs = {
selector: 'img',
getAttrs: (hastNode) => ({
src: hastNode.properties.src,
+ canonicalSrc: hastNode.properties.src,
title: hastNode.properties.title,
alt: hastNode.properties.alt,
}),
@@ -154,6 +155,7 @@ const factorySpecs = {
type: 'mark',
selector: 'a',
getAttrs: (hastNode) => ({
+ canonicalSrc: hastNode.properties.href,
href: hastNode.properties.href,
title: hastNode.properties.title,
}),
@@ -182,6 +184,31 @@ const factorySpecs = {
},
};
+const resolveUrl = (url) => {
+ try {
+ return new URL(url, window.location.origin).toString();
+ } catch {
+ return null;
+ }
+};
+
+const attributeTransformer = {
+ attributes: ['href', 'src'],
+ transform: (url) => {
+ if (!url) {
+ return url;
+ }
+
+ /**
+ * Resolves a URL if provided. The URL is not resolved against
+ * the client origin initially to protect the URL protocol
+ * when it is available, for example, we want to preserve
+ * mailto and application-specific protocols
+ */
+ return resolveUrl(url);
+ },
+};
+
export default () => {
return {
deserialize: async ({ schema, markdown }) => {
@@ -193,6 +220,7 @@ export default () => {
factorySpecs,
tree,
wrappableTags,
+ attributeTransformer,
markdown,
}),
skipRendering: ['footnoteReference', 'footnoteDefinition', 'code', 'definition'],
diff --git a/app/assets/javascripts/content_editor/services/serialization_helpers.js b/app/assets/javascripts/content_editor/services/serialization_helpers.js
index 97bad375aea..3f8019adcf9 100644
--- a/app/assets/javascripts/content_editor/services/serialization_helpers.js
+++ b/app/assets/javascripts/content_editor/services/serialization_helpers.js
@@ -1,4 +1,5 @@
import { uniq, isString, omit, isFunction } from 'lodash';
+import { removeLastSlashInUrlPath, removeUrlProtocol } from '../../lib/utils/url_utility';
const defaultAttrs = {
td: { colspan: 1, rowspan: 1, colwidth: null },
@@ -497,9 +498,7 @@ const linkType = (sourceMarkdown) => {
return LINK_HTML;
};
-const removeUrlProtocol = (url) => url.replace(/^\w+:\/?\/?/, '');
-
-const normalizeUrl = (url) => decodeURIComponent(removeUrlProtocol(url));
+const normalizeUrl = (url) => decodeURIComponent(removeLastSlashInUrlPath(removeUrlProtocol(url)));
/**
* Validates that the provided URL is well-formed
diff --git a/app/assets/javascripts/lib/utils/url_utility.js b/app/assets/javascripts/lib/utils/url_utility.js
index 597fa49120b..ca90eee69c7 100644
--- a/app/assets/javascripts/lib/utils/url_utility.js
+++ b/app/assets/javascripts/lib/utils/url_utility.js
@@ -669,3 +669,27 @@ export function constructWebIDEPath({
webIDEUrl(`/${sourceProjectFullPath}/merge_requests/${iid}`),
);
}
+
+/**
+ * Examples
+ *
+ * http://gitlab.com => gitlab.com
+ * https://gitlab.com => gitlab.com
+ *
+ * @param {String} url
+ * @returns A url without a protocol / scheme
+ */
+export const removeUrlProtocol = (url) => url.replace(/^\w+:\/?\/?/, '');
+
+/**
+ * Examples
+ *
+ * https://www.gitlab.com/path/ => https://www.gitlab.com/path
+ * https://www.gitlab.com/?query=search => https://www.gitlab.com?query=search
+ * https://www.gitlab.com/#fragment => https://www.gitlab.com#fragment
+ *
+ * @param {String} url
+ * @returns A URL that does not have a path that ends with slash
+ */
+export const removeLastSlashInUrlPath = (url) =>
+ url.replace(/\/$/, '').replace(/\/(\?|#){1}([^/]*)$/, '$1$2');
diff --git a/app/assets/stylesheets/components/rich_content_editor.scss b/app/assets/stylesheets/components/rich_content_editor.scss
deleted file mode 100644
index 59bd69955d3..00000000000
--- a/app/assets/stylesheets/components/rich_content_editor.scss
+++ /dev/null
@@ -1,54 +0,0 @@
-/**
-* Overrides styles from ToastUI editor
-*/
-
-.tui-editor-defaultUI {
-
- // Toolbar buttons
- .tui-editor-defaultUI-toolbar .toolbar-button {
- color: $gray-500;
- border: 0;
-
- &:hover,
- &:active {
- color: $blue-500;
- border: 0;
- }
- }
-
- // Contextual menu's & popups
- .tui-popup-wrapper {
- @include gl-overflow-hidden;
- @include gl-rounded-base;
- @include gl-border-gray-200;
-
- hr {
- @include gl-m-0;
- @include gl-bg-gray-200;
- }
-
- button {
- @include gl-text-gray-700;
- }
- }
-
- /**
- * Overrides styles from ToastUI's Code Mirror (markdown mode) editor.
- * Toast UI internally overrides some of these using the `.tui-md-` prefix.
- * https://codemirror.net/doc/manual.html#styling
- */
-
- .te-md-container .CodeMirror * {
- @include gl-font-monospace;
- @include gl-font-size-monospace;
- @include gl-line-height-20;
- }
-}
-
-/**
-* Styling below ensures that YouTube videos are displayed in the editor the same as they would in about.gitlab.com
-* https://gitlab.com/gitlab-com/www-gitlab-com/-/blob/main/source/stylesheets/_base.scss#L977
-*/
-.video_container {
- padding-bottom: 56.25%;
-}
diff --git a/app/models/deploy_key.rb b/app/models/deploy_key.rb
index f9acd398374..94ac2405f61 100644
--- a/app/models/deploy_key.rb
+++ b/app/models/deploy_key.rb
@@ -66,4 +66,9 @@ class DeployKey < Key
query
end
+
+ # This is used for the internal logic of AuditEvents::BuildService.
+ def impersonated?
+ false
+ end
end
diff --git a/app/models/key.rb b/app/models/key.rb
index 9f6029cc5d4..78b0a38bcaa 100644
--- a/app/models/key.rb
+++ b/app/models/key.rb
@@ -40,6 +40,7 @@ class Key < ApplicationRecord
after_destroy :refresh_user_cache
alias_attribute :fingerprint_md5, :fingerprint
+ alias_attribute :name, :title
scope :preload_users, -> { preload(:user) }
scope :for_user, -> (user) { where(user: user) }
diff --git a/app/models/user.rb b/app/models/user.rb
index 1bbad2491d9..f9f3de8e127 100644
--- a/app/models/user.rb
+++ b/app/models/user.rb
@@ -1809,12 +1809,8 @@ class User < ApplicationRecord
end
def attention_requested_open_merge_requests_count(force: false)
- if Feature.enabled?(:uncached_mr_attention_requests_count, self)
+ Rails.cache.fetch(attention_request_cache_key, force: force, expires_in: COUNT_CACHE_VALIDITY_PERIOD) do
MergeRequestsFinder.new(self, attention: self.username, state: 'opened', non_archived: true).execute.count
- else
- Rails.cache.fetch(attention_request_cache_key, force: force, expires_in: COUNT_CACHE_VALIDITY_PERIOD) do
- MergeRequestsFinder.new(self, attention: self.username, state: 'opened', non_archived: true).execute.count
- end
end
end
diff --git a/config/feature_flags/development/uncached_mr_attention_requests_count.yml b/config/feature_flags/development/audit_event_streaming_git_operations_deploy_key_event.yml
index 239490ab1c2..026efae1253 100644
--- a/config/feature_flags/development/uncached_mr_attention_requests_count.yml
+++ b/config/feature_flags/development/audit_event_streaming_git_operations_deploy_key_event.yml
@@ -1,8 +1,8 @@
---
-name: uncached_mr_attention_requests_count
-introduced_by_url: https://gitlab.com/gitlab-org/gitlab/-/merge_requests/84145
-rollout_issue_url: https://gitlab.com/gitlab-org/gitlab/-/issues/357480
-milestone: '14.10'
+name: audit_event_streaming_git_operations_deploy_key_event
+introduced_by_url: https://gitlab.com/gitlab-org/gitlab/-/merge_requests/93160
+rollout_issue_url: https://gitlab.com/gitlab-org/gitlab/-/issues/368765
+milestone: '15.3'
type: development
-group: group::code review
+group: group::release
default_enabled: false
diff --git a/doc/administration/audit_event_streaming.md b/doc/administration/audit_event_streaming.md
index 32214e6e5de..e2f19b2d45d 100644
--- a/doc/administration/audit_event_streaming.md
+++ b/doc/administration/audit_event_streaming.md
@@ -336,6 +336,7 @@ Users with at least the Owner role for a group can list event streaming destinat
> - [Introduced](https://gitlab.com/gitlab-org/gitlab/-/issues/332747) in GitLab 14.9 [with a flag](../administration/feature_flags.md) named `audit_event_streaming_git_operations`. Disabled by default.
> - [Enabled on GitLab.com](https://gitlab.com/gitlab-org/gitlab/-/issues/357211) in GitLab 15.0.
> - [Enabled on self-managed](https://gitlab.com/gitlab-org/gitlab/-/issues/357211) in GitLab 15.1 by default.
+> - [Added `details.author_class` field](https://gitlab.com/gitlab-org/gitlab/-/issues/363876) in GitLab 15.3.
FLAG:
On self-managed GitLab, by default this feature is available. To hide the
@@ -377,6 +378,7 @@ Fetch:
"entity_type": "Project",
"details": {
"author_name": "Administrator",
+ "author_class": "User",
"target_id": 29,
"target_type": "Project",
"target_details": "example-project",
@@ -408,6 +410,7 @@ Push:
"entity_type": "Project",
"details": {
"author_name": "Administrator",
+ "author_class": "User",
"target_id": 29,
"target_type": "Project",
"target_details": "example-project",
@@ -429,6 +432,42 @@ Push:
}
```
+#### Example payloads for SSH events with Deploy Key
+
+> [Introduced](https://gitlab.com/gitlab-org/gitlab/-/issues/363876) in GitLab 15.3 [with a flag](../administration/feature_flags.md) named `audit_event_streaming_git_operations_deploy_key_event`. Disabled by default.
+
+Fetch:
+
+```json
+{
+ "id": 1,
+ "author_id": -3,
+ "entity_id": 29,
+ "entity_type": "Project",
+ "details": {
+ "author_name": "deploy-key-name",
+ "author_class": "DeployKey",
+ "target_id": 29,
+ "target_type": "Project",
+ "target_details": "example-project",
+ "custom_message": {
+ "protocol": "ssh",
+ "action": "git-upload-pack"
+ },
+ "ip_address": "127.0.0.1",
+ "entity_path": "example-group/example-project"
+ },
+ "ip_address": "127.0.0.1",
+ "author_name": "deploy-key-name",
+ "entity_path": "example-group/example-project",
+ "target_details": "example-project",
+ "created_at": "2022-07-26T05:43:53.662Z",
+ "target_type": "Project",
+ "target_id": 29,
+ "event_type": "repository_git_operation"
+}
+```
+
### Example payloads for HTTP and HTTPS events
Fetch:
@@ -441,6 +480,7 @@ Fetch:
"entity_type": "Project",
"details": {
"author_name": "Administrator",
+ "author_class": "User",
"target_id": 29,
"target_type": "Project",
"target_details": "example-project",
@@ -472,6 +512,7 @@ Push:
"entity_type": "Project",
"details": {
"author_name": "Administrator",
+ "author_class": "User",
"target_id": 29,
"target_type": "Project",
"target_details": "example-project",
@@ -493,6 +534,40 @@ Push:
}
```
+#### Example payloads for HTTP and HTTPS events with Deploy Token
+
+Fetch:
+
+```json
+{
+ "id": 1,
+ "author_id": -2,
+ "entity_id": 22,
+ "entity_type": "Project",
+ "details": {
+ "author_name": "deploy-token-name",
+ "author_class": "DeployToken",
+ "target_id": 22,
+ "target_type": "Project",
+ "target_details": "example-project",
+ "custom_message": {
+ "protocol": "http",
+ "action": "git-upload-pack"
+ },
+ "ip_address": "127.0.0.1",
+ "entity_path": "example-group/example-project"
+ },
+ "ip_address": "127.0.0.1",
+ "author_name": "deploy-token-name",
+ "entity_path": "example-group/example-project",
+ "target_details": "example-project",
+ "created_at": "2022-07-26T05:46:25.850Z",
+ "target_type": "Project",
+ "target_id": 22,
+ "event_type": "repository_git_operation"
+}
+```
+
### Example payloads for events from GitLab UI download button
Fetch:
@@ -506,6 +581,7 @@ Fetch:
"details": {
"custom_message": "Repository Download Started",
"author_name": "example_username",
+ "author_class": "User",
"target_id": 29,
"target_type": "Project",
"target_details": "example-group/example-project",
diff --git a/doc/user/discussions/index.md b/doc/user/discussions/index.md
index 0eb6d853531..b9e17280f98 100644
--- a/doc/user/discussions/index.md
+++ b/doc/user/discussions/index.md
@@ -49,6 +49,18 @@ to all the members of that project's group. This might be interpreted as spam.
Notifications and mentions can be disabled in
[a group's settings](../group/manage.md#disable-email-notifications).
+### Mention a group in an issue or merge request
+
+When you mention a group in a comment, every member of the group gets a to-do item
+added to their To-do list.
+
+1. Open the MR or issue.
+1. In a comment, type `@` followed by the user, group, or subgroup namespace.
+ For example, `@alex`, `@alex-team`, or `@alex-team/marketing`.
+1. Select **Comment**.
+
+A to-do item is created for all the group and subgroup members.
+
## Add a comment to a merge request diff
You can add comments to a merge request diff. These comments
diff --git a/doc/user/group/index.md b/doc/user/group/index.md
index 3e2672e725d..b8880feb743 100644
--- a/doc/user/group/index.md
+++ b/doc/user/group/index.md
@@ -48,29 +48,6 @@ For example, consider a user named Alex:
| Alex creates a group for their team with the group name `alex-team`. The group and its projects are available at: `https://gitlab.example.com/alex-team`. | The namespace in this case is `alex-team`. |
| Alex creates a subgroup of `alex-team` with the subgroup name `marketing`. The subgroup and its projects are available at: `https://gitlab.example.com/alex-team/marketing`. | The namespace in this case is `alex-team/marketing`. |
-## Mention a group in an issue or merge request
-
-When you mention a group in a comment, every member of the group gets a to-do item
-added to their To-do list.
-
-1. Open the MR or issue.
-1. In a comment, type `@` followed by the user, group, or subgroup namespace.
- For example, `@alex`, `@alex-team`, or `@alex-team/marketing`.
-1. Select **Comment**.
-
-A to-do item is created for all the group and subgroup members.
-
-## Export members as CSV **(PREMIUM)**
-
-> - [Introduced](https://gitlab.com/gitlab-org/gitlab/-/issues/287940) in GitLab 14.2.
-> - [Feature flag removed](https://gitlab.com/gitlab-org/gitlab/-/issues/336520) in GitLab 14.5.
-
-You can export a list of members in a group or subgroup as a CSV.
-
-1. Go to your group or subgroup and select either **Group information > Members** or **Subgroup information > Members**.
-1. Select **Export as CSV**.
-1. After the CSV file has been generated, it is emailed as an attachment to the user that requested it.
-
## Related topics
- [Group wikis](../project/wiki/index.md)
diff --git a/doc/user/group/manage.md b/doc/user/group/manage.md
index c54d58931dc..b50a41ccf31 100644
--- a/doc/user/group/manage.md
+++ b/doc/user/group/manage.md
@@ -380,6 +380,17 @@ To disable group mentions:
1. Select **Disable group mentions**.
1. Select **Save changes**.
+## Export members as CSV **(PREMIUM)**
+
+> - [Introduced](https://gitlab.com/gitlab-org/gitlab/-/issues/287940) in GitLab 14.2.
+> - [Feature flag removed](https://gitlab.com/gitlab-org/gitlab/-/issues/336520) in GitLab 14.5.
+
+You can export a list of members in a group or subgroup as a CSV.
+
+1. Go to your group or subgroup and select either **Group information > Members** or **Subgroup information > Members**.
+1. Select **Export as CSV**.
+1. After the CSV file has been generated, it is emailed as an attachment to the user that requested it.
+
## User cap for groups
> [Introduced](https://gitlab.com/gitlab-org/gitlab/-/issues/330027) in GitLab 14.7.
diff --git a/glfm_specification/example_snapshots/html.yml b/glfm_specification/example_snapshots/html.yml
index 105a0d26409..f89f03ecc31 100644
--- a/glfm_specification/example_snapshots/html.yml
+++ b/glfm_specification/example_snapshots/html.yml
@@ -1682,7 +1682,7 @@
static: |-
<div><a href="bar">*foo*</a></div>
wysiwyg: |-
- <div><p><a target="_blank" rel="noopener noreferrer nofollow" href="bar">*foo*</a></p></div>
+ <div><p><a target="_blank" rel="noopener noreferrer nofollow" href="http://test.host/bar" canonicalsrc="bar">*foo*</a></p></div>
04_06__leaf_blocks__html_blocks__013:
canonical: |
<table><tr><td>
@@ -1723,7 +1723,7 @@
*bar*
</a>
wysiwyg: |-
- <p><a target="_blank" rel="noopener noreferrer nofollow" href="foo">
+ <p><a target="_blank" rel="noopener noreferrer nofollow" href="http://test.host/foo" canonicalsrc="foo">
*bar*
</a></p>
04_06__leaf_blocks__html_blocks__016:
@@ -2065,7 +2065,7 @@
baz</a></p>
wysiwyg: |-
<p>Foo
- <a target="_blank" rel="noopener noreferrer nofollow" href="bar">
+ <a target="_blank" rel="noopener noreferrer nofollow" href="http://test.host/bar" canonicalsrc="bar">
baz</a></p>
04_06__leaf_blocks__html_blocks__040:
canonical: |
@@ -2145,7 +2145,7 @@
<p data-sourcepos="3:1-3:5" dir="auto"><a href="/url" title="title">foo</a></p>
wysiwyg: |-
<pre>[foo]: /url "title"</pre>
- <p><a target="_blank" rel="noopener noreferrer nofollow" href="/url" title="title">foo</a></p>
+ <p><a target="_blank" rel="noopener noreferrer nofollow" href="http://test.host/url" title="title" canonicalsrc="/url">foo</a></p>
04_07__leaf_blocks__link_reference_definitions__002:
canonical: |
<p><a href="/url" title="the title">foo</a></p>
@@ -2153,7 +2153,7 @@
<p data-sourcepos="5:1-5:5" dir="auto"><a href="/url" title="the title">foo</a></p>
wysiwyg: |-
<pre>[foo]: /url "the title"</pre>
- <p><a target="_blank" rel="noopener noreferrer nofollow" href="/url" title="the title">foo</a></p>
+ <p><a target="_blank" rel="noopener noreferrer nofollow" href="http://test.host/url" title="the title" canonicalsrc="/url">foo</a></p>
04_07__leaf_blocks__link_reference_definitions__003:
canonical: |
<p><a href="my_(url)" title="title (with parens)">Foo*bar]</a></p>
@@ -2161,7 +2161,7 @@
<p data-sourcepos="3:1-3:11" dir="auto"><a href="my_(url)" title="title (with parens)">Foo*bar]</a></p>
wysiwyg: |-
<pre>[foo*bar\]]: my_(url) "title (with parens)"</pre>
- <p><a target="_blank" rel="noopener noreferrer nofollow" href="my_(url)" title="title (with parens)">Foo*bar]</a></p>
+ <p><a target="_blank" rel="noopener noreferrer nofollow" href="http://test.host/my_(url)" title="title (with parens)" canonicalsrc="my_(url)">Foo*bar]</a></p>
04_07__leaf_blocks__link_reference_definitions__004:
canonical: |
<p><a href="my%20url" title="title">Foo bar</a></p>
@@ -2169,7 +2169,7 @@
<p data-sourcepos="5:1-5:9" dir="auto"><a href="my%20url" title="title">Foo bar</a></p>
wysiwyg: |-
<pre>[foo bar]: my url "title"</pre>
- <p><a target="_blank" rel="noopener noreferrer nofollow" href="my%20url" title="title">Foo bar</a></p>
+ <p><a target="_blank" rel="noopener noreferrer nofollow" href="http://test.host/my%20url" title="title" canonicalsrc="my%20url">Foo bar</a></p>
04_07__leaf_blocks__link_reference_definitions__005:
canonical: |
<p><a href="/url" title="
@@ -2189,11 +2189,11 @@
line1
line2
"</pre>
- <p><a target="_blank" rel="noopener noreferrer nofollow" href="/url" title="
+ <p><a target="_blank" rel="noopener noreferrer nofollow" href="http://test.host/url" title="
title
line1
line2
- ">foo</a></p>
+ " canonicalsrc="/url">foo</a></p>
04_07__leaf_blocks__link_reference_definitions__006:
canonical: |
<p>[foo]: /url 'title</p>
@@ -2214,7 +2214,7 @@
<p data-sourcepos="4:1-4:5" dir="auto"><a href="/url">foo</a></p>
wysiwyg: |-
<pre>[foo]: /url</pre>
- <p><a target="_blank" rel="noopener noreferrer nofollow" href="/url">foo</a></p>
+ <p><a target="_blank" rel="noopener noreferrer nofollow" href="http://test.host/url" canonicalsrc="/url">foo</a></p>
04_07__leaf_blocks__link_reference_definitions__008:
canonical: |
<p>[foo]:</p>
@@ -2232,7 +2232,7 @@
<p data-sourcepos="3:1-3:5" dir="auto"><a href="">foo</a></p>
wysiwyg: |-
<pre>[foo]: </pre>
- <p><a target="_blank" rel="noopener noreferrer nofollow" href="">foo</a></p>
+ <p><a target="_blank" rel="noopener noreferrer nofollow" href="" canonicalsrc="">foo</a></p>
04_07__leaf_blocks__link_reference_definitions__010:
canonical: |
<p>[foo]: <bar>(baz)</p>
@@ -2250,14 +2250,14 @@
<p data-sourcepos="3:1-3:5" dir="auto"><a href="/url%5Cbar*baz" title='foo"bar\baz'>foo</a></p>
wysiwyg: |-
<pre>[foo]: /url\bar*baz "foo"bar\baz"</pre>
- <p><a target="_blank" rel="noopener noreferrer nofollow" href="/url%5Cbar*baz" title="foo&quot;bar\baz">foo</a></p>
+ <p><a target="_blank" rel="noopener noreferrer nofollow" href="http://test.host/url%5Cbar*baz" title="foo&quot;bar\baz" canonicalsrc="/url%5Cbar*baz">foo</a></p>
04_07__leaf_blocks__link_reference_definitions__012:
canonical: |
<p><a href="url">foo</a></p>
static: |-
<p data-sourcepos="1:1-1:5" dir="auto"><a href="url">foo</a></p>
wysiwyg: |-
- <p><a target="_blank" rel="noopener noreferrer nofollow" href="url">foo</a></p>
+ <p><a target="_blank" rel="noopener noreferrer nofollow" href="http://test.host/url" canonicalsrc="url">foo</a></p>
<pre>[foo]: url</pre>
04_07__leaf_blocks__link_reference_definitions__013:
canonical: |
@@ -2265,7 +2265,7 @@
static: |-
<p data-sourcepos="1:1-1:5" dir="auto"><a href="first">foo</a></p>
wysiwyg: |-
- <p><a target="_blank" rel="noopener noreferrer nofollow" href="first">foo</a></p>
+ <p><a target="_blank" rel="noopener noreferrer nofollow" href="http://test.host/first" canonicalsrc="first">foo</a></p>
<pre>[foo]: first</pre>
<pre>[foo]: second</pre>
04_07__leaf_blocks__link_reference_definitions__014:
@@ -2275,7 +2275,7 @@
<p data-sourcepos="3:1-3:5" dir="auto"><a href="/url">Foo</a></p>
wysiwyg: |-
<pre>[foo]: /url</pre>
- <p><a target="_blank" rel="noopener noreferrer nofollow" href="/url">Foo</a></p>
+ <p><a target="_blank" rel="noopener noreferrer nofollow" href="http://test.host/url" canonicalsrc="/url">Foo</a></p>
04_07__leaf_blocks__link_reference_definitions__015:
canonical: |
<p><a href="/%CF%86%CE%BF%CF%85">αγω</a></p>
@@ -2283,7 +2283,7 @@
<p data-sourcepos="3:1-3:8" dir="auto"><a href="/%CF%86%CE%BF%CF%85">αγω</a></p>
wysiwyg: |-
<pre>[αγω]: /φου</pre>
- <p><a target="_blank" rel="noopener noreferrer nofollow" href="/%CF%86%CE%BF%CF%85">αγω</a></p>
+ <p><a target="_blank" rel="noopener noreferrer nofollow" href="http://test.host/%CF%86%CE%BF%CF%85" canonicalsrc="/%CF%86%CE%BF%CF%85">αγω</a></p>
04_07__leaf_blocks__link_reference_definitions__016:
canonical: ""
static: ""
@@ -2367,7 +2367,7 @@
<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><a target="_blank" rel="noopener noreferrer nofollow" href="http://test.host/url" canonicalsrc="/url">Foo</a></h1>
<pre>[foo]: /url</pre>
<blockquote multiline="false"><p>bar</p></blockquote>
04_07__leaf_blocks__link_reference_definitions__024:
@@ -2381,7 +2381,7 @@
wysiwyg: |-
<pre>[foo]: /url</pre>
<h1>bar</h1>
- <p><a target="_blank" rel="noopener noreferrer nofollow" href="/url">foo</a></p>
+ <p><a target="_blank" rel="noopener noreferrer nofollow" href="http://test.host/url" canonicalsrc="/url">foo</a></p>
04_07__leaf_blocks__link_reference_definitions__025:
canonical: |
<p>===
@@ -2392,7 +2392,7 @@
wysiwyg: |-
<pre>[foo]: /url</pre>
<p>===
- <a target="_blank" rel="noopener noreferrer nofollow" href="/url">foo</a></p>
+ <a target="_blank" rel="noopener noreferrer nofollow" href="http://test.host/url" canonicalsrc="/url">foo</a></p>
04_07__leaf_blocks__link_reference_definitions__026:
canonical: |
<p><a href="/foo-url" title="foo">foo</a>,
@@ -2406,9 +2406,9 @@
<pre>[foo]: /foo-url "foo"</pre>
<pre>[bar]: /bar-url "bar"</pre>
<pre>[baz]: /baz-url</pre>
- <p><a target="_blank" rel="noopener noreferrer nofollow" href="/foo-url" title="foo">foo</a>,
- <a target="_blank" rel="noopener noreferrer nofollow" href="/bar-url" title="bar">bar</a>,
- <a target="_blank" rel="noopener noreferrer nofollow" href="/baz-url">baz</a></p>
+ <p><a target="_blank" rel="noopener noreferrer nofollow" href="http://test.host/foo-url" title="foo" canonicalsrc="/foo-url">foo</a>,
+ <a target="_blank" rel="noopener noreferrer nofollow" href="http://test.host/bar-url" title="bar" canonicalsrc="/bar-url">bar</a>,
+ <a target="_blank" rel="noopener noreferrer nofollow" href="http://test.host/baz-url" canonicalsrc="/baz-url">baz</a></p>
04_07__leaf_blocks__link_reference_definitions__027:
canonical: |
<p><a href="/url">foo</a></p>
@@ -2419,7 +2419,7 @@
<blockquote data-sourcepos="3:1-3:13" dir="auto">
</blockquote>
wysiwyg: |-
- <p><a target="_blank" rel="noopener noreferrer nofollow" href="/url">foo</a></p>
+ <p><a target="_blank" rel="noopener noreferrer nofollow" href="http://test.host/url" canonicalsrc="/url">foo</a></p>
<blockquote multiline="false"><pre>[foo]: /url</pre></blockquote>
04_07__leaf_blocks__link_reference_definitions__028:
canonical: ""
@@ -4883,7 +4883,7 @@
static: |-
<p data-sourcepos="1:1-1:28" dir="auto"><a href="http://example.com?find=%5C*" rel="nofollow noreferrer noopener" target="_blank">http://example.com?find=\*</a></p>
wysiwyg: |-
- <p><a target="_blank" rel="noopener noreferrer nofollow" href="http://example.com?find=%5C*">http://example.com?find=\*</a></p>
+ <p><a target="_blank" rel="noopener noreferrer nofollow" href="http://example.com/?find=%5C*" canonicalsrc="http://example.com?find=%5C*">http://example.com?find=\*</a></p>
06_02__inlines__backslash_escapes__010:
canonical: |
<a href="/bar\/)">
@@ -4897,14 +4897,14 @@
static: |-
<p data-sourcepos="1:1-1:23" dir="auto"><a href="/bar*" title="ti*tle">foo</a></p>
wysiwyg: |-
- <p><a target="_blank" rel="noopener noreferrer nofollow" href="/bar*" title="ti*tle">foo</a></p>
+ <p><a target="_blank" rel="noopener noreferrer nofollow" href="http://test.host/bar*" title="ti*tle" canonicalsrc="/bar*">foo</a></p>
06_02__inlines__backslash_escapes__012:
canonical: |
<p><a href="/bar*" title="ti*tle">foo</a></p>
static: |-
<p data-sourcepos="1:1-1:5" dir="auto"><a href="/bar*" title="ti*tle">foo</a></p>
wysiwyg: |-
- <p><a target="_blank" rel="noopener noreferrer nofollow" href="/bar*" title="ti*tle">foo</a></p>
+ <p><a target="_blank" rel="noopener noreferrer nofollow" href="http://test.host/bar*" title="ti*tle" canonicalsrc="/bar*">foo</a></p>
<pre>[foo]: /bar* "ti*tle"</pre>
06_02__inlines__backslash_escapes__013:
canonical: |
@@ -4987,14 +4987,14 @@
static: |-
<p data-sourcepos="1:1-1:37" dir="auto"><a href="/f%C3%B6%C3%B6" title="föö">foo</a></p>
wysiwyg: |-
- <p><a target="_blank" rel="noopener noreferrer nofollow" href="/f%C3%B6%C3%B6" title="föö">foo</a></p>
+ <p><a target="_blank" rel="noopener noreferrer nofollow" href="http://test.host/f%C3%B6%C3%B6" title="föö" canonicalsrc="/f%C3%B6%C3%B6">foo</a></p>
06_03__inlines__entity_and_numeric_character_references__009:
canonical: |
<p><a href="/f%C3%B6%C3%B6" title="föö">foo</a></p>
static: |-
<p data-sourcepos="1:1-1:5" dir="auto"><a href="/f%C3%B6%C3%B6" title="föö">foo</a></p>
wysiwyg: |-
- <p><a target="_blank" rel="noopener noreferrer nofollow" href="/f%C3%B6%C3%B6" title="föö">foo</a></p>
+ <p><a target="_blank" rel="noopener noreferrer nofollow" href="http://test.host/f%C3%B6%C3%B6" title="föö" canonicalsrc="/f%C3%B6%C3%B6">foo</a></p>
<pre>[foo]: /föö "föö"</pre>
06_03__inlines__entity_and_numeric_character_references__010:
canonical: |
@@ -5193,7 +5193,7 @@
static: |-
<p data-sourcepos="1:1-1:13" dir="auto"><a href="%60" rel="nofollow noreferrer noopener" target="_blank">`</a></p>
wysiwyg: |-
- <p><a target="_blank" rel="noopener noreferrer nofollow" href="`">`</a></p>
+ <p><a target="_blank" rel="noopener noreferrer nofollow" href="http://test.host/%60" canonicalsrc="`">`</a></p>
06_04__inlines__code_spans__018:
canonical: |
<p><code>&lt;http://foo.bar.</code>baz&gt;`</p>
@@ -5207,7 +5207,7 @@
static: |-
<p data-sourcepos="1:1-1:22" dir="auto"><a href="http://foo.bar.%60baz" rel="nofollow noreferrer noopener" target="_blank">http://foo.bar.`baz</a>`</p>
wysiwyg: |-
- <p><a target="_blank" rel="noopener noreferrer nofollow" href="http://foo.bar.%60baz">http://foo.bar.`baz</a>`</p>
+ <p><a target="_blank" rel="noopener noreferrer nofollow" href="http://foo.bar.`baz/" canonicalsrc="http://foo.bar.%60baz">http://foo.bar.`baz</a>`</p>
06_04__inlines__code_spans__020:
canonical: |
<p>```foo``</p>
@@ -5615,7 +5615,7 @@
static: |-
<p data-sourcepos="1:1-1:17" dir="auto"><em>foo <a href="/url">bar</a></em></p>
wysiwyg: |-
- <p><em>foo </em><a target="_blank" rel="noopener noreferrer nofollow" href="/url"><em>bar</em></a></p>
+ <p><em>foo </em><a target="_blank" rel="noopener noreferrer nofollow" href="http://test.host/url" canonicalsrc="/url"><em>bar</em></a></p>
06_05__inlines__emphasis_and_strong_emphasis__055:
canonical: |
<p><em>foo
@@ -5723,7 +5723,7 @@
static: |-
<p data-sourcepos="1:1-1:19" dir="auto"><em>foo <a href="/url"><em>bar</em></a></em></p>
wysiwyg: |-
- <p><em>foo </em><a target="_blank" rel="noopener noreferrer nofollow" href="/url"><em>bar</em></a></p>
+ <p><em>foo </em><a target="_blank" rel="noopener noreferrer nofollow" href="http://test.host/url" canonicalsrc="/url"><em>bar</em></a></p>
06_05__inlines__emphasis_and_strong_emphasis__070:
canonical: |
<p>** is not an empty emphasis</p>
@@ -5744,7 +5744,7 @@
static: |-
<p data-sourcepos="1:1-1:19" dir="auto"><strong>foo <a href="/url">bar</a></strong></p>
wysiwyg: |-
- <p><strong>foo </strong><a target="_blank" rel="noopener noreferrer nofollow" href="/url"><strong>bar</strong></a></p>
+ <p><strong>foo </strong><a target="_blank" rel="noopener noreferrer nofollow" href="http://test.host/url" canonicalsrc="/url"><strong>bar</strong></a></p>
06_05__inlines__emphasis_and_strong_emphasis__073:
canonical: |
<p><strong>foo
@@ -5827,7 +5827,7 @@
static: |-
<p data-sourcepos="1:1-1:21" dir="auto"><strong>foo <a href="/url"><em>bar</em></a></strong></p>
wysiwyg: |-
- <p><strong>foo </strong><a target="_blank" rel="noopener noreferrer nofollow" href="/url"><strong><em>bar</em></strong></a></p>
+ <p><strong>foo </strong><a target="_blank" rel="noopener noreferrer nofollow" href="http://test.host/url" canonicalsrc="/url"><strong><em>bar</em></strong></a></p>
06_05__inlines__emphasis_and_strong_emphasis__084:
canonical: |
<p>__ is not an empty emphasis</p>
@@ -6107,21 +6107,21 @@
static: |-
<p data-sourcepos="1:1-1:13" dir="auto">*<a href="/url">bar*</a></p>
wysiwyg: |-
- <p>*<a target="_blank" rel="noopener noreferrer nofollow" href="/url">bar*</a></p>
+ <p>*<a target="_blank" rel="noopener noreferrer nofollow" href="http://test.host/url" canonicalsrc="/url">bar*</a></p>
06_05__inlines__emphasis_and_strong_emphasis__124:
canonical: |
<p>_foo <a href="/url">bar_</a></p>
static: |-
<p data-sourcepos="1:1-1:17" dir="auto">_foo <a href="/url">bar_</a></p>
wysiwyg: |-
- <p>_foo <a target="_blank" rel="noopener noreferrer nofollow" href="/url">bar_</a></p>
+ <p>_foo <a target="_blank" rel="noopener noreferrer nofollow" href="http://test.host/url" canonicalsrc="/url">bar_</a></p>
06_05__inlines__emphasis_and_strong_emphasis__125:
canonical: |
<p>*<img src="foo" title="*"/></p>
static: |-
<p data-sourcepos="1:1-1:27" dir="auto">*<a class="no-attachment-icon" href="foo" target="_blank" rel="noopener noreferrer"><img src="data:image/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==" title="*" decoding="async" class="lazy" data-src="foo"></a></p>
wysiwyg: |-
- <p>*<img src="foo" title="*"></p>
+ <p>*<img src="http://test.host/foo" title="*" data-canonical-src="foo"></p>
06_05__inlines__emphasis_and_strong_emphasis__126:
canonical: |
<p>**<a href="**"></p>
@@ -6156,14 +6156,14 @@
static: |-
<p data-sourcepos="1:1-1:25" dir="auto">**a<a href="http://foo.bar/?q=**" rel="nofollow noreferrer noopener" target="_blank">http://foo.bar/?q=**</a></p>
wysiwyg: |-
- <p>**a<a target="_blank" rel="noopener noreferrer nofollow" href="http://foo.bar/?q=**">http://foo.bar/?q=**</a></p>
+ <p>**a<a target="_blank" rel="noopener noreferrer nofollow" href="http://foo.bar/?q=**" canonicalsrc="http://foo.bar/?q=**">http://foo.bar/?q=**</a></p>
06_05__inlines__emphasis_and_strong_emphasis__131:
canonical: |
<p>__a<a href="http://foo.bar/?q=__">http://foo.bar/?q=__</a></p>
static: |-
<p data-sourcepos="1:1-1:25" dir="auto">__a<a href="http://foo.bar/?q=__" rel="nofollow noreferrer noopener" target="_blank">http://foo.bar/?q=__</a></p>
wysiwyg: |-
- <p>__a<a target="_blank" rel="noopener noreferrer nofollow" href="http://foo.bar/?q=__">http://foo.bar/?q=__</a></p>
+ <p>__a<a target="_blank" rel="noopener noreferrer nofollow" href="http://foo.bar/?q=__" canonicalsrc="http://foo.bar/?q=__">http://foo.bar/?q=__</a></p>
06_06__inlines__strikethrough_extension__001:
canonical: |
<p><del>Hi</del> Hello, world!</p>
@@ -6187,28 +6187,28 @@
static: |-
<p data-sourcepos="1:1-1:20" dir="auto"><a href="/uri" title="title">link</a></p>
wysiwyg: |-
- <p><a target="_blank" rel="noopener noreferrer nofollow" href="/uri" title="title">link</a></p>
+ <p><a target="_blank" rel="noopener noreferrer nofollow" href="http://test.host/uri" title="title" canonicalsrc="/uri">link</a></p>
06_07__inlines__links__002:
canonical: |
<p><a href="/uri">link</a></p>
static: |-
<p data-sourcepos="1:1-1:12" dir="auto"><a href="/uri">link</a></p>
wysiwyg: |-
- <p><a target="_blank" rel="noopener noreferrer nofollow" href="/uri">link</a></p>
+ <p><a target="_blank" rel="noopener noreferrer nofollow" href="http://test.host/uri" canonicalsrc="/uri">link</a></p>
06_07__inlines__links__003:
canonical: |
<p><a href="">link</a></p>
static: |-
<p data-sourcepos="1:1-1:8" dir="auto"><a href="">link</a></p>
wysiwyg: |-
- <p><a target="_blank" rel="noopener noreferrer nofollow" href="">link</a></p>
+ <p><a target="_blank" rel="noopener noreferrer nofollow" href="" canonicalsrc="">link</a></p>
06_07__inlines__links__004:
canonical: |
<p><a href="">link</a></p>
static: |-
<p data-sourcepos="1:1-1:10" dir="auto"><a href="">link</a></p>
wysiwyg: |-
- <p><a target="_blank" rel="noopener noreferrer nofollow" href="">link</a></p>
+ <p><a target="_blank" rel="noopener noreferrer nofollow" href="" canonicalsrc="">link</a></p>
06_07__inlines__links__005:
canonical: |
<p>[link](/my uri)</p>
@@ -6222,7 +6222,7 @@
static: |-
<p data-sourcepos="1:1-1:17" dir="auto"><a href="/my%20uri">link</a></p>
wysiwyg: |-
- <p><a target="_blank" rel="noopener noreferrer nofollow" href="/my%20uri">link</a></p>
+ <p><a target="_blank" rel="noopener noreferrer nofollow" href="http://test.host/my%20uri" canonicalsrc="/my%20uri">link</a></p>
06_07__inlines__links__007:
canonical: |
<p>[link](foo
@@ -6247,7 +6247,7 @@
static: |-
<p data-sourcepos="1:1-1:10" dir="auto"><a href="b)c">a</a></p>
wysiwyg: |-
- <p><a target="_blank" rel="noopener noreferrer nofollow" href="b)c">a</a></p>
+ <p><a target="_blank" rel="noopener noreferrer nofollow" href="http://test.host/b)c" canonicalsrc="b)c">a</a></p>
06_07__inlines__links__010:
canonical: |
<p>[link](&lt;foo&gt;)</p>
@@ -6274,35 +6274,35 @@
static: |-
<p data-sourcepos="1:1-1:15" dir="auto"><a href="(foo)">link</a></p>
wysiwyg: |-
- <p><a target="_blank" rel="noopener noreferrer nofollow" href="(foo)">link</a></p>
+ <p><a target="_blank" rel="noopener noreferrer nofollow" href="http://test.host/(foo)" canonicalsrc="(foo)">link</a></p>
06_07__inlines__links__013:
canonical: |
<p><a href="foo(and(bar))">link</a></p>
static: |-
<p data-sourcepos="1:1-1:21" dir="auto"><a href="foo(and(bar))">link</a></p>
wysiwyg: |-
- <p><a target="_blank" rel="noopener noreferrer nofollow" href="foo(and(bar))">link</a></p>
+ <p><a target="_blank" rel="noopener noreferrer nofollow" href="http://test.host/foo(and(bar))" canonicalsrc="foo(and(bar))">link</a></p>
06_07__inlines__links__014:
canonical: |
<p><a href="foo(and(bar)">link</a></p>
static: |-
<p data-sourcepos="1:1-1:23" dir="auto"><a href="foo(and(bar)">link</a></p>
wysiwyg: |-
- <p><a target="_blank" rel="noopener noreferrer nofollow" href="foo(and(bar)">link</a></p>
+ <p><a target="_blank" rel="noopener noreferrer nofollow" href="http://test.host/foo(and(bar)" canonicalsrc="foo(and(bar)">link</a></p>
06_07__inlines__links__015:
canonical: |
<p><a href="foo(and(bar)">link</a></p>
static: |-
<p data-sourcepos="1:1-1:22" dir="auto"><a href="foo(and(bar)">link</a></p>
wysiwyg: |-
- <p><a target="_blank" rel="noopener noreferrer nofollow" href="foo(and(bar)">link</a></p>
+ <p><a target="_blank" rel="noopener noreferrer nofollow" href="http://test.host/foo(and(bar)" canonicalsrc="foo(and(bar)">link</a></p>
06_07__inlines__links__016:
canonical: |
<p><a href="foo):">link</a></p>
static: |-
<p data-sourcepos="1:1-1:15" dir="auto"><a>link</a></p>
wysiwyg: |-
- <p><a target="_blank" rel="noopener noreferrer nofollow" href="foo):">link</a></p>
+ <p><a target="_blank" rel="noopener noreferrer nofollow" href="http://test.host/foo):" canonicalsrc="foo):">link</a></p>
06_07__inlines__links__017:
canonical: |
<p><a href="#fragment">link</a></p>
@@ -6313,30 +6313,30 @@
<p data-sourcepos="3:1-3:35" dir="auto"><a href="http://example.com#fragment" rel="nofollow noreferrer noopener" target="_blank">link</a></p>
<p data-sourcepos="5:1-5:37" dir="auto"><a href="http://example.com?foo=3#frag" rel="nofollow noreferrer noopener" target="_blank">link</a></p>
wysiwyg: |-
- <p><a target="_blank" rel="noopener noreferrer nofollow" href="#fragment">link</a></p>
- <p><a target="_blank" rel="noopener noreferrer nofollow" href="http://example.com#fragment">link</a></p>
- <p><a target="_blank" rel="noopener noreferrer nofollow" href="http://example.com?foo=3#frag">link</a></p>
+ <p><a target="_blank" rel="noopener noreferrer nofollow" href="http://test.host/#fragment" canonicalsrc="#fragment">link</a></p>
+ <p><a target="_blank" rel="noopener noreferrer nofollow" href="http://example.com/#fragment" canonicalsrc="http://example.com#fragment">link</a></p>
+ <p><a target="_blank" rel="noopener noreferrer nofollow" href="http://example.com/?foo=3#frag" canonicalsrc="http://example.com?foo=3#frag">link</a></p>
06_07__inlines__links__018:
canonical: |
<p><a href="foo%5Cbar">link</a></p>
static: |-
<p data-sourcepos="1:1-1:15" dir="auto"><a href="foo%5Cbar">link</a></p>
wysiwyg: |-
- <p><a target="_blank" rel="noopener noreferrer nofollow" href="foo%5Cbar">link</a></p>
+ <p><a target="_blank" rel="noopener noreferrer nofollow" href="http://test.host/foo%5Cbar" canonicalsrc="foo%5Cbar">link</a></p>
06_07__inlines__links__019:
canonical: |
<p><a href="foo%20b%C3%A4">link</a></p>
static: |-
<p data-sourcepos="1:1-1:21" dir="auto"><a href="foo%20b%C3%A4">link</a></p>
wysiwyg: |-
- <p><a target="_blank" rel="noopener noreferrer nofollow" href="foo%20b%C3%A4">link</a></p>
+ <p><a target="_blank" rel="noopener noreferrer nofollow" href="http://test.host/foo%20b%C3%A4" canonicalsrc="foo%20b%C3%A4">link</a></p>
06_07__inlines__links__020:
canonical: |
<p><a href="%22title%22">link</a></p>
static: |-
<p data-sourcepos="1:1-1:15" dir="auto"><a href="%22title%22">link</a></p>
wysiwyg: |-
- <p><a target="_blank" rel="noopener noreferrer nofollow" href="%22title%22">link</a></p>
+ <p><a target="_blank" rel="noopener noreferrer nofollow" href="http://test.host/%22title%22" canonicalsrc="%22title%22">link</a></p>
06_07__inlines__links__021:
canonical: |
<p><a href="/url" title="title">link</a>
@@ -6347,21 +6347,21 @@
<a href="/url" title="title">link</a>
<a href="/url" title="title">link</a></p>
wysiwyg: |-
- <p><a target="_blank" rel="noopener noreferrer nofollow" href="/url" title="title">linklinklink</a></p>
+ <p><a target="_blank" rel="noopener noreferrer nofollow" href="http://test.host/url" title="title" canonicalsrc="/url">linklinklink</a></p>
06_07__inlines__links__022:
canonical: |
<p><a href="/url" title="title &quot;&quot;">link</a></p>
static: |-
<p data-sourcepos="1:1-1:29" dir="auto"><a href="/url" title='title ""'>link</a></p>
wysiwyg: |-
- <p><a target="_blank" rel="noopener noreferrer nofollow" href="/url" title="title &quot;&quot;">link</a></p>
+ <p><a target="_blank" rel="noopener noreferrer nofollow" href="http://test.host/url" title="title &quot;&quot;" canonicalsrc="/url">link</a></p>
06_07__inlines__links__023:
canonical: |
<p><a href="/url%C2%A0%22title%22">link</a></p>
static: |-
<p data-sourcepos="1:1-1:21" dir="auto"><a href="/url%C2%A0%22title%22">link</a></p>
wysiwyg: |-
- <p><a target="_blank" rel="noopener noreferrer nofollow" href="/url%C2%A0%22title%22">link</a></p>
+ <p><a target="_blank" rel="noopener noreferrer nofollow" href="http://test.host/url%C2%A0%22title%22" canonicalsrc="/url%C2%A0%22title%22">link</a></p>
06_07__inlines__links__024:
canonical: |
<p>[link](/url &quot;title &quot;and&quot; title&quot;)</p>
@@ -6375,14 +6375,14 @@
static: |-
<p data-sourcepos="1:1-1:32" dir="auto"><a href="/url" title='title "and" title'>link</a></p>
wysiwyg: |-
- <p><a target="_blank" rel="noopener noreferrer nofollow" href="/url" title="title &quot;and&quot; title">link</a></p>
+ <p><a target="_blank" rel="noopener noreferrer nofollow" href="http://test.host/url" title="title &quot;and&quot; title" canonicalsrc="/url">link</a></p>
06_07__inlines__links__026:
canonical: |
<p><a href="/uri" title="title">link</a></p>
static: |-
<p data-sourcepos="1:1-2:12" dir="auto"><a href="/uri" title="title">link</a></p>
wysiwyg: |-
- <p><a target="_blank" rel="noopener noreferrer nofollow" href="/uri" title="title">link</a></p>
+ <p><a target="_blank" rel="noopener noreferrer nofollow" href="http://test.host/uri" title="title" canonicalsrc="/uri">link</a></p>
06_07__inlines__links__027:
canonical: |
<p>[link] (/uri)</p>
@@ -6396,7 +6396,7 @@
static: |-
<p data-sourcepos="1:1-1:24" dir="auto"><a href="/uri">link [foo [bar]]</a></p>
wysiwyg: |-
- <p><a target="_blank" rel="noopener noreferrer nofollow" href="/uri">link [foo [bar]]</a></p>
+ <p><a target="_blank" rel="noopener noreferrer nofollow" href="http://test.host/uri" canonicalsrc="/uri">link [foo [bar]]</a></p>
06_07__inlines__links__029:
canonical: |
<p>[link] bar](/uri)</p>
@@ -6410,63 +6410,63 @@
static: |-
<p data-sourcepos="1:1-1:17" dir="auto">[link <a href="/uri">bar</a></p>
wysiwyg: |-
- <p>[link <a target="_blank" rel="noopener noreferrer nofollow" href="/uri">bar</a></p>
+ <p>[link <a target="_blank" rel="noopener noreferrer nofollow" href="http://test.host/uri" canonicalsrc="/uri">bar</a></p>
06_07__inlines__links__031:
canonical: |
<p><a href="/uri">link [bar</a></p>
static: |-
<p data-sourcepos="1:1-1:18" dir="auto"><a href="/uri">link [bar</a></p>
wysiwyg: |-
- <p><a target="_blank" rel="noopener noreferrer nofollow" href="/uri">link [bar</a></p>
+ <p><a target="_blank" rel="noopener noreferrer nofollow" href="http://test.host/uri" canonicalsrc="/uri">link [bar</a></p>
06_07__inlines__links__032:
canonical: |
<p><a href="/uri">link <em>foo <strong>bar</strong> <code>#</code></em></a></p>
static: |-
<p data-sourcepos="1:1-1:30" dir="auto"><a href="/uri">link <em>foo <strong>bar</strong> <code>#</code></em></a></p>
wysiwyg: |-
- <p><a target="_blank" rel="noopener noreferrer nofollow" href="/uri">link <em>foo </em><strong><em>bar<code>#</code></em></strong></a></p>
+ <p><a target="_blank" rel="noopener noreferrer nofollow" href="http://test.host/uri" canonicalsrc="/uri">link <em>foo </em><strong><em>bar<code>#</code></em></strong></a></p>
06_07__inlines__links__033:
canonical: |
<p><a href="/uri"><img src="moon.jpg" alt="moon" /></a></p>
static: |-
<p data-sourcepos="1:1-1:25" dir="auto"><a href="/uri"><img src="data:image/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==" alt="moon" decoding="async" class="lazy" data-src="moon.jpg"></a></p>
wysiwyg: |-
- <p><a target="_blank" rel="noopener noreferrer nofollow" href="/uri"><img src="moon.jpg" alt="moon"></a></p>
+ <p><a target="_blank" rel="noopener noreferrer nofollow" href="http://test.host/uri" canonicalsrc="/uri"><img src="http://test.host/moon.jpg" alt="moon" data-canonical-src="moon.jpg"></a></p>
06_07__inlines__links__034:
canonical: |
<p>[foo <a href="/uri">bar</a>](/uri)</p>
static: |-
<p data-sourcepos="1:1-1:23" dir="auto">[foo <a href="/uri">bar</a>](/uri)</p>
wysiwyg: |-
- <p>[foo <a target="_blank" rel="noopener noreferrer nofollow" href="/uri">bar</a>](/uri)</p>
+ <p>[foo <a target="_blank" rel="noopener noreferrer nofollow" href="http://test.host/uri" canonicalsrc="/uri">bar</a>](/uri)</p>
06_07__inlines__links__035:
canonical: |
<p>[foo <em>[bar <a href="/uri">baz</a>](/uri)</em>](/uri)</p>
static: |-
<p data-sourcepos="1:1-1:37" dir="auto">[foo <em>[bar <a href="/uri">baz</a>](/uri)</em>](/uri)</p>
wysiwyg: |-
- <p>[foo <em>[bar </em><a target="_blank" rel="noopener noreferrer nofollow" href="/uri"><em>baz</em></a><em>](/uri)</em>](/uri)</p>
+ <p>[foo <em>[bar </em><a target="_blank" rel="noopener noreferrer nofollow" href="http://test.host/uri" canonicalsrc="/uri"><em>baz</em></a><em>](/uri)</em>](/uri)</p>
06_07__inlines__links__036:
canonical: |
<p><img src="uri3" alt="[foo](uri2)" /></p>
static: |-
<p data-sourcepos="1:1-1:28" dir="auto"><a class="no-attachment-icon" href="uri3" target="_blank" rel="noopener noreferrer"><img src="data:image/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==" alt="[foo](uri2)" decoding="async" class="lazy" data-src="uri3"></a></p>
wysiwyg: |-
- <p><img src="uri3" alt="[foo](uri2)"></p>
+ <p><img src="http://test.host/uri3" alt="[foo](uri2)" data-canonical-src="uri3"></p>
06_07__inlines__links__037:
canonical: |
<p>*<a href="/uri">foo*</a></p>
static: |-
<p data-sourcepos="1:1-1:13" dir="auto">*<a href="/uri">foo*</a></p>
wysiwyg: |-
- <p>*<a target="_blank" rel="noopener noreferrer nofollow" href="/uri">foo*</a></p>
+ <p>*<a target="_blank" rel="noopener noreferrer nofollow" href="http://test.host/uri" canonicalsrc="/uri">foo*</a></p>
06_07__inlines__links__038:
canonical: |
<p><a href="baz*">foo *bar</a></p>
static: |-
<p data-sourcepos="1:1-1:16" dir="auto"><a href="baz*">foo *bar</a></p>
wysiwyg: |-
- <p><a target="_blank" rel="noopener noreferrer nofollow" href="baz*">foo *bar</a></p>
+ <p><a target="_blank" rel="noopener noreferrer nofollow" href="http://test.host/baz*" canonicalsrc="baz*">foo *bar</a></p>
06_07__inlines__links__039:
canonical: |
<p><em>foo [bar</em> baz]</p>
@@ -6494,14 +6494,14 @@
static: |-
<p data-sourcepos="1:1-1:39" dir="auto">[foo<a href="http://example.com/?search=%5D(uri)" rel="nofollow noreferrer noopener" target="_blank">http://example.com/?search=](uri)</a></p>
wysiwyg: |-
- <p>[foo<a target="_blank" rel="noopener noreferrer nofollow" href="http://example.com/?search=%5D(uri)">http://example.com/?search=](uri)</a></p>
+ <p>[foo<a target="_blank" rel="noopener noreferrer nofollow" href="http://example.com/?search=%5D(uri)" canonicalsrc="http://example.com/?search=%5D(uri)">http://example.com/?search=](uri)</a></p>
06_07__inlines__links__043:
canonical: |
<p><a href="/url" title="title">foo</a></p>
static: |-
<p data-sourcepos="1:1-1:10" dir="auto"><a href="/url" title="title">foo</a></p>
wysiwyg: |-
- <p><a target="_blank" rel="noopener noreferrer nofollow" href="/url" title="title">foo</a></p>
+ <p><a target="_blank" rel="noopener noreferrer nofollow" href="http://test.host/url" title="title" canonicalsrc="/url">foo</a></p>
<pre>[bar]: /url "title"</pre>
06_07__inlines__links__044:
canonical: |
@@ -6509,7 +6509,7 @@
static: |-
<p data-sourcepos="1:1-1:23" dir="auto"><a href="/uri">link [foo [bar]]</a></p>
wysiwyg: |-
- <p><a target="_blank" rel="noopener noreferrer nofollow" href="/uri">link [foo [bar]]</a></p>
+ <p><a target="_blank" rel="noopener noreferrer nofollow" href="http://test.host/uri" canonicalsrc="/uri">link [foo [bar]]</a></p>
<pre>[ref]: /uri</pre>
06_07__inlines__links__045:
canonical: |
@@ -6517,7 +6517,7 @@
static: |-
<p data-sourcepos="1:1-1:17" dir="auto"><a href="/uri">link [bar</a></p>
wysiwyg: |-
- <p><a target="_blank" rel="noopener noreferrer nofollow" href="/uri">link [bar</a></p>
+ <p><a target="_blank" rel="noopener noreferrer nofollow" href="http://test.host/uri" canonicalsrc="/uri">link [bar</a></p>
<pre>[ref]: /uri</pre>
06_07__inlines__links__046:
canonical: |
@@ -6525,7 +6525,7 @@
static: |-
<p data-sourcepos="1:1-1:29" dir="auto"><a href="/uri">link <em>foo <strong>bar</strong> <code>#</code></em></a></p>
wysiwyg: |-
- <p><a target="_blank" rel="noopener noreferrer nofollow" href="/uri">link <em>foo </em><strong><em>bar<code>#</code></em></strong></a></p>
+ <p><a target="_blank" rel="noopener noreferrer nofollow" href="http://test.host/uri" canonicalsrc="/uri">link <em>foo </em><strong><em>bar<code>#</code></em></strong></a></p>
<pre>[ref]: /uri</pre>
06_07__inlines__links__047:
canonical: |
@@ -6533,7 +6533,7 @@
static: |-
<p data-sourcepos="1:1-1:24" dir="auto"><a href="/uri"><img src="data:image/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==" alt="moon" decoding="async" class="lazy" data-src="moon.jpg"></a></p>
wysiwyg: |-
- <p><a target="_blank" rel="noopener noreferrer nofollow" href="/uri"><img src="moon.jpg" alt="moon"></a></p>
+ <p><a target="_blank" rel="noopener noreferrer nofollow" href="http://test.host/uri" canonicalsrc="/uri"><img src="http://test.host/moon.jpg" alt="moon" data-canonical-src="moon.jpg"></a></p>
<pre>[ref]: /uri</pre>
06_07__inlines__links__048:
canonical: |
@@ -6541,7 +6541,7 @@
static: |-
<p data-sourcepos="1:1-1:22" dir="auto">[foo <a href="/uri">bar</a>]<a href="/uri">ref</a></p>
wysiwyg: |-
- <p>[foo <a target="_blank" rel="noopener noreferrer nofollow" href="/uri">bar</a>]<a target="_blank" rel="noopener noreferrer nofollow" href="/uri">ref</a></p>
+ <p>[foo <a target="_blank" rel="noopener noreferrer nofollow" href="http://test.host/uri" canonicalsrc="/uri">bar</a>]<a target="_blank" rel="noopener noreferrer nofollow" href="http://test.host/uri" canonicalsrc="/uri">ref</a></p>
<pre>[ref]: /uri</pre>
06_07__inlines__links__049:
canonical: |
@@ -6549,7 +6549,7 @@
static: |-
<p data-sourcepos="1:1-1:27" dir="auto">[foo <em>bar <a href="/uri">baz</a></em>]<a href="/uri">ref</a></p>
wysiwyg: |-
- <p>[foo <em>bar </em><a target="_blank" rel="noopener noreferrer nofollow" href="/uri"><em>baz</em></a>]<a target="_blank" rel="noopener noreferrer nofollow" href="/uri">ref</a></p>
+ <p>[foo <em>bar </em><a target="_blank" rel="noopener noreferrer nofollow" href="http://test.host/uri" canonicalsrc="/uri"><em>baz</em></a>]<a target="_blank" rel="noopener noreferrer nofollow" href="http://test.host/uri" canonicalsrc="/uri">ref</a></p>
<pre>[ref]: /uri</pre>
06_07__inlines__links__050:
canonical: |
@@ -6557,7 +6557,7 @@
static: |-
<p data-sourcepos="1:1-1:12" dir="auto">*<a href="/uri">foo*</a></p>
wysiwyg: |-
- <p>*<a target="_blank" rel="noopener noreferrer nofollow" href="/uri">foo*</a></p>
+ <p>*<a target="_blank" rel="noopener noreferrer nofollow" href="http://test.host/uri" canonicalsrc="/uri">foo*</a></p>
<pre>[ref]: /uri</pre>
06_07__inlines__links__051:
canonical: |
@@ -6565,7 +6565,7 @@
static: |-
<p data-sourcepos="1:1-1:15" dir="auto"><a href="/uri">foo *bar</a></p>
wysiwyg: |-
- <p><a target="_blank" rel="noopener noreferrer nofollow" href="/uri">foo *bar</a></p>
+ <p><a target="_blank" rel="noopener noreferrer nofollow" href="http://test.host/uri" canonicalsrc="/uri">foo *bar</a></p>
<pre>[ref]: /uri</pre>
06_07__inlines__links__052:
canonical: |
@@ -6589,7 +6589,7 @@
static: |-
<p data-sourcepos="1:1-1:39" dir="auto">[foo<a href="http://example.com/?search=%5D%5Bref%5D" rel="nofollow noreferrer noopener" target="_blank">http://example.com/?search=][ref]</a></p>
wysiwyg: |-
- <p>[foo<a target="_blank" rel="noopener noreferrer nofollow" href="http://example.com/?search=%5D%5Bref%5D">http://example.com/?search=][ref]</a></p>
+ <p>[foo<a target="_blank" rel="noopener noreferrer nofollow" href="http://example.com/?search=%5D%5Bref%5D" canonicalsrc="http://example.com/?search=%5D%5Bref%5D">http://example.com/?search=][ref]</a></p>
<pre>[ref]: /uri</pre>
06_07__inlines__links__055:
canonical: |
@@ -6597,7 +6597,7 @@
static: |-
<p data-sourcepos="1:1-1:10" dir="auto"><a href="/url" title="title">foo</a></p>
wysiwyg: |-
- <p><a target="_blank" rel="noopener noreferrer nofollow" href="/url" title="title">foo</a></p>
+ <p><a target="_blank" rel="noopener noreferrer nofollow" href="http://test.host/url" title="title" canonicalsrc="/url">foo</a></p>
<pre>[bar]: /url "title"</pre>
06_07__inlines__links__056:
canonical: |
@@ -6605,7 +6605,7 @@
static: |-
<p data-sourcepos="1:1-1:47" dir="auto"><a href="/url">Толпой</a> is a Russian word.</p>
wysiwyg: |-
- <p><a target="_blank" rel="noopener noreferrer nofollow" href="/url">Толпой</a> is a Russian word.</p>
+ <p><a target="_blank" rel="noopener noreferrer nofollow" href="http://test.host/url" canonicalsrc="/url">Толпой</a> is a Russian word.</p>
<pre>[толпой]: /url</pre>
06_07__inlines__links__057:
canonical: |
@@ -6614,14 +6614,14 @@
<p data-sourcepos="4:1-4:14" dir="auto"><a href="/url">Baz</a></p>
wysiwyg: |-
<pre>[foo bar]: /url</pre>
- <p><a target="_blank" rel="noopener noreferrer nofollow" href="/url">Baz</a></p>
+ <p><a target="_blank" rel="noopener noreferrer nofollow" href="http://test.host/url" canonicalsrc="/url">Baz</a></p>
06_07__inlines__links__058:
canonical: |
<p>[foo] <a href="/url" title="title">bar</a></p>
static: |-
<p data-sourcepos="1:1-1:11" dir="auto">[foo] <a href="/url" title="title">bar</a></p>
wysiwyg: |-
- <p>[foo] <a target="_blank" rel="noopener noreferrer nofollow" href="/url" title="title">bar</a></p>
+ <p>[foo] <a target="_blank" rel="noopener noreferrer nofollow" href="http://test.host/url" title="title" canonicalsrc="/url">bar</a></p>
<pre>[bar]: /url "title"</pre>
06_07__inlines__links__059:
canonical: |
@@ -6632,7 +6632,7 @@
<a href="/url" title="title">bar</a></p>
wysiwyg: |-
<p>[foo]
- <a target="_blank" rel="noopener noreferrer nofollow" href="/url" title="title">bar</a></p>
+ <a target="_blank" rel="noopener noreferrer nofollow" href="http://test.host/url" title="title" canonicalsrc="/url">bar</a></p>
<pre>[bar]: /url "title"</pre>
06_07__inlines__links__060:
canonical: |
@@ -6642,7 +6642,7 @@
wysiwyg: |-
<pre>[foo]: /url1</pre>
<pre>[foo]: /url2</pre>
- <p><a target="_blank" rel="noopener noreferrer nofollow" href="/url1">bar</a></p>
+ <p><a target="_blank" rel="noopener noreferrer nofollow" href="http://test.host/url1" canonicalsrc="/url1">bar</a></p>
06_07__inlines__links__061:
canonical: |
<p>[bar][foo!]</p>
@@ -6687,7 +6687,7 @@
static: |-
<p data-sourcepos="1:1-1:12" dir="auto"><a href="/uri">foo</a></p>
wysiwyg: |-
- <p><a target="_blank" rel="noopener noreferrer nofollow" href="/uri">foo</a></p>
+ <p><a target="_blank" rel="noopener noreferrer nofollow" href="http://test.host/uri" canonicalsrc="/uri">foo</a></p>
<pre>[ref\[]: /uri</pre>
06_07__inlines__links__066:
canonical: |
@@ -6696,7 +6696,7 @@
<p data-sourcepos="3:1-3:7" dir="auto"><a href="/uri">bar\</a></p>
wysiwyg: |-
<pre>[bar\\]: /uri</pre>
- <p><a target="_blank" rel="noopener noreferrer nofollow" href="/uri">bar\</a></p>
+ <p><a target="_blank" rel="noopener noreferrer nofollow" href="http://test.host/uri" canonicalsrc="/uri">bar\</a></p>
06_07__inlines__links__067:
canonical: |
<p>[]</p>
@@ -6729,7 +6729,7 @@
static: |-
<p data-sourcepos="1:1-1:7" dir="auto"><a href="/url" title="title">foo</a></p>
wysiwyg: |-
- <p><a target="_blank" rel="noopener noreferrer nofollow" href="/url" title="title">foo</a></p>
+ <p><a target="_blank" rel="noopener noreferrer nofollow" href="http://test.host/url" title="title" canonicalsrc="/url">foo</a></p>
<pre>[foo]: /url "title"</pre>
06_07__inlines__links__070:
canonical: |
@@ -6737,7 +6737,7 @@
static: |-
<p data-sourcepos="1:1-1:13" dir="auto"><a href="/url" title="title"><em>foo</em> bar</a></p>
wysiwyg: |-
- <p><a target="_blank" rel="noopener noreferrer nofollow" href="/url" title="title"><em>foo</em> bar</a></p>
+ <p><a target="_blank" rel="noopener noreferrer nofollow" href="http://test.host/url" title="title" canonicalsrc="/url"><em>foo</em> bar</a></p>
<pre>[*foo* bar]: /url "title"</pre>
06_07__inlines__links__071:
canonical: |
@@ -6745,7 +6745,7 @@
static: |-
<p data-sourcepos="1:1-1:7" dir="auto"><a href="/url" title="title">Foo</a></p>
wysiwyg: |-
- <p><a target="_blank" rel="noopener noreferrer nofollow" href="/url" title="title">Foo</a></p>
+ <p><a target="_blank" rel="noopener noreferrer nofollow" href="http://test.host/url" title="title" canonicalsrc="/url">Foo</a></p>
<pre>[foo]: /url "title"</pre>
06_07__inlines__links__072:
canonical: |
@@ -6755,7 +6755,7 @@
<p data-sourcepos="1:1-2:2" dir="auto"><a href="/url" title="title">foo</a>
[]</p>
wysiwyg: |-
- <p><a target="_blank" rel="noopener noreferrer nofollow" href="/url" title="title">foo</a>
+ <p><a target="_blank" rel="noopener noreferrer nofollow" href="http://test.host/url" title="title" canonicalsrc="/url">foo</a>
[]</p>
<pre>[foo]: /url "title"</pre>
06_07__inlines__links__073:
@@ -6764,7 +6764,7 @@
static: |-
<p data-sourcepos="1:1-1:5" dir="auto"><a href="/url" title="title">foo</a></p>
wysiwyg: |-
- <p><a target="_blank" rel="noopener noreferrer nofollow" href="/url" title="title">foo</a></p>
+ <p><a target="_blank" rel="noopener noreferrer nofollow" href="http://test.host/url" title="title" canonicalsrc="/url">foo</a></p>
<pre>[foo]: /url "title"</pre>
06_07__inlines__links__074:
canonical: |
@@ -6772,7 +6772,7 @@
static: |-
<p data-sourcepos="1:1-1:11" dir="auto"><a href="/url" title="title"><em>foo</em> bar</a></p>
wysiwyg: |-
- <p><a target="_blank" rel="noopener noreferrer nofollow" href="/url" title="title"><em>foo</em> bar</a></p>
+ <p><a target="_blank" rel="noopener noreferrer nofollow" href="http://test.host/url" title="title" canonicalsrc="/url"><em>foo</em> bar</a></p>
<pre>[*foo* bar]: /url "title"</pre>
06_07__inlines__links__075:
canonical: |
@@ -6780,7 +6780,7 @@
static: |-
<p data-sourcepos="1:1-1:13" dir="auto">[<a href="/url" title="title"><em>foo</em> bar</a>]</p>
wysiwyg: |-
- <p>[<a target="_blank" rel="noopener noreferrer nofollow" href="/url" title="title"><em>foo</em> bar</a>]</p>
+ <p>[<a target="_blank" rel="noopener noreferrer nofollow" href="http://test.host/url" title="title" canonicalsrc="/url"><em>foo</em> bar</a>]</p>
<pre>[*foo* bar]: /url "title"</pre>
06_07__inlines__links__076:
canonical: |
@@ -6788,7 +6788,7 @@
static: |-
<p data-sourcepos="1:1-1:11" dir="auto">[[bar <a href="/url">foo</a></p>
wysiwyg: |-
- <p>[[bar <a target="_blank" rel="noopener noreferrer nofollow" href="/url">foo</a></p>
+ <p>[[bar <a target="_blank" rel="noopener noreferrer nofollow" href="http://test.host/url" canonicalsrc="/url">foo</a></p>
<pre>[foo]: /url</pre>
06_07__inlines__links__077:
canonical: |
@@ -6796,7 +6796,7 @@
static: |-
<p data-sourcepos="1:1-1:5" dir="auto"><a href="/url" title="title">Foo</a></p>
wysiwyg: |-
- <p><a target="_blank" rel="noopener noreferrer nofollow" href="/url" title="title">Foo</a></p>
+ <p><a target="_blank" rel="noopener noreferrer nofollow" href="http://test.host/url" title="title" canonicalsrc="/url">Foo</a></p>
<pre>[foo]: /url "title"</pre>
06_07__inlines__links__078:
canonical: |
@@ -6804,7 +6804,7 @@
static: |-
<p data-sourcepos="1:1-1:9" dir="auto"><a href="/url">foo</a> bar</p>
wysiwyg: |-
- <p><a target="_blank" rel="noopener noreferrer nofollow" href="/url">foo</a> bar</p>
+ <p><a target="_blank" rel="noopener noreferrer nofollow" href="http://test.host/url" canonicalsrc="/url">foo</a> bar</p>
<pre>[foo]: /url</pre>
06_07__inlines__links__079:
canonical: |
@@ -6821,14 +6821,14 @@
<p data-sourcepos="3:1-3:7" dir="auto">*<a href="/url">foo*</a></p>
wysiwyg: |-
<pre>[foo*]: /url</pre>
- <p>*<a target="_blank" rel="noopener noreferrer nofollow" href="/url">foo*</a></p>
+ <p>*<a target="_blank" rel="noopener noreferrer nofollow" href="http://test.host/url" canonicalsrc="/url">foo*</a></p>
06_07__inlines__links__081:
canonical: |
<p><a href="/url2">foo</a></p>
static: |-
<p data-sourcepos="1:1-1:10" dir="auto"><a href="/url2">foo</a></p>
wysiwyg: |-
- <p><a target="_blank" rel="noopener noreferrer nofollow" href="/url2">foo</a></p>
+ <p><a target="_blank" rel="noopener noreferrer nofollow" href="http://test.host/url2" canonicalsrc="/url2">foo</a></p>
<pre>[foo]: /url1</pre>
<pre>[bar]: /url2</pre>
06_07__inlines__links__082:
@@ -6837,7 +6837,7 @@
static: |-
<p data-sourcepos="1:1-1:7" dir="auto"><a href="/url1">foo</a></p>
wysiwyg: |-
- <p><a target="_blank" rel="noopener noreferrer nofollow" href="/url1">foo</a></p>
+ <p><a target="_blank" rel="noopener noreferrer nofollow" href="http://test.host/url1" canonicalsrc="/url1">foo</a></p>
<pre>[foo]: /url1</pre>
06_07__inlines__links__083:
canonical: |
@@ -6845,7 +6845,7 @@
static: |-
<p data-sourcepos="1:1-1:7" dir="auto"><a href="">foo</a></p>
wysiwyg: |-
- <p><a target="_blank" rel="noopener noreferrer nofollow" href="">foo</a></p>
+ <p><a target="_blank" rel="noopener noreferrer nofollow" href="" canonicalsrc="">foo</a></p>
<pre>[foo]: /url1</pre>
06_07__inlines__links__084:
canonical: |
@@ -6853,7 +6853,7 @@
static: |-
<p data-sourcepos="1:1-1:17" dir="auto"><a href="/url1">foo</a>(not a link)</p>
wysiwyg: |-
- <p><a target="_blank" rel="noopener noreferrer nofollow" href="/url1">foo</a>(not a link)</p>
+ <p><a target="_blank" rel="noopener noreferrer nofollow" href="http://test.host/url1" canonicalsrc="/url1">foo</a>(not a link)</p>
<pre>[foo]: /url1</pre>
06_07__inlines__links__085:
canonical: |
@@ -6861,7 +6861,7 @@
static: |-
<p data-sourcepos="1:1-1:15" dir="auto">[foo]<a href="/url">bar</a></p>
wysiwyg: |-
- <p>[foo]<a target="_blank" rel="noopener noreferrer nofollow" href="/url">bar</a></p>
+ <p>[foo]<a target="_blank" rel="noopener noreferrer nofollow" href="http://test.host/url" canonicalsrc="/url">bar</a></p>
<pre>[baz]: /url</pre>
06_07__inlines__links__086:
canonical: |
@@ -6869,7 +6869,7 @@
static: |-
<p data-sourcepos="1:1-1:15" dir="auto"><a href="/url2">foo</a><a href="/url1">baz</a></p>
wysiwyg: |-
- <p><a target="_blank" rel="noopener noreferrer nofollow" href="/url2">foo</a><a target="_blank" rel="noopener noreferrer nofollow" href="/url1">baz</a></p>
+ <p><a target="_blank" rel="noopener noreferrer nofollow" href="http://test.host/url2" canonicalsrc="/url2">foo</a><a target="_blank" rel="noopener noreferrer nofollow" href="http://test.host/url1" canonicalsrc="/url1">baz</a></p>
<pre>[baz]: /url1</pre>
<pre>[bar]: /url2</pre>
06_07__inlines__links__087:
@@ -6878,7 +6878,7 @@
static: |-
<p data-sourcepos="1:1-1:15" dir="auto">[foo]<a href="/url1">bar</a></p>
wysiwyg: |-
- <p>[foo]<a target="_blank" rel="noopener noreferrer nofollow" href="/url1">bar</a></p>
+ <p>[foo]<a target="_blank" rel="noopener noreferrer nofollow" href="http://test.host/url1" canonicalsrc="/url1">bar</a></p>
<pre>[baz]: /url1</pre>
<pre>[foo]: /url2</pre>
06_08__inlines__images__001:
@@ -6887,14 +6887,14 @@
static: |-
<p data-sourcepos="1:1-1:20" dir="auto"><a class="no-attachment-icon" href="/url" target="_blank" rel="noopener noreferrer"><img src="data:image/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==" alt="foo" title="title" decoding="async" class="lazy" data-src="/url"></a></p>
wysiwyg: |-
- <p><img src="/url" alt="foo" title="title"></p>
+ <p><img src="http://test.host/url" alt="foo" title="title" data-canonical-src="/url"></p>
06_08__inlines__images__002:
canonical: |
<p><img src="train.jpg" alt="foo bar" title="train &amp; tracks" /></p>
static: |-
<p data-sourcepos="1:1-1:12" dir="auto"><a class="no-attachment-icon" href="train.jpg" target="_blank" rel="noopener noreferrer"><img src="data:image/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==" alt="foo bar" title="train &amp; tracks" decoding="async" class="lazy" data-src="train.jpg"></a></p>
wysiwyg: |-
- <p><img src="train.jpg" alt="foo bar" title="train &amp; tracks"></p>
+ <p><img src="http://test.host/train.jpg" alt="foo bar" title="train &amp; tracks" data-canonical-src="train.jpg"></p>
<pre>[foo *bar*]: train.jpg "train &amp; tracks"</pre>
06_08__inlines__images__003:
canonical: |
@@ -6902,21 +6902,21 @@
static: |-
<p data-sourcepos="1:1-1:26" dir="auto"><a class="no-attachment-icon" href="/url2" target="_blank" rel="noopener noreferrer"><img src="data:image/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==" alt="foo bar" decoding="async" class="lazy" data-src="/url2"></a></p>
wysiwyg: |-
- <p><img src="/url2" alt="foo bar"></p>
+ <p><img src="http://test.host/url2" alt="foo bar" data-canonical-src="/url2"></p>
06_08__inlines__images__004:
canonical: |
<p><img src="/url2" alt="foo bar" /></p>
static: |-
<p data-sourcepos="1:1-1:25" dir="auto"><a class="no-attachment-icon" href="/url2" target="_blank" rel="noopener noreferrer"><img src="data:image/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==" alt="foo bar" decoding="async" class="lazy" data-src="/url2"></a></p>
wysiwyg: |-
- <p><img src="/url2" alt="foo bar"></p>
+ <p><img src="http://test.host/url2" alt="foo bar" data-canonical-src="/url2"></p>
06_08__inlines__images__005:
canonical: |
<p><img src="train.jpg" alt="foo bar" title="train &amp; tracks" /></p>
static: |-
<p data-sourcepos="1:1-1:14" dir="auto"><a class="no-attachment-icon" href="train.jpg" target="_blank" rel="noopener noreferrer"><img src="data:image/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==" alt="foo bar" title="train &amp; tracks" decoding="async" class="lazy" data-src="train.jpg"></a></p>
wysiwyg: |-
- <p><img src="train.jpg" alt="foo bar" title="train &amp; tracks"></p>
+ <p><img src="http://test.host/train.jpg" alt="foo bar" title="train &amp; tracks" data-canonical-src="train.jpg"></p>
<pre>[foo *bar*]: train.jpg "train &amp; tracks"</pre>
06_08__inlines__images__006:
canonical: |
@@ -6924,7 +6924,7 @@
static: |-
<p data-sourcepos="1:1-1:20" dir="auto"><a class="no-attachment-icon" href="train.jpg" target="_blank" rel="noopener noreferrer"><img src="data:image/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==" alt="foo bar" title="train &amp; tracks" decoding="async" class="lazy" data-src="train.jpg"></a></p>
wysiwyg: |-
- <p><img src="train.jpg" alt="foo bar" title="train &amp; tracks"></p>
+ <p><img src="http://test.host/train.jpg" alt="foo bar" title="train &amp; tracks" data-canonical-src="train.jpg"></p>
<pre>[foobar]: train.jpg "train &amp; tracks"</pre>
06_08__inlines__images__007:
canonical: |
@@ -6932,35 +6932,35 @@
static: |-
<p data-sourcepos="1:1-1:17" dir="auto"><a class="no-attachment-icon" href="train.jpg" target="_blank" rel="noopener noreferrer"><img src="data:image/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==" alt="foo" decoding="async" class="lazy" data-src="train.jpg"></a></p>
wysiwyg: |-
- <p><img src="train.jpg" alt="foo"></p>
+ <p><img src="http://test.host/train.jpg" alt="foo" data-canonical-src="train.jpg"></p>
06_08__inlines__images__008:
canonical: |
<p>My <img src="/path/to/train.jpg" alt="foo bar" title="title" /></p>
static: |-
<p data-sourcepos="1:1-1:45" dir="auto">My <a class="no-attachment-icon" href="/path/to/train.jpg" target="_blank" rel="noopener noreferrer"><img src="data:image/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==" alt="foo bar" title="title" decoding="async" class="lazy" data-src="/path/to/train.jpg"></a></p>
wysiwyg: |-
- <p>My <img src="/path/to/train.jpg" alt="foo bar" title="title"></p>
+ <p>My <img src="http://test.host/path/to/train.jpg" alt="foo bar" title="title" data-canonical-src="/path/to/train.jpg"></p>
06_08__inlines__images__009:
canonical: |
<p><img src="url" alt="foo" /></p>
static: |-
<p data-sourcepos="1:1-1:13" dir="auto"><a class="no-attachment-icon" href="url" target="_blank" rel="noopener noreferrer"><img src="data:image/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==" alt="foo" decoding="async" class="lazy" data-src="url"></a></p>
wysiwyg: |-
- <p><img src="url" alt="foo"></p>
+ <p><img src="http://test.host/url" alt="foo" data-canonical-src="url"></p>
06_08__inlines__images__010:
canonical: |
<p><img src="/url" alt="" /></p>
static: |-
<p data-sourcepos="1:1-1:9" dir="auto"><a class="no-attachment-icon" href="/url" target="_blank" rel="noopener noreferrer"><img src="data:image/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==" alt="" decoding="async" class="lazy" data-src="/url"></a></p>
wysiwyg: |-
- <p><img src="/url" alt=""></p>
+ <p><img src="http://test.host/url" alt="" data-canonical-src="/url"></p>
06_08__inlines__images__011:
canonical: |
<p><img src="/url" alt="foo" /></p>
static: |-
<p data-sourcepos="1:1-1:11" dir="auto"><a class="no-attachment-icon" href="/url" target="_blank" rel="noopener noreferrer"><img src="data:image/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==" alt="foo" decoding="async" class="lazy" data-src="/url"></a></p>
wysiwyg: |-
- <p><img src="/url" alt="foo"></p>
+ <p><img src="http://test.host/url" alt="foo" data-canonical-src="/url"></p>
<pre>[bar]: /url</pre>
06_08__inlines__images__012:
canonical: |
@@ -6968,7 +6968,7 @@
static: |-
<p data-sourcepos="1:1-1:11" dir="auto"><a class="no-attachment-icon" href="/url" target="_blank" rel="noopener noreferrer"><img src="data:image/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==" alt="foo" decoding="async" class="lazy" data-src="/url"></a></p>
wysiwyg: |-
- <p><img src="/url" alt="foo"></p>
+ <p><img src="http://test.host/url" alt="foo" data-canonical-src="/url"></p>
<pre>[bar]: /url</pre>
06_08__inlines__images__013:
canonical: |
@@ -6976,7 +6976,7 @@
static: |-
<p data-sourcepos="1:1-1:8" dir="auto"><a class="no-attachment-icon" href="/url" target="_blank" rel="noopener noreferrer"><img src="data:image/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==" alt="foo" title="title" decoding="async" class="lazy" data-src="/url"></a></p>
wysiwyg: |-
- <p><img src="/url" alt="foo" title="title"></p>
+ <p><img src="http://test.host/url" alt="foo" title="title" data-canonical-src="/url"></p>
<pre>[foo]: /url "title"</pre>
06_08__inlines__images__014:
canonical: |
@@ -6984,7 +6984,7 @@
static: |-
<p data-sourcepos="1:1-1:14" dir="auto"><a class="no-attachment-icon" href="/url" target="_blank" rel="noopener noreferrer"><img src="data:image/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==" alt="foo bar" title="title" decoding="async" class="lazy" data-src="/url"></a></p>
wysiwyg: |-
- <p><img src="/url" alt="foo bar" title="title"></p>
+ <p><img src="http://test.host/url" alt="foo bar" title="title" data-canonical-src="/url"></p>
<pre>[*foo* bar]: /url "title"</pre>
06_08__inlines__images__015:
canonical: |
@@ -6992,7 +6992,7 @@
static: |-
<p data-sourcepos="1:1-1:8" dir="auto"><a class="no-attachment-icon" href="/url" target="_blank" rel="noopener noreferrer"><img src="data:image/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==" alt="Foo" title="title" decoding="async" class="lazy" data-src="/url"></a></p>
wysiwyg: |-
- <p><img src="/url" alt="Foo" title="title"></p>
+ <p><img src="http://test.host/url" alt="Foo" title="title" data-canonical-src="/url"></p>
<pre>[foo]: /url "title"</pre>
06_08__inlines__images__016:
canonical: |
@@ -7002,7 +7002,7 @@
<p data-sourcepos="1:1-2:2" dir="auto"><a class="no-attachment-icon" href="/url" target="_blank" rel="noopener noreferrer"><img src="data:image/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==" alt="foo" title="title" decoding="async" class="lazy" data-src="/url"></a>
[]</p>
wysiwyg: |-
- <p><img src="/url" alt="foo" title="title">
+ <p><img src="http://test.host/url" alt="foo" title="title" data-canonical-src="/url">
[]</p>
<pre>[foo]: /url "title"</pre>
06_08__inlines__images__017:
@@ -7011,7 +7011,7 @@
static: |-
<p data-sourcepos="1:1-1:6" dir="auto"><a class="no-attachment-icon" href="/url" target="_blank" rel="noopener noreferrer"><img src="data:image/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==" alt="foo" title="title" decoding="async" class="lazy" data-src="/url"></a></p>
wysiwyg: |-
- <p><img src="/url" alt="foo" title="title"></p>
+ <p><img src="http://test.host/url" alt="foo" title="title" data-canonical-src="/url"></p>
<pre>[foo]: /url "title"</pre>
06_08__inlines__images__018:
canonical: |
@@ -7019,7 +7019,7 @@
static: |-
<p data-sourcepos="1:1-1:12" dir="auto"><a class="no-attachment-icon" href="/url" target="_blank" rel="noopener noreferrer"><img src="data:image/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==" alt="foo bar" title="title" decoding="async" class="lazy" data-src="/url"></a></p>
wysiwyg: |-
- <p><img src="/url" alt="foo bar" title="title"></p>
+ <p><img src="http://test.host/url" alt="foo bar" title="title" data-canonical-src="/url"></p>
<pre>[*foo* bar]: /url "title"</pre>
06_08__inlines__images__019:
canonical: |
@@ -7037,7 +7037,7 @@
static: |-
<p data-sourcepos="1:1-1:6" dir="auto"><a class="no-attachment-icon" href="/url" target="_blank" rel="noopener noreferrer"><img src="data:image/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==" alt="Foo" title="title" decoding="async" class="lazy" data-src="/url"></a></p>
wysiwyg: |-
- <p><img src="/url" alt="Foo" title="title"></p>
+ <p><img src="http://test.host/url" alt="Foo" title="title" data-canonical-src="/url"></p>
<pre>[foo]: /url "title"</pre>
06_08__inlines__images__021:
canonical: |
@@ -7053,7 +7053,7 @@
static: |-
<p data-sourcepos="1:1-1:27" dir="auto"><span>!</span><a href="/url" title="title">foo</a></p>
wysiwyg: |-
- <p>!<a target="_blank" rel="noopener noreferrer nofollow" href="/url" title="title">foo</a></p>
+ <p>!<a target="_blank" rel="noopener noreferrer nofollow" href="http://test.host/url" title="title" canonicalsrc="/url">foo</a></p>
<pre>[foo]: /url "title"</pre>
06_09__inlines__autolinks__001:
canonical: |
@@ -7061,91 +7061,91 @@
static: |-
<p data-sourcepos="1:1-1:20" dir="auto"><a href="http://foo.bar.baz" rel="nofollow noreferrer noopener" target="_blank">http://foo.bar.baz</a></p>
wysiwyg: |-
- <p><a target="_blank" rel="noopener noreferrer nofollow" href="http://foo.bar.baz">http://foo.bar.baz</a></p>
+ <p><a target="_blank" rel="noopener noreferrer nofollow" href="http://foo.bar.baz/" canonicalsrc="http://foo.bar.baz">http://foo.bar.baz</a></p>
06_09__inlines__autolinks__002:
canonical: |
<p><a href="http://foo.bar.baz/test?q=hello&amp;id=22&amp;boolean">http://foo.bar.baz/test?q=hello&amp;id=22&amp;boolean</a></p>
static: |-
<p data-sourcepos="1:1-1:47" dir="auto"><a href="http://foo.bar.baz/test?q=hello&amp;id=22&amp;boolean" rel="nofollow noreferrer noopener" target="_blank">http://foo.bar.baz/test?q=hello&amp;id=22&amp;boolean</a></p>
wysiwyg: |-
- <p><a target="_blank" rel="noopener noreferrer nofollow" href="http://foo.bar.baz/test?q=hello&amp;id=22&amp;boolean">http://foo.bar.baz/test?q=hello&amp;id=22&amp;boolean</a></p>
+ <p><a target="_blank" rel="noopener noreferrer nofollow" href="http://foo.bar.baz/test?q=hello&amp;id=22&amp;boolean" canonicalsrc="http://foo.bar.baz/test?q=hello&amp;id=22&amp;boolean">http://foo.bar.baz/test?q=hello&amp;id=22&amp;boolean</a></p>
06_09__inlines__autolinks__003:
canonical: |
<p><a href="irc://foo.bar:2233/baz">irc://foo.bar:2233/baz</a></p>
static: |-
<p data-sourcepos="1:1-1:24" dir="auto"><a href="irc://foo.bar:2233/baz">irc://foo.bar:2233/baz</a></p>
wysiwyg: |-
- <p><a target="_blank" rel="noopener noreferrer nofollow" href="irc://foo.bar:2233/baz">irc://foo.bar:2233/baz</a></p>
+ <p><a target="_blank" rel="noopener noreferrer nofollow" href="irc://foo.bar:2233/baz" canonicalsrc="irc://foo.bar:2233/baz">irc://foo.bar:2233/baz</a></p>
06_09__inlines__autolinks__004:
canonical: |
<p><a href="MAILTO:FOO@BAR.BAZ">MAILTO:FOO@BAR.BAZ</a></p>
static: |-
<p data-sourcepos="1:1-1:20" dir="auto"><a href="mailto:FOO@BAR.BAZ">MAILTO:FOO@BAR.BAZ</a></p>
wysiwyg: |-
- <p><a target="_blank" rel="noopener noreferrer nofollow" href="MAILTO:FOO@BAR.BAZ">MAILTO:FOO@BAR.BAZ</a></p>
+ <p><a target="_blank" rel="noopener noreferrer nofollow" href="mailto:FOO@BAR.BAZ" canonicalsrc="MAILTO:FOO@BAR.BAZ">MAILTO:FOO@BAR.BAZ</a></p>
06_09__inlines__autolinks__005:
canonical: |
<p><a href="a+b+c:d">a+b+c:d</a></p>
static: |-
<p data-sourcepos="1:1-1:9" dir="auto"><a href="a+b+c:d">a+b+c:d</a></p>
wysiwyg: |-
- <p><a target="_blank" rel="noopener noreferrer nofollow" href="a+b+c:d">a+b+c:d</a></p>
+ <p><a target="_blank" rel="noopener noreferrer nofollow" href="a+b+c:d" canonicalsrc="a+b+c:d">a+b+c:d</a></p>
06_09__inlines__autolinks__006:
canonical: |
<p><a href="made-up-scheme://foo,bar">made-up-scheme://foo,bar</a></p>
static: |-
<p data-sourcepos="1:1-1:26" dir="auto"><a href="made-up-scheme://foo,bar">made-up-scheme://foo,bar</a></p>
wysiwyg: |-
- <p><a target="_blank" rel="noopener noreferrer nofollow" href="made-up-scheme://foo,bar">made-up-scheme://foo,bar</a></p>
+ <p><a target="_blank" rel="noopener noreferrer nofollow" href="made-up-scheme://foo,bar" canonicalsrc="made-up-scheme://foo,bar">made-up-scheme://foo,bar</a></p>
06_09__inlines__autolinks__007:
canonical: |
<p><a href="http://../">http://../</a></p>
static: |-
<p data-sourcepos="1:1-1:12" dir="auto"><a href="http://../" rel="nofollow noreferrer noopener" target="_blank">http://../</a></p>
wysiwyg: |-
- <p><a target="_blank" rel="noopener noreferrer nofollow" href="http://../">http://../</a></p>
+ <p><a target="_blank" rel="noopener noreferrer nofollow" href="http://../" canonicalsrc="http://../">http://../</a></p>
06_09__inlines__autolinks__008:
canonical: |
<p><a href="localhost:5001/foo">localhost:5001/foo</a></p>
static: |-
<p data-sourcepos="1:1-1:20" dir="auto"><a href="localhost:5001/foo">localhost:5001/foo</a></p>
wysiwyg: |-
- <p><a target="_blank" rel="noopener noreferrer nofollow" href="localhost:5001/foo">localhost:5001/foo</a></p>
+ <p><a target="_blank" rel="noopener noreferrer nofollow" href="localhost:5001/foo" canonicalsrc="localhost:5001/foo">localhost:5001/foo</a></p>
06_09__inlines__autolinks__009:
canonical: |
<p>&lt;http://foo.bar/baz bim&gt;</p>
static: |-
<p data-sourcepos="1:1-1:24" dir="auto">&lt;<a href="http://foo.bar/baz" rel="nofollow noreferrer noopener" target="_blank">http://foo.bar/baz</a> bim&gt;</p>
wysiwyg: |-
- <p>&lt;<a target="_blank" rel="noopener noreferrer nofollow" href="http://foo.bar/baz">http://foo.bar/baz</a> bim&gt;</p>
+ <p>&lt;<a target="_blank" rel="noopener noreferrer nofollow" href="http://foo.bar/baz" canonicalsrc="http://foo.bar/baz">http://foo.bar/baz</a> bim&gt;</p>
06_09__inlines__autolinks__010:
canonical: |
<p><a href="http://example.com/%5C%5B%5C">http://example.com/\[\</a></p>
static: |-
<p data-sourcepos="1:1-1:24" dir="auto"><a href="http://example.com/%5C%5B%5C" rel="nofollow noreferrer noopener" target="_blank">http://example.com/\[\</a></p>
wysiwyg: |-
- <p><a target="_blank" rel="noopener noreferrer nofollow" href="http://example.com/%5C%5B%5C">http://example.com/\[\</a></p>
+ <p><a target="_blank" rel="noopener noreferrer nofollow" href="http://example.com/%5C%5B%5C" canonicalsrc="http://example.com/%5C%5B%5C">http://example.com/\[\</a></p>
06_09__inlines__autolinks__011:
canonical: |
<p><a href="mailto:foo@bar.example.com">foo@bar.example.com</a></p>
static: |-
<p data-sourcepos="1:1-1:21" dir="auto"><a href="mailto:foo@bar.example.com">foo@bar.example.com</a></p>
wysiwyg: |-
- <p><a target="_blank" rel="noopener noreferrer nofollow" href="mailto:foo@bar.example.com">foo@bar.example.com</a></p>
+ <p><a target="_blank" rel="noopener noreferrer nofollow" href="mailto:foo@bar.example.com" canonicalsrc="mailto:foo@bar.example.com">foo@bar.example.com</a></p>
06_09__inlines__autolinks__012:
canonical: |
<p><a href="mailto:foo+special@Bar.baz-bar0.com">foo+special@Bar.baz-bar0.com</a></p>
static: |-
<p data-sourcepos="1:1-1:30" dir="auto"><a href="mailto:foo+special@Bar.baz-bar0.com">foo+special@Bar.baz-bar0.com</a></p>
wysiwyg: |-
- <p><a target="_blank" rel="noopener noreferrer nofollow" href="mailto:foo+special@Bar.baz-bar0.com">foo+special@Bar.baz-bar0.com</a></p>
+ <p><a target="_blank" rel="noopener noreferrer nofollow" href="mailto:foo+special@Bar.baz-bar0.com" canonicalsrc="mailto:foo+special@Bar.baz-bar0.com">foo+special@Bar.baz-bar0.com</a></p>
06_09__inlines__autolinks__013:
canonical: |
<p>&lt;foo+@bar.example.com&gt;</p>
static: |-
<p data-sourcepos="1:1-1:23" dir="auto">&lt;<a href="mailto:foo+@bar.example.com">foo+@bar.example.com</a>&gt;</p>
wysiwyg: |-
- <p>&lt;<a target="_blank" rel="noopener noreferrer nofollow" href="mailto:foo+@bar.example.com">foo+@bar.example.com</a>&gt;</p>
+ <p>&lt;<a target="_blank" rel="noopener noreferrer nofollow" href="mailto:foo+@bar.example.com" canonicalsrc="mailto:foo+@bar.example.com">foo+@bar.example.com</a>&gt;</p>
06_09__inlines__autolinks__014:
canonical: |
<p>&lt;&gt;</p>
@@ -7159,7 +7159,7 @@
static: |-
<p data-sourcepos="1:1-1:18" dir="auto">&lt; <a href="http://foo.bar" rel="nofollow noreferrer noopener" target="_blank">http://foo.bar</a> &gt;</p>
wysiwyg: |-
- <p>&lt; <a target="_blank" rel="noopener noreferrer nofollow" href="http://foo.bar">http://foo.bar</a> &gt;</p>
+ <p>&lt; <a target="_blank" rel="noopener noreferrer nofollow" href="http://foo.bar/" canonicalsrc="http://foo.bar">http://foo.bar</a> &gt;</p>
06_09__inlines__autolinks__016:
canonical: |
<p>&lt;m:abc&gt;</p>
@@ -7180,28 +7180,28 @@
static: |-
<p data-sourcepos="1:1-1:18" dir="auto"><a href="http://example.com" rel="nofollow noreferrer noopener" target="_blank">http://example.com</a></p>
wysiwyg: |-
- <p><a target="_blank" rel="noopener noreferrer nofollow" href="http://example.com">http://example.com</a></p>
+ <p><a target="_blank" rel="noopener noreferrer nofollow" href="http://example.com/" canonicalsrc="http://example.com">http://example.com</a></p>
06_09__inlines__autolinks__019:
canonical: |
<p>foo@bar.example.com</p>
static: |-
<p data-sourcepos="1:1-1:19" dir="auto"><a href="mailto:foo@bar.example.com">foo@bar.example.com</a></p>
wysiwyg: |-
- <p><a target="_blank" rel="noopener noreferrer nofollow" href="mailto:foo@bar.example.com">foo@bar.example.com</a></p>
+ <p><a target="_blank" rel="noopener noreferrer nofollow" href="mailto:foo@bar.example.com" canonicalsrc="mailto:foo@bar.example.com">foo@bar.example.com</a></p>
06_10__inlines__autolinks_extension__001:
canonical: |
<p><a href="http://www.commonmark.org">www.commonmark.org</a></p>
static: |-
<p data-sourcepos="1:1-1:18" dir="auto"><a href="http://www.commonmark.org" rel="nofollow noreferrer noopener" target="_blank">www.commonmark.org</a></p>
wysiwyg: |-
- <p><a target="_blank" rel="noopener noreferrer nofollow" href="http://www.commonmark.org">www.commonmark.org</a></p>
+ <p><a target="_blank" rel="noopener noreferrer nofollow" href="http://www.commonmark.org/" canonicalsrc="http://www.commonmark.org">www.commonmark.org</a></p>
06_10__inlines__autolinks_extension__002:
canonical: |
<p>Visit <a href="http://www.commonmark.org/help">www.commonmark.org/help</a> for more information.</p>
static: |-
<p data-sourcepos="1:1-1:51" dir="auto">Visit <a href="http://www.commonmark.org/help" rel="nofollow noreferrer noopener" target="_blank">www.commonmark.org/help</a> for more information.</p>
wysiwyg: |-
- <p>Visit <a target="_blank" rel="noopener noreferrer nofollow" href="http://www.commonmark.org/help">www.commonmark.org/help</a> for more information.</p>
+ <p>Visit <a target="_blank" rel="noopener noreferrer nofollow" href="http://www.commonmark.org/help" canonicalsrc="http://www.commonmark.org/help">www.commonmark.org/help</a> for more information.</p>
06_10__inlines__autolinks_extension__003:
canonical: |
<p>Visit <a href="http://www.commonmark.org">www.commonmark.org</a>.</p>
@@ -7210,8 +7210,8 @@
<p data-sourcepos="1:1-1:25" dir="auto">Visit <a href="http://www.commonmark.org" rel="nofollow noreferrer noopener" target="_blank">www.commonmark.org</a>.</p>
<p data-sourcepos="3:1-3:29" dir="auto">Visit <a href="http://www.commonmark.org/a.b" rel="nofollow noreferrer noopener" target="_blank">www.commonmark.org/a.b</a>.</p>
wysiwyg: |-
- <p>Visit <a target="_blank" rel="noopener noreferrer nofollow" href="http://www.commonmark.org">www.commonmark.org</a>.</p>
- <p>Visit <a target="_blank" rel="noopener noreferrer nofollow" href="http://www.commonmark.org/a.b">www.commonmark.org/a.b</a>.</p>
+ <p>Visit <a target="_blank" rel="noopener noreferrer nofollow" href="http://www.commonmark.org/" canonicalsrc="http://www.commonmark.org">www.commonmark.org</a>.</p>
+ <p>Visit <a target="_blank" rel="noopener noreferrer nofollow" href="http://www.commonmark.org/a.b" canonicalsrc="http://www.commonmark.org/a.b">www.commonmark.org/a.b</a>.</p>
06_10__inlines__autolinks_extension__004:
canonical: |
<p><a href="http://www.google.com/search?q=Markup+(business)">www.google.com/search?q=Markup+(business)</a></p>
@@ -7224,17 +7224,17 @@
<p data-sourcepos="5:1-5:43" dir="auto">(<a href="http://www.google.com/search?q=Markup+(business)" rel="nofollow noreferrer noopener" target="_blank">www.google.com/search?q=Markup+(business)</a>)</p>
<p data-sourcepos="7:1-7:42" dir="auto">(<a href="http://www.google.com/search?q=Markup+(business)" rel="nofollow noreferrer noopener" target="_blank">www.google.com/search?q=Markup+(business)</a></p>
wysiwyg: |-
- <p><a target="_blank" rel="noopener noreferrer nofollow" href="http://www.google.com/search?q=Markup+(business)">www.google.com/search?q=Markup+(business)</a></p>
- <p><a target="_blank" rel="noopener noreferrer nofollow" href="http://www.google.com/search?q=Markup+(business)">www.google.com/search?q=Markup+(business)</a>))</p>
- <p>(<a target="_blank" rel="noopener noreferrer nofollow" href="http://www.google.com/search?q=Markup+(business)">www.google.com/search?q=Markup+(business)</a>)</p>
- <p>(<a target="_blank" rel="noopener noreferrer nofollow" href="http://www.google.com/search?q=Markup+(business)">www.google.com/search?q=Markup+(business)</a></p>
+ <p><a target="_blank" rel="noopener noreferrer nofollow" href="http://www.google.com/search?q=Markup+(business)" canonicalsrc="http://www.google.com/search?q=Markup+(business)">www.google.com/search?q=Markup+(business)</a></p>
+ <p><a target="_blank" rel="noopener noreferrer nofollow" href="http://www.google.com/search?q=Markup+(business)" canonicalsrc="http://www.google.com/search?q=Markup+(business)">www.google.com/search?q=Markup+(business)</a>))</p>
+ <p>(<a target="_blank" rel="noopener noreferrer nofollow" href="http://www.google.com/search?q=Markup+(business)" canonicalsrc="http://www.google.com/search?q=Markup+(business)">www.google.com/search?q=Markup+(business)</a>)</p>
+ <p>(<a target="_blank" rel="noopener noreferrer nofollow" href="http://www.google.com/search?q=Markup+(business)" canonicalsrc="http://www.google.com/search?q=Markup+(business)">www.google.com/search?q=Markup+(business)</a></p>
06_10__inlines__autolinks_extension__005:
canonical: |
<p><a href="http://www.google.com/search?q=(business))+ok">www.google.com/search?q=(business))+ok</a></p>
static: |-
<p data-sourcepos="1:1-1:38" dir="auto"><a href="http://www.google.com/search?q=(business))+ok" rel="nofollow noreferrer noopener" target="_blank">www.google.com/search?q=(business))+ok</a></p>
wysiwyg: |-
- <p><a target="_blank" rel="noopener noreferrer nofollow" href="http://www.google.com/search?q=(business))+ok">www.google.com/search?q=(business))+ok</a></p>
+ <p><a target="_blank" rel="noopener noreferrer nofollow" href="http://www.google.com/search?q=(business))+ok" canonicalsrc="http://www.google.com/search?q=(business))+ok">www.google.com/search?q=(business))+ok</a></p>
06_10__inlines__autolinks_extension__006:
canonical: |
<p><a href="http://www.google.com/search?q=commonmark&amp;hl=en">www.google.com/search?q=commonmark&amp;hl=en</a></p>
@@ -7243,15 +7243,15 @@
<p data-sourcepos="1:1-1:40" dir="auto"><a href="http://www.google.com/search?q=commonmark&amp;hl=en" rel="nofollow noreferrer noopener" target="_blank">www.google.com/search?q=commonmark&amp;hl=en</a></p>
<p data-sourcepos="3:1-3:38" dir="auto"><a href="http://www.google.com/search?q=commonmark" rel="nofollow noreferrer noopener" target="_blank">www.google.com/search?q=commonmark</a>&amp;hl;</p>
wysiwyg: |-
- <p><a target="_blank" rel="noopener noreferrer nofollow" href="http://www.google.com/search?q=commonmark&amp;hl=en">www.google.com/search?q=commonmark&amp;hl=en</a></p>
- <p><a target="_blank" rel="noopener noreferrer nofollow" href="http://www.google.com/search?q=commonmark">www.google.com/search?q=commonmark</a>&amp;hl;</p>
+ <p><a target="_blank" rel="noopener noreferrer nofollow" href="http://www.google.com/search?q=commonmark&amp;hl=en" canonicalsrc="http://www.google.com/search?q=commonmark&amp;hl=en">www.google.com/search?q=commonmark&amp;hl=en</a></p>
+ <p><a target="_blank" rel="noopener noreferrer nofollow" href="http://www.google.com/search?q=commonmark" canonicalsrc="http://www.google.com/search?q=commonmark">www.google.com/search?q=commonmark</a>&amp;hl;</p>
06_10__inlines__autolinks_extension__007:
canonical: |
<p><a href="http://www.commonmark.org/he">www.commonmark.org/he</a>&lt;lp</p>
static: |-
<p data-sourcepos="1:1-1:24" dir="auto"><a href="http://www.commonmark.org/he" rel="nofollow noreferrer noopener" target="_blank">www.commonmark.org/he</a>&lt;lp</p>
wysiwyg: |-
- <p><a target="_blank" rel="noopener noreferrer nofollow" href="http://www.commonmark.org/he">www.commonmark.org/he</a>&lt;lp</p>
+ <p><a target="_blank" rel="noopener noreferrer nofollow" href="http://www.commonmark.org/he" canonicalsrc="http://www.commonmark.org/he">www.commonmark.org/he</a>&lt;lp</p>
06_10__inlines__autolinks_extension__008:
canonical: |
<p><a href="http://commonmark.org">http://commonmark.org</a></p>
@@ -7262,8 +7262,8 @@
<p data-sourcepos="3:1-3:63" dir="auto">(Visit <a href="https://encrypted.google.com/search?q=Markup+(business)" rel="nofollow noreferrer noopener" target="_blank">https://encrypted.google.com/search?q=Markup+(business)</a>)</p>
<p data-sourcepos="5:1-5:48" dir="auto">Anonymous FTP is available at <a href="ftp://foo.bar.baz/">ftp://foo.bar.baz</a>.</p>
wysiwyg: |-
- <p><a target="_blank" rel="noopener noreferrer nofollow" href="http://commonmark.org">http://commonmark.org</a></p>
- <p>(Visit <a target="_blank" rel="noopener noreferrer nofollow" href="https://encrypted.google.com/search?q=Markup+(business)">https://encrypted.google.com/search?q=Markup+(business)</a>)</p>
+ <p><a target="_blank" rel="noopener noreferrer nofollow" href="http://commonmark.org/" canonicalsrc="http://commonmark.org">http://commonmark.org</a></p>
+ <p>(Visit <a target="_blank" rel="noopener noreferrer nofollow" href="https://encrypted.google.com/search?q=Markup+(business)" canonicalsrc="https://encrypted.google.com/search?q=Markup+(business)">https://encrypted.google.com/search?q=Markup+(business)</a>)</p>
<p>Anonymous FTP is available at ftp://foo.bar.baz.</p>
06_10__inlines__autolinks_extension__009:
canonical: |
@@ -7271,14 +7271,14 @@
static: |-
<p data-sourcepos="1:1-1:11" dir="auto"><a href="mailto:foo@bar.baz">foo@bar.baz</a></p>
wysiwyg: |-
- <p><a target="_blank" rel="noopener noreferrer nofollow" href="mailto:foo@bar.baz">foo@bar.baz</a></p>
+ <p><a target="_blank" rel="noopener noreferrer nofollow" href="mailto:foo@bar.baz" canonicalsrc="mailto:foo@bar.baz">foo@bar.baz</a></p>
06_10__inlines__autolinks_extension__010:
canonical: |
<p>hello@mail+xyz.example isn't valid, but <a href="mailto:hello+xyz@mail.example">hello+xyz@mail.example</a> is.</p>
static: |-
<p data-sourcepos="1:1-1:66" dir="auto">hello@mail+xyz.example isn't valid, but <a href="mailto:hello+xyz@mail.example">hello+xyz@mail.example</a> is.</p>
wysiwyg: |-
- <p>hello@mail+xyz.example isn't valid, but <a target="_blank" rel="noopener noreferrer nofollow" href="mailto:hello+xyz@mail.example">hello+xyz@mail.example</a> is.</p>
+ <p>hello@mail+xyz.example isn't valid, but <a target="_blank" rel="noopener noreferrer nofollow" href="mailto:hello+xyz@mail.example" canonicalsrc="mailto:hello+xyz@mail.example">hello+xyz@mail.example</a> is.</p>
06_10__inlines__autolinks_extension__011:
canonical: |
<p><a href="mailto:a.b-c_d@a.b">a.b-c_d@a.b</a></p>
@@ -7291,8 +7291,8 @@
<p data-sourcepos="5:1-5:12" dir="auto">a.b-c_d@a.b-</p>
<p data-sourcepos="7:1-7:12" dir="auto">a.b-c_d@a.b_</p>
wysiwyg: |-
- <p><a target="_blank" rel="noopener noreferrer nofollow" href="mailto:a.b-c_d@a.b">a.b-c_d@a.b</a></p>
- <p><a target="_blank" rel="noopener noreferrer nofollow" href="mailto:a.b-c_d@a.b">a.b-c_d@a.b</a>.</p>
+ <p><a target="_blank" rel="noopener noreferrer nofollow" href="mailto:a.b-c_d@a.b" canonicalsrc="mailto:a.b-c_d@a.b">a.b-c_d@a.b</a></p>
+ <p><a target="_blank" rel="noopener noreferrer nofollow" href="mailto:a.b-c_d@a.b" canonicalsrc="mailto:a.b-c_d@a.b">a.b-c_d@a.b</a>.</p>
<p>a.b-c_d@a.b-</p>
<p>a.b-c_d@a.b_</p>
06_11__inlines__raw_html__001:
diff --git a/glfm_specification/example_snapshots/prosemirror_json.yml b/glfm_specification/example_snapshots/prosemirror_json.yml
index 7cb4757b368..73fcef4dbc0 100644
--- a/glfm_specification/example_snapshots/prosemirror_json.yml
+++ b/glfm_specification/example_snapshots/prosemirror_json.yml
@@ -3145,11 +3145,11 @@
{
"type": "link",
"attrs": {
- "href": "bar",
+ "href": "http://test.host/bar",
"target": "_blank",
"class": null,
"title": null,
- "canonicalSrc": null
+ "canonicalSrc": "bar"
}
}
],
@@ -3230,11 +3230,11 @@
{
"type": "link",
"attrs": {
- "href": "foo",
+ "href": "http://test.host/foo",
"target": "_blank",
"class": null,
"title": null,
- "canonicalSrc": null
+ "canonicalSrc": "foo"
}
}
],
@@ -3748,11 +3748,11 @@
{
"type": "link",
"attrs": {
- "href": "bar",
+ "href": "http://test.host/bar",
"target": "_blank",
"class": null,
"title": null,
- "canonicalSrc": null
+ "canonicalSrc": "bar"
}
}
],
@@ -3906,11 +3906,11 @@
{
"type": "link",
"attrs": {
- "href": "/url",
+ "href": "http://test.host/url",
"target": "_blank",
"class": null,
"title": "title",
- "canonicalSrc": null
+ "canonicalSrc": "/url"
}
}
],
@@ -3947,11 +3947,11 @@
{
"type": "link",
"attrs": {
- "href": "/url",
+ "href": "http://test.host/url",
"target": "_blank",
"class": null,
"title": "the title",
- "canonicalSrc": null
+ "canonicalSrc": "/url"
}
}
],
@@ -3988,11 +3988,11 @@
{
"type": "link",
"attrs": {
- "href": "my_(url)",
+ "href": "http://test.host/my_(url)",
"target": "_blank",
"class": null,
"title": "title (with parens)",
- "canonicalSrc": null
+ "canonicalSrc": "my_(url)"
}
}
],
@@ -4029,11 +4029,11 @@
{
"type": "link",
"attrs": {
- "href": "my%20url",
+ "href": "http://test.host/my%20url",
"target": "_blank",
"class": null,
"title": "title",
- "canonicalSrc": null
+ "canonicalSrc": "my%20url"
}
}
],
@@ -4070,11 +4070,11 @@
{
"type": "link",
"attrs": {
- "href": "/url",
+ "href": "http://test.host/url",
"target": "_blank",
"class": null,
"title": "\ntitle\nline1\nline2\n",
- "canonicalSrc": null
+ "canonicalSrc": "/url"
}
}
],
@@ -4144,11 +4144,11 @@
{
"type": "link",
"attrs": {
- "href": "/url",
+ "href": "http://test.host/url",
"target": "_blank",
"class": null,
"title": null,
- "canonicalSrc": null
+ "canonicalSrc": "/url"
}
}
],
@@ -4213,7 +4213,7 @@
"target": "_blank",
"class": null,
"title": null,
- "canonicalSrc": null
+ "canonicalSrc": ""
}
}
],
@@ -4274,11 +4274,11 @@
{
"type": "link",
"attrs": {
- "href": "/url%5Cbar*baz",
+ "href": "http://test.host/url%5Cbar*baz",
"target": "_blank",
"class": null,
"title": "foo\"bar\\baz",
- "canonicalSrc": null
+ "canonicalSrc": "/url%5Cbar*baz"
}
}
],
@@ -4301,11 +4301,11 @@
{
"type": "link",
"attrs": {
- "href": "url",
+ "href": "http://test.host/url",
"target": "_blank",
"class": null,
"title": null,
- "canonicalSrc": null
+ "canonicalSrc": "url"
}
}
],
@@ -4342,11 +4342,11 @@
{
"type": "link",
"attrs": {
- "href": "first",
+ "href": "http://test.host/first",
"target": "_blank",
"class": null,
"title": null,
- "canonicalSrc": null
+ "canonicalSrc": "first"
}
}
],
@@ -4411,11 +4411,11 @@
{
"type": "link",
"attrs": {
- "href": "/url",
+ "href": "http://test.host/url",
"target": "_blank",
"class": null,
"title": null,
- "canonicalSrc": null
+ "canonicalSrc": "/url"
}
}
],
@@ -4452,11 +4452,11 @@
{
"type": "link",
"attrs": {
- "href": "/%CF%86%CE%BF%CF%85",
+ "href": "http://test.host/%CF%86%CE%BF%CF%85",
"target": "_blank",
"class": null,
"title": null,
- "canonicalSrc": null
+ "canonicalSrc": "/%CF%86%CE%BF%CF%85"
}
}
],
@@ -4655,11 +4655,11 @@
{
"type": "link",
"attrs": {
- "href": "/url",
+ "href": "http://test.host/url",
"target": "_blank",
"class": null,
"title": null,
- "canonicalSrc": null
+ "canonicalSrc": "/url"
}
}
],
@@ -4739,11 +4739,11 @@
{
"type": "link",
"attrs": {
- "href": "/url",
+ "href": "http://test.host/url",
"target": "_blank",
"class": null,
"title": null,
- "canonicalSrc": null
+ "canonicalSrc": "/url"
}
}
],
@@ -4784,11 +4784,11 @@
{
"type": "link",
"attrs": {
- "href": "/url",
+ "href": "http://test.host/url",
"target": "_blank",
"class": null,
"title": null,
- "canonicalSrc": null
+ "canonicalSrc": "/url"
}
}
],
@@ -4853,11 +4853,11 @@
{
"type": "link",
"attrs": {
- "href": "/foo-url",
+ "href": "http://test.host/foo-url",
"target": "_blank",
"class": null,
"title": "foo",
- "canonicalSrc": null
+ "canonicalSrc": "/foo-url"
}
}
],
@@ -4873,11 +4873,11 @@
{
"type": "link",
"attrs": {
- "href": "/bar-url",
+ "href": "http://test.host/bar-url",
"target": "_blank",
"class": null,
"title": "bar",
- "canonicalSrc": null
+ "canonicalSrc": "/bar-url"
}
}
],
@@ -4893,11 +4893,11 @@
{
"type": "link",
"attrs": {
- "href": "/baz-url",
+ "href": "http://test.host/baz-url",
"target": "_blank",
"class": null,
"title": null,
- "canonicalSrc": null
+ "canonicalSrc": "/baz-url"
}
}
],
@@ -4920,11 +4920,11 @@
{
"type": "link",
"attrs": {
- "href": "/url",
+ "href": "http://test.host/url",
"target": "_blank",
"class": null,
"title": null,
- "canonicalSrc": null
+ "canonicalSrc": "/url"
}
}
],
@@ -10683,11 +10683,11 @@
{
"type": "link",
"attrs": {
- "href": "http://example.com?find=%5C*",
+ "href": "http://example.com/?find=%5C*",
"target": "_blank",
"class": null,
"title": null,
- "canonicalSrc": null
+ "canonicalSrc": "http://example.com?find=%5C*"
}
}
],
@@ -10719,11 +10719,11 @@
{
"type": "link",
"attrs": {
- "href": "/bar*",
+ "href": "http://test.host/bar*",
"target": "_blank",
"class": null,
"title": "ti*tle",
- "canonicalSrc": null
+ "canonicalSrc": "/bar*"
}
}
],
@@ -10746,11 +10746,11 @@
{
"type": "link",
"attrs": {
- "href": "/bar*",
+ "href": "http://test.host/bar*",
"target": "_blank",
"class": null,
"title": "ti*tle",
- "canonicalSrc": null
+ "canonicalSrc": "/bar*"
}
}
],
@@ -10905,11 +10905,11 @@
{
"type": "link",
"attrs": {
- "href": "/f%C3%B6%C3%B6",
+ "href": "http://test.host/f%C3%B6%C3%B6",
"target": "_blank",
"class": null,
"title": "föö",
- "canonicalSrc": null
+ "canonicalSrc": "/f%C3%B6%C3%B6"
}
}
],
@@ -10932,11 +10932,11 @@
{
"type": "link",
"attrs": {
- "href": "/f%C3%B6%C3%B6",
+ "href": "http://test.host/f%C3%B6%C3%B6",
"target": "_blank",
"class": null,
"title": "föö",
- "canonicalSrc": null
+ "canonicalSrc": "/f%C3%B6%C3%B6"
}
}
],
@@ -11466,11 +11466,11 @@
{
"type": "link",
"attrs": {
- "href": "`",
+ "href": "http://test.host/%60",
"target": "_blank",
"class": null,
"title": null,
- "canonicalSrc": null
+ "canonicalSrc": "`"
}
}
],
@@ -11517,11 +11517,11 @@
{
"type": "link",
"attrs": {
- "href": "http://foo.bar.%60baz",
+ "href": "http://foo.bar.`baz/",
"target": "_blank",
"class": null,
"title": null,
- "canonicalSrc": null
+ "canonicalSrc": "http://foo.bar.%60baz"
}
}
],
@@ -12673,11 +12673,11 @@
{
"type": "link",
"attrs": {
- "href": "/url",
+ "href": "http://test.host/url",
"target": "_blank",
"class": null,
"title": null,
- "canonicalSrc": null
+ "canonicalSrc": "/url"
}
},
{
@@ -13143,11 +13143,11 @@
{
"type": "link",
"attrs": {
- "href": "/url",
+ "href": "http://test.host/url",
"target": "_blank",
"class": null,
"title": null,
- "canonicalSrc": null
+ "canonicalSrc": "/url"
}
},
{
@@ -13212,11 +13212,11 @@
{
"type": "link",
"attrs": {
- "href": "/url",
+ "href": "http://test.host/url",
"target": "_blank",
"class": null,
"title": null,
- "canonicalSrc": null
+ "canonicalSrc": "/url"
}
},
{
@@ -13571,11 +13571,11 @@
{
"type": "link",
"attrs": {
- "href": "/url",
+ "href": "http://test.host/url",
"target": "_blank",
"class": null,
"title": null,
- "canonicalSrc": null
+ "canonicalSrc": "/url"
}
},
{
@@ -14477,11 +14477,11 @@
{
"type": "link",
"attrs": {
- "href": "/url",
+ "href": "http://test.host/url",
"target": "_blank",
"class": null,
"title": null,
- "canonicalSrc": null
+ "canonicalSrc": "/url"
}
}
],
@@ -14508,11 +14508,11 @@
{
"type": "link",
"attrs": {
- "href": "/url",
+ "href": "http://test.host/url",
"target": "_blank",
"class": null,
"title": null,
- "canonicalSrc": null
+ "canonicalSrc": "/url"
}
}
],
@@ -14536,11 +14536,11 @@
{
"type": "image",
"attrs": {
- "src": "foo",
+ "src": "http://test.host/foo",
"alt": null,
"title": "*",
"uploading": false,
- "canonicalSrc": null
+ "canonicalSrc": "foo"
}
}
]
@@ -14662,7 +14662,7 @@
"target": "_blank",
"class": null,
"title": null,
- "canonicalSrc": null
+ "canonicalSrc": "http://foo.bar/?q=**"
}
}
],
@@ -14693,7 +14693,7 @@
"target": "_blank",
"class": null,
"title": null,
- "canonicalSrc": null
+ "canonicalSrc": "http://foo.bar/?q=__"
}
}
],
@@ -14764,11 +14764,11 @@
{
"type": "link",
"attrs": {
- "href": "/uri",
+ "href": "http://test.host/uri",
"target": "_blank",
"class": null,
"title": "title",
- "canonicalSrc": null
+ "canonicalSrc": "/uri"
}
}
],
@@ -14791,11 +14791,11 @@
{
"type": "link",
"attrs": {
- "href": "/uri",
+ "href": "http://test.host/uri",
"target": "_blank",
"class": null,
"title": null,
- "canonicalSrc": null
+ "canonicalSrc": "/uri"
}
}
],
@@ -14822,7 +14822,7 @@
"target": "_blank",
"class": null,
"title": null,
- "canonicalSrc": null
+ "canonicalSrc": ""
}
}
],
@@ -14849,7 +14849,7 @@
"target": "_blank",
"class": null,
"title": null,
- "canonicalSrc": null
+ "canonicalSrc": ""
}
}
],
@@ -14887,11 +14887,11 @@
{
"type": "link",
"attrs": {
- "href": "/my%20uri",
+ "href": "http://test.host/my%20uri",
"target": "_blank",
"class": null,
"title": null,
- "canonicalSrc": null
+ "canonicalSrc": "/my%20uri"
}
}
],
@@ -14944,11 +14944,11 @@
{
"type": "link",
"attrs": {
- "href": "b)c",
+ "href": "http://test.host/b)c",
"target": "_blank",
"class": null,
"title": null,
- "canonicalSrc": null
+ "canonicalSrc": "b)c"
}
}
],
@@ -15010,11 +15010,11 @@
{
"type": "link",
"attrs": {
- "href": "(foo)",
+ "href": "http://test.host/(foo)",
"target": "_blank",
"class": null,
"title": null,
- "canonicalSrc": null
+ "canonicalSrc": "(foo)"
}
}
],
@@ -15037,11 +15037,11 @@
{
"type": "link",
"attrs": {
- "href": "foo(and(bar))",
+ "href": "http://test.host/foo(and(bar))",
"target": "_blank",
"class": null,
"title": null,
- "canonicalSrc": null
+ "canonicalSrc": "foo(and(bar))"
}
}
],
@@ -15064,11 +15064,11 @@
{
"type": "link",
"attrs": {
- "href": "foo(and(bar)",
+ "href": "http://test.host/foo(and(bar)",
"target": "_blank",
"class": null,
"title": null,
- "canonicalSrc": null
+ "canonicalSrc": "foo(and(bar)"
}
}
],
@@ -15091,11 +15091,11 @@
{
"type": "link",
"attrs": {
- "href": "foo(and(bar)",
+ "href": "http://test.host/foo(and(bar)",
"target": "_blank",
"class": null,
"title": null,
- "canonicalSrc": null
+ "canonicalSrc": "foo(and(bar)"
}
}
],
@@ -15118,11 +15118,11 @@
{
"type": "link",
"attrs": {
- "href": "foo):",
+ "href": "http://test.host/foo):",
"target": "_blank",
"class": null,
"title": null,
- "canonicalSrc": null
+ "canonicalSrc": "foo):"
}
}
],
@@ -15145,11 +15145,11 @@
{
"type": "link",
"attrs": {
- "href": "#fragment",
+ "href": "http://test.host/#fragment",
"target": "_blank",
"class": null,
"title": null,
- "canonicalSrc": null
+ "canonicalSrc": "#fragment"
}
}
],
@@ -15166,11 +15166,11 @@
{
"type": "link",
"attrs": {
- "href": "http://example.com#fragment",
+ "href": "http://example.com/#fragment",
"target": "_blank",
"class": null,
"title": null,
- "canonicalSrc": null
+ "canonicalSrc": "http://example.com#fragment"
}
}
],
@@ -15187,11 +15187,11 @@
{
"type": "link",
"attrs": {
- "href": "http://example.com?foo=3#frag",
+ "href": "http://example.com/?foo=3#frag",
"target": "_blank",
"class": null,
"title": null,
- "canonicalSrc": null
+ "canonicalSrc": "http://example.com?foo=3#frag"
}
}
],
@@ -15214,11 +15214,11 @@
{
"type": "link",
"attrs": {
- "href": "foo%5Cbar",
+ "href": "http://test.host/foo%5Cbar",
"target": "_blank",
"class": null,
"title": null,
- "canonicalSrc": null
+ "canonicalSrc": "foo%5Cbar"
}
}
],
@@ -15241,11 +15241,11 @@
{
"type": "link",
"attrs": {
- "href": "foo%20b%C3%A4",
+ "href": "http://test.host/foo%20b%C3%A4",
"target": "_blank",
"class": null,
"title": null,
- "canonicalSrc": null
+ "canonicalSrc": "foo%20b%C3%A4"
}
}
],
@@ -15268,11 +15268,11 @@
{
"type": "link",
"attrs": {
- "href": "%22title%22",
+ "href": "http://test.host/%22title%22",
"target": "_blank",
"class": null,
"title": null,
- "canonicalSrc": null
+ "canonicalSrc": "%22title%22"
}
}
],
@@ -15295,11 +15295,11 @@
{
"type": "link",
"attrs": {
- "href": "/url",
+ "href": "http://test.host/url",
"target": "_blank",
"class": null,
"title": "title",
- "canonicalSrc": null
+ "canonicalSrc": "/url"
}
}
],
@@ -15322,11 +15322,11 @@
{
"type": "link",
"attrs": {
- "href": "/url",
+ "href": "http://test.host/url",
"target": "_blank",
"class": null,
"title": "title \"\"",
- "canonicalSrc": null
+ "canonicalSrc": "/url"
}
}
],
@@ -15349,11 +15349,11 @@
{
"type": "link",
"attrs": {
- "href": "/url%C2%A0%22title%22",
+ "href": "http://test.host/url%C2%A0%22title%22",
"target": "_blank",
"class": null,
"title": null,
- "canonicalSrc": null
+ "canonicalSrc": "/url%C2%A0%22title%22"
}
}
],
@@ -15391,11 +15391,11 @@
{
"type": "link",
"attrs": {
- "href": "/url",
+ "href": "http://test.host/url",
"target": "_blank",
"class": null,
"title": "title \"and\" title",
- "canonicalSrc": null
+ "canonicalSrc": "/url"
}
}
],
@@ -15418,11 +15418,11 @@
{
"type": "link",
"attrs": {
- "href": "/uri",
+ "href": "http://test.host/uri",
"target": "_blank",
"class": null,
"title": "title",
- "canonicalSrc": null
+ "canonicalSrc": "/uri"
}
}
],
@@ -15460,11 +15460,11 @@
{
"type": "link",
"attrs": {
- "href": "/uri",
+ "href": "http://test.host/uri",
"target": "_blank",
"class": null,
"title": null,
- "canonicalSrc": null
+ "canonicalSrc": "/uri"
}
}
],
@@ -15506,11 +15506,11 @@
{
"type": "link",
"attrs": {
- "href": "/uri",
+ "href": "http://test.host/uri",
"target": "_blank",
"class": null,
"title": null,
- "canonicalSrc": null
+ "canonicalSrc": "/uri"
}
}
],
@@ -15533,11 +15533,11 @@
{
"type": "link",
"attrs": {
- "href": "/uri",
+ "href": "http://test.host/uri",
"target": "_blank",
"class": null,
"title": null,
- "canonicalSrc": null
+ "canonicalSrc": "/uri"
}
}
],
@@ -15560,11 +15560,11 @@
{
"type": "link",
"attrs": {
- "href": "/uri",
+ "href": "http://test.host/uri",
"target": "_blank",
"class": null,
"title": null,
- "canonicalSrc": null
+ "canonicalSrc": "/uri"
}
}
],
@@ -15576,11 +15576,11 @@
{
"type": "link",
"attrs": {
- "href": "/uri",
+ "href": "http://test.host/uri",
"target": "_blank",
"class": null,
"title": null,
- "canonicalSrc": null
+ "canonicalSrc": "/uri"
}
},
{
@@ -15595,11 +15595,11 @@
{
"type": "link",
"attrs": {
- "href": "/uri",
+ "href": "http://test.host/uri",
"target": "_blank",
"class": null,
"title": null,
- "canonicalSrc": null
+ "canonicalSrc": "/uri"
}
},
{
@@ -15617,11 +15617,11 @@
{
"type": "link",
"attrs": {
- "href": "/uri",
+ "href": "http://test.host/uri",
"target": "_blank",
"class": null,
"title": null,
- "canonicalSrc": null
+ "canonicalSrc": "/uri"
}
},
{
@@ -15650,21 +15650,21 @@
{
"type": "image",
"attrs": {
- "src": "moon.jpg",
+ "src": "http://test.host/moon.jpg",
"alt": "moon",
"title": null,
"uploading": false,
- "canonicalSrc": null
+ "canonicalSrc": "moon.jpg"
},
"marks": [
{
"type": "link",
"attrs": {
- "href": "/uri",
+ "href": "http://test.host/uri",
"target": "_blank",
"class": null,
"title": null,
- "canonicalSrc": null
+ "canonicalSrc": "/uri"
}
}
]
@@ -15690,11 +15690,11 @@
{
"type": "link",
"attrs": {
- "href": "/uri",
+ "href": "http://test.host/uri",
"target": "_blank",
"class": null,
"title": null,
- "canonicalSrc": null
+ "canonicalSrc": "/uri"
}
}
],
@@ -15734,11 +15734,11 @@
{
"type": "link",
"attrs": {
- "href": "/uri",
+ "href": "http://test.host/uri",
"target": "_blank",
"class": null,
"title": null,
- "canonicalSrc": null
+ "canonicalSrc": "/uri"
}
},
{
@@ -15774,11 +15774,11 @@
{
"type": "image",
"attrs": {
- "src": "uri3",
+ "src": "http://test.host/uri3",
"alt": "[foo](uri2)",
"title": null,
"uploading": false,
- "canonicalSrc": null
+ "canonicalSrc": "uri3"
}
}
]
@@ -15802,11 +15802,11 @@
{
"type": "link",
"attrs": {
- "href": "/uri",
+ "href": "http://test.host/uri",
"target": "_blank",
"class": null,
"title": null,
- "canonicalSrc": null
+ "canonicalSrc": "/uri"
}
}
],
@@ -15829,11 +15829,11 @@
{
"type": "link",
"attrs": {
- "href": "baz*",
+ "href": "http://test.host/baz*",
"target": "_blank",
"class": null,
"title": null,
- "canonicalSrc": null
+ "canonicalSrc": "baz*"
}
}
],
@@ -15927,7 +15927,7 @@
"target": "_blank",
"class": null,
"title": null,
- "canonicalSrc": null
+ "canonicalSrc": "http://example.com/?search=%5D(uri)"
}
}
],
@@ -15950,11 +15950,11 @@
{
"type": "link",
"attrs": {
- "href": "/url",
+ "href": "http://test.host/url",
"target": "_blank",
"class": null,
"title": "title",
- "canonicalSrc": null
+ "canonicalSrc": "/url"
}
}
],
@@ -15991,11 +15991,11 @@
{
"type": "link",
"attrs": {
- "href": "/uri",
+ "href": "http://test.host/uri",
"target": "_blank",
"class": null,
"title": null,
- "canonicalSrc": null
+ "canonicalSrc": "/uri"
}
}
],
@@ -16032,11 +16032,11 @@
{
"type": "link",
"attrs": {
- "href": "/uri",
+ "href": "http://test.host/uri",
"target": "_blank",
"class": null,
"title": null,
- "canonicalSrc": null
+ "canonicalSrc": "/uri"
}
}
],
@@ -16073,11 +16073,11 @@
{
"type": "link",
"attrs": {
- "href": "/uri",
+ "href": "http://test.host/uri",
"target": "_blank",
"class": null,
"title": null,
- "canonicalSrc": null
+ "canonicalSrc": "/uri"
}
}
],
@@ -16089,11 +16089,11 @@
{
"type": "link",
"attrs": {
- "href": "/uri",
+ "href": "http://test.host/uri",
"target": "_blank",
"class": null,
"title": null,
- "canonicalSrc": null
+ "canonicalSrc": "/uri"
}
},
{
@@ -16108,11 +16108,11 @@
{
"type": "link",
"attrs": {
- "href": "/uri",
+ "href": "http://test.host/uri",
"target": "_blank",
"class": null,
"title": null,
- "canonicalSrc": null
+ "canonicalSrc": "/uri"
}
},
{
@@ -16130,11 +16130,11 @@
{
"type": "link",
"attrs": {
- "href": "/uri",
+ "href": "http://test.host/uri",
"target": "_blank",
"class": null,
"title": null,
- "canonicalSrc": null
+ "canonicalSrc": "/uri"
}
},
{
@@ -16177,21 +16177,21 @@
{
"type": "image",
"attrs": {
- "src": "moon.jpg",
+ "src": "http://test.host/moon.jpg",
"alt": "moon",
"title": null,
"uploading": false,
- "canonicalSrc": null
+ "canonicalSrc": "moon.jpg"
},
"marks": [
{
"type": "link",
"attrs": {
- "href": "/uri",
+ "href": "http://test.host/uri",
"target": "_blank",
"class": null,
"title": null,
- "canonicalSrc": null
+ "canonicalSrc": "/uri"
}
}
]
@@ -16231,11 +16231,11 @@
{
"type": "link",
"attrs": {
- "href": "/uri",
+ "href": "http://test.host/uri",
"target": "_blank",
"class": null,
"title": null,
- "canonicalSrc": null
+ "canonicalSrc": "/uri"
}
}
],
@@ -16251,11 +16251,11 @@
{
"type": "link",
"attrs": {
- "href": "/uri",
+ "href": "http://test.host/uri",
"target": "_blank",
"class": null,
"title": null,
- "canonicalSrc": null
+ "canonicalSrc": "/uri"
}
}
],
@@ -16305,11 +16305,11 @@
{
"type": "link",
"attrs": {
- "href": "/uri",
+ "href": "http://test.host/uri",
"target": "_blank",
"class": null,
"title": null,
- "canonicalSrc": null
+ "canonicalSrc": "/uri"
}
},
{
@@ -16328,11 +16328,11 @@
{
"type": "link",
"attrs": {
- "href": "/uri",
+ "href": "http://test.host/uri",
"target": "_blank",
"class": null,
"title": null,
- "canonicalSrc": null
+ "canonicalSrc": "/uri"
}
}
],
@@ -16373,11 +16373,11 @@
{
"type": "link",
"attrs": {
- "href": "/uri",
+ "href": "http://test.host/uri",
"target": "_blank",
"class": null,
"title": null,
- "canonicalSrc": null
+ "canonicalSrc": "/uri"
}
}
],
@@ -16414,11 +16414,11 @@
{
"type": "link",
"attrs": {
- "href": "/uri",
+ "href": "http://test.host/uri",
"target": "_blank",
"class": null,
"title": null,
- "canonicalSrc": null
+ "canonicalSrc": "/uri"
}
}
],
@@ -16530,7 +16530,7 @@
"target": "_blank",
"class": null,
"title": null,
- "canonicalSrc": null
+ "canonicalSrc": "http://example.com/?search=%5D%5Bref%5D"
}
}
],
@@ -16567,11 +16567,11 @@
{
"type": "link",
"attrs": {
- "href": "/url",
+ "href": "http://test.host/url",
"target": "_blank",
"class": null,
"title": "title",
- "canonicalSrc": null
+ "canonicalSrc": "/url"
}
}
],
@@ -16608,11 +16608,11 @@
{
"type": "link",
"attrs": {
- "href": "/url",
+ "href": "http://test.host/url",
"target": "_blank",
"class": null,
"title": null,
- "canonicalSrc": null
+ "canonicalSrc": "/url"
}
}
],
@@ -16667,11 +16667,11 @@
{
"type": "link",
"attrs": {
- "href": "/url",
+ "href": "http://test.host/url",
"target": "_blank",
"class": null,
"title": null,
- "canonicalSrc": null
+ "canonicalSrc": "/url"
}
}
],
@@ -16698,11 +16698,11 @@
{
"type": "link",
"attrs": {
- "href": "/url",
+ "href": "http://test.host/url",
"target": "_blank",
"class": null,
"title": "title",
- "canonicalSrc": null
+ "canonicalSrc": "/url"
}
}
],
@@ -16743,11 +16743,11 @@
{
"type": "link",
"attrs": {
- "href": "/url",
+ "href": "http://test.host/url",
"target": "_blank",
"class": null,
"title": "title",
- "canonicalSrc": null
+ "canonicalSrc": "/url"
}
}
],
@@ -16812,11 +16812,11 @@
{
"type": "link",
"attrs": {
- "href": "/url1",
+ "href": "http://test.host/url1",
"target": "_blank",
"class": null,
"title": null,
- "canonicalSrc": null
+ "canonicalSrc": "/url1"
}
}
],
@@ -16940,11 +16940,11 @@
{
"type": "link",
"attrs": {
- "href": "/uri",
+ "href": "http://test.host/uri",
"target": "_blank",
"class": null,
"title": null,
- "canonicalSrc": null
+ "canonicalSrc": "/uri"
}
}
],
@@ -16995,11 +16995,11 @@
{
"type": "link",
"attrs": {
- "href": "/uri",
+ "href": "http://test.host/uri",
"target": "_blank",
"class": null,
"title": null,
- "canonicalSrc": null
+ "canonicalSrc": "/uri"
}
}
],
@@ -17070,11 +17070,11 @@
{
"type": "link",
"attrs": {
- "href": "/url",
+ "href": "http://test.host/url",
"target": "_blank",
"class": null,
"title": "title",
- "canonicalSrc": null
+ "canonicalSrc": "/url"
}
}
],
@@ -17111,11 +17111,11 @@
{
"type": "link",
"attrs": {
- "href": "/url",
+ "href": "http://test.host/url",
"target": "_blank",
"class": null,
"title": "title",
- "canonicalSrc": null
+ "canonicalSrc": "/url"
}
},
{
@@ -17130,11 +17130,11 @@
{
"type": "link",
"attrs": {
- "href": "/url",
+ "href": "http://test.host/url",
"target": "_blank",
"class": null,
"title": "title",
- "canonicalSrc": null
+ "canonicalSrc": "/url"
}
}
],
@@ -17171,11 +17171,11 @@
{
"type": "link",
"attrs": {
- "href": "/url",
+ "href": "http://test.host/url",
"target": "_blank",
"class": null,
"title": "title",
- "canonicalSrc": null
+ "canonicalSrc": "/url"
}
}
],
@@ -17212,11 +17212,11 @@
{
"type": "link",
"attrs": {
- "href": "/url",
+ "href": "http://test.host/url",
"target": "_blank",
"class": null,
"title": "title",
- "canonicalSrc": null
+ "canonicalSrc": "/url"
}
}
],
@@ -17257,11 +17257,11 @@
{
"type": "link",
"attrs": {
- "href": "/url",
+ "href": "http://test.host/url",
"target": "_blank",
"class": null,
"title": "title",
- "canonicalSrc": null
+ "canonicalSrc": "/url"
}
}
],
@@ -17298,11 +17298,11 @@
{
"type": "link",
"attrs": {
- "href": "/url",
+ "href": "http://test.host/url",
"target": "_blank",
"class": null,
"title": "title",
- "canonicalSrc": null
+ "canonicalSrc": "/url"
}
},
{
@@ -17317,11 +17317,11 @@
{
"type": "link",
"attrs": {
- "href": "/url",
+ "href": "http://test.host/url",
"target": "_blank",
"class": null,
"title": "title",
- "canonicalSrc": null
+ "canonicalSrc": "/url"
}
}
],
@@ -17362,11 +17362,11 @@
{
"type": "link",
"attrs": {
- "href": "/url",
+ "href": "http://test.host/url",
"target": "_blank",
"class": null,
"title": "title",
- "canonicalSrc": null
+ "canonicalSrc": "/url"
}
},
{
@@ -17381,11 +17381,11 @@
{
"type": "link",
"attrs": {
- "href": "/url",
+ "href": "http://test.host/url",
"target": "_blank",
"class": null,
"title": "title",
- "canonicalSrc": null
+ "canonicalSrc": "/url"
}
}
],
@@ -17430,11 +17430,11 @@
{
"type": "link",
"attrs": {
- "href": "/url",
+ "href": "http://test.host/url",
"target": "_blank",
"class": null,
"title": null,
- "canonicalSrc": null
+ "canonicalSrc": "/url"
}
}
],
@@ -17471,11 +17471,11 @@
{
"type": "link",
"attrs": {
- "href": "/url",
+ "href": "http://test.host/url",
"target": "_blank",
"class": null,
"title": "title",
- "canonicalSrc": null
+ "canonicalSrc": "/url"
}
}
],
@@ -17512,11 +17512,11 @@
{
"type": "link",
"attrs": {
- "href": "/url",
+ "href": "http://test.host/url",
"target": "_blank",
"class": null,
"title": null,
- "canonicalSrc": null
+ "canonicalSrc": "/url"
}
}
],
@@ -17604,11 +17604,11 @@
{
"type": "link",
"attrs": {
- "href": "/url",
+ "href": "http://test.host/url",
"target": "_blank",
"class": null,
"title": null,
- "canonicalSrc": null
+ "canonicalSrc": "/url"
}
}
],
@@ -17631,11 +17631,11 @@
{
"type": "link",
"attrs": {
- "href": "/url2",
+ "href": "http://test.host/url2",
"target": "_blank",
"class": null,
"title": null,
- "canonicalSrc": null
+ "canonicalSrc": "/url2"
}
}
],
@@ -17686,11 +17686,11 @@
{
"type": "link",
"attrs": {
- "href": "/url1",
+ "href": "http://test.host/url1",
"target": "_blank",
"class": null,
"title": null,
- "canonicalSrc": null
+ "canonicalSrc": "/url1"
}
}
],
@@ -17731,7 +17731,7 @@
"target": "_blank",
"class": null,
"title": null,
- "canonicalSrc": null
+ "canonicalSrc": ""
}
}
],
@@ -17768,11 +17768,11 @@
{
"type": "link",
"attrs": {
- "href": "/url1",
+ "href": "http://test.host/url1",
"target": "_blank",
"class": null,
"title": null,
- "canonicalSrc": null
+ "canonicalSrc": "/url1"
}
}
],
@@ -17817,11 +17817,11 @@
{
"type": "link",
"attrs": {
- "href": "/url",
+ "href": "http://test.host/url",
"target": "_blank",
"class": null,
"title": null,
- "canonicalSrc": null
+ "canonicalSrc": "/url"
}
}
],
@@ -17858,11 +17858,11 @@
{
"type": "link",
"attrs": {
- "href": "/url2",
+ "href": "http://test.host/url2",
"target": "_blank",
"class": null,
"title": null,
- "canonicalSrc": null
+ "canonicalSrc": "/url2"
}
}
],
@@ -17874,11 +17874,11 @@
{
"type": "link",
"attrs": {
- "href": "/url1",
+ "href": "http://test.host/url1",
"target": "_blank",
"class": null,
"title": null,
- "canonicalSrc": null
+ "canonicalSrc": "/url1"
}
}
],
@@ -17933,11 +17933,11 @@
{
"type": "link",
"attrs": {
- "href": "/url1",
+ "href": "http://test.host/url1",
"target": "_blank",
"class": null,
"title": null,
- "canonicalSrc": null
+ "canonicalSrc": "/url1"
}
}
],
@@ -17985,11 +17985,11 @@
{
"type": "image",
"attrs": {
- "src": "/url",
+ "src": "http://test.host/url",
"alt": "foo",
"title": "title",
"uploading": false,
- "canonicalSrc": null
+ "canonicalSrc": "/url"
}
}
]
@@ -18006,11 +18006,11 @@
{
"type": "image",
"attrs": {
- "src": "train.jpg",
+ "src": "http://test.host/train.jpg",
"alt": "foo bar",
"title": "train & tracks",
"uploading": false,
- "canonicalSrc": null
+ "canonicalSrc": "train.jpg"
}
}
]
@@ -18041,11 +18041,11 @@
{
"type": "image",
"attrs": {
- "src": "/url2",
+ "src": "http://test.host/url2",
"alt": "foo bar",
"title": null,
"uploading": false,
- "canonicalSrc": null
+ "canonicalSrc": "/url2"
}
}
]
@@ -18062,11 +18062,11 @@
{
"type": "image",
"attrs": {
- "src": "/url2",
+ "src": "http://test.host/url2",
"alt": "foo bar",
"title": null,
"uploading": false,
- "canonicalSrc": null
+ "canonicalSrc": "/url2"
}
}
]
@@ -18083,11 +18083,11 @@
{
"type": "image",
"attrs": {
- "src": "train.jpg",
+ "src": "http://test.host/train.jpg",
"alt": "foo bar",
"title": "train & tracks",
"uploading": false,
- "canonicalSrc": null
+ "canonicalSrc": "train.jpg"
}
}
]
@@ -18118,11 +18118,11 @@
{
"type": "image",
"attrs": {
- "src": "train.jpg",
+ "src": "http://test.host/train.jpg",
"alt": "foo bar",
"title": "train & tracks",
"uploading": false,
- "canonicalSrc": null
+ "canonicalSrc": "train.jpg"
}
}
]
@@ -18153,11 +18153,11 @@
{
"type": "image",
"attrs": {
- "src": "train.jpg",
+ "src": "http://test.host/train.jpg",
"alt": "foo",
"title": null,
"uploading": false,
- "canonicalSrc": null
+ "canonicalSrc": "train.jpg"
}
}
]
@@ -18178,11 +18178,11 @@
{
"type": "image",
"attrs": {
- "src": "/path/to/train.jpg",
+ "src": "http://test.host/path/to/train.jpg",
"alt": "foo bar",
"title": "title",
"uploading": false,
- "canonicalSrc": null
+ "canonicalSrc": "/path/to/train.jpg"
}
}
]
@@ -18199,11 +18199,11 @@
{
"type": "image",
"attrs": {
- "src": "url",
+ "src": "http://test.host/url",
"alt": "foo",
"title": null,
"uploading": false,
- "canonicalSrc": null
+ "canonicalSrc": "url"
}
}
]
@@ -18220,11 +18220,11 @@
{
"type": "image",
"attrs": {
- "src": "/url",
+ "src": "http://test.host/url",
"alt": "",
"title": null,
"uploading": false,
- "canonicalSrc": null
+ "canonicalSrc": "/url"
}
}
]
@@ -18241,11 +18241,11 @@
{
"type": "image",
"attrs": {
- "src": "/url",
+ "src": "http://test.host/url",
"alt": "foo",
"title": null,
"uploading": false,
- "canonicalSrc": null
+ "canonicalSrc": "/url"
}
}
]
@@ -18276,11 +18276,11 @@
{
"type": "image",
"attrs": {
- "src": "/url",
+ "src": "http://test.host/url",
"alt": "foo",
"title": null,
"uploading": false,
- "canonicalSrc": null
+ "canonicalSrc": "/url"
}
}
]
@@ -18311,11 +18311,11 @@
{
"type": "image",
"attrs": {
- "src": "/url",
+ "src": "http://test.host/url",
"alt": "foo",
"title": "title",
"uploading": false,
- "canonicalSrc": null
+ "canonicalSrc": "/url"
}
}
]
@@ -18346,11 +18346,11 @@
{
"type": "image",
"attrs": {
- "src": "/url",
+ "src": "http://test.host/url",
"alt": "foo bar",
"title": "title",
"uploading": false,
- "canonicalSrc": null
+ "canonicalSrc": "/url"
}
}
]
@@ -18381,11 +18381,11 @@
{
"type": "image",
"attrs": {
- "src": "/url",
+ "src": "http://test.host/url",
"alt": "Foo",
"title": "title",
"uploading": false,
- "canonicalSrc": null
+ "canonicalSrc": "/url"
}
}
]
@@ -18416,11 +18416,11 @@
{
"type": "image",
"attrs": {
- "src": "/url",
+ "src": "http://test.host/url",
"alt": "foo",
"title": "title",
"uploading": false,
- "canonicalSrc": null
+ "canonicalSrc": "/url"
}
},
{
@@ -18455,11 +18455,11 @@
{
"type": "image",
"attrs": {
- "src": "/url",
+ "src": "http://test.host/url",
"alt": "foo",
"title": "title",
"uploading": false,
- "canonicalSrc": null
+ "canonicalSrc": "/url"
}
}
]
@@ -18490,11 +18490,11 @@
{
"type": "image",
"attrs": {
- "src": "/url",
+ "src": "http://test.host/url",
"alt": "foo bar",
"title": "title",
"uploading": false,
- "canonicalSrc": null
+ "canonicalSrc": "/url"
}
}
]
@@ -18549,11 +18549,11 @@
{
"type": "image",
"attrs": {
- "src": "/url",
+ "src": "http://test.host/url",
"alt": "Foo",
"title": "title",
"uploading": false,
- "canonicalSrc": null
+ "canonicalSrc": "/url"
}
}
]
@@ -18620,11 +18620,11 @@
{
"type": "link",
"attrs": {
- "href": "/url",
+ "href": "http://test.host/url",
"target": "_blank",
"class": null,
"title": "title",
- "canonicalSrc": null
+ "canonicalSrc": "/url"
}
}
],
@@ -18661,11 +18661,11 @@
{
"type": "link",
"attrs": {
- "href": "http://foo.bar.baz",
+ "href": "http://foo.bar.baz/",
"target": "_blank",
"class": null,
"title": null,
- "canonicalSrc": null
+ "canonicalSrc": "http://foo.bar.baz"
}
}
],
@@ -18692,7 +18692,7 @@
"target": "_blank",
"class": null,
"title": null,
- "canonicalSrc": null
+ "canonicalSrc": "http://foo.bar.baz/test?q=hello&id=22&boolean"
}
}
],
@@ -18719,7 +18719,7 @@
"target": "_blank",
"class": null,
"title": null,
- "canonicalSrc": null
+ "canonicalSrc": "irc://foo.bar:2233/baz"
}
}
],
@@ -18742,11 +18742,11 @@
{
"type": "link",
"attrs": {
- "href": "MAILTO:FOO@BAR.BAZ",
+ "href": "mailto:FOO@BAR.BAZ",
"target": "_blank",
"class": null,
"title": null,
- "canonicalSrc": null
+ "canonicalSrc": "MAILTO:FOO@BAR.BAZ"
}
}
],
@@ -18773,7 +18773,7 @@
"target": "_blank",
"class": null,
"title": null,
- "canonicalSrc": null
+ "canonicalSrc": "a+b+c:d"
}
}
],
@@ -18800,7 +18800,7 @@
"target": "_blank",
"class": null,
"title": null,
- "canonicalSrc": null
+ "canonicalSrc": "made-up-scheme://foo,bar"
}
}
],
@@ -18827,7 +18827,7 @@
"target": "_blank",
"class": null,
"title": null,
- "canonicalSrc": null
+ "canonicalSrc": "http://../"
}
}
],
@@ -18854,7 +18854,7 @@
"target": "_blank",
"class": null,
"title": null,
- "canonicalSrc": null
+ "canonicalSrc": "localhost:5001/foo"
}
}
],
@@ -18885,7 +18885,7 @@
"target": "_blank",
"class": null,
"title": null,
- "canonicalSrc": null
+ "canonicalSrc": "http://foo.bar/baz"
}
}
],
@@ -18916,7 +18916,7 @@
"target": "_blank",
"class": null,
"title": null,
- "canonicalSrc": null
+ "canonicalSrc": "http://example.com/%5C%5B%5C"
}
}
],
@@ -18943,7 +18943,7 @@
"target": "_blank",
"class": null,
"title": null,
- "canonicalSrc": null
+ "canonicalSrc": "mailto:foo@bar.example.com"
}
}
],
@@ -18970,7 +18970,7 @@
"target": "_blank",
"class": null,
"title": null,
- "canonicalSrc": null
+ "canonicalSrc": "mailto:foo+special@Bar.baz-bar0.com"
}
}
],
@@ -19001,7 +19001,7 @@
"target": "_blank",
"class": null,
"title": null,
- "canonicalSrc": null
+ "canonicalSrc": "mailto:foo+@bar.example.com"
}
}
],
@@ -19047,11 +19047,11 @@
{
"type": "link",
"attrs": {
- "href": "http://foo.bar",
+ "href": "http://foo.bar/",
"target": "_blank",
"class": null,
"title": null,
- "canonicalSrc": null
+ "canonicalSrc": "http://foo.bar"
}
}
],
@@ -19108,11 +19108,11 @@
{
"type": "link",
"attrs": {
- "href": "http://example.com",
+ "href": "http://example.com/",
"target": "_blank",
"class": null,
"title": null,
- "canonicalSrc": null
+ "canonicalSrc": "http://example.com"
}
}
],
@@ -19139,7 +19139,7 @@
"target": "_blank",
"class": null,
"title": null,
- "canonicalSrc": null
+ "canonicalSrc": "mailto:foo@bar.example.com"
}
}
],
@@ -19162,11 +19162,11 @@
{
"type": "link",
"attrs": {
- "href": "http://www.commonmark.org",
+ "href": "http://www.commonmark.org/",
"target": "_blank",
"class": null,
"title": null,
- "canonicalSrc": null
+ "canonicalSrc": "http://www.commonmark.org"
}
}
],
@@ -19197,7 +19197,7 @@
"target": "_blank",
"class": null,
"title": null,
- "canonicalSrc": null
+ "canonicalSrc": "http://www.commonmark.org/help"
}
}
],
@@ -19228,11 +19228,11 @@
{
"type": "link",
"attrs": {
- "href": "http://www.commonmark.org",
+ "href": "http://www.commonmark.org/",
"target": "_blank",
"class": null,
"title": null,
- "canonicalSrc": null
+ "canonicalSrc": "http://www.commonmark.org"
}
}
],
@@ -19261,7 +19261,7 @@
"target": "_blank",
"class": null,
"title": null,
- "canonicalSrc": null
+ "canonicalSrc": "http://www.commonmark.org/a.b"
}
}
],
@@ -19292,7 +19292,7 @@
"target": "_blank",
"class": null,
"title": null,
- "canonicalSrc": null
+ "canonicalSrc": "http://www.google.com/search?q=Markup+(business)"
}
}
],
@@ -19313,7 +19313,7 @@
"target": "_blank",
"class": null,
"title": null,
- "canonicalSrc": null
+ "canonicalSrc": "http://www.google.com/search?q=Markup+(business)"
}
}
],
@@ -19342,7 +19342,7 @@
"target": "_blank",
"class": null,
"title": null,
- "canonicalSrc": null
+ "canonicalSrc": "http://www.google.com/search?q=Markup+(business)"
}
}
],
@@ -19371,7 +19371,7 @@
"target": "_blank",
"class": null,
"title": null,
- "canonicalSrc": null
+ "canonicalSrc": "http://www.google.com/search?q=Markup+(business)"
}
}
],
@@ -19398,7 +19398,7 @@
"target": "_blank",
"class": null,
"title": null,
- "canonicalSrc": null
+ "canonicalSrc": "http://www.google.com/search?q=(business))+ok"
}
}
],
@@ -19425,7 +19425,7 @@
"target": "_blank",
"class": null,
"title": null,
- "canonicalSrc": null
+ "canonicalSrc": "http://www.google.com/search?q=commonmark&hl=en"
}
}
],
@@ -19446,7 +19446,7 @@
"target": "_blank",
"class": null,
"title": null,
- "canonicalSrc": null
+ "canonicalSrc": "http://www.google.com/search?q=commonmark"
}
}
],
@@ -19477,7 +19477,7 @@
"target": "_blank",
"class": null,
"title": null,
- "canonicalSrc": null
+ "canonicalSrc": "http://www.commonmark.org/he"
}
}
],
@@ -19504,11 +19504,11 @@
{
"type": "link",
"attrs": {
- "href": "http://commonmark.org",
+ "href": "http://commonmark.org/",
"target": "_blank",
"class": null,
"title": null,
- "canonicalSrc": null
+ "canonicalSrc": "http://commonmark.org"
}
}
],
@@ -19533,7 +19533,7 @@
"target": "_blank",
"class": null,
"title": null,
- "canonicalSrc": null
+ "canonicalSrc": "https://encrypted.google.com/search?q=Markup+(business)"
}
}
],
@@ -19573,7 +19573,7 @@
"target": "_blank",
"class": null,
"title": null,
- "canonicalSrc": null
+ "canonicalSrc": "mailto:foo@bar.baz"
}
}
],
@@ -19604,7 +19604,7 @@
"target": "_blank",
"class": null,
"title": null,
- "canonicalSrc": null
+ "canonicalSrc": "mailto:hello+xyz@mail.example"
}
}
],
@@ -19635,7 +19635,7 @@
"target": "_blank",
"class": null,
"title": null,
- "canonicalSrc": null
+ "canonicalSrc": "mailto:a.b-c_d@a.b"
}
}
],
@@ -19656,7 +19656,7 @@
"target": "_blank",
"class": null,
"title": null,
- "canonicalSrc": null
+ "canonicalSrc": "mailto:a.b-c_d@a.b"
}
}
],
diff --git a/lib/api/support/git_access_actor.rb b/lib/api/support/git_access_actor.rb
index 71395086ac2..f450630afdd 100644
--- a/lib/api/support/git_access_actor.rb
+++ b/lib/api/support/git_access_actor.rb
@@ -32,6 +32,10 @@ module API
key || user
end
+ def deploy_key_or_user
+ key.instance_of?(DeployKey) ? key : user
+ end
+
def username
user&.username
end
diff --git a/lib/gitlab/audit/deploy_key_author.rb b/lib/gitlab/audit/deploy_key_author.rb
new file mode 100644
index 00000000000..53029e9cc1c
--- /dev/null
+++ b/lib/gitlab/audit/deploy_key_author.rb
@@ -0,0 +1,15 @@
+# frozen_string_literal: true
+
+module Gitlab
+ module Audit
+ class DeployKeyAuthor < Gitlab::Audit::NullAuthor
+ def initialize(name: nil)
+ super(id: -3, name: name)
+ end
+
+ def name
+ @name || _('Deploy Key')
+ end
+ end
+ end
+end
diff --git a/lib/gitlab/audit/null_author.rb b/lib/gitlab/audit/null_author.rb
index 08be6ae6d9f..cb0dfe45aef 100644
--- a/lib/gitlab/audit/null_author.rb
+++ b/lib/gitlab/audit/null_author.rb
@@ -24,6 +24,8 @@ module Gitlab
Gitlab::Audit::UnauthenticatedAuthor.new(name: name)
elsif id == -2
Gitlab::Audit::DeployTokenAuthor.new(name: name)
+ elsif id == -3
+ Gitlab::Audit::DeployKeyAuthor.new(name: name)
else
Gitlab::Audit::DeletedAuthor.new(id: id, name: name)
end
diff --git a/lib/tasks/contracts/pipelines.rake b/lib/tasks/contracts/pipelines.rake
index c018645722e..ad1936055d8 100644
--- a/lib/tasks/contracts/pipelines.rake
+++ b/lib/tasks/contracts/pipelines.rake
@@ -20,13 +20,24 @@ namespace :contracts do
Pact::VerificationTask.new(:get_pipeline_header_data) do |pact|
pact.uri(
"#{contracts}/contracts/project/pipeline/show/pipelines#show-get_pipeline_header_data.json",
- pact_helper: "#{provider}/pact_helpers/project/pipeline/get_pipeline_header_data_helper.rb"
+ pact_helper: "#{provider}/pact_helpers/project/pipeline/show/get_pipeline_header_data_helper.rb"
+ )
+ end
+
+ Pact::VerificationTask.new(:delete_pipeline) do |pact|
+ pact.uri(
+ "#{contracts}/contracts/project/pipeline/show/pipelines#show-delete_pipeline.json",
+ pact_helper: "#{provider}/pact_helpers/project/pipeline/show/delete_pipeline_helper.rb"
)
end
desc 'Run all pipeline contract tests'
task 'test:pipelines', :contract_mr do |_t, arg|
- errors = %w[get_list_project_pipelines get_pipeline_header_data].each_with_object([]) do |task, err|
+ errors = %w[
+ get_list_project_pipelines
+ get_pipeline_header_data
+ delete_pipeline
+ ].each_with_object([]) do |task, err|
Rake::Task["contracts:pipelines:pact:verify:#{task}"].execute
rescue StandardError, SystemExit
err << "contracts:pipelines:pact:verify:#{task}"
diff --git a/lib/tasks/gitlab/gitaly.rake b/lib/tasks/gitlab/gitaly.rake
index 18c68615637..960d0e51a47 100644
--- a/lib/tasks/gitlab/gitaly.rake
+++ b/lib/tasks/gitlab/gitaly.rake
@@ -34,7 +34,7 @@ Usage: rake "gitlab:gitaly:install[/installation/dir,/storage/path]")
env["BUNDLE_DEPLOYMENT"] = 'false'
end
- output, status = Gitlab::Popen.popen([make_cmd, 'all', 'git'], nil, env)
+ output, status = Gitlab::Popen.popen([make_cmd, 'clean-build', 'all', 'git'], nil, env)
raise "Gitaly failed to compile: #{output}" unless status&.zero?
end
end
diff --git a/locale/gitlab.pot b/locale/gitlab.pot
index 4dc897d3ddf..0b096e4da31 100644
--- a/locale/gitlab.pot
+++ b/locale/gitlab.pot
@@ -12731,6 +12731,9 @@ msgid_plural "Deploys"
msgstr[0] ""
msgstr[1] ""
+msgid "Deploy Key"
+msgstr ""
+
msgid "Deploy Keys"
msgstr ""
diff --git a/package.json b/package.json
index d30b3f803c9..99e0049bda3 100644
--- a/package.json
+++ b/package.json
@@ -98,7 +98,6 @@
"cache-loader": "^4.1.0",
"canvas-confetti": "^1.4.0",
"clipboard": "^2.0.8",
- "codemirror": "^5.48.4",
"codesandbox-api": "0.0.23",
"compression-webpack-plugin": "^5.0.2",
"copy-webpack-plugin": "^6.4.1",
diff --git a/spec/contracts/consumer/fixtures/project/pipeline/delete_pipeline.fixture.js b/spec/contracts/consumer/fixtures/project/pipeline/delete_pipeline.fixture.js
new file mode 100644
index 00000000000..4dbb694064b
--- /dev/null
+++ b/spec/contracts/consumer/fixtures/project/pipeline/delete_pipeline.fixture.js
@@ -0,0 +1,19 @@
+const DeletePipeline = {
+ success: {
+ status: 200,
+ headers: {
+ 'Content-Type': 'application/json; charset=utf-8',
+ },
+ },
+
+ request: {
+ method: 'POST',
+ path: '/api/graphql',
+ },
+
+ variables: {
+ id: 'gid://gitlab/Ci::Pipeline/316112',
+ },
+};
+
+export { DeletePipeline };
diff --git a/spec/contracts/consumer/resources/graphql/pipelines.js b/spec/contracts/consumer/resources/graphql/pipelines.js
index 4f7ce58891c..b076006af17 100644
--- a/spec/contracts/consumer/resources/graphql/pipelines.js
+++ b/spec/contracts/consumer/resources/graphql/pipelines.js
@@ -23,3 +23,24 @@ export async function getPipelineHeaderDataRequest(endpoint) {
data: graphqlQuery,
});
}
+
+export async function deletePipeline(endpoint) {
+ const { url } = endpoint;
+ const query = await extractGraphQLQuery(
+ 'app/assets/javascripts/pipelines/graphql/mutations/delete_pipeline.mutation.graphql',
+ );
+ const graphqlQuery = {
+ query,
+ variables: {
+ id: 'gid://gitlab/Ci::Pipeline/316112',
+ },
+ };
+
+ return axios({
+ baseURL: url,
+ url: '/api/graphql',
+ method: 'POST',
+ headers: { Accept: '*/*' },
+ data: graphqlQuery,
+ });
+}
diff --git a/spec/contracts/consumer/specs/project/pipeline/show.spec.js b/spec/contracts/consumer/specs/project/pipeline/show.spec.js
index 0f1cc1c3108..2c5ba964e2e 100644
--- a/spec/contracts/consumer/specs/project/pipeline/show.spec.js
+++ b/spec/contracts/consumer/specs/project/pipeline/show.spec.js
@@ -6,24 +6,27 @@ import { GraphQLInteraction } from '@pact-foundation/pact';
import { extractGraphQLQuery } from '../../../helpers/graphql_query_extractor';
import { PipelineHeaderData } from '../../../fixtures/project/pipeline/get_pipeline_header_data.fixture';
-import { getPipelineHeaderDataRequest } from '../../../resources/graphql/pipelines';
+import { DeletePipeline } from '../../../fixtures/project/pipeline/delete_pipeline.fixture';
+
+import { getPipelineHeaderDataRequest, deletePipeline } from '../../../resources/graphql/pipelines';
const CONSUMER_NAME = 'Pipelines#show';
const CONSUMER_LOG = '../logs/consumer.log';
const CONTRACT_DIR = '../contracts/project/pipeline/show';
-const PROVIDER_NAME = 'GET pipeline header data';
+const GET_PIPELINE_HEADER_DATA_PROVIDER_NAME = 'GET pipeline header data';
+const DELETE_PIPELINE_PROVIDER_NAME = 'DELETE pipeline';
// GraphQL query: getPipelineHeaderData
pactWith(
{
consumer: CONSUMER_NAME,
- provider: PROVIDER_NAME,
+ provider: GET_PIPELINE_HEADER_DATA_PROVIDER_NAME,
log: CONSUMER_LOG,
dir: CONTRACT_DIR,
},
(provider) => {
- describe(PROVIDER_NAME, () => {
+ describe(GET_PIPELINE_HEADER_DATA_PROVIDER_NAME, () => {
beforeEach(async () => {
const query = await extractGraphQLQuery(
'app/assets/javascripts/pipelines/graphql/queries/get_pipeline_header_data.query.graphql',
@@ -50,4 +53,41 @@ pactWith(
},
);
+// GraphQL query: deletePipeline
+pactWith(
+ {
+ consumer: CONSUMER_NAME,
+ provider: DELETE_PIPELINE_PROVIDER_NAME,
+ log: CONSUMER_LOG,
+ dir: CONTRACT_DIR,
+ },
+
+ (provider) => {
+ describe(DELETE_PIPELINE_PROVIDER_NAME, () => {
+ beforeEach(async () => {
+ const query = await extractGraphQLQuery(
+ 'app/assets/javascripts/pipelines/graphql/mutations/delete_pipeline.mutation.graphql',
+ );
+ const graphqlQuery = new GraphQLInteraction()
+ .given('a pipeline for a project exists')
+ .uponReceiving('a request to delete the pipeline')
+ .withQuery(query)
+ .withRequest(DeletePipeline.request)
+ .withVariables(DeletePipeline.variables)
+ .willRespondWith(DeletePipeline.success);
+
+ provider.addInteraction(graphqlQuery);
+ });
+
+ it('returns a successful body', async () => {
+ const deletePipelineResponse = await deletePipeline({
+ url: provider.mockService.baseUrl,
+ });
+
+ expect(deletePipelineResponse.status).toEqual(DeletePipeline.success.status);
+ });
+ });
+ },
+);
+
/* eslint-enable @gitlab/require-i18n-strings */
diff --git a/spec/contracts/contracts/project/pipeline/show/pipelines#show-delete_pipeline.json b/spec/contracts/contracts/project/pipeline/show/pipelines#show-delete_pipeline.json
new file mode 100644
index 00000000000..795c8a6e197
--- /dev/null
+++ b/spec/contracts/contracts/project/pipeline/show/pipelines#show-delete_pipeline.json
@@ -0,0 +1,44 @@
+{
+ "consumer": {
+ "name": "Pipelines#show"
+ },
+ "provider": {
+ "name": "DELETE pipeline"
+ },
+ "interactions": [
+ {
+ "description": "a request to delete the pipeline",
+ "providerState": "a pipeline for a project exists",
+ "request": {
+ "method": "POST",
+ "path": "/api/graphql",
+ "headers": {
+ "content-type": "application/json"
+ },
+ "body": {
+ "query": "mutation deletePipeline($id: CiPipelineID!) {\n pipelineDestroy(input: { id: $id }) {\n errors\n }\n}\n",
+ "variables": {
+ "id": "gid://gitlab/Ci::Pipeline/316112"
+ }
+ },
+ "matchingRules": {
+ "$.body.query": {
+ "match": "regex",
+ "regex": "mutation\\s*deletePipeline\\(\\$id:\\s*CiPipelineID!\\)\\s*\\{\\s*pipelineDestroy\\(input:\\s*\\{\\s*id:\\s*\\$id\\s*\\}\\)\\s*\\{\\s*errors\\s*\\}\\s*\\}\\s*"
+ }
+ }
+ },
+ "response": {
+ "status": 200,
+ "headers": {
+ "Content-Type": "application/json; charset=utf-8"
+ }
+ }
+ }
+ ],
+ "metadata": {
+ "pactSpecification": {
+ "version": "2.0.0"
+ }
+ }
+} \ No newline at end of file
diff --git a/spec/contracts/provider/pact_helpers/project/pipeline/show/delete_pipeline_helper.rb b/spec/contracts/provider/pact_helpers/project/pipeline/show/delete_pipeline_helper.rb
new file mode 100644
index 00000000000..2d29fabfeca
--- /dev/null
+++ b/spec/contracts/provider/pact_helpers/project/pipeline/show/delete_pipeline_helper.rb
@@ -0,0 +1,16 @@
+# frozen_string_literal: true
+
+require_relative '../../../../spec_helper'
+require_relative '../../../../states/project/pipeline/show_state'
+
+module Provider
+ module DeletePipelineHelper
+ Pact.service_provider "DELETE pipeline" do
+ app { Environments::Test.app }
+
+ honours_pact_with 'Pipelines#show' do
+ pact_uri '../contracts/project/pipeline/show/pipelines#show-delete_pipeline.json'
+ end
+ end
+ end
+end
diff --git a/spec/contracts/provider/pact_helpers/project/pipeline/get_pipeline_header_data_helper.rb b/spec/contracts/provider/pact_helpers/project/pipeline/show/get_pipeline_header_data_helper.rb
index abb2781f987..4bc7dff2ef9 100644
--- a/spec/contracts/provider/pact_helpers/project/pipeline/get_pipeline_header_data_helper.rb
+++ b/spec/contracts/provider/pact_helpers/project/pipeline/show/get_pipeline_header_data_helper.rb
@@ -1,7 +1,7 @@
# frozen_string_literal: true
-require_relative '../../../spec_helper'
-require_relative '../../../states/project/pipeline/pipeline_state'
+require_relative '../../../../spec_helper'
+require_relative '../../../../states/project/pipeline/pipeline_state'
module Provider
module GetPipelinesHeaderDataHelper
diff --git a/spec/contracts/provider/states/project/pipeline/show_state.rb b/spec/contracts/provider/states/project/pipeline/show_state.rb
new file mode 100644
index 00000000000..3365647cd13
--- /dev/null
+++ b/spec/contracts/provider/states/project/pipeline/show_state.rb
@@ -0,0 +1,28 @@
+# frozen_string_literal: true
+
+Pact.provider_states_for "Pipelines#show" do
+ provider_state "a pipeline for a project exists" do
+ set_up do
+ user = User.find_by(name: Provider::UsersHelper::CONTRACT_USER_NAME)
+ namespace = create(:namespace, name: 'gitlab-org')
+ project = create(:project, :repository, name: 'gitlab-qa', namespace: namespace, creator: user)
+ scheduled_job = create(:ci_build, :scheduled)
+ manual_job = create(:ci_build, :manual)
+
+ project.add_maintainer(user)
+
+ create(
+ :ci_pipeline,
+ :with_job,
+ :success,
+ id: 316112,
+ iid: 1,
+ project: project,
+ user: user,
+ duration: 10,
+ finished_at: '2022-06-01T02:47:31.432Z',
+ builds: [scheduled_job, manual_job]
+ )
+ end
+ end
+end
diff --git a/spec/frontend/content_editor/remark_markdown_processing_spec.js b/spec/frontend/content_editor/remark_markdown_processing_spec.js
index ddf49a4c18e..e1de2823726 100644
--- a/spec/frontend/content_editor/remark_markdown_processing_spec.js
+++ b/spec/frontend/content_editor/remark_markdown_processing_spec.js
@@ -257,7 +257,12 @@ describe('Client side Markdown processing', () => {
expectedDoc: doc(
paragraph(
source('<img src="bar" alt="foo" />'),
- image({ ...source('<img src="bar" alt="foo" />'), alt: 'foo', src: 'bar' }),
+ image({
+ ...source('<img src="bar" alt="foo" />'),
+ alt: 'foo',
+ canonicalSrc: 'bar',
+ src: 'http://test.host/bar',
+ }),
),
),
},
@@ -275,7 +280,12 @@ describe('Client side Markdown processing', () => {
),
paragraph(
source('<img src="bar" alt="foo" />'),
- image({ ...source('<img src="bar" alt="foo" />'), alt: 'foo', src: 'bar' }),
+ image({
+ ...source('<img src="bar" alt="foo" />'),
+ alt: 'foo',
+ src: 'http://test.host/bar',
+ canonicalSrc: 'bar',
+ }),
),
),
},
@@ -287,7 +297,8 @@ describe('Client side Markdown processing', () => {
link(
{
...source('[GitLab](https://gitlab.com "Go to GitLab")'),
- href: 'https://gitlab.com',
+ href: 'https://gitlab.com/',
+ canonicalSrc: 'https://gitlab.com',
title: 'Go to GitLab',
},
'GitLab',
@@ -305,7 +316,8 @@ describe('Client side Markdown processing', () => {
link(
{
...source('[GitLab](https://gitlab.com "Go to GitLab")'),
- href: 'https://gitlab.com',
+ href: 'https://gitlab.com/',
+ canonicalSrc: 'https://gitlab.com',
title: 'Go to GitLab',
},
'GitLab',
@@ -322,7 +334,8 @@ describe('Client side Markdown processing', () => {
link(
{
...source('www.commonmark.org'),
- href: 'http://www.commonmark.org',
+ canonicalSrc: 'http://www.commonmark.org',
+ href: 'http://www.commonmark.org/',
},
'www.commonmark.org',
),
@@ -338,6 +351,7 @@ describe('Client side Markdown processing', () => {
link(
{
...source('www.commonmark.org/help'),
+ canonicalSrc: 'http://www.commonmark.org/help',
href: 'http://www.commonmark.org/help',
},
'www.commonmark.org/help',
@@ -355,6 +369,7 @@ describe('Client side Markdown processing', () => {
link(
{
...source('hello+xyz@mail.example'),
+ canonicalSrc: 'mailto:hello+xyz@mail.example',
href: 'mailto:hello+xyz@mail.example',
},
'hello+xyz@mail.example',
@@ -373,7 +388,8 @@ describe('Client side Markdown processing', () => {
{
sourceMapKey: null,
sourceMarkdown: null,
- href: 'https://gitlab.com',
+ canonicalSrc: 'https://gitlab.com',
+ href: 'https://gitlab.com/',
},
'https://gitlab.com',
),
@@ -402,6 +418,7 @@ hard line break`,
image({
...source('![GitLab Logo](https://gitlab.com/logo.png "GitLab Logo")'),
alt: 'GitLab Logo',
+ canonicalSrc: 'https://gitlab.com/logo.png',
src: 'https://gitlab.com/logo.png',
title: 'GitLab Logo',
}),
@@ -595,7 +612,12 @@ two
paragraph(
source('List item with an image ![bar](foo.png)'),
'List item with an image',
- image({ ...source('![bar](foo.png)'), alt: 'bar', src: 'foo.png' }),
+ image({
+ ...source('![bar](foo.png)'),
+ alt: 'bar',
+ canonicalSrc: 'foo.png',
+ src: 'http://test.host/foo.png',
+ }),
),
),
),
@@ -944,8 +966,17 @@ Paragraph
paragraph(
source('[![moon](moon.jpg)](/uri)'),
link(
- { ...source('[![moon](moon.jpg)](/uri)'), href: '/uri' },
- image({ ...source('![moon](moon.jpg)'), src: 'moon.jpg', alt: 'moon' }),
+ {
+ ...source('[![moon](moon.jpg)](/uri)'),
+ canonicalSrc: '/uri',
+ href: 'http://test.host/uri',
+ },
+ image({
+ ...source('![moon](moon.jpg)'),
+ canonicalSrc: 'moon.jpg',
+ src: 'http://test.host/moon.jpg',
+ alt: 'moon',
+ }),
),
),
),
@@ -975,12 +1006,26 @@ Paragraph
source('~[moon](moon.jpg) and [sun](sun.jpg)~'),
strike(
source('~[moon](moon.jpg) and [sun](sun.jpg)~'),
- link({ ...source('[moon](moon.jpg)'), href: 'moon.jpg' }, 'moon'),
+ link(
+ {
+ ...source('[moon](moon.jpg)'),
+ canonicalSrc: 'moon.jpg',
+ href: 'http://test.host/moon.jpg',
+ },
+ 'moon',
+ ),
),
strike(source('~[moon](moon.jpg) and [sun](sun.jpg)~'), ' and '),
strike(
source('~[moon](moon.jpg) and [sun](sun.jpg)~'),
- link({ ...source('[sun](sun.jpg)'), href: 'sun.jpg' }, 'sun'),
+ link(
+ {
+ ...source('[sun](sun.jpg)'),
+ href: 'http://test.host/sun.jpg',
+ canonicalSrc: 'sun.jpg',
+ },
+ 'sun',
+ ),
),
),
),
@@ -1094,7 +1139,12 @@ _world_.
paragraph(
source('[GitLab][gitlab-url]'),
link(
- { ...source('[GitLab][gitlab-url]'), href: 'https://gitlab.com', title: 'GitLab' },
+ {
+ ...source('[GitLab][gitlab-url]'),
+ href: 'https://gitlab.com/',
+ canonicalSrc: 'https://gitlab.com',
+ title: 'GitLab',
+ },
'GitLab',
),
),
diff --git a/spec/frontend/content_editor/services/markdown_serializer_spec.js b/spec/frontend/content_editor/services/markdown_serializer_spec.js
index 422eb3f311b..d55e5fbadad 100644
--- a/spec/frontend/content_editor/services/markdown_serializer_spec.js
+++ b/spec/frontend/content_editor/services/markdown_serializer_spec.js
@@ -1213,42 +1213,47 @@ paragraph
};
it.each`
- mark | markdown | modifiedMarkdown | editAction
- ${'bold'} | ${'**bold**'} | ${'**bold modified**'} | ${defaultEditAction}
- ${'bold'} | ${'__bold__'} | ${'__bold modified__'} | ${defaultEditAction}
- ${'bold'} | ${'<strong>bold</strong>'} | ${'<strong>bold modified</strong>'} | ${defaultEditAction}
- ${'bold'} | ${'<b>bold</b>'} | ${'<b>bold modified</b>'} | ${defaultEditAction}
- ${'italic'} | ${'_italic_'} | ${'_italic modified_'} | ${defaultEditAction}
- ${'italic'} | ${'*italic*'} | ${'*italic modified*'} | ${defaultEditAction}
- ${'italic'} | ${'<em>italic</em>'} | ${'<em>italic modified</em>'} | ${defaultEditAction}
- ${'italic'} | ${'<i>italic</i>'} | ${'<i>italic modified</i>'} | ${defaultEditAction}
- ${'link'} | ${'[gitlab](https://gitlab.com)'} | ${'[gitlab modified](https://gitlab.com)'} | ${defaultEditAction}
- ${'link'} | ${'<a href="https://gitlab.com">link</a>'} | ${'<a href="https://gitlab.com">link modified</a>'} | ${defaultEditAction}
- ${'link'} | ${'link www.gitlab.com'} | ${'modified link www.gitlab.com'} | ${prependContentEditAction}
- ${'link'} | ${'link https://www.gitlab.com'} | ${'modified link https://www.gitlab.com'} | ${prependContentEditAction}
- ${'link'} | ${'link(https://www.gitlab.com)'} | ${'modified link(https://www.gitlab.com)'} | ${prependContentEditAction}
- ${'link'} | ${'link(engineering@gitlab.com)'} | ${'modified link(engineering@gitlab.com)'} | ${prependContentEditAction}
- ${'link'} | ${'link <https://www.gitlab.com>'} | ${'modified link <https://www.gitlab.com>'} | ${prependContentEditAction}
- ${'link'} | ${'link [https://www.gitlab.com>'} | ${'modified link \\[https://www.gitlab.com>'} | ${prependContentEditAction}
- ${'link'} | ${'link <https://www.gitlab.com'} | ${'modified link <https://www.gitlab.com'} | ${prependContentEditAction}
- ${'link'} | ${'link https://www.gitlab.com>'} | ${'modified link [https://www.gitlab.com>](https://www.gitlab.com%3E)'} | ${prependContentEditAction}
- ${'link'} | ${'link **https://www.gitlab.com]**'} | ${'modified link [**https://www.gitlab.com\\]**](https://www.gitlab.com%5D)'} | ${prependContentEditAction}
- ${'code'} | ${'`code`'} | ${'`code modified`'} | ${defaultEditAction}
- ${'code'} | ${'<code>code</code>'} | ${'<code>code modified</code>'} | ${defaultEditAction}
- ${'strike'} | ${'~~striked~~'} | ${'~~striked modified~~'} | ${defaultEditAction}
- ${'strike'} | ${'<del>striked</del>'} | ${'<del>striked modified</del>'} | ${defaultEditAction}
- ${'strike'} | ${'<strike>striked</strike>'} | ${'<strike>striked modified</strike>'} | ${defaultEditAction}
- ${'strike'} | ${'<s>striked</s>'} | ${'<s>striked modified</s>'} | ${defaultEditAction}
- ${'list'} | ${'- list item'} | ${'- list item modified'} | ${defaultEditAction}
- ${'list'} | ${'* list item'} | ${'* list item modified'} | ${defaultEditAction}
- ${'list'} | ${'+ list item'} | ${'+ list item modified'} | ${defaultEditAction}
- ${'list'} | ${'- list item 1\n- list item 2'} | ${'- list item 1\n- list item 2 modified'} | ${defaultEditAction}
- ${'list'} | ${'2) list item'} | ${'2) list item modified'} | ${defaultEditAction}
- ${'list'} | ${'1. list item'} | ${'1. list item modified'} | ${defaultEditAction}
- ${'taskList'} | ${'2) [ ] task list item'} | ${'2) [ ] task list item modified'} | ${defaultEditAction}
- ${'taskList'} | ${'2) [x] task list item'} | ${'2) [x] task list item modified'} | ${defaultEditAction}
+ mark | markdown | modifiedMarkdown | editAction
+ ${'bold'} | ${'**bold**'} | ${'**bold modified**'} | ${defaultEditAction}
+ ${'bold'} | ${'__bold__'} | ${'__bold modified__'} | ${defaultEditAction}
+ ${'bold'} | ${'<strong>bold</strong>'} | ${'<strong>bold modified</strong>'} | ${defaultEditAction}
+ ${'bold'} | ${'<b>bold</b>'} | ${'<b>bold modified</b>'} | ${defaultEditAction}
+ ${'italic'} | ${'_italic_'} | ${'_italic modified_'} | ${defaultEditAction}
+ ${'italic'} | ${'*italic*'} | ${'*italic modified*'} | ${defaultEditAction}
+ ${'italic'} | ${'<em>italic</em>'} | ${'<em>italic modified</em>'} | ${defaultEditAction}
+ ${'italic'} | ${'<i>italic</i>'} | ${'<i>italic modified</i>'} | ${defaultEditAction}
+ ${'link'} | ${'[gitlab](https://gitlab.com)'} | ${'[gitlab modified](https://gitlab.com)'} | ${defaultEditAction}
+ ${'link'} | ${'<a href="https://gitlab.com">link</a>'} | ${'<a href="https://gitlab.com/">link modified</a>'} | ${defaultEditAction}
+ ${'link'} | ${'link www.gitlab.com'} | ${'modified link www.gitlab.com'} | ${prependContentEditAction}
+ ${'link'} | ${'link https://www.gitlab.com'} | ${'modified link https://www.gitlab.com'} | ${prependContentEditAction}
+ ${'link'} | ${'link(https://www.gitlab.com)'} | ${'modified link(https://www.gitlab.com)'} | ${prependContentEditAction}
+ ${'link'} | ${'link(engineering@gitlab.com)'} | ${'modified link(engineering@gitlab.com)'} | ${prependContentEditAction}
+ ${'link'} | ${'link <https://www.gitlab.com>'} | ${'modified link <https://www.gitlab.com>'} | ${prependContentEditAction}
+ ${'link'} | ${'link [https://www.gitlab.com>'} | ${'modified link \\[https://www.gitlab.com>'} | ${prependContentEditAction}
+ ${'link'} | ${'link <https://www.gitlab.com'} | ${'modified link <https://www.gitlab.com'} | ${prependContentEditAction}
+ ${'link'} | ${'link https://www.gitlab.com>'} | ${'modified link [https://www.gitlab.com>](https://www.gitlab.com%3E)'} | ${prependContentEditAction}
+ ${'link'} | ${'link https://www.gitlab.com/path'} | ${'modified link https://www.gitlab.com/path'} | ${prependContentEditAction}
+ ${'link'} | ${'link https://www.gitlab.com?query=search'} | ${'modified link https://www.gitlab.com?query=search'} | ${prependContentEditAction}
+ ${'link'} | ${'link https://www.gitlab.com/#fragment'} | ${'modified link https://www.gitlab.com/#fragment'} | ${prependContentEditAction}
+ ${'link'} | ${'link https://www.gitlab.com/?query=search'} | ${'modified link https://www.gitlab.com/?query=search'} | ${prependContentEditAction}
+ ${'link'} | ${'link https://www.gitlab.com#fragment'} | ${'modified link https://www.gitlab.com#fragment'} | ${prependContentEditAction}
+ ${'link'} | ${'link **https://www.gitlab.com]**'} | ${'modified link [**https://www.gitlab.com\\]**](https://www.gitlab.com%5D)'} | ${prependContentEditAction}
+ ${'code'} | ${'`code`'} | ${'`code modified`'} | ${defaultEditAction}
+ ${'code'} | ${'<code>code</code>'} | ${'<code>code modified</code>'} | ${defaultEditAction}
+ ${'strike'} | ${'~~striked~~'} | ${'~~striked modified~~'} | ${defaultEditAction}
+ ${'strike'} | ${'<del>striked</del>'} | ${'<del>striked modified</del>'} | ${defaultEditAction}
+ ${'strike'} | ${'<strike>striked</strike>'} | ${'<strike>striked modified</strike>'} | ${defaultEditAction}
+ ${'strike'} | ${'<s>striked</s>'} | ${'<s>striked modified</s>'} | ${defaultEditAction}
+ ${'list'} | ${'- list item'} | ${'- list item modified'} | ${defaultEditAction}
+ ${'list'} | ${'* list item'} | ${'* list item modified'} | ${defaultEditAction}
+ ${'list'} | ${'+ list item'} | ${'+ list item modified'} | ${defaultEditAction}
+ ${'list'} | ${'- list item 1\n- list item 2'} | ${'- list item 1\n- list item 2 modified'} | ${defaultEditAction}
+ ${'list'} | ${'2) list item'} | ${'2) list item modified'} | ${defaultEditAction}
+ ${'list'} | ${'1. list item'} | ${'1. list item modified'} | ${defaultEditAction}
+ ${'taskList'} | ${'2) [ ] task list item'} | ${'2) [ ] task list item modified'} | ${defaultEditAction}
+ ${'taskList'} | ${'2) [x] task list item'} | ${'2) [x] task list item modified'} | ${defaultEditAction}
`(
- 'preserves original $mark syntax when sourceMarkdown is available for $content',
+ 'preserves original $mark syntax when sourceMarkdown is available for $markdown',
async ({ markdown, modifiedMarkdown, editAction }) => {
const { document } = await remarkMarkdownDeserializer().deserialize({
schema: tiptapEditor.schema,
diff --git a/spec/frontend/lib/utils/url_utility_spec.js b/spec/frontend/lib/utils/url_utility_spec.js
index 766da7034d9..312e4f636c3 100644
--- a/spec/frontend/lib/utils/url_utility_spec.js
+++ b/spec/frontend/lib/utils/url_utility_spec.js
@@ -1062,4 +1062,28 @@ describe('URL utility', () => {
expect(urlUtils.PROMO_URL).toBe(url);
});
});
+
+ describe('removeUrlProtocol', () => {
+ it.each`
+ input | output
+ ${'http://gitlab.com'} | ${'gitlab.com'}
+ ${'https://gitlab.com'} | ${'gitlab.com'}
+ ${'foo:bar.com'} | ${'bar.com'}
+ ${'gitlab.com'} | ${'gitlab.com'}
+ `('transforms $input to $output', ({ input, output }) => {
+ expect(urlUtils.removeUrlProtocol(input)).toBe(output);
+ });
+ });
+
+ describe('removeLastSlashInUrlPath', () => {
+ it.each`
+ input | output
+ ${'https://www.gitlab.com/path/'} | ${'https://www.gitlab.com/path'}
+ ${'https://www.gitlab.com/?query=search'} | ${'https://www.gitlab.com?query=search'}
+ ${'https://www.gitlab.com/#fragment'} | ${'https://www.gitlab.com#fragment'}
+ ${'https://www.gitlab.com/hello'} | ${'https://www.gitlab.com/hello'}
+ `('transforms $input to $output', ({ input, output }) => {
+ expect(urlUtils.removeLastSlashInUrlPath(input)).toBe(output);
+ });
+ });
});
diff --git a/spec/graphql/mutations/merge_requests/set_labels_spec.rb b/spec/graphql/mutations/merge_requests/set_labels_spec.rb
index 1bb303cf99b..44bd9342b8e 100644
--- a/spec/graphql/mutations/merge_requests/set_labels_spec.rb
+++ b/spec/graphql/mutations/merge_requests/set_labels_spec.rb
@@ -64,7 +64,7 @@ RSpec.describe Mutations::MergeRequests::SetLabels do
end
context 'when passing operation_mode as REMOVE' do
- subject { mutation.resolve(project_path: merge_request.project.full_path, iid: merge_request.iid, label_ids: label_ids, operation_mode: Types::MutationOperationModeEnum.enum[:remove])}
+ subject { mutation.resolve(project_path: merge_request.project.full_path, iid: merge_request.iid, label_ids: label_ids, operation_mode: Types::MutationOperationModeEnum.enum[:remove]) }
it 'removes the labels, without removing others' do
merge_request.update!(labels: [label, label2])
diff --git a/spec/graphql/mutations/releases/create_spec.rb b/spec/graphql/mutations/releases/create_spec.rb
index 1f2c3ed537f..b6b9449aa39 100644
--- a/spec/graphql/mutations/releases/create_spec.rb
+++ b/spec/graphql/mutations/releases/create_spec.rb
@@ -11,9 +11,9 @@ RSpec.describe Mutations::Releases::Create do
let(:mutation) { described_class.new(object: nil, context: { current_user: current_user }, field: nil) }
- let(:tag) { 'v1.1.0'}
- let(:ref) { 'master'}
- let(:name) { 'Version 1.0'}
+ let(:tag) { 'v1.1.0' }
+ let(:ref) { 'master' }
+ let(:name) { 'Version 1.0' }
let(:description) { 'The first release :rocket:' }
let(:released_at) { Time.parse('2018-12-10') }
let(:milestones) { [milestone_12_3.title, milestone_12_4.title] }
diff --git a/spec/graphql/mutations/releases/delete_spec.rb b/spec/graphql/mutations/releases/delete_spec.rb
index 9934aea0031..09b420fe1ea 100644
--- a/spec/graphql/mutations/releases/delete_spec.rb
+++ b/spec/graphql/mutations/releases/delete_spec.rb
@@ -8,7 +8,7 @@ RSpec.describe Mutations::Releases::Delete do
let_it_be(:reporter) { create(:user) }
let_it_be(:developer) { create(:user) }
let_it_be(:maintainer) { create(:user) }
- let_it_be(:tag) { 'v1.1.0'}
+ let_it_be(:tag) { 'v1.1.0' }
let_it_be(:release) { create(:release, project: project, tag: tag) }
let(:mutation) { described_class.new(object: nil, context: { current_user: current_user }, field: nil) }
diff --git a/spec/graphql/mutations/releases/update_spec.rb b/spec/graphql/mutations/releases/update_spec.rb
index 9fae703b85a..15b10ea0648 100644
--- a/spec/graphql/mutations/releases/update_spec.rb
+++ b/spec/graphql/mutations/releases/update_spec.rb
@@ -9,8 +9,8 @@ RSpec.describe Mutations::Releases::Update do
let_it_be(:reporter) { create(:user) }
let_it_be(:developer) { create(:user) }
- let_it_be(:tag) { 'v1.1.0'}
- let_it_be(:name) { 'Version 1.0'}
+ let_it_be(:tag) { 'v1.1.0' }
+ let_it_be(:name) { 'Version 1.0' }
let_it_be(:description) { 'The first release :rocket:' }
let_it_be(:released_at) { Time.parse('2018-12-10').utc }
let_it_be(:created_at) { Time.parse('2018-11-05').utc }
diff --git a/spec/graphql/resolvers/ci/runner_jobs_resolver_spec.rb b/spec/graphql/resolvers/ci/runner_jobs_resolver_spec.rb
index 53b673e255b..ba8a127bec5 100644
--- a/spec/graphql/resolvers/ci/runner_jobs_resolver_spec.rb
+++ b/spec/graphql/resolvers/ci/runner_jobs_resolver_spec.rb
@@ -12,7 +12,7 @@ RSpec.describe Resolvers::Ci::RunnerJobsResolver do
let!(:build_one) { create(:ci_build, :success, name: 'Build One', runner: runner, pipeline: pipeline) }
let!(:build_two) { create(:ci_build, :success, name: 'Build Two', runner: runner, pipeline: pipeline) }
let!(:build_three) { create(:ci_build, :failed, name: 'Build Three', runner: runner, pipeline: pipeline) }
- let!(:irrelevant_build) { create(:ci_build, name: 'Irrelevant Build', pipeline: irrelevant_pipeline)}
+ let!(:irrelevant_build) { create(:ci_build, name: 'Irrelevant Build', pipeline: irrelevant_pipeline) }
let(:args) { {} }
let(:runner) { create(:ci_runner, :project, projects: [project]) }
diff --git a/spec/graphql/resolvers/group_members/notification_email_resolver_spec.rb b/spec/graphql/resolvers/group_members/notification_email_resolver_spec.rb
index 8d0b8f9398d..e1c67bc7c18 100644
--- a/spec/graphql/resolvers/group_members/notification_email_resolver_spec.rb
+++ b/spec/graphql/resolvers/group_members/notification_email_resolver_spec.rb
@@ -17,7 +17,7 @@ RSpec.describe Resolvers::GroupMembers::NotificationEmailResolver do
expect(described_class).to have_nullable_graphql_type(GraphQL::Types::String)
end
- subject { batch_sync { resolve_notification_email(developer.group_members.first, current_user) }}
+ subject { batch_sync { resolve_notification_email(developer.group_members.first, current_user) } }
context 'when current_user is admin' do
let(:current_user) { create(:user, :admin) }
diff --git a/spec/graphql/resolvers/project_jobs_resolver_spec.rb b/spec/graphql/resolvers/project_jobs_resolver_spec.rb
index bb711a4c857..eb9d31ea7e5 100644
--- a/spec/graphql/resolvers/project_jobs_resolver_spec.rb
+++ b/spec/graphql/resolvers/project_jobs_resolver_spec.rb
@@ -14,7 +14,7 @@ RSpec.describe Resolvers::ProjectJobsResolver do
let_it_be(:failed_build) { create(:ci_build, :failed, name: 'Build Three', pipeline: pipeline) }
let_it_be(:pending_build) { create(:ci_build, :pending, name: 'Build Three', pipeline: pipeline) }
- let(:irrelevant_build) { create(:ci_build, name: 'Irrelevant Build', pipeline: irrelevant_pipeline)}
+ let(:irrelevant_build) { create(:ci_build, name: 'Irrelevant Build', pipeline: irrelevant_pipeline) }
let(:args) { {} }
let(:current_user) { create(:user) }
diff --git a/spec/graphql/resolvers/projects/grafana_integration_resolver_spec.rb b/spec/graphql/resolvers/projects/grafana_integration_resolver_spec.rb
index 854e763fbdd..546b8592546 100644
--- a/spec/graphql/resolvers/projects/grafana_integration_resolver_spec.rb
+++ b/spec/graphql/resolvers/projects/grafana_integration_resolver_spec.rb
@@ -7,7 +7,7 @@ RSpec.describe Resolvers::Projects::GrafanaIntegrationResolver do
let_it_be(:project) { create(:project) }
let_it_be(:current_user) { create(:user) }
- let_it_be(:grafana_integration) { create(:grafana_integration, project: project)}
+ let_it_be(:grafana_integration) { create(:grafana_integration, project: project) }
describe '#resolve' do
context 'when object is not a project' do
@@ -19,7 +19,7 @@ RSpec.describe Resolvers::Projects::GrafanaIntegrationResolver do
end
context 'when object is nil' do
- it { expect(resolve_integration(obj: nil)).to eq nil}
+ it { expect(resolve_integration(obj: nil)).to eq nil }
end
end
diff --git a/spec/graphql/resolvers/projects_resolver_spec.rb b/spec/graphql/resolvers/projects_resolver_spec.rb
index 2685115d1a2..453fafb9590 100644
--- a/spec/graphql/resolvers/projects_resolver_spec.rb
+++ b/spec/graphql/resolvers/projects_resolver_spec.rb
@@ -142,7 +142,7 @@ RSpec.describe Resolvers::ProjectsResolver do
context 'when no sort is provided' do
it 'returns projects in descending order by id' do
- is_expected.to match_array((visible_projecs + named_projects).sort_by { |p| p[:id]}.reverse )
+ is_expected.to match_array((visible_projecs + named_projects).sort_by { |p| p[:id] }.reverse )
end
end
end
diff --git a/spec/graphql/types/ci/job_token_scope_type_spec.rb b/spec/graphql/types/ci/job_token_scope_type_spec.rb
index c1a3c4dd54d..457d46b6896 100644
--- a/spec/graphql/types/ci/job_token_scope_type_spec.rb
+++ b/spec/graphql/types/ci/job_token_scope_type_spec.rb
@@ -34,7 +34,7 @@ RSpec.describe GitlabSchema.types['CiJobTokenScopeType'] do
subject { GitlabSchema.execute(query, context: { current_user: current_user }).as_json }
let(:projects_field) { subject.dig('data', 'project', 'ciJobTokenScope', 'projects', 'nodes') }
- let(:returned_project_paths) { projects_field.map { |project| project['path']} }
+ let(:returned_project_paths) { projects_field.map { |project| project['path'] } }
context 'with access to scope' do
before do
diff --git a/spec/graphql/types/issue_type_spec.rb b/spec/graphql/types/issue_type_spec.rb
index e7454b85357..2a0ae79b2c4 100644
--- a/spec/graphql/types/issue_type_spec.rb
+++ b/spec/graphql/types/issue_type_spec.rb
@@ -167,7 +167,7 @@ RSpec.describe GitlabSchema.types['Issue'] do
shared_examples_for 'does not include private notes' do
it "does not return private notes" do
notes = subject.dig("data", "project", "issue", "notes", 'edges')
- notes_body = notes.map {|n| n.dig('node', 'body')}
+ notes_body = notes.map { |n| n.dig('node', 'body') }
expect(notes.size).to eq 1
expect(notes_body).not_to include(private_note_body)
@@ -178,7 +178,7 @@ RSpec.describe GitlabSchema.types['Issue'] do
shared_examples_for 'includes private notes' do
it "returns all notes" do
notes = subject.dig("data", "project", "issue", "notes", 'edges')
- notes_body = notes.map {|n| n.dig('node', 'body')}
+ notes_body = notes.map { |n| n.dig('node', 'body') }
expect(notes.size).to eq 2
expect(notes_body).to include(private_note_body)
@@ -209,7 +209,7 @@ RSpec.describe GitlabSchema.types['Issue'] do
end
describe 'hidden', :enable_admin_mode do
- let_it_be(:admin) { create(:user, :admin)}
+ let_it_be(:admin) { create(:user, :admin) }
let_it_be(:banned_user) { create(:user, :banned) }
let_it_be(:user) { create(:user) }
let_it_be(:project) { create(:project, :public) }
diff --git a/spec/graphql/types/user_type_spec.rb b/spec/graphql/types/user_type_spec.rb
index fec6a771640..dcf25ff0667 100644
--- a/spec/graphql/types/user_type_spec.rb
+++ b/spec/graphql/types/user_type_spec.rb
@@ -49,7 +49,7 @@ RSpec.describe GitlabSchema.types['User'] do
end
describe 'name field' do
- let_it_be(:admin) { create(:user, :admin)}
+ let_it_be(:admin) { create(:user, :admin) }
let_it_be(:user) { create(:user) }
let_it_be(:requested_user) { create(:user, name: 'John Smith') }
let_it_be(:requested_project_bot) { create(:user, :project_bot, name: 'Project bot') }
diff --git a/spec/lib/api/support/git_access_actor_spec.rb b/spec/lib/api/support/git_access_actor_spec.rb
index a09cabf4cd7..e1c800d25a7 100644
--- a/spec/lib/api/support/git_access_actor_spec.rb
+++ b/spec/lib/api/support/git_access_actor_spec.rb
@@ -83,6 +83,36 @@ RSpec.describe API::Support::GitAccessActor do
end
end
+ describe '#deploy_key_or_user' do
+ it 'returns a deploy key when the params contains deploy key' do
+ key = create(:deploy_key)
+ params = { key_id: key.id }
+
+ expect(described_class.from_params(params).deploy_key_or_user).to eq(key)
+ end
+
+ it 'returns a user when the params contains personal key' do
+ key = create(:key)
+ params = { key_id: key.id }
+
+ expect(described_class.from_params(params).deploy_key_or_user).to eq(key.user)
+ end
+
+ it 'returns a user when the params contains user id' do
+ user = create(:user)
+ params = { user_id: user.id }
+
+ expect(described_class.from_params(params).deploy_key_or_user).to eq(user)
+ end
+
+ it 'returns a user when the params contains user name' do
+ user = create(:user)
+ params = { username: user.username }
+
+ expect(described_class.from_params(params).deploy_key_or_user).to eq(user)
+ end
+ end
+
describe '#username' do
context 'when initialized with a User' do
let(:user) { build(:user) }
diff --git a/spec/lib/gitlab/audit/deploy_key_author_spec.rb b/spec/lib/gitlab/audit/deploy_key_author_spec.rb
new file mode 100644
index 00000000000..72444f77c91
--- /dev/null
+++ b/spec/lib/gitlab/audit/deploy_key_author_spec.rb
@@ -0,0 +1,17 @@
+# frozen_string_literal: true
+
+require 'spec_helper'
+
+RSpec.describe Gitlab::Audit::DeployKeyAuthor do
+ describe '#initialize' do
+ it 'sets correct attributes' do
+ expect(described_class.new(name: 'Lorem deploy key'))
+ .to have_attributes(id: -3, name: 'Lorem deploy key')
+ end
+
+ it 'sets default name when it is not provided' do
+ expect(described_class.new)
+ .to have_attributes(id: -3, name: 'Deploy Key')
+ end
+ end
+end
diff --git a/spec/lib/gitlab/audit/null_author_spec.rb b/spec/lib/gitlab/audit/null_author_spec.rb
index 2045139a5f7..e2f71a34534 100644
--- a/spec/lib/gitlab/audit/null_author_spec.rb
+++ b/spec/lib/gitlab/audit/null_author_spec.rb
@@ -57,6 +57,15 @@ RSpec.describe Gitlab::Audit::NullAuthor do
expect(subject.for(-2, audit_event)).to be_a(Gitlab::Audit::DeployTokenAuthor)
expect(subject.for(-2, audit_event)).to have_attributes(id: -2, name: 'Test deploy token')
end
+
+ it 'returns DeployKeyAuthor when id equals -3', :aggregate_failures do
+ allow(audit_event).to receive(:[]).with(:author_name).and_return('Test deploy key')
+ allow(audit_event).to receive(:details).and_return({})
+ allow(audit_event).to receive(:target_type)
+
+ expect(subject.for(-3, audit_event)).to be_a(Gitlab::Audit::DeployKeyAuthor)
+ expect(subject.for(-3, audit_event)).to have_attributes(id: -3, name: 'Test deploy key')
+ end
end
describe '#current_sign_in_ip' do
diff --git a/spec/models/user_spec.rb b/spec/models/user_spec.rb
index f62183a213a..8dd34100593 100644
--- a/spec/models/user_spec.rb
+++ b/spec/models/user_spec.rb
@@ -5245,25 +5245,8 @@ RSpec.describe User do
end
it 'returns number of open merge requests from non-archived projects' do
- expect(Rails.cache).not_to receive(:fetch)
expect(user.attention_requested_open_merge_requests_count(force: true)).to eq 1
end
-
- context 'when uncached_mr_attention_requests_count is disabled' do
- before do
- stub_feature_flags(uncached_mr_attention_requests_count: false)
- end
-
- it 'fetches from cache' do
- expect(Rails.cache).to receive(:fetch).with(
- user.attention_request_cache_key,
- force: false,
- expires_in: described_class::COUNT_CACHE_VALIDITY_PERIOD
- ).and_call_original
-
- expect(user.attention_requested_open_merge_requests_count).to eq 1
- end
- end
end
describe '#assigned_open_issues_count' do
diff --git a/spec/requests/api/boards_spec.rb b/spec/requests/api/boards_spec.rb
index feb11f2ffef..817e1324c7c 100644
--- a/spec/requests/api/boards_spec.rb
+++ b/spec/requests/api/boards_spec.rb
@@ -61,7 +61,7 @@ RSpec.describe API::Boards do
delete api(url, user)
expect(response).to have_gitlab_http_status(:no_content)
- end.to change {board_parent.boards.count}.by(-1)
+ end.to change { board_parent.boards.count }.by(-1)
end
end
diff --git a/spec/requests/api/branches_spec.rb b/spec/requests/api/branches_spec.rb
index 780e45cf443..e3d69d6b66a 100644
--- a/spec/requests/api/branches_spec.rb
+++ b/spec/requests/api/branches_spec.rb
@@ -201,7 +201,7 @@ RSpec.describe API::Branches do
context 'when sort value is not supported' do
it_behaves_like '400 response' do
- let(:request) { get api(route, user), params: { sort: 'unknown' }}
+ let(:request) { get api(route, user), params: { sort: 'unknown' } }
end
end
end
diff --git a/spec/requests/api/ci/jobs_spec.rb b/spec/requests/api/ci/jobs_spec.rb
index 84ef9f8db1b..57828e50320 100644
--- a/spec/requests/api/ci/jobs_spec.rb
+++ b/spec/requests/api/ci/jobs_spec.rb
@@ -158,7 +158,7 @@ RSpec.describe API::Ci::Jobs do
context 'with basic auth header' do
let(:personal_access_token) { create(:personal_access_token, user: user) }
- let(:token) { personal_access_token.token}
+ let(:token) { personal_access_token.token }
include_context 'with auth headers' do
let(:header) { { Gitlab::Auth::AuthFinders::PRIVATE_TOKEN_HEADER => token } }
diff --git a/spec/requests/api/ci/runner/jobs_request_post_spec.rb b/spec/requests/api/ci/runner/jobs_request_post_spec.rb
index 746be1ccc44..cd58251cfcc 100644
--- a/spec/requests/api/ci/runner/jobs_request_post_spec.rb
+++ b/spec/requests/api/ci/runner/jobs_request_post_spec.rb
@@ -29,7 +29,7 @@ RSpec.describe API::Ci::Runner, :clean_gitlab_redis_shared_state do
describe 'POST /api/v4/jobs/request' do
let!(:last_update) {}
- let!(:new_update) { }
+ let!(:new_update) {}
let(:user_agent) { 'gitlab-runner 9.0.0 (9-0-stable; go1.7.4; linux/amd64)' }
before do
diff --git a/spec/requests/api/ci/runner/jobs_trace_spec.rb b/spec/requests/api/ci/runner/jobs_trace_spec.rb
index c3c074d80d9..d42043a7fe5 100644
--- a/spec/requests/api/ci/runner/jobs_trace_spec.rb
+++ b/spec/requests/api/ci/runner/jobs_trace_spec.rb
@@ -61,7 +61,7 @@ RSpec.describe API::Ci::Runner, :clean_gitlab_redis_trace_chunks do
end
context 'when job has been updated recently' do
- it { expect { patch_the_trace }.not_to change { job.updated_at }}
+ it { expect { patch_the_trace }.not_to change { job.updated_at } }
it "changes the job's trace" do
patch_the_trace
@@ -70,7 +70,7 @@ RSpec.describe API::Ci::Runner, :clean_gitlab_redis_trace_chunks do
end
context 'when Runner makes a force-patch' do
- it { expect { force_patch_the_trace }.not_to change { job.updated_at }}
+ it { expect { force_patch_the_trace }.not_to change { job.updated_at } }
it "doesn't change the build.trace" do
force_patch_the_trace
diff --git a/spec/requests/api/ci/secure_files_spec.rb b/spec/requests/api/ci/secure_files_spec.rb
index 6f16fe5460b..f1f22dfadc2 100644
--- a/spec/requests/api/ci/secure_files_spec.rb
+++ b/spec/requests/api/ci/secure_files_spec.rb
@@ -59,7 +59,7 @@ RSpec.describe API::Ci::SecureFiles do
expect do
post api("/projects/#{project.id}/secure_files", maintainer), params: file_params
- end.not_to change {project.secure_files.count}
+ end.not_to change { project.secure_files.count }
expect(response).to have_gitlab_http_status(:service_unavailable)
end
@@ -78,7 +78,7 @@ RSpec.describe API::Ci::SecureFiles do
it 'returns a 201 when uploading a file when the ci_secure_files_read_only feature flag is disabled' do
expect do
post api("/projects/#{project.id}/secure_files", maintainer), params: file_params
- end.to change {project.secure_files.count}.by(1)
+ end.to change { project.secure_files.count }.by(1)
expect(response).to have_gitlab_http_status(:created)
end
@@ -249,7 +249,7 @@ RSpec.describe API::Ci::SecureFiles do
it 'creates a secure file' do
expect do
post api("/projects/#{project.id}/secure_files", maintainer), params: file_params
- end.to change {project.secure_files.count}.by(1)
+ end.to change { project.secure_files.count }.by(1)
expect(response).to have_gitlab_http_status(:created)
expect(json_response['name']).to eq('upload-keystore.jks')
diff --git a/spec/requests/api/ci/triggers_spec.rb b/spec/requests/api/ci/triggers_spec.rb
index a036a55f5f3..953dcb8a483 100644
--- a/spec/requests/api/ci/triggers_spec.rb
+++ b/spec/requests/api/ci/triggers_spec.rb
@@ -136,8 +136,8 @@ RSpec.describe API::Ci::Triggers do
end
context 'when triggered from another running job' do
- let!(:trigger) { }
- let!(:trigger_request) { }
+ let!(:trigger) {}
+ let!(:trigger_request) {}
context 'when other job is triggered by a user' do
let(:trigger_token) { create(:ci_build, :running, project: project, user: user).token }
@@ -242,7 +242,7 @@ RSpec.describe API::Ci::Triggers do
expect do
post api("/projects/#{project.id}/triggers", user),
params: { description: 'trigger' }
- end.to change {project.triggers.count}.by(1)
+ end.to change { project.triggers.count }.by(1)
expect(response).to have_gitlab_http_status(:created)
expect(json_response).to include('description' => 'trigger')
@@ -335,7 +335,7 @@ RSpec.describe API::Ci::Triggers do
delete api("/projects/#{project.id}/triggers/#{trigger.id}", user)
expect(response).to have_gitlab_http_status(:no_content)
- end.to change {project.triggers.count}.by(-1)
+ end.to change { project.triggers.count }.by(-1)
end
it 'responds with 404 Not Found if requesting non-existing trigger' do
diff --git a/spec/requests/api/ci/variables_spec.rb b/spec/requests/api/ci/variables_spec.rb
index dc524e121d5..74ed8c1551d 100644
--- a/spec/requests/api/ci/variables_spec.rb
+++ b/spec/requests/api/ci/variables_spec.rb
@@ -116,7 +116,7 @@ RSpec.describe API::Ci::Variables do
it 'creates variable' do
expect do
post api("/projects/#{project.id}/variables", user), params: { key: 'TEST_VARIABLE_2', value: 'PROTECTED_VALUE_2', protected: true, masked: true }
- end.to change {project.variables.count}.by(1)
+ end.to change { project.variables.count }.by(1)
expect(response).to have_gitlab_http_status(:created)
expect(json_response['key']).to eq('TEST_VARIABLE_2')
@@ -129,7 +129,7 @@ RSpec.describe API::Ci::Variables do
it 'creates variable with optional attributes' do
expect do
post api("/projects/#{project.id}/variables", user), params: { variable_type: 'file', key: 'TEST_VARIABLE_2', value: 'VALUE_2' }
- end.to change {project.variables.count}.by(1)
+ end.to change { project.variables.count }.by(1)
expect(response).to have_gitlab_http_status(:created)
expect(json_response['key']).to eq('TEST_VARIABLE_2')
@@ -142,7 +142,7 @@ RSpec.describe API::Ci::Variables do
it 'does not allow to duplicate variable key' do
expect do
post api("/projects/#{project.id}/variables", user), params: { key: variable.key, value: 'VALUE_2' }
- end.to change {project.variables.count}.by(0)
+ end.to change { project.variables.count }.by(0)
expect(response).to have_gitlab_http_status(:bad_request)
end
@@ -268,7 +268,7 @@ RSpec.describe API::Ci::Variables do
delete api("/projects/#{project.id}/variables/#{variable.key}", user)
expect(response).to have_gitlab_http_status(:no_content)
- end.to change {project.variables.count}.by(-1)
+ end.to change { project.variables.count }.by(-1)
end
it 'responds with 404 Not Found if requesting non-existing variable' do
@@ -295,7 +295,7 @@ RSpec.describe API::Ci::Variables do
delete api("/projects/#{project.id}/variables/key1", user), params: { 'filter[environment_scope]': 'production' }
expect(response).to have_gitlab_http_status(:no_content)
- end.to change {project.variables.count}.by(-1)
+ end.to change { project.variables.count }.by(-1)
expect(var1.reload).to be_present
expect { var2.reload }.to raise_error(ActiveRecord::RecordNotFound)
diff --git a/spec/requests/api/clusters/agents_spec.rb b/spec/requests/api/clusters/agents_spec.rb
index 72d4266b9e3..5e3bdd69529 100644
--- a/spec/requests/api/clusters/agents_spec.rb
+++ b/spec/requests/api/clusters/agents_spec.rb
@@ -101,7 +101,7 @@ RSpec.describe API::Clusters::Agents do
expect do
post(api("/projects/#{project.id}/cluster_agents", user),
params: { name: 'some-agent' })
- end.to change {project.cluster_agents.count}.by(1)
+ end.to change { project.cluster_agents.count }.by(1)
aggregate_failures "testing response" do
expect(response).to have_gitlab_http_status(:created)
@@ -139,7 +139,7 @@ RSpec.describe API::Clusters::Agents do
delete api("/projects/#{project.id}/cluster_agents/#{agent.id}", user)
expect(response).to have_gitlab_http_status(:no_content)
- end.to change {project.cluster_agents.count}.by(-1)
+ end.to change { project.cluster_agents.count }.by(-1)
end
it 'returns a 404 error when deleting non existent agent' do
diff --git a/spec/requests/api/commits_spec.rb b/spec/requests/api/commits_spec.rb
index 9ef845f06bf..6dd163b908b 100644
--- a/spec/requests/api/commits_spec.rb
+++ b/spec/requests/api/commits_spec.rb
@@ -988,8 +988,8 @@ RSpec.describe API::Commits do
it 'returns all refs with no scope' do
get api(route, current_user), params: { per_page: 100 }
- refs = project.repository.branch_names_contains(commit_id).map {|name| ['branch', name]}
- refs.concat(project.repository.tag_names_contains(commit_id).map {|name| ['tag', name]})
+ refs = project.repository.branch_names_contains(commit_id).map { |name| ['branch', name] }
+ refs.concat(project.repository.tag_names_contains(commit_id).map { |name| ['tag', name] })
expect(response).to have_gitlab_http_status(:ok)
expect(response).to include_limited_pagination_headers
@@ -1000,8 +1000,8 @@ RSpec.describe API::Commits do
it 'returns all refs' do
get api(route, current_user), params: { type: 'all', per_page: 100 }
- refs = project.repository.branch_names_contains(commit_id).map {|name| ['branch', name]}
- refs.concat(project.repository.tag_names_contains(commit_id).map {|name| ['tag', name]})
+ refs = project.repository.branch_names_contains(commit_id).map { |name| ['branch', name] }
+ refs.concat(project.repository.tag_names_contains(commit_id).map { |name| ['tag', name] })
expect(response).to have_gitlab_http_status(:ok)
expect(json_response.map { |r| [r['type'], r['name']] }.compact).to eq(refs)
@@ -1010,7 +1010,7 @@ RSpec.describe API::Commits do
it 'returns the branch refs' do
get api(route, current_user), params: { type: 'branch', per_page: 100 }
- refs = project.repository.branch_names_contains(commit_id).map {|name| ['branch', name]}
+ refs = project.repository.branch_names_contains(commit_id).map { |name| ['branch', name] }
expect(response).to have_gitlab_http_status(:ok)
expect(json_response.map { |r| [r['type'], r['name']] }.compact).to eq(refs)
@@ -1019,7 +1019,7 @@ RSpec.describe API::Commits do
it 'returns the tag refs' do
get api(route, current_user), params: { type: 'tag', per_page: 100 }
- refs = project.repository.tag_names_contains(commit_id).map {|name| ['tag', name]}
+ refs = project.repository.tag_names_contains(commit_id).map { |name| ['tag', name] }
expect(response).to have_gitlab_http_status(:ok)
expect(json_response.map { |r| [r['type'], r['name']] }.compact).to eq(refs)
@@ -2036,7 +2036,7 @@ RSpec.describe API::Commits do
context 'unsigned commit' do
it_behaves_like '404 response' do
let(:request) { get api(route, current_user) }
- let(:message) { '404 Signature Not Found'}
+ let(:message) { '404 Signature Not Found' }
end
end
diff --git a/spec/requests/api/conan_instance_packages_spec.rb b/spec/requests/api/conan_instance_packages_spec.rb
index 54cad3093d7..e4747e0eb99 100644
--- a/spec/requests/api/conan_instance_packages_spec.rb
+++ b/spec/requests/api/conan_instance_packages_spec.rb
@@ -94,7 +94,7 @@ RSpec.describe API::ConanInstancePackages do
end
describe 'DELETE /api/v4/packages/conan/v1/conans/:package_name/package_version/:package_username/:package_channel' do
- subject { delete api("/packages/conan/v1/conans/#{recipe_path}"), headers: headers}
+ subject { delete api("/packages/conan/v1/conans/#{recipe_path}"), headers: headers }
it_behaves_like 'delete package endpoint'
end
diff --git a/spec/requests/api/conan_project_packages_spec.rb b/spec/requests/api/conan_project_packages_spec.rb
index e28105eb8eb..48e36b55a68 100644
--- a/spec/requests/api/conan_project_packages_spec.rb
+++ b/spec/requests/api/conan_project_packages_spec.rb
@@ -93,7 +93,7 @@ RSpec.describe API::ConanProjectPackages do
end
describe 'DELETE /api/v4/projects/:id/packages/conan/v1/conans/:package_name/package_version/:package_username/:package_channel' do
- subject { delete api("/projects/#{project_id}/packages/conan/v1/conans/#{recipe_path}"), headers: headers}
+ subject { delete api("/projects/#{project_id}/packages/conan/v1/conans/#{recipe_path}"), headers: headers }
it_behaves_like 'delete package endpoint'
end
diff --git a/spec/requests/api/dependency_proxy_spec.rb b/spec/requests/api/dependency_proxy_spec.rb
index 067852ef1e9..a8617fcb0bf 100644
--- a/spec/requests/api/dependency_proxy_spec.rb
+++ b/spec/requests/api/dependency_proxy_spec.rb
@@ -4,7 +4,7 @@ require 'spec_helper'
RSpec.describe API::DependencyProxy, api: true do
let_it_be(:user) { create(:user) }
- let_it_be(:blob) { create(:dependency_proxy_blob )}
+ let_it_be(:blob) { create(:dependency_proxy_blob ) }
let_it_be(:group, reload: true) { blob.group }
before do
diff --git a/spec/requests/api/deployments_spec.rb b/spec/requests/api/deployments_spec.rb
index 4328fd4dbe7..8d40ced495f 100644
--- a/spec/requests/api/deployments_spec.rb
+++ b/spec/requests/api/deployments_spec.rb
@@ -451,7 +451,7 @@ RSpec.describe API::Deployments do
describe 'DELETE /projects/:id/deployments/:deployment_id' do
let(:project) { create(:project, :repository) }
let(:environment) { create(:environment, project: project) }
- let(:commits) { project.repository.commits(nil, { limit: 2 })}
+ let(:commits) { project.repository.commits(nil, { limit: 2 }) }
let!(:deploy) do
create(
:deployment,
diff --git a/spec/requests/api/go_proxy_spec.rb b/spec/requests/api/go_proxy_spec.rb
index 0143340de11..2b1250320ce 100644
--- a/spec/requests/api/go_proxy_spec.rb
+++ b/spec/requests/api/go_proxy_spec.rb
@@ -318,7 +318,7 @@ RSpec.describe API::GoProxy do
context 'with a case sensitive project and versions' do
let_it_be(:project) { create :project_empty_repo, :public, creator: user, path: 'MyGoLib' }
let_it_be(:base) { "#{Settings.build_gitlab_go_url}/#{project.full_path}" }
- let_it_be(:base_encoded) { base.gsub(/[A-Z]/) { |s| "!#{s.downcase}"} }
+ let_it_be(:base_encoded) { base.gsub(/[A-Z]/) { |s| "!#{s.downcase}" } }
let_it_be(:modules) do
create(:go_module_commit, :files, project: project, files: { 'README.md' => "Hi" })
diff --git a/spec/requests/api/graphql/boards/board_list_issues_query_spec.rb b/spec/requests/api/graphql/boards/board_list_issues_query_spec.rb
index 6324db0be4a..484ddc3469b 100644
--- a/spec/requests/api/graphql/boards/board_list_issues_query_spec.rb
+++ b/spec/requests/api/graphql/boards/board_list_issues_query_spec.rb
@@ -15,7 +15,7 @@ RSpec.describe 'get board lists' do
let_it_be(:group_label2) { create(:group_label, group: group, name: 'Testing') }
let(:params) { '' }
- let(:board) { }
+ let(:board) {}
let(:confidential) { false }
let(:board_parent_type) { board_parent.class.to_s.downcase }
let(:board_data) { graphql_data[board_parent_type]['boards']['nodes'][0] }
diff --git a/spec/requests/api/graphql/boards/board_lists_query_spec.rb b/spec/requests/api/graphql/boards/board_lists_query_spec.rb
index 39ff108a9e1..6fe2e41cf35 100644
--- a/spec/requests/api/graphql/boards/board_lists_query_spec.rb
+++ b/spec/requests/api/graphql/boards/board_lists_query_spec.rb
@@ -15,7 +15,7 @@ RSpec.describe 'get board lists' do
let_it_be(:group_label2) { create(:group_label, group: group, name: 'Testing') }
let(:params) { '' }
- let(:board) { }
+ let(:board) {}
let(:board_parent_type) { board_parent.class.to_s.downcase }
let(:board_data) { graphql_data[board_parent_type]['boards']['edges'].first['node'] }
let(:lists_data) { board_data['lists']['edges'] }
diff --git a/spec/requests/api/graphql/mutations/award_emojis/add_spec.rb b/spec/requests/api/graphql/mutations/award_emojis/add_spec.rb
index fdf5503a3a2..3879e58cecf 100644
--- a/spec/requests/api/graphql/mutations/award_emojis/add_spec.rb
+++ b/spec/requests/api/graphql/mutations/award_emojis/add_spec.rb
@@ -74,7 +74,7 @@ RSpec.describe 'Adding an AwardEmoji' do
end
describe 'marking Todos as done' do
- let(:user) { current_user}
+ let(:user) { current_user }
subject { post_graphql_mutation(mutation, current_user: user) }
diff --git a/spec/requests/api/graphql/mutations/award_emojis/toggle_spec.rb b/spec/requests/api/graphql/mutations/award_emojis/toggle_spec.rb
index 6b26e37e30c..7ddffa1ab0a 100644
--- a/spec/requests/api/graphql/mutations/award_emojis/toggle_spec.rb
+++ b/spec/requests/api/graphql/mutations/award_emojis/toggle_spec.rb
@@ -84,7 +84,7 @@ RSpec.describe 'Toggling an AwardEmoji' do
end
describe 'marking Todos as done' do
- let(:user) { current_user}
+ let(:user) { current_user }
subject { post_graphql_mutation(mutation, current_user: user) }
diff --git a/spec/requests/api/graphql/mutations/releases/create_spec.rb b/spec/requests/api/graphql/mutations/releases/create_spec.rb
index 1e62942c29d..2541072b766 100644
--- a/spec/requests/api/graphql/mutations/releases/create_spec.rb
+++ b/spec/requests/api/graphql/mutations/releases/create_spec.rb
@@ -16,10 +16,10 @@ RSpec.describe 'Creation of a new release' do
let(:mutation_name) { :release_create }
- let(:tag_name) { 'v7.12.5'}
+ let(:tag_name) { 'v7.12.5' }
let(:tag_message) { nil }
- let(:ref) { 'master'}
- let(:name) { 'Version 7.12.5'}
+ let(:ref) { 'master' }
+ let(:name) { 'Version 7.12.5' }
let(:description) { 'Release 7.12.5 :rocket:' }
let(:released_at) { '2018-12-10' }
let(:milestones) { [milestone_12_3.title, milestone_12_4.title] }
diff --git a/spec/requests/api/graphql/mutations/releases/update_spec.rb b/spec/requests/api/graphql/mutations/releases/update_spec.rb
index 0fa3d7de299..33d4e57904c 100644
--- a/spec/requests/api/graphql/mutations/releases/update_spec.rb
+++ b/spec/requests/api/graphql/mutations/releases/update_spec.rb
@@ -15,7 +15,7 @@ RSpec.describe 'Updating an existing release' do
let_it_be(:milestone_12_4) { create(:milestone, project: project, title: '12.4') }
let_it_be(:tag_name) { 'v1.1.0' }
- let_it_be(:name) { 'Version 7.12.5'}
+ let_it_be(:name) { 'Version 7.12.5' }
let_it_be(:description) { 'Release 7.12.5 :rocket:' }
let_it_be(:released_at) { '2018-12-10' }
let_it_be(:created_at) { '2018-11-05' }
diff --git a/spec/requests/api/graphql/mutations/snippets/create_spec.rb b/spec/requests/api/graphql/mutations/snippets/create_spec.rb
index 9a3cea3ca14..264fa5732c3 100644
--- a/spec/requests/api/graphql/mutations/snippets/create_spec.rb
+++ b/spec/requests/api/graphql/mutations/snippets/create_spec.rb
@@ -12,8 +12,8 @@ RSpec.describe 'Creating a Snippet' do
let(:title) { 'Initial title' }
let(:visibility_level) { 'public' }
let(:action) { :create }
- let(:file_1) { { filePath: 'example_file1', content: 'This is the example file 1' }}
- let(:file_2) { { filePath: 'example_file2', content: 'This is the example file 2' }}
+ let(:file_1) { { filePath: 'example_file1', content: 'This is the example file 1' } }
+ let(:file_2) { { filePath: 'example_file2', content: 'This is the example file 2' } }
let(:actions) { [{ action: action }.merge(file_1), { action: action }.merge(file_2)] }
let(:project_path) { nil }
let(:uploaded_files) { nil }
@@ -149,7 +149,7 @@ RSpec.describe 'Creating a Snippet' do
end
context 'when there non ActiveRecord errors' do
- let(:file_1) { { filePath: 'invalid://file/path', content: 'foobar' }}
+ let(:file_1) { { filePath: 'invalid://file/path', content: 'foobar' } }
it_behaves_like 'a mutation that returns errors in the response', errors: ['Repository Error creating the snippet - Invalid file name']
it_behaves_like 'does not create snippet'
diff --git a/spec/requests/api/graphql/mutations/timelogs/delete_spec.rb b/spec/requests/api/graphql/mutations/timelogs/delete_spec.rb
index b674e77f093..d304bfbdf00 100644
--- a/spec/requests/api/graphql/mutations/timelogs/delete_spec.rb
+++ b/spec/requests/api/graphql/mutations/timelogs/delete_spec.rb
@@ -7,7 +7,7 @@ RSpec.describe 'Delete a timelog' do
let_it_be(:author) { create(:user) }
let_it_be(:project) { create(:project, :public) }
let_it_be(:issue) { create(:issue, project: project) }
- let_it_be(:timelog) { create(:timelog, user: author, issue: issue, time_spent: 1800)}
+ let_it_be(:timelog) { create(:timelog, user: author, issue: issue, time_spent: 1800) }
let(:current_user) { nil }
let(:mutation) { graphql_mutation(:timelogDelete, { 'id' => timelog.to_global_id.to_s }) }
diff --git a/spec/requests/api/graphql/mutations/work_items/create_spec.rb b/spec/requests/api/graphql/mutations/work_items/create_spec.rb
index 2a542cef5de..8233821053f 100644
--- a/spec/requests/api/graphql/mutations/work_items/create_spec.rb
+++ b/spec/requests/api/graphql/mutations/work_items/create_spec.rb
@@ -129,7 +129,7 @@ RSpec.describe 'Create a work item' do
end
context 'when parent work item is not found' do
- let_it_be(:parent) { build_stubbed(:work_item, id: non_existing_record_id)}
+ let_it_be(:parent) { build_stubbed(:work_item, id: non_existing_record_id) }
it 'returns a top level error' do
post_graphql_mutation(mutation, current_user: current_user)
diff --git a/spec/requests/api/graphql/mutations/work_items/update_spec.rb b/spec/requests/api/graphql/mutations/work_items/update_spec.rb
index bd6ec4b9535..6ee3d5b1d35 100644
--- a/spec/requests/api/graphql/mutations/work_items/update_spec.rb
+++ b/spec/requests/api/graphql/mutations/work_items/update_spec.rb
@@ -103,7 +103,7 @@ RSpec.describe 'Update a work item' do
let(:input) { { 'confidential' => true } }
it_behaves_like 'toggling confidentiality' do
- let(:values) { { old: false, new: true }}
+ let(:values) { { old: false, new: true } }
end
end
@@ -115,7 +115,7 @@ RSpec.describe 'Update a work item' do
end
it_behaves_like 'toggling confidentiality' do
- let(:values) { { old: true, new: false }}
+ let(:values) { { old: true, new: false } }
end
end
end
diff --git a/spec/requests/api/graphql/namespace/root_storage_statistics_spec.rb b/spec/requests/api/graphql/namespace/root_storage_statistics_spec.rb
index 37cc502103d..8d8a0baae36 100644
--- a/spec/requests/api/graphql/namespace/root_storage_statistics_spec.rb
+++ b/spec/requests/api/graphql/namespace/root_storage_statistics_spec.rb
@@ -49,7 +49,7 @@ RSpec.describe 'rendering namespace statistics' do
it_behaves_like 'a working namespace with storage statistics query'
context 'when the namespace is public' do
- let(:group) { create(:group, :public)}
+ let(:group) { create(:group, :public) }
it 'hides statistics for unauthenticated requests' do
post_graphql(query, current_user: nil)
diff --git a/spec/requests/api/graphql/packages/conan_spec.rb b/spec/requests/api/graphql/packages/conan_spec.rb
index 1f3732980d9..5bd5a71bbeb 100644
--- a/spec/requests/api/graphql/packages/conan_spec.rb
+++ b/spec/requests/api/graphql/packages/conan_spec.rb
@@ -8,7 +8,7 @@ RSpec.describe 'conan package details' do
let_it_be(:package) { create(:conan_package, project: project) }
let(:metadata) { query_graphql_fragment('ConanMetadata') }
- let(:package_files_metadata) {query_graphql_fragment('ConanFileMetadata')}
+ let(:package_files_metadata) { query_graphql_fragment('ConanFileMetadata') }
let(:query) do
graphql_query_for(:package, { id: package_global_id }, <<~FIELDS)
diff --git a/spec/requests/api/graphql/packages/helm_spec.rb b/spec/requests/api/graphql/packages/helm_spec.rb
index 397096f70db..1675b8faa23 100644
--- a/spec/requests/api/graphql/packages/helm_spec.rb
+++ b/spec/requests/api/graphql/packages/helm_spec.rb
@@ -7,7 +7,7 @@ RSpec.describe 'helm package details' do
let_it_be(:package) { create(:helm_package, project: project) }
- let(:package_files_metadata) {query_graphql_fragment('HelmFileMetadata')}
+ let(:package_files_metadata) { query_graphql_fragment('HelmFileMetadata') }
let(:query) do
graphql_query_for(:package, { id: package_global_id }, <<~FIELDS)
diff --git a/spec/requests/api/graphql/packages/package_spec.rb b/spec/requests/api/graphql/packages/package_spec.rb
index 0335c1085b4..c28b37db5af 100644
--- a/spec/requests/api/graphql/packages/package_spec.rb
+++ b/spec/requests/api/graphql/packages/package_spec.rb
@@ -18,7 +18,7 @@ RSpec.describe 'package details' do
let(:depth) { 3 }
let(:excluded) { %w[metadata apiFuzzingCiConfiguration pipeline packageFiles] }
let(:metadata) { query_graphql_fragment('ComposerMetadata') }
- let(:package_files) {all_graphql_fields_for('PackageFile')}
+ let(:package_files) { all_graphql_fields_for('PackageFile') }
let(:package_global_id) { global_id_of(composer_package) }
let(:package_details) { graphql_data_at(:package) }
diff --git a/spec/requests/api/graphql/project/base_service_spec.rb b/spec/requests/api/graphql/project/base_service_spec.rb
index 5dc0f55db88..58d10ade8cf 100644
--- a/spec/requests/api/graphql/project/base_service_spec.rb
+++ b/spec/requests/api/graphql/project/base_service_spec.rb
@@ -26,7 +26,7 @@ RSpec.describe 'query Jira service' do
)
end
- let(:services) { graphql_data.dig('project', 'services', 'nodes')}
+ let(:services) { graphql_data.dig('project', 'services', 'nodes') }
it_behaves_like 'unauthorized users cannot read services'
diff --git a/spec/requests/api/graphql/project/jira_import_spec.rb b/spec/requests/api/graphql/project/jira_import_spec.rb
index 98a3f08baa6..202220f4bf6 100644
--- a/spec/requests/api/graphql/project/jira_import_spec.rb
+++ b/spec/requests/api/graphql/project/jira_import_spec.rb
@@ -56,8 +56,8 @@ RSpec.describe 'query Jira import data' do
)
end
- let(:jira_imports) { graphql_data.dig('project', 'jiraImports', 'nodes')}
- let(:jira_import_status) { graphql_data.dig('project', 'jiraImportStatus')}
+ let(:jira_imports) { graphql_data.dig('project', 'jiraImports', 'nodes') }
+ let(:jira_import_status) { graphql_data.dig('project', 'jiraImportStatus') }
context 'when user cannot read Jira import data' do
before do
@@ -89,11 +89,11 @@ RSpec.describe 'query Jira import data' do
context 'list of jira imports sorted ascending by scheduledAt time' do
it 'retuns list of jira imports' do
- jira_proket_keys = jira_imports.map {|ji| ji['jiraProjectKey']}
- usernames = jira_imports.map {|ji| ji.dig('scheduledBy', 'username')}
- imported_issues_count = jira_imports.map {|ji| ji.dig('importedIssuesCount')}
- failed_issues_count = jira_imports.map {|ji| ji.dig('failedToImportCount')}
- total_issue_count = jira_imports.map {|ji| ji.dig('totalIssueCount')}
+ jira_proket_keys = jira_imports.map { |ji| ji['jiraProjectKey'] }
+ usernames = jira_imports.map { |ji| ji.dig('scheduledBy', 'username') }
+ imported_issues_count = jira_imports.map { |ji| ji.dig('importedIssuesCount') }
+ failed_issues_count = jira_imports.map { |ji| ji.dig('failedToImportCount') }
+ total_issue_count = jira_imports.map { |ji| ji.dig('totalIssueCount') }
expect(jira_imports.size).to eq 2
expect(jira_proket_keys).to eq %w(BB AA)
diff --git a/spec/requests/api/group_variables_spec.rb b/spec/requests/api/group_variables_spec.rb
index a7b4bea362f..4fed7dd7624 100644
--- a/spec/requests/api/group_variables_spec.rb
+++ b/spec/requests/api/group_variables_spec.rb
@@ -91,7 +91,7 @@ RSpec.describe API::GroupVariables do
it 'creates variable' do
expect do
post api("/groups/#{group.id}/variables", user), params: { key: 'TEST_VARIABLE_2', value: 'PROTECTED_VALUE_2', protected: true, masked: true }
- end.to change {group.variables.count}.by(1)
+ end.to change { group.variables.count }.by(1)
expect(response).to have_gitlab_http_status(:created)
expect(json_response['key']).to eq('TEST_VARIABLE_2')
@@ -105,7 +105,7 @@ RSpec.describe API::GroupVariables do
it 'creates variable with optional attributes' do
expect do
post api("/groups/#{group.id}/variables", user), params: { variable_type: 'file', key: 'TEST_VARIABLE_2', value: 'VALUE_2' }
- end.to change {group.variables.count}.by(1)
+ end.to change { group.variables.count }.by(1)
expect(response).to have_gitlab_http_status(:created)
expect(json_response['key']).to eq('TEST_VARIABLE_2')
@@ -119,7 +119,7 @@ RSpec.describe API::GroupVariables do
it 'does not allow to duplicate variable key' do
expect do
post api("/groups/#{group.id}/variables", user), params: { key: variable.key, value: 'VALUE_2' }
- end.to change {group.variables.count}.by(0)
+ end.to change { group.variables.count }.by(0)
expect(response).to have_gitlab_http_status(:bad_request)
end
@@ -207,7 +207,7 @@ RSpec.describe API::GroupVariables do
delete api("/groups/#{group.id}/variables/#{variable.key}", user)
expect(response).to have_gitlab_http_status(:no_content)
- end.to change {group.variables.count}.by(-1)
+ end.to change { group.variables.count }.by(-1)
end
it 'responds with 404 Not Found if requesting non-existing variable' do
diff --git a/spec/requests/api/groups_spec.rb b/spec/requests/api/groups_spec.rb
index 3bc3cce5310..bc37f8e4655 100644
--- a/spec/requests/api/groups_spec.rb
+++ b/spec/requests/api/groups_spec.rb
@@ -864,7 +864,7 @@ RSpec.describe API::Groups do
end
describe 'PUT /groups/:id' do
- let(:new_group_name) { 'New Group'}
+ let(:new_group_name) { 'New Group' }
let(:file_path) { 'spec/fixtures/dk.png' }
it_behaves_like 'group avatar upload' do
diff --git a/spec/requests/api/helpers_spec.rb b/spec/requests/api/helpers_spec.rb
index 8961f3177b6..c961fd9cfc8 100644
--- a/spec/requests/api/helpers_spec.rb
+++ b/spec/requests/api/helpers_spec.rb
@@ -26,8 +26,8 @@ RSpec.describe API::Helpers do
}
end
- let(:header) { }
- let(:request) { Grape::Request.new(env)}
+ let(:header) {}
+ let(:request) { Grape::Request.new(env) }
let(:params) { request.params }
before do
diff --git a/spec/requests/api/internal/base_spec.rb b/spec/requests/api/internal/base_spec.rb
index acfe476a864..cc329b87047 100644
--- a/spec/requests/api/internal/base_spec.rb
+++ b/spec/requests/api/internal/base_spec.rb
@@ -1451,7 +1451,7 @@ RSpec.describe API::Internal::Base do
describe 'POST /internal/two_factor_otp_check' do
let(:key_id) { key.id }
- let(:otp) { '123456'}
+ let(:otp) { '123456' }
subject do
post api('/internal/two_factor_otp_check'),
@@ -1472,7 +1472,7 @@ RSpec.describe API::Internal::Base do
describe 'POST /internal/two_factor_manual_otp_check' do
let(:key_id) { key.id }
- let(:otp) { '123456'}
+ let(:otp) { '123456' }
subject do
post api('/internal/two_factor_manual_otp_check'),
@@ -1493,7 +1493,7 @@ RSpec.describe API::Internal::Base do
describe 'POST /internal/two_factor_push_otp_check' do
let(:key_id) { key.id }
- let(:otp) { '123456'}
+ let(:otp) { '123456' }
subject do
post api('/internal/two_factor_push_otp_check'),
@@ -1514,7 +1514,7 @@ RSpec.describe API::Internal::Base do
describe 'POST /internal/two_factor_manual_otp_check' do
let(:key_id) { key.id }
- let(:otp) { '123456'}
+ let(:otp) { '123456' }
subject do
post api('/internal/two_factor_manual_otp_check'),
@@ -1534,7 +1534,7 @@ RSpec.describe API::Internal::Base do
describe 'POST /internal/two_factor_push_otp_check' do
let(:key_id) { key.id }
- let(:otp) { '123456'}
+ let(:otp) { '123456' }
subject do
post api('/internal/two_factor_push_otp_check'),
diff --git a/spec/requests/api/markdown_spec.rb b/spec/requests/api/markdown_spec.rb
index 47e1f007daa..15283b5cc63 100644
--- a/spec/requests/api/markdown_spec.rb
+++ b/spec/requests/api/markdown_spec.rb
@@ -131,7 +131,7 @@ RSpec.describe API::Markdown do
end
context 'when not logged in' do
- let(:user) { }
+ let(:user) {}
it_behaves_like 'user without proper access'
end
@@ -176,7 +176,7 @@ RSpec.describe API::Markdown do
end
context 'when not logged in' do
- let(:user) { }
+ let(:user) {}
it_behaves_like 'user without proper access'
end
diff --git a/spec/requests/api/maven_packages_spec.rb b/spec/requests/api/maven_packages_spec.rb
index 321592fd844..1b378788b6a 100644
--- a/spec/requests/api/maven_packages_spec.rb
+++ b/spec/requests/api/maven_packages_spec.rb
@@ -34,7 +34,7 @@ RSpec.describe API::MavenPackages do
end
let(:version) { '1.0-SNAPSHOT' }
- let(:param_path) { "#{package_name}/#{version}"}
+ let(:param_path) { "#{package_name}/#{version}" }
before do
project.add_developer(user)
diff --git a/spec/requests/api/members_spec.rb b/spec/requests/api/members_spec.rb
index e4c2f17af47..3a722b7b518 100644
--- a/spec/requests/api/members_spec.rb
+++ b/spec/requests/api/members_spec.rb
@@ -187,8 +187,8 @@ RSpec.describe API::Members do
end
context 'with a subgroup' do
- let(:group) { create(:group, :private)}
- let(:subgroup) { create(:group, :private, parent: group)}
+ let(:group) { create(:group, :private) }
+ let(:subgroup) { create(:group, :private, parent: group) }
let(:project) { create(:project, group: subgroup) }
before do
diff --git a/spec/requests/api/metrics/dashboard/annotations_spec.rb b/spec/requests/api/metrics/dashboard/annotations_spec.rb
index 79a38702354..5e64ac7d481 100644
--- a/spec/requests/api/metrics/dashboard/annotations_spec.rb
+++ b/spec/requests/api/metrics/dashboard/annotations_spec.rb
@@ -10,7 +10,7 @@ RSpec.describe API::Metrics::Dashboard::Annotations do
let(:dashboard) { 'config/prometheus/common_metrics.yml' }
let(:starting_at) { Time.now.iso8601 }
let(:ending_at) { 1.hour.from_now.iso8601 }
- let(:params) { attributes_for(:metrics_dashboard_annotation, environment: environment, starting_at: starting_at, ending_at: ending_at, dashboard_path: dashboard)}
+ let(:params) { attributes_for(:metrics_dashboard_annotation, environment: environment, starting_at: starting_at, ending_at: ending_at, dashboard_path: dashboard) }
shared_examples 'POST /:source_type/:id/metrics_dashboard/annotations' do |source_type|
let(:url) { "/#{source_type.pluralize}/#{source.id}/metrics_dashboard/annotations" }
diff --git a/spec/requests/api/notes_spec.rb b/spec/requests/api/notes_spec.rb
index f6a65274ca2..89abb28140a 100644
--- a/spec/requests/api/notes_spec.rb
+++ b/spec/requests/api/notes_spec.rb
@@ -111,7 +111,7 @@ RSpec.describe API::Notes do
system: false
end
- let(:test_url) {"/projects/#{ext_proj.id}/issues/#{ext_issue.iid}/notes"}
+ let(:test_url) { "/projects/#{ext_proj.id}/issues/#{ext_issue.iid}/notes" }
shared_examples 'a notes request' do
it 'is a note array response' do
diff --git a/spec/requests/api/npm_project_packages_spec.rb b/spec/requests/api/npm_project_packages_spec.rb
index 62809b432af..6061b3ba965 100644
--- a/spec/requests/api/npm_project_packages_spec.rb
+++ b/spec/requests/api/npm_project_packages_spec.rb
@@ -307,8 +307,8 @@ RSpec.describe API::NpmProjectPackages do
expect { upload_package_with_token }
.to change { project.packages.count }.by(1)
.and change { Packages::PackageFile.count }.by(1)
- .and change { Packages::Dependency.count}.by(4)
- .and change { Packages::DependencyLink.count}.by(6)
+ .and change { Packages::Dependency.count }.by(4)
+ .and change { Packages::DependencyLink.count }.by(6)
expect(response).to have_gitlab_http_status(:ok)
end
@@ -323,8 +323,8 @@ RSpec.describe API::NpmProjectPackages do
expect { upload_package_with_token }
.to change { project.packages.count }.by(1)
.and change { Packages::PackageFile.count }.by(1)
- .and not_change { Packages::Dependency.count}
- .and change { Packages::DependencyLink.count}.by(6)
+ .and not_change { Packages::Dependency.count }
+ .and change { Packages::DependencyLink.count }.by(6)
end
end
end
diff --git a/spec/requests/api/nuget_group_packages_spec.rb b/spec/requests/api/nuget_group_packages_spec.rb
index 1b71f0f9de1..c1375288809 100644
--- a/spec/requests/api/nuget_group_packages_spec.rb
+++ b/spec/requests/api/nuget_group_packages_spec.rb
@@ -73,7 +73,7 @@ RSpec.describe API::NugetGroupPackages do
let(:include_prereleases) { true }
let(:query_parameters) { { q: search_term, take: take, skip: skip, prerelease: include_prereleases }.compact }
- subject { get api(url), headers: {}}
+ subject { get api(url), headers: {} }
shared_examples 'handling mixed visibilities' do
where(:group_visibility, :subgroup_visibility, :expected_status) do
diff --git a/spec/requests/api/pages/pages_spec.rb b/spec/requests/api/pages/pages_spec.rb
index 0eb2ae64f43..7d44ff533aa 100644
--- a/spec/requests/api/pages/pages_spec.rb
+++ b/spec/requests/api/pages/pages_spec.rb
@@ -19,7 +19,7 @@ RSpec.describe API::Pages do
end
it_behaves_like '404 response' do
- let(:request) { delete api("/projects/#{project.id}/pages", admin)}
+ let(:request) { delete api("/projects/#{project.id}/pages", admin) }
end
end
diff --git a/spec/requests/api/pages_domains_spec.rb b/spec/requests/api/pages_domains_spec.rb
index 75183156c9d..cd4e8b30d8f 100644
--- a/spec/requests/api/pages_domains_spec.rb
+++ b/spec/requests/api/pages_domains_spec.rb
@@ -19,8 +19,8 @@ RSpec.describe API::PagesDomains do
end
let(:pages_domain_secure_params) { build(:pages_domain, domain: 'ssl.other-domain.test', project: project).slice(:domain, :certificate, :key) }
- let(:pages_domain_secure_key_missmatch_params) {build(:pages_domain, :with_trusted_chain, project: project).slice(:domain, :certificate, :key) }
- let(:pages_domain_secure_missing_chain_params) {build(:pages_domain, :with_missing_chain, project: project).slice(:certificate) }
+ let(:pages_domain_secure_key_missmatch_params) { build(:pages_domain, :with_trusted_chain, project: project).slice(:domain, :certificate, :key) }
+ let(:pages_domain_secure_missing_chain_params) { build(:pages_domain, :with_missing_chain, project: project).slice(:certificate) }
let(:route) { "/projects/#{project.id}/pages/domains" }
let(:route_domain) { "/projects/#{project.id}/pages/domains/#{pages_domain.domain}" }
diff --git a/spec/requests/api/personal_access_tokens_spec.rb b/spec/requests/api/personal_access_tokens_spec.rb
index 403c646ee32..f261e7db024 100644
--- a/spec/requests/api/personal_access_tokens_spec.rb
+++ b/spec/requests/api/personal_access_tokens_spec.rb
@@ -34,7 +34,7 @@ RSpec.describe API::PersonalAccessTokens do
context 'logged in as a non-Administrator' do
let_it_be(:current_user) { create(:user) }
let_it_be(:user) { create(:user) }
- let_it_be(:token) { create(:personal_access_token, user: current_user)}
+ let_it_be(:token) { create(:personal_access_token, user: current_user) }
let_it_be(:other_token) { create(:personal_access_token, user: user) }
let_it_be(:token_impersonated) { create(:personal_access_token, impersonation: true, user: current_user) }
diff --git a/spec/requests/api/project_templates_spec.rb b/spec/requests/api/project_templates_spec.rb
index 070fd6db3dc..87d70a87f42 100644
--- a/spec/requests/api/project_templates_spec.rb
+++ b/spec/requests/api/project_templates_spec.rb
@@ -77,7 +77,7 @@ RSpec.describe API::ProjectTemplates do
expect(response).to have_gitlab_http_status(:ok)
expect(response).to include_pagination_headers
expect(response).to match_response_schema('public_api/v4/template_list')
- expect(json_response.map {|t| t['key']}).to match_array(%w(bug feature_proposal template_test))
+ expect(json_response.map { |t| t['key'] }).to match_array(%w(bug feature_proposal template_test))
end
it 'returns merge request templates' do
@@ -86,7 +86,7 @@ RSpec.describe API::ProjectTemplates do
expect(response).to have_gitlab_http_status(:ok)
expect(response).to include_pagination_headers
expect(response).to match_response_schema('public_api/v4/template_list')
- expect(json_response.map {|t| t['key']}).to match_array(%w(bug feature_proposal template_test))
+ expect(json_response.map { |t| t['key'] }).to match_array(%w(bug feature_proposal template_test))
end
it 'returns 400 for an unknown template type' do
diff --git a/spec/requests/api/projects_spec.rb b/spec/requests/api/projects_spec.rb
index ae689d7327b..d3c65e11ed7 100644
--- a/spec/requests/api/projects_spec.rb
+++ b/spec/requests/api/projects_spec.rb
@@ -1093,7 +1093,7 @@ RSpec.describe API::Projects do
it 'does not create new project and respond with 403' do
allow_any_instance_of(User).to receive(:projects_limit_left).and_return(0)
expect { post api('/projects', user2), params: { name: 'foo' } }
- .to change {Project.count}.by(0)
+ .to change { Project.count }.by(0)
expect(response).to have_gitlab_http_status(:forbidden)
end
end
diff --git a/spec/requests/api/pypi_packages_spec.rb b/spec/requests/api/pypi_packages_spec.rb
index 9e0d3780fd8..6c130bb4963 100644
--- a/spec/requests/api/pypi_packages_spec.rb
+++ b/spec/requests/api/pypi_packages_spec.rb
@@ -41,7 +41,7 @@ RSpec.describe API::PypiPackages do
it_behaves_like 'deploy token for package GET requests'
context 'with group path as id' do
- let(:url) { "/groups/#{CGI.escape(group.full_path)}/-/packages/pypi/simple"}
+ let(:url) { "/groups/#{CGI.escape(group.full_path)}/-/packages/pypi/simple" }
it_behaves_like 'deploy token for package GET requests'
end
@@ -102,7 +102,7 @@ RSpec.describe API::PypiPackages do
it_behaves_like 'deploy token for package GET requests'
context 'with group path as id' do
- let(:url) { "/groups/#{CGI.escape(group.full_path)}/-/packages/pypi/simple/#{package_name}"}
+ let(:url) { "/groups/#{CGI.escape(group.full_path)}/-/packages/pypi/simple/#{package_name}" }
it_behaves_like 'deploy token for package GET requests'
end
diff --git a/spec/requests/api/release/links_spec.rb b/spec/requests/api/release/links_spec.rb
index 2345c0063dd..57b2e005929 100644
--- a/spec/requests/api/release/links_spec.rb
+++ b/spec/requests/api/release/links_spec.rb
@@ -66,7 +66,7 @@ RSpec.describe API::Release::Links do
end
context 'when release does not exist' do
- let!(:release) { }
+ let!(:release) {}
it_behaves_like '404 response' do
let(:request) { get api("/projects/#{project.id}/releases/v0.1/assets/links", maintainer) }
@@ -98,7 +98,7 @@ RSpec.describe API::Release::Links do
end
context 'when the release does not exists' do
- let!(:release) { }
+ let!(:release) {}
it_behaves_like '403 response' do
let(:request) { get api("/projects/#{project.id}/releases/v0.1/assets/links", non_project_member) }
@@ -409,7 +409,7 @@ RSpec.describe API::Release::Links do
end
context 'when there are no corresponding release link' do
- let!(:release_link) { }
+ let!(:release_link) {}
it_behaves_like '404 response' do
let(:request) do
@@ -510,7 +510,7 @@ RSpec.describe API::Release::Links do
end
context 'when there are no corresponding release link' do
- let!(:release_link) { }
+ let!(:release_link) {}
it_behaves_like '404 response' do
let(:request) do
diff --git a/spec/requests/api/releases_spec.rb b/spec/requests/api/releases_spec.rb
index c050214ff50..1d9e3a6c887 100644
--- a/spec/requests/api/releases_spec.rb
+++ b/spec/requests/api/releases_spec.rb
@@ -962,7 +962,7 @@ RSpec.describe API::Releases do
context 'with milestones' do
let(:subject) { post api("/projects/#{project.id}/releases", maintainer), params: params }
let(:milestone) { create(:milestone, project: project, title: 'v1.0') }
- let(:returned_milestones) { json_response['milestones'].map {|m| m['title']} }
+ let(:returned_milestones) { json_response['milestones'].map { |m| m['title'] } }
before do
params.merge!(milestone_params)
@@ -1120,7 +1120,7 @@ RSpec.describe API::Releases do
end
context 'when there are no corresponding releases' do
- let!(:release) { }
+ let!(:release) {}
it 'forbids the request' do
put api("/projects/#{project.id}/releases/v0.1", maintainer), params: params
@@ -1158,7 +1158,7 @@ RSpec.describe API::Releases do
end
context 'with milestones' do
- let(:returned_milestones) { json_response['milestones'].map {|m| m['title']} }
+ let(:returned_milestones) { json_response['milestones'].map { |m| m['title'] } }
subject { put api("/projects/#{project.id}/releases/v0.1", maintainer), params: params }
@@ -1310,7 +1310,7 @@ RSpec.describe API::Releases do
end
context 'when there are no corresponding releases' do
- let!(:release) { }
+ let!(:release) {}
it 'forbids the request' do
delete api("/projects/#{project.id}/releases/v0.1", maintainer)
diff --git a/spec/requests/api/snippets_spec.rb b/spec/requests/api/snippets_spec.rb
index 0ba1011684a..0dd6e484e8d 100644
--- a/spec/requests/api/snippets_spec.rb
+++ b/spec/requests/api/snippets_spec.rb
@@ -28,7 +28,7 @@ RSpec.describe API::Snippets, factory_default: :keep do
expect(response).to have_gitlab_http_status(:ok)
expect(response).to include_pagination_headers
expect(json_response).to be_an Array
- expect(json_response.map { |snippet| snippet['id']} ).to contain_exactly(
+ expect(json_response.map { |snippet| snippet['id'] } ).to contain_exactly(
public_snippet.id,
internal_snippet.id,
private_snippet.id)
@@ -75,7 +75,7 @@ RSpec.describe API::Snippets, factory_default: :keep do
it 'returns snippets available for user in given time range' do
get api(path, personal_access_token: user_token)
- expect(json_response.map { |snippet| snippet['id']} ).to contain_exactly(
+ expect(json_response.map { |snippet| snippet['id'] } ).to contain_exactly(
private_snippet_in_time_range1.id,
private_snippet_in_time_range2.id)
end
@@ -99,10 +99,10 @@ RSpec.describe API::Snippets, factory_default: :keep do
expect(response).to have_gitlab_http_status(:ok)
expect(response).to include_pagination_headers
expect(json_response).to be_an Array
- expect(json_response.map { |snippet| snippet['id']} ).to contain_exactly(
+ expect(json_response.map { |snippet| snippet['id'] } ).to contain_exactly(
public_snippet.id,
public_snippet_other.id)
- expect(json_response.map { |snippet| snippet['web_url']} ).to contain_exactly(
+ expect(json_response.map { |snippet| snippet['web_url'] } ).to contain_exactly(
"http://localhost/-/snippets/#{public_snippet.id}",
"http://localhost/-/snippets/#{public_snippet_other.id}")
expect(json_response[0]['files'].first).to eq snippet_blob_file(public_snippet_other.blobs.first)
@@ -126,7 +126,7 @@ RSpec.describe API::Snippets, factory_default: :keep do
it 'returns public snippets available to user in given time range' do
get api(path, personal_access_token: user_token)
- expect(json_response.map { |snippet| snippet['id']} ).to contain_exactly(
+ expect(json_response.map { |snippet| snippet['id'] } ).to contain_exactly(
public_snippet_in_time_range.id)
end
end
diff --git a/spec/requests/api/unleash_spec.rb b/spec/requests/api/unleash_spec.rb
index 7bdb89fb286..3ee895d9421 100644
--- a/spec/requests/api/unleash_spec.rb
+++ b/spec/requests/api/unleash_spec.rb
@@ -8,8 +8,8 @@ RSpec.describe API::Unleash do
let_it_be(:project, refind: true) { create(:project) }
let(:project_id) { project.id }
- let(:params) { }
- let(:headers) { }
+ let(:params) {}
+ let(:headers) {}
shared_examples 'authenticated request' do
context 'when using instance id' do
@@ -57,7 +57,7 @@ RSpec.describe API::Unleash do
context 'when using header' do
let(:client) { create(:operations_feature_flags_client, project: project) }
- let(:headers) { { "UNLEASH-INSTANCEID" => client.token }}
+ let(:headers) { { "UNLEASH-INSTANCEID" => client.token } }
it 'responds with OK' do
subject
diff --git a/spec/requests/git_http_spec.rb b/spec/requests/git_http_spec.rb
index 05b16119a0e..3ffca7e3c62 100644
--- a/spec/requests/git_http_spec.rb
+++ b/spec/requests/git_http_spec.rb
@@ -225,7 +225,7 @@ RSpec.describe 'Git HTTP requests' do
end
context 'when namespace exists' do
- let(:path) { "#{user.namespace.path}/new-project.git"}
+ let(:path) { "#{user.namespace.path}/new-project.git" }
context 'when authenticated' do
it 'creates a new project under the existing namespace' do
diff --git a/spec/requests/groups/milestones_controller_spec.rb b/spec/requests/groups/milestones_controller_spec.rb
index 43f0fc714b3..e6418c7694d 100644
--- a/spec/requests/groups/milestones_controller_spec.rb
+++ b/spec/requests/groups/milestones_controller_spec.rb
@@ -30,7 +30,7 @@ RSpec.describe Groups::MilestonesController do
milestones = json_response
expect(milestones.count).to eq(3)
- expect(milestones.map {|x| x['title']}).not_to include(private_milestone.title)
+ expect(milestones.map { |x| x['title'] }).not_to include(private_milestone.title)
end
end
diff --git a/spec/requests/jira_connect/subscriptions_controller_spec.rb b/spec/requests/jira_connect/subscriptions_controller_spec.rb
index b10d07b3771..d8f329f13f5 100644
--- a/spec/requests/jira_connect/subscriptions_controller_spec.rb
+++ b/spec/requests/jira_connect/subscriptions_controller_spec.rb
@@ -18,12 +18,12 @@ RSpec.describe JiraConnect::SubscriptionsController do
subject(:content_security_policy) { response.headers['Content-Security-Policy'] }
- it { is_expected.to include('http://self-managed-gitlab.com/-/jira_connect/oauth_application_ids')}
+ it { is_expected.to include('http://self-managed-gitlab.com/-/jira_connect/oauth_application_ids') }
context 'with no self-managed instance configured' do
let_it_be(:installation) { create(:jira_connect_installation, instance_url: '') }
- it { is_expected.not_to include('http://self-managed-gitlab.com')}
+ it { is_expected.not_to include('http://self-managed-gitlab.com') }
end
end
end
diff --git a/spec/requests/lfs_http_spec.rb b/spec/requests/lfs_http_spec.rb
index acf83916f82..3529239a4d9 100644
--- a/spec/requests/lfs_http_spec.rb
+++ b/spec/requests/lfs_http_spec.rb
@@ -129,13 +129,13 @@ RSpec.describe 'Git LFS API and storage' do
it_behaves_like 'LFS http 200 blob response'
context 'when user password is expired' do
- let_it_be(:user) { create(:user, password_expires_at: 1.minute.ago)}
+ let_it_be(:user) { create(:user, password_expires_at: 1.minute.ago) }
it_behaves_like 'LFS http 401 response'
end
context 'when user is blocked' do
- let_it_be(:user) { create(:user, :blocked)}
+ let_it_be(:user) { create(:user, :blocked) }
it_behaves_like 'LFS http 401 response'
end
@@ -347,17 +347,17 @@ RSpec.describe 'Git LFS API and storage' do
end
context 'when user password is expired' do
- let_it_be(:user) { create(:user, password_expires_at: 1.minute.ago)}
+ let_it_be(:user) { create(:user, password_expires_at: 1.minute.ago) }
- let(:role) { :reporter}
+ let(:role) { :reporter }
it_behaves_like 'LFS http 401 response'
end
context 'when user is blocked' do
- let_it_be(:user) { create(:user, :blocked)}
+ let_it_be(:user) { create(:user, :blocked) }
- let(:role) { :reporter}
+ let(:role) { :reporter }
it_behaves_like 'LFS http 401 response'
end
@@ -1013,7 +1013,7 @@ RSpec.describe 'Git LFS API and storage' do
end
context 'when user is blocked' do
- let_it_be(:user) { create(:user, :blocked)}
+ let_it_be(:user) { create(:user, :blocked) }
it_behaves_like 'LFS http 401 response'
end
diff --git a/spec/requests/oauth/tokens_controller_spec.rb b/spec/requests/oauth/tokens_controller_spec.rb
index 3895304dbde..e4cb28cc42b 100644
--- a/spec/requests/oauth/tokens_controller_spec.rb
+++ b/spec/requests/oauth/tokens_controller_spec.rb
@@ -5,7 +5,7 @@ require 'spec_helper'
RSpec.describe Oauth::TokensController do
let(:cors_request_headers) { { 'Origin' => 'http://notgitlab.com' } }
let(:other_headers) { {} }
- let(:headers) { cors_request_headers.merge(other_headers)}
+ let(:headers) { cors_request_headers.merge(other_headers) }
let(:allowed_methods) { 'POST, OPTIONS' }
shared_examples 'cross-origin POST request' do
diff --git a/spec/tasks/gitlab/gitaly_rake_spec.rb b/spec/tasks/gitlab/gitaly_rake_spec.rb
index 70c7ddb1d6e..e57021f749b 100644
--- a/spec/tasks/gitlab/gitaly_rake_spec.rb
+++ b/spec/tasks/gitlab/gitaly_rake_spec.rb
@@ -66,7 +66,7 @@ RSpec.describe 'gitlab:gitaly namespace rake task', :silence_stdout do
.with(%w[which gmake])
.and_return(['/usr/bin/gmake', 0])
expect(Gitlab::Popen).to receive(:popen)
- .with(%w[gmake all git], nil, { "BUNDLE_GEMFILE" => nil, "RUBYOPT" => nil })
+ .with(%w[gmake clean-build all git], nil, { "BUNDLE_GEMFILE" => nil, "RUBYOPT" => nil })
.and_return(['ok', 0])
subject
@@ -78,7 +78,7 @@ RSpec.describe 'gitlab:gitaly namespace rake task', :silence_stdout do
.with(%w[which gmake])
.and_return(['/usr/bin/gmake', 0])
expect(Gitlab::Popen).to receive(:popen)
- .with(%w[gmake all git], nil, { "BUNDLE_GEMFILE" => nil, "RUBYOPT" => nil })
+ .with(%w[gmake clean-build all git], nil, { "BUNDLE_GEMFILE" => nil, "RUBYOPT" => nil })
.and_return(['output', 1])
expect { subject }.to raise_error /Gitaly failed to compile: output/
@@ -95,14 +95,14 @@ RSpec.describe 'gitlab:gitaly namespace rake task', :silence_stdout do
it 'calls make in the gitaly directory' do
expect(Gitlab::Popen).to receive(:popen)
- .with(%w[make all git], nil, { "BUNDLE_GEMFILE" => nil, "RUBYOPT" => nil })
+ .with(%w[make clean-build all git], nil, { "BUNDLE_GEMFILE" => nil, "RUBYOPT" => nil })
.and_return(['output', 0])
subject
end
context 'when Rails.env is test' do
- let(:command) { %w[make all git] }
+ let(:command) { %w[make clean-build all git] }
before do
stub_rails_env('test')
diff --git a/yarn.lock b/yarn.lock
index 4d7aae26d5b..939a19edafa 100644
--- a/yarn.lock
+++ b/yarn.lock
@@ -3458,11 +3458,6 @@ co@^4.6.0:
resolved "https://registry.yarnpkg.com/co/-/co-4.6.0.tgz#6ea6bdf3d853ae54ccb8e47bfa0bf3f9031fb184"
integrity sha1-bqa989hTrlTMuOR7+gvz+QMfsYQ=
-codemirror@^5.48.4:
- version "5.53.2"
- resolved "https://registry.yarnpkg.com/codemirror/-/codemirror-5.53.2.tgz#9799121cf8c50809cca487304e9de3a74d33f428"
- integrity sha512-wvSQKS4E+P8Fxn/AQ+tQtJnF1qH5UOlxtugFLpubEZ5jcdH2iXTVinb+Xc/4QjshuOxRm4fUsU2QPF1JJKiyXA==
-
codesandbox-api@0.0.23:
version "0.0.23"
resolved "https://registry.yarnpkg.com/codesandbox-api/-/codesandbox-api-0.0.23.tgz#bf650a21b5f3c2369e03f0c19d10b4e2ba255b4f"