Skip to content

Commit

Permalink
contrast() now accepts percentage threshold
Browse files Browse the repository at this point in the history
Fixes #501.
Closes #523.
  • Loading branch information
atkaye authored and Krinkle committed Oct 16, 2018
1 parent f65faed commit f5a1f34
Show file tree
Hide file tree
Showing 3 changed files with 43 additions and 30 deletions.
67 changes: 37 additions & 30 deletions lessc.inc.php
Original file line number Diff line number Diff line change
Expand Up @@ -1283,36 +1283,43 @@ protected function lib_mix($args) {
}

protected function lib_contrast($args) {
$darkColor = array('color', 0, 0, 0);
$lightColor = array('color', 255, 255, 255);
$threshold = 0.43;

if ( $args[0] == 'list' ) {
$inputColor = ( isset($args[2][0]) ) ? $this->assertColor($args[2][0]) : $lightColor;
$darkColor = ( isset($args[2][1]) ) ? $this->assertColor($args[2][1]) : $darkColor;
$lightColor = ( isset($args[2][2]) ) ? $this->assertColor($args[2][2]) : $lightColor;
$threshold = ( isset($args[2][3]) ) ? $this->assertNumber($args[2][3]) : $threshold;
}
else {
$inputColor = $this->assertColor($args);
}

$inputColor = $this->coerceColor($inputColor);
$darkColor = $this->coerceColor($darkColor);
$lightColor = $this->coerceColor($lightColor);

//Figure out which is actually light and dark!
if ( $this->toLuma($darkColor) > $this->toLuma($lightColor) ) {
$t = $lightColor;
$lightColor = $darkColor;
$darkColor = $t;
}

$inputColor_alpha = $this->lib_alpha($inputColor);
if ( ( $this->toLuma($inputColor) * $inputColor_alpha) < $threshold) {
return $lightColor;
}
return $darkColor;
$darkColor = array('color', 0, 0, 0);
$lightColor = array('color', 255, 255, 255);
$threshold = 0.43;

if ( $args[0] == 'list' ) {
$inputColor = ( isset($args[2][0]) ) ? $this->assertColor($args[2][0]) : $lightColor;
$darkColor = ( isset($args[2][1]) ) ? $this->assertColor($args[2][1]) : $darkColor;
$lightColor = ( isset($args[2][2]) ) ? $this->assertColor($args[2][2]) : $lightColor;

if ( isset($args[2][3]) ) {
if ( isset($args[2][3][2]) && $args[2][3][2] === '%' ) {
$args[2][3][1] /= 100;
unset($args[2][3][2]);
}
$threshold = $this->assertNumber($args[2][3]);
}
}
else {
$inputColor = $this->assertColor($args);
}

$inputColor = $this->coerceColor($inputColor);
$darkColor = $this->coerceColor($darkColor);
$lightColor = $this->coerceColor($lightColor);

//Figure out which is actually light and dark!
if ( $this->toLuma($darkColor) > $this->toLuma($lightColor) ) {
$t = $lightColor;
$lightColor = $darkColor;
$darkColor = $t;
}

$inputColor_alpha = $this->lib_alpha($inputColor);
if ( ( $this->toLuma($inputColor) * $inputColor_alpha) < $threshold) {
return $lightColor;
}
return $darkColor;
}

private function toLuma($color) {
Expand Down
3 changes: 3 additions & 0 deletions tests/inputs/colors.less
Original file line number Diff line number Diff line change
Expand Up @@ -98,6 +98,9 @@ fade {
.contrast {
color1: contrast(#000, red, blue);
color2: contrast(#fff, red, blue);
color3: contrast(#333, #000, #fff); // Default threshold
color4: contrast(#333, #000, #fff, 0.1); // Threshold weighted towards dark colour
color5: contrast(#333, #000, #fff, 10%); // Threshold weighted as percentage
}

.luma {
Expand Down
3 changes: 3 additions & 0 deletions tests/outputs/colors.css
Original file line number Diff line number Diff line change
Expand Up @@ -68,6 +68,9 @@ fade {
.contrast {
color1: #ff0000;
color2: #0000ff;
color3: #ffffff;
color4: #000000;
color5: #000000;
}
.luma {
color: 44.11161568%;
Expand Down

0 comments on commit f5a1f34

Please sign in to comment.