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.
89 lines
2.2 KiB
89 lines
2.2 KiB
"use strict"; |
|
|
|
var findRelation = require("./findRelation"); |
|
var objUtils = require("../util/object"); |
|
var pathUtils = require("../util/path"); |
|
|
|
|
|
|
|
function absolutize(urlObj, siteUrlObj, options) |
|
{ |
|
findRelation.upToPath(urlObj, siteUrlObj, options); |
|
|
|
// Fill in relative URLs |
|
if (urlObj.extra.relation.minimumScheme) urlObj.scheme = siteUrlObj.scheme; |
|
if (urlObj.extra.relation.minimumAuth) urlObj.auth = siteUrlObj.auth; |
|
if (urlObj.extra.relation.minimumHost) urlObj.host = objUtils.clone(siteUrlObj.host); |
|
if (urlObj.extra.relation.minimumPort) copyPort(urlObj, siteUrlObj); |
|
if (urlObj.extra.relation.minimumScheme) copyPath(urlObj, siteUrlObj); |
|
|
|
// Check remaining relativeness now that path has been copied and/or resolved |
|
findRelation.pathOn(urlObj, siteUrlObj, options); |
|
|
|
// Fill in relative URLs |
|
if (urlObj.extra.relation.minimumResource) copyResource(urlObj, siteUrlObj); |
|
if (urlObj.extra.relation.minimumQuery) urlObj.query = objUtils.clone(siteUrlObj.query); |
|
if (urlObj.extra.relation.minimumHash) urlObj.hash = siteUrlObj.hash; |
|
} |
|
|
|
|
|
|
|
/* |
|
Get an absolute path that's relative to site url. |
|
*/ |
|
function copyPath(urlObj, siteUrlObj) |
|
{ |
|
if (urlObj.extra.relation.maximumHost || !urlObj.extra.hrefInfo.minimumResourceOnly) |
|
{ |
|
var pathArray = urlObj.path.absolute.array; |
|
var pathString = "/"; |
|
|
|
// If not erroneous URL |
|
if (pathArray) |
|
{ |
|
// If is relative path |
|
if (urlObj.extra.hrefInfo.minimumPathOnly && urlObj.path.absolute.string.indexOf("/")!==0) |
|
{ |
|
// Append path to site path |
|
pathArray = siteUrlObj.path.absolute.array.concat(pathArray); |
|
} |
|
|
|
pathArray = pathUtils.resolveDotSegments(pathArray); |
|
pathString += pathUtils.join(pathArray); |
|
} |
|
else |
|
{ |
|
pathArray = []; |
|
} |
|
|
|
urlObj.path.absolute.array = pathArray; |
|
urlObj.path.absolute.string = pathString; |
|
} |
|
else |
|
{ |
|
// Resource-, query- or hash-only or empty |
|
urlObj.path = objUtils.clone(siteUrlObj.path); |
|
} |
|
} |
|
|
|
|
|
|
|
function copyPort(urlObj, siteUrlObj) |
|
{ |
|
urlObj.port = siteUrlObj.port; |
|
|
|
urlObj.extra.portIsDefault = siteUrlObj.extra.portIsDefault; |
|
} |
|
|
|
|
|
|
|
function copyResource(urlObj, siteUrlObj) |
|
{ |
|
urlObj.resource = siteUrlObj.resource; |
|
|
|
urlObj.extra.resourceIsIndex = siteUrlObj.extra.resourceIsIndex; |
|
} |
|
|
|
|
|
|
|
module.exports = absolutize;
|
|
|