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.