|
| 1 | +// Sass. |
| 2 | +@use 'sass:list'; |
| 3 | +@use 'sass:meta'; |
| 4 | + |
| 5 | +// Completed |
| 6 | +// The modified `list.append()` function returns a copy of `$list` with `$val` and/or with added multiple `$values`. |
| 7 | +// The function is modified by adding arbitrary values to the end of the parameters to preserve the original functionality. |
| 8 | +// @param `$list` The list to append the `$val` and/or `$values` into. |
| 9 | +// @param `$val` The value to append to the end of `$list`. |
| 10 | +// @param `$separator` The separator `comma`, `space` or `slash` of the list. Default `auto`. |
| 11 | +// @arbitrary `$values...` Additional values to append into `$list`. |
| 12 | +// @returns Returns a copy of `$list` with `$val` and/or `$values` added to the end. |
| 13 | +@function append($list, $val, $separator: auto, $values...) { |
| 14 | + @if not list.index(arglist list, meta.type-of($list)) { |
| 15 | + @error "$list: #{$list} is not arglist or list"; |
| 16 | + } |
| 17 | + @return list.join( |
| 18 | + $list, |
| 19 | + list.join(($val,), $values, list.separator($list)), |
| 20 | + $separator |
| 21 | + ); |
| 22 | +} |
| 23 | + |
| 24 | +// Examples. |
| 25 | +// $-list1: (30px, 10px); |
| 26 | +// $-list2: (50px, 40px); |
| 27 | + |
| 28 | +// @debug append(10px 20px, 30px); // 10px 20px 30px |
| 29 | +// @debug append((red, green), blue, space); // red green blue |
| 30 | + |
| 31 | +// @debug list.join(((10px 20px),), ((30px, 10px), (50px, 40px)), $separator: comma); |
| 32 | +// @debug append(((10px 20px),), (30px, 10px), comma, (50px, 40px)); |
| 33 | + |
| 34 | +// @debug list.join(((10px 20px),), ($-list1, $-list2), $separator: comma); |
| 35 | +// @debug append(((10px 20px),), $-list1, comma, $-list2); |
| 36 | + |
| 37 | +// @debug list.join(((10px 20px),), ((30px, 10px),), comma); |
| 38 | +// @debug list.append(((10px 20px),), (30px, 10px), comma); |
| 39 | + |
| 40 | +// additional values |
| 41 | +// @debug append((blue, red), green, auto, blue, red); // blue, red, green, blue, red |
| 42 | +// @debug append(10px 20px, 30px 40px, auto, 1px, 15px); // 10px 20px (30px 40px) 1px 15px |
| 43 | +// @debug append(10px, 20px, auto, 1em, 2rem); // 10px 20px 1em 2rem |
| 44 | +// @debug append(10px 20px, 30px 40px, auto, 1px, 15px, (1px 2px 3px)); // 10px 20px (30px 40px) 1px 15px (1px 2px 3px) |
| 45 | +// @debug append((10px, 20px), 30px 40px, auto, 1px, 15px, (1px 2px 3px), (4px, 5px)); // 10px, 20px, 30px 40px, 1px, 15px, 1px 2px 3px, (4px, 5px) |
| 46 | + |
| 47 | +// append map |
| 48 | +// @debug append(1 2 3, (a: 1, b: 2, c: 3), auto, (d: 4, e: 5)); // 1 2 3 (a: 1, b: 2, c: 3) (d: 4, e: 5) |
| 49 | +// @debug append((a: 1, b: 2), (c: 3, d: 4), auto, (e: 5, f: 6)); // a 1, b 2, (c: 3, d: 4), (e: 5, f: 6) |
| 50 | +// @debug append(1 2 3, (a: 1, b: 2, c: 3), auto, (d: 4, e: 5), (4, 5, 6), (7, 8, 9)); // 1 2 3 (a: 1, b: 2, c: 3) (d: 4, e: 5) (4, 5, 6) (7, 8, 9) |
| 51 | +// @debug append(1 2 3, (a: 1, b: 2, c: 3), auto, (d: 4, e: 5), 4, 5, 6, 7, 8, 9); // 1 2 3 (a: 1, b: 2, c: 3) (d: 4, e: 5) 4 5 6 7 8 9 |
0 commit comments