[ Index ]

PHP Cross Reference of WordPress Trunk (Updated Daily)

Search

title

Body

[close]

/wp-content/themes/twentytwentyone/assets/sass/02-tools/ -> functions.scss (source)

   1  // Remove the unit of a length
   2  // @param {Number} $number - Number to remove unit from
   3  // @return {Number} - Unitless number
   4  @function strip-unit($number) {
   5      @if type-of($number) == "number" and not unitless($number) {
   6          @return $number / ($number * 0 + 1);
   7      }
   8  
   9      @return $number;
  10  }
  11  
  12  // ----
  13  // Sass (v3.3.14)
  14  // Compass (v1.0.0.rc.1)
  15  // ----
  16  
  17  @function pow($x, $y) {
  18      $ret: 1;
  19  
  20      @if $y > 0 {
  21          @for $i from 1 through $y {
  22              $ret: $ret * $x;
  23          }
  24      } @else {
  25          @for $i from $y to 0 {
  26              $ret: $ret / $x;
  27          }
  28      }
  29  
  30      @return $ret;
  31  }
  32  
  33  // Map deep get
  34  // @author Hugo Giraudel
  35  // @access public
  36  // @param {Map} $map - Map
  37  // @param {Arglist} $keys - Key chain
  38  // @return {*} - Desired value
  39  //
  40  // Example:
  41  // $m-breakpoint: map-deep-get($__prefix-default-config, "layouts", "M");
  42  @function map-deep-get($map, $keys...) {
  43      @each $key in $keys {
  44          $map: map-get($map, $key);
  45      }
  46      @return $map;
  47  }
  48  
  49  // Deep set function to set a value in nested maps
  50  // @author Hugo Giraudel
  51  // @access public
  52  // @param {Map} $map - Map
  53  // @param {List} $keys -  Key chaine
  54  // @param {*} $value - Value to assign
  55  // @return {Map}
  56  //
  57  // Example:
  58  // $__prefix-default-config: map-deep-set($__prefix-default-config, "layouts" "M", 650px);
  59  @function map-deep-set($map, $keys, $value) {
  60      $maps: ($map);
  61      $result: null;
  62  
  63      // If the last key is a map already
  64      // Warn the user we will be overriding it with $value
  65      @if type-of(nth($keys, -1)) == "map" {
  66          @warn "The last key you specified is a map; it will be overridden with `#{$value}`.";
  67      }
  68  
  69      // If $keys is a single key
  70      // Just merge and return
  71      @if length($keys) == 1 {
  72          @return map-merge($map, ($keys: $value));
  73      }
  74  
  75      // Loop from the first to the second to last key from $keys
  76      // Store the associated map to this key in the $maps list
  77      // If the key doesn't exist, throw an error
  78      @for $i from 1 through length($keys) - 1 {
  79          $current-key: nth($keys, $i);
  80          $current-map: nth($maps, -1);
  81          $current-get: map-get($current-map, $current-key);
  82          @if $current-get == null {
  83              @error "Key `#{$key}` doesn't exist at current level in map.";
  84          }
  85          $maps: append($maps, $current-get);
  86      }
  87  
  88      // Loop from the last map to the first one
  89      // Merge it with the previous one
  90      @for $i from length($maps) through 1 {
  91          $current-map: nth($maps, $i);
  92          $current-key: nth($keys, $i);
  93          $current-val: if($i == length($maps), $value, $result);
  94          $result: map-merge($current-map, ($current-key: $current-val));
  95      }
  96  
  97      // Return result
  98      @return $result;
  99  }
 100  
 101  // jQuery-style extend function
 102  // - Child themes can use this function to `reset` the values in
 103  //   config maps without editing the `master` Sass files.
 104  // - src: https://www.sitepoint.com/extra-map-functions-sass/
 105  // - About `map-merge()`:
 106  // - - only takes 2 arguments
 107  // - - is not recursive
 108  // @param {Map} $map - first map
 109  // @param {ArgList} $maps - other maps
 110  // @param {Bool} $deep - recursive mode
 111  // @return {Map}
 112  
 113  // Examples:
 114  
 115  // $grid-configuration-default: (
 116  //     'columns': 12,
 117  //     'layouts': (
 118  //         'small': 800px,
 119  //         'medium': 1000px,
 120  //         'large': 1200px,
 121  //     ),
 122  // );
 123  
 124  // $grid-configuration-custom: (
 125  //     'layouts': (
 126  //         'large': 1300px,
 127  //         'huge': 1500px
 128  //     ),
 129  // );
 130  
 131  // $grid-configuration-user: (
 132  //     'direction': 'ltr',
 133  //     'columns': 16,
 134  //     'layouts': (
 135  //         'large': 1300px,
 136  //         'huge': 1500px
 137  //     ),
 138  // );
 139  
 140  // $deep: false
 141  // $grid-configuration: map-extend($grid-configuration-default, $grid-configuration-custom, $grid-configuration-user);
 142  // --> ("columns": 16, "layouts": (("large": 1300px, "huge": 1500px)), "direction": "ltr")
 143  
 144  // $deep: true
 145  // $grid-configuration: map-extend($grid-configuration-default, $grid-configuration-custom, $grid-configuration-user, true);
 146  // --> ("columns": 16, "layouts": (("small": 800px, "medium": 1000px, "large": 1300px, "huge": 1500px)), "direction": "ltr")
 147  
 148  @function map-extend($map, $maps.../*, $deep */) {
 149      $last: nth($maps, -1);
 150      $deep: $last == true;
 151      $max: if($deep, length($maps) - 1, length($maps));
 152  
 153      // Loop through all maps in $maps...
 154      @for $i from 1 through $max {
 155          // Store current map
 156          $current: nth($maps, $i);
 157  
 158          // If not in deep mode, simply merge current map with map
 159          @if not $deep {
 160              $map: map-merge($map, $current);
 161          } @else {
 162              // If in deep mode, loop through all tuples in current map
 163              @each $key, $value in $current {
 164  
 165                  // If value is a nested map and same key from map is a nested map as well
 166                  @if type-of($value) == "map" and type-of(map-get($map, $key)) == "map" {
 167                      // Recursive extend
 168                      $value: map-extend(map-get($map, $key), $value, true);
 169                  }
 170  
 171                  // Merge current tuple with map
 172                  $map: map-merge($map, ($key: $value));
 173              }
 174          }
 175      }
 176  
 177      @return $map;
 178  }


Generated : Sat Apr 20 08:20:01 2024 Cross-referenced by PHPXref