codelation_assets 0.2.2 → 0.3.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: ae441221f4a9a0c8cda9dbd4abd7c649d9b29aa4
4
- data.tar.gz: be29d55c96cae3c8796c76ec4896666f6954d8aa
3
+ metadata.gz: 93b9982fe8dba044d6f5c8d98fdba106bae98808
4
+ data.tar.gz: e7897b29408785550feaa738b9b35f0e12055f2e
5
5
  SHA512:
6
- metadata.gz: af1a16a7e9d768bfc7fe7ae29f15950bc0a128363207673ff307e2958ccd0084aaa083575b9aadd8f217e78c09e27573ab8e6ab4f884aa24cc211a1b134f85f6
7
- data.tar.gz: 722b01406e3afbacd8025a1537e7ed37ddb690f70c981a2895c95cb4b6611b656a609fee178d09d1345d1bc578cc5faa0fea10f7392c642cbf347cfbcc84d370
6
+ metadata.gz: 6456d7aa5eee3f8cb9334cb5e7d186d9e293dc9c65aaf1cb46be47d7f00fc527257ba6da613e1315cc3011d99bf9d8c2dd004f885ece3529343cdebd90b489be
7
+ data.tar.gz: 3948158982df39b3f5c9a46807e052e42976e31fd5e63048b651885da3184c0544cd4970dd77ad9269f8b7c7bc38d5e6aa6dfd92c4a5fbf6d1d9b4392d61df66
data/README.md CHANGED
@@ -17,9 +17,7 @@ Install the Codelation Assets gem with Bundler:
17
17
  bundle install
18
18
  ```
19
19
 
20
- ## Usage
21
-
22
- ### JavaScript
20
+ ## JavaScript
23
21
 
24
22
  Add to `application.js`:
25
23
 
@@ -27,12 +25,12 @@ Add to `application.js`:
27
25
  //= require codelation
28
26
  ```
29
27
 
30
- #### App Functions
28
+ ### App Functions
31
29
 
32
30
  The `App` object is used in Codelation's Rails projects to register components that
33
31
  need to be initialized on every page and to sprinkle in JavaScript on specific pages.
34
32
 
35
- ##### Registering JavaScript Components
33
+ #### Registering JavaScript Components
36
34
 
37
35
  By using `App.register('component')`, you can fire some JavaScript on every page load.
38
36
 
@@ -69,11 +67,14 @@ Example:
69
67
  })();
70
68
  ```
71
69
 
72
- ##### Registering Per Page JavaScript Snippets
70
+ #### Registering Per Page JavaScript Snippets
73
71
 
74
72
  You can use `App.register('[controller-name].[action-name]')` to fire some JavaScript any time
75
73
  that page is loaded and unloaded. The `enter` and `exit` functions work the same as components.
76
74
 
75
+ This assumes you are using a helper to set the body class to include the dasherized controller
76
+ name and dasherized action.
77
+
77
78
  Example:
78
79
 
79
80
  ```javascript
@@ -96,7 +97,7 @@ Example:
96
97
  You can also use `App.register('[controller-name]')` to fire JavaScript on all pages
97
98
  for the given controller name.
98
99
 
99
- ### Sass
100
+ ## Sass
100
101
 
101
102
  Add to `application.scss`:
102
103
 
@@ -104,18 +105,18 @@ Add to `application.scss`:
104
105
  @include "codelation";
105
106
  ```
106
107
 
107
- #### Included Sass/CSS Libraries
108
+ ### Included Sass/CSS Libraries
108
109
 
109
110
  - [Bourbon](http://bourbon.io) - A simple and lightweight mixin library for Sass.
110
111
  - [Normalize.css](https://necolas.github.io/normalize.css/) - A modern, HTML5-ready alternative to CSS resets
111
112
 
112
- #### Additional Functions and Mixins
113
+ ### Additional Functions and Mixins
113
114
 
114
115
  A handful of useful Sass functions and mixins written by Codelation are also included.
115
116
 
116
- ##### Sass Functions
117
+ #### Sass Functions
117
118
 
118
- ###### color($color, $number: 500)
119
+ ##### color($color, $number: 500)
119
120
 
120
121
  The [Google Material Design Colors](https://www.google.com/design/spec/style/color.html) come in handy when you
121
122
  need a color for creating application interfaces. They are a much better alternative to CSS's named colors
@@ -131,34 +132,34 @@ Examples:
131
132
 
132
133
  // You can also use the different shades available
133
134
  .error {
134
- color: ($red, 700);
135
+ color: color($red, 700);
135
136
  }
136
137
 
137
138
  // @see https://www.google.com/design/spec/style/color.html
138
139
  .success {
139
- color: ($green, 600);
140
+ color: color($green, 600);
140
141
  }
141
142
  ```
142
143
 
143
- ###### text-color($color)
144
+ ##### text-color($color)
144
145
 
145
146
  This function is useful for creating mixins where you have a background color as a variable
146
147
  and need to display either black or white text on top of the given color.
147
148
 
148
- ##### Sass Mixins
149
+ #### Sass Mixins
149
150
 
150
- ###### button($background-color: color($grey, 100), $font-color: $grey, $active-background-color: $accent-color, $active-font-color: text-color($accent-color))
151
+ ##### button($background-color: color($grey, 100), $color: color($grey, 800), $active-background-color: $accent-color, $active-color: text-color($accent-color))
151
152
 
152
- By default, this will create a plain grey button. It is close to the default button in some browsers, but will
153
- actually be rendered the same across all browsers. Useful for applications that need to be obvious about
154
- a button looking like a button.
153
+ By default, `@include button;` will create a plain grey button. It looks a lot like the default button in some
154
+ browsers, but it will be rendered to look the same across all browsers. Useful for applications that need to
155
+ be obvious about a button looking like a button.
155
156
 
156
- ###### center-children
157
+ ##### center-children
157
158
 
158
159
  This mixin uses flexbox to center the child elements horizontally and vertically inside the element.
159
160
  A good use case is centering an image of unknown height inside a container with a fixed height.
160
161
 
161
- ###### has-cards($columns, $margin: 0)
162
+ ##### has-cards($columns, $margin: 0)
162
163
 
163
164
  This mixin uses flexbox to create a cards layout like that used by Google Material Design. The
164
165
  mixin is used on the container element. This will create a fixed margin between each card element
@@ -166,6 +167,8 @@ and adds padding around the outside of the cards. Useful for creating a dashboar
166
167
 
167
168
  Example:
168
169
 
170
+ **HTML**
171
+
169
172
  ```html
170
173
  <div class="dashboard">
171
174
  <div class="card"><div>
@@ -175,6 +178,8 @@ Example:
175
178
  </div>
176
179
  ```
177
180
 
181
+ **SCSS**
182
+
178
183
  ```scss
179
184
  // This will create a cards layout with two cards per row.
180
185
  // There will be a fixed margin of 1em between and around the cards.
@@ -191,23 +196,27 @@ Example:
191
196
  }
192
197
  ```
193
198
 
194
- ###### has-columns($columns, $gutter: 0)
199
+ ##### has-columns($columns, $gutter: 0)
195
200
 
196
- This mixin uses flexbox to create a layout with the specified number of columns
197
- that stretch to fill the container's height. The given gutter size will the margin
198
- between the columns. There is no need to set a margin-right of 0 to the nth-child
199
- or anything like that. Flexbox rules!
201
+ This mixin uses flexbox to create a layout with the specified number of columns that
202
+ stretch to fill the container's height. The given gutter size will the margin between
203
+ the columns. The container should be a single row with a known number of child
204
+ elements. Use `has-grid` if there is an unknown number of child elements.
200
205
 
201
206
  Example:
202
207
 
208
+ **HTML**
209
+
203
210
  ```html
204
211
  <div class="row">
205
- <div class="column"><div>
206
- <div class="column"><div>
207
- <div class="column"><div>
212
+ <div>Column 1<div>
213
+ <div>Column 2<div>
214
+ <div>Column 3<div>
208
215
  </div>
209
216
  ```
210
217
 
218
+ **SCSS**
219
+
211
220
  ```scss
212
221
  // This will create a layout with three columns.
213
222
  // The columns will all fill the container height.
@@ -217,6 +226,78 @@ Example:
217
226
  }
218
227
  ```
219
228
 
229
+ ###### col-span($columns of $container-columns, $gutter: 0)
230
+
231
+ When the `has-columns` mixin is used properly, you can create columns in a row that
232
+ span the width of multiple columns in another row. In order to use the `col-span`
233
+ mixin, you must use a percentage value or zero for your gutter width. There is no way
234
+ to have a fixed gutter width, flexible column widths, and match up with the columns
235
+ in another row.
236
+
237
+ Example:
238
+
239
+ **HTML**
240
+
241
+ ```html
242
+ <div class="row">
243
+ <div>Column 1<div>
244
+ <div>Column 2<div>
245
+ <div>Column 3<div>
246
+ </div>
247
+ <div class="row">
248
+ <div class="wide-column">Column 4<div>
249
+ <div>Column 5<div>
250
+ </div>
251
+ ```
252
+
253
+ **SCSS**
254
+
255
+ ```scss
256
+ .row {
257
+ @include has-columns(3, 3%);
258
+ }
259
+
260
+ // Column 4 will span across two columns. Its left side will match up with
261
+ // column 1's left side, and its right side will match up with column 2's right
262
+ // side. Column 5's right margin will be set to 0 without any extra SCSS.
263
+ .wide-column {
264
+ @include col-span(2 of 3, 3%)
265
+ }
266
+ ```
267
+
268
+ ##### has-grid($columns, $gutter: 0)
269
+
270
+ This mixin uses flexbox to create a grid layout with an unknown number of child elements.
271
+ Each child element will have the same width and they will stretch to be the same height.
272
+ The gutter size is the width between each column and the height between each row. Unlike
273
+ the `has-cards` mixin, there will not be a margin around the child elements, only between.
274
+ This mixin is perfect for a product category page.
275
+
276
+ Example:
277
+
278
+ **HTML**
279
+
280
+ ```html
281
+ <div class="products">
282
+ <div>Product 1<div>
283
+ <div>Product 2<div>
284
+ <div>Product 3<div>
285
+ <div>Product 4<div>
286
+ <div>Product 5<div>
287
+ </div>
288
+ ```
289
+
290
+ **SCSS**
291
+
292
+ ```scss
293
+ // Products 1 - 3 will be on the first row and there will be a margin of 1em between them.
294
+ // Products 4 & 5 will be on the second row and will match up with products 1 & 2.
295
+ // There will be a margin of 1em between the rows.
296
+ .products {
297
+ @include has-grid(3, 1em);
298
+ }
299
+ ```
300
+
220
301
  ## Contributing
221
302
 
222
303
  1. Fork it
@@ -1,7 +1,7 @@
1
1
  (function() {
2
2
  "use strict";
3
3
 
4
- // Used with the `has-cards` and `has-columns` Sass mixins,
4
+ // Used with the `has-grid` and `has-cards` Sass mixins,
5
5
  // it appends an extra span element for each missing column
6
6
  // based on the number of columns defined in the CSS.
7
7
  App.register('component').enter(function() {
@@ -0,0 +1,14 @@
1
+ @mixin col-span($span: $columns of $total-columns, $gutter: 0) {
2
+ $columns: nth($span, 1);
3
+ $container-columns: nth($span, 3);
4
+
5
+ @if ($gutter != 0 and unit($gutter) != "%") {
6
+ @error "The col-span mixin can only be used if there is no gutter or the gutter's unit is %";
7
+ }
8
+
9
+ $single-column-width: (100% - ($gutter * ($container-columns - 1))) / $container-columns;
10
+ $spanned-width: $single-column-width * $columns;
11
+ $spanned-gutters-width: $gutter * ($columns - 1);
12
+
13
+ width: $spanned-width + $spanned-gutters-width;
14
+ }
@@ -1,7 +1,5 @@
1
1
  // Sets up a element and its child elements with the flexbox properties needed
2
2
  // to have the given number of columns with optional gutters or margins.
3
- $mobile-breakpoint: 767px !default;
4
-
5
3
  @mixin has-cards($columns, $margin: 0) {
6
4
  @include align-content(flex-start);
7
5
  @include align-items(stretch);
@@ -1,7 +1,5 @@
1
1
  // Sets up a element and its child elements with the flexbox properties needed
2
2
  // to have the given number of columns with an optional gutter value.
3
- $mobile-breakpoint: 767px !default;
4
-
5
3
  @mixin has-columns($columns, $gutter: 0) {
6
4
  @include align-content(stretch);
7
5
  @include align-items(stretch);
@@ -9,40 +7,44 @@ $mobile-breakpoint: 767px !default;
9
7
  @include flex-direction(row);
10
8
  @include flex-wrap(wrap);
11
9
  @include justify-content(space-around);
12
- column-count: $columns; // Used as a reference for JavaScript functions
13
10
 
14
11
  > * {
15
12
  @include flex(1 1 auto);
16
- width: (1 / $columns) * 85%;
13
+
14
+ @if $gutter == 0 {
15
+ // If there is no gutter, we don't need to do anything other
16
+ // than split up the columns evenly.
17
+ width: 100% / $columns;
18
+ } @else if unit($gutter) == "px" or unit($gutter) == "em" {
19
+ // If there is a fixed gutter size, we need to trick the columns into
20
+ // being close to the right width and stretching to fill in the rest.
21
+ width: 85% / $columns;
22
+ } @else if unit($gutter) == "%" {
23
+ // If the gutter size is a percentage of the width, we can use the percentage
24
+ // to calculate the width of the columns as a percentage as well.
25
+ width: (100% - ($gutter * ($columns - 1))) / $columns;
26
+ }
17
27
 
18
28
  @if $gutter > 0 {
19
29
  margin-right: $gutter;
20
30
 
21
- &:nth-child(#{$columns}n) {
31
+ // Remove the right margin for the last column in a row
32
+ &:last-child {
22
33
  margin-right: 0;
23
34
  }
24
35
  }
25
-
26
- &:empty {
27
- margin-bottom: 0;
28
- margin-top: 0;
29
- visibility: hidden;
30
- }
31
36
  }
32
37
 
38
+ // Stack columns when the mobile breakpoint is set
33
39
  @media (max-width: $mobile-breakpoint) {
34
40
  > * {
35
41
  margin-bottom: $gutter;
36
42
  margin-right: 0;
37
43
  width: 100%;
38
44
 
39
- &:last-of-type {
45
+ &:last-child {
40
46
  margin-bottom: 0;
41
47
  }
42
-
43
- &:empty {
44
- display: none;
45
- }
46
48
  }
47
49
  }
48
50
  }
@@ -0,0 +1,70 @@
1
+ // Sets up a element and its child elements with the flexbox properties needed
2
+ // to have the given number of columns per row with multiple rows in the container
3
+ // and an optional gutter value that will be used between columns and rows.
4
+ @mixin has-grid($columns, $gutter: 0) {
5
+ @include align-content(stretch);
6
+ @include align-items(stretch);
7
+ @include display(flex);
8
+ @include flex-direction(row);
9
+ @include flex-wrap(wrap);
10
+ @include justify-content(space-around);
11
+ column-count: $columns; // Used as a reference for JavaScript functions
12
+
13
+ > * {
14
+ @include flex(1 1 auto);
15
+
16
+ @if $gutter == 0 {
17
+ // If there is no gutter, we don't need to do anything other
18
+ // than split up the columns evenly.
19
+ width: 100% / $columns;
20
+ } @else if unit($gutter) == "px" or unit($gutter) == "em" {
21
+ // If there is a fixed gutter size, we need to trick the columns into
22
+ // being close to the right width and stretching to fill in the rest.
23
+ width: 85% / $columns;
24
+ } @else if unit($gutter) == "%" {
25
+ // If the gutter size is a percentage of the width, we can use the percentage
26
+ // to calculate the width of the columns as a percentage as well.
27
+ width: (100% - ($gutter * ($columns - 1))) / $columns;
28
+ }
29
+
30
+ // Remove the right margin for the last column in a row
31
+ // and the top margin for each column in the first row
32
+ @if $gutter > 0 {
33
+ margin-right: $gutter;
34
+ margin-top: $gutter;
35
+
36
+ @for $i from 1 through $columns {
37
+ &:nth-child(#{$i}) {
38
+ margin-top: 0;
39
+ }
40
+ }
41
+
42
+ &:nth-child(#{$columns}n) {
43
+ margin-right: 0;
44
+ }
45
+ }
46
+
47
+ // The JavaScript component will add empty spans to keep a uniform column width
48
+ &:empty {
49
+ margin-bottom: 0;
50
+ margin-top: 0;
51
+ visibility: hidden;
52
+ }
53
+ }
54
+
55
+ @media (max-width: $mobile-breakpoint) {
56
+ > * {
57
+ margin-bottom: $gutter;
58
+ margin-right: 0;
59
+ width: 100%;
60
+
61
+ &:last-of-type {
62
+ margin-bottom: 0;
63
+ }
64
+
65
+ &:empty {
66
+ display: none;
67
+ }
68
+ }
69
+ }
70
+ }
@@ -1,5 +1,6 @@
1
1
  // A collection of mixins used in Codelation Rails projects
2
2
  // https://codelation.com
3
+ $mobile-breakpoint: 767px !default;
3
4
 
4
5
  @import "bourbon";
5
6
  @import "codelation/functions/**/*";
@@ -1,3 +1,3 @@
1
1
  module CodelationAssets
2
- VERSION = "0.2.2".freeze
2
+ VERSION = "0.3.0".freeze
3
3
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: codelation_assets
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.2
4
+ version: 0.3.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Brian Pattison
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2016-01-22 00:00:00.000000000 Z
11
+ date: 2016-01-28 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bourbon
@@ -65,15 +65,17 @@ files:
65
65
  - Rakefile
66
66
  - app/assets/javascripts/codelation.js
67
67
  - app/assets/javascripts/codelation/app.js
68
- - app/assets/javascripts/codelation/components/has_columns.js
68
+ - app/assets/javascripts/codelation/components/has_grid.js
69
69
  - app/assets/stylesheets/_normalize.scss
70
70
  - app/assets/stylesheets/codelation.scss
71
71
  - app/assets/stylesheets/codelation/functions/color.scss
72
- - app/assets/stylesheets/codelation/functions/text-color.scss
72
+ - app/assets/stylesheets/codelation/functions/text_color.scss
73
73
  - app/assets/stylesheets/codelation/mixins/button.scss
74
74
  - app/assets/stylesheets/codelation/mixins/center_children.scss
75
+ - app/assets/stylesheets/codelation/mixins/col_span.scss
75
76
  - app/assets/stylesheets/codelation/mixins/has_cards.scss
76
77
  - app/assets/stylesheets/codelation/mixins/has_columns.scss
78
+ - app/assets/stylesheets/codelation/mixins/has_grid.scss
77
79
  - lib/codelation_assets.rb
78
80
  - lib/codelation_assets/version.rb
79
81
  homepage: https://github.com/codelation/codelation_assets