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

Нет описания правки
мНет описания правки
Строка 298: Строка 298:
         return 0.2126 * r + 0.7152 * g + 0.0722 * b;
         return 0.2126 * r + 0.7152 * g + 0.0722 * b;
     }
     }
    var r, g, b;
     // Если цвет в формате rgba, преобразуем его в rgb
     // Если цвет в формате rgba, преобразуем его в rgb
     if (color.startsWith('rgba')) {
     if (color.indexOf('rgba') === 0) {
         const [r, g, b] = color.match(/\d+/g).slice(0, 3).map(Number);
         var rgbaValues = color.match(/\d+/g);
        color = `rgb(${r},${g},${b})`;
        if (rgbaValues && rgbaValues.length >= 3) {
            r = parseInt(rgbaValues[0], 10);
            g = parseInt(rgbaValues[1], 10);
            b = parseInt(rgbaValues[2], 10);
        } else {
            return color; // Возвращаем оригинальный цвет, если не удалось разобрать
        }
    } else if (color.indexOf('rgb') === 0) {
        var rgbValues = color.match(/\d+/g);
        if (rgbValues && rgbValues.length >= 3) {
            r = parseInt(rgbValues[0], 10);
            g = parseInt(rgbValues[1], 10);
            b = parseInt(rgbValues[2], 10);
        } else {
            return color; // Возвращаем оригинальный цвет, если не удалось разобрать
        }
    } else {
        return color; // Возвращаем оригинальный цвет, если формат не поддерживается
     }
     }
    // Если цвет в формате rgb
 
    let [r, g, b] = color.match(/\d+/g).map(Number);
     var brightness = getBrightness(r, g, b);
     let brightness = getBrightness(r, g, b);
 
     // Устанавливаем порог для определения тёмного цвета
     // Устанавливаем порог для определения тёмного цвета
     const darkThreshold = 90; // Более универсальный порог для разделения тёмных и светлых цветов
     var darkThreshold = 90; // Более универсальный порог для разделения тёмных и светлых цветов
     let brightnessFactor = brightness < darkThreshold ? factor + 0.04 : factor; // Увеличиваем фактор для тёмных цветов
     var brightnessFactor = brightness < darkThreshold ? factor + 0.04 : factor; // Увеличиваем фактор для тёмных цветов
 
     // Увеличиваем яркость
     // Увеличиваем яркость
     r = Math.min(255, Math.floor(r * brightnessFactor));
     r = Math.min(255, Math.floor(r * brightnessFactor));
     g = Math.min(255, Math.floor(g * brightnessFactor));
     g = Math.min(255, Math.floor(g * brightnessFactor));
     b = Math.min(255, Math.floor(b * brightnessFactor));
     b = Math.min(255, Math.floor(b * brightnessFactor));
     return `rgb(${r}, ${g}, ${b})`;
 
     return 'rgb(' + r + ', ' + g + ', ' + b + ')';
}
}


// Функция для подсветки ячеек в таблице при наведении
// Функция для подсветки ячеек в таблице при наведении
function applyHighlighting() {
function applyHighlighting() {
     document.querySelectorAll('.wikitable:not(.no-highlight-table)').forEach(table => {
     var tables = document.querySelectorAll('.wikitable:not(.no-highlight-table)');
         const tbody = table.querySelector('tbody');
    Array.prototype.forEach.call(tables, function(table) {
         const thead = table.querySelector('thead');
         var tbody = table.querySelector('tbody');
         const rows = Array.from(tbody.querySelectorAll('tr')).filter(row => !row.querySelector('table'));
         var thead = table.querySelector('thead');
         const topLevelRows = thead ? rows : rows.slice(1);
         var rows = Array.prototype.slice.call(tbody.querySelectorAll('tr')).filter(function(row) {
         let hasInvalidRowspan = false;
            return !row.querySelector('table');
         let hasTooManyRowspan = false;
        });
         topLevelRows.forEach(row => {
         var topLevelRows = thead ? rows : rows.slice(1);
             const cells = Array.from(row.querySelectorAll('td, th'));
 
             const rowspanCount = cells.filter(cell => cell.hasAttribute('rowspan') && cell.getAttribute('rowspan') !== '1').length;
         var hasInvalidRowspan = false;
         var hasTooManyRowspan = false;
 
         topLevelRows.forEach(function(row) {
             var cells = Array.prototype.slice.call(row.querySelectorAll('td, th'));
 
             var rowspanCount = cells.filter(function(cell) {
                return cell.hasAttribute('rowspan') && cell.getAttribute('rowspan') !== '1';
            }).length;
 
             if (rowspanCount > 2) {
             if (rowspanCount > 2) {
                 hasTooManyRowspan = true;
                 hasTooManyRowspan = true;
                 return;
                 return;
             }
             }
             const hasValidRowspanEdge = cells.some((cell, index) =>
 
                 cell.hasAttribute('rowspan') && cell.getAttribute('rowspan') !== '1' && (index === 0 || index === cells.length - 1)
             var hasValidRowspanEdge = cells.some(function(cell, index) {
             );
                 return 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
 
             )) {
             if (!hasValidRowspanEdge && cells.some(function(cell, index) {
                 return cell.hasAttribute('rowspan') && cell.getAttribute('rowspan') !== '1' && index > 0 && index < cells.length - 1;
             })) {
                 hasInvalidRowspan = true;
                 hasInvalidRowspan = true;
             }
             }
         });
         });
         if (hasTooManyRowspan || hasInvalidRowspan) return;
         if (hasTooManyRowspan || hasInvalidRowspan) return;
         topLevelRows.forEach(row => {
 
             const cells = Array.from(row.querySelectorAll('td, th'));
         topLevelRows.forEach(function(row) {
             const originalStyles = cells.map(cell => ({
             var cells = Array.prototype.slice.call(row.querySelectorAll('td, th'));
                 backgroundColor: getComputedStyle(cell).backgroundColor,
             var originalStyles = cells.map(function(cell) {
                color: getComputedStyle(cell).color
                 return {
             }));
                    backgroundColor: getComputedStyle(cell).backgroundColor,
             cells.forEach((cell, index) => {
                    color: getComputedStyle(cell).color
                };
             });
 
             cells.forEach(function(cell, index) {
                 if (cell.hasAttribute('rowspan') && cell.getAttribute('rowspan') !== '1') return;
                 if (cell.hasAttribute('rowspan') && cell.getAttribute('rowspan') !== '1') return;
                 cell.addEventListener('mouseover', () => {
 
                     cells.forEach((innerCell, innerIndex) => {
                 cell.addEventListener('mouseover', function() {
                     cells.forEach(function(innerCell, innerIndex) {
                         if (!innerCell.hasAttribute('rowspan') || innerCell.getAttribute('rowspan') === '1') {
                         if (!innerCell.hasAttribute('rowspan') || innerCell.getAttribute('rowspan') === '1') {
                             innerCell.style.backgroundColor = brightenColor(originalStyles[innerIndex].backgroundColor, 1.035);
                             innerCell.style.backgroundColor = brightenColor(originalStyles[innerIndex].backgroundColor, 1.035);
Строка 358: Строка 397:
                     });
                     });
                 });
                 });
                 cell.addEventListener('mouseout', () => {
 
                     cells.forEach((innerCell, innerIndex) => {
                 cell.addEventListener('mouseout', function() {
                     cells.forEach(function(innerCell, innerIndex) {
                         if (!innerCell.hasAttribute('rowspan') || innerCell.getAttribute('rowspan') === '1') {
                         if (!innerCell.hasAttribute('rowspan') || innerCell.getAttribute('rowspan') === '1') {
                             innerCell.style.backgroundColor = originalStyles[innerIndex].backgroundColor;
                             innerCell.style.backgroundColor = originalStyles[innerIndex].backgroundColor;