bootstrap-sass-rails 2.0.2.2 → 2.0.3.0pre1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (79) hide show
  1. data/lib/bootstrap/sass/rails/version.rb +1 -1
  2. data/test/cases/usage_css_spec.rb +7 -4
  3. data/test/dummy/log/test.log +610 -0
  4. data/test/dummy/tmp/cache/assets/C29/E80/sprockets%2F8f076727207424919c7170c7157bbe37 +0 -0
  5. data/test/dummy/tmp/cache/assets/D04/3C0/sprockets%2F29d763bd40cc25622b1f04b876a5c3e3 +0 -0
  6. data/test/dummy/tmp/cache/assets/D3F/FA0/sprockets%2F22c8366fdbaaa2872b202dfe7376629f +0 -0
  7. data/test/dummy/tmp/cache/assets/D7C/3E0/sprockets%2F53c81ab87ec56a748428a59da9a5d5de +0 -0
  8. data/test/dummy/tmp/cache/assets/E3A/D90/sprockets%2Fce0dbefdb4416ebc42589ecdbf7d7857 +0 -0
  9. data/test/dummy/tmp/cache/sass/367107abe8cc7204b7df467455e0644864892d9f/_accordion.scssc +0 -0
  10. data/test/dummy/tmp/cache/sass/367107abe8cc7204b7df467455e0644864892d9f/_button-groups.scssc +0 -0
  11. data/test/dummy/tmp/cache/sass/367107abe8cc7204b7df467455e0644864892d9f/_buttons.scssc +0 -0
  12. data/test/dummy/tmp/cache/sass/367107abe8cc7204b7df467455e0644864892d9f/_close.scssc +0 -0
  13. data/test/dummy/tmp/cache/sass/367107abe8cc7204b7df467455e0644864892d9f/_code.scssc +0 -0
  14. data/test/dummy/tmp/cache/sass/367107abe8cc7204b7df467455e0644864892d9f/_component-animations.scssc +0 -0
  15. data/test/dummy/tmp/cache/sass/367107abe8cc7204b7df467455e0644864892d9f/_dropdowns.scssc +0 -0
  16. data/test/dummy/tmp/cache/sass/367107abe8cc7204b7df467455e0644864892d9f/_forms.scssc +0 -0
  17. data/test/dummy/tmp/cache/sass/367107abe8cc7204b7df467455e0644864892d9f/_labels-badges.scssc +0 -0
  18. data/test/dummy/tmp/cache/sass/367107abe8cc7204b7df467455e0644864892d9f/_layouts.scssc +0 -0
  19. data/test/dummy/tmp/cache/sass/367107abe8cc7204b7df467455e0644864892d9f/_mixins.scssc +0 -0
  20. data/test/dummy/tmp/cache/sass/367107abe8cc7204b7df467455e0644864892d9f/_modals.scssc +0 -0
  21. data/test/dummy/tmp/cache/sass/367107abe8cc7204b7df467455e0644864892d9f/_navbar.scssc +0 -0
  22. data/test/dummy/tmp/cache/sass/367107abe8cc7204b7df467455e0644864892d9f/_navs.scssc +0 -0
  23. data/test/dummy/tmp/cache/sass/367107abe8cc7204b7df467455e0644864892d9f/_progress-bars.scssc +0 -0
  24. data/test/dummy/tmp/cache/sass/367107abe8cc7204b7df467455e0644864892d9f/_reset.scssc +0 -0
  25. data/test/dummy/tmp/cache/sass/367107abe8cc7204b7df467455e0644864892d9f/_responsive-1200px-min.scssc +0 -0
  26. data/test/dummy/tmp/cache/sass/367107abe8cc7204b7df467455e0644864892d9f/_responsive-767px-max.scssc +0 -0
  27. data/test/dummy/tmp/cache/sass/367107abe8cc7204b7df467455e0644864892d9f/_responsive-768px-979px.scssc +0 -0
  28. data/test/dummy/tmp/cache/sass/367107abe8cc7204b7df467455e0644864892d9f/_responsive-navbar.scssc +0 -0
  29. data/test/dummy/tmp/cache/sass/367107abe8cc7204b7df467455e0644864892d9f/_responsive-utilities.scssc +0 -0
  30. data/test/dummy/tmp/cache/sass/367107abe8cc7204b7df467455e0644864892d9f/_responsive.scssc +0 -0
  31. data/test/dummy/tmp/cache/sass/367107abe8cc7204b7df467455e0644864892d9f/_sprites.scssc +0 -0
  32. data/test/dummy/tmp/cache/sass/367107abe8cc7204b7df467455e0644864892d9f/_tables.scssc +0 -0
  33. data/test/dummy/tmp/cache/sass/367107abe8cc7204b7df467455e0644864892d9f/_thumbnails.scssc +0 -0
  34. data/test/dummy/tmp/cache/sass/367107abe8cc7204b7df467455e0644864892d9f/_type.scssc +0 -0
  35. data/test/dummy/tmp/cache/sass/367107abe8cc7204b7df467455e0644864892d9f/_variables.scssc +0 -0
  36. data/test/dummy/tmp/cache/sass/766526f7d87ffdf0401dde0ec8d49f976470392d/bootstrap.css.scssc +0 -0
  37. data/vendor/assets/javascripts/twitter/bootstrap/alert.js +28 -32
  38. data/vendor/assets/javascripts/twitter/bootstrap/button.js +29 -33
  39. data/vendor/assets/javascripts/twitter/bootstrap/carousel.js +27 -19
  40. data/vendor/assets/javascripts/twitter/bootstrap/collapse.js +44 -25
  41. data/vendor/assets/javascripts/twitter/bootstrap/dropdown.js +18 -10
  42. data/vendor/assets/javascripts/twitter/bootstrap/modal.js +25 -17
  43. data/vendor/assets/javascripts/twitter/bootstrap/popover.js +13 -10
  44. data/vendor/assets/javascripts/twitter/bootstrap/scrollspy.js +43 -17
  45. data/vendor/assets/javascripts/twitter/bootstrap/tab.js +12 -7
  46. data/vendor/assets/javascripts/twitter/bootstrap/tooltip.js +40 -35
  47. data/vendor/assets/javascripts/twitter/bootstrap/transition.js +30 -20
  48. data/vendor/assets/javascripts/twitter/bootstrap/typeahead.js +25 -11
  49. data/vendor/assets/stylesheets/twitter/bootstrap.css.scss +2 -3
  50. data/vendor/assets/stylesheets/twitter/bootstrap/_accordion.scss +5 -0
  51. data/vendor/assets/stylesheets/twitter/bootstrap/_button-groups.scss +55 -36
  52. data/vendor/assets/stylesheets/twitter/bootstrap/_buttons.scss +16 -11
  53. data/vendor/assets/stylesheets/twitter/bootstrap/_close.scss +12 -1
  54. data/vendor/assets/stylesheets/twitter/bootstrap/_code.scss +4 -4
  55. data/vendor/assets/stylesheets/twitter/bootstrap/_component-animations.scss +5 -5
  56. data/vendor/assets/stylesheets/twitter/bootstrap/_dropdowns.scss +15 -20
  57. data/vendor/assets/stylesheets/twitter/bootstrap/_forms.scss +57 -29
  58. data/vendor/assets/stylesheets/twitter/bootstrap/_labels-badges.scss +55 -0
  59. data/vendor/assets/stylesheets/twitter/bootstrap/_layouts.scss +1 -1
  60. data/vendor/assets/stylesheets/twitter/bootstrap/_mixins.scss +54 -36
  61. data/vendor/assets/stylesheets/twitter/bootstrap/_modals.scss +2 -2
  62. data/vendor/assets/stylesheets/twitter/bootstrap/_navbar.scss +64 -41
  63. data/vendor/assets/stylesheets/twitter/bootstrap/_navs.scss +36 -35
  64. data/vendor/assets/stylesheets/twitter/bootstrap/_progress-bars.scss +16 -8
  65. data/vendor/assets/stylesheets/twitter/bootstrap/_reset.scss +3 -3
  66. data/vendor/assets/stylesheets/twitter/bootstrap/_responsive-1200px-min.scss +26 -0
  67. data/vendor/assets/stylesheets/twitter/bootstrap/_responsive-767px-max.scss +150 -0
  68. data/vendor/assets/stylesheets/twitter/bootstrap/_responsive-768px-979px.scss +19 -0
  69. data/vendor/assets/stylesheets/twitter/bootstrap/_responsive-navbar.scss +146 -0
  70. data/vendor/assets/stylesheets/twitter/bootstrap/_responsive-utilities.scss +41 -0
  71. data/vendor/assets/stylesheets/twitter/bootstrap/_responsive.scss +15 -338
  72. data/vendor/assets/stylesheets/twitter/bootstrap/_sprites.scss +25 -5
  73. data/vendor/assets/stylesheets/twitter/bootstrap/_tables.scss +22 -6
  74. data/vendor/assets/stylesheets/twitter/bootstrap/_thumbnails.scss +14 -2
  75. data/vendor/assets/stylesheets/twitter/bootstrap/_type.scss +7 -6
  76. data/vendor/assets/stylesheets/twitter/bootstrap/_variables.scss +10 -5
  77. metadata +30 -17
  78. data/vendor/assets/stylesheets/twitter/bootstrap/_badges.scss +0 -36
  79. data/vendor/assets/stylesheets/twitter/bootstrap/_labels.scss +0 -38
@@ -21,6 +21,11 @@
21
21
  background-color: $grayLighter;
22
22
  }
23
23
 
24
+ // Redeclare pull classes because of specifity
25
+ .nav > .pull-right {
26
+ float: right;
27
+ }
28
+
24
29
  // Nav headers (for dropdowns and lists)
25
30
  .nav .nav-header {
26
31
  display: block;
@@ -98,7 +103,6 @@
98
103
  .nav-tabs {
99
104
  border-bottom: 1px solid #ddd;
100
105
  }
101
-
102
106
  // Make the list-items overlay the bottom border
103
107
  .nav-tabs > li {
104
108
  margin-bottom: -1px;
@@ -125,6 +129,7 @@
125
129
  cursor: default;
126
130
  }
127
131
 
132
+
128
133
  // PILLS
129
134
  // -----
130
135
 
@@ -189,14 +194,11 @@
189
194
  // DROPDOWNS
190
195
  // ---------
191
196
 
192
- // Position the menu
193
- .nav-tabs .dropdown-menu,
194
- .nav-pills .dropdown-menu {
195
- margin-top: 1px;
196
- border-width: 1px;
197
+ .nav-tabs .dropdown-menu {
198
+ @include border-radius(0 0 5px 5px); // remove the top rounded corners here since there is a hard edge above the menu
197
199
  }
198
200
  .nav-pills .dropdown-menu {
199
- @include border-radius(4px);
201
+ @include border-radius(4px); // make rounded corners match the pills
200
202
  }
201
203
 
202
204
  // Default dropdown links
@@ -233,14 +235,14 @@
233
235
  // -------------------------
234
236
  .nav-tabs .open .dropdown-toggle,
235
237
  .nav-pills .open .dropdown-toggle,
236
- .nav > .open.active > a:hover {
238
+ .nav > li.dropdown.open.active > a:hover {
237
239
  color: $white;
238
240
  background-color: $grayLight;
239
241
  border-color: $grayLight;
240
242
  }
241
- .nav .open .caret,
242
- .nav .open.active .caret,
243
- .nav .open a:hover .caret {
243
+ .nav li.dropdown.open .caret,
244
+ .nav li.dropdown.open.active .caret,
245
+ .nav li.dropdown.open a:hover .caret {
244
246
  border-top-color: $white;
245
247
  border-bottom-color: $white;
246
248
  @include opacity(100);
@@ -265,14 +267,13 @@
265
267
  @include clearfix();
266
268
  }
267
269
  .tab-content {
268
- display: table; // prevent content from running below tabs
269
- width: 100%;
270
+ overflow: auto; // prevent content from running below tabs
270
271
  }
271
272
 
272
273
  // Remove border on bottom, left, right
273
- .tabs-below .nav-tabs,
274
- .tabs-right .nav-tabs,
275
- .tabs-left .nav-tabs {
274
+ .tabs-below > .nav-tabs,
275
+ .tabs-right > .nav-tabs,
276
+ .tabs-left > .nav-tabs {
276
277
  border-bottom: 0;
277
278
  }
278
279
 
@@ -290,22 +291,22 @@
290
291
  // BOTTOM
291
292
  // ------
292
293
 
293
- .tabs-below .nav-tabs {
294
+ .tabs-below > .nav-tabs {
294
295
  border-top: 1px solid #ddd;
295
296
  }
296
- .tabs-below .nav-tabs > li {
297
+ .tabs-below > .nav-tabs > li {
297
298
  margin-top: -1px;
298
299
  margin-bottom: 0;
299
300
  }
300
- .tabs-below .nav-tabs > li > a {
301
+ .tabs-below > .nav-tabs > li > a {
301
302
  @include border-radius(0 0 4px 4px);
302
303
  &:hover {
303
304
  border-bottom-color: transparent;
304
305
  border-top-color: #ddd;
305
306
  }
306
307
  }
307
- .tabs-below .nav-tabs .active > a,
308
- .tabs-below .nav-tabs .active > a:hover {
308
+ .tabs-below > .nav-tabs .active > a,
309
+ .tabs-below > .nav-tabs .active > a:hover {
309
310
  border-color: transparent #ddd #ddd #ddd;
310
311
  }
311
312
 
@@ -313,51 +314,51 @@
313
314
  // ------------
314
315
 
315
316
  // Common styles
316
- .tabs-left .nav-tabs > li,
317
- .tabs-right .nav-tabs > li {
317
+ .tabs-left > .nav-tabs > li,
318
+ .tabs-right > .nav-tabs > li {
318
319
  float: none;
319
320
  }
320
- .tabs-left .nav-tabs > li > a,
321
- .tabs-right .nav-tabs > li > a {
321
+ .tabs-left > .nav-tabs > li > a,
322
+ .tabs-right > .nav-tabs > li > a {
322
323
  min-width: 74px;
323
324
  margin-right: 0;
324
325
  margin-bottom: 3px;
325
326
  }
326
327
 
327
328
  // Tabs on the left
328
- .tabs-left .nav-tabs {
329
+ .tabs-left > .nav-tabs {
329
330
  float: left;
330
331
  margin-right: 19px;
331
332
  border-right: 1px solid #ddd;
332
333
  }
333
- .tabs-left .nav-tabs > li > a {
334
+ .tabs-left > .nav-tabs > li > a {
334
335
  margin-right: -1px;
335
336
  @include border-radius(4px 0 0 4px);
336
337
  }
337
- .tabs-left .nav-tabs > li > a:hover {
338
+ .tabs-left > .nav-tabs > li > a:hover {
338
339
  border-color: $grayLighter #ddd $grayLighter $grayLighter;
339
340
  }
340
- .tabs-left .nav-tabs .active > a,
341
- .tabs-left .nav-tabs .active > a:hover {
341
+ .tabs-left > .nav-tabs .active > a,
342
+ .tabs-left > .nav-tabs .active > a:hover {
342
343
  border-color: #ddd transparent #ddd #ddd;
343
344
  *border-right-color: $white;
344
345
  }
345
346
 
346
347
  // Tabs on the right
347
- .tabs-right .nav-tabs {
348
+ .tabs-right > .nav-tabs {
348
349
  float: right;
349
350
  margin-left: 19px;
350
351
  border-left: 1px solid #ddd;
351
352
  }
352
- .tabs-right .nav-tabs > li > a {
353
+ .tabs-right > .nav-tabs > li > a {
353
354
  margin-left: -1px;
354
355
  @include border-radius(0 4px 4px 0);
355
356
  }
356
- .tabs-right .nav-tabs > li > a:hover {
357
+ .tabs-right > .nav-tabs > li > a:hover {
357
358
  border-color: $grayLighter $grayLighter $grayLighter #ddd;
358
359
  }
359
- .tabs-right .nav-tabs .active > a,
360
- .tabs-right .nav-tabs .active > a:hover {
360
+ .tabs-right > .nav-tabs .active > a,
361
+ .tabs-right > .nav-tabs .active > a:hover {
361
362
  border-color: #ddd #ddd #ddd transparent;
362
363
  *border-left-color: $white;
363
364
  }
@@ -7,26 +7,32 @@
7
7
 
8
8
  // Webkit
9
9
  @-webkit-keyframes progress-bar-stripes {
10
- from { background-position: 0 0; }
11
- to { background-position: 40px 0; }
10
+ from { background-position: 40px 0; }
11
+ to { background-position: 0 0; }
12
12
  }
13
13
 
14
14
  // Firefox
15
15
  @-moz-keyframes progress-bar-stripes {
16
- from { background-position: 0 0; }
17
- to { background-position: 40px 0; }
16
+ from { background-position: 40px 0; }
17
+ to { background-position: 0 0; }
18
18
  }
19
19
 
20
20
  // IE9
21
21
  @-ms-keyframes progress-bar-stripes {
22
- from { background-position: 0 0; }
23
- to { background-position: 40px 0; }
22
+ from { background-position: 40px 0; }
23
+ to { background-position: 0 0; }
24
24
  }
25
25
 
26
+ // Opera
27
+ @-o-keyframes progress-bar-stripes {
28
+ from { background-position: 0 0; }
29
+ to { background-position: 40px 0; }
30
+ }
31
+
26
32
  // Spec
27
33
  @keyframes progress-bar-stripes {
28
- from { background-position: 0 0; }
29
- to { background-position: 40px 0; }
34
+ from { background-position: 40px 0; }
35
+ to { background-position: 0 0; }
30
36
  }
31
37
 
32
38
 
@@ -68,6 +74,8 @@
68
74
  .progress.active .bar {
69
75
  -webkit-animation: progress-bar-stripes 2s linear infinite;
70
76
  -moz-animation: progress-bar-stripes 2s linear infinite;
77
+ -ms-animation: progress-bar-stripes 2s linear infinite;
78
+ -o-animation: progress-bar-stripes 2s linear infinite;
71
79
  animation: progress-bar-stripes 2s linear infinite;
72
80
  }
73
81
 
@@ -75,10 +75,10 @@ sub {
75
75
  // -------------------------
76
76
 
77
77
  img {
78
- height: auto;
78
+ max-width: 100%; // Make images inherently responsive
79
+ vertical-align: middle;
79
80
  border: 0;
80
81
  -ms-interpolation-mode: bicubic;
81
- vertical-align: middle;
82
82
  }
83
83
 
84
84
  // Forms
@@ -111,10 +111,10 @@ input[type="submit"] {
111
111
  -webkit-appearance: button; // Style clickable inputs in iOS
112
112
  }
113
113
  input[type="search"] { // Appearance in Safari/Chrome
114
- -webkit-appearance: textfield;
115
114
  -webkit-box-sizing: content-box;
116
115
  -moz-box-sizing: content-box;
117
116
  box-sizing: content-box;
117
+ -webkit-appearance: textfield;
118
118
  }
119
119
  input[type="search"]::-webkit-search-decoration,
120
120
  input[type="search"]::-webkit-search-cancel-button {
@@ -0,0 +1,26 @@
1
+ // LARGE DESKTOP & UP
2
+ // ------------------
3
+
4
+ @media (min-width: 1200px) {
5
+
6
+ // Fixed grid
7
+ @include grid-core(70px, 30px);
8
+
9
+ // Fluid grid
10
+ @include grid-fluid(5.982905983%, 2.564102564%);
11
+
12
+ // Input grid
13
+ @include grid-input(70px, 30px);
14
+
15
+ // Thumbnails
16
+ .thumbnails {
17
+ margin-left: -30px;
18
+ }
19
+ .thumbnails > li {
20
+ margin-left: 30px;
21
+ }
22
+ .row-fluid .thumbnails {
23
+ margin-left: 0;
24
+ }
25
+
26
+ }
@@ -0,0 +1,150 @@
1
+ // UP TO LANDSCAPE PHONE
2
+ // ---------------------
3
+
4
+ @media (max-width: 480px) {
5
+
6
+ // Smooth out the collapsing/expanding nav
7
+ .nav-collapse {
8
+ -webkit-transform: translate3d(0, 0, 0); // activate the GPU
9
+ }
10
+
11
+ // Block level the page header small tag for readability
12
+ .page-header h1 small {
13
+ display: block;
14
+ line-height: $baseLineHeight;
15
+ }
16
+
17
+ // Update checkboxes for iOS
18
+ input[type="checkbox"],
19
+ input[type="radio"] {
20
+ border: 1px solid #ccc;
21
+ }
22
+
23
+ // Remove the horizontal form styles
24
+ .form-horizontal .control-group > label {
25
+ float: none;
26
+ width: auto;
27
+ padding-top: 0;
28
+ text-align: left;
29
+ }
30
+ // Move over all input controls and content
31
+ .form-horizontal .controls {
32
+ margin-left: 0;
33
+ }
34
+ // Move the options list down to align with labels
35
+ .form-horizontal .control-list {
36
+ padding-top: 0; // has to be padding because margin collaspes
37
+ }
38
+ // Move over buttons in .form-actions to align with .controls
39
+ .form-horizontal .form-actions {
40
+ padding-left: 10px;
41
+ padding-right: 10px;
42
+ }
43
+
44
+ // Modals
45
+ .modal {
46
+ position: absolute;
47
+ top: 10px;
48
+ left: 10px;
49
+ right: 10px;
50
+ width: auto;
51
+ margin: 0;
52
+ &.fade.in { top: auto; }
53
+ }
54
+ .modal-header .close {
55
+ padding: 10px;
56
+ margin: -10px;
57
+ }
58
+
59
+ // Carousel
60
+ .carousel-caption {
61
+ position: static;
62
+ }
63
+
64
+ }
65
+
66
+
67
+
68
+ // LANDSCAPE PHONE TO SMALL DESKTOP & PORTRAIT TABLET
69
+ // --------------------------------------------------
70
+
71
+ @media (max-width: 767px) {
72
+
73
+ // Padding to set content in a bit
74
+ body {
75
+ padding-left: 20px;
76
+ padding-right: 20px;
77
+ }
78
+ // Negative indent the now static "fixed" navbar
79
+ .navbar-fixed-top,
80
+ .navbar-fixed-bottom {
81
+ margin-left: -20px;
82
+ margin-right: -20px;
83
+ }
84
+ // Remove padding on container given explicit padding set on body
85
+ .container-fluid {
86
+ padding: 0;
87
+ }
88
+
89
+ // TYPOGRAPHY
90
+ // ----------
91
+ // Reset horizontal dl
92
+ .dl-horizontal {
93
+ dt {
94
+ float: none;
95
+ clear: none;
96
+ width: auto;
97
+ text-align: left;
98
+ }
99
+ dd {
100
+ margin-left: 0;
101
+ }
102
+ }
103
+
104
+ // GRID & CONTAINERS
105
+ // -----------------
106
+ // Remove width from containers
107
+ .container {
108
+ width: auto;
109
+ }
110
+ // Fluid rows
111
+ .row-fluid {
112
+ width: 100%;
113
+ }
114
+ // Undo negative margin on rows and thumbnails
115
+ .row,
116
+ .thumbnails {
117
+ margin-left: 0;
118
+ }
119
+ // Make all grid-sized elements block level again
120
+ [class*="span"],
121
+ .row-fluid [class*="span"] {
122
+ float: none;
123
+ display: block;
124
+ width: auto;
125
+ margin-left: 0;
126
+ }
127
+
128
+
129
+ // FORM FIELDS
130
+ // -----------
131
+ // Make span* classes full width
132
+ .input-large,
133
+ .input-xlarge,
134
+ .input-xxlarge,
135
+ input[class*="span"],
136
+ select[class*="span"],
137
+ textarea[class*="span"],
138
+ .uneditable-input {
139
+ @include input-block-level();
140
+ }
141
+ // But don't let it screw up prepend/append inputs
142
+ .input-prepend input,
143
+ .input-append input,
144
+ .input-prepend input[class*="span"],
145
+ .input-append input[class*="span"] {
146
+ display: inline-block; // redeclare so they don't wrap to new lines
147
+ width: auto;
148
+ }
149
+
150
+ }
@@ -0,0 +1,19 @@
1
+ // PORTRAIT TABLET TO DEFAULT DESKTOP
2
+ // ----------------------------------
3
+
4
+ @media (min-width: 768px) and (max-width: 979px) {
5
+
6
+ // Fixed grid
7
+ @include grid-core(42px, 20px);
8
+
9
+ // Fluid grid
10
+ @include grid-fluid(5.801104972%, 2.762430939%);
11
+
12
+ // Input grid
13
+ @include grid-input(42px, 20px);
14
+
15
+ // No need to reset .thumbnails here since it's the same @gridGutterWidth
16
+ .thumbnails {
17
+ margin-left: -$gridGutterWidth;
18
+ }
19
+ }