lelylan-rb 0.0.1 → 0.0.2

Sign up to get free protection for your applications and to get access to all the features.
Files changed (63) hide show
  1. data/.gitignore +1 -0
  2. data/CHANGELOG.md +6 -2
  3. data/Gemfile +1 -3
  4. data/Guardfile +1 -1
  5. data/README.md +155 -84
  6. data/Rakefile +2 -15
  7. data/images/bg_hr.png +0 -0
  8. data/images/blacktocat.png +0 -0
  9. data/images/icon_download.png +0 -0
  10. data/images/sprite_download.png +0 -0
  11. data/index.html +74 -0
  12. data/javascripts/main.js +1 -0
  13. data/lelylan_rb.gemspec +12 -13
  14. data/lib/lelylan/client.rb +20 -23
  15. data/lib/lelylan/client/device.rb +121 -0
  16. data/lib/lelylan/client/function.rb +73 -0
  17. data/lib/lelylan/client/history.rb +28 -0
  18. data/lib/lelylan/client/location.rb +62 -0
  19. data/lib/lelylan/client/physical.rb +34 -0
  20. data/lib/lelylan/client/profile.rb +17 -0
  21. data/lib/lelylan/client/property.rb +75 -0
  22. data/lib/lelylan/client/status.rb +74 -0
  23. data/lib/lelylan/client/subscription.rb +62 -0
  24. data/lib/lelylan/client/type.rb +73 -0
  25. data/lib/lelylan/configuration.rb +4 -4
  26. data/lib/lelylan/connection.rb +9 -2
  27. data/lib/lelylan/request.rb +2 -16
  28. data/lib/lelylan/version.rb +1 -1
  29. data/spec/fixtures/profile.json +8 -0
  30. data/spec/fixtures/subscription.json +10 -0
  31. data/spec/fixtures/subscriptions.json +10 -0
  32. data/spec/lelylan/client/device_spec.rb +234 -0
  33. data/spec/lelylan/client/function_spec.rb +158 -0
  34. data/spec/lelylan/client/history_spec.rb +48 -0
  35. data/spec/lelylan/client/location_spec.rb +122 -0
  36. data/spec/lelylan/client/physical_spec.rb +27 -0
  37. data/spec/lelylan/client/profile_spec.rb +27 -0
  38. data/spec/lelylan/client/property_spec.rb +159 -0
  39. data/spec/lelylan/client/status_spec.rb +158 -0
  40. data/spec/lelylan/client/subscription_spec.rb +144 -0
  41. data/spec/lelylan/client/type_spec.rb +158 -0
  42. data/spec/lelylan/oauth2_spec.rb +13 -19
  43. data/stylesheets/pygment_trac.css +70 -0
  44. data/stylesheets/stylesheet.css +431 -0
  45. metadata +75 -114
  46. data/lib/lelylan/client/categories.rb +0 -112
  47. data/lib/lelylan/client/consumptions.rb +0 -93
  48. data/lib/lelylan/client/devices.rb +0 -211
  49. data/lib/lelylan/client/functions.rb +0 -118
  50. data/lib/lelylan/client/histories.rb +0 -42
  51. data/lib/lelylan/client/locations.rb +0 -92
  52. data/lib/lelylan/client/properties.rb +0 -115
  53. data/lib/lelylan/client/statuses.rb +0 -110
  54. data/lib/lelylan/client/types.rb +0 -109
  55. data/spec/lelylan/client/categories_spec.rb +0 -178
  56. data/spec/lelylan/client/consumptions_spec.rb +0 -150
  57. data/spec/lelylan/client/devices_spec.rb +0 -342
  58. data/spec/lelylan/client/functions_spec.rb +0 -184
  59. data/spec/lelylan/client/histories_spec.rb +0 -64
  60. data/spec/lelylan/client/locations_spec.rb +0 -155
  61. data/spec/lelylan/client/properties_spec.rb +0 -184
  62. data/spec/lelylan/client/statuses_spec.rb +0 -184
  63. data/spec/lelylan/client/types_spec.rb +0 -184
@@ -2,45 +2,39 @@ require 'helper'
2
2
 
3
3
  describe OAuth2 do
4
4
 
5
- let(:client_id) { '36963b6bd9dc1127553b57f55ea54d4cecf97e386bcecc5f9198e8dd0ed235f9' }
6
- let(:client_secret) { '8e6343a084320b6b11cdd3349642718c11af1af9b9f64ed4976018bdf20d0082' }
7
- let(:redirect_uri) { 'http://app.dev/callback' }
8
- let(:site_uri) { 'http://app.dev' }
9
- let(:application) { OAuth2::Client.new client_id, client_secret, site: site_uri }
5
+ let(:application) { OAuth2::Client.new 'client-id', 'client-secret', site: 'http://oauth2.dev' }
10
6
  let(:json_token) { MultiJson.load fixture('oauth2/token.json').read }
11
7
  let(:token) { OAuth2::AccessToken.from_hash application, json_token }
12
-
13
- let(:client) { Lelylan::Client.new token: token }
14
- let(:path) { '/types/4dcb9e23d033a9088900000a' }
15
- let(:uri) { "http://api.lelylan.com/#{path}" }
16
- let(:headers) { { 'Authorization' => "Bearer #{token.token}" } }
8
+ let(:lelylan) { Lelylan::Client.new token: token }
9
+ let(:headers) { { 'Authorization' => "Bearer #{token.token}" } }
10
+ let(:redirect_uri) { 'http://app.dev/callback' }
17
11
 
18
12
  context 'with not expired token' do
19
13
 
20
- before { stub_get(path).with(headers: headers).to_return(body: fixture('type.json')) }
21
- before { client.type uri }
14
+ before { stub_get('/devices/1').with(headers: headers).to_return(body: fixture('device.json')) }
15
+ before { lelylan.device('1') }
22
16
 
23
17
  it 'adds the oauth2 token in the header' do
24
- a_get(path).with(headers: headers).should have_been_made
18
+ a_get('/devices/1').with(headers: headers).should have_been_made
25
19
  end
26
20
  end
27
21
 
28
22
  context 'with expired token' do
29
23
 
30
- let(:refresh_uri) { "#{site_uri}/oauth/token" }
31
- let(:refresh_token) { MultiJson.load fixture('oauth2/refresh.json').read }
24
+ let(:refresh_uri) { 'http://oauth2.dev/oauth/token' }
32
25
  let(:refresh_headers) { { 'Content-Type' => 'application/json' } }
26
+ let(:refresh_token) { MultiJson.load fixture('oauth2/refresh.json').read }
33
27
  let(:headers) { { 'Authorization' => "Bearer #{refresh_token['access_token']}" } }
34
28
 
35
29
  let(:refresh_body) {{
36
- client_id: client_id,
37
- client_secret: client_secret,
30
+ client_id: 'client-id',
31
+ client_secret: 'client-secret',
38
32
  grant_type: 'refresh_token',
39
33
  refresh_token: token.refresh_token
40
34
  }}
41
35
 
42
36
  before { stub_post(refresh_uri).with(body: refresh_body).to_return(headers: refresh_headers, body: refresh_token) }
43
- before { stub_get(path).with(headers: headers).to_return(body: fixture('type.json')) }
37
+ before { stub_get('/devices/1').with(headers: headers).to_return(body: fixture('device.json')) }
44
38
  before { token.instance_variable_set '@expires_at', 0 }
45
39
 
46
40
  it 'expires token' do
@@ -48,7 +42,7 @@ describe OAuth2 do
48
42
  end
49
43
 
50
44
  it 'refreshes token' do
51
- expect{ client.type uri }.to change{ client.token.token }
45
+ expect{ lelylan.device('1') }.to change{ lelylan.token.token }
52
46
  end
53
47
  end
54
48
  end
@@ -0,0 +1,70 @@
1
+ .highlight .hll { background-color: #ffffcc }
2
+ .highlight { background: #f0f3f3; }
3
+ .highlight .c { color: #0099FF; font-style: italic } /* Comment */
4
+ .highlight .err { color: #AA0000; background-color: #FFAAAA } /* Error */
5
+ .highlight .k { color: #006699; font-weight: bold } /* Keyword */
6
+ .highlight .o { color: #555555 } /* Operator */
7
+ .highlight .cm { color: #0099FF; font-style: italic } /* Comment.Multiline */
8
+ .highlight .cp { color: #009999 } /* Comment.Preproc */
9
+ .highlight .c1 { color: #0099FF; font-style: italic } /* Comment.Single */
10
+ .highlight .cs { color: #0099FF; font-weight: bold; font-style: italic } /* Comment.Special */
11
+ .highlight .gd { background-color: #FFCCCC; border: 1px solid #CC0000 } /* Generic.Deleted */
12
+ .highlight .ge { font-style: italic } /* Generic.Emph */
13
+ .highlight .gr { color: #FF0000 } /* Generic.Error */
14
+ .highlight .gh { color: #003300; font-weight: bold } /* Generic.Heading */
15
+ .highlight .gi { background-color: #CCFFCC; border: 1px solid #00CC00 } /* Generic.Inserted */
16
+ .highlight .go { color: #AAAAAA } /* Generic.Output */
17
+ .highlight .gp { color: #000099; font-weight: bold } /* Generic.Prompt */
18
+ .highlight .gs { font-weight: bold } /* Generic.Strong */
19
+ .highlight .gu { color: #003300; font-weight: bold } /* Generic.Subheading */
20
+ .highlight .gt { color: #99CC66 } /* Generic.Traceback */
21
+ .highlight .kc { color: #006699; font-weight: bold } /* Keyword.Constant */
22
+ .highlight .kd { color: #006699; font-weight: bold } /* Keyword.Declaration */
23
+ .highlight .kn { color: #006699; font-weight: bold } /* Keyword.Namespace */
24
+ .highlight .kp { color: #006699 } /* Keyword.Pseudo */
25
+ .highlight .kr { color: #006699; font-weight: bold } /* Keyword.Reserved */
26
+ .highlight .kt { color: #007788; font-weight: bold } /* Keyword.Type */
27
+ .highlight .m { color: #FF6600 } /* Literal.Number */
28
+ .highlight .s { color: #CC3300 } /* Literal.String */
29
+ .highlight .na { color: #330099 } /* Name.Attribute */
30
+ .highlight .nb { color: #336666 } /* Name.Builtin */
31
+ .highlight .nc { color: #00AA88; font-weight: bold } /* Name.Class */
32
+ .highlight .no { color: #336600 } /* Name.Constant */
33
+ .highlight .nd { color: #9999FF } /* Name.Decorator */
34
+ .highlight .ni { color: #999999; font-weight: bold } /* Name.Entity */
35
+ .highlight .ne { color: #CC0000; font-weight: bold } /* Name.Exception */
36
+ .highlight .nf { color: #CC00FF } /* Name.Function */
37
+ .highlight .nl { color: #9999FF } /* Name.Label */
38
+ .highlight .nn { color: #00CCFF; font-weight: bold } /* Name.Namespace */
39
+ .highlight .nt { color: #330099; font-weight: bold } /* Name.Tag */
40
+ .highlight .nv { color: #003333 } /* Name.Variable */
41
+ .highlight .ow { color: #000000; font-weight: bold } /* Operator.Word */
42
+ .highlight .w { color: #bbbbbb } /* Text.Whitespace */
43
+ .highlight .mf { color: #FF6600 } /* Literal.Number.Float */
44
+ .highlight .mh { color: #FF6600 } /* Literal.Number.Hex */
45
+ .highlight .mi { color: #FF6600 } /* Literal.Number.Integer */
46
+ .highlight .mo { color: #FF6600 } /* Literal.Number.Oct */
47
+ .highlight .sb { color: #CC3300 } /* Literal.String.Backtick */
48
+ .highlight .sc { color: #CC3300 } /* Literal.String.Char */
49
+ .highlight .sd { color: #CC3300; font-style: italic } /* Literal.String.Doc */
50
+ .highlight .s2 { color: #CC3300 } /* Literal.String.Double */
51
+ .highlight .se { color: #CC3300; font-weight: bold } /* Literal.String.Escape */
52
+ .highlight .sh { color: #CC3300 } /* Literal.String.Heredoc */
53
+ .highlight .si { color: #AA0000 } /* Literal.String.Interpol */
54
+ .highlight .sx { color: #CC3300 } /* Literal.String.Other */
55
+ .highlight .sr { color: #33AAAA } /* Literal.String.Regex */
56
+ .highlight .s1 { color: #CC3300 } /* Literal.String.Single */
57
+ .highlight .ss { color: #FFCC33 } /* Literal.String.Symbol */
58
+ .highlight .bp { color: #336666 } /* Name.Builtin.Pseudo */
59
+ .highlight .vc { color: #003333 } /* Name.Variable.Class */
60
+ .highlight .vg { color: #003333 } /* Name.Variable.Global */
61
+ .highlight .vi { color: #003333 } /* Name.Variable.Instance */
62
+ .highlight .il { color: #FF6600 } /* Literal.Number.Integer.Long */
63
+
64
+ .type-csharp .highlight .k { color: #0000FF }
65
+ .type-csharp .highlight .kt { color: #0000FF }
66
+ .type-csharp .highlight .nf { color: #000000; font-weight: normal }
67
+ .type-csharp .highlight .nc { color: #2B91AF }
68
+ .type-csharp .highlight .nn { color: #000000 }
69
+ .type-csharp .highlight .s { color: #A31515 }
70
+ .type-csharp .highlight .sc { color: #A31515 }
@@ -0,0 +1,431 @@
1
+ /*******************************************************************************
2
+ Slate Theme for GitHub Pages
3
+ by Jason Costello, @jsncostello
4
+ *******************************************************************************/
5
+
6
+ @import url(pygment_trac.css);
7
+
8
+ /*******************************************************************************
9
+ MeyerWeb Reset
10
+ *******************************************************************************/
11
+
12
+ html, body, div, span, applet, object, iframe,
13
+ h1, h2, h3, h4, h5, h6, p, blockquote, pre,
14
+ a, abbr, acronym, address, big, cite, code,
15
+ del, dfn, em, img, ins, kbd, q, s, samp,
16
+ small, strike, strong, sub, sup, tt, var,
17
+ b, u, i, center,
18
+ dl, dt, dd, ol, ul, li,
19
+ fieldset, form, label, legend,
20
+ table, caption, tbody, tfoot, thead, tr, th, td,
21
+ article, aside, canvas, details, embed,
22
+ figure, figcaption, footer, header, hgroup,
23
+ menu, nav, output, ruby, section, summary,
24
+ time, mark, audio, video {
25
+ margin: 0;
26
+ padding: 0;
27
+ border: 0;
28
+ font: inherit;
29
+ vertical-align: baseline;
30
+ }
31
+
32
+ /* HTML5 display-role reset for older browsers */
33
+ article, aside, details, figcaption, figure,
34
+ footer, header, hgroup, menu, nav, section {
35
+ display: block;
36
+ }
37
+
38
+ ol, ul {
39
+ list-style: none;
40
+ }
41
+
42
+ blockquote, q {
43
+ }
44
+
45
+ table {
46
+ border-collapse: collapse;
47
+ border-spacing: 0;
48
+ }
49
+
50
+ a:focus {
51
+ outline: none;
52
+ }
53
+
54
+ /*******************************************************************************
55
+ Theme Styles
56
+ *******************************************************************************/
57
+
58
+ body {
59
+ box-sizing: border-box;
60
+ color:#373737;
61
+ background: #212121;
62
+ font-size: 16px;
63
+ font-family: 'Myriad Pro', Calibri, Helvetica, Arial, sans-serif;
64
+ line-height: 1.5;
65
+ -webkit-font-smoothing: antialiased;
66
+ }
67
+
68
+ h1, h2, h3, h4, h5, h6 {
69
+ margin: 10px 0;
70
+ font-weight: 700;
71
+ color:#222222;
72
+ font-family: 'Lucida Grande', 'Calibri', Helvetica, Arial, sans-serif;
73
+ letter-spacing: -1px;
74
+ }
75
+
76
+ h1 {
77
+ font-size: 36px;
78
+ font-weight: 700;
79
+ }
80
+
81
+ h2 {
82
+ padding-bottom: 10px;
83
+ font-size: 32px;
84
+ background: url('../images/bg_hr.png') repeat-x bottom;
85
+ }
86
+
87
+ h3 {
88
+ font-size: 24px;
89
+ }
90
+
91
+ h4 {
92
+ font-size: 21px;
93
+ }
94
+
95
+ h5 {
96
+ font-size: 18px;
97
+ }
98
+
99
+ h6 {
100
+ font-size: 16px;
101
+ }
102
+
103
+ p {
104
+ margin: 10px 0 15px 0;
105
+ }
106
+
107
+ footer p {
108
+ color: #f2f2f2;
109
+ }
110
+
111
+ a {
112
+ text-decoration: none;
113
+ color: #007edf;
114
+ text-shadow: none;
115
+
116
+ transition: color 0.5s ease;
117
+ transition: text-shadow 0.5s ease;
118
+ -webkit-transition: color 0.5s ease;
119
+ -webkit-transition: text-shadow 0.5s ease;
120
+ -moz-transition: color 0.5s ease;
121
+ -moz-transition: text-shadow 0.5s ease;
122
+ -o-transition: color 0.5s ease;
123
+ -o-transition: text-shadow 0.5s ease;
124
+ -ms-transition: color 0.5s ease;
125
+ -ms-transition: text-shadow 0.5s ease;
126
+ }
127
+
128
+ #main_content a:hover {
129
+ color: #0069ba;
130
+ text-shadow: #0090ff 0px 0px 2px;
131
+ }
132
+
133
+ footer a:hover {
134
+ color: #43adff;
135
+ text-shadow: #0090ff 0px 0px 2px;
136
+ }
137
+
138
+ em {
139
+ font-style: italic;
140
+ }
141
+
142
+ strong {
143
+ font-weight: bold;
144
+ }
145
+
146
+ img {
147
+ position: relative;
148
+ margin: 0 auto;
149
+ max-width: 739px;
150
+ padding: 5px;
151
+ margin: 10px 0 10px 0;
152
+ border: 1px solid #ebebeb;
153
+
154
+ box-shadow: 0 0 5px #ebebeb;
155
+ -webkit-box-shadow: 0 0 5px #ebebeb;
156
+ -moz-box-shadow: 0 0 5px #ebebeb;
157
+ -o-box-shadow: 0 0 5px #ebebeb;
158
+ -ms-box-shadow: 0 0 5px #ebebeb;
159
+ }
160
+
161
+ pre, code {
162
+ width: 100%;
163
+ color: #222;
164
+ background-color: #fff;
165
+
166
+ font-family: Monaco, "Bitstream Vera Sans Mono", "Lucida Console", Terminal, monospace;
167
+ font-size: 14px;
168
+
169
+ border-radius: 2px;
170
+ -moz-border-radius: 2px;
171
+ -webkit-border-radius: 2px;
172
+
173
+
174
+
175
+ }
176
+
177
+ pre {
178
+ width: 100%;
179
+ padding: 10px;
180
+ box-shadow: 0 0 10px rgba(0,0,0,.1);
181
+ overflow: auto;
182
+ }
183
+
184
+ code {
185
+ padding: 3px;
186
+ margin: 0 3px;
187
+ box-shadow: 0 0 10px rgba(0,0,0,.1);
188
+ }
189
+
190
+ pre code {
191
+ display: block;
192
+ box-shadow: none;
193
+ }
194
+
195
+ blockquote {
196
+ color: #666;
197
+ margin-bottom: 20px;
198
+ padding: 0 0 0 20px;
199
+ border-left: 3px solid #bbb;
200
+ }
201
+
202
+ ul, ol, dl {
203
+ margin-bottom: 15px
204
+ }
205
+
206
+ ul li {
207
+ list-style: inside;
208
+ padding-left: 20px;
209
+ }
210
+
211
+ ol li {
212
+ list-style: decimal inside;
213
+ padding-left: 20px;
214
+ }
215
+
216
+ dl dt {
217
+ font-weight: bold;
218
+ }
219
+
220
+ dl dd {
221
+ padding-left: 20px;
222
+ font-style: italic;
223
+ }
224
+
225
+ dl p {
226
+ padding-left: 20px;
227
+ font-style: italic;
228
+ }
229
+
230
+ hr {
231
+ height: 1px;
232
+ margin-bottom: 5px;
233
+ border: none;
234
+ background: url('../images/bg_hr.png') repeat-x center;
235
+ }
236
+
237
+ table {
238
+ border: 1px solid #373737;
239
+ margin-bottom: 20px;
240
+ text-align: left;
241
+ }
242
+
243
+ th {
244
+ font-family: 'Lucida Grande', 'Helvetica Neue', Helvetica, Arial, sans-serif;
245
+ padding: 10px;
246
+ background: #373737;
247
+ color: #fff;
248
+ }
249
+
250
+ td {
251
+ padding: 10px;
252
+ border: 1px solid #373737;
253
+ }
254
+
255
+ form {
256
+ background: #f2f2f2;
257
+ padding: 20px;
258
+ }
259
+
260
+ img {
261
+ width: 100%;
262
+ max-width: 100%;
263
+ }
264
+
265
+ /*******************************************************************************
266
+ Full-Width Styles
267
+ *******************************************************************************/
268
+
269
+ .outer {
270
+ width: 100%;
271
+ }
272
+
273
+ .inner {
274
+ position: relative;
275
+ max-width: 640px;
276
+ padding: 20px 10px;
277
+ margin: 0 auto;
278
+ }
279
+
280
+ #forkme_banner {
281
+ display: block;
282
+ position: absolute;
283
+ top:0;
284
+ right: 10px;
285
+ z-index: 10;
286
+ padding: 10px 50px 10px 10px;
287
+ color: #fff;
288
+ background: url('../images/blacktocat.png') #0090ff no-repeat 95% 50%;
289
+ font-weight: 700;
290
+ box-shadow: 0 0 10px rgba(0,0,0,.5);
291
+ border-bottom-left-radius: 2px;
292
+ border-bottom-right-radius: 2px;
293
+ }
294
+
295
+ #header_wrap {
296
+ background: #212121;
297
+ background: -moz-linear-gradient(top, #373737, #212121);
298
+ background: -webkit-linear-gradient(top, #373737, #212121);
299
+ background: -ms-linear-gradient(top, #373737, #212121);
300
+ background: -o-linear-gradient(top, #373737, #212121);
301
+ background: linear-gradient(top, #373737, #212121);
302
+ }
303
+
304
+ #header_wrap .inner {
305
+ padding: 50px 10px 30px 10px;
306
+ }
307
+
308
+ #project_title {
309
+ margin: 0;
310
+ color: #fff;
311
+ font-size: 42px;
312
+ font-weight: 700;
313
+ text-shadow: #111 0px 0px 10px;
314
+ }
315
+
316
+ #project_tagline {
317
+ color: #fff;
318
+ font-size: 24px;
319
+ font-weight: 300;
320
+ background: none;
321
+ text-shadow: #111 0px 0px 10px;
322
+ }
323
+
324
+ #downloads {
325
+ position: absolute;
326
+ width: 210px;
327
+ z-index: 10;
328
+ bottom: -40px;
329
+ right: 0;
330
+ height: 70px;
331
+ background: url('../images/icon_download.png') no-repeat 0% 90%;
332
+ }
333
+
334
+ .zip_download_link {
335
+ display: block;
336
+ float: right;
337
+ width: 90px;
338
+ height:70px;
339
+ text-indent: -5000px;
340
+ overflow: hidden;
341
+ background: url(../images/sprite_download.png) no-repeat bottom left;
342
+ }
343
+
344
+ .tar_download_link {
345
+ display: block;
346
+ float: right;
347
+ width: 90px;
348
+ height:70px;
349
+ text-indent: -5000px;
350
+ overflow: hidden;
351
+ background: url(../images/sprite_download.png) no-repeat bottom right;
352
+ margin-left: 10px;
353
+ }
354
+
355
+ .zip_download_link:hover {
356
+ background: url(../images/sprite_download.png) no-repeat top left;
357
+ }
358
+
359
+ .tar_download_link:hover {
360
+ background: url(../images/sprite_download.png) no-repeat top right;
361
+ }
362
+
363
+ #main_content_wrap {
364
+ background: #f2f2f2;
365
+ border-top: 1px solid #111;
366
+ border-bottom: 1px solid #111;
367
+ }
368
+
369
+ #main_content {
370
+ padding-top: 40px;
371
+ }
372
+
373
+ #footer_wrap {
374
+ background: #212121;
375
+ }
376
+
377
+
378
+
379
+ /*******************************************************************************
380
+ Small Device Styles
381
+ *******************************************************************************/
382
+
383
+ @media screen and (max-width: 480px) {
384
+ body {
385
+ font-size:14px;
386
+ }
387
+
388
+ #downloads {
389
+ display: none;
390
+ }
391
+
392
+ .inner {
393
+ min-width: 320px;
394
+ max-width: 480px;
395
+ }
396
+
397
+ #project_title {
398
+ font-size: 32px;
399
+ }
400
+
401
+ h1 {
402
+ font-size: 28px;
403
+ }
404
+
405
+ h2 {
406
+ font-size: 24px;
407
+ }
408
+
409
+ h3 {
410
+ font-size: 21px;
411
+ }
412
+
413
+ h4 {
414
+ font-size: 18px;
415
+ }
416
+
417
+ h5 {
418
+ font-size: 14px;
419
+ }
420
+
421
+ h6 {
422
+ font-size: 12px;
423
+ }
424
+
425
+ code, pre {
426
+ min-width: 320px;
427
+ max-width: 480px;
428
+ font-size: 11px;
429
+ }
430
+
431
+ }