ratchet_design 0.1.7 → 0.1.8

Sign up to get free protection for your applications and to get access to all the features.
Files changed (35) 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/core.js +2 -0
  5. data/app/assets/javascripts/ratchet/enhancement/_swap.js +71 -64
  6. data/app/assets/javascripts/ratchet/enhancement/lightbox.js +256 -0
  7. data/app/assets/javascripts/ratchet/enhancement/loader.js +4 -4
  8. data/app/assets/javascripts/ratchet/shim/classlist.js +1 -1
  9. data/app/assets/javascripts/ratchet/shim/scope.js +94 -0
  10. data/app/assets/stylesheets/ratchet/_core.scss +2 -1
  11. data/app/assets/stylesheets/ratchet/base/_button.scss +1 -1
  12. data/app/assets/stylesheets/ratchet/base/_form.scss +58 -38
  13. data/app/assets/stylesheets/ratchet/base/_text.scss +8 -8
  14. data/app/assets/stylesheets/ratchet/enhancement/_lightbox.scss +93 -0
  15. data/app/assets/stylesheets/ratchet/enhancement/_loader.scss +1 -1
  16. data/app/assets/stylesheets/ratchet/enhancement/_tooltip.scss +6 -1
  17. data/app/assets/stylesheets/ratchet/utility/_global.scss +1 -2
  18. data/app/helpers/ratchet/application_helper.rb +5 -0
  19. data/app/helpers/ratchet/form_helper.rb +140 -0
  20. data/app/views/layouts/ratchet/default.html.slim +2 -1
  21. data/app/views/shared/ratchet/_footer.html.slim +1 -1
  22. data/lib/ratchet_design/version.rb +1 -1
  23. data/lib/ratchet_design.rb +1 -0
  24. data/public/assets/ratchet/core-0.1.8.js +107 -0
  25. data/public/assets/ratchet/core-0.1.8.js.gz +0 -0
  26. data/public/assets/ratchet/core-0.1.8.map.json +1 -0
  27. data/public/assets/ratchet/{fonts-woff-0.1.7.css → fonts-woff-0.1.8.css} +0 -0
  28. data/public/assets/ratchet/{fonts-woff-0.1.7.css.gz → fonts-woff-0.1.8.css.gz} +0 -0
  29. data/public/assets/ratchet/{fonts-woff2-0.1.7.css → fonts-woff2-0.1.8.css} +0 -0
  30. data/public/assets/ratchet/{fonts-woff2-0.1.7.css.gz → fonts-woff2-0.1.8.css.gz} +0 -0
  31. metadata +42 -10
  32. data/app/assets/javascripts/ratchet/enhancement/_lightbox.js +0 -93
  33. data/public/assets/ratchet/core-0.1.7.js +0 -105
  34. data/public/assets/ratchet/core-0.1.7.js.gz +0 -0
  35. data/public/assets/ratchet/core-0.1.7.map.json +0 -1
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 2f213ad4e1d289b998aa6f4fd5ba8961038cdcac
4
- data.tar.gz: 364fa530c27aafedc50050294a22506e57fc33a6
3
+ metadata.gz: 9c1131fa26386e461f0d5a3bea05a5438a954038
4
+ data.tar.gz: 8fa3b4cf22a717aefc7d9fb95c0bcadf4ae43ab3
5
5
  SHA512:
6
- metadata.gz: fadf5e966216414e75b5d3da96bb7d9d1b9c1de299f3875cc54f8321d599fefd0297a9d562c014140d461691a7885d73d3a7117e307f15b1c7d5697b8965ea49
7
- data.tar.gz: 4640eb5f6600adbd2f3b874a9bcd23e2e9e644aad0882efd406565ef94c1b4a9d17cf795a7e18c62b7674a5f6f84fd78e19390b52da08e06f1faef6cde7fc479
6
+ metadata.gz: 43ad5b3a613966848c28df7cd19cd20e09e0014a9fde5688cdf6cbb1b90e03b08a1127e3bef67de878990071d135c3383f5d276a10b2819b7340cf88a43f4757
7
+ data.tar.gz: faa591cf3997ebfed5d8026113b9ce8d21b1ed7fc2ffa86e787e722357623b4d9715af8617dbe770c612255ee186c47730c10198b03eaaec6f4275d93d75cb51
Binary file
@@ -0,0 +1 @@
1
+ <svg viewBox="0 0 32 32" xmlns="http://www.w3.org/2000/svg" fill-rule="evenodd" clip-rule="evenodd"><path d="M11.251 24.382l-4.844-8.414 4.844-8.35h9.562l4.78 8.35-4.78 8.414h-9.562zM16.103 0c.781.008 1.56.067 2.331.185 1.431.218 2.83.633 4.149 1.23 1.698.768 3.258 1.836 4.592 3.139 1.263 1.233 2.321 2.674 3.117 4.25.664 1.315 1.144 2.722 1.421 4.169.326 1.698.374 3.449.145 5.162-.218 1.631-.69 3.226-1.396 4.712-.812 1.712-1.931 3.275-3.287 4.599-1.427 1.393-3.112 2.518-4.949 3.295-1.933.818-4.024 1.245-6.123 1.258-2.102.014-4.202-.387-6.149-1.183-1.847-.755-3.547-1.86-4.991-3.237-1.371-1.307-2.508-2.856-3.341-4.557-.722-1.475-1.214-3.062-1.452-4.687-.251-1.711-.224-3.463.08-5.165.266-1.484.744-2.929 1.415-4.279.786-1.581 1.836-3.029 3.092-4.27 1.302-1.287 2.824-2.35 4.484-3.125 1.309-.612 2.701-1.043 4.127-1.28.768-.127 1.544-.196 2.323-.213l.412-.003zm-.194 1.913c-.688.006-1.374.058-2.054.162-1.259.192-2.49.557-3.649 1.082-1.419.642-2.729 1.521-3.862 2.589-1.152 1.086-2.12 2.364-2.851 3.768-.611 1.174-1.054 2.435-1.311 3.734-.302 1.522-.35 3.096-.145 4.634.188 1.406.591 2.782 1.192 4.068.706 1.512 1.684 2.895 2.872 4.069 1.249 1.234 2.727 2.233 4.34 2.927 1.695.73 3.531 1.117 5.377 1.14 1.852.024 3.705-.317 5.425-1.008 1.631-.655 3.134-1.619 4.413-2.824 1.235-1.164 2.258-2.549 3.005-4.073.635-1.298 1.068-2.693 1.277-4.123.225-1.537.197-3.111-.087-4.638-.241-1.303-.669-2.571-1.266-3.754-.701-1.388-1.633-2.658-2.746-3.744-1.113-1.087-2.406-1.99-3.812-2.657-1.147-.545-2.369-.932-3.621-1.148-.675-.116-1.357-.18-2.042-.2l-.455-.004z" /></svg>
@@ -28,6 +28,7 @@ var loader = require( './enhancement/loader' );
28
28
  var waypoints = require( './enhancement/waypoints' );
29
29
  var notice = require( './enhancement/notice' );
30
30
  var sticky = require( './enhancement/sticky' );
31
+ var lightbox = require( './enhancement/lightbox' );
31
32
  var esvg = require( './_svg' );
32
33
  // var swap = require( './enhancement/swap' );
33
34
 
@@ -72,6 +73,7 @@ window.ratchet = module.exports = {
72
73
  waypoints : waypoints,
73
74
  notice : notice,
74
75
  sticky : sticky,
76
+ lightbox : lightbox,
75
77
  esvg : esvg,
76
78
  event : event
77
79
  }
@@ -1,14 +1,12 @@
1
1
  /**
2
- * Swap 0.0.2
3
- * Compose swappable element module
2
+ * Swap.js 0.0.2
4
3
  * @author Kyle Foster (@hkfoster)
5
4
  * @license MIT
6
5
  **/
7
6
 
8
7
  // Dependencies
9
- var ScrollTo = require('../utility/scroll_to')
8
+ var matches = require( '../utility/matches' );
10
9
 
11
- // Transport
12
10
  ;( function( root, factory ) {
13
11
  if ( typeof define === 'function' && define.amd ) {
14
12
  define( factory );
@@ -21,100 +19,109 @@ var ScrollTo = require('../utility/scroll_to')
21
19
 
22
20
  'use strict';
23
21
 
24
- var triggers = document.querySelectorAll( '.swap-trigger' );
22
+ // Overridable defaults
23
+ var defaults = {
24
+ activeClass : 'open',
25
+ assignHash : false
26
+ };
25
27
 
26
- if ( triggers.length ) {
28
+ // Public API function
29
+ var swap = function( element, settings ) {
27
30
 
28
- // Assignment
29
- var location = window.location.hash;
31
+ // Parameter variables
32
+ var options = Object.assign( {}, defaults, settings ),
33
+ selectors = document.querySelectorAll( element ),
34
+ location;
30
35
 
31
- // Swap function
32
- var swap = function( trigger, target ) {
36
+ // Only run if selector exists
37
+ if ( !selectors.length ) return false;
33
38
 
34
- // Find all current `selected` class elements
35
- var currentSelection = document.querySelectorAll( '.selected' );
39
+ // Attach window load listener (if hashes are turned on)
40
+ if ( options.assignHash ) window.addEventListener( 'load', hashHandler, false );
36
41
 
37
- // And deselect them
38
- for ( var i = 0; i < currentSelection.length; i++ ) {
39
- currentSelection[ i ].classList.remove( 'selected' );
40
- }
41
-
42
- // Select our new elements
43
- trigger.classList.add( 'selected' );
44
- target.classList.add( 'selected' );
45
- };
42
+ for ( var i = 0; i < selectors.length; i++ ) {
46
43
 
47
- // Get current window hash
48
- var getHash = function() {
49
- return location.split( '#' )[ 1 ];
50
- };
44
+ // Attach click event listener
45
+ selectors[ i ].addEventListener( 'click', clickHandler, false );
51
46
 
52
- // Get link target hash
53
- var getLinkTarget = function( link ) {
54
- return link.href.split( '#' )[ 1 ];
55
- };
47
+ }
56
48
 
57
- // Hash check function
58
- var hashCheck = function( event ) {
49
+ // Window hash handler function
50
+ function hashHandler() {
59
51
 
60
- // If no hash
61
- if ( !location ) {
52
+ // Cache window hash
53
+ var windowHash = window.location.hash;
62
54
 
63
- // Assign first element(s) variables
64
- var firstTrigger = document.querySelector( '.swap-trigger' ),
65
- firstTarget = document.querySelector( '.swappable' );
55
+ // If no window hash exists
56
+ if ( !windowHash ) {
66
57
 
67
- // And select them
68
- swap( firstTrigger, firstTarget );
58
+ // Perform swap function on selector’s first instance of anchor link
59
+ swap( selector.querySelector( 'a[href^="#"]' ) );
69
60
 
70
61
  // Otherwise
71
62
  } else {
72
63
 
73
64
  // Stop default anchor tag jump
74
- ScrollTo(0, 0);
75
-
76
- // Assign appropriate element(s) variables
77
- var loadedTarget = document.querySelector( '#' + getHash() ),
78
- loadedTrigger = document.querySelector('[href="#' + getHash() + '"]' );
65
+ window.scrollTo( 0, 0 );
79
66
 
80
- // And select them
81
- swap( loadedTrigger, loadedTarget );
67
+ // Perform swap function on appropriate anchor link
68
+ swap( selector.querySelector( 'a[href="' + windowHash + '"]' ) );
82
69
 
83
70
  }
84
71
 
85
- };
72
+ }
86
73
 
87
74
  // Click handler function
88
- var clickHandler = function( event ) {
75
+ function clickHandler( event ) {
76
+
77
+ // Only run on anchor links
78
+ if ( !matches( event.target, 'a[href^="#"]' ) ) return false;
89
79
 
90
80
  // Prevent default behavior
91
- event.stopPropagation();
92
81
  event.preventDefault();
93
82
 
94
- // Local assignment
95
- var triggerElem = this,
96
- linkTarget = getLinkTarget( triggerElem ),
97
- targetElem = document.querySelector( '#' + linkTarget );
83
+ // Only run if not clicking on currently active element
84
+ if ( event.target.classList.contains( options.activeClass ) ) return false;
98
85
 
99
- // Select the appropriate elements
100
- swap ( triggerElem, targetElem );
86
+ // Swap out the appropriate element
87
+ swap( event.target );
101
88
 
102
- // Replace the hash
103
- history.replaceState( null, '', '#' + linkTarget );
89
+ }
104
90
 
105
- };
91
+ // Where the magic happens
92
+ function swap( target ) {
106
93
 
107
- // Run hash check on window load
108
- window.addEventListener( 'load', hashCheck, false );
94
+ // Scoped variables
95
+ var newAnchor = target,
96
+ oldAnchor = newAnchor.parentNode.querySelector( '.' + options.activeClass ),
97
+ newTarget = document.querySelector( '#' + newAnchor.href.split( '#' )[ 1 ] ),
98
+ oldTarget = newTarget.parentNode.querySelector( ':scope > .' + options.activeClass );
109
99
 
110
- // Iterate over each swap trigger
111
- for ( var i = 0; i < triggers.length; i++ ) {
100
+ // If an old active anchor exists, deactivate it
101
+ if ( oldAnchor ) oldAnchor.classList.remove( options.activeClass );
112
102
 
113
- // And attach our click listener
114
- triggers[ i ].addEventListener( 'click', clickHandler, false );
103
+ // And activate the new achor
104
+ newAnchor.classList.add( options.activeClass );
105
+
106
+ // If an old active element exists, deactivate it
107
+ if ( oldTarget ) oldTarget.classList.remove( options.activeClass );
108
+
109
+ // And activate the new element
110
+ newTarget.classList.add( options.activeClass );
111
+
112
+ // Then replace the hash (if hashes are turned on)
113
+ if ( options.assignHash ) history.pushState( null, '', '#' + newAnchor.href.split( '#' )[ 1 ] );
115
114
 
116
115
  }
117
116
 
118
- }
117
+ };
118
+
119
+ // Public API
120
+ return swap;
119
121
 
120
122
  });
123
+
124
+ // Instantiation
125
+ swap( '.swap-nav', {
126
+ activeClass : 'selected'
127
+ });
@@ -0,0 +1,256 @@
1
+ /**
2
+ * Lightbox 0.0.1
3
+ * A simple lightbox module
4
+ * @author Kyle Foster (@hkfoster)
5
+ * @license MIT
6
+ */
7
+
8
+ // Dependencies
9
+ var loader = require( '../enhancement/loader' ),
10
+ timeout = require( '../utility/timeout' );
11
+
12
+ // Public API function
13
+ var lightbox = function( element, settings ) {
14
+
15
+ // Overridable defaults
16
+ var defaults = {
17
+ initWidth : '700px'
18
+ },
19
+
20
+ // Main variables
21
+ options = Object.assign( {}, defaults, settings ),
22
+ selectors = document.querySelectorAll( element ),
23
+ widthQuery = window.matchMedia( '(min-width: ' + options.initWidth + ')' ),
24
+ spinner = loader({ loadingMessage: 'Loading image', failureMessage : 'No image found' }),
25
+ docBody = document.body,
26
+ tempImg,
27
+ active;
28
+
29
+ // Only run when selectors exist
30
+ if ( !selectors.length ) return false;
31
+
32
+ // Call media query listener function explicitly at run time
33
+ queryHandler( widthQuery );
34
+
35
+ // Attach media query listener
36
+ widthQuery.addListener( queryHandler );
37
+
38
+ // Media query handler function
39
+ function queryHandler( condition ) {
40
+
41
+ // If media query matches init width
42
+ if ( condition.matches ) {
43
+
44
+ // Initialize lightbox
45
+ init();
46
+
47
+ // Otherwise
48
+ } else {
49
+
50
+ // Terminate lightbox
51
+ terminate();
52
+
53
+ }
54
+
55
+ }
56
+
57
+ // Initialize lightbox function
58
+ function init() {
59
+
60
+ // Turn on active state
61
+ active = true;
62
+
63
+ // If a lightbox has already been initiated
64
+ if ( document.querySelector( '.lightbox' ) ) {
65
+
66
+ // Loop over lightbox images
67
+ for ( var i = 0; i < selectors.length; i++ ) {
68
+
69
+ // And activate their anchor links
70
+ selectors[ i ].parentNode.setAttribute( 'data-open-lightbox', '' );
71
+
72
+ }
73
+
74
+ // Then kick rocks
75
+ return false;
76
+
77
+ }
78
+
79
+ // Insert lightbox container into body
80
+ docBody.insertAdjacentHTML( 'afterbegin', '<aside class="lightbox"><figure><img src="" alt=""><button data-close-lightbox></button></figure></aside>' );
81
+
82
+ // Cache temporary placeholder image
83
+ tempImg = document.querySelector( '.lightbox img' );
84
+
85
+ // Loop over lightbox images
86
+ for ( var j = 0; j < selectors.length; j++ ) {
87
+
88
+ // Cache current img selector
89
+ var selector = selectors[ j ],
90
+ imgSrc = selector.src,
91
+ dataSrc = selector.getAttribute( 'data-lightbox' ),
92
+ lightboxSrc = dataSrc !== '' ? dataSrc : imgSrc;
93
+
94
+ // If thumbnail size is passed and image is in Cloudinary
95
+ if ( selector.hasAttribute( 'data-thumb-size' ) && imgSrc.split( '//' )[ 1 ].substring( 0, 18 ) === 'res.cloudinary.com' ) {
96
+
97
+ // Split img src url
98
+ var splitSrc = imgSrc.split( 'upload' );
99
+
100
+ // Switch out image src for Cloudinary-resized src
101
+ selector.src = splitSrc[ 0 ] + 'upload/w_' + selector.getAttribute( 'data-thumb-size' ) + splitSrc[ 1 ];
102
+
103
+ }
104
+
105
+ // Wrap the image in a `data-lightbox` anchor tag
106
+ selector.insertAdjacentHTML( 'beforebegin', '<a data-open-lightbox href="' + lightboxSrc + '"></a>' );
107
+ selector.previousSibling.insertAdjacentElement( 'afterbegin', selector );
108
+
109
+ }
110
+
111
+ // Attach click listener
112
+ docBody.addEventListener( 'click', clickHandler, false );
113
+
114
+ }
115
+
116
+ // Terminate lightbox function
117
+ function terminate() {
118
+
119
+ // Turn off active state
120
+ active = false;
121
+
122
+ // If no lightbox exists, fugetaboutit … capisce?
123
+ if ( !document.querySelector( '.lightbox' ) ) return false;
124
+
125
+ // Remove lightbox classes from body
126
+ docBody.classList.remove( 'lightbox-active' );
127
+
128
+ // Loop over lightbox images
129
+ for ( var i = 0; i < selectors.length; i++ ) {
130
+
131
+ // And inactivate their anchor links
132
+ selectors[ i ].parentNode.setAttribute( 'data-open-lightbox', 'inactive' );
133
+
134
+ }
135
+
136
+ }
137
+
138
+ // Hide lightbox function
139
+ function hideLightbox() {
140
+
141
+ // And hide the spinner
142
+ spinner.hide();
143
+
144
+ // Remove active lightbox class from body
145
+ docBody.classList.remove( 'lightbox-active' );
146
+
147
+ // Remove loaded class from lightbox image
148
+ tempImg.classList.remove( 'loaded' );
149
+
150
+ // Reset lightbox image source
151
+ tempImg.src = '';
152
+
153
+ }
154
+
155
+ // Image load pending function
156
+ function loadPending( target ) {
157
+
158
+ // Show loading icon
159
+ spinner.show( 'pending' );
160
+
161
+ // Set temp image source appropriately
162
+ tempImg.src = target.parentNode.href;
163
+
164
+ // Add `lightbox-active` class to body
165
+ docBody.classList.add( 'lightbox-active' );
166
+
167
+ }
168
+
169
+ // Image load success function
170
+ function loadSuccess() {
171
+
172
+ // Hide the spinner
173
+ spinner.hide();
174
+
175
+ // Bada bing, bada boom
176
+ tempImg.classList.add( 'loaded' );
177
+
178
+ }
179
+
180
+ // Image load failure function
181
+ function loadFailure( event ) {
182
+
183
+ // Prevent any further attempts to open image
184
+ document.querySelector( 'a[href="' + event.target.src + '"]' ).setAttribute( 'data-open-lightbox', 'inactive' );
185
+
186
+ // Wait a second…
187
+ timeout.set( function() {
188
+
189
+ // Show spinner failure state
190
+ spinner.show( 'failure' );
191
+
192
+ }, 1000 );
193
+
194
+ // Wait a couple more seconds…
195
+ timeout.set( function() {
196
+
197
+ // Hide the lightbox
198
+ hideLightbox();
199
+
200
+ }, 2500 );
201
+
202
+ // Remove image load event listener
203
+ tempImg.removeEventListener( 'load', loadSuccess, false );
204
+
205
+ // Remove image error event listener
206
+ tempImg.removeEventListener( 'error', loadFailure, false );
207
+ }
208
+
209
+ // Click handler function
210
+ function clickHandler( event ) {
211
+
212
+ // Only run on `data-open-lightbox` links
213
+ if ( event.target.parentNode.hasAttribute( 'data-open-lightbox' ) ) {
214
+
215
+ // Prevent default behavior
216
+ event.preventDefault();
217
+
218
+ // Abort if lightbox and/or link is no longer active
219
+ if ( !active || event.target.parentNode.getAttribute( 'data-open-lightbox' ) === 'inactive' ) return false;
220
+
221
+ // Load lightbox image
222
+ loadPending( event.target );
223
+
224
+ // If it has loaded successfully
225
+ if ( tempImg.complete ) {
226
+
227
+ // Kick off image load success function
228
+ loadSuccess();
229
+
230
+ // Otherwise
231
+ } else {
232
+
233
+ // Listen for image load event
234
+ tempImg.addEventListener( 'load', loadSuccess, false );
235
+
236
+ // Listen for image error event
237
+ tempImg.addEventListener( 'error', loadFailure, false );
238
+
239
+ }
240
+
241
+ }
242
+
243
+ // Run on `close lightbox` links
244
+ if ( event.target.hasAttribute( 'data-close-lightbox') || event.target.classList.contains( 'lightbox' ) ) {
245
+
246
+ // Hide the lightbox
247
+ hideLightbox();
248
+
249
+ }
250
+
251
+ }
252
+
253
+ };
254
+
255
+ // Public API
256
+ module.exports = lightbox;
@@ -30,26 +30,26 @@ var loader = function( settings ) {
30
30
  var element = document.querySelector( 'div.' + options.loaderClass );
31
31
 
32
32
  // Show loader icon function
33
- var show = function( state ) {
33
+ var show = function( state, message ) {
34
34
 
35
35
  // Loader pending state
36
36
  if ( state === 'pending' ) {
37
37
 
38
- element.textContent = options.loadingMessage;
38
+ element.textContent = message || options.loadingMessage;
39
39
  element.classList.remove( options.successClass, options.failureClass );
40
40
  element.classList.add( options.loadingClass );
41
41
 
42
42
  // Loader failure state
43
43
  } else if ( state === 'failure' ) {
44
44
 
45
- element.textContent = options.failureMessage;
45
+ element.textContent = message || options.failureMessage;
46
46
  element.classList.remove( options.loadingClass );
47
47
  element.classList.add( options.failureClass );
48
48
 
49
49
  // Loader success state
50
50
  } else if ( state === 'success' ) {
51
51
 
52
- element.textContent = options.successMessage;
52
+ element.textContent = message || options.successMessage;
53
53
  element.classList.remove( options.loadingClass );
54
54
  element.classList.add( options.successClass );
55
55
 
@@ -1,5 +1,5 @@
1
1
  /**
2
- * ClassList
2
+ * ClassList polyfill
3
3
  * Cross-browser full element.classList implementation
4
4
  * @source http://purl.eligrey.com/github/classList.js/blob/master/classList.js
5
5
  * @author Eli Grey - http://eligrey.com
@@ -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
+ })();
@@ -18,4 +18,5 @@
18
18
  @import 'enhancement/notice';
19
19
  @import 'enhancement/hero';
20
20
  @import 'enhancement/contrast-section';
21
- @import 'enhancement/tooltip';
21
+ @import 'enhancement/tooltip';
22
+ @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
  }