MediaWiki:Common.js: відмінності між версіями
Admin (обговорення | внесок) Немає опису редагування |
Admin (обговорення | внесок) Немає опису редагування |
||
| Рядок 386: | Рядок 386: | ||
// ================================================== | // ================================================== | ||
$(function() { | $(function() { | ||
var $ | 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() { | function doSearch() { | ||
var query = $input.val().trim(); | var query = $input.val().trim(); | ||
Поточна версія на 11:58, 15 січня 2026
// ==================================================
// RANDOM ARTICLES
// ==================================================
$(document).ready(function() {
var apiUrl = mw.config.get('wgScriptPath') + '/api.php';
$.getJSON(apiUrl, {
action: 'query',
format: 'json',
list: 'random',
rnnamespace: '0',
rnlimit: '5',
prop: 'extracts',
exchars: '250',
exlimit: 'max',
explaintext: true
}, function(data) {
var html = '';
$.each(data.query.random, function(i, article) {
html += '<div class="random-article-preview">';
html += '<h2><a href="/wiki/' + encodeURIComponent(article.title) + '">' + article.title + '</a></h2>';
html += '<p>' + article.extract + '</p>';
html += '</div>';
});
$('#random-articles-container').html(html);
});
});
// ==================================================
// L-BOX NAVIGATION
// ==================================================
$(function() {
var items = $('.l-box-item');
var sections = [];
items.each(function() {
var target = $(this).data('target');
if (target === 'top') {
sections.push({item: $(this), target: null, offset: 0});
} else {
var el = document.getElementById(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() {
var scrollPos = $(window).scrollTop() + 120;
var current = null;
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;
}
}
items.removeClass('active');
if (current) {
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();
}
});
});