mirror of
https://github.com/jellyfin/jellyfin-web.git
synced 2024-11-18 11:28:23 -07:00
162 lines
4.6 KiB
JavaScript
162 lines
4.6 KiB
JavaScript
(function (window) {
|
|
|
|
function renderOptions(page, selector, cssClass, items) {
|
|
|
|
var elem;
|
|
|
|
if (items.length) {
|
|
|
|
elem = $(selector, page).show()[0];
|
|
|
|
} else {
|
|
elem = $(selector, page).hide()[0];
|
|
}
|
|
|
|
var html = '';
|
|
|
|
// style="margin: -.2em -.8em;"
|
|
html += '<div data-role="controlgroup">';
|
|
|
|
var index = 0;
|
|
var idPrefix = 'chk' + selector.substring(1);
|
|
|
|
html += items.map(function (filter) {
|
|
|
|
var itemHtml = '';
|
|
|
|
var id = idPrefix + index;
|
|
itemHtml += '<div class="checkboxContainer">';
|
|
itemHtml += '<input id="' + id + '" type="checkbox" data-filter="' + filter + '" data-role="none" class="' + cssClass + '" />';
|
|
itemHtml += '<label for="' + id + '">' + filter + '</label>';
|
|
itemHtml += '</div>';
|
|
|
|
//itemHtml += '<paper-checkbox id="' + id + '" data-filter="' + filter + '" class="' + cssClass + '">' + filter + '</paper-checkbox>';
|
|
|
|
index++;
|
|
|
|
return itemHtml;
|
|
|
|
}).join('');
|
|
|
|
html += '</div>';
|
|
|
|
elem.querySelector('.filterOptions').innerHTML = html;
|
|
}
|
|
|
|
function renderFilters(page, result) {
|
|
|
|
// If there's a huge number of these they will be really show to render
|
|
if (result.Tags) {
|
|
result.Tags.length = Math.min(result.Tags.length, 50);
|
|
}
|
|
|
|
renderOptions(page, '.genreFilters', 'chkGenreFilter', result.Genres);
|
|
renderOptions(page, '.officialRatingFilters', 'chkOfficialRatingFilter', result.OfficialRatings);
|
|
renderOptions(page, '.tagFilters', 'chkTagFilter', result.Tags);
|
|
renderOptions(page, '.yearFilters', 'chkYearFilter', result.Years);
|
|
|
|
}
|
|
|
|
function onFiltersLoaded(page, query, reloadItemsFn) {
|
|
|
|
$('.chkGenreFilter', page).on('change', function () {
|
|
|
|
var filterName = this.getAttribute('data-filter');
|
|
var filters = query.Genres || "";
|
|
var delimiter = '|';
|
|
|
|
filters = (delimiter + filters).replace(delimiter + filterName, '').substring(1);
|
|
|
|
if (this.checked) {
|
|
filters = filters ? (filters + delimiter + filterName) : filterName;
|
|
}
|
|
|
|
query.StartIndex = 0;
|
|
query.Genres = filters;
|
|
|
|
reloadItemsFn();
|
|
});
|
|
$('.chkTagFilter', page).on('change', function () {
|
|
|
|
var filterName = this.getAttribute('data-filter');
|
|
var filters = query.Tags || "";
|
|
var delimiter = '|';
|
|
|
|
filters = (delimiter + filters).replace(delimiter + filterName, '').substring(1);
|
|
|
|
if (this.checked) {
|
|
filters = filters ? (filters + delimiter + filterName) : filterName;
|
|
}
|
|
|
|
query.StartIndex = 0;
|
|
query.Tags = filters;
|
|
|
|
reloadItemsFn();
|
|
});
|
|
$('.chkYearFilter', page).on('change', function () {
|
|
|
|
var filterName = this.getAttribute('data-filter');
|
|
var filters = query.Years || "";
|
|
var delimiter = ',';
|
|
|
|
filters = (delimiter + filters).replace(delimiter + filterName, '').substring(1);
|
|
|
|
if (this.checked) {
|
|
filters = filters ? (filters + delimiter + filterName) : filterName;
|
|
}
|
|
|
|
query.StartIndex = 0;
|
|
query.Years = filters;
|
|
|
|
reloadItemsFn();
|
|
});
|
|
$('.chkOfficialRatingFilter', page).on('change', function () {
|
|
|
|
var filterName = this.getAttribute('data-filter');
|
|
var filters = query.OfficialRatings || "";
|
|
var delimiter = '|';
|
|
|
|
filters = (delimiter + filters).replace(delimiter + filterName, '').substring(1);
|
|
|
|
if (this.checked) {
|
|
filters = filters ? (filters + delimiter + filterName) : filterName;
|
|
}
|
|
|
|
query.StartIndex = 0;
|
|
query.OfficialRatings = filters;
|
|
|
|
reloadItemsFn();
|
|
});
|
|
}
|
|
|
|
function loadFilters(page, userId, itemQuery, reloadItemsFn) {
|
|
|
|
return ApiClient.getJSON(ApiClient.getUrl('Items/Filters', {
|
|
|
|
UserId: userId,
|
|
ParentId: itemQuery.ParentId,
|
|
IncludeItemTypes: itemQuery.IncludeItemTypes
|
|
|
|
|
|
})).done(function (result) {
|
|
|
|
renderFilters(page, result);
|
|
|
|
onFiltersLoaded(page, itemQuery, reloadItemsFn);
|
|
});
|
|
|
|
}
|
|
|
|
function onPageShow(page, query) {
|
|
query.Genres = null;
|
|
query.Years = null;
|
|
query.OfficialRatings = null;
|
|
query.Tags = null;
|
|
}
|
|
|
|
window.QueryFilters = {
|
|
loadFilters: loadFilters,
|
|
onPageShow: onPageShow
|
|
};
|
|
|
|
})(window); |