PageSourceSearch

https://www.ncpc.org.sg/assets/js/common.js

js ncpc.org.sg collected 2026-09-25 23:57:14 UTC 14,926 bytes, 420 lines download raw bytes

1'use strict';
2
3var _slicedToArray = function () { function sliceIterator(arr, i) { var _arr = []; var _n = true; var _d = false; var _e = undefined; try { for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i["return"]) _i["return"](); } finally { if (_d) throw _e; } } return _arr; } return function (arr, i) { if (Array.isArray(arr)) { return arr; } else if (Symbol.iterator in Object(arr)) { return sliceIterator(arr, i); } else { throw new TypeError("Invalid attempt to destructure non-iterable instance"); } }; }();
4
5var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; };
6
7var BLUEPRINT;
8
9if ((typeof BLUEPRINT === 'undefined' ? 'undefined' : _typeof(BLUEPRINT)) !== "object") {
10    BLUEPRINT = {};
11}
12
13(function () {
14    var hashCode;
15    BLUEPRINT.hide = function (el) {
16        var display;
17        display = BLUEPRINT.isVisible(el);
18        if (display) {
19            el.style.display = 'none';
20        }
21    };
22    BLUEPRINT.show = function (el) {
23        var display;
24        display = BLUEPRINT.isVisible(el);
25        if (!display) {
26            el.style.display = 'block';
27        }
28    };
29    BLUEPRINT.toggle = function (el) {
30        var display;
31        display = BLUEPRINT.isVisible(el);
32        if (!display) {
33            el.style.display = 'block';
34        } else {
35            el.style.display = 'none';
36        }
37    };
38    BLUEPRINT.getElements = function (name) {
39        return document.querySelectorAll('[data-blueprint="' + name + '"]');
40    };
41    BLUEPRINT.isVisible = function (el) {
42        var display;
43        if (window.getComputedStyle) {
44            display = getComputedStyle(el, null).display;
45        } else {
46            display = el.currentStyle.display;
47        }
48        return display !== 'none';
49    };
50    BLUEPRINT.hasClass = function (el, className) {
51        if (el.classList) {
52            return el.classList.contains(className);
53        } else {
54            return new RegExp('\\b' + className + '\\b').test(el.className);
55        }
56    };
57    BLUEPRINT.addClass = function (el, className) {
58        if (el.classList) {
59            return el.classList.add(className);
60        } else if (!BLUEPRINT.hasClass(el, className)) {
61            return el.className += ' ' + className;
62        }
63    };
64    BLUEPRINT.removeClass = function (el, className) {
65        if (el.classList) {
66            return el.classList.remove(className);
67        } else {
68            return el.className = el.className.replace(new RegExp('\\b' + className + '\\b', 'g'), '');
69        }
70    };
71    BLUEPRINT.parseOptions = function (el) {
72        var j, len, option, options, opts;
73        opts = {};
74        options = el.getAttribute('data-options');
75        options = (options || '').replace(/\s/g, '').split(';');
76        for (j = 0, len = options.length; j < len; j++) {
77            option = options[j];
78            if (option) {
79                option = option.split(':');
80                opts[option[0]] = option[1];
81            }
82        }
83        return opts;
84    };
85    BLUEPRINT.click = function (el, handler) {
86        if (!el.eventListener) {
87            el.eventListener = true;
88            return el.addEventListener('click', handler);
89        }
90    };
91    BLUEPRINT.unclick = function (el, handler) {
92        if (el.eventListener) {
93            el.eventListener = false;
94            return el.removeEventListener('click', handler);
95        }
96    };
97    if (document.readyState !== 'loading') {
98        BLUEPRINT.isReady = true;
99        return;
100    } else if (document.addEventListener) {
101        document.addEventListener('DOMContentLoaded', function () {
102            BLUEPRINT.isReady = true;
103        });
104    } else {
105        document.attachEvent('onreadystatechange', function () {
106            if (document.readyState === 'complete') {
107                BLUEPRINT.isReady = true;
108            }
109        });
110    }
111    return hashCode = function hashCode(str) {
112        var hash, i, j, len, s;
113        hash = 0;
114        for (i = j = 0, len = str.length; j < len; i = ++j) {
115            s = str[i];
116            hash = ~~((hash << 5) - hash + str.charCodeAt(i));
117        }
118        return hash;
119    };
120})();
121;var i, j, len, len1, list, lists, menu, menuElems, options, subMenu;
122
123BLUEPRINT.toggleMenu = function (el, options) {
124    BLUEPRINT.collapseMenu(el, 'hide');
125    BLUEPRINT.click(el, function (e) {
126        var active, actives, i, len;
127        e.preventDefault();
128        e.stopPropagation();
129        if (options.single) {
130            actives = menu.querySelectorAll('.is-active');
131            for (i = 0, len = actives.length; i < len; i++) {
132                active = actives[i];
133                if (active !== e.target) {
134                    BLUEPRINT.removeClass(active, 'is-active');
135                    if (active.nextElementSibling.nodeName === 'UL') {
136                        BLUEPRINT.hide(active.nextElementSibling);
137                    }
138                }
139            }
140        }
141        BLUEPRINT.collapseMenu(e.target, 'toggle');
142    });
143};
144
145BLUEPRINT.collapseMenu = function (el, status) {
146    var smenu;
147    smenu = el.nextElementSibling;
148    if (status === 'show') {
149        BLUEPRINT.show(smenu);
150        if (BLUEPRINT.isVisible(smenu)) {
151            return BLUEPRINT.addClass(el, 'is-active');
152        }
153    } else if (status === 'hide') {
154        BLUEPRINT.hide(smenu);
155        if (!BLUEPRINT.isVisible(smenu)) {
156            return BLUEPRINT.removeClass(el, 'is-active');
157        }
158    } else if (status === 'toggle') {
159        BLUEPRINT.toggle(smenu);
160        if (BLUEPRINT.isVisible(smenu)) {
161            return BLUEPRINT.addClass(el, 'is-active');
162        } else {
163            return BLUEPRINT.removeClass(el, 'is-active');
164        }
165    }
166};
167
168if (!BLUEPRINT.isReady) {
169    menuElems = BLUEPRINT.getElements('menu');
170    if (menuElems && menuElems.length > 0) {
171        for (i = 0, len = menuElems.length; i < len; i++) {
172            menu = menuElems[i];
173            options = BLUEPRINT.parseOptions(menu);
174            lists = menu.querySelectorAll('.bp-menu-list');
175            for (j = 0, len1 = lists.length; j < len1; j++) {
176                list = lists[j];
177                subMenu = list.querySelector('ul');
178                if (subMenu) {
179                    BLUEPRINT.toggleMenu(subMenu.previousElementSibling, options);
180                }
181            }
182        }
183    }
184}
185
186;var i, len, modal, modals, options;
187
188BLUEPRINT.toggleModal = function (el, options) {
189    if (!options.target) {
190        throw new Error('Found [BLUEPRINT-MODAL] but there is no target defined!');
191    }
192    el.addEventListener('click', function (e) {
193
194        var backdrop, closeBtn, _closeModal, modal;
195        e.preventDefault();
196        e.stopPropagation();
197        modal = document.getElementById(options.target);
198        backdrop = modal.querySelector('.bp-modal-background');
199        closeBtn = modal.querySelector('.bp-modal-close');
200        _closeModal = function closeModal() {
201            if (BLUEPRINT.hasClass(modal, 'is-active')) {
202                BLUEPRINT.removeClass(modal, 'is-active');
203                return BLUEPRINT.unclick(this, _closeModal);
204            }
205        };
206        if (options.closeByBackdrop === void 0 || options.closeByBackdrop) {
207            BLUEPRINT.click(backdrop, _closeModal);
208        }
209        if (options.closeByButton === void 0 || options.closeByButton) {
210            BLUEPRINT.click(closeBtn, _closeModal);
211        }
212        BLUEPRINT.addClass(modal, 'is-active');
213    });
214};
215
216if (!BLUEPRINT.isReady) {
217    modals = BLUEPRINT.getElements('bp-modal');
218    if (modals && modals.length > 0) {
219        for (i = 0, len = modals.length; i < len; i++) {
220            modal = modals[i];
221            options = BLUEPRINT.parseOptions(modal);
222            BLUEPRINT.toggleModal(modal, options);
223        }
224    }
225}
226;var i, len, notification, notifications, options;
227
228BLUEPRINT.notification = function (el, status, options) {
229    var deleteBtn, deleteNotification;
230    if (options.deletable === void 0 || options.deletable !== false) {
231        deleteBtn = el.querySelector('.delete');
232        deleteNotification = function deleteNotification(e) {
233            e.preventDefault();
234            e.stopPropagation();
235            el.parentNode.removeChild(el);
236        };
237    }
238    if (status === 'show') {
239        BLUEPRINT.removeClass(el, 'is-hidden');
240        BLUEPRINT.click(deleteBtn, deleteNotification);
241    } else if (status === 'hide') {
242        BLUEPRINT.addClass(el, 'is-hidden');
243    } else if (status === 'toggle') {
244        if (BLUEPRINT.isVisible(el)) {
245            BLUEPRINT.notification(el, 'hide', options);
246        } else {
247            BLUEPRINT.notification(el, 'show', options);
248        }
249        return;
250    }
251};
252
253if (!BLUEPRINT.isReady) {
254    notifications = BLUEPRINT.getElements('notification');
255    if (notifications && notifications.length > 0) {
256        for (i = 0, len = notifications.length; i < len; i++) {
257            notification = notifications[i];
258            options = BLUEPRINT.parseOptions(notification);
259            BLUEPRINT.notification(notification, 'hide', options);
260        }
261    }
262}
263;var i, j, len, len1, tab, tabs, target, targets;
264
265BLUEPRINT.toggleTab = function (el) {
266    var i, l, len, links;
267    links = el.target.parentNode.parentNode;
268    links = links.querySelectorAll('li');
269    for (i = 0, len = links.length; i < len; i++) {
270        l = links[i];
271        BLUEPRINT.removeClass(l, 'is-active');
272        BLUEPRINT.hide(document.querySelector(l.firstChild.getAttribute('data-tab')));
273    }
274    BLUEPRINT.addClass(el.target.parentNode, 'is-active');
275    BLUEPRINT.show(document.querySelector(el.target.getAttribute('data-tab')));
276};
277
278if (!BLUEPRINT.isReady) {
279    tabs = BLUEPRINT.getElements('tabs');
280    if (tabs && tabs.length > 0) {
281        for (i = 0, len = tabs.length; i < len; i++) {
282            tab = tabs[i];
283            targets = tab.querySelectorAll('[data-tab]');
284            for (j = 0, len1 = targets.length; j < len1; j++) {
285                target = targets[j];
286                tab = document.querySelector(target.getAttribute('data-tab'));
287                if (BLUEPRINT.hasClass(target.parentNode, 'is-active') === false) {
288                    BLUEPRINT.hide(tab);
289                }
290                BLUEPRINT.click(target, BLUEPRINT.toggleTab);
291            }
292        }
293    }
294}
295
296// Get all "navbar-burger" elements
297var $navbarBurgers = Array.prototype.slice.call(document.querySelectorAll('.navbar-burger'), 0);
298
299// Check if there are any navbar burgers
300if ($navbarBurgers.length > 0) {
301
302    // Add a click event on each of them
303    $navbarBurgers.forEach(function ($el) {
304        $el.addEventListener('click', function () {
305
306            // Get the target from the "data-target" attribute
307            var target = $el.dataset.target;
308            var $target = document.getElementById(target);
309
310            // Toggle the class on both the "navbar-burger" and the "navbar-menu"
311            $el.classList.toggle('is-active');
312            $target.classList.toggle('is-active');
313        });
314    });
315}
316
317// // Searchbar Activate
318// var $searchActivate = document.getElementById('search-activate');
319// var $searchDeactivate = document.getElementById('search-deactivate');
320// var $searchBar = document.getElementById('search-bar');
321// BLUEPRINT.hide($searchDeactivate);
322// BLUEPRINT.hide($searchBar);
323// BLUEPRINT.show($searchActivate);
324//
325// $searchActivate.addEventListener('click', function (event){
326//     BLUEPRINT.toggle($searchDeactivate);
327//     BLUEPRINT.toggle($searchBar);
328//     BLUEPRINT.toggle($searchActivate);
329// });
330//
331// $searchDeactivate.addEventListener('click', function (event){
332//     BLUEPRINT.toggle($searchDeactivate);
333//     BLUEPRINT.toggle($searchBar);
334//     BLUEPRINT.toggle($searchActivate);
335// });
336
337// Dropdowns
338var $dropdowns = getAll('.bp-dropdown:not(.is-hoverable)');
339
340if ($dropdowns.length > 0) {
341    $dropdowns.forEach(function ($el) {
342        $el.addEventListener('click', function (event) {
343            event.stopPropagation();
344            $el.classList.toggle('is-active');
345        });
346    });
347
348    document.addEventListener('click', function (event) {
349        closeDropdowns();
350    });
351}
352
353function closeDropdowns() {
354    $dropdowns.forEach(function ($el) {
355        $el.classList.remove('is-active');
356    });
357}
358
359// Close dropdowns if ESC pressed
360document.addEventListener('keydown', function (event) {
361    var e = event || window.event;
362    if (e.keyCode === 27) {
363        closeDropdowns();
364    }
365});
366
367// Custom dropdown code for mobile browsers
368var dropdowns = getAll('.bp-dropdown.is-hoverable');
369if (dropdowns.length > 0) {
370    dropdowns.forEach(function (dropdown) {
371        var dropdownMenu = document.getElementById("dropdown-menu");
372
373        var _dropdown$getElements = dropdown.getElementsByClassName("bp-dropdown-button"),
374            _dropdown$getElements2 = _slicedToArray(_dropdown$getElements, 1),
375            dropdownTrigger = _dropdown$getElements2[0];
376
377        if (dropdownMenu && dropdownTrigger) {
378            dropdownTrigger.onclick = function () {
379                dropdownMenu.classList.toggle("hide");
380            };
381            document.addEventListener("click", function (evt) {
382                var targetElement = evt.target; // clicked element
383
384                do {
385                    if (targetElement == dropdownMenu || targetElement == dropdownTrigger) {
386                        return;
387                    }
388                    // Go up the DOM
389                    targetElement = targetElement.parentNode;
390                } while (targetElement);
391
392                // This is a click outside.
393                dropdownMenu.classList.add("hide");
394            });
395        }
396    });
397}
398
399// Functions
400function getAll(selector) {
401    return Array.prototype.slice.call(document.querySelectorAll(selector), 0);
402}
403
404$(document).ready(function () {
405    var masthead_container = $('.masthead-container');
406    var searchToggle = $('#search-activate');
407    var searchIcon = $('#search-activate span');
408    var searchBar = $('.search-bar');
409    var searchBar_input = $('.search-bar input');
410    searchToggle.on('click', function (e) {
411        e.preventDefault();
412        searchIcon.toggleClass('sgds-icon-search').toggleClass('sgds-icon-cross');;
413        searchBar.toggleClass('hide');
414        searchBar_input.focus().val('');
415        masthead_container.toggleClass('is-opened');
416    });
417
418    // Wrap all tables in a <div> with the horizontal-scroll class so that the table will not be cut off on mobile
419    $('table').wrap('<div class="horizontal-scroll"></div>');
420});

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.