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 312ab88de4a0a8c586625868041b822f14a1c2d1..5eda0ff8b1a82f293e91cfd464d6404cd4d53830 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 e38be6720633c40cd158f6247d81222a7b907010..b9203daf0e8f3f50be3b715e8bdac8326f7a59d7 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 97bad375aea1f2c6b2bdcedff7af9232cf0c17f9..3f8019adcf96d906e7cd38619e9fb4bc49a21f06 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 597fa49120b7c9fc94ecb60cfa0cf4a092a08349..ca90eee69c7e3733ea684696e8c9cd4eb426672b 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/glfm_specification/example_snapshots/html.yml b/glfm_specification/example_snapshots/html.yml index 105a0d26409f9721cdb93052ae8ce6f3b54b3fcb..f89f03ecc31e430608aa5b14b7746a4412553d15 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"bar\baz">foo</a></p> + <p><a target="_blank" rel="noopener noreferrer nofollow" href="http://test.host/url%5Cbar*baz" title="foo"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><http://foo.bar.</code>baz>`</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](<foo>)</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 """>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 """>link</a></p> + <p><a target="_blank" rel="noopener noreferrer nofollow" href="http://test.host/url" title="title """ 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 "title "and" title")</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 "and" title">link</a></p> + <p><a target="_blank" rel="noopener noreferrer nofollow" href="http://test.host/url" title="title "and" 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 & 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 & tracks" decoding="async" class="lazy" data-src="train.jpg"></a></p> wysiwyg: |- - <p><img src="train.jpg" alt="foo bar" title="train & tracks"></p> + <p><img src="http://test.host/train.jpg" alt="foo bar" title="train & tracks" data-canonical-src="train.jpg"></p> <pre>[foo *bar*]: train.jpg "train & 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 & 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 & tracks" decoding="async" class="lazy" data-src="train.jpg"></a></p> wysiwyg: |- - <p><img src="train.jpg" alt="foo bar" title="train & tracks"></p> + <p><img src="http://test.host/train.jpg" alt="foo bar" title="train & tracks" data-canonical-src="train.jpg"></p> <pre>[foo *bar*]: train.jpg "train & 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 & tracks" decoding="async" class="lazy" data-src="train.jpg"></a></p> wysiwyg: |- - <p><img src="train.jpg" alt="foo bar" title="train & tracks"></p> + <p><img src="http://test.host/train.jpg" alt="foo bar" title="train & tracks" data-canonical-src="train.jpg"></p> <pre>[foobar]: train.jpg "train & 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&id=22&boolean">http://foo.bar.baz/test?q=hello&id=22&boolean</a></p> static: |- <p data-sourcepos="1:1-1:47" dir="auto"><a href="http://foo.bar.baz/test?q=hello&id=22&boolean" rel="nofollow noreferrer noopener" target="_blank">http://foo.bar.baz/test?q=hello&id=22&boolean</a></p> wysiwyg: |- - <p><a target="_blank" rel="noopener noreferrer nofollow" href="http://foo.bar.baz/test?q=hello&id=22&boolean">http://foo.bar.baz/test?q=hello&id=22&boolean</a></p> + <p><a target="_blank" rel="noopener noreferrer nofollow" href="http://foo.bar.baz/test?q=hello&id=22&boolean" canonicalsrc="http://foo.bar.baz/test?q=hello&id=22&boolean">http://foo.bar.baz/test?q=hello&id=22&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><http://foo.bar/baz bim></p> static: |- <p data-sourcepos="1:1-1:24" dir="auto"><<a href="http://foo.bar/baz" rel="nofollow noreferrer noopener" target="_blank">http://foo.bar/baz</a> bim></p> wysiwyg: |- - <p><<a target="_blank" rel="noopener noreferrer nofollow" href="http://foo.bar/baz">http://foo.bar/baz</a> bim></p> + <p><<a target="_blank" rel="noopener noreferrer nofollow" href="http://foo.bar/baz" canonicalsrc="http://foo.bar/baz">http://foo.bar/baz</a> bim></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><foo+@bar.example.com></p> static: |- <p data-sourcepos="1:1-1:23" 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__014: canonical: | <p><></p> @@ -7159,7 +7159,7 @@ static: |- <p data-sourcepos="1:1-1:18" dir="auto">< <a href="http://foo.bar" rel="nofollow noreferrer noopener" target="_blank">http://foo.bar</a> ></p> wysiwyg: |- - <p>< <a target="_blank" rel="noopener noreferrer nofollow" href="http://foo.bar">http://foo.bar</a> ></p> + <p>< <a target="_blank" rel="noopener noreferrer nofollow" href="http://foo.bar/" canonicalsrc="http://foo.bar">http://foo.bar</a> ></p> 06_09__inlines__autolinks__016: canonical: | <p><m:abc></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&hl=en">www.google.com/search?q=commonmark&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&hl=en" rel="nofollow noreferrer noopener" target="_blank">www.google.com/search?q=commonmark&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>&hl;</p> wysiwyg: |- - <p><a target="_blank" rel="noopener noreferrer nofollow" href="http://www.google.com/search?q=commonmark&hl=en">www.google.com/search?q=commonmark&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>&hl;</p> + <p><a target="_blank" rel="noopener noreferrer nofollow" href="http://www.google.com/search?q=commonmark&hl=en" canonicalsrc="http://www.google.com/search?q=commonmark&hl=en">www.google.com/search?q=commonmark&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>&hl;</p> 06_10__inlines__autolinks_extension__007: canonical: | <p><a href="http://www.commonmark.org/he">www.commonmark.org/he</a><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><lp</p> wysiwyg: |- - <p><a target="_blank" rel="noopener noreferrer nofollow" href="http://www.commonmark.org/he">www.commonmark.org/he</a><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><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 7cb4757b368b9a630d3cb59e181dba0749bb9e44..73fcef4dbc09db0e8ccdba52225fdf4b07a97b27 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/spec/frontend/content_editor/remark_markdown_processing_spec.js b/spec/frontend/content_editor/remark_markdown_processing_spec.js index ddf49a4c18eb1756b47c437a484394bc016530e8..e1de2823726fe2c1e638adaecf25b5aa72ecba92 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(''), 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 '), 'List item with an image', - image({ ...source(''), alt: 'bar', src: 'foo.png' }), + image({ + ...source(''), + alt: 'bar', + canonicalSrc: 'foo.png', + src: 'http://test.host/foo.png', + }), ), ), ), @@ -944,8 +966,17 @@ Paragraph paragraph( source('[](/uri)'), link( - { ...source('[](/uri)'), href: '/uri' }, - image({ ...source(''), src: 'moon.jpg', alt: 'moon' }), + { + ...source('[](/uri)'), + canonicalSrc: '/uri', + href: 'http://test.host/uri', + }, + image({ + ...source(''), + 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 422eb3f311b2fb40836cf6320d150c635803cf1c..d55e5fbadad1a57473206dc7918825d7a21f0698 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 766da7034d92888b9b58a80f1a77e4e1187c4d85..312e4f636c363a28b5e1082908904a3f8135a38f 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); + }); + }); });