aboutsummaryrefslogtreecommitdiff
path: root/node_modules/relateurl/lib/relate/absolutize.js
diff options
context:
space:
mode:
Diffstat (limited to 'node_modules/relateurl/lib/relate/absolutize.js')
-rw-r--r--node_modules/relateurl/lib/relate/absolutize.js89
1 files changed, 89 insertions, 0 deletions
diff --git a/node_modules/relateurl/lib/relate/absolutize.js b/node_modules/relateurl/lib/relate/absolutize.js
new file mode 100644
index 00000000..2b535a59
--- /dev/null
+++ b/node_modules/relateurl/lib/relate/absolutize.js
@@ -0,0 +1,89 @@
+"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;