diff --git a/polygerrit-ui/app/elements/shared/gr-linked-text/gr-linked-text.html b/polygerrit-ui/app/elements/shared/gr-linked-text/gr-linked-text.html index a0d9233603..0bd6e6d343 100644 --- a/polygerrit-ui/app/elements/shared/gr-linked-text/gr-linked-text.html +++ b/polygerrit-ui/app/elements/shared/gr-linked-text/gr-linked-text.html @@ -15,7 +15,9 @@ limitations under the License. --> + + diff --git a/polygerrit-ui/app/elements/shared/gr-linked-text/gr-linked-text_test.html b/polygerrit-ui/app/elements/shared/gr-linked-text/gr-linked-text_test.html index 52a7de01de..0bf752ee94 100644 --- a/polygerrit-ui/app/elements/shared/gr-linked-text/gr-linked-text_test.html +++ b/polygerrit-ui/app/elements/shared/gr-linked-text/gr-linked-text_test.html @@ -122,6 +122,24 @@ limitations under the License. assert.equal(linkEl.textContent, changeID); }); + test('Change-Id pattern was parsed and linked with base url', function() { + window.CANONICAL_PATH = '/r'; + + // "Change-Id:" pattern. + const changeID = 'I11d6a37f5e9b5df0486f6c922d8836dfa780e03e'; + const prefix = 'Change-Id: '; + element.content = prefix + changeID; + + const textNode = element.$.output.childNodes[0]; + const linkEl = element.$.output.childNodes[1]; + assert.equal(textNode.textContent, prefix); + const url = '/r/q/' + changeID; + assert.equal(linkEl.target, '_blank'); + // Since url is a path, the host is added automatically. + assert.isTrue(linkEl.href.endsWith(url)); + assert.equal(linkEl.textContent, changeID); + }); + test('Multiple matches', function() { element.content = 'Issue 3650\nIssue 3450'; var linkEl1 = element.$.output.childNodes[0]; diff --git a/polygerrit-ui/app/elements/shared/gr-linked-text/link-text-parser.js b/polygerrit-ui/app/elements/shared/gr-linked-text/link-text-parser.js index 8a489f44fd..526032ee0d 100644 --- a/polygerrit-ui/app/elements/shared/gr-linked-text/link-text-parser.js +++ b/polygerrit-ui/app/elements/shared/gr-linked-text/link-text-parser.js @@ -96,6 +96,10 @@ GrLinkTextParser.prototype.addLink = return; } if (!this.hasOverlap(position, length, outputArray)) { + const baseUrl = Gerrit.BaseUrlBehavior.getBaseUrl(); + if (!!baseUrl && href.startsWith('/') && !href.startsWith(baseUrl)) { + href = baseUrl + href; + } this.addItem(text, href, null, position, length, outputArray); } };