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.