jekyll-theme-morph 0.0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
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>