mirror of
https://github.com/jsdoc/jsdoc.git
synced 2025-12-08 19:46:11 +00:00
fix broken hrefs in output files (#264)
This commit is contained in:
parent
43a50ac01a
commit
2de416da7d
@ -420,7 +420,7 @@ exports.prune = function(data) {
|
||||
return data;
|
||||
};
|
||||
|
||||
exports.registerLink = function(longname, url) {
|
||||
var registerLink = exports.registerLink = function(longname, url) {
|
||||
linkMap.longnameToUrl[longname] = url;
|
||||
linkMap.urlToLongname[url] = longname;
|
||||
};
|
||||
@ -535,21 +535,39 @@ exports.resolveLinks = function(str) {
|
||||
return str;
|
||||
};
|
||||
|
||||
/**
|
||||
* Get a longname's filename if one has been registered; otherwise, generate a unique filename, then
|
||||
* register the filename.
|
||||
* @private
|
||||
*/
|
||||
function getFilename(longname) {
|
||||
var url;
|
||||
|
||||
if ( longnameToUrl[longname] && hasOwnProp.call(longnameToUrl, longname) ) {
|
||||
url = longnameToUrl[longname];
|
||||
} else {
|
||||
url = getUniqueFilename(longname);
|
||||
registerLink(longname, url);
|
||||
}
|
||||
|
||||
return url;
|
||||
}
|
||||
|
||||
/** Turn a doclet into a URL. */
|
||||
exports.createLink = function(doclet) {
|
||||
var url = '',
|
||||
longname,
|
||||
filename;
|
||||
var url = '';
|
||||
var longname;
|
||||
var filename;
|
||||
|
||||
if (containers.indexOf(doclet.kind) < 0) {
|
||||
longname = doclet.longname;
|
||||
filename = getUniqueFilename(doclet.memberof || exports.globalName);
|
||||
filename = getFilename(doclet.memberof || exports.globalName);
|
||||
|
||||
url = filename + '#' + getNamespace(doclet.kind) + doclet.name;
|
||||
}
|
||||
else {
|
||||
longname = doclet.longname;
|
||||
url = getUniqueFilename(longname);
|
||||
url = getFilename(longname);
|
||||
}
|
||||
|
||||
return url;
|
||||
|
||||
@ -196,8 +196,11 @@ exports.publish = function(taffyData, opts, tutorials) {
|
||||
|
||||
// claim some special filenames in advance, so the All-Powerful Overseer of Filename Uniqueness
|
||||
// doesn't try to hand them out later
|
||||
helper.getUniqueFilename('index');
|
||||
helper.getUniqueFilename('global');
|
||||
var indexUrl = helper.getUniqueFilename('index');
|
||||
// don't call registerLink() on this one! 'index' is also a valid longname
|
||||
|
||||
var globalUrl = helper.getUniqueFilename('global');
|
||||
helper.registerLink('global', globalUrl);
|
||||
|
||||
// set up templating
|
||||
view.layout = 'layout.tmpl';
|
||||
@ -300,7 +303,7 @@ exports.publish = function(taffyData, opts, tutorials) {
|
||||
// once for all
|
||||
view.nav = buildNav(members);
|
||||
|
||||
if (members.globals.length) { generate('Global', members.globals, 'global' + helper.fileExtension); }
|
||||
if (members.globals.length) { generate('Global', members.globals, globalUrl); }
|
||||
|
||||
// index page displays information from package.json and lists files
|
||||
var files = find({kind: 'file'}),
|
||||
@ -310,7 +313,7 @@ exports.publish = function(taffyData, opts, tutorials) {
|
||||
packages.concat(
|
||||
[{kind: 'mainpage', readme: opts.readme, longname: (opts.mainpagetitle) ? opts.mainpagetitle : 'Main Page'}]
|
||||
).concat(files),
|
||||
'index' + helper.fileExtension);
|
||||
indexUrl);
|
||||
|
||||
// set up the lists that we'll use to generate pages
|
||||
var classes = taffy(members.classes);
|
||||
|
||||
@ -427,9 +427,7 @@ describe("jsdoc/util/templateHelper", function() {
|
||||
});
|
||||
});
|
||||
|
||||
// disabled because Jasmine appears to execute this code twice, which causes createLink to
|
||||
// return an unexpected variation on the name the second time
|
||||
xdescribe("createLink", function() {
|
||||
describe("createLink", function() {
|
||||
it('should create a url for a simple global.', function() {
|
||||
var mockDoclet = {
|
||||
kind: 'function',
|
||||
@ -464,16 +462,23 @@ describe("jsdoc/util/templateHelper", function() {
|
||||
expect(url).toEqual('ns.html#foo');
|
||||
});
|
||||
|
||||
it('should create a url for a member of a nested namespace.', function() {
|
||||
var mockDoclet = {
|
||||
kind: 'function',
|
||||
longname: 'ns1.ns2.foo',
|
||||
name: 'foo',
|
||||
memberof: 'ns1.ns2'
|
||||
},
|
||||
url = helper.createLink(mockDoclet);
|
||||
var nestedNamespaceDoclet = {
|
||||
kind: 'function',
|
||||
longname: 'ns1.ns2.foo',
|
||||
name: 'foo',
|
||||
memberof: 'ns1.ns2'
|
||||
};
|
||||
var nestedNamespaceUrl;
|
||||
|
||||
expect(url).toEqual('ns1.ns2.html#foo');
|
||||
it('should create a url for a member of a nested namespace.', function() {
|
||||
nestedNamespaceUrl = helper.createLink(nestedNamespaceDoclet);
|
||||
|
||||
expect(nestedNamespaceUrl).toEqual('ns1.ns2.html#foo');
|
||||
});
|
||||
|
||||
it('should return the same value when called twice with the same doclet.', function() {
|
||||
var newUrl = helper.createLink(nestedNamespaceDoclet);
|
||||
expect(newUrl).toEqual(nestedNamespaceUrl);
|
||||
});
|
||||
|
||||
it('should create a url for a name with invalid characters using a digest.', function() {
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user