PageSourceSearch

https://www.kirby-smith.com/Scripts/FrontEnd/data.listing.js

js kirby-smith.com collected 2026-10-04 15:57:56 UTC 11,462 bytes, 293 lines download raw bytes

1var KSDataListing = function () {
2    var $container = null;
3    var searchParams = {};
4    var deleteDataParams = {};
5    var deleteRowParams = {};
6    var paginateParams = {};
7    var $searchField = null;
8    var options = {
9        ajaxUpdater: '#ajax-listing',
10        allowEmptySearch: true,
11        // messages
12        confirmDeleteMsgData: 'Do you want to delete selected items?',
13        confirmDeleteMsgRow: 'Do you want to delete this item?',
14        // callbacks
15        afterLoadData: $.noop(),
16        beforeLoadData: $.noop(),
17        beforeDeleteForm: $.noop(),
18        afterDeleteForm: $.noop(),
19        beforeDeleteItem: $.noop(),
20        afterDeleteItem: $.noop(),
21        beforeSearch: $.noop(),
22        afterSearch: $.noop(),
23        beforePaging: $.noop(),
24        afterPaging: $.noop()
25    };
26    var loadingTpl = '<div class="data-loading"><img src="/images/Admin/loading-spinner-blue.gif"></div>';
27    var initDataListing = function ($selector) {
28        $container = $selector;
29        $container.css('position', 'relative');
30        if ($('input.search-field', $container).length > 0)
31            $searchField = $('input.search-field', $container).first();
32        $('[data-action="delete-form"]', $container).attr('disabled', 'disabled');
33        $('[data-action="delete-form"]', $container).on('click', function(evt){
34            evt.preventDefault();
35            evt.stopPropagation();
36            var url = $(this).attr('href');
37            var items = [];
38            $('input[name="listItems"]:checked', $container).each(function(){
39                var id = parseInt($(this).attr('data-target'));
40                if ((id != NaN) && (id > 0)){
41                    items.push(id);
42                }
43            });
44            if (items.length > 0){
45                execDeleteData(options.confirmDeleteMsgData, url, items);
46            }else{
47                $('[data-action="delete-form"]', $container).attr('disabled', 'disabled');
48                KSAdmin.notification({message: 'Please select items to delete.'});
49            }
50        });
51        initSearchForm();
52        initAjaxData();
53    };
54    var initSearchForm = function () {        
55        $('[data-action="search"], [data-action="ajax-search"]', $container).on('click', function (e) {
56            e.preventDefault();
57            
58            var actionType = $(this).attr('data-action');
59            if (!options.allowEmptySearch) {
60                var searchText = $.trim($searchField.val());
61                $searchField.val(searchText);
62                if (searchText.length == 0) {
63                    KSAdmin.notification({ message: 'Search text is required.' });
64                    return;
65                }
66            }
67            searchParams['page'] = 1;
68            if ($searchField)
69                searchParams['q'] = $.trim($searchField.val());
70            if (!__beforeSearch(searchParams)) {
71                return;
72            }
73            if (actionType == 'ajax-search') {
74                showLoading();
75                var searchURL = $(this).attr('data-url');
76                $.post(searchURL, searchParams, function (htmlData) {
77                    hideLoading();
78                    $(options.ajaxUpdater).html(htmlData);
79                    __afterSearch(htmlData);
80                    setTimeout(function(){
81                        initAjaxData();
82                    }, 500);
83                });
84            } else {
85
86            }
87        });
88    };
89    var initAjaxData = function () {
90        $('#check-all', $container).on('change', function () {
91            var val = $(this).is(':checked');
92            $('input[name="listItems"]', $container).prop('checked', val);
93            $.uniform.update();
94            if (val) {
95                $('[data-action="delete-form"]').removeAttr('disabled', 'disabled');
96            } else {
97                $('[data-action="delete-form"]').attr('disabled', 'disabled');
98            }
99        });
100        $('input[name="listItems"]', $container).on('change', function () {
101            var numberOfItems = $('input[name="listItems"]', $container).length;
102            var numberSelectedItems = $('input[name="listItems"]:checked', $container).length;
103            if (numberSelectedItems == numberOfItems) {
104                $('#check-all').prop('checked', true);
105            } else {
106                $('#check-all').prop('checked', false);
107            }
108            $.uniform.update();
109            if (numberSelectedItems > 0) {
110                $('[data-action="delete-form"]').removeAttr('disabled', 'disabled');
111            } else {
112                $('[data-action="delete-form"]').attr('disabled', 'disabled');
113            }
114        });
115        initUniform();
116        $('.act-remove-item', $container).on('click', function (evt) {
117            evt.preventDefault();
118            evt.stopPropagation();
119            var url = $.trim($(this).attr('href'));
120            if ((typeof url == 'undefined') || (url == 'javascript:;') || (url == '#')) {
121                url = $('[data-action="delete-form"]').first().attr('href');
122            }
123            var id = parseInt($(this).attr('data-target'));
124            var items = [];
125            if ((id != NaN) && (id > 0)){
126                items.push(id);
127            }
128            if (items.length > 0){
129                execDeleteData(options.confirmDeleteMsgRow, url, items);
130            }else{
131                KSAdmin.notification({message: 'Please select a item to delete.'});
132            }
133        });
134        initPaging();
135    };
136    var initPaging = function(){
137        var $pagingContainer = $('#pagingContainer');
138        if ($pagingContainer.length > 0){
139            var pagingURL = $pagingContainer.attr('data-url');
140            $('li', $pagingContainer).each(function(){
141                var $li = $(this);
142                if ($li.hasClass('disabled') || $li.hasClass('active')){
143                    return;
144                }
145                $li.find('> a').on('click', function(){
146                    var page = parseInt($(this).attr('data-target').replace('page-', '')) || 1;
147                    var params = $.extend(true, searchParams, { page: page });
148                    if (!__beforePaging(params)) {
149                        return;
150                    }
151                    showLoading();
152                    $.post(pagingURL, params, function(htmlData){
153                        hideLoading();
154                        $(options.ajaxUpdater).html(htmlData);
155                        __afterPaging(htmlData);                           
156                        setTimeout(function(){
157                            initAjaxData();
158                        }, 500);
159                    });
160                });
161            });
162        }
163    };
164    var showLoading = function () {
165        $container.append(loadingTpl);
166    };
167    var hideLoading = function () {
168        $('> div.data-loading', $container).remove();
169    };
170    var initUniform = function () {
171        var test = $("input[type=checkbox]:not(.toggle, .md-check, .md-radiobtn, .make-switch, .icheck), input[type=radio]:not(.toggle, .md-check, .md-radiobtn, .star, .make-switch, .icheck)", $container);
172        if (test.size() > 0) {
173            test.each(function () {
174                if ($(this).parents(".checker").size() === 0) {
175                    $(this).show();
176                    //$(this).uniform();
177                }
178            });
179        }
180    };
181    var execDeleteData = function(confirmMsg, url, items){
182        bootbox.confirm(confirmMsg, function (result) {
183            if (result) {
184                if (confirmMsg == options.confirmDeleteMsgData){
185                    if (!__beforeDeleteForm(items)){
186                        return;
187                    }
188                }else{
189                    if (!__beforeDeleteItem(items[0])){
190                        return;
191                    }
192                }
193                showLoading();
194                $.ajax({
195                    type: 'POST',
196                    url: url,
197                    data: {items: items},
198                    traditional: true,
199                    success: function(htmlData){
200                        hideLoading();
201                        if (confirmMsg == options.confirmDeleteMsgData){
202                            __afterDeleteForm();
203                        }else{
204                            __afterDeleteItem();
205                        }
206                        $(options.ajaxUpdater).html(htmlData);
207                        setTimeout(function(){
208                            initAjaxData();
209                        }, 500);
210                        $('[data-action="delete-form"]', $container).attr('disabled', 'disabled');
211                    }
212                });
213            }
214        });
215    };
216    var __afterLoadData = function (params) {
217        if ($.isFunction(options.afterLoadData)) {
218            if (options.afterLoadData(params) == false) {
219                return false;
220            }
221        }
222        return true;
223    };
224    var __beforeSearch = function (params) {
225        if ($.isFunction(options.beforeSearch)) {
226            if (options.beforeSearch(params) == false){
227                return false;
228            }
229        }
230        return true;
231    };
232    var __afterSearch = function (htmlData) {
233        if ($.isFunction(options.afterSearch)) {
234            options.afterSearch(htmlData);
235        }
236    };
237    var __beforeDeleteForm = function(items){
238        if ($.isFunction(options.beforeDeleteForm)) {
239            if (options.beforeDeleteForm(items) == false)
240                return false;
241        }
242        return true;
243    }
244    var __afterDeleteForm = function(){
245        if ($.isFunction(options.afterDeleteForm)) {
246            options.afterDeleteForm();
247        }
248    }
249    var __beforeDeleteItem = function(id){
250        if ($.isFunction(options.beforeDeleteItem)) {
251            if (options.beforeDeleteItem(id) == false)
252                return false;
253        }
254        return true;
255    }
256    var __afterDeleteItem = function(){
257        if ($.isFunction(options.afterDeleteItem)) {
258            options.afterDeleteItem();
259        }
260    }
261    var __beforePaging = function(params){
262        if ($.isFunction(options.beforePaging)) {
263            if (options.beforePaging(params) == false)
264                return false;
265        }
266        return true;
267    }
268    var __afterPaging = function(htmlData){
269        if ($.isFunction(options.afterPaging)) {
270            if (options.afterPaging(htmlData) == false)
271                return false;
272        }
273        return true;
274    }
275    return {
276        init: function ($selector, opts) {
277            options = $.extend(true, options, opts);
278            initDataListing($selector);
279            __afterLoadData(searchParams);
280        },
281        search: function (url, params) {
282            showLoading();
283            $.post(url, params, function (htmlData) {
284                hideLoading();
285                $(options.ajaxUpdater).html(htmlData);
286                __afterSearch(htmlData);
287                setTimeout(function () {
288                    initAjaxData();
289                }, 500);
290            });
291        }
292    };
293}();

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.