ratchet_design 0.1.0 → 0.1.1

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: 89650100df2404d22f67c7f009684726963eb6d7
4
- data.tar.gz: ea6180540d9a955e87377e2585b79d88ddcf3ad2
3
+ metadata.gz: 05e52118e10d1100b0d48fc879d875a872586559
4
+ data.tar.gz: a4b56310564057e3446f8b8d16c7a39f7d728b0c
5
5
  SHA512:
6
- metadata.gz: 139f8966dc358cb3e6b245039979db3f4ecc12dab5cb9a8278a5fe3c87bec82a5f9a8459636e1be57a18677cb8435228a4cf83570aeb9bf0e70fefc5c52b2b5d
7
- data.tar.gz: dba992c64cc3f07799c2a5dabb3bf413321c4d8efc928a06b1cb76e9b7cb1a249a31014e6cfe967ace0f9078772d9b64bd210776a9cf3fc7320f1156dcfacfb4
6
+ metadata.gz: 44157e35a90e6263f377a3477956cce463aba8a69d4a207af25cfeb30dab9d2c2298e02ee61dc4228533242c75d3cc3e90127d55c8594799e5a13db8f52e50b3
7
+ data.tar.gz: 6e94d09f3ea42db5ac4c61775d39f65d6fa3dfe666a40cba15959bf4bc493879f733288b70bf4b31ae74b18378d24359192e166c53494711e7c8d3a788de7496
@@ -5,19 +5,24 @@
5
5
  * @license MIT (http://www.opensource.org/licenses/mit-license.php/)
6
6
  **/
7
7
 
8
+ // Dependencies
9
+ var matches = require( '../utility/matches' );
10
+
8
11
  // Public API function
9
12
  var mobileMenu = function( element, settings ) {
10
13
 
11
14
  // Overridable defaults
12
15
  var defaults = {
13
- initWidth : '700px',
14
- openClass : 'menu-open'
15
- };
16
+ initWidth : '700px',
17
+ openClass : 'menu-open',
18
+ menuButton : '.mobile-menu-button'
19
+ },
16
20
 
17
21
  // Scoped variables
18
- var options = Object.assign( {}, defaults, settings ),
19
- selector = document.querySelector( element ),
20
- widthQuery = window.matchMedia( '(max-width: ' + options.initWidth + ')' );
22
+ options = Object.assign( {}, defaults, settings ),
23
+ selector = document.querySelector( element ),
24
+ widthQuery = window.matchMedia( '(max-width: ' + options.initWidth + ')' ),
25
+ docBody = document.body;
21
26
 
22
27
  // Attach listeners
23
28
  if ( selector ) {
@@ -33,9 +38,16 @@ var mobileMenu = function( element, settings ) {
33
38
  // Click handler function
34
39
  function clickHandler( event ) {
35
40
 
36
- event.preventDefault();
41
+ // Combine element selector with anchor links
42
+ var toggleSelector = options.menuButton + ', .' + options.openClass + ' ' + element + ' a[href^="#"]';
43
+
44
+ // Only run on menu button
45
+ if ( matches( event.target, toggleSelector ) ) {
37
46
 
38
- document.body.classList.toggle( options.openClass );
47
+ // Toggle body class
48
+ docBody.classList.toggle( options.openClass );
49
+
50
+ }
39
51
 
40
52
  }
41
53
 
@@ -46,28 +46,31 @@ var validation = function( element, settings ) {
46
46
  // Scoped variables
47
47
  var element = event.target,
48
48
  minWords = element.dataset.minWords,
49
+ maxWords = element.dataset.maxWords,
49
50
  indicator = getClosest( element, 'label' ) || element,
50
51
  validity;
51
52
 
53
+ // If element only contains whitespace, strip value
54
+ if ( element.value && !element.value.replace( /\s/g, '' ).length ) {
55
+ element.value = '';
56
+ }
57
+
52
58
  // Remove pre-existing validation message
53
59
  messageHandler( 'hide', element );
54
60
 
55
61
  // If element has `data-min-words` attribute
56
62
  if ( minWords ) {
57
63
 
58
- // And it has a value that is less than the set minimum
59
- if ( element.value && wordCount( element.value ) < minWords ) {
60
-
61
- // Set a custom error message
62
- element.setCustomValidity( 'Please write at least ' + minWords + ' words.' );
64
+ // Run respective validation function
65
+ validateWords( 'min', element, minWords );
63
66
 
64
- // Otherwise
65
- } else {
67
+ }
66
68
 
67
- // Default to normal error messaging
68
- element.setCustomValidity( '' );
69
+ // If element has `data-min-words` attribute
70
+ if ( maxWords ) {
69
71
 
70
- }
72
+ // Run respective validation function
73
+ validateWords( 'max', element, maxWords );
71
74
 
72
75
  }
73
76
 
@@ -103,7 +106,7 @@ var validation = function( element, settings ) {
103
106
  function submissionHandler( event ) {
104
107
 
105
108
  // Only run on submission
106
- if ( !matches( event.target, 'input[type=submit], button:not([type=button])' ) ) return;
109
+ if ( !matches( event.target, 'input[type=submit], button[type=submit]' ) ) return;
107
110
 
108
111
  // Scoped variables
109
112
  var invalidForm = getClosest( event.target, 'form' ),
@@ -224,6 +227,36 @@ var validation = function( element, settings ) {
224
227
 
225
228
  }
226
229
 
230
+ // Min- or max-words validation function
231
+ function validateWords( type, element, goal ) {
232
+
233
+ // Defaults settings to min-words
234
+ var value = element.value,
235
+ condition = wordCount( value ) < goal,
236
+ verbiage = 'at least ';
237
+
238
+ // Overwrite defaults in case of max-words
239
+ if ( type === 'max' ) {
240
+ condition = wordCount( value ) > goal;
241
+ verbiage = 'no more than ';
242
+ }
243
+
244
+ // If value exists and it meets invalid condition
245
+ if ( value && condition ) {
246
+
247
+ // Set a custom error message
248
+ element.setCustomValidity( 'Please write ' + verbiage + goal + ' words.' );
249
+
250
+ // Otherwise
251
+ } else {
252
+
253
+ // Default to normal error messaging
254
+ element.setCustomValidity( '' );
255
+
256
+ }
257
+
258
+ }
259
+
227
260
  };
228
261
 
229
262
  // Public API
@@ -1,74 +1,77 @@
1
1
  // Shim modules
2
- require( './shim/classlist' );
2
+ require( './shim/classlist' );
3
3
  require( './shim/object.assign' );
4
4
 
5
5
  // Utility modules
6
- var loadFont = require( './utility/load_font' );
7
- var fullStop = require( './utility/full_stop' );
8
- var unhover = require( './utility/unhover' );
9
- var throttle = require( './utility/throttle' );
10
- var loadScript = require( './utility/load_script' );
11
- var fromTop = require( './utility/from_top' );
12
- var scrollTo = require( './utility/scroll_to' );
13
- var matches = require( './utility/matches' );
14
- var getClosest = require( './utility/get_closest' );
15
- var getNext = require( './utility/get_next' );
16
- var wordCount = require( './utility/word_count' );
6
+ var loadFont = require( './utility/load_font' );
7
+ var fullStop = require( './utility/full_stop' );
8
+ var unhover = require( './utility/unhover' );
9
+ var throttle = require( './utility/throttle' );
10
+ var loadScript = require( './utility/load_script' );
11
+ var fromTop = require( './utility/from_top' );
12
+ var scrollTo = require( './utility/scroll_to' );
13
+ var matches = require( './utility/matches' );
14
+ var getClosest = require( './utility/get_closest' );
15
+ var getNext = require( './utility/get_next' );
16
+ var wordCount = require( './utility/word_count' );
17
17
  var compileData = require( './utility/compile_data' );
18
- var timeout = require( './utility/timeout' );
18
+ var timeout = require( './utility/timeout' );
19
19
 
20
20
  // Base modules
21
21
  var mobileMenu = require( './base/mobilemenu' );
22
- var form = require( './base/form' );
22
+ var form = require( './base/form' );
23
23
  var validation = require( './base/validation' );
24
24
 
25
25
  // Enhancement modules
26
- var loader = require( './enhancement/loader' );
26
+ var loader = require( './enhancement/loader' );
27
27
  var waypoints = require( './enhancement/waypoints' );
28
- var notice = require( './enhancement/notice' );
29
- var sticky = require( './enhancement/sticky' );
30
- var esvg = require( './_svg' );
31
- // var swap = require( './enhancement/swap' );
28
+ var notice = require( './enhancement/notice' );
29
+ var sticky = require( './enhancement/sticky' );
30
+ var esvg = require( './_svg' );
31
+ // var swap = require( './enhancement/swap' );
32
32
 
33
33
  // Vendor modules
34
- var event = require( 'compose-event' );
34
+ var event = require( 'compose-event' );
35
35
  var highlighter = require( 'compose-code-highlighter' );
36
- require( 'codemirror/mode/htmlmixed/htmlmixed' );
37
- require( 'codemirror/mode/slim/slim' );
38
- require( 'codemirror/mode/javascript/javascript' );
39
- require( 'codemirror/mode/css/css' );
40
- require( 'codemirror/mode/sql/sql' );
41
- require( 'codemirror/mode/php/php' );
42
- require( 'codemirror/mode/ruby/ruby' );
43
- require( 'codemirror/mode/shell/shell' );
44
- require( 'codemirror/mode/go/go' );
45
- require( 'codemirror/mode/python/python' );
46
- require( 'codemirror/mode/yaml/yaml' );
47
- require( 'codemirror/mode/clike/clike' );
48
- require( 'codemirror/addon/runmode/runmode' );
49
- require( 'codemirror/addon/edit/matchbrackets' );
36
+ require( 'codemirror/mode/htmlmixed/htmlmixed' );
37
+ require( 'codemirror/mode/slim/slim' );
38
+ require( 'codemirror/mode/javascript/javascript' );
39
+ require( 'codemirror/mode/css/css' );
40
+ require( 'codemirror/mode/sql/sql' );
41
+ require( 'codemirror/mode/php/php' );
42
+ require( 'codemirror/mode/ruby/ruby' );
43
+ require( 'codemirror/mode/shell/shell' );
44
+ require( 'codemirror/mode/go/go' );
45
+ require( 'codemirror/mode/python/python' );
46
+ require( 'codemirror/mode/yaml/yaml' );
47
+ require( 'codemirror/mode/clike/clike' );
48
+ require( 'codemirror/addon/runmode/runmode' );
49
+ require( 'codemirror/addon/edit/matchbrackets' );
50
50
 
51
51
  // Public API object
52
52
  window.ratchet = module.exports = {
53
- esvg : esvg,
54
- event : event,
55
53
  loadFont : loadFont,
54
+ fullStop : fullStop,
55
+ unhover : unhover,
56
56
  throttle : throttle,
57
57
  loadScript : loadScript,
58
+ fromTop : fromTop,
58
59
  scrollTo : scrollTo,
59
- wordCount : wordCount,
60
- getNext : getNext,
60
+ matches : matches,
61
61
  getClosest : getClosest,
62
+ getNext : getNext,
63
+ wordCount : wordCount,
62
64
  compileData : compileData,
63
65
  timeout : timeout,
64
66
  mobileMenu : mobileMenu,
65
67
  form : form,
66
68
  validation : validation,
67
69
  loader : loader,
68
- // swap : swap,
69
70
  waypoints : waypoints,
70
71
  notice : notice,
71
- sticky : sticky
72
+ sticky : sticky,
73
+ esvg : esvg,
74
+ event : event
72
75
  }
73
76
 
74
77
  // Default events instantiation
@@ -18,7 +18,6 @@ var waypoints = function( elements, settings ) {
18
18
  // Overridable defaults
19
19
  var defaults = {
20
20
  initWidth : '700px',
21
- navigation : '.secondary',
22
21
  activeAnchor : 'active',
23
22
  elemOffset : 0,
24
23
  showLandmarks : false,
@@ -40,8 +39,9 @@ var waypoints = function( elements, settings ) {
40
39
  } else {
41
40
 
42
41
  // Scoped variables
43
- var navigation = document.querySelector( options.navigation ),
44
- widthQuery = window.matchMedia( '(min-width: ' + options.initWidth + ')' ),
42
+ var initWidth = options.initWidth ? options.initWidth : '0px',
43
+ widthQuery = window.matchMedia( '(min-width: ' + initWidth + ')' ),
44
+ docBody = document.body,
45
45
  coordinates = [],
46
46
  oldActiveItem,
47
47
  windowHash,
@@ -100,7 +100,7 @@ var waypoints = function( elements, settings ) {
100
100
  window.addEventListener( 'optimizedScroll', scrollHandler, false );
101
101
 
102
102
  // Click function listener
103
- navigation.addEventListener( 'click', clickHandler, false );
103
+ docBody.addEventListener( 'click', clickHandler, false );
104
104
 
105
105
  // Call hash change listener function explicitly at run time
106
106
  hashHandler();
@@ -118,7 +118,7 @@ var waypoints = function( elements, settings ) {
118
118
  window.removeEventListener( 'optimizedScroll', scrollHandler, false );
119
119
 
120
120
  // Remove click listener
121
- navigation.removeEventListener( 'click', clickHandler, false );
121
+ docBody.removeEventListener( 'click', clickHandler, false );
122
122
 
123
123
  // Remove hash change listener
124
124
  window.removeEventListener( 'hashchange', hashHandler, false );
@@ -131,7 +131,7 @@ var waypoints = function( elements, settings ) {
131
131
  function resizeHandler() {
132
132
 
133
133
  // Update document height variable
134
- docHeight = document.body.scrollHeight;
134
+ docHeight = docBody.scrollHeight;
135
135
 
136
136
  // Update window height variable
137
137
  winHeight = window.innerHeight;
@@ -200,13 +200,13 @@ var waypoints = function( elements, settings ) {
200
200
  if ( newActiveItem === oldActiveItem ) return false;
201
201
 
202
202
  // Update active link
203
- activeLink = navigation.querySelector( 'a[href="#' + newActiveItem + '"]' );
203
+ activeLink = docBody.querySelector( 'a[href="#' + newActiveItem + '"]' );
204
204
 
205
205
  // If no active link is found, abort
206
206
  if ( !activeLink ) return false;
207
207
 
208
208
  // And enable navigation item
209
- activate( navigation, activeLink, options.activeAnchor );
209
+ activate( activeLink, options.activeAnchor );
210
210
 
211
211
  // If landmarks are turned on
212
212
  if ( options.showLandmarks === true ) {
@@ -215,7 +215,7 @@ var waypoints = function( elements, settings ) {
215
215
  landmark = getClosest( activeLink, options.landmarkSelector );
216
216
 
217
217
  // Enable active landmark
218
- activate( navigation, landmark, options.activeLandmark );
218
+ activate( landmark, options.activeLandmark );
219
219
 
220
220
  }
221
221
 
@@ -229,12 +229,12 @@ var waypoints = function( elements, settings ) {
229
229
  // Click handler function
230
230
  function clickHandler( event ) {
231
231
 
232
- // Prevent default behavior
233
- event.preventDefault();
234
-
235
232
  // Matches selector function init
236
233
  if ( matches( event.target, 'a[href^="#"]' ) ) {
237
234
 
235
+ // Prevent default behavior
236
+ event.preventDefault();
237
+
238
238
  // Travel to clicked target
239
239
  travel( event.target, 'click' );
240
240
 
@@ -268,7 +268,7 @@ var waypoints = function( elements, settings ) {
268
268
  if ( targetElement ) {
269
269
 
270
270
  // Enable new active navigation item
271
- activate( navigation, destination, options.activeAnchor );
271
+ activate( destination, options.activeAnchor );
272
272
 
273
273
  // Loop through coordinates
274
274
  for ( var i = 0; i < coordinates.length; i++ ) {
@@ -309,10 +309,10 @@ var waypoints = function( elements, settings ) {
309
309
  }
310
310
 
311
311
  // Link activation function
312
- function activate( container, selector, cls ) {
312
+ function activate( selector, cls ) {
313
313
 
314
314
  // Find currently active link
315
- var activeLink = container.querySelector( '.' + cls );
315
+ var activeLink = docBody.querySelector( '.' + cls );
316
316
 
317
317
  // And if it exists, disable it
318
318
  if ( activeLink ) activeLink.classList.remove( cls );
@@ -6,6 +6,25 @@
6
6
  * i. Utility
7
7
  * ------------------------------------- */
8
8
 
9
+ // Reset default <button> styles
10
+ @mixin button-reset() {
11
+ font: initial;
12
+ margin: initial;
13
+ padding: initial;
14
+ border: initial;
15
+ background: initial;
16
+ -moz-user-select: text;
17
+
18
+ &:focus {
19
+ outline: initial;
20
+ }
21
+
22
+ &::-moz-focus-inner {
23
+ padding: 0;
24
+ border: 0;
25
+ }
26
+ }
27
+
9
28
  // Resizable / colorable buttons
10
29
  @mixin button($color: $cerulean, $size: normal, $fill: on, $bevel: off) {
11
30
 
@@ -46,7 +65,7 @@
46
65
  }
47
66
 
48
67
  // Declarations
49
- display: inline-flex;
68
+ display: inline-block;
50
69
  width: auto;
51
70
  text-align: center;
52
71
  font-size: $font-size;
@@ -65,33 +65,46 @@ $breakpoint: 800px;
65
65
 
66
66
  // Shown on smaller screens
67
67
  @media (max-width: $breakpoint) {
68
+ @include button-reset;
68
69
  @include shown;
69
70
  z-index: 4;
70
71
  width: 36px;
71
72
  height: 36px;
72
- border-radius: 50%;
73
+ margin-left: auto;
73
74
  padding: 12px 10px;
75
+ border-radius: 50%;
76
+ transition: .5s transform;
74
77
  box-shadow: 0 0 0 1px $white;
75
- margin-left: auto;
78
+ background: transparent linear-gradient(to bottom, $white, $white) 50% 50% / 16px 2px no-repeat;
76
79
 
77
- span {
80
+ &:after,
81
+ &:before {
82
+ content: '';
78
83
  display: block;
79
84
  width: 16px;
80
85
  height: 2px;
81
86
  background: $white;
82
- transition: .5s opacity,
83
- .5s transform;
87
+ transition:
88
+ .5s opacity,
89
+ .5s transform;
84
90
  }
85
91
 
86
- span:nth-child(2) {
87
- margin: 3px 0;
92
+ &:after {
93
+ margin: 8px 0;
88
94
  }
89
95
 
90
96
  // Fancy animation when menu open
91
- .menu-open & span {
92
- &:nth-child(1) { transform: translateY(5px) rotate(-45deg); }
93
- &:nth-child(2) { transform: rotate(-45deg); opacity: 0; }
94
- &:nth-child(3) { transform: translateY(-5px) rotate(-135deg); }
97
+ .menu-open & {
98
+ transform: rotate(-45deg);
99
+
100
+ &:after {
101
+ transform: translateY(-5px) rotate(-90deg);
102
+ }
103
+
104
+ &:before {
105
+ transform: translateY(5px);
106
+ opacity: 0;
107
+ }
95
108
  }
96
109
  }
97
110
  }
@@ -191,10 +204,11 @@ header[role=banner] > nav[role=navigation] {
191
204
  position: fixed;
192
205
  top: 0;
193
206
  left: 0;
194
- bottom: 0;
195
- width: 100%;
207
+ width: 100vw;
208
+ height: 100vh;
196
209
  opacity: 0;
197
210
  z-index: 3;
211
+ align-items: center;
198
212
  flex-direction: column;
199
213
  justify-content: center;
200
214
  background: transparent;
@@ -218,7 +232,6 @@ header[role=banner] > nav[role=navigation] {
218
232
 
219
233
  // Main navigation
220
234
  header[role=banner] > nav[role=navigation] {
221
- left: 0;
222
235
  opacity: 1;
223
236
  transform: translateX(0);
224
237
  background: rgba($shark, .95);
@@ -120,7 +120,7 @@ $content-padding: vr(2); // 30px
120
120
 
121
121
  // Repeat a `$string` and number of `$times`
122
122
  @function repeat-string($string, $times) {
123
- $result: "";
123
+ $result: '';
124
124
 
125
125
  @for $i from 1 through $times {
126
126
  $result: $result + $string;
@@ -44,6 +44,11 @@ module Ratchet
44
44
  selector ? content_for(:selector) { selector } : content_for(:selector).presence
45
45
  end
46
46
 
47
+ # Consolidated page class output
48
+ def page_classes
49
+ request.path_parameters[:page].split("/").last + (selector ? " #{selector}" : "")
50
+ end
51
+
47
52
  # TODO:
48
53
  # sitemap "ignore"
49
54
 
@@ -40,7 +40,7 @@ html
40
40
  / Head
41
41
  = yield :head
42
42
 
43
- body class="#{request.path_parameters[:page].split('/').last} #{selector}"
43
+ body class="#{page_classes}"
44
44
 
45
45
  / Icon inclusion
46
46
  = render "shared/ratchet/icons"
@@ -8,9 +8,7 @@ header role="banner"
8
8
  - if content_for?(:top_nav)
9
9
 
10
10
  / Hamburger menu button
11
- a.mobile-menu-button href="#?"
12
- - 3.times do
13
- span
11
+ button.mobile-menu-button
14
12
 
15
13
  / Main site navigation
16
14
  nav role="navigation"
@@ -1,3 +1,3 @@
1
1
  module RatchetDesign
2
- VERSION = "0.1.0"
2
+ VERSION = "0.1.1"
3
3
  end
@@ -3,11 +3,11 @@
3
3
  },{}],2:[function(require,module,exports){
4
4
  "use strict";var evt=require("compose-event"),form=function(e,t){function n(e){var t=e.parentNode;"LABEL"===t.tagName?t.classList.add("tick-label"):(e.insertAdjacentHTML("beforebegin",'<label class="tick-label"></label>'),e.previousSibling.insertAdjacentElement("afterbegin",e)),e.insertAdjacentHTML("afterend","<span></span>")}function r(e){return"number"===e.target.type&&void((e.which<48||e.which>57)&&e.preventDefault())}function a(e){var t=e.target?e.target:e;if("range"!==t.type)return!1;var n=t.max?t.value/t.max*100:t.value/100*100;t.style.backgroundImage="linear-gradient(90deg, #009DDC "+n+"%, #D1D1D1 "+n+"%)"}function i(e){function t(e){var t=(""+e).match(/( ?:\.( \d+ ) )?( ?:[eE]( [+-]?\d+ ) )?$/);return t?Math.max(0,(t[1]?t[1].length:0)-(t[2]?+t[2]:0)):0}function n(e,n){if(n<1){var r=t(parseInt(n));return parseFloat(e.toFixed(r))}return Math.round(e/n)*n}function r(e){var t,r=e.target,a=e.changedTouches[0],i=parseFloat(r.getAttribute("min"))||0,u=parseFloat(r.getAttribute("max"))||100,c=parseFloat(r.getAttribute("step"))||1,l=u-i,d=r.getBoundingClientRect(),s=100/d.width*(o/2)/100;return t=100/d.width*(a.clientX-d.left),t<0?t=0:t>100&&(t=100),t<50?t-=(100-2*t)*s:t>50&&(t+=2*(t-50)*s),i+n(l*(t/100),c)}function a(e){"range"===e.target.type&&(e.preventDefault(),e.target.value=r(e),evt.fire(e.target,"touchend"===e.type?"change":"input"))}if("ontouchstart"in document.documentElement){for(var i=document.querySelectorAll("[type=range]"),o=e||20,u=i.length-1;u>=0;u--)i[u].style.touchAction="manipulation",i[u].style.webkitUserSelect="none";d.addEventListener("touchstart",a,!1),d.addEventListener("touchmove",a,!1),d.addEventListener("touchend",a,!1)}}var o={},u=document.querySelector(e)||document.querySelector("form");if(!u)return!1;var c=(Object.assign({},o,t),document.querySelectorAll("input[type=range]")),l=document.querySelectorAll("input[type=checkbox], input[type=radio]"),d=document.body;d.addEventListener("keypress",r,!1),d.addEventListener("input",a,!0);for(var s=0;s<c.length;s++)a(c[s]);for(var g=0;g<l.length;g++)n(l[g]);i()};module.exports=form;
5
5
  },{"compose-event":42}],3:[function(require,module,exports){
6
- "use strict";var mobileMenu=function(e,t){function n(e){e.preventDefault(),document.body.classList.toggle(s.openClass)}function i(e){e.matches?c.addEventListener("click",n,!1):c.removeEventListener("click",n,!1)}var o={initWidth:"700px",openClass:"menu-open"},s=Object.assign({},o,t),c=document.querySelector(e),a=window.matchMedia("(max-width: "+s.initWidth+")");c&&(i(a),a.addListener(i))};module.exports=mobileMenu;
7
- },{}],4:[function(require,module,exports){
8
- "use strict";var matches=require("../utility/matches"),getClosest=require("../utility/get_closest"),wordCount=require("../utility/word_count"),validation=function(e,t){function a(e){if(!matches(e.target,"input:not([type=submit]), textarea"))return!1;var t,a=e.target,i=a.dataset.minWords,n=getClosest(a,"label")||a;s("hide",a),i&&(a.value&&wordCount(a.value)<i?a.setCustomValidity("Please write at least "+i+" words."):a.setCustomValidity("")),t=a.checkValidity(),a.value&&!t?(n.classList.remove("valid"),n.classList.add("invalid")):a.value&&t?(n.classList.remove("invalid"),n.classList.add("valid")):a.value||(n.classList.remove("valid"),n.classList.remove("invalid"))}function i(e){if(matches(e.target,"input[type=submit], button:not([type=button])")){var t,a=getClosest(e.target,"form"),i=a.querySelector("input:invalid, textarea:invalid");if(i){if(t=getClosest(i,"label")||i,matches(i,"[data-stripe=number]")&&(i.value=i.value.replace(/[^0-9 -]/g,""),i=a.querySelector("input:invalid, textarea:invalid"),!i))return;return e.preventDefault(),"none"!==i.style.display?i.focus():i.nextSibling.focus(),t.classList.remove("valid"),t.classList.add("invalid"),s("show",i),!1}}}function s(e,t){var a=getClosest(t,"form"),i=a.querySelector(".validation-message"),s=t.validationMessage,n=function(){i.parentNode.removeChild(i)},l=function(){var e=getClosest(t,"label");return!!e&&void e.insertAdjacentHTML("beforeend",'<aside class="validation-message"><p>'+s+"</p></aside>")};t.dataset.message&&(s=t.dataset.message),i&&"hide"===e&&n(),"show"!==e||i?"show"===e&&i&&(i.parentNode!==t.parentNode?(n(),l()):i.childNodes[0].textContent=s):l()}var n={},l=document.querySelector(e)||document.querySelector("[required]");if(!l||"function"!=typeof document.createElement("input").checkValidity)return!1;var r=(Object.assign({},n,t),document.body);r.addEventListener("invalid",function(e){e.preventDefault()},!0),r.addEventListener("blur",a,!0),r.addEventListener("click",i,!1)};module.exports=validation;
6
+ "use strict";var matches=require("../utility/matches"),mobileMenu=function(e,t){function n(t){var n=s.menuButton+", ."+s.openClass+" "+e+' a[href^="#"]';matches(t.target,n)&&c.classList.toggle(s.openClass)}function i(e){e.matches?a.addEventListener("click",n,!1):a.removeEventListener("click",n,!1)}var o={initWidth:"700px",openClass:"menu-open",menuButton:".mobile-menu-button"},s=Object.assign({},o,t),a=document.querySelector(e),u=window.matchMedia("(max-width: "+s.initWidth+")"),c=document.body;a&&(i(u),u.addListener(i))};module.exports=mobileMenu;
7
+ },{"../utility/matches":19}],4:[function(require,module,exports){
8
+ "use strict";var matches=require("../utility/matches"),getClosest=require("../utility/get_closest"),wordCount=require("../utility/word_count"),validation=function(e,t){function a(e){if(!matches(e.target,"input:not([type=submit]), textarea"))return!1;var t,a=e.target,i=a.dataset.minWords,r=a.dataset.maxWords,l=getClosest(a,"label")||a;a.value&&!a.value.replace(/\s/g,"").length&&(a.value=""),s("hide",a),i&&n("min",a,i),r&&n("max",a,r),t=a.checkValidity(),a.value&&!t?(l.classList.remove("valid"),l.classList.add("invalid")):a.value&&t?(l.classList.remove("invalid"),l.classList.add("valid")):a.value||(l.classList.remove("valid"),l.classList.remove("invalid"))}function i(e){if(matches(e.target,"input[type=submit], button[type=submit]")){var t,a=getClosest(e.target,"form"),i=a.querySelector("input:invalid, textarea:invalid");if(i){if(t=getClosest(i,"label")||i,matches(i,"[data-stripe=number]")&&(i.value=i.value.replace(/[^0-9 -]/g,""),i=a.querySelector("input:invalid, textarea:invalid"),!i))return;return e.preventDefault(),"none"!==i.style.display?i.focus():i.nextSibling.focus(),t.classList.remove("valid"),t.classList.add("invalid"),s("show",i),!1}}}function s(e,t){var a=getClosest(t,"form"),i=a.querySelector(".validation-message"),s=t.validationMessage,n=function(){i.parentNode.removeChild(i)},r=function(){var e=getClosest(t,"label");return!!e&&void e.insertAdjacentHTML("beforeend",'<aside class="validation-message"><p>'+s+"</p></aside>")};t.dataset.message&&(s=t.dataset.message),i&&"hide"===e&&n(),"show"!==e||i?"show"===e&&i&&(i.parentNode!==t.parentNode?(n(),r()):i.childNodes[0].textContent=s):r()}function n(e,t,a){var i=t.value,s=wordCount(i)<a,n="at least ";"max"===e&&(s=wordCount(i)>a,n="no more than "),i&&s?t.setCustomValidity("Please write "+n+a+" words."):t.setCustomValidity("")}var r={},l=document.querySelector(e)||document.querySelector("[required]");if(!l||"function"!=typeof document.createElement("input").checkValidity)return!1;var o=(Object.assign({},r,t),document.body);o.addEventListener("invalid",function(e){e.preventDefault()},!0),o.addEventListener("blur",a,!0),o.addEventListener("click",i,!1)};module.exports=validation;
9
9
  },{"../utility/get_closest":15,"../utility/matches":19,"../utility/word_count":24}],5:[function(require,module,exports){
10
- "use strict";require("./shim/classlist"),require("./shim/object.assign");var loadFont=require("./utility/load_font"),fullStop=require("./utility/full_stop"),unhover=require("./utility/unhover"),throttle=require("./utility/throttle"),loadScript=require("./utility/load_script"),fromTop=require("./utility/from_top"),scrollTo=require("./utility/scroll_to"),matches=require("./utility/matches"),getClosest=require("./utility/get_closest"),getNext=require("./utility/get_next"),wordCount=require("./utility/word_count"),compileData=require("./utility/compile_data"),timeout=require("./utility/timeout"),mobileMenu=require("./base/mobilemenu"),form=require("./base/form"),validation=require("./base/validation"),loader=require("./enhancement/loader"),waypoints=require("./enhancement/waypoints"),notice=require("./enhancement/notice"),sticky=require("./enhancement/sticky"),esvg=require("./_svg"),event=require("compose-event"),highlighter=require("compose-code-highlighter");require("codemirror/mode/htmlmixed/htmlmixed"),require("codemirror/mode/slim/slim"),require("codemirror/mode/javascript/javascript"),require("codemirror/mode/css/css"),require("codemirror/mode/sql/sql"),require("codemirror/mode/php/php"),require("codemirror/mode/ruby/ruby"),require("codemirror/mode/shell/shell"),require("codemirror/mode/go/go"),require("codemirror/mode/python/python"),require("codemirror/mode/yaml/yaml"),require("codemirror/mode/clike/clike"),require("codemirror/addon/runmode/runmode"),require("codemirror/addon/edit/matchbrackets"),window.ratchet=module.exports={esvg:esvg,event:event,loadFont:loadFont,throttle:throttle,loadScript:loadScript,scrollTo:scrollTo,wordCount:wordCount,getNext:getNext,getClosest:getClosest,compileData:compileData,timeout:timeout,mobileMenu:mobileMenu,form:form,validation:validation,loader:loader,waypoints:waypoints,notice:notice,sticky:sticky},event.change(function(){unhover(),fullStop(),form(),validation(),highlighter.highlight()},!1);
10
+ "use strict";require("./shim/classlist"),require("./shim/object.assign");var loadFont=require("./utility/load_font"),fullStop=require("./utility/full_stop"),unhover=require("./utility/unhover"),throttle=require("./utility/throttle"),loadScript=require("./utility/load_script"),fromTop=require("./utility/from_top"),scrollTo=require("./utility/scroll_to"),matches=require("./utility/matches"),getClosest=require("./utility/get_closest"),getNext=require("./utility/get_next"),wordCount=require("./utility/word_count"),compileData=require("./utility/compile_data"),timeout=require("./utility/timeout"),mobileMenu=require("./base/mobilemenu"),form=require("./base/form"),validation=require("./base/validation"),loader=require("./enhancement/loader"),waypoints=require("./enhancement/waypoints"),notice=require("./enhancement/notice"),sticky=require("./enhancement/sticky"),esvg=require("./_svg"),event=require("compose-event"),highlighter=require("compose-code-highlighter");require("codemirror/mode/htmlmixed/htmlmixed"),require("codemirror/mode/slim/slim"),require("codemirror/mode/javascript/javascript"),require("codemirror/mode/css/css"),require("codemirror/mode/sql/sql"),require("codemirror/mode/php/php"),require("codemirror/mode/ruby/ruby"),require("codemirror/mode/shell/shell"),require("codemirror/mode/go/go"),require("codemirror/mode/python/python"),require("codemirror/mode/yaml/yaml"),require("codemirror/mode/clike/clike"),require("codemirror/addon/runmode/runmode"),require("codemirror/addon/edit/matchbrackets"),window.ratchet=module.exports={loadFont:loadFont,fullStop:fullStop,unhover:unhover,throttle:throttle,loadScript:loadScript,fromTop:fromTop,scrollTo:scrollTo,matches:matches,getClosest:getClosest,getNext:getNext,wordCount:wordCount,compileData:compileData,timeout:timeout,mobileMenu:mobileMenu,form:form,validation:validation,loader:loader,waypoints:waypoints,notice:notice,sticky:sticky,esvg:esvg,event:event},event.change(function(){unhover(),fullStop(),form(),validation(),highlighter.highlight()},!1);
11
11
  },{"./_svg":1,"./base/form":2,"./base/mobilemenu":3,"./base/validation":4,"./enhancement/loader":6,"./enhancement/notice":7,"./enhancement/sticky":8,"./enhancement/waypoints":9,"./shim/classlist":10,"./shim/object.assign":11,"./utility/compile_data":12,"./utility/from_top":13,"./utility/full_stop":14,"./utility/get_closest":15,"./utility/get_next":16,"./utility/load_font":17,"./utility/load_script":18,"./utility/matches":19,"./utility/scroll_to":20,"./utility/throttle":21,"./utility/timeout":22,"./utility/unhover":23,"./utility/word_count":24,"codemirror/addon/edit/matchbrackets":25,"codemirror/addon/runmode/runmode":26,"codemirror/mode/clike/clike":28,"codemirror/mode/css/css":29,"codemirror/mode/go/go":30,"codemirror/mode/htmlmixed/htmlmixed":31,"codemirror/mode/javascript/javascript":32,"codemirror/mode/php/php":33,"codemirror/mode/python/python":34,"codemirror/mode/ruby/ruby":35,"codemirror/mode/shell/shell":36,"codemirror/mode/slim/slim":37,"codemirror/mode/sql/sql":38,"codemirror/mode/yaml/yaml":40,"compose-code-highlighter":41,"compose-event":42}],6:[function(require,module,exports){
12
12
  "use strict";var loader=function(s){var e={selector:document.body,loaderClass:"loader",loadingMessage:"Hang tight…",loadingClass:"loading",successMessage:"Got it!",successClass:"success",failureMessage:"Hold up!",failureClass:"failure"},a=Object.assign({},e,s);a.selector.insertAdjacentHTML("afterbegin",'<div class="'+a.loaderClass+'"></div>');var l=document.querySelector("div."+a.loaderClass),t=function(s){"pending"===s?(l.textContent=a.loadingMessage,l.classList.remove(a.successClass,a.failureClass),l.classList.add(a.loadingClass)):"failure"===s?(l.textContent=a.failureMessage,l.classList.remove(a.loadingClass),l.classList.add(a.failureClass)):"success"===s&&(l.textContent=a.successMessage,l.classList.remove(a.loadingClass),l.classList.add(a.successClass))},i=function(){l.classList.remove(a.loadingClass,a.successClass,a.failureClass)};return{show:t,hide:i}};module.exports=loader;
13
13
  },{}],7:[function(require,module,exports){
@@ -15,7 +15,7 @@
15
15
  },{}],8:[function(require,module,exports){
16
16
  "use strict";var throttle=require("../utility/throttle"),fromTop=require("../utility/from_top"),sticky=function(t,e){function i(t){t.matches?(o(),window.addEventListener("optimizedResize",o,!1),n(),window.addEventListener("optimizedScroll",n,!1)):(h.classList.remove("sticky"),window.removeEventListener("optimizedResize",o,!1),window.removeEventListener("optimizedScroll",n,!1))}function o(){c=document.body.scrollHeight,l=window.innerHeight}function n(){var t=window.pageYOffset,e=t>u,i=w?t>=c-p-w+a:null;e&&!i?(h.classList.remove("anchored"),h.classList.add("sticky")):e&&i?(h.classList.remove("sticky"),h.classList.add("anchored")):h.classList.remove("sticky")}var s={topPadding:!1,initWidth:"700px",stickyClass:"sticky",anchorPoint:null},r=Object.assign({},s,e),d=document.querySelector(t);if(!d)return!1;var c,l,a=r.topPadding===!0?parseInt(window.getComputedStyle(d,null).getPropertyValue("padding-top")):0,m=window.matchMedia("(min-width: "+r.initWidth+")"),u=fromTop(d)+a,p=d.offsetHeight,w=r.anchorPoint,h=document.body;throttle("resize","optimizedResize"),throttle("scroll","optimizedScroll"),i(m),m.addListener(i)};module.exports=sticky;
17
17
  },{"../utility/from_top":13,"../utility/throttle":21}],9:[function(require,module,exports){
18
- "use strict";var matches=require("../utility/matches"),fromTop=require("../utility/from_top"),scrollTo=require("../utility/scroll_to"),getClosest=require("../utility/get_closest"),throttle=require("../utility/throttle"),waypoints=function(e,t){function i(e){e.matches?(o(),window.addEventListener("optimizedResize",o,!1),n(),window.addEventListener("optimizedScroll",n,!1),v.addEventListener("click",r,!1),l(),window.addEventListener("hashchange",l,!1)):(window.removeEventListener("optimizedResize",o,!1),window.removeEventListener("optimizedScroll",n,!1),v.removeEventListener("click",r,!1),window.removeEventListener("hashchange",l,!1))}function o(){u=document.body.scrollHeight,w=window.innerHeight;for(var e=0;e<f.length;e++){var t={elem:f[e],offset:fromTop(f[e])};g[e]=t}}function n(){for(var e,t,i,o=window.pageYOffset,n=o<0||o+w>=u,r=0;r<g.length;r++){var l=g[0],a=g[r],c=g[r+1],f=g[g.length-1];o<l.offset?e=l.elem.id:n||o>f.offset-d.elemOffset?e=f.elem.id:o>a.offset-d.elemOffset&&o<c.offset-d.elemOffset&&(e=a.elem.id)}if(e){if(e===h)return!1;if(t=v.querySelector('a[href="#'+e+'"]'),!t)return!1;s(v,t,d.activeAnchor),d.showLandmarks===!0&&(i=getClosest(t,d.landmarkSelector),s(v,i,d.activeLandmark)),h=e}}function r(e){e.preventDefault(),matches(e.target,'a[href^="#"]')&&a(e.target,"click")}function l(){if(!window.location.hash)return!1;var e=document.querySelector('a[href="'+window.location.hash+'"]');a(e,"hash")}function a(e,t){var i,o=e.href.split("#")[1],r=document.querySelector("#"+o);if(r){s(v,e,d.activeAnchor);for(var l=0;l<g.length;l++)g[l].elem===r&&(i=g[l].offset);"click"===t?(window.removeEventListener("optimizedScroll",n,!1),history.pushState(null,"","#"+o),scrollTo(i-d.elemOffset+1,function(){window.addEventListener("optimizedScroll",n,!1)})):"hash"===t&&window.scrollTo(0,i-d.elemOffset+1)}}function s(e,t,i){var o=e.querySelector("."+i);o&&o.classList.remove(i),t.classList.add(i)}var c={initWidth:"700px",navigation:".secondary",activeAnchor:"active",elemOffset:0,showLandmarks:!1,landmarkSelector:".landmark",activeLandmark:"pinned"},d=Object.assign({},c,t),f=document.querySelectorAll(e);if(!f.length)return!1;var h,m,u,w,v=document.querySelector(d.navigation),p=window.matchMedia("(min-width: "+d.initWidth+")"),g=[];window.location.hash&&(m=window.location.hash.replace("#",""),window.location.hash="",history.replaceState(null,"","#"+m)),throttle("resize","optimizedResize"),throttle("scroll","optimizedScroll"),window.addEventListener("load",function(){i(p),p.addListener(i)},!1)};module.exports=waypoints;
18
+ "use strict";var matches=require("../utility/matches"),fromTop=require("../utility/from_top"),scrollTo=require("../utility/scroll_to"),getClosest=require("../utility/get_closest"),throttle=require("../utility/throttle"),waypoints=function(e,t){function i(e){e.matches?(o(),window.addEventListener("optimizedResize",o,!1),n(),window.addEventListener("optimizedScroll",n,!1),L.addEventListener("click",r,!1),l(),window.addEventListener("hashchange",l,!1)):(window.removeEventListener("optimizedResize",o,!1),window.removeEventListener("optimizedScroll",n,!1),L.removeEventListener("click",r,!1),window.removeEventListener("hashchange",l,!1))}function o(){w=L.scrollHeight,u=window.innerHeight;for(var e=0;e<f.length;e++){var t={elem:f[e],offset:fromTop(f[e])};g[e]=t}}function n(){for(var e,t,i,o=window.pageYOffset,n=o<0||o+u>=w,r=0;r<g.length;r++){var l=g[0],a=g[r],c=g[r+1],f=g[g.length-1];o<l.offset?e=l.elem.id:n||o>f.offset-d.elemOffset?e=f.elem.id:o>a.offset-d.elemOffset&&o<c.offset-d.elemOffset&&(e=a.elem.id)}if(e){if(e===h)return!1;if(t=L.querySelector('a[href="#'+e+'"]'),!t)return!1;s(t,d.activeAnchor),d.showLandmarks===!0&&(i=getClosest(t,d.landmarkSelector),s(i,d.activeLandmark)),h=e}}function r(e){matches(e.target,'a[href^="#"]')&&(e.preventDefault(),a(e.target,"click"))}function l(){if(!window.location.hash)return!1;var e=document.querySelector('a[href="'+window.location.hash+'"]');a(e,"hash")}function a(e,t){var i,o=e.href.split("#")[1],r=document.querySelector("#"+o);if(r){s(e,d.activeAnchor);for(var l=0;l<g.length;l++)g[l].elem===r&&(i=g[l].offset);"click"===t?(window.removeEventListener("optimizedScroll",n,!1),history.pushState(null,"","#"+o),scrollTo(i-d.elemOffset+1,function(){window.addEventListener("optimizedScroll",n,!1)})):"hash"===t&&window.scrollTo(0,i-d.elemOffset+1)}}function s(e,t){var i=L.querySelector("."+t);i&&i.classList.remove(t),e.classList.add(t)}var c={initWidth:"700px",activeAnchor:"active",elemOffset:0,showLandmarks:!1,landmarkSelector:".landmark",activeLandmark:"pinned"},d=Object.assign({},c,t),f=document.querySelectorAll(e);if(!f.length)return!1;var h,m,w,u,v=d.initWidth?d.initWidth:"0px",p=window.matchMedia("(min-width: "+v+")"),L=document.body,g=[];window.location.hash&&(m=window.location.hash.replace("#",""),window.location.hash="",history.replaceState(null,"","#"+m)),throttle("resize","optimizedResize"),throttle("scroll","optimizedScroll"),window.addEventListener("load",function(){i(p),p.addListener(i)},!1)};module.exports=waypoints;
19
19
  },{"../utility/from_top":13,"../utility/get_closest":15,"../utility/matches":19,"../utility/scroll_to":20,"../utility/throttle":21}],10:[function(require,module,exports){
20
20
  "use strict";"document"in self&&("classList"in document.createElement("_")?!function(){var t=document.createElement("_");if(t.classList.add("c1","c2"),!t.classList.contains("c2")){var e=function(t){var e=DOMTokenList.prototype[t];DOMTokenList.prototype[t]=function(t){var n,i=arguments.length;for(n=0;n<i;n++)t=arguments[n],e.call(this,t)}};e("add"),e("remove")}if(t.classList.toggle("c3",!1),t.classList.contains("c3")){var n=DOMTokenList.prototype.toggle;DOMTokenList.prototype.toggle=function(t,e){return 1 in arguments&&!this.contains(t)==!e?e:n.call(this,t)}}t=null}():!function(t){if("Element"in t){var e="classList",n="prototype",i=t.Element[n],s=Object,r=String[n].trim||function(){return this.replace(/^\s+|\s+$/g,"")},o=Array[n].indexOf||function(t){for(var e=0;e<this.length;e++)if(e in this&&this[e]===t)return e;return-1},a=function(t,e){this.name=t,this.code=DOMException[t],this.message=e},c=function(t,e){if(""===e)throw new a("SYNTAX_ERR","An invalid or illegal string was specified");if(/\s/.test(e))throw new a("INVALID_CHARACTER_ERR","String contains an invalid character");return o.call(t,e)},l=function(t){for(var e=r.call(t.getAttribute("class")||""),n=e?e.split(/\s+/):[],i=0;i<n.length;i++)this.push(n[i]);this._updateClassName=function(){t.setAttribute("class",this.toString())}},u=l[n]=[],f=function(){return new l(this)};if(a[n]=Error[n],u.item=function(t){return this[t]||null},u.contains=function(t){return t+="",c(this,t)!==-1},u.add=function(){var t,e=arguments,n=0,i=e.length,s=!1;do t=e[n]+"",c(this,t)===-1&&(this.push(t),s=!0);while(++n<i);s&&this._updateClassName()},u.remove=function(){var t,e,n=arguments,i=0,s=n.length,r=!1;do for(t=n[i]+"",e=c(this,t);e!==-1;)this.splice(e,1),r=!0,e=c(this,t);while(++i<s);r&&this._updateClassName()},u.toggle=function(t,e){t+="";var n=this.contains(t),i=n?e!==!0&&"remove":e!==!1&&"add";return i&&this[i](t),e===!0||e===!1?e:!n},u.toString=function(){return this.join(" ")},s.defineProperty){var h={get:f,enumerable:!0,configurable:!0};try{s.defineProperty(i,e,h)}catch(t){t.number===-2146823252&&(h.enumerable=!1,s.defineProperty(i,e,h))}}else s[n].__defineGetter__&&i.__defineGetter__(e,f)}}(self));
21
21
  },{}],11:[function(require,module,exports){
@@ -100,4 +100,4 @@ function Tap(e,t){function n(t){function n(n){if(t!==n&&(a(),!n.defaultPrevented
100
100
  });
101
101
 
102
102
 
103
- //# sourceMappingURL=/assets/ratchet/core-0.1.0.map.json
103
+ //# sourceMappingURL=/assets/ratchet/core-0.1.1.map.json