| "use strict"; |
| |
| var pathUtils = require("../util/path"); |
| |
| |
| |
| /* |
| Get a path relative to the site path. |
| */ |
| function relatePath(absolutePath, siteAbsolutePath) |
| { |
| var relativePath = []; |
| |
| // At this point, it's related to the host/port |
| var related = true; |
| var parentIndex = -1; |
| |
| // Find parents |
| siteAbsolutePath.forEach( function(siteAbsoluteDir, i) |
| { |
| if (related) |
| { |
| if (absolutePath[i] !== siteAbsoluteDir) |
| { |
| related = false; |
| } |
| else |
| { |
| parentIndex = i; |
| } |
| } |
| |
| if (!related) |
| { |
| // Up one level |
| relativePath.push(".."); |
| } |
| }); |
| |
| // Form path |
| absolutePath.forEach( function(dir, i) |
| { |
| if (i > parentIndex) |
| { |
| relativePath.push(dir); |
| } |
| }); |
| |
| return relativePath; |
| } |
| |
| |
| |
| function relativize(urlObj, siteUrlObj, options) |
| { |
| if (urlObj.extra.relation.minimumScheme) |
| { |
| var pathArray = relatePath(urlObj.path.absolute.array, siteUrlObj.path.absolute.array); |
| |
| urlObj.path.relative.array = pathArray; |
| urlObj.path.relative.string = pathUtils.join(pathArray); |
| } |
| } |
| |
| |
| |
| module.exports = relativize; |