quantity-queries 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.
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: 45871b8e3e5fb9423cd4442fc864fcce8862089f
4
+ data.tar.gz: f9f539ba2312ac0a423a0e66e8e38549aef3379a
5
+ SHA512:
6
+ metadata.gz: 8a7d72153c37f092a500831ea079db6ba52c736b3a0cf346e4a75e458f9cf9c7e4061766983a046c9753502f3c3e3d13fd2bb72bcbb4e17b15b67a2c220d8b0b
7
+ data.tar.gz: 517b3c53fde2508e30387f8482ad31f4964e5bbfe4ed7cd58d0d18a597cea91484cb5111b2fe0a86650dc3c71741c183f441a34b9d8b22964318cc140aa1e687
@@ -0,0 +1,5 @@
1
+ # Changelog
2
+
3
+ ## 0.1.0
4
+
5
+ * Initial release
@@ -0,0 +1,88 @@
1
+ # Quantity Queries mixins
2
+
3
+ Simple item quantity queries mixins for Sass.
4
+
5
+ [![Build Status](https://travis-ci.org/danielguillan/quantity-queries.svg?branch=master)](https://travis-ci.org/danielguillan/quantity-queries)
6
+
7
+ ## Install
8
+
9
+ There are 3 ways of installing the Quantity Queries mixins:
10
+
11
+ ### Download
12
+
13
+ Download [_quantity-queries.scss](/stylesheets/_quantity-queries.scss) and place it in your Sass directory.
14
+
15
+ ### Bower
16
+
17
+ Run the following command:
18
+
19
+ bower install --save-dev quantity-queries
20
+
21
+ ### Compass extension
22
+
23
+ 1. `gem install quantity-queries`
24
+ 2. Add `require 'quantity-queries'` to your `config.rb`
25
+
26
+ ## Usage
27
+
28
+ Import it into your main stylesheet:
29
+
30
+ @import 'quantity-queries';
31
+
32
+ ### at-least
33
+
34
+ Target the items inside elements that contain N items or more:
35
+
36
+ @include at-least($count) { ... }
37
+
38
+
39
+ ### at-most
40
+
41
+ Target the items inside elements that contain N items or less:
42
+
43
+ @include nope($count) { ... }
44
+
45
+
46
+ ### between
47
+
48
+ Target the items inside elements that contain between X and Y items:
49
+
50
+ @include between($at-least, $at-most) { ... }
51
+
52
+ ### Example
53
+
54
+ Sass input:
55
+
56
+ ```scss
57
+ ul > li {
58
+
59
+ // Color the `li` items red when there are 6 items or more
60
+ @include at-least(6) {
61
+ color: red;
62
+ }
63
+
64
+ // Color the `li` items blue when there are 4 items or less
65
+ @include at-most(4) {
66
+ color: blue;
67
+ }
68
+
69
+ // Add a green background to `li` items when there are between 5 and 8 items
70
+ @include between(5, 8) {
71
+ background-color: green;
72
+ }
73
+ }
74
+ ```
75
+
76
+ ### Custom selector
77
+
78
+ The quantity query mixins assume you want to use the current simple selector for
79
+ all your items by default. `li` in the previous example. If you need a diffrent
80
+ selector or want it to be selector agnostic (a.k.a. the universal selector: `*`)
81
+ you just need to pass it in the mixin:
82
+
83
+ ```scss
84
+
85
+ nav div {
86
+ @include at-leat(4, '*'); // selector agnostic
87
+ @include between(4, 8, 'span'); // use span instead of div
88
+ }
@@ -0,0 +1,8 @@
1
+ require 'compass'
2
+ extension_path = File.expand_path(File.join(File.dirname(__FILE__), ".."))
3
+ Compass::Frameworks.register('quantity-queries', :path => extension_path)
4
+
5
+ module QuantityQueries
6
+ VERSION = "0.1.0"
7
+ DATE = "2015-03-04"
8
+ end
@@ -0,0 +1,187 @@
1
+ // -----------------------------------------------------------------------------
2
+ // Quantity queries
3
+ // -----------------------------------------------------------------------------
4
+ // Table of contents:
5
+ // 1. Last Simple Selector
6
+ // 2. Build Quantity Selector
7
+ // 3. At least
8
+ // 4. At most
9
+ // 5. Between
10
+
11
+
12
+ // -----------------------------------------------------------------------------
13
+ // 1. Last Simple Selector
14
+ // -----------------------------------------------------------------------------
15
+
16
+ /// Find the last simple selector in a given selector
17
+ /// @access private
18
+ /// @param {list | string} $selector - A single selector
19
+ /// @return {string} - The last simple selector in $selector
20
+ /// @example scss
21
+ /// $result: _last-simple-selector(ul > li); // returns 'li'
22
+ /// @todo: check that $selector is a valid list with a single selector
23
+
24
+ @function _last-simple-selector($selector) {
25
+ $parsed: selector-parse($selector);
26
+
27
+ @if length($parsed) > 1 {
28
+ @error '`#{$selector}` contains #{length($parsed)} selectors and the `_last-simple-selector()`function accepts only 1.';
29
+ }
30
+ $last-simple-selector: nth(nth($parsed, 1), -1);
31
+
32
+ @return $last-simple-selector;
33
+ }
34
+
35
+
36
+ // -----------------------------------------------------------------------------
37
+ // 2. Build Quantity Selector
38
+ // -----------------------------------------------------------------------------
39
+
40
+ /// Builds the selector for the quantity query
41
+ /// @access private
42
+ /// @param {string} $selector-append - The selector to append
43
+ /// @param {string} $last-selector - The last selector to use (item)
44
+ /// @return {list} - The complete quantity query selector
45
+
46
+ @function _build-quantity-selector($selector-append, $last-selector) {
47
+ $quantity-selector: ();
48
+
49
+ @each $s in & {
50
+ $last-simple-selector: '~' + if($last-selector, $last-selector, _last-simple-selector($s));
51
+ $sel: selector-append($s, $selector-append);
52
+ $sel2: selector-nest($sel, $last-simple-selector);
53
+ $quantity-selector: append($quantity-selector, $sel, 'comma');
54
+ $quantity-selector: append($quantity-selector, $sel2 , 'comma');
55
+ }
56
+
57
+ @return $quantity-selector;
58
+ }
59
+
60
+
61
+ // -----------------------------------------------------------------------------
62
+ // 3. At least
63
+ // -----------------------------------------------------------------------------
64
+
65
+ /// Query when total items is at least N items
66
+ /// @param {number} $count - Quantity to match (equal or more)
67
+ /// @example scss - Make the items color red when there are 4 items or more
68
+ /// ul li {
69
+ /// @include at-least(4) { color: red; }
70
+ /// }
71
+ /// @example scss - Make the items color blue when there are 6 items or more and use '*' (element agnostic) as the item selector
72
+ /// ul li {
73
+ /// @include at-least(6, '*') { color: blue; }
74
+ /// }
75
+
76
+ @mixin at-least($count, $selector: null) {
77
+ $selector-append: ':nth-last-child(n+#{$count})';
78
+
79
+ @if type-of($count) != 'number' {
80
+ @error '`#{$count}` is not a valid number for at-least() mixin.';
81
+ }
82
+
83
+ @if $selector != null and (type-of($selector) != 'string' or length($selector) > 1) {
84
+ @error '`#{$selector}` is not a valid selector for at-least($count, $selector)';
85
+ }
86
+
87
+ $at-least-selector: _build-quantity-selector($selector-append, $selector);
88
+
89
+
90
+ @at-root #{$at-least-selector} {
91
+ @content;
92
+ }
93
+ }
94
+
95
+
96
+ // -----------------------------------------------------------------------------
97
+ // 4. At most
98
+ // -----------------------------------------------------------------------------
99
+
100
+ /// Query when total items is at most N items
101
+ /// @param {number} $count - Quantity to match (equal or less)
102
+ /// @example scss - Make the items color red when there are 4 items or less
103
+ /// ul li {
104
+ /// @include at-most(4) { color: red; }
105
+ /// }
106
+ /// @example scss - Make the items color blue when there are 6 items or less and use '*' (element agnostic) as the item selector
107
+ /// ul li {
108
+ /// @include at-most(6, '*') { color: blue; }
109
+ /// }
110
+
111
+ @mixin at-most($count, $selector: null) {
112
+ $selector-append: ':nth-last-child(-n+#{$count}):first-child';
113
+
114
+ @if type-of($count) != 'number' {
115
+ @error '`#{$count}` is not a valid number for at-least() mixin.';
116
+ }
117
+
118
+ @if $selector != null and (type-of($selector) != 'string' or length($selector) > 1) {
119
+ @error '`#{$selector}` is not a valid selector for at-least($count, $selector)';
120
+ }
121
+
122
+ $at-least-selector: _build-quantity-selector($selector-append, $selector);
123
+
124
+
125
+ @at-root #{$at-least-selector} {
126
+ @content;
127
+ }
128
+ }
129
+
130
+
131
+ // -----------------------------------------------------------------------------
132
+ // 5. Between
133
+ // -----------------------------------------------------------------------------
134
+
135
+ /// Query when total items is at least X items and at most Y items
136
+ /// @param {number} $at-least - Lower quantity of items to match
137
+ /// @param {number} $at-most - Higher quantity of items to match
138
+ /// @example scss - Make the items color red when there are at least 2 and at most 4 items
139
+ /// ul li {
140
+ /// @include between(4, 8) { color: red; }
141
+ /// }
142
+ /// @example scss - Make the items color blue when there are at least 6 items and at most 10 items and use '*' (element agnostic) as the item selector
143
+ /// ul li {
144
+ /// @include between(6, 10, '*') { color: blue; }
145
+ /// }
146
+
147
+
148
+ @mixin between($first, $last, $selector: null) {
149
+ $selector-append: ':nth-last-child(n+#{$first}):nth-last-child(-n+#{$last}):first-child';
150
+
151
+ @if $first > $last {
152
+ @error '#{$first} can´t be larger that #{$last} for in-between() mixin';
153
+ }
154
+
155
+ @if $selector != null and (type-of($selector) != 'string' or length($selector) > 1) {
156
+ @error '`#{$selector}` is not a valid selector for at-least($count, $selector)';
157
+ }
158
+
159
+ $at-least-selector: _build-quantity-selector($selector-append, $selector);
160
+
161
+
162
+ @at-root #{$at-least-selector} {
163
+ @content;
164
+ }
165
+ }
166
+
167
+
168
+ // -----------------------------------------------------------------------------
169
+ // Test
170
+ // -----------------------------------------------------------------------------
171
+
172
+ .nav > li,
173
+ .nav > div {
174
+
175
+ @include at-most(3) {
176
+ color: green;
177
+ }
178
+
179
+ @include at-least(6) {
180
+ color: red;
181
+ }
182
+
183
+
184
+ @include between(4, 6) {
185
+ background-color: rgba(blue, .1);
186
+ }
187
+ }
metadata ADDED
@@ -0,0 +1,76 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: quantity-queries
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.1.0
5
+ platform: ruby
6
+ authors:
7
+ - Daniel Guillan
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2015-03-04 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.4'
20
+ type: :runtime
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - "~>"
25
+ - !ruby/object:Gem::Version
26
+ version: '3.4'
27
+ - !ruby/object:Gem::Dependency
28
+ name: compass
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - "~>"
32
+ - !ruby/object:Gem::Version
33
+ version: 1.0.0
34
+ type: :runtime
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - "~>"
39
+ - !ruby/object:Gem::Version
40
+ version: 1.0.0
41
+ description: Simple item quantity queries mixins for Sass
42
+ email:
43
+ - daniel.guillan@gmail.com
44
+ executables: []
45
+ extensions: []
46
+ extra_rdoc_files: []
47
+ files:
48
+ - CHANGELOG.md
49
+ - README.md
50
+ - lib/quantity-queries.rb
51
+ - stylesheets/_quantity-queries.scss
52
+ homepage: https://github.com/danielguillan/quantity-queries
53
+ licenses:
54
+ - MIT
55
+ metadata: {}
56
+ post_install_message:
57
+ rdoc_options: []
58
+ require_paths:
59
+ - lib
60
+ required_ruby_version: !ruby/object:Gem::Requirement
61
+ requirements:
62
+ - - ">="
63
+ - !ruby/object:Gem::Version
64
+ version: '0'
65
+ required_rubygems_version: !ruby/object:Gem::Requirement
66
+ requirements:
67
+ - - ">="
68
+ - !ruby/object:Gem::Version
69
+ version: 1.3.6
70
+ requirements: []
71
+ rubyforge_project: quantity-queries
72
+ rubygems_version: 2.2.2
73
+ signing_key:
74
+ specification_version: 4
75
+ summary: Simple item quantity queries mixins for Sass
76
+ test_files: []