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
@@ -0,0 +1,44 @@
|
|
1
|
+
# liquid template to filter for most recently created/edited docs
|
2
|
+
require 'time'
|
3
|
+
|
4
|
+
module Jekyll
|
5
|
+
module DocFilters
|
6
|
+
def notable(docs)
|
7
|
+
return docs.select { |d| d.data.include?('notable') && (d.data['notable'] == true) }
|
8
|
+
end
|
9
|
+
|
10
|
+
# returns most recently created/updated docs up to the defined 'num'ber.
|
11
|
+
# adds a 'weather' data attribute to render on the page.
|
12
|
+
def recent(docs, num=10)
|
13
|
+
return if docs.nil?
|
14
|
+
num = self.to_integer(num)
|
15
|
+
# sort docs by most recently updated
|
16
|
+
recent_docs = docs.sort_by { |d| d.data['updated'] }.reverse[0..(num - 1)]
|
17
|
+
# assign weather attribute: if 'created' and 'updated' happened on the same day, presume creation status.
|
18
|
+
recent_docs.each do |docs|
|
19
|
+
day_created = Time.at(docs.data['created']).to_date
|
20
|
+
day_updated = Time.at(docs.data['updated']).to_date
|
21
|
+
end
|
22
|
+
return recent_docs
|
23
|
+
end
|
24
|
+
|
25
|
+
def weather(doc)
|
26
|
+
day_created = Time.at(doc['created']).to_date
|
27
|
+
day_updated = Time.at(doc['updated']).to_date
|
28
|
+
return day_created === day_updated ? "🌤" : "🌧"
|
29
|
+
end
|
30
|
+
|
31
|
+
# from: https://github.com/Shopify/liquid/blob/eab13a07d9861a38d993d2749ae25f06ff76426b/lib/liquid/utils.rb#L38
|
32
|
+
def to_integer(num)
|
33
|
+
return num if num.is_a?(Integer)
|
34
|
+
num = num.to_s
|
35
|
+
begin
|
36
|
+
Integer(num)
|
37
|
+
rescue ::ArgumentError
|
38
|
+
raise ArgumentError, "invalid integer"
|
39
|
+
end
|
40
|
+
end
|
41
|
+
end
|
42
|
+
end
|
43
|
+
|
44
|
+
Liquid::Template.register_filter(Jekyll::DocFilters)
|
@@ -0,0 +1,43 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
require 'nanoid'
|
3
|
+
require 'time'
|
4
|
+
|
5
|
+
class EntryVerificationGenerator < Jekyll::Generator
|
6
|
+
safe true
|
7
|
+
priority :highest
|
8
|
+
|
9
|
+
def generate(site)
|
10
|
+
#
|
11
|
+
# init jekyll vars
|
12
|
+
#
|
13
|
+
all_entries = site.collections['entries'].docs
|
14
|
+
# all_pages = site.pages
|
15
|
+
all_docs = all_entries # + all_pages
|
16
|
+
|
17
|
+
link_extension = site.config["permalink"] != "pretty" ? '.html' : ''
|
18
|
+
|
19
|
+
all_docs.each do |cur_entry|
|
20
|
+
# validation and sanitization
|
21
|
+
prep_entries(site, cur_entry, link_extension)
|
22
|
+
end
|
23
|
+
end
|
24
|
+
|
25
|
+
# verify all entries end with a "\n" so sidenotes works
|
26
|
+
# (sidenotes don't detect the last definition if there is no ending "\n").
|
27
|
+
def prep_entries(site, entry, link_extension)
|
28
|
+
# make sure ids are proper nano id format
|
29
|
+
if !(entry.data['id'] =~ /^[1234567890abcdef]{10}$/)
|
30
|
+
entry.data['id'] = Nanoid.generate(size: 10, alphabet: '1234567890abcdef')
|
31
|
+
end
|
32
|
+
# from: https://stackoverflow.com/questions/16235601/what-are-the-steps-to-getting-this-custom-permalink-scheme-in-jekyll
|
33
|
+
# Until Jekyll allows me to use :id, I have to resort to this
|
34
|
+
if link_extension.empty?
|
35
|
+
entry.data['permalink'] = '/entry/' + entry.data['id'] + '/'
|
36
|
+
else
|
37
|
+
entry.data['permalink'] = '/entry/' + entry.data['id'] + link_extension
|
38
|
+
end
|
39
|
+
# sanitize timestamps: remove milliseconds from epoch time
|
40
|
+
entry.data['created'] = Time.at(entry.data['created'].to_s[0..-4].to_i)
|
41
|
+
entry.data['updated'] = Time.at(entry.data['updated'].to_s[0..-4].to_i)
|
42
|
+
end
|
43
|
+
end
|
@@ -0,0 +1,123 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Jekyll
|
4
|
+
class SideNoteGenerator < Generator
|
5
|
+
safe true
|
6
|
+
attr_accessor :md_docs
|
7
|
+
|
8
|
+
##
|
9
|
+
# parser constants
|
10
|
+
##
|
11
|
+
# constants are taken from kramdown and baseparser.
|
12
|
+
# (for easier kramdown integration)
|
13
|
+
|
14
|
+
# from baseparser: https://github.com/ruby/rexml/blob/master/lib/rexml/parsers/baseparser.rb#L36
|
15
|
+
LETTER = '[:alpha:]'
|
16
|
+
COMBININGCHAR = '' # TODO
|
17
|
+
EXTENDER = '' # TODO
|
18
|
+
NCNAME_STR= "[#{LETTER}_][-[:alnum:]._#{COMBININGCHAR}#{EXTENDER}]*"
|
19
|
+
UNAME_STR= "(?:#{NCNAME_STR}:)?#{NCNAME_STR}"
|
20
|
+
|
21
|
+
# from kramdown: https://github.com/gettalong/kramdown
|
22
|
+
# from blank_line.rb
|
23
|
+
BLANK_LINE = /(?>^\s*\n)+/
|
24
|
+
# from eob.rb
|
25
|
+
EOB_MARKER = /^\^\s*?\n/
|
26
|
+
# from kramdown.rb
|
27
|
+
OPT_SPACE = / {0,3}/
|
28
|
+
# Regexp for matching indentation (one tab or four spaces)
|
29
|
+
INDENT = /^(?:\t| {4})/
|
30
|
+
# from extensions.rb
|
31
|
+
ALD_ID_CHARS = /[\w-]/
|
32
|
+
ALD_ANY_CHARS = /\\\}|[^\}]/
|
33
|
+
ALD_ID_NAME = /\w#{ALD_ID_CHARS}*/
|
34
|
+
IAL_BLOCK = /\{:(?!:|\/)(#{ALD_ANY_CHARS}+)\}\s*?\n/
|
35
|
+
IAL_BLOCK_START = /^#{OPT_SPACE}#{IAL_BLOCK}/
|
36
|
+
# from html.rb
|
37
|
+
# Some HTML elements like script belong to both categories (i.e. are valid in block and
|
38
|
+
# span HTML) and don't appear therefore!
|
39
|
+
# script, textarea
|
40
|
+
HTML_SPAN_ELEMENTS = %w[a abbr acronym b big bdo br button cite code del dfn em i img input
|
41
|
+
ins kbd label mark option q rb rbc rp rt rtc ruby samp select small
|
42
|
+
span strong sub sup tt u var]
|
43
|
+
# from paragraph.rb
|
44
|
+
LAZY_END_HTML_SPAN_ELEMENTS = HTML_SPAN_ELEMENTS + %w[script]
|
45
|
+
LAZY_END_HTML_START = /<(?>(?!(?:#{LAZY_END_HTML_SPAN_ELEMENTS.join('|')})\b)#{REXML::Parsers::BaseParser::UNAME_STR})/
|
46
|
+
LAZY_END_HTML_STOP = /<\/(?!(?:#{LAZY_END_HTML_SPAN_ELEMENTS.join('|')})\b)#{REXML::Parsers::BaseParser::UNAME_STR}\s*>/m
|
47
|
+
# from markdown.rb
|
48
|
+
# CODEBLOCK_MATCH = /(?:#{BLANK_LINE}?(?:#{INDENT}[ \t]*\S.*\n)+)*/
|
49
|
+
# because `.gsub(INDENT, '')` in footnote.rb
|
50
|
+
# CODEBLOCK_MATCH = /(?:#{BLANK_LINE}?(?:s[ \t]*\S.*\n)+)*/
|
51
|
+
# from codeblock.rb
|
52
|
+
CODEBLOCK_MATCH = /(?:#{BLANK_LINE}?(?:#{INDENT}[ \t]*\S.*\n)+(?:(?!#{IAL_BLOCK_START}|#{EOB_MARKER}|^#{OPT_SPACE}#{LAZY_END_HTML_STOP}|^#{OPT_SPACE}#{LAZY_END_HTML_START})^[ \t]*\S.*\n)*)*/
|
53
|
+
|
54
|
+
# footnotes (for reference)
|
55
|
+
# FOOTNOTE_DEFINITION_START = /^#{OPT_SPACE}\[\^(#{ALD_ID_NAME})\]:\s*?(.*?\n#{CODEBLOCK_MATCH})/
|
56
|
+
# FOOTNOTE_MARKER_START = /\[\^(#{ALD_ID_NAME})\]/
|
57
|
+
##
|
58
|
+
# constants for local use
|
59
|
+
##
|
60
|
+
# right
|
61
|
+
RIGHT_SIDENOTE_DEFINITION_START = /^#{OPT_SPACE}\[\>(#{ALD_ID_NAME})\]:\s*?(.*?\n#{CODEBLOCK_MATCH})/
|
62
|
+
RIGHT_SIDENOTE_MARKER_START = /\[\>(#{ALD_ID_NAME})\]/
|
63
|
+
# left
|
64
|
+
LEFT_SIDENOTE_DEFINITION_START = /^#{OPT_SPACE}\[\<(#{ALD_ID_NAME})\]:\s*?(.*?\n#{CODEBLOCK_MATCH})/
|
65
|
+
LEFT_SIDENOTE_MARKER_START = /\[\<(#{ALD_ID_NAME})\]/
|
66
|
+
|
67
|
+
def generate(site)
|
68
|
+
|
69
|
+
# setup markdown docs
|
70
|
+
docs = site.pages + site.docs_to_write
|
71
|
+
@md_docs = docs.filter {|doc| site.find_converter_instance(Jekyll::Converters::Markdown).matches(doc.extname) }
|
72
|
+
|
73
|
+
link_extension = !!site.config["use_html_extension"] ? '.html' : ''
|
74
|
+
|
75
|
+
@md_docs.each do |cur_doc|
|
76
|
+
# check for newlines @ eof.
|
77
|
+
# (kramdown can handle footnotes with no newline, but the regex i'm getting requires a newline after the last footnote to find it.)
|
78
|
+
if cur_doc.content[-1] != "\n"
|
79
|
+
Jekyll.logger.warn "Missing newline at end of file -- this could break sidenotes: ", cur_note.data['title']
|
80
|
+
end
|
81
|
+
parse_sidenote(cur_doc, "left")
|
82
|
+
parse_sidenote(cur_doc, "right")
|
83
|
+
end
|
84
|
+
end
|
85
|
+
|
86
|
+
# just get tufte-style sidenotes working for now...
|
87
|
+
# if there's time, emulate gwern's method: https://github.com/gwern/gwern.net/blob/9e6893033ec63248b1f0b29df119c40d39a7dcef/css/default.css#L1223
|
88
|
+
|
89
|
+
# mark -> [<left-sidenote], [>right-sidenote]
|
90
|
+
# def -> [<left-sidenote]:, [>right-sidenote]:
|
91
|
+
# `side` should be 'right' or 'left'
|
92
|
+
def parse_sidenote(doc, side)
|
93
|
+
# left v right setup
|
94
|
+
if side == "right"
|
95
|
+
sidenote_def_regex = RIGHT_SIDENOTE_DEFINITION_START
|
96
|
+
# sidenote_mark_regex = RIGHT_SIDENOTE_MARKER_START
|
97
|
+
css_class = "rsn"
|
98
|
+
sn_regex = /\>/
|
99
|
+
elsif side == "left"
|
100
|
+
sidenote_def_regex = LEFT_SIDENOTE_DEFINITION_START
|
101
|
+
# sidenote_mark_regex = LEFT_SIDENOTE_MARKER_START
|
102
|
+
css_class = "lsn"
|
103
|
+
sn_regex = /\</
|
104
|
+
else
|
105
|
+
Jekyll.logger.error "Can't process sidenote that is not either 'right' or 'left'."
|
106
|
+
return
|
107
|
+
end
|
108
|
+
# process sidenotes
|
109
|
+
sidenotes = doc.content.scan(sidenote_def_regex)
|
110
|
+
doc.content.gsub!(sidenote_def_regex, '') # rm sidenote defs from original note.
|
111
|
+
i = 0
|
112
|
+
sidenotes.each do |sidenote|
|
113
|
+
i += 1
|
114
|
+
mark = sidenote[0]
|
115
|
+
definition = sidenote[1]
|
116
|
+
doc.content = doc.content.gsub(
|
117
|
+
/\[#{sn_regex}(#{mark})\]/i,
|
118
|
+
"<label for=\"#{css_class}-#{i}\" class=\"sidenote-toggle sidenote-number\"></label><input type=\"checkbox\" id=\"#{css_class}-#{i}\" class=\"sidenote-toggle\"><span class=\"#{css_class}\">#{definition}</span>"
|
119
|
+
)
|
120
|
+
end
|
121
|
+
end
|
122
|
+
end
|
123
|
+
end
|
data/_plugins/tags.rb
ADDED
@@ -0,0 +1,52 @@
|
|
1
|
+
# liquid template to filter between semantic and status tags
|
2
|
+
module Jekyll
|
3
|
+
module TagFilters
|
4
|
+
|
5
|
+
# filter tags
|
6
|
+
|
7
|
+
def sem_tags(tags)
|
8
|
+
return if tags.nil?
|
9
|
+
site = @context.registers[:site]
|
10
|
+
sem_tags = []
|
11
|
+
site.collections['entries'].docs.each do |n|
|
12
|
+
tags.each do |t|
|
13
|
+
if n['namespace'] == t
|
14
|
+
sem_tags << {
|
15
|
+
'tag' => n['title'],
|
16
|
+
# 'namespace' => n['namespace'],
|
17
|
+
'url' => n.url
|
18
|
+
}
|
19
|
+
end
|
20
|
+
end
|
21
|
+
end
|
22
|
+
return sem_tags
|
23
|
+
end
|
24
|
+
|
25
|
+
def stat_tags(tags)
|
26
|
+
return if tags.nil?
|
27
|
+
site = @context.registers[:site]
|
28
|
+
stat_tags = []
|
29
|
+
site.collections['states'].docs.each do |st|
|
30
|
+
tags.each do |t|
|
31
|
+
if st['emoji'] == t
|
32
|
+
stat_tags << {
|
33
|
+
'emoji' => st['emoji'],
|
34
|
+
'url' => st.url
|
35
|
+
}
|
36
|
+
end
|
37
|
+
end
|
38
|
+
end
|
39
|
+
return stat_tags
|
40
|
+
end
|
41
|
+
|
42
|
+
# filter posts
|
43
|
+
|
44
|
+
def sem_tag_posts(namespace)
|
45
|
+
return if namespace.nil?
|
46
|
+
site = @context.registers[:site]
|
47
|
+
return site.posts.docs.select { |p| p['tags'].include?(namespace) }
|
48
|
+
end
|
49
|
+
end
|
50
|
+
end
|
51
|
+
|
52
|
+
Liquid::Template.register_filter(Jekyll::TagFilters)
|
@@ -0,0 +1,54 @@
|
|
1
|
+
//
|
2
|
+
// two column layout
|
3
|
+
//
|
4
|
+
|
5
|
+
.side-bar {
|
6
|
+
z-index: 1;
|
7
|
+
display: flex;
|
8
|
+
flex-wrap: wrap;
|
9
|
+
|
10
|
+
@include mq(md) {
|
11
|
+
width: $nav-width-md;
|
12
|
+
flex-wrap: nowrap;
|
13
|
+
position: fixed;
|
14
|
+
height: 100%;
|
15
|
+
}
|
16
|
+
|
17
|
+
@include mq(lg) {
|
18
|
+
width: $nav-width-lg;
|
19
|
+
}
|
20
|
+
}
|
21
|
+
|
22
|
+
.main {
|
23
|
+
height: 100%;
|
24
|
+
|
25
|
+
@include mq(md) {
|
26
|
+
max-width: $content-width;
|
27
|
+
margin-left: $nav-width-md;
|
28
|
+
}
|
29
|
+
|
30
|
+
@include mq(lg) {
|
31
|
+
margin-left: $nav-width-lg;
|
32
|
+
}
|
33
|
+
}
|
34
|
+
|
35
|
+
.main-content-wrap {
|
36
|
+
@include container;
|
37
|
+
|
38
|
+
display: flex;
|
39
|
+
flex-direction: column;
|
40
|
+
|
41
|
+
padding-top: $gutter-spacing-sm;
|
42
|
+
padding-bottom: $gutter-spacing-sm;
|
43
|
+
|
44
|
+
min-height: 100vh;
|
45
|
+
|
46
|
+
@include mq(md) {
|
47
|
+
padding-top: $gutter-spacing;
|
48
|
+
padding-bottom: $gutter-spacing;
|
49
|
+
}
|
50
|
+
}
|
51
|
+
|
52
|
+
.entry-body {
|
53
|
+
padding: $sp-3;
|
54
|
+
}
|
@@ -0,0 +1,203 @@
|
|
1
|
+
//
|
2
|
+
// Base element style overrides
|
3
|
+
//
|
4
|
+
// stylelint-disable selector-no-type, selector-max-type
|
5
|
+
|
6
|
+
* {
|
7
|
+
box-sizing: border-box;
|
8
|
+
}
|
9
|
+
|
10
|
+
::selection {
|
11
|
+
color: $grey-dk-100;
|
12
|
+
background: #E6E09E;
|
13
|
+
}
|
14
|
+
|
15
|
+
html {
|
16
|
+
@include fs-4;
|
17
|
+
scroll-behavior: smooth;
|
18
|
+
}
|
19
|
+
|
20
|
+
body {
|
21
|
+
font-family: $body-font-family;
|
22
|
+
font-size: inherit;
|
23
|
+
line-height: $body-line-height;
|
24
|
+
color: $body-text-color;
|
25
|
+
background-color: $body-background-color;
|
26
|
+
}
|
27
|
+
|
28
|
+
ol,
|
29
|
+
ul,
|
30
|
+
dl,
|
31
|
+
pre,
|
32
|
+
address,
|
33
|
+
blockquote,
|
34
|
+
table,
|
35
|
+
div,
|
36
|
+
hr,
|
37
|
+
form,
|
38
|
+
fieldset,
|
39
|
+
noscript .table-wrapper {
|
40
|
+
margin-top: 0;
|
41
|
+
}
|
42
|
+
|
43
|
+
h1,
|
44
|
+
h2,
|
45
|
+
h3,
|
46
|
+
h4,
|
47
|
+
h5,
|
48
|
+
h6 {
|
49
|
+
margin-top: 0;
|
50
|
+
margin-bottom: 1em;
|
51
|
+
font-weight: 500;
|
52
|
+
line-height: $body-heading-line-height;
|
53
|
+
color: $body-heading-color;
|
54
|
+
}
|
55
|
+
|
56
|
+
p {
|
57
|
+
margin-top: 1em;
|
58
|
+
margin-bottom: 1em;
|
59
|
+
}
|
60
|
+
|
61
|
+
a {
|
62
|
+
color: $link-color;
|
63
|
+
text-decoration: none;
|
64
|
+
}
|
65
|
+
|
66
|
+
a:not([class]) {
|
67
|
+
text-decoration: none;
|
68
|
+
background-image: linear-gradient($border-color 0%, $border-color 100%);
|
69
|
+
background-repeat: repeat-x;
|
70
|
+
background-position: 0 100%;
|
71
|
+
background-size: 1px 1px;
|
72
|
+
|
73
|
+
&:hover {
|
74
|
+
background-image: linear-gradient(
|
75
|
+
rgba($link-color, 0.45) 0%,
|
76
|
+
rgba($link-color, 0.45) 100%
|
77
|
+
);
|
78
|
+
background-size: 1px 1px;
|
79
|
+
}
|
80
|
+
}
|
81
|
+
|
82
|
+
code {
|
83
|
+
font-family: $mono-font-family;
|
84
|
+
font-size: 0.75em;
|
85
|
+
line-height: $body-line-height;
|
86
|
+
}
|
87
|
+
|
88
|
+
figure,
|
89
|
+
pre {
|
90
|
+
margin: 0;
|
91
|
+
}
|
92
|
+
|
93
|
+
li {
|
94
|
+
margin: 0.25em 0;
|
95
|
+
}
|
96
|
+
|
97
|
+
img {
|
98
|
+
max-width: 100%;
|
99
|
+
height: auto;
|
100
|
+
}
|
101
|
+
|
102
|
+
hr {
|
103
|
+
height: 1px;
|
104
|
+
padding: 0;
|
105
|
+
margin: $sp-6 0;
|
106
|
+
background-color: $border-color;
|
107
|
+
border: 0;
|
108
|
+
}
|
109
|
+
|
110
|
+
// wiki-link classes
|
111
|
+
|
112
|
+
.invalid-wiki-link {
|
113
|
+
color: $grey-dk-000;
|
114
|
+
background: $invalid-wiki-link-color;
|
115
|
+
cursor: help;
|
116
|
+
}
|
117
|
+
|
118
|
+
.wiki-link {
|
119
|
+
color: $wiki-link-color;
|
120
|
+
}
|
121
|
+
|
122
|
+
.wiki-link-embed {
|
123
|
+
position: relative;
|
124
|
+
border: 1px solid $separator-color;
|
125
|
+
border-radius: 15px;
|
126
|
+
padding: $sp-3;
|
127
|
+
|
128
|
+
.wiki-link-embed-title {
|
129
|
+
@include fs-6;
|
130
|
+
padding-top: $sp-3;
|
131
|
+
padding-left: $sp-3;
|
132
|
+
}
|
133
|
+
|
134
|
+
.wiki-link-embed-content {
|
135
|
+
padding: $sp-3;
|
136
|
+
}
|
137
|
+
|
138
|
+
.wiki-link-embed-link {
|
139
|
+
position: absolute;
|
140
|
+
top: 1em;
|
141
|
+
right: 1em;
|
142
|
+
|
143
|
+
&::before {
|
144
|
+
content: "🥾";
|
145
|
+
}
|
146
|
+
|
147
|
+
&:hover {
|
148
|
+
filter: drop-shadow(0 0 0.8mm $drop-shadow-brown);
|
149
|
+
}
|
150
|
+
}
|
151
|
+
}
|
152
|
+
|
153
|
+
.wiki-link-img {
|
154
|
+
width: 50px;
|
155
|
+
height: 50px;
|
156
|
+
}
|
157
|
+
|
158
|
+
.sem-tag {
|
159
|
+
@include fs-2;
|
160
|
+
padding: $sp-2;
|
161
|
+
border: 1px solid $separator-color;
|
162
|
+
border-radius: 15px;
|
163
|
+
color: $wiki-link-color;
|
164
|
+
|
165
|
+
&:hover {
|
166
|
+
background-color: $base-button-color;
|
167
|
+
}
|
168
|
+
}
|
169
|
+
|
170
|
+
.stat-tag {
|
171
|
+
filter: drop-shadow(0 0 0.2mm $drop-shadow-green);
|
172
|
+
}
|
173
|
+
|
174
|
+
.infobox {
|
175
|
+
@include fs-2;
|
176
|
+
float: right;
|
177
|
+
margin-left: $sp-2;
|
178
|
+
margin-right: $sp-2;
|
179
|
+
padding-left: $sp-3;
|
180
|
+
padding-right: $sp-3;
|
181
|
+
padding-top: $sp-3;
|
182
|
+
border: 1px solid $separator-color;
|
183
|
+
border-radius: 15px;
|
184
|
+
|
185
|
+
.title {
|
186
|
+
text-align: center;
|
187
|
+
margin-top: 0;
|
188
|
+
}
|
189
|
+
|
190
|
+
ul {
|
191
|
+
padding: 0 !important;
|
192
|
+
padding-left: $sp-2 !important;
|
193
|
+
padding-right: $sp-2 !important;
|
194
|
+
|
195
|
+
li {
|
196
|
+
list-style-type: none !important;
|
197
|
+
|
198
|
+
&::before {
|
199
|
+
content: "" !important;
|
200
|
+
}
|
201
|
+
}
|
202
|
+
}
|
203
|
+
}
|