PageSourceSearch

https://callrec.net/js/admin-layout-modern.js?v=xnZ-c4lNG24QRZnHGHIhbtKpbNU-BhYXIhBUuh3x9i4

js callrec.net collected 2026-09-24 15:06:29 UTC 4,039 bytes, 110 lines download raw bytes

1(function () {
2    var sidebar = document.getElementById('admin-modern-sidebar');
3    var overlay = document.getElementById('admin-modern-overlay');
4    var openButton = document.getElementById('admin-modern-menu-button');
5    var closeButton = document.getElementById('admin-modern-sidebar-close');
6    var desktopMedia = window.matchMedia('(min-width: 901px)');
7    var lastFocusedElement = null;
8    var drawingEditorMode = document.body.classList.contains('admin-drawing-focus');
9    var page = document.querySelector('.admin-modern-page');
10
11    if (!sidebar || !overlay || !openButton || !closeButton) {
12        return;
13    }
14    if (drawingEditorMode) sidebar.inert = true;
15
16    function getFocusableElements() {
17        return Array.prototype.slice.call(sidebar.querySelectorAll(
18            'a[href], button:not([disabled]), select:not([disabled]), input:not([disabled])'
19        )).filter(function (element) {
20            return element.offsetParent !== null;
21        });
22    }
23
24    function openSidebar() {
25        lastFocusedElement = document.activeElement;
26        if (drawingEditorMode) { sidebar.inert = false; page.inert = true; }
27        sidebar.classList.add('is-open');
28        overlay.hidden = false;
29        document.body.classList.add('admin-modern-menu-open');
30        openButton.setAttribute('aria-expanded', 'true');
31
32        var focusable = getFocusableElements();
33        if (focusable.length) {
34            focusable[0].focus();
35        }
36    }
37
38    function closeSidebar(restoreFocus) {
39        sidebar.classList.remove('is-open');
40        if (drawingEditorMode) { sidebar.inert = true; page.inert = false; }
41        overlay.hidden = true;
42        document.body.classList.remove('admin-modern-menu-open');
43        openButton.setAttribute('aria-expanded', 'false');
44
45        if (restoreFocus && lastFocusedElement && typeof lastFocusedElement.focus === 'function') {
46            lastFocusedElement.focus();
47        }
48    }
49
50    function handleSidebarKeydown(event) {
51        if (event.key === 'Escape') {
52            if (drawingEditorMode) event.preventDefault();
53            closeSidebar(true);
54            return;
55        }
56
57        if (event.key !== 'Tab' || (desktopMedia.matches && !drawingEditorMode) || !sidebar.classList.contains('is-open')) {
58            return;
59        }
60
61        var focusable = getFocusableElements();
62        if (!focusable.length) {
63            return;
64        }
65
66        var first = focusable[0];
67        var last = focusable[focusable.length - 1];
68        if (event.shiftKey && document.activeElement === first) {
69            event.preventDefault();
70            last.focus();
71        } else if (!event.shiftKey && document.activeElement === last) {
72            event.preventDefault();
73            first.focus();
74        }
75    }
76
77    openButton.addEventListener('click', openSidebar);
78    closeButton.addEventListener('click', function () { closeSidebar(true); });
79    overlay.addEventListener('click', function () { closeSidebar(true); });
80    sidebar.addEventListener('keydown', handleSidebarKeydown);
81
82    sidebar.querySelectorAll('.admin-modern-nav__link').forEach(function (link) {
83        link.addEventListener('click', function () {
84            if (!desktopMedia.matches || drawingEditorMode) {
85                closeSidebar(false);
86            }
87        });
88    });
89
90    desktopMedia.addEventListener('change', function (event) {
91        if (event.matches && !drawingEditorMode) {
92            closeSidebar(false);
93        }
94    });
95
96    document.addEventListener('keydown', function (event) {
97        if (event.key === 'Escape' && sidebar.classList.contains('is-open')) {
98            if (drawingEditorMode) event.preventDefault();
99            closeSidebar(true);
100        }
101
102        if ((event.metaKey || event.ctrlKey) && event.key.toLowerCase() === 'k') {
103            var search = document.querySelector('.admin-modern-search input');
104            if (search) {
105                event.preventDefault();
106                search.focus();
107            }
108        }
109    });
110})();

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.