You can not select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
		
		
		
		
		
			
		
			
				
					
					
						
							94 lines
						
					
					
						
							1.8 KiB
						
					
					
				
			
		
		
	
	
							94 lines
						
					
					
						
							1.8 KiB
						
					
					
				"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;
 | 
						|
 |