uniform-ui 0.6 → 1.0

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 (106) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +27 -0
  3. data/CNAME +1 -0
  4. data/Gemfile +0 -4
  5. data/Gemfile.lock +1 -11
  6. data/README.md +2 -3
  7. data/Rakefile +34 -24
  8. data/index.html +240 -1160
  9. data/preview/{_tables.html.erb → alerts.html.erb} +0 -0
  10. data/preview/buttons.html.erb +62 -0
  11. data/preview/cards.html.erb +23 -0
  12. data/preview/colors.html.erb +22 -0
  13. data/preview/{_tabs.html.erb → dropdown.html.erb} +0 -0
  14. data/preview/form.html.erb +233 -0
  15. data/preview/grid.html.erb +304 -0
  16. data/preview/helpers.html.erb +225 -0
  17. data/preview/index.html.erb +74 -50
  18. data/preview/{_tiles.html.erb → labels.html.erb} +0 -0
  19. data/preview/layout.html.erb +63 -0
  20. data/preview/loaders.html.erb +83 -0
  21. data/preview/modal.html.erb +1 -0
  22. data/preview/nav.html.erb +77 -0
  23. data/preview/preview.scss +39 -10
  24. data/preview/rows.html.erb +36 -0
  25. data/preview/select.html.erb +1 -0
  26. data/preview/tables.html.erb +1 -0
  27. data/preview/tabs.html.erb +17 -0
  28. data/preview/tiles.html.erb +1 -0
  29. data/preview/tooltip.erb +1 -0
  30. data/site/alerts.html +157 -0
  31. data/site/alerts.html copy +133 -0
  32. data/site/buttons.html +286 -0
  33. data/site/cards.html +177 -0
  34. data/site/colors.html +275 -0
  35. data/site/dropdown.html +157 -0
  36. data/site/dropdown.html copy +141 -0
  37. data/site/form.html +369 -0
  38. data/site/grid.html +716 -0
  39. data/site/helpers.html +1008 -0
  40. data/site/index.html +208 -617
  41. data/site/labels.html +157 -0
  42. data/site/layout.html +313 -0
  43. data/site/loaders.html +233 -0
  44. data/site/modal.html +157 -0
  45. data/site/nav.html +229 -0
  46. data/site/preview.css +1 -1
  47. data/site/preview.js +59 -0
  48. data/site/rows.html +190 -0
  49. data/site/select.html +157 -0
  50. data/site/tables.html +157 -0
  51. data/site/tabs.html +171 -0
  52. data/site/tiles.html +157 -0
  53. data/site/tiles.html copy +109 -0
  54. data/site/tooltip +157 -0
  55. data/site/uniform.css +1 -1
  56. data/uniform.gemspec +2 -8
  57. data/vendor/assets/stylesheets/uniform.scss +4 -4
  58. data/vendor/assets/stylesheets/uniform/base.scss +2 -0
  59. data/vendor/assets/stylesheets/uniform/components/alert.scss +27 -0
  60. data/vendor/assets/stylesheets/uniform/components/buttons.scss +135 -86
  61. data/vendor/assets/stylesheets/uniform/components/card.scss +69 -67
  62. data/vendor/assets/stylesheets/uniform/components/dropdown.scss +69 -0
  63. data/vendor/assets/stylesheets/uniform/components/form.scss +268 -85
  64. data/vendor/assets/stylesheets/uniform/components/grid.scss +214 -72
  65. data/vendor/assets/stylesheets/uniform/components/label.scss +63 -0
  66. data/vendor/assets/stylesheets/uniform/components/loaders.scss +38 -18
  67. data/vendor/assets/stylesheets/uniform/components/modal.scss +51 -0
  68. data/vendor/assets/stylesheets/uniform/components/nav.scss +171 -54
  69. data/vendor/assets/stylesheets/uniform/components/row.scss +69 -101
  70. data/vendor/assets/stylesheets/uniform/components/select.scss +98 -0
  71. data/vendor/assets/stylesheets/uniform/components/table.scss +83 -0
  72. data/vendor/assets/stylesheets/uniform/components/tabs.scss +39 -26
  73. data/vendor/assets/stylesheets/uniform/components/tile.scss +15 -27
  74. data/vendor/assets/stylesheets/uniform/components/tooltip.scss +46 -0
  75. data/vendor/assets/stylesheets/uniform/defaults.scss +85 -19
  76. data/vendor/assets/stylesheets/uniform/helpers.scss +82 -81
  77. data/vendor/assets/stylesheets/uniform/helpers/colors.scss +37 -0
  78. data/vendor/assets/stylesheets/uniform/helpers/margin.scss +44 -0
  79. data/vendor/assets/stylesheets/uniform/helpers/padding.scss +74 -0
  80. data/vendor/assets/stylesheets/uniform/helpers/sizes.scss +31 -0
  81. data/vendor/assets/stylesheets/uniform/helpers/text.scss +121 -0
  82. data/vendor/assets/stylesheets/uniform/mixins.scss +25 -48
  83. data/vendor/assets/stylesheets/uniform/variables.scss +10 -28
  84. metadata +61 -85
  85. data/preview/_buttons.html.erb +0 -59
  86. data/preview/_cards.html.erb +0 -82
  87. data/preview/_colors.html.erb +0 -12
  88. data/preview/_forms.html.erb +0 -196
  89. data/preview/_grid.html.erb +0 -49
  90. data/preview/_helpers.html.erb +0 -158
  91. data/preview/_inputs.html.erb +0 -93
  92. data/preview/_installation.html.erb +0 -4
  93. data/preview/_lists.html.erb +0 -53
  94. data/preview/_loaders.html.erb +0 -72
  95. data/preview/_nav.html.erb +0 -46
  96. data/preview/_philosophy.html.erb +0 -33
  97. data/preview/_rows.html.erb +0 -35
  98. data/preview/_uniform.html.erb +0 -4
  99. data/site/site/logo.png +0 -0
  100. data/site/site/preview.css +0 -1
  101. data/site/site/uniform.css +0 -1
  102. data/vendor/assets/stylesheets/uniform/components/inputs.scss +0 -131
  103. data/vendor/assets/stylesheets/uniform/components/lists.scss +0 -62
  104. data/vendor/assets/stylesheets/uniform/components/table-container.scss +0 -44
  105. data/vendor/assets/stylesheets/uniform/components/table-form.scss +0 -159
  106. data/vendor/assets/stylesheets/uniform/mixins/grid-framework.scss +0 -142
data/site/preview.css CHANGED
@@ -1 +1 @@
1
- *{box-sizing:border-box}html,body{font-family:Helvetica, sans-serif;font-size:14px;line-height:1.42857143}.section{width:100%;padding:100px 50px;border-bottom:1px solid #cccccc}.section pre:first-of-type{margin-top:0}.side-nav{position:fixed;overflow-y:scroll;width:250px;height:100%;border-right:1px solid #cccccc}.side-nav a{color:black}.main-content{margin-left:250px}.swatch{height:1em;width:4em;margin-right:5px;background:gray;display:inline-block;vertical-align:middle}.table{width:100%}.table td{padding:5px}.side-nav{font-size:1.2em}
1
+ *{box-sizing:border-box}html,body{background:#ffffff;font-family:-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,Oxygen-Sans,Ubuntu,Cantarell,"Helvetica Neue",sans-serif;line-height:1.5}.section{width:100%;padding:100px 50px;border-bottom:1px solid #cccccc}.section pre:first-of-type{margin-top:0}.section h1,.section h2,.section h3,.section h4,.section h5,.section h6{margin-top:2em;margin-bottom:0.5em}.section h1:first-of-type,.section h2:first-of-type,.section h3:first-of-type,.section h4:first-of-type,.section h5:first-of-type,.section h6:first-of-type{margin-top:0}.side-nav{font-size:1.2em;position:fixed;overflow-y:scroll;width:250px;height:100%;border-right:1px solid #cccccc}.side-nav a{color:black}.main-content{margin-left:250px}.swatch{height:1em;width:4em;margin-right:5px;background:gray;display:inline-block;vertical-align:middle}code{background:#ecffb2;color:#709239}pre{border-radius:0.25em;border:1px solid #dedede;background:#e6e6e6;padding:1em;overflow:auto}h1,h2,h3,h4,h5,h6{margin-top:2em;margin-bottom:0.5em}
data/site/preview.js ADDED
@@ -0,0 +1,59 @@
1
+ $(document).ready(function(){
2
+ $('body').find('.uniformFloatingLabel').each(function(){
3
+ var el = $(this);
4
+ var label = el.find('label');
5
+ var input = $("#" + label.prop('for'));
6
+ var startingHeight;
7
+
8
+ function render(e) {
9
+ if(!input.is(":visible")) return;
10
+ if(el.hasClass('enabled')) return;
11
+
12
+ var padding = parseInt(input.css('paddingBottom'));
13
+ startingHeight = input.outerHeight();
14
+ el.addClass('enabled');
15
+ el.addClass('inactive');
16
+
17
+ input.css({
18
+ paddingTop: padding + padding/2 + "px",
19
+ paddingBottom: padding - padding/2 - 2 + "px"
20
+ })
21
+
22
+ label.css({
23
+ position: 'absolute',
24
+ top: 0,
25
+ left: label.position().left,
26
+ paddingLeft: input.css("paddingLeft"),
27
+ height: startingHeight,
28
+ lineHeight: startingHeight + "px"
29
+ })
30
+ }
31
+
32
+ function activate (e) {
33
+ if (typeof e !== "undefined") el.addClass('active');
34
+ if (el.hasClass('float')) return;
35
+ el.addClass('float');
36
+ el.removeClass('inactive');
37
+ label.css({
38
+ lineHeight: startingHeight / 2 + "px"
39
+ });
40
+ }
41
+
42
+ function deactivate (e) {
43
+ if (typeof e !== "undefined") el.removeClass('active');
44
+ if (input.val() != "") return;
45
+ el.removeClass('float');
46
+ el.addClass('inactive');
47
+ label.css({
48
+ lineHeight: startingHeight + "px"
49
+ })
50
+ }
51
+
52
+ render();
53
+ input.focus(activate);
54
+ input.blur(deactivate);
55
+ input.on('revealed', render);
56
+ if (!_.isUndefined(input.val()) && input.val() != "") activate();
57
+ if (input.is(":focus")) activate();
58
+ })
59
+ })
data/site/rows.html ADDED
@@ -0,0 +1,190 @@
1
+ <!DOCTYPE html>
2
+ <head>
3
+ <meta http-equiv="Content-type" content="text/html; charset=utf-8">
4
+ <title>Uniform</title>
5
+ <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/normalize/4.2.0/normalize.css" type="text/css" media="screen">
6
+ <link rel="stylesheet" href="/site/uniform.css" type="text/css" media="screen" title="no title" charset="utf-8">
7
+ <link rel="stylesheet" href="/site/preview.css" type="text/css" media="screen" charset="utf-8">
8
+ </head>
9
+ <body>
10
+ <div class="side-nav">
11
+ <div class="pad">
12
+ <a href="/">
13
+ <img src="/site/logo.png" class="block">
14
+ </a>
15
+ </div>
16
+ <div class="uniformNav vertical">
17
+ <div class="nav">
18
+
19
+
20
+
21
+ <a href="/site/helpers.html">
22
+ Helpers
23
+
24
+ </a>
25
+
26
+
27
+ <a href="/site/colors.html">
28
+ Colors
29
+
30
+ </a>
31
+
32
+
33
+ <a href="/site/grid.html">
34
+ Grid
35
+
36
+ </a>
37
+
38
+
39
+ <a href="/site/buttons.html">
40
+ Buttons
41
+
42
+ </a>
43
+
44
+
45
+ <a href="/site/tables.html">
46
+ Tables
47
+
48
+ <span class="uniformLabel yellow">todo</span>
49
+
50
+ </a>
51
+
52
+
53
+ <a href="/site/cards.html">
54
+ Cards
55
+
56
+ </a>
57
+
58
+
59
+ <a href="/site/rows.html">
60
+ Rows
61
+
62
+ </a>
63
+
64
+
65
+ <a href="/site/form.html">
66
+ Form
67
+
68
+ </a>
69
+
70
+
71
+ <a href="/site/loaders.html">
72
+ Loaders
73
+
74
+ </a>
75
+
76
+
77
+ <a href="/site/nav.html">
78
+ Nav
79
+
80
+ </a>
81
+
82
+
83
+ <a href="/site/tabs.html">
84
+ Tabs
85
+
86
+ </a>
87
+
88
+
89
+ <a href="/site/tiles.html">
90
+ Tiles
91
+
92
+ <span class="uniformLabel yellow">todo</span>
93
+
94
+ </a>
95
+
96
+
97
+ <a href="/site/labels.html">
98
+ Labels
99
+
100
+ <span class="uniformLabel yellow">todo</span>
101
+
102
+ </a>
103
+
104
+
105
+ <a href="/site/alerts.html">
106
+ Alerts
107
+
108
+ <span class="uniformLabel yellow">todo</span>
109
+
110
+ </a>
111
+
112
+
113
+ <a href="/site/dropdown.html">
114
+ Dropdown
115
+
116
+ <span class="uniformLabel yellow">todo</span>
117
+
118
+ </a>
119
+
120
+
121
+ <a href="/site/modal.html">
122
+ Modal
123
+
124
+ <span class="uniformLabel yellow">todo</span>
125
+
126
+ </a>
127
+
128
+
129
+ <a href="/site/select.html">
130
+ Select
131
+
132
+ <span class="uniformLabel yellow">todo</span>
133
+
134
+ </a>
135
+
136
+
137
+ <a href="/site/tooltip.html">
138
+ Tooltip
139
+
140
+ <span class="uniformLabel yellow">todo</span>
141
+
142
+ </a>
143
+
144
+ </div>
145
+ </div>
146
+ </div>
147
+ <div class="main-content overflow-hidden">
148
+ <div class="section">
149
+ <h1>Rows</h1>
150
+ <a class="uniformRow grid" href="#rows">
151
+ <span class="col-90-px avatar">
152
+ <img src="https://unsplash.it/63/47/?random" width="63" height="47">
153
+ </span>
154
+ <span class="col-fill">
155
+ John Doe
156
+ <span class="subtle block">ABC Designs</span>
157
+ </span>
158
+ <span class="col">
159
+ Garland, TX
160
+ </span>
161
+ <span class="col pad ">
162
+ Texas Ranger Fan
163
+ </span>
164
+ </a>
165
+ <br><br>
166
+ <pre class=''>&lt;a class=&quot;uniformRow grid&quot; href=&quot;#rows&quot;&gt;
167
+ &lt;span class=&quot;col-90-px avatar&quot;&gt;
168
+ &lt;img src=&quot;https://unsplash.it/63/47/?random&quot; width=&quot;63&quot; height=&quot;47&quot;&gt;
169
+ &lt;/span&gt;
170
+ &lt;span class=&quot;col-fill&quot;&gt;
171
+ John Doe
172
+ &lt;span class=&quot;subtle block&quot;&gt;ABC Designs&lt;/span&gt;
173
+ &lt;/span&gt;
174
+ &lt;span class=&quot;col&quot;&gt;
175
+ Garland, TX
176
+ &lt;/span&gt;
177
+ &lt;span class=&quot;col&quot;&gt;
178
+ Texas Ranger Fan
179
+ &lt;/span&gt;
180
+ &lt;/a&gt;</pre>
181
+ </div>
182
+ </div>
183
+ <script>document.write('<script src="http://' + (location.host || 'localhost').split(':')[0] + ':35729/livereload.js?snipver=1"></' + 'script>')</script>
184
+ <script src="https://cdnjs.cloudflare.com/ajax/libs/underscore.js/1.8.3/underscore-min.js"></script>
185
+ <script
186
+ src="https://code.jquery.com/jquery-1.11.3.min.js"
187
+ integrity="sha256-7LkWEzqTdpEfELxcZZlS6wAx5Ff13zZ83lYO2/ujj7g="
188
+ crossorigin="anonymous"></script>
189
+ <script src="/site/preview.js"></script>
190
+ </body>
data/site/select.html ADDED
@@ -0,0 +1,157 @@
1
+ <!DOCTYPE html>
2
+ <head>
3
+ <meta http-equiv="Content-type" content="text/html; charset=utf-8">
4
+ <title>Uniform</title>
5
+ <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/normalize/4.2.0/normalize.css" type="text/css" media="screen">
6
+ <link rel="stylesheet" href="/site/uniform.css" type="text/css" media="screen" title="no title" charset="utf-8">
7
+ <link rel="stylesheet" href="/site/preview.css" type="text/css" media="screen" charset="utf-8">
8
+ </head>
9
+ <body>
10
+ <div class="side-nav">
11
+ <div class="pad">
12
+ <a href="/">
13
+ <img src="/site/logo.png" class="block">
14
+ </a>
15
+ </div>
16
+ <div class="uniformNav vertical">
17
+ <div class="nav">
18
+
19
+
20
+
21
+ <a href="/site/helpers.html">
22
+ Helpers
23
+
24
+ </a>
25
+
26
+
27
+ <a href="/site/colors.html">
28
+ Colors
29
+
30
+ </a>
31
+
32
+
33
+ <a href="/site/grid.html">
34
+ Grid
35
+
36
+ </a>
37
+
38
+
39
+ <a href="/site/buttons.html">
40
+ Buttons
41
+
42
+ </a>
43
+
44
+
45
+ <a href="/site/tables.html">
46
+ Tables
47
+
48
+ <span class="uniformLabel yellow">todo</span>
49
+
50
+ </a>
51
+
52
+
53
+ <a href="/site/cards.html">
54
+ Cards
55
+
56
+ </a>
57
+
58
+
59
+ <a href="/site/rows.html">
60
+ Rows
61
+
62
+ </a>
63
+
64
+
65
+ <a href="/site/form.html">
66
+ Form
67
+
68
+ </a>
69
+
70
+
71
+ <a href="/site/loaders.html">
72
+ Loaders
73
+
74
+ </a>
75
+
76
+
77
+ <a href="/site/nav.html">
78
+ Nav
79
+
80
+ </a>
81
+
82
+
83
+ <a href="/site/tabs.html">
84
+ Tabs
85
+
86
+ </a>
87
+
88
+
89
+ <a href="/site/tiles.html">
90
+ Tiles
91
+
92
+ <span class="uniformLabel yellow">todo</span>
93
+
94
+ </a>
95
+
96
+
97
+ <a href="/site/labels.html">
98
+ Labels
99
+
100
+ <span class="uniformLabel yellow">todo</span>
101
+
102
+ </a>
103
+
104
+
105
+ <a href="/site/alerts.html">
106
+ Alerts
107
+
108
+ <span class="uniformLabel yellow">todo</span>
109
+
110
+ </a>
111
+
112
+
113
+ <a href="/site/dropdown.html">
114
+ Dropdown
115
+
116
+ <span class="uniformLabel yellow">todo</span>
117
+
118
+ </a>
119
+
120
+
121
+ <a href="/site/modal.html">
122
+ Modal
123
+
124
+ <span class="uniformLabel yellow">todo</span>
125
+
126
+ </a>
127
+
128
+
129
+ <a href="/site/select.html">
130
+ Select
131
+
132
+ <span class="uniformLabel yellow">todo</span>
133
+
134
+ </a>
135
+
136
+
137
+ <a href="/site/tooltip.html">
138
+ Tooltip
139
+
140
+ <span class="uniformLabel yellow">todo</span>
141
+
142
+ </a>
143
+
144
+ </div>
145
+ </div>
146
+ </div>
147
+ <div class="main-content overflow-hidden">
148
+ TODO
149
+ </div>
150
+ <script>document.write('<script src="http://' + (location.host || 'localhost').split(':')[0] + ':35729/livereload.js?snipver=1"></' + 'script>')</script>
151
+ <script src="https://cdnjs.cloudflare.com/ajax/libs/underscore.js/1.8.3/underscore-min.js"></script>
152
+ <script
153
+ src="https://code.jquery.com/jquery-1.11.3.min.js"
154
+ integrity="sha256-7LkWEzqTdpEfELxcZZlS6wAx5Ff13zZ83lYO2/ujj7g="
155
+ crossorigin="anonymous"></script>
156
+ <script src="/site/preview.js"></script>
157
+ </body>
data/site/tables.html ADDED
@@ -0,0 +1,157 @@
1
+ <!DOCTYPE html>
2
+ <head>
3
+ <meta http-equiv="Content-type" content="text/html; charset=utf-8">
4
+ <title>Uniform</title>
5
+ <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/normalize/4.2.0/normalize.css" type="text/css" media="screen">
6
+ <link rel="stylesheet" href="/site/uniform.css" type="text/css" media="screen" title="no title" charset="utf-8">
7
+ <link rel="stylesheet" href="/site/preview.css" type="text/css" media="screen" charset="utf-8">
8
+ </head>
9
+ <body>
10
+ <div class="side-nav">
11
+ <div class="pad">
12
+ <a href="/">
13
+ <img src="/site/logo.png" class="block">
14
+ </a>
15
+ </div>
16
+ <div class="uniformNav vertical">
17
+ <div class="nav">
18
+
19
+
20
+
21
+ <a href="/site/helpers.html">
22
+ Helpers
23
+
24
+ </a>
25
+
26
+
27
+ <a href="/site/colors.html">
28
+ Colors
29
+
30
+ </a>
31
+
32
+
33
+ <a href="/site/grid.html">
34
+ Grid
35
+
36
+ </a>
37
+
38
+
39
+ <a href="/site/buttons.html">
40
+ Buttons
41
+
42
+ </a>
43
+
44
+
45
+ <a href="/site/tables.html">
46
+ Tables
47
+
48
+ <span class="uniformLabel yellow">todo</span>
49
+
50
+ </a>
51
+
52
+
53
+ <a href="/site/cards.html">
54
+ Cards
55
+
56
+ </a>
57
+
58
+
59
+ <a href="/site/rows.html">
60
+ Rows
61
+
62
+ </a>
63
+
64
+
65
+ <a href="/site/form.html">
66
+ Form
67
+
68
+ </a>
69
+
70
+
71
+ <a href="/site/loaders.html">
72
+ Loaders
73
+
74
+ </a>
75
+
76
+
77
+ <a href="/site/nav.html">
78
+ Nav
79
+
80
+ </a>
81
+
82
+
83
+ <a href="/site/tabs.html">
84
+ Tabs
85
+
86
+ </a>
87
+
88
+
89
+ <a href="/site/tiles.html">
90
+ Tiles
91
+
92
+ <span class="uniformLabel yellow">todo</span>
93
+
94
+ </a>
95
+
96
+
97
+ <a href="/site/labels.html">
98
+ Labels
99
+
100
+ <span class="uniformLabel yellow">todo</span>
101
+
102
+ </a>
103
+
104
+
105
+ <a href="/site/alerts.html">
106
+ Alerts
107
+
108
+ <span class="uniformLabel yellow">todo</span>
109
+
110
+ </a>
111
+
112
+
113
+ <a href="/site/dropdown.html">
114
+ Dropdown
115
+
116
+ <span class="uniformLabel yellow">todo</span>
117
+
118
+ </a>
119
+
120
+
121
+ <a href="/site/modal.html">
122
+ Modal
123
+
124
+ <span class="uniformLabel yellow">todo</span>
125
+
126
+ </a>
127
+
128
+
129
+ <a href="/site/select.html">
130
+ Select
131
+
132
+ <span class="uniformLabel yellow">todo</span>
133
+
134
+ </a>
135
+
136
+
137
+ <a href="/site/tooltip.html">
138
+ Tooltip
139
+
140
+ <span class="uniformLabel yellow">todo</span>
141
+
142
+ </a>
143
+
144
+ </div>
145
+ </div>
146
+ </div>
147
+ <div class="main-content overflow-hidden">
148
+ TODO
149
+ </div>
150
+ <script>document.write('<script src="http://' + (location.host || 'localhost').split(':')[0] + ':35729/livereload.js?snipver=1"></' + 'script>')</script>
151
+ <script src="https://cdnjs.cloudflare.com/ajax/libs/underscore.js/1.8.3/underscore-min.js"></script>
152
+ <script
153
+ src="https://code.jquery.com/jquery-1.11.3.min.js"
154
+ integrity="sha256-7LkWEzqTdpEfELxcZZlS6wAx5Ff13zZ83lYO2/ujj7g="
155
+ crossorigin="anonymous"></script>
156
+ <script src="/site/preview.js"></script>
157
+ </body>