Merge "Allow commitLink replacements overlap"
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 7feaa51..90b09ab 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
@@ -175,5 +175,28 @@
assert.equal(element.$.output.innerHTML, 'foo:baz');
});
+ test('overlapping links', function() {
+ element.config = {
+ b1: {
+ match: '(B:\\s*)(\\d+)',
+ html: '$1<a href="ftp://foo/$2">$2</a>',
+ },
+ b2: {
+ match: '(B:\\s*\\d+\\s*,\\s*)(\\d+)',
+ html: '$1<a href="ftp://foo/$2">$2</a>',
+ },
+ };
+ element.content = '- B: 123, 45';
+ var links = Polymer.dom(element.root).querySelectorAll('a');
+
+ assert.equal(links.length, 2);
+ assert.equal(element.$$('span').textContent, '- B: 123, 45');
+
+ assert.equal(links[0].href, 'ftp://foo/123');
+ assert.equal(links[0].textContent, '123');
+
+ assert.equal(links[1].href, 'ftp://foo/45');
+ assert.equal(links[1].textContent, '45');
+ });
});
</script>
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 303a9cc..b28097a 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
@@ -165,12 +165,27 @@
var result = match[0].replace(pattern,
patterns[p].html || patterns[p].link);
+ // Skip portion of replacement string that is equal to original.
+ for (var i = 0; i < result.length; i++) {
+ if (result[i] !== match[0][i]) {
+ break;
+ }
+ }
+ result = result.slice(i);
+
if (patterns[p].html) {
this.addHTML(
- result, susbtrIndex + match.index, match[0].length, outputArray);
+ result,
+ susbtrIndex + match.index + i,
+ match[0].length - i,
+ outputArray);
} else if (patterns[p].link) {
- this.addLink(match[0], result,
- susbtrIndex + match.index, match[0].length, outputArray);
+ this.addLink(
+ match[0],
+ result,
+ susbtrIndex + match.index + i,
+ match[0].length - i,
+ outputArray);
} else {
throw Error('linkconfig entry ' + p +
' doesn’t contain a link or html attribute.');