PageSourceSearch

https://mycargus.cargus.ro/_content/BlazorStrap/blazorstrap.js?v=20260928.2

js cargus.ro collected 2026-10-04 00:18:45 UTC 37,346 bytes, 867 lines download raw bytes

1// Release 5.0
2// noinspection JSUnusedGlobalSymbols
3let link;
4let navbarShown = false;
5
6if (!Element.prototype.matches) {
7    Element.prototype.matches =
8        Element.prototype.msMatchesSelector ||
9        Element.prototype.webkitMatchesSelector;
10}
11
12if (!Element.prototype.closest) {
13    Element.prototype.closest = function (s) {
14        var el = this;
15
16        do {
17            if (Element.prototype.matches.call(el, s)) return el;
18            el = el.parentElement || el.parentNode;
19        } while (el !== null && el.nodeType === 1);
20        return null;
21    };
22}
23
24const timeout = (ms, message) => {
25    return new Promise((resolve) => {
26        setTimeout(() => {
27            resolve();
28            //reject(new Error(message));
29        }, ms);
30    });
31};
32
33
34const transitionEnd = (element) => {
35    return new Promise(resolve => {
36        resFunc = resolve;
37        element.addEventListener("transitionend", resFunc);
38    });
39}
40window.blazorStrap = {
41    HideModal: async function (id, name, element, bodyAffected = true) {
42        return new Promise(async function (resolve) {
43            blazorStrap.RemoveDocumentEvent(id, name, "click");
44            blazorStrap.RemoveDocumentEvent(id, name, "keyup");
45
46            if (bodyAffected) {
47                await blazorStrap.RemoveBodyClass("modal-open");
48                await blazorStrap.SetBodyStyle("overflow", "");
49                await blazorStrap.SetBodyStyle("paddingRight", "");
50            }
51
52
53            await blazorStrap.RemoveClass(element, "show");
54            await blazorStrap.WaitForTransitionEnd(element, 300);
55
56            resolve();
57        });
58    },
59    ShowOffcanvas: async function (objRef, id, name, element, bodyAffected = true, showBackdrop = true) {
60        return new Promise(async function (resolve) {
61            blazorStrap.AddDocumentEvent(objRef, id, name, "click");
62            blazorStrap.RemoveDocumentEvent(objRef, id, name, "keyup");
63
64            if (showBackdrop) {
65                if (bodyAffected) {
66                    var scrollWidth = await blazorStrap.GetScrollBarWidth();
67                    var viewportHeight = await blazorStrap.GetWindowInnerHeight();
68                    var peakHeight = await blazorStrap.PeakHeight(element);
69
70                    if (viewportHeight > peakHeight) {
71                        await blazorStrap.SetBodyStyle("overflow", "hidden");
72                        if (scrollWidth != 0)
73                            await blazorStrap.SetBodyStyle("paddingRight", scrollWidth + "px");
74                    }
75                }
76            }
77            //Clean up later
78            try {
79                objRef.invokeMethodAsync("ToggleBackdropAndModalChange");
80            } catch { }
81
82            await blazorStrap.SetStyle(element, "visibility", "visible", 1);
83            //await blazorStrap.SetStyle(element, "display", "block", 50);
84            
85            //await blazorStrap.AddClass(element, "show");
86            //await blazorStrap.WaitForTransitionEnd(element, 300);
87            resolve();
88        });
89    },
90    ShowModal: async function (objRef, id, name, element, bodyAffected = true) {
91        return new Promise(async function (resolve) {
92            blazorStrap.AddDocumentEvent(objRef, id, name, "click");
93            blazorStrap.RemoveDocumentEvent(objRef, id, name, "keyup");
94
95            //Clean up later
96            try {
97                objRef.invokeMethodAsync("ToggleBackdropAndModalChange");
98            } catch { }
99
100            setTimeout(async function () {
101                if (bodyAffected) {
102                    var scrollWidth = await blazorStrap.GetScrollBarWidth();
103                    var viewportHeight = await blazorStrap.GetWindowInnerHeight();
104                    var peakHeight = await blazorStrap.PeakHeight(element);
105
106                    if (viewportHeight > peakHeight) {
107                        await blazorStrap.SetBodyStyle("overflow", "hidden");
108                        if (scrollWidth != 0)
109                            await blazorStrap.SetBodyStyle("paddingRight", scrollWidth + "px");
110                    }
111                }
112
113
114                await blazorStrap.SetStyle(element, "display", "block", 1);
115                await blazorStrap.AddClass(element, "show");
116                await blazorStrap.WaitForTransitionEnd(element, 300);
117                resolve();
118            }, 300);
119        });
120    },
121    HidePopover: async function (element, id) {
122        return new Promise(async function (resolve) {
123            await blazorStrap.RemoveClass(element, "show", 10);
124            await blazorStrap.SetStyle(element, "display", "none");
125            await blazorStrap.RemovePopover(element, id);
126            // Waits 150 ms to allow any transition to end
127            setTimeout(async function () {
128                resolve();
129            }, 150);
130        });
131    },
132    ShowPopover: async function (element, position, target, offset = "none") {
133        return new Promise(async function (resolve) {
134            await blazorStrap.SetStyle(element, "display", "");
135            await blazorStrap.SetStyle(element, "visibility", "hidden", 1);
136            await blazorStrap.AddClass(element, "show", 1);
137            await blazorStrap.AddPopover(element, position, target, offset);
138            setTimeout(async function () {
139                await blazorStrap.UpdatePopoverArrow(element, position, false);
140                await blazorStrap.SetStyle(element, "visibility", "", 1);
141                // Waits 150 ms to allow any transition to end
142                setTimeout(async function () {
143                    resolve(element.style.cssText);
144                }, 150);
145            }, 1);
146
147        });
148    },
149    WaitForTransitionEnd: function (element, timeoutLength) {
150        return Promise.race([timeout(timeoutLength), transitionEnd(element)]);
151    },
152    CleanUpEvents: function () {
153        Object.keys(blazorStrap.EventHandlers).forEach(key => {
154            if (document.querySelector("[data-blazorstrap='" + key + "']") === null) {
155                Object.keys(blazorStrap.EventHandlers[key]).forEach(name => {
156                    Object.keys(blazorStrap.EventHandlers[key][name]).forEach(type => {
157                        try {
158                            window.removeEventListener(type, blazorStrap.EventHandlers[key][name][type].Callback, false);
159                        } catch { }
160                    });
161                });
162                delete blazorStrap.EventHandlers[key];
163            }
164        });
165    },
166    BlurAll: function () {
167        var tmp = document.createElement("input");
168        tmp.position = "absolute";
169        tmp.top = -500;
170        document.body.appendChild(tmp);
171        tmp.focus();
172        document.body.removeChild(tmp);
173    },
174    AddAttribute: async function (element, name, value) {
175        if (element === null || element === undefined) return;
176        return new Promise(function (resolve) {
177            element.setAttribute(name, value);
178            resolve();
179        });
180    },
181    AddBodyClass: async function (className) {
182        return new Promise(function (resolve) {
183            document.body.classList.add(className);
184            resolve();
185        });
186    },
187    AddClass: async function (element, className, delay = 0) {
188        if (element === null || element === undefined) return;
189        element.classList.add(className);
190        return new Promise(function (resolve) {
191            if (delay !== 0) setTimeout(() => resolve(), delay); else resolve();
192        });
193    },
194    AddDocumentEvent: async function (objRef, id, name, type, ignoreChildren = false, filter = "") {
195        return new Promise(function (resolve) {
196            blazorStrap.AddEventInternal(objRef, document, id, name, type, ignoreChildren, filter);
197            resolve();
198        });
199    },
200    AddEventInternal: function (objRef, element, id, name, type, ignoreChildren = false, filter = "") {
201        blazorStrap.CleanUpEvents();
202
203        if (element === null)
204            return;
205
206        let expandedWidth = 0;
207        if (type === "resize" && element == document) {
208            let navbar = document.querySelector("[class*=navbar-expand]");
209            // Gets the expanded size
210            if (navbar !== null) {
211
212                if (navbar.classList.contains("navbar-expand") || navbar.classList.contains("navbar-expand-ex")) expandedWidth = 576;
213                else if (navbar.classList.contains("navbar-expand-md")) expandedWidth = 768;
214                else if (navbar.classList.contains("navbar-expand-lg")) expandedWidth = 992;
215                else if (navbar.classList.contains("navbar-expand-xl")) expandedWidth = 1200;
216                else if (navbar.classList.contains("navbar-expand-xxl")) expandedWidth = 1400;
217            }
218            if (expandedWidth > window.innerWidth)
219                navbarShown = true;
220        }
221        if (blazorStrap.EventHandlers[id] === undefined) {
222            blazorStrap.EventHandlers[id] = {};
223        }
224
225        if (blazorStrap.EventHandlers[id][name] === undefined) {
226            blazorStrap.EventHandlers[id][name] = {};
227        }
228
229        blazorStrap.EventHandlers[id][name][type] = {
230            resizeFunc: function () { }
231        }
232        blazorStrap.EventHandlers[id][name][type] = {
233            Callback: async function (event) {
234                try {
235                    let resizeFunc;
236                    if (type === "resize" && element === document) {
237                        clearTimeout(resizeFunc);
238                        resizeFunc = setTimeout(function () {
239                            if (window.innerWidth < expandedWidth)
240                                navbarShown = false;
241                            if (window.innerWidth > expandedWidth && navbarShown === false) {
242                                navbarShown = true;
243                                // noinspection JSUnresolvedVariable,JSUnresolvedFunction
244                                try {
245                                    var test = objRef.invokeMethodAsync("InteropEventCallback", id, name, type, element.classList, blazorStrap.GetEvents(event));
246                                } catch {
247                                    // ObjectRef may be gone by time this fires   
248                                }
249                            }
250                        }, 100);
251                        return;
252                    }
253                    if (type === "resize") {
254                        clearTimeout(blazorStrap.EventHandlers[id][name][type][resizeFunc]);
255                        blazorStrap.EventHandlers[id][name][type][resizeFunc] = setTimeout(function () {
256                            objRef.invokeMethodAsync("InteropEventCallback", id, name, type, element.classList, blazorStrap.GetEvents(event));
257                        }, 250);
258                        return;
259                    }
260                    if (type === "transitionend" && id !== event.target.getAttribute("data-blazorstrap")) return;
261
262                    if (name === "bsdropdown") {
263                        let parent = document.querySelector("[data-blazorstrap='" + id + "']");
264
265                        if (parent !== null) {
266                            if (parent.contains(event.target)) {
267                                if (event.target.closest(".dropdown-toggle") !== null) {
268                                    return;
269                                }
270                            }
271                        }
272                    }
273                    if (ignoreChildren) {
274                        let parent = document.querySelector("[data-blazorstrap='" + id + "']");
275
276                        if (parent !== null) {
277                            if (parent.contains(event.target)) return;
278                        }
279                    }
280                    if (filter === "") {
281                        objRef.invokeMethodAsync("InteropEventCallback", id, name, type, element.classList, blazorStrap.GetEvents(event));
282                    } else if (element.getElementsByClassName(filter)) {
283                        // noinspection JSUnresolvedVariable,JSUnresolvedFunction
284                        objRef.invokeMethodAsync("InteropEventCallback", id, name, type, element.classList, blazorStrap.GetEvents(event));
285                    }
286                } catch
287                {
288                    await blazorStrap.RemoveEventInternal(element, id, name, type);
289                }
290            }
291        };
292        if (type === "resize")
293            window.addEventListener(type, blazorStrap.EventHandlers[id][name][type].Callback, false);
294        else
295            element.addEventListener(type, blazorStrap.EventHandlers[id][name][type].Callback, false);
296    },
297    AddEvent: async function (objRef, id, name, type, isDocument = false, ignoreChildren = false, filter = "") {
298        return new Promise(function (resolve) {
299            blazorStrap.AddEventInternal(objRef, document.querySelector("[data-blazorstrap='" + id + "']"), id, name, type, ignoreChildren, filter);
300            resolve();
301        });
302    },
303    AddPopover: async function (element, position, target, offset = "none") {
304        function ToPixels(value) {
305            if (value.indexOf("rem") !== -1) {
306                value = value.substring(0, value.indexOf("rem"));
307                return value * parseFloat(getComputedStyle(document.documentElement).fontSize);
308            } else if (value.indexOf("em") !== -1) {
309                value = value.substring(0, value.indexOf("em"));
310                return value * parseFloat(getComputedStyle(element).fontSize);
311            }
312
313            return value;
314        }
315
316        return new Promise(function (resolve) {
317            const id = element.getAttribute("data-blazorstrap");
318            target = document.querySelector("[data-blazorstrap='" + target + "']");
319
320            if (blazorStrap.EventHandlers[id] === undefined) {
321                blazorStrap.EventHandlers[id] = {};
322            }
323
324            if (offset !== "none") {
325                offset = offset.split(",");
326                blazorStrap.EventHandlers[id]["Popover"] = Popper.createPopper(target, element, {
327                    placement: position,
328                    modifiers: [{
329                        name: 'offset',
330                        options: {
331                            offset: [parseInt(ToPixels(offset[0])), parseInt(ToPixels(offset[1]))]
332                        }
333                    }]
334                });
335            } else {
336                blazorStrap.EventHandlers[id]["Popover"] = Popper.createPopper(target, element, {
337                    placement: position
338                });
339            }
340
341            resolve(true);
342        });
343    },
344    AnimateCarousel: async function (objref, id, showEl, hideEl, back) {
345        await blazorStrap.CleanupCarousel(showEl, hideEl);
346
347        let callback = function () {
348            objref.invokeMethodAsync("InteropEventCallback", id, "bscarouselbase", "transitionend");
349        };
350
351        return new Promise(function (resolve) {
352            if (back) {
353                showEl.classList.add("carousel-item-prev");
354                setTimeout(async function () {
355                    showEl.classList.add("carousel-item-end");
356                    hideEl.classList.add("carousel-item-end");
357                    hideEl.addEventListener("transitionend", callback, {
358                        once: true
359                    });
360                    resolve((await blazorStrap.TransitionDidNotStart(showEl)));
361                }, 10);
362            } else {
363                showEl.classList.add("carousel-item-next");
364                setTimeout(async function () {
365                    showEl.classList.add("carousel-item-start");
366                    hideEl.classList.add("carousel-item-start");
367                    hideEl.addEventListener("transitionend", callback, {
368                        once: true
369                    });
370                    resolve((await blazorStrap.TransitionDidNotStart(showEl)));
371                }, 10);
372            }
373        });
374    },
375    AnimateCarouselV4: async function (objref, id, showEl, hideEl, back) {
376        await blazorStrap.CleanupCarousel(showEl, hideEl);
377
378        let callback = function () {
379            objref.invokeMethodAsync("InteropEventCallback", id, "bscarouselbase", "transitionend");
380        };
381
382        return new Promise(function (resolve) {
383            if (back) {
384                showEl.classList.add("carousel-item-prev");
385                setTimeout(async function () {
386                    showEl.classList.add("carousel-item-right");
387                    hideEl.classList.add("carousel-item-right");
388                    hideEl.addEventListener("transitionend", callback, {
389                        once: true
390                    });
391                    resolve((await blazorStrap.TransitionDidNotStart(showEl)));
392                }, 10);
393            } else {
394                showEl.classList.add("carousel-item-next");
395                setTimeout(async function () {
396                    showEl.classList.add("carousel-item-left");
397                    hideEl.classList.add("carousel-item-left");
398                    hideEl.addEventListener("transitionend", callback, {
399                        once: true
400                    });
401                    resolve((await blazorStrap.TransitionDidNotStart(showEl)));
402                }, 10);
403            }
404        });
405    },
406    AnimateCollapse: async function (objRef, element, id, shown, name) {
407        if (shown) {
408            let cleanup = function () {
409                element.style["height"] = "";
410                element.classList.remove("collapsing");
411                element.classList.add("collapse");
412                element.classList.add("show");
413                objRef.invokeMethodAsync("InteropEventCallback", id, name, "transitionend", null, null);
414            };
415
416            let height = await blazorStrap.PeakHeight(element);
417
418            element.classList.remove("collapse");
419            element.classList.add("collapsing");
420            element.addEventListener("transitionend", cleanup, {
421                once: true
422            });
423            setTimeout(async function () {
424                element.style["height"] = height + "px";
425
426                if (await blazorStrap.TransitionDidNotStart(element, 50)) {
427                    cleanup();
428                    element.removeEventListener("transitionend", cleanup, {
429                        once: true
430                    });
431                    objRef.invokeMethodAsync("InteropEventCallback", id, name, "transitionend", null, null);
432                }
433            }, 10);
434        } else {
435            let cleanup = function () {
436                element.classList.remove("collapsing");
437                element.classList.add("collapse");
438                objRef.invokeMethodAsync("InteropEventCallback", id, name, "transitionend", null, null);
439            };
440
441            let height = await blazorStrap.GetHeight(element);
442            element.style["height"] = height + "px";
443            element.classList.remove("collapse");
444            element.classList.remove("show");
445            element.classList.add("collapsing");
446            element.addEventListener("transitionend", cleanup, {
447                once: true
448            });
449            setTimeout(async function () {
450                element.style["height"] = "";
451
452                if (await blazorStrap.TransitionDidNotStart(element, 50)) {
453                    cleanup();
454                    element.removeEventListener("transitionend", cleanup, { once: true });
455                    objRef.invokeMethodAsync("InteropEventCallback", id, name, "transitionend", null, null);
456                }
457            }, 10);
458        }
459    },
460    AnimateHorizontalCollapse: async function (objRef, element, id, shown, name) {
461        if (shown) {
462            let cleanup = function () {
463                element.style["width"] = "";
464                element.classList.remove("collapsing");
465                element.classList.add("collapse");
466                element.classList.add("show");
467                objRef.invokeMethodAsync("InteropEventCallback", id, name, "transitionend", null, null);
468            };
469            let width = await blazorStrap.PeakWidth(element);
470
471            element.classList.remove("collapse");
472            element.classList.add("collapsing");
473            element.addEventListener("transitionend", cleanup, {
474                once: true
475            });
476            setTimeout(async function () {
477                element.style["width"] = width + "px";
478
479                if (await blazorStrap.TransitionDidNotStart(element, 50)) {
480                    cleanup();
481                    element.removeEventListener("transitionend", cleanup, {
482                        once: true
483                    });
484                    objRef.invokeMethodAsync("InteropEventCallback", id, name, "transitionend", null, null);
485                }
486            }, 10);
487        } else {
488            let cleanup = function () {
489                element.classList.remove("collapsing");
490                element.classList.add("collapse");
491                objRef.invokeMethodAsync("InteropEventCallback", id, name, "transitionend", null, null);
492            };
493
494            let width = await blazorStrap.GetWidth(element);
495            element.style["width"] = width + "px";
496            element.classList.remove("collapse");
497            element.classList.remove("show");
498            element.classList.add("collapsing");
499            element.addEventListener("transitionend", cleanup, {
500                once: true
501            });
502            setTimeout(async function () {
503                element.style["width"] = "";
504
505                if (await blazorStrap.TransitionDidNotStart(element, 50)) {
506                    cleanup();
507                    element.removeEventListener("transitionend", cleanup, { once: true });
508                    objRef.invokeMethodAsync("InteropEventCallback", id, name, "transitionend", null, null);
509                }
510            }, 10);
511        }
512    },
513    CleanupCarousel: async function (showEl, hideEl) {
514        //Cleans up any rogue calls
515        return new Promise(function (resolve) {
516            hideEl.classList.remove("carousel-item-end");
517            hideEl.classList.remove("carousel-item-prev");
518            hideEl.classList.remove("carousel-item-next");
519            hideEl.classList.remove("carousel-item-start");
520            showEl.classList.remove("carousel-item-end");
521            showEl.classList.remove("carousel-item-prev");
522            showEl.classList.remove("carousel-item-next");
523            showEl.classList.remove("carousel-item-start");
524            resolve();
525        });
526    },
527    EventHandlers: [],
528    GetChildrenIds: function (target) { // Likely can be removed
529        const children = target.querySelectorAll("[data-blazorstrap]");
530        let result = [];
531
532        for (i = 0; i < children; ++i) {
533            result.push(children[i].getAttribute("data-blazorstrap"));
534        }
535        return result;
536    },
537    GetEvents: function (event) {   // Likely can be removed
538        try {
539            return {
540                key: event.key,
541                clientWidth: document.documentElement.clientWidth,
542                parent: blazorStrap.GetParent(event.target.parentElement),
543                target: {
544                    nodeName: event.target.nodeName,
545                    classList: event.target.classList,
546                    targetId: event.target.getAttribute("data-blazorstrap-target"),
547                    childrenId: blazorStrap.GetChildrenIds(event.target),
548                    dataId: event.target.getAttribute("data-blazorstrap")
549                }
550            };
551
552        } catch {
553            return {
554                key: event.key,
555                clientWidth: document.documentElement.clientWidth,
556            }
557        }
558    },
559    GetParent: function (parent, i = 0) {
560        //Limited to 4 deep
561        i = i + 1;
562        if (i > 4 || parent === undefined) return;
563
564        return {
565            parent: blazorStrap.GetParent(parent.parentElement, i),
566            target: {
567                nodeName: parent.nodeName,
568                classList: parent.classList,
569                targetId: parent.getAttribute("data-blazorstrap-target"),
570                childrenId: blazorStrap.GetChildrenIds(parent),
571                dataId: parent.getAttribute("data-blazorstrap")
572            }
573        }
574    },
575    GetHeight: async function (element) {
576        if (element === null || element === undefined) return;
577        return new Promise(function (resolve) {
578            resolve(element.offsetHeight);
579        });
580    },
581    GetWidth: async function (element) {
582        if (element === null || element === undefined) return 0;
583        return new Promise(function (resolve) {
584            resolve(element.offsetWidth);
585        });
586    },
587    GetWindowInnerHeight: async function () {
588        return new Promise(function (resolve) {
589            resolve(window.innerHeight);
590        });
591    },
592    GetScrollBarWidth: async function () {
593        return new Promise(function (resolve) {
594            resolve(window.innerWidth - document.documentElement.clientWidth);
595        });
596    },
597    GetStyle: async function (element) {
598        if (element === null || element === undefined) return;
599        return element.style.cssText;
600    },
601    PeakHeight: async function (element) {
602        if (element === null || element === undefined) return;
603        var oldStyle = element.style;
604        return new Promise(function (resolve) {
605            element.style.visibility = "hidden";
606            element.style.width = (element.parentNode.offsetWidth - 4) + "px";
607            element.style.position = "absolute";
608            element.style.display = "block";
609            setTimeout(function () {
610                var height = element.offsetHeight;
611                element.style = oldStyle;
612                resolve(height);
613            }, 10);
614        });
615    },
616    PeakWidth: async function (element) {
617        if (element === null || element === undefined) return;
618        var oldStyle = element.style;
619        return new Promise(function (resolve) {
620            element.style.visibility = "hidden";
621            //element.style.height = (element.parentNode.offsetWidth - 4) + "px";
622            element.style.position = "absolute";
623            element.style.display = "block";
624            setTimeout(function () {
625                var width = element.offsetWidth;
626                element.style = oldStyle;
627                resolve(width);
628            }, 10);
629        });
630    },
631    RemoveAttribute: async function (element, name) { //Likely can be removed
632        if (element === null || element === undefined) return;
633        return new Promise(function (resolve) {
634            element.removeAttribute(name);
635            resolve();
636        });
637    },
638    RemoveBodyClass: async function (className) {
639        return new Promise(function (resolve) {
640            document.body.classList.remove(className);
641            resolve();
642        });
643    },
644    RemoveClass: async function (element, className, delay = 0) {
645        if (element === null || element === undefined) return;
646        element.classList.remove(className);
647        return new Promise(function (resolve) {
648            if (delay !== 0) setTimeout(() => resolve(), delay); else resolve();
649        });
650    },
651    RemoveDocumentEvent: async function (id, name, type) {
652        return new Promise(function (resolve) {
653            blazorStrap.RemoveEventInternal(document, id, name, type);
654            resolve();
655        });
656    },
657    RemoveEvent: async function (id, name, type) { //Split Document out to its own function
658        return new Promise(function (resolve) {
659            blazorStrap.RemoveEventInternal(document.querySelector("[data-blazorstrap='" + id + "']"), id, name, type);
660            resolve();
661        });
662    },
663    RemoveEventInternal: function (element, id, name, type) {
664        blazorStrap.CleanUpEvents();
665        if (blazorStrap.EventHandlers[id] === undefined) return;
666
667        if (name !== "null" && type !== "null") {
668            if (blazorStrap.EventHandlers[id][name] === undefined) return;
669            if (blazorStrap.EventHandlers[id][name][type] === undefined) return;
670
671            if (blazorStrap.EventHandlers[id][name][type] !== undefined && blazorStrap.EventHandlers[id][name][type] !== null) {
672                if (element !== undefined && element !== null) {
673                    if (type === "resize")
674                        window.removeEventListener(type, blazorStrap.EventHandlers[id][name][type].Callback, false);
675                    else
676                        element.removeEventListener(type, blazorStrap.EventHandlers[id][name][type].Callback, false);
677                }
678                delete blazorStrap.EventHandlers[id][name][type];
679            }
680            if (Object.keys(blazorStrap.EventHandlers[id][name]).length === 0) {
681                delete blazorStrap.EventHandlers[id][name];
682            }
683        }
684        if (Object.keys(blazorStrap.EventHandlers[id]).length === 0) {
685            delete blazorStrap.EventHandlers[id];
686        }
687    },
688    RemovePopover: async function (element, id) {
689        return new Promise(function (resolve) {
690            if (blazorStrap.EventHandlers[id] === undefined) return resolve();
691
692            if (blazorStrap.EventHandlers[id]["Popover"] !== undefined) {
693                blazorStrap.EventHandlers[id].Popover.destroy();
694                delete blazorStrap.EventHandlers[id].Popover;
695                resolve();
696            }
697
698            if (Object.keys(blazorStrap.EventHandlers[id]).length === 0) {
699                delete blazorStrap.EventHandlers[id];
700            }
701        });
702    },
703    SetBodyStyle: async function (style, value) {
704        return new Promise(function (resolve) {
705            document.body.style[style] = value;
706            resolve();
707        });
708    },
709    SetBootstrapCss: function (theme, version) {
710        if (link === undefined) {
711            let existing = document.querySelectorAll('link[href$="bootstrap.min.css"]')[0];
712
713            if (existing === undefined) {
714                link = document.createElement('link');
715                document.head.insertBefore(link, document.head.firstChild);
716                link.type = 'text/css';
717                link.rel = 'stylesheet';
718            } else link = existing;
719        }
720
721        if (theme === 'bootstrap') {
722            link.href = "https://cdn.jsdelivr.net/npm/bootstrap@" + version + "/dist/css/bootstrap.min.css";
723        } else {
724            link.href = "https://cdn.jsdelivr.net/npm/bootswatch@" + version + "/dist/" + theme + "/bootstrap.min.css";
725        }
726
727        return true;
728    },
729    SetStyle: async function (element, style, value, delay = 0) {
730        if (element === null || element === undefined) return;
731        element.style[style] = value;
732        return new Promise(function (resolve) {
733            if (delay !== 0) setTimeout(() => resolve(), delay); else resolve();
734        });
735    },
736    ToastTimer: function (element, time, timeRemaining, rendered) {
737        if (rendered === false) {
738            element.classList.add("showing");
739        }
740
741        if (time === 0) {
742            setTimeout(function () {
743                element.classList.remove("showing");
744            }, 100);
745        }
746
747        if (time !== 0) {
748            const dflex = element.querySelector(".d-flex");
749            const wrapper = document.createElement("div");
750            wrapper.className = "w-100 p-0 m-0 position-relative border-bottom-1 border-dark";
751            wrapper.style.top = "-1px";
752            const timeEl = document.createElement("div");
753            wrapper.appendChild(timeEl);
754            element.insertBefore(wrapper, dflex);
755            timeEl.classList.add("bg-dark");
756            timeEl.style.height = "4px";
757            timeEl.style.opacity = ".4";
758
759            if (timeRemaining === 0) {
760                timeEl.style.width = "0";
761                timeEl.style["transition"] = "linear " + (time - timeRemaining) / 1000 + "s";
762                timeEl.style["-webkit-transition"] = "linear " + (time - timeRemaining) / 1000 + "s";
763            } else {
764                timeRemaining = time - timeRemaining;
765                timeEl.style.width = timeRemaining / time * 100 + "%";
766                timeEl.style["transition"] = "linear" + (time - timeRemaining) / 1000 + "s";
767                timeEl.style["-webkit-transition"] = "linear " + (time - timeRemaining) / 1000 + "s";
768            }
769
770            setTimeout(function () {
771                element.classList.remove("showing");
772                timeEl.style.width = "100%";
773            }, 100);
774        }
775    },
776    TransitionDidNotStart: async function (element, delay = 200) {
777        return new Promise(function (resolve) {
778            let handler = function () {
779                resolve(false);
780                clearTimeout(timeout);
781            };
782
783            const timeout = setTimeout(function () {
784                resolve(true);
785                element.removeEventListener("transitionstart", handler, {
786                    once: true
787                });
788            }, delay);
789            element.addEventListener("transitionstart", handler, {
790                once: true
791            });
792        }).then(data => data);
793    },
794    UpdatePopover: async function (element) {
795        const id = element.getAttribute("data-blazorstrap");
796        return new Promise(function (resolve) {
797            setTimeout(async function () {
798                await blazorStrap.EventHandlers[id].Popover.update(
798);
799                return resolve(element.style.cssText);
800            }, 10);
801        });
802    },
803    UpdatePopoverArrow: async function (element, position, tooltip) {
804        const id = element.getAttribute("data-blazorstrap");
805        let arrow;
806        return new Promise(function (resolve) {
807            if (tooltip === false) arrow = element.querySelector('.popover-arrow'); else arrow = element.querySelector('.tooltip-arrow');
808            if (arrow === undefined || arrow === null) {
809                arrow = element.querySelector('.arrow');
810            }
811            position = position.replace("start", "");
812            position = position.replace("end", "");
813
814            switch (position) {
815                case "top":
816                    arrow.style.transform = "translate(" + (element.offsetWidth / 2 - arrow.offsetWidth / 2) + "px, 0px)";
817                    if (!tooltip) blazorStrap.EventHandlers[id].Popover.setOptions({
818                        modifiers: [{
819                            name: 'offset',
820                            options: {
821                                offset: [0, arrow.offsetHeight]
822                            }
823                        }]
824                    });
825                    break;
826
827                case "bottom":
828                    arrow.style.transform = "translate(" + (element.offsetWidth / 2 - arrow.offsetWidth / 2) + "px, 0px)";
829                    if (!tooltip) blazorStrap.EventHandlers[id].Popover.setOptions({
830                        modifiers: [{
831                            name: 'offset',
832                            options: {
833                                offset: [0, arrow.offsetHeight]
834                            }
835                        }]
836                    });
837                    break;
838
839                case "left":
840                    arrow.style.transform = "translate(0px, " + (element.offsetHeight / 2 - arrow.offsetHeight / 2) + "px)";
841                    if (!tooltip) blazorStrap.EventHandlers[id].Popover.setOptions({
842                        modifiers: [{
843                            name: 'offset',
844                            options: {
845                                offset: [0, arrow.offsetWidth]
846                            }
847                        }]
848                    });
849                    break;
850
851                case "right":
852                    arrow.style.transform = "translate(0px, " + (element.offsetHeight / 2 - arrow.offsetHeight / 2) + "px)";
853                    if (!tooltip) blazorStrap.EventHandlers[id].Popover.setOptions({
854                        modifiers: [{
855                            name: 'offset',
856                            options: {
857                                offset: [0, arrow.offsetWidth]
858                            }
859                        }]
860                    });
861                    break;
862            }
863
864            resolve();
865        });
866    }
867}

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.