You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
68 lines
1.0 KiB
68 lines
1.0 KiB
4 weeks ago
|
"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;
|