Blame view

node_modules/relateurl/lib/index.js 1.76 KB
aaac7fed   liuqimichale   add
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
  "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;