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