|
- // Sass Utilities
- // ==============
- // - Susy Error Output Override [variable]
- // - Susy Error [function]
-
-
-
- // Susy Error Output Override
- // --------------------------
- /// Turn off error output for testing
- /// @group x-utility
- /// @access private
- $_susy-error-output-override: false !default;
-
-
-
- // Susy Error
- // ----------
- /// Optionally return error messages without failing,
- /// as a way to test error cases
- ///
- /// @group x-utility
- /// @access private
- ///
- /// @param {string} $message -
- /// A useful error message, explaining the problem
- /// @param {string} $source -
- /// The original source of the error for debugging
- /// @param {bool} $override [$_susy-error-output-override] -
- /// Optionally return the error rather than failing
- /// @return {string} -
- /// Combined error with source and message
- /// @throws When `$override == true`
- @function _susy-error(
- $message,
- $source,
- $override: $_susy-error-output-override
- ) {
- @if $override {
- @return 'ERROR [#{$source}] #{$message}';
- }
-
- @error '[#{$source}] #{$message}';
- }
-
-
- // Su Is Comparable
- // ----------------
- /// Check that the units in a grid are comparable
- ///
- /// @group _validation
- /// @access private
- ///
- /// @param {numbers} $lengths… -
- /// Arglist of all the number values to compare
- /// (columns, gutters, span, etc)
- ///
- /// @return {'fluid' | 'static' | false} -
- /// The type of span (fluid or static) when units match,
- /// or `false` for mismatched units
- @function _su-is-comparable(
- $lengths...
- ) {
- $first: nth($lengths, 1);
-
- @if (length($lengths) == 1) {
- @return if(unitless($first), 'fluid', 'static');
- }
-
- @for $i from 2 through length($lengths) {
- $comp: nth($lengths, $i);
-
- $fail: not comparable($first, $comp);
- $fail: $fail or (unitless($first) and not unitless($comp));
- $fail: $fail or (unitless($comp) and not unitless($first));
-
- @if $fail {
- @return false;
- }
- }
-
- @return if(unitless($first), 'fluid', 'static');
- }
-
-
- // Su Map Add Units
- // ----------------
- /// The calc features use a map of units and values
- /// to compile the proper algorythm.
- /// This function adds a new value to any comparable existing unit/value,
- /// or adds a new unit/value pair to the map
- ///
- /// @group x-utility
- /// @access private
- ///
- /// @param {map} $map -
- /// A map of unit/value pairs, e.g. ('px': 120px)
- /// @param {length} $value -
- /// A new length to be added to the map
- /// @return {map} -
- /// The updated map, with new value added
- ///
- /// @example scss -
- /// $map: (0px: 120px);
- /// $map: _su-map-add-units($map, 1in); // add a comparable unit
- /// $map: _su-map-add-units($map, 3vw); // add a new unit
- ///
- /// @each $units, $value in $map {
- /// /* #{$units}: #{$value} */
- /// }
- @function _su-map-add-units(
- $map,
- $value
- ) {
- $unit: $value * 0;
- $has: map-get($map, $unit) or 0;
-
- @if ($has == 0) {
- @each $try, $could in $map {
- $match: comparable($try, $value);
- $unit: if($match, $try, $unit);
- $has: if($match, $could, $has);
- }
- }
-
- @return map-merge($map, ($unit: $has + $value));
- }
-
-
- // Susy Flatten
- // ------------
- /// Flatten a multidimensional list
- ///
- /// @group x-utility
- /// @access private
- ///
- /// @param {list} $list -
- /// The list to be flattened
- /// @return {list} -
- /// The flattened list
- ///
- /// @example scss -
- /// $list: 120px (30em 30em) 120px;
- /// /* #{_susy-flatten($list)} */
- @function _susy-flatten(
- $list
- ) {
- $flat: ();
-
- // Don't iterate over maps
- @if (type-of($list) == 'map') {
- @return $list;
- }
-
- // Iterate over lists (or single items)
- @each $item in $list {
- @if (type-of($item) == 'list') {
- $item: _susy-flatten($item);
- $flat: join($flat, $item);
- } @else {
- $flat: append($flat, $item);
- }
- }
-
- // Return flattened list
- @return $flat;
- }
|