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.
		
		
		
		
		
			
		
			
				
					
					
						
							90 lines
						
					
					
						
							2.2 KiB
						
					
					
				
			
		
		
	
	
							90 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;
 |