PageSourceSearch

https://hkbarpiadmin.com/js/common.js

js hkbarpiadmin.com collected 2026-10-09 23:46:27 UTC 8,536 bytes, 258 lines download raw bytes

1// DataTable Default Options
2$.extend( true, $.fn.dataTable.defaults, {
3    initComplete: function () {
4        var $wrapper = $(this).closest('.dataTables_wrapper');
5        var dt = $(this).DataTable();
6        $wrapper.find('.dt-footer').on('change', '.page-select', function (e) {
7            e.preventDefault();
8            dt.page($(this).val()-1).draw('page');
9        });
10    },
11    pageLength: 25,
12    filter: false,
13    dom: 'f<"table-main-wrapper"t><"dt-footer"<"row" <"col-lg-4 col-md-4 col-sm-6"i><"col-lg-2 col-md-4 col-sm-6"l><"col-lg-6 col-md-4 hidden-sm hidden-xs"p>>>',
14    infoCallback: function (settings, start, end, max, total, pre) {
15        var pages = $(this).DataTable().page.info();
16        var select = '<select class="page-select">';
17        for (var i = 1; i <= pages.pages; i++) {
18            select += '<option value="' + i + '"'+(i == pages.page+1 ? ' selected' : '')+'>' + i + '</option>';
19        }
20        select += '</select>';
21
22        return 'Page ' + select + ' of ' + (pages.pages) + '  (' + total + ' total entries)';
23    }
24});
25
26// CSRF Token
27$.ajaxSetup({
28    headers: {
29        'X-CSRF-TOKEN': $('meta[name="csrf-token"]').attr('content')
30    }
31});
32
33// Delete Confirm Handler
34function deleteConfirmHandler(e, isAjax) {
35    e.preventDefault();
36
37    var $btn = $(this);
38    var deleteLink = $btn.attr('href');
39    $btn.blur();
40
41    bootbox.confirm({
42        title: 'Delete',
43        message: 'Are you sure to delete this item?',
44        buttons: {
45            confirm: {
46                className: 'btn-danger',
47                label: 'Delete'
48            }
49        },
50        callback: function(result) {
51            if (result) {
52                if (typeof isAjax != 'undefined' && isAjax) {
53                    var table = $btn.closest('table');
54                    if (table.length == 1) {
55                        $.ajax({
56                            url: deleteLink,
57                            method: 'GET',
58                            success: function (response) {
59                                bootbox.alert(response);
60                                table.DataTable().ajax.reload(null, false);
61                            }
62                        });
63                        return;
64                    }
65                }
66
67                window.location = deleteLink;
68            }
69        }
70    });
71}
72
73function ajaxDeleteConfirmHandler(e) {
74    var handler = deleteConfirmHandler.bind(this);
75    handler(e, true);
76}
77
78var dtBtn = {
79    generate: function (title, link, linkClass) {
80        return '<a href="' + link + '" class="' + linkClass + '">' + title + '</a> ';
81    },
82    generateCertificateBtn: function (pdfLink, emailLink) {
83        return '<div class="btn-group">'+
84            '<button type="button" class="btn btn-xs btn-default btn-certificate dropdown-toggle" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false">Certificate</button>'+
85            '<ul class="dropdown-menu">'+
86            '<li><a href="'+pdfLink+'" target="_blank">PDF</a></li>'+
87            '<li><a href="'+emailLink+'" class="proposal-email-link">Email</a></li>'+
88            '</ul>'+
89            '</div>';
90    },
91    edit: function (link) {
92        return this.generate('Edit', link, 'btn btn-xs btn-default');
93    },
94    duplicate: function (link) {
95        return this.generate('Duplicate', link, 'btn btn-xs btn-default');
96    },
97    delete: function (link) {
98        return '<a href="' + link + '" class="delete-confirm"><i class="glyphicon glyphicon-trash"></i></a>';
99    },
100    details: function (title) {
101        if (typeof title == 'undefined') {
102            title = 'Details';
103        }
104        return this.generate(title, '#', 'btn btn-xs btn-default details-toggle');
105    }
106};
107
108var $loadingScreen;
109
110var bindDatePicker = function () {
111    // Date Picker
112    if ($('.date-picker').length > 0) {
113        $('.date-picker').datetimepicker({
114            format: 'YYYY-MM-DD'
115        });
116    }
117
118    if ($('.date-picker-r').length > 0) {
119        $('.date-picker-r').datetimepicker({
120            format: 'YYYY-MM-DD',
121            widgetPositioning: {
122                vertical: 'top'
123            }
124        });
125    }
126
127    // Time Picker
128    if ($('.time-picker').length > 0) {
129        $('.time-picker').datetimepicker({
130            format: 'HH:mm'
131        });
132    }
133
134    // Date Time Picker
135    if ($('.date-time-picker').length > 0) {
136        $('.date-time-picker').datetimepicker({
137            format: 'YYYY-MM-DD HH:mm:ss'
138        });
139    }
140};
141
142function tableSetup(table, url, columDefs, actions, order, extraArgs) {
143    if (typeof actions != 'undefined' && actions != null) {
144        columDefs.push({
145            targets: columDefs.length,
146            orderable: false,
147            data: "id",
148            render: function (data, type, full, meta) {
149                if (type == 'display') {
150                    // Buttons
151                    var buttons = '';
152
153                    if (typeof actions.before == 'function') {
154                        buttons += actions.before(full);
155                    }
156                    if (actions.duplicate && full.duplicate_link != undefined) {
157                        buttons += dtBtn.duplicate(full.duplicate_link);
158                    }
159                    if (actions.edit && full.edit_link != undefined) {
160                        buttons += dtBtn.edit(full.edit_link);
161                    }
162                    if (actions.details) {
163                        buttons += dtBtn.details();
164                    }
165                    if (actions.delete && full.delete_link != undefined) {
166                        buttons += dtBtn.delete(full.delete_link);
167                    }
168                    if (typeof actions.after == 'function') {
169                        buttons += actions.after(full);
170                    }
171                    return buttons;
172                }
173                return data;
174            }
175        });
176    }
177
178    var options = $.extend({
179        processing: true,
180        serverSide: true,
181        order: typeof order != 'undefined' ? order : [[0, 'desc']],
182        columnDefs: columDefs,
183        ajax: {
184            type: 'POST',
185            url: url,
186            data: function (d) {
187                d.filter = {};
188
189                var $listFilter = $('.list-filter');
190                if ($listFilter.length !== 0) {
191                    var data = $listFilter.serializeArray();
192                    $.map(data, function(n, i){
193                        d.filter[n['name']] = n['value'];
194                    });
195                }
196            }
197        }
198    }, extraArgs);
199
200    var dt = table.DataTable(options);
201
202    if (typeof actions != 'undefined' && actions != null) {
203        if (actions.delete) {
204            table.on('click.dt', '.delete-confirm', ajaxDeleteConfirmHandler);
205        }
206        if (actions.details) {
207            table.on('click.dt', '.details-toggle', function (e) {
208                e.preventDefault();
209                var row = dt.row( $(this).closest('tr') );
210                if (row.child.isShown()) {
211                    // Already open -- close it
212                    row.child.hide();
213                } else {
214                    row.child(row.data().details_html, 'child-row').show();
215                }
216            });
217        }
218    }
219}
220
221function practiceRatioRangeControl($el) {
222    var $rangeCtrl = $el.find('input[type="range"]');
223    var $numberInput = $el.find('#criminal_percentage');
224    var $numberInputInverse = $el.find('input[name="criminal_percentage_inverse"]');
225
226    $rangeCtrl.on('change input', function () {
227        $numberInput.val($(this).val());
228        $numberInputInverse.val(100 - parseInt($(this).val()));
229    });
230    $numberInput.on('change input', function () {
231        $rangeCtrl.val($(this).val());
232        $numberInputInverse.val(100 - parseInt($(this).val()));
233    });
234    $numberInputInverse.on('change input', function () {
235        $rangeCtrl.val(100 - parseInt($(this).val()));
236        $numberInput.val(100 - parseInt($(this).val()));
237    });
238}
239
240$(document).ready(function () {
241    // Delete Confirm Button
242    $('.delete-confirm').on('click.delete-confirm', deleteConfirmHandler);
243
244    // Tooltip
245    $('[data-toggle="tooltip"]').tooltip();
246
247    // Date Picker
248    bindDatePicker();
249
250    // Select2 Plugin - Default options (only if loaded)
251    if (typeof $.fn.select2 != 'undefined') {
252        $.fn.select2.defaults.set("theme", "bootstrap");
253        $('.select2').select2();
254    }
255
256    // Loading
257    $loadingScreen = $('#fullscreen-loading');
258});

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.