PageSourceSearch

https://pzs.si/assets/js/naveza.js?ver=1790914312

js pzs.si collected 2026-10-02 04:13:03 UTC 9,752 bytes, 225 lines download raw bytes

1jQuery(document).ready(function($) {
2    var ajax_url_naveza = `${ajax_url}ajax-naveza.php`;
3
4    var t = {}; // translations, populated on init
5
6    var pieColors = [
7        'rgba(0,155,219,0.8)','rgba(255,99,132,0.8)','rgba(255,205,86,0.8)',
8        'rgba(75,192,192,0.8)','rgba(153,102,255,0.8)','rgba(255,159,64,0.8)',
9        'rgba(54,162,235,0.8)','rgba(201,203,207,0.8)','rgba(231,76,60,0.8)',
10        'rgba(46,204,113,0.8)','rgba(52,152,219,0.8)','rgba(155,89,182,0.8)'
11    ];
12
13    function htmlspecialchars(str) {
14        return String(str)
15            .replace(/&/g, '&')
16            .replace(/</g, '&lt;')
17            .replace(/>/g, '&gt;')
18            .replace(/"/g, '&quot;');
19    }
20
21    function buildChart($panel, type, years) {
22        var year = $panel.data('year');
23        var yearData = years[year];
24        var $canvas = $panel.find('canvas')[0];
25
26        if ($canvas._chartInstance) {
27            $canvas._chartInstance.destroy();
28        }
29
30        var labels  = $.map(yearData.rows, function(r) { return r.naziv; });
31        var data    = $.map(yearData.rows, function(r) { return r.stevilo; });
32        var isPie   = type === 'pie';
33        var isChart = type === 'chart';
34
35        $canvas._chartInstance = new Chart($canvas, {
36            type: isPie ? 'pie' : 'bar',
37            data: {
38                labels: labels,
39                datasets: [{
40                    label: t.st_prodanih + ' ' + year,
41                    data: data,
42                    backgroundColor: isPie || isChart ? pieColors : 'rgba(0, 155, 219, 0.7)',
43                    borderColor: isPie ? '#fff' : 'rgba(0, 155, 219, 1)',
44                    borderWidth: 1
45                }]
46            },
47            options: {
48                indexAxis: isChart ? 'y' : 'x',
49                responsive: true,
50                plugins: {
51                    legend: { display: isPie }
52                },
53                scales: isPie ? {} : {
54                    x: { beginAtZero: true }
55                }
56            }
57        });
58    }
59
60    function renderMembership($container, years) {
61        var currentView = 'table';
62
63        var $toggle = $(
64            '<div class="membership-toggle">' +
65                '<button class="membership-view-btn active" data-view="table"><i class="fa-solid fa-table"></i> ' + t.tabela + '</button>' +
66                '<button class="membership-view-btn" data-view="chart"><i class="fa-solid fa-chart-line"></i> ' + t.crtni_diagram + '</button>' +
67                '<button class="membership-view-btn" data-view="pie"><i class="fa-solid fa-chart-pie"></i> ' + t.krozni_diagram + '</button>' +
68            '</div>'
69        );
70
71        var currentYear = Math.max.apply(null, Object.keys(years).map(Number));
72
73        var $tabs = $('<div class="membership-tabs"></div>');
74        $.each(years, function(year) {
75            var isActive = parseInt(year) === currentYear;
76            $tabs.append($('<button class="membership-tab' + (isActive ? ' active' : '') + '" data-year="' + year + '">' + year + '</button>'));
77        });
78
79        var $panels = $('<div class="membership-panels"></div>');
80        $.each(years, function(year, yearData) {
81            var isActive = parseInt(year) === currentYear;
82            var $panel = $('<div class="membership-panel' + (isActive ? ' active' : '') + '" data-year="' + year + '"></div>');
83
84            var $tableWrap = $('<div class="membership-view membership-view-table"></div>');
85            var $table = $('<table class="table membership-data-table"><thead><tr><th>' + t.clanarina + '</th><th>' + t.st_prodanih + '</th></tr></thead></table>');
86            var $tbody = $('<tbody></tbody>');
87            $.each(yearData.rows, function(i, row) {
88                $tbody.append('<tr><td>' + row.naziv + '</td><td>' + row.stevilo + '</td></tr>');
89            });
90            $tbody.append('<tr class="membership-total"><td>' + t.skupaj + ':</td><td>' + yearData.skupaj + '</td></tr>');
91            $table.append($tbody);
92            $tableWrap.append($table);
93
94            var $chartWrap = $('<div class="membership-view membership-view-chart" style="display:none;"><canvas></canvas></div>');
95
96            $panel.append($tableWrap).append($chartWrap);
97            $panels.append($panel);
98        });
99
100        $container.append($toggle).append($tabs).append($panels);
101
102        $container.on('click', '.membership-view-btn', function() {
103            var view = $(this).data('view');
104            if(view === currentView) return;
105            currentView = view;
106
107            $container.find('.membership-view-btn').removeClass('active');
108            $(this).addClass('active');
109
110            if(view === 'table') {
111                $container.find('.membership-view-table').show();
112                $container.find('.membership-view-chart').hide();
113            } else {
114                $container.find('.membership-view-table').hide();
115                $container.find('.membership-view-chart').show();
116                buildChart($container.find('.membership-panel.active'), view, years);
117            }
118        });
119
120        $container.on('click', '.membership-tab', function() {
121            var year = $(this).data('year');
122            $container.find('.membership-tab').removeClass('active');
123            $(this).addClass('active');
124            $container.find('.membership-panel').removeClass('active');
125            var $active = $container.find('.membership-panel[data-year="' + year + '"]').addClass('active');
126
127            if(currentView === 'chart' || currentView === 'pie') {
128                buildChart($active, currentView, years);
129            }
130        });
131    }
132
133    function initSocietyPage() {
134        var id = $('.society-wrapper').attr('data-society-id');
135        if(!(id > 0)) return;
136
137        ajax_cb(ajax_url_naveza, 'POST', { method: 'get_membership_data_for_society', societyId: id }, function(obj) {
138            if(!obj.status) return;
139            renderMembership($('.membership-table'), obj.data.years);
140        });
141    }
142
143    function initMdoPage() {
144        $('#mdo-accordion').on('show.bs.collapse', function(e) {
145            var $body  = $(e.target).find('.accordion-body');
146            var $stats = $body.find('.mdo-stats');
147
148            if($stats.attr('data-loaded') === 'true') return;
149
150            var mdoId = $stats.data('mdo-id');
151            if(!(mdoId > 0)) return;
152
153            $stats.html('<p class="mdo-loading">' + t.nalagam + '</p>');
154
155            ajax_cb(ajax_url_naveza, 'POST', { method: 'get_membership_data_for_mdo', mdoId: mdoId }, function(obj) {
156                $stats.empty().attr('data-loaded', 'true');
157
158                if(!obj.status) {
159                    $stats.html('<p class="text-muted">' + t.ni_podatkov + '</p>');
160                    return;
161                }
162
163                // totals block
164                var $totalsWrap = $('<div class="membership-table mdo-totals mb-4"></div>');
165                $totalsWrap.append($('<h6 class="mdo-totals-title">' + t.skupaj_mdo + '</h6>'));
166                renderMembership($totalsWrap, obj.data.totals);
167                $stats.append($totalsWrap);
168
169                // po društvih title
170                $stats.append($('<h6 class="mdo-totals-title mt-4">' + t.po_drustvoh + '</h6>'));
171
172                // per-society inner accordion
173                var $inner = $('<div class="accordion mdo-societies-accordion"></div>');
174                var index  = 0;
175
176                $.each(obj.data.societies, function(naziv, societyData) {
177                    var innerId = 'mdo-society-' + mdoId + '-' + index;
178
179                    var $item = $(
180                        '<div class="accordion-item mdo-society-item">' +
181                            '<h2 class="accordion-header">' +
182                                '<button class="accordion-button collapsed mdo-society-btn" type="button" data-bs-toggle="collapse" data-bs-target="#' + innerId + '" aria-expanded="false">' +
183                                    htmlspecialchars(naziv) +
184                                '</button>' +
185                            '</h2>' +
186                            '<div id="' + innerId + '" class="accordion-collapse collapse">' +
187                                '<div class="accordion-body mdo-society-body"></div>' +
188                            '</div>' +
189                        '</div>'
190                    );
191
192                    $inner.append($item);
193                    index++;
194                });
195
196                $stats.append($inner);
197
198                $inner.on('show.bs.collapse', function(e) {
199                    var $body = $(e.target).find('.mdo-society-body');
200                    if($body.attr('data-loaded') === 'true') return;
201                    $body.attr('data-loaded', 'true');
202
203                    var naziv = $(e.target).closest('.accordion-item').find('.mdo-society-btn').text().trim();
204
205                    if(obj.data.societies[naziv]) {
206                        var $memberWrap = $('<div class="membership-table"></div>');
207                        $body.append($memberWrap);
208                        renderMembership($memberWrap, obj.data.societies[naziv].years);
209                    }
210                });
211            });
212        });
213    }
214
215    // ── Boot ──────────────────────────────────────────────────────
216    if($('.society-wrapper')[0] || $('.mdo-pd-wrapper')[0]) {
217        ajax_cb(ajax_url_naveza, 'POST', { method: 'get_translations_for_charts' }, function(obj) {
218            if(!obj.status) return;
219            t = obj.data;
220
221            if($('.society-wrapper')[0]) initSocietyPage();
222            if($('.mdo-pd-wrapper')[0]) initMdoPage();
223        });
224    }
225});

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.