Fix anchor breaking links resolution

This commit is contained in:
Samy Pessé
2016-05-24 15:32:30 +02:00
parent 721a75309b
commit fb930d889f
3 changed files with 25 additions and 4 deletions
-1
View File
@@ -4,7 +4,6 @@ var Promise = require('../utils/promise');
var error = require('../utils/error');
var timing = require('../utils/timing');
var Parse = require('../parse');
var Templating = require('../templating');
var JSONUtils = require('../json');
var createTemplateEngine = require('./createTemplateEngine');
+17 -3
View File
@@ -4,7 +4,7 @@ var resolveLinks = require('../resolveLinks');
describe('resolveLinks', function() {
function resolveFileBasic(href) {
return href;
return 'fakeDir/' + href;
}
function resolveFileCustom(href) {
@@ -24,7 +24,7 @@ describe('resolveLinks', function() {
return resolveLinks('hello.md', resolveFileBasic, $)
.then(function() {
var link = $('a');
expect(link.attr('href')).toBe('test/cool.md');
expect(link.attr('href')).toBe('fakeDir/test/cool.md');
});
});
@@ -34,7 +34,21 @@ describe('resolveLinks', function() {
return resolveLinks('afolder/hello.md', resolveFileBasic, $)
.then(function() {
var link = $('a');
expect(link.attr('href')).toBe('../test/cool.md');
expect(link.attr('href')).toBe('../fakeDir/test/cool.md');
});
});
});
describe('Anchor', function() {
var TEST = '<p>This is a <a href="test/cool.md#an-anchor"></a></p>';
it('should prevent anchors in resolution', function() {
var $ = cheerio.load(TEST);
return resolveLinks('hello.md', resolveFileCustom, $)
.then(function() {
var link = $('a');
expect(link.attr('href')).toBe('test/cool.html#an-anchor');
});
});
});
+8
View File
@@ -1,4 +1,5 @@
var path = require('path');
var url = require('url');
var LocationUtils = require('../../utils/location');
var editHTMLElement = require('./editHTMLElement');
@@ -27,6 +28,10 @@ function resolveLinks(currentFile, resolveFile, $) {
return;
}
// Split anchor
var parsed = url.parse(href);
href = parsed.pathname;
// Calcul absolute path for this
href = LocationUtils.toAbsolute(href, currentDirectory, '.');
@@ -36,6 +41,9 @@ function resolveLinks(currentFile, resolveFile, $) {
// Convert back to relative
href = LocationUtils.relative(currentDirectory, href);
// Add back anchor
href = href + (parsed.hash || '');
$a.attr('href', href);
});
}