jekyll-bonsai 0.0.3

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 (177) hide show
  1. checksums.yaml +7 -0
  2. data/LICENSE.txt +674 -0
  3. data/README.md +11 -0
  4. data/_config.yml +155 -0
  5. data/_entries/digital-garden.bonsai.md +36 -0
  6. data/_entries/digital-garden.field-logs.md +10 -0
  7. data/_entries/digital-garden.fork.md +10 -0
  8. data/_entries/digital-garden.md +17 -0
  9. data/_entries/digital-garden.path.md +11 -0
  10. data/_entries/digital-garden.plants.md +12 -0
  11. data/_entries/digital-garden.pollinate.md +10 -0
  12. data/_entries/digital-garden.steps.md +10 -0
  13. data/_entries/digital-garden.stream.md +12 -0
  14. data/_entries/digital-garden.sweep.md +12 -0
  15. data/_entries/digital-garden.weather.md +12 -0
  16. data/_entries/features.md +10 -0
  17. data/_entries/features.notes.hover-preview.md +10 -0
  18. data/_entries/features.notes.md +12 -0
  19. data/_entries/features.notes.note-body.md +12 -0
  20. data/_entries/features.notes.note-body.share.md +10 -0
  21. data/_entries/features.notes.note-body.sidenotes.md +52 -0
  22. data/_entries/features.notes.note-foot.links.md +10 -0
  23. data/_entries/features.notes.note-foot.md +11 -0
  24. data/_entries/features.notes.note-foot.posts.md +10 -0
  25. data/_entries/features.notes.note-foot.webmentions.md +10 -0
  26. data/_entries/features.notes.note-head.md +10 -0
  27. data/_entries/features.pages.field-blogs.md +10 -0
  28. data/_entries/features.pages.md +12 -0
  29. data/_entries/features.pages.recent.md +10 -0
  30. data/_entries/features.pages.status-tags.md +10 -0
  31. data/_entries/features.site-nav.graph.links.md +10 -0
  32. data/_entries/features.site-nav.graph.links.namespacing.md +14 -0
  33. data/_entries/features.site-nav.graph.links.wikilinks.md +25 -0
  34. data/_entries/features.site-nav.graph.md +12 -0
  35. data/_entries/features.site-nav.graph.nodes.current-note.md +10 -0
  36. data/_entries/features.site-nav.graph.nodes.md +12 -0
  37. data/_entries/features.site-nav.graph.nodes.mia.missing-note.md +20 -0
  38. data/_entries/features.site-nav.graph.nodes.visited-status.md +10 -0
  39. data/_entries/features.site-nav.graph.toggle-graph.md +13 -0
  40. data/_entries/features.site-nav.graph.type.md +16 -0
  41. data/_entries/features.site-nav.graph.type.net-web.md +10 -0
  42. data/_entries/features.site-nav.graph.type.tree.md +12 -0
  43. data/_entries/features.site-nav.md +10 -0
  44. data/_entries/features.site-nav.visited.md +14 -0
  45. data/_entries/features.tags.md +13 -0
  46. data/_entries/features.themes.dark.md +12 -0
  47. data/_entries/features.themes.light.md +10 -0
  48. data/_entries/features.themes.md +12 -0
  49. data/_entries/features.visited.delete-data.md +10 -0
  50. data/_entries/features.visited.md +12 -0
  51. data/_entries/features.visitor-preferences.md +27 -0
  52. data/_entries/feedback.md +10 -0
  53. data/_entries/people.creator.md +12 -0
  54. data/_entries/people.md +13 -0
  55. data/_entries/people.visitors.md +12 -0
  56. data/_entries/plugins.jekyll-wikilinks.md +10 -0
  57. data/_entries/plugins.md +10 -0
  58. data/_entries/root.md +26 -0
  59. data/_includes/anchor-headings.html +152 -0
  60. data/_includes/connect.html +44 -0
  61. data/_includes/entry-attrs.html +27 -0
  62. data/_includes/head.html +23 -0
  63. data/_includes/hover-preview.html +84 -0
  64. data/_includes/img/bullet-ancestor.svg +5 -0
  65. data/_includes/img/bullet-net-web.svg +9 -0
  66. data/_includes/img/bullet-tree.svg +9 -0
  67. data/_includes/metrics.html +10 -0
  68. data/_includes/share.html +45 -0
  69. data/_includes/site-nav.html +48 -0
  70. data/_includes/styles.scss.liquid +3 -0
  71. data/_layouts/default.html +39 -0
  72. data/_layouts/entry.html +124 -0
  73. data/_layouts/post.html +29 -0
  74. data/_layouts/state.html +59 -0
  75. data/_layouts/table-wrappers.html +7 -0
  76. data/_layouts/vendor/compress.html +10 -0
  77. data/_pages/about.md +7 -0
  78. data/_pages/posts.html +19 -0
  79. data/_pages/recent.html +48 -0
  80. data/_plugins/doc_filters.rb +44 -0
  81. data/_plugins/prep_entry.rb +43 -0
  82. data/_plugins/sidenote.rb +123 -0
  83. data/_plugins/tags.rb +52 -0
  84. data/_sass/base/_layout.scss +54 -0
  85. data/_sass/base/_main.scss +203 -0
  86. data/_sass/base/_typography.scss +75 -0
  87. data/_sass/base/base.scss +3 -0
  88. data/_sass/color/dark.scss +58 -0
  89. data/_sass/color/light.scss +58 -0
  90. data/_sass/includes/_btn.scss +106 -0
  91. data/_sass/includes/_graph.scss +69 -0
  92. data/_sass/includes/_nav.scss +89 -0
  93. data/_sass/includes/_site_nav.scss +221 -0
  94. data/_sass/includes/_tooltip.scss +29 -0
  95. data/_sass/includes/includes.scss +9 -0
  96. data/_sass/markdown/_code.scss +340 -0
  97. data/_sass/markdown/_content.scss +400 -0
  98. data/_sass/markdown/_tables.scss +60 -0
  99. data/_sass/markdown/markdown.scss +7 -0
  100. data/_sass/modules.scss +14 -0
  101. data/_sass/pages/_index.scss +72 -0
  102. data/_sass/pages/_posts.scss +17 -0
  103. data/_sass/pages/_recent.scss +26 -0
  104. data/_sass/pages/_state.scss +72 -0
  105. data/_sass/pages/pages.scss +4 -0
  106. data/_sass/support/_functions.scss +9 -0
  107. data/_sass/support/_variables.scss +179 -0
  108. data/_sass/support/mixins/_buttons.scss +27 -0
  109. data/_sass/support/mixins/_layout.scss +56 -0
  110. data/_sass/support/mixins/_typography.scss +84 -0
  111. data/_sass/support/mixins/mixins.scss +3 -0
  112. data/_sass/support/support.scss +3 -0
  113. data/_sass/vendor/normalize.scss/README.md +7 -0
  114. data/_sass/vendor/normalize.scss/normalize.scss +349 -0
  115. data/_states/bamboo.md +8 -0
  116. data/_states/berry.md +8 -0
  117. data/_states/bloom.md +8 -0
  118. data/_states/bud.md +6 -0
  119. data/_states/fruit.md +8 -0
  120. data/_states/melon.md +8 -0
  121. data/_states/pot-bamboo.md +8 -0
  122. data/_states/seed.md +8 -0
  123. data/_states/sprout.md +8 -0
  124. data/_states/tags.md +8 -0
  125. data/_states/tea.md +8 -0
  126. data/assets/css/styles-dark.scss +3 -0
  127. data/assets/css/styles-light.scss +3 -0
  128. data/assets/css/styles.scss +8 -0
  129. data/assets/font/Cutive_Mono/CutiveMono-Regular.ttf +0 -0
  130. data/assets/font/Cutive_Mono/OFL.txt +93 -0
  131. data/assets/font/Old_Standard_TT/OFL.txt +93 -0
  132. data/assets/font/Old_Standard_TT/OldStandardTT-Bold.ttf +0 -0
  133. data/assets/font/Old_Standard_TT/OldStandardTT-Italic.ttf +0 -0
  134. data/assets/font/Old_Standard_TT/OldStandardTT-Regular.ttf +0 -0
  135. data/assets/font/exo2/Exo2-Italic-VariableFont_wght.ttf +0 -0
  136. data/assets/font/exo2/Exo2-VariableFont_wght.ttf +0 -0
  137. data/assets/font/exo2/OFL.txt +93 -0
  138. data/assets/font/exo2/README.txt +81 -0
  139. data/assets/font/exo2/static/Exo2-Black.ttf +0 -0
  140. data/assets/font/exo2/static/Exo2-BlackItalic.ttf +0 -0
  141. data/assets/font/exo2/static/Exo2-Bold.ttf +0 -0
  142. data/assets/font/exo2/static/Exo2-BoldItalic.ttf +0 -0
  143. data/assets/font/exo2/static/Exo2-ExtraBold.ttf +0 -0
  144. data/assets/font/exo2/static/Exo2-ExtraBoldItalic.ttf +0 -0
  145. data/assets/font/exo2/static/Exo2-ExtraLight.ttf +0 -0
  146. data/assets/font/exo2/static/Exo2-ExtraLightItalic.ttf +0 -0
  147. data/assets/font/exo2/static/Exo2-Italic.ttf +0 -0
  148. data/assets/font/exo2/static/Exo2-Light.ttf +0 -0
  149. data/assets/font/exo2/static/Exo2-LightItalic.ttf +0 -0
  150. data/assets/font/exo2/static/Exo2-Medium.ttf +0 -0
  151. data/assets/font/exo2/static/Exo2-MediumItalic.ttf +0 -0
  152. data/assets/font/exo2/static/Exo2-Regular.ttf +0 -0
  153. data/assets/font/exo2/static/Exo2-SemiBold.ttf +0 -0
  154. data/assets/font/exo2/static/Exo2-SemiBoldItalic.ttf +0 -0
  155. data/assets/font/exo2/static/Exo2-Thin.ttf +0 -0
  156. data/assets/font/exo2/static/Exo2-ThinItalic.ttf +0 -0
  157. data/assets/img/bonsai-dark.png +0 -0
  158. data/assets/img/bonsai-dark.svg +106 -0
  159. data/assets/img/bonsai-light.png +0 -0
  160. data/assets/img/bonsai-light.svg +81 -0
  161. data/assets/img/favicon-dark.png +0 -0
  162. data/assets/img/favicon-light.png +0 -0
  163. data/assets/img/nav-base-dark.svg +1 -0
  164. data/assets/img/nav-base-light.svg +1 -0
  165. data/assets/img/nav-bonsai-dark.svg +1 -0
  166. data/assets/img/nav-bonsai-light.svg +1 -0
  167. data/assets/img/nav-dot-dark.svg +1 -0
  168. data/assets/img/nav-dot-light.svg +1 -0
  169. data/assets/img/nav-wiki-links-dark.svg +1 -0
  170. data/assets/img/nav-wiki-links-light.svg +1 -0
  171. data/assets/js/entry.js +102 -0
  172. data/assets/js/graph.js +552 -0
  173. data/assets/js/scripts.js +80 -0
  174. data/assets/js/site-nav.js +132 -0
  175. data/assets/js/theme-colors.js +71 -0
  176. data/index.html +82 -0
  177. metadata +360 -0
Binary file
@@ -0,0 +1,106 @@
1
+ <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 583.03 399.59">
2
+ <defs>
3
+ <style>
4
+ .cls-1 {
5
+ fill: #54535b;
6
+ }
7
+
8
+ .cls-2 {
9
+ fill: none;
10
+ stroke: #54535b;
11
+ stroke-miterlimit: 10;
12
+ stroke-width: 10px;
13
+ }
14
+
15
+ .cls-3 {
16
+ fill: #31af31;
17
+ }
18
+
19
+ .cls-4 {
20
+ fill: #e6e1e8;
21
+ }
22
+ </style>
23
+ </defs>
24
+ <g id="Layer_2" data-name="Layer 2">
25
+ <g id="Layer_1-2" data-name="Layer 1">
26
+ <path class="cls-1" d="M155.05,219.83a41.35,41.35,0,0,0,1,6.4,47.68,47.68,0,0,0,2.16,6.47,56.53,56.53,0,0,0,6.91,12.22,71.84,71.84,0,0,0,9.63,10.67l2.76,2.38c.94.78,1.94,1.49,2.9,2.25,2,1.48,4,2.89,6.09,4.21a105.38,105.38,0,0,0,13.25,7.05,117.12,117.12,0,0,0,14.31,5.34c4.92,1.46,10,2.67,15.08,3.66,2.57.42,5.14.93,7.74,1.21l3.9.5,3.93.36c2.6.27,5.27.34,7.91.52l4.18.25c.72.07,1.43.06,2.15.18l2.15.34a51.45,51.45,0,0,1,16.25,5.64,53.43,53.43,0,0,1,13.41,10.41A50.61,50.61,0,0,1,300,314a43.63,43.63,0,0,1,3.66,16.26,53.33,53.33,0,0,1-1.87,16.33,60.27,60.27,0,0,1-6.42,14.95,62.45,62.45,0,0,1-9.93,12.73l-.06-.06a61.81,61.81,0,0,0,9.1-13.16,57.91,57.91,0,0,0,5.41-14.92,51.19,51.19,0,0,0,.79-15.65,40.32,40.32,0,0,0-4.33-14.75,46.28,46.28,0,0,0-21.84-20.57,44.53,44.53,0,0,0-14.37-3.87l-1.84-.16c-.61-.07-1.25,0-1.87,0-1.28,0-2.43,0-3.89.06-2.72,0-5.43.19-8.19.13-5.49.07-11-.24-16.54-.61a165.09,165.09,0,0,1-16.59-2.24,131,131,0,0,1-16.4-4.37,101,101,0,0,1-15.74-7,90.35,90.35,0,0,1-14.43-9.87,77.76,77.76,0,0,1-12.19-13c-.91-1.19-1.7-2.48-2.55-3.71s-1.56-2.59-2.33-3.88-1.41-2.69-2.05-4.06-1.27-2.77-1.76-4.23l-.78-2.17c-.24-.73-.44-1.48-.66-2.22-.47-1.46-.76-3-1.11-4.53a46.53,46.53,0,0,1-.78-9.59Z" />
27
+ <line class="cls-2" x1="23.49" y1="200.56" x2="54.67" y2="145.12" />
28
+ <line class="cls-2" x1="54.67" y1="145.12" x2="84.84" y2="200.56" />
29
+ <line class="cls-2" x1="84.84" y1="200.56" x2="116.3" y2="145.12" />
30
+ <line class="cls-2" x1="116.3" y1="145.12" x2="146.19" y2="200.56" />
31
+ <line class="cls-2" x1="146.19" y1="200.56" x2="177.93" y2="145.12" />
32
+ <line class="cls-2" x1="177.93" y1="145.12" x2="209.52" y2="200.56" />
33
+ <line class="cls-2" x1="309.46" y1="196.33" x2="340.64" y2="140.89" />
34
+ <line class="cls-2" x1="340.64" y1="140.89" x2="370.81" y2="196.33" />
35
+ <line class="cls-2" x1="370.81" y1="196.33" x2="402.27" y2="140.89" />
36
+ <line class="cls-2" x1="402.27" y1="140.89" x2="432.16" y2="196.33" />
37
+ <line class="cls-2" x1="432.16" y1="196.33" x2="463.9" y2="140.89" />
38
+ <line class="cls-2" x1="463.9" y1="140.89" x2="495.49" y2="196.33" />
39
+ <line class="cls-2" x1="495.49" y1="196.33" x2="526.35" y2="140.89" />
40
+ <line class="cls-2" x1="526.35" y1="140.89" x2="559.54" y2="196.33" />
41
+ <line class="cls-2" x1="112.41" y1="78.94" x2="143.58" y2="23.49" />
42
+ <line class="cls-2" x1="143.58" y1="23.49" x2="173.76" y2="78.94" />
43
+ <line class="cls-2" x1="173.76" y1="78.94" x2="205.22" y2="23.49" />
44
+ <line class="cls-2" x1="205.22" y1="23.49" x2="235.11" y2="78.94" />
45
+ <line class="cls-2" x1="235.11" y1="78.94" x2="266.85" y2="23.49" />
46
+ <line class="cls-2" x1="266.85" y1="23.49" x2="298.44" y2="78.94" />
47
+ <line class="cls-2" x1="298.44" y1="78.94" x2="329.3" y2="23.49" />
48
+ <line class="cls-2" x1="329.3" y1="23.49" x2="362.49" y2="78.94" />
49
+ <circle class="cls-1" cx="146.19" cy="200.56" r="23.49" />
50
+ <circle class="cls-1" cx="209.52" cy="200.56" r="23.49" />
51
+ <circle class="cls-1" cx="116.3" cy="145.12" r="23.49" />
52
+ <circle class="cls-1" cx="177.93" cy="145.12" r="23.49" />
53
+ <circle class="cls-1" cx="84.84" cy="200.56" r="23.49" />
54
+ <circle class="cls-1" cx="54.67" cy="145.12" r="23.49" />
55
+ <circle class="cls-1" cx="23.49" cy="200.56" r="23.49" />
56
+ <circle class="cls-1" cx="432.16" cy="196.33" r="23.49" />
57
+ <circle class="cls-1" cx="495.49" cy="196.33" r="23.49" />
58
+ <circle class="cls-1" cx="402.27" cy="140.89" r="23.49" />
59
+ <circle class="cls-1" cx="463.9" cy="140.89" r="23.49" />
60
+ <circle class="cls-1" cx="370.81" cy="196.33" r="23.49" />
61
+ <circle class="cls-1" cx="340.64" cy="140.89" r="23.49" />
62
+ <circle class="cls-1" cx="309.46" cy="196.33" r="23.49" />
63
+ <circle class="cls-1" cx="559.54" cy="196.33" r="23.49" />
64
+ <circle class="cls-1" cx="526.35" cy="140.89" r="23.49" />
65
+ <circle class="cls-1" cx="235.11" cy="78.94" r="23.49" />
66
+ <circle class="cls-1" cx="298.44" cy="78.94" r="23.49" />
67
+ <circle class="cls-1" cx="205.22" cy="23.49" r="23.49" />
68
+ <circle class="cls-1" cx="266.85" cy="23.49" r="23.49" />
69
+ <circle class="cls-1" cx="173.76" cy="78.94" r="23.49" />
70
+ <circle class="cls-1" cx="143.58" cy="23.49" r="23.49" />
71
+ <circle class="cls-1" cx="112.41" cy="78.94" r="23.49" />
72
+ <circle class="cls-1" cx="362.49" cy="78.94" r="23.49" />
73
+ <circle class="cls-1" cx="329.3" cy="23.49" r="23.49" />
74
+ <circle class="cls-3" cx="146.11" cy="200.71" r="14.91" />
75
+ <circle class="cls-3" cx="209.44" cy="200.71" r="14.91" />
76
+ <circle class="cls-3" cx="116.31" cy="145.1" r="14.91" />
77
+ <circle class="cls-3" cx="177.93" cy="145.12" r="14.91" />
78
+ <circle class="cls-3" cx="84.92" cy="200.71" r="14.91" />
79
+ <circle class="cls-3" cx="54.67" cy="145.12" r="14.91" />
80
+ <circle class="cls-3" cx="23.5" cy="200.71" r="14.91" />
81
+ <circle class="cls-3" cx="432.08" cy="196.48" r="14.91" />
82
+ <circle class="cls-3" cx="495.41" cy="196.48" r="14.91" />
83
+ <circle class="cls-3" cx="402.28" cy="140.87" r="14.91" />
84
+ <circle class="cls-3" cx="463.9" cy="140.89" r="14.91" />
85
+ <circle class="cls-3" cx="370.89" cy="196.48" r="14.91" />
86
+ <circle class="cls-3" cx="340.64" cy="140.89" r="14.91" />
87
+ <circle class="cls-3" cx="309.47" cy="196.48" r="14.91" />
88
+ <circle class="cls-3" cx="559.54" cy="196.48" r="14.91" />
89
+ <circle class="cls-3" cx="526.35" cy="140.89" r="14.91" />
90
+ <circle class="cls-3" cx="235.03" cy="79.08" r="14.91" />
91
+ <circle class="cls-3" cx="298.36" cy="79.08" r="14.91" />
92
+ <circle class="cls-3" cx="205.23" cy="23.48" r="14.91" />
93
+ <circle class="cls-3" cx="266.85" cy="23.49" r="14.91" />
94
+ <circle class="cls-3" cx="173.84" cy="79.08" r="14.91" />
95
+ <circle class="cls-3" cx="143.58" cy="23.49" r="14.91" />
96
+ <circle class="cls-3" cx="112.42" cy="79.08" r="14.91" />
97
+ <circle class="cls-3" cx="362.49" cy="79.08" r="14.91" />
98
+ <circle class="cls-3" cx="329.3" cy="23.49" r="14.91" />
99
+ <path class="cls-4" d="M190.1,399.59H142.9q0-2.29.16-16.32t.16-40.78q0-10.33,0-26.85t-.28-32.48h47.2v7.72H154.62q-.17,16.1-.21,28.75t0,22.2q0,20.28.16,32t.17,18h35.4Z" />
100
+ <path class="cls-4" d="M259.28,399.59H212.07q0-2.29.17-16.32t.16-40.78q0-10.33,0-26.85t-.29-32.48h47.21v7.72H223.79q-.16,16.1-.2,28.75t0,22.2q0,20.28.16,32t.16,18h35.41Z" />
101
+ <path class="cls-4" d="M272.28,373.42c0-8.15,5.51-13.88,13.22-13.88s13,5.73,13,13.88c0,7.93-5.07,13.87-13.22,13.87C277.57,387.29,272.28,381.35,272.28,373.42Z" />
102
+ <path class="cls-4" d="M359.86,399.59h-47.2v-7.72h35.4q0-6.93.17-19.95t.16-30.09q0-8.62,0-23.09t-.2-27.86H312.66v-7.72h47.2q-.24,15.9-.28,32.7t0,26.63q0,18.31.16,36.56T359.86,399.59Z" />
103
+ <path class="cls-4" d="M429,399.59h-47.2v-7.72h35.4q0-6.93.16-19.95t.17-30.09q0-8.62-.05-23.09t-.2-27.86H381.84v-7.72H429q-.24,15.9-.28,32.7t0,26.63q0,18.31.16,36.56T429,399.59Z" />
104
+ </g>
105
+ </g>
106
+ </svg>
Binary file
@@ -0,0 +1,81 @@
1
+ <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 583.03 399.59">
2
+ <defs>
3
+ <style>
4
+ .cls-1 {
5
+ fill: #8c6239;
6
+ }
7
+
8
+ .cls-2 {
9
+ fill: none;
10
+ stroke: #8c6239;
11
+ stroke-miterlimit: 10;
12
+ stroke-width: 10px;
13
+ }
14
+
15
+ .cls-3 {
16
+ fill: #31af31;
17
+ }
18
+
19
+ .cls-4 {
20
+ fill: #5c5962;
21
+ }
22
+ </style>
23
+ </defs>
24
+ <g id="Layer_2" data-name="Layer 2">
25
+ <g id="Layer_1-2" data-name="Layer 1">
26
+ <path class="cls-1" d="M155.05,219.83a41.35,41.35,0,0,0,1,6.4,47.68,47.68,0,0,0,2.16,6.47,56.53,56.53,0,0,0,6.91,12.22,71.84,71.84,0,0,0,9.63,10.67l2.76,2.38c.94.78,1.94,1.49,2.9,2.25,2,1.48,4,2.89,6.09,4.21a105.38,105.38,0,0,0,13.25,7.05,117.12,117.12,0,0,0,14.31,5.34c4.92,1.46,10,2.67,15.08,3.66,2.57.42,5.14.93,7.74,1.21l3.9.5,3.93.36c2.6.27,5.27.34,7.91.52l4.18.25c.72.07,1.43.06,2.15.18l2.15.34a51.45,51.45,0,0,1,16.25,5.64,53.43,53.43,0,0,1,13.41,10.41A50.61,50.61,0,0,1,300,314a43.63,43.63,0,0,1,3.66,16.26,53.33,53.33,0,0,1-1.87,16.33,60.27,60.27,0,0,1-6.42,14.95,62.45,62.45,0,0,1-9.93,12.73l-.06-.06a61.81,61.81,0,0,0,9.1-13.16,57.91,57.91,0,0,0,5.41-14.92,51.19,51.19,0,0,0,.79-15.65,40.32,40.32,0,0,0-4.33-14.75,46.28,46.28,0,0,0-21.84-20.57,44.53,44.53,0,0,0-14.37-3.87l-1.84-.16c-.61-.07-1.25,0-1.87,0-1.28,0-2.43,0-3.89.06-2.72,0-5.43.19-8.19.13-5.49.07-11-.24-16.54-.61a165.09,165.09,0,0,1-16.59-2.24,131,131,0,0,1-16.4-4.37,101,101,0,0,1-15.74-7,90.35,90.35,0,0,1-14.43-9.87,77.76,77.76,0,0,1-12.19-13c-.91-1.19-1.7-2.48-2.55-3.71s-1.56-2.59-2.33-3.88-1.41-2.69-2.05-4.06-1.27-2.77-1.76-4.23l-.78-2.17c-.24-.73-.44-1.48-.66-2.22-.47-1.46-.76-3-1.11-4.53a46.53,46.53,0,0,1-.78-9.59Z" />
27
+ <line class="cls-2" x1="112.41" y1="78.94" x2="143.58" y2="23.49" />
28
+ <line class="cls-2" x1="143.58" y1="23.49" x2="173.76" y2="78.94" />
29
+ <line class="cls-2" x1="173.76" y1="78.94" x2="205.22" y2="23.49" />
30
+ <line class="cls-2" x1="205.22" y1="23.49" x2="235.11" y2="78.94" />
31
+ <line class="cls-2" x1="235.11" y1="78.94" x2="266.85" y2="23.49" />
32
+ <line class="cls-2" x1="266.85" y1="23.49" x2="298.44" y2="78.94" />
33
+ <line class="cls-2" x1="298.44" y1="78.94" x2="329.3" y2="23.49" />
34
+ <line class="cls-2" x1="329.3" y1="23.49" x2="362.49" y2="78.94" />
35
+ <line class="cls-2" x1="309.46" y1="196.33" x2="340.64" y2="140.89" />
36
+ <line class="cls-2" x1="340.64" y1="140.89" x2="370.81" y2="196.33" />
37
+ <line class="cls-2" x1="370.81" y1="196.33" x2="402.27" y2="140.89" />
38
+ <line class="cls-2" x1="402.27" y1="140.89" x2="432.16" y2="196.33" />
39
+ <line class="cls-2" x1="432.16" y1="196.33" x2="463.9" y2="140.89" />
40
+ <line class="cls-2" x1="463.9" y1="140.89" x2="495.49" y2="196.33" />
41
+ <line class="cls-2" x1="495.49" y1="196.33" x2="526.35" y2="140.89" />
42
+ <line class="cls-2" x1="526.35" y1="140.89" x2="559.54" y2="196.33" />
43
+ <line class="cls-2" x1="54.67" y1="145.12" x2="84.84" y2="200.56" />
44
+ <line class="cls-2" x1="146.19" y1="200.56" x2="176.63" y2="145.12" />
45
+ <line class="cls-2" x1="176.63" y1="145.12" x2="209.2" y2="200.56" />
46
+ <line class="cls-2" x1="146.19" y1="200.56" x2="116.3" y2="145.12" />
47
+ <line class="cls-2" x1="84.84" y1="200.56" x2="116.3" y2="145.12" />
48
+ <line class="cls-2" x1="23.49" y1="200.56" x2="54.67" y2="145.12" />
49
+ <circle class="cls-3" cx="146.19" cy="200.56" r="23.49" />
50
+ <circle class="cls-3" cx="209.52" cy="200.56" r="23.49" transform="translate(-58.76 90.34) rotate(-21.41)" />
51
+ <circle class="cls-3" cx="116.3" cy="145.12" r="23.49" />
52
+ <circle class="cls-3" cx="177.93" cy="145.12" r="23.49" />
53
+ <circle class="cls-3" cx="84.84" cy="200.56" r="23.49" />
54
+ <circle class="cls-3" cx="54.67" cy="145.12" r="23.49" />
55
+ <circle class="cls-3" cx="23.49" cy="200.56" r="23.49" />
56
+ <circle class="cls-3" cx="235.11" cy="78.94" r="23.49" />
57
+ <circle class="cls-3" cx="298.44" cy="78.94" r="23.49" />
58
+ <circle class="cls-3" cx="205.22" cy="23.49" r="23.49" />
59
+ <circle class="cls-3" cx="266.85" cy="23.49" r="23.49" />
60
+ <circle class="cls-3" cx="173.76" cy="78.94" r="23.49" />
61
+ <circle class="cls-3" cx="143.58" cy="23.49" r="23.49" />
62
+ <circle class="cls-3" cx="112.41" cy="78.94" r="23.49" />
63
+ <circle class="cls-3" cx="362.49" cy="78.94" r="23.49" />
64
+ <circle class="cls-3" cx="329.3" cy="23.49" r="23.49" />
65
+ <circle class="cls-3" cx="432.16" cy="196.33" r="23.49" />
66
+ <circle class="cls-3" cx="495.49" cy="196.33" r="23.49" />
67
+ <circle class="cls-3" cx="402.27" cy="140.89" r="23.49" />
68
+ <circle class="cls-3" cx="463.9" cy="140.89" r="23.49" />
69
+ <circle class="cls-3" cx="370.81" cy="196.33" r="23.49" />
70
+ <circle class="cls-3" cx="340.64" cy="140.89" r="23.49" />
71
+ <circle class="cls-3" cx="309.46" cy="196.33" r="23.49" />
72
+ <circle class="cls-3" cx="559.54" cy="196.33" r="23.49" />
73
+ <circle class="cls-3" cx="526.35" cy="140.89" r="23.49" />
74
+ <path class="cls-4" d="M190.1,399.59H142.9q0-2.29.16-16.32t.16-40.78q0-10.33,0-26.85t-.28-32.48h47.2v7.72H154.62q-.17,16.1-.21,28.75t0,22.2q0,20.28.16,32t.17,18h35.4Z" />
75
+ <path class="cls-4" d="M259.28,399.59H212.07q0-2.29.17-16.32t.16-40.78q0-10.33,0-26.85t-.29-32.48h47.21v7.72H223.79q-.16,16.1-.2,28.75t0,22.2q0,20.28.16,32t.16,18h35.41Z" />
76
+ <path class="cls-4" d="M272.12,373.41c0-8.14,5.5-13.87,13.21-13.87s13,5.73,13,13.87c0,7.93-5.06,13.88-13.21,13.88C277.4,387.29,272.12,381.34,272.12,373.41Z" />
77
+ <path class="cls-4" d="M359.86,399.59h-47.2v-7.72h35.4q0-6.93.17-19.95t.16-30.09q0-8.62,0-23.09t-.2-27.86H312.66v-7.72h47.2q-.24,15.9-.28,32.7t0,26.63q0,18.31.16,36.56T359.86,399.59Z" />
78
+ <path class="cls-4" d="M429,399.59h-47.2v-7.72h35.4q0-6.93.16-19.95t.17-30.09q0-8.62-.05-23.09t-.2-27.86H381.84v-7.72H429q-.24,15.9-.28,32.7t0,26.63q0,18.31.16,36.56T429,399.59Z" />
79
+ </g>
80
+ </g>
81
+ </svg>
Binary file
Binary file
@@ -0,0 +1 @@
1
+ <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 286.14 116.43"><defs><style>.cls-1{fill:#e6e1e8;}</style></defs><g id="Layer_2" data-name="Layer 2"><g id="Layer_1-2" data-name="Layer 1"><path class="cls-1" d="M47.2,116.43H0q0-2.3.16-16.32T.33,59.33q0-10.33,0-26.85T0,0H47.2V7.72H11.72q-.17,16.1-.2,28.74t0,22.21q0,20.28.16,32t.16,18H47.2Z"/><path class="cls-1" d="M116.38,116.43H69.18q0-2.3.16-16.32t.16-40.78q0-10.33,0-26.85T69.18,0h47.2V7.72H80.9q-.16,16.1-.21,28.74t0,22.21q0,20.28.16,32t.17,18h35.4Z"/><path class="cls-1" d="M217,116.43h-47.2v-7.72h35.4q0-6.93.16-19.95t.16-30.09q0-8.62,0-23.09t-.2-27.86H169.77V0H217q-.25,15.9-.29,32.7t0,26.63q0,18.32.16,36.56T217,116.43Z"/><path class="cls-1" d="M286.14,116.43h-47.2v-7.72h35.4q0-6.93.17-19.95t.16-30.09q0-8.62,0-23.09t-.21-27.86H238.94V0h47.2q-.24,15.9-.28,32.7t0,26.63q0,18.32.16,36.56T286.14,116.43Z"/><path class="cls-1" d="M129.38,90.26c0-8.15,5.51-13.88,13.22-13.88s13,5.73,13,13.88c0,7.93-5.06,13.87-13.21,13.87C134.67,104.13,129.38,98.19,129.38,90.26Z"/></g></g></svg>
@@ -0,0 +1 @@
1
+ <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 286.14 116.43"><defs><style>.cls-1{fill:#5c5962;}</style></defs><g id="Layer_2" data-name="Layer 2"><g id="Layer_1-2" data-name="Layer 1"><path class="cls-1" d="M47.2,116.43H0q0-2.3.16-16.32T.33,59.33q0-10.33,0-26.85T0,0H47.2V7.72H11.72q-.17,16.1-.2,28.74t0,22.21q0,20.28.16,32t.16,18H47.2Z"/><path class="cls-1" d="M116.38,116.43H69.18q0-2.3.16-16.32t.16-40.78q0-10.33,0-26.85T69.18,0h47.2V7.72H80.9q-.16,16.1-.21,28.74t0,22.21q0,20.28.16,32t.17,18h35.4Z"/><path class="cls-1" d="M217,116.43h-47.2v-7.72h35.4q0-6.93.16-19.95t.16-30.09q0-8.62,0-23.09t-.2-27.86H169.77V0H217q-.25,15.9-.29,32.7t0,26.63q0,18.32.16,36.56T217,116.43Z"/><path class="cls-1" d="M286.14,116.43h-47.2v-7.72h35.4q0-6.93.17-19.95t.16-30.09q0-8.62,0-23.09t-.21-27.86H238.94V0h47.2q-.24,15.9-.28,32.7t0,26.63q0,18.32.16,36.56T286.14,116.43Z"/><path class="cls-1" d="M129.22,90.25c0-8.15,5.5-13.87,13.21-13.87s13,5.72,13,13.87c0,7.93-5.07,13.88-13.22,13.88C134.5,104.13,129.22,98.18,129.22,90.25Z"/></g></g></svg>
@@ -0,0 +1 @@
1
+ <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 583.03 374.23"><defs><style>.cls-1{fill:#54535b;}.cls-2{fill:none;stroke:#54535b;stroke-miterlimit:10;stroke-width:10px;}.cls-3{fill:#31af31;}</style></defs><g id="Layer_2" data-name="Layer 2"><g id="Layer_1-2" data-name="Layer 1"><path class="cls-1" d="M155.05,219.83a41.35,41.35,0,0,0,1,6.4,47.68,47.68,0,0,0,2.16,6.47,56.53,56.53,0,0,0,6.91,12.22,71.84,71.84,0,0,0,9.63,10.67l2.76,2.38c.94.78,1.94,1.49,2.9,2.25,2,1.48,4,2.89,6.09,4.21a105.38,105.38,0,0,0,13.25,7.05,117.12,117.12,0,0,0,14.31,5.34c4.92,1.46,10,2.67,15.08,3.66,2.57.42,5.14.93,7.74,1.21l3.9.5,3.93.36c2.6.27,5.27.34,7.91.52l4.18.25c.72.07,1.43.06,2.15.18l2.15.34a51.45,51.45,0,0,1,16.25,5.64,53.43,53.43,0,0,1,13.41,10.41A50.61,50.61,0,0,1,300,314a43.63,43.63,0,0,1,3.66,16.26,53.33,53.33,0,0,1-1.87,16.33,60.27,60.27,0,0,1-6.42,14.95,62.45,62.45,0,0,1-9.93,12.73l-.06-.06a61.81,61.81,0,0,0,9.1-13.16,57.91,57.91,0,0,0,5.41-14.92,51.19,51.19,0,0,0,.79-15.65,40.32,40.32,0,0,0-4.33-14.75,46.28,46.28,0,0,0-21.84-20.57,44.53,44.53,0,0,0-14.37-3.87l-1.84-.16c-.61-.07-1.25,0-1.87,0-1.28,0-2.43,0-3.89.06-2.72,0-5.43.19-8.19.13-5.49.07-11-.24-16.54-.61a165.09,165.09,0,0,1-16.59-2.24,131,131,0,0,1-16.4-4.37,101,101,0,0,1-15.74-7,90.35,90.35,0,0,1-14.43-9.87,77.76,77.76,0,0,1-12.19-13c-.91-1.19-1.7-2.48-2.55-3.71s-1.56-2.59-2.33-3.88-1.41-2.69-2.05-4.06-1.27-2.77-1.76-4.23l-.78-2.17c-.24-.73-.44-1.48-.66-2.22-.47-1.46-.76-3-1.11-4.53a46.53,46.53,0,0,1-.78-9.59Z"/><line class="cls-2" x1="23.49" y1="200.56" x2="54.67" y2="145.12"/><line class="cls-2" x1="54.67" y1="145.12" x2="84.84" y2="200.56"/><line class="cls-2" x1="84.84" y1="200.56" x2="116.3" y2="145.12"/><line class="cls-2" x1="116.3" y1="145.12" x2="146.19" y2="200.56"/><line class="cls-2" x1="146.19" y1="200.56" x2="177.93" y2="145.12"/><line class="cls-2" x1="177.93" y1="145.12" x2="209.52" y2="200.56"/><line class="cls-2" x1="309.46" y1="196.33" x2="340.64" y2="140.89"/><line class="cls-2" x1="340.64" y1="140.89" x2="370.81" y2="196.33"/><line class="cls-2" x1="370.81" y1="196.33" x2="402.27" y2="140.89"/><line class="cls-2" x1="402.27" y1="140.89" x2="432.16" y2="196.33"/><line class="cls-2" x1="432.16" y1="196.33" x2="463.9" y2="140.89"/><line class="cls-2" x1="463.9" y1="140.89" x2="495.49" y2="196.33"/><line class="cls-2" x1="495.49" y1="196.33" x2="526.35" y2="140.89"/><line class="cls-2" x1="526.35" y1="140.89" x2="559.54" y2="196.33"/><line class="cls-2" x1="112.41" y1="78.94" x2="143.58" y2="23.49"/><line class="cls-2" x1="143.58" y1="23.49" x2="173.76" y2="78.94"/><line class="cls-2" x1="173.76" y1="78.94" x2="205.22" y2="23.49"/><line class="cls-2" x1="205.22" y1="23.49" x2="235.11" y2="78.94"/><line class="cls-2" x1="235.11" y1="78.94" x2="266.85" y2="23.49"/><line class="cls-2" x1="266.85" y1="23.49" x2="298.44" y2="78.94"/><line class="cls-2" x1="298.44" y1="78.94" x2="329.3" y2="23.49"/><line class="cls-2" x1="329.3" y1="23.49" x2="362.49" y2="78.94"/><circle class="cls-1" cx="146.19" cy="200.56" r="23.49"/><circle class="cls-1" cx="209.52" cy="200.56" r="23.49"/><circle class="cls-1" cx="116.3" cy="145.12" r="23.49"/><circle class="cls-1" cx="177.93" cy="145.12" r="23.49"/><circle class="cls-1" cx="84.84" cy="200.56" r="23.49"/><circle class="cls-1" cx="54.67" cy="145.12" r="23.49"/><circle class="cls-1" cx="23.49" cy="200.56" r="23.49"/><circle class="cls-1" cx="432.16" cy="196.33" r="23.49"/><circle class="cls-1" cx="495.49" cy="196.33" r="23.49"/><circle class="cls-1" cx="402.27" cy="140.89" r="23.49"/><circle class="cls-1" cx="463.9" cy="140.89" r="23.49"/><circle class="cls-1" cx="370.81" cy="196.33" r="23.49"/><circle class="cls-1" cx="340.64" cy="140.89" r="23.49"/><circle class="cls-1" cx="309.46" cy="196.33" r="23.49"/><circle class="cls-1" cx="559.54" cy="196.33" r="23.49"/><circle class="cls-1" cx="526.35" cy="140.89" r="23.49"/><circle class="cls-1" cx="235.11" cy="78.94" r="23.49"/><circle class="cls-1" cx="298.44" cy="78.94" r="23.49"/><circle class="cls-1" cx="205.22" cy="23.49" r="23.49"/><circle class="cls-1" cx="266.85" cy="23.49" r="23.49"/><circle class="cls-1" cx="173.76" cy="78.94" r="23.49"/><circle class="cls-1" cx="143.58" cy="23.49" r="23.49"/><circle class="cls-1" cx="112.41" cy="78.94" r="23.49"/><circle class="cls-1" cx="362.49" cy="78.94" r="23.49"/><circle class="cls-1" cx="329.3" cy="23.49" r="23.49"/><circle class="cls-3" cx="146.11" cy="200.71" r="14.91"/><circle class="cls-3" cx="209.44" cy="200.71" r="14.91"/><circle class="cls-3" cx="116.31" cy="145.1" r="14.91"/><circle class="cls-3" cx="177.93" cy="145.12" r="14.91"/><circle class="cls-3" cx="84.92" cy="200.71" r="14.91"/><circle class="cls-3" cx="54.67" cy="145.12" r="14.91"/><circle class="cls-3" cx="23.5" cy="200.71" r="14.91"/><circle class="cls-3" cx="432.08" cy="196.48" r="14.91"/><circle class="cls-3" cx="495.41" cy="196.48" r="14.91"/><circle class="cls-3" cx="402.28" cy="140.87" r="14.91"/><circle class="cls-3" cx="463.9" cy="140.89" r="14.91"/><circle class="cls-3" cx="370.89" cy="196.48" r="14.91"/><circle class="cls-3" cx="340.64" cy="140.89" r="14.91"/><circle class="cls-3" cx="309.47" cy="196.48" r="14.91"/><circle class="cls-3" cx="559.54" cy="196.48" r="14.91"/><circle class="cls-3" cx="526.35" cy="140.89" r="14.91"/><circle class="cls-3" cx="235.03" cy="79.08" r="14.91"/><circle class="cls-3" cx="298.36" cy="79.08" r="14.91"/><circle class="cls-3" cx="205.23" cy="23.48" r="14.91"/><circle class="cls-3" cx="266.85" cy="23.49" r="14.91"/><circle class="cls-3" cx="173.84" cy="79.08" r="14.91"/><circle class="cls-3" cx="143.58" cy="23.49" r="14.91"/><circle class="cls-3" cx="112.42" cy="79.08" r="14.91"/><circle class="cls-3" cx="362.49" cy="79.08" r="14.91"/><circle class="cls-3" cx="329.3" cy="23.49" r="14.91"/></g></g></svg>
@@ -0,0 +1 @@
1
+ <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 583.03 374.23"><defs><style>.cls-1{fill:#8c6239;}.cls-2{fill:none;stroke:#8c6239;stroke-miterlimit:10;stroke-width:10px;}.cls-3{fill:#31af31;}</style></defs><g id="Layer_2" data-name="Layer 2"><g id="Layer_1-2" data-name="Layer 1"><path class="cls-1" d="M155.05,219.83a41.35,41.35,0,0,0,1,6.4,47.68,47.68,0,0,0,2.16,6.47,56.53,56.53,0,0,0,6.91,12.22,71.84,71.84,0,0,0,9.63,10.67l2.76,2.38c.94.78,1.94,1.49,2.9,2.25,2,1.48,4,2.89,6.09,4.21a105.38,105.38,0,0,0,13.25,7.05,117.12,117.12,0,0,0,14.31,5.34c4.92,1.46,10,2.67,15.08,3.66,2.57.42,5.14.93,7.74,1.21l3.9.5,3.93.36c2.6.27,5.27.34,7.91.52l4.18.25c.72.07,1.43.06,2.15.18l2.15.34a51.45,51.45,0,0,1,16.25,5.64,53.43,53.43,0,0,1,13.41,10.41A50.61,50.61,0,0,1,300,314a43.63,43.63,0,0,1,3.66,16.26,53.33,53.33,0,0,1-1.87,16.33,60.27,60.27,0,0,1-6.42,14.95,62.45,62.45,0,0,1-9.93,12.73l-.06-.06a61.81,61.81,0,0,0,9.1-13.16,57.91,57.91,0,0,0,5.41-14.92,51.19,51.19,0,0,0,.79-15.65,40.32,40.32,0,0,0-4.33-14.75,46.28,46.28,0,0,0-21.84-20.57,44.53,44.53,0,0,0-14.37-3.87l-1.84-.16c-.61-.07-1.25,0-1.87,0-1.28,0-2.43,0-3.89.06-2.72,0-5.43.19-8.19.13-5.49.07-11-.24-16.54-.61a165.09,165.09,0,0,1-16.59-2.24,131,131,0,0,1-16.4-4.37,101,101,0,0,1-15.74-7,90.35,90.35,0,0,1-14.43-9.87,77.76,77.76,0,0,1-12.19-13c-.91-1.19-1.7-2.48-2.55-3.71s-1.56-2.59-2.33-3.88-1.41-2.69-2.05-4.06-1.27-2.77-1.76-4.23l-.78-2.17c-.24-.73-.44-1.48-.66-2.22-.47-1.46-.76-3-1.11-4.53a46.53,46.53,0,0,1-.78-9.59Z"/><line class="cls-2" x1="112.41" y1="78.94" x2="143.58" y2="23.49"/><line class="cls-2" x1="143.58" y1="23.49" x2="173.76" y2="78.94"/><line class="cls-2" x1="173.76" y1="78.94" x2="205.22" y2="23.49"/><line class="cls-2" x1="205.22" y1="23.49" x2="235.11" y2="78.94"/><line class="cls-2" x1="235.11" y1="78.94" x2="266.85" y2="23.49"/><line class="cls-2" x1="266.85" y1="23.49" x2="298.44" y2="78.94"/><line class="cls-2" x1="298.44" y1="78.94" x2="329.3" y2="23.49"/><line class="cls-2" x1="329.3" y1="23.49" x2="362.49" y2="78.94"/><line class="cls-2" x1="309.46" y1="196.33" x2="340.64" y2="140.89"/><line class="cls-2" x1="340.64" y1="140.89" x2="370.81" y2="196.33"/><line class="cls-2" x1="370.81" y1="196.33" x2="402.27" y2="140.89"/><line class="cls-2" x1="402.27" y1="140.89" x2="432.16" y2="196.33"/><line class="cls-2" x1="432.16" y1="196.33" x2="463.9" y2="140.89"/><line class="cls-2" x1="463.9" y1="140.89" x2="495.49" y2="196.33"/><line class="cls-2" x1="495.49" y1="196.33" x2="526.35" y2="140.89"/><line class="cls-2" x1="526.35" y1="140.89" x2="559.54" y2="196.33"/><line class="cls-2" x1="54.67" y1="145.12" x2="84.84" y2="200.56"/><line class="cls-2" x1="146.19" y1="200.56" x2="176.63" y2="145.12"/><line class="cls-2" x1="176.63" y1="145.12" x2="209.2" y2="200.56"/><line class="cls-2" x1="146.19" y1="200.56" x2="116.3" y2="145.12"/><line class="cls-2" x1="84.84" y1="200.56" x2="116.3" y2="145.12"/><line class="cls-2" x1="23.49" y1="200.56" x2="54.67" y2="145.12"/><circle class="cls-3" cx="146.19" cy="200.56" r="23.49"/><circle class="cls-3" cx="209.52" cy="200.56" r="23.49" transform="translate(-58.76 90.34) rotate(-21.41)"/><circle class="cls-3" cx="116.3" cy="145.12" r="23.49"/><circle class="cls-3" cx="177.93" cy="145.12" r="23.49"/><circle class="cls-3" cx="84.84" cy="200.56" r="23.49"/><circle class="cls-3" cx="54.67" cy="145.12" r="23.49"/><circle class="cls-3" cx="23.49" cy="200.56" r="23.49"/><circle class="cls-3" cx="235.11" cy="78.94" r="23.49"/><circle class="cls-3" cx="298.44" cy="78.94" r="23.49"/><circle class="cls-3" cx="205.22" cy="23.49" r="23.49"/><circle class="cls-3" cx="266.85" cy="23.49" r="23.49"/><circle class="cls-3" cx="173.76" cy="78.94" r="23.49"/><circle class="cls-3" cx="143.58" cy="23.49" r="23.49"/><circle class="cls-3" cx="112.41" cy="78.94" r="23.49"/><circle class="cls-3" cx="362.49" cy="78.94" r="23.49"/><circle class="cls-3" cx="329.3" cy="23.49" r="23.49"/><circle class="cls-3" cx="432.16" cy="196.33" r="23.49"/><circle class="cls-3" cx="495.49" cy="196.33" r="23.49"/><circle class="cls-3" cx="402.27" cy="140.89" r="23.49"/><circle class="cls-3" cx="463.9" cy="140.89" r="23.49"/><circle class="cls-3" cx="370.81" cy="196.33" r="23.49"/><circle class="cls-3" cx="340.64" cy="140.89" r="23.49"/><circle class="cls-3" cx="309.46" cy="196.33" r="23.49"/><circle class="cls-3" cx="559.54" cy="196.33" r="23.49"/><circle class="cls-3" cx="526.35" cy="140.89" r="23.49"/></g></g></svg>
@@ -0,0 +1 @@
1
+ <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 26.21 27.75"><defs><style>.cls-1{fill:#e6e1e8;}</style></defs><g id="Layer_2" data-name="Layer 2"><g id="Layer_1-2" data-name="Layer 1"><path class="cls-1" d="M0,13.88C0,5.73,5.51,0,13.21,0s13,5.73,13,13.88c0,7.92-5.07,13.87-13.22,13.87C5.29,27.75,0,21.8,0,13.88Z"/></g></g></svg>
@@ -0,0 +1 @@
1
+ <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 26.21 27.75"><defs><style>.cls-1{fill:#5c5962;}</style></defs><g id="Layer_2" data-name="Layer 2"><g id="Layer_1-2" data-name="Layer 1"><path class="cls-1" d="M0,13.88C0,5.73,5.51,0,13.21,0s13,5.73,13,13.88c0,7.92-5.07,13.87-13.22,13.87C5.29,27.75,0,21.8,0,13.88Z"/></g></g></svg>
@@ -0,0 +1 @@
1
+ <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 286.14 116.43"><defs><style>.cls-1{fill:#e6e1e8;}</style></defs><g id="Layer_2" data-name="Layer 2"><g id="Layer_1-2" data-name="Layer 1"><path class="cls-1" d="M47.2,116.43H0q0-2.3.16-16.32T.33,59.33q0-10.33,0-26.85T0,0H47.2V7.72H11.72q-.17,16.1-.2,28.74t0,22.21q0,20.28.16,32t.16,18H47.2Z"/><path class="cls-1" d="M116.38,116.43H69.18q0-2.3.16-16.32t.16-40.78q0-10.33,0-26.85T69.18,0h47.2V7.72H80.9q-.16,16.1-.21,28.74t0,22.21q0,20.28.16,32t.17,18h35.4Z"/><path class="cls-1" d="M217,116.43h-47.2v-7.72h35.4q0-6.93.16-19.95t.16-30.09q0-8.62,0-23.09t-.2-27.86H169.77V0H217q-.25,15.9-.29,32.7t0,26.63q0,18.32.16,36.56T217,116.43Z"/><path class="cls-1" d="M286.14,116.43h-47.2v-7.72h35.4q0-6.93.17-19.95t.16-30.09q0-8.62,0-23.09t-.21-27.86H238.94V0h47.2q-.24,15.9-.28,32.7t0,26.63q0,18.32.16,36.56T286.14,116.43Z"/></g></g></svg>
@@ -0,0 +1 @@
1
+ <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 286.14 116.43"><defs><style>.cls-1{fill:#5c5962;}</style></defs><g id="Layer_2" data-name="Layer 2"><g id="Layer_1-2" data-name="Layer 1"><path class="cls-1" d="M47.2,116.43H0q0-2.3.16-16.32T.33,59.33q0-10.33,0-26.85T0,0H47.2V7.72H11.72q-.17,16.1-.2,28.74t0,22.21q0,20.28.16,32t.16,18H47.2Z"/><path class="cls-1" d="M116.38,116.43H69.18q0-2.3.16-16.32t.16-40.78q0-10.33,0-26.85T69.18,0h47.2V7.72H80.9q-.16,16.1-.21,28.74t0,22.21q0,20.28.16,32t.17,18h35.4Z"/><path class="cls-1" d="M217,116.43h-47.2v-7.72h35.4q0-6.93.16-19.95t.16-30.09q0-8.62,0-23.09t-.2-27.86H169.77V0H217q-.25,15.9-.29,32.7t0,26.63q0,18.32.16,36.56T217,116.43Z"/><path class="cls-1" d="M286.14,116.43h-47.2v-7.72h35.4q0-6.93.17-19.95t.16-30.09q0-8.62,0-23.09t-.21-27.86H238.94V0h47.2q-.24,15.9-.28,32.7t0,26.63q0,18.32.16,36.56T286.14,116.43Z"/></g></g></svg>
@@ -0,0 +1,102 @@
1
+ ---
2
+ ---
3
+
4
+ // this file is a monstrosity!
5
+ export default class Entry {
6
+ constructor() {
7
+ // head
8
+ // this.entryHeadStatus set in initEntryStatus();
9
+ this.entryHeadCheckbox = document.getElementById('entry-head-checkbox');
10
+
11
+ // foot
12
+ // this.entryFootLinksStatus set in initEntryStatus();
13
+ this.entryFootLinksCheckbox = document.getElementById('entry-foot-links-checkbox');
14
+ // this.entryFootPostsStatus set in initEntryStatus();
15
+ this.entryFootPostsCheckbox = document.getElementById('entry-foot-posts-checkbox');
16
+
17
+ this.init();
18
+ }
19
+
20
+ init() {
21
+ this.initEntryStatus();
22
+ this.bindEvents();
23
+ }
24
+
25
+ bindEvents() {
26
+ // head
27
+ this.entryHeadCheckbox.addEventListener('click', () => {
28
+ this.toggleEntryHeadCollapse();
29
+ });
30
+ // foot
31
+ this.entryFootLinksCheckbox.addEventListener('click', () => {
32
+ this.toggleEntryFootLinksCollapse();
33
+ });
34
+ this.entryFootPostsCheckbox.addEventListener('click', () => {
35
+ this.toggleEntryFootPostsCollapse();
36
+ });
37
+ }
38
+
39
+ initEntryStatus() {
40
+ // head
41
+ this.entryHeadStatus = localStorage.getItem('entry-head-status');
42
+ if (this.entryHeadStatus !== "open" && this.entryHeadStatus !== "closed") {
43
+ this.entryHeadStatus = '{{ site.state_head_status }}';
44
+ }
45
+ this.entryHeadCheckbox.checked = (this.entryHeadStatus === "closed");
46
+ this.toggleEntryHeadCollapse();
47
+
48
+ // foot
49
+ this.entryFootLinksStatus = localStorage.getItem('entry-foot-links-status');
50
+ if (this.entryFootLinksStatus !== "open" && this.entryFootLinksStatus !== "closed") {
51
+ this.entryFootLinksStatus = '{{ site.state_foot_links_status }}';
52
+ }
53
+ this.entryFootLinksCheckbox.checked = (this.entryFootLinksStatus === "closed");
54
+ this.toggleEntryFootLinksCollapse();
55
+
56
+ this.entryFootPostsStatus = localStorage.getItem('entry-foot-posts-status');
57
+ if (this.entryFootPostsStatus !== "open" && this.entryFootPostsStatus !== "closed") {
58
+ this.entryFootPostsStatus = '{{ site.state_foot_posts_status }}';
59
+ }
60
+ this.entryFootPostsCheckbox.checked = (this.entryFootPostsStatus === "closed");
61
+ this.toggleEntryFootPostsCollapse();
62
+ }
63
+
64
+ toggleEntryHeadCollapse () {
65
+ // from: https://www.w3schools.com/howto/tryit.asp?filename=tryhow_js_collapsible
66
+ var collapsibleEl = document.getElementsByClassName('entry-head-breadcrumbs')[0];
67
+ if (this.entryHeadCheckbox.checked) {
68
+ collapsibleEl.style.display = "none";
69
+ this.entryHeadStatus = "closed";
70
+ } else {
71
+ collapsibleEl.style.display = "flex";
72
+ this.entryHeadStatus = "open";
73
+ }
74
+ localStorage.setItem('entry-head-status', this.entryHeadStatus);
75
+ }
76
+
77
+ toggleEntryFootLinksCollapse () {
78
+ // from: https://www.w3schools.com/howto/tryit.asp?filename=tryhow_js_collapsible
79
+ var collapsibleEl = document.getElementById('entry-foot-links-nav');
80
+ if (this.entryFootLinksCheckbox.checked) {
81
+ collapsibleEl.style.display = "none";
82
+ this.entryFootLinksStatus = "closed";
83
+ } else {
84
+ collapsibleEl.style.display = "flex";
85
+ this.entryFootLinksStatus = "open";
86
+ }
87
+ localStorage.setItem('entry-foot-links-status', this.entryFootLinksStatus);
88
+ }
89
+
90
+ toggleEntryFootPostsCollapse () {
91
+ // from: https://www.w3schools.com/howto/tryit.asp?filename=tryhow_js_collapsible
92
+ var collapsibleEl = document.getElementById('entry-foot-posts-nav');
93
+ if (this.entryFootPostsCheckbox.checked) {
94
+ collapsibleEl.style.display = "none";
95
+ this.entryFootPostsStatus = "closed";
96
+ } else {
97
+ collapsibleEl.style.display = "flex";
98
+ this.entryFootPostsStatus = "open";
99
+ }
100
+ localStorage.setItem('entry-foot-posts-status', this.entryFootPostsStatus);
101
+ }
102
+ }
@@ -0,0 +1,552 @@
1
+ ---
2
+ ---
3
+
4
+ export default class GraphNav {
5
+
6
+ constructor() {
7
+ // this.graphType set in initGraphType();
8
+ this.svgWrapper = document.getElementById('svg-graph');
9
+ this.graphTypeCheckBox = document.getElementById('graph-type-checkbox');
10
+ this.graphTypeEmojiSpan = document.getElementById('graph-type-emoji-span');
11
+ this.init();
12
+ }
13
+
14
+ init() {
15
+ this.initGraphType();
16
+ this.bindEvents();
17
+ this.drawD3Nav();
18
+ }
19
+
20
+ bindEvents() {
21
+ // listen for draw event (esp. from theme colors)
22
+ this.svgWrapper.addEventListener('draw', () => {
23
+ this.updateGraphType();
24
+ this.drawD3Nav();
25
+ });
26
+ this.graphTypeCheckBox.addEventListener('click', () => {
27
+ this.updateGraphType();
28
+ this.drawD3Nav();
29
+ });
30
+ }
31
+
32
+ // how to checkbox: https://www.w3schools.com/howto/tryit.asp?filename=tryhow_js_display_checkbox_text
33
+ drawD3Nav() {
34
+ // destroy old chart
35
+ d3.select(this.svgWrapper).selectAll('svg > *').remove();
36
+
37
+ let theme_attrs = {};
38
+ // set theme-dependent graph attributes.
39
+ if (document.getElementById('theme-colors-checkbox').checked) {
40
+ theme_attrs = {
41
+ "name": "dark",
42
+ "radius": 2.5,
43
+ "missing-radius": 2.5,
44
+ }
45
+ } else {
46
+ theme_attrs = {
47
+ "name": "light",
48
+ "radius": 3,
49
+ "missing-radius": 1.5,
50
+ }
51
+ }
52
+ // redraw new chart
53
+ if (this.graphTypeCheckBox.checked) {
54
+ this.drawTree(theme_attrs);
55
+ } else {
56
+ this.drawNetWeb(theme_attrs);
57
+ }
58
+ }
59
+
60
+ initGraphType() {
61
+ this.graphType = localStorage.getItem('graph-type');
62
+ if (this.graphType !== "tree" && this.graphType !== "net-web") {
63
+ this.graphType = '{{ site.graph_type }}';
64
+ }
65
+ this.graphTypeCheckBox.checked = (this.graphType === "tree");
66
+ this.updateGraphType();
67
+ }
68
+
69
+ updateGraphType() {
70
+ if (this.graphTypeCheckBox.checked) {
71
+ this.graphTypeEmojiSpan.innerText = "🕸";
72
+ this.graphType = "tree";
73
+ } else {
74
+ this.graphTypeEmojiSpan.innerText = "🌳";
75
+ this.graphType = "net-web";
76
+ }
77
+ localStorage.setItem('graph-type', this.graphType);
78
+ }
79
+
80
+ // d3
81
+ drawNetWeb (theme_attrs) {
82
+ // d3.json has been async'd: https://stackoverflow.com/questions/49768165/code-within-d3-json-callback-is-not-executed
83
+ d3.json("{{ site.baseurl }}/assets/graph-net-web.json")
84
+ .then(function(data) {
85
+ // console.log('d3 is building a tree');
86
+ // console.log(data);
87
+ const svgWrapper = document.getElementById('svg-graph');
88
+ const width = +svgWrapper.getBoundingClientRect().width / 2;
89
+ const height = +svgWrapper.getBoundingClientRect().height / 2;
90
+ const svg = d3.select(svgWrapper)
91
+ .attr("viewBox", [-width / 2, -height / 2, width, height]);
92
+
93
+ const simulation = d3.forceSimulation()
94
+ .nodes(data.nodes)
95
+ .force("link", d3.forceLink()
96
+ .id(function(d) {return d.id;})
97
+ .distance(30)
98
+ .iterations(1)
99
+ .links(data.links))
100
+ .force("charge", d3.forceManyBody().strength(-50))
101
+ .force("collide", d3.forceCollide())
102
+ .force("center", d3.forceCenter())
103
+ // see: https://stackoverflow.com/questions/9573178/d3-force-directed-layout-with-bounding-box?answertab=votes#tab-top
104
+ // 'center of gravity'
105
+ .force("forceX", d3.forceX()
106
+ .strength(.3)
107
+ .x(.75))
108
+ .force("forceY", d3.forceY()
109
+ .strength(.1)
110
+ .y(.9));
111
+
112
+ const link = svg.append("g")
113
+ .attr("class", "links")
114
+ .selectAll("line")
115
+ .data(data.links)
116
+ .enter().append("line");
117
+
118
+ const node = svg.append('g')
119
+ .attr('class', 'nodes')
120
+ .selectAll('g')
121
+ .data(data.nodes)
122
+ .join("g");
123
+ // .attr("active", (d) => isCurrentEntryInNetWeb(d) ? true : null)
124
+
125
+ node.append('circle')
126
+ //svg 2.0 not well-supported: https://stackoverflow.com/questions/47381187/svg-not-working-in-firefox
127
+ // add attributes in javascript instead of css.
128
+ .attr("r", (d) => isMissingEntryInNetWeb(d) ? theme_attrs["missing-radius"] : theme_attrs["radius"])
129
+ .attr("class", nodeTypeInNetWeb)
130
+ .on("click", goToEntryFromNetWeb)
131
+ .on("mouseover", onMouseover)
132
+ .on("mouseout", onMouseout)
133
+ .call(d3.drag()
134
+ .on("start", dragstarted)
135
+ .on("drag", dragged)
136
+ .on("end", dragended)
137
+ .touchable(true));
138
+
139
+ // from: https://stackoverflow.com/questions/28415005/d3-js-selection-conditional-rendering
140
+ // use filtering to deal with specific nodes
141
+ // from: https://codepen.io/blackjacques/pen/BaaqKpO
142
+ // add node pulse on the current node
143
+ node.filter( function(d,i) { return isCurrentEntryInNetWeb(d); })
144
+ .append("circle")
145
+ .attr("r", theme_attrs["radius"])
146
+ .classed("pulse", (d) => isCurrentEntryInNetWeb(d) ? true : null)
147
+ .on("mouseover", onMouseover)
148
+ .on("mouseout", onMouseout)
149
+ .call(d3.drag()
150
+ .on("start", dragstarted)
151
+ .on("drag", dragged)
152
+ .on("end", dragended)
153
+ .touchable(true));
154
+
155
+ node.filter( function(d,i) { return isPostTaggedInNetWeb(d); })
156
+ .append("circle")
157
+ .attr("r", theme_attrs["radius"])
158
+ .classed("pulse-sem-tag", (d) => isPostTaggedInNetWeb(d) ? true : null)
159
+ .on("mouseover", onMouseover)
160
+ .on("mouseout", onMouseout)
161
+ .call(d3.drag()
162
+ .on("start", dragstarted)
163
+ .on("drag", dragged)
164
+ .on("end", dragended)
165
+ .touchable(true));
166
+
167
+ const text = svg.append('g')
168
+ .attr('class', 'text')
169
+ .selectAll('text')
170
+ .data(data.nodes)
171
+ .join("text")
172
+ .attr("font-size", "20%")
173
+ .attr("dx", 5)
174
+ .attr("dy", ".05em")
175
+ .text((d) => isMissingEntryInNetWeb(d) ? "Missing Entry" : d.label)
176
+ .on("mouseover", onMouseover)
177
+ .on("mouseout", onMouseout);
178
+
179
+ simulation.on("tick", () => {
180
+ link
181
+ .attr("x1", function(d) { return d.source.x; })
182
+ .attr("y1", function(d) { return d.source.y; })
183
+ .attr("x2", function(d) { return d.target.x; })
184
+ .attr("y2", function(d) { return d.target.y; });
185
+ node
186
+ .attr("transform", function(d) { return "translate(" + d.x + "," + d.y + ")"; });
187
+ text
188
+ .attr("transform", function(d) { return "translate(" + d.x + "," + d.y + ")"; });
189
+ });
190
+
191
+ //
192
+ // helpers
193
+ //
194
+
195
+ function isCurrentEntryInNetWeb(node) {
196
+ return !isMissingEntryInNetWeb(node) && window.location.pathname.includes(node.url);
197
+ }
198
+
199
+ function isPostTaggedInNetWeb(node) {
200
+ // const isPostPage = window.location.pathname.includes("post");
201
+ // if (!isPostPage) return false;
202
+ const semTags = Array.from(document.getElementsByClassName("sem-tag"));
203
+ const tagged = semTags.filter((semTag) =>
204
+ !isMissingEntryInNetWeb(node) && semTag.href.includes(node.url)
205
+ );
206
+ return tagged.length !== 0;
207
+ }
208
+
209
+ function nodeTypeInNetWeb(node) {
210
+ const isVisited = isVisitedEntryInNetWeb(node);
211
+ const isMissing = isMissingEntryInNetWeb(node);
212
+ if (isVisited) {
213
+ return "visited";
214
+ } else if (!isVisited && !isMissing) {
215
+ return "unvisited";
216
+ } else if (isMissing) {
217
+ return "missing";
218
+ } else {
219
+ console.log("WARN: Not a valid node type.");
220
+ return null;
221
+ }
222
+ }
223
+
224
+ function isVisitedEntryInNetWeb(node) {
225
+ if (!isMissingEntryInNetWeb(node)) {
226
+ var visited = JSON.parse(localStorage.getItem('visited'));
227
+ for (let i = 0; i < visited.length; i++) {
228
+ if (visited[i]['url'] === node.url) return true;
229
+ }
230
+ }
231
+ return false;
232
+ }
233
+
234
+ function isMissingEntryInNetWeb(node) {
235
+ return node.url === '';
236
+ }
237
+
238
+ // from: https://stackoverflow.com/questions/63693132/unable-to-get-node-datum-on-mouseover-in-d3-v6
239
+ // d6 now passes events in vanilla javascript fashion
240
+ function goToEntryFromNetWeb (e, d) {
241
+ if (!isMissingEntryInNetWeb(d)) {
242
+ window.location.href = d.url;
243
+ } else {
244
+ return null;
245
+ }
246
+ };
247
+
248
+ function onMouseover(e, d) {
249
+ const linkedNodesSet = new Set();
250
+ data.links
251
+ .filter((n) => n.target.id == d.id || n.source.id == d.id)
252
+ .forEach((n) => {
253
+ linkedNodesSet.add(n.target.id);
254
+ linkedNodesSet.add(n.source.id);
255
+ });
256
+
257
+ node.attr("class", (node_d) => {
258
+ if (node_d.id !== d.id && !linkedNodesSet.has(node_d.id)) {
259
+ return "inactive";
260
+ }
261
+ return "active";
262
+ });
263
+
264
+ link.attr("class", (link_d) => {
265
+ if (link_d.source.id !== d.id && link_d.target.id !== d.id) {
266
+ return "inactive";
267
+ }
268
+ return "active";
269
+ });
270
+
271
+ text.attr("class", (text_d) => {
272
+ if (text_d.id !== d.id) {
273
+ return "inactive";
274
+ }
275
+ return "active";
276
+ });
277
+ };
278
+
279
+ function onMouseout(d) {
280
+ node.attr("class", "");
281
+ link.attr("class", "");
282
+ text.attr("class", "");
283
+ };
284
+
285
+ function dragstarted(event, d) {
286
+ if (!event.active) simulation.alphaTarget(0.3).restart();
287
+ d.fx = d.x;
288
+ d.fy = d.y;
289
+ }
290
+
291
+ function dragged(event, d) {
292
+ d.fx = event.x;
293
+ d.fy = event.y;
294
+ }
295
+
296
+ function dragended(event, d) {
297
+ if (!event.active) simulation.alphaTarget(0);
298
+ d.fx = null;
299
+ d.fy = null;
300
+ }
301
+ })
302
+ .catch(function(error) {
303
+ console.log(error);
304
+ });
305
+ }
306
+
307
+ drawTree (theme_attrs) {
308
+ // d3.json has been async'd: https://stackoverflow.com/questions/49768165/code-within-d3-json-callback-is-not-executed
309
+ d3.json("{{ site.baseurl }}/assets/graph-tree.json")
310
+ .then(function(data) {
311
+ // console.log('d3 is building a tree');
312
+ // console.log(data);
313
+ const svgWrapper = document.getElementById('svg-graph');
314
+ const width = +svgWrapper.getBoundingClientRect().width / 2;
315
+ const height = +svgWrapper.getBoundingClientRect().height / 2;
316
+ const svg = d3.select(svgWrapper)
317
+ .attr("viewBox", [-width / 2, -height / 2, width, height]);
318
+
319
+ const root = d3.hierarchy(data);
320
+ const links = root.links();
321
+ flatten(root);
322
+ const nodes = root.descendants();
323
+
324
+ const simulation = d3.forceSimulation(nodes)
325
+ .force("link", d3.forceLink(links).id(d => d.id).distance(0).strength(1))
326
+ .force("charge", d3.forceManyBody().strength(-50))
327
+ .force("collide", d3.forceCollide())
328
+ .force("center", d3.forceCenter())
329
+ // see: https://stackoverflow.com/questions/9573178/d3-force-directed-layout-with-bounding-box?answertab=votes#tab-top
330
+ // 'center of gravity'
331
+ .force("forceX", d3.forceX()
332
+ .strength(.3)
333
+ .x(.9))
334
+ .force("forceY", d3.forceY()
335
+ .strength(.1)
336
+ .y(.9));
337
+
338
+ const link = svg.append("g")
339
+ .attr("class", "links")
340
+ .selectAll("line")
341
+ .data(links)
342
+ .join("line");
343
+
344
+ const node = svg.append('g')
345
+ .attr('class', 'nodes')
346
+ .selectAll('g')
347
+ .data(nodes)
348
+ .join("g");
349
+
350
+ node.append('circle')
351
+ //svg 2.0 not well-supported: https://stackoverflow.com/questions/47381187/svg-not-working-in-firefox
352
+ // add attributes in javascript instead of css.
353
+ .attr("r", (d) => isMissingEntryInTree(d.data.id) ? theme_attrs["missing-radius"] : theme_attrs["radius"])
354
+ .attr("class", nodeTypeInTree)
355
+ .on("click", goToEntryFromTree)
356
+ .on("mouseover", onMouseover)
357
+ .on("mouseout", onMouseout)
358
+ // 🐛 bug: this does not work -- it overtakes clicks (extra lines in "tick" are related).
359
+ .call(d3.drag()
360
+ .on("start", dragstarted)
361
+ .on("drag", dragged)
362
+ .on("end", dragended)
363
+ .touchable(true));
364
+
365
+ // from: https://stackoverflow.com/questions/28415005/d3-js-selection-conditional-rendering
366
+ // use filtering to deal with specific nodes
367
+ // from: https://codepen.io/blackjacques/pen/BaaqKpO
368
+ // add node pulse on the current node
369
+ node.filter( function(d,i) { return isCurrentEntryInTree(d); })
370
+ .append("circle")
371
+ .attr("r", (d) => theme_attrs["radius"])
372
+ .classed("pulse", true)
373
+ .on("mouseover", onMouseover)
374
+ .on("mouseout", onMouseout)
375
+ .call(d3.drag()
376
+ .on("start", dragstarted)
377
+ .on("drag", dragged)
378
+ .on("end", dragended)
379
+ .touchable(true));
380
+
381
+ node.filter( function(d,i) { return isPostTaggedInTree(d); })
382
+ .append("circle")
383
+ .attr("r", theme_attrs["radius"])
384
+ .classed("pulse-sem-tag", (d) => isPostTaggedInTree(d) ? true : null)
385
+ .on("click", goToEntryFromTree)
386
+ .on("mouseover", onMouseover)
387
+ .on("mouseout", onMouseout)
388
+ .call(d3.drag()
389
+ .on("start", dragstarted)
390
+ .on("drag", dragged)
391
+ .on("end", dragended)
392
+ .touchable(true));
393
+
394
+ const text = svg.append('g')
395
+ .attr('class', 'text')
396
+ .selectAll('text')
397
+ .data(nodes)
398
+ .join("text")
399
+ .attr("font-size", "20%")
400
+ .attr("dx", 5)
401
+ .attr("dy", ".05em")
402
+ .text((d) => isMissingEntryInTree(d.data.id) ? "Missing Entry" : d.data.label)
403
+ .on("mouseover", onMouseover)
404
+ .on("mouseout", onMouseout);
405
+
406
+ simulation.on("tick", () => {
407
+ // from: https://mbostock.github.io/d3/talk/20110921/parent-foci.html
408
+ // preserve hierarchical shape via link positioning
409
+ var kx = .2 * simulation.alpha();
410
+ var ky = 1.3 * simulation.alpha();
411
+ links.forEach(function(d, i) {
412
+ d.target.x += (d.source.x - d.target.x) * kx;
413
+ d.target.y += (d.source.y + (height * .35) - d.target.y) * ky;
414
+ });
415
+
416
+ link
417
+ .attr("x1", d => d.source.x)
418
+ .attr("y1", d => d.source.y)
419
+ .attr("x2", d => d.target.x)
420
+ .attr("y2", d => d.target.y);
421
+ node
422
+ .attr("transform", function(d) { return "translate(" + d.x + "," + d.y + ")"; });
423
+ text
424
+ .attr("transform", function(d) { return "translate(" + d.x + "," + d.y + ")"; });
425
+ });
426
+
427
+ //
428
+ // helpers
429
+ //
430
+ function isCurrentEntryInTree(node) {
431
+ return !isMissingEntryInTree(node.data.id) && window.location.pathname.includes(node.data.url);
432
+ }
433
+
434
+ function isPostTaggedInTree(node) {
435
+ // const isPostPage = window.location.pathname.includes("post");
436
+ // if (!isPostPage) return false;
437
+ const semTags = Array.from(document.getElementsByClassName("sem-tag"));
438
+ const tagged = semTags.filter((semTag) =>
439
+ !isMissingEntryInTree(node.data.id) && semTag.href.includes(node.data.url)
440
+ );
441
+ return tagged.length !== 0;
442
+ }
443
+
444
+ function nodeTypeInTree(node) {
445
+ const isVisited = isVisitedEntryInTree(node);
446
+ const isMissing = isMissingEntryInTree(node.data.id);
447
+ if (isVisited) {
448
+ return "visited";
449
+ } else if (!isVisited && !isMissing) {
450
+ return "unvisited";
451
+ } else if (isMissing) {
452
+ return "missing";
453
+ } else {
454
+ console.log("WARN: Not a valid node type.");
455
+ return null;
456
+ }
457
+ }
458
+
459
+ function isVisitedEntryInTree(node) {
460
+ var visited = JSON.parse(localStorage.getItem('visited'));
461
+ for (let i = 0; i < visited.length; i++) {
462
+ if (visited[i]['url'] === node.data.url) {
463
+ return true;
464
+ }
465
+ }
466
+ return false;
467
+ }
468
+
469
+ function isMissingEntryInTree(nodeId) {
470
+ return nodeId === "";
471
+ }
472
+
473
+ // from: https://stackoverflow.com/questions/63693132/unable-to-get-node-datum-on-mouseover-in-d3-v6
474
+ // d6 now passes events in vanilla javascript fashion
475
+ function goToEntryFromTree(e, d) {
476
+ if (!isMissingEntryInTree(d.data.id)) {
477
+ window.location.href = d.data.url;
478
+ return true;
479
+ } else {
480
+ return false;
481
+ }
482
+ };
483
+
484
+ function onMouseover(e, d) {
485
+ const linkedNodesSet = new Set();
486
+ links
487
+ .filter((n) => n.target.data.id == d.data.id || n.source.data.id == d.data.id)
488
+ .forEach((n) => {
489
+ linkedNodesSet.add(n.target.data.id);
490
+ linkedNodesSet.add(n.source.data.id);
491
+ });
492
+
493
+ node.attr("class", (node_d) => {
494
+ if (node_d.data.id !== d.data.id && !linkedNodesSet.has(node_d.data.id)) {
495
+ return "inactive";
496
+ }
497
+ return "active";
498
+ });
499
+
500
+ link.attr("class", (link_d) => {
501
+ if (link_d.source.data.id !== d.data.id && link_d.target.data.id !== d.data.id) {
502
+ return "inactive";
503
+ }
504
+ return "active";
505
+ });
506
+
507
+ text.attr("class", (text_d) => {
508
+ if (text_d.data.id !== d.data.id) {
509
+ return "inactive";
510
+ }
511
+ return "active";
512
+ });
513
+ };
514
+
515
+ function onMouseout(d) {
516
+ node.attr("class", "");
517
+ link.attr("class", "");
518
+ text.attr("class", "");
519
+ };
520
+
521
+ function dragstarted(event, d) {
522
+ if (!event.active) simulation.alphaTarget(0.3).restart();
523
+ d.fx = d.x;
524
+ d.fy = d.y;
525
+ }
526
+
527
+ function dragged(event, d) {
528
+ d.fx = event.x;
529
+ d.fy = event.y;
530
+ }
531
+
532
+ function dragended(event, d) {
533
+ if (!event.active) simulation.alphaTarget(0);
534
+ d.fx = null;
535
+ d.fy = null;
536
+ }
537
+
538
+ function flatten(root) {
539
+ var nodes = [];
540
+ function recurse(node) {
541
+ if (node.descendents) node.descendents.forEach(recurse);
542
+ nodes.push(node);
543
+ }
544
+ recurse(root);
545
+ return nodes;
546
+ }
547
+ })
548
+ .catch(function(error) {
549
+ console.log(error);
550
+ });
551
+ }
552
+ }