ratchet_design 0.1.1 → 0.1.2

Sign up to get free protection for your applications and to get access to all the features.
Files changed (61) hide show
  1. checksums.yaml +4 -4
  2. data/app/assets/images/ratchet/favicon.ico +0 -0
  3. data/app/assets/images/ratchet/safari-pinned-tab.svg +1 -0
  4. data/app/assets/javascripts/ratchet/base/form.js +9 -118
  5. data/app/assets/javascripts/ratchet/base/mobilemenu.js +12 -50
  6. data/app/assets/javascripts/ratchet/base/sync-input-value.js +30 -0
  7. data/app/assets/javascripts/ratchet/core.js +58 -77
  8. data/app/assets/javascripts/ratchet/enhancement/_collapse.js +3 -6
  9. data/app/assets/javascripts/ratchet/enhancement/_swap.js +3 -7
  10. data/app/assets/javascripts/ratchet/enhancement/lightbox.js +165 -0
  11. data/app/assets/javascripts/ratchet/enhancement/notice.js +8 -3
  12. data/app/assets/javascripts/ratchet/enhancement/sticky.js +18 -35
  13. data/app/assets/javascripts/ratchet/enhancement/waypoints.js +125 -162
  14. data/app/assets/javascripts/ratchet/shim/scope.js +94 -0
  15. data/app/assets/javascripts/ratchet/{enhancement → utility}/loader.js +15 -8
  16. data/app/assets/stylesheets/ratchet/_core.scss +4 -1
  17. data/app/assets/stylesheets/ratchet/base/_button.scss +3 -3
  18. data/app/assets/stylesheets/ratchet/base/_form.scss +63 -47
  19. data/app/assets/stylesheets/ratchet/base/_multistep-form.scss +64 -0
  20. data/app/assets/stylesheets/ratchet/base/_text.scss +15 -15
  21. data/app/assets/stylesheets/ratchet/enhancement/_lightbox.scss +98 -0
  22. data/app/assets/stylesheets/ratchet/enhancement/_tooltip.scss +142 -0
  23. data/app/assets/stylesheets/ratchet/fonts-woff.css +4 -4
  24. data/app/assets/stylesheets/ratchet/fonts-woff2.css +4 -4
  25. data/app/assets/stylesheets/ratchet/utility/_global.scss +3 -13
  26. data/app/assets/stylesheets/ratchet/{enhancement → utility}/_loader.scss +1 -1
  27. data/app/helpers/ratchet/application_helper.rb +6 -12
  28. data/app/helpers/ratchet/form_helper.rb +140 -0
  29. data/app/views/layouts/ratchet/default.html.slim +3 -2
  30. data/app/views/shared/ratchet/_footer.html.slim +1 -1
  31. data/app/views/shared/ratchet/_header.html.slim +1 -1
  32. data/lib/ratchet_design/version.rb +1 -1
  33. data/lib/ratchet_design.rb +24 -4
  34. data/public/assets/ratchet/core-0.1.2.js +133 -0
  35. data/public/assets/ratchet/core-0.1.2.js.gz +0 -0
  36. data/public/assets/ratchet/core-0.1.2.map.json +1 -0
  37. data/public/assets/ratchet/core-0.1.20.js +20472 -0
  38. data/public/assets/ratchet/{fonts-woff-0.1.1.css → fonts-woff-0.1.2.css} +4 -4
  39. data/public/assets/ratchet/{fonts-woff-0.1.1.css.gz → fonts-woff-0.1.2.css.gz} +0 -0
  40. data/public/assets/ratchet/{fonts-woff2-0.1.1.css → fonts-woff2-0.1.2.css} +4 -4
  41. data/public/assets/ratchet/{fonts-woff2-0.1.1.css.gz → fonts-woff2-0.1.2.css.gz} +0 -0
  42. metadata +48 -27
  43. data/app/assets/javascripts/ratchet/base/validation.js +0 -263
  44. data/app/assets/javascripts/ratchet/enhancement/_lightbox.js +0 -93
  45. data/app/assets/javascripts/ratchet/shim/classlist.js +0 -234
  46. data/app/assets/javascripts/ratchet/shim/object.assign.js +0 -30
  47. data/app/assets/javascripts/ratchet/utility/compile_data.js +0 -32
  48. data/app/assets/javascripts/ratchet/utility/from_top.js +0 -14
  49. data/app/assets/javascripts/ratchet/utility/full_stop.js +0 -55
  50. data/app/assets/javascripts/ratchet/utility/get_closest.js +0 -20
  51. data/app/assets/javascripts/ratchet/utility/get_next.js +0 -17
  52. data/app/assets/javascripts/ratchet/utility/matches.js +0 -15
  53. data/app/assets/javascripts/ratchet/utility/scroll_to.js +0 -74
  54. data/app/assets/javascripts/ratchet/utility/throttle.js +0 -25
  55. data/app/assets/javascripts/ratchet/utility/timeout.js +0 -45
  56. data/app/assets/javascripts/ratchet/utility/unhover.js +0 -56
  57. data/app/assets/javascripts/ratchet/utility/word_count.js +0 -15
  58. data/app/assets/stylesheets/ratchet/enhancement/_signup.scss +0 -206
  59. data/public/assets/ratchet/core-0.1.1.js +0 -103
  60. data/public/assets/ratchet/core-0.1.1.js.gz +0 -0
  61. data/public/assets/ratchet/core-0.1.1.map.json +0 -1
@@ -6,129 +6,93 @@
6
6
  **/
7
7
 
8
8
  // Dependencies
9
- var matches = require( '../utility/matches' ),
10
- fromTop = require( '../utility/from_top' ),
11
- scrollTo = require( '../utility/scroll_to' ),
12
- getClosest = require( '../utility/get_closest' ),
13
- throttle = require( '../utility/throttle' );
9
+ var toolbox = require( 'compose-toolbox' ),
10
+ Event = toolbox.event,
11
+ matches = toolbox.matches,
12
+ fromTop = toolbox.fromTop,
13
+ scrollTo = toolbox.scrollTo,
14
+ getClosest = toolbox.getClosest,
15
+ callback = Event.callback;
14
16
 
15
17
  // Public API function
16
- var waypoints = function( elements, settings ) {
18
+ var waypoints = function( settings ) {
17
19
 
18
20
  // Overridable defaults
19
21
  var defaults = {
20
- initWidth : '700px',
21
- activeAnchor : 'active',
22
- elemOffset : 0,
23
- showLandmarks : false,
24
- landmarkSelector : '.landmark',
25
- activeLandmark : 'pinned',
26
- };
27
-
28
- // Scoped variables
29
- var options = Object.assign( {}, defaults, settings ),
30
- selectors = document.querySelectorAll( elements );
31
-
32
- // If selectors are not present
33
- if ( !selectors.length ) {
34
-
35
- // Abort
36
- return false;
37
-
38
- // Otherwise attach listeners
39
- } else {
22
+ initWidth : '0px',
23
+ elemOffset : 0
24
+ }
40
25
 
41
- // Scoped variables
42
- var initWidth = options.initWidth ? options.initWidth : '0px',
43
- widthQuery = window.matchMedia( '(min-width: ' + initWidth + ')' ),
44
- docBody = document.body,
45
- coordinates = [],
46
- oldActiveItem,
47
- windowHash,
48
- docHeight,
49
- winHeight;
26
+ function slice( obj, count ) {
27
+ return Array.prototype.slice.call( obj, count )
28
+ }
50
29
 
51
- // If hash is present
52
- if ( window.location.hash ) {
30
+ // Scoped variables
31
+ var options = toolbox.merge( defaults, settings ),
32
+ activeAnchor = 'active',
33
+ landmarkSelector = 'dl',
34
+ activeLandmark = 'pinned',
35
+ nav = document.querySelector('.waypoint-nav'),
36
+ elements = [];
53
37
 
54
- // Cache it
55
- windowHash = window.location.hash.replace( '#', '' );
38
+ if ( nav ) slice( nav.querySelectorAll( "a[href^='#']" ) ).forEach( function( el ) {
56
39
 
57
- // Then delete it to prevent default page scroll
58
- window.location.hash = '';
40
+ // Find all elements matching links in the waypoints nav
41
+ var section = document.querySelector( el.getAttribute('href') )
59
42
 
60
- // And replace it
61
- history.replaceState( null, '', '#' + windowHash );
43
+ // If found, add them to the elements list
44
+ if ( section ) elements.push( section )
62
45
 
63
- }
46
+ })
64
47
 
65
- // Resize throttle function init
66
- throttle( 'resize', 'optimizedResize' );
48
+ if ( !nav || elements.length < 1 ) { return false }
67
49
 
68
- // Scroll throttle function init
69
- throttle( 'scroll', 'optimizedScroll' );
50
+ // Scoped variables
51
+ var docBody = document.body,
52
+ coordinates = [],
53
+ oldActiveItem,
54
+ windowHash,
55
+ docHeight,
56
+ winHeight;
70
57
 
71
- // Only run once the window is loaded
72
- window.addEventListener( 'load', function() {
58
+ // If hash is present
59
+ if ( window.location.hash ) {
73
60
 
74
- // Call listener function explicitly at run time
75
- queryHandler( widthQuery );
61
+ // Cache it
62
+ windowHash = window.location.hash.replace( '#', '' );
76
63
 
77
- // Attach listener function to listen in on state changes
78
- widthQuery.addListener( queryHandler );
64
+ // Then delete it to prevent default page scroll
65
+ window.location.hash = '';
79
66
 
80
- }, false );
67
+ // And replace it
68
+ history.replaceState( null, '', '#' + windowHash );
81
69
 
82
70
  }
83
71
 
84
- // Media query handler function
85
- function queryHandler( condition ) {
86
-
87
- // If media query matches
88
- if ( condition.matches ) {
72
+ // Only run once the window is loaded
73
+ Event.on( window, 'load', function() {
89
74
 
90
- // Call resize listener function explicitly at run time
91
- resizeHandler();
75
+ // Media query handler function
76
+ Event.media.minWidth( options.initWidth, function( condition ) {
92
77
 
93
- // Resize throttle function init
94
- window.addEventListener( 'optimizedResize', resizeHandler, false );
78
+ // Set up resize listener
79
+ resize.toggle( condition.matches )
80
+ resize()
95
81
 
96
- // Call scroll listener function explicitly at run time
97
- scrollHandler();
82
+ // Set up scroll listener
83
+ scroll.toggle( condition.matches )
84
+ scroll()
85
+
86
+ // Set up hash change listener
87
+ hashChange.toggle( condition.matches )
88
+ hashChange()
98
89
 
99
- // Scroll function listener
100
- window.addEventListener( 'optimizedScroll', scrollHandler, false );
90
+ })
101
91
 
102
- // Click function listener
103
- docBody.addEventListener( 'click', clickHandler, false );
104
-
105
- // Call hash change listener function explicitly at run time
106
- hashHandler();
107
-
108
- // Hash change function listener
109
- window.addEventListener( 'hashchange', hashHandler, false );
110
-
111
- // Otherwise…
112
- } else {
113
-
114
- // Remove resize listener
115
- window.removeEventListener( 'optimizedResize', resizeHandler, false );
116
-
117
- // Remove scroll listener
118
- window.removeEventListener( 'optimizedScroll', scrollHandler, false );
119
-
120
- // Remove click listener
121
- docBody.removeEventListener( 'click', clickHandler, false );
122
-
123
- // Remove hash change listener
124
- window.removeEventListener( 'hashchange', hashHandler, false );
125
-
126
- }
127
-
128
- }
92
+ })
129
93
 
130
94
  // Resize handler function
131
- function resizeHandler() {
95
+ var resize = callback.new( function() {
132
96
 
133
97
  // Update document height variable
134
98
  docHeight = docBody.scrollHeight;
@@ -137,23 +101,22 @@ var waypoints = function( elements, settings ) {
137
101
  winHeight = window.innerHeight;
138
102
 
139
103
  // Loop through waypoints
140
- for ( var i = 0; i < selectors.length; i++ ) {
141
-
142
- // Construct coordinate object
143
- var coordinate = {
144
- elem : selectors[ i ],
145
- offset : fromTop( selectors[ i ] )
146
- };
104
+ setCoordinates()
147
105
 
148
- // And update coordinates array
149
- coordinates[ i ] = coordinate;
150
-
151
- }
106
+ })
152
107
 
108
+ // Store coordinates to elements
109
+ var setCoordinates = function() {
110
+ elements.forEach( function( element, i ) {
111
+ coordinates[ i ] = {
112
+ elem : elements[ i ],
113
+ offset : fromTop( elements[ i ] )
114
+ }
115
+ })
153
116
  }
154
117
 
155
118
  // Scroll handler function
156
- function scrollHandler() {
119
+ var scroll = callback.new( function() {
157
120
 
158
121
  // Scoped variables
159
122
  var newScrollY = window.pageYOffset,
@@ -163,11 +126,10 @@ var waypoints = function( elements, settings ) {
163
126
  landmark;
164
127
 
165
128
  // Loop through coordinates
166
- for ( var i = 0; i < coordinates.length; i++ ) {
129
+ coordinates.forEach( function( currWaypoint, i ) {
167
130
 
168
131
  // Scoped variables
169
132
  var firstWaypoint = coordinates[ 0 ],
170
- currWaypoint = coordinates[ i ],
171
133
  nextWaypoint = coordinates[ i + 1 ],
172
134
  lastWaypoint = coordinates[ coordinates.length - 1 ];
173
135
 
@@ -191,76 +153,65 @@ var waypoints = function( elements, settings ) {
191
153
 
192
154
  }
193
155
 
194
- }
156
+ })
195
157
 
196
158
  // If active item exists
197
159
  if ( newActiveItem ) {
198
160
 
199
161
  // Only run when new active item is triggered
200
- if ( newActiveItem === oldActiveItem ) return false;
162
+ if ( newActiveItem === oldActiveItem ) return false
201
163
 
202
164
  // Update active link
203
- activeLink = docBody.querySelector( 'a[href="#' + newActiveItem + '"]' );
165
+ activeLink = nav.querySelector( 'a[href="#' + newActiveItem + '"]' )
204
166
 
205
167
  // If no active link is found, abort
206
- if ( !activeLink ) return false;
168
+ if ( !activeLink ) return false
207
169
 
208
170
  // And enable navigation item
209
- activate( activeLink, options.activeAnchor );
210
-
211
- // If landmarks are turned on
212
- if ( options.showLandmarks === true ) {
213
-
214
- // Set active landmark to active link’s parent
215
- landmark = getClosest( activeLink, options.landmarkSelector );
216
-
217
- // Enable active landmark
218
- activate( landmark, options.activeLandmark );
219
-
220
- }
171
+ activateLink( activeLink )
221
172
 
222
173
  // Update old active item variable
223
- oldActiveItem = newActiveItem;
174
+ oldActiveItem = newActiveItem
224
175
 
225
176
  }
226
177
 
227
- }
178
+ })
228
179
 
229
180
  // Click handler function
230
- function clickHandler( event ) {
181
+ var click = callback.new( function( event ) {
231
182
 
232
183
  // Matches selector function init
233
184
  if ( matches( event.target, 'a[href^="#"]' ) ) {
234
185
 
235
186
  // Prevent default behavior
236
- event.preventDefault();
187
+ event.preventDefault()
237
188
 
238
189
  // Travel to clicked target
239
- travel( event.target, 'click' );
190
+ travel( event.target, true )
240
191
 
241
192
  }
242
- }
193
+ })
243
194
 
244
195
  // Hash change handler function
245
- function hashHandler() {
196
+ var hashChange = callback.new( function() {
246
197
 
247
198
  // Only run when a hash is present
248
- if ( !window.location.hash ) return false;
199
+ if ( !window.location.hash ) return false
249
200
 
250
201
  // Find the hash’s relevant navigation item
251
- var hashAnchor = document.querySelector( 'a[href="' + window.location.hash + '"]' );
202
+ var hashAnchor = document.querySelector( 'a[href="' + window.location.hash + '"]' )
252
203
 
253
204
  // And travel to its target
254
- travel( hashAnchor, 'hash' );
205
+ travel( hashAnchor )
255
206
 
256
- }
207
+ })
257
208
 
258
209
  // Window scroll travel function
259
- function travel( destination, trigger ) {
210
+ var travel = function( destination, animateScroll ) {
260
211
 
261
212
  // Define scoped variable(s)
262
- var targetAnchor = destination.href.split( '#' )[ 1 ],
263
- targetElement = document.querySelector( '#' + targetAnchor ),
213
+ var targetAnchor = destination.getAttribute('href'),
214
+ targetElement = document.querySelector( targetAnchor ),
264
215
  targetOffset,
265
216
  travelTime;
266
217
 
@@ -268,10 +219,10 @@ var waypoints = function( elements, settings ) {
268
219
  if ( targetElement ) {
269
220
 
270
221
  // Enable new active navigation item
271
- activate( destination, options.activeAnchor );
222
+ activateLink( destination, activeAnchor )
272
223
 
273
224
  // Loop through coordinates
274
- for ( var i = 0; i < coordinates.length; i++ ) {
225
+ coordinates.forEach( function( current, i ) {
275
226
 
276
227
  // If coordinate element matches target element
277
228
  if ( coordinates[ i ].elem === targetElement ) {
@@ -279,49 +230,61 @@ var waypoints = function( elements, settings ) {
279
230
  // Assign its coordinates to target offset variable
280
231
  targetOffset = coordinates[ i ].offset;
281
232
  }
282
- }
233
+ })
283
234
 
284
235
  // If trigger was a click
285
- if ( trigger === 'click' ) {
236
+ if ( animateScroll ) {
286
237
 
287
238
  // Temporarily remove scroll listener function
288
- window.removeEventListener( 'optimizedScroll', scrollHandler, false );
239
+ scroll.stop()
289
240
 
290
241
  // Update the hash
291
- history.pushState( null, '', '#' + targetAnchor );
292
-
293
- // Animate scroll to appropriate element
294
- scrollTo( targetOffset - options.elemOffset + 1, function() {
295
-
296
- // Once scroll is complete, enable scroll listener
297
- window.addEventListener( 'optimizedScroll', scrollHandler, false );
242
+ history.pushState( null, '', targetAnchor );
298
243
 
299
- });
244
+ // Animate scroll to appropriate element then renable scroll listener
245
+ scrollTo( targetElement, scroll.start )
300
246
 
301
- // Otherwise if trigger was a hash
302
- } else if ( trigger === 'hash' ) {
247
+ } else {
303
248
 
304
249
  // Skip the scroll animation
305
- window.scrollTo( 0, targetOffset - options.elemOffset + 1 );
250
+ window.scrollTo( 0, fromTop( targetElement ) );
306
251
 
307
252
  }
308
253
  }
309
254
  }
310
255
 
311
- // Link activation function
312
- function activate( selector, cls ) {
256
+ function activate( el, classname ) {
313
257
 
314
258
  // Find currently active link
315
- var activeLink = docBody.querySelector( '.' + cls );
259
+ var activeEl = nav.querySelector( '.' + classname )
260
+
261
+ if ( activeEl == el ) return
316
262
 
317
- // And if it exists, disable it
318
- if ( activeLink ) activeLink.classList.remove( cls );
263
+ // remove active class from existing element
264
+ if ( activeEl ) activeEl.classList.remove( classname )
319
265
 
320
266
  // Then enable the passed selector
321
- selector.classList.add( cls );
267
+ el.classList.add( classname )
268
+
269
+ }
270
+
271
+ // Link activation function
272
+ function activateLink( el ) {
273
+ activate( el, activeAnchor )
322
274
 
275
+ // Set active landmark to active link’s parent
276
+ activateLandmark( getClosest( el, landmarkSelector ) )
323
277
  }
324
278
 
279
+ function activateLandmark( el ) {
280
+ if ( el ) activate( el, activeLandmark )
281
+ }
282
+
283
+ Event.resize.stop( resize )
284
+ Event.scroll( scroll )
285
+ Event.on( document, 'click', click )
286
+ Event.on( window, 'hashchange', hashChange )
287
+
325
288
  };
326
289
 
327
290
  // Public API
@@ -0,0 +1,94 @@
1
+ /**
2
+ * Scoped QuerySelector polyfill
3
+ * @source https://github.com/lazd/scopedQuerySelectorShim
4
+ * @author Larry Davis ( @lazd )
5
+ * @license BSD
6
+ */
7
+ ( function() {
8
+
9
+ // Throw error on super old browsers
10
+ if ( !HTMLElement.prototype.querySelectorAll ) {
11
+ throw new Error( 'rootedQuerySelectorAll: This polyfill can only be used with browsers that support querySelectorAll' );
12
+ }
13
+
14
+ // Create temporary element to query against and test for :scope support
15
+ var container = document.createElement( 'div' );
16
+
17
+ // Check if the browser supports :scope
18
+ try {
19
+
20
+ // Browser supports :scope, do nothing
21
+ container.querySelectorAll( ':scope *' );
22
+
23
+ // Otherwise
24
+ } catch ( e ) {
25
+
26
+ // Match usage of scope
27
+ var scopeRE = /^\s*:scope/gi;
28
+
29
+ // Overrides
30
+ function overrideNodeMethod( prototype, methodName ) {
31
+
32
+ // Store the old method for use later
33
+ var oldMethod = prototype[ methodName ];
34
+
35
+ // Override the method
36
+ prototype[ methodName ] = function( query ) {
37
+
38
+ var gaveContainer = false,
39
+ gaveId = false,
40
+ nodeList;
41
+
42
+ if ( query.match( scopeRE ) ) {
43
+
44
+ // Remove :scope
45
+ query = query.replace( scopeRE, '' );
46
+
47
+ if ( !this.parentNode ) {
48
+
49
+ // Add to temporary container
50
+ container.appendChild( this );
51
+ gaveContainer = true;
52
+
53
+ }
54
+
55
+ parentNode = this.parentNode;
56
+
57
+ if ( !this.id ) {
58
+
59
+ // Give temporary ID
60
+ this.id = 'rootedQuerySelector_id_' + new Date().getTime();
61
+ gaveId = true;
62
+
63
+ }
64
+
65
+ // Find elements against parent node
66
+ nodeList = oldMethod.call( parentNode, '#' + this.id + ' ' + query );
67
+
68
+ // Reset the ID
69
+ if ( gaveId ) {
70
+ this.id = '';
71
+ }
72
+
73
+ // Remove from temporary container
74
+ if ( gaveContainer ) {
75
+ container.removeChild( this );
76
+ }
77
+
78
+ return nodeList;
79
+
80
+ } else {
81
+
82
+ // No immediate child selector used
83
+ return oldMethod.call( this, query );
84
+
85
+ }
86
+ };
87
+ }
88
+
89
+ // Browser doesnt support :scope, add polyfill
90
+ overrideNodeMethod( HTMLElement.prototype, 'querySelector' );
91
+ overrideNodeMethod( HTMLElement.prototype, 'querySelectorAll' );
92
+
93
+ }
94
+ })();
@@ -5,6 +5,8 @@
5
5
  * @license MIT
6
6
  **/
7
7
 
8
+ var toolbox = require( 'compose-toolbox' )
9
+
8
10
  // Public API function
9
11
  var loader = function( settings ) {
10
12
 
@@ -21,35 +23,40 @@ var loader = function( settings ) {
21
23
  };
22
24
 
23
25
  // Extend defaults
24
- var options = Object.assign( {}, defaults, settings );
26
+ var options = toolbox.merge( defaults, settings );
27
+
28
+ // If it doesn’t already exist
29
+ if ( !document.querySelector( 'div.' + options.loaderClass ) ) {
30
+
31
+ // Create and prepend loader element
32
+ options.selector.insertAdjacentHTML( 'afterbegin', '<div class="' + options.loaderClass + '"></div>' );
25
33
 
26
- // Create and prepend loader element
27
- options.selector.insertAdjacentHTML( 'afterbegin', '<div class="' + options.loaderClass + '"></div>' );
34
+ }
28
35
 
29
36
  // Cache loader element
30
37
  var element = document.querySelector( 'div.' + options.loaderClass );
31
38
 
32
39
  // Show loader icon function
33
- var show = function( state ) {
40
+ var show = function( state, message ) {
34
41
 
35
42
  // Loader pending state
36
43
  if ( state === 'pending' ) {
37
44
 
38
- element.textContent = options.loadingMessage;
45
+ element.textContent = message || options.loadingMessage;
39
46
  element.classList.remove( options.successClass, options.failureClass );
40
47
  element.classList.add( options.loadingClass );
41
48
 
42
49
  // Loader failure state
43
50
  } else if ( state === 'failure' ) {
44
51
 
45
- element.textContent = options.failureMessage;
52
+ element.textContent = message || options.failureMessage;
46
53
  element.classList.remove( options.loadingClass );
47
54
  element.classList.add( options.failureClass );
48
55
 
49
56
  // Loader success state
50
57
  } else if ( state === 'success' ) {
51
58
 
52
- element.textContent = options.successMessage;
59
+ element.textContent = message || options.successMessage;
53
60
  element.classList.remove( options.loadingClass );
54
61
  element.classList.add( options.successClass );
55
62
 
@@ -74,4 +81,4 @@ var loader = function( settings ) {
74
81
  };
75
82
 
76
83
  // Public API
77
- module.exports = loader;
84
+ module.exports = loader;
@@ -1,6 +1,7 @@
1
1
  // Utility modules
2
2
  @import 'utility/global';
3
3
  @import 'utility/grid';
4
+ @import 'utility/loader';
4
5
 
5
6
  // Base modules
6
7
  @import 'base/text';
@@ -8,13 +9,15 @@
8
9
  @import 'base/button';
9
10
  @import 'base/media';
10
11
  @import 'base/form';
12
+ @import 'base/multistep-form';
11
13
  @import 'base/table';
12
14
  @import 'base/document';
13
15
 
14
16
  // Enhancement modules
15
- @import 'enhancement/loader';
16
17
  @import 'enhancement/feature';
17
18
  @import 'enhancement/sticky-sidebar';
18
19
  @import 'enhancement/notice';
19
20
  @import 'enhancement/hero';
20
21
  @import 'enhancement/contrast-section';
22
+ @import 'enhancement/tooltip';
23
+ @import 'enhancement/lightbox';
@@ -42,7 +42,7 @@
42
42
  } @else if $color == secondary {
43
43
  $color: $flush;
44
44
  } @else if $color == success {
45
- $color: $lima;
45
+ $color: $apple;
46
46
  } @else if $color == failure {
47
47
  $color: $punch;
48
48
  }
@@ -54,9 +54,9 @@
54
54
  $margin-top: 15px;
55
55
  $margin-bottom: 20px;
56
56
  } @else if $size == large {
57
- $padding: 10px 24px;
57
+ $padding: 12px 24px;
58
58
  $margin-top: 15px;
59
- $margin-bottom: 23px;
59
+ $margin-bottom: 19px;
60
60
  } @else if $size == x-large {
61
61
  $font-size: 17px;
62
62
  $padding: 14px 26px;