MediaWiki:Common.js: различия между версиями
Pok (обсуждение | вклад) мНет описания правки |
Pok (обсуждение | вклад) мНет описания правки |
||
| Строка 285: | Строка 285: | ||
// Функция для увеличения яркости цвета | // Функция для увеличения яркости цвета | ||
function brightenColor(color, factor) { | function brightenColor(color, factor) { | ||
function getBrightness(r, g, b) { | |||
return 0.2126 * r + 0.7152 * g + 0.0722 * b; | |||
} | |||
function isGray(r, g, b) { | |||
const maxDiff = 20; | |||
return Math.abs(r - g) < maxDiff | |||
&& Math.abs(g - b) < maxDiff | |||
&& Math.abs(r - b) < maxDiff; | |||
} | |||
const vals = color.match(/-?\d+(\.\d+)?/g).map(parseFloat); | |||
let [r, g, b, a = 1] = vals; | |||
if (r <= 1 && g <= 1 && b <= 1) { | |||
r *= 255; | |||
g *= 255; | |||
b *= 255; | |||
} | |||
r = Math.round(r); | |||
g = Math.round(g); | |||
b = Math.round(b); | |||
const brightness = getBrightness(r, g, b); | |||
if (factor === undefined) { | |||
if (brightness <= 40) { | |||
factor = 6; | |||
} else if (brightness <= 180) { | |||
factor = 4; | |||
} else { | |||
factor = 0; | |||
} | |||
} | |||
if (isGray(r, g, b)) { | |||
factor = Math.max(1, factor * 0.5); | |||
} | |||
r = Math.min(255, r + factor); | |||
g = Math.min(255, g + factor); | |||
b = Math.min(255, b + factor); | |||
if (a < 1) { | |||
return `rgba(${r}, ${g}, ${b}, ${a})`; | |||
} else { | |||
return `rgb(${r}, ${g}, ${b})`; | |||
} | |||
} | } | ||