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

мНет описания правки
мНет описания правки
Строка 292: Строка 292:
}
}


// Функция для увеличения яркости цвета
function brightenColor(color, factor) {
function brightenColor(color, factor) {
    factor = factor || 1.03;
     function getBrightness(r, g, b) {
     function getBrightness(r, g, b) {
         return 0.2126 * r + 0.7152 * g + 0.0722 * b;
         return 0.2126 * r + 0.7152 * g + 0.0722 * b;
     }
     }


     var r, g, b, a = 1, rgbValues;
     var rgbValues = color.match(/\d+(\.\d+)?/g);
 
     var r = parseInt(rgbValues[0], 10);
    // Проверка на rgb или rgba
     var g = parseInt(rgbValues[1], 10);
    rgbValues = color.match(/\d+(\.\d+)?/g);
     var b = parseInt(rgbValues[2], 10);
     if (!rgbValues || rgbValues.length < 3) {
     var a = rgbValues.length === 4 ? parseFloat(rgbValues[3]) : 1; // Обработка альфа-канала
        return color; // Возвращаем цвет без изменений, если не удалось разобрать
    }
 
    // Извлечение r, g, b и, если есть, a
    r = parseInt(rgbValues[0], 10);
     g = parseInt(rgbValues[1], 10);
     b = parseInt(rgbValues[2], 10);
     if (rgbValues.length === 4) {
        a = parseFloat(rgbValues[3]);
    }


     var brightness = getBrightness(r, g, b);
     var brightness = getBrightness(r, g, b);


     // Чем темнее цвет, тем выше фактор, чем светлее, тем меньше он увеличивается
     if (factor === undefined) {
    var brightnessFactor;
        if (brightness < 60) {
    if (brightness < 60) {
            factor = 1.05;
        brightnessFactor = factor + 0.05;  
        } else if (brightness < 120) {
    } else if (brightness < 120) {
            factor = 1.03;
        brightnessFactor = factor + 0.03;
        } else if (brightness < 180) {
    } else if (brightness < 180) {
            factor = 1.01;
        brightnessFactor = factor + 0.01;  
        } else {
    } else {
            factor = 1.0;
        brightnessFactor = factor;
        }
     }
     }


    // Применяем фактор яркости
     r = Math.min(255, Math.floor(r * factor));
     r = Math.min(255, Math.floor(r * brightnessFactor));
     g = Math.min(255, Math.floor(g * factor));
     g = Math.min(255, Math.floor(g * brightnessFactor));
     b = Math.min(255, Math.floor(b * factor));
     b = Math.min(255, Math.floor(b * brightnessFactor));


    // Возвращаем цвет
     return a < 1 ? 'rgba(' + r + ', ' + g + ', ' + b + ', ' + a + ')' : 'rgb(' + r + ', ' + g + ', ' + b + ')';
     return a < 1 ? 'rgba(' + r + ', ' + g + ', ' + b + ', ' + a + ')' : 'rgb(' + r + ', ' + g + ', ' + b + ')';
}
}