| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889 | "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;
 |