jekyll-theme-morph 0.0.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (45) hide show
  1. checksums.yaml +7 -0
  2. data/LICENSE +21 -0
  3. data/README.md +189 -0
  4. data/_includes/bread-bar.html +9 -0
  5. data/_includes/catalogue.html +26 -0
  6. data/_includes/footer.html +7 -0
  7. data/_includes/head.html +37 -0
  8. data/_includes/header.html +45 -0
  9. data/_includes/paginator.html +27 -0
  10. data/_includes/post-info.html +31 -0
  11. data/_includes/simple-post-info.html +14 -0
  12. data/_includes/trending-article-item.html +25 -0
  13. data/_layouts/classify.html +55 -0
  14. data/_layouts/default.html +16 -0
  15. data/_layouts/home.html +82 -0
  16. data/_layouts/page.html +8 -0
  17. data/_layouts/post.html +84 -0
  18. data/_layouts/search.html +36 -0
  19. data/_sass/classify.scss +58 -0
  20. data/_sass/home.scss +67 -0
  21. data/_sass/morph.scss +7 -0
  22. data/_sass/morph/_base.scss +62 -0
  23. data/_sass/morph/_colors.scss +42 -0
  24. data/_sass/morph/_functions.scss +57 -0
  25. data/_sass/morph/_utilities.scss +196 -0
  26. data/_sass/morph/_variables.scss +50 -0
  27. data/_sass/morph/components/_catalogue.scss +68 -0
  28. data/_sass/morph/components/_footer.sass +9 -0
  29. data/_sass/morph/components/_header.scss +80 -0
  30. data/_sass/morph/components/_highlight.scss +66 -0
  31. data/_sass/morph/components/_nano-compo.scss +23 -0
  32. data/_sass/morph/components/_paginator.scss +19 -0
  33. data/_sass/morph/components/_post-info.scss +30 -0
  34. data/_sass/morph/themes/obsidian.scss +86 -0
  35. data/_sass/morph/themes/silver.scss +79 -0
  36. data/_sass/post.scss +194 -0
  37. data/_sass/search.scss +68 -0
  38. data/assets/javascript/post.js +52 -0
  39. data/assets/javascript/search.js +51 -0
  40. data/assets/style/classify.scss +4 -0
  41. data/assets/style/home.scss +4 -0
  42. data/assets/style/main.scss +4 -0
  43. data/assets/style/post.scss +5 -0
  44. data/assets/style/search.scss +4 -0
  45. metadata +156 -0
checksums.yaml ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA256:
3
+ metadata.gz: 824f1bfbd6e6a88dc64144e411aa9aa0fb711e097be9edb9f472e70f1f97afc6
4
+ data.tar.gz: a716a2a636568725f4b46d0587eff6e4d208a6c2f4926392f73944baaa6f7cf8
5
+ SHA512:
6
+ metadata.gz: bf19731c4c0dee3c529087158014d15a75028f3a76c14b5373fac2729d2709e37a9d5b8c401dbea14bca99d0d4823b5fa68d4926870da0f5d29bb7ebfb6345d6
7
+ data.tar.gz: 1610002e66d44a6f3d8f101ab52825a3e866f16743cd7d4fab43b0335ae328bc07d477481018a2e4be03ea0d1c6bbd37c94382e8eae2a1a3aef11cfc33a85346
data/LICENSE ADDED
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2021 Alex
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,189 @@
1
+ # Morph
2
+
3
+ Morph is a simple Jekyll theme for writers.
4
+
5
+ [Demo](http://alex-1900.github.io/jekyll-theme-morph/)
6
+
7
+ ## Installation
8
+ Install with github page:
9
+
10
+ ### GitHub Pages
11
+ 1. Add these 2 lines in to your `Gemfile`:
12
+
13
+ ```ruby
14
+ gem "jekyll-remote-theme"
15
+ gem "jekyll-paginate"
16
+ ```
17
+
18
+ 2. Install the newly added gems:
19
+
20
+ ```bash
21
+ $ bundle
22
+ ```
23
+
24
+ 3. In `_config.yml` add these lines:
25
+
26
+ ```yaml
27
+ remote_theme: alex-1900/jekyll-theme-morph
28
+
29
+ permalink: /:year/:month/:day/:title.markdown
30
+ paginate: 5
31
+
32
+ plugins:
33
+ - jekyll-paginate
34
+ - jekyll-remote-theme
35
+ ```
36
+
37
+ Remove any other `theme:` or `remote_theme:` lines.
38
+
39
+ 4. Rename `index.md` to `index.html`. Without this, the `jekyll-paginate` gem will not work.
40
+
41
+ ## Layouts
42
+
43
+ ### Pinned articles
44
+ Add the `sticky` and `sticky_subtitle`(optional) field to post file, and you can find the article at pinned area.
45
+ ```yml
46
+ ---
47
+ sticky: true
48
+ sticky_subtitle: some words
49
+ ---
50
+ ```
51
+
52
+ ### Add tags and categories page
53
+ 1. create new pages `tags.html` and `categories.html` and add these lines to heads:
54
+ ```html
55
+ ---
56
+ layout: classify
57
+ source: tags
58
+ ---
59
+ ```
60
+
61
+ ```text
62
+ ---
63
+ layout: classify
64
+ source: categories
65
+ ---
66
+ ```
67
+
68
+ 2. add these lines to your `_config.yml`:
69
+ ```yml
70
+ morph:
71
+ pages:
72
+ - name: tags
73
+ path: /tags
74
+ - name: categories
75
+ path: /categories
76
+ ```
77
+
78
+ and can see the `tags` and `categories` buttons now.
79
+
80
+ ### Enable tags and categories sidebar
81
+ add these lines to your `_config.yml` in `morph` field:
82
+ ```yml
83
+ morph:
84
+ include:
85
+ home_categories_bar:
86
+ title: Top Categories
87
+ path: /categories
88
+ home_tags_bar:
89
+ title: Top Tags
90
+ path: /tags
91
+ ```
92
+ certainly, you can change the `titles` and `paths`
93
+
94
+ ### Add searching page
95
+ 1. create `search.json` at project root, and add these lines:
96
+ ```text
97
+ ---
98
+ layout: none
99
+ permalink: /search.json
100
+ ---
101
+ [
102
+ {% for post in site.posts %}
103
+ {
104
+ "title" : {{ post.title | escape | jsonify }},
105
+ "category" : {{ post.category | jsonify }},
106
+ "tags" : "{{ post.tags | join: ', ' }}",
107
+ "url" : "{{ site.baseurl }}{{ post.url }}",
108
+ "date" : "{{ post.date }}",
109
+ "content" : {{ post.content | strip_html | strip_newlines | remove_chars | jsonify }}
110
+ } {% unless forloop.last %},{% endunless %}
111
+ {% endfor %}
112
+ ]
113
+ ```
114
+
115
+ 2. create a new file `search.html`, and add these lines to head:
116
+ ```html
117
+ ---
118
+ layout: search
119
+ ---
120
+ ```
121
+
122
+ 3. add change your `_config.yml` add a new page to `morph.pages`:
123
+ ```yml
124
+ morph:
125
+ pages:
126
+ - name: tags
127
+ path: /tags
128
+ - name: categories
129
+ path: /categories
130
+ - name: search
131
+ path: /search
132
+ ```
133
+
134
+ ## Change the skin
135
+ There are two skins: `silver` (default) and `obsidian`, you can switching between multiple skins by `_config.yml`:
136
+ ```yml
137
+ morph:
138
+ skin: obsidian
139
+ ```
140
+ and rebuild or restart the dev server
141
+
142
+ ## Multiple language
143
+ 1. Create directory and file `__data/language/[lang].yml`(the `[lang]` is abbreviation of your language)
144
+
145
+ 2. replace contents with another language, the following are the default values.
146
+
147
+ ```yml
148
+ t:
149
+ posts: posts
150
+ tags_low: tags
151
+ tags_up: Tags
152
+ categories_low: categories
153
+ categories_up: Categories
154
+ about_low: about
155
+ about_up: About
156
+ search_low: search
157
+ search_up: Search
158
+ catalogue: Catalogue
159
+ home: Home
160
+ page: Page
161
+ post_up: Post
162
+ search_placeholder: input key words here...
163
+ update_time: Update time
164
+ pinned_articles: Pinned Articles
165
+ top_tags: Top Tags
166
+ top_categories: Top Categories
167
+ show_more: show more
168
+ catalogue_empty: Catalogue is empty
169
+ ```
170
+
171
+ 3 add your the `lang` item to your page files
172
+ ```html
173
+ ---
174
+ lang: [lang]
175
+ ---
176
+ ```
177
+
178
+ (the `[lang]` is abbreviation of your language)
179
+
180
+ - for posts page, you can change the defaults scope:
181
+ ```yml
182
+ defaults:
183
+ - scope:
184
+ type: "posts"
185
+ values:
186
+ lang: [lang] # the `[lang]` is abbreviation of your language
187
+ ```
188
+
189
+ and rebuild or restart the dev server
@@ -0,0 +1,9 @@
1
+ {% assign t = site.data.language[page.lang].t %}
2
+ <div class="component bread fw-bold user-select-none">
3
+ <span class="bg-primary"><a class="link-light" href="{{ '/' | site.baseurl }}">{{ t.home | default: 'Home' }}</a></span>
4
+ {% assign paths = include.paths | split: " " %}
5
+ {% for path in paths %}
6
+ <i class="fas fa-angle-right color-secondary"></i>
7
+ <span class="bg-primary color-secondary-light">{{ path }}</span>
8
+ {% endfor %}
9
+ </div>
@@ -0,0 +1,26 @@
1
+ {% assign t = site.data.language[page.lang].t %}
2
+ <div class="full-mask" id="full-mask-catalogue">
3
+ <div class="component catalogue m-auto">
4
+ <header class="header">
5
+ <h3 class="header-text text-center color-secondary bg-primary">{{ t.catalogue | default: 'Catalogue' }}</h3>
6
+ </header>
7
+ <ul class="body bg-base w-100" id="{{ include.list_id }}">
8
+ <!-- document structure list -->
9
+ <li class="text-center color-secondary">{{ t.catalogue_empty | default: 'Catalogue is empty' }}</li>
10
+ </ul>
11
+ </div>
12
+ </div>
13
+ <script>
14
+ (function () {
15
+ "use struct"
16
+ var fullMask = document.getElementById('full-mask-catalogue')
17
+
18
+ fullMask.onclick = function () {
19
+ fullMask.style.display = 'none'
20
+ }
21
+
22
+ window.comShowCatalogue = function () {
23
+ fullMask.style.display = 'block'
24
+ }
25
+ })()
26
+ </script>
@@ -0,0 +1,7 @@
1
+ <footer class="footer">
2
+ <div class="content m-auto color-secondary-light text-center">
3
+ &copy; <time datetime="{{ site.time }}">{{ site.time | date: '%Y' }}</time>
4
+ {{ site.domain }}, all rights reserved {{ site.github_username }}
5
+ . Made with Jekyll using the <a target="_blank" href="https://github.com/alex-1900/jekyll-theme-morph">Morph</a> theme.
6
+ </div>
7
+ </footer>
@@ -0,0 +1,37 @@
1
+ <meta charset="UTF-8">
2
+ <meta name="viewport" content="width=device-width, initial-scale=1.0">
3
+
4
+ {% seo %}
5
+
6
+ <!-- CSS -->
7
+ <link rel="stylesheet" href="{{ "/assets/style/main.css" | relative_url }}">
8
+
9
+ <!-- Favicon -->
10
+ <link rel="icon" type="image/png" sizes="32x32" href="{{ "/assets/favicon-32x32.png" | relative_url }}">
11
+ <link rel="icon" type="image/png" sizes="16x16" href="{{ "/assets/favicon-16x16.png" | relative_url }}">
12
+ <link rel="apple-touch-icon" sizes="180x180" href="{{ "/assets/apple-touch-icon.png" | relative_url }}">
13
+ <link href="https://cdn.bootcdn.net/ajax/libs/font-awesome/5.15.3/css/all.min.css" rel="stylesheet">
14
+
15
+ <!-- for layouts -->
16
+ {% if page.layout == 'post' %}
17
+ <link rel="stylesheet" href="{{ "/assets/style/post.css" | relative_url }}">
18
+ <script src="{{ "/assets/javascript/post.js" | relative_url }}"></script>
19
+ {% endif %}
20
+
21
+ <!-- for pages -->
22
+ {% if page.layout == 'search' %}
23
+ <link rel="stylesheet" href="{{ "/assets/style/search.css" | relative_url }}">
24
+ <script src="https://cdnjs.cloudflare.com/ajax/libs/simple-jekyll-search/1.9.2/simple-jekyll-search.min.js"></script>
25
+ <script src="{{ "/assets/javascript/search.js" | relative_url }}"></script>
26
+ {% endif %}
27
+
28
+ {% if page.layout == 'home' %}
29
+ <link rel="stylesheet" href="{{ "/assets/style/home.css" | relative_url }}">
30
+ {% endif %}
31
+
32
+ {% if page.layout == 'classify' %}
33
+ <link rel="stylesheet" href="{{ "/assets/style/classify.css" | relative_url }}">
34
+ {% endif %}
35
+
36
+ <!-- RSS -->
37
+ {% feed_meta %}
@@ -0,0 +1,45 @@
1
+ {% assign t = site.data.language[page.lang].t %}
2
+ <nav class="header w-100 bg-primary d-flex flex-column">
3
+ <div class="border-bottom" style="height: 65%;">
4
+ <div class="m-auto content h-100 d-flex">
5
+ <div class="logo user-select-none flex-none d-flex flex-column justify-content-center">
6
+ <a class="fw-bold" href="{{ '/' | prepend: site.baseurl }}">
7
+ {{ site.title }}
8
+ </a>
9
+ </div>
10
+ <div class="search-box flex-auto d-flex flex-column justify-content-center d-sm-none">
11
+ <form action="{{ '/search' | prepend: site.baseurl }}" id="header-search-form" class="search">
12
+ <label class="search-wrap d-flex flex-none">
13
+ <input name="words" class="search-input flex-grow-1" id="header-search-input" type="text" />
14
+ <button class="search-button cursor-pointer bg-base" type="submit">
15
+ <i class="fas fa-arrow-right"></i>
16
+ </button>
17
+ </label>
18
+ </form>
19
+ </div>
20
+ </div>
21
+ </div>
22
+ <div class="nav-bar bg-primary">
23
+ <div class="m-auto content">
24
+ <div>
25
+ <ul class="white-space-nowrap">
26
+ <li class="d-inline-block active"><a href="{{ '/' | prepend: site.baseurl }}">{{ t.posts | default: 'posts' }}</a></li>
27
+ {% for _page in site.morph.pages %}
28
+ <li class="d-inline-block"><a href="{{ _page.path | prepend: site.baseurl }}">{{ _page.name }}</a></li>
29
+ {% endfor %}
30
+ <li class="d-inline-block"><a href="{{ '/about' | prepend: site.baseurl }}">{{ t.about_low | default: 'about' }}</a></li>
31
+ </ul>
32
+ </div>
33
+ </div>
34
+ </div>
35
+ </nav>
36
+
37
+ <script>
38
+ var headerSearchForm = document.getElementById('header-search-form')
39
+ var headerSearchInput = document.getElementById('header-search-input')
40
+ headerSearchForm.onsubmit = function (event) {
41
+ event.preventDefault()
42
+ var words = headerSearchInput.value
43
+ window.location.href = headerSearchForm.action + '?words=' + encodeURIComponent(words)
44
+ }
45
+ </script>
@@ -0,0 +1,27 @@
1
+ <div>
2
+ {% if paginator.total_pages > 1 %}
3
+ <div class="pagination">
4
+ {% if paginator.previous_page %}
5
+ <a href="{{ paginator.previous_page_path | relative_url }}"><i class="fas fa-angle-left"></i></a>
6
+ {% else %}
7
+ <span><i class="fas fa-angle-left"></i></span>
8
+ {% endif %}
9
+
10
+ {% for page in (1..paginator.total_pages) %}
11
+ {% if page == paginator.page %}
12
+ <em>{{ page }}</em>
13
+ {% elsif page == 1 %}
14
+ <a href="{{ '/' | relative_url }}">{{ page }}</a>
15
+ {% else %}
16
+ <a href="{{ site.paginate_path | relative_url | replace: ':num', page }}">{{ page }}</a>
17
+ {% endif %}
18
+ {% endfor %}
19
+
20
+ {% if paginator.next_page %}
21
+ <a href="{{ paginator.next_page_path | relative_url }}"><i class="fas fa-angle-right"></i></a>
22
+ {% else %}
23
+ <span><i class="fas fa-angle-right"></i></span>
24
+ {% endif %}
25
+ </div>
26
+ {% endif %}
27
+ </div>
@@ -0,0 +1,31 @@
1
+ <div class="post-info">
2
+ <h3 class="fw-normal"><a class="color-link" href="{{ post.url | prepend: site.baseurl }}">{{ post.title }}</a></h3>
3
+ <div class="d-flex">
4
+ <span class="w-100 text-start">
5
+ <time datetime="{{ post.date }}" class="d-inline-block fw-light color-secondary-light">
6
+ <i class="far fa-calendar-alt color-rang1"></i> {{ post.date | date: "%b %d, %y" }}
7
+ </time>
8
+ &nbsp;
9
+ <time datetime="{{ post.date }}" class="d-inline-block fw-light color-secondary-light">
10
+ <i class="far fa-clock color-rang2"></i> {{ post.date | date: "%H:%M" }}
11
+ </time>
12
+ </span>
13
+ <span class="w-100 text-end">
14
+ {% if include.sticky == 'true' %}
15
+ <i class="fas fa-thumbtack color-gray-400"></i>
16
+ {% endif %}
17
+ </span>
18
+ </div>
19
+ <p class="color-secondary">
20
+ {% if post.excerpt_separator %}
21
+ {{ post.excerpt | strip_html }}
22
+ {% else %}
23
+ {{ post.content | strip_html | truncate: 200 }}
24
+ {% endif %}
25
+ </p>
26
+ <div class="categories">
27
+ {% for tag in post.tags %}
28
+ <a class="flat" href="{{ '/tags' | site.baseurl }}#{{ tag }}">{{ tag }}</a>
29
+ {% endfor %}
30
+ </div>
31
+ </div>
@@ -0,0 +1,14 @@
1
+ <div class="simple-post-info">
2
+ <h3 class="fw-normal"><a class="color-link-dark" href="{{ post.url | prepend: site.baseurl }}">{{ post.title }}</a></h3>
3
+ <div class="d-flex">
4
+ <span class="info w-100 text-start">
5
+ <time datetime="{{ post.date }}" class="d-inline-block fw-light color-secondary-light">
6
+ <i class="far fa-calendar-alt color-rang1"></i> {{ post.date | date: "%b %d, %y" }}
7
+ </time>
8
+ &nbsp;
9
+ <time datetime="{{ post.date }}" class="d-inline-block fw-light color-secondary-light">
10
+ {{ post.date | date: "%H:%M" }}
11
+ </time>
12
+ </span>
13
+ </div>
14
+ </div>
@@ -0,0 +1,25 @@
1
+ {% assign t = site.data.language[page.lang].t %}
2
+ <li class="d-flex hover-primary" style="padding: .5rem 0">
3
+ <div class="flex-none color-secondary" style="padding: 0 .4rem">
4
+ {{ include.index }}.
5
+ </div>
6
+ <div class="d-flex flex-column w-100">
7
+ <div><a class="hover-color-reversal" style="line-height: 1.4rem;" href="{{ post.url | prepend: site.baseurl }}">{{ post.title }}</a></div>
8
+ <p class="color-secondary-light" style="padding-top: .2rem;">
9
+ {% if post.sticky_subtitle %}
10
+ {{ post.sticky_subtitle }}
11
+ {% else %}
12
+ {{ post.date | date: "%b %d, %Y %H:%M" }}
13
+ {% endif %}
14
+ </p>
15
+ </div>
16
+ <div class="flex-none d-flex flex-column justify-content-center" style="padding: 0 4px;">
17
+ <a
18
+ class="d-inline-block color-secondary-light hover-border"
19
+ style="padding: .4rem 1rem; margin-right: 1rem"
20
+ href="{{ post.url | prepend: site.baseurl }}"
21
+ >
22
+ {{ t.detail_up | default: 'info' }}
23
+ </a>
24
+ </div>
25
+ </li>