MediaWiki:Common.js
Версия от 18:37, 9 октября 2020; VolgaIgor (обсуждение | вклад)
/* Код открытия внешних ссылок в новой вкладке */ function externalLinks() { var links = document.getElementsByTagName('a'); for (var i = 0; i < links.length; i++) { var a = new RegExp('/' + window.location.host + '/'); if( !a.test(links[i].href) && links[i].href != '' ) { links[i].onclick = function(e) { e.preventDefault(); e.stopPropagation(); window.open(e.target.href, '_blank'); }; } } } function addSymbols() { if( $( '#wpTextbox1' )[0] ) { setTimeout(function(){ $( '#wpTextbox1' ).wikiEditor( 'addToToolbar', { 'section': 'characters', 'page': 'symbols', 'characters': [ '▀', '▂', '▅', '▃', '▄', '␠', '', '⋠', '␗' ] }); }, 500); } } /* Код получения cookie */ function getCookie(name) { var matches = document.cookie.match(new RegExp( "(?:^|; )" + name.replace(/([\.$?*|{}\(\)\[\]\\\/\+^])/g, '\\$1') + "=([^;]*)" )); return matches ? decodeURIComponent(matches[1]) : undefined; } function ttxZebra() { $('.ttx-table-line:nth-child(odd)').css('background-color', 'inherit'); count = 0; $('.ttx-table-line').each(function(){ if (!($(this).hasClass("ttx-collapsed"))){ if (count % 2 == 0) { $(this).css('background-color','#DBE0E2'); } else { $(this).css('background-color','inherit'); } count++; } }); } /* Код смены режима для карточек ТТХ */ function ttxSwichMode() { $(document).ready(function(){ $('.ttx-unvisible').css('display','none'); $('#ttx-rb-button').css('background-color','#263238').css('color','#EEEEEE'); $('.ttx-ab, .ttx-sb').css('display','none'); ttxZebra(); var cookie = getCookie("ttxMode"); if (cookie != undefined && navigator.cookieEnabled){ switch (cookie) { case "ab": $('#ttx-ab-button').css('background-color','#263238').css('color','#EEEEEE'); $('#ttx-rb-button, #ttx-sb-button').removeAttr("style"); $('.ttx-not-ab').addClass('ttx-collapsed'); $('.ttx-rb, .ttx-sb').css('display','none'); $('.ttx-ab').css('display',''); break; case "rb": $('#ttx-rb-button').css('background-color','#263238').css('color','#EEEEEE'); $('#ttx-ab-button, #ttx-sb-button').removeAttr("style"); $('.ttx-not-ab').removeClass('ttx-collapsed'); $('.ttx-ab, .ttx-sb').css('display','none'); $('.ttx-rb').css('display',''); break; case "sb": $('#ttx-sb-button').css('background-color','#263238').css('color','#EEEEEE'); $('#ttx-ab-button, #ttx-rb-button').removeAttr("style"); $('.ttx-not-ab').removeClass('ttx-collapsed'); $('.ttx-ab, .ttx-rb').css('display','none'); $('.ttx-sb').css('display',''); break; } ttxZebra(); } $('.ttx-switch-mode-button').click(function() { switch ($(this).attr('id')) { case "ttx-ab-button": $('#ttx-ab-button').css('background-color','#263238').css('color','#EEEEEE'); $('#ttx-rb-button, #ttx-sb-button').removeAttr("style"); $('.ttx-not-ab').addClass('ttx-collapsed'); $('.ttx-ab').css('display',''); $('.ttx-rb, .ttx-sb').css('display','none'); document.cookie = "ttxMode=ab; path=/; expires=0"; break; case "ttx-rb-button": $('#ttx-rb-button').css('background-color','#263238').css('color','#EEEEEE'); $('#ttx-ab-button, #ttx-sb-button').removeAttr("style"); $('.ttx-not-ab').removeClass('ttx-collapsed'); $('.ttx-rb').css('display',''); $('.ttx-ab, .ttx-sb').css('display','none'); document.cookie = "ttxMode=rb; path=/; expires=0"; break; case "ttx-sb-button": $('#ttx-sb-button').css('background-color','#263238').css('color','#EEEEEE'); $('#ttx-ab-button, #ttx-rb-button').removeAttr("style"); $('.ttx-not-ab').removeClass('ttx-collapsed'); $('.ttx-sb').css('display',''); $('.ttx-ab, .ttx-rb').css('display','none'); document.cookie = "ttxMode=sb; path=/; expires=0"; break; } ttxZebra(); }); }); } /* Код разворачивающихся блоков ТТХ */ function ttxCollapseBlock(){ $(document).ready(function(){ $('.ttx-table-collapse').addClass('ttx-collapsed'); ttxZebra(); $('#ttx-short').css('background-color','#263238').css('color','#EEEEEE'); var cookie = getCookie("ttxCollapsed"); if (cookie != undefined && navigator.cookieEnabled){ if (cookie == 0){ $('.ttx-table-collapse').addClass('ttx-collapsed'); $('#ttx-short').css('background-color','#263238').css('color','#EEEEEE'); $('#ttx-detail').removeAttr("style"); } else { $('.ttx-table-collapse').removeClass('ttx-collapsed'); $('#ttx-detail').css('background-color','#263238').css('color','#EEEEEE'); $('#ttx-short').removeAttr("style"); } ttxZebra(); } $('.ttx-switch-size-button').click(function() { switch ($(this).attr('id')) { case "ttx-short": $('.ttx-table-collapse').addClass('ttx-collapsed'); $('#ttx-short').css('background-color','#263238').css('color','#EEEEEE'); $('#ttx-detail').removeAttr("style"); document.cookie = "ttxCollapsed=0; path=/; expires=0"; break; case "ttx-detail": $('.ttx-table-collapse').removeClass('ttx-collapsed'); $('#ttx-detail').css('background-color','#263238').css('color','#EEEEEE'); $('#ttx-short').removeAttr("style"); document.cookie = "ttxCollapsed=1; path=/; expires=0"; break; } ttxZebra(); }); }); } /* Код кнопки "Купить" ТТХ карточек */ function ttxBuyButton() { var logout = document.getElementById('pt-logout'); var el = document.getElementsByClassName("ttx-buy-button"); for (var i = 0; i < el.length; i++){ var link = el[i].getAttribute('data-title'); el[i].setAttribute('onclick', "if(typeof yaCounter48855122 != 'undefined'){yaCounter48855122.reachGoal('BUY_BUTTON',{URL:document.location.href});}window.open ('" + link + "');return true;"); } } /* Код кнопки "Найти на бирже" ТТХ карточек */ function ttxMarketButton() { var el = document.getElementsByClassName("ttx-marketplace-button"); var i; for (i = 0; i < el.length; i++){ var link = el[i].getAttribute('data-title'); el[i].setAttribute('onclick', "if(typeof yaCounter48855122 != 'undefined'){yaCounter48855122.reachGoal('MARKET_BUTTON',{URL:document.location.href});}window.open ('" + link + "');return true;"); } } /* Код веток техники */ function treeGroup() { document.querySelectorAll('.tree-group-collapse').forEach( function(item, i, arr) { item.style = 'position: absolute; max-height: 0;'; }); var hideAll = function() { document.querySelectorAll('.tree-group-collapse.open').forEach( function(item, i, arr) { item.classList.remove('open'); }); } document.querySelectorAll('.tree-group').forEach( function(item, i, arr) { item.onclick = function( e ) { hideAll(); e.target.previousElementSibling.classList.add('open'); e.stopPropagation(); } }); document.getElementsByTagName('body')[0].addEventListener('click', function( e ) { if (event.target.className != 'tree-item-js') hideAll(); }); } /* Код просмоторщика панорам */ var panorama, viewer; function ttxCockpit() { function onProgress ( event ) { progress = event.progress.loaded / event.progress.total * 100; document.getElementById('ttx-panorama-loading-progress-line').style.width = progress + '%'; if ( progress == 100 ) { document.getElementById('ttx-panorama-container').style.opacity = '1'; } } var cockpitBtn = document.querySelector(".ttx-cockpit"); if ( cockpitBtn === null ) return; mw.loader.load( '/index.php?title=MediaWiki:Panorama.js&action=raw&ctype=text/javascript' ); cockpitBtn.onclick = function( e ) { if (typeof yaCounter48855122 != 'undefined') { yaCounter48855122.reachGoal('COCKPIT_BUTTON',{URL:document.location.href}); } var cockpitPopup = document.getElementById('ttx-popup'); if ( cockpitPopup === null ) { var functionClose = function() { $('#ttx-popup').animate({opacity: 0}, 200, function(){ $('#ttx-popup').css('display', 'none'); $('#ttx-popup-close').css('display', 'none'); $('#ttx-popup-background').fadeOut(400); }); } var cockpitImage = document.querySelector(".ttx-cockpit").getAttribute('data-image'); cockpitPopup = document.createElement('div'); cockpitPopup.id = 'ttx-popup'; cockpitPopup.style.cssText = 'display:none;'; cockpitPopupClose = document.createElement('span'); cockpitPopupClose.id = 'ttx-popup-close'; cockpitPopupClose.innerHTML = '✖'; cockpitPopupClose.onclick = functionClose; cockpitPopupClose.style.cssText = 'display:none;'; cockpitPopupBackground = document.createElement('div'); cockpitPopupBackground.id = 'ttx-popup-background'; cockpitPopupBackground.onclick = functionClose; cockpitPopupBackground.style.cssText = 'display:none;'; cockpitPanoramaContainer = document.createElement('div'); cockpitPanoramaContainer.id = 'ttx-panorama-container'; cockpitPanoramaContainer.style.opacity = '0'; cockpitPanoramaLoading = document.createElement('div'); cockpitPanoramaLoading.id = 'ttx-panorama-loading'; cockpitPanoramaLoadingText = document.createElement('span'); cockpitPanoramaLoadingText.id = 'ttx-panorama-loading-text'; cockpitPanoramaLoadingText.innerHTML = 'ЗАГРУЗКА...'; cockpitPanoramaLoadingProgress = document.createElement('div'); cockpitPanoramaLoadingProgress.id = 'ttx-panorama-loading-progress'; cockpitPanoramaLoadingProgressLine = document.createElement('div'); cockpitPanoramaLoadingProgressLine.id = 'ttx-panorama-loading-progress-line'; cockpitPanoramaLoadingProgress.appendChild(cockpitPanoramaLoadingProgressLine); cockpitPanoramaLoading.appendChild(cockpitPanoramaLoadingText); cockpitPanoramaLoading.appendChild(cockpitPanoramaLoadingProgress); cockpitPopup.appendChild(cockpitPanoramaContainer); cockpitPopup.appendChild(cockpitPanoramaLoading); document.querySelector(".content-area").appendChild(cockpitPopup); document.querySelector(".content-area").appendChild(cockpitPopupClose); document.querySelector(".content-area").appendChild(cockpitPopupBackground); } $('#ttx-popup-background').fadeIn(400, function(){ $('#ttx-popup').css('display', 'block').animate({opacity: 1}, 200); $('#ttx-popup-close').css('display', 'block').animate({opacity: 1}, 200); if (typeof panorama === 'undefined') { panorama = new PANOLENS.ImagePanorama( cockpitImage ); panorama.addEventListener( 'progress', onProgress ); viewer = new PANOLENS.Viewer({ container: document.getElementById('ttx-panorama-container') }); viewer.add( panorama ); viewer.tweenControlCenter( new THREE.Vector3(25000.0, 1000, 0), 0 ); } }); } } function gun_go() { var kfbr = 1900; var caliber = Number( document.getElementById('gun_caliber').value ); var mass = Number( document.getElementById('gun_mass').value ); var speed = Number( document.getElementById('gun_speed').value ); var tnt = Number( document.getElementById('gun_tnt').value ); var apcbc = document.getElementById('gun_APCBC').checked; tnt = ( tnt / mass ) * 100; var kf_apcbc = ( apcbc ) ? 1 : 0.9; if ( tnt < 0.65 ) { knap = 1; } else if ( tnt < 1.6 ) { knap = 1 + ( tnt - 0.65 ) * ( 0.93 - 1 ) / ( 1.6 - 0.65 ); } else if ( tnt < 2 ) { knap = 0.93 + ( tnt - 1.6 ) * ( 0.9 - 0.93 ) / ( 2 - 1.6 ); } else if ( tnt < 3 ) { knap = 0.9 + ( tnt - 2 ) * ( 0.85 - 0.9 ) / ( 3 - 2 ); } else if ( tnt < 4 ) { knap = 0.85 + ( tnt - 3 ) * ( 0.75 - 0.85 ) / ( 4 - 3 ); } else { knap = 0.75; } document.getElementById('gun_rezult').value = ( ( ( Math.pow( speed , 1.43 ) * Math.pow( mass , 0.71 ) ) / ( Math.pow( kfbr , 1.43 ) * Math.pow( caliber / 100 , 1.07 ) ) ) * 100 * knap * kf_apcbc ).toFixed(2); } function gunHtml() { if(document.getElementById('gun_test')){document.getElementById('gun_test').innerHTML = '<table cellpadding="5" style="border: 1px solid #a2a9b1;margin: 5px;width: 520px;"><tr><td style="width: 180px;">Калибр (мм):</td><td><input id="gun_caliber" type="number" style="width: 100px; height: 30px;" value="57"></td><td style="text-align: center;">Пробитие (мм):</td></tr><tr><td>Масса (кг):</td><td><input id="gun_mass" type="number" style="width: 100px; height: 30px;" value="3.14"></td><td rowspan="3"><input id="gun_rezult" type="text" style="width: 200px;height: 90px;border: 0;background: #f6f6f6;text-align: center;font-size: 40px;" disabled></td></tr><tr><td>Скорость (м/с):</td><td><input id="gun_speed" type="number" style="width: 100px; height: 30px;" value="990"></td></tr><tr><td>Масса ВВ (кг):</td><td><input id="gun_tnt" type="number" style="width: 100px; height: 30px;" value="0.1"></td></tr><tr><td><span title="Остроголовый снаряд с бронебойным наконечником и баллистическим колпачком" style="border-bottom: 1px dotted; cursor: help; white-space: nowrap">APCBC</span>:</td><td><input id="gun_APCBC" type="checkbox"></td><td><input id="gun_but" class="ttx-buy-button" type="button" value="РАССЧИТАТЬ" onclick="gun_go();" style="width: 200px; height: 30px;border:0;" value=""></td></tr></table>';} } function gun2_go() { var caliber = Number( document.getElementById('gun2_caliber').value ); var shell_mass = Number( document.getElementById('gun2_shell_mass').value ); var core_mass = Number( document.getElementById('gun2_core_mass').value ); var speed = Number( document.getElementById('gun2_speed').value ); var pallet_mass = shell_mass - core_mass; var kfbr = 3000; var part_pallet_mass = ( core_mass / shell_mass ) * 100; var kf_pallet_mass = ( part_pallet_mass > 36.0 ) ? 0.5 : 0.4; var calculated_mass = core_mass + ( kf_pallet_mass * pallet_mass ); document.getElementById('gun2_rezult').value = ( ( Math.pow( speed , 1.43 ) * Math.pow( calculated_mass , 0.71 ) ) / ( Math.pow( kfbr , 1.43 ) * Math.pow( caliber / 10000 , 1.07 ) ) ).toFixed(2); } function gun2Html() { if(document.getElementById('gun2_test')){document.getElementById('gun2_test').innerHTML = '<table cellpadding="5" style="border: 1px solid #a2a9b1;margin: 5px;width: 520px;"><tr><td>Калибр сердечника (мм):</td><td><input id="gun2_caliber" type="number" style="width: 100px; height: 30px;" value="28"></td><td style="text-align: center;">Пробитие (мм):</td></tr><tr><td>Масса снаряда (кг):</td><td><input id="gun2_shell_mass" type="number" style="width: 100px; height: 30px;" value="4.15"></td><td rowspan="2"><input id="gun2_rezult" type="text" style="width: 200px;height: 90px;border: 0;background: #f6f6f6;text-align: center;font-size: 40px;" disabled></td></tr><tr><td>Масса сердечника (кг):</td><td><input id="gun2_core_mass" type="number" style="width: 100px; height: 30px;" value="1.1"></td></tr><tr><td>Скорость (м/с):</td><td><input id="gun2_speed" type="number" style="width: 100px; height: 30px;" value="930"></td><td><input id="gun2_but" class="ttx-buy-button" type="button" value="РАССЧИТАТЬ" onclick="gun2_go();" style="width: 200px; height: 30px;border:0;" value=""></td></tr></table>';} } function gunHtmlEn() { if(document.getElementById('gun_test_en')){document.getElementById('gun_test_en').innerHTML = '<table cellpadding="5" style="border: 1px solid #a2a9b1;margin: 5px;width: 520px;"><tr><td style="width: 180px;">Calibre (mm):</td><td><input id="gun_caliber" type="number" style="width: 100px; height: 30px;" value="57"></td><td style="text-align: center;">Armour piercing (mm):</td></tr><tr><td>Weight (kg):</td><td><input id="gun_mass" type="number" style="width: 100px; height: 30px;" value="3.14"></td><td rowspan="3"><input id="gun_rezult" type="text" style="width: 200px;height: 90px;border: 0;background: #f6f6f6;text-align: center;font-size: 40px;" disabled></td></tr><tr><td>Speed (m/s):</td><td><input id="gun_speed" type="number" style="width: 100px; height: 30px;" value="990"></td></tr><tr><td>Weight of explosive mass (kg):</td><td><input id="gun_tnt" type="number" style="width: 100px; height: 30px;" value="0.1"></td></tr><tr><td>APCBC:</td><td><input id="gun_APCBC" type="checkbox"></td><td><input id="gun_but" class="ttx-buy-button" type="button" value="CALCULATE" onclick="gun_go();" style="width: 200px; height: 30px;border:0;" value=""></td></tr></table>';} } function gun2HtmlEn() { if(document.getElementById('gun2_test_en')){document.getElementById('gun2_test_en').innerHTML = '<table cellpadding="5" style="border: 1px solid #a2a9b1;margin: 5px;width: 520px;"><tr><td style="width: 180px;">Core Calibre (mm):</td><td><input id="gun2_caliber" type="number" style="width: 100px; height: 30px;" value="28"></td><td style="text-align: center;">Armour piercing (mm):</td></tr><tr><td>Shell mass (kg):</td><td><input id="gun2_shell_mass" type="number" style="width: 100px; height: 30px;" value="4.15"></td><td rowspan="2"><input id="gun2_rezult" type="text" style="width: 200px;height: 90px;border: 0;background: #f6f6f6;text-align: center;font-size: 40px;" disabled></td></tr><tr><td>Core weight (kg):</td><td><input id="gun2_core_mass" type="number" style="width: 100px; height: 30px;" value="1.1"></td></tr><tr><td>Speed (m/s):</td><td><input id="gun2_speed" type="number" style="width: 100px; height: 30px;" value="930"></td><td><input id="gun2_but" class="ttx-buy-button" type="button" value="CALCULATE" onclick="gun2_go();" style="width: 200px; height: 30px;border:0;" value=""></td></tr></table>';} } /* Код галереи камуфляжей */ function skinGallery() { var el = document.querySelectorAll(".skin_gallery .skin"); for (var i = 0; i < el.length; i++) { var type = ''; switch ( el[i].getAttribute('data-type') ) { case 'live': type = 'SKIN_LIVE'; break; case 'market': type = 'SKIN_MARKET'; break; default: continue; } var link = el[i].getAttribute('data-link'); el[i].querySelector('.skin_img').setAttribute('onclick', "if(typeof yaCounter48855122 != 'undefined'){yaCounter48855122.reachGoal('" + type + "',{URL:document.location.href});}window.open('" + link + "');return true;"); } } function ttxSlider() { if( document.querySelector( '.specs_card_main_slider' ) ) { var node = document.querySelector( '.specs_card_main_slider_container' ); var imgArr = document.querySelector( '.specs_card_main_slider_system' ).innerHTML.split(';'); if ( imgArr.length < 1 ) { return; } var labels_container = document.createElement('div'); labels_container.className = 'labels_container'; var labels = document.createElement('div'); labels.className = 'labels'; var functionSelect = function(e) { document.querySelector('.specs_card_main_slider .labels label.checked').classList.remove('checked'); var checked_id = document.querySelector('.specs_card_main_slider_container input:checked').id; document.querySelector('.specs_card_main_slider label[for=' + checked_id + ']').classList.add('checked'); }; var addImg = function( lnk, node, labelList, index ) { var input = document.createElement('input'); input.type = 'radio'; input.name = 'slider'; input.id = 'slider_input_' + String(index); input.onchange = functionSelect; var img = document.createElement('div'); img.style.backgroundImage = 'url(' + String(lnk) + ')'; img.className = 'slide'; var label = document.createElement('label'); label.htmlFor = 'slider_input_' + String(index); label.id = 'label_' + String(index); if ( labelList.childElementCount === 0 ) { label.className = 'checked'; input.checked = true; input.autofocus = true; } else if ( labelList.childElementCount === 1 ) { label.className = 'checked'; input.checked = true; input.autofocus = true; labelList.querySelector('#label_0').className = ''; } node.appendChild(input); node.appendChild(img); labelList.appendChild(label); }; var add360 = function( lnk, node, labelList, index ) { function onProgress ( event ) { console.log(event); /*progress = event.progress.loaded / event.progress.total * 100; document.getElementById('ttx-panorama-loading-progress-line').style.width = progress + '%'; console.log(progress); if ( progress == 100 ) { document.getElementById('ttx-panorama-container').style.opacity = '1'; }*/ } jQuery.getScript( '/resources/three.min.js' ).done(function( script, textStatus ) { var input = document.createElement('input'); input.type = 'radio'; input.name = 'slider'; input.id = 'slider_input_' + String(index); if ( labelList.childElementCount === 0 ) { input.checked = true; input.autofocus = true; } input.onchange = functionSelect; var div = document.createElement('div'); div.className = 'slide'; var container360 = document.createElement('div'); container360.style.width = '100%'; container360.style.height = '100%'; container360.id = 'ttx-panorama-container-' + String(index); container360.allowFullscreen = true; container360.frameBorder = '0'; container360.setAttribute('mozallowfullscreen', true); container360.setAttribute('webkitallowfullscreen', true); div.appendChild(container360); var label = document.createElement('label'); label.htmlFor = 'slider_input_' + String(index); label.id = 'label_' + String(index); label.className = 'label360'; node.appendChild(input); node.appendChild(div); labelList.appendChild(label); var panorama, viewer; panorama = new PANOLENS.ImagePanorama( lnk ); /*panorama.addEventListener( 'progress', onProgress );*/ viewer = new PANOLENS.Viewer({ container: document.getElementById('ttx-panorama-container-' + String(index)) }); viewer.add( panorama ); viewer.tweenControlCenter( new THREE.Vector3(25000.0, 1000, 0), 0 ); }); } for ( var i = 0; i < imgArr.length; i++ ) { item = imgArr[i]; var match = item.match(/([a-z0-9]*)\:\/\/(.*)\n?/); var protocol = match[1]; switch ( protocol ) { case 'https': addImg( item, node, labels, i ); break; case '360': add360( match[2], node, labels, i ); break; } } labels_container.appendChild( labels ); node.appendChild( labels_container ); } } function wikiSetup() { treeGroup(); externalLinks(); ttxSwichMode(); ttxCollapseBlock(); ttxBuyButton(); ttxMarketButton(); gunHtml(); gun2Html(); gunHtmlEn(); gun2HtmlEn(); addSymbols(); ttxCockpit(); skinGallery(); ttxSlider(); } if (document.readyState === "complete" || document.readyState === "loaded" || document.readyState === "interactive") { wikiSetup(); } else { document.addEventListener('DOMContentLoaded', wikiSetup); }