From ecbb74a88bf069238a8b62d4ca488d7efe28f10d Mon Sep 17 00:00:00 2001 From: Dan Allen Date: Thu, 8 Feb 2018 00:50:09 -0700 Subject: [PATCH] correctly relativize URL when target ends with a fragment identifier --- src/helpers/relativize.js | 19 ++++++++++++++----- 1 file changed, 14 insertions(+), 5 deletions(-) diff --git a/src/helpers/relativize.js b/src/helpers/relativize.js index abab118..84615c9 100644 --- a/src/helpers/relativize.js +++ b/src/helpers/relativize.js @@ -4,11 +4,20 @@ const { posix: path } = require('path') // TODO memoize module.exports = (from, to) => { - if (to === '#') { - return to - } else if (to.charAt(to.length - 1) === '/') { - return from === to ? './' : path.relative(path.dirname(from + '.'), to) + '/' + if (to.charAt() === '#') return to + let hash = '' + const hashIdx = to.indexOf('#') + if (~hashIdx) { + hash = to.substr(hashIdx) + to = to.substr(0, hashIdx) + } + if (from === to) { + return hash || (isDir(to) ? './' : path.basename(to)) } else { - return path.relative(path.dirname(from + '.'), to) + return path.relative(path.dirname(from + '.'), to) + (isDir(to) ? '/' : '') + hash } } + +function isDir (str) { + return str.charAt(str.length - 1) === '/' +} -- 2.11.0