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

мНет описания правки
Метка: ручная отмена
м Отмена правки 51863, сделанной Pok (обсуждение)
Строка 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;
    }
    var r, g, b;
    // Если цвет в формате rgba, преобразуем его в rgb
    if (color.indexOf('rgba') === 0) {
        var rgbaValues = color.match(/\d+/g);
        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; // Возвращаем оригинальный цвет, если формат не поддерживается
    }
    var brightness = getBrightness(r, g, b);
    var darkThreshold = 90;
    var 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() {
// Проверка, является ли устройство мобильным, выходим из функции если да
    if (/Mobi|Android/i.test(navigator.userAgent)) {
        return;
    }
   
    var tables = document.querySelectorAll('.wikitable:not(.no-highlight-table)');
    Array.prototype.forEach.call(tables, function(table) {
        var tbody = table.querySelector('tbody');
        var thead = table.querySelector('thead');
        // Проверяем, что tbody существует
        if (tbody) {
            var rows = Array.prototype.slice.call(tbody.querySelectorAll('tr')).filter(function(row) {
                return !row.querySelector('table');
            });
            // Пропускаем первую строку, если thead нет
            var topLevelRows = thead ? rows : rows.slice(1);
            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) {
                    hasTooManyRowspan = true;
                    return;
                }
                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(function(cell, index) {
                    return cell.hasAttribute('rowspan') && cell.getAttribute('rowspan') !== '1' && index > 0 && index < cells.length - 1;
                })) {
                    hasInvalidRowspan = true;
                }
            });
            if (hasTooManyRowspan || hasInvalidRowspan) return;
            topLevelRows.forEach(function(row) {
                var cells = Array.prototype.slice.call(row.querySelectorAll('td, th'));
                var originalStyles = cells.map(function(cell) {
                    return {
                        backgroundColor: getComputedStyle(cell).backgroundColor,
                        color: getComputedStyle(cell).color
                    };
                });
                cells.forEach(function(cell, index) {
                    if (cell.hasAttribute('rowspan') && cell.getAttribute('rowspan') !== '1') return;
                    cell.addEventListener('mouseover', function() {
                        cells.forEach(function(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', function() {
                        cells.forEach(function(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');
Строка 325: Строка 453:
}
}
}
}
var tables = document.querySelectorAll('.wikitable');
    if (tables.length > 0) {
        applyHighlighting();
    }
});
});
/*WikiEditor/Викификатор*/
/*WikiEditor/Викификатор*/