]> git.ipfire.org Git - thirdparty/bootstrap.git/commitdiff
Update the divide() function
authorMark Otto <markdotto@gmail.com>
Fri, 18 Jun 2021 02:58:31 +0000 (05:58 +0300)
committerXhmikosR <xhmikosr@gmail.com>
Tue, 22 Jun 2021 17:11:39 +0000 (20:11 +0300)
scss/_functions.scss
scss/mixins/_grid.scss

index 2d3478bfad8eb44739b63d3519dc8f837a1d58e7..870f36790f9e35f9e7fbf50448d1684030f85178 100644 (file)
@@ -221,26 +221,43 @@ $_luminance-list: .0008 .001 .0011 .0013 .0015 .0017 .002 .0022 .0025 .0027 .003
 }
 
 @function divide($dividend, $divisor, $precision: 10) {
-  $sign: if($dividend > 0 and $divisor > 0, 1, -1);
+  $sign: if($dividend > 0 and $divisor > 0 or $dividend < 0 and $divisor < 0, 1, -1);
   $dividend: abs($dividend);
   $divisor: abs($divisor);
-  $quotient: 0;
-  $remainder: $dividend;
   @if $dividend == 0 {
     @return 0;
   }
   @if $divisor == 0 {
     @error "Cannot divide by 0";
   }
-  @if $divisor == 1 {
-    @return $dividend;
-  }
-  @while $remainder >= $divisor {
-    $quotient: $quotient + 1;
-    $remainder: $remainder - $divisor;
+  $remainder: $dividend;
+  $result: 0;
+  $factor: 10;
+  @while ($remainder > 0 and $precision >= 0) {
+    $quotient: 0;
+    @while ($remainder >= $divisor) {
+      $remainder: $remainder - $divisor;
+      $quotient: $quotient + 1;
+    }
+    $result: $result * 10 + $quotient;
+    $factor: $factor * .1;
+    $remainder: $remainder * 10;
+    $precision: $precision - 1;
+    @if ($precision < 0 and $remainder >= $divisor * 5) {
+      $result: $result + 1;
+    }
   }
-  @if $remainder > 0 and $precision > 0 {
-    $remainder: divide($remainder * 10, $divisor, $precision - 1) * .1;
+  $result: $result * $factor * $sign;
+  $dividend-unit: unit($dividend);
+  $divisor-unit: unit($divisor);
+  $unit-map: (
+    "px": 1px,
+    "rem": 1rem,
+    "em": 1em,
+    "%": 1%
+  );
+  @if ($dividend-unit != $divisor-unit and map-has-key($unit-map, $dividend-unit)) {
+    $result: $result * map-get($unit-map, $dividend-unit);
   }
-  @return ($quotient + $remainder) * $sign;
+  @return $result;
 }
index cf5ab7fa2bc06b43efee8b05bcad4d9cb8191d77..f398cd42ae46471fdb2df467017ac954dc5ae81e 100644 (file)
@@ -29,7 +29,7 @@
 @mixin make-col($size: false, $columns: $grid-columns) {
   @if $size {
     flex: 0 0 auto;
-    width: percentage(divide($size, $columns));
+    width: divide(100%, divide($columns, $size));
 
   } @else {
     flex: 1 1 0;