PageSourceSearch

https://hs1883.com/js/mobile-header.js?v=20260803.3

js hs1883.com collected 2026-10-02 21:00:52 UTC 10,940 bytes, 247 lines download raw bytes

1(function () {
2    var lastTouchTime = 0;
3    var menuPrepared = false;
4
5    function byId(id) {
6        return document.getElementById(id);
7    }
8
9    function isVisible(element) {
10        if (!element) return false;
11        var style = window.getComputedStyle ? window.getComputedStyle(element) : element.currentStyle;
12        return style && style.display !== 'none' && style.visibility !== 'hidden';
13    }
14
15    function show(element, visible) {
16        if (!element) return;
17        element.style.setProperty('display', visible ? 'block' : 'none', 'important');
18        element.style.setProperty('visibility', visible ? 'visible' : 'hidden', 'important');
19        element.style.setProperty('opacity', visible ? '1' : '0', 'important');
20        element.style.setProperty('pointer-events', visible ? 'auto' : 'none', 'important');
21    }
22
23    function setExpanded(id, expanded) {
24        var button = byId(id);
25        if (button) button.setAttribute('aria-expanded', expanded ? 'true' : 'false');
26    }
27
28    function prepareMenu() {
29        if (menuPrepared) return;
30        menuPrepared = true;
31
32        if (window.EP && EP.menu) {
33            if (typeof EP.menu.expand === 'function') EP.menu.expand();
34            if (typeof EP.menu.moveCatsMobi === 'function') EP.menu.moveCatsMobi();
35            if (EP.menu.mobile) EP.menu.mobile.opened = true;
36        }
37
38        var menu = document.querySelector('#lionmenu > ul.dropdown');
39        if (menu) {
40            var extraItems = [
41                ['/community/', 'COMMUNITY', '♙'],
42                ['/games/', 'SEX GAMES', '⊙'],
43                ['/cat/full-scenes/', 'FULL SCENES', '✦'],
44                ['/live-sex/', 'LIVE SEX', '▣']
45            ];
46            extraItems.length = 0;
47            var previouslyAddedItems = menu.querySelectorAll('.ep-menu-added-item');
48            for (var removedIndex = 0; removedIndex < previouslyAddedItems.length; removedIndex++) {
49                previouslyAddedItems[removedIndex].remove();
50            }
51            for (var i = 0; i < extraItems.length; i++) {
52                var item = extraItems[i];
53                var exists = menu.querySelector('a[href="' + item[0] + '"]');
54                if (exists) continue;
55                var li = document.createElement('li');
56                li.className = 'ep-menu-added-item';
57                li.innerHTML = '<span class="active"><a href="' + item[0] + '">' +
58                    '<span class="ep-menu-root-label"><span class="ep-menu-added-icon" aria-hidden="true">' + item[2] + '</span>' +
59                    '<span class="ep-menu-root-text">' + item[1] + '</span></span></a></span>';
60                menu.appendChild(li);
61            }
62        }
63
64        var menuTitle = byId('ep-menu-title');
65        if (menuTitle) menuTitle.remove();
66
67        var lionMenu = byId('lionmenu');
68        if (lionMenu && !lionMenu.querySelector('.ep-menu-mobile-footer')) {
69            var footer = document.createElement('div');
70            footer.className = 'ep-menu-mobile-footer';
71            footer.innerHTML = '<button type="button" class="ep-menu-theme-button" data-ep-theme="white" aria-label="Light mode">☼</button>' +
72                '<button type="button" class="ep-menu-theme-button ep-menu-theme-dark" data-ep-theme="black" aria-label="Dark mode">☾</button>';
73            lionMenu.appendChild(footer);
74            var languages = byId('languages');
75            var theme = byId('nightandday');
76            if (languages) footer.appendChild(languages);
77            if (theme) footer.appendChild(theme);
78            var themeButtons = footer.querySelectorAll('[data-ep-theme]');
79            function syncThemeButtons() {
80                var activeTheme = document.documentElement.classList.contains('epwhite') ? 'white' : 'black';
81                for (var buttonIndex = 0; buttonIndex < themeButtons.length; buttonIndex++) {
82                    var active = themeButtons[buttonIndex].getAttribute('data-ep-theme') === activeTheme;
83                    themeButtons[buttonIndex].classList.toggle('ep-menu-theme-active', active);
84                    themeButtons[buttonIndex].setAttribute('aria-pressed', active ? 'true' : 'false');
85                }
86            }
87            for (var j = 0; j < themeButtons.length; j++) {
88                themeButtons[j].addEventListener('click', function (event) {
89                    event.preventDefault();
90                    event.stopPropagation();
91                    var color = this.getAttribute('data-ep-theme');
92                    if (window.EP && EP.page && typeof EP.page.switchColor === 'function') {
93                        EP.page.switchColor(color);
94                    } else if (color === 'white') {
95                        document.documentElement.classList.add('epwhite');
96                    } else {
97                        document.documentElement.classList.remove('epwhite');
98                    }
99                    syncThemeButtons();
100                }, true);
101            }
102            syncThemeButtons();
103        }
104
105        function revealVideoLinks() {
106            var videoLinks = document.querySelector('.lcsvideosmorediv');
107            var videoList = byId('lcsvideosul');
108            if (videoLinks) videoLinks.style.setProperty('display', 'block', 'important');
109            if (videoList) videoList.style.setProperty('display', 'grid', 'important');
110        }
111        revealVideoLinks();
112        window.setTimeout(revealVideoLinks, 100);
113        window.setTimeout(revealVideoLinks, 400);
114    }
115
116    function closeMenu() {
117        var menuOuter = byId('lmenuouter');
118        if (menuOuter) menuOuter.style.setProperty('transform', 'translateX(-100%)', 'important');
119        show(menuOuter, false);
120        show(byId('lionmenu'), false);
121        setExpanded('menuslide', false);
122    }
123
124    function closeSearch() {
125        show(byId('searcharea'), false);
126        setExpanded('searchslide', false);
127    }
128
129    function stop(event) {
130        event.preventDefault();
131        event.stopPropagation();
132        if (event.stopImmediatePropagation) event.stopImmediatePropagation();
133    }
134
135    function findControl(target) {
136        while (target && target !== document) {
137            if (target.id === 'menuslide' || target.id === 'searchslide' ||
138                target.id === 'ep-menu-close' || target.id === 'ep-menu-overlay') return target.id;
139            target = target.parentNode;
140        }
141        return '';
142    }
143
144    function findSubmenuItem(target) {
145        var eventTarget = target;
146        while (target && target !== document) {
147            if (target.tagName === 'LI' && target.parentNode && target.parentNode.matches &&
148                target.parentNode.matches('#lionmenu > ul.dropdown')) {
149                var heading = target.querySelector(':scope > span.more');
150                var panel = target.querySelector(':scope > .listcat');
151                return heading && panel && heading.contains(eventTarget) ? target : null;
152            }
153            target = target.parentNode;
154        }
155        return null;
156    }
157
158    function toggleSubmenu(item) {
159        var menu = item.parentNode;
160        var items = menu ? menu.children : [];
161        var opening = !item.classList.contains('ep-mobile-submenu-open');
162        for (var i = 0; i < items.length; i++) {
163            var otherPanel = items[i].querySelector && items[i].querySelector(':scope > .listcat');
164            items[i].classList.remove('ep-mobile-submenu-open');
165            if (otherPanel) otherPanel.style.setProperty('display', 'none', 'important');
166        }
167        if (!opening) return;
168        item.classList.add('ep-mobile-submenu-open');
169        var panel = item.querySelector(':scope > .listcat');
170        panel.style.setProperty('display', 'block', 'important');
171        var images = panel.querySelectorAll('img[data-src]');
172        for (var j = 0; j < images.length; j++) {
173            if (images[j].getAttribute('data-src')) images[j].src = images[j].getAttribute('data-src');
174        }
175    }
176
177    function activate(event) {
178        if (window.innerWidth <= 805) {
179            var submenuItem = findSubmenuItem(event.target);
180            if (submenuItem) {
181                if (event.type === 'touchend') lastTouchTime = Date.now();
182                else if (Date.now() - lastTouchTime < 800) {
183                    stop(event);
184                    return;
185                }
186                stop(event);
187                toggleSubmenu(submenuItem);
188                return;
189            }
190        }
191
192        var control = findControl(event.target);
193        if (!control) return;
194
195        if (event.type === 'touchend') {
196            lastTouchTime = Date.now();
197        } else if (Date.now() - lastTouchTime < 800) {
198            stop(event);
199            return;
200        }
201
202        stop(event);
203        if (control === 'menuslide') {
204            var openMenu = !isVisible(byId('lionmenu'));
205            closeSearch();
206            if (openMenu) prepareMenu();
207            var menuOuter = byId('lmenuouter');
208            show(menuOuter, openMenu);
209            if (menuOuter) menuOuter.style.setProperty('transform', openMenu ? 'translateX(0)' : 'translateX(-100%)', 'important');
210            show(byId('lionmenu'), openMenu);
211            setExpanded('menuslide', openMenu);
212            return;
213        }
214
215        if (control === 'searchslide') {
216            var openSearch = !isVisible(byId('searcharea'));
217            closeMenu();
218            var searchArea = byId('searcharea');
219            show(searchArea, openSearch);
220            if (searchArea && openSearch) {
221                searchArea.style.setProperty('position', 'fixed', 'important');
222                searchArea.style.setProperty('top', '40px', 'important');
223                searchArea.style.setProperty('left', '0', 'important');
224                searchArea.style.setProperty('width', '100%', 'important');
225                searchArea.style.setProperty('height', '42px', 'important');
226                searchArea.style.setProperty('min-height', '42px', 'important');
227                searchArea.style.setProperty('overflow', 'visible', 'important');
228                searchArea.style.setProperty('transform', 'none', 'important');
229                searchArea.style.setProperty('z-index', '1000012', 'important');
230                searchArea.style.setProperty('padding', '6px 36px 6px 5px', 'important');
231                searchArea.style.setProperty('box-sizing', 'border-box', 'important');
232                searchArea.style.setProperty('background', '#111', 'important');
233            }
234            setExpanded('searchslide', openSearch);
235            if (openSearch) window.setTimeout(function () {
236                var input = byId('srch');
237                if (input) input.focus();
238            }, 0);
239            return;
240        }
241
242        closeMenu();
243    }
244
245    document.addEventListener('touchend', activate, true);
246    document.addEventListener('click', activate, true);
247}());

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.