jekyll-bonsai 0.0.3
Sign up to get free protection for your applications and to get access to all the features.
- 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
|
+
}
|