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