PageSourceSearch

https://cricut.com/blog/wp-content/themes/cricut/js/theme/dynamic-entries-configuration.js

js cricut.com collected 2026-09-24 08:27:17 UTC 3,214 bytes, 94 lines download raw bytes

1const blocks = document.querySelectorAll(".cgb-dynamic-entries-load");
2
3function setBoxContent(element, amount) {
4    const totalContent = element.children.length;
5
6    for (let i = 0; i < totalContent; i++) {
7        const child = element.children[i];
8
9        if (i < amount) child.style.display = "block";
10
11        if (i === totalContent - 1 && child.style.display === "block")
12            return true;
13    }
14}
15
16for (const block of blocks) {
17    const content = block.querySelector(".cgb-preloaded-content");
18    const loadMoreBtn = block.querySelector(".cgb-load-more-btn");
19    const loadOffset = +block.dataset.initialcontent || 2;
20
21    let loadMoreUrl = block.dataset.url || false;
22    let loadMoreAjaxified = block.dataset.ajax === 'true' || false;
23
24    let page = 1;
25
26    let displayedContent = loadOffset;
27    setBoxContent(content, displayedContent);
28
29    if (content.children.length <= 2 || content.children.length < loadOffset)
30        loadMoreBtn.classList.add("disabled");
31
32    loadMoreBtn.addEventListener("click", () => {
33        if ( loadMoreAjaxified ) {
34            page += 1;
35
36            // Disable load more button until request is resolved
37            loadMoreBtn.classList.add("disabled");
38
39            // AJAX request
40            const pagedLoadMoreUrl = new URL( loadMoreUrl );
41            pagedLoadMoreUrl.searchParams.set( 'ajax', 'true' );
42            pagedLoadMoreUrl.toString();
43
44            var request = new XMLHttpRequest();
45
46            request.open('GET', pagedLoadMoreUrl, true);
47
48            request.onload = function () {
49                if (this.status >= 200 && this.status < 400) {
50                    // Success!
51                    var response = JSON.parse(this.response);
52
53                    const container = document.createElement('div');
54                    container.innerHTML = response.data.html;
55
56                    const fragment = document.createDocumentFragment();
57
58                    const items = container.querySelectorAll('.cgb-dynamic-entries-load .cgb-carousel-item');
59
60                    const targetElement = document.querySelector('.cgb-preloaded-content');
61
62                    items.forEach((item) => {
63                        item.style.display = "block";
64                        fragment.appendChild(item);
65                    });
66
67                    targetElement.appendChild(fragment);
68
69                    // Set the next AJAX URL
70                    loadMoreUrl = container.querySelector( '.cgb-dynamic-entries-load' ).dataset.url || false;
71
72                    loadMoreBtn.classList.remove("disabled");
73                } else {
74                    if ( this.status === 404 ) {
75                        // No more posts
76                        loadMoreBtn.classList.add("disabled");
77                    }
78                }
79            };
80
81            request.onerror = function () {
82                // No more posts
83                loadMoreBtn.classList.add("disabled");
84            };
85
86            request.send();
87        } else {
88            displayedContent += loadOffset;
89
90            const reachedMax = setBoxContent(content, displayedContent);
91            if (reachedMax) loadMoreBtn.classList.add("disabled");
92        }
93    });
94}

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.