uiFilter.js 2.3 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253
  1. $(() => {
  2. window.ReloadFilters = function(mediaManager) {
  3. let buildFilterBar = (labelText, canBeEmpty, possibleValues) => {
  4. let result = document.createElement("div");
  5. result.className = "col-12 col-xl-4 col-md-6"
  6. let label = document.createElement('label');
  7. result.appendChild(label);
  8. label.textContent = labelText;
  9. let select = document.createElement('select');
  10. select.multiple = 'multiple';
  11. label.appendChild(select);
  12. for (let i of [].concat(canBeEmpty ? [undefined] : [], possibleValues)) {
  13. let opt = document.createElement("option");
  14. opt.textContent = i ? i : "(Empty)";
  15. opt.value = i ?? "";
  16. select.appendChild(opt);
  17. }
  18. $(select).change(e => {
  19. let val = Array.from(select.children).filter(i => i.selected).map(i => i.value === '' ? undefined : i.value);
  20. window.FilterManager.setFilterValue(labelText, val);
  21. });
  22. $(select).bsMultiSelect({cssPatch: {
  23. picks: { backgroundColor: 'inherit' },
  24. pick: { color: 'var(--bs-body-color)' },
  25. choiceContent: { color: 'var(--bs-body-color)' }
  26. }});
  27. return {
  28. content: result
  29. };
  30. };
  31. let container = document.getElementById('pch-filterbar');
  32. container.textContent = '';
  33. for (let i of Object.keys(mediaManager.allMetaTypes).filter(i => mediaManager.allMetaTypes[i].type === 'string')) {
  34. let filterUi = buildFilterBar(i, mediaManager.allMetaTypes[i].canBeEmpty, Array.from(mediaManager.allMeta[i]).sort());
  35. container.appendChild(filterUi.content);
  36. }
  37. let filterUi = buildFilterBar("Tags", true, Array.from(mediaManager.allTags).sort());
  38. container.appendChild(filterUi.content);
  39. }
  40. document.getElementById('pch-navbar-filterToggle').addEventListener('click', e => {
  41. e.preventDefault();
  42. let filterBarDom = document.getElementById('pch-filterbarContainer');
  43. if (filterBarDom.style.display)
  44. filterBarDom.style.display = "";
  45. else
  46. filterBarDom.style.display = "flex"
  47. });
  48. });