codelation_ui 1.0.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.
Files changed (130) hide show
  1. checksums.yaml +7 -0
  2. data/LICENSE +20 -0
  3. data/README.md +327 -0
  4. data/Rakefile +8 -0
  5. data/app/assets/javascripts/codelation_ui/_base_resources/app.js +91 -0
  6. data/app/assets/javascripts/codelation_ui/_base_resources/components/has_grid.js +24 -0
  7. data/app/assets/javascripts/codelation_ui/_base_resources/components/link.js +22 -0
  8. data/app/assets/javascripts/codelation_ui/_base_resources/progress_bar.js +5 -0
  9. data/app/assets/javascripts/codelation_ui/base.js +8 -0
  10. data/app/assets/javascripts/codelation_ui/extended/slider.js +654 -0
  11. data/app/assets/javascripts/codelation_ui/extended.js +1 -0
  12. data/app/assets/javascripts/codelation_ui/forms/components/input.js +497 -0
  13. data/app/assets/javascripts/codelation_ui/forms/index.js +2 -0
  14. data/app/assets/javascripts/codelation_ui/forms/interfaces/form.js +71 -0
  15. data/app/assets/javascripts/codelation_ui/forms/interfaces/form_validation.js +31 -0
  16. data/app/assets/javascripts/codelation_ui/forms.js +2 -0
  17. data/app/assets/javascripts/codelation_ui/std/index.js +2 -0
  18. data/app/assets/javascripts/codelation_ui/std/interfaces/content_formatters.js +27 -0
  19. data/app/assets/javascripts/codelation_ui/std/interfaces/content_validators.js +50 -0
  20. data/app/assets/javascripts/codelation_ui/std/interfaces/helpers.js +10 -0
  21. data/app/assets/javascripts/codelation_ui/std.js +1 -0
  22. data/app/assets/javascripts/codelation_ui/vue.js +12 -0
  23. data/app/assets/javascripts/codelation_ui/vue_pages.js +11 -0
  24. data/app/assets/javascripts/codelation_ui.js +6 -0
  25. data/app/assets/stylesheets/codelation_ui/_base_resources/_normalize.scss +427 -0
  26. data/app/assets/stylesheets/codelation_ui/_base_resources/bourbon/_bourbon-deprecated-upcoming.scss +411 -0
  27. data/app/assets/stylesheets/codelation_ui/_base_resources/bourbon/_bourbon.scss +87 -0
  28. data/app/assets/stylesheets/codelation_ui/_base_resources/bourbon/addons/_border-color.scss +26 -0
  29. data/app/assets/stylesheets/codelation_ui/_base_resources/bourbon/addons/_border-radius.scss +48 -0
  30. data/app/assets/stylesheets/codelation_ui/_base_resources/bourbon/addons/_border-style.scss +25 -0
  31. data/app/assets/stylesheets/codelation_ui/_base_resources/bourbon/addons/_border-width.scss +25 -0
  32. data/app/assets/stylesheets/codelation_ui/_base_resources/bourbon/addons/_buttons.scss +64 -0
  33. data/app/assets/stylesheets/codelation_ui/_base_resources/bourbon/addons/_clearfix.scss +25 -0
  34. data/app/assets/stylesheets/codelation_ui/_base_resources/bourbon/addons/_ellipsis.scss +30 -0
  35. data/app/assets/stylesheets/codelation_ui/_base_resources/bourbon/addons/_font-stacks.scss +31 -0
  36. data/app/assets/stylesheets/codelation_ui/_base_resources/bourbon/addons/_hide-text.scss +27 -0
  37. data/app/assets/stylesheets/codelation_ui/_base_resources/bourbon/addons/_margin.scss +26 -0
  38. data/app/assets/stylesheets/codelation_ui/_base_resources/bourbon/addons/_padding.scss +26 -0
  39. data/app/assets/stylesheets/codelation_ui/_base_resources/bourbon/addons/_position.scss +48 -0
  40. data/app/assets/stylesheets/codelation_ui/_base_resources/bourbon/addons/_prefixer.scss +66 -0
  41. data/app/assets/stylesheets/codelation_ui/_base_resources/bourbon/addons/_retina-image.scss +25 -0
  42. data/app/assets/stylesheets/codelation_ui/_base_resources/bourbon/addons/_size.scss +51 -0
  43. data/app/assets/stylesheets/codelation_ui/_base_resources/bourbon/addons/_text-inputs.scss +113 -0
  44. data/app/assets/stylesheets/codelation_ui/_base_resources/bourbon/addons/_timing-functions.scss +34 -0
  45. data/app/assets/stylesheets/codelation_ui/_base_resources/bourbon/addons/_triangle.scss +63 -0
  46. data/app/assets/stylesheets/codelation_ui/_base_resources/bourbon/addons/_word-wrap.scss +29 -0
  47. data/app/assets/stylesheets/codelation_ui/_base_resources/bourbon/css3/_animation.scss +43 -0
  48. data/app/assets/stylesheets/codelation_ui/_base_resources/bourbon/css3/_appearance.scss +3 -0
  49. data/app/assets/stylesheets/codelation_ui/_base_resources/bourbon/css3/_backface-visibility.scss +3 -0
  50. data/app/assets/stylesheets/codelation_ui/_base_resources/bourbon/css3/_background-image.scss +42 -0
  51. data/app/assets/stylesheets/codelation_ui/_base_resources/bourbon/css3/_background.scss +55 -0
  52. data/app/assets/stylesheets/codelation_ui/_base_resources/bourbon/css3/_border-image.scss +59 -0
  53. data/app/assets/stylesheets/codelation_ui/_base_resources/bourbon/css3/_calc.scss +4 -0
  54. data/app/assets/stylesheets/codelation_ui/_base_resources/bourbon/css3/_columns.scss +47 -0
  55. data/app/assets/stylesheets/codelation_ui/_base_resources/bourbon/css3/_filter.scss +4 -0
  56. data/app/assets/stylesheets/codelation_ui/_base_resources/bourbon/css3/_flex-box.scss +287 -0
  57. data/app/assets/stylesheets/codelation_ui/_base_resources/bourbon/css3/_font-face.scss +24 -0
  58. data/app/assets/stylesheets/codelation_ui/_base_resources/bourbon/css3/_font-feature-settings.scss +4 -0
  59. data/app/assets/stylesheets/codelation_ui/_base_resources/bourbon/css3/_hidpi-media-query.scss +10 -0
  60. data/app/assets/stylesheets/codelation_ui/_base_resources/bourbon/css3/_hyphens.scss +4 -0
  61. data/app/assets/stylesheets/codelation_ui/_base_resources/bourbon/css3/_image-rendering.scss +14 -0
  62. data/app/assets/stylesheets/codelation_ui/_base_resources/bourbon/css3/_keyframes.scss +36 -0
  63. data/app/assets/stylesheets/codelation_ui/_base_resources/bourbon/css3/_linear-gradient.scss +38 -0
  64. data/app/assets/stylesheets/codelation_ui/_base_resources/bourbon/css3/_perspective.scss +8 -0
  65. data/app/assets/stylesheets/codelation_ui/_base_resources/bourbon/css3/_placeholder.scss +8 -0
  66. data/app/assets/stylesheets/codelation_ui/_base_resources/bourbon/css3/_radial-gradient.scss +39 -0
  67. data/app/assets/stylesheets/codelation_ui/_base_resources/bourbon/css3/_selection.scss +42 -0
  68. data/app/assets/stylesheets/codelation_ui/_base_resources/bourbon/css3/_text-decoration.scss +19 -0
  69. data/app/assets/stylesheets/codelation_ui/_base_resources/bourbon/css3/_transform.scss +15 -0
  70. data/app/assets/stylesheets/codelation_ui/_base_resources/bourbon/css3/_transition.scss +71 -0
  71. data/app/assets/stylesheets/codelation_ui/_base_resources/bourbon/css3/_user-select.scss +3 -0
  72. data/app/assets/stylesheets/codelation_ui/_base_resources/bourbon/functions/_assign-inputs.scss +11 -0
  73. data/app/assets/stylesheets/codelation_ui/_base_resources/bourbon/functions/_contains-falsy.scss +20 -0
  74. data/app/assets/stylesheets/codelation_ui/_base_resources/bourbon/functions/_contains.scss +26 -0
  75. data/app/assets/stylesheets/codelation_ui/_base_resources/bourbon/functions/_is-length.scss +11 -0
  76. data/app/assets/stylesheets/codelation_ui/_base_resources/bourbon/functions/_is-light.scss +21 -0
  77. data/app/assets/stylesheets/codelation_ui/_base_resources/bourbon/functions/_is-number.scss +11 -0
  78. data/app/assets/stylesheets/codelation_ui/_base_resources/bourbon/functions/_is-size.scss +13 -0
  79. data/app/assets/stylesheets/codelation_ui/_base_resources/bourbon/functions/_modular-scale.scss +69 -0
  80. data/app/assets/stylesheets/codelation_ui/_base_resources/bourbon/functions/_px-to-em.scss +13 -0
  81. data/app/assets/stylesheets/codelation_ui/_base_resources/bourbon/functions/_px-to-rem.scss +15 -0
  82. data/app/assets/stylesheets/codelation_ui/_base_resources/bourbon/functions/_shade.scss +24 -0
  83. data/app/assets/stylesheets/codelation_ui/_base_resources/bourbon/functions/_strip-units.scss +17 -0
  84. data/app/assets/stylesheets/codelation_ui/_base_resources/bourbon/functions/_tint.scss +24 -0
  85. data/app/assets/stylesheets/codelation_ui/_base_resources/bourbon/functions/_transition-property-name.scss +22 -0
  86. data/app/assets/stylesheets/codelation_ui/_base_resources/bourbon/functions/_unpack.scss +27 -0
  87. data/app/assets/stylesheets/codelation_ui/_base_resources/bourbon/helpers/_convert-units.scss +21 -0
  88. data/app/assets/stylesheets/codelation_ui/_base_resources/bourbon/helpers/_directional-values.scss +96 -0
  89. data/app/assets/stylesheets/codelation_ui/_base_resources/bourbon/helpers/_font-source-declaration.scss +43 -0
  90. data/app/assets/stylesheets/codelation_ui/_base_resources/bourbon/helpers/_gradient-positions-parser.scss +13 -0
  91. data/app/assets/stylesheets/codelation_ui/_base_resources/bourbon/helpers/_linear-angle-parser.scss +25 -0
  92. data/app/assets/stylesheets/codelation_ui/_base_resources/bourbon/helpers/_linear-gradient-parser.scss +41 -0
  93. data/app/assets/stylesheets/codelation_ui/_base_resources/bourbon/helpers/_linear-positions-parser.scss +61 -0
  94. data/app/assets/stylesheets/codelation_ui/_base_resources/bourbon/helpers/_linear-side-corner-parser.scss +31 -0
  95. data/app/assets/stylesheets/codelation_ui/_base_resources/bourbon/helpers/_radial-arg-parser.scss +69 -0
  96. data/app/assets/stylesheets/codelation_ui/_base_resources/bourbon/helpers/_radial-gradient-parser.scss +50 -0
  97. data/app/assets/stylesheets/codelation_ui/_base_resources/bourbon/helpers/_radial-positions-parser.scss +18 -0
  98. data/app/assets/stylesheets/codelation_ui/_base_resources/bourbon/helpers/_render-gradients.scss +26 -0
  99. data/app/assets/stylesheets/codelation_ui/_base_resources/bourbon/helpers/_shape-size-stripper.scss +10 -0
  100. data/app/assets/stylesheets/codelation_ui/_base_resources/bourbon/helpers/_str-to-num.scss +50 -0
  101. data/app/assets/stylesheets/codelation_ui/_base_resources/bourbon/settings/_asset-pipeline.scss +7 -0
  102. data/app/assets/stylesheets/codelation_ui/_base_resources/bourbon/settings/_prefixer.scss +9 -0
  103. data/app/assets/stylesheets/codelation_ui/_base_resources/bourbon/settings/_px-to-em.scss +1 -0
  104. data/app/assets/stylesheets/codelation_ui/_base_resources/functions/color.scss +162 -0
  105. data/app/assets/stylesheets/codelation_ui/_base_resources/functions/text_color.scss +41 -0
  106. data/app/assets/stylesheets/codelation_ui/_base_resources/mixins/button.scss +47 -0
  107. data/app/assets/stylesheets/codelation_ui/_base_resources/mixins/center_children.scss +9 -0
  108. data/app/assets/stylesheets/codelation_ui/_base_resources/mixins/col_span.scss +16 -0
  109. data/app/assets/stylesheets/codelation_ui/_base_resources/mixins/has_cards.scss +43 -0
  110. data/app/assets/stylesheets/codelation_ui/_base_resources/mixins/has_columns.scss +66 -0
  111. data/app/assets/stylesheets/codelation_ui/_base_resources/mixins/has_grid.scss +80 -0
  112. data/app/assets/stylesheets/codelation_ui/_base_resources/mixins/outer_container.scss +10 -0
  113. data/app/assets/stylesheets/codelation_ui/base.scss +27 -0
  114. data/app/assets/stylesheets/codelation_ui/extended/slider.scss +222 -0
  115. data/app/assets/stylesheets/codelation_ui/extended.scss +1 -0
  116. data/app/assets/stylesheets/codelation_ui/forms/input.scss +72 -0
  117. data/app/assets/stylesheets/codelation_ui/forms.scss +1 -0
  118. data/app/assets/stylesheets/codelation_ui/std.scss +1 -0
  119. data/app/assets/stylesheets/codelation_ui.scss +4 -0
  120. data/lib/codelation_ui.rb +7 -0
  121. data/vendor/assets/javascripts/autonumeric/autoNumeric-1.9.39.js +1465 -0
  122. data/vendor/assets/javascripts/autonumeric/autonumeric_ujs.js +94 -0
  123. data/vendor/assets/javascripts/autonumeric.js +2 -0
  124. data/vendor/assets/javascripts/awesomplete.js +392 -0
  125. data/vendor/assets/javascripts/moment.js +4301 -0
  126. data/vendor/assets/javascripts/numeral.js +679 -0
  127. data/vendor/assets/javascripts/pikaday.js +1081 -0
  128. data/vendor/assets/javascripts/summernote.js +7300 -0
  129. data/vendor/assets/javascripts/vue.js +10237 -0
  130. metadata +242 -0
checksums.yaml ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: f97606cf9ffd98f399e9719284f2c72f6fee0ea5
4
+ data.tar.gz: ae329ffe089132a60b234039846fb573953ae3b1
5
+ SHA512:
6
+ metadata.gz: 9e05fa15e019fbe9fe30df4ab6c73918a1b3b1d3fa2585e8e49d7761bfae6b4fc03bf053cca639e8cad50a3e69056f9021d9541bccf050098d1aa97538db1d62
7
+ data.tar.gz: fbc4f9fae6050f8767d9bc555bd720d8e946535d81ee585d3aeefb6d4e7ed53cbb180414a34ff5b80a374ac25369961d260ed9b0b1f610071d86e77fed313d86
data/LICENSE ADDED
@@ -0,0 +1,20 @@
1
+ Copyright 2017 Jake Humphrey
2
+
3
+ Permission is hereby granted, free of charge, to any person obtaining
4
+ a copy of this software and associated documentation files (the
5
+ "Software"), to deal in the Software without restriction, including
6
+ without limitation the rights to use, copy, modify, merge, publish,
7
+ distribute, sublicense, and/or sell copies of the Software, and to
8
+ permit persons to whom the Software is furnished to do so, subject to
9
+ the following conditions:
10
+
11
+ The above copyright notice and this permission notice shall be
12
+ included in all copies or substantial portions of the Software.
13
+
14
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
15
+ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
16
+ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
17
+ NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
18
+ LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
19
+ OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
20
+ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
data/README.md ADDED
@@ -0,0 +1,327 @@
1
+ # Codelation Assets
2
+
3
+ A collection of SCSS mixins and JavaScript helpers used by
4
+ [Codelation](https://codelation.com) for building awesome Rails apps quickly.
5
+
6
+ ## Installation
7
+
8
+ Add this line to your application's Gemfile:
9
+
10
+ ```ruby
11
+ gem "codelation_assets"
12
+ ```
13
+
14
+ Install the Codelation Assets gem with Bundler:
15
+
16
+ ```bash
17
+ bundle install
18
+ ```
19
+
20
+ ## JavaScript
21
+
22
+ Add to `application.js`:
23
+
24
+ ```javascript
25
+ //= require codelation
26
+ ```
27
+
28
+ ### App Functions
29
+
30
+ The `App` object is used in Codelation's Rails projects to register components that
31
+ need to be initialized on every page and to sprinkle in JavaScript on specific pages.
32
+
33
+ #### Registering JavaScript Components
34
+
35
+ By using `App.register('component')`, you can fire some JavaScript on every page load.
36
+
37
+ The function passed to `enter` will fire for `$(document).on('ready page:load')`, so
38
+ it will work with or without Turbolinks.
39
+
40
+ The function passed to `exit` will fire for `$(document).on('page:before-unload')`,
41
+ so it will only work with Turbolinks, but will not be needed when not using Turbolinks.
42
+
43
+ Example:
44
+
45
+ ```javascript
46
+ (function() {
47
+ "use strict"
48
+
49
+ var body, links;
50
+
51
+ App.register('component').enter(function() {
52
+ body = $('body');
53
+ links = $('a[href]:not([href^="#"]):not([target="_blank"])');
54
+
55
+ // Add 'loading' class to the body when a link is clicked,
56
+ // add add 'active' class to the clicked link.
57
+ links.click(function() {
58
+ links.removeClass('active');
59
+ body.addClass('loading');
60
+ $(this).addClass('active');
61
+ });
62
+ }).exit(function() {
63
+ // Remove the classes when the body is unloaded
64
+ body.removeClass('loading');
65
+ links.removeClass('active');
66
+ });
67
+ })();
68
+ ```
69
+
70
+ #### Registering Per Page JavaScript Snippets
71
+
72
+ You can use `App.register('[controller-name].[action-name]')` to fire some JavaScript any time
73
+ that page is loaded and unloaded. The `enter` and `exit` functions work the same as components.
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
+
78
+ Example:
79
+
80
+ ```javascript
81
+ (function() {
82
+ "use strict"
83
+
84
+ var refreshInterval;
85
+
86
+ // This will only fire when entering and exiting the `AwesomeStatsController#index` page.
87
+ App.register('awesome-stats.index').enter(function() {
88
+ // Poll a URL for new data at a set interval
89
+ refreshInterval = setInterval(pollStats, 5000);
90
+ }).exit(function() {
91
+ // Clear the interval when the page is unloaded
92
+ clearInterval(refreshInterval);
93
+ });
94
+ })();
95
+ ```
96
+
97
+ You can also use `App.register('[controller-name]')` to fire JavaScript on all pages
98
+ for the given controller name.
99
+
100
+ ## Sass
101
+
102
+ Add to `application.scss`:
103
+
104
+ ```scss
105
+ @import "codelation";
106
+ ```
107
+
108
+ ### Included Sass/CSS Libraries
109
+
110
+ - [Bourbon](http://bourbon.io) - A simple and lightweight mixin library for Sass.
111
+ - [Normalize.css](https://necolas.github.io/normalize.css/) - A modern, HTML5-ready alternative to CSS resets
112
+
113
+ ### Additional Functions and Mixins
114
+
115
+ A handful of useful Sass functions and mixins written by Codelation are also included.
116
+
117
+ #### Sass Functions
118
+
119
+ ##### color($color, $number: 500)
120
+
121
+ The [Google Material Design Colors](https://www.google.com/design/spec/style/color.html) come in handy when you
122
+ need a color for creating application interfaces. They are a much better alternative to CSS's named colors
123
+ (blue, green, red, etc.), but just as easy to use.
124
+
125
+ Examples:
126
+
127
+ ```scss
128
+ // The named colors are available as variables of the same name
129
+ .warning {
130
+ color: $amber;
131
+ }
132
+
133
+ // You can also use the different shades available
134
+ .error {
135
+ color: color($red, 700);
136
+ }
137
+
138
+ // @see https://www.google.com/design/spec/style/color.html
139
+ .success {
140
+ color: color($green, 600);
141
+ }
142
+ ```
143
+
144
+ ##### text-color($color)
145
+
146
+ This function is useful for creating mixins where you have a background color as a variable
147
+ and need to display either black or white text on top of the given color.
148
+
149
+ #### Sass Mixins
150
+
151
+ ##### button($background-color: color($grey, 100), $color: color($grey, 800), $active-background-color: $accent-color, $active-color: text-color($accent-color))
152
+
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.
156
+
157
+ ##### center-children
158
+
159
+ This mixin uses flexbox to center the child elements horizontally and vertically inside the element.
160
+ A good use case is centering an image of unknown height inside a container with a fixed height.
161
+
162
+ ##### has-cards($columns, $margin: 0)
163
+
164
+ This mixin uses flexbox to create a cards layout like that used by Google Material Design. The
165
+ mixin is used on the container element. This will create a fixed margin between each card element
166
+ and adds padding around the outside of the cards. Useful for creating a dashboard widgets look.
167
+
168
+ Example:
169
+
170
+ **HTML**
171
+
172
+ ```html
173
+ <div class="dashboard">
174
+ <div class="card"><div>
175
+ <div class="card"><div>
176
+ <div class="card"><div>
177
+ <div class="card"><div>
178
+ </div>
179
+ ```
180
+
181
+ **SCSS**
182
+
183
+ ```scss
184
+ // This will create a cards layout with two cards per row.
185
+ // There will be a fixed margin of 1em between and around the cards.
186
+ // The cards in each row will stretch to be the same height.
187
+ .dashboard {
188
+ @include has-cards(2, 1em);
189
+ background-color: #ccc;
190
+
191
+ .card {
192
+ background-color: #fff;
193
+ border-radius: 2px;
194
+ box-shadow: 1px 1px 2px rgba(0, 0, 0, 0.2);
195
+ }
196
+ }
197
+ ```
198
+
199
+ ##### has-columns($columns: 0, $gutter: 0, $grow: true)
200
+
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 must be a single row of columns.
204
+
205
+ When the column count is given, the columns will all be the same width. If no column
206
+ count is given, the row will behave like a table row. The entire width will be used
207
+ and each column width will be determined by its content. `$grow` can be set to false
208
+ if you don't want the columns to take up the entire width of the container.
209
+
210
+ Example:
211
+
212
+ **HTML**
213
+
214
+ ```html
215
+ <div class="row">
216
+ <div>Column 1<div>
217
+ <div>Column 2<div>
218
+ <div>Column 3<div>
219
+ </div>
220
+
221
+ <div class="table">
222
+ <div>Column 1</div>
223
+ <div>Column 2</div>
224
+ <div>Column 3</div>
225
+ <div>Column 4</div>
226
+ <div>Column 5</div>
227
+ </div>
228
+ ```
229
+
230
+ **SCSS**
231
+
232
+ ```scss
233
+ // This will create a row with three columns.
234
+ // The columns will all fill the container height.
235
+ // There will be a fixed gutter of 12px between the columns.
236
+ .row {
237
+ @include has-columns(3, 12px);
238
+ }
239
+
240
+ // This will create a row with five columns.
241
+ // The columns will all fill the container height and width.
242
+ // The width of each column will be determined by its content.
243
+ // There will be a fixed gutter of 10px between the columns.
244
+ .table {
245
+ @include has-columns($gutter: 10px);
246
+ }
247
+ ```
248
+
249
+ ###### col-span($columns of $container-columns, $gutter: 0)
250
+
251
+ When the `has-columns` mixin is used properly, you can create columns in a row that
252
+ span the width of multiple columns in another row. In order to use the `col-span`
253
+ mixin, you must use a percentage value or zero for your gutter width. There is no way
254
+ to have a fixed gutter width, flexible column widths, and match up with the columns
255
+ in another row.
256
+
257
+ Example:
258
+
259
+ **HTML**
260
+
261
+ ```html
262
+ <div class="row">
263
+ <div>Column 1<div>
264
+ <div>Column 2<div>
265
+ <div>Column 3<div>
266
+ </div>
267
+ <div class="row">
268
+ <div class="wide-column">Column 4<div>
269
+ <div>Column 5<div>
270
+ </div>
271
+ ```
272
+
273
+ **SCSS**
274
+
275
+ ```scss
276
+ .row {
277
+ @include has-columns(3, 3%);
278
+ }
279
+
280
+ // Column 4 will span across two columns. Its left side will match up with
281
+ // column 1's left side, and its right side will match up with column 2's right
282
+ // side. Column 5's right margin will be set to 0 without any extra SCSS.
283
+ .wide-column {
284
+ @include col-span(2 of 3, 3%)
285
+ }
286
+ ```
287
+
288
+ ##### has-grid($columns, $gutter: 0)
289
+
290
+ This mixin uses flexbox to create a grid layout with an unknown number of child elements.
291
+ Each child element will have the same width and they will stretch to be the same height.
292
+ The gutter size is the width between each column and the height between each row. Unlike
293
+ the `has-cards` mixin, there will not be a margin around the child elements, only between.
294
+ This mixin is perfect for a product category page.
295
+
296
+ Example:
297
+
298
+ **HTML**
299
+
300
+ ```html
301
+ <div class="products">
302
+ <div>Product 1<div>
303
+ <div>Product 2<div>
304
+ <div>Product 3<div>
305
+ <div>Product 4<div>
306
+ <div>Product 5<div>
307
+ </div>
308
+ ```
309
+
310
+ **SCSS**
311
+
312
+ ```scss
313
+ // Products 1 - 3 will be on the first row and there will be a margin of 1em between them.
314
+ // Products 4 & 5 will be on the second row and will match up with products 1 & 2.
315
+ // There will be a margin of 1em between the rows.
316
+ .products {
317
+ @include has-grid(3, 1em);
318
+ }
319
+ ```
320
+
321
+ ## Contributing
322
+
323
+ 1. Fork it
324
+ 2. Create your feature branch (`git checkout -b my-new-feature`)
325
+ 3. Commit your changes (`git commit -am 'Add some feature'`)
326
+ 4. Push to the branch (`git push origin my-new-feature`)
327
+ 5. Create new Pull Request
data/Rakefile ADDED
@@ -0,0 +1,8 @@
1
+ begin
2
+ require "bundler/setup"
3
+ rescue LoadError
4
+ puts "You must `gem install bundler` and `bundle install` to run rake tasks"
5
+ end
6
+
7
+ Bundler.require
8
+ Dir[File.join(File.dirname(__FILE__), "lib/tasks/**/*.rake")].each {|f| load f }
@@ -0,0 +1,91 @@
1
+ (function() {
2
+ "use strict";
3
+
4
+ var app = window.App;
5
+ var bodyClass, bodyElement;
6
+
7
+ if (app === undefined) {
8
+ app = window.App = {};
9
+ }
10
+
11
+ app.enterFunctions = { component: [] };
12
+ app.exitFunctions = { component: [] };
13
+
14
+ // Register functions to run when any page or specific pages are loaded.
15
+ //
16
+ // Example for running code only when `pages#home` loads:
17
+ //
18
+ // App.register('pages.home').enter(function() {
19
+ // // Set up
20
+ // }).exit(function() {
21
+ // // Tear down (Might be needed for Turbolinks)
22
+ // });
23
+ //
24
+ // Example for running code on every page load:
25
+ //
26
+ // App.register('component').enter(function() {
27
+ // // Set up
28
+ // }).exit(function() {
29
+ // // Tear down (Might be needed for Turbolinks)
30
+ // });
31
+ app.register = function(mixed) {
32
+ return {
33
+ enter: function(callback) {
34
+ app.registerEnter(mixed, callback);
35
+ return this;
36
+ },
37
+
38
+ exit: function(callback) {
39
+ app.registerExit(mixed, callback);
40
+ return this;
41
+ }
42
+ };
43
+ };
44
+
45
+ app.registerEnter = function(key, callback) {
46
+ if (app.enterFunctions[key] === undefined) {
47
+ app.enterFunctions[key] = [];
48
+ }
49
+ app.enterFunctions[key].push(callback);
50
+ };
51
+
52
+ app.registerExit = function(key, callback) {
53
+ if (app.exitFunctions[key] === undefined) {
54
+ app.exitFunctions[key] = [];
55
+ }
56
+ app.exitFunctions[key].push(callback);
57
+ };
58
+
59
+ // Fires off any callbacks registered for enter, with or without Turbolinks.
60
+ $(document).on('ready page:load page:restore', function() {
61
+ bodyElement = $('body');
62
+
63
+ // Determine which functions should be fired
64
+ var fireFunctions = [];
65
+ $.each(app.enterFunctions, function(key, functions) {
66
+ bodyClass = key.split('.').join(' ');
67
+ if (bodyClass === 'component' || bodyElement.hasClass(bodyClass)) {
68
+ fireFunctions = fireFunctions.concat(functions);
69
+ }
70
+ });
71
+
72
+ // Fire off each function
73
+ $.each(fireFunctions, function() { this.call(); });
74
+ });
75
+
76
+ // Fires off any callbacks registered for exit, ONLY if using Turbolinks.
77
+ $(document).on('page:before-unload', function() {
78
+ var fireFunctions = [];
79
+
80
+ // Determine which functions should be fired
81
+ $.each(app.exitFunctions, function(key, functions) {
82
+ bodyClass = key.split('.').join(' ');
83
+ if (bodyClass === 'component' || bodyElement.hasClass(bodyClass)) {
84
+ fireFunctions = fireFunctions.concat(functions);
85
+ }
86
+ });
87
+
88
+ // Fire off each function
89
+ $.each(fireFunctions, function() { this.call(); });
90
+ });
91
+ })();
@@ -0,0 +1,24 @@
1
+ (function() {
2
+ "use strict";
3
+
4
+ // Used with the `has-grid` and `has-cards` Sass mixins,
5
+ // it appends an extra span element for each missing column
6
+ // based on the number of columns defined in the CSS.
7
+ App.register('component').enter(function() {
8
+ var columns, children, container, missingColumns;
9
+
10
+ $('body *').each(function() {
11
+ container = $(this);
12
+ columns = container.css('column-count');
13
+
14
+ // Ignore elements without column-count
15
+ if (columns === 'auto') { return; }
16
+
17
+ children = container.children().length;
18
+ missingColumns = columns - (children % columns);
19
+ for (var i = 0; i < missingColumns; i++) {
20
+ container.append('<div></div>');
21
+ }
22
+ });
23
+ });
24
+ })();
@@ -0,0 +1,22 @@
1
+ (function() {
2
+ "use strict";
3
+
4
+ var body, links;
5
+
6
+ App.register('component').enter(function() {
7
+ body = $('body');
8
+ links = $('a[href]:not([href^="#"]):not([target="_blank"])');
9
+
10
+ // Add 'loading' class to the body when a link is clicked,
11
+ // add add 'active' class to the clicked link.
12
+ links.click(function() {
13
+ links.removeClass('active');
14
+ body.addClass('loading');
15
+ $(this).addClass('active');
16
+ });
17
+ }).exit(function() {
18
+ // Remove the classes when the body is unloaded
19
+ body.removeClass('loading');
20
+ links.removeClass('active');
21
+ });
22
+ })();
@@ -0,0 +1,5 @@
1
+ /* global Turbolinks */
2
+
3
+ if (Turbolinks !== undefined) {
4
+ Turbolinks.enableProgressBar();
5
+ }
@@ -0,0 +1,8 @@
1
+ //= require jquery
2
+ //= require jquery_ujs
3
+ //= require turbolinks
4
+ //= require moment
5
+ //= require numeral
6
+ //= require ./_base_resources/app
7
+ //= require ./_base_resources/progress_bar
8
+ //= require_tree ./_base_resources/components