compass-list-helpers 0.1.0
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.
- checksums.yaml +15 -0
- data/CHANGELOG.md +3 -0
- data/README.md +174 -0
- data/lib/list-helpers.rb +4 -0
- data/stylesheets/_list-helpers.scss +8 -0
- data/stylesheets/list-helpers/_every.scss +22 -0
- data/stylesheets/list-helpers/_filter.scss +22 -0
- data/stylesheets/list-helpers/_map.scss +21 -0
- data/stylesheets/list-helpers/_reduce.scss +21 -0
- data/stylesheets/list-helpers/_some.scss +21 -0
- metadata +82 -0
checksums.yaml
ADDED
@@ -0,0 +1,15 @@
|
|
1
|
+
---
|
2
|
+
!binary "U0hBMQ==":
|
3
|
+
metadata.gz: !binary |-
|
4
|
+
OTU0OGY4MTAzMWU2YWYyNDI0NzBkMjQ3ODA4NGJhYjM2OGM4NmU3ZA==
|
5
|
+
data.tar.gz: !binary |-
|
6
|
+
Y2RiNDJjMTNhNzA5OGIyZTRjZmNjNjFmOWNiODY0ZTdlY2I1NmViMg==
|
7
|
+
!binary "U0hBNTEy":
|
8
|
+
metadata.gz: !binary |-
|
9
|
+
OWYyYmQ3ZjJmM2YyODExYWZjNWQ5MjhmMWQ4YzA0ZGZjNDMyY2JlZTZiMDQ1
|
10
|
+
YjljNWY1YWJlODhjZjQ2OWFkNGU0MDcxMWJiNTg5MDgwNmRkYTdhZjFiMDE5
|
11
|
+
MDg3NzUyMDg4Y2M4Zjk5ZmFlYWZhMmU4YWMyNDgwOTJhZTA0ZGY=
|
12
|
+
data.tar.gz: !binary |-
|
13
|
+
YjA3YzI4NWFmZjJjNDUzMjlkMGFiYzRlNmNjZjM5NGRkOWZkNjFhNjRhM2Rm
|
14
|
+
OGZjYTAyZGNmZDAyMmYyNDllMzlkZmI0MGQyNmFmYzQ2ZmE1MzI3YzE0Mjdh
|
15
|
+
N2IxNDVkNzk3ZDk4NjViODg0NzZhYTZhODQyMzg4ODVjMGU4NTM=
|
data/CHANGELOG.md
ADDED
data/README.md
ADDED
@@ -0,0 +1,174 @@
|
|
1
|
+
# Compass List Helpers
|
2
|
+
|
3
|
+
List Helpers is a Compass extension providing useful list helper functions
|
4
|
+
like: map, filter, reduce, every and some.
|
5
|
+
|
6
|
+
The List Helpers are based on JavaScript's Array.prototype functions, but of
|
7
|
+
course, adapted to Sass. Instead of passing in a function object in JS, in Sass
|
8
|
+
you'd just pass in a function name, that will be called for each item in the
|
9
|
+
list.
|
10
|
+
|
11
|
+
## Installation
|
12
|
+
|
13
|
+
Install List Helpers by:
|
14
|
+
|
15
|
+
```bash
|
16
|
+
$ gem install compass-list-helpers
|
17
|
+
```
|
18
|
+
|
19
|
+
Tell Compass you want to use List Helpers in your project's `config.rb`:
|
20
|
+
|
21
|
+
```ruby
|
22
|
+
require "list-helpers"
|
23
|
+
```
|
24
|
+
|
25
|
+
And import List Helpers into your stylesheet:
|
26
|
+
|
27
|
+
```scss
|
28
|
+
@import "list-helpers";
|
29
|
+
```
|
30
|
+
|
31
|
+
Not using Compass? Just copy and paste the contents of the `stylesheets` dir
|
32
|
+
into your project.
|
33
|
+
|
34
|
+
## Example usage
|
35
|
+
|
36
|
+
As always, simple (silly) examples explain the rationale the best. It all
|
37
|
+
starts with a list:
|
38
|
+
|
39
|
+
```scss
|
40
|
+
$my-awesome-colors: red, green, blue, yellow, blue, brown;
|
41
|
+
$my-awesome-numbers: 1, 2, 3, 4, 10, 20, 30;
|
42
|
+
```
|
43
|
+
|
44
|
+
Then, we would define some functions to test each item against:
|
45
|
+
|
46
|
+
```scss
|
47
|
+
// `is-blue` returns true if $item is blue, else it returns false.
|
48
|
+
@function is-blue($item) {
|
49
|
+
@if $item == blue {
|
50
|
+
@return true;
|
51
|
+
}
|
52
|
+
@return false;
|
53
|
+
}
|
54
|
+
|
55
|
+
// `add-numbers` adds two numbers, rocket science!
|
56
|
+
@function add-numbers($a, $b) {
|
57
|
+
@return $a + $b;
|
58
|
+
}
|
59
|
+
|
60
|
+
// `double-up` doubles a number.
|
61
|
+
@function double-up($a) {
|
62
|
+
@return $a * 2;
|
63
|
+
}
|
64
|
+
|
65
|
+
// `is-big-enough` returns true if $item is >= 10, else it returns false.
|
66
|
+
@function is-big-enough($item) {
|
67
|
+
@if $item >= 10 {
|
68
|
+
@return true;
|
69
|
+
}
|
70
|
+
@return false;
|
71
|
+
}
|
72
|
+
```
|
73
|
+
|
74
|
+
Now, if your using Sass 3.2 or lower, you need to define a `call` function. In
|
75
|
+
Sass 3.3 a native `call` function is built-in, so there's no need for this poor
|
76
|
+
man's solution:
|
77
|
+
|
78
|
+
```scss
|
79
|
+
// Note: only do this in Sass 3.2 or lower, in Sass 3.3 and higher there's no need for this.
|
80
|
+
@function call($function, $arguments...) {
|
81
|
+
@if $function == 'is-blue' {
|
82
|
+
@return is-blue($arguments...);
|
83
|
+
}
|
84
|
+
@if $function == 'add-numbers' {
|
85
|
+
@return add-numbers($arguments...);
|
86
|
+
}
|
87
|
+
@if $function == 'double-up' {
|
88
|
+
@return double-up($arguments...);
|
89
|
+
}
|
90
|
+
@if $function == 'is-big-enough' {
|
91
|
+
@return is-big-enough($arguments...);
|
92
|
+
}
|
93
|
+
}
|
94
|
+
```
|
95
|
+
|
96
|
+
Here comes the meat: now we can use the list helpers:
|
97
|
+
|
98
|
+
```scss
|
99
|
+
$the-blues: filter($my-awesome-colors, 'is-blue'); // Returns (blue, blue)
|
100
|
+
$big-is-better: filter($my-awesome-numbers, 'is-big-enough'); // Returns (10, 20, 30)
|
101
|
+
$all-blue: every($my-awesome-colors, 'is-blue'); // Returns false (not all items are blue)
|
102
|
+
$some-blue: some($my-awesome-colors, 'is-blue'); // Returns true (at least one item is blue)
|
103
|
+
$doubled: map($my-awesome-numbers, 'double-up'); // Returns (2, 4, 6, 8, 20, 40, 60)
|
104
|
+
$grand-total: reduce($my-awesome-numbers, 'add-numbers'); // Returns 70
|
105
|
+
```
|
106
|
+
|
107
|
+
## List Helpers Functions
|
108
|
+
|
109
|
+
List Helpers provides some useful functions:
|
110
|
+
|
111
|
+
### `every($list, $callback)`
|
112
|
+
|
113
|
+
Tests whether all items in the list pass the test implemented by the provided
|
114
|
+
callback function.
|
115
|
+
|
116
|
+
Every executes the provided callback function once for each item present in
|
117
|
+
the list until it finds one where callback returns false. If such an item is
|
118
|
+
found, the every method immediately returns false. Otherwise, if callback
|
119
|
+
returned a true value for all items, every will return true.
|
120
|
+
|
121
|
+
See the `every` [test cases](test/scss/tests/_every.scss) for more examples.
|
122
|
+
|
123
|
+
### `filter($list, $callback)`
|
124
|
+
|
125
|
+
Creates a new list with all items that pass the test implemented by the
|
126
|
+
provided function.
|
127
|
+
|
128
|
+
Filter calls a provided callback function once for each item in a list, and
|
129
|
+
constructs a new list of all the values for which callback returns true.
|
130
|
+
|
131
|
+
See the `filter` [test cases](test/scss/tests/_filter.scss) for more examples.
|
132
|
+
|
133
|
+
### `map($list, $callback)`
|
134
|
+
|
135
|
+
Creates a new list with the results of calling a provided function on every
|
136
|
+
item in this list.
|
137
|
+
|
138
|
+
Map calls a provided callback function once for each item in a list, in order,
|
139
|
+
and constructs a new list from the results.
|
140
|
+
|
141
|
+
See the `map` [test cases](test/scss/tests/_map.scss) for more examples.
|
142
|
+
|
143
|
+
### `reduce($list, $callback, $initial: 0)`
|
144
|
+
|
145
|
+
Apply a function against an accumulator and each item of the list (from
|
146
|
+
left-to-right) as to reduce it to a single value.
|
147
|
+
|
148
|
+
Reduce executes the callback function once for each item present in the list,
|
149
|
+
passing it the result up until then and the current item in the list.
|
150
|
+
|
151
|
+
The `$initial` argument is the value to use as the first argument to the first
|
152
|
+
call of the callback. For example, if you're adding up the $my-awesome-numbers
|
153
|
+
list of numbers from above, you can $initial to 10 in order to start adding at
|
154
|
+
10 (so it will return 80).
|
155
|
+
In another example, if you're dealing with a list of lists you want to flatten,
|
156
|
+
passing in an empty list as `$initial` will make sure the callback is properly
|
157
|
+
called.
|
158
|
+
|
159
|
+
See the `reduce` [test cases](test/scss/tests/_reduce.scss) for more examples.
|
160
|
+
|
161
|
+
### `some($list, $callback)`
|
162
|
+
|
163
|
+
Tests whether some item in the list passes the test implemented by the provided
|
164
|
+
callback function.
|
165
|
+
|
166
|
+
Some executes the callback function once for each item present in the list
|
167
|
+
until it finds one where callback returns a true value. If such an item is
|
168
|
+
found, some immediately returns true. Otherwise, some returns false.
|
169
|
+
|
170
|
+
See the `some` [test cases](test/scss/tests/_some.scss) for more examples.
|
171
|
+
|
172
|
+
## License
|
173
|
+
|
174
|
+
MIT License, see [LICENSE.txt](LICENSE.txt).
|
data/lib/list-helpers.rb
ADDED
@@ -0,0 +1,22 @@
|
|
1
|
+
// Function every
|
2
|
+
// Tests whether all items in the list pass the test implemented by the
|
3
|
+
// provided callback function.
|
4
|
+
//
|
5
|
+
// Every executes the provided callback function once for each item present in
|
6
|
+
// the list until it finds one where callback returns false. If such an item is
|
7
|
+
// found, the every method immediately returns false. Otherwise, if callback
|
8
|
+
// returned a true value for all items, every will return true.
|
9
|
+
//
|
10
|
+
// @param $list {list} List of items
|
11
|
+
// @param $callback {string} Name of the function to test for each item
|
12
|
+
//
|
13
|
+
// @return {boolean} Whether all items in the list pass the test
|
14
|
+
//
|
15
|
+
@function every($list, $callback) {
|
16
|
+
@each $item in $list {
|
17
|
+
@if call($callback, $item) == false {
|
18
|
+
@return false;
|
19
|
+
}
|
20
|
+
}
|
21
|
+
@return true;
|
22
|
+
}
|
@@ -0,0 +1,22 @@
|
|
1
|
+
// Function filter
|
2
|
+
// Creates a new list with all items that pass the test implemented by the
|
3
|
+
// provided function.
|
4
|
+
//
|
5
|
+
// Filter calls a provided callback function once for each item in a list, and
|
6
|
+
// constructs a new list of all the values for which callback returns true.
|
7
|
+
//
|
8
|
+
// @param $list {list} List of items
|
9
|
+
// @param $callback {string} Name of the function to test for each item
|
10
|
+
//
|
11
|
+
// @return {list} The filtered list
|
12
|
+
//
|
13
|
+
@function filter($list, $callback) {
|
14
|
+
$new-list: ();
|
15
|
+
@each $item in $list {
|
16
|
+
$result: call($callback, $item);
|
17
|
+
@if $result == true {
|
18
|
+
$new-list: append($new-list, $item);
|
19
|
+
}
|
20
|
+
}
|
21
|
+
@return $new-list;
|
22
|
+
}
|
@@ -0,0 +1,21 @@
|
|
1
|
+
// Function map
|
2
|
+
// Creates a new list with the results of calling a provided function on every
|
3
|
+
// item in this list.
|
4
|
+
//
|
5
|
+
// Map calls a provided callback function once for each item in a list,
|
6
|
+
// in order, and constructs a new list from the results.
|
7
|
+
//
|
8
|
+
// @param $list {list} List of items
|
9
|
+
// @param $callback {string} Name of the function that produces an item of the
|
10
|
+
// new list from an item of the current one.
|
11
|
+
//
|
12
|
+
// @return {list} The new list
|
13
|
+
//
|
14
|
+
@function map($list, $callback) {
|
15
|
+
$new-list: ();
|
16
|
+
@each $item in $list {
|
17
|
+
$item: call($callback, $item);
|
18
|
+
$new-list: append($new-list, $item);
|
19
|
+
}
|
20
|
+
@return $new-list;
|
21
|
+
}
|
@@ -0,0 +1,21 @@
|
|
1
|
+
// Function reduce
|
2
|
+
// Apply a function against an accumulator and each item of the list
|
3
|
+
// (from left-to-right) as to reduce it to a single value.
|
4
|
+
//
|
5
|
+
// Reduce executes the callback function once for each item present in the
|
6
|
+
// list, passing it the result up until then and the current item in the list.
|
7
|
+
//
|
8
|
+
// @param $list {list} List of items
|
9
|
+
// @param $callback {string} Name of the function to test for each item
|
10
|
+
// @param $initial {literal} Value to use as the first argument to the first
|
11
|
+
// call of the callback
|
12
|
+
//
|
13
|
+
// @return {list} The filtered list
|
14
|
+
//
|
15
|
+
@function reduce($list, $callback, $initial: 0) {
|
16
|
+
$result: $initial;
|
17
|
+
@for $i from 1 through length($list) {
|
18
|
+
$result: call($callback, $result, nth($list, $i));
|
19
|
+
}
|
20
|
+
@return $result;
|
21
|
+
}
|
@@ -0,0 +1,21 @@
|
|
1
|
+
// Function some
|
2
|
+
// Tests whether some item in the list passes the test implemented by the
|
3
|
+
// provided callback function.
|
4
|
+
//
|
5
|
+
// Some executes the callback function once for each item present in the list
|
6
|
+
// until it finds one where callback returns a true value. If such an item is
|
7
|
+
// found, some immediately returns true. Otherwise, some returns false.
|
8
|
+
//
|
9
|
+
// @param $list {list} List of items
|
10
|
+
// @param $callback {string} Name of the function to test for each item
|
11
|
+
//
|
12
|
+
// @return {boolean} Whether some item in the list passes the test
|
13
|
+
//
|
14
|
+
@function some($list, $callback) {
|
15
|
+
@each $item in $list {
|
16
|
+
@if call($callback, $item) == true {
|
17
|
+
@return true;
|
18
|
+
}
|
19
|
+
}
|
20
|
+
@return false;
|
21
|
+
}
|
metadata
ADDED
@@ -0,0 +1,82 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: compass-list-helpers
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.1.0
|
5
|
+
platform: ruby
|
6
|
+
authors:
|
7
|
+
- Leon de Rijke
|
8
|
+
autorequire:
|
9
|
+
bindir: bin
|
10
|
+
cert_chain: []
|
11
|
+
date: 2013-07-25 00:00:00.000000000 Z
|
12
|
+
dependencies:
|
13
|
+
- !ruby/object:Gem::Dependency
|
14
|
+
name: sass
|
15
|
+
requirement: !ruby/object:Gem::Requirement
|
16
|
+
requirements:
|
17
|
+
- - ! '>='
|
18
|
+
- !ruby/object:Gem::Version
|
19
|
+
version: 3.2.0
|
20
|
+
type: :runtime
|
21
|
+
prerelease: false
|
22
|
+
version_requirements: !ruby/object:Gem::Requirement
|
23
|
+
requirements:
|
24
|
+
- - ! '>='
|
25
|
+
- !ruby/object:Gem::Version
|
26
|
+
version: 3.2.0
|
27
|
+
- !ruby/object:Gem::Dependency
|
28
|
+
name: compass
|
29
|
+
requirement: !ruby/object:Gem::Requirement
|
30
|
+
requirements:
|
31
|
+
- - ! '>='
|
32
|
+
- !ruby/object:Gem::Version
|
33
|
+
version: 0.12.1
|
34
|
+
type: :runtime
|
35
|
+
prerelease: false
|
36
|
+
version_requirements: !ruby/object:Gem::Requirement
|
37
|
+
requirements:
|
38
|
+
- - ! '>='
|
39
|
+
- !ruby/object:Gem::Version
|
40
|
+
version: 0.12.1
|
41
|
+
description: ! 'List Helpers is a Compass extension providing useful list helper functions
|
42
|
+
like: map, filter, reduce, every and some.'
|
43
|
+
email:
|
44
|
+
- leon@leonderijke.nl
|
45
|
+
executables: []
|
46
|
+
extensions: []
|
47
|
+
extra_rdoc_files: []
|
48
|
+
files:
|
49
|
+
- README.md
|
50
|
+
- CHANGELOG.md
|
51
|
+
- lib/list-helpers.rb
|
52
|
+
- stylesheets/_list-helpers.scss
|
53
|
+
- stylesheets/list-helpers/_every.scss
|
54
|
+
- stylesheets/list-helpers/_filter.scss
|
55
|
+
- stylesheets/list-helpers/_map.scss
|
56
|
+
- stylesheets/list-helpers/_reduce.scss
|
57
|
+
- stylesheets/list-helpers/_some.scss
|
58
|
+
homepage: https://github.com/leonderijke/compass-list-helpers
|
59
|
+
licenses:
|
60
|
+
- MIT
|
61
|
+
metadata: {}
|
62
|
+
post_install_message:
|
63
|
+
rdoc_options: []
|
64
|
+
require_paths:
|
65
|
+
- lib
|
66
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
67
|
+
requirements:
|
68
|
+
- - ! '>='
|
69
|
+
- !ruby/object:Gem::Version
|
70
|
+
version: '0'
|
71
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
72
|
+
requirements:
|
73
|
+
- - ! '>='
|
74
|
+
- !ruby/object:Gem::Version
|
75
|
+
version: '0'
|
76
|
+
requirements: []
|
77
|
+
rubyforge_project:
|
78
|
+
rubygems_version: 2.0.5
|
79
|
+
signing_key:
|
80
|
+
specification_version: 4
|
81
|
+
summary: Useful list helper functions for Sass, packaged as a Compass extension.
|
82
|
+
test_files: []
|