PageSourceSearch

https://nmhmc.com/assets/91cg/site-fixes.js?v=6

js nmhmc.com collected 2026-09-27 08:33:41 UTC 4,980 bytes, 127 lines download raw bytes

1(function () {
2    'use strict';
3
4    function numberFrom(value) {
5        var page = Number.parseInt(String(value || '').trim(), 10);
6        return Number.isFinite(page) && page > 0 ? page : 0;
7    }
8
9    function buildPageUrl(form, page) {
10        var info = (form.querySelector('.page-info') || {}).textContent || '';
11        var total = numberFrom(info.split('/')[1]);
12        if (total) page = Math.min(page, total);
13
14        var pagination = form.closest('.page-jump, .page-nav, .page-nav-ajax') || form.parentElement;
15        var links = pagination ? Array.from(pagination.parentElement.querySelectorAll('a[href]')) : [];
16        var candidate = links
17            .map(function (link) { return link.getAttribute('href') || ''; })
18            .find(function (href) { return /\/(?:page\/)?\d+\/?(?:[?#].*)?$/.test(href); });
19
20        if (candidate) {
21            if (/\/page\/\d+\/?/.test(candidate)) return candidate.replace(/\/page\/\d+\/?/, '/page/' + page + '/');
22            return candidate.replace(/\/\d+\/?(?=[?#]|$)/, '/' + page + '/');
23        }
24
25        var path = window.location.pathname;
26        if (path === '/' || path === '/newweb') return '/page/' + page + '/';
27        if (/\/page\/\d+\/?$/.test(path)) return path.replace(/\/page\/\d+\/?$/, '/page/' + page + '/');
28        if (/\/\d+\/?$/.test(path)) return path.replace(/\/\d+\/?$/, '/' + page + '/');
29        return path.replace(/\/?$/, '/') + page + '/';
30    }
31
32    function jump(form) {
33        if (form.closest('.page-nav-ajax')) return;
34        var input = form.querySelector('#pageNum, input[type="number"]');
35        var page = numberFrom(input && input.value);
36        if (!page) {
37            if (input) input.focus();
38            return;
39        }
40        window.location.href = buildPageUrl(form, page);
41    }
42
43    window.chiguaPageJump = function (button) {
44        var form = button && button.closest('#pageForm');
45        if (form) jump(form);
46        return false;
47    };
48
49    function cropContentImage(image) {
50        var wrapper = image.closest('.chigua-content-image-crop');
51        if (!wrapper) return;
52        if (!image.complete || !image.naturalWidth || !image.naturalHeight || image.src === 'data:,') {
53            wrapper.style.removeProperty('height');
54            return;
55        }
56        var renderedHeight = image.getBoundingClientRect().height;
57        var cropHeight = Math.round(renderedHeight * 0.15);
58        if (renderedHeight > 0) {
59            wrapper.style.height = Math.max(1, Math.floor(renderedHeight - cropHeight)) + 'px';
60        }
61    }
62
63    var cropResizeObserver = typeof ResizeObserver === 'function'
64        ? new ResizeObserver(function (entries) {
65            entries.forEach(function (entry) { cropContentImage(entry.target); });
66        })
67        : null;
68
69    function initContentImageCrops() {
70        document.querySelectorAll('.chigua-content-image-crop img').forEach(function (image) {
71            if (image.dataset.chiguaCropReady) {
72                cropContentImage(image);
73                return;
74            }
75            image.dataset.chiguaCropReady = 'true';
76            image.addEventListener('load', function () {
77                requestAnimationFrame(function () { cropContentImage(image); });
78            });
79            if (cropResizeObserver) cropResizeObserver.observe(image);
80            cropContentImage(image);
81        });
82    }
83
84    if (document.readyState === 'loading') {
85        document.addEventListener('DOMContentLoaded', initContentImageCrops);
86    } else {
87        initContentImageCrops();
88    }
89    window.addEventListener('resize', initContentImageCrops);
90    new MutationObserver(function (records) {
91        records.forEach(function (record) {
92            if (record.type === 'attributes' && record.target instanceof HTMLImageElement) {
93                cropContentImage(record.target);
94            }
95        });
96        initContentImageCrops();
97    }).observe(document.documentElement, {
98        attributes: true,
99        attributeFilter: ['src'],
100        childList: true,
101        subtree: true
102    });
103
104    document.addEventListener('click', function (event) {
105        var button = event.target.closest('#submitBtn');
106        if (!button) return;
107        var form = button.closest('#pageForm');
108        if (!form || form.closest('.page-nav-ajax')) return;
109        event.preventDefault();
110        jump(form);
111    }, true);
112
113    document.addEventListener('submit', function (event) {
114        var form = event.target.closest('#pageForm');
115        if (!form || form.closest('.page-nav-ajax')) return;
116        event.preventDefault();
117        jump(form);
118    }, true);
119
120    document.addEventListener('keydown', function (event) {
121        if (event.key !== 'Enter' || !event.target.matches('#pageForm input[type="number"]')) return;
122        var form = event.target.closest('#pageForm');
123        if (!form || form.closest('.page-nav-ajax')) return;
124        event.preventDefault();
125        jump(form);
126    }, true);
127})();

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.