1/** 2 * ÐиÑÑÑалÑнÑе пÑоÑмоÑÑÑ ÑоÑо во вÑплÑваÑÑем Fancybox Ð´Ð»Ñ Ð¯Ð½Ð´ÐµÐºÑ.ÐеÑÑики. 3 * Ðе завиÑÐ¸Ñ Ð¾Ñ ÐºÐ¾Ð½ÐºÑеÑной копии jQuery: ÑÐ»ÐµÐ´Ð¸Ñ Ð·Ð° DOM попапа. 4 * ÐÑи каждом Ñлайде адÑÐµÑ Ð¼ÐµÐ½ÑеÑÑÑ Ð½Ð° URL каÑÑинки, ÑÐ»Ð°Ð¹Ð´ÐµÑ Ð¾ÑÑаÑÑÑÑ Ð¿Ð¾Ð²ÐµÑÑ ÑÑÑаниÑÑ. 5 */ 6(function () { 7 var METRIKA_ID = 7513753; 8 var originalUrl = null; 9 var lastHit = ""; 10 var lastImageUrl = ""; 11 var pollTimer = null; 12 13 function pageUrl() { 14 return window.location.origin + window.location.pathname + window.location.search; 15 } 16 17 function isImageUrl(url) { 18 return /\.(jpe?g|png|gif|webp|svg|bmp|avif)(\?|#|$)/i.test(url || ""); 19 } 20 21 function absUrl(url) { 22 if (!url) { 23 return null; 24 } 25 try { 26 return new URL(url, window.location.href).toString(); 27 } catch (e) { 28 return url; 29 } 30 } 31 32 function sameOrigin(url) { 33 try { 34 return new URL(url, window.location.href).origin === window.location.origin; 35 } catch (e) { 36 return false; 37 } 38 } 39 40 function fancyboxRoot() { 41 return document.querySelector(".fancybox-container.fancybox-is-open, .fancybox-container:not(.fancybox-is-closing)"); 42 } 43 44 function currentImageUrl() { 45 var root = fancyboxRoot(); 46 if (!root) { 47 return null; 48 } 49 50 var slide = root.querySelector(".fancybox-slide--current"); 51 var img = slide ? slide.querySelector("img.fancybox-image") : null; 52 var src = img ? (img.getAttribute("src") || img.currentSrc) : ""; 53 54 if (!src) { 55 var download = root.querySelector("[data-fancybox-download]"); 56 src = download ? download.getAttribute("href") : ""; 57 } 58 59 src = absUrl(src); 60 return src && isImageUrl(src) ? src : null; 61 } 62 63 function setAddress(url) { 64 if (!url || !sameOrigin(url)) { 65 return; 66 } 67 try { 68 if (window.location.href !== url) { 69 history.replaceState({ pctPhotoHit: true }, "", url); 70 } 71 } catch (e) {} 72 } 73 74 function trackHit(url) { 75 if (typeof ym !== "function" || !url || url === lastHit) { 76 return; 77 } 78 ym(METRIKA_ID, "hit", url, { 79 title: document.title, 80 referer: originalUrl || document.referrer || "" 81 }); 82 lastHit = url; 83 } 84 85 function onOpenOrSlide() { 86 var url = currentImageUrl(); 87 if (!url) { 88 return; 89 } 90 if (!originalUrl) { 91 originalUrl = isImageUrl(window.location.href) ? pageUrl() : pageUrl(); 92 } 93 if (url === lastImageUrl) { 94 setAddress(url); 95 return; 96 } 97 lastImageUrl = url; 98 setAddress(url); 99 trackHit(url); 100 } 101 102 function onClose() { 103 lastImageUrl = ""; 104 lastHit = ""; 105 if (originalUrl) { 106 setAddress(originalUrl); 107 } 108 originalUrl = null; 109 } 110 111 function startPoll() { 112 if (pollTimer) { 113 return; 114 } 115 pollTimer = setInterval(function () { 116 if (fancyboxRoot()) { 117 onOpenOrSlide(); 118 } else if (originalUrl || lastImageUrl) { 119 onClose(); 120 clearInterval(pollTimer); 121 pollTimer = null; 122 } 123 }, 120); 124 } 125 126 document.addEventListener("click", function (e) { 127 var link = e.target && e.target.closest ? e.target.closest("[data-fancybox]") : null; 128 if (!link) { 129 return; 130 } 131 if (!originalUrl) { 132 originalUrl = pageUrl(); 133 } 134 startPoll(); 135 setTimeout(onOpenOrSlide, 50); 136 setTimeout(onOpenOrSlide, 350); 137 }, true); 138 139 document.addEventListener("keydown", function () { 140 if (fancyboxRoot()) { 141 startPoll(); 142 } 143 }, true); 144 145 if (document.body) { 146 startPoll(); 147 } else { 148 document.addEventListener("DOMContentLoaded", startPoll); 149 } 150})();
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.