mirror of
https://github.com/cotes2020/chirpy-starter.git
synced 2024-12-05 07:41:18 +10:00
Init commit
This commit is contained in:
commit
32cd3112ba
11
.editorconfig
Normal file
11
.editorconfig
Normal file
@ -0,0 +1,11 @@
|
|||||||
|
root = true
|
||||||
|
|
||||||
|
[*]
|
||||||
|
charset = utf-8
|
||||||
|
# 2 space indentation
|
||||||
|
indent_style = space
|
||||||
|
indent_size = 2
|
||||||
|
trim_trailing_whitespace = true
|
||||||
|
# Unix-style newlines with a newline ending every file
|
||||||
|
end_of_line = lf
|
||||||
|
insert_final_newline = true
|
16
.gitattributes
vendored
Normal file
16
.gitattributes
vendored
Normal file
@ -0,0 +1,16 @@
|
|||||||
|
# Set default behavior to automatically normalize line endings.
|
||||||
|
* text=auto
|
||||||
|
|
||||||
|
# Force bash scripts to always use LF line endings so that if a repo is accessed
|
||||||
|
# in Unix via a file share from Windows, the scripts will work.
|
||||||
|
*.sh text eol=lf
|
||||||
|
|
||||||
|
# Force batch scripts to always use CRLF line endings so that if a repo is accessed
|
||||||
|
# in Windows via a file share from Linux, the scripts will work.
|
||||||
|
*.{cmd,[cC][mM][dD]} text eol=crlf
|
||||||
|
*.{bat,[bB][aA][tT]} text eol=crlf
|
||||||
|
|
||||||
|
# Denote all files that are truly binary and should not be modified.
|
||||||
|
*.png binary
|
||||||
|
*.jpg binary
|
||||||
|
*.ico binary
|
68
.github/workflows/pages-deploy.yml
vendored
Normal file
68
.github/workflows/pages-deploy.yml
vendored
Normal file
@ -0,0 +1,68 @@
|
|||||||
|
name: 'Automatic build'
|
||||||
|
on:
|
||||||
|
push:
|
||||||
|
branches:
|
||||||
|
- main
|
||||||
|
paths-ignore:
|
||||||
|
- .gitignore
|
||||||
|
- README.md
|
||||||
|
- LICENSE
|
||||||
|
|
||||||
|
jobs:
|
||||||
|
continuous-delivery:
|
||||||
|
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
|
||||||
|
env:
|
||||||
|
GEMS_PATH: ~/vendor/bundle
|
||||||
|
|
||||||
|
steps:
|
||||||
|
- name: Checkout
|
||||||
|
uses: actions/checkout@v2
|
||||||
|
with:
|
||||||
|
fetch-depth: 0 # for posts's lastmod
|
||||||
|
|
||||||
|
- name: Setup Ruby
|
||||||
|
uses: actions/setup-ruby@v1
|
||||||
|
with:
|
||||||
|
ruby-version: 2.7
|
||||||
|
|
||||||
|
- name: Bundle Caching
|
||||||
|
uses: actions/cache@v2
|
||||||
|
with:
|
||||||
|
path: ${{ env.GEMS_PATH }}
|
||||||
|
key: ${{ runner.os }}-gems-${{ hashFiles('**/Gemfile.lock') }}
|
||||||
|
restore-keys: |
|
||||||
|
${{ runner.os }}-gems-
|
||||||
|
|
||||||
|
- name: Bundle Install
|
||||||
|
run: |
|
||||||
|
bundle config path ${{ env.GEMS_PATH }}
|
||||||
|
bundle install --jobs 4 --retry 3
|
||||||
|
|
||||||
|
- name: Check baseurl
|
||||||
|
run: |
|
||||||
|
baseurl="$(grep '^baseurl:' _config.yml | sed "s/.*: *//;s/['\"]//g;s/#.*//")"
|
||||||
|
if [[ -n $baseurl ]]; then
|
||||||
|
echo "BASE_URL=$baseurl" >> $GITHUB_ENV
|
||||||
|
fi
|
||||||
|
|
||||||
|
- name: Build Site
|
||||||
|
env:
|
||||||
|
JEKYLL_ENV: production
|
||||||
|
run: |
|
||||||
|
bundle exec jekyll b -d "_site$BASE_URL"
|
||||||
|
|
||||||
|
- name: Test Site
|
||||||
|
run: |
|
||||||
|
bash tools/test.sh
|
||||||
|
|
||||||
|
- name: Deploy
|
||||||
|
run: |
|
||||||
|
if [[ -n $BASE_URL ]]; then
|
||||||
|
mv _site$BASE_URL _site-rename
|
||||||
|
rm -rf _site
|
||||||
|
mv _site-rename _site
|
||||||
|
fi
|
||||||
|
|
||||||
|
bash tools/deploy.sh
|
14
.gitignore
vendored
Normal file
14
.gitignore
vendored
Normal file
@ -0,0 +1,14 @@
|
|||||||
|
# hidden files
|
||||||
|
.*
|
||||||
|
!.github
|
||||||
|
|
||||||
|
# jekyll cache
|
||||||
|
_site
|
||||||
|
vendor
|
||||||
|
|
||||||
|
# rubygem
|
||||||
|
*.gem
|
||||||
|
|
||||||
|
# npm dependencies
|
||||||
|
node_modules
|
||||||
|
package-lock.json
|
20
404.html
Normal file
20
404.html
Normal file
@ -0,0 +1,20 @@
|
|||||||
|
---
|
||||||
|
layout: page
|
||||||
|
title: "404: Page not found"
|
||||||
|
permalink: /404.html
|
||||||
|
|
||||||
|
redirect_from:
|
||||||
|
- /norobots/
|
||||||
|
- /assets/
|
||||||
|
- /tabs/
|
||||||
|
- /categories/
|
||||||
|
- /tags/
|
||||||
|
- /posts/
|
||||||
|
|
||||||
|
dynamic_title: true
|
||||||
|
---
|
||||||
|
|
||||||
|
<div class="lead">
|
||||||
|
<p>Sorry, we've misplaced that URL or it's pointing to something that doesn't exist. </p>
|
||||||
|
<p><a href="{{ site.baseurl }}/">Head back Home</a> to try finding it again, or search for it on the <a href="{{ site.baseurl }}/tabs/archives">Archives page</a>.</p>
|
||||||
|
</div>
|
22
Gemfile
Normal file
22
Gemfile
Normal file
@ -0,0 +1,22 @@
|
|||||||
|
source "https://rubygems.org"
|
||||||
|
|
||||||
|
gem "jekyll-theme-chirpy"
|
||||||
|
|
||||||
|
# If you have any plugins, put them here!
|
||||||
|
group :jekyll_plugins do
|
||||||
|
# gem "jekyll-xxx", "~> x.y"
|
||||||
|
end
|
||||||
|
|
||||||
|
group :test do
|
||||||
|
gem "html-proofer", "~> 3.18"
|
||||||
|
end
|
||||||
|
|
||||||
|
# Windows and JRuby does not include zoneinfo files, so bundle the tzinfo-data gem
|
||||||
|
# and associated library.
|
||||||
|
install_if -> { RUBY_PLATFORM =~ %r!mingw|mswin|java! } do
|
||||||
|
gem "tzinfo", "~> 1.2"
|
||||||
|
gem "tzinfo-data"
|
||||||
|
end
|
||||||
|
|
||||||
|
# # # Performance-booster for watching directories on Windows
|
||||||
|
gem "wdm", "~> 0.1.1", :install_if => Gem.win_platform?
|
21
LICENSE
Normal file
21
LICENSE
Normal file
@ -0,0 +1,21 @@
|
|||||||
|
MIT License
|
||||||
|
|
||||||
|
Copyright (c) 2021 Cotes Chung
|
||||||
|
|
||||||
|
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||||
|
of this software and associated documentation files (the "Software"), to deal
|
||||||
|
in the Software without restriction, including without limitation the rights
|
||||||
|
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||||
|
copies of the Software, and to permit persons to whom the Software is
|
||||||
|
furnished to do so, subject to the following conditions:
|
||||||
|
|
||||||
|
The above copyright notice and this permission notice shall be included in all
|
||||||
|
copies or substantial portions of the Software.
|
||||||
|
|
||||||
|
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||||
|
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||||
|
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||||
|
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||||
|
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||||
|
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||||
|
SOFTWARE.
|
88
README.md
Normal file
88
README.md
Normal file
@ -0,0 +1,88 @@
|
|||||||
|
# Chirpy Starter
|
||||||
|
|
||||||
|
The startup template for [**Jekyll Theme Chirpy**][chirpy].
|
||||||
|
|
||||||
|
When installing the `jekyll-theme-chirpy` through [RubyGem][gem], Jekyll can only read files in the folders `_includes`, `_layout`, `_sass` and `assets`, as well as a small part of variables of the file `_config.yml` from the theme's gem (use the command `bundle info --path jekyll-theme-chirpy` to locate). To fully use all the features of `jekyll-theme-chirpy`, you also need to copy other files/directories and site variables from the theme's gem to your Jekyll site. This will be boring, so we extract all the other required things of the theme's gem to help you quickly use `jekyll-theme-chirpy`.
|
||||||
|
|
||||||
|
[gem]: https://rubygems.org/gems/jekyll-theme-chirpy
|
||||||
|
[chirpy]: https://github.com/cotes2020/jekyll-theme-chirpy/
|
||||||
|
|
||||||
|
**File Directory Struct**
|
||||||
|
|
||||||
|
```shell
|
||||||
|
.
|
||||||
|
├── .github
|
||||||
|
│ └── workflows
|
||||||
|
│ └── pages-deploy.yml # the GitHub Actions workflow
|
||||||
|
├── Gemfile
|
||||||
|
├── LICENSE
|
||||||
|
├── README.md # this file
|
||||||
|
├── _config.yml # all variables are from the theme's gem, except the option `theme`
|
||||||
|
├── _data # from the theme's gem
|
||||||
|
├── _plugins # idem
|
||||||
|
├── _tabs # idem
|
||||||
|
├── app.js # idem
|
||||||
|
├── feed.xml # idem
|
||||||
|
├── index.html # idem
|
||||||
|
├── 404.html # idem
|
||||||
|
├── robots.txt # idem
|
||||||
|
└── sw.js # idem
|
||||||
|
|
||||||
|
```
|
||||||
|
|
||||||
|
## Installation
|
||||||
|
|
||||||
|
[Use this template][usetemplate] to generate a new repository, and then execute:
|
||||||
|
|
||||||
|
[usetemplate]: https://github.com/cotes2020/chirpy-starter/generate
|
||||||
|
|
||||||
|
```
|
||||||
|
$ bundle
|
||||||
|
```
|
||||||
|
|
||||||
|
## Usage
|
||||||
|
|
||||||
|
### Customing Stylesheet
|
||||||
|
|
||||||
|
Creare a new file `/assets/css/style.scss` in your Jekyll site.
|
||||||
|
|
||||||
|
And then add the following content:
|
||||||
|
|
||||||
|
```scss
|
||||||
|
---
|
||||||
|
---
|
||||||
|
|
||||||
|
@import {{ site.theme }}
|
||||||
|
|
||||||
|
// add your style below
|
||||||
|
```
|
||||||
|
|
||||||
|
### Changing the Number of Tabs
|
||||||
|
|
||||||
|
When adding or deleting files in the `_tabs` folder, you need to complete [Custom Stylesheet](#custom-stylesheet) first, and then add a new line before `@import`:
|
||||||
|
|
||||||
|
```scss
|
||||||
|
$tab-count: {{ site.tabs | size | plus: 1 }};
|
||||||
|
```
|
||||||
|
|
||||||
|
### Publishing to GitHub Pages
|
||||||
|
|
||||||
|
See the `jekyll-theme-chirpy`'s [deployment instructions](https://github.com/cotes2020/jekyll-theme-chirpy#deployment). Note that in order to use GitHub Actions caching to speed up the deployment, you should add the `Gemfile.lock` file to your repository.
|
||||||
|
|
||||||
|
### Updating
|
||||||
|
|
||||||
|
Please note that files and directories in this project may change as the [`jekyll-theme-chirpy`][chirpy] is updated. When updating, please ensure that the file directory structure of your Jekyll site is the same as that of this project.
|
||||||
|
|
||||||
|
And then execute:
|
||||||
|
|
||||||
|
```console
|
||||||
|
$ bundle update jekyll-theme-chirpy
|
||||||
|
```
|
||||||
|
|
||||||
|
## Documentation
|
||||||
|
|
||||||
|
See the [theme's docs](https://github.com/cotes2020/jekyll-theme-chirpy#documentation).
|
||||||
|
|
||||||
|
## License
|
||||||
|
|
||||||
|
This work is published under [MIT](https://github.com/cotes2020/chirpy-starter/blob/master/LICENSE) License.
|
207
_config.yml
Normal file
207
_config.yml
Normal file
@ -0,0 +1,207 @@
|
|||||||
|
# import theme
|
||||||
|
theme: jekyll-theme-chirpy
|
||||||
|
|
||||||
|
# The Site Configuration
|
||||||
|
|
||||||
|
# jekyll-seo-tag settings › https://github.com/jekyll/jekyll-seo-tag/blob/master/docs/usage.md
|
||||||
|
# --------------------------
|
||||||
|
title: Chirpy # the main title
|
||||||
|
|
||||||
|
tagline: A text-focused Jekyll theme # it will display as the sub-title
|
||||||
|
|
||||||
|
description: >- # used by seo meta and the atom feed
|
||||||
|
A minimal, portfolio, sidebar,
|
||||||
|
bootstrap Jekyll theme with responsive web design
|
||||||
|
and focuses on text presentation.
|
||||||
|
|
||||||
|
# fill in the protocol & hostname for your site, e.g., 'https://username.github.io'
|
||||||
|
url: ''
|
||||||
|
|
||||||
|
author: your_full_name # change to your full name
|
||||||
|
|
||||||
|
github:
|
||||||
|
username: github_username # change to your github username
|
||||||
|
|
||||||
|
twitter:
|
||||||
|
username: twitter_username # change to your twitter username
|
||||||
|
|
||||||
|
social:
|
||||||
|
name: your_full_name # it will shows as the copyright owner in Footer
|
||||||
|
email: example@doamin.com # change to your email address
|
||||||
|
links:
|
||||||
|
# The first element serves as the copyright owner's link
|
||||||
|
- https://twitter.com/username # change to your twitter homepage
|
||||||
|
- https://github.com/username # change to your github homepage
|
||||||
|
# Uncomment below to add more social links
|
||||||
|
# - https://www.facebook.com/username
|
||||||
|
# - https://www.linkedin.com/in/username
|
||||||
|
|
||||||
|
google_site_verification: google_meta_tag_verification # change to your verification string
|
||||||
|
# --------------------------
|
||||||
|
|
||||||
|
|
||||||
|
# Only if your site type is GitHub Project sites and doesn't have a custom domain,
|
||||||
|
# change below value to '/projectname'.
|
||||||
|
baseurl: ''
|
||||||
|
|
||||||
|
# Change to your timezone › http://www.timezoneconverter.com/cgi-bin/findzone/findzone
|
||||||
|
timezone: Asia/Shanghai
|
||||||
|
|
||||||
|
google_analytics:
|
||||||
|
id: '' # Fill with your Google Analytics ID
|
||||||
|
pv:
|
||||||
|
# The Google Analytics pageviews switch.
|
||||||
|
# DO NOT enable it unless you know how to deploy the Google Analytics superProxy.
|
||||||
|
enabled: false
|
||||||
|
# the next options only valid when `google_analytics.pv` is enabled.
|
||||||
|
proxy_url: ''
|
||||||
|
proxy_endpoint: ''
|
||||||
|
cache: false # pv data local cache, good for the users from GFW area.
|
||||||
|
|
||||||
|
disqus:
|
||||||
|
comments: false # boolean type, the global switch for posts comments.
|
||||||
|
shortname: '' # Fill with your Disqus shortname. › https://help.disqus.com/en/articles/1717111-what-s-a-shortname
|
||||||
|
|
||||||
|
|
||||||
|
# Prefer color scheme setting.
|
||||||
|
#
|
||||||
|
# Note: Keep empty will follow the system prefer color by default,
|
||||||
|
# and there will be a toggle to switch the theme between dark and light
|
||||||
|
# on the bottom left of the sidebar.
|
||||||
|
#
|
||||||
|
# Available options:
|
||||||
|
#
|
||||||
|
# light - Use the light color scheme
|
||||||
|
#
|
||||||
|
# dark - Use the dark color scheme
|
||||||
|
#
|
||||||
|
theme_mode: # [light|dark]
|
||||||
|
|
||||||
|
# The CDN endpoint for images.
|
||||||
|
# Notice that once it is assigned, the CDN url
|
||||||
|
# will be added to all image (site avatar & posts' images) paths starting with '/'
|
||||||
|
#
|
||||||
|
# e.g. 'https://cdn.com'
|
||||||
|
img_cdn: ''
|
||||||
|
|
||||||
|
# the avatar on sidebar, support local or CORS resources
|
||||||
|
avatar: https://cdn.jsdelivr.net/gh/cotes2020/chirpy-images/commons/avatar.jpg
|
||||||
|
|
||||||
|
# boolean type, the global switch for ToC in posts.
|
||||||
|
toc: true
|
||||||
|
|
||||||
|
paginate: 10
|
||||||
|
|
||||||
|
kramdown:
|
||||||
|
syntax_highlighter: rouge
|
||||||
|
syntax_highlighter_opts: # Rouge Options › https://github.com/jneen/rouge#full-options
|
||||||
|
css_class: highlight
|
||||||
|
# default_lang: console
|
||||||
|
span:
|
||||||
|
line_numbers: false
|
||||||
|
block:
|
||||||
|
line_numbers: true
|
||||||
|
start_line: 1
|
||||||
|
|
||||||
|
# DO NOT change this unless you're a Pro user on Jekyll and Web development,
|
||||||
|
# or you think you're smart enough to change other relevant URLs within this template.
|
||||||
|
permalink: /posts/:title/
|
||||||
|
|
||||||
|
collections:
|
||||||
|
tabs:
|
||||||
|
output: true
|
||||||
|
sort_by: order
|
||||||
|
|
||||||
|
|
||||||
|
defaults:
|
||||||
|
-
|
||||||
|
scope:
|
||||||
|
path: '' # An empty string here means all files in the project
|
||||||
|
type: posts
|
||||||
|
values:
|
||||||
|
layout: post
|
||||||
|
comments: true # Enable comments in posts.
|
||||||
|
toc: true # Display TOC column in posts.
|
||||||
|
breadcrumb:
|
||||||
|
-
|
||||||
|
label: Posts
|
||||||
|
url: /
|
||||||
|
-
|
||||||
|
scope:
|
||||||
|
path: _drafts
|
||||||
|
values:
|
||||||
|
comments: false
|
||||||
|
-
|
||||||
|
scope:
|
||||||
|
path: index.html
|
||||||
|
values:
|
||||||
|
breadcrumb:
|
||||||
|
-
|
||||||
|
label: Posts
|
||||||
|
-
|
||||||
|
scope:
|
||||||
|
path: tags
|
||||||
|
values:
|
||||||
|
breadcrumb:
|
||||||
|
-
|
||||||
|
label: Home
|
||||||
|
url: /
|
||||||
|
-
|
||||||
|
label: Tags
|
||||||
|
url: /tabs/tags/
|
||||||
|
-
|
||||||
|
scope:
|
||||||
|
path: categories
|
||||||
|
values:
|
||||||
|
breadcrumb:
|
||||||
|
-
|
||||||
|
label: Home
|
||||||
|
url: /
|
||||||
|
-
|
||||||
|
label: Categories
|
||||||
|
url: /tabs/categories/
|
||||||
|
-
|
||||||
|
scope:
|
||||||
|
path: ''
|
||||||
|
type: tabs # see `site.collections`
|
||||||
|
values:
|
||||||
|
layout: page
|
||||||
|
dynamic_title: true # Hide title in mobile screens.
|
||||||
|
breadcrumb:
|
||||||
|
-
|
||||||
|
label: Home
|
||||||
|
url: /
|
||||||
|
|
||||||
|
sass:
|
||||||
|
style: compressed
|
||||||
|
|
||||||
|
compress_html:
|
||||||
|
clippings: all
|
||||||
|
comments: all
|
||||||
|
endings: all
|
||||||
|
profile: false
|
||||||
|
blanklines: false
|
||||||
|
ignore:
|
||||||
|
envs: [development]
|
||||||
|
|
||||||
|
exclude:
|
||||||
|
- vendor
|
||||||
|
- Gemfile.lock
|
||||||
|
- Gemfile
|
||||||
|
- tools
|
||||||
|
- docs
|
||||||
|
- README.md
|
||||||
|
- LICENSE
|
||||||
|
- gulpfile.js
|
||||||
|
- node_modules
|
||||||
|
- package.json
|
||||||
|
- package-lock.json
|
||||||
|
|
||||||
|
jekyll-archives:
|
||||||
|
enabled: [categories, tags]
|
||||||
|
layouts:
|
||||||
|
category: category
|
||||||
|
tag: tag
|
||||||
|
permalinks:
|
||||||
|
tag: /tags/:name/
|
||||||
|
category: /categories/:name/
|
30
_data/contact.yml
Normal file
30
_data/contact.yml
Normal file
@ -0,0 +1,30 @@
|
|||||||
|
# The contact options.
|
||||||
|
|
||||||
|
-
|
||||||
|
type: github
|
||||||
|
icon: 'fab fa-github-alt'
|
||||||
|
-
|
||||||
|
type: twitter
|
||||||
|
icon: 'fab fa-twitter'
|
||||||
|
-
|
||||||
|
type: email
|
||||||
|
icon: 'fas fa-envelope'
|
||||||
|
noblank: true # open link in current tab
|
||||||
|
-
|
||||||
|
type: rss
|
||||||
|
icon: 'fas fa-rss'
|
||||||
|
noblank: true
|
||||||
|
|
||||||
|
# Uncomment and complete the url below to enable more contact options
|
||||||
|
# -
|
||||||
|
# type: mastodon
|
||||||
|
# icon: 'fab fa-mastodon' # icons powered by <https://fontawesome.com/>
|
||||||
|
# url: '' # Fill with your mastodon account page
|
||||||
|
# -
|
||||||
|
# type: linkedin
|
||||||
|
# icon: 'fab fa-linkedin' # icons powered by <https://fontawesome.com/>
|
||||||
|
# url: '' # Fill with your Linkedin homepage
|
||||||
|
# -
|
||||||
|
# type: stack-overflow
|
||||||
|
# icon: 'fab fa-stack-overflow'
|
||||||
|
# url: '' # Fill with your stackoverflow homepage
|
7
_data/date_format.yml
Normal file
7
_data/date_format.yml
Normal file
@ -0,0 +1,7 @@
|
|||||||
|
# The date format
|
||||||
|
|
||||||
|
tooltip: "%a, %b %e, %Y, %l:%M %p %z"
|
||||||
|
|
||||||
|
post:
|
||||||
|
long: "%b %e, %Y"
|
||||||
|
short: "%b %e"
|
19
_data/label.yml
Normal file
19
_data/label.yml
Normal file
@ -0,0 +1,19 @@
|
|||||||
|
# The label text of site.
|
||||||
|
|
||||||
|
panel:
|
||||||
|
lastmod: Recent Update
|
||||||
|
trending_tags: Trending Tags
|
||||||
|
toc: Contents
|
||||||
|
|
||||||
|
post:
|
||||||
|
relate_posts: Further Reading
|
||||||
|
share: Share
|
||||||
|
button:
|
||||||
|
next: Newer
|
||||||
|
previous: Older
|
||||||
|
|
||||||
|
search_hint: Search # text show on search bar
|
||||||
|
|
||||||
|
pin_prompt: Pinned # pinned prompt
|
||||||
|
|
||||||
|
read_time_unit: min # see posts' time to read
|
11
_data/rights.yml
Normal file
11
_data/rights.yml
Normal file
@ -0,0 +1,11 @@
|
|||||||
|
# License data
|
||||||
|
|
||||||
|
license:
|
||||||
|
name: CC BY 4.0
|
||||||
|
link: "https://creativecommons.org/licenses/by/4.0/"
|
||||||
|
|
||||||
|
brief: Some rights reserved.
|
||||||
|
|
||||||
|
verbose: >-
|
||||||
|
Except where otherwise noted, the blog posts on this site are licensed
|
||||||
|
under the Creative Commons Attribution 4.0 International (CC BY 4.0) License by the author.
|
27
_data/share.yml
Normal file
27
_data/share.yml
Normal file
@ -0,0 +1,27 @@
|
|||||||
|
# Sharing options at the bottom of the post.
|
||||||
|
# Icons from <https://fontawesome.com/>
|
||||||
|
|
||||||
|
platforms:
|
||||||
|
-
|
||||||
|
type: Twitter
|
||||||
|
icon: "fab fa-twitter"
|
||||||
|
link: "https://twitter.com/intent/tweet?text=TITLE&url=URL"
|
||||||
|
-
|
||||||
|
type: Facebook
|
||||||
|
icon: "fab fa-facebook-square"
|
||||||
|
link: "https://www.facebook.com/sharer/sharer.php?title=TITLE&u=URL"
|
||||||
|
-
|
||||||
|
type: Telegram
|
||||||
|
icon: "fab fa-telegram"
|
||||||
|
link: "https://telegram.me/share?text=TITLE&url=URL"
|
||||||
|
|
||||||
|
# Uncomment below if you need to.
|
||||||
|
# -
|
||||||
|
# type: Linkedin
|
||||||
|
# icon: "fab fa-linkedin"
|
||||||
|
# link: "https://www.linkedin.com/sharing/share-offsite/?url=URL"
|
||||||
|
#
|
||||||
|
# -
|
||||||
|
# type: Weibo
|
||||||
|
# icon: "fab fa-weibo"
|
||||||
|
# link: "http://service.weibo.com/share/share.php?title=TITLE&url=URL"
|
14
_plugins/posts-lastmod-hook.rb
Normal file
14
_plugins/posts-lastmod-hook.rb
Normal file
@ -0,0 +1,14 @@
|
|||||||
|
#!/usr/bin/env ruby
|
||||||
|
#
|
||||||
|
# Check for changed posts
|
||||||
|
|
||||||
|
Jekyll::Hooks.register :posts, :post_init do |post|
|
||||||
|
|
||||||
|
commit_num = `git rev-list --count HEAD "#{ post.path }"`
|
||||||
|
|
||||||
|
if commit_num.to_i > 1
|
||||||
|
lastmod_date = `git log -1 --pretty="%ad" --date=iso "#{ post.path }"`
|
||||||
|
post.data['last_modified_at'] = lastmod_date
|
||||||
|
end
|
||||||
|
|
||||||
|
end
|
1
_posts/.placeholder
Normal file
1
_posts/.placeholder
Normal file
@ -0,0 +1 @@
|
|||||||
|
|
8
_tabs/about.md
Normal file
8
_tabs/about.md
Normal file
@ -0,0 +1,8 @@
|
|||||||
|
---
|
||||||
|
title: About
|
||||||
|
icon: fas fa-info
|
||||||
|
order: 4
|
||||||
|
---
|
||||||
|
|
||||||
|
|
||||||
|
> **Note**: Add Markdown syntax content to file `_tabs/about.md` and it will show up on this page.
|
7
_tabs/archives.md
Normal file
7
_tabs/archives.md
Normal file
@ -0,0 +1,7 @@
|
|||||||
|
---
|
||||||
|
layout: archives
|
||||||
|
title: Archives
|
||||||
|
icon: fas fa-archive
|
||||||
|
order: 3
|
||||||
|
---
|
||||||
|
|
6
_tabs/categories.md
Normal file
6
_tabs/categories.md
Normal file
@ -0,0 +1,6 @@
|
|||||||
|
---
|
||||||
|
layout: categories
|
||||||
|
title: Categories
|
||||||
|
icon: fas fa-stream
|
||||||
|
order: 1
|
||||||
|
---
|
6
_tabs/tags.md
Normal file
6
_tabs/tags.md
Normal file
@ -0,0 +1,6 @@
|
|||||||
|
---
|
||||||
|
layout: tags
|
||||||
|
title: Tags
|
||||||
|
icon: fas fa-tags
|
||||||
|
order: 2
|
||||||
|
---
|
8
app.js
Normal file
8
app.js
Normal file
@ -0,0 +1,8 @@
|
|||||||
|
---
|
||||||
|
layout: compress
|
||||||
|
---
|
||||||
|
|
||||||
|
/* Registering Service Worker */
|
||||||
|
if('serviceWorker' in navigator) {
|
||||||
|
navigator.serviceWorker.register('{{ "/sw.js" | relative_url }}');
|
||||||
|
};
|
60
feed.xml
Normal file
60
feed.xml
Normal file
@ -0,0 +1,60 @@
|
|||||||
|
---
|
||||||
|
layout: compress
|
||||||
|
# Atom Feed, reference: https://validator.w3.org/feed/docs/atom.html
|
||||||
|
---
|
||||||
|
|
||||||
|
{% capture source %}
|
||||||
|
<feed xmlns="http://www.w3.org/2005/Atom">
|
||||||
|
<id>{{ "/" | absolute_url }}</id>
|
||||||
|
<title>{{ site.title }}</title>
|
||||||
|
<subtitle>{{ site.description }}</subtitle>
|
||||||
|
<updated>{{ site.time | date_to_xmlschema }}</updated>
|
||||||
|
<author>
|
||||||
|
<name>{{ site.author }}</name>
|
||||||
|
<uri>{{ "/" | absolute_url }}</uri>
|
||||||
|
</author>
|
||||||
|
<link rel="self" type="application/atom+xml" href="{{ page.url | absolute_url }}"/>
|
||||||
|
<link rel="alternate" type="text/html" hreflang="{{ site.lang | default: 'en' }}"
|
||||||
|
href="{{ '/' | absolute_url }}"/>
|
||||||
|
<generator uri="https://jekyllrb.com/" version="{{ jekyll.version }}">Jekyll</generator>
|
||||||
|
<rights> © {{ 'now' | date: '%Y' }} {{ site.author }} </rights>
|
||||||
|
<icon>{{ site.baseurl }}/assets/img/favicons/favicon.ico</icon>
|
||||||
|
<logo>{{ site.baseurl }}/assets/img/favicons/favicon-96x96.png</logo>
|
||||||
|
|
||||||
|
{% for post in site.posts limit: 5 %}
|
||||||
|
{% assign post_absolute_url = post.url | absolute_url %}
|
||||||
|
<entry>
|
||||||
|
<title>{{ post.title }}</title>
|
||||||
|
<link href="{{ post_absolute_url }}" rel="alternate" type="text/html" title="{{ post.title }}" />
|
||||||
|
<published>{{ post.date | date_to_xmlschema }}</published>
|
||||||
|
{% if post.last_modified_at %}
|
||||||
|
<updated>{{ post.last_modified_at | date_to_xmlschema }}</updated>
|
||||||
|
{% else %}
|
||||||
|
<updated>{{ post.date | date_to_xmlschema }}</updated>
|
||||||
|
{% endif %}
|
||||||
|
<id>{{ post_absolute_url }}</id>
|
||||||
|
<content src="{{ post_absolute_url }}" />
|
||||||
|
<author>
|
||||||
|
<name>{{ site.author }}</name>
|
||||||
|
</author>
|
||||||
|
|
||||||
|
{% if post.categories %}
|
||||||
|
{% for category in post.categories %}
|
||||||
|
<category term="{{ category }}" />
|
||||||
|
{% endfor %}
|
||||||
|
{% endif %}
|
||||||
|
|
||||||
|
{% if post.summary %}
|
||||||
|
<summary>{{ post.summary | strip }}</summary>
|
||||||
|
{% else %}
|
||||||
|
<summary>
|
||||||
|
{% include no-linenos.html content=post.content %}
|
||||||
|
{{ content | strip_html | truncate: 400 }}
|
||||||
|
</summary>
|
||||||
|
{% endif %}
|
||||||
|
|
||||||
|
</entry>
|
||||||
|
{% endfor %}
|
||||||
|
</feed>
|
||||||
|
{% endcapture %}
|
||||||
|
{{ source | replace: '&', '&' }}
|
4
index.html
Normal file
4
index.html
Normal file
@ -0,0 +1,4 @@
|
|||||||
|
---
|
||||||
|
layout: home
|
||||||
|
# Index page
|
||||||
|
---
|
10
robots.txt
Normal file
10
robots.txt
Normal file
@ -0,0 +1,10 @@
|
|||||||
|
---
|
||||||
|
permalink: robots.txt
|
||||||
|
# The robots rules
|
||||||
|
---
|
||||||
|
|
||||||
|
User-agent: *
|
||||||
|
|
||||||
|
Disallow: /norobots/
|
||||||
|
|
||||||
|
Sitemap: {{ '/sitemap.xml' | absolute_url }}
|
61
sw.js
Normal file
61
sw.js
Normal file
@ -0,0 +1,61 @@
|
|||||||
|
---
|
||||||
|
layout: compress
|
||||||
|
# PWA service worker
|
||||||
|
---
|
||||||
|
|
||||||
|
self.importScripts('{{ "/assets/js/data/cache-list.js" | relative_url }}');
|
||||||
|
|
||||||
|
var cacheName = 'chirpy-{{ "now" | date: "%Y%m%d.%H%M" }}';
|
||||||
|
|
||||||
|
|
||||||
|
function isExcluded(url) {
|
||||||
|
const regex = /(^http(s)?|^\/)/; /* the regex for CORS url or relative url */
|
||||||
|
for (const rule of exclude) {
|
||||||
|
if (!regex.test(url) ||
|
||||||
|
url.indexOf(rule) != -1) {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
self.addEventListener('install', (e) => {
|
||||||
|
self.skipWaiting();
|
||||||
|
e.waitUntil(
|
||||||
|
caches.open(cacheName).then((cache) => {
|
||||||
|
return cache.addAll(include);
|
||||||
|
})
|
||||||
|
);
|
||||||
|
});
|
||||||
|
|
||||||
|
|
||||||
|
self.addEventListener('fetch', (e) => {
|
||||||
|
e.respondWith(
|
||||||
|
caches.match(e.request).then((r) => {
|
||||||
|
/* console.log('[Service Worker] Fetching resource: ' + e.request.url); */
|
||||||
|
return r || fetch(e.request).then((response) => {
|
||||||
|
return caches.open(cacheName).then((cache) => {
|
||||||
|
if (!isExcluded(e.request.url)) {
|
||||||
|
/* console.log('[Service Worker] Caching new resource: ' + e.request.url); */
|
||||||
|
cache.put(e.request, response.clone());
|
||||||
|
}
|
||||||
|
return response;
|
||||||
|
});
|
||||||
|
});
|
||||||
|
})
|
||||||
|
);
|
||||||
|
});
|
||||||
|
|
||||||
|
|
||||||
|
self.addEventListener('activate', (e) => {
|
||||||
|
e.waitUntil(
|
||||||
|
caches.keys().then((keyList) => {
|
||||||
|
return Promise.all(keyList.map((key) => {
|
||||||
|
if(key !== cacheName) {
|
||||||
|
return caches.delete(key);
|
||||||
|
}
|
||||||
|
}));
|
||||||
|
})
|
||||||
|
);
|
||||||
|
});
|
73
tools/deploy.sh
Executable file
73
tools/deploy.sh
Executable file
@ -0,0 +1,73 @@
|
|||||||
|
#!/usr/bin/env bash
|
||||||
|
#
|
||||||
|
# Deploy the content of _site to 'origin/<pages_branch>'
|
||||||
|
|
||||||
|
set -eu
|
||||||
|
|
||||||
|
PAGES_BRANCH="gh-pages"
|
||||||
|
|
||||||
|
_no_branch=false
|
||||||
|
_backup_dir="$(mktemp -d)"
|
||||||
|
|
||||||
|
init() {
|
||||||
|
if [[ -z ${GITHUB_ACTION+x} ]]; then
|
||||||
|
echo "ERROR: This script is not allowed to run outside of GitHub Action."
|
||||||
|
exit -1
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Gemfile could be changed by `bundle install` in actions workflow
|
||||||
|
if [[ -n $(git ls-files | grep Gemfile.lock) && -n \
|
||||||
|
$(git status Gemfile.lock --porcelain) ]]; then
|
||||||
|
git checkout -- Gemfile.lock
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [[ -z $(git branch -av | grep "$PAGES_BRANCH") ]]; then
|
||||||
|
_no_branch=true
|
||||||
|
git checkout -b "$PAGES_BRANCH"
|
||||||
|
else
|
||||||
|
git checkout "$PAGES_BRANCH"
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
backup() {
|
||||||
|
mv _site/* "$_backup_dir"
|
||||||
|
mv .git "$_backup_dir"
|
||||||
|
|
||||||
|
# When adding custom domain from Github website,
|
||||||
|
# the CANME only exist on `gh-pages` branch
|
||||||
|
if [[ -f CNAME ]]; then
|
||||||
|
mv CNAME "$_backup_dir"
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
flush() {
|
||||||
|
rm -rf ./*
|
||||||
|
rm -rf .[^.] .??*
|
||||||
|
|
||||||
|
shopt -s dotglob nullglob
|
||||||
|
mv "$_backup_dir"/* .
|
||||||
|
}
|
||||||
|
|
||||||
|
deploy() {
|
||||||
|
git config --global user.name "GitHub Actions"
|
||||||
|
git config --global user.email "41898282+github-actions[bot]@users.noreply.github.com"
|
||||||
|
|
||||||
|
git update-ref -d HEAD
|
||||||
|
git add -A
|
||||||
|
git commit -m "[Automation] Site update No.${GITHUB_RUN_NUMBER}"
|
||||||
|
|
||||||
|
if $_no_branch; then
|
||||||
|
git push -u origin "$PAGES_BRANCH"
|
||||||
|
else
|
||||||
|
git push -f
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
main() {
|
||||||
|
init
|
||||||
|
backup
|
||||||
|
flush
|
||||||
|
deploy
|
||||||
|
}
|
||||||
|
|
||||||
|
main
|
67
tools/test.sh
Executable file
67
tools/test.sh
Executable file
@ -0,0 +1,67 @@
|
|||||||
|
#!/usr/bin/env bash
|
||||||
|
#
|
||||||
|
# Using HTML-proofer to test site.
|
||||||
|
#
|
||||||
|
# Requirement: https://github.com/gjtorikian/html-proofer
|
||||||
|
#
|
||||||
|
# Usage: bash /path/to/test.sh [indicated path]
|
||||||
|
|
||||||
|
DEST=_site
|
||||||
|
URL_IGNORE=cdn.jsdelivr.net
|
||||||
|
|
||||||
|
_build=false
|
||||||
|
|
||||||
|
help() {
|
||||||
|
echo "Usage:"
|
||||||
|
echo
|
||||||
|
echo " bash ./tools/test.sh [options]"
|
||||||
|
echo
|
||||||
|
echo "Options:"
|
||||||
|
echo " --build Run Jekyll build before test."
|
||||||
|
echo " -d, --dir <path> Specify the test path."
|
||||||
|
echo " -h, --help Print this information."
|
||||||
|
}
|
||||||
|
|
||||||
|
if [[ -n $1 && -d $1 ]]; then
|
||||||
|
DEST=$1
|
||||||
|
fi
|
||||||
|
|
||||||
|
while (($#)); do
|
||||||
|
opt="$1"
|
||||||
|
case $opt in
|
||||||
|
--build)
|
||||||
|
_build=true
|
||||||
|
shift
|
||||||
|
;;
|
||||||
|
-d | --dir)
|
||||||
|
if [[ ! -d $2 ]]; then
|
||||||
|
echo -e "Error: path '$2' doesn't exist\n"
|
||||||
|
help
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
DEST=$2
|
||||||
|
shift
|
||||||
|
shift
|
||||||
|
;;
|
||||||
|
-h | --help)
|
||||||
|
help
|
||||||
|
exit 0
|
||||||
|
;;
|
||||||
|
*)
|
||||||
|
# unknown option
|
||||||
|
help
|
||||||
|
exit 1
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
done
|
||||||
|
|
||||||
|
if $_build; then
|
||||||
|
JEKYLL_ENV=production bundle exec jekyll b
|
||||||
|
fi
|
||||||
|
|
||||||
|
bundle exec htmlproofer "$DEST" \
|
||||||
|
--disable-external \
|
||||||
|
--check-html \
|
||||||
|
--empty_alt_ignore \
|
||||||
|
--allow_hash_href \
|
||||||
|
--url_ignore $URL_IGNORE
|
Loading…
Reference in New Issue
Block a user