| 'use strict' |
| |
| const { posix: path } = require('path') |
| |
| module.exports = (to, from, ctx) => { |
| if (!to) return '#' |
| // NOTE only legacy invocation provides both to and from |
| if (!ctx) from = (ctx = from).data.root.page.url |
| if (to.charAt() !== '/') return to |
| if (!from) return (ctx.data.root.site.path || '') + to |
| let hash = '' |
| const hashIdx = to.indexOf('#') |
| if (~hashIdx) { |
| hash = to.substr(hashIdx) |
| to = to.substr(0, hashIdx) |
| } |
| return to === from |
| ? hash || (isDir(to) ? './' : path.basename(to)) |
| : (path.relative(path.dirname(from + '.'), to) || '.') + (isDir(to) ? '/' + hash : hash) |
| } |
| |
| function isDir (str) { |
| return str.charAt(str.length - 1) === '/' |
| } |