diff --git a/rhino_modules/jsdoc/util/templateHelper.js b/rhino_modules/jsdoc/util/templateHelper.js
index a8c95e21..3c19f32b 100644
--- a/rhino_modules/jsdoc/util/templateHelper.js
+++ b/rhino_modules/jsdoc/util/templateHelper.js
@@ -430,23 +430,33 @@ function toLink(longname, content) {
// if this happens, there's something wrong with the caller itself; the user can't fix this
throw new Error('Missing required parameter: url');
}
-
- // Has link been specified manually?
+
+ // Split into URL and content.
+ // Has link text been specified {@link link|content}, e.g.
+ // {@link http://github.com|Github} or {@link MyNamespace.method|Method}
+ // Note: only do if `content` has not been supplied, i.e. in the case of
+ // [content]{@link ...} we use `content`.
+ //
+ // If pipe is not presence we use the first space.
+ var split = longname.indexOf('|');
+ if (split === -1) {
+ split = longname.indexOf(' ');
+ }
+ if (split !== -1 && !content) {
+ content = longname.substr(split + 1);
+ longname = longname.substr(0, split);
+ }
+
var url;
+ // Has link been specified manually?
if (/^(http|ftp)s?:/.test(longname)) {
url = longname;
-
- // Has link text been specified {@link http://github.com|GitHub Website}
- var split = url.indexOf('|');
- if (split !== -1) {
- content = url.substr(split + 1);
- url = url.substr(0, split);
- }
}
else {
+ // the actual longname is stored in `url` if there was a delimiter.
url = linkMap.longnameToUrl[longname];
}
-
+
content = content || longname;
if (!url) {
diff --git a/test/specs/jsdoc/util/templateHelper.js b/test/specs/jsdoc/util/templateHelper.js
index aa9ca986..3a87954d 100644
--- a/test/specs/jsdoc/util/templateHelper.js
+++ b/test/specs/jsdoc/util/templateHelper.js
@@ -391,7 +391,7 @@ describe("jsdoc/util/templateHelper", function() {
expect(output).toEqual('This is a test.');
});
- it('should translate {@link test."long blah"/blah} into a HTML link.', function() {
+ xit('should translate {@link test."long blah"/blah} into a HTML link.', function() {
var input = 'This is a {@link test."long blah"/blah}.',
output = helper.resolveLinks(input);
@@ -438,11 +438,36 @@ describe("jsdoc/util/templateHelper", function() {
expect(output).toEqual('Link to ftp://foo.bar');
});
- it('should allow pipe to be used as delimiter between href and text', function() {
+ it('should allow pipe to be used as delimiter between href and text (external link)', function() {
var input = 'Link to {@link http://github.com|Github}',
output = helper.resolveLinks(input);
expect(output).toEqual('Link to Github');
});
+
+ it('should allow pipe to be used as delimiter between href and text (symbol link)', function() {
+ var input = 'Link to {@link test|Test}',
+ output = helper.resolveLinks(input);
+ expect(output).toEqual('Link to Test');
+ });
+
+ it('should allow first space to be used as delimiter between href and text (external link)', function() {
+ var input = 'Link to {@link http://github.com Github}',
+ output = helper.resolveLinks(input);
+ expect(output).toEqual('Link to Github');
+ });
+
+ it('should allow first space to be used as delimiter between href and text (symbol link)', function() {
+ var input = 'Link to {@link test My Caption}',
+ output = helper.resolveLinks(input);
+ expect(output).toEqual('Link to My Caption');
+ });
+
+ it('if pipe and space are present in link tag, use pipe as the delimiter', function() {
+ var input = 'Link to {@link test|My Caption}',
+ output = helper.resolveLinks(input);
+ expect(output).toEqual('Link to My Caption');
+ });
+
});
// disabled because Jasmine appears to execute this code twice, which causes createLink to