保誠-保戶業務員媒合平台
HelenHuang
2022-06-09 9bdb95c9e34cef640534e5e5a1e2225a80442000
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;