polyphony 0.39 → 0.43.1

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 (117) hide show
  1. checksums.yaml +4 -4
  2. data/.github/workflows/test.yml +11 -2
  3. data/.gitignore +2 -2
  4. data/.rubocop.yml +30 -0
  5. data/CHANGELOG.md +23 -4
  6. data/Gemfile.lock +15 -12
  7. data/README.md +2 -1
  8. data/Rakefile +3 -3
  9. data/TODO.md +27 -97
  10. data/docs/_config.yml +56 -7
  11. data/docs/_sass/custom/custom.scss +6 -26
  12. data/docs/_sass/overrides.scss +0 -46
  13. data/docs/{user-guide → _user-guide}/all-about-timers.md +0 -0
  14. data/docs/_user-guide/index.md +9 -0
  15. data/docs/{user-guide → _user-guide}/web-server.md +0 -0
  16. data/docs/api-reference/fiber.md +2 -2
  17. data/docs/api-reference/index.md +9 -0
  18. data/docs/api-reference/polyphony-process.md +1 -1
  19. data/docs/api-reference/thread.md +1 -1
  20. data/docs/faq.md +21 -11
  21. data/docs/favicon.ico +0 -0
  22. data/docs/getting-started/index.md +10 -0
  23. data/docs/getting-started/installing.md +2 -6
  24. data/docs/getting-started/overview.md +486 -0
  25. data/docs/getting-started/tutorial.md +27 -19
  26. data/docs/index.md +6 -2
  27. data/docs/main-concepts/concurrency.md +0 -5
  28. data/docs/main-concepts/design-principles.md +69 -21
  29. data/docs/main-concepts/extending.md +1 -1
  30. data/docs/main-concepts/index.md +9 -0
  31. data/docs/polyphony-logo.png +0 -0
  32. data/examples/core/01-spinning-up-fibers.rb +1 -0
  33. data/examples/core/03-interrupting.rb +4 -1
  34. data/examples/core/04-handling-signals.rb +19 -0
  35. data/examples/core/xx-agent.rb +102 -0
  36. data/examples/core/xx-sleeping.rb +14 -6
  37. data/examples/io/tunnel.rb +48 -0
  38. data/examples/io/xx-irb.rb +1 -1
  39. data/examples/performance/thread-vs-fiber/polyphony_mt_server.rb +7 -6
  40. data/examples/performance/thread-vs-fiber/polyphony_server.rb +13 -36
  41. data/examples/performance/thread-vs-fiber/polyphony_server_read_loop.rb +58 -0
  42. data/examples/performance/xx-array.rb +11 -0
  43. data/examples/performance/xx-fiber-switch.rb +9 -0
  44. data/examples/performance/xx-snooze.rb +15 -0
  45. data/ext/{gyro → polyphony}/extconf.rb +2 -2
  46. data/ext/{gyro → polyphony}/fiber.c +17 -23
  47. data/ext/{gyro → polyphony}/libev.c +0 -0
  48. data/ext/{gyro → polyphony}/libev.h +0 -0
  49. data/ext/polyphony/libev_agent.c +718 -0
  50. data/ext/polyphony/libev_queue.c +216 -0
  51. data/ext/polyphony/polyphony.c +73 -0
  52. data/ext/{gyro/gyro.h → polyphony/polyphony.h} +19 -39
  53. data/ext/polyphony/polyphony_ext.c +21 -0
  54. data/ext/polyphony/thread.c +200 -0
  55. data/ext/{gyro → polyphony}/tracing.c +1 -1
  56. data/lib/polyphony.rb +19 -14
  57. data/lib/polyphony/adapters/irb.rb +1 -1
  58. data/lib/polyphony/adapters/postgres.rb +6 -5
  59. data/lib/polyphony/adapters/process.rb +5 -5
  60. data/lib/polyphony/adapters/trace.rb +28 -28
  61. data/lib/polyphony/core/channel.rb +3 -3
  62. data/lib/polyphony/core/exceptions.rb +1 -1
  63. data/lib/polyphony/core/global_api.rb +13 -11
  64. data/lib/polyphony/core/resource_pool.rb +3 -3
  65. data/lib/polyphony/core/sync.rb +2 -2
  66. data/lib/polyphony/core/thread_pool.rb +6 -6
  67. data/lib/polyphony/core/throttler.rb +13 -6
  68. data/lib/polyphony/event.rb +27 -0
  69. data/lib/polyphony/extensions/core.rb +22 -14
  70. data/lib/polyphony/extensions/fiber.rb +4 -4
  71. data/lib/polyphony/extensions/io.rb +59 -25
  72. data/lib/polyphony/extensions/openssl.rb +36 -16
  73. data/lib/polyphony/extensions/socket.rb +28 -10
  74. data/lib/polyphony/extensions/thread.rb +16 -9
  75. data/lib/polyphony/net.rb +9 -9
  76. data/lib/polyphony/version.rb +1 -1
  77. data/polyphony.gemspec +4 -4
  78. data/test/helper.rb +12 -8
  79. data/test/test_agent.rb +124 -0
  80. data/test/{test_async.rb → test_event.rb} +15 -7
  81. data/test/test_ext.rb +25 -4
  82. data/test/test_fiber.rb +19 -10
  83. data/test/test_global_api.rb +11 -11
  84. data/test/test_io.rb +44 -29
  85. data/test/test_queue.rb +74 -0
  86. data/test/test_signal.rb +3 -40
  87. data/test/test_socket.rb +34 -0
  88. data/test/test_thread.rb +38 -17
  89. data/test/test_thread_pool.rb +2 -2
  90. data/test/test_throttler.rb +5 -3
  91. data/test/test_trace.rb +6 -5
  92. metadata +41 -43
  93. data/docs/_includes/nav.html +0 -51
  94. data/docs/_includes/prevnext.html +0 -17
  95. data/docs/_layouts/default.html +0 -106
  96. data/docs/api-reference.md +0 -11
  97. data/docs/api-reference/gyro-async.md +0 -57
  98. data/docs/api-reference/gyro-child.md +0 -29
  99. data/docs/api-reference/gyro-queue.md +0 -44
  100. data/docs/api-reference/gyro-timer.md +0 -51
  101. data/docs/api-reference/gyro.md +0 -25
  102. data/docs/getting-started.md +0 -10
  103. data/docs/main-concepts.md +0 -10
  104. data/docs/user-guide.md +0 -10
  105. data/examples/core/forever_sleep.rb +0 -19
  106. data/ext/gyro/async.c +0 -162
  107. data/ext/gyro/child.c +0 -141
  108. data/ext/gyro/gyro.c +0 -103
  109. data/ext/gyro/gyro_ext.c +0 -33
  110. data/ext/gyro/io.c +0 -489
  111. data/ext/gyro/queue.c +0 -142
  112. data/ext/gyro/selector.c +0 -228
  113. data/ext/gyro/signal.c +0 -133
  114. data/ext/gyro/socket.c +0 -210
  115. data/ext/gyro/thread.c +0 -308
  116. data/ext/gyro/timer.c +0 -151
  117. data/test/test_timer.rb +0 -32
@@ -65,8 +65,8 @@ class ThreadPoolTest < MiniTest::Test
65
65
  end
66
66
  elapsed = Time.now - t0
67
67
 
68
- assert_in_range 0..0.007, elapsed
69
- assert_in_range 0..1, buffer.size
68
+ assert elapsed < 0.007
69
+ assert buffer.size < 2
70
70
 
71
71
  sleep 0.1 # allow time for threads to spawn
72
72
  assert_equal @pool.size, threads.uniq.size
@@ -10,7 +10,8 @@ class ThrottlerTest < MiniTest::Test
10
10
  sleep 0.02
11
11
  f.stop
12
12
  snooze
13
- assert_in_range 2..3, buffer.size
13
+ assert buffer.size >= 2
14
+ assert buffer.size <= 3
14
15
  ensure
15
16
  t.stop
16
17
  end
@@ -23,7 +24,7 @@ class ThrottlerTest < MiniTest::Test
23
24
  end
24
25
  sleep 0.25
25
26
  f.stop
26
- assert_in_range 2..6, buffer.size
27
+ assert (2..6).include?(buffer.size)
27
28
  ensure
28
29
  t.stop
29
30
  end
@@ -34,7 +35,8 @@ class ThrottlerTest < MiniTest::Test
34
35
  f = spin { loop { t.process { buffer << 1 } } }
35
36
  sleep 0.02
36
37
  f.stop
37
- assert_in_range 2..3, buffer.size
38
+ assert buffer.size >= 2
39
+ assert buffer.size <= 3
38
40
  ensure
39
41
  t.stop
40
42
  end
@@ -1,6 +1,7 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  require_relative 'helper'
4
+ require 'polyphony/adapters/trace'
4
5
 
5
6
  class TraceTest < MiniTest::Test
6
7
  def test_tracing_disabled
@@ -11,13 +12,13 @@ class TraceTest < MiniTest::Test
11
12
  assert_equal 0, records.size
12
13
  ensure
13
14
  t&.disable
14
- Gyro.trace(nil)
15
+ Polyphony.trace(nil)
15
16
  end
16
17
 
17
18
  def test_tracing_enabled
18
19
  records = []
19
20
  t = Polyphony::Trace.new(:fiber_all) { |r| records << r if r[:event] =~ /^fiber_/ }
20
- Gyro.trace(true)
21
+ Polyphony.trace(true)
21
22
  t.enable
22
23
  snooze
23
24
  t.disable
@@ -28,14 +29,14 @@ class TraceTest < MiniTest::Test
28
29
  assert_equal [Fiber.current], records.map { |r| r[:fiber] }.uniq
29
30
  ensure
30
31
  t&.disable
31
- Gyro.trace(nil)
32
+ Polyphony.trace(nil)
32
33
  end
33
34
 
34
35
  def test_2_fiber_trace
35
36
  records = []
36
37
  t = Polyphony::Trace.new(:fiber_all) { |r| records << r if r[:event] =~ /^fiber_/ }
37
38
  t.enable
38
- Gyro.trace(true)
39
+ Polyphony.trace(true)
39
40
 
40
41
  f = spin { sleep 0 }
41
42
  suspend
@@ -61,6 +62,6 @@ class TraceTest < MiniTest::Test
61
62
  ], events
62
63
  ensure
63
64
  t&.disable
64
- Gyro.trace(nil)
65
+ Polyphony.trace(nil)
65
66
  end
66
67
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: polyphony
3
3
  version: !ruby/object:Gem::Version
4
- version: '0.39'
4
+ version: 0.43.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Sharon Rosner
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2020-04-14 00:00:00.000000000 Z
11
+ date: 2020-07-06 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: httparty
@@ -86,28 +86,28 @@ dependencies:
86
86
  requirements:
87
87
  - - '='
88
88
  - !ruby/object:Gem::Version
89
- version: 0.80.0
89
+ version: 0.85.1
90
90
  type: :development
91
91
  prerelease: false
92
92
  version_requirements: !ruby/object:Gem::Requirement
93
93
  requirements:
94
94
  - - '='
95
95
  - !ruby/object:Gem::Version
96
- version: 0.80.0
96
+ version: 0.85.1
97
97
  - !ruby/object:Gem::Dependency
98
98
  name: pg
99
99
  requirement: !ruby/object:Gem::Requirement
100
100
  requirements:
101
101
  - - '='
102
102
  - !ruby/object:Gem::Version
103
- version: 1.1.3
103
+ version: 1.1.4
104
104
  type: :development
105
105
  prerelease: false
106
106
  version_requirements: !ruby/object:Gem::Requirement
107
107
  requirements:
108
108
  - - '='
109
109
  - !ruby/object:Gem::Version
110
- version: 1.1.3
110
+ version: 1.1.4
111
111
  - !ruby/object:Gem::Dependency
112
112
  name: rake-compiler
113
113
  requirement: !ruby/object:Gem::Requirement
@@ -212,19 +212,19 @@ dependencies:
212
212
  requirements:
213
213
  - - "~>"
214
214
  - !ruby/object:Gem::Version
215
- version: 0.2.7
215
+ version: 0.3.0
216
216
  type: :development
217
217
  prerelease: false
218
218
  version_requirements: !ruby/object:Gem::Requirement
219
219
  requirements:
220
220
  - - "~>"
221
221
  - !ruby/object:Gem::Version
222
- version: 0.2.7
222
+ version: 0.3.0
223
223
  description:
224
224
  email: ciconia@gmail.com
225
225
  executables: []
226
226
  extensions:
227
- - ext/gyro/extconf.rb
227
+ - ext/polyphony/extconf.rb
228
228
  extra_rdoc_files:
229
229
  - README.md
230
230
  files:
@@ -242,19 +242,14 @@ files:
242
242
  - TODO.md
243
243
  - bin/polyphony-debug
244
244
  - docs/_config.yml
245
- - docs/_includes/nav.html
246
- - docs/_includes/prevnext.html
247
- - docs/_layouts/default.html
248
245
  - docs/_sass/custom/custom.scss
249
246
  - docs/_sass/overrides.scss
250
- - docs/api-reference.md
247
+ - docs/_user-guide/all-about-timers.md
248
+ - docs/_user-guide/index.md
249
+ - docs/_user-guide/web-server.md
251
250
  - docs/api-reference/exception.md
252
251
  - docs/api-reference/fiber.md
253
- - docs/api-reference/gyro-async.md
254
- - docs/api-reference/gyro-child.md
255
- - docs/api-reference/gyro-queue.md
256
- - docs/api-reference/gyro-timer.md
257
- - docs/api-reference/gyro.md
252
+ - docs/api-reference/index.md
258
253
  - docs/api-reference/io.md
259
254
  - docs/api-reference/object.md
260
255
  - docs/api-reference/polyphony-baseexception.md
@@ -272,19 +267,19 @@ files:
272
267
  - docs/assets/img/echo-fibers.svg
273
268
  - docs/assets/img/sleeping-fiber.svg
274
269
  - docs/faq.md
275
- - docs/getting-started.md
270
+ - docs/favicon.ico
271
+ - docs/getting-started/index.md
276
272
  - docs/getting-started/installing.md
273
+ - docs/getting-started/overview.md
277
274
  - docs/getting-started/tutorial.md
278
275
  - docs/index.md
279
- - docs/main-concepts.md
280
276
  - docs/main-concepts/concurrency.md
281
277
  - docs/main-concepts/design-principles.md
282
278
  - docs/main-concepts/exception-handling.md
283
279
  - docs/main-concepts/extending.md
284
280
  - docs/main-concepts/fiber-scheduling.md
285
- - docs/user-guide.md
286
- - docs/user-guide/all-about-timers.md
287
- - docs/user-guide/web-server.md
281
+ - docs/main-concepts/index.md
282
+ - docs/polyphony-logo.png
288
283
  - examples/adapters/pg_client.rb
289
284
  - examples/adapters/pg_notify.rb
290
285
  - examples/adapters/pg_pool.rb
@@ -296,7 +291,8 @@ files:
296
291
  - examples/core/01-spinning-up-fibers.rb
297
292
  - examples/core/02-awaiting-fibers.rb
298
293
  - examples/core/03-interrupting.rb
299
- - examples/core/forever_sleep.rb
294
+ - examples/core/04-handling-signals.rb
295
+ - examples/core/xx-agent.rb
300
296
  - examples/core/xx-at_exit.rb
301
297
  - examples/core/xx-caller.rb
302
298
  - examples/core/xx-channels.rb
@@ -335,6 +331,7 @@ files:
335
331
  - examples/core/xx-trace.rb
336
332
  - examples/core/xx-using-a-mutex.rb
337
333
  - examples/core/xx-worker-thread.rb
334
+ - examples/io/tunnel.rb
338
335
  - examples/io/xx-backticks.rb
339
336
  - examples/io/xx-echo_client.rb
340
337
  - examples/io/xx-echo_client_from_stdin.rb
@@ -358,27 +355,14 @@ files:
358
355
  - examples/performance/snooze_raw.rb
359
356
  - examples/performance/thread-vs-fiber/polyphony_mt_server.rb
360
357
  - examples/performance/thread-vs-fiber/polyphony_server.rb
358
+ - examples/performance/thread-vs-fiber/polyphony_server_read_loop.rb
361
359
  - examples/performance/thread-vs-fiber/threaded_server.rb
362
360
  - examples/performance/thread-vs-fiber/xx-httparty_multi.rb
363
361
  - examples/performance/thread-vs-fiber/xx-httparty_threaded.rb
364
362
  - examples/performance/thread_pool_perf.rb
365
- - ext/gyro/async.c
366
- - ext/gyro/child.c
367
- - ext/gyro/extconf.rb
368
- - ext/gyro/fiber.c
369
- - ext/gyro/gyro.c
370
- - ext/gyro/gyro.h
371
- - ext/gyro/gyro_ext.c
372
- - ext/gyro/io.c
373
- - ext/gyro/libev.c
374
- - ext/gyro/libev.h
375
- - ext/gyro/queue.c
376
- - ext/gyro/selector.c
377
- - ext/gyro/signal.c
378
- - ext/gyro/socket.c
379
- - ext/gyro/thread.c
380
- - ext/gyro/timer.c
381
- - ext/gyro/tracing.c
363
+ - examples/performance/xx-array.rb
364
+ - examples/performance/xx-fiber-switch.rb
365
+ - examples/performance/xx-snooze.rb
382
366
  - ext/libev/Changes
383
367
  - ext/libev/LICENSE
384
368
  - ext/libev/README
@@ -395,6 +379,17 @@ files:
395
379
  - ext/libev/ev_win32.c
396
380
  - ext/libev/ev_wrap.h
397
381
  - ext/libev/test_libev_win32.c
382
+ - ext/polyphony/extconf.rb
383
+ - ext/polyphony/fiber.c
384
+ - ext/polyphony/libev.c
385
+ - ext/polyphony/libev.h
386
+ - ext/polyphony/libev_agent.c
387
+ - ext/polyphony/libev_queue.c
388
+ - ext/polyphony/polyphony.c
389
+ - ext/polyphony/polyphony.h
390
+ - ext/polyphony/polyphony_ext.c
391
+ - ext/polyphony/thread.c
392
+ - ext/polyphony/tracing.c
398
393
  - lib/polyphony.rb
399
394
  - lib/polyphony/adapters/fs.rb
400
395
  - lib/polyphony/adapters/irb.rb
@@ -409,6 +404,7 @@ files:
409
404
  - lib/polyphony/core/sync.rb
410
405
  - lib/polyphony/core/thread_pool.rb
411
406
  - lib/polyphony/core/throttler.rb
407
+ - lib/polyphony/event.rb
412
408
  - lib/polyphony/extensions/core.rb
413
409
  - lib/polyphony/extensions/fiber.rb
414
410
  - lib/polyphony/extensions/io.rb
@@ -423,20 +419,22 @@ files:
423
419
  - test/helper.rb
424
420
  - test/run.rb
425
421
  - test/stress.rb
426
- - test/test_async.rb
422
+ - test/test_agent.rb
423
+ - test/test_event.rb
427
424
  - test/test_ext.rb
428
425
  - test/test_fiber.rb
429
426
  - test/test_global_api.rb
430
427
  - test/test_io.rb
431
428
  - test/test_kernel.rb
432
429
  - test/test_process_supervision.rb
430
+ - test/test_queue.rb
433
431
  - test/test_resource_pool.rb
434
432
  - test/test_signal.rb
433
+ - test/test_socket.rb
435
434
  - test/test_supervise.rb
436
435
  - test/test_thread.rb
437
436
  - test/test_thread_pool.rb
438
437
  - test/test_throttler.rb
439
- - test/test_timer.rb
440
438
  - test/test_trace.rb
441
439
  homepage: https://digital-fabric.github.io/polyphony
442
440
  licenses:
@@ -1,51 +0,0 @@
1
- <nav role="navigation" aria-label="Main navigation">
2
- <ul class="navigation-list">
3
- {%- assign pages_list = site.html_pages | sort:"nav_order" -%}
4
- {%- for node in pages_list -%}
5
- {%- unless node.nav_exclude -%}
6
- {%- if node.parent == nil -%}
7
- <li class="navigation-list-item
8
- {% if page.url == node.url %} active{% endif %}
9
- {% if node.section %}section-title{% endif %}
10
- ">
11
- {%- if page.parent == node.title or page.grand_parent == node.title -%}
12
- {%- assign first_level_url = node.section_link | node.url | absolute_url -%}
13
- {%- endif -%}
14
- {%- if node.section -%}
15
- <span class="section-title">{{ node.title }}</span>
16
- {%- else -%}
17
- <a href="{{ node.url | absolute_url }}" class="navigation-list-link{% if page.url == node.url %} active{% endif %}">{{ node.title }}</a>
18
- {%- endif -%}
19
- {%- if node.has_children -%}
20
- {%- if node.alphabetical_order -%}
21
- {%- assign children_list = site.html_pages | where: "parent", node.title | sort:"title" -%}
22
- {%- else -%}
23
- {%- assign children_list = site.html_pages | where: "parent", node.title | sort:"nav_order" -%}
24
- {%- endif -%}
25
- <ul class="navigation-list-child-list ">
26
- {%- for child in children_list -%}
27
- <li class="navigation-list-item {% if page.url == child.url or page.parent == child.title %} active{% endif %}">
28
- {%- if page.url == child.url or page.parent == child.title -%}
29
- {%- assign second_level_url = child.url | absolute_url -%}
30
- {%- endif -%}
31
- <a href="{{ child.url | absolute_url }}" class="navigation-list-link{% if page.url == child.url %} active{% endif %}">{{ child.title }}</a>
32
- {%- if child.has_children -%}
33
- {%- assign grand_children_list = site.html_pages | where: "parent", child.title | sort:"nav_order" -%}
34
- <ul class="navigation-list-child-list">
35
- {%- for grand_child in grand_children_list -%}
36
- <li class="navigation-list-item {% if page.url == grand_child.url %} active{% endif %}">
37
- <a href="{{ grand_child.url | absolute_url }}" class="navigation-list-link{% if page.url == grand_child.url %} active{% endif %}">{{ grand_child.title }}</a>
38
- </li>
39
- {%- endfor -%}
40
- </ul>
41
- {%- endif -%}
42
- </li>
43
- {%- endfor -%}
44
- </ul>
45
- {%- endif -%}
46
- </li>
47
- {%- endif -%}
48
- {%- endunless -%}
49
- {%- endfor -%}
50
- </ul>
51
- </nav>
@@ -1,17 +0,0 @@
1
- {%- for node in site.html_pages -%}
2
- {%- if page.prev_title == node.title -%}
3
- {%- assign prev_url = node.url -%}
4
- {%- endif -%}
5
- {%- if page.next_title == node.title -%}
6
- {%- assign next_url = node.url -%}
7
- {%- endif -%}
8
- {%- endfor -%}
9
- <div id="prevnext">
10
- {%- if prev_url -%}
11
- <span class="prev"><a href="{{prev_url | relative_url}}">☜ {{page.prev_title}}</a></span>
12
- {%- endif -%}
13
- {%- if next_url -%}
14
- <span class="next"><a href="{{next_url | relative_url}}">{{page.next_title}} ☞</a></span>
15
- {%- endif -%}
16
- <span class="clear">&nbsp;</span>
17
- </div>
@@ -1,106 +0,0 @@
1
- ---
2
- layout: table_wrappers
3
- ---
4
-
5
- <!DOCTYPE html>
6
-
7
- <html lang="{{ site.lang | default: "en-US" }}">
8
- {% include head.html %}
9
- <body>
10
- <svg xmlns="http://www.w3.org/2000/svg" style="display: none;">
11
- <symbol id="link" viewBox="0 0 16 16">
12
- <title>Link</title>
13
- <path fill-rule="evenodd" d="M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z"></path>
14
- </symbol>
15
- </svg>
16
-
17
- <div class="page-wrap">
18
- <div class="side-bar">
19
- <div class="site-header">
20
- <a href="{{ site.url }}{{ site.baseurl }}" class="site-title lh-tight">{% include title.html %}</a>
21
- <button class="menu-button fs-3 js-main-nav-trigger" data-text-toggle="Hide" type="button">Menu</button>
22
- </div>
23
-
24
- <div class="navigation main-nav js-main-nav">
25
- {% include nav.html %}
26
- </div>
27
- <footer class="site-footer">
28
- <p class="text-small text-grey-dk-000 mb-4">This site uses <a href="https://github.com/pmarsceill/just-the-docs">Just the Docs</a>, a documentation theme for Jekyll.</p>
29
- </footer>
30
- </div>
31
- <div class="main-content-wrap js-main-content" tabindex="0">
32
- <div class="main-content">
33
- <div class="page-header js-page-header">
34
- {% if site.search_enabled != false %}
35
- <div class="search">
36
- <div class="search-input-wrap">
37
- <input type="text" class="js-search-input search-input" tabindex="0" placeholder="Search {{ site.title }}" aria-label="Search {{ site.title }}" autocomplete="off">
38
- <svg width="14" height="14" viewBox="0 0 28 28" xmlns="http://www.w3.org/2000/svg" class="search-icon"><title>Search</title><g fill-rule="nonzero"><path d="M17.332 20.735c-5.537 0-10-4.6-10-10.247 0-5.646 4.463-10.247 10-10.247 5.536 0 10 4.601 10 10.247s-4.464 10.247-10 10.247zm0-4c3.3 0 6-2.783 6-6.247 0-3.463-2.7-6.247-6-6.247s-6 2.784-6 6.247c0 3.464 2.7 6.247 6 6.247z"/><path d="M11.672 13.791L.192 25.271 3.02 28.1 14.5 16.62z"/></g></svg>
39
- </div>
40
- <div class="js-search-results search-results-wrap"></div>
41
- </div>
42
- {% endif %}
43
- {% if site.aux_links != nil %}
44
- <ul class="list-style-none text-small aux-nav">
45
- {% for link in site.aux_links %}
46
- <li class="d-inline-block my-0{% unless forloop.last %} mr-2{% endunless %}"><a href="{{ link.last }}">{{ link.first }}</a></li>
47
- {% endfor %}
48
- </ul>
49
- {% endif %}
50
- </div>
51
- <div class="page">
52
- {% unless page.url == "/" %}
53
- {% if page.parent %}
54
- <nav class="breadcrumb-nav">
55
- <ol class="breadcrumb-nav-list">
56
- {% if page.grand_parent %}
57
- <li class="breadcrumb-nav-list-item"><a href="{{ first_level_url }}">{{ page.grand_parent }}</a></li>
58
- <li class="breadcrumb-nav-list-item"><a href="{{ second_level_url }}">{{ page.parent }}</a></li>
59
- {% else %}
60
- <li class="breadcrumb-nav-list-item"><a href="{{ first_level_url }}">{{ page.parent }}</a></li>
61
- {% endif %}
62
- <li class="breadcrumb-nav-list-item"><span>{{ page.title }}</span></li>
63
- </ol>
64
- </nav>
65
- {% endif %}
66
- {% endunless %}
67
- <div id="main-content" class="page-content" role="main">
68
- {% if site.heading_anchors != false %}
69
- {% include vendor/anchor_headings.html html=content beforeHeading="true" anchorBody="<svg viewBox=\"0 0 16 16\" aria-hidden=\"true\"><use xlink:href=\"#link\"></use></svg>" anchorClass="anchor-heading" %}
70
- {% else %}
71
- {{ content }}
72
- {% endif %}
73
-
74
- {% if page.prev_title or page.next_title %}
75
- {% include prevnext.html %}
76
- {% endif %}
77
-
78
- {% if page.has_children == true and page.has_toc != false %}
79
- <hr>
80
- <h2 class="text-delta">Table of contents</h2>
81
- {% assign children_list = site.pages | sort:"nav_order" %}
82
- <ul>
83
- {% for child in children_list %}
84
- {% if child.parent == page.title and child.title != page.title %}
85
- <li>
86
- <a href="{{ child.url | absolute_url }}">{{ child.title }}</a>{% if child.summary %} - {{ child.summary }}{% endif %}
87
- </li>
88
- {% endif %}
89
- {% endfor %}
90
- </ul>
91
- {% endif %}
92
-
93
- {% if site.footer_content != nil %}
94
- <hr>
95
- <footer role="contentinfo">
96
- <p class="text-small text-grey-dk-000 mb-0">{{ site.footer_content }}</p>
97
- </footer>
98
- {% endif %}
99
-
100
- </div>
101
- </div>
102
- </div>
103
- </div>
104
-
105
- </body>
106
- </html>