PageSourceSearch

https://hou2touch.com/nassets/3c3a8ce1/js/replace.js?v=1765633900

js hou2touch.com collected 2026-09-28 08:59:00 UTC 8,085 bytes, 287 lines download raw bytes

1var vimeoReplaceApi = '/pl/fileservice/video/vimeo-replace';
2var vimeoSubstring = 'player.vimeo.com';
3var xhrSuccessState = 4;
4
5function printCdnPlayerDiv (fileId) {
6  var css = "<style>" +
7    ".vhi-root {" +
8      "width: 100%;" +
9      "max-width: 100vw;" +
10      "padding-top: 56.25%;" +
11      "position: relative;" +
12    "}" +
13    ".vhi-iframe {" +
14      "width: 100%;" +
15      "height: 100%;" +
16      "position: absolute;" +
17      "top: 0;" +
18      "left: 0;" +
19    "}" +
20    "</style>";
21
22  return css + "<div " +
23    "class=\"vhi-root js--vhi-root\" " +
24    "data-place=\"new-player\">" +
25    "<div id=\"cdn-player-" +
26    fileId +
27    "\" " +
28    "class=\"vhi-iframe js--vhi-iframe\"></div> </div>";
29}
30
31function startCdnPlayer (fileId, videoHash) {
32    new Clappr.Player({
33      language: 'ru-RU',
34      parentId: "#cdn-player-" + fileId,
35        source: "https://vh02.gcfiles.net:8083/vod_hls/fileservice/file/download-proxy/h/" + videoHash + "/master.m3u8",
36        autoPlay: false,
37      width: '100%',
38      height: '100%',
39      playback: {
40        debug: true
41      }
42    });
43}
44
45function isJson (string) {
46  try {
47    var json = JSON.parse(string);
48  } catch (exception) {
49    return false;
50  }
51
52  return true;
53}
54
55/**
56 *
57 * @param {string} videoId
58 * @param {HTMLIFrameElement} iframe
59 */
60function getIframeSrcByVideoId (videoId, iframe) {
61  var url = vimeoReplaceApi + '?videoId=' + parseInt(videoId);
62  var xhr = new XMLHttpRequest();
63  xhr.open('GET', url, true);
64  xhr.onload = function (e) {
65    if (xhr.readyState === xhrSuccessState) {
66      if( xhr.status === 200 ) {
67        var responseObject;
68        var wrapper = document.createElement('div');
69
70        if( xhr.responseText === 'false') {
71          return;
72        }
73
74        if( isJson(xhr.responseText) ) {
75          responseObject = JSON.parse(xhr.responseText);
76
77          iframe.parentNode.classList.remove('videoWrapper');
78          iframe.parentNode.insertBefore(wrapper, iframe);
79          wrapper.appendChild(iframe);
80
81          wrapper.innerHTML = printCdnPlayerDiv(responseObject.id);
82
83          startCdnPlayer(responseObject.id, responseObject.hash);
84          var playerElement = document.getElementById("cdn-player-" + responseObject.id);
85          var player = playerElement.querySelector('video[data-html5-video]');
86          var conatainer = playerElement.querySelector('.container[data-container]');
87
88          // conatainer.style.position = "initial";
89          // player.style.position = "initial";
90          // player.style.width = "initial";
91          return;
92        }
93
94        iframe.parentNode.classList.remove('videoWrapper');
95        iframe.parentNode.insertBefore(wrapper, iframe);
96        wrapper.appendChild(iframe);
97
98        wrapper.innerHTML = xhr.responseText;
99        runAlternateCdn();
100      }
101    }
102  };
103
104  xhr.onerror = function (e) {
105  };
106
107  xhr.send(null);
108}
109
110/**
111 *
112 * @param src
113 *
114 * @returns {null|string}
115 */
116function getVideoIdFromSrc (src) {
117  var regGroups = src.match(/player\.vimeo\.com\/video\/(\d+)/);
118  if (regGroups === null) {
119    return null;
120  }
121
122  return regGroups[1];
123}
124
125function upgradeCdn(data) {
126    var url = '/pl/fileservice/video/upgrade-cdn';
127    var xhr = new XMLHttpRequest();
128    xhr.open("POST", url, false);
129    xhr.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
130    xhr.send(JSON.stringify({'video-hash' : data.videoHash}));
131}
132
133function feedbackCdn(data) {
134    var url = '/pl/fileservice/video/feedback-cdn';
135    var xhr = new XMLHttpRequest();
136    xhr.open("POST", url, false);
137    xhr.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
138    xhr.send(JSON.stringify({'reason' : data.reason, 'result' : data.result}));
139}
140
141function closeFeedback() {
142    var url = '/pl/fileservice/video/close-feedback';
143    var xhr = new XMLHttpRequest();
144    xhr.open("POST", url, false);
145    xhr.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
146    xhr.send(JSON.stringify({'reason' : 'close', 'result' : 'close'}));
147}
148
149function buildQuestion(data) {
150    var question = data.question;
151    var answers = '';
152
153    data.answers.forEach(function (answer) {
154        answers += answer;
155    });
156
157    return question + answers;
158}
159
160function show(el) {
161  el.style.display = 'block';
162}
163
164function close(el) {
165  el.style.display = 'none';
166}
167
168function remove(el) {
169  el.parentNode.removeChild(el);
170}
171
172function runAlternateCdn() {
173    var changes = document.querySelectorAll('.vhe-cdn-change');
174    changes.forEach(function (change) {
175        change.style.display = 'none';
176    });
177
178    var change = document.querySelector('.vhe-cdn-change');
179
180    if (!change) {
181       // console.log('No cdn change container!');
182        return;
183    }
184
185    var link = change.querySelector('.disclaimer-url');
186    var feedbackReason = change.querySelector('.feedback#reason');
187    var feedbackResult = change.querySelector('.feedback#result');
188    var feedbackClose = change.querySelector('.feedback#close');
189    var feedbackStatus = change.dataset['feedbackStatus'];
190    var currentCdn = change.dataset['currentCdn'];
191
192    change.style.display = 'block';
193    feedbackReason.style.display = 'none';
194    feedbackResult.style.display = 'none';
195
196    if (currentCdn === 'integros' || currentCdn === '') {
197        //change.style.height = '35px';
198        link.innerHTML = window.tt('common', 'Speed problem');
199    } else {
200        feedbackReason.innerHTML = buildQuestion(reasonQuestions);
201        feedbackResult.innerHTML = buildQuestion(resultQuestions);
202
203        link.innerHTML = window.tt('common', 'Вернуться на основной плеер');
204
205        switch (feedbackStatus) {
206            case 'noFeedback' :
207                show(feedbackReason);
208                close(feedbackResult);
209                break;
210            case 'hasReason' :
211                show(feedbackResult);
212                close(feedbackReason);
213                break;
214            case 'hasResult' :
215                //change.style.height = '35px';
216                remove(feedbackReason);
217                remove(feedbackResult);
218                break;
219        }
220    }
221
222    var btns = change.querySelectorAll('.btn');
223    btns.forEach(function (btn) {
224        btn.addEventListener('click', function (e) {
225            if (btn.classList.contains('reason-btn')) {
226                change.dataset.reason = btn.id;
227
228                show(feedbackResult);
229                close(feedbackReason);
230            }
231
232            if (btn.classList.contains('result-btn')) {
233                change.dataset.result = btn.id;
234                feedbackCdn(change.dataset);
235                feedbackResult.innerHTML = 'Спасибо!';
236
237                if (btn.id === 'back') {
238                    upgradeCdn(change.dataset);
239                    window.location.reload();
240                }
241
242                setTimeout(function () {
243                    remove(feedbackReason);
244                    remove(feedbackResult);
245
246                    //change.style.height = 'auto';
247                }, 2000);
248            }
249        });
250    });
251
252    feedbackClose.addEventListener('click', function (e) {
253        e.preventDefault();
254        closeFeedback();
255        close(change);
256    });
257
258    link.addEventListener('click', function (e) {
259        e.preventDefault();
260        upgradeCdn(change.dataset);
261        window.location.reload();
262    });
263}
264
265document.addEventListener('DOMContentLoaded', function() {
266    checkVimeoIframes();
267});
268
269window.addEventListener('load', function () {
270    checkVimeoIframes();
271});
272
273function checkVimeoIframes() {
274    var iframes = document.getElementsByTagName('iframe');
275    for (var i = 0; i < iframes.length; i++) {
276        var src = iframes[i].getAttribute('src');
277        if (src && src.indexOf(vimeoSubstring) !== -1 &&
278            !iframes[i].hasAttribute('data-vimeo-processed')) {
279            var videoId = getVideoIdFromSrc(src);
280            if (videoId !== null) {
281                getIframeSrcByVideoId(videoId, iframes[i]);
282                iframes[i].setAttribute('data-vimeo-processed', 'true');
283            }
284        }
285    }
286}
287

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.