ratchet_design 0.1.12 → 0.1.13
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/app/assets/javascripts/ratchet/base/form.js +9 -3
- data/app/assets/javascripts/ratchet/base/sync-input-value.js +9 -18
- data/app/assets/javascripts/ratchet/core.js +9 -3
- data/app/assets/javascripts/ratchet/enhancement/lightbox.js +6 -6
- data/app/assets/javascripts/ratchet/enhancement/mapbox.js +48 -0
- data/app/assets/stylesheets/ratchet/_core.scss +4 -2
- data/app/assets/stylesheets/ratchet/base/_button.scss +15 -14
- data/app/assets/stylesheets/ratchet/base/_document.scss +30 -66
- data/app/assets/stylesheets/ratchet/base/_form.scss +162 -529
- data/app/assets/stylesheets/ratchet/base/_label-placeholder.scss +97 -0
- data/app/assets/stylesheets/ratchet/base/_media.scss +1 -1
- data/app/assets/stylesheets/ratchet/base/_multistep-form.scss +65 -11
- data/app/assets/stylesheets/ratchet/base/_section.scss +284 -0
- data/app/assets/stylesheets/ratchet/base/_table.scss +4 -4
- data/app/assets/stylesheets/ratchet/base/_text.scss +50 -45
- data/app/assets/stylesheets/ratchet/base/_validation.scss +83 -0
- data/app/assets/stylesheets/ratchet/enhancement/_hero.scss +39 -39
- data/app/assets/stylesheets/ratchet/utility/_color.scss +135 -0
- data/app/assets/stylesheets/ratchet/utility/_global.scss +21 -40
- data/app/assets/stylesheets/ratchet/utility/_loader.scss +1 -1
- data/app/helpers/ratchet/application_helper.rb +16 -10
- data/app/helpers/ratchet/form_helper.rb +302 -18
- data/app/views/layouts/ratchet/default.html.slim +2 -2
- data/app/views/shared/ratchet/_defs.html.slim +67 -0
- data/app/views/shared/ratchet/_footer.html.slim +6 -0
- data/app/views/shared/ratchet/_header.html.slim +5 -0
- data/app/views/shared/ratchet/_icons.html.slim +53 -6
- data/lib/ratchet_design/version.rb +1 -1
- data/public/{core-0.1.12.js → core-0.1.13.js} +66 -66
- data/public/core-0.1.13.js.gz +0 -0
- data/public/core-0.1.13.map.json +1 -0
- data/public/{fonts-woff-0.1.12.css → fonts-woff-0.1.13.css} +0 -0
- data/public/{fonts-woff-0.1.12.css.gz → fonts-woff-0.1.13.css.gz} +0 -0
- data/public/{fonts-woff2-0.1.12.css → fonts-woff2-0.1.13.css} +0 -0
- data/public/{fonts-woff2-0.1.12.css.gz → fonts-woff2-0.1.13.css.gz} +0 -0
- metadata +36 -32
- data/app/assets/javascripts/ratchet/utility/loader.js +0 -84
- data/app/assets/stylesheets/ratchet/enhancement/_contrast-section.scss +0 -22
- data/public/core-0.1.12.js.gz +0 -0
- data/public/core-0.1.12.map.json +0 -1
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: bf3b0a96221d6598ec994393ab364e5654dce97d
|
4
|
+
data.tar.gz: 0209b1415a7f270d57a129df5cbffdaa271c44fc
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 39dafdfaf803fa32f81fc1dc90f9caa2e263158179d2b97babed02d8e63a0a13a7f9130bcafb89d5119c624e005b32c3dcca2f350e73849887a111f3e4d851e4
|
7
|
+
data.tar.gz: fe1a872b9181fd712f5d59291e216968d873fd5bdc641e42772aeb26bf4e0213605b04a0ea407201b11bf91fbe3c326c3fe3cfc33aa95f7b49f926f951601d0c
|
@@ -59,7 +59,7 @@ var form = function( element, settings ) {
|
|
59
59
|
// Simply add the `tick-label` classname
|
60
60
|
labelParent.classList.add( 'tick-label' );
|
61
61
|
|
62
|
-
|
62
|
+
// Otherwise
|
63
63
|
} else {
|
64
64
|
|
65
65
|
// Wrap the element properly
|
@@ -69,7 +69,7 @@ var form = function( element, settings ) {
|
|
69
69
|
}
|
70
70
|
|
71
71
|
// And add empty span to label
|
72
|
-
elem.insertAdjacentHTML( 'afterend', '<span></span>' );
|
72
|
+
elem.insertAdjacentHTML( 'afterend', '<span class="tick-label"></span>' );
|
73
73
|
|
74
74
|
}
|
75
75
|
|
@@ -89,6 +89,12 @@ var form = function( element, settings ) {
|
|
89
89
|
// Range input hander function
|
90
90
|
function rangeHandler( event ) {
|
91
91
|
|
92
|
+
// Define local variable(s)
|
93
|
+
var currValue = rangeEls.value,
|
94
|
+
maxValue = rangeEls.max,
|
95
|
+
minValue = rangeEls.min,
|
96
|
+
percValue = currValue / maxValue * 100;
|
97
|
+
|
92
98
|
// Define target element
|
93
99
|
var element = ( event.target ) ? event.target : event;
|
94
100
|
|
@@ -101,7 +107,7 @@ var form = function( element, settings ) {
|
|
101
107
|
var percValue = ( element.max ) ? element.value / element.max * 100 : element.value / 100 * 100;
|
102
108
|
|
103
109
|
// Style bar accordingly
|
104
|
-
element.style.backgroundImage = 'linear-gradient(90deg, #
|
110
|
+
element.style.backgroundImage = 'linear-gradient(90deg, #c3d4e4 ' + percValue + '%, #ffffff ' + percValue + '%)';
|
105
111
|
|
106
112
|
}
|
107
113
|
|
@@ -1,30 +1,21 @@
|
|
1
1
|
var toolbox = require( 'compose-toolbox' )
|
2
2
|
var Event = toolbox.event
|
3
|
-
var textSelectors = 'textarea, input[type=
|
4
|
-
|
5
|
-
Event.bubbleFormEvents()
|
6
|
-
|
7
|
-
function textInputs() {
|
8
|
-
return document.querySelectorAll( textSelectors )
|
9
|
-
}
|
3
|
+
var textSelectors = 'textarea, input:not([type=radio]):not([type=checkbox]):not([type=range]):not([type=hidden]):not([type=submit]):not([type=image]):not([type=reset])'
|
10
4
|
|
11
5
|
function syncValue( input ) {
|
12
6
|
|
13
7
|
// Allow calling from event handler
|
14
|
-
|
15
|
-
|
16
|
-
// If element only contains whitespace, strip value
|
17
|
-
if ( !input.value.replace( /\s/g, '' ).length ) { input.value = ''; }
|
18
|
-
|
19
|
-
input.setAttribute( 'value', input.value )
|
8
|
+
input = ( input.target || input )
|
20
9
|
|
10
|
+
// If element is empty (or contains only whitespace)
|
11
|
+
// Add empty class
|
12
|
+
input.classList.toggle( 'empty', !input.value.trim().length )
|
21
13
|
}
|
22
14
|
|
15
|
+
// Initialize input state
|
23
16
|
Event.change( function() {
|
24
|
-
|
25
|
-
// Ensure that all inputs have a value
|
26
|
-
toolbox.each( textInputs(), syncValue )
|
27
|
-
|
17
|
+
toolbox.each( document.querySelectorAll( textSelectors ), syncValue )
|
28
18
|
})
|
29
19
|
|
30
|
-
|
20
|
+
// Set input state on keyup (debounced)
|
21
|
+
Event.on( document, 'keyup', textSelectors, Event.debounce( syncValue, 100 ) )
|
@@ -1,6 +1,7 @@
|
|
1
1
|
// Utility modules
|
2
|
-
var loadFont = require( './utility/load_font' )
|
3
|
-
var loadScript = require( './utility/load_script' )
|
2
|
+
var loadFont = require( './utility/load_font' );
|
3
|
+
var loadScript = require( './utility/load_script' );
|
4
|
+
var toggler = require('compose-toggler')
|
4
5
|
|
5
6
|
// Base modules
|
6
7
|
var mobileMenu = require( './base/mobilemenu' )
|
@@ -45,7 +46,10 @@ require( 'codemirror/addon/edit/matchbrackets' )
|
|
45
46
|
rangeTouch.set("thumbWidth", 20); // Annoying hack to make input ranges work smoothly on touch devices
|
46
47
|
|
47
48
|
event.scroll.disablePointer() // disable pointer events on scroll for performance (to avoid extra repaints)
|
48
|
-
|
49
|
+
|
50
|
+
// This seems to trigger animations whenever it is turned on again
|
51
|
+
// So I've disabled it for now
|
52
|
+
//event.resize.disableAnimation() // disable animation on resize for performance (to avoid extra repaints)
|
49
53
|
|
50
54
|
// Trigger these events each time the page loads
|
51
55
|
event.change( function() {
|
@@ -65,11 +69,13 @@ var ratchet = toolbox.merge( {
|
|
65
69
|
loader : loader,
|
66
70
|
mobileMenu : mobileMenu,
|
67
71
|
form : form,
|
72
|
+
toggler : toggler,
|
68
73
|
validation : formUp.validate,
|
69
74
|
waypoints : waypoints,
|
70
75
|
notice : notice,
|
71
76
|
sticky : sticky,
|
72
77
|
lightbox : lightbox,
|
78
|
+
//mapbox : mapbox,
|
73
79
|
esvg : esvg
|
74
80
|
}, toolbox )
|
75
81
|
|
@@ -9,7 +9,7 @@
|
|
9
9
|
var toolbox = require( 'compose-toolbox' ),
|
10
10
|
Event = toolbox.event,
|
11
11
|
delay = toolbox.delay,
|
12
|
-
loader = require( '
|
12
|
+
loader = require( 'compose-loader' )
|
13
13
|
|
14
14
|
// Public API function
|
15
15
|
var lightbox = function( element, settings ) {
|
@@ -26,8 +26,8 @@ var lightbox = function( element, settings ) {
|
|
26
26
|
options = toolbox.merge( defaults, settings ),
|
27
27
|
selector = document.querySelector( element ),
|
28
28
|
widthQuery = window.matchMedia( '(max-width: ' + options.initWidth + ')' ),
|
29
|
-
spinner = loader({ loadingMessage: 'Loading image', failureMessage : 'No image found' }),
|
30
29
|
docBody = document.body,
|
30
|
+
spinner = loader.new({ loading: 'Loading image', failure : 'No image found' }),
|
31
31
|
tempImg;
|
32
32
|
|
33
33
|
// Only run when selectors exist
|
@@ -57,7 +57,7 @@ var lightbox = function( element, settings ) {
|
|
57
57
|
if ( event && event.target.tagName === 'IMG' ) return false;
|
58
58
|
|
59
59
|
// Hide the spinner
|
60
|
-
spinner.
|
60
|
+
spinner.remove();
|
61
61
|
|
62
62
|
// Remove active lightbox class from body
|
63
63
|
docBody.classList.remove( 'lightbox-active' );
|
@@ -74,7 +74,7 @@ var lightbox = function( element, settings ) {
|
|
74
74
|
function loadPending( target ) {
|
75
75
|
|
76
76
|
// Show loading icon
|
77
|
-
spinner.
|
77
|
+
spinner.loading();
|
78
78
|
|
79
79
|
// Set temp image source appropriately
|
80
80
|
tempImg.src = target.parentNode.href;
|
@@ -88,7 +88,7 @@ var lightbox = function( element, settings ) {
|
|
88
88
|
function loadSuccess() {
|
89
89
|
|
90
90
|
// Hide the spinner
|
91
|
-
spinner.
|
91
|
+
spinner.remove();
|
92
92
|
|
93
93
|
// Bada bing, bada boom
|
94
94
|
tempImg.classList.add( 'loaded' );
|
@@ -102,7 +102,7 @@ var lightbox = function( element, settings ) {
|
|
102
102
|
delay( function() {
|
103
103
|
|
104
104
|
// Show spinner failure state
|
105
|
-
spinner.
|
105
|
+
spinner.failure();
|
106
106
|
|
107
107
|
}, 1000 );
|
108
108
|
|
@@ -0,0 +1,48 @@
|
|
1
|
+
/**
|
2
|
+
* LoadScript 0.0.1
|
3
|
+
* Load external JavaScript function
|
4
|
+
* @author Matt Gillespie (@SaveTheTweets)
|
5
|
+
**/
|
6
|
+
|
7
|
+
// Tooltips for deployment locations
|
8
|
+
// var myLayer = L.mapbox.featureLayer().addTo(map);
|
9
|
+
|
10
|
+
// var geojson = {
|
11
|
+
// type: 'FeatureCollection',
|
12
|
+
// features: [{
|
13
|
+
// type: 'Feature',
|
14
|
+
// properties: {
|
15
|
+
// title: 'Washington, D.C.',
|
16
|
+
// 'marker-color': '#f86767',
|
17
|
+
// 'marker-size': 'large',
|
18
|
+
// 'marker-symbol': 'star',
|
19
|
+
// url: 'http://en.wikipedia.org/wiki/Washington,_D.C.'
|
20
|
+
// },
|
21
|
+
// geometry: {
|
22
|
+
// type: 'Point',
|
23
|
+
// coordinates: [-77.03201, 38.90065]
|
24
|
+
// }
|
25
|
+
// },
|
26
|
+
// {
|
27
|
+
// type: 'Feature',
|
28
|
+
// properties: {
|
29
|
+
// title: 'Baltimore, MD',
|
30
|
+
// 'marker-color': '#7ec9b1',
|
31
|
+
// 'marker-size': 'large',
|
32
|
+
// 'marker-symbol': 'star',
|
33
|
+
// url: 'http://en.wikipedia.org/wiki/Baltimore'
|
34
|
+
// },
|
35
|
+
// geometry: {
|
36
|
+
// type: 'Point',
|
37
|
+
// coordinates: [-76.60767, 39.28755]
|
38
|
+
// }
|
39
|
+
// }]
|
40
|
+
// };
|
41
|
+
|
42
|
+
// myLayer.setGeoJSON(geojson);
|
43
|
+
// myLayer.on('mouseover', function(e) {
|
44
|
+
// e.layer.openPopup();
|
45
|
+
// });
|
46
|
+
// myLayer.on('mouseout', function(e) {
|
47
|
+
// e.layer.closePopup();
|
48
|
+
// });
|
@@ -10,14 +10,16 @@
|
|
10
10
|
@import 'base/media';
|
11
11
|
@import 'base/form';
|
12
12
|
@import 'base/multistep-form';
|
13
|
+
@import 'base/validation';
|
14
|
+
@import 'base/label-placeholder';
|
13
15
|
@import 'base/table';
|
14
16
|
@import 'base/document';
|
17
|
+
@import 'base/section';
|
15
18
|
|
16
19
|
// Enhancement modules
|
17
20
|
@import 'enhancement/feature';
|
18
21
|
@import 'enhancement/sticky-sidebar';
|
19
22
|
@import 'enhancement/notice';
|
20
23
|
@import 'enhancement/hero';
|
21
|
-
@import 'enhancement/contrast-section';
|
22
24
|
@import 'enhancement/tooltip';
|
23
|
-
@import 'enhancement/lightbox';
|
25
|
+
@import 'enhancement/lightbox';
|
@@ -26,7 +26,7 @@
|
|
26
26
|
}
|
27
27
|
|
28
28
|
// Resizable / colorable buttons
|
29
|
-
@mixin button($color: $
|
29
|
+
@mixin button($color: $azure, $size: normal, $fill: on, $bevel: off) {
|
30
30
|
|
31
31
|
// Define default variables
|
32
32
|
$font-size: 16px;
|
@@ -38,19 +38,19 @@
|
|
38
38
|
|
39
39
|
// Define color-based variables
|
40
40
|
@if $color == primary {
|
41
|
-
$color: $
|
41
|
+
$color: $azure;
|
42
42
|
} @else if $color == secondary {
|
43
|
-
$color: $
|
43
|
+
$color: $mulberry;
|
44
44
|
} @else if $color == success {
|
45
|
-
$color: $
|
45
|
+
$color: $caribbean;
|
46
46
|
} @else if $color == failure {
|
47
|
-
$color: $
|
47
|
+
$color: $rusty;
|
48
48
|
}
|
49
49
|
|
50
50
|
// Define size-based variables
|
51
51
|
@if $size == small {
|
52
|
-
$font-size:
|
53
|
-
$padding: 3px 14px
|
52
|
+
$font-size: 14px;
|
53
|
+
$padding: 3px 14px;
|
54
54
|
$margin-top: 15px;
|
55
55
|
$margin-bottom: 20px;
|
56
56
|
} @else if $size == large {
|
@@ -76,7 +76,7 @@
|
|
76
76
|
margin-top: $margin-top;
|
77
77
|
margin-bottom: $margin-bottom;
|
78
78
|
transition: $duration;
|
79
|
-
border-radius: $border-radius;
|
79
|
+
// border-radius: $border-radius;
|
80
80
|
|
81
81
|
// Default
|
82
82
|
&,
|
@@ -84,7 +84,8 @@
|
|
84
84
|
@if $fill == on {
|
85
85
|
color: $white;
|
86
86
|
background: $color;
|
87
|
-
border:
|
87
|
+
border: none;
|
88
|
+
// border: 1px solid darken($color, 3);
|
88
89
|
} @else {
|
89
90
|
color: $color;
|
90
91
|
background: transparent;
|
@@ -99,9 +100,9 @@
|
|
99
100
|
@if $fill == on {
|
100
101
|
color: $white;
|
101
102
|
background: darken($color, 3);
|
102
|
-
border:
|
103
|
+
border: none;
|
103
104
|
} @else if $fill == off and $color == $white {
|
104
|
-
color: $
|
105
|
+
color: $azure;
|
105
106
|
background: $color;
|
106
107
|
} @else {
|
107
108
|
color: $white;
|
@@ -111,9 +112,9 @@
|
|
111
112
|
|
112
113
|
// Disabled
|
113
114
|
&[disabled] {
|
114
|
-
color: $
|
115
|
-
background: $
|
116
|
-
border-color: $
|
115
|
+
// color: $smoke;
|
116
|
+
background: lighten($color, 33);
|
117
|
+
// border-color: $alabaster;
|
117
118
|
text-shadow: none;
|
118
119
|
pointer-events: none;
|
119
120
|
}
|
@@ -7,7 +7,11 @@
|
|
7
7
|
* ------------------------------------- */
|
8
8
|
|
9
9
|
// Point at which mobile menu is visible
|
10
|
+
$breakpoint-xlg: 1500px;
|
11
|
+
$breakpoint-lg: 1100px;
|
10
12
|
$breakpoint: 800px;
|
13
|
+
$breakpoint-sm: 550px;
|
14
|
+
$breakpoint-xsm: 400px;
|
11
15
|
|
12
16
|
// Transparent headers (for use with hero banners)
|
13
17
|
@mixin transparent-header {
|
@@ -26,16 +30,15 @@ $breakpoint: 800px;
|
|
26
30
|
|
27
31
|
// Transparent header extendable placeholder
|
28
32
|
%transparent-header {
|
29
|
-
@include transparent-header;
|
30
|
-
}
|
33
|
+
@include transparent-header; }
|
31
34
|
|
32
35
|
// Header link styles
|
33
36
|
%header-link {
|
34
37
|
cursor: pointer;
|
35
38
|
flex-shrink: 0;
|
36
|
-
font-size:
|
37
|
-
font-weight:
|
38
|
-
text-transform: uppercase;
|
39
|
+
font-size: 14px;
|
40
|
+
font-weight: 400;
|
41
|
+
// text-transform: uppercase;
|
39
42
|
}
|
40
43
|
|
41
44
|
// Logo home link styles
|
@@ -53,6 +56,7 @@ $breakpoint: 800px;
|
|
53
56
|
// Header button styles
|
54
57
|
%header-button {
|
55
58
|
@include button($size: small, $color: $white, $fill: off, $bevel: on);
|
59
|
+
font-weight: 400;
|
56
60
|
margin-top: 0;
|
57
61
|
margin-bottom: 0;
|
58
62
|
}
|
@@ -130,10 +134,18 @@ body {
|
|
130
134
|
display: flex;
|
131
135
|
min-height: 100vh;
|
132
136
|
flex-direction: column;
|
133
|
-
color: $
|
134
|
-
font-weight:
|
137
|
+
color: $space;
|
138
|
+
font-weight: 400;
|
135
139
|
font-size: $base-size;
|
136
140
|
line-height: $base-height;
|
141
|
+
overflow-x: hidden;
|
142
|
+
|
143
|
+
a,
|
144
|
+
input,
|
145
|
+
a:hover,
|
146
|
+
input:hover {
|
147
|
+
transition: all $duration ease;
|
148
|
+
}
|
137
149
|
}
|
138
150
|
|
139
151
|
/* ===================================== *
|
@@ -148,7 +160,7 @@ header[role=banner] {
|
|
148
160
|
z-index: 12;
|
149
161
|
color: $white;
|
150
162
|
@include padded-module; // 1100px width & 30px padding
|
151
|
-
@include cover-background($
|
163
|
+
@include cover-background($azure linear-gradient(to bottom right, $azure, mix($mulberry, $azure, 75%)) no-repeat fixed);
|
152
164
|
|
153
165
|
a {
|
154
166
|
@extend %header-link;
|
@@ -234,7 +246,7 @@ header[role=banner] > nav[role=navigation] {
|
|
234
246
|
header[role=banner] > nav[role=navigation] {
|
235
247
|
opacity: 1;
|
236
248
|
transform: translateX(0);
|
237
|
-
background: rgba($
|
249
|
+
background: rgba($space, .95);
|
238
250
|
transition:
|
239
251
|
.5s opacity,
|
240
252
|
.5s background;
|
@@ -254,66 +266,18 @@ main {
|
|
254
266
|
}
|
255
267
|
|
256
268
|
/* ===================================== *
|
257
|
-
* vii. Footer
|
269
|
+
* vii. Ratchet Footer
|
258
270
|
* ------------------------------------- */
|
259
271
|
|
260
272
|
// Main site footer
|
261
273
|
footer[role=contentinfo] {
|
262
|
-
color: $
|
274
|
+
color: $pewter;
|
275
|
+
font-size: vr(1);
|
263
276
|
@include padded-module; // 1100px width & 30px padding
|
264
|
-
@include cover-background($
|
265
|
-
}
|
277
|
+
@include cover-background($shark);
|
266
278
|
|
267
|
-
|
268
|
-
|
269
|
-
|
270
|
-
|
271
|
-
|
272
|
-
// .footer-nav {
|
273
|
-
// // @extend %column-container;
|
274
|
-
// }
|
275
|
-
|
276
|
-
// dl {
|
277
|
-
// // @include one-of-four(false);
|
278
|
-
|
279
|
-
// @media (max-width: 720px) {
|
280
|
-
// // @include one-of-two(false);
|
281
|
-
// }
|
282
|
-
// }
|
283
|
-
|
284
|
-
// dt {
|
285
|
-
// @extend %caps;
|
286
|
-
// color: $white;
|
287
|
-
// margin-bottom: .5rem;
|
288
|
-
// }
|
289
|
-
|
290
|
-
// dd > a {
|
291
|
-
// display: inline;
|
292
|
-
// font-weight: 700;
|
293
|
-
// @include underlined-link(inherit, $white);
|
294
|
-
|
295
|
-
// &:after {
|
296
|
-
// content: '\A';
|
297
|
-
// white-space: pre;
|
298
|
-
// }
|
299
|
-
// }
|
300
|
-
|
301
|
-
// // Social icons
|
302
|
-
// .social-nav {
|
303
|
-
// margin-top: 1.5rem;
|
304
|
-
// @extend %social-icons;
|
305
|
-
|
306
|
-
// a {
|
307
|
-
// margin-bottom: 5px;
|
308
|
-
// @include rounded-btn($aluminum, $cerulean, $white, 30px);
|
309
|
-
// }
|
310
|
-
// }
|
311
|
-
|
312
|
-
// // Copyright
|
313
|
-
// p {
|
314
|
-
// font-size: .857em;
|
315
|
-
// text-align: center;
|
316
|
-
// margin-top: 40px;
|
317
|
-
// margin-bottom: 40px;
|
318
|
-
// }
|
319
|
-
// }
|
279
|
+
> * {
|
280
|
+
@include grid;
|
281
|
+
padding: vr(3) 0;
|
282
|
+
}
|
283
|
+
}
|