SassyLists 0.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/lib/SassyLists.rb +30 -0
- data/readme.md +30 -0
- data/stylesheets/SassyLists/_chunk.scss +32 -0
- data/stylesheets/SassyLists/_count-values.scss +33 -0
- data/stylesheets/SassyLists/_debug.scss +34 -0
- data/stylesheets/SassyLists/_first.scss +13 -0
- data/stylesheets/SassyLists/_insert-nth.scss +52 -0
- data/stylesheets/SassyLists/_is-symmetrical.scss +23 -0
- data/stylesheets/SassyLists/_last-index.scss +24 -0
- data/stylesheets/SassyLists/_last.scss +13 -0
- data/stylesheets/SassyLists/_loop.scss +21 -0
- data/stylesheets/SassyLists/_prepend.scss +16 -0
- data/stylesheets/SassyLists/_purge.scss +21 -0
- data/stylesheets/SassyLists/_remove-duplicates.scss +30 -0
- data/stylesheets/SassyLists/_remove-nth.scss +23 -0
- data/stylesheets/SassyLists/_remove.scss +19 -0
- data/stylesheets/SassyLists/_replace-nth.scss +50 -0
- data/stylesheets/SassyLists/_replace.scss +32 -0
- data/stylesheets/SassyLists/_reverse.scss +30 -0
- data/stylesheets/SassyLists/_slice.scss +60 -0
- data/stylesheets/SassyLists/_sort.scss +42 -0
- data/stylesheets/SassyLists/_sum.scss +32 -0
- data/stylesheets/SassyLists/_to-string.scss +29 -0
- data/stylesheets/_SassyLists.scss +94 -0
- metadata +101 -0
data/lib/SassyLists.rb
ADDED
@@ -0,0 +1,30 @@
|
|
1
|
+
# All gems that are required for this extension to work should go here.
|
2
|
+
# These are the requires you would normally put in your config.rb file
|
3
|
+
# By default, you should always included Compass. Do not include your
|
4
|
+
# extension.
|
5
|
+
require 'compass'
|
6
|
+
|
7
|
+
# This tells Compass what your Compass extension is called, and where to find
|
8
|
+
# its files
|
9
|
+
# Replace 'ListFunctions' with the name of your extension. Spaces allowed.
|
10
|
+
extension_path = File.expand_path(File.join(File.dirname(__FILE__), ".."))
|
11
|
+
Compass::Frameworks.register('SassyLists', :path => extension_path)
|
12
|
+
|
13
|
+
# Version and date of version for your Compass extension.
|
14
|
+
# Replace MyExtension with the name of your extension
|
15
|
+
# Letters, numbers, and underscores only
|
16
|
+
# Version is a number. If a version contains alphas, it will be created as
|
17
|
+
# a prerelease version
|
18
|
+
# Date is in the form of YYYY-MM-DD
|
19
|
+
module SassyLists
|
20
|
+
VERSION = "0.1"
|
21
|
+
DATE = "2013-10-16"
|
22
|
+
end
|
23
|
+
|
24
|
+
# This is where any custom SassScript should be placed. The functions will be
|
25
|
+
# available on require of your extension without the need for users to import
|
26
|
+
# any partials. Uncomment below.
|
27
|
+
|
28
|
+
# module Sass::Script::Functions
|
29
|
+
#
|
30
|
+
# end
|
data/readme.md
ADDED
@@ -0,0 +1,30 @@
|
|
1
|
+
SassyLists - Advanced Sass list functions
|
2
|
+
=========================================
|
3
|
+
|
4
|
+
Here are a couple of advanced Sass (SCSS) list functions you may or may not need in your projects. Including:
|
5
|
+
|
6
|
+
* `chunk()`: chunk list into size large lists
|
7
|
+
* `count-values()`: count the number of occurrences of each value of list
|
8
|
+
* `debug()`: returns list as a string
|
9
|
+
* `first()`: return first item in list
|
10
|
+
* `insert-nth()`: insert value at index
|
11
|
+
* `is-symmetrical()`: check if list is symmetrical
|
12
|
+
* `last()`: return last item in list
|
13
|
+
* `last-index()`: return last index of value in list
|
14
|
+
* `loop()`: shift indexes in list
|
15
|
+
* `prepend()`: prepend value to list
|
16
|
+
* `purge()`: remove all `false` and `null` values from list
|
17
|
+
* `remove()`: remove value in list
|
18
|
+
* `remove-duplicates()`: remove duplicate values from list
|
19
|
+
* `remove-nth()`: remove value at index
|
20
|
+
* `replace()`: replace value in list
|
21
|
+
* `replace-nth()`: replace value at index
|
22
|
+
* `reverse()`: reverse list
|
23
|
+
* `slice()`: slice list
|
24
|
+
* `sort()`: sort list
|
25
|
+
* `sum()`: sum all unitless values in list
|
26
|
+
* `to-string()`: cast list as string (JS `.join()`)
|
27
|
+
|
28
|
+
Some functions depend on other functions. If you include functions individually, make sure to check for these dependencies in their respective docs.
|
29
|
+
|
30
|
+
If you ever need to use them in one of your pen at [CodePen](http://codepen.io), just link to http://codepen.io/HugoGiraudel/pen/loAgq as an extra CSS resource. You'll have instant access to all functions.
|
@@ -0,0 +1,32 @@
|
|
1
|
+
/**
|
2
|
+
* Chunk $list into $size large lists
|
3
|
+
* -------------------------------------------------------------------------------
|
4
|
+
* @example chunk( (a, b, c, d, e), 2 ) => a b, c d, e
|
5
|
+
* @example chunk( (a, b, c, d, e), 3 ) => a b c, d e
|
6
|
+
* @example chunk( a, 3 ) => a
|
7
|
+
* -------------------------------------------------------------------------------
|
8
|
+
* @param $list [List] : list
|
9
|
+
* @param $size [Number] : length of lists
|
10
|
+
* -------------------------------------------------------------------------------
|
11
|
+
* @return [List]
|
12
|
+
*/
|
13
|
+
@function chunk($list, $size) {
|
14
|
+
$n: ceil(length($list) / $size);
|
15
|
+
$temp-index: 0;
|
16
|
+
$result: ();
|
17
|
+
|
18
|
+
@for $i from 1 through $n {
|
19
|
+
$temp-list: ();
|
20
|
+
|
21
|
+
@for $j from 1 + $temp-index through $size + $temp-index {
|
22
|
+
@if $j <= length($list) {
|
23
|
+
$temp-list: append($temp-list, nth($list, $j));
|
24
|
+
}
|
25
|
+
}
|
26
|
+
|
27
|
+
$result: append($result, $temp-list);
|
28
|
+
$temp-index: $temp-index + $size;
|
29
|
+
}
|
30
|
+
|
31
|
+
@return $result;
|
32
|
+
}
|
@@ -0,0 +1,33 @@
|
|
1
|
+
/**
|
2
|
+
* Count the number of occurrences of each value of $list
|
3
|
+
* -------------------------------------------------------------------------------
|
4
|
+
* @dependence `replace-nth()`
|
5
|
+
* -------------------------------------------------------------------------------
|
6
|
+
* @example count-values( (a, b, c, d, e) ) => a 1, b 1, c 1, d 1, e 1
|
7
|
+
* @example count-values( (a, b, c, a, d, b, a, e) ) => a 3, b 2, c 1, d 1, e 1
|
8
|
+
* @example count-values( a ) => a 1
|
9
|
+
* -------------------------------------------------------------------------------
|
10
|
+
* @param $list [List] : list
|
11
|
+
* -------------------------------------------------------------------------------
|
12
|
+
* @return [List]
|
13
|
+
*/
|
14
|
+
@function count-values($list) {
|
15
|
+
$keys : ();
|
16
|
+
$counts : ();
|
17
|
+
|
18
|
+
@each $item in $list {
|
19
|
+
$index: index($keys, $item);
|
20
|
+
|
21
|
+
@if not $index {
|
22
|
+
$keys : append($keys, $item);
|
23
|
+
$counts : append($counts, 1);
|
24
|
+
}
|
25
|
+
|
26
|
+
@else {
|
27
|
+
$count : nth($counts, $index) + 1;
|
28
|
+
$counts : replace-nth($counts, $index, $count);
|
29
|
+
}
|
30
|
+
}
|
31
|
+
|
32
|
+
@return zip($keys, $counts);
|
33
|
+
}
|
@@ -0,0 +1,34 @@
|
|
1
|
+
/**
|
2
|
+
* Returns $list as a string
|
3
|
+
* -------------------------------------------------------------------------------
|
4
|
+
* @example debug( (a, b, c, d, e) ) => [ a, b, c, d, e ]
|
5
|
+
* @example debug( (a b (c d e) ) ) => [ a, b, [ c, d, e ] ]
|
6
|
+
* @example debug( a ) => [ a ]
|
7
|
+
* -------------------------------------------------------------------------------
|
8
|
+
* @param $list [List] : list
|
9
|
+
* -------------------------------------------------------------------------------
|
10
|
+
* @return [String]
|
11
|
+
*/
|
12
|
+
@function debug($list) {
|
13
|
+
$result: #{"[ "};
|
14
|
+
|
15
|
+
@each $item in $list {
|
16
|
+
|
17
|
+
@if length($item) > 1 {
|
18
|
+
$result: $result#{debug($item)};
|
19
|
+
}
|
20
|
+
|
21
|
+
@else {
|
22
|
+
$result: $result#{$item};
|
23
|
+
}
|
24
|
+
|
25
|
+
@if index($list, $item) != length($list) {
|
26
|
+
$result: $result#{", "};
|
27
|
+
}
|
28
|
+
|
29
|
+
}
|
30
|
+
|
31
|
+
$result: $result#{" ]"};
|
32
|
+
|
33
|
+
@return quote($result);
|
34
|
+
}
|
@@ -0,0 +1,13 @@
|
|
1
|
+
/**
|
2
|
+
* Returns first element of $list
|
3
|
+
* -------------------------------------------------------------------------------
|
4
|
+
* @example first( (a, b, c) ) => a
|
5
|
+
* @example first( a ) => a
|
6
|
+
* -------------------------------------------------------------------------------
|
7
|
+
* @param $list [List] : list
|
8
|
+
* -------------------------------------------------------------------------------
|
9
|
+
* @return [Literal]
|
10
|
+
*/
|
11
|
+
@function first($list) {
|
12
|
+
@return nth($list, 1);
|
13
|
+
}
|
@@ -0,0 +1,52 @@
|
|
1
|
+
/**
|
2
|
+
* Add $value at $index in $list
|
3
|
+
* -------------------------------------------------------------------------------
|
4
|
+
* @dependence `purge()`
|
5
|
+
* -------------------------------------------------------------------------------
|
6
|
+
* @example insert-nth( (a, b, c), 2, z ) => a, z, b, c
|
7
|
+
* @example insert-nth( (a, b, c), 0, z ) => error
|
8
|
+
* @example insert-nth( (a, b, c), -1, z ) => error
|
9
|
+
* @example insert-nth( (a, b, c), 10, z ) => error
|
10
|
+
* -------------------------------------------------------------------------------
|
11
|
+
* @param $list [List] : list
|
12
|
+
* @param $index [Number] : index to add
|
13
|
+
* @param $value [Literal] : value to add
|
14
|
+
* -------------------------------------------------------------------------------
|
15
|
+
* @raise [Error] if $index isn't an integer
|
16
|
+
* @raise [Error] if $index is strictly lesser than 1
|
17
|
+
* @raise [Error] if $index is strictly greater than length of $list
|
18
|
+
* -------------------------------------------------------------------------------
|
19
|
+
* @return [List] | false
|
20
|
+
*/
|
21
|
+
@function insert-nth($list, $index, $value) {
|
22
|
+
$result: false;
|
23
|
+
|
24
|
+
@if type-of($index) != number {
|
25
|
+
@warn "$index: #{quote($index)} is not a number for `insert-nth`.";
|
26
|
+
@return $result;
|
27
|
+
}
|
28
|
+
|
29
|
+
@else if $index < 1 {
|
30
|
+
@warn "List index 0 must be a non-zero integer for `insert-nth`";
|
31
|
+
@return $result;
|
32
|
+
}
|
33
|
+
|
34
|
+
@else if $index > length($list) {
|
35
|
+
@warn "List index is #{$index} but list is only #{length($list)} item long for `insert-nth'.";
|
36
|
+
@return $result;
|
37
|
+
}
|
38
|
+
|
39
|
+
@else {
|
40
|
+
$result: ();
|
41
|
+
|
42
|
+
@for $i from 1 through length($list) {
|
43
|
+
@if $i == $index {
|
44
|
+
$result: append($result, $value);
|
45
|
+
}
|
46
|
+
|
47
|
+
$result: append($result, nth($list, $i));
|
48
|
+
}
|
49
|
+
}
|
50
|
+
|
51
|
+
@return purge($result);
|
52
|
+
}
|
@@ -0,0 +1,23 @@
|
|
1
|
+
/**
|
2
|
+
* Test if $list is symmetrical (one-level deep)
|
3
|
+
* -------------------------------------------------------------------------------
|
4
|
+
* @dependence `reverse()`
|
5
|
+
* -------------------------------------------------------------------------------
|
6
|
+
* @example is-symmetrical( (a, b, c, d, e) ) => false
|
7
|
+
* @example is-symmetrical( (a, b, c, b, a) ) => true
|
8
|
+
* @example is-symmetrical( a ) => true
|
9
|
+
* @example is-symmetrical( a, b c d, a ) => true
|
10
|
+
* -------------------------------------------------------------------------------
|
11
|
+
* @param $list [List] : list
|
12
|
+
* -------------------------------------------------------------------------------
|
13
|
+
* @return [Boolean]
|
14
|
+
*/
|
15
|
+
@function is-symmetrical($list) {
|
16
|
+
$result: ();
|
17
|
+
|
18
|
+
@each $item in $list {
|
19
|
+
$result: append($result, $item, space);
|
20
|
+
}
|
21
|
+
|
22
|
+
@return $result == reverse($result);
|
23
|
+
}
|
@@ -0,0 +1,24 @@
|
|
1
|
+
/**
|
2
|
+
* Returns last index of $value in $list
|
3
|
+
* -------------------------------------------------------------------------------
|
4
|
+
* @example last-index( (a, b, c, a), a ) => 4
|
5
|
+
* @example last-index( (a, b, c), z ) => null
|
6
|
+
* -------------------------------------------------------------------------------
|
7
|
+
* @param $list [List] : list
|
8
|
+
* @param $value [Literal] : value to be searched for
|
9
|
+
* -------------------------------------------------------------------------------
|
10
|
+
* @return [Number] | null
|
11
|
+
*/
|
12
|
+
@function last-index($list, $value) {
|
13
|
+
|
14
|
+
@for $i from length($list) * -1 through -1 {
|
15
|
+
$i: abs($i);
|
16
|
+
|
17
|
+
@if nth($list, $i) == $value {
|
18
|
+
@return $i;
|
19
|
+
}
|
20
|
+
|
21
|
+
}
|
22
|
+
|
23
|
+
@return null;
|
24
|
+
}
|
@@ -0,0 +1,13 @@
|
|
1
|
+
/**
|
2
|
+
* Returns last element of $list
|
3
|
+
* -------------------------------------------------------------------------------
|
4
|
+
* @example last( (a, b, c) ) => c
|
5
|
+
* @example last( a ) => a
|
6
|
+
* -------------------------------------------------------------------------------
|
7
|
+
* @param $list [List] : list
|
8
|
+
* -------------------------------------------------------------------------------
|
9
|
+
* @return [Literal]
|
10
|
+
*/
|
11
|
+
@function last($list) {
|
12
|
+
@return nth($list, length($list));
|
13
|
+
}
|
@@ -0,0 +1,21 @@
|
|
1
|
+
/**
|
2
|
+
* Shift indexes from $list of $value
|
3
|
+
* -------------------------------------------------------------------------------
|
4
|
+
* @example loop( (a, b, c, d, e) ) => e, a, b, c, d
|
5
|
+
* @example loop( (a, b, c, d, e), 2 ) => d, e, a, b, c
|
6
|
+
* @example loop( (a, b, c, d, e), -2 ) => c, d, e, a, b
|
7
|
+
* -------------------------------------------------------------------------------
|
8
|
+
* @param $list [List] : list
|
9
|
+
* @param $value [Number] : number of position between old and new indexes
|
10
|
+
* -------------------------------------------------------------------------------
|
11
|
+
* @return [List]
|
12
|
+
*/
|
13
|
+
@function loop($list, $value: 1) {
|
14
|
+
$result: ();
|
15
|
+
|
16
|
+
@for $i from 0 to length($list) {
|
17
|
+
$result: append($result, nth($list, ($i - $value) % length($list) + 1));
|
18
|
+
}
|
19
|
+
|
20
|
+
@return $result;
|
21
|
+
}
|
@@ -0,0 +1,16 @@
|
|
1
|
+
/**
|
2
|
+
* Add $value as first index of $list
|
3
|
+
* -------------------------------------------------------------------------------
|
4
|
+
* @dependence `purge()`
|
5
|
+
* -------------------------------------------------------------------------------
|
6
|
+
* @example prepend( (a, b, c), z ) => z, a, b, c
|
7
|
+
* @example prepend( (a, b, c), y z ) => y z, a, b, c
|
8
|
+
* -------------------------------------------------------------------------------
|
9
|
+
* @param $list [List] : list
|
10
|
+
* @param $value [Literal] : value to prepend to the list
|
11
|
+
* -------------------------------------------------------------------------------
|
12
|
+
* @return [List]
|
13
|
+
*/
|
14
|
+
@function prepend($list, $value) {
|
15
|
+
@return purge(join($value, $list));
|
16
|
+
}
|
@@ -0,0 +1,21 @@
|
|
1
|
+
/**
|
2
|
+
* Remove all false and null values from $list
|
3
|
+
* -------------------------------------------------------------------------------
|
4
|
+
* @example purge( (a, null, b, false, c, null) ) => a, b, c
|
5
|
+
* @example purge( (a, b, c) ) => a, b, c
|
6
|
+
* -------------------------------------------------------------------------------
|
7
|
+
* @param $list [List] : list
|
8
|
+
* -------------------------------------------------------------------------------
|
9
|
+
* @return [List]
|
10
|
+
*/
|
11
|
+
@function purge($list) {
|
12
|
+
$result: ();
|
13
|
+
|
14
|
+
@each $item in $list {
|
15
|
+
@if $item != null and $item != false and $item != "" {
|
16
|
+
$result: append($result, $item);
|
17
|
+
}
|
18
|
+
}
|
19
|
+
|
20
|
+
@return $result;
|
21
|
+
}
|
@@ -0,0 +1,30 @@
|
|
1
|
+
/**
|
2
|
+
* Remove duplicate values from $list
|
3
|
+
* -------------------------------------------------------------------------------
|
4
|
+
* @example remove-duplicates( (a, b, a, c, b, d, c, e) ) => a, b, c, d, e
|
5
|
+
* @example remove-duplicates( (a, b, (c, c, c)) ) => a, b, c
|
6
|
+
* -------------------------------------------------------------------------------
|
7
|
+
* @param $list [List] : list
|
8
|
+
* @param $recursive [Boolean] : enable / disable recursivity
|
9
|
+
* -------------------------------------------------------------------------------
|
10
|
+
* @return [List]
|
11
|
+
*/
|
12
|
+
@function remove-duplicates($list, $recursive: false) {
|
13
|
+
$result: ();
|
14
|
+
|
15
|
+
@each $item in $list {
|
16
|
+
|
17
|
+
@if not index($result, $item) {
|
18
|
+
@if length($item) > 1 and $recursive {
|
19
|
+
$result: append($result, remove-duplicates($item, $recursive));
|
20
|
+
}
|
21
|
+
|
22
|
+
@else {
|
23
|
+
$result: append($result, $item);
|
24
|
+
}
|
25
|
+
}
|
26
|
+
|
27
|
+
}
|
28
|
+
|
29
|
+
@return $result;
|
30
|
+
}
|
@@ -0,0 +1,23 @@
|
|
1
|
+
/**
|
2
|
+
* Remove value from $list at index $index
|
3
|
+
* -------------------------------------------------------------------------------
|
4
|
+
* @dependence `replace-nth()`
|
5
|
+
* -------------------------------------------------------------------------------
|
6
|
+
* @example remove-nth( (a, b, c), 2 ) => a, c
|
7
|
+
* @example remove-nth( (a, b, c), 0 ) => error
|
8
|
+
* @example remove-nth( (a, b, c), -1 ) => a, b
|
9
|
+
* @example remove-nth( (a, b, c), 10 ) => error
|
10
|
+
* @example remove-nth( (a, b, c), -10 ) => error
|
11
|
+
* -------------------------------------------------------------------------------
|
12
|
+
* @param $list [List] : list
|
13
|
+
* @param $index [Number] : index to remove
|
14
|
+
* -------------------------------------------------------------------------------
|
15
|
+
* @raise [Error] if $index isn't an integer
|
16
|
+
* @raise [Error] if $index is 0
|
17
|
+
* @raise [Error] if abs value of $index is strictly greater then length of $list
|
18
|
+
* -------------------------------------------------------------------------------
|
19
|
+
* @return [List] | false
|
20
|
+
*/
|
21
|
+
@function remove-nth($list, $index) {
|
22
|
+
@return replace-nth($list, $index, "");
|
23
|
+
}
|
@@ -0,0 +1,19 @@
|
|
1
|
+
/**
|
2
|
+
* Remove value(s) $value from $list
|
3
|
+
* -------------------------------------------------------------------------------
|
4
|
+
* @dependence `replace()`
|
5
|
+
* -------------------------------------------------------------------------------
|
6
|
+
* @example remove( (a, b, c), b ) => a, c
|
7
|
+
* @example remove( (a, b, c), z ) => a, b, c
|
8
|
+
* @example remove( (a, b, c b), b ) => a, c b
|
9
|
+
* @example remove( (a, b, c b), b, true ) => a, c
|
10
|
+
* -------------------------------------------------------------------------------
|
11
|
+
* @param $list [List] : list
|
12
|
+
* @param $value [Literal] : value to remove
|
13
|
+
* @param $recursive [Boolean] : enable / disable recursivity
|
14
|
+
* -------------------------------------------------------------------------------
|
15
|
+
* @return [List]
|
16
|
+
*/
|
17
|
+
@function remove($list, $value, $recursive: false) {
|
18
|
+
@return replace($list, $value, "", $recursive);
|
19
|
+
}
|
@@ -0,0 +1,50 @@
|
|
1
|
+
/**
|
2
|
+
* Replace value at $index from $list by $value
|
3
|
+
* -------------------------------------------------------------------------------
|
4
|
+
* @dependence `purge()`
|
5
|
+
* -------------------------------------------------------------------------------
|
6
|
+
* @example replace-nth( (a, b, c), 2, z ) => a, z, c
|
7
|
+
* @example replace-nth( (a, b, c), 0, z ) => error
|
8
|
+
* @example replace-nth( (a, b, c), -1, z ) => a, b, z
|
9
|
+
* @example replace-nth( (a, b, c), 10, z ) => error
|
10
|
+
* @example replace-nth( (a, b, c), -10, z ) => error
|
11
|
+
* -------------------------------------------------------------------------------
|
12
|
+
* @param $list [List] : list
|
13
|
+
* @param $index [Number] : index to update
|
14
|
+
* @param $value [Literal] : new value for index $index
|
15
|
+
* -------------------------------------------------------------------------------
|
16
|
+
* @raise [Error] if $index isn't an integer
|
17
|
+
* @raise [Error] if $index is 0
|
18
|
+
* @raise [Error] if abs value of $index is strictly greater than length of $list
|
19
|
+
* -------------------------------------------------------------------------------
|
20
|
+
* @return [List] | false
|
21
|
+
*/
|
22
|
+
@function replace-nth($list, $index, $value) {
|
23
|
+
$result: false;
|
24
|
+
|
25
|
+
@if type-of($index) != number {
|
26
|
+
@warn "$index: #{quote($index)} is not a number for `replace-nth`/`remove-nth`.";
|
27
|
+
@return $result;
|
28
|
+
}
|
29
|
+
|
30
|
+
@else if $index == 0 {
|
31
|
+
@warn "List index 0 must be a non-zero integer for `replace-nth`/`remove-nth`.";
|
32
|
+
@return $result;
|
33
|
+
}
|
34
|
+
|
35
|
+
@else if abs($index) > length($list) {
|
36
|
+
@warn "List index is #{$index} but list is only #{length($list)} item long for `replace-nth`/`remove-nth`.";
|
37
|
+
@return $result;
|
38
|
+
}
|
39
|
+
|
40
|
+
@else {
|
41
|
+
$result: ();
|
42
|
+
$index: if($index < 0, length($list) + $index + 1, $index);
|
43
|
+
|
44
|
+
@for $i from 1 through length($list) {
|
45
|
+
$result: append($result, if($i == $index, $value, nth($list, $i)));
|
46
|
+
}
|
47
|
+
}
|
48
|
+
|
49
|
+
@return purge($result);
|
50
|
+
}
|
@@ -0,0 +1,32 @@
|
|
1
|
+
/**
|
2
|
+
* Replace $old-value by $new-value in $list
|
3
|
+
* -------------------------------------------------------------------------------
|
4
|
+
* @dependence `purge()`
|
5
|
+
* -------------------------------------------------------------------------------
|
6
|
+
* @example replace( (a, b, c), b, z ) => a, z, c
|
7
|
+
* @example replace( (a, b, c), y, z ) => a, b, c
|
8
|
+
* @example replace( (a, b, c a), a, z ) => z, b, c z
|
9
|
+
* @example replace( (a, b, c a), a, z, true ) => z, b, c z
|
10
|
+
* -------------------------------------------------------------------------------
|
11
|
+
* @param $list [List] : list
|
12
|
+
* @param $old-value [Literal] : value to replace
|
13
|
+
* @param $new-value [Literal] : new value for $old-value
|
14
|
+
* @param $recursive [Boolean] : enable / disable recursivity
|
15
|
+
* -------------------------------------------------------------------------------
|
16
|
+
* @return [List]
|
17
|
+
*/
|
18
|
+
@function replace($list, $old-value, $new-value, $recursive: false) {
|
19
|
+
$result: ();
|
20
|
+
|
21
|
+
@each $item in $list {
|
22
|
+
@if length($item) > 1 and $recursive {
|
23
|
+
$result: append($result, replace($item, $old-value, $new-value, $recursive));
|
24
|
+
}
|
25
|
+
|
26
|
+
@else {
|
27
|
+
$result: append($result, if($item == $old-value, $new-value, $item));
|
28
|
+
}
|
29
|
+
}
|
30
|
+
|
31
|
+
@return purge($result);
|
32
|
+
}
|
@@ -0,0 +1,30 @@
|
|
1
|
+
/**
|
2
|
+
* Reverses the order of $list
|
3
|
+
* -------------------------------------------------------------------------------
|
4
|
+
* @example reverse( (a, b, c) ) => c, b, a
|
5
|
+
* @example reverse( (a, b, c a) ) => c a, b, a
|
6
|
+
* @example reverse( (a, b, c a), true ) => a c, b, a
|
7
|
+
* @example reverse( a ) => a
|
8
|
+
* -------------------------------------------------------------------------------
|
9
|
+
* @param $list [List] : list
|
10
|
+
* @param $recursive [Boolean] : enable / disable recursivity
|
11
|
+
* -------------------------------------------------------------------------------
|
12
|
+
* @return [List]
|
13
|
+
*/
|
14
|
+
@function reverse($list, $recursive: false) {
|
15
|
+
$result: ();
|
16
|
+
|
17
|
+
@for $i from length($list) * -1 through -1 {
|
18
|
+
$item: nth($list, abs($i));
|
19
|
+
|
20
|
+
@if length($item) > 1 and $recursive {
|
21
|
+
$result: append($result, reverse($item, $recursive));
|
22
|
+
}
|
23
|
+
|
24
|
+
@else {
|
25
|
+
$result: append($result, $item);
|
26
|
+
}
|
27
|
+
}
|
28
|
+
|
29
|
+
@return $result;
|
30
|
+
}
|
@@ -0,0 +1,60 @@
|
|
1
|
+
/**
|
2
|
+
* Slices $list between $start and $end
|
3
|
+
* -------------------------------------------------------------------------------
|
4
|
+
* @example slice( (a, b, c, d), 2, 3 ) => b, c
|
5
|
+
* @example slice( (a, b, c, d), 3, 2 ) => error
|
6
|
+
* @example slice( (a, b, c, d), 3, 5 ) => error
|
7
|
+
* @example slice( (a, b, c, d), -1, 3 ) => error
|
8
|
+
* @example slice( (a, b, c, d), 0, 3 ) => error
|
9
|
+
* @example slice( (a, b, c, d), 3, 3 ) => c
|
10
|
+
* -------------------------------------------------------------------------------
|
11
|
+
* @param $list [List] : list
|
12
|
+
* @param $start [Number] : start index
|
13
|
+
* @param $end [Number] : end index
|
14
|
+
* -------------------------------------------------------------------------------
|
15
|
+
* @raise [Error] if $start or $end aren't integers
|
16
|
+
* @raise [Error] if $start is greater than $end
|
17
|
+
* @raise [Error] if $start or $end is strictly lesser than 1
|
18
|
+
* @raise [Error] if $start is strictly greater than length of $list
|
19
|
+
* @raise [Error] if $end is strictly greater than length of $list
|
20
|
+
* -------------------------------------------------------------------------------
|
21
|
+
* @return [List] | false
|
22
|
+
*/
|
23
|
+
@function slice($list, $start: 1, $end: length($list)) {
|
24
|
+
$result: false;
|
25
|
+
|
26
|
+
@if type-of($start) != number or type-of($end) != number {
|
27
|
+
@warn "Either $start or $end are not a number for `slice`.";
|
28
|
+
@return $result;
|
29
|
+
}
|
30
|
+
|
31
|
+
@else if $start > $end {
|
32
|
+
@warn "The start index has to be lesser than or equals to the end index for `slice`.";
|
33
|
+
@return $result;
|
34
|
+
}
|
35
|
+
|
36
|
+
@else if $start < 1 or $end < 1 {
|
37
|
+
@warn "List indexes must be non-zero integers for `slice`.";
|
38
|
+
@return $result;
|
39
|
+
}
|
40
|
+
|
41
|
+
@else if $start > length($list) {
|
42
|
+
@warn "List index is #{$start} but list is only #{length($list)} item long for `slice`.";
|
43
|
+
@return $result;
|
44
|
+
}
|
45
|
+
|
46
|
+
@else if $end > length($list) {
|
47
|
+
@warn "List index is #{$end} but list is only #{length($list)} item long for `slice`.";
|
48
|
+
@return $result;
|
49
|
+
}
|
50
|
+
|
51
|
+
@else {
|
52
|
+
$result: ();
|
53
|
+
|
54
|
+
@for $i from $start through $end {
|
55
|
+
$result: append($result, nth($list, $i));
|
56
|
+
}
|
57
|
+
}
|
58
|
+
|
59
|
+
@return $result;
|
60
|
+
}
|
@@ -0,0 +1,42 @@
|
|
1
|
+
/**
|
2
|
+
* Sort numeric values of $list
|
3
|
+
* -------------------------------------------------------------------------------
|
4
|
+
* @dependence `last()`
|
5
|
+
* @dependence `insert-nth()`
|
6
|
+
* -------------------------------------------------------------------------------
|
7
|
+
* @example sort( (5, 12, 4.7, 6, 69, 6) ) => 4.7, 5, 6, 6, 12, 69
|
8
|
+
* @example sort( (5, 12, 4.7, "8", 6, 14px, 69, 6) ) => 4.7, 5, 6, 6, 12, 69
|
9
|
+
* @example sort( 1 ) => 1
|
10
|
+
* -------------------------------------------------------------------------------
|
11
|
+
* @param $list [List] : list
|
12
|
+
* -------------------------------------------------------------------------------
|
13
|
+
* @return [List]
|
14
|
+
*/
|
15
|
+
@function sort($list) {
|
16
|
+
$result : nth($list, 1);
|
17
|
+
|
18
|
+
@if length($list) > 1 {
|
19
|
+
@for $i from 2 through length($list) {
|
20
|
+
$item: nth($list, $i);
|
21
|
+
@if type-of($item) == number and unitless($item) {
|
22
|
+
@if $item > last($result) {
|
23
|
+
$result: append($result, $item);
|
24
|
+
}
|
25
|
+
@else {
|
26
|
+
$index: 0;
|
27
|
+
@for $i from 1 through length($result) {
|
28
|
+
@if $item <= nth($result, $i) {
|
29
|
+
$index: $i;
|
30
|
+
}
|
31
|
+
}
|
32
|
+
$result: insert-nth($result, $index, $item);
|
33
|
+
}
|
34
|
+
}
|
35
|
+
@else {
|
36
|
+
@warn "Not unitless number found. Omitted.";
|
37
|
+
}
|
38
|
+
}
|
39
|
+
}
|
40
|
+
|
41
|
+
@return $result;
|
42
|
+
}
|
@@ -0,0 +1,32 @@
|
|
1
|
+
/**
|
2
|
+
* Sum up all unitless values in $list
|
3
|
+
* -------------------------------------------------------------------------------
|
4
|
+
* @example sum( (1 2 3 4 5) ) => 15
|
5
|
+
* @example sum( (1 a 2 b 3) ) => 6
|
6
|
+
* @example sum( (10px 3em 5%) ) => 0
|
7
|
+
* @example sum( (10px 3em 5%, true) ) => 18
|
8
|
+
* -------------------------------------------------------------------------------
|
9
|
+
* @param $list [List] : list
|
10
|
+
* @param $force [Boolean] : enable / disable parseInt
|
11
|
+
* -------------------------------------------------------------------------------
|
12
|
+
* @return [Number]
|
13
|
+
*/
|
14
|
+
@function sum($list, $force: false) {
|
15
|
+
$result: 0;
|
16
|
+
|
17
|
+
@each $item in $list {
|
18
|
+
@if type-of($item) == number {
|
19
|
+
|
20
|
+
@if $force and unit($item) {
|
21
|
+
$item: $item / ($item * 0 + 1);
|
22
|
+
}
|
23
|
+
|
24
|
+
@if unitless($item) {
|
25
|
+
$result: $result + $item;
|
26
|
+
}
|
27
|
+
|
28
|
+
}
|
29
|
+
}
|
30
|
+
|
31
|
+
@return $result;
|
32
|
+
}
|
@@ -0,0 +1,29 @@
|
|
1
|
+
/**
|
2
|
+
* Joins all elements of $list with $glue
|
3
|
+
* -------------------------------------------------------------------------------
|
4
|
+
* @example to-string( (a, b, c) ) => abc
|
5
|
+
* @example to-string( (a, b, c), '-' ) => a-b-c
|
6
|
+
* @example to-string( (a, b c, d) ) => abcd
|
7
|
+
* -------------------------------------------------------------------------------
|
8
|
+
* @param $list [List] : list
|
9
|
+
* @param $glue [String] : value to use as a join string
|
10
|
+
* @param $is-nested [Boolean] : strictly internal boolean for recursivity
|
11
|
+
* -------------------------------------------------------------------------------
|
12
|
+
* @return [String]
|
13
|
+
*/
|
14
|
+
@function to-string($list, $glue: '', $is-nested: false) {
|
15
|
+
$result: null;
|
16
|
+
|
17
|
+
@each $item in $list {
|
18
|
+
@if length($item) > 1 {
|
19
|
+
$result: $result#{to-string($item, $glue, true)};
|
20
|
+
}
|
21
|
+
|
22
|
+
@else {
|
23
|
+
$condition: index($list, item) != length($list) or $is-nested;
|
24
|
+
$result: if($condition, $result#{$item}#{$glue}, $result#{$item});
|
25
|
+
}
|
26
|
+
}
|
27
|
+
|
28
|
+
@return $result;
|
29
|
+
}
|
@@ -0,0 +1,94 @@
|
|
1
|
+
/* ------------------------------------------------------------------------------- *
|
2
|
+
* SassyLists - A couple of advanced Sass list functions
|
3
|
+
* ------------------------------------------------------------------------------- *
|
4
|
+
*
|
5
|
+
* chunk($list, $size)
|
6
|
+
* Chunk $list into $size large lists
|
7
|
+
*
|
8
|
+
* count-values($list)
|
9
|
+
* Count the number of occurrences of each value of $list
|
10
|
+
*
|
11
|
+
* debug($list)
|
12
|
+
* Returns $list as a string
|
13
|
+
*
|
14
|
+
* first($list)
|
15
|
+
* Return first element of $list
|
16
|
+
*
|
17
|
+
* insert-nth($list, $index, $value)
|
18
|
+
* Add $value at $index in $list
|
19
|
+
*
|
20
|
+
* is-symmetrical($list)
|
21
|
+
* Check if $list is symmetrical
|
22
|
+
*
|
23
|
+
* last($list)
|
24
|
+
* Return last element of $list
|
25
|
+
*
|
26
|
+
* last-index($list, $value)
|
27
|
+
* Return last index of $value in $list
|
28
|
+
*
|
29
|
+
* loop($list, $value: 1)
|
30
|
+
* Shift indexes from $list of $value
|
31
|
+
*
|
32
|
+
* prepend($list, $value)
|
33
|
+
* Add $value as first index of $list
|
34
|
+
*
|
35
|
+
* purge($list)
|
36
|
+
* Remove all false and null values from $list
|
37
|
+
*
|
38
|
+
* remove($list, $value, $recursive: false)
|
39
|
+
* Remove value(s) $value from $list
|
40
|
+
*
|
41
|
+
* remove-duplicates($list, $recursive: false)
|
42
|
+
* Remove duplicate values from $list
|
43
|
+
*
|
44
|
+
* remove-nth($list, $index)
|
45
|
+
* Remove value from $list at index $index
|
46
|
+
*
|
47
|
+
* replace($list, $old-value, $new-value, $recursive: false)
|
48
|
+
* Replace $old-value by $new-value in $list
|
49
|
+
*
|
50
|
+
* replace-nth($list, $index, $value)
|
51
|
+
* Replace value at $index from $list by $value
|
52
|
+
*
|
53
|
+
* reverse($list, $recursive: false)
|
54
|
+
* Reverse the order of $list
|
55
|
+
*
|
56
|
+
* slice($list, $start: 1, $end: length($list))
|
57
|
+
* Slice $list between $start and $end
|
58
|
+
*
|
59
|
+
* sort($list)
|
60
|
+
* Sort all numeric values in $list
|
61
|
+
*
|
62
|
+
* sum($list, $force: false)
|
63
|
+
* Sum up all unitless values in $list
|
64
|
+
*
|
65
|
+
* to-string($list, $glue: '', $is-nested: false)
|
66
|
+
* Join all elements of $list with $glue
|
67
|
+
*
|
68
|
+
* ------------------------------------------------------------------------------- *
|
69
|
+
* CodePen (SCSS): http://codepen.io/HugoGiraudel/pen/loAgq
|
70
|
+
* CodePen (Sass): http://codepen.io/HugoGiraudel/pen/BskrE
|
71
|
+
* Repository: https://github.com/Team-Sass/Sass-list-functions/
|
72
|
+
* ------------------------------------------------------------------------------- */
|
73
|
+
|
74
|
+
@import "SassyLists/chunk";
|
75
|
+
@import "SassyLists/count-values";
|
76
|
+
@import "SassyLists/debug";
|
77
|
+
@import "SassyLists/first";
|
78
|
+
@import "SassyLists/insert-nth";
|
79
|
+
@import "SassyLists/is-symmetrical";
|
80
|
+
@import "SassyLists/last";
|
81
|
+
@import "SassyLists/last-index";
|
82
|
+
@import "SassyLists/loop";
|
83
|
+
@import "SassyLists/prepend";
|
84
|
+
@import "SassyLists/purge";
|
85
|
+
@import "SassyLists/remove";
|
86
|
+
@import "SassyLists/remove-duplicates";
|
87
|
+
@import "SassyLists/remove-nth";
|
88
|
+
@import "SassyLists/replace";
|
89
|
+
@import "SassyLists/replace-nth";
|
90
|
+
@import "SassyLists/reverse";
|
91
|
+
@import "SassyLists/slice";
|
92
|
+
@import "SassyLists/sort";
|
93
|
+
@import "SassyLists/sum";
|
94
|
+
@import "SassyLists/to-string";
|
metadata
ADDED
@@ -0,0 +1,101 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: SassyLists
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: '0.1'
|
5
|
+
prerelease:
|
6
|
+
platform: ruby
|
7
|
+
authors:
|
8
|
+
- Hugo Giraudel
|
9
|
+
autorequire:
|
10
|
+
bindir: bin
|
11
|
+
cert_chain: []
|
12
|
+
date: 2013-10-16 00:00:00.000000000 Z
|
13
|
+
dependencies:
|
14
|
+
- !ruby/object:Gem::Dependency
|
15
|
+
name: sass
|
16
|
+
requirement: !ruby/object:Gem::Requirement
|
17
|
+
none: false
|
18
|
+
requirements:
|
19
|
+
- - ! '>='
|
20
|
+
- !ruby/object:Gem::Version
|
21
|
+
version: 3.2.0
|
22
|
+
type: :runtime
|
23
|
+
prerelease: false
|
24
|
+
version_requirements: !ruby/object:Gem::Requirement
|
25
|
+
none: false
|
26
|
+
requirements:
|
27
|
+
- - ! '>='
|
28
|
+
- !ruby/object:Gem::Version
|
29
|
+
version: 3.2.0
|
30
|
+
- !ruby/object:Gem::Dependency
|
31
|
+
name: compass
|
32
|
+
requirement: !ruby/object:Gem::Requirement
|
33
|
+
none: false
|
34
|
+
requirements:
|
35
|
+
- - ! '>='
|
36
|
+
- !ruby/object:Gem::Version
|
37
|
+
version: 0.12.1
|
38
|
+
type: :runtime
|
39
|
+
prerelease: false
|
40
|
+
version_requirements: !ruby/object:Gem::Requirement
|
41
|
+
none: false
|
42
|
+
requirements:
|
43
|
+
- - ! '>='
|
44
|
+
- !ruby/object:Gem::Version
|
45
|
+
version: 0.12.1
|
46
|
+
description: Advanced Sass list functions
|
47
|
+
email:
|
48
|
+
- hugo.giraudel@gmail.com
|
49
|
+
executables: []
|
50
|
+
extensions: []
|
51
|
+
extra_rdoc_files: []
|
52
|
+
files:
|
53
|
+
- readme.md
|
54
|
+
- lib/SassyLists.rb
|
55
|
+
- stylesheets/SassyLists/_chunk.scss
|
56
|
+
- stylesheets/SassyLists/_count-values.scss
|
57
|
+
- stylesheets/SassyLists/_debug.scss
|
58
|
+
- stylesheets/SassyLists/_first.scss
|
59
|
+
- stylesheets/SassyLists/_insert-nth.scss
|
60
|
+
- stylesheets/SassyLists/_is-symmetrical.scss
|
61
|
+
- stylesheets/SassyLists/_last-index.scss
|
62
|
+
- stylesheets/SassyLists/_last.scss
|
63
|
+
- stylesheets/SassyLists/_loop.scss
|
64
|
+
- stylesheets/SassyLists/_prepend.scss
|
65
|
+
- stylesheets/SassyLists/_purge.scss
|
66
|
+
- stylesheets/SassyLists/_remove-duplicates.scss
|
67
|
+
- stylesheets/SassyLists/_remove-nth.scss
|
68
|
+
- stylesheets/SassyLists/_remove.scss
|
69
|
+
- stylesheets/SassyLists/_replace-nth.scss
|
70
|
+
- stylesheets/SassyLists/_replace.scss
|
71
|
+
- stylesheets/SassyLists/_reverse.scss
|
72
|
+
- stylesheets/SassyLists/_slice.scss
|
73
|
+
- stylesheets/SassyLists/_sort.scss
|
74
|
+
- stylesheets/SassyLists/_sum.scss
|
75
|
+
- stylesheets/SassyLists/_to-string.scss
|
76
|
+
- stylesheets/_SassyLists.scss
|
77
|
+
homepage: https://github.com/Team-Sass/Sass-list-functions
|
78
|
+
licenses: []
|
79
|
+
post_install_message:
|
80
|
+
rdoc_options: []
|
81
|
+
require_paths:
|
82
|
+
- lib
|
83
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
84
|
+
none: false
|
85
|
+
requirements:
|
86
|
+
- - ! '>='
|
87
|
+
- !ruby/object:Gem::Version
|
88
|
+
version: '0'
|
89
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
90
|
+
none: false
|
91
|
+
requirements:
|
92
|
+
- - ! '>='
|
93
|
+
- !ruby/object:Gem::Version
|
94
|
+
version: 1.3.6
|
95
|
+
requirements: []
|
96
|
+
rubyforge_project: SassyLists
|
97
|
+
rubygems_version: 1.8.24
|
98
|
+
signing_key:
|
99
|
+
specification_version: 3
|
100
|
+
summary: A collection of powerful Sass (SCSS) functions to deal with your lists.
|
101
|
+
test_files: []
|