PageSourceSearch

https://cinetecadelfriuli.org/app/mu-plugins/acfvg-catalog/blocks/streaming-list/view.js?ver=1.0.0

js cinetecadelfriuli.org collected 2026-10-02 05:29:52 UTC 6,450 bytes, 157 lines download raw bytes

1(function () {
2    function init(block) {
3        var cfg = window.acfvgStreaming || {};
4        var grid        = block.querySelector('[data-acfvg-grid]');
5        var results     = block.querySelector('[data-acfvg-results]');
6        var qInput      = block.querySelector('[data-acfvg-q]');
7        var searchBtn   = block.querySelector('[data-acfvg-search]');
8        var toggleBtn   = block.querySelector('[data-acfvg-filters-toggle]');
9        var filtersWrap = block.querySelector('[data-acfvg-filters]');
10        var applyBtn    = block.querySelector('[data-acfvg-apply]');
11        var filterSel   = block.querySelectorAll('[data-acfvg-filter]');
12
13        var perPage = parseInt(block.getAttribute('data-per-page'), 10) || 9;
14
15        function collectFilters() {
16            var f = { q: qInput ? qInput.value.trim() : '' };
17            filterSel.forEach(function (sel) {
18                var key = sel.getAttribute('data-acfvg-filter');
19                if (key && sel.value) f[key] = sel.value;
20            });
21            return f;
22        }
23
24        function setLoadMore(nextPage, hasMore) {
25            var wrap = block.querySelector('[data-acfvg-loadmore-wrap]');
26            var btn  = block.querySelector('[data-acfvg-loadmore]');
27            if (!wrap || !btn) return;
28            if (hasMore) {
29                btn.setAttribute('data-next-page', String(nextPage));
30                btn.disabled = false;
31                wrap.hidden = false;
32            } else {
33                wrap.hidden = true;
34            }
35        }
36
37        function request(page, filters) {
38            var body = new FormData();
39            body.append('action', 'acfvg_streaming_more');
40            body.append('nonce', cfg.nonce || '');
41            body.append('page', String(page));
42            body.append('per_page', String(perPage));
43            Object.keys(filters).forEach(function (k) {
44                body.append('filters[' + k + ']', filters[k]);
45            });
46            return fetch(cfg.ajaxUrl, {
47                method: 'POST',
48                credentials: 'same-origin',
49                body: body
50            }).then(function (r) { return r.json(); });
51        }
52
53        function replaceResults(filters) {
54            if (!results) return;
55            if (searchBtn) searchBtn.disabled = true;
56            if (applyBtn) applyBtn.disabled = true;
57            request(1, filters)
58                .then(function (data) {
59                    if (!data || !data.success) return;
60                    var payload = data.data || {};
61                    if ((payload.total | 0) === 0) {
62                        results.innerHTML =
63                            '<p class="acfvg-stream-empty">' +
64                            (payload.emptyLabel || 'Nessun risultato.') +
65                            '</p>';
66                        block.setAttribute('data-total-pages', '0');
67                        return;
68                    }
69                    results.innerHTML =
70                        '<div class="acfvg-stream-grid" data-acfvg-grid>' +
71                        (payload.html || '') +
72                        '</div>' +
73                        '<div class="acfvg-stream-loadmore-wrap" data-acfvg-loadmore-wrap' +
74                        (payload.has_more ? '' : ' hidden') + '>' +
75                        '<button type="button" class="acfvg-stream-loadmore" data-acfvg-loadmore data-next-page="2">' +
76                        (payload.loadmoreLabel || 'Carica altri film') +
77                        '</button>' +
78                        '</div>';
79                    block.setAttribute('data-total-pages', String(payload.pages | 0));
80                    bindLoadMore();
81                })
82                .finally(function () {
83                    if (searchBtn) searchBtn.disabled = false;
84                    if (applyBtn) applyBtn.disabled = false;
85                });
86        }
87
88        function bindLoadMore() {
89            var btn = block.querySelector('[data-acfvg-loadmore]');
90            if (!btn || btn.__acfvgBound) return;
91            btn.__acfvgBound = true;
92            btn.addEventListener('click', function () {
93                if (btn.disabled) return;
94                var nextPage = parseInt(btn.getAttribute('data-next-page'), 10) || 2;
95                btn.disabled = true;
96                request(nextPage, collectFilters())
97                    .then(function (data) {
98                        if (!data || !data.success || !data.data) {
99                            btn.disabled = false;
100                            return;
101                        }
102                        var g = block.querySelector('[data-acfvg-grid]');
103                        if (g && data.data.html) {
104                            g.insertAdjacentHTML('beforeend', data.data.html);
105                        }
106                        setLoadMore(nextPage + 1, !!data.data.has_more);
107                    })
108                    .catch(function () { btn.disabled = false; });
109            });
110        }
111
112        if (toggleBtn && filtersWrap) {
113            toggleBtn.addEventListener('click', function () {
114                var open = filtersWrap.hasAttribute('hidden');
115                if (open) {
116                    filtersWrap.removeAttribute('hidden');
117                    toggleBtn.setAttribute('aria-expanded', 'true');
118                } else {
119                    filtersWrap.setAttribute('hidden', '');
120                    toggleBtn.setAttribute('aria-expanded', 'false');
121                }
122            });
123        }
124
125        if (searchBtn) {
126            searchBtn.addEventListener('click', function () {
127                replaceResults(collectFilters());
128            });
129        }
130        if (qInput) {
131            qInput.addEventListener('keydown', function (e) {
132                if (e.key === 'Enter') {
133                    e.preventDefault();
134                    replaceResults(collectFilters());
135                }
136            });
137        }
138        if (applyBtn) {
139            applyBtn.addEventListener('click', function () {
140                replaceResults(collectFilters());
141            });
142        }
143
144        bindLoadMore();
145    }
146
147    function boot() {
148        var blocks = document.querySelectorAll('.acfvg--streaming-list');
149        for (var i = 0; i < blocks.length; i++) init(blocks[i]);
150    }
151
152    if (document.readyState === 'loading') {
153        document.addEventListener('DOMContentLoaded', boot);
154    } else {
155        boot();
156    }
157})();

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.