/
instant_search.js
109 lines (90 loc) · 2.99 KB
/
instant_search.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
(function($) {
var searchTimeout;
var locale = $('html').attr('lang');
var search = new k.Search('/' + locale + '/search');
var cxhr = new k.CachedXHR();
function hideContent() {
$('#main-content').hide();
$('#main-content').siblings('aside').hide();
$('#main-breadcrumbs').hide();
}
function showContent() {
$('#main-content').show();
$('#main-content').siblings('aside').show();
$('#main-breadcrumbs').show();
$('#instant-search-content').remove();
}
function render(data) {
var context = $.extend({}, data);
var base_url = '/' + locale + '/search?q=' + search.lastQuery;
base_url += '&' + search.serializeParams();
context['base_url'] = base_url;
if ($('#instant-search-content').length) {
var $searchContent = $('#instant-search-content');
} else {
var $searchContent = $('<div />').attr('id', 'instant-search-content');
$('#main-content').after($searchContent);
}
$searchContent.html(k.nunjucksEnv.render('search-results.html', context));
}
window.k.InstantSearchSettings = {
hideContent: hideContent,
showContent: showContent,
render: render,
searchClient: search
};
$(document).on('submit', '[data-instant-search="form"]', function(ev) {
ev.preventDefault();
});
$(document).on('keyup', '[data-instant-search="form"] input[type="search"]', function(ev) {
var $this = $(this);
var params = {
format: 'json'
};
if ($this.val().length === 0) {
if (searchTimeout) {
window.clearTimeout(searchTimeout);
}
window.k.InstantSearchSettings.showContent();
} else if ($this.val() !== search.lastQuery) {
if (searchTimeout) {
window.clearTimeout(searchTimeout);
}
$this.closest('form').find('input').each(function () {
if ($(this).attr('type') === 'submit') return true;
if ($(this).attr('type') === 'button') return true;
if ($(this).attr('name') === 'q') return true;
params[$(this).attr('name')] = $(this).val();
});
searchTimeout = setTimeout(function () {
search.setParams(params);
search.query($this.val(), k.InstantSearchSettings.render);
}, 200);
k.InstantSearchSettings.hideContent();
}
});
$(document).on('click', '[data-instant-search="link"]', function(ev) {
ev.preventDefault();
var $this = $(this);
var setParams = $this.data('instant-search-set-params');
if (setParams) {
setParams = setParams.split('&');
$(setParams).each(function() {
var p = this.split('=');
search.setParam(p.shift(), p.join('='));
});
}
var unsetParams = $this.data('instant-search-unset-params');
if (unsetParams) {
unsetParams = unsetParams.split('&');
$(unsetParams).each(function() {
search.unsetParam(this);
});
}
cxhr.request($this.data('href'), {
data: {format: 'json'},
dataType: 'json',
success: k.InstantSearchSettings.render
});
});
})(jQuery);