6208
редагувань
Admin (обговорення | внесок) Немає опису редагування |
Admin (обговорення | внесок) Немає опису редагування |
||
| (Не показано одну проміжну версію цього користувача) | |||
| Рядок 1: | Рядок 1: | ||
// ================================================== | |||
// RANDOM ARTICLES | |||
// ================================================== | |||
$(document).ready(function() { | $(document).ready(function() { | ||
var apiUrl = mw.config.get('wgScriptPath') + '/api.php'; | var apiUrl = mw.config.get('wgScriptPath') + '/api.php'; | ||
| Рядок 6: | Рядок 9: | ||
list: 'random', | list: 'random', | ||
rnnamespace: '0', | rnnamespace: '0', | ||
rnlimit: '5', | rnlimit: '5', | ||
prop: 'extracts', | prop: 'extracts', | ||
exchars: '250', | exchars: '250', | ||
exlimit: 'max', | exlimit: 'max', | ||
explaintext: true | explaintext: true | ||
| Рядок 22: | Рядок 25: | ||
}); | }); | ||
}); | }); | ||
// ================================================== | |||
// L-BOX NAVIGATION | |||
// ================================================== | |||
$(function() { | $(function() { | ||
var items = $('.l-box-item'); | var items = $('.l-box-item'); | ||
| Рядок 27: | Рядок 34: | ||
items.each(function() { | items.each(function() { | ||
var | var target = $(this).data('target'); | ||
if ( | if (target === 'top') { | ||
sections.push({item: $(this), target: null, offset: 0}); | |||
var | } else { | ||
if ( | var el = document.getElementById(target); | ||
sections.push({item: $(this), target: $( | if (el) { | ||
sections.push({item: $(this), target: $(el), offset: $(el).offset().top}); | |||
} | } | ||
} | } | ||
}); | |||
items.on('click', function() { | |||
var target = $(this).data('target'); | |||
var scrollTo = 0; | |||
if (target === 'top') { | |||
scrollTo = 0; | |||
} else { | |||
var el = document.getElementById(target); | |||
if (el) { | |||
scrollTo = $(el).offset().top - 100; | |||
} | |||
} | |||
$('html, body').animate({scrollTop: scrollTo}, 300); | |||
}); | }); | ||
$(window).on('scroll', function() { | $(window).on('scroll', function() { | ||
var scrollPos = $(window).scrollTop() + | var scrollPos = $(window).scrollTop() + 120; | ||
var current = null; | var current = null; | ||
for (var i = 0; i < sections.length; i++) { | for (var i = 0; i < sections.length; i++) { | ||
var checkPos = sections[i].target ? sections[i].target.offset().top : 0; | |||
if (checkPos <= scrollPos) { | |||
current = sections[i].item; | current = sections[i].item; | ||
} | } | ||
| Рядок 50: | Рядок 75: | ||
if (current) { | if (current) { | ||
current.addClass('active'); | current.addClass('active'); | ||
} | |||
}); | |||
$(window).trigger('scroll'); | |||
}); | |||
// ================================================== | |||
// PROFILE ICONS | |||
// ================================================== | |||
$(document).ready(function() { | |||
$('.profile-icon').each(function() { | |||
var icon = $(this); | |||
var url = icon.attr('data-url'); | |||
if (url && url.trim() !== '') { | |||
icon.css('cursor', 'pointer'); | |||
icon.on('click', function() { | |||
window.open(url, '_blank'); | |||
}); | |||
} else { | |||
icon.css({ | |||
'opacity': '0.3', | |||
'filter': 'grayscale(100%)', | |||
'-webkit-filter': 'grayscale(100%)', | |||
'cursor': 'default' | |||
}); | |||
} | |||
}); | |||
}); | |||
// ================================================== | |||
// ДИНАМІЧНІ ПОСИЛАННЯ НА ГОЛОВНІЙ | |||
// ================================================== | |||
$(document).ready(function() { | |||
// Тільки на головній сторінці | |||
if ($('body').hasClass('page-Головна_сторінка')) { | |||
// Списки посилань для кожного блоку | |||
var block1Links = [ | |||
{ title: 'Фінал Року', url: '/index.php/Фінал_Року' } | |||
]; | |||
var block2Links = [ | |||
{ title: 'Перша статистика', url: '/index.php/Перша_статистика' }, | |||
{ title: 'Період', url: '/index.php/Період' }, | |||
{ title: 'Друга статистика', url: '/index.php/Статистика' } | |||
]; | |||
var block3Links = [ | |||
{ title: 'Mafia Closed Cup I', url: '/index.php/Mafia_Closed_Cup_I' }, | |||
{ title: 'Mafia Closed Cup I Online', url: '/index.php/Mafia_Closed_Cup_I_Online' }, | |||
{ title: 'My Closest Circle I', url: '/index.php/My_Closest_Circle_I' } | |||
]; | |||
// Функція випадкового вибору | |||
function getRandomItem(arr) { | |||
return arr[Math.floor(Math.random() * arr.length)]; | |||
} | |||
// Знаходимо блоки і замінюємо посилання | |||
var $blocks = $('.home__block-image-block p'); | |||
if ($blocks.length >= 3) { | |||
var link1 = getRandomItem(block1Links); | |||
var link2 = getRandomItem(block2Links); | |||
var link3 = getRandomItem(block3Links); | |||
$blocks.eq(0).html('<a href="' + link1.url + '">' + link1.title + '</a>'); | |||
$blocks.eq(1).html('<a href="' + link2.url + '">' + link2.title + '</a>'); | |||
$blocks.eq(2).html('<a href="' + link3.url + '">' + link3.title + '</a>'); | |||
} | |||
} | |||
}); | |||
// ================================================== | |||
// PLAYER TABS WITH LAZY LOADING | |||
// ================================================== | |||
$(function() { | |||
var $tabs = $('.player-tab'); | |||
var $contents = $('.player-tab-content'); | |||
var $lbox = $('.l-box'); | |||
var $rbox = $('.r-box'); | |||
if ($tabs.length === 0) return; | |||
// Функція перевірки мобільної версії | |||
function isMobile() { | |||
return $(window).width() <= 768; | |||
} | |||
$tabs.on('click', function() { | |||
var $tab = $(this); | |||
var tabId = $tab.data('tab'); | |||
var $content = $('#tab-' + tabId); | |||
// Перемикаємо активні класи | |||
$tabs.removeClass('active'); | |||
$tab.addClass('active'); | |||
$contents.removeClass('active'); | |||
$content.addClass('active'); | |||
// Ховаємо/показуємо l-box залежно від табу (на десктопі) | |||
if (tabId === 'games') { | |||
$lbox.fadeOut(200); | |||
} else { | |||
$lbox.fadeIn(200); | |||
} | |||
// Ховаємо/показуємо r-box на МОБІЛЬНИХ при переході на "games" | |||
if (isMobile()) { | |||
if (tabId === 'games') { | |||
$rbox.slideUp(200); | |||
} else { | |||
$rbox.slideDown(200); | |||
} | |||
} | |||
// Lazy load для ігор | |||
if (tabId === 'games' && !$content.data('loaded')) { | |||
var playerName = $content.data('player'); | |||
if (playerName) { | |||
// Показуємо loader | |||
$content.html('<div class="tab-loader">Завантаження...</div>'); | |||
$.ajax({ | |||
url: mw.config.get('wgScriptPath') + '/api.php', | |||
data: { | |||
action: 'expandtemplates', | |||
format: 'json', | |||
text: '{{#invoke:FetchData|player_games|player=' + playerName + '}}', | |||
prop: 'wikitext' | |||
}, | |||
dataType: 'json', | |||
success: function(response) { | |||
if (response.expandtemplates && response.expandtemplates.wikitext) { | |||
$.ajax({ | |||
url: mw.config.get('wgScriptPath') + '/api.php', | |||
data: { | |||
action: 'parse', | |||
format: 'json', | |||
text: response.expandtemplates.wikitext, | |||
contentmodel: 'wikitext', | |||
disablelimitreport: true | |||
}, | |||
dataType: 'json', | |||
success: function(parseResponse) { | |||
if (parseResponse.parse && parseResponse.parse.text) { | |||
$content.html(parseResponse.parse.text['*']); | |||
$content.data('loaded', true); | |||
$content.find('table.sortable').tablesorter(); | |||
} | |||
}, | |||
error: function() { | |||
$content.html('<p style="color: #ff7777; text-align: center;">Помилка завантаження. Спробуйте оновити сторінку.</p>'); | |||
} | |||
}); | |||
} | |||
}, | |||
error: function() { | |||
$content.html('<p style="color: #ff7777; text-align: center;">Помилка завантаження. Спробуйте оновити сторінку.</p>'); | |||
} | |||
}); | |||
} | |||
} | |||
}); | |||
// При зміні розміру вікна - показуємо r-box на десктопі | |||
$(window).on('resize', function() { | |||
if (!isMobile()) { | |||
$rbox.show(); | |||
} | |||
}); | |||
}); | |||
// ================================================== | |||
// МОБІЛЬНИЙ ПОШУК | |||
// ================================================== | |||
$(function() { | |||
if ($(window).width() > 768) return; | |||
// Перевіряємо чи вже створено | |||
if ($('.mobile-search-btn').length > 0) return; | |||
var $searchBtn = $('<div class="mobile-search-btn">' + | |||
'<svg width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="#fff" stroke-width="2">' + | |||
'<circle cx="11" cy="11" r="8"/>' + | |||
'<path d="m21 21-4.35-4.35"/>' + | |||
'</svg>' + | |||
'</div>'); | |||
var $overlay = $('<div class="mobile-search-overlay">' + | |||
'<input type="text" placeholder="Пошук..." autocomplete="off">' + | |||
'<div class="mobile-search-close">×</div>' + | |||
'</div>'); | |||
$('.minerva-header .branding-box').after($searchBtn); | |||
$('body').append($overlay); | |||
var $input = $overlay.find('input'); | |||
var $close = $overlay.find('.mobile-search-close'); | |||
$searchBtn.on('click', function(e) { | |||
e.preventDefault(); | |||
e.stopPropagation(); | |||
$overlay.addClass('active'); | |||
setTimeout(function() { $input.focus(); }, 100); | |||
}); | |||
$close.on('click', function() { | |||
$overlay.removeClass('active'); | |||
$input.val(''); | |||
}); | |||
$input.on('keydown', function(e) { | |||
if (e.keyCode === 13) { | |||
var query = $input.val().trim(); | |||
if (query) { | |||
window.location.href = '/index.php?title=Спеціальна:Пошук&search=' + encodeURIComponent(query); | |||
} | |||
} | |||
if (e.keyCode === 27) { | |||
$overlay.removeClass('active'); | |||
$input.val(''); | |||
} | |||
}); | |||
$overlay.on('click', function(e) { | |||
if (e.target === this) { | |||
$overlay.removeClass('active'); | |||
$input.val(''); | |||
} | |||
}); | |||
}); | |||
// ================================================== | |||
// БЛОКУВАННЯ MINERVA SEARCH OVERLAY (ДЕСКТОП) | |||
// ================================================== | |||
$(function() { | |||
// Тільки для десктопа | |||
if ($(window).width() <= 768) return; | |||
var $searchInput = $('#searchInput'); | |||
if ($searchInput.length === 0) return; | |||
// Затримка щоб DOM завантажився | |||
setTimeout(function() { | |||
// Змінюємо placeholder | |||
$searchInput.attr('placeholder', 'Пошук...'); | |||
// Клонуємо input щоб прибрати всі event listeners | |||
var $newInput = $searchInput.clone(false); | |||
$searchInput.replaceWith($newInput); | |||
$searchInput = $newInput; | |||
// Прибираємо readonly і класи тригера | |||
$searchInput.prop('readonly', false); | |||
$searchInput.removeAttr('readonly'); | |||
$searchInput.removeClass('skin-minerva-search-trigger'); | |||
// При фокусі - блокуємо overlay | |||
$searchInput.on('focus click', function(e) { | |||
e.stopPropagation(); | |||
// Прибираємо overlay класи з body | |||
$('body').removeClass('overlay-enabled search-enabled'); | |||
// Видаляємо overlay елементи | |||
$('.overlay, .search-overlay').hide(); | |||
// Прибираємо hash | |||
if (window.location.hash === '#/search') { | |||
history.replaceState(null, null, window.location.pathname); | |||
} | |||
}); | |||
// При Enter - перехід на сторінку пошуку | |||
$searchInput.on('keydown', function(e) { | |||
if (e.which === 13 || e.keyCode === 13) { | |||
e.preventDefault(); | |||
var query = $(this).val().trim(); | |||
if (query) { | |||
window.location.href = '/index.php?title=Спеціальна:Пошук&search=' + encodeURIComponent(query); | |||
} | |||
return false; | |||
} | |||
}); | |||
}, 100); | |||
// Блокуємо hashchange на #/search | |||
$(window).on('hashchange', function(e) { | |||
if (window.location.hash === '#/search') { | |||
e.preventDefault(); | |||
history.replaceState(null, null, window.location.pathname); | |||
$('body').removeClass('overlay-enabled search-enabled'); | |||
$('.overlay, .search-overlay').hide(); | |||
} | |||
}); | |||
// Перевіряємо hash при завантаженні | |||
if (window.location.hash === '#/search') { | |||
history.replaceState(null, null, window.location.pathname); | |||
} | |||
}); | |||
// ================================================== | |||
// BANNER SEARCH (LIQUIPEDIA STYLE) | |||
// ================================================== | |||
$(function() { | |||
var $container = $('#bannerSearchContainer'); | |||
if ($container.length === 0) return; | |||
// Створюємо елементи через JS | |||
var $input = $('<input>', { | |||
type: 'text', | |||
id: 'bannerSearchInput', | |||
placeholder: 'Пошук MCC...' | |||
}); | |||
var $btn = $('<button>', { | |||
id: 'bannerSearchBtn', | |||
text: 'Пошук' | |||
}); | |||
$container.append($input).append($btn); | |||
// Функція пошуку | |||
function doSearch() { | |||
var query = $input.val().trim(); | |||
if (query) { | |||
window.location.href = '/index.php?title=Спеціальна:Пошук&search=' + encodeURIComponent(query); | |||
} | |||
} | |||
$btn.on('click', doSearch); | |||
$input.on('keydown', function(e) { | |||
if (e.keyCode === 13) { | |||
e.preventDefault(); | |||
doSearch(); | |||
} | } | ||
}); | }); | ||
}); | }); | ||