MediaWiki:Common.js: відмінності між версіями

нема опису редагування
Немає опису редагування
Немає опису редагування
Рядок 417: Рядок 417:
             e.preventDefault();
             e.preventDefault();
             doSearch();
             doSearch();
        }
    });
});
// ==================================================
// MCC DESIGN SYSTEM v2 — append to Common.js
// ==================================================
// --------------------------------------------------
// 1. АНІМАЦІЯ РЯДКІВ ПРИ СОРТУВАННІ ТАБЛИЦЬ
//    Хукається на jQuery tablesorter sortEnd
// --------------------------------------------------
$(function () {
    // Чекаємо поки tablesorter ініціалізується
    $(document).on('sortEnd', 'table.wikitable', function () {
        var $table = $(this);
        // Спочатку прибираємо анімацію
        $table.addClass('mcc-sorting').removeClass('mcc-sorted');
        // Після мікро-затримки запускаємо знову
        setTimeout(function () {
            $table.removeClass('mcc-sorting').addClass('mcc-sorted');
            // Прибираємо клас після завершення останньої анімації
            setTimeout(function () {
                $table.removeClass('mcc-sorted');
            }, 600);
        }, 20);
    });
});
// --------------------------------------------------
// 2. ГОРИЗОНТАЛЬНИЙ СКРОЛ + ГРАДІЄНТ-ПІДКАЗКА
//    Обгортає широкі таблиці в .mcc-scroll-outer
// --------------------------------------------------
$(function () {
    // Класи таблиць, які треба загорнути
    var WIDE_SELECTORS = [
        '.wikitable.wide-table',      // існуючий клас
        '.mcc-wide',                  // новий клас для розмітки
        // Запис ігор — таблиця з класом full-width або в секції Запис ігор
        '.wikitable.full-width'
    ].join(', ');
    function wrapScrollable($table) {
        // Не загортаємо двічі
        if ($table.closest('.mcc-scroll-inner').length) return;
        var $outer = $('<div class="mcc-scroll-outer"></div>');
        var $inner = $('<div class="mcc-scroll-inner"></div>');
        $table.wrap($inner);
        $table.closest('.mcc-scroll-inner').wrap($outer);
        var $scrollEl = $table.closest('.mcc-scroll-inner');
        var $outerEl  = $scrollEl.closest('.mcc-scroll-outer');
        function checkFade() {
            var atEnd = $scrollEl[0].scrollLeft + $scrollEl[0].clientWidth >= $scrollEl[0].scrollWidth - 4;
            $outerEl.toggleClass('mcc-no-fade', atEnd);
        }
        $scrollEl.on('scroll', checkFade);
        checkFade();
    }
    // Широкі таблиці (існуючі класи)
    $(WIDE_SELECTORS).each(function () {
        wrapScrollable($(this));
    });
    // Таблиця "Запис ігор" — знаходимо по кількості колонок (> 8)
    $('.wikitable').each(function () {
        var $t = $(this);
        if ($t.closest('.mcc-scroll-inner').length) return; // вже загорнута
        var cols = $t.find('thead tr:first th').length;
        if (cols > 8) {
            $t.addClass('mcc-wide-table');
            wrapScrollable($t);
        }
    });
});
// --------------------------------------------------
// 3. ПІДСВІЧУВАННЯ ВІНРЕЙТУ В ТАБЛИЦЯХ
//    Автоматично додає клас .wr-hi / .wr-lo до клітинок %
// --------------------------------------------------
$(function () {
    $('.wikitable tbody tr').each(function () {
        var $cells = $(this).find('td');
        $cells.each(function () {
            var text = $(this).text().trim();
            // Якщо клітинка містить відсоток
            if (/^\d+(\.\d+)?%$/.test(text)) {
                var val = parseFloat(text);
                if (val >= 55) {
                    $(this).addClass('wr-hi');
                } else if (val <= 33) {
                    $(this).addClass('wr-lo');
                }
            }
        });
    });
});
// --------------------------------------------------
// 4. PROFILE ICONS — inactive якщо немає URL
//    (доповнює існуючий код, не замінює)
// --------------------------------------------------
$(function () {
    $('.profile-icon').each(function () {
        var $icon = $(this);
        var url  = $icon.attr('data-url') || '';
        if (!url.trim()) {
            $icon.addClass('inactive');
         }
         }
     });
     });
});
});