@function breakpoint-parse-query($query) { // Parse features out of an individual query $feature-holder: (); $query-holder: (); $length: length($query); @if $length == 2 { // If we've got a string/number, number/string, check to see if it's a valid string/number pair or two singles @if (type-of(nth($query, 1)) == 'string' and type-of(nth($query, 2)) == 'number') or (type-of(nth($query, 1)) == 'number' and type-of(nth($query, 2)) == 'string') { $number: ''; $value: ''; @if type-of(nth($query, 1)) == 'string' { $number: nth($query, 2); $value: nth($query, 1); } @else { $number: nth($query, 1); $value: nth($query, 2); } // If the string value can be a single value, check to see if the number passed in is a valid input for said single value. Fortunately, all current single-value options only accept unitless numbers, so this check is easy. @if breakpoint-single-string($value) { @if unitless($number) { $feature-holder: append($value, $number, space); $query-holder: append($query-holder, $feature-holder, comma); @return $query-holder; } } // If the string is a media type, split the query @if breakpoint-is-media($value) { $query-holder: append($query-holder, nth($query, 1)); $query-holder: append($query-holder, nth($query, 2)); @return $query-holder; } // If it's not a single feature, we're just going to assume it's a proper string/value pair, and roll with it. @else { $feature-holder: append($value, $number, space); $query-holder: append($query-holder, $feature-holder, comma); @return $query-holder; } } // If they're both numbers, we assume it's a double and roll with that @else if (type-of(nth($query, 1)) == 'number' and type-of(nth($query, 2)) == 'number') { $feature-holder: append(nth($query, 1), nth($query, 2), space); $query-holder: append($query-holder, $feature-holder, comma); @return $query-holder; } // If they're both strings and neither are singles, we roll with that. @else if (type-of(nth($query, 1)) == 'string' and type-of(nth($query, 2)) == 'string') { @if not breakpoint-single-string(nth($query, 1)) and not breakpoint-single-string(nth($query, 2)) { $feature-holder: append(nth($query, 1), nth($query, 2), space); $query-holder: append($query-holder, $feature-holder, comma); @return $query-holder; } } } @else if $length == 3 { // If we've got three items and none is a list, we check to see @if type-of(nth($query, 1)) != 'list' and type-of(nth($query, 2)) != 'list' and type-of(nth($query, 3)) != 'list' { // If none of the items are single string values and none of the values are media values, we're good. @if (not breakpoint-single-string(nth($query, 1)) and not breakpoint-single-string(nth($query, 2)) and not breakpoint-single-string(nth($query, 3))) and ((not breakpoint-is-media(nth($query, 1)) and not breakpoint-is-media(nth($query, 2)) and not breakpoint-is-media(nth($query, 3)))) { $feature-holder: append(nth($query, 1), nth($query, 2), space); $feature-holder: append($feature-holder, nth($query, 3), space); $query-holder: append($query-holder, $feature-holder, comma); @return $query-holder; } // let's check to see if the first item is a media type @else if breakpoint-is-media(nth($query, 1)) { $query-holder: append($query-holder, nth($query, 1)); $feature-holder: append(nth($query, 2), nth($query, 3), space); $query-holder: append($query-holder, $feature-holder); @return $query-holder; } } } // If it's a single item, or if it's not a special case double or triple, we can simply return the query. @return $query; }