-
Notifications
You must be signed in to change notification settings - Fork 2
/
Copy pathmain.js
145 lines (120 loc) · 5.83 KB
/
main.js
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
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
define([
'uri/URI'
], function(Uri) {
function makeShorterFromLeft (urlPart, prefix, maxPartLength) {
if (!urlPart) {
return;
}
if (!prefix){
prefix = '...';
}
let shortPart = '';
if ( urlPart.length <= maxPartLength ){
shortPart = urlPart;
} else {
shortPart = prefix + urlPart.substr(-(maxPartLength - prefix.length));
}
return shortPart;
};
function makeShorterFromRight(urlPart, suffix, maxPartLength){
if (!urlPart) {
return;
}
if (!suffix){
suffix = '...';
}
let shortPart = '';
if ( urlPart.length <= maxPartLength ){
shortPart = urlPart;
} else {
shortPart = urlPart.substr(0,(maxPartLength - suffix.length)) + suffix;
}
return shortPart;
};
function makePartShorter(urlPart, searchValue, prefix, maxPartLength) {
if (!urlPart || !searchValue) {
return;
}
if (!prefix){
prefix = '...';
}
searchValue = searchValue.toLowerCase();
let shortPart = '';
let indexOfFirstInPart = urlPart.toLowerCase().indexOf(searchValue);
let startIndex = ( indexOfFirstInPart >= 5 ) ? indexOfFirstInPart - 5 : indexOfFirstInPart;
shortPart = prefix + urlPart.substr(startIndex, maxPartLength - prefix.length );
return shortPart;
};
return {
makeURLShorter : function(link, searchValue, maxLength) {
if (!link) {
return
}
searchValue = searchValue.toLowerCase();
maxLength = maxLength || 38;
let url = new Uri(link);
let urlParts = {
domain : url.authority(),
path : url.path(),
query : url.search(),
fragment : url.hash()
};
let linkNoProtocol = urlParts.domain + urlParts.path + urlParts.query + urlParts.fragment;
let shortUrl = linkNoProtocol;
if (!searchValue.length) {
return shortUrl;
}
if ((linkNoProtocol.toLowerCase().indexOf(searchValue) + searchValue.length) <= maxLength ) {
shortUrl = linkNoProtocol;
} else if (urlParts.domain && urlParts.domain.toLowerCase().indexOf(searchValue) !== -1) {
let maxDomainLength = maxLength;
//short urlParts.domain
shortDomain = makePartShorter(urlParts.domain, searchValue, '...', maxDomainLength);
shortUrl = shortDomain + urlParts.path + urlParts.query + urlParts.fragment;
} else if (urlParts.path && urlParts.path.toLowerCase().indexOf(searchValue) !== -1){
let maxDomainLength = parseInt(maxLength/2);
let maxPathLength = parseInt(maxLength/2);
let shortDomain = makeShorterFromLeft(urlParts.domain, '...', maxDomainLength);
// shorting only urlParts.domain
if ((urlParts.path.toLowerCase().indexOf(searchValue) + searchValue.length) <= maxPathLength ) {
shortUrl = shortDomain + urlParts.path + urlParts.query + urlParts.fragment;
} else {
// shortnig urlParts.domain and urlParts.path
let shortPath = makePartShorter(urlParts.path, searchValue, '/...', maxPathLength);
shortUrl = shortDomain + shortPath + urlParts.query + urlParts.fragment;
}
} else if (urlParts.query && urlParts.query.toLowerCase().indexOf(searchValue) !== -1){
let maxDomainLength = parseInt(maxLength/3);
let maxPathLength = parseInt(maxLength/3);
let maxQueryLength = parseInt(maxLength/3);
let shortDomain = makeShorterFromLeft(urlParts.domain, '...', maxDomainLength);
let shortPath = makeShorterFromRight(urlParts.path, '...', maxPathLength);
// shorting urlParts.domain and urlParts.path
if ((urlParts.query.toLowerCase().indexOf(searchValue) + searchValue.length) <= maxQueryLength ) {
shortUrl = shortDomain + shortPath + urlParts.query + urlParts.fragment;
} else {
maxQueryLength = urlParts.query.length;
let shortQuery = makePartShorter(urlParts.query, searchValue, '?...', maxQueryLength);
shortUrl = shortDomain + shortPath + shortQuery + urlParts.fragment;
}
} else if (urlParts.fragment && urlParts.fragment.toLowerCase().indexOf(searchValue) !== -1){
let maxDomainLength = parseInt(maxLength/4);
let maxPathLength = parseInt(maxLength/4);
let maxQueryLength = parseInt(maxLength/4);
let maxFragmentLength = parseInt(maxLength/4);
let shortDomain = makeShorterFromLeft(urlParts.domain, '...', maxDomainLength);
let shortPath = makeShorterFromRight(urlParts.path, '...', maxPathLength);
let shortQuery = makeShorterFromRight(urlParts.query, '...', maxQueryLength);
// shorting urlParts.domain and urlParts.path and urlParts.query
if (( urlParts.fragment.toLowerCase().indexOf(searchValue) + searchValue.length) <= maxQueryLength ) {
shortUrl = shortDomain + shortPath + shortQuery + urlParts.fragment;
} else {
maxFragmentLength = urlParts.fragment.length;
let shortFragment = makePartShorter(urlParts.fragment, searchValue, '#...', maxFragmentLength);
shortUrl = shortDomain + shortPath + + shortQuery + shortFragment;
}
}
return shortUrl;
}
};
});