re-indented algolia_search.js so that it uses 4-space indents.
This commit is contained in:
parent
3bb55fd3db
commit
305d9b44ec
@ -1,359 +1,393 @@
|
|||||||
$(document).ready(function() {
|
$(document).ready(function() {
|
||||||
|
|
||||||
/********************
|
/********************
|
||||||
* INITIALIZATION
|
* INITIALIZATION
|
||||||
* *******************/
|
* *******************/
|
||||||
|
|
||||||
var HITS_PER_PAGE = 25;
|
var HITS_PER_PAGE = 25;
|
||||||
var MAX_VALUES_PER_FACET = 30;
|
var MAX_VALUES_PER_FACET = 30;
|
||||||
|
|
||||||
// DOM binding
|
// DOM binding
|
||||||
var $inputField = $('#q');
|
var $inputField = $('#q');
|
||||||
var $hits = $('#hits');
|
var $hits = $('#hits');
|
||||||
var $stats = $('#stats');
|
var $stats = $('#stats');
|
||||||
var $facets = $('#facets');
|
var $facets = $('#facets');
|
||||||
var $pagination = $('#pagination');
|
var $pagination = $('#pagination');
|
||||||
|
|
||||||
// Templates binding
|
// Templates binding
|
||||||
var hitTemplate = Hogan.compile($('#hit-template').text());
|
var hitTemplate = Hogan.compile($('#hit-template').text());
|
||||||
var statsTemplate = Hogan.compile($('#stats-template').text());
|
var statsTemplate = Hogan.compile($('#stats-template').text());
|
||||||
var facetTemplate = Hogan.compile($('#facet-template').text());
|
var facetTemplate = Hogan.compile($('#facet-template').text());
|
||||||
var sliderTemplate = Hogan.compile($('#slider-template').text());
|
var sliderTemplate = Hogan.compile($('#slider-template').text());
|
||||||
var paginationTemplate = Hogan.compile($('#pagination-template').text());
|
var paginationTemplate = Hogan.compile($('#pagination-template').text());
|
||||||
|
|
||||||
// Client initialization
|
// Client initialization
|
||||||
var algolia = algoliasearch(APPLICATION_ID, SEARCH_ONLY_API_KEY);
|
var algolia = algoliasearch(APPLICATION_ID, SEARCH_ONLY_API_KEY);
|
||||||
|
|
||||||
// Helper initialization
|
// Helper initialization
|
||||||
var params = {
|
var params = {
|
||||||
hitsPerPage: HITS_PER_PAGE,
|
hitsPerPage: HITS_PER_PAGE,
|
||||||
maxValuesPerFacet: MAX_VALUES_PER_FACET,
|
maxValuesPerFacet: MAX_VALUES_PER_FACET,
|
||||||
facets: $.map(FACET_CONFIG, function(facet) { return !facet.disjunctive ? facet.name : null; }),
|
facets: $.map(FACET_CONFIG, function(facet) {
|
||||||
disjunctiveFacets: $.map(FACET_CONFIG, function(facet) { return facet.disjunctive ? facet.name : null; })
|
return !facet.disjunctive ? facet.name : null;
|
||||||
};
|
}),
|
||||||
|
disjunctiveFacets: $.map(FACET_CONFIG, function(facet) {
|
||||||
// Setup the search helper
|
return facet.disjunctive ? facet.name : null;
|
||||||
var helper = algoliasearchHelper(algolia, INDEX_NAME, params);
|
})
|
||||||
|
|
||||||
// Check if we passed hidden facets in the FACET_CONFIG
|
|
||||||
var result = $.grep(FACET_CONFIG, function(e){ return e.hidden && e.hidden == true; });
|
|
||||||
for (var i = 0; i < result.length; i++) {
|
|
||||||
var f = result[i];
|
|
||||||
helper.addFacetRefinement(f.name, f.value);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
// Input binding
|
|
||||||
$inputField.on('keyup change', function() {
|
|
||||||
var query = $inputField.val();
|
|
||||||
toggleIconEmptyInput(!query.trim());
|
|
||||||
helper.setQuery(query).search();
|
|
||||||
}).focus();
|
|
||||||
|
|
||||||
// AlgoliaHelper events
|
|
||||||
helper.on('change', function(state) {
|
|
||||||
setURLParams(state);
|
|
||||||
});
|
|
||||||
helper.on('error', function(error) {
|
|
||||||
console.log(error);
|
|
||||||
});
|
|
||||||
helper.on('result', function(content, state) {
|
|
||||||
renderStats(content);
|
|
||||||
renderHits(content);
|
|
||||||
renderFacets(content, state);
|
|
||||||
renderPagination(content);
|
|
||||||
bindSearchObjects();
|
|
||||||
|
|
||||||
renderFirstHit($(hits).children('.search-hit:first'));
|
|
||||||
});
|
|
||||||
|
|
||||||
/************
|
|
||||||
* SEARCH
|
|
||||||
* ***********/
|
|
||||||
|
|
||||||
function renderFirstHit(firstHit) {
|
|
||||||
|
|
||||||
firstHit.addClass('active');
|
|
||||||
firstHit.find('#search-loading').addClass('active');
|
|
||||||
|
|
||||||
var getNode = setTimeout(function(){
|
|
||||||
$.get('/nodes/' + firstHit.attr('data-hit-id') + '/view', function(dataHtml){
|
|
||||||
$('#search-hit-container').html(dataHtml);
|
|
||||||
})
|
|
||||||
.done(function(){
|
|
||||||
$('.search-loading').removeClass('active');
|
|
||||||
$('#search-error').hide();
|
|
||||||
$('#search-hit-container').show();
|
|
||||||
|
|
||||||
clearTimeout(getNode);
|
|
||||||
})
|
|
||||||
.fail(function(data){
|
|
||||||
$('.search-loading').removeClass('active');
|
|
||||||
$('#search-hit-container').hide();
|
|
||||||
$('#search-error').show().html('Houston!\n\n' + data.status + ' ' + data.statusText);
|
|
||||||
});
|
|
||||||
}, 1000);
|
|
||||||
};
|
|
||||||
|
|
||||||
// Initial search
|
|
||||||
initWithUrlParams();
|
|
||||||
helper.search();
|
|
||||||
|
|
||||||
function convertTimestamp(timestamp) {
|
|
||||||
var d = new Date(timestamp * 1000), // Convert the passed timestamp to milliseconds
|
|
||||||
yyyy = d.getFullYear(),
|
|
||||||
mm = ('0' + (d.getMonth() + 1)).slice(-2), // Months are zero based. Add leading 0.
|
|
||||||
dd = ('0' + d.getDate()).slice(-2), // Add leading 0.
|
|
||||||
time;
|
|
||||||
|
|
||||||
time = dd + '/' + mm + '/' + yyyy;
|
|
||||||
|
|
||||||
return time;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
function renderStats(content) {
|
|
||||||
var stats = {
|
|
||||||
nbHits: numberWithDelimiter(content.nbHits),
|
|
||||||
processingTimeMS: content.processingTimeMS,
|
|
||||||
nbHits_plural: content.nbHits !== 1
|
|
||||||
};
|
};
|
||||||
$stats.html(statsTemplate.render(stats));
|
|
||||||
}
|
|
||||||
|
|
||||||
function renderHits(content) {
|
// Setup the search helper
|
||||||
var hitsHtml = '';
|
var helper = algoliasearchHelper(algolia, INDEX_NAME, params);
|
||||||
for (var i = 0; i < content.hits.length; ++i) {
|
|
||||||
// console.log(content.hits[i]);
|
|
||||||
var created = content.hits[i]['created'];
|
|
||||||
if (created) {
|
|
||||||
content.hits[i]['created'] = convertTimestamp(created);
|
|
||||||
}
|
|
||||||
var updated = content.hits[i]['updated'];
|
|
||||||
if (updated) {
|
|
||||||
content.hits[i]['updated'] = convertTimestamp(updated);
|
|
||||||
}
|
|
||||||
hitsHtml += hitTemplate.render(content.hits[i]);
|
|
||||||
}
|
|
||||||
if (content.hits.length === 0) hitsHtml = '<p id="no-hits">We didn\'t find any items. Try searching something else.</p>';
|
|
||||||
$hits.html(hitsHtml);
|
|
||||||
}
|
|
||||||
|
|
||||||
function renderFacets(content, state) {
|
// Check if we passed hidden facets in the FACET_CONFIG
|
||||||
// If no results
|
var result = $.grep(FACET_CONFIG, function(e) {
|
||||||
if (content.hits.length === 0) {
|
return e.hidden && e.hidden == true;
|
||||||
$facets.empty();
|
});
|
||||||
return;
|
for (var i = 0; i < result.length; i++) {
|
||||||
|
var f = result[i];
|
||||||
|
helper.addFacetRefinement(f.name, f.value);
|
||||||
}
|
}
|
||||||
|
|
||||||
// Process facets
|
|
||||||
var facets = [];
|
|
||||||
for (var facetIndex = 0; facetIndex < FACET_CONFIG.length; ++facetIndex) {
|
|
||||||
var facetParams = FACET_CONFIG[facetIndex];
|
|
||||||
if (facetParams.hidden) {
|
|
||||||
continue
|
|
||||||
}
|
|
||||||
var facetResult = content.getFacetByName(facetParams.name);
|
|
||||||
if (facetResult) {
|
|
||||||
var facetContent = {};
|
|
||||||
facetContent.facet = facetParams.name;
|
|
||||||
facetContent.title = facetParams.title;
|
|
||||||
facetContent.type = facetParams.type;
|
|
||||||
|
|
||||||
if (facetParams.type === 'slider') {
|
// Input binding
|
||||||
// if the facet is a slider
|
$inputField.on('keyup change', function() {
|
||||||
facetContent.min = facetResult.stats.min;
|
var query = $inputField.val();
|
||||||
facetContent.max = facetResult.stats.max;
|
toggleIconEmptyInput(!query.trim());
|
||||||
var valueMin = state.getNumericRefinement(facetParams.name, '>=') || facetResult.stats.min;
|
helper.setQuery(query).search();
|
||||||
var valueMax = state.getNumericRefinement(facetParams.name, '<=') || facetResult.stats.max;
|
}).focus();
|
||||||
valueMin = Math.min(facetContent.max, Math.max(facetContent.min, valueMin));
|
|
||||||
valueMax = Math.min(facetContent.max, Math.max(facetContent.min, valueMax));
|
|
||||||
facetContent.values = [valueMin, valueMax];
|
|
||||||
} else {
|
|
||||||
// format and sort the facet values
|
|
||||||
var values = [];
|
|
||||||
for (var v in facetResult.data) {
|
|
||||||
var label = '';
|
|
||||||
if (v === 'true') { label = 'Yes'; }
|
|
||||||
else if (v === 'false') { label = 'No'; }
|
|
||||||
// Remove any underscore from the value
|
|
||||||
else { label = v.replace(/_/g," "); }
|
|
||||||
values.push({ label: label, value: v, count: facetResult.data[v], refined: helper.isRefined(facetParams.name, v) });
|
|
||||||
}
|
|
||||||
var sortFunction = facetParams.sortFunction || sortByCountDesc;
|
|
||||||
if (facetParams.topListIfRefined) sortFunction = sortByRefined(sortFunction);
|
|
||||||
values.sort(sortFunction);
|
|
||||||
|
|
||||||
facetContent.values = values.slice(0, 10);
|
// AlgoliaHelper events
|
||||||
facetContent.has_other_values = values.length > 10;
|
helper.on('change', function(state) {
|
||||||
facetContent.other_values = values.slice(10);
|
setURLParams(state);
|
||||||
facetContent.disjunctive = facetParams.disjunctive;
|
});
|
||||||
|
helper.on('error', function(error) {
|
||||||
|
console.log(error);
|
||||||
|
});
|
||||||
|
helper.on('result', function(content, state) {
|
||||||
|
renderStats(content);
|
||||||
|
renderHits(content);
|
||||||
|
renderFacets(content, state);
|
||||||
|
renderPagination(content);
|
||||||
|
bindSearchObjects();
|
||||||
|
|
||||||
|
renderFirstHit($(hits).children('.search-hit:first'));
|
||||||
|
});
|
||||||
|
|
||||||
|
/************
|
||||||
|
* SEARCH
|
||||||
|
* ***********/
|
||||||
|
|
||||||
|
function renderFirstHit(firstHit) {
|
||||||
|
|
||||||
|
firstHit.addClass('active');
|
||||||
|
firstHit.find('#search-loading').addClass('active');
|
||||||
|
|
||||||
|
var getNode = setTimeout(function() {
|
||||||
|
$.get('/nodes/' + firstHit.attr('data-hit-id') + '/view', function(dataHtml) {
|
||||||
|
$('#search-hit-container').html(dataHtml);
|
||||||
|
})
|
||||||
|
.done(function() {
|
||||||
|
$('.search-loading').removeClass('active');
|
||||||
|
$('#search-error').hide();
|
||||||
|
$('#search-hit-container').show();
|
||||||
|
|
||||||
|
clearTimeout(getNode);
|
||||||
|
})
|
||||||
|
.fail(function(data) {
|
||||||
|
$('.search-loading').removeClass('active');
|
||||||
|
$('#search-hit-container').hide();
|
||||||
|
$('#search-error').show().html('Houston!\n\n' + data.status + ' ' + data.statusText);
|
||||||
|
});
|
||||||
|
}, 1000);
|
||||||
|
};
|
||||||
|
|
||||||
|
// Initial search
|
||||||
|
initWithUrlParams();
|
||||||
|
helper.search();
|
||||||
|
|
||||||
|
function convertTimestamp(timestamp) {
|
||||||
|
var d = new Date(timestamp * 1000), // Convert the passed timestamp to milliseconds
|
||||||
|
yyyy = d.getFullYear(),
|
||||||
|
mm = ('0' + (d.getMonth() + 1)).slice(-2), // Months are zero based. Add leading 0.
|
||||||
|
dd = ('0' + d.getDate()).slice(-2), // Add leading 0.
|
||||||
|
time;
|
||||||
|
|
||||||
|
time = dd + '/' + mm + '/' + yyyy;
|
||||||
|
|
||||||
|
return time;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
function renderStats(content) {
|
||||||
|
var stats = {
|
||||||
|
nbHits: numberWithDelimiter(content.nbHits),
|
||||||
|
processingTimeMS: content.processingTimeMS,
|
||||||
|
nbHits_plural: content.nbHits !== 1
|
||||||
|
};
|
||||||
|
$stats.html(statsTemplate.render(stats));
|
||||||
|
}
|
||||||
|
|
||||||
|
function renderHits(content) {
|
||||||
|
var hitsHtml = '';
|
||||||
|
for (var i = 0; i < content.hits.length; ++i) {
|
||||||
|
// console.log(content.hits[i]);
|
||||||
|
var created = content.hits[i]['created'];
|
||||||
|
if (created) {
|
||||||
|
content.hits[i]['created'] = convertTimestamp(created);
|
||||||
|
}
|
||||||
|
var updated = content.hits[i]['updated'];
|
||||||
|
if (updated) {
|
||||||
|
content.hits[i]['updated'] = convertTimestamp(updated);
|
||||||
|
}
|
||||||
|
hitsHtml += hitTemplate.render(content.hits[i]);
|
||||||
}
|
}
|
||||||
facets.push(facetContent);
|
if (content.hits.length === 0) hitsHtml = '<p id="no-hits">We didn\'t find any items. Try searching something else.</p>';
|
||||||
}
|
$hits.html(hitsHtml);
|
||||||
}
|
|
||||||
// Display facets
|
|
||||||
var facetsHtml = '';
|
|
||||||
for (var indexFacet = 0; indexFacet < facets.length; ++indexFacet) {
|
|
||||||
var facet = facets[indexFacet];
|
|
||||||
if (facet.type && facet.type === 'slider') facetsHtml += sliderTemplate.render(facet);
|
|
||||||
else facetsHtml += facetTemplate.render(facet);
|
|
||||||
}
|
|
||||||
$facets.html(facetsHtml);
|
|
||||||
}
|
|
||||||
|
|
||||||
function renderPagination(content) {
|
|
||||||
// If no results
|
|
||||||
if (content.hits.length === 0) {
|
|
||||||
$pagination.empty();
|
|
||||||
return;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
var maxPages = 2;
|
function renderFacets(content, state) {
|
||||||
|
// If no results
|
||||||
|
if (content.hits.length === 0) {
|
||||||
|
$facets.empty();
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
// Process pagination
|
// Process facets
|
||||||
var pages = [];
|
var facets = [];
|
||||||
if (content.page > maxPages) {
|
for (var facetIndex = 0; facetIndex < FACET_CONFIG.length; ++facetIndex) {
|
||||||
pages.push({ current: false, number: 1 });
|
var facetParams = FACET_CONFIG[facetIndex];
|
||||||
// They don't really add much...
|
if (facetParams.hidden) {
|
||||||
// pages.push({ current: false, number: '...', disabled: true });
|
continue
|
||||||
|
}
|
||||||
|
var facetResult = content.getFacetByName(facetParams.name);
|
||||||
|
if (facetResult) {
|
||||||
|
var facetContent = {};
|
||||||
|
facetContent.facet = facetParams.name;
|
||||||
|
facetContent.title = facetParams.title;
|
||||||
|
facetContent.type = facetParams.type;
|
||||||
|
|
||||||
|
if (facetParams.type === 'slider') {
|
||||||
|
// if the facet is a slider
|
||||||
|
facetContent.min = facetResult.stats.min;
|
||||||
|
facetContent.max = facetResult.stats.max;
|
||||||
|
var valueMin = state.getNumericRefinement(facetParams.name, '>=') || facetResult.stats.min;
|
||||||
|
var valueMax = state.getNumericRefinement(facetParams.name, '<=') || facetResult.stats.max;
|
||||||
|
valueMin = Math.min(facetContent.max, Math.max(facetContent.min, valueMin));
|
||||||
|
valueMax = Math.min(facetContent.max, Math.max(facetContent.min, valueMax));
|
||||||
|
facetContent.values = [valueMin, valueMax];
|
||||||
|
} else {
|
||||||
|
// format and sort the facet values
|
||||||
|
var values = [];
|
||||||
|
for (var v in facetResult.data) {
|
||||||
|
var label = '';
|
||||||
|
if (v === 'true') {
|
||||||
|
label = 'Yes';
|
||||||
|
} else if (v === 'false') {
|
||||||
|
label = 'No';
|
||||||
|
}
|
||||||
|
// Remove any underscore from the value
|
||||||
|
else {
|
||||||
|
label = v.replace(/_/g, " ");
|
||||||
|
}
|
||||||
|
values.push({
|
||||||
|
label: label,
|
||||||
|
value: v,
|
||||||
|
count: facetResult.data[v],
|
||||||
|
refined: helper.isRefined(facetParams.name, v)
|
||||||
|
});
|
||||||
|
}
|
||||||
|
var sortFunction = facetParams.sortFunction || sortByCountDesc;
|
||||||
|
if (facetParams.topListIfRefined) sortFunction = sortByRefined(sortFunction);
|
||||||
|
values.sort(sortFunction);
|
||||||
|
|
||||||
|
facetContent.values = values.slice(0, 10);
|
||||||
|
facetContent.has_other_values = values.length > 10;
|
||||||
|
facetContent.other_values = values.slice(10);
|
||||||
|
facetContent.disjunctive = facetParams.disjunctive;
|
||||||
|
}
|
||||||
|
facets.push(facetContent);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
// Display facets
|
||||||
|
var facetsHtml = '';
|
||||||
|
for (var indexFacet = 0; indexFacet < facets.length; ++indexFacet) {
|
||||||
|
var facet = facets[indexFacet];
|
||||||
|
if (facet.type && facet.type === 'slider') facetsHtml += sliderTemplate.render(facet);
|
||||||
|
else facetsHtml += facetTemplate.render(facet);
|
||||||
|
}
|
||||||
|
$facets.html(facetsHtml);
|
||||||
}
|
}
|
||||||
for (var p = content.page - maxPages; p < content.page + maxPages; ++p) {
|
|
||||||
if (p < 0 || p >= content.nbPages) {
|
function renderPagination(content) {
|
||||||
continue;
|
// If no results
|
||||||
}
|
if (content.hits.length === 0) {
|
||||||
pages.push({ current: content.page === p, number: (p + 1) });
|
$pagination.empty();
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
var maxPages = 2;
|
||||||
|
|
||||||
|
// Process pagination
|
||||||
|
var pages = [];
|
||||||
|
if (content.page > maxPages) {
|
||||||
|
pages.push({
|
||||||
|
current: false,
|
||||||
|
number: 1
|
||||||
|
});
|
||||||
|
// They don't really add much...
|
||||||
|
// pages.push({ current: false, number: '...', disabled: true });
|
||||||
|
}
|
||||||
|
for (var p = content.page - maxPages; p < content.page + maxPages; ++p) {
|
||||||
|
if (p < 0 || p >= content.nbPages) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
pages.push({
|
||||||
|
current: content.page === p,
|
||||||
|
number: (p + 1)
|
||||||
|
});
|
||||||
|
}
|
||||||
|
if (content.page + maxPages < content.nbPages) {
|
||||||
|
// They don't really add much...
|
||||||
|
// pages.push({ current: false, number: '...', disabled: true });
|
||||||
|
pages.push({
|
||||||
|
current: false,
|
||||||
|
number: content.nbPages
|
||||||
|
});
|
||||||
|
}
|
||||||
|
var pagination = {
|
||||||
|
pages: pages,
|
||||||
|
prev_page: (content.page > 0 ? content.page : false),
|
||||||
|
next_page: (content.page + 1 < content.nbPages ? content.page + 2 : false)
|
||||||
|
};
|
||||||
|
// Display pagination
|
||||||
|
$pagination.html(paginationTemplate.render(pagination));
|
||||||
}
|
}
|
||||||
if (content.page + maxPages < content.nbPages) {
|
|
||||||
// They don't really add much...
|
|
||||||
// pages.push({ current: false, number: '...', disabled: true });
|
// Event bindings
|
||||||
pages.push({ current: false, number: content.nbPages });
|
function bindSearchObjects() {
|
||||||
|
// Slider binding
|
||||||
|
// $('#customerReviewCount-slider').slider().on('slideStop', function(ev) {
|
||||||
|
// helper.addNumericRefinement('customerReviewCount', '>=', ev.value[0]).search();
|
||||||
|
// helper.addNumericRefinement('customerReviewCount', '<=', ev.value[1]).search();
|
||||||
|
// });
|
||||||
|
|
||||||
|
// Pimp checkboxes
|
||||||
|
// $('input[type="checkbox"]').checkbox();
|
||||||
}
|
}
|
||||||
var pagination = {
|
|
||||||
pages: pages,
|
// Click binding
|
||||||
prev_page: (content.page > 0 ? content.page : false),
|
$(document).on('click', '.show-more, .show-less', function(e) {
|
||||||
next_page: (content.page + 1 < content.nbPages ? content.page + 2 : false)
|
e.preventDefault();
|
||||||
|
$(this).closest('ul').find('.show-more').toggle();
|
||||||
|
$(this).closest('ul').find('.show-less').toggle();
|
||||||
|
return false;
|
||||||
|
});
|
||||||
|
$(document).on('click', '.toggleRefine', function() {
|
||||||
|
helper.toggleRefine($(this).data('facet'), $(this).data('value')).search();
|
||||||
|
return false;
|
||||||
|
});
|
||||||
|
$(document).on('click', '.gotoPage', function() {
|
||||||
|
helper.setCurrentPage(+$(this).data('page') - 1).search();
|
||||||
|
$("html, body").animate({
|
||||||
|
scrollTop: 0
|
||||||
|
}, '500', 'swing');
|
||||||
|
return false;
|
||||||
|
});
|
||||||
|
$(document).on('click', '.sortBy', function() {
|
||||||
|
$(this).closest('.btn-group').find('.sort-by').text($(this).text());
|
||||||
|
helper.setIndex(INDEX_NAME + $(this).data('index-suffix')).search();
|
||||||
|
return false;
|
||||||
|
});
|
||||||
|
$(document).on('click', '#input-loop', function() {
|
||||||
|
$inputField.val('').change();
|
||||||
|
});
|
||||||
|
|
||||||
|
// Dynamic styles
|
||||||
|
$('#facets').on("mouseenter mouseleave", ".button-checkbox", function(e) {
|
||||||
|
$(this).parent().find('.facet_link').toggleClass("hover");
|
||||||
|
});
|
||||||
|
$('#facets').on("mouseenter mouseleave", ".facet_link", function(e) {
|
||||||
|
$(this).parent().find('.button-checkbox button.btn').toggleClass("hover");
|
||||||
|
});
|
||||||
|
|
||||||
|
|
||||||
|
/************
|
||||||
|
* HELPERS
|
||||||
|
* ***********/
|
||||||
|
|
||||||
|
function toggleIconEmptyInput(isEmpty) {
|
||||||
|
if (isEmpty) {
|
||||||
|
$('#input-loop').addClass('glyphicon-loop');
|
||||||
|
$('#input-loop').removeClass('glyphicon-remove');
|
||||||
|
} else {
|
||||||
|
$('#input-loop').removeClass('glyphicon-loop');
|
||||||
|
$('#input-loop').addClass('glyphicon-remove');
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
function numberWithDelimiter(number, delimiter) {
|
||||||
|
number = number + '';
|
||||||
|
delimiter = delimiter || ',';
|
||||||
|
var split = number.split('.');
|
||||||
|
split[0] = split[0].replace(/(\d)(?=(\d\d\d)+(?!\d))/g, '$1' + delimiter);
|
||||||
|
return split.join('.');
|
||||||
|
}
|
||||||
|
var sortByCountDesc = function sortByCountDesc(a, b) {
|
||||||
|
return b.count - a.count;
|
||||||
};
|
};
|
||||||
// Display pagination
|
var sortByName = function sortByName(a, b) {
|
||||||
$pagination.html(paginationTemplate.render(pagination));
|
return a.value.localeCompare(b.value);
|
||||||
}
|
};
|
||||||
|
var sortByRefined = function sortByRefined(sortFunction) {
|
||||||
|
return function(a, b) {
|
||||||
// Event bindings
|
if (a.refined !== b.refined) {
|
||||||
function bindSearchObjects() {
|
if (a.refined) return -1;
|
||||||
// Slider binding
|
if (b.refined) return 1;
|
||||||
// $('#customerReviewCount-slider').slider().on('slideStop', function(ev) {
|
}
|
||||||
// helper.addNumericRefinement('customerReviewCount', '>=', ev.value[0]).search();
|
return sortFunction(a, b);
|
||||||
// helper.addNumericRefinement('customerReviewCount', '<=', ev.value[1]).search();
|
};
|
||||||
// });
|
|
||||||
|
|
||||||
// Pimp checkboxes
|
|
||||||
// $('input[type="checkbox"]').checkbox();
|
|
||||||
}
|
|
||||||
|
|
||||||
// Click binding
|
|
||||||
$(document).on('click','.show-more, .show-less',function(e) {
|
|
||||||
e.preventDefault();
|
|
||||||
$(this).closest('ul').find('.show-more').toggle();
|
|
||||||
$(this).closest('ul').find('.show-less').toggle();
|
|
||||||
return false;
|
|
||||||
});
|
|
||||||
$(document).on('click','.toggleRefine',function() {
|
|
||||||
helper.toggleRefine($(this).data('facet'), $(this).data('value')).search();
|
|
||||||
return false;
|
|
||||||
});
|
|
||||||
$(document).on('click','.gotoPage',function() {
|
|
||||||
helper.setCurrentPage(+$(this).data('page') - 1).search();
|
|
||||||
$("html, body").animate({scrollTop:0}, '500', 'swing');
|
|
||||||
return false;
|
|
||||||
});
|
|
||||||
$(document).on('click','.sortBy',function() {
|
|
||||||
$(this).closest('.btn-group').find('.sort-by').text($(this).text());
|
|
||||||
helper.setIndex(INDEX_NAME + $(this).data('index-suffix')).search();
|
|
||||||
return false;
|
|
||||||
});
|
|
||||||
$(document).on('click','#input-loop',function() {
|
|
||||||
$inputField.val('').change();
|
|
||||||
});
|
|
||||||
|
|
||||||
// Dynamic styles
|
|
||||||
$('#facets').on("mouseenter mouseleave", ".button-checkbox", function(e){
|
|
||||||
$(this).parent().find('.facet_link').toggleClass("hover");
|
|
||||||
});
|
|
||||||
$('#facets').on("mouseenter mouseleave", ".facet_link", function(e){
|
|
||||||
$(this).parent().find('.button-checkbox button.btn').toggleClass("hover");
|
|
||||||
});
|
|
||||||
|
|
||||||
|
|
||||||
/************
|
|
||||||
* HELPERS
|
|
||||||
* ***********/
|
|
||||||
|
|
||||||
function toggleIconEmptyInput(isEmpty) {
|
|
||||||
if(isEmpty) {
|
|
||||||
$('#input-loop').addClass('glyphicon-loop');
|
|
||||||
$('#input-loop').removeClass('glyphicon-remove');
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
$('#input-loop').removeClass('glyphicon-loop');
|
|
||||||
$('#input-loop').addClass('glyphicon-remove');
|
|
||||||
}
|
|
||||||
}
|
|
||||||
function numberWithDelimiter(number, delimiter) {
|
|
||||||
number = number + '';
|
|
||||||
delimiter = delimiter || ',';
|
|
||||||
var split = number.split('.');
|
|
||||||
split[0] = split[0].replace(/(\d)(?=(\d\d\d)+(?!\d))/g, '$1' + delimiter);
|
|
||||||
return split.join('.');
|
|
||||||
}
|
|
||||||
var sortByCountDesc = function sortByCountDesc (a, b) { return b.count - a.count; };
|
|
||||||
var sortByName = function sortByName (a, b) {
|
|
||||||
return a.value.localeCompare(b.value);
|
|
||||||
};
|
|
||||||
var sortByRefined = function sortByRefined (sortFunction) {
|
|
||||||
return function (a, b) {
|
|
||||||
if (a.refined !== b.refined) {
|
|
||||||
if (a.refined) return -1;
|
|
||||||
if (b.refined) return 1;
|
|
||||||
}
|
|
||||||
return sortFunction(a, b);
|
|
||||||
};
|
};
|
||||||
};
|
|
||||||
function initWithUrlParams() {
|
|
||||||
var sPageURL = location.hash;
|
|
||||||
if (!sPageURL || sPageURL.length === 0) { return true; }
|
|
||||||
var sURLVariables = sPageURL.split('&');
|
|
||||||
if (!sURLVariables || sURLVariables.length === 0) { return true; }
|
|
||||||
var query = decodeURIComponent(sURLVariables[0].split('=')[1]);
|
|
||||||
$inputField.val(query);
|
|
||||||
helper.setQuery(query);
|
|
||||||
for (var i = 2; i < sURLVariables.length; i++) {
|
|
||||||
var sParameterName = sURLVariables[i].split('=');
|
|
||||||
var facet = decodeURIComponent(sParameterName[0]);
|
|
||||||
var value = decodeURIComponent(sParameterName[1]);
|
|
||||||
helper.toggleRefine(facet, value, false);
|
|
||||||
}
|
|
||||||
// Page has to be set in the end to avoid being overwritten
|
|
||||||
var page = decodeURIComponent(sURLVariables[1].split('=')[1])-1;
|
|
||||||
helper.setCurrentPage(page);
|
|
||||||
|
|
||||||
}
|
function initWithUrlParams() {
|
||||||
function setURLParams(state) {
|
var sPageURL = location.hash;
|
||||||
var urlParams = '#';
|
if (!sPageURL || sPageURL.length === 0) {
|
||||||
var currentQuery = state.query;
|
return true;
|
||||||
urlParams += 'q=' + encodeURIComponent(currentQuery);
|
}
|
||||||
var currentPage = state.page+1;
|
var sURLVariables = sPageURL.split('&');
|
||||||
urlParams += '&page=' + currentPage;
|
if (!sURLVariables || sURLVariables.length === 0) {
|
||||||
for (var facetRefine in state.facetsRefinements) {
|
return true;
|
||||||
urlParams += '&' + encodeURIComponent(facetRefine) + '=' + encodeURIComponent(state.facetsRefinements[facetRefine]);
|
}
|
||||||
|
var query = decodeURIComponent(sURLVariables[0].split('=')[1]);
|
||||||
|
$inputField.val(query);
|
||||||
|
helper.setQuery(query);
|
||||||
|
for (var i = 2; i < sURLVariables.length; i++) {
|
||||||
|
var sParameterName = sURLVariables[i].split('=');
|
||||||
|
var facet = decodeURIComponent(sParameterName[0]);
|
||||||
|
var value = decodeURIComponent(sParameterName[1]);
|
||||||
|
helper.toggleRefine(facet, value, false);
|
||||||
|
}
|
||||||
|
// Page has to be set in the end to avoid being overwritten
|
||||||
|
var page = decodeURIComponent(sURLVariables[1].split('=')[1]) - 1;
|
||||||
|
helper.setCurrentPage(page);
|
||||||
|
|
||||||
}
|
}
|
||||||
for (var disjunctiveFacetrefine in state.disjunctiveFacetsRefinements) {
|
|
||||||
for (var value in state.disjunctiveFacetsRefinements[disjunctiveFacetrefine]) {
|
function setURLParams(state) {
|
||||||
urlParams += '&' + encodeURIComponent(disjunctiveFacetrefine) + '=' + encodeURIComponent(state.disjunctiveFacetsRefinements[disjunctiveFacetrefine][value]);
|
var urlParams = '#';
|
||||||
}
|
var currentQuery = state.query;
|
||||||
|
urlParams += 'q=' + encodeURIComponent(currentQuery);
|
||||||
|
var currentPage = state.page + 1;
|
||||||
|
urlParams += '&page=' + currentPage;
|
||||||
|
for (var facetRefine in state.facetsRefinements) {
|
||||||
|
urlParams += '&' + encodeURIComponent(facetRefine) + '=' + encodeURIComponent(state.facetsRefinements[facetRefine]);
|
||||||
|
}
|
||||||
|
for (var disjunctiveFacetrefine in state.disjunctiveFacetsRefinements) {
|
||||||
|
for (var value in state.disjunctiveFacetsRefinements[disjunctiveFacetrefine]) {
|
||||||
|
urlParams += '&' + encodeURIComponent(disjunctiveFacetrefine) + '=' + encodeURIComponent(state.disjunctiveFacetsRefinements[disjunctiveFacetrefine][value]);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
location.replace(urlParams);
|
||||||
}
|
}
|
||||||
location.replace(urlParams);
|
|
||||||
}
|
|
||||||
|
|
||||||
});
|
});
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user