|
|
- "use strict";
-
- var constants = require("./constants");
- var formatUrl = require("./format");
- var getOptions = require("./options");
- var objUtils = require("./util/object");
- var parseUrl = require("./parse");
- var relateUrl = require("./relate");
-
-
-
- function RelateUrl(from, options)
- {
- this.options = getOptions(options,
- {
- defaultPorts: {ftp:21, http:80, https:443},
- directoryIndexes: ["index.html"],
- ignore_www: false,
- output: RelateUrl.SHORTEST,
- rejectedSchemes: ["data","javascript","mailto"],
- removeAuth: false,
- removeDirectoryIndexes: true,
- removeEmptyQueries: false,
- removeRootTrailingSlash: true,
- schemeRelative: true,
- site: undefined,
- slashesDenoteHost: true
- });
-
- this.from = parseUrl.from(from, this.options, null);
- }
-
-
-
- /*
- Usage: instance=new RelateUrl(); instance.relate();
- */
- RelateUrl.prototype.relate = function(from, to, options)
- {
- // relate(to,options)
- if ( objUtils.isPlainObject(to) )
- {
- options = to;
- to = from;
- from = null;
- }
- // relate(to)
- else if (!to)
- {
- to = from;
- from = null;
- }
-
- options = getOptions(options, this.options);
- from = from || options.site;
- from = parseUrl.from(from, options, this.from);
-
- if (!from || !from.href)
- {
- throw new Error("from value not defined.");
- }
- else if (from.extra.hrefInfo.minimumPathOnly)
- {
- throw new Error("from value supplied is not absolute: "+from.href);
- }
-
- to = parseUrl.to(to, options);
-
- if (to.valid===false) return to.href;
-
- to = relateUrl(from, to, options);
- to = formatUrl(to, options);
-
- return to;
- }
-
-
-
- /*
- Usage: RelateUrl.relate();
- */
- RelateUrl.relate = function(from, to, options)
- {
- return new RelateUrl().relate(from, to, options);
- }
-
-
-
- // Make constants accessible from API
- objUtils.shallowMerge(RelateUrl, constants);
-
-
-
- module.exports = RelateUrl;
|