diff options
author | Samy Pessé <samypesse@gmail.com> | 2016-05-24 15:32:30 +0200 |
---|---|---|
committer | Samy Pessé <samypesse@gmail.com> | 2016-05-24 15:32:30 +0200 |
commit | fb930d889fcb0c630e7ee51ecec4bf4350e29ce4 (patch) | |
tree | 7cd65d007df4ea19a2002abb6e151b1d6ee91067 | |
parent | 721a75309bf3d796d5569d1d06473724c4445a88 (diff) | |
download | gitbook-fb930d889fcb0c630e7ee51ecec4bf4350e29ce4.zip gitbook-fb930d889fcb0c630e7ee51ecec4bf4350e29ce4.tar.gz gitbook-fb930d889fcb0c630e7ee51ecec4bf4350e29ce4.tar.bz2 |
Fix anchor breaking links resolution
-rw-r--r-- | lib/output/generatePage.js | 1 | ||||
-rw-r--r-- | lib/output/modifiers/__tests__/resolveLinks.js | 20 | ||||
-rw-r--r-- | lib/output/modifiers/resolveLinks.js | 8 |
3 files changed, 25 insertions, 4 deletions
diff --git a/lib/output/generatePage.js b/lib/output/generatePage.js index 44c98b9..fa6fc0e 100644 --- a/lib/output/generatePage.js +++ b/lib/output/generatePage.js @@ -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'); diff --git a/lib/output/modifiers/__tests__/resolveLinks.js b/lib/output/modifiers/__tests__/resolveLinks.js index 9b7621b..e42b619 100644 --- a/lib/output/modifiers/__tests__/resolveLinks.js +++ b/lib/output/modifiers/__tests__/resolveLinks.js @@ -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'); }); }); }); diff --git a/lib/output/modifiers/resolveLinks.js b/lib/output/modifiers/resolveLinks.js index 116ce8b..907a667 100644 --- a/lib/output/modifiers/resolveLinks.js +++ b/lib/output/modifiers/resolveLinks.js @@ -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); }); } |