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.
- checksums.yaml +7 -0
- data/LICENSE.txt +674 -0
- data/README.md +11 -0
- data/_config.yml +155 -0
- data/_entries/digital-garden.bonsai.md +36 -0
- data/_entries/digital-garden.field-logs.md +10 -0
- data/_entries/digital-garden.fork.md +10 -0
- data/_entries/digital-garden.md +17 -0
- data/_entries/digital-garden.path.md +11 -0
- data/_entries/digital-garden.plants.md +12 -0
- data/_entries/digital-garden.pollinate.md +10 -0
- data/_entries/digital-garden.steps.md +10 -0
- data/_entries/digital-garden.stream.md +12 -0
- data/_entries/digital-garden.sweep.md +12 -0
- data/_entries/digital-garden.weather.md +12 -0
- data/_entries/features.md +10 -0
- data/_entries/features.notes.hover-preview.md +10 -0
- data/_entries/features.notes.md +12 -0
- data/_entries/features.notes.note-body.md +12 -0
- data/_entries/features.notes.note-body.share.md +10 -0
- data/_entries/features.notes.note-body.sidenotes.md +52 -0
- data/_entries/features.notes.note-foot.links.md +10 -0
- data/_entries/features.notes.note-foot.md +11 -0
- data/_entries/features.notes.note-foot.posts.md +10 -0
- data/_entries/features.notes.note-foot.webmentions.md +10 -0
- data/_entries/features.notes.note-head.md +10 -0
- data/_entries/features.pages.field-blogs.md +10 -0
- data/_entries/features.pages.md +12 -0
- data/_entries/features.pages.recent.md +10 -0
- data/_entries/features.pages.status-tags.md +10 -0
- data/_entries/features.site-nav.graph.links.md +10 -0
- data/_entries/features.site-nav.graph.links.namespacing.md +14 -0
- data/_entries/features.site-nav.graph.links.wikilinks.md +25 -0
- data/_entries/features.site-nav.graph.md +12 -0
- data/_entries/features.site-nav.graph.nodes.current-note.md +10 -0
- data/_entries/features.site-nav.graph.nodes.md +12 -0
- data/_entries/features.site-nav.graph.nodes.mia.missing-note.md +20 -0
- data/_entries/features.site-nav.graph.nodes.visited-status.md +10 -0
- data/_entries/features.site-nav.graph.toggle-graph.md +13 -0
- data/_entries/features.site-nav.graph.type.md +16 -0
- data/_entries/features.site-nav.graph.type.net-web.md +10 -0
- data/_entries/features.site-nav.graph.type.tree.md +12 -0
- data/_entries/features.site-nav.md +10 -0
- data/_entries/features.site-nav.visited.md +14 -0
- data/_entries/features.tags.md +13 -0
- data/_entries/features.themes.dark.md +12 -0
- data/_entries/features.themes.light.md +10 -0
- data/_entries/features.themes.md +12 -0
- data/_entries/features.visited.delete-data.md +10 -0
- data/_entries/features.visited.md +12 -0
- data/_entries/features.visitor-preferences.md +27 -0
- data/_entries/feedback.md +10 -0
- data/_entries/people.creator.md +12 -0
- data/_entries/people.md +13 -0
- data/_entries/people.visitors.md +12 -0
- data/_entries/plugins.jekyll-wikilinks.md +10 -0
- data/_entries/plugins.md +10 -0
- data/_entries/root.md +26 -0
- data/_includes/anchor-headings.html +152 -0
- data/_includes/connect.html +44 -0
- data/_includes/entry-attrs.html +27 -0
- data/_includes/head.html +23 -0
- data/_includes/hover-preview.html +84 -0
- data/_includes/img/bullet-ancestor.svg +5 -0
- data/_includes/img/bullet-net-web.svg +9 -0
- data/_includes/img/bullet-tree.svg +9 -0
- data/_includes/metrics.html +10 -0
- data/_includes/share.html +45 -0
- data/_includes/site-nav.html +48 -0
- data/_includes/styles.scss.liquid +3 -0
- data/_layouts/default.html +39 -0
- data/_layouts/entry.html +124 -0
- data/_layouts/post.html +29 -0
- data/_layouts/state.html +59 -0
- data/_layouts/table-wrappers.html +7 -0
- data/_layouts/vendor/compress.html +10 -0
- data/_pages/about.md +7 -0
- data/_pages/posts.html +19 -0
- data/_pages/recent.html +48 -0
- data/_plugins/doc_filters.rb +44 -0
- data/_plugins/prep_entry.rb +43 -0
- data/_plugins/sidenote.rb +123 -0
- data/_plugins/tags.rb +52 -0
- data/_sass/base/_layout.scss +54 -0
- data/_sass/base/_main.scss +203 -0
- data/_sass/base/_typography.scss +75 -0
- data/_sass/base/base.scss +3 -0
- data/_sass/color/dark.scss +58 -0
- data/_sass/color/light.scss +58 -0
- data/_sass/includes/_btn.scss +106 -0
- data/_sass/includes/_graph.scss +69 -0
- data/_sass/includes/_nav.scss +89 -0
- data/_sass/includes/_site_nav.scss +221 -0
- data/_sass/includes/_tooltip.scss +29 -0
- data/_sass/includes/includes.scss +9 -0
- data/_sass/markdown/_code.scss +340 -0
- data/_sass/markdown/_content.scss +400 -0
- data/_sass/markdown/_tables.scss +60 -0
- data/_sass/markdown/markdown.scss +7 -0
- data/_sass/modules.scss +14 -0
- data/_sass/pages/_index.scss +72 -0
- data/_sass/pages/_posts.scss +17 -0
- data/_sass/pages/_recent.scss +26 -0
- data/_sass/pages/_state.scss +72 -0
- data/_sass/pages/pages.scss +4 -0
- data/_sass/support/_functions.scss +9 -0
- data/_sass/support/_variables.scss +179 -0
- data/_sass/support/mixins/_buttons.scss +27 -0
- data/_sass/support/mixins/_layout.scss +56 -0
- data/_sass/support/mixins/_typography.scss +84 -0
- data/_sass/support/mixins/mixins.scss +3 -0
- data/_sass/support/support.scss +3 -0
- data/_sass/vendor/normalize.scss/README.md +7 -0
- data/_sass/vendor/normalize.scss/normalize.scss +349 -0
- data/_states/bamboo.md +8 -0
- data/_states/berry.md +8 -0
- data/_states/bloom.md +8 -0
- data/_states/bud.md +6 -0
- data/_states/fruit.md +8 -0
- data/_states/melon.md +8 -0
- data/_states/pot-bamboo.md +8 -0
- data/_states/seed.md +8 -0
- data/_states/sprout.md +8 -0
- data/_states/tags.md +8 -0
- data/_states/tea.md +8 -0
- data/assets/css/styles-dark.scss +3 -0
- data/assets/css/styles-light.scss +3 -0
- data/assets/css/styles.scss +8 -0
- data/assets/font/Cutive_Mono/CutiveMono-Regular.ttf +0 -0
- data/assets/font/Cutive_Mono/OFL.txt +93 -0
- data/assets/font/Old_Standard_TT/OFL.txt +93 -0
- data/assets/font/Old_Standard_TT/OldStandardTT-Bold.ttf +0 -0
- data/assets/font/Old_Standard_TT/OldStandardTT-Italic.ttf +0 -0
- data/assets/font/Old_Standard_TT/OldStandardTT-Regular.ttf +0 -0
- data/assets/font/exo2/Exo2-Italic-VariableFont_wght.ttf +0 -0
- data/assets/font/exo2/Exo2-VariableFont_wght.ttf +0 -0
- data/assets/font/exo2/OFL.txt +93 -0
- data/assets/font/exo2/README.txt +81 -0
- data/assets/font/exo2/static/Exo2-Black.ttf +0 -0
- data/assets/font/exo2/static/Exo2-BlackItalic.ttf +0 -0
- data/assets/font/exo2/static/Exo2-Bold.ttf +0 -0
- data/assets/font/exo2/static/Exo2-BoldItalic.ttf +0 -0
- data/assets/font/exo2/static/Exo2-ExtraBold.ttf +0 -0
- data/assets/font/exo2/static/Exo2-ExtraBoldItalic.ttf +0 -0
- data/assets/font/exo2/static/Exo2-ExtraLight.ttf +0 -0
- data/assets/font/exo2/static/Exo2-ExtraLightItalic.ttf +0 -0
- data/assets/font/exo2/static/Exo2-Italic.ttf +0 -0
- data/assets/font/exo2/static/Exo2-Light.ttf +0 -0
- data/assets/font/exo2/static/Exo2-LightItalic.ttf +0 -0
- data/assets/font/exo2/static/Exo2-Medium.ttf +0 -0
- data/assets/font/exo2/static/Exo2-MediumItalic.ttf +0 -0
- data/assets/font/exo2/static/Exo2-Regular.ttf +0 -0
- data/assets/font/exo2/static/Exo2-SemiBold.ttf +0 -0
- data/assets/font/exo2/static/Exo2-SemiBoldItalic.ttf +0 -0
- data/assets/font/exo2/static/Exo2-Thin.ttf +0 -0
- data/assets/font/exo2/static/Exo2-ThinItalic.ttf +0 -0
- data/assets/img/bonsai-dark.png +0 -0
- data/assets/img/bonsai-dark.svg +106 -0
- data/assets/img/bonsai-light.png +0 -0
- data/assets/img/bonsai-light.svg +81 -0
- data/assets/img/favicon-dark.png +0 -0
- data/assets/img/favicon-light.png +0 -0
- data/assets/img/nav-base-dark.svg +1 -0
- data/assets/img/nav-base-light.svg +1 -0
- data/assets/img/nav-bonsai-dark.svg +1 -0
- data/assets/img/nav-bonsai-light.svg +1 -0
- data/assets/img/nav-dot-dark.svg +1 -0
- data/assets/img/nav-dot-light.svg +1 -0
- data/assets/img/nav-wiki-links-dark.svg +1 -0
- data/assets/img/nav-wiki-links-light.svg +1 -0
- data/assets/js/entry.js +102 -0
- data/assets/js/graph.js +552 -0
- data/assets/js/scripts.js +80 -0
- data/assets/js/site-nav.js +132 -0
- data/assets/js/theme-colors.js +71 -0
- data/index.html +82 -0
- metadata +360 -0
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
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>
|
data/assets/js/entry.js
ADDED
@@ -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
|
+
}
|
data/assets/js/graph.js
ADDED
@@ -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
|
+
}
|