1/** 2 * Load More - Views AJAX Pager 3 */ 4(function (Drupal, once) { 5 'use strict'; 6 7 Drupal.behaviors.loadMore = { 8 attach: function (context) { 9 once('load-more', '.btn-load-more', context).forEach(function (btn) { 10 btn.addEventListener('click', function () { 11 var currentPage = parseInt(btn.getAttribute('data-current-page') || '0'); 12 var nextPage = currentPage + 1; 13 var viewId = btn.getAttribute('data-view-id'); 14 var displayId = btn.getAttribute('data-display-id'); 15 var itemsPerPage = parseInt(btn.getAttribute('data-items-per-page') || '6'); 16 var contentWrapper = btn.closest('.view').querySelector('.view-content-wrapper'); 17 18 if (!contentWrapper) return; 19 20 // Loading state 21 btn.disabled = true; 22 btn.innerHTML = '<span class="spinner-border spinner-border-sm me-2"></span>Laden...'; 23 24 var url = '/views/ajax?view_name=' + viewId + '&view_display_id=' + displayId + '&page=' + nextPage; 25 26 fetch(url, { credentials: 'same-origin' }) 27 .then(function (response) { return response.json(); }) 28 .then(function (data) { 29 var newHtml = ''; 30 data.forEach(function (cmd) { 31 if (cmd.command === 'insert' && cmd.data) { 32 newHtml = cmd.data; 33 } 34 }); 35 36 if (newHtml) { 37 var temp = document.createElement('div'); 38 temp.innerHTML = newHtml; 39 var newGrid = temp.querySelector('.pages-grid'); 40 41 if (newGrid && newGrid.children.length > 0) { 42 var existingGrid = contentWrapper.querySelector('.pages-grid'); 43 if (existingGrid) { 44 Array.from(newGrid.children).forEach(function (child) { 45 existingGrid.appendChild(child.cloneNode(true)); 46 }); 47 } 48 btn.setAttribute('data-current-page', nextPage); 49 btn.disabled = false; 50 btn.textContent = 'Weitere laden'; 51 52 if (newGrid.children.length < itemsPerPage) { 53 btn.textContent = 'Keine weiteren Einträge'; 54 btn.disabled = true; 55 } 56 } else { 57 btn.textContent = 'Keine weiteren Einträge'; 58 btn.disabled = true; 59 } 60 } else { 61 btn.textContent = 'Keine weiteren Einträge'; 62 btn.disabled = true; 63 } 64 }) 65 .catch(function () { 66 btn.textContent = 'Fehler beim Laden'; 67 btn.disabled = false; 68 }); 69 }); 70 }); 71 } 72 }; 73})(Drupal, once);
Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.