-
Notifications
You must be signed in to change notification settings - Fork 1
/
bookmarklet.js
87 lines (68 loc) · 1.79 KB
/
bookmarklet.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
(function(w){
var location = w.location;
function isHotelPage(url){
return url.indexOf('www.booking.com/hotel') > -1 ||
url.indexOf('localhost:8000') > -1;
}
function openTab(url){
window.open(url, '_blank');
}
function addDays(date, days){
var result = new Date(date);
result.setDate(result.getDate() + days);
return result.toISOString().substring(0, 10);
}
function parseUrlParams(urlParams){
return urlParams
.slice(1)
.split(';')
.reduce(function(acc, cur){
var arr = cur.split('=');
acc[arr[0]] = arr[1];
return acc;
}, {});
}
function serializeUrlParams(urlParams){
var WHITELISTED_PARAMS = [
'checkin',
'checkout',
'dest_type',
'dest_id'
];
return Object.keys(urlParams)
.filter(function(k){
return WHITELISTED_PARAMS.includes(k);
})
.map(function(k){
return [k,urlParams[k]].join('=')
})
.join(';');
}
function shiftDateParams(urlParams, days){
var p = parseUrlParams(urlParams);
p['checkin'] = addDays(p['checkin'], days);
p['checkout'] = addDays(p['checkout'], days);
return serializeUrlParams(p);
}
function getHotelUrl(url, urlParams){
return location.protocol +
"//" + location.host +
"" + location.pathname +
'?' + urlParams +
'#availability';
}
function goToFlexDate(location, days){
console.log(location.search);
var params = shiftDateParams(location.search, days);
var url = getHotelUrl(location, params);
console.log(params);
return openTab( url );
}
function init(days){
if( !isHotelPage(location.href) ){ return; }
goToFlexDate(location, days);
}
w.bFlexDates = {
init: init
};
})(window);