PageSourceSearch

https://www.bplus.co.th/assets/js/custom.js?v=2/10/2569%208:09:17

js bplus.co.th collected 2026-10-02 01:09:45 UTC 13,324 bytes, 392 lines download raw bytes

1document.addEventListener('DOMContentLoaded', function () {
2    // contact button (owner 2026-09-25): one round button at the bottom right opens the channels -
3    // the phone number is written on its own button now, so the PC tooltip is gone
4    const contact = document.getElementById('bpContact');
5    if (contact) {
6        const toggle = document.getElementById('bpContactToggle');
7        const setOpen = function (open) {
8            contact.classList.toggle('is-open', open);
9            toggle.setAttribute('aria-expanded', open ? 'true' : 'false');
10            // the article contents button sits where the menu unfolds - it steps aside meanwhile
11            document.documentElement.classList.toggle('bp-contact-open', open);
12        };
13        toggle.addEventListener('click', function (e) {
14            e.stopPropagation();
15            setOpen(!contact.classList.contains('is-open'));
16        });
17        document.addEventListener('click', function (e) {
18            if (!contact.contains(e.target)) setOpen(false);
19        });
20        document.addEventListener('keydown', function (e) {
21            if (e.key === 'Escape') setOpen(false);
22        });
23    }
24
25    // while the cookie bar is showing, the floating buttons (contact, article contents) sit above it
26    const cookieBar = document.querySelector('.cookiealert');
27    if (cookieBar) {
28        const dock = function () {
29            const h = cookieBar.classList.contains('show') ? cookieBar.offsetHeight : 0;
30            document.documentElement.style.setProperty('--bp-dock-offset', h + 'px');
31        };
32        new MutationObserver(dock).observe(cookieBar, { attributes: true, attributeFilter: ['class'] });
33        window.addEventListener('resize', dock);
34        dock();
35    }
36
37    //if (getCookie('PolicyAccept') == '1') {
38    //    $('#modal-policy-accept').modal('show');
39    //}
40});
41
42function Set_Toast(param, type) {
43
44    if (param.action == 'modal') {
45        var modalToast = new bootstrap.Modal(document.getElementById('modalToast'), {
46        });
47
48        document.querySelector('#lblModalToast').innerText = GetCookieUtf8(param.body);
49
50        document.querySelector('#lblModalToast').className = '';
51        document.querySelector('#btnCloasToast').className = 'btn rounded-pill btn-login mb-2'; 
52
53        if (param.type === 'danger') {
54            document.querySelector('#lblModalToast').classList.add('text-red');
55            document.querySelector('#btnCloasToast').classList.add('btn-red');
56        }
57        else if (param.type === 'warning') {
58            document.querySelector('#lblModalToast').classList.add('text-yellow');
59            document.querySelector('#btnCloasToast').classList.add('btn-yellow');
60        }
61        else {
62            document.querySelector('#lblModalToast').classList.add('text-green');
63            document.querySelector('#btnCloasToast').classList.add('btn-green');
64        }
65        
66        modalToast.show();
67        
68    }
69    else {
70        // ID
71        const toastLive = document.querySelector('#liveToast');
72
73        toastLive.classList = 'toast';
74
75        // Auto Hide
76        const toast = new bootstrap.Toast(toastLive, {
77            autohide: param.autohide
78        });
79
80        /*    let iconToast = '';*/
81
82        // Position
83        switch (param.position) {
84            case 'TopLeft': document.querySelector('#divPosition').classList.add('top-0', 'start-0'); break;
85            case 'TopCenter': document.querySelector('#divPosition').classList.add('top-0', 'start-50', 'translate-middle-x'); break;
86            case 'TopRight': document.querySelector('#divPosition').classList.add('top-0', 'end-0'); break;
87            case 'MiddleLeft': document.querySelector('#divPosition').classList.add('top-50', 'start-0', 'translate-middle-y'); break;
88            case 'MiddleCenter': document.querySelector('#divPosition').classList.add('top-50', 'start-50', 'translate-middle'); break;
89            case 'MiddleRight': document.querySelector('#divPosition').classList.add('top-50', 'end-0', 'translate-middle-y'); break;
90            case 'BottomLeft': document.querySelector('#divPosition').classList.add('bottom-0', 'start-0'); break;
91            case 'BottomCenter': document.querySelector('#divPosition').classList.add('bottom-0', 'start-50', 'translate-middle-x'); break;
92            case 'BottomRight': document.querySelector('#divPosition').classList.add('bottom-0', 'end-0'); break;
93        }
94
95        if (type == 'alert') {
96            if (param.type === 'danger') {
97                document.querySelector('#liveToast').classList.add('liv-toast-alert-danger');
98            }
99        }
100        else {
101            if (param.type === 'danger') {
102                document.querySelector('#liveToast').classList.add('bg-toast-danger');
103                document.querySelector('#btn-toast-close').classList.add('text-toast-danger');
104                //iconToast = '<i class="icon-toast uil uil-times-circle"></i>'; 
105            }
106            else if (param.type === 'warning') {
107                document.querySelector('#liveToast').classList.add('bg-toast-warning');
108                document.querySelector('#btn-toast-close').classList.add('text-toast-warning');
109                //iconToast = '<i class="icon-toast uil uil-exclamation-triangle"></i>';
110            }
111            else {
112                document.querySelector('#liveToast').classList.add('bg-toast-success');
113                document.querySelector('#btn-toast-close').classList.add('text-toast-success');
114                /*            iconToast = '<i class="icon-toast uil uil-check-circle"></i>'; */
115            }
116        }
117
118        let dataBody = GetCookieUtf8(param.body);
119
120        //// Icon
121        //document.querySelector('#divToastIcon').innerHTML = iconToast;
122
123        // Body
124        document.querySelector('#divToastBody').innerHTML = dataBody;
125
126        toast.show();
127    }
128}
129
130function GetCookieUtf8(paramData) {
131    let dataBody = paramData;
132    try {
133
134        dataBody = decodeBase64ToUTF8(dataBody);
135    } catch (e) {
136
137        dataBody = encodeUTF8ToBase64(dataBody);
138        dataBody = decodeBase64ToUTF8(dataBody);
139    }
140
141    return dataBody;
142}
143
144function encodeUTF8ToBase64(utf8String) {
145    // Convert UTF-8 string to URI component
146    var uriComponent = unescape(encodeURIComponent(utf8String));
147
148    // Encode URI component to base64
149    var base64String = btoa(uriComponent);
150
151    return base64String;
152}
153
154function decodeBase64ToUTF8(base64String) {
155    // Decode base64 string
156    var decodedString = atob(base64String);
157
158    // Convert decoded string to UTF-8
159    var utf8String = decodeURIComponent(escape(decodedString));
160
161    return utf8String;
162}
163
164function OverlayShow(paramId, paramText) {
165
166    if (document.querySelectorAll('#' + paramId + '-panel-overlay').length === 0) {
167
168        var newNode = document.createElement('div');
169
170        newNode.classList.add('panel-overlay');
171        newNode.setAttribute('id', paramId + '-panel-overlay');
172        newNode.innerHTML = '<div class="panel-overlay-content">\
173                                        <div class="spinner-loader">\
174                                            <div class="dot1"></div>\
175                                            <div class="dot2"></div>\
176                                        </div>\
177                                        <h4 class="spinner-loader-text">' + paramText + '</h4>\
178                                    </div>';
179
180        document.querySelector('#' + paramId).after(newNode);
181    }
182}
183
184function ShowLoader(paramId, paramType) {
185
186    if (document.querySelectorAll('#' + paramId + '-panel-overlay').length === 0) {
187
188        var newNode = document.createElement('div');
189
190        if (paramType == 'modal') {
191            newNode.classList.add('page-loader-custom-modal');
192        }
193        else {
194            newNode.classList.add('page-loader-custom');
195        }
196        newNode.setAttribute('id', paramId + '-page-loader');
197        document.querySelector('#' + paramId).after(newNode);
198    }
199}
200
201function OverlayHide(paramId) {
202        if (document.querySelectorAll('#' + paramId + '-panel-overlay').length > 0) {
203
204            document.querySelectorAll('#' + paramId + '-panel-overlay').forEach(
205                event => {
206                    event.remove();
207                }
208            );
209        }
210}
211
212function HideLoader(paramId) {
213
214    if (document.querySelectorAll('#' + paramId + '-page-loader').length > 0) {
215
216        document.querySelectorAll('#' + paramId + '-page-loader').forEach(
217            event => {
218                event.remove();
219            }
220        );
221    }
222}
223
224function SetformatNumber(input) {
225
226    var paramType = input.getAttribute('data-type');
227
228    var input_val = input.value;
229
230    if (input_val === "") { return; }
231
232    var original_len = input_val.length;
233
234    var caret_pos = input.selectionStart;
235
236    if (paramType == 'currency') {
237
238        if (input_val.indexOf(".") >= 0) {
239            var decimal_pos = input_val.indexOf(".");
240
241            var left_side = input_val.substring(0, decimal_pos);
242            var right_side = input_val.substring(decimal_pos);
243
244            left_side = formatNumber(left_side);
245
246            right_side = formatNumber(right_side);
247
248            right_side = right_side.substring(0, 2);
249
250            input_val = left_side + "." + right_side;
251        }
252        else {
253            input_val = formatNumber(input_val);
254            input_val = input_val;
255        }
256    }
257    else if (paramType == 'floatNumOnly') {
258
259        if (input_val.indexOf(".") >= 0) {
260
261            var decimal_pos = input_val.indexOf(".");
262
263            var left_side = input_val.substring(0, decimal_pos);
264            var right_side = input_val.substring(decimal_pos);
265
266            left_side = formatNumberOnly(left_side);
267
268            right_side = formatNumberOnly(right_side);
269
270            input_val = left_side + "." + right_side;
271        }
272        else {
273            input_val = formatNumberOnly(input_val);
274            input_val = input_val;
275        }
276    }
277    else if (paramType == 'numberOnly') {
278        input_val = formatNumberOnly(input_val);
279        input_val = input_val;
280    }
281    else {
282        input_val = formatNumber(input_val);
283        input_val = input_val;
284    }
285
286    input.value = input_val;
287
288    var updated_len = input_val.length;
289
290    caret_pos = updated_len - original_len + caret_pos;
291
292    input.setSelectionRange(caret_pos, caret_pos);
293}
294
295function formatNumber(n) {
296    return n.replace(/\D/g, "").replace(/\B(?=(\d{3})+(?!\d))/g, ",")
297}
298
299function formatNumberOnly(n) {
300    return n.replace(/\D/g, "")
301}
302
303function Validate_Focus() {
304    var idFocus = '';
305    try {
306        document.querySelectorAll('.invalid-feedback').forEach(
307            event => {
308
309                if (window.getComputedStyle(event).display === 'block') {
310                    idFocus = '#' + event.getAttribute('data-for');
311                    throw BreakError;
312                }
313            }
314        );
315    } catch (e) {
316
317    }
318
319    if (idFocus != '' && document.querySelector(idFocus) !== null) {
320        document.querySelector(idFocus).focus();
321    }
322}
323
324function Get_Toast() {
325    if (getCookie("ToastData") != null && getCookie("ToastData") != '') {
326        var ToastData = JSON.parse(getCookie("ToastData"));
327
328        Set_Toast(ToastData);
329        deleteCookie("ToastData");
330    }
331}
332
333function setCookie(cname, cvalue, exdays) {
334    if (cname == 'ToastData' && cvalue != '') {
335
336        let dataObj = JSON.parse(cvalue);
337
338        // Encode UTF-8 string to Latin-1
339        var latin1String = unescape(encodeURIComponent(dataObj.body));
340
341        // Encode Latin-1 string to base64
342        dataObj.body = btoa(latin1String);
343
344        cvalue = JSON.stringify(dataObj);
345    }
346
347    var d = new Date();
348    d.setTime(d.getTime() + ((exdays) * 24 * 60 * 60 * 1000));
349    var expires = "expires=" + d.toUTCString();
350    document.cookie = cname + "=" + cvalue + ";" + expires + ";path=/";
351}
352
353function getCookie(cname) {
354    var name = cname + "=";
355    var decodedCookie = decodeURIComponent(document.cookie);
356    var ca = decodedCookie.split(';');
357    for (var i = 0; i < ca.length; i++) {
358        var c = ca[i];
359        while (c.charAt(0) == ' ') {
360            c = c.substring(1);
361        }
362        if (c.indexOf(name) == 0) {
363            return c.substring(name.length, c.length);
364        }
365    }
366    return "";
367}
368
369function deleteCookie(name) {
370    setCookie(name, "", -1);
371}
372
373function numberWithCommas(number) {
374    var parts = number.toString().split(".");
375    parts[0] = parts[0].replace(/\B(?=(\d{3})+(?!\d))/g, ",");
376    return parts.join(".");
377}
378
379function dateFormat(value, row, index) {
380    if (moment(value).isValid()) {
381
382        dataDay = moment(value).format('DD');
383        dataMonth = moment(value).format('MM');
384        dataYear = parseInt(moment(value).format('YYYY')) + 543;
385
386        return dataDay + '/' + dataMonth + '/' + dataYear;
387    }
388    else {
389
390        return '';
391    }
392}

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.