minable 0.0.2 → 0.1.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (65) hide show
  1. checksums.yaml +4 -4
  2. data/Gemfile +1 -1
  3. data/Gemfile.lock +4 -4
  4. data/Rakefile +1 -1
  5. data/app/assets/stylesheets/minable/_all.scss +1 -0
  6. data/app/assets/stylesheets/minable/_global.scss +28 -0
  7. data/app/assets/stylesheets/minable/_grid.scss +11 -0
  8. data/app/assets/stylesheets/minable/_settings.scss +15 -0
  9. data/app/assets/stylesheets/{framework → minable/framework}/_all.scss +0 -0
  10. data/app/assets/stylesheets/{framework → minable/framework}/_normalize.scss +0 -0
  11. data/app/assets/stylesheets/{framework → minable/framework}/_typecsset.scss +0 -27
  12. data/app/assets/stylesheets/{framework → minable/framework}/grid/_all.scss +0 -0
  13. data/app/assets/stylesheets/minable/framework/grid/_grid-core.scss +66 -0
  14. data/app/assets/stylesheets/minable/framework/grid/_grid-unit.scss +380 -0
  15. data/app/assets/stylesheets/{helpers → minable/helpers}/_all.scss +0 -0
  16. data/app/assets/stylesheets/{helpers → minable/helpers}/classes/_all.scss +1 -0
  17. data/app/assets/stylesheets/minable/helpers/classes/_clearfix.scss +23 -0
  18. data/app/assets/stylesheets/{helpers → minable/helpers}/classes/_display-classes.scss +13 -15
  19. data/app/assets/stylesheets/{helpers → minable/helpers}/functions/_all.scss +0 -0
  20. data/app/assets/stylesheets/{helpers → minable/helpers}/functions/_strip-unit.scss +0 -0
  21. data/app/assets/stylesheets/{helpers → minable/helpers}/mixins/_all.scss +2 -1
  22. data/app/assets/stylesheets/minable/helpers/mixins/_opacity.scss +6 -0
  23. data/app/assets/stylesheets/{helpers → minable/helpers}/mixins/_rem-fallback.scss +0 -1
  24. data/app/assets/stylesheets/{helpers → minable/helpers}/mixins/_replace-text.scss +0 -0
  25. data/app/assets/stylesheets/minable-ui/_all.scss +3 -0
  26. data/app/assets/stylesheets/minable-ui/buttons/_all.scss +3 -0
  27. data/app/assets/stylesheets/minable-ui/buttons/_button-colors.scss +49 -0
  28. data/app/assets/stylesheets/minable-ui/buttons/_button-core.scss +32 -0
  29. data/app/assets/stylesheets/minable-ui/buttons/_button-group.scss +0 -0
  30. data/app/assets/stylesheets/minable-ui/buttons/_button-icon.scss +0 -0
  31. data/app/assets/stylesheets/minable-ui/buttons/_button-settings.scss +33 -0
  32. data/app/assets/stylesheets/minable-ui/forms/_all.scss +5 -0
  33. data/app/assets/stylesheets/minable-ui/forms/_form-core.scss +63 -0
  34. data/app/assets/stylesheets/minable-ui/forms/_form-grouped.scss +148 -0
  35. data/app/assets/stylesheets/minable-ui/forms/_form-responsive.scss +59 -0
  36. data/app/assets/stylesheets/minable-ui/forms/_form-settings.scss +22 -0
  37. data/app/assets/stylesheets/minable-ui/forms/_form-stacked.scss +28 -0
  38. data/app/assets/stylesheets/minable-ui/tables/_all.scss +2 -0
  39. data/app/assets/stylesheets/minable-ui/tables/_tables-core.scss +16 -0
  40. data/app/assets/stylesheets/minable-ui/tables/_tables-settings.scss +9 -0
  41. data/features/step_definitions/minable_steps.rb +2 -2
  42. data/features/support/env.rb +4 -1
  43. data/features/support/minable_support.rb +3 -3
  44. data/lib/minable/generator.rb +13 -13
  45. data/lib/minable/version.rb +1 -1
  46. data/lib/minable.rb +3 -3
  47. data/lib/tasks/install.rake +9 -9
  48. data/minable.gemspec +10 -12
  49. data/readme.md +14 -32
  50. metadata +40 -32
  51. data/app/assets/stylesheets/_global.scss +0 -8
  52. data/app/assets/stylesheets/_minable.scss +0 -36
  53. data/app/assets/stylesheets/_settings.scss +0 -25
  54. data/app/assets/stylesheets/_shame.scss +0 -1
  55. data/app/assets/stylesheets/components/_all.scss +0 -6
  56. data/app/assets/stylesheets/components/_containers.scss +0 -1
  57. data/app/assets/stylesheets/components/_footer.scss +0 -1
  58. data/app/assets/stylesheets/components/_header.scss +0 -1
  59. data/app/assets/stylesheets/components/_typography.scss +0 -1
  60. data/app/assets/stylesheets/framework/grid/_grid-core.scss +0 -58
  61. data/app/assets/stylesheets/framework/grid/_grid-unit.scss +0 -195
  62. data/app/assets/stylesheets/modules/_all.scss +0 -1
  63. data/app/assets/stylesheets/templates/_404.scss +0 -1
  64. data/app/assets/stylesheets/templates/_all.scss +0 -3
  65. data/app/assets/stylesheets/templates/_home.scss +0 -1
@@ -1,7 +1,7 @@
1
1
  // Contains any classes used to hide or show elements, these will only be output when used
2
2
 
3
3
  // Hide text from visually-able users but keep it available for screen readers.
4
- .screen-reader-text {
4
+ %screen-reader-text {
5
5
  position: absolute !important;
6
6
  clip: rect(1px, 1px, 1px, 1px);
7
7
  clip: rect(1px 1px 1px 1px); // IE6, IE7 (deprecated syntax)
@@ -13,21 +13,19 @@
13
13
  }
14
14
 
15
15
  // Hide elements from visual users but not from screen readers
16
- %visually-hidden
17
- {
18
- position: absolute !important;
19
- clip: rect(1px 1px 1px 1px); /* IE6, IE7 (deprecated syntax) */
20
- clip: rect(1px, 1px, 1px, 1px);
21
- padding:0 !important;
22
- border:0 !important;
23
- height: 1px !important;
24
- width: 1px !important;
25
- overflow: hidden;
16
+ %visually-hidden {
17
+ position: absolute !important;
18
+ clip: rect(1px 1px 1px 1px); /* IE6, IE7 (deprecated syntax) */
19
+ clip: rect(1px, 1px, 1px, 1px);
20
+ padding:0 !important;
21
+ border:0 !important;
22
+ height: 1px !important;
23
+ width: 1px !important;
24
+ overflow: hidden;
26
25
  }
27
26
 
28
27
  // Hide elements from 'all the people'
29
- %fully-hidden
30
- {
31
- display: none;
32
- visibility: hidden;
28
+ %fully-hidden {
29
+ display: none;
30
+ visibility: hidden;
33
31
  }
@@ -1,4 +1,5 @@
1
1
  // More usefull mixins! Create reusable mixins where possible!
2
2
 
3
3
  @import "rem-fallback";
4
- @import "replace-text";
4
+ @import "replace-text";
5
+ @import "opacity";
@@ -0,0 +1,6 @@
1
+ @mixin opacity($opacity) {
2
+ opacity: $opacity;
3
+ $opacity-ie: $opacity * 100;
4
+ filter: alpha(opacity=$opacity-ie); //IE8
5
+ }
6
+ // Usage: @include opacity(0.8);
@@ -1,5 +1,4 @@
1
1
  // My modified version of Karl Merkli's rem mixin from http://css-tricks.com/snippets/css/less-mixin-for-rem-font-sizing/.
2
-
3
2
  // Pass in a property name and the target pixel values and the mixin will spit out the pixel fallback version and the rem version.
4
3
 
5
4
  @mixin rem-fallback($property, $values...) {
@@ -0,0 +1,3 @@
1
+ @import "buttons/all";
2
+ @import "forms/all";
3
+ @import "tables/all";
@@ -0,0 +1,3 @@
1
+ @import "button-settings";
2
+ @import "button-core";
3
+ @import "button-colors";
@@ -0,0 +1,49 @@
1
+ .min-button {
2
+ &.dark-text {
3
+ color: $min-b-text-colour-dark;
4
+ }
5
+
6
+ &.success {
7
+ background-color: $min-b-bg-colour-success;
8
+
9
+ &:hover {
10
+ background-color: $min-b-bg-colour-success-hover;
11
+ }
12
+ }
13
+
14
+ &.warning {
15
+ background-color: $min-b-bg-colour-warning;
16
+
17
+ &:hover {
18
+ background-color: $min-b-bg-colour-warning-hover;
19
+ }
20
+ }
21
+
22
+ &.error {
23
+ background-color: $min-b-bg-colour-error;
24
+
25
+ &:hover {
26
+ background-color: $min-b-bg-colour-error-hover;
27
+ }
28
+ }
29
+
30
+ &.info {
31
+ background-color: $min-b-bg-colour-info;
32
+
33
+ &:hover {
34
+ background-color: $min-b-bg-colour-info-hover;
35
+ }
36
+ }
37
+
38
+ &.hollow {
39
+ background-color: $min-b-bg-colour-hollow;
40
+ border: $min-b-hollow-border;
41
+ color: $min-b-hollow-text-color;
42
+
43
+ &:hover {
44
+ background-color: $min-b-bg-colour-hollow-hover;
45
+ border: $min-b-hollow-border-hover;
46
+ color: $min-b-hollow-text-color-hover;
47
+ }
48
+ }
49
+ }
@@ -0,0 +1,32 @@
1
+ .min-button {
2
+ background-color: $min-b-bg-colour-primary;
3
+ border: 0;
4
+ border-radius: $min-b-default-radius;
5
+ box-shadow: $min-b-default-box-shadow;
6
+ color: $min-b-text-colour-primary;
7
+ font-size: 1em;
8
+ outline: none;
9
+ padding: $min-b-default-padding;
10
+ text-align: center;
11
+ transition: $min-b-default-transition;
12
+
13
+ &:hover {
14
+ background-color: darken($min-b-bg-colour-primary, 10%);
15
+ }
16
+
17
+ &.small {
18
+ font-size: .875em;
19
+ }
20
+
21
+ &.large {
22
+ font-size: 1.125em;
23
+ }
24
+
25
+ &.xlarge {
26
+ font-size: 1.5em;
27
+ }
28
+
29
+ &.rounded {
30
+ border-radius: $min-b-rounded-radius;
31
+ }
32
+ }
@@ -0,0 +1,33 @@
1
+ // colours
2
+
3
+ $min-b-bg-colour-primary: #4BB5C1 !default;
4
+ $min-b-text-colour-primary: #FFF !default;
5
+
6
+ $min-b-text-colour-dark: #111 !default;
7
+
8
+ $min-b-bg-colour-hollow: transparent !default;
9
+ $min-b-bg-colour-hollow-hover: #FFF !default;
10
+ $min-b-bg-colour-success: #A7DF6F !default;
11
+ $min-b-bg-colour-success-hover: darken(#A7DF6F, 10%) !default;
12
+ $min-b-bg-colour-warning: #FBC147 !default;
13
+ $min-b-bg-colour-warning-hover: darken(#FBC147, 10%) !default;
14
+ $min-b-bg-colour-error: #DB634F !default;
15
+ $min-b-bg-colour-error-hover: darken(#DB634F, 10%) !default;
16
+ $min-b-bg-colour-info: #D8D8D8 !default;
17
+ $min-b-bg-colour-info-hover: darken(#D8D8D8, 10%) !default;
18
+
19
+
20
+ $min-b-default-border: none !default;
21
+ $min-b-default-box-shadow: none;
22
+ $min-b-default-padding: .75em 1.25em !default;
23
+ $min-b-default-radius: .25em !default;
24
+ $min-b-default-transition: .3s !default;
25
+
26
+ $min-b-rounded-radius: 2em !default;
27
+
28
+ $min-b-hollow-border: 1px solid $min-b-bg-colour-primary !default;
29
+ $min-b-hollow-border-hover: 1px solid #FFF !default;
30
+ $min-b-hollow-text-color: $min-b-bg-colour-primary !default;
31
+ $min-b-hollow-text-color-hover: $min-b-bg-colour-primary !default;
32
+
33
+ $min-f-default-padding: .75em 1.25em !default;
@@ -0,0 +1,5 @@
1
+ @import "form-settings";
2
+ @import "form-core";
3
+ @import "form-stacked";
4
+ @import "form-responsive";
5
+ @import "form-grouped";
@@ -0,0 +1,63 @@
1
+ .min-form {
2
+ border: none;
3
+ border-radius: $min-f-default-wrapper-border-radius;
4
+
5
+ fieldset {
6
+ border: $min-f-fieldset-border;
7
+ border-radius: $min-f-default-wrapper-border-radius;
8
+ margin-bottom: .5em;
9
+ }
10
+
11
+ input[type="text"],
12
+ input[type="password"],
13
+ input[type="email"],
14
+ input[type="url"],
15
+ input[type="date"],
16
+ input[type="month"],
17
+ input[type="time"],
18
+ input[type="datetime"],
19
+ input[type="datetime-local"],
20
+ input[type="week"],
21
+ input[type="number"],
22
+ input[type="search"],
23
+ input[type="tel"],
24
+ input[type="color"],
25
+ select,
26
+ textarea {
27
+ border: $min-f-default-border;
28
+ border-radius: $min-f-default-radius;
29
+ box-shadow: $min-f-default-box-shadow;
30
+ -webkit-box-sizing: border-box;
31
+ -moz-box-sizing: border-box;
32
+ box-sizing: border-box;
33
+ color: $min-f-text-colour;
34
+ display: inline-block;
35
+ margin: .5em .5em .5em 0;
36
+ outline: none;
37
+ padding: $min-f-default-input-padding;
38
+
39
+ &:active,
40
+ &:focus {
41
+ border: $min-f-default-border-active;
42
+ }
43
+ }
44
+
45
+ label {
46
+ color: $min-f-label-colour;
47
+ display: inline-block;
48
+ margin-right: .5em;
49
+
50
+ input[type="checkbox"] {
51
+ margin-right: .5em;
52
+ }
53
+ }
54
+
55
+ .min-group-block {
56
+ display: block;
57
+ margin: .5em 0;
58
+
59
+ label {
60
+ padding-left: .5em;
61
+ }
62
+ }
63
+ }
@@ -0,0 +1,148 @@
1
+ .min-form.grouped-stacked {
2
+ input[type="text"],
3
+ input[type="password"],
4
+ input[type="email"],
5
+ input[type="url"],
6
+ input[type="date"],
7
+ input[type="month"],
8
+ input[type="time"],
9
+ input[type="datetime"],
10
+ input[type="datetime-local"],
11
+ input[type="week"],
12
+ input[type="number"],
13
+ input[type="search"],
14
+ input[type="tel"],
15
+ input[type="color"],
16
+ select,
17
+ textarea {
18
+ border-collapse: collapse;
19
+ border-radius: 0;
20
+ border-top: 0;
21
+ box-shadow: none;
22
+ display: block;
23
+ margin: 0;
24
+ width: 100%;
25
+
26
+ &:active,
27
+ &:focus {
28
+ border: $min-f-default-border-active;
29
+ margin-top: -1px;
30
+ }
31
+
32
+ &:first-child {
33
+ border-radius: $min-f-default-radius $min-f-default-radius 0 0;
34
+ border-top: $min-f-default-border;
35
+ margin-top: .5em;
36
+
37
+ &:active,
38
+ &:focus {
39
+ border: $min-f-default-border-active;
40
+ }
41
+ }
42
+
43
+ &:last-of-type {
44
+ border-radius: 0 0 $min-f-default-radius $min-f-default-radius;
45
+ margin-bottom: .5em;
46
+ }
47
+ }
48
+ }
49
+
50
+ .min-form.grouped-inline {
51
+ input[type="text"],
52
+ input[type="password"],
53
+ input[type="email"],
54
+ input[type="url"],
55
+ input[type="date"],
56
+ input[type="month"],
57
+ input[type="time"],
58
+ input[type="datetime"],
59
+ input[type="datetime-local"],
60
+ input[type="week"],
61
+ input[type="number"],
62
+ input[type="search"],
63
+ input[type="tel"],
64
+ input[type="color"],
65
+ select,
66
+ textarea {
67
+ border-collapse: collapse;
68
+ border-radius: 0;
69
+ border-left: 0;
70
+ display: inline-block;
71
+ *display: inline;
72
+ margin: .5em 0;
73
+
74
+ &:active,
75
+ &:focus {
76
+ border: $min-f-default-border-active;
77
+ margin-left: -1px;
78
+ }
79
+
80
+ &:first-child {
81
+ border-radius: $min-f-default-radius 0 0 $min-f-default-radius;
82
+ border-left: $min-f-default-border;
83
+
84
+ &:active,
85
+ &:focus {
86
+ border: $min-f-default-border-active;
87
+ margin-left: 0;
88
+ }
89
+ }
90
+
91
+ &:last-of-type {
92
+ border-radius: 0 $min-f-default-radius $min-f-default-radius 0;
93
+ }
94
+ }
95
+
96
+ @if $min-f-breakpoint-enable == true {
97
+ $min-f-break-value: strip-unit($min-f-breakpoint-width) / strip-unit($min-browser-default-font-size);
98
+
99
+ @media(max-width: #{$min-f-break-value}em) {
100
+ input[type="text"],
101
+ input[type="password"],
102
+ input[type="email"],
103
+ input[type="url"],
104
+ input[type="date"],
105
+ input[type="month"],
106
+ input[type="time"],
107
+ input[type="datetime"],
108
+ input[type="datetime-local"],
109
+ input[type="week"],
110
+ input[type="number"],
111
+ input[type="search"],
112
+ input[type="tel"],
113
+ input[type="color"],
114
+ select,
115
+ textarea {
116
+ border-left: $min-f-default-border;
117
+ border-top: 0;
118
+ box-shadow: none;
119
+ display: block;
120
+ margin: 0;
121
+ width: 100%;
122
+
123
+ &:active,
124
+ &:focus {
125
+ border: $min-f-default-border-active;
126
+ margin-top: -1px;
127
+ margin-left: 0;
128
+ }
129
+
130
+ &:first-child {
131
+ border-radius: $min-f-default-radius $min-f-default-radius 0 0;
132
+ border-top: $min-f-default-border;
133
+ margin-top: .5em;
134
+
135
+ &:active,
136
+ &:focus {
137
+ border: $min-f-default-border-active;
138
+ }
139
+ }
140
+
141
+ &:last-of-type {
142
+ border-radius: 0 0 $min-f-default-radius $min-f-default-radius;
143
+ margin-bottom: .5em;
144
+ }
145
+ }
146
+ }
147
+ }
148
+ }
@@ -0,0 +1,59 @@
1
+ .min-form {
2
+ .min-input-1 {
3
+ width: 100%;
4
+ }
5
+
6
+ .min-input-1-2 {
7
+ width: 50%;
8
+ *width: 49.969%;
9
+ }
10
+
11
+ .min-input-1-3 {
12
+ width: 33.3333%;
13
+ *width: 33.3023%;
14
+ }
15
+
16
+ .min-input-2-3 {
17
+ width: 66.6667%;
18
+ *width: 66.6357%;
19
+ }
20
+
21
+ .min-input-1-4 {
22
+ width: 25%;
23
+ *width: 24.969%;
24
+ }
25
+
26
+ .min-input-3-4 {
27
+ width: 75%;
28
+ *width: 74.969%;
29
+ }
30
+ }
31
+
32
+ @if $min-f-breakpoint-enable == true {
33
+ $min-f-break-value: strip-unit($min-f-breakpoint-width) / strip-unit($min-browser-default-font-size);
34
+
35
+ @media(max-width: #{$min-f-break-value}em) {
36
+ .min-form {
37
+ input[type="text"],
38
+ input[type="password"],
39
+ input[type="email"],
40
+ input[type="url"],
41
+ input[type="date"],
42
+ input[type="month"],
43
+ input[type="time"],
44
+ input[type="datetime"],
45
+ input[type="datetime-local"],
46
+ input[type="week"],
47
+ input[type="number"],
48
+ input[type="search"],
49
+ input[type="tel"],
50
+ input[type="color"],
51
+ select,
52
+ textarea,
53
+ label {
54
+ margin: .5em 0;
55
+ width: 100%;
56
+ }
57
+ }
58
+ }
59
+ }
@@ -0,0 +1,22 @@
1
+ // colours
2
+
3
+ $min-f-bg-colour: #FFF !default;
4
+ $min-f-text-colour: #111 !default;
5
+ $min-f-label-colour: #555 !default;
6
+
7
+ $min-f-text-colour-dark: #111 !default;
8
+
9
+ $min-f-breakpoint-enable: true !default;
10
+ $min-f-breakpoint-width: 800px !default;
11
+
12
+ $min-f-default-wrapper-border-radius: .5em !default;
13
+
14
+ $min-f-default-border: 1px solid #CCC !default;
15
+ $min-f-default-box-shadow: inset 1px 1px 3px rgba(#999, 0.3) !default;
16
+ $min-f-default-input-padding: .75em 1.25em !default;
17
+ $min-f-default-radius: .5em !default;
18
+
19
+ $min-f-default-border-active: 1px solid #4BB5C1 !default;
20
+
21
+
22
+ $min-f-fieldset-border: 1px solid #D8D8D8 !default;
@@ -0,0 +1,28 @@
1
+ .min-form.stacked {
2
+ input[type="text"],
3
+ input[type="password"],
4
+ input[type="email"],
5
+ input[type="url"],
6
+ input[type="date"],
7
+ input[type="month"],
8
+ input[type="time"],
9
+ input[type="datetime"],
10
+ input[type="datetime-local"],
11
+ input[type="week"],
12
+ input[type="number"],
13
+ input[type="search"],
14
+ input[type="tel"],
15
+ input[type="color"],
16
+ select,
17
+ textarea {
18
+ display: block;
19
+ margin: .5em 0;
20
+ width: 100%;
21
+ }
22
+
23
+ label {
24
+ display: block;
25
+ margin: .5em 0;
26
+ padding-left: .5em;
27
+ }
28
+ }
@@ -0,0 +1,2 @@
1
+ @import "tables-settings";
2
+ @import "tables-core";
@@ -0,0 +1,16 @@
1
+ .min-table {
2
+ border-collapse: collapse;
3
+ border-spacing: 0;
4
+ border: $min-t-border-default-outer;
5
+ empty-cells: show;
6
+ text-align: $min-t-text-align;
7
+
8
+ thead {
9
+ background-color: $min-t-bg-default-head;
10
+ border-bottom: $min-t-border-default-head;
11
+ }
12
+
13
+ tbody {
14
+ background-color: $min-t-bg-default-body;
15
+ }
16
+ }
@@ -0,0 +1,9 @@
1
+ $min-t-border-default-outer: 1px solid #D8D8D8 !default;
2
+ $min-t-border-default-head: 2px solid #D8D8D8 !default;
3
+
4
+ $min-t-bg-default: #D8D8D8 !default;
5
+ $min-t-bg-default-head: #D8D8D8 !default;
6
+ $min-t-bg-default-body: #FFF !default;
7
+
8
+
9
+ $min-t-text-align: left !default;
@@ -6,13 +6,13 @@ Given /^I install minable to "([^"]*)"$/ do |path|
6
6
  end
7
7
 
8
8
  Then /^the sass directories(?: with "([^"]+)" prefix)? should have been generated$/ do |prefix|
9
- sass_directories = ["components", "framework", "helpers", "modules", "templates"]
9
+ sass_directories = ['minable', 'minable-ui']
10
10
  sass_directories.map!{ |directory| minable_path(prefix, directory) }
11
11
  check_directory_presence(sass_directories, true)
12
12
  end
13
13
 
14
14
  Then /^the master minable partial should have been generated(?: within "([^"]+)" directory)?$/ do |prefix|
15
- check_file_presence([minable_path(prefix, '_minable.scss')], true)
15
+ check_file_presence([minable_path(prefix, '_all.scss')], true)
16
16
  end
17
17
 
18
18
  Then /^minable should not have been generated$/ do
@@ -1 +1,4 @@
1
- require "aruba/cucumber"
1
+ require 'aruba/cucumber'
2
+ require "bundler"
3
+
4
+ Bundler.require :default
@@ -3,15 +3,15 @@ module MinableSupport
3
3
  if path
4
4
  run_simple("bundle exec minable install --path '#{path}'")
5
5
  else
6
- run_simple("bundle exec minable install")
6
+ run_simple('bundle exec minable install')
7
7
  end
8
8
  end
9
9
 
10
10
  def minable_path(prefix, path)
11
11
  if prefix
12
- File.join(prefix, 'minable', path)
12
+ File.join(prefix, path)
13
13
  else
14
- File.join('minable', path)
14
+ path
15
15
  end
16
16
  end
17
17
  end