organizations.njk 2.5 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374
  1. ---
  2. layout: base.njk
  3. title: Organizations
  4. ---
  5. <h1>Organizations</h1>
  6. <p class="subtitle">{{ indices.organizations.length }} organizations mentioned across documents</p>
  7. <div class="search-box">
  8. <input type="text" id="search" placeholder="Search organizations...">
  9. </div>
  10. <div class="alphabet-nav">
  11. <button class="letter-btn active" data-letter="all">All</button>
  12. {% for letter in 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' %}
  13. <button class="letter-btn" data-letter="{{ letter }}">{{ letter }}</button>
  14. {% endfor %}
  15. </div>
  16. <div id="results">
  17. {% for org in indices.organizations %}
  18. <details class="entity-item" data-name="{{ org.name }}" data-letter="{{ org.name[0] | upper }}" id="{{ org.name | slugify }}">
  19. <summary class="entity-summary">
  20. <span class="entity-name">{{ org.name }}</span>
  21. <span class="entity-count">{{ org.count }} {{ "document" if org.count == 1 else "documents" }}</span>
  22. </summary>
  23. <div class="entity-content">
  24. {% for doc in org.docs %}
  25. <div class="document-card-compact">
  26. <a href="/document/{{ doc.unique_id | slugify }}/" class="doc-link">
  27. <strong>Document {{ doc.document_number }}</strong>
  28. </a>
  29. <div class="meta-compact">
  30. {% if doc.document_metadata.document_type %}{{ doc.document_metadata.document_type }}{% endif %}
  31. {% if doc.document_metadata.date %} · {{ doc.document_metadata.date }}{% endif %}
  32. · {{ doc.page_count }} {{ "page" if doc.page_count == 1 else "pages" }}
  33. </div>
  34. </div>
  35. {% endfor %}
  36. </div>
  37. </details>
  38. {% endfor %}
  39. </div>
  40. <script>
  41. const search = document.getElementById('search');
  42. const results = document.getElementById('results');
  43. const letterBtns = document.querySelectorAll('.letter-btn');
  44. const allItems = results.querySelectorAll('.entity-item');
  45. search.addEventListener('input', (e) => {
  46. const query = e.target.value.toLowerCase();
  47. allItems.forEach(item => {
  48. const name = item.dataset.name.toLowerCase();
  49. item.style.display = name.includes(query) ? 'block' : 'none';
  50. });
  51. });
  52. letterBtns.forEach(btn => {
  53. btn.addEventListener('click', () => {
  54. const letter = btn.dataset.letter;
  55. letterBtns.forEach(b => b.classList.remove('active'));
  56. btn.classList.add('active');
  57. search.value = '';
  58. allItems.forEach(item => {
  59. if (letter === 'all') {
  60. item.style.display = 'block';
  61. } else {
  62. item.style.display = item.dataset.letter === letter ? 'block' : 'none';
  63. }
  64. });
  65. });
  66. });
  67. </script>