PageSourceSearch

https://shadowfight2.com/js/main.js

js shadowfight2.com collected 2026-09-24 09:48:17 UTC 3,520 bytes, 136 lines download raw bytes

1(function () {
2  var previewImages = document.querySelectorAll('#images img[data-big]');
3  var activeOverlay = null;
4  var activeImage = null;
5  var currentIndex = -1;
6  var previewItems = [];
7
8  if (!previewImages.length) {
9    return;
10  }
11
12  function syncPreviewState() {
13    var previewItem = previewItems[currentIndex];
14
15    if (!previewItem || !activeImage) {
16      return;
17    }
18
19    activeImage.src = previewItem.url;
20    activeImage.alt = previewItem.alt;
21  }
22
23  function showPreviewAtIndex(nextIndex) {
24    if (nextIndex < 0 || nextIndex >= previewItems.length) {
25      return;
26    }
27
28    currentIndex = nextIndex;
29    syncPreviewState();
30  }
31
32  function closePreview() {
33    if (!activeOverlay) {
34      return;
35    }
36
37    document.removeEventListener('keydown', onDocumentKeydown);
38    if (activeOverlay.parentNode) {
39      activeOverlay.parentNode.removeChild(activeOverlay);
40    }
41    activeOverlay = null;
42    activeImage = null;
43    currentIndex = -1;
44  }
45
46  function onDocumentKeydown(event) {
47    var key = event.key || '';
48
49    if (key === 'Escape' || event.keyCode === 27) {
50      closePreview();
51      return;
52    }
53
54    if (key === 'ArrowLeft' || event.keyCode === 37) {
55      showPreviewAtIndex(currentIndex - 1);
56      return;
57    }
58
59    if (key === 'ArrowRight' || event.keyCode === 39) {
60      showPreviewAtIndex(currentIndex + 1);
61    }
62  }
63
64  function openPreview(index) {
65    var overlay = document.createElement('div');
66    var backdrop = document.createElement('div');
67    var modal = document.createElement('div');
68    var closeButton = document.createElement('button');
69    var image = document.createElement('img');
70
71    closePreview();
72
73    overlay.className = 'overlay';
74
75    backdrop.className = 'overlay__bg';
76
77    modal.id = 'modalWindow';
78    modal.setAttribute('role', 'dialog');
79    modal.setAttribute('aria-modal', 'true');
80    modal.setAttribute('aria-label', 'Screenshot preview');
81
82    closeButton.type = 'button';
83    closeButton.className = 'modalClose';
84    closeButton.setAttribute('aria-label', 'Close preview');
85    closeButton.textContent = '\u00d7';
86
87    image.className = 'bigImg';
88
89    closeButton.addEventListener('click', closePreview);
90    backdrop.addEventListener('click', closePreview);
91
92    modal.appendChild(closeButton);
93    modal.appendChild(image);
94    overlay.appendChild(backdrop);
95    overlay.appendChild(modal);
96    document.body.appendChild(overlay);
97
98    activeOverlay = overlay;
99    activeImage = image;
100    document.addEventListener('keydown', onDocumentKeydown);
101    showPreviewAtIndex(index);
102
103    closeButton.focus();
104  }
105
106  function bindPreview(previewImage, previewNumber, index) {
107    var previewAlt = previewImage.alt || 'Screenshot ' + previewNumber;
108
109    previewItems.push({
110      url: previewImage.getAttribute('data-big'),
111      alt: previewAlt
112    });
113
114    previewImage.setAttribute('tabindex', '0');
115    previewImage.setAttribute('aria-label', 'Open screenshot ' + previewNumber + ' preview');
116
117    previewImage.addEventListener('click', function () {
118      openPreview(index);
119    });
120
121    previewImage.addEventListener('keydown', function (event) {
122      var key = event.key || '';
123
124      if (key !== 'Enter' && key !== ' ' && key !== 'Spacebar' && event.keyCode !== 13 && event.keyCode !== 32) {
125        return;
126      }
127
128      event.preventDefault();
129      openPreview(index);
130    });
131  }
132
133  for (var index = 0; index < previewImages.length; index += 1) {
134    bindPreview(previewImages[index], String(index + 1), index);
135  }
136})();

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.