-
Chris Hallberg authored
- Adds new configuration setting to pop up lightbox to explore facet lists more deeply; currently supported by both Summon and Solr.
c5c21ca3
Code owners
Assign users and groups as approvers for specific file changes. Learn more.
facets.js 5.68 KiB
/*global htmlEncode, VuFind */
function buildFacetNodes(data, currentPath, allowExclude, excludeTitle, counts)
{
var json = [];
$(data).each(function() {
var html = '';
if (!this.isApplied && counts) {
html = '<span class="badge" style="float: right">' + this.count.toString().replace(/\B(?=(\d{3})+\b)/g, VuFind.translate('number_thousands_separator'));
if (allowExclude) {
var excludeURL = currentPath + this.exclude;
excludeURL.replace("'", "\\'");
// Just to be safe
html += ' <a href="' + excludeURL + '" onclick="document.location.href=\'' + excludeURL + '\'; return false;" title="' + htmlEncode(excludeTitle) + '"><i class="fa fa-times" title="'+VuFind.translate('Selected')+'"></i></a>';
}
html += '</span>';
}
var url = currentPath + this.href;
// Just to be safe
url.replace("'", "\\'");
html += '<span class="main' + (this.isApplied ? ' applied' : '') + '" title="' + htmlEncode(this.displayText) + '"'
+ ' onclick="document.location.href=\'' + url + '\'; return false;">';
if (this.operator == 'OR') {
if (this.isApplied) {
html += '<i class="fa fa-check-square-o" title="'+VuFind.translate('Selected')+'"></i>';
} else {
html += '<i class="fa fa-square-o" aria-hidden="true"></i>';
}
} else if (this.isApplied) {
html += '<i class="fa fa-check pull-right" title="'+VuFind.translate('Selected')+'"></i>';
}
html += ' ' + this.displayText;
html += '</span>';
var children = null;
if (typeof this.children !== 'undefined' && this.children.length > 0) {
children = buildFacetNodes(this.children, currentPath, allowExclude, excludeTitle, counts);
}
json.push({
'text': html,
'children': children,
'applied': this.isApplied,
'state': {
'opened': this.hasAppliedChildren
},
'li_attr': this.isApplied ? { 'class': 'active' } : {}
});
});
return json;
}
function initFacetTree(treeNode, inSidebar)
{
var loaded = treeNode.data('loaded');
if (loaded) {
return;
}
treeNode.data('loaded', true);
var facet = treeNode.data('facet');
var operator = treeNode.data('operator');
var currentPath = treeNode.data('path');
var allowExclude = treeNode.data('exclude');
var excludeTitle = treeNode.data('exclude-title');
var sort = treeNode.data('sort');
var query = window.location.href.split('?')[1];
if (inSidebar) {
treeNode.prepend('<li class="list-group-item"><i class="fa fa-spinner fa-spin" aria-hidden="true"></i></li>');
} else {
treeNode.prepend('<div><i class="fa fa-spinner fa-spin" aria-hidden="true"></i><div>');
}
$.getJSON(VuFind.path + '/AJAX/JSON?' + query,
{
method: "getFacetData",
facetName: facet,
facetSort: sort,
facetOperator: operator
},
function(response, textStatus) {
if (response.status == "OK") {
var results = buildFacetNodes(response.data, currentPath, allowExclude, excludeTitle, inSidebar);
treeNode.find('.fa-spinner').parent().remove();
if (inSidebar) {
treeNode.on('loaded.jstree open_node.jstree', function (e, data) {
treeNode.find('ul.jstree-container-ul > li.jstree-node').addClass('list-group-item');
});
}
treeNode.jstree({
'core': {
'data': results
}
});
}
}
);
}
/* --- Lightbox Facets --- */
VuFind.register('lightbox_facets', function LightboxFacets() {
var ajaxUrl;
var lightboxFacetSorting = function lightboxFacetSorting() {
var sortButtons = $('.js-facet-sort');
var lastsort, lastlimit;
function sortAjax(sort) {
var list = $('#facet-list-'+sort);
if (list.find('.js-facet-item').length === 0) {
list.find('.js-facet-next-page').text(VuFind.translate('loading')+'...');
$.ajax(ajaxUrl + '&layout=lightbox&facetsort='+sort)
.done(function facetSortTitleDone(data) {
list.prepend($('<span>'+data+'</span>').find('.js-facet-item'));
list.find('.js-facet-next-page').text(VuFind.translate('more') + ' ...');
});
}
$('.full-facet-list').addClass('hidden');
list.removeClass('hidden');
sortButtons.removeClass('active');
}
sortButtons.click(function facetSortButton() {
sortAjax(this.dataset.sort);
$(this).addClass('active');
return false;
});
};
var setup = function setup(url) {
ajaxUrl = url;
lightboxFacetSorting();
$('.js-facet-next-page').click(function facetLightboxMore() {
var button = $(this);
var page = parseInt(this.dataset.page);
if (button.attr('disabled')) {
return false;
}
button.attr('disabled', 1);
button.text(VuFind.translate('loading')+'...');
$.ajax(ajaxUrl + '&layout=lightbox&facetpage='+page+'&facetsort='+this.dataset.sort)
.done(function facetLightboxMoreDone(data) {
var htmlDiv = $('<div>'+data+'</div>');
var list = htmlDiv.find('.js-facet-item');
button.before(list);
if (list.length && htmlDiv.find('.js-facet-next-page').length) {
button.attr('data-page', page + 1);
button.text(VuFind.translate('more') + ' ...');
button.removeAttr('disabled');
} else {
button.remove();
}
});
return false;
});
var margin = 180;
$('#modal').on('show.bs.modal', function facetListHeight() {
$('#modal .lightbox-scroll').css('max-height', window.innerHeight - margin);
});
$(window).resize(function facetListResize() {
$('#modal .lightbox-scroll').css('max-height', window.innerHeight - margin);
});
};
return { setup: setup };
});