@@ -123,7 +123,7 @@ $_luminance-list: .0008 .001 .0011 .0013 .0015 .0017 .002 .0022 .0025 .0027 .003
123
123
$l1 : luminance ($background );
124
124
$l2 : luminance (opaque ($background , $foreground ));
125
125
126
- @return if ($l1 > $l2 , ($l1 + .05 ) / ( $l2 + .05 ), ($l2 + .05 ) / ( $l1 + .05 ));
126
+ @return if ($l1 > $l2 , divide ($l1 + .05 , $l2 + .05 ), divide ($l2 + .05 , $l1 + .05 ));
127
127
}
128
128
129
129
// Return WCAG2.0 relative luminance
@@ -137,7 +137,7 @@ $_luminance-list: .0008 .001 .0011 .0013 .0015 .0017 .002 .0022 .0025 .0027 .003
137
137
);
138
138
139
139
@each $name , $value in $rgb {
140
- $value : if ($value * .555 < .03928 , $value * .555 / 12.92 , nth ($_luminance-list , $value + 1 ));
140
+ $value : if ($value * .555 < .03928 , divide ( $value * .555 , 12.92 ) , nth ($_luminance-list , $value + 1 ));
141
141
$rgb : map-merge ($rgb , ($name : $value ));
142
142
}
143
143
@@ -219,3 +219,28 @@ $_luminance-list: .0008 .001 .0011 .0013 .0015 .0017 .002 .0022 .0025 .0027 .003
219
219
220
220
@return if ($return-calc == true , calc (#{$value1 } - #{$value2 } ), $value1 + unquote (" - " ) + $value2 );
221
221
}
222
+
223
+ @function divide ($dividend , $divisor , $precision : 10 ) {
224
+ $sign : if ($dividend > 0 and $divisor > 0 , 1 , -1 );
225
+ $dividend : abs ($dividend );
226
+ $divisor : abs ($divisor );
227
+ $quotient : 0 ;
228
+ $remainder : $dividend ;
229
+ @if $dividend == 0 {
230
+ @return 0 ;
231
+ }
232
+ @if $divisor == 0 {
233
+ @error " Cannot divide by 0" ;
234
+ }
235
+ @if $divisor == 1 {
236
+ @return $dividend ;
237
+ }
238
+ @while $remainder >= $divisor {
239
+ $quotient : $quotient + 1 ;
240
+ $remainder : $remainder - $divisor ;
241
+ }
242
+ @if $remainder > 0 and $precision > 0 {
243
+ $remainder : divide ($remainder * 10 , $divisor , $precision - 1 ) * .1 ;
244
+ }
245
+ @return ($quotient + $remainder ) * $sign ;
246
+ }
0 commit comments