MediaWiki:Common.js: различия между версиями

Нет описания правки
Метка: ручная отмена
Нет описания правки
Строка 291: Строка 291:
return iframe;
return iframe;
}
}
// Функция для увеличения яркости цвета
function brightenColor(color, factor) {
    // Функция для вычисления яркости цвета (использует стандартное восприятие цвета)
    function getBrightness(r, g, b) {
        return 0.2126 * r + 0.7152 * g + 0.0722 * b;
    }
    // Если цвет в формате rgba, преобразуем его в rgb
    if (color.startsWith('rgba')) {
        const [r, g, b] = color.match(/\d+/g).slice(0, 3).map(Number);
        color = `rgb(${r},${g},${b})`;
    }
    // Если цвет в формате rgb
    let [r, g, b] = color.match(/\d+/g).map(Number);
    let brightness = getBrightness(r, g, b);
    // Устанавливаем порог для определения тёмного цвета
    const darkThreshold = 90; // Более универсальный порог для разделения тёмных и светлых цветов
    let brightnessFactor = brightness < darkThreshold ? factor + 0.04 : factor; // Увеличиваем фактор для тёмных цветов
    // Увеличиваем яркость
    r = Math.min(255, Math.floor(r * brightnessFactor));
    g = Math.min(255, Math.floor(g * brightnessFactor));
    b = Math.min(255, Math.floor(b * brightnessFactor));
    return `rgb(${r}, ${g}, ${b})`;
}
// Функция для подсветки ячеек в таблице при наведении
function applyHighlighting() {
    document.querySelectorAll('.wikitable:not(.no-highlight-table)').forEach(table => {
        const tbody = table.querySelector('tbody');
        const thead = table.querySelector('thead');
        const rows = Array.from(tbody.querySelectorAll('tr')).filter(row => !row.querySelector('table'));
        const topLevelRows = thead ? rows : rows.slice(1);
        let hasInvalidRowspan = false;
        let hasTooManyRowspan = false;
        topLevelRows.forEach(row => {
            const cells = Array.from(row.querySelectorAll('td, th'));
            const rowspanCount = cells.filter(cell => cell.hasAttribute('rowspan') && cell.getAttribute('rowspan') !== '1').length;
            if (rowspanCount > 2) {
                hasTooManyRowspan = true;
                return;
            }
            const hasValidRowspanEdge = cells.some((cell, index) =>
                cell.hasAttribute('rowspan') && cell.getAttribute('rowspan') !== '1' && (index === 0 || index === cells.length - 1)
            );
            if (!hasValidRowspanEdge && cells.some((cell, index) =>
                cell.hasAttribute('rowspan') && cell.getAttribute('rowspan') !== '1' && index > 0 && index < cells.length - 1
            )) {
                hasInvalidRowspan = true;
            }
        });
        if (hasTooManyRowspan || hasInvalidRowspan) return;
        topLevelRows.forEach(row => {
            const cells = Array.from(row.querySelectorAll('td, th'));
            const originalStyles = cells.map(cell => ({
                backgroundColor: getComputedStyle(cell).backgroundColor,
                color: getComputedStyle(cell).color
            }));
            cells.forEach((cell, index) => {
                if (cell.hasAttribute('rowspan') && cell.getAttribute('rowspan') !== '1') return;
                cell.addEventListener('mouseover', () => {
                    cells.forEach((innerCell, innerIndex) => {
                        if (!innerCell.hasAttribute('rowspan') || innerCell.getAttribute('rowspan') === '1') {
                            innerCell.style.backgroundColor = brightenColor(originalStyles[innerIndex].backgroundColor, 1.035);
                            innerCell.style.color = brightenColor(originalStyles[innerIndex].color, 1.035);
                        }
                    });
                });
                cell.addEventListener('mouseout', () => {
                    cells.forEach((innerCell, innerIndex) => {
                        if (!innerCell.hasAttribute('rowspan') || innerCell.getAttribute('rowspan') === '1') {
                            innerCell.style.backgroundColor = originalStyles[innerIndex].backgroundColor;
                            innerCell.style.color = originalStyles[innerIndex].color;
                        }
                    });
                });
            });
        });
    });
}
$(document).ready(function() {
$(document).ready(function() {
var serversStatus = document.querySelectorAll('.serversStatus');
var serversStatus = document.querySelectorAll('.serversStatus');
Строка 324: Строка 404:
}
}
}
}
}
if (document.querySelector('.wikitable')) {
    applyHighlighting();
}
}
});
});