databook-theme 0.1.1
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +7 -0
- data/LICENSE.txt +21 -0
- data/README.MD +1 -0
- data/_includes/blog/blog.liquid +50 -0
- data/_includes/blog/features.liquid +36 -0
- data/_includes/blog/full.liquid +3 -0
- data/_includes/blog/list.liquid +41 -0
- data/_includes/blog/post.liquid +6 -0
- data/_includes/components/analytics.google.liquid +11 -0
- data/_includes/components/analytics.liquid +11 -0
- data/_includes/components/comments.disqus.liquid +17 -0
- data/_includes/components/comments.gitalk.liquid +22 -0
- data/_includes/components/comments.liquid +13 -0
- data/_includes/components/navmenu.items.liquid +51 -0
- data/_includes/components/navmenu.liquid +4 -0
- data/_includes/components/pagination.liquid +83 -0
- data/_includes/components/prevnext.liquid +1 -0
- data/_includes/components/search.baidu.liquid +7 -0
- data/_includes/components/search.bing.liquid +6 -0
- data/_includes/components/search.google.liquid +6 -0
- data/_includes/components/search.liquid +21 -0
- data/_includes/components/social_button.liquid +9 -0
- data/_includes/components/social_link.liquid +14 -0
- data/_includes/components/title.liquid +41 -0
- data/_includes/components/toc.liquid +28 -0
- data/_includes/custom/analytics.liquid +3 -0
- data/_includes/custom/blog.liquid +3 -0
- data/_includes/custom/body.liquid +3 -0
- data/_includes/custom/comments.liquid +3 -0
- data/_includes/custom/footer.liquid +3 -0
- data/_includes/custom/head.liquid +3 -0
- data/_includes/custom/katex.liquid +15 -0
- data/_includes/custom/mathjax.liquid +19 -0
- data/_includes/custom/search.liquid +3 -0
- data/_includes/extensions/toc.liquid +182 -0
- data/_includes/functions/get_config.liquid +11 -0
- data/_includes/functions/get_config_data.liquid +23 -0
- data/_includes/functions/get_icon.liquid +5 -0
- data/_includes/functions/get_page_meta.liquid +60 -0
- data/_includes/functions/get_page_thumbnail.liquid +23 -0
- data/_includes/functions/get_page_title.liquid +7 -0
- data/_includes/functions/get_recent_posts.liquid +17 -0
- data/_includes/functions/get_taxonomy_link.liquid +9 -0
- data/_includes/head/head.liquid +12 -0
- data/_includes/head/meta.liquid +41 -0
- data/_includes/head/opengraph.liquid +1 -0
- data/_includes/head/requirements.liquid +87 -0
- data/_includes/head/styles.liquid +10 -0
- data/_includes/js/codes.js +116 -0
- data/_includes/js/scrollspy.js +16 -0
- data/_includes/layout/article.liquid +71 -0
- data/_includes/layout/footer.liquid +53 -0
- data/_includes/layout/header.liquid +31 -0
- data/_includes/layout/hero.liquid +29 -0
- data/_includes/layout/page.liquid +33 -0
- data/_includes/layout/pagehead.liquid +17 -0
- data/_includes/layout/sidebar.liquid +178 -0
- data/_includes/localize +29 -0
- data/_includes/notice +6 -0
- data/_includes/version +1 -0
- data/_layouts/article.liquid +10 -0
- data/_layouts/default.liquid +131 -0
- data/_layouts/home.liquid +20 -0
- data/_layouts/page.liquid +9 -0
- data/_layouts/post.liquid +9 -0
- data/_layouts/system.liquid +35 -0
- data/_layouts/taxonomy.liquid +67 -0
- data/_sass/_custom.scss +0 -0
- data/_sass/_databook.scss +42 -0
- data/_sass/_debug.scss +7 -0
- data/_sass/_variables.scss +24 -0
- data/_sass/base/_misc.scss +0 -0
- data/_sass/base/_mixins.scss +32 -0
- data/_sass/base/_normalize.scss +45 -0
- data/_sass/base/_responsive.scss +28 -0
- data/_sass/components/_archive.scss +49 -0
- data/_sass/components/_blog.scss +249 -0
- data/_sass/components/_forms.scss +30 -0
- data/_sass/components/_hero.scss +70 -0
- data/_sass/components/_misc.scss +3 -0
- data/_sass/components/_notice.scss +27 -0
- data/_sass/components/_notification.scss +10 -0
- data/_sass/components/_post.scss +19 -0
- data/_sass/components/_sidebar.scss +303 -0
- data/_sass/components/_tabs.scss +67 -0
- data/_sass/components/_text.scss +27 -0
- data/_sass/components/_toc.scss +50 -0
- data/_sass/layout/_article.scss +211 -0
- data/_sass/layout/_body.scss +26 -0
- data/_sass/layout/_footer.scss +76 -0
- data/_sass/layout/_header.scss +124 -0
- data/_sass/layout/_main.scss +8 -0
- data/_sass/layout/_misc.scss +7 -0
- data/_sass/layout/_navbar.scss +323 -0
- data/_sass/layout/_sidebar.scss +115 -0
- data/_sass/layout/_wrapper.scss +7 -0
- data/_sass/theme/_scheme.scss +112 -0
- data/_sass/typography/_article.scss +49 -0
- data/_sass/typography/_doc.scss +104 -0
- data/_sass/typography/_highlight.scss +208 -0
- data/_sass/typography/_markdown.scss +18 -0
- data/_sass/typography/_table.scss +119 -0
- data/_sass/typography/_typography.scss +108 -0
- data/_sass/utilities/_thinscrollbar.scss +35 -0
- data/assets/databook/css/databook.scss +6 -0
- data/assets/databook/img/avatar.png +0 -0
- data/assets/databook/img/logo.png +0 -0
- data/assets/databook/js/databook.js +8 -0
- data/assets/databook/js/search.js +47 -0
- data/assets/databook/version.json +9 -0
- data/assets/favicon.ico +0 -0
- data/assets/search.json +30 -0
- metadata +224 -0
@@ -0,0 +1,182 @@
|
|
1
|
+
{% capture tocWorkspace %}
|
2
|
+
{% comment %}
|
3
|
+
Copyright (c) 2017 Vladimir "allejo" Jimenez
|
4
|
+
|
5
|
+
Permission is hereby granted, free of charge, to any person
|
6
|
+
obtaining a copy of this software and associated documentation
|
7
|
+
files (the "Software"), to deal in the Software without
|
8
|
+
restriction, including without limitation the rights to use,
|
9
|
+
copy, modify, merge, publish, distribute, sublicense, and/or sell
|
10
|
+
copies of the Software, and to permit persons to whom the
|
11
|
+
Software is furnished to do so, subject to the following
|
12
|
+
conditions:
|
13
|
+
|
14
|
+
The above copyright notice and this permission notice shall be
|
15
|
+
included in all copies or substantial portions of the Software.
|
16
|
+
|
17
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
18
|
+
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
|
19
|
+
OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
20
|
+
NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
|
21
|
+
HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
|
22
|
+
WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
|
23
|
+
FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
|
24
|
+
OTHER DEALINGS IN THE SOFTWARE.
|
25
|
+
{% endcomment %}
|
26
|
+
{% comment %}
|
27
|
+
Version 1.1.0
|
28
|
+
https://github.com/allejo/jekyll-toc
|
29
|
+
|
30
|
+
"...like all things liquid - where there's a will, and ~36 hours to spare, there's usually a/some way" ~jaybe
|
31
|
+
|
32
|
+
Usage:
|
33
|
+
{% include toc.html html=content sanitize=true class="inline_toc" id="my_toc" h_min=2 h_max=3 %}
|
34
|
+
|
35
|
+
Parameters:
|
36
|
+
* html (string) - the HTML of compiled markdown generated by kramdown in Jekyll
|
37
|
+
|
38
|
+
Optional Parameters:
|
39
|
+
* sanitize (bool) : false - when set to true, the headers will be stripped of any HTML in the TOC
|
40
|
+
* class (string) : '' - a CSS class assigned to the TOC
|
41
|
+
* id (string) : '' - an ID to assigned to the TOC
|
42
|
+
* h_min (int) : 1 - the minimum TOC header level to use; any header lower than this value will be ignored
|
43
|
+
* h_max (int) : 6 - the maximum TOC header level to use; any header greater than this value will be ignored
|
44
|
+
* ordered (bool) : false - when set to true, an ordered list will be outputted instead of an unordered list
|
45
|
+
* item_class (string) : '' - add custom class(es) for each list item; has support for '%level%' placeholder, which is the current heading level
|
46
|
+
* submenu_class (string) : '' - add custom class(es) for each child group of headings; has support for '%level%' placeholder which is the current "submenu" heading level
|
47
|
+
* base_url (string) : '' - add a base url to the TOC links for when your TOC is on another page than the actual content
|
48
|
+
* anchor_class (string) : '' - add custom class(es) for each anchor element
|
49
|
+
* skip_no_ids (bool) : false - skip headers that do not have an `id` attribute
|
50
|
+
|
51
|
+
Output:
|
52
|
+
An ordered or unordered list representing the table of contents of a markdown block. This snippet will only
|
53
|
+
generate the table of contents and will NOT output the markdown given to it
|
54
|
+
{% endcomment %}
|
55
|
+
|
56
|
+
{% capture newline %}
|
57
|
+
{% endcapture %}
|
58
|
+
{% assign newline = newline | rstrip %} <!-- Remove the extra spacing but preserve the newline -->
|
59
|
+
|
60
|
+
{% capture deprecation_warnings %}{% endcapture %}
|
61
|
+
|
62
|
+
{% if include.baseurl %}
|
63
|
+
{% capture deprecation_warnings %}{{ deprecation_warnings }}<!-- jekyll-toc :: "baseurl" has been deprecated, use "base_url" instead -->{{ newline }}{% endcapture %}
|
64
|
+
{% endif %}
|
65
|
+
|
66
|
+
{% if include.skipNoIDs %}
|
67
|
+
{% capture deprecation_warnings %}{{ deprecation_warnings }}<!-- jekyll-toc :: "skipNoIDs" has been deprecated, use "skip_no_ids" instead -->{{ newline }}{% endcapture %}
|
68
|
+
{% endif %}
|
69
|
+
|
70
|
+
{% capture jekyll_toc %}{% endcapture %}
|
71
|
+
{% assign orderedList = include.ordered | default: false %}
|
72
|
+
{% assign baseURL = include.base_url | default: include.baseurl | default: '' %}
|
73
|
+
{% assign skipNoIDs = include.skip_no_ids | default: include.skipNoIDs | default: false %}
|
74
|
+
{% assign minHeader = include.h_min | default: 1 %}
|
75
|
+
{% assign maxHeader = include.h_max | default: 6 %}
|
76
|
+
{% assign nodes = include.html | strip | split: '<h' %}
|
77
|
+
|
78
|
+
{% assign firstHeader = true %}
|
79
|
+
{% assign currLevel = 0 %}
|
80
|
+
{% assign lastLevel = 0 %}
|
81
|
+
|
82
|
+
{% capture listModifier %}{% if orderedList %}ol{% else %}ul{% endif %}{% endcapture %}
|
83
|
+
|
84
|
+
{% for node in nodes %}
|
85
|
+
{% if node == "" %}
|
86
|
+
{% continue %}
|
87
|
+
{% endif %}
|
88
|
+
|
89
|
+
{% assign currLevel = node | replace: '"', '' | slice: 0, 1 | times: 1 %}
|
90
|
+
|
91
|
+
{% if currLevel < minHeader or currLevel > maxHeader %}
|
92
|
+
{% continue %}
|
93
|
+
{% endif %}
|
94
|
+
|
95
|
+
{% assign _workspace = node | split: '</h' %}
|
96
|
+
|
97
|
+
{% assign _idWorkspace = _workspace[0] | split: 'id="' %}
|
98
|
+
{% assign _idWorkspace = _idWorkspace[1] | split: '"' %}
|
99
|
+
{% assign htmlID = _idWorkspace[0] %}
|
100
|
+
|
101
|
+
{% assign _classWorkspace = _workspace[0] | split: 'class="' %}
|
102
|
+
{% assign _classWorkspace = _classWorkspace[1] | split: '"' %}
|
103
|
+
{% assign htmlClass = _classWorkspace[0] %}
|
104
|
+
|
105
|
+
{% if htmlClass contains "no_toc" %}
|
106
|
+
{% continue %}
|
107
|
+
{% endif %}
|
108
|
+
|
109
|
+
{% if firstHeader %}
|
110
|
+
{% assign minHeader = currLevel %}
|
111
|
+
{% endif %}
|
112
|
+
|
113
|
+
{% capture _hAttrToStrip %}{{ _workspace[0] | split: '>' | first }}>{% endcapture %}
|
114
|
+
{% assign header = _workspace[0] | replace: _hAttrToStrip, '' %}
|
115
|
+
|
116
|
+
{% if include.item_class and include.item_class != blank %}
|
117
|
+
{% capture listItemClass %} class="{{ include.item_class | replace: '%level%', currLevel | split: '.' | join: ' ' }}"{% endcapture %}
|
118
|
+
{% endif %}
|
119
|
+
|
120
|
+
{% if include.submenu_class and include.submenu_class != blank %}
|
121
|
+
{% assign subMenuLevel = currLevel | minus: 1 %}
|
122
|
+
{% capture subMenuClass %} class="{{ include.submenu_class | replace: '%level%', subMenuLevel | split: '.' | join: ' ' }}"{% endcapture %}
|
123
|
+
{% endif %}
|
124
|
+
|
125
|
+
{% capture anchorBody %}{% if include.sanitize %}{{ header | strip_html }}{% else %}{{ header }}{% endif %}{% endcapture %}
|
126
|
+
|
127
|
+
{% if htmlID %}
|
128
|
+
{% capture anchorAttributes %} href="{% if baseURL %}{{ baseURL }}{% endif %}#{{ htmlID }}"{% endcapture %}
|
129
|
+
|
130
|
+
{% if include.anchor_class %}
|
131
|
+
{% capture anchorAttributes %}{{ anchorAttributes }} class="{{ include.anchor_class | split: '.' | join: ' ' }}"{% endcapture %}
|
132
|
+
{% endif %}
|
133
|
+
|
134
|
+
{% capture listItem %}<a{{ anchorAttributes }}>{{ anchorBody }}</a>{% endcapture %}
|
135
|
+
{% elsif skipNoIDs == true %}
|
136
|
+
{% continue %}
|
137
|
+
{% else %}
|
138
|
+
{% capture listItem %}{{ anchorBody }}{% endcapture %}
|
139
|
+
{% endif %}
|
140
|
+
|
141
|
+
{% if currLevel > lastLevel %}
|
142
|
+
{% capture jekyll_toc %}{{ jekyll_toc }}<{{ listModifier }}{{ subMenuClass }}>{% endcapture %}
|
143
|
+
{% elsif currLevel < lastLevel %}
|
144
|
+
{% assign repeatCount = lastLevel | minus: currLevel %}
|
145
|
+
|
146
|
+
{% for i in (1..repeatCount) %}
|
147
|
+
{% capture jekyll_toc %}{{ jekyll_toc }}</li></{{ listModifier }}>{% endcapture %}
|
148
|
+
{% endfor %}
|
149
|
+
|
150
|
+
{% capture jekyll_toc %}{{ jekyll_toc }}</li>{% endcapture %}
|
151
|
+
{% else %}
|
152
|
+
{% capture jekyll_toc %}{{ jekyll_toc }}</li>{% endcapture %}
|
153
|
+
{% endif %}
|
154
|
+
|
155
|
+
{% capture jekyll_toc %}{{ jekyll_toc }}<li{{ listItemClass }}>{{ listItem }}{% endcapture %}
|
156
|
+
|
157
|
+
{% assign lastLevel = currLevel %}
|
158
|
+
{% assign firstHeader = false %}
|
159
|
+
{% endfor %}
|
160
|
+
|
161
|
+
{% assign repeatCount = minHeader | minus: 1 %}
|
162
|
+
{% assign repeatCount = lastLevel | minus: repeatCount %}
|
163
|
+
{% for i in (1..repeatCount) %}
|
164
|
+
{% capture jekyll_toc %}{{ jekyll_toc }}</li></{{ listModifier }}>{% endcapture %}
|
165
|
+
{% endfor %}
|
166
|
+
|
167
|
+
{% if jekyll_toc != '' %}
|
168
|
+
{% assign rootAttributes = '' %}
|
169
|
+
{% if include.class and include.class != blank %}
|
170
|
+
{% capture rootAttributes %} class="{{ include.class | split: '.' | join: ' ' }}"{% endcapture %}
|
171
|
+
{% endif %}
|
172
|
+
|
173
|
+
{% if include.id and include.id != blank %}
|
174
|
+
{% capture rootAttributes %}{{ rootAttributes }} id="{{ include.id }}"{% endcapture %}
|
175
|
+
{% endif %}
|
176
|
+
|
177
|
+
{% if rootAttributes %}
|
178
|
+
{% assign nodes = jekyll_toc | split: '>' %}
|
179
|
+
{% capture jekyll_toc %}<{{ listModifier }}{{ rootAttributes }}>{{ nodes | shift | join: '>' }}>{% endcapture %}
|
180
|
+
{% endif %}
|
181
|
+
{% endif %}
|
182
|
+
{% endcapture %}{% assign tocWorkspace = '' %}{{ deprecation_warnings }}{{ jekyll_toc }}
|
@@ -0,0 +1,11 @@
|
|
1
|
+
{%- assign return = include.default -%}
|
2
|
+
|
3
|
+
{%- assign key = include.key -%}
|
4
|
+
|
5
|
+
{%- if page[key] != nil -%}
|
6
|
+
{%- assign return = page[key] -%}
|
7
|
+
{%- elsif layout[key] != nil -%}
|
8
|
+
{%- assign return = layout[key] -%}
|
9
|
+
{%- elsif site[key] != nil -%}
|
10
|
+
{%- assign return = site[key] -%}
|
11
|
+
{%- endif -%}
|
@@ -0,0 +1,23 @@
|
|
1
|
+
{%- assign return = nil -%}
|
2
|
+
{%- assign key = include.key -%}
|
3
|
+
{%- assign key_id = key | append: "_id" -%}
|
4
|
+
|
5
|
+
{%- if page[key].first -%}
|
6
|
+
{%- assign return = page[key] -%}
|
7
|
+
{%- elsif page[key] == false -%}
|
8
|
+
{%- elsif page[key_id] != nil -%}
|
9
|
+
{%- assign id = page[key_id] -%}
|
10
|
+
{%- assign return = site.data[id] -%}
|
11
|
+
{%- elsif layout[key].first -%}
|
12
|
+
{%- assign return = layout[key] -%}
|
13
|
+
{%- elsif layout[key] == false -%}
|
14
|
+
{%- elsif layout[key_id] != nil -%}
|
15
|
+
{%- assign id = layout[key_id] -%}
|
16
|
+
{%- assign return = site.data[id] -%}
|
17
|
+
{%- elsif site[key].first -%}
|
18
|
+
{%- assign return = site.sidebar -%}
|
19
|
+
{%- elsif site[key] == false -%}
|
20
|
+
{%- elsif site[key_id] != nil -%}
|
21
|
+
{%- assign id = site[key_id] -%}
|
22
|
+
{%- assign return = site.data[id] -%}
|
23
|
+
{%- endif -%}
|
@@ -0,0 +1,60 @@
|
|
1
|
+
{%- assign pageitem = include.page | default: page -%}
|
2
|
+
|
3
|
+
{%- if pageitem.date -%}
|
4
|
+
{%- assign year1 = site.time | date: "%Y" -%}
|
5
|
+
{%- assign year2 = pageitem.date | date: "%Y" -%}
|
6
|
+
{%- if year1 == year2 or include.short_date -%}
|
7
|
+
{%- capture date_format -%}{%- include localize key="date_format_short" default="%b %d %H:%M" -%}{%- endcapture -%}
|
8
|
+
{%- else -%}
|
9
|
+
{%- capture date_format -%}{%- include localize key="date_format_long" default="%b %d, %Y %H:%M" -%}{%- endcapture -%}
|
10
|
+
{%- endif -%}
|
11
|
+
{%- endif -%}
|
12
|
+
|
13
|
+
<div class="c-meta">
|
14
|
+
{%- if pageitem.date -%}
|
15
|
+
<time class="c-meta__item c-meta__item--time" datetime="{{- pageitem.date | date_to_xmlschema -}}">
|
16
|
+
{{- pageitem.date | date: date_format -}}
|
17
|
+
</time>
|
18
|
+
{%- endif -%}
|
19
|
+
|
20
|
+
{%- if include.authors and pageitem.author -%}
|
21
|
+
<span class="c-meta__item c-meta__item--author">{{- pageitem.author -}}</span>
|
22
|
+
{%- endif -%}
|
23
|
+
|
24
|
+
{%- if include.categories and pageitem.categories and pageitem.categories.size > 0 -%}
|
25
|
+
<span class="c-meta__item c-meta__item--categories">
|
26
|
+
{%- for category in pageitem.categories -%}
|
27
|
+
<a href="{%- include functions/get_taxonomy_link.liquid category=category -%}">{{- category -}}</a>
|
28
|
+
{%- endfor -%}
|
29
|
+
</span>
|
30
|
+
{%- endif -%}
|
31
|
+
|
32
|
+
{%- if include.tags and pageitem.tags and pageitem.tags.size > 0 -%}
|
33
|
+
<span class="c-meta__item c-meta__item--tags">
|
34
|
+
{%- for tag in pageitem.tags -%}
|
35
|
+
<a href="{%- include functions/get_taxonomy_link.liquid tag=tag -%}">{{- tag -}}</a>
|
36
|
+
{%- endfor -%}
|
37
|
+
</span>
|
38
|
+
{%- endif -%}
|
39
|
+
|
40
|
+
{%- if include.details -%}
|
41
|
+
{%- if site.source_link and site.github -%}
|
42
|
+
<span class="c-meta__item c-meta__item--source">
|
43
|
+
<a href="{{- site.github.repository_url -}}/blob/{{- site.github.source.branch -}}/{{- pageitem.path -}}" target="_blank">Source</a>
|
44
|
+
</span>
|
45
|
+
{%- endif -%}
|
46
|
+
|
47
|
+
{%- if pageitem.sticky -%}
|
48
|
+
<span class="c-meta__item c-meta__item--sticky">
|
49
|
+
{%- include localize key="tag_sticky" default="Sticky" -%}
|
50
|
+
</span>
|
51
|
+
{%- endif -%}
|
52
|
+
|
53
|
+
{%- if pageitem.featured -%}
|
54
|
+
<span class="c-meta__item c-meta__item--featured">
|
55
|
+
{%- include localize key="tag_featured" default="Featured" -%}
|
56
|
+
</span>
|
57
|
+
{%- endif -%}
|
58
|
+
{%- endif -%}
|
59
|
+
|
60
|
+
</div>
|
@@ -0,0 +1,23 @@
|
|
1
|
+
{%- assign pageitem = include.page | default: page -%}
|
2
|
+
{%- assign thumbnail_src = pageitem.thumbnail -%}
|
3
|
+
|
4
|
+
{%- if thumbnail_src == nil and include.autodetect -%}
|
5
|
+
{%- assign html = include.html -%}
|
6
|
+
{%- unless html -%}
|
7
|
+
{%- assign html = pageitem.content | markdownify -%}
|
8
|
+
{%- endunless -%}
|
9
|
+
|
10
|
+
{%- assign slices = html | split:"<img " -%}
|
11
|
+
{%- if slices.size > 1 -%}
|
12
|
+
{%- assign attrs = slices[1] | split: ">" | first | replace: "'", '"' -%}
|
13
|
+
{%- assign slices = attrs | split: 'src="' -%}
|
14
|
+
{%- assign thumbnail_src = slices[1] | split: '"' | first -%}
|
15
|
+
{%- endif -%}
|
16
|
+
|
17
|
+
{%- if thumbnail_src.size == 0 and site.thumbnail_placeholder -%}
|
18
|
+
{%- assign thumbnail_src = site.thumbnail_placeholder -%}
|
19
|
+
{%- endif -%}
|
20
|
+
|
21
|
+
{%- endif -%}
|
22
|
+
|
23
|
+
{{- thumbnail_src -}}
|
@@ -0,0 +1,17 @@
|
|
1
|
+
{%- assign posts = site.posts | sort: "date" -%}
|
2
|
+
|
3
|
+
{%- if include.sticky -%}
|
4
|
+
{%- assign sticky_posts = posts | where_exp: "item", "item.sticky == true" -%}
|
5
|
+
{%- assign normal_posts = posts | where_exp: "item", "item.sticky != true" -%}
|
6
|
+
{%- assign posts = sticky_posts | concat: normal_posts -%}
|
7
|
+
{%- elsif include.featured -%}
|
8
|
+
{%- assign featured_posts = posts | where_exp: "item", "item.featured == true" -%}
|
9
|
+
{%- assign normal_posts = posts | where_exp: "item", "item.featured != true" -%}
|
10
|
+
{%- assign posts = featured_posts | concat: normal_posts -%}
|
11
|
+
{%- endif -%}
|
12
|
+
|
13
|
+
{%- if include.count -%}
|
14
|
+
{%- assign posts = posts | slice: 0, include.count -%}
|
15
|
+
{%- endif -%}
|
16
|
+
|
17
|
+
{%- assign return = posts -%}
|
@@ -0,0 +1,9 @@
|
|
1
|
+
{%- if include.tag -%}
|
2
|
+
/tags/#!/{{- include.tag | url_encode -}}
|
3
|
+
{%- elsif include.category -%}
|
4
|
+
/categories/#!/{{- include.category | url_encode -}}
|
5
|
+
{%- elsif include.archive -%}
|
6
|
+
/archive/#!/{{- include.archive | url_encode -}}
|
7
|
+
{%- elsif include.author -%}
|
8
|
+
/authors/#!/{{- include.author | url_encode -}}
|
9
|
+
{%- endif -%}
|
@@ -0,0 +1,12 @@
|
|
1
|
+
<head>
|
2
|
+
{% include head/meta.liquid %}
|
3
|
+
{% include head/opengraph.liquid %}
|
4
|
+
{% include head/requirements.liquid %}
|
5
|
+
{% include head/styles.liquid %}
|
6
|
+
|
7
|
+
{%- if jekyll.environment == "production" -%}
|
8
|
+
{%- include components/analytics.liquid -%}
|
9
|
+
{%- endif %}
|
10
|
+
|
11
|
+
{% include custom/head.liquid %}
|
12
|
+
</head>
|
@@ -0,0 +1,41 @@
|
|
1
|
+
{%- assign robots = "index,follow" -%}
|
2
|
+
{%- if site.disallow_robots -%}
|
3
|
+
{%- assign robots = "noindex,nofollow" -%}
|
4
|
+
{%- endif -%}
|
5
|
+
|
6
|
+
{%- assign title_separator = site.title_separator | default: "-" -%}
|
7
|
+
{%- capture page_title -%}{%- include functions/get_page_title.liquid -%}{%- endcapture -%}
|
8
|
+
{%- assign html_title = page_title -%}
|
9
|
+
{%- if page.title -%}
|
10
|
+
{%- assign html_title = html_title | append: " " | append: title_separator | append: " " -%}
|
11
|
+
{%- endif -%}
|
12
|
+
{%- assign html_title = html_title | append: site.title -%}
|
13
|
+
|
14
|
+
|
15
|
+
<meta charset="{{- site.encoding | default: 'utf-8' -}}">
|
16
|
+
<meta http-equiv="X-UA-Compatible" content="IE=edge">
|
17
|
+
<meta name="viewport" content="width=device-width, initial-scale=1">
|
18
|
+
<meta name="robots" content="{{- robots -}}">
|
19
|
+
{%- if site.keywords -%}<meta name="keywords" content="{{- site.keywords -}}">{%- endif -%}
|
20
|
+
{%- if site.baseurl -%}<base href="{{- site.baseurl -}}">{%- endif -%}
|
21
|
+
<link rel="icon" type="image/x-icon" href="{{- site.favicon | default:'/assets/favicon.ico' -}}">
|
22
|
+
|
23
|
+
<title>{{- html_title -}}</title>
|
24
|
+
|
25
|
+
<script type="text/javascript" >
|
26
|
+
window.databookConfig = {
|
27
|
+
siteTitle: "{{- site.title -}}",
|
28
|
+
siteBaseurl: "{{- site.baseurl -}}",
|
29
|
+
siteUrl: "{{- site.url -}}",
|
30
|
+
titleSeparater: "{{- site.title_separator -}}",
|
31
|
+
generatedDate: "{{- site.time | date_to_xmlschema -}}",
|
32
|
+
pageTitle: "{{- page_title -}}",
|
33
|
+
pageLayout: "{{- page.layout -}}",
|
34
|
+
{%- if page.scrollspy or layout.scrollspy or site.scrollspy -%}scrollspy: true,{%- endif -%}
|
35
|
+
{%- if page.chartjs or layout.chartjs or site.chartjs -%}chartjs: true,{%- endif -%}
|
36
|
+
{%- if page.mathjax or layout.mathjax or site.mathjax -%}mathjax: true,{%- endif -%}
|
37
|
+
{%- if page.mermaid or layout.mermaid or site.mermaid -%}mermaid: true,{%- endif -%}
|
38
|
+
{% if jekyll.environment == "development" %}debug: true,{% endif %}
|
39
|
+
};
|
40
|
+
document.querySelector('.js-disabled').classList.remove('js-disabled');
|
41
|
+
</script>
|
@@ -0,0 +1 @@
|
|
1
|
+
{%- comment -%}todo{%- endcomment -%}
|
@@ -0,0 +1,87 @@
|
|
1
|
+
{%- assign npm_cdn_key = ":npm_cdn/" -%}
|
2
|
+
{%- assign npm_cdn = site.npm_cdn | default: "https://cdn.jsdelivr.net/npm/"-%}
|
3
|
+
{%- assign last_char = npm_cdn | split: "" | last -%}
|
4
|
+
{%- if last_char != "/" -%}{%- assign npc_cdn = npm_cdn | append: "/" -%}{%- endif -%}
|
5
|
+
|
6
|
+
{%- assign github_cdn_key = ":github_cdn/" -%}
|
7
|
+
{%- assign github_cdn = site.github_cdn | default: "https://cdn.jsdelivr.net/gh/" -%}
|
8
|
+
{%- assign last_char = github_cdn | split: "" | last -%}
|
9
|
+
{%- if last_char != "/" -%}{%- assign github_cdn = github_cdn | append: "/" -%}{%- endif -%}
|
10
|
+
|
11
|
+
{%- assign js_list = "" | split: "" -%}
|
12
|
+
{%- assign mjs_list = "" | split: "" -%}
|
13
|
+
{%- assign css_list = "" | split: "" -%}
|
14
|
+
|
15
|
+
{%- assign js_list = js_list
|
16
|
+
| push: "/assets/databook/js/databook.js"
|
17
|
+
-%}
|
18
|
+
|
19
|
+
{%- assign mjs_list = mjs_list
|
20
|
+
-%}
|
21
|
+
|
22
|
+
{%- assign css_list = css_list
|
23
|
+
| push: "/assets/databook/css/databook.css"
|
24
|
+
| push: ":npm_cdn/@fortawesome/fontawesome-free/css/all.min.css"
|
25
|
+
-%}
|
26
|
+
|
27
|
+
{%- if page.chartjs or layout.chartjs or site.chartjs -%}
|
28
|
+
{%- assign js_list = js_list | push: ":npm_cdn/chart.js/dist/chart.min.js" -%}
|
29
|
+
{%- endif -%}
|
30
|
+
|
31
|
+
{%- if page.flowchart or layout.flowchart or site.flowchart -%}
|
32
|
+
{%- assign js_list = js_list | push: ":npm_cdn/raphael@2.3.0/raphael.min.js" -%}
|
33
|
+
{%- assign js_list = js_list | push: ":npm_cdn/flowchart.js@1.8.0/release/flowchart.min.js" -%}
|
34
|
+
{%- endif -%}
|
35
|
+
|
36
|
+
{%- if page.katex or layout.katex or site.katex -%}
|
37
|
+
{%- assign css_list = css_list | push: ":npm_cdn/katex/dist/katex.min.css" -%}
|
38
|
+
{%- assign js_list = js_list | push: ":npm_cdn/katex/dist/katex.min.js" -%}
|
39
|
+
{%- assign js_list = js_list | push: ":npm_cdn/katex/dist/contrib/auto-render.min.js" -%}
|
40
|
+
{%- include custom/katex.liquid -%}
|
41
|
+
{%- endif -%}
|
42
|
+
|
43
|
+
{%- if page.mathjax or layout.mathjax or site.mathjax -%}
|
44
|
+
{%- assign js_list = js_list | push: ":npm_cdn/mathjax/es5/tex-mml-chtml.js" -%}
|
45
|
+
{%- include custom/mathjax.liquid -%}
|
46
|
+
{%- endif -%}
|
47
|
+
|
48
|
+
{%- if page.mermaid or layout.mermaid or site.mermaid -%}
|
49
|
+
{%- assign js_list = js_list | push: ":npm_cdn/mermaid/dist/mermaid.min.js" -%}
|
50
|
+
{%- endif -%}
|
51
|
+
|
52
|
+
{%- if site.data.requirements.js -%}{%- assign js_list = js_list | concat: site.data.requirements.js -%}{%- endif -%}
|
53
|
+
{%- if site.data.requirements.modules -%}{%- assign mjs_list = mjs_list | concat: site.data.requirements.modules -%}{%- endif -%}
|
54
|
+
{%- if site.data.requirements.css -%}{%- assign css_list = css_list | concat: site.data.requirements.css -%}{%- endif -%}
|
55
|
+
|
56
|
+
{%- if site.requirements.js -%}{%- assign js_list = js_list | concat: site.requirements.js -%}{%- endif -%}
|
57
|
+
{%- if site.requirements.modules -%}{%- assign mjs_list = mjs_list | concat: site.requirements.modules -%}{%- endif -%}
|
58
|
+
{%- if site.requirements.css -%}{%- assign css_list = css_list | concat: site.requirements.css -%}{%- endif -%}
|
59
|
+
|
60
|
+
{%- if layout.requirements.js -%}{%- assign js_list = js_list | concat: layout.requirements.js -%}{%- endif -%}
|
61
|
+
{%- if layout.requirements.modules -%}{%- assign mjs_list = mjs_list | concat: layout.requirements.modules -%}{%- endif -%}
|
62
|
+
{%- if layout.requirements.css -%}{%- assign css_list = css_list | concat: layout.requirements.css -%}{%- endif -%}
|
63
|
+
|
64
|
+
{%- if page.requirements.js -%}{%- assign js_list = js_list | concat: page.requirements.js -%}{%- endif -%}
|
65
|
+
{%- if page.requirements.modules -%}{%- assign mjs_list = mjs_list | concat: page.requirements.modules -%}{%- endif -%}
|
66
|
+
{%- if page.requirements.css -%}{%- assign css_list = css_list | concat: page.requirements.css -%}{%- endif -%}
|
67
|
+
|
68
|
+
{%- if page.js -%}{%- assign js_list = js_list | concat: page.js -%}{%- endif -%}
|
69
|
+
{%- if page.modules -%}{%- assign mjs_list = mjs_list | concat: page.modules -%}{%- endif -%}
|
70
|
+
{%- if page.css -%}{%- assign css_list = css_list | concat: page.css -%}{%- endif -%}
|
71
|
+
|
72
|
+
{%- assign js_list = js_list | uniq -%}
|
73
|
+
{%- assign mjs_list = mjs_list | uniq -%}
|
74
|
+
{%- assign css_list = css_list | uniq -%}
|
75
|
+
|
76
|
+
|
77
|
+
{%- for url in css_list -%}
|
78
|
+
<link href="{{- url | replace: npm_cdn_key, npm_cdn | replace: github_cdn_key, github_cdn | relative_url -}}" type="text/css" rel="stylesheet">
|
79
|
+
{%- endfor -%}
|
80
|
+
|
81
|
+
{%- for url in js_list -%}
|
82
|
+
<script src="{{- url | replace: npm_cdn_key, npm_cdn | replace: github_cdn_key, github_cdn | relative_url -}}" type="text/javascript" defer></script>
|
83
|
+
{%- endfor -%}
|
84
|
+
|
85
|
+
{%- for url in mjs_list -%}
|
86
|
+
<script src="{{- url | replace: npm_cdn_key, npm_cdn | replace: github_cdn_key, github_cdn | relative_url -}}" type="module" ></script>
|
87
|
+
{%- endfor -%}
|
@@ -0,0 +1,10 @@
|
|
1
|
+
{%- assign accent_color_hue = page.accent_color_hue | default: layout.accent_color_hue | default: site.accent_color_hue | default: false -%}
|
2
|
+
{%- assign accent_color_saturation = page.accent_color_saturation | default: layout.accent_color_saturation | default: site.accent_color_saturation | default: false -%}
|
3
|
+
{%- if accent_color_hue or accent_color_saturation -%}
|
4
|
+
<style>
|
5
|
+
:root[data-accent-color="custom"] {
|
6
|
+
--db-accent-color-h: {{accent_color_hue|default:"220"}};
|
7
|
+
--db-accent-color-s: {{accent_color_saturation|default:"50%"}};
|
8
|
+
}
|
9
|
+
</style>
|
10
|
+
{%- endif -%}
|
@@ -0,0 +1,116 @@
|
|
1
|
+
{
|
2
|
+
function init() {
|
3
|
+
let items = [...document.querySelectorAll('pre')]
|
4
|
+
.filter(pre => {
|
5
|
+
return pre.childElementCount == 1
|
6
|
+
&& pre.children[0].tagName == 'CODE'
|
7
|
+
&& pre.children[0].childElementCount == 0;
|
8
|
+
})
|
9
|
+
.map((pre, index) => {
|
10
|
+
let name = pre.children[0].className.replace('language-', '');
|
11
|
+
let text = pre.children[0].textContent;
|
12
|
+
let newNode = document.createElement('div');
|
13
|
+
newNode.className = `js-code js-code--${name}`;
|
14
|
+
newNode.setAttribute('style', pre.getAttribute('style') || "");
|
15
|
+
pre.after(newNode);
|
16
|
+
return {
|
17
|
+
node: pre,
|
18
|
+
name,
|
19
|
+
text,
|
20
|
+
output: newNode,
|
21
|
+
id: `js-pre${index}`,
|
22
|
+
}
|
23
|
+
});
|
24
|
+
|
25
|
+
items.forEach(render);
|
26
|
+
|
27
|
+
if (items.some(x => x.success && x.name == 'mathjax')) {
|
28
|
+
MathJax.startup.document.clear();
|
29
|
+
MathJax.startup.document.updateDocument();
|
30
|
+
}
|
31
|
+
}
|
32
|
+
|
33
|
+
function render(item) {
|
34
|
+
if (item.name == 'chart' && typeof Chart !== 'undefined') {
|
35
|
+
renderChart(item);
|
36
|
+
} else if (item.name == 'flowchart' && typeof flowchart !== 'undefined') {
|
37
|
+
renderFlowchart(item);
|
38
|
+
} else if ((item.name == 'katex' || item.name == 'math') && typeof katex !== 'undefined') {
|
39
|
+
renderKatex(item);
|
40
|
+
} else if ((item.name == 'mathjax' || item.name == 'math') && typeof MathJax !== 'undefined') {
|
41
|
+
renderMathjax(item);
|
42
|
+
} else if (item.name == 'mermaid' && typeof mermaid !== 'undefined') {
|
43
|
+
renderMermaid(item);
|
44
|
+
}
|
45
|
+
|
46
|
+
if (item.error) {
|
47
|
+
item.output.innerHTML = `<p style="color:red;">Error: ${item.error}</p>`;
|
48
|
+
} else if (item.success) {
|
49
|
+
item.node.style.display = 'none';
|
50
|
+
}
|
51
|
+
}
|
52
|
+
|
53
|
+
|
54
|
+
function renderChart(item) {
|
55
|
+
let json;
|
56
|
+
try {
|
57
|
+
json = JSON.parse(item.text);
|
58
|
+
} catch (error) {
|
59
|
+
item.error = 'Invalid JSON syntax.';
|
60
|
+
return;
|
61
|
+
}
|
62
|
+
|
63
|
+
let canvas = document.createElement('canvas');
|
64
|
+
item.output.append(canvas);
|
65
|
+
try {
|
66
|
+
new Chart(canvas, json);
|
67
|
+
item.success = true;
|
68
|
+
} catch (error) {
|
69
|
+
item.error = 'Invalid Chart syntax.';
|
70
|
+
console.error(error);
|
71
|
+
}
|
72
|
+
}
|
73
|
+
|
74
|
+
function renderFlowchart(item) {
|
75
|
+
try {
|
76
|
+
let diagram = flowchart.parse(item.text);
|
77
|
+
diagram.drawSVG(item.output);
|
78
|
+
item.success = true;
|
79
|
+
} catch (error) {
|
80
|
+
item.error = 'Invalid flowchart syntax.';
|
81
|
+
console.error(error);
|
82
|
+
}
|
83
|
+
}
|
84
|
+
|
85
|
+
function renderKatex(item) {
|
86
|
+
try {
|
87
|
+
katex.render(item.text, item.output, { displayMode: true });
|
88
|
+
item.success = true;
|
89
|
+
} catch (error) {
|
90
|
+
item.error = 'Invalid Katex syntax.';
|
91
|
+
console.error(error);
|
92
|
+
}
|
93
|
+
}
|
94
|
+
|
95
|
+
function renderMathjax(item) {
|
96
|
+
try {
|
97
|
+
item.output.append(MathJax.tex2chtml(item.text));
|
98
|
+
item.success = true;
|
99
|
+
} catch (error) {
|
100
|
+
item.error = 'Invalid Mathjax syntax.';
|
101
|
+
console.error(error);
|
102
|
+
}
|
103
|
+
}
|
104
|
+
|
105
|
+
function renderMermaid(item) {
|
106
|
+
try {
|
107
|
+
item.output.innerHTML = mermaid.render(item.id, item.text);
|
108
|
+
item.success = true;
|
109
|
+
} catch (error) {
|
110
|
+
item.error = 'Invalid mermaid syntax.';
|
111
|
+
console.error(error);
|
112
|
+
}
|
113
|
+
}
|
114
|
+
|
115
|
+
window.addEventListener('load', init);
|
116
|
+
}
|
@@ -0,0 +1,16 @@
|
|
1
|
+
{
|
2
|
+
if (!!window.databookConfig?.scrollspy) {
|
3
|
+
window.addEventListener('load', () => {
|
4
|
+
let links = Array.from(document.querySelectorAll('.c-toc__link'));
|
5
|
+
let headers = links.map(x => decodeURI(x.href).split('#', 2)[1]).map(x => document.getElementById(x));
|
6
|
+
if (links.length <= 1) return;
|
7
|
+
window.onscroll = () => {
|
8
|
+
let scrollPosition = document.documentElement.scrollTop;
|
9
|
+
let offsets = headers.map(x => x.offsetTop);
|
10
|
+
offsets = offsets.map((x, i) => x - (x - ((i == 0) ? 0 : offsets[i - 1])) * .33);
|
11
|
+
let target = offsets.findIndex(x => x > scrollPosition);
|
12
|
+
links.forEach((link, i) => link.classList.toggle('is-active', i == target - 1));
|
13
|
+
};
|
14
|
+
});
|
15
|
+
}
|
16
|
+
}
|