aboutsummaryrefslogtreecommitdiff
path: root/node_modules/relateurl/lib/relate/relativize.js
diff options
context:
space:
mode:
Diffstat (limited to 'node_modules/relateurl/lib/relate/relativize.js')
-rw-r--r--node_modules/relateurl/lib/relate/relativize.js67
1 files changed, 67 insertions, 0 deletions
diff --git a/node_modules/relateurl/lib/relate/relativize.js b/node_modules/relateurl/lib/relate/relativize.js
new file mode 100644
index 00000000..9af9a101
--- /dev/null
+++ b/node_modules/relateurl/lib/relate/relativize.js
@@ -0,0 +1,67 @@
+"use strict";
+
+var pathUtils = require("../util/path");
+
+
+
+/*
+ Get a path relative to the site path.
+*/
+function relatePath(absolutePath, siteAbsolutePath)
+{
+ var relativePath = [];
+
+ // At this point, it's related to the host/port
+ var related = true;
+ var parentIndex = -1;
+
+ // Find parents
+ siteAbsolutePath.forEach( function(siteAbsoluteDir, i)
+ {
+ if (related)
+ {
+ if (absolutePath[i] !== siteAbsoluteDir)
+ {
+ related = false;
+ }
+ else
+ {
+ parentIndex = i;
+ }
+ }
+
+ if (!related)
+ {
+ // Up one level
+ relativePath.push("..");
+ }
+ });
+
+ // Form path
+ absolutePath.forEach( function(dir, i)
+ {
+ if (i > parentIndex)
+ {
+ relativePath.push(dir);
+ }
+ });
+
+ return relativePath;
+}
+
+
+
+function relativize(urlObj, siteUrlObj, options)
+{
+ if (urlObj.extra.relation.minimumScheme)
+ {
+ var pathArray = relatePath(urlObj.path.absolute.array, siteUrlObj.path.absolute.array);
+
+ urlObj.path.relative.array = pathArray;
+ urlObj.path.relative.string = pathUtils.join(pathArray);
+ }
+}
+
+
+
+module.exports = relativize;