klise 1.0.1
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +7 -0
- data/LICENSE +21 -0
- data/README.md +59 -0
- data/_includes/anchor_headings.html +105 -0
- data/_includes/author.html +9 -0
- data/_includes/comments.html +10 -0
- data/_includes/footer.html +38 -0
- data/_includes/header.html +164 -0
- data/_includes/navbar.html +211 -0
- data/_includes/navigation.html +16 -0
- data/_includes/pagination.html +21 -0
- data/_layouts/404.html +26 -0
- data/_layouts/compress.html +4 -0
- data/_layouts/default.html +18 -0
- data/_layouts/home.html +14 -0
- data/_layouts/page.html +23 -0
- data/_layouts/post.html +74 -0
- data/_sass/klise/_base.scss +360 -0
- data/_sass/klise/_dark.scss +245 -0
- data/_sass/klise/_fonts.scss +712 -0
- data/_sass/klise/_layout.scss +371 -0
- data/_sass/klise/_miscellaneous.scss +41 -0
- data/_sass/klise/_post.scss +261 -0
- data/_sass/klise/_syntax.scss +185 -0
- data/_sass/main.scss +63 -0
- metadata +153 -0
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA256:
|
3
|
+
metadata.gz: a7b9e5a649c9061c3bc5b95f9ec5e35d3b64142f2b5e2e9ed1c877a9dc9e3d34
|
4
|
+
data.tar.gz: 1fdb701edc67a471a1200c2429f9e4bcc0264c9e22d5193f609fef06e7fb307f
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: 3980a7ee19dae324802266181ffddc007cc6dd94b971f12bcb33e925e28a87448d5b3db726219401da37cdb48350fdec3e3451a8e713116016b778296debcf2d
|
7
|
+
data.tar.gz: 9a6cf5513628c915d4e9eea29b0a0f99ebb9e637b5ca92cd4fce1b14ea60777d1e9d66d9d9674a4af4de232b1b453664e9ea4dd1b0fee97b369f38f019204956
|
data/LICENSE
ADDED
@@ -0,0 +1,21 @@
|
|
1
|
+
MIT License
|
2
|
+
|
3
|
+
Copyright (c) 2019 Mahendrata Harpi
|
4
|
+
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
7
|
+
in the Software without restriction, including without limitation the rights
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
10
|
+
furnished to do so, subject to the following conditions:
|
11
|
+
|
12
|
+
The above copyright notice and this permission notice shall be included in all
|
13
|
+
copies or substantial portions of the Software.
|
14
|
+
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
21
|
+
SOFTWARE.
|
data/README.md
ADDED
@@ -0,0 +1,59 @@
|
|
1
|
+
# Klisé
|
2
|
+
|
3
|
+
Klisé is minimalist Jekyll theme for running a personal site and blog running on Jekyll.<br>
|
4
|
+
For demo <a href="https://klise.now.sh" target="_blank" rel="noopener">klise.now.sh</a>
|
5
|
+
|
6
|
+
## Features
|
7
|
+
|
8
|
+
- [x] Light & Dark Mode support :waxing_crescent_moon:
|
9
|
+
- [x] Customizable (using `.scss`)
|
10
|
+
- [x] Responsive (desktop, tab and mobile)
|
11
|
+
- [x] Mobile First Design
|
12
|
+
- [x] SEO Optimized
|
13
|
+
- [x] Images of post Organized ([`jekyll-postfiles`](https://github.com/nhoizey/jekyll-postfiles))
|
14
|
+
- [x] Generate Sitemap ([`jekyll-sitemap`](https://github.com/jekyll/jekyll-sitemap))
|
15
|
+
- [x] RSS Feed ([`jekyll-feed`](https://github.com/jekyll/jekyll-feed))
|
16
|
+
- [x] Syntax Highlighter ([`rouge`](https://github.com/rouge-ruby/rouge))
|
17
|
+
- [x] Next & Previous Post
|
18
|
+
- [x] Comment layout, enable in frontmatter if you wish
|
19
|
+
- [x] Google analytics
|
20
|
+
- [x] HTML Minify ([`jekyll-compress-html`](https://github.com/penibelst/jekyll-compress-html))
|
21
|
+
- [x] W3C **Validated**
|
22
|
+
- [x] Lighthouse and PageSpeed **Passed**
|
23
|
+
|
24
|
+
![Lighthouse Result](./lighthouse.png)
|
25
|
+
|
26
|
+
## Backlogs
|
27
|
+
|
28
|
+
- [ ] Intergrated with PhotoSwipe.
|
29
|
+
- [ ] Add schema.org meta information.
|
30
|
+
- [ ] Transform class selector to BEM metodology.
|
31
|
+
|
32
|
+
## Installation
|
33
|
+
|
34
|
+
Run local server:
|
35
|
+
|
36
|
+
```bash
|
37
|
+
git clone https://github.com/piharpi/jekyll-klise.git
|
38
|
+
cd jekyll-klise
|
39
|
+
bundle install
|
40
|
+
bundle exec jekyll serve
|
41
|
+
```
|
42
|
+
|
43
|
+
Navigate to `localhost:4000`. You're Welcome, Fork and be Stargazer.
|
44
|
+
|
45
|
+
[![Deploy to Netlify](https://www.netlify.com/img/deploy/button.svg)](https://app.netlify.com/start/deploy?repository=https://github.com/piharpi/jekyll-klise) [![Deploy with Vercel](https://vercel.com/button)](https://vercel.com/import/project?template=https://github.com/piharpi/jekyll-klise)
|
46
|
+
|
47
|
+
## Limitation
|
48
|
+
|
49
|
+
- Since [`jekyll-postfiles`](https://github.com/nhoizey/jekyll-postfiles#compatibility) plugin isn't supported by github pages, this cause will make your site problems, path broken or post images won't show up, you can host alternatively using likes [netlify.com](https://netlify.com), [vercel.com](https://vercel.com) or [surge.sh](https://surge.sh) services, which support 3rd party.
|
50
|
+
|
51
|
+
## Contributing
|
52
|
+
|
53
|
+
If you see any typos or formatting errors in a post, or want to helping reduce backlogs or any other issue that needs to be addressed, please do not hesitate to open a pull request and fix it!, please read [contributing](./CONTRIBUTING.md) before PR.
|
54
|
+
|
55
|
+
Yeaaa feel free to open a pull request.
|
56
|
+
|
57
|
+
## License
|
58
|
+
|
59
|
+
This project is open source and available under the [MIT License](LICENSE).
|
@@ -0,0 +1,105 @@
|
|
1
|
+
{% capture headingsWorkspace %}
|
2
|
+
{% comment %}
|
3
|
+
Version 1.0.4
|
4
|
+
https://github.com/allejo/jekyll-anchor-headings
|
5
|
+
|
6
|
+
"Be the pull request you wish to see in the world." ~Ben Balter
|
7
|
+
|
8
|
+
Usage:
|
9
|
+
{% include anchor_headings.html html=content %}
|
10
|
+
|
11
|
+
Parameters:
|
12
|
+
* html (string) - the HTML of compiled markdown generated by kramdown in Jekyll
|
13
|
+
|
14
|
+
Optional Parameters:
|
15
|
+
* beforeHeading (bool) : false - Set to true if the anchor should be placed _before_ the heading's content
|
16
|
+
* anchorAttrs (string) : '' - Any custom HTML attributes that will be added to the `<a>` tag; you may NOT use `href`, `class` or `title`
|
17
|
+
* anchorBody (string) : '' - The content that will be placed inside the anchor; the `%heading%` placeholder is available
|
18
|
+
* anchorClass (string) : '' - The class(es) that will be used for each anchor. Separate multiple classes with a space
|
19
|
+
* anchorTitle (string) : '' - The `title` attribute that will be used for anchors
|
20
|
+
* h_min (int) : 1 - The minimum header level to build an anchor for; any header lower than this value will be ignored
|
21
|
+
* h_max (int) : 6 - The maximum header level to build an anchor for; any header greater than this value will be ignored
|
22
|
+
* bodyPrefix (string) : '' - Anything that should be inserted inside of the heading tag _before_ its anchor and content
|
23
|
+
* bodySuffix (string) : '' - Anything that should be inserted inside of the heading tag _after_ its anchor and content
|
24
|
+
|
25
|
+
Output:
|
26
|
+
The original HTML with the addition of anchors inside of all of the h1-h6 headings.
|
27
|
+
{% endcomment %}
|
28
|
+
|
29
|
+
{% assign minHeader = include.h_min | default: 1 %}
|
30
|
+
{% assign maxHeader = include.h_max | default: 6 %}
|
31
|
+
{% assign beforeHeading = include.beforeHeading %}
|
32
|
+
{% assign nodes = include.html | split: '<h' %}
|
33
|
+
|
34
|
+
{% capture edited_headings %}{% endcapture %}
|
35
|
+
|
36
|
+
{% for _node in nodes %}
|
37
|
+
{% capture node %}{{ _node | strip }}{% endcapture %}
|
38
|
+
|
39
|
+
{% if node == "" %}
|
40
|
+
{% continue %}
|
41
|
+
{% endif %}
|
42
|
+
|
43
|
+
{% assign nextChar = node | replace: '"', '' | strip | slice: 0, 1 %}
|
44
|
+
{% assign headerLevel = nextChar | times: 1 %}
|
45
|
+
|
46
|
+
<!-- If the level is cast to 0, it means it's not a h1-h6 tag, so let's try to fix it -->
|
47
|
+
{% if headerLevel == 0 %}
|
48
|
+
{% if nextChar != '<' and nextChar != '' %}
|
49
|
+
{% capture node %}<h{{ node }}{% endcapture %}
|
50
|
+
{% endif %}
|
51
|
+
|
52
|
+
{% capture edited_headings %}{{ edited_headings }}{{ node }}{% endcapture %}
|
53
|
+
{% continue %}
|
54
|
+
{% endif %}
|
55
|
+
|
56
|
+
{% assign _workspace = node | split: '</h' %}
|
57
|
+
{% assign _idWorkspace = _workspace[0] | split: 'id="' %}
|
58
|
+
{% assign _idWorkspace = _idWorkspace[1] | split: '"' %}
|
59
|
+
{% assign html_id = _idWorkspace[0] %}
|
60
|
+
|
61
|
+
{% capture _hAttrToStrip %}{{ _workspace[0] | split: '>' | first }}>{% endcapture %}
|
62
|
+
{% assign header = _workspace[0] | replace: _hAttrToStrip, '' %}
|
63
|
+
|
64
|
+
<!-- Build the anchor to inject for our heading -->
|
65
|
+
{% capture anchor %}{% endcapture %}
|
66
|
+
|
67
|
+
{% if html_id and headerLevel >= minHeader and headerLevel <= maxHeader %}
|
68
|
+
{% capture anchor %}href="#{{ html_id }}"{% endcapture %}
|
69
|
+
|
70
|
+
{% if include.anchorClass %}
|
71
|
+
{% capture anchor %}{{ anchor }} class="{{ include.anchorClass }}"{% endcapture %}
|
72
|
+
{% endif %}
|
73
|
+
|
74
|
+
{% if include.anchorTitle %}
|
75
|
+
{% capture anchor %}{{ anchor }} title="{{ include.anchorTitle | replace: '%heading%', header }}"{% endcapture %}
|
76
|
+
{% endif %}
|
77
|
+
|
78
|
+
{% if include.anchorAttrs %}
|
79
|
+
{% capture anchor %}{{ anchor }} {{ include.anchorAttrs }}{% endcapture %}
|
80
|
+
{% endif %}
|
81
|
+
|
82
|
+
{% capture anchor %}<a {{ anchor }}>{{ include.anchorBody | replace: '%heading%', header | default: '' }}</a>{% endcapture %}
|
83
|
+
|
84
|
+
<!-- In order to prevent adding extra space after a heading, we'll let the 'anchor' value contain it -->
|
85
|
+
{% if beforeHeading %}
|
86
|
+
{% capture anchor %}{{ anchor }} {% endcapture %}
|
87
|
+
{% else %}
|
88
|
+
{% capture anchor %} {{ anchor }}{% endcapture %}
|
89
|
+
{% endif %}
|
90
|
+
{% endif %}
|
91
|
+
|
92
|
+
{% capture new_heading %}
|
93
|
+
<h{{ _hAttrToStrip }}
|
94
|
+
{{ include.bodyPrefix }}
|
95
|
+
{% if beforeHeading %}
|
96
|
+
{{ anchor }}{{ header }}
|
97
|
+
{% else %}
|
98
|
+
{{ header }}{{ anchor }}
|
99
|
+
{% endif %}
|
100
|
+
{{ include.bodySuffix }}
|
101
|
+
</h{{ _workspace | last }}
|
102
|
+
{% endcapture %}
|
103
|
+
{% capture edited_headings %}{{ edited_headings }}{{ new_heading }}{% endcapture %}
|
104
|
+
{% endfor %}
|
105
|
+
{% endcapture %}{% assign headingsWorkspace = '' %}{{ edited_headings | strip }}
|
@@ -0,0 +1,10 @@
|
|
1
|
+
<!-- unnecessary file, however you can still use for comment section, e.g disqus -->
|
2
|
+
<script
|
3
|
+
src="https://utteranc.es/client.js"
|
4
|
+
repo="username/reponame"
|
5
|
+
issue-term="pathname"
|
6
|
+
label="✨ comment ✨"
|
7
|
+
theme="github-light"
|
8
|
+
crossorigin="anonymous"
|
9
|
+
async
|
10
|
+
></script>
|
@@ -0,0 +1,38 @@
|
|
1
|
+
<footer class="footer">
|
2
|
+
<a class="footer_item" href="/thanks">ack.</a>
|
3
|
+
<a class="footer_item" href="javascript::void(0)">resume</a>
|
4
|
+
<a class="footer_item" href="/feed.xml">rss</a>
|
5
|
+
<span class="footer_item">© {{ site.time | date: "%Y" }}</span>
|
6
|
+
<small class="footer_copyright">
|
7
|
+
<!-- Klisé Theme: https://github.com/piharpi/jekyll-klise -->
|
8
|
+
<a
|
9
|
+
href="https://github.com/piharpi/jekyll-klise"
|
10
|
+
target="_blank"
|
11
|
+
rel="noreferrer noopener"
|
12
|
+
>klisé</a
|
13
|
+
>
|
14
|
+
theme on
|
15
|
+
<a href="https://jekyllrb.com" target="_blank" rel="noreferrer noopener"
|
16
|
+
>jekyll</a
|
17
|
+
>
|
18
|
+
</small>
|
19
|
+
</footer>
|
20
|
+
<script src="/assets/js/main.js" defer="defer"></script>
|
21
|
+
|
22
|
+
{%- if page.google_analytics -%}
|
23
|
+
<script src="/assets/js/galite.js"></script>
|
24
|
+
<script>
|
25
|
+
var galite = galite || {};
|
26
|
+
galite.UA = "{{ site.google_analytics }}";
|
27
|
+
</script>
|
28
|
+
{%- endif -%}
|
29
|
+
{%- if page.url == '/archive/' -%}
|
30
|
+
<script src="/assets/js/search.min.js"></script>
|
31
|
+
<script>
|
32
|
+
var sjs = SimpleJekyllSearch({
|
33
|
+
searchInput: document.getElementById('search-input'),
|
34
|
+
resultsContainer: document.getElementById('search-results'),
|
35
|
+
json: '/assets/search.json',
|
36
|
+
});
|
37
|
+
</script>
|
38
|
+
{%- endif -%}
|
@@ -0,0 +1,164 @@
|
|
1
|
+
<head prefix="og: http://ogp.me/ns#">
|
2
|
+
<meta charset="UTF-8" />
|
3
|
+
<meta http-equiv="X-UA-Compatible" content="ie=edge" />
|
4
|
+
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
|
5
|
+
<meta name="mobile-web-app-capable" content="yes" />
|
6
|
+
<meta name="apple-mobile-web-app-capable" content="yes" />
|
7
|
+
<meta name="application-name" content="{{ site.title }}" />
|
8
|
+
<meta name="apple-mobile-web-app-status-bar-style" content="#fff" />
|
9
|
+
<meta name="apple-mobile-web-app-title" content="{{ site.title }}" />
|
10
|
+
<title>
|
11
|
+
{% if page.title %}{{ page.title | escape }} - {{ site.title }}{% else %}{{
|
12
|
+
site.title | escape }}{% endif %}
|
13
|
+
</title>
|
14
|
+
<link
|
15
|
+
rel="alternate"
|
16
|
+
href="{{
|
17
|
+
page.url | remove: 'index.html' | remove: '.html' | absolute_url
|
18
|
+
}}"
|
19
|
+
hreflang="{{ site.lang }}"
|
20
|
+
/>
|
21
|
+
<link
|
22
|
+
rel="canonical"
|
23
|
+
href="{{
|
24
|
+
page.url | remove: 'index.html' | remove: '.html' | absolute_url
|
25
|
+
}}"
|
26
|
+
/>
|
27
|
+
{% if paginator.previous_page %}
|
28
|
+
<link
|
29
|
+
rel="prev"
|
30
|
+
href="{{
|
31
|
+
paginator.previous_page_path
|
32
|
+
| remove: 'index.html'
|
33
|
+
| remove: '.html'
|
34
|
+
}}"
|
35
|
+
/>
|
36
|
+
{% endif %} {% if paginator.next_page %}
|
37
|
+
<link
|
38
|
+
rel="next"
|
39
|
+
href="{{
|
40
|
+
paginator.next_page_path
|
41
|
+
| remove: 'index.html'
|
42
|
+
| remove: '.html'
|
43
|
+
}}"
|
44
|
+
/>
|
45
|
+
{% endif %}
|
46
|
+
<meta
|
47
|
+
name="description"
|
48
|
+
content="{{
|
49
|
+
page.description
|
50
|
+
| default: site.description
|
51
|
+
| strip_html
|
52
|
+
| normalize_whitespace
|
53
|
+
| truncate: 200
|
54
|
+
| escape
|
55
|
+
}}"
|
56
|
+
/>
|
57
|
+
<meta name="referrer" content="no-referrer-when-downgrade" />
|
58
|
+
<meta property="fb:app_id" content="{{ site.fb_appid }}" />
|
59
|
+
<meta
|
60
|
+
property="og:site_name"
|
61
|
+
content="{% if page.title %}{{ page.title | escape }} | {{
|
62
|
+
site.author.facebook
|
63
|
+
}}{% else %}{{ site.title | escape }}{% endif %}"
|
64
|
+
/>
|
65
|
+
<meta
|
66
|
+
property="og:title"
|
67
|
+
content="{% if page.title %}{{ page.title | escape }} | {{
|
68
|
+
site.author.facebook
|
69
|
+
}}{% else %}{{ site.title | escape }}{% endif %}"
|
70
|
+
/>
|
71
|
+
{% if page.location %}
|
72
|
+
<meta property="og:type" content="article" />
|
73
|
+
<meta
|
74
|
+
property="article:publisher"
|
75
|
+
content="https://web.facebook.com/{{ site.author.facebook }}"
|
76
|
+
/>
|
77
|
+
{% else %}
|
78
|
+
<meta property="og:type" content="website" />
|
79
|
+
{% endif %}
|
80
|
+
<meta
|
81
|
+
property="og:url"
|
82
|
+
content="{{
|
83
|
+
page.url | remove: 'index.html' | remove: '.html' | absolute_url
|
84
|
+
}}"
|
85
|
+
/>
|
86
|
+
<meta
|
87
|
+
property="og:description"
|
88
|
+
content="{{
|
89
|
+
page.description
|
90
|
+
| default: site.description
|
91
|
+
| strip_html
|
92
|
+
| normalize_whitespace
|
93
|
+
| truncate: 200
|
94
|
+
| escape
|
95
|
+
}}"
|
96
|
+
/>
|
97
|
+
{% if page.image %}
|
98
|
+
<meta property="og:image" content="{{ page.image | absolute_url }}" />
|
99
|
+
{% else %}
|
100
|
+
<meta property="og:image" content="{{ site.image | absolute_url }}" />
|
101
|
+
{% endif %}
|
102
|
+
<meta property="og:image:width" content="640" />
|
103
|
+
<meta property="og:image:height" content="640" />
|
104
|
+
<meta name="twitter:card" content="summary" />
|
105
|
+
<meta
|
106
|
+
name="twitter:title"
|
107
|
+
content="{% if page.title %}{{ page.title | escape }} | {{
|
108
|
+
site.author.twitter
|
109
|
+
}}{% else %}{{ site.title | escape }}{% endif %}"
|
110
|
+
/>
|
111
|
+
<meta
|
112
|
+
name="twitter:url"
|
113
|
+
content="{{
|
114
|
+
page.url | remove: 'index.html' | remove: '.html' | absolute_url
|
115
|
+
}}"
|
116
|
+
/>
|
117
|
+
<meta name="twitter:site" content="@{{ site.author.twitter }}" />
|
118
|
+
<meta name="twitter:creator" content="@{{ site.author.twitter }}" />
|
119
|
+
<meta
|
120
|
+
name="twitter:description"
|
121
|
+
content="{{
|
122
|
+
page.description
|
123
|
+
| default: site.description
|
124
|
+
| strip_html
|
125
|
+
| normalize_whitespace
|
126
|
+
| truncate: 200
|
127
|
+
| escape
|
128
|
+
}}"
|
129
|
+
/>
|
130
|
+
{% if page.image %}
|
131
|
+
<meta name="twitter:image" content="{{ page.image | absolute_url }}" />
|
132
|
+
{% else %}
|
133
|
+
<meta name="twitter:image" content="{{ site.image | absolute_url }}" />
|
134
|
+
{% endif %} {% feed_meta %}
|
135
|
+
<link
|
136
|
+
rel="apple-touch-icon"
|
137
|
+
sizes="180x180"
|
138
|
+
href="/assets/favicons/apple-touch-icon.png"
|
139
|
+
/>
|
140
|
+
<link
|
141
|
+
rel="icon"
|
142
|
+
type="image/png"
|
143
|
+
sizes="32x32"
|
144
|
+
href="/assets/favicons/favicon-32x32.png"
|
145
|
+
/>
|
146
|
+
<link
|
147
|
+
rel="icon"
|
148
|
+
type="image/png"
|
149
|
+
sizes="16x16"
|
150
|
+
href="/assets/favicons/favicon-16x16.png"
|
151
|
+
/>
|
152
|
+
<link rel="manifest" href="/assets/favicons/site.webmanifest" />
|
153
|
+
<link
|
154
|
+
rel="mask-icon"
|
155
|
+
href="/assets/favicons/safari-pinned-tab.svg"
|
156
|
+
color="#5bbad5"
|
157
|
+
/>
|
158
|
+
<meta name="apple-mobile-web-app-title" content="Jekyll Klise" />
|
159
|
+
<meta name="application-name" content="Jekyll Klise" />
|
160
|
+
<meta name="msapplication-TileColor" content="#da532c" />
|
161
|
+
<meta name="theme-color" content="#2c2c2c" />
|
162
|
+
|
163
|
+
<link rel="stylesheet" href="/assets/css/style.css" />
|
164
|
+
</head>
|
@@ -0,0 +1,211 @@
|
|
1
|
+
<div class="navbar" role="navigation">
|
2
|
+
<nav class="menu">
|
3
|
+
<input type="checkbox" id="menu-trigger" class="menu-trigger" />
|
4
|
+
<label for="menu-trigger">
|
5
|
+
<span class="menu-icon">
|
6
|
+
<svg
|
7
|
+
xmlns="http://www.w3.org/2000/svg"
|
8
|
+
width="24"
|
9
|
+
height="24"
|
10
|
+
viewBox="0 0 512 512"
|
11
|
+
>
|
12
|
+
<path
|
13
|
+
d="M64,384H448V341.33H64Zm0-106.67H448V234.67H64ZM64,128v42.67H448V128Z"
|
14
|
+
/>
|
15
|
+
</svg>
|
16
|
+
</span>
|
17
|
+
</label>
|
18
|
+
<a id="mode">
|
19
|
+
<svg
|
20
|
+
class="mode-sunny"
|
21
|
+
xmlns="http://www.w3.org/2000/svg"
|
22
|
+
width="24"
|
23
|
+
height="24"
|
24
|
+
viewBox="0 0 512 512"
|
25
|
+
>
|
26
|
+
<title>LIGHT</title>
|
27
|
+
<line
|
28
|
+
x1="256"
|
29
|
+
y1="48"
|
30
|
+
x2="256"
|
31
|
+
y2="96"
|
32
|
+
style="stroke-linecap:round;stroke-miterlimit:10;stroke-width:32px"
|
33
|
+
/>
|
34
|
+
<line
|
35
|
+
x1="256"
|
36
|
+
y1="416"
|
37
|
+
x2="256"
|
38
|
+
y2="464"
|
39
|
+
style="stroke-linecap:round;stroke-miterlimit:10;stroke-width:32px"
|
40
|
+
/>
|
41
|
+
<line
|
42
|
+
x1="403.08"
|
43
|
+
y1="108.92"
|
44
|
+
x2="369.14"
|
45
|
+
y2="142.86"
|
46
|
+
style="stroke-linecap:round;stroke-miterlimit:10;stroke-width:32px"
|
47
|
+
/>
|
48
|
+
<line
|
49
|
+
x1="142.86"
|
50
|
+
y1="369.14"
|
51
|
+
x2="108.92"
|
52
|
+
y2="403.08"
|
53
|
+
style="stroke-linecap:round;stroke-miterlimit:10;stroke-width:32px"
|
54
|
+
/>
|
55
|
+
<line
|
56
|
+
x1="464"
|
57
|
+
y1="256"
|
58
|
+
x2="416"
|
59
|
+
y2="256"
|
60
|
+
style="stroke-linecap:round;stroke-miterlimit:10;stroke-width:32px"
|
61
|
+
/>
|
62
|
+
<line
|
63
|
+
x1="96"
|
64
|
+
y1="256"
|
65
|
+
x2="48"
|
66
|
+
y2="256"
|
67
|
+
style="stroke-linecap:round;stroke-miterlimit:10;stroke-width:32px"
|
68
|
+
/>
|
69
|
+
<line
|
70
|
+
x1="403.08"
|
71
|
+
y1="403.08"
|
72
|
+
x2="369.14"
|
73
|
+
y2="369.14"
|
74
|
+
style="stroke-linecap:round;stroke-miterlimit:10;stroke-width:32px"
|
75
|
+
/>
|
76
|
+
<line
|
77
|
+
x1="142.86"
|
78
|
+
y1="142.86"
|
79
|
+
x2="108.92"
|
80
|
+
y2="108.92"
|
81
|
+
style="stroke-linecap:round;stroke-miterlimit:10;stroke-width:32px"
|
82
|
+
/>
|
83
|
+
<circle
|
84
|
+
cx="256"
|
85
|
+
cy="256"
|
86
|
+
r="80"
|
87
|
+
style="stroke-linecap:round;stroke-miterlimit:10;stroke-width:32px"
|
88
|
+
/>
|
89
|
+
</svg>
|
90
|
+
<svg
|
91
|
+
class="mode-moon"
|
92
|
+
xmlns="http://www.w3.org/2000/svg"
|
93
|
+
width="24"
|
94
|
+
height="24"
|
95
|
+
viewBox="0 0 512 512"
|
96
|
+
>
|
97
|
+
<title>DARK</title>
|
98
|
+
<line
|
99
|
+
x1="256"
|
100
|
+
y1="48"
|
101
|
+
x2="256"
|
102
|
+
y2="96"
|
103
|
+
style="stroke-linecap:round;stroke-miterlimit:10;stroke-width:32px"
|
104
|
+
/>
|
105
|
+
<line
|
106
|
+
x1="256"
|
107
|
+
y1="416"
|
108
|
+
x2="256"
|
109
|
+
y2="464"
|
110
|
+
style="stroke-linecap:round;stroke-miterlimit:10;stroke-width:32px"
|
111
|
+
/>
|
112
|
+
<line
|
113
|
+
x1="403.08"
|
114
|
+
y1="108.92"
|
115
|
+
x2="369.14"
|
116
|
+
y2="142.86"
|
117
|
+
style="stroke-linecap:round;stroke-miterlimit:10;stroke-width:32px"
|
118
|
+
/>
|
119
|
+
<line
|
120
|
+
x1="142.86"
|
121
|
+
y1="369.14"
|
122
|
+
x2="108.92"
|
123
|
+
y2="403.08"
|
124
|
+
style="stroke-linecap:round;stroke-miterlimit:10;stroke-width:32px"
|
125
|
+
/>
|
126
|
+
<line
|
127
|
+
x1="464"
|
128
|
+
y1="256"
|
129
|
+
x2="416"
|
130
|
+
y2="256"
|
131
|
+
style="stroke-linecap:round;stroke-miterlimit:10;stroke-width:32px"
|
132
|
+
/>
|
133
|
+
<line
|
134
|
+
x1="96"
|
135
|
+
y1="256"
|
136
|
+
x2="48"
|
137
|
+
y2="256"
|
138
|
+
style="stroke-linecap:round;stroke-miterlimit:10;stroke-width:32px"
|
139
|
+
/>
|
140
|
+
<line
|
141
|
+
x1="403.08"
|
142
|
+
y1="403.08"
|
143
|
+
x2="369.14"
|
144
|
+
y2="369.14"
|
145
|
+
style="stroke-linecap:round;stroke-miterlimit:10;stroke-width:32px"
|
146
|
+
/>
|
147
|
+
<line
|
148
|
+
x1="142.86"
|
149
|
+
y1="142.86"
|
150
|
+
x2="108.92"
|
151
|
+
y2="108.92"
|
152
|
+
style="stroke-linecap:round;stroke-miterlimit:10;stroke-width:32px"
|
153
|
+
/>
|
154
|
+
<circle
|
155
|
+
cx="256"
|
156
|
+
cy="256"
|
157
|
+
r="80"
|
158
|
+
style="stroke-linecap:round;stroke-miterlimit:10;stroke-width:32px"
|
159
|
+
/>
|
160
|
+
</svg>
|
161
|
+
</a>
|
162
|
+
<div class="trigger">
|
163
|
+
<div class="trigger-container">
|
164
|
+
{%- assign url = page.url -%}
|
165
|
+
{%- assign menus = site.data.menus -%}
|
166
|
+
{%- if menus %}
|
167
|
+
{%- for menu in menus -%}
|
168
|
+
{%- if url == menu.url -%}
|
169
|
+
<a class="menu-link active" href="{{ menu.url }}">{{ menu.title }}</a>
|
170
|
+
{%- else -%}
|
171
|
+
{%- if menu.external -%}
|
172
|
+
<a
|
173
|
+
class="menu-link"
|
174
|
+
href="{{ menu.url }}"
|
175
|
+
target="_blank"
|
176
|
+
rel="noopener"
|
177
|
+
>{{ menu.title }}</a
|
178
|
+
>
|
179
|
+
{%- else -%}
|
180
|
+
<a class="menu-link" href="{{ menu.url }}">{{ menu.title }}</a>
|
181
|
+
{%- endif -%}
|
182
|
+
{%- endif -%}
|
183
|
+
{%- endfor -%}
|
184
|
+
{%- else -%}
|
185
|
+
<a class="menu-link {% if url == '/' %}active{% endif %}" href="/">home</a>
|
186
|
+
<a class="menu-link {% if url == '/about/' %}active{% endif %}" href="/about">about</a>
|
187
|
+
{%- endif -%}
|
188
|
+
<a class="menu-link rss" href="/feed.xml">
|
189
|
+
<svg
|
190
|
+
xmlns="http://www.w3.org/2000/svg"
|
191
|
+
width="17"
|
192
|
+
height="17"
|
193
|
+
viewBox="0 0 512 512"
|
194
|
+
fill="#ED812E"
|
195
|
+
>
|
196
|
+
<title>RSS</title>
|
197
|
+
<path
|
198
|
+
d="M108.56,342.78a60.34,60.34,0,1,0,60.56,60.44A60.63,60.63,0,0,0,108.56,342.78Z"
|
199
|
+
/>
|
200
|
+
<path
|
201
|
+
d="M48,186.67v86.55c52,0,101.94,15.39,138.67,52.11s52,86.56,52,138.67h86.66C325.33,312.44,199.67,186.67,48,186.67Z"
|
202
|
+
/>
|
203
|
+
<path
|
204
|
+
d="M48,48v86.56c185.25,0,329.22,144.08,329.22,329.44H464C464,234.66,277.67,48,48,48Z"
|
205
|
+
/>
|
206
|
+
</svg>
|
207
|
+
</a>
|
208
|
+
</div>
|
209
|
+
</div>
|
210
|
+
</nav>
|
211
|
+
</div>
|