format code with prettier.io (#2048)

summary:
- adds prettier formatter configuration
- formats the entire repo using prettier, ignoring minified files
(`*.min.css`) and heavy generated html
- changes extensions of all `.html` files to `.liquid`, which is more
correct and necessary for prettier to work correctly
- replaces "%-" and "-%" with just "%" — manual liquid formatting using
minus signs is superfluous since we are compressing and minifying the
code anyway
- adds CI action for running prettier check on PR and pushes to master
This commit is contained in:
Maruan 2024-01-10 00:10:51 -05:00 committed by GitHub
parent 60a09ed25c
commit beb6f27d59
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
205 changed files with 38137 additions and 23611 deletions

View File

@ -1,7 +1,5 @@
{
"files": [
"README.md"
],
"files": ["README.md"],
"imageSize": 100,
"commit": false,
"contributorsPerLine": 7,
@ -18,37 +16,28 @@
"name": "Maruan",
"avatar_url": "https://avatars.githubusercontent.com/u/2126561?v=4",
"profile": "http://maruan.alshedivat.com",
"contributions": [
"design",
"code"
]
"contributions": ["design", "code"]
},
{
"login": "rohandebsarkar",
"name": "Rohan Deb Sarkar",
"avatar_url": "https://avatars.githubusercontent.com/u/50144004?v=4",
"profile": "http://rohandebsarkar.github.io",
"contributions": [
"code"
]
"contributions": ["code"]
},
{
"login": "pourmand1376",
"name": "Amir Pourmand",
"avatar_url": "https://avatars.githubusercontent.com/u/32064808?v=4",
"profile": "https://amirpourmand.ir",
"contributions": [
"code"
]
"contributions": ["code"]
},
{
"login": "george-gca",
"name": "George",
"avatar_url": "https://avatars.githubusercontent.com/u/31376482?v=4",
"profile": "https://george-gca.github.io/",
"contributions": [
"code"
]
"contributions": ["code"]
}
],
"commitConvention": "angular"

View File

@ -1,13 +1,13 @@
---
name: Bug report
about: Create a report to help us improve
title: ''
title: ""
labels: bug
assignees: ''
assignees: ""
---
**Acknowledge the following**
- [ ] I carefully read and followed the [Getting Started](https://github.com/alshedivat/al-folio#getting-started) guide.
- [ ] I read through [FAQ](https://github.com/alshedivat/al-folio#faq) and searched through the [past issues](https://github.com/alshedivat/al-folio/issues), none of which addressed my issue.
- [ ] The issue I am raising is a potential bug in al-folio and not just a usage question. <br> [For usage questions, please post in the [Discussions](https://github.com/alshedivat/al-folio/discussions) instead of raising an issue.]
@ -17,6 +17,7 @@ A clear and concise description of what the bug is.
**To Reproduce**
Steps to reproduce the behavior:
1. Go to '...'
2. Click on '....'
3. Scroll down to '....'
@ -29,9 +30,10 @@ A clear and concise description of what you expected to happen.
If applicable, add screenshots to help explain your problem.
**System (please complete the following information):**
- OS: [e.g. iOS]
- Browser (and its version) [e.g. chrome, safari]
- Jekyll version [e.g. 3.8.7]
- OS: [e.g. iOS]
- Browser (and its version) [e.g. chrome, safari]
- Jekyll version [e.g. 3.8.7]
- Ruby version [e.g. 2.6.5]
**Additional context**

View File

@ -1,10 +1,9 @@
---
name: Feature request
about: Suggest an idea for this project
title: ''
title: ""
labels: enhancement
assignees: ''
assignees: ""
---
**Is your feature request related to a problem? Please describe.**

View File

@ -3,12 +3,10 @@ name: Docker Image CI (Upload Tag)
on:
push:
tags:
- 'v*'
- "v*"
jobs:
build:
runs-on: ubuntu-latest
steps:
@ -21,8 +19,7 @@ jobs:
- name: Buildx
uses: docker/setup-buildx-action@v2
-
name: Docker meta
- name: Docker meta
id: meta
uses: docker/metadata-action@v4
with:
@ -42,4 +39,3 @@ jobs:
push: ${{ github.event_name != 'pull_request' }}
tags: ${{ steps.meta.outputs.tags }}
labels: ${{ steps.meta.outputs.labels }}

View File

@ -2,12 +2,10 @@ name: Docker Image CI
on:
push:
branches: [ master ]
branches: [master]
jobs:
build:
runs-on: ubuntu-latest
if: github.repository_owner == 'alshedivat'

View File

@ -24,14 +24,14 @@ jobs:
- name: Setup Ruby
uses: ruby/setup-ruby@v1
with:
ruby-version: '3.2.2'
ruby-version: "3.2.2"
bundler-cache: true
- name: Update _config.yml ⚙️
uses: fjogeleit/yaml-update-action@v0.13.1
with:
commitChange: false
valueFile: '_config.yml'
propertyPath: 'giscus.repo'
valueFile: "_config.yml"
propertyPath: "giscus.repo"
value: ${{ github.repository }}
- name: Install and Build 🔧
run: |
@ -46,4 +46,3 @@ jobs:
uses: JamesIves/github-pages-deploy-action@v4
with:
folder: _site

26
.github/workflows/prettier.yml vendored Normal file
View File

@ -0,0 +1,26 @@
name: prettier
on:
push:
branches:
- master
- main
pull_request:
branches:
- master
- main
workflow_dispatch:
jobs:
check:
# available images: https://github.com/actions/runner-images#available-images
runs-on: ubuntu-latest
steps:
- name: Checkout 🛎️
uses: actions/checkout@v3
- name: Setup Node.js ⚙️
uses: actions/setup-node@v4
- name: Install Prettier 💾
run: npm install --save-dev --save-exact prettier @shopify/prettier-plugin-liquid
- name: Prettier Check 🔎
run: npx prettier . --check

1
.gitignore vendored
View File

@ -7,5 +7,6 @@ _site
.ruby-version
.tweet-cache
Gemfile.lock
node_modules/
vendor

View File

@ -1,7 +1,7 @@
# See https://pre-commit.com for more information
# See https://pre-commit.com/hooks.html for more hooks
repos:
- repo: https://github.com/pre-commit/pre-commit-hooks
- repo: https://github.com/pre-commit/pre-commit-hooks
rev: v4.3.0
hooks:
- id: trailing-whitespace

3
.prettierignore Normal file
View File

@ -0,0 +1,3 @@
*.min.css
assets/css/main.scss
assets/plotly/demo.html

3
.prettierrc Normal file
View File

@ -0,0 +1,3 @@
plugins: ["@shopify/prettier-plugin-liquid"]
printWidth: 150
trailingComma: "es5"

View File

@ -5,5 +5,4 @@ title: "Page not found"
description: "Looks like there has been a mistake. Nothing exists here."
redirect: true
---
<p>You will be redirected to the main page within 3 seconds. If not redirected, please go back to the <a href="{{ site.baseurl }}/">home page</a>.</p>

View File

@ -1,25 +1,26 @@
# Contributing to al-folio
Thank you for considering to contribute to al-folio!
## Pull Requests
We welcome your pull requests (PRs).
For minor fixes (e.g., documentation improvements), feel free to submit a PR directly.
If you would like to implement a new feature or a bug, please make sure you (or someone else) has opened an appropriate issue first; in your PR, please mention the issue it addresses.
## Issues
We use GitHub issues to track bugs and feature requests.
Before submitting an issue, please make sure:
1. You have read [the FAQ section](https://github.com/alshedivat/al-folio#faq) of the README and your question is NOT addressed there.
2. You have done your best to ensure that your issue is NOT a duplicate of one of [the previous issues](https://github.com/alshedivat/al-folio/issues).
3. Your issue is either a bug (unexpected/undesirable behavior) or a feature request.
If it is just a question, please ask it in the [Discussions](https://github.com/alshedivat/al-folio/discussions) forum.
If it is just a question, please ask it in the [Discussions](https://github.com/alshedivat/al-folio/discussions) forum.
When submitting an issue, please make sure to use the appropriate template.
## License
By contributing to al-folio, you agree that your contributions will be licensed
under the LICENSE file in the root directory of the source tree.

View File

@ -36,7 +36,7 @@ The project is structured as follows, focusing on the main components that you w
## Configuration
The configuration file [_config.yml](_config.yml) contains the main configuration of the website. Most of the settings is self-explanatory and we also tried to add as much comments as possible. If you have any questions, please check if it was not already answered in the [FAQ](FAQ.md).
The configuration file [\_config.yml](_config.yml) contains the main configuration of the website. Most of the settings is self-explanatory and we also tried to add as much comments as possible. If you have any questions, please check if it was not already answered in the [FAQ](FAQ.md).
> Note that the `url` and `baseurl` settings are used to generate the links of the website, as explained in the [install instructions](INSTALL.md).
@ -44,47 +44,47 @@ All changes made to this file are only visible after you rebuild the website. Th
## Modifying the CV information
There are currently 2 different ways of generating the CV page content. The first one is by using a json file located in [assets/json/resume.json](assets/json/resume.json). It is a [known standard](https://jsonresume.org/) for creating a CV programmatically. The second one, currently used as a fallback when the json file is not found, is by using a yml file located in [_data/cv.yml](_data/cv.yml). This was the original way of creating the CV page content and since it is more human readable than a json file we decided to keep it as an option.
There are currently 2 different ways of generating the CV page content. The first one is by using a json file located in [assets/json/resume.json](assets/json/resume.json). It is a [known standard](https://jsonresume.org/) for creating a CV programmatically. The second one, currently used as a fallback when the json file is not found, is by using a yml file located in [\_data/cv.yml](_data/cv.yml). This was the original way of creating the CV page content and since it is more human readable than a json file we decided to keep it as an option.
What this means is, if there is no resume data defined in [_config.yml](_config.yml) and loaded via a json file, it will load the contents of [_data/cv.yml](_data/cv.yml). If you want to use the [_data/cv.yml](_data/cv.yml) file as the source of your CV, you must delete the [assets/json/resume.json](assets/json/resume.json) file.
What this means is, if there is no resume data defined in [\_config.yml](_config.yml) and loaded via a json file, it will load the contents of [\_data/cv.yml](_data/cv.yml). If you want to use the [\_data/cv.yml](_data/cv.yml) file as the source of your CV, you must delete the [assets/json/resume.json](assets/json/resume.json) file.
## Modifying the user and repository information
The user and repository information is defined in [_data/repositories.yml](_data/repositories.yml). You can add as many users and repositories as you want. Both informations are used in the `repositories` section.
The user and repository information is defined in [\_data/repositories.yml](_data/repositories.yml). You can add as many users and repositories as you want. Both informations are used in the `repositories` section.
## Creating new pages
You can create new pages by adding new Markdown files in the [_pages](_pages/) directory. The easiest way to do this is to copy an existing page and modify it. You can choose the layout of the page in the [frontmatter](https://jekyllrb.com/docs/front-matter/) of the Markdown file. You can also add new layouts in the [_layouts](_layouts/) directory if you feel the need for it.
You can create new pages by adding new Markdown files in the [\_pages](_pages/) directory. The easiest way to do this is to copy an existing page and modify it. You can choose the layout of the page in the [frontmatter](https://jekyllrb.com/docs/front-matter/) of the Markdown file. You can also add new layouts in the [\_layouts](_layouts/) directory if you feel the need for it.
## Creating new blog posts
To create a new blog post, you can add a new Markdown file in the [_posts](_posts/) directory. The name of the file must follow the format `YYYY-MM-DD-title.md`. The easiest way to do this is to copy an existing blog post and modify it. Note that some blog posts have optional fields in the [frontmatter](https://jekyllrb.com/docs/front-matter/) that are used to enable specific behaviors or functions.
To create a new blog post, you can add a new Markdown file in the [\_posts](_posts/) directory. The name of the file must follow the format `YYYY-MM-DD-title.md`. The easiest way to do this is to copy an existing blog post and modify it. Note that some blog posts have optional fields in the [frontmatter](https://jekyllrb.com/docs/front-matter/) that are used to enable specific behaviors or functions.
If you want to create blog posts that are not ready to be published, but you want to track it with git, you can create a [_drafts](https://jekyllrb.com/docs/posts/#drafts) directory and store them there.
If you want to create blog posts that are not ready to be published, but you want to track it with git, you can create a [\_drafts](https://jekyllrb.com/docs/posts/#drafts) directory and store them there.
## Creating new projects
You can create new projects by adding new Markdown files in the [_projects](_projects/) directory. The easiest way to do this is to copy an existing project and modify it.
You can create new projects by adding new Markdown files in the [\_projects](_projects/) directory. The easiest way to do this is to copy an existing project and modify it.
## Adding some news
You can add news in the about page by adding new Markdown files in the [_news](_news/) directory. There are currently two types of news: inline news and news with a link. News with a link take you to a new page while inline news are displayed directly in the about page. The easiest way to create yours is to copy an existing news and modify it.
You can add news in the about page by adding new Markdown files in the [\_news](_news/) directory. There are currently two types of news: inline news and news with a link. News with a link take you to a new page while inline news are displayed directly in the about page. The easiest way to create yours is to copy an existing news and modify it.
## Adding Collections
This Jekyll theme implements `collections` to let you break up your work into categories. The theme comes with two default collections: `news` and `projects`. Items from the `news` collection are automatically displayed on the home page. Items from the `projects` collection are displayed on a responsive grid on projects page.
You can easily create your own collections, apps, short stories, courses, or whatever your creative work is. To do this, edit the collections in the [_config.yml](_config.yml) file, create a corresponding folder, and create a landing page for your collection, similar to [_pages/projects.md](_pages/projects.md).
You can easily create your own collections, apps, short stories, courses, or whatever your creative work is. To do this, edit the collections in the [\_config.yml](_config.yml) file, create a corresponding folder, and create a landing page for your collection, similar to [\_pages/projects.md](_pages/projects.md).
## Adding a new publication
To add publications create a new entry in the [_bibliography/papers.bib](_bibliography/papers.bib) file. You can find the BibTeX entry of a publication in Google Scholar by clicking on the quotation marks below the publication title, then clicking on "BibTeX", or also in the conference page itself. By default, the publications will be sorted by year and the most recent will be displayed first. You can change this behavior and more in the `Jekyll Scholar` section in [_config.yml](_config.yml) file.
To add publications create a new entry in the [\_bibliography/papers.bib](_bibliography/papers.bib) file. You can find the BibTeX entry of a publication in Google Scholar by clicking on the quotation marks below the publication title, then clicking on "BibTeX", or also in the conference page itself. By default, the publications will be sorted by year and the most recent will be displayed first. You can change this behavior and more in the `Jekyll Scholar` section in [\_config.yml](_config.yml) file.
You can add extra information to a publication, like a PDF file in the `assets/pdfs/` directory and add the path to the PDF file in the BibTeX entry with the `pdf` field. Some of the supported fields are: `abstract`, `altmetric`, `arxiv`, `bibtex_show`, `blog`, `code`, `dimensions`, `doi`, `eprint`, `html`, `isbn`, `pdf`, `pmid`, `poster`, `slides`, `supp`, `video`, and `website`.
### Author annotation
In publications, the author entry for yourself is identified by string array `scholar:last_name` and string array `scholar:first_name` in [_config.yml](_config.yml). For example, if you have the following entry in your [_config.yml](_config.yml):
In publications, the author entry for yourself is identified by string array `scholar:last_name` and string array `scholar:first_name` in [\_config.yml](_config.yml). For example, if you have the following entry in your [\_config.yml](_config.yml):
```yaml
scholar:
@ -92,7 +92,7 @@ scholar:
first_name: [Albert, A.]
```
If the entry matches one form of the last names and the first names, it will be underlined. Keep meta-information about your co-authors in [_data/coauthors.yml](_data/coauthors.yml) and Jekyll will insert links to their webpages automatically. The co-author data format is as follows,
If the entry matches one form of the last names and the first names, it will be underlined. Keep meta-information about your co-authors in [\_data/coauthors.yml](_data/coauthors.yml) and Jekyll will insert links to their webpages automatically. The co-author data format is as follows,
```yaml
"Adams":
@ -121,7 +121,7 @@ If the entry matches one of the combinations of the last names and the first nam
There are several custom bibtex keywords that you can use to affect how the entries are displayed on the webpage:
- `abbr`: Adds an abbreviation to the left of the entry. You can add links to these by creating a venue.yaml-file in the _data folder and adding entries that match.
- `abbr`: Adds an abbreviation to the left of the entry. You can add links to these by creating a venue.yaml-file in the \_data folder and adding entries that match.
- `abstract`: Adds an "Abs" button that expands a hidden text field when clicked to show the abstract text
- `altmetric`: Adds an [Altmetric](https://www.altmetric.com/) badge (Note: if DOI is provided just use `true`, otherwise only add the altmetric identifier here - the link is generated automatically)
- `arxiv`: Adds a link to the Arxiv website (Note: only add the arxiv identifier here - the link is generated automatically)
@ -136,12 +136,12 @@ There are several custom bibtex keywords that you can use to affect how the entr
- `supp`: Adds a "Supp" button to a specified file (if a full link is not specified, the file will be assumed to be placed in the /assets/pdf/ directory)
- `website`: Adds a "Website" button redirecting to the specified link
You can implement your own buttons by editing the [_layouts/bib.html](_layouts/bib.html) file.
You can implement your own buttons by editing the [\_layouts/bib.html](_layouts/bib.html) file.
## Changing theme color
A variety of beautiful theme colors have been selected for you to choose from. The default is purple, but you can quickly change it by editing the `--global-theme-color` variable in the [_sass/_themes.scss](_sass/_themes.scss) file. Other color variables are listed there as well. The stock theme color options available can be found at [_sass/_variables.scss](_sass/_variables.scss). You can also add your own colors to this file assigning each a name for ease of use across the template.
A variety of beautiful theme colors have been selected for you to choose from. The default is purple, but you can quickly change it by editing the `--global-theme-color` variable in the [\_sass/\_themes.scss](_sass/_themes.scss) file. Other color variables are listed there as well. The stock theme color options available can be found at [\_sass/\_variables.scss](_sass/_variables.scss). You can also add your own colors to this file assigning each a name for ease of use across the template.
## Adding social media information
You can add your social media links by adding the specified information at the `Social integration` section in the [_config.yml](_config.yml) file. This information will appear at the bottom of the `About` page.
You can add your social media links by adding the specified information at the `Social integration` section in the [\_config.yml](_config.yml) file. This information will appear at the bottom of the `About` page.

View File

@ -55,13 +55,13 @@ $ docker compose up --build
If you want to use a specific docker version, you can do so by changing `latest` tag to `your_version` in `docker-compose.yaml`. For example, you might have created your website on `v0.10.0` and you want to stick with that.
- Beta
You can also change the docker image tag to slim! It is a slimmed docker image with a size of below 100MBs (same functionality).
You can also change the docker image tag to slim! It is a slimmed docker image with a size of below 100MBs (same functionality).
## Local Setup (Legacy)
For a hands-on walkthrough of running al-folio locally without using Docker, check out [this cool blog post](https://george-gca.github.io/blog/2022/running-local-al-folio/) by one of the community members!
Assuming you have [Ruby](https://www.ruby-lang.org/en/downloads/) and [Bundler](https://bundler.io/) installed on your system (*hint: for ease of managing ruby gems, consider using [rbenv](https://github.com/rbenv/rbenv)*), and also [Python](https://www.python.org/) and [pip](https://pypi.org/project/pip/) (*hint: for ease of managing python packages, consider using a virtual environment, like [venv](https://docs.python.org/pt-br/3/library/venv.html) or [conda](https://docs.conda.io/en/latest/)*).
Assuming you have [Ruby](https://www.ruby-lang.org/en/downloads/) and [Bundler](https://bundler.io/) installed on your system (_hint: for ease of managing ruby gems, consider using [rbenv](https://github.com/rbenv/rbenv)_), and also [Python](https://www.python.org/) and [pip](https://pypi.org/project/pip/) (_hint: for ease of managing python packages, consider using a virtual environment, like [venv](https://docs.python.org/pt-br/3/library/venv.html) or [conda](https://docs.conda.io/en/latest/)_).
```bash
$ bundle install

View File

@ -232,9 +232,9 @@ This template has a built-in light/dark mode. It detects the user preferred colo
### CV
There are currently 2 different ways of generating the CV page content. The first one is by using a json file located in [assets/json/resume.json](assets/json/resume.json). It is a [known standard](https://jsonresume.org/) for creating a CV programmatically. The second one, currently used as a fallback when the json file is not found, is by using a yml file located in [_data/cv.yml](_data/cv.yml). This was the original way of creating the CV page content and since it is more human readable than a json file we decided to keep it as an option.
There are currently 2 different ways of generating the CV page content. The first one is by using a json file located in [assets/json/resume.json](assets/json/resume.json). It is a [known standard](https://jsonresume.org/) for creating a CV programmatically. The second one, currently used as a fallback when the json file is not found, is by using a yml file located in [\_data/cv.yml](_data/cv.yml). This was the original way of creating the CV page content and since it is more human readable than a json file we decided to keep it as an option.
What this means is, if there is no resume data defined in [_config.yml](_config.yml) and loaded via a json file, it will load the contents of [_data/cv.yml](_data/cv.yml) as fallback.
What this means is, if there is no resume data defined in [\_config.yml](_config.yml) and loaded via a json file, it will load the contents of [\_data/cv.yml](_data/cv.yml) as fallback.
[![CV Preview](assets/img/readme_preview/cv.png)](https://alshedivat.github.io/al-folio/cv/)
@ -250,7 +250,7 @@ You can create a people page if you want to feature more than one person. Each p
### Publications
Your publications' page is generated automatically from your BibTex bibliography. Simply edit [_bibliography/papers.bib](_bibliography/papers.bib). You can also add new `*.bib` files and customize the look of your publications however you like by editing [_pages/publications.md](_pages/publications.md). By default, the publications will be sorted by year and the most recent will be displayed first. You can change this behavior and more in the `Jekyll Scholar` section in [_config.yml](_config.yml) file.
Your publications' page is generated automatically from your BibTex bibliography. Simply edit [\_bibliography/papers.bib](_bibliography/papers.bib). You can also add new `*.bib` files and customize the look of your publications however you like by editing [\_pages/publications.md](_pages/publications.md). By default, the publications will be sorted by year and the most recent will be displayed first. You can change this behavior and more in the `Jekyll Scholar` section in [\_config.yml](_config.yml) file.
You can add extra information to a publication, like a PDF file in the [assets/pdf/](assets/pdf/) directory and add the path to the PDF file in the BibTeX entry with the `pdf` field. Some of the supported fields are: `abstract`, `altmetric`, `arxiv`, `bibtex_show`, `blog`, `code`, `dimensions`, `doi`, `eprint`, `html`, `isbn`, `pdf`, `pmid`, `poster`, `slides`, `supp`, `video`, and `website`.
@ -264,7 +264,7 @@ This Jekyll theme implements `collections` to let you break up your work into ca
[![Projects Preview](assets/img/readme_preview/projects.png)](https://alshedivat.github.io/al-folio/projects/)
You can easily create your own collections, apps, short stories, courses, or whatever your creative work is. To do this, edit the collections in the [_config.yml](_config.yml) file, create a corresponding folder, and create a landing page for your collection, similar to `_pages/projects.md`.
You can easily create your own collections, apps, short stories, courses, or whatever your creative work is. To do this, edit the collections in the [\_config.yml](_config.yml) file, create a corresponding folder, and create a landing page for your collection, similar to `_pages/projects.md`.
---
@ -317,30 +317,23 @@ You may also use the following codes for displaying this in any other pages.
<!-- code for GitHub users -->
{% if site.data.repositories.github_users %}
<div class="repositories d-flex flex-wrap flex-md-row flex-column justify-content-between align-items-center">
{% for user in site.data.repositories.github_users %}
{% include repository/repo_user.html username=user %}
{% endfor %}
{% for user in site.data.repositories.github_users %} {% include repository/repo_user.html username=user %} {% endfor %}
</div>
{% endif %}
<!-- code for GitHub trophies -->
{% if site.repo_trophies.enabled %}
{% for user in site.data.repositories.github_users %}
{% if site.data.repositories.github_users.size > 1 %}
<h4>{{ user }}</h4>
{% endif %}
<div class="repositories d-flex flex-wrap flex-md-row flex-column justify-content-between align-items-center">
{% include repository/repo_trophies.html username=user %}
</div>
{% endfor %}
{% if site.repo_trophies.enabled %} {% for user in site.data.repositories.github_users %} {% if site.data.repositories.github_users.size > 1 %}
<h4>{{ user }}</h4>
{% endif %}
<div class="repositories d-flex flex-wrap flex-md-row flex-column justify-content-between align-items-center">
{% include repository/repo_trophies.html username=user %}
</div>
{% endfor %} {% endif %}
<!-- code for GitHub repositories -->
{% if site.data.repositories.github_repos %}
<div class="repositories d-flex flex-wrap flex-md-row flex-column justify-content-between align-items-center">
{% for repo in site.data.repositories.github_repos %}
{% include repository/repo.html repository=repo %}
{% endfor %}
{% for repo in site.data.repositories.github_repos %} {% include repository/repo.html repository=repo %} {% endfor %}
</div>
{% endif %}
```
@ -349,15 +342,15 @@ You may also use the following codes for displaying this in any other pages.
#### Theming
A variety of beautiful theme colors have been selected for you to choose from. The default is purple, but you can quickly change it by editing the `--global-theme-color` variable in the `_sass/_themes.scss` file. Other color variables are listed there as well. The stock theme color options available can be found at [_sass/_variables.scss](_sass/_variables.scss). You can also add your own colors to this file assigning each a name for ease of use across the template.
A variety of beautiful theme colors have been selected for you to choose from. The default is purple, but you can quickly change it by editing the `--global-theme-color` variable in the `_sass/_themes.scss` file. Other color variables are listed there as well. The stock theme color options available can be found at [\_sass/\_variables.scss](_sass/_variables.scss). You can also add your own colors to this file assigning each a name for ease of use across the template.
---
#### Social media previews
**al-folio** supports preview images on social media. To enable this functionality you will need to set `serve_og_meta` to `true` in your [_config.yml](_config.yml). Once you have done so, all your site's pages will include Open Graph data in the HTML head element.
**al-folio** supports preview images on social media. To enable this functionality you will need to set `serve_og_meta` to `true` in your [\_config.yml](_config.yml). Once you have done so, all your site's pages will include Open Graph data in the HTML head element.
You will then need to configure what image to display in your site's social media previews. This can be configured on a per-page basis, by setting the `og_image` page variable. If for an individual page this variable is not set, then the theme will fall back to a site-wide `og_image` variable, configurable in your [_config.yml](_config.yml). In both the page-specific and site-wide cases, the `og_image` variable needs to hold the URL for the image you wish to display in social media previews.
You will then need to configure what image to display in your site's social media previews. This can be configured on a per-page basis, by setting the `og_image` page variable. If for an individual page this variable is not set, then the theme will fall back to a site-wide `og_image` variable, configurable in your [\_config.yml](_config.yml). In both the page-specific and site-wide cases, the `og_image` variable needs to hold the URL for the image you wish to display in social media previews.
---
@ -369,7 +362,7 @@ It generates an Atom (RSS-like) feed of your posts, useful for Atom and RSS read
#### Related posts
By default, there will be a related posts section on the bottom of the blog posts. These are generated by selecting the `max_related` most recent posts that share at least `min_common_tags` tags with the current post. If you do not want to display related posts on a specific post, simply add `related_posts: false` to the front matter of the post. If you want to disable it for all posts, simply set `enabled` to false in the `related_blog_posts` section in [_config.yml](_config.yml).
By default, there will be a related posts section on the bottom of the blog posts. These are generated by selecting the `max_related` most recent posts that share at least `min_common_tags` tags with the current post. If you do not want to display related posts on a specific post, simply add `related_posts: false` to the front matter of the post. If you want to disable it for all posts, simply set `enabled` to false in the `related_blog_posts` section in [\_config.yml](_config.yml).
## FAQ

View File

@ -14,7 +14,6 @@ footer_text: >
Hosted by <a href="https://pages.github.com/" target="_blank">GitHub Pages</a>.
Photos from <a href="https://unsplash.com" target="_blank">Unsplash</a>.
keywords: jekyll, jekyll-theme, academic-website, portfolio-website # add your own keywords or leave empty
lang: en # the language of your site (for example: en, fr, cn, ru, etc.)
icon: ⚛️ # the emoji used as the favicon (alternatively, provide image name in /assets/img/)
@ -196,7 +195,7 @@ highlighter: rouge
kramdown:
input: GFM
syntax_highlighter_opts:
css_class: 'highlight'
css_class: "highlight"
span:
line_numbers: false
block:
@ -204,7 +203,7 @@ kramdown:
start_line: 1
# Includes & excludes
include: ['_pages']
include: ["_pages"]
exclude:
- bin
- Gemfile
@ -247,7 +246,7 @@ sass:
# -----------------------------------------------------------------------------
jekyll-minifier:
exclude: ['robots.txt']
exclude: ["robots.txt"]
uglifier_args:
harmony: true
@ -262,19 +261,18 @@ jekyll-archives:
tag: archive-tag
category: archive-category
permalinks:
year: '/blog/:year/'
tag: '/blog/tag/:name/'
category: '/blog/category/:name/'
year: "/blog/:year/"
tag: "/blog/tag/:name/"
category: "/blog/category/:name/"
display_tags: ['formatting', 'images', 'links', 'math', 'code'] # these tags will be displayed on the front page of your blog
display_categories: ['blockquotes'] # these categories will be displayed on the front page of your blog
display_tags: ["formatting", "images", "links", "math", "code"] # these tags will be displayed on the front page of your blog
display_categories: ["blockquotes"] # these categories will be displayed on the front page of your blog
# -----------------------------------------------------------------------------
# Jekyll Scholar
# -----------------------------------------------------------------------------
scholar:
last_name: [Einstein]
first_name: [Albert, A.]
@ -306,7 +304,8 @@ enable_publication_badges:
dimensions: true # Dimensions badge (https://badge.dimensions.ai/)
# Filter out certain bibtex entry keywords used internally from the bib output
filtered_bibtex_keywords: [abbr, abstract, altmetric, arxiv, bibtex_show, blog, code, html, pdf, poster, preview, selected, slides, supp, video, website]
filtered_bibtex_keywords:
[abbr, abstract, altmetric, arxiv, bibtex_show, blog, code, html, pdf, poster, preview, selected, slides, supp, video, website]
# Maximum number of authors to be shown for each publication (more authors are visible on click)
max_author_limit: 3 # leave blank to always show all authors
@ -326,7 +325,6 @@ external_links:
target: _blank
exclude:
# -----------------------------------------------------------------------------
# Responsive WebP Images
# -----------------------------------------------------------------------------
@ -350,7 +348,6 @@ imagemagick:
output_formats:
webp: "-quality 85"
# -----------------------------------------------------------------------------
# Optional Features
# -----------------------------------------------------------------------------

View File

@ -1,16 +0,0 @@
<figure>
<audio
src="{% if include.cache_bust %}{{ include.path | relative_url | bust_file_cache }}{% else %}{{ include.path | relative_url }}{% endif %}"
{% if include.class %}class="{{ include.class }}"{% endif %}
{% if include.alt %}alt="{{ include.alt }}"{% endif %}
{% if include.title %}title="{{ include.title }}"{% endif %}
{% if include.autoplay %}autoplay{% endif %}
{% if include.controls %}controls{% endif %}
{% if include.loop %}loop{% endif %}
{% if include.muted %}muted{% endif %}
/>
{%- if include.caption -%}<figcaption class="caption">{{ include.caption }}</figcaption>{%- endif %}
</figure>

30
_includes/audio.liquid Normal file
View File

@ -0,0 +1,30 @@
<figure>
<audio
src="{% if include.cache_bust %}{{ include.path | relative_url | bust_file_cache }}{% else %}{{ include.path | relative_url }}{% endif %}"
{% if include.class %}
class="{{ include.class }}"
{% endif %}
{% if include.alt %}
alt="{{ include.alt }}"
{% endif %}
{% if include.title %}
title="{{ include.title }}"
{% endif %}
{% if include.autoplay %}
autoplay
{% endif %}
{% if include.controls %}
controls
{% endif %}
{% if include.loop %}
loop
{% endif %}
{% if include.muted %}
muted
{% endif %}
/>
{% if include.caption %}
<figcaption class="caption">{{ include.caption }}</figcaption>
{% endif %}
</figure>

View File

@ -1,5 +0,0 @@
<ul class="card-text font-weight-light list-group list-group-flush">
{% for content in entry.contents %}
<li class="list-group-item">{{ content }}</li>
{% endfor %}
</ul>

5
_includes/cv/list.liquid Normal file
View File

@ -0,0 +1,5 @@
<ul class="card-text font-weight-light list-group list-group-flush">
{% for content in entry.contents %}
<li class="list-group-item">{{ content }}</li>
{% endfor %}
</ul>

View File

@ -1,43 +0,0 @@
<div class="list-groups">
{% for content in entry.contents %}
<div class="list-group col-md-6">
<table class="table-cv list-group-table">
<tbody>
<tr>
{% if content.icon %}
<td class="list-group-category-icon"><i class="{{ content.icon }}"></i></td>
{% else %}
<td class="list-group-category-icon"></td>
{% endif %}
<!-- Calculate colspan number for category title -->
{% assign i = 1 %}
{% for item in content.items %}
{% assign i = i | plus:1 %}
{% endfor %}
<td colspan="{{ i }}" class="list-group-category">{{ content.category }}</td>
</tr>
{% for item in content.items %}
<tr>
<td></td>
<td class="list-group-name"><b>{{ item.name }}</b></td>
{% if item.level %}
<td class="list-group-level">{{ item.level }}</td>
{% endif %}
{% if item.school %}
<td class="list-group-school">{{ item.school }}
{% endif %}
{% if item.time %}
<br><span class="list-group-time">{{ item.time }}</span></td>
{% else %}
</td>
{% endif %}
{% if item.link %}
<td class="list-group-link"><a href="{{ item.link }}" target="_blank" class="btncv z-depth-0">{% if item.linkname %}{{ item.linkname }}{% else %}DOC{% endif %}</a></td>
{% endif %}
</tr>
{% endfor %}
</tbody>
</table>
</div>
{% endfor %}
</div>

View File

@ -0,0 +1,51 @@
<div class="list-groups">
{% for content in entry.contents %}
<div class="list-group col-md-6">
<table class="table-cv list-group-table">
<tbody>
<tr>
{% if content.icon %}
<td class="list-group-category-icon"><i class="{{ content.icon }}"></i></td>
{% else %}
<td class="list-group-category-icon"></td>
{% endif %}
<!-- Calculate colspan number for category title -->
{% assign i = 1 %}
{% for item in content.items %}
{% assign i = i | plus: 1 %}
{% endfor %}
<td colspan="{{ i }}" class="list-group-category">{{ content.category }}</td>
</tr>
{% for item in content.items %}
<tr>
<td></td>
<td class="list-group-name">
<b>{{ item.name }}</b>
</td>
{% if item.level %}
<td class="list-group-level">{{ item.level }}</td>
{% endif %}
{% if item.school %}
<td class="list-group-school">{{ item.school }}
{% endif %}
{% if item.time %}
<br>
<span class="list-group-time">{{ item.time }}</span>
</td>
{% else %}
</td>
{% endif %}
{% if item.link %}
<td class="list-group-link">
<a href="{{ item.link }}" target="_blank" class="btncv z-depth-0">
{% if item.linkname %}{{ item.linkname }}{% else %}DOC{% endif %}
</a>
</td>
{% endif %}
</tr>
{% endfor %}
</tbody>
</table>
</div>
{% endfor %}
</div>

View File

@ -1,7 +1,9 @@
<table class="table table-cv table-sm table-borderless table-responsive">
{% for content in entry.contents %}
<tr>
<td class="p-1 pr-2 font-weight-bold"><b>{{ content.name }}</b></td>
<td class="p-1 pr-2 font-weight-bold">
<b>{{ content.name }}</b>
</td>
{% if content.value %}
<td class="p-1 pl-2 font-weight-light text">{{ content.value }}</td>
{% endif %}
@ -12,7 +14,7 @@
{% if item.link %}
<div class="container-link-button">
{% if item.name %}
<a href="{{ item.link }}" target="_blank" class="btncv z-depth-0">{{ item.name}}</a>
<a href="{{ item.link }}" target="_blank" class="btncv z-depth-0">{{ item.name }}</a>
{% else %}
<a href="{{ item.link }}" target="_blank" class="btncv z-depth-0">doc</a>
{% endif %}

View File

@ -5,7 +5,9 @@
{% if content.items %}
<ul class="subitems">
{% for subitem in content.items %}
<li><span class="subitem">{{ subitem }}</span></li>
<li>
<span class="subitem">{{ subitem }}</span>
</li>
{% endfor %}
</ul>
{% endif %}

View File

@ -1,106 +0,0 @@
<ul class="card-text font-weight-light list-group list-group-flush">
{% for content in entry.contents %}
<li class="list-group-item">
<div class="row">
{% if content.year %}
<div class="col-xs-2 cl-sm-2 col-md-2 text-center" style="width: 75px;">
<table class="table-cv">
<tbody>
<tr>
<td>
<span class="badge font-weight-bold danger-color-dark text-uppercase align-middle" style="min-width: 75px;">{{ content.year }}</span>
</td>
</tr>
{% if content.location %}
<tr>
<td>
<p class="location"><i class="fa-solid fa-location-dot iconlocation"></i> {{ content.location }}</p>
</td>
</tr>
{% endif %}
</tbody>
</table>
</div>
{% endif %}
<div class="col-xs-10 cl-sm-10 col-md-10 mt-2 mt-md-0">
{% if content.title %}
<h6 class="title font-weight-bold ml-1 ml-md-4">{{content.title}}</h6>
{% endif %}
{% if content.department or content.institution %}
<table class="table-cv ml-1 ml-md-4 institution">
<tbody>
{% if content.institution %}
<tr>
<td style="vertical-align: top; text-align: center;" class="institution"><i class="fa-solid fa-building-columns iconinstitution"></i></td>
<td class="institution">{{content.institution}}</td>
</tr>
{% endif %}
{% if content.department %}
<tr>
<td style="vertical-align: top; text-align: center;" class="department"><i class="fa-regular fa-circle-dot icondepartment"></i></td>
<td class="department">{{content.department}}</td>
</tr>
{% endif %}
</tbody>
</table>
{% endif %}
{% if content.maindescription %}
<div class="ml-1 ml-md-4 ">{{ content.maindescription }}</div>
{% endif %}
{% if content.description %}
<ul class="items">
{% for item in content.description %}
<li>
{% if item.contents %}
<span class="item-title">{{ item.title }}</span>
<ul class="subitems">
{% for subitem in item.contents %}
<li><span class="subitem">{{ subitem }}</span></li>
{% endfor %}
</ul>
{% else %}
<span class="item">{{ item }}</span>
{% endif %}
</li>
{% endfor %}
</ul>
{% endif %}
{% if content.items %}
<ul class="items">
{% for item in content.items %}
<li>
{% if item.contents %}
<span class="item-title">{{ item.title }}</span>
<ul class="subitems">
{% for subitem in item.contents %}
<li><span class="subitem">{{ subitem }}</span></li>
{% endfor %}
</ul>
{% else %}
<span class="item">{{ item }}</span>
{% endif %}
</li>
{% endfor %}
</ul>
{% endif %}
{% if content.linkitems %}
<div class="container-links ml-1 ml-md-4">
{% for item in content.linkitems %}
{% if item.link %}
<div class="container-link-button">
{% if item.linkname %}
<a href="{{ item.link }}" target="_blank" class="btncv z-depth-0">{{ item.linkname}}</a>
{% else %}
<a href="{{ item.link }}" target="_blank" class="btncv z-depth-0">doc</a>
{% endif %}
</div>
{% endif %}
{% endfor %}
</div>
{% endif %}
</div>
</div>
</li>
{% endfor %}
</ul>

View File

@ -0,0 +1,118 @@
<ul class="card-text font-weight-light list-group list-group-flush">
{% for content in entry.contents %}
<li class="list-group-item">
<div class="row">
{% if content.year %}
<div class="col-xs-2 cl-sm-2 col-md-2 text-center" style="width: 75px">
<table class="table-cv">
<tbody>
<tr>
<td>
<span class="badge font-weight-bold danger-color-dark text-uppercase align-middle" style="min-width: 75px">
{{- content.year -}}
</span>
</td>
</tr>
{% if content.location %}
<tr>
<td>
<p class="location">
<i class="fa-solid fa-location-dot iconlocation"></i>
{{ content.location }}
</p>
</td>
</tr>
{% endif %}
</tbody>
</table>
</div>
{% endif %}
<div class="col-xs-10 cl-sm-10 col-md-10 mt-2 mt-md-0">
{% if content.title %}
<h6 class="title font-weight-bold ml-1 ml-md-4">{{ content.title }}</h6>
{% endif %}
{% if content.department or content.institution %}
<table class="table-cv ml-1 ml-md-4 institution">
<tbody>
{% if content.institution %}
<tr>
<td style="vertical-align: top; text-align: center" class="institution">
<i class="fa-solid fa-building-columns iconinstitution"></i>
</td>
<td class="institution">{{ content.institution }}</td>
</tr>
{% endif %}
{% if content.department %}
<tr>
<td style="vertical-align: top; text-align: center" class="department">
<i class="fa-regular fa-circle-dot icondepartment"></i>
</td>
<td class="department">{{ content.department }}</td>
</tr>
{% endif %}
</tbody>
</table>
{% endif %}
{% if content.maindescription %}
<div class="ml-1 ml-md-4">{{ content.maindescription }}</div>
{% endif %}
{% if content.description %}
<ul class="items">
{% for item in content.description %}
<li>
{% if item.contents %}
<span class="item-title">{{ item.title }}</span>
<ul class="subitems">
{% for subitem in item.contents %}
<li>
<span class="subitem">{{ subitem }}</span>
</li>
{% endfor %}
</ul>
{% else %}
<span class="item">{{ item }}</span>
{% endif %}
</li>
{% endfor %}
</ul>
{% endif %}
{% if content.items %}
<ul class="items">
{% for item in content.items %}
<li>
{% if item.contents %}
<span class="item-title">{{ item.title }}</span>
<ul class="subitems">
{% for subitem in item.contents %}
<li>
<span class="subitem">{{ subitem }}</span>
</li>
{% endfor %}
</ul>
{% else %}
<span class="item">{{ item }}</span>
{% endif %}
</li>
{% endfor %}
</ul>
{% endif %}
{% if content.linkitems %}
<div class="container-links ml-1 ml-md-4">
{% for item in content.linkitems %}
{% if item.link %}
<div class="container-link-button">
{% if item.linkname %}
<a href="{{ item.link }}" target="_blank" class="btncv z-depth-0">{{ item.linkname }}</a>
{% else %}
<a href="{{ item.link }}" target="_blank" class="btncv z-depth-0">doc</a>
{% endif %}
</div>
{% endif %}
{% endfor %}
</div>
{% endif %}
</div>
</div>
</li>
{% endfor %}
</ul>

View File

@ -1,13 +0,0 @@
<div id="disqus_thread" style="max-width: {{ site.max_width }}; margin: 0 auto;">
<script type="text/javascript">
var disqus_shortname = '{{ site.disqus_shortname }}';
var disqus_identifier = '{{ page.id }}';
var disqus_title = {{ page.title | jsonify }};
(function() {
var dsq = document.createElement('script'); dsq.type = 'text/javascript'; dsq.async = true;
dsq.src = '//' + disqus_shortname + '.disqus.com/embed.js';
(document.getElementsByTagName('head')[0] || document.getElementsByTagName('body')[0]).appendChild(dsq);
})();
</script>
<noscript>Please enable JavaScript to view the <a href="http://disqus.com/?ref_noscript">comments powered by Disqus.</a></noscript>
</div>

13
_includes/disqus.liquid Normal file
View File

@ -0,0 +1,13 @@
<div id="disqus_thread" style="max-width: {{ site.max_width }}; margin: 0 auto;">
<script type="text/javascript">
var disqus_shortname = '{{ site.disqus_shortname }}';
var disqus_identifier = '{{ page.id }}';
var disqus_title = {{ page.title | jsonify }};
(function() {
var dsq = document.createElement('script'); dsq.type = 'text/javascript'; dsq.async = true;
dsq.src = '//' + disqus_shortname + '.disqus.com/embed.js';
(document.getElementsByTagName('head')[0] || document.getElementsByTagName('body')[0]).appendChild(dsq);
})();
</script>
<noscript>Please enable JavaScript to view the <a href="http://disqus.com/?ref_noscript">comments powered by Disqus.</a></noscript>
</div>

View File

@ -1,34 +0,0 @@
{%- assign img_path = include.path | remove: ".jpg" | remove: ".jpeg" | remove: ".png" | remove: ".tiff" | remove: ".gif" -%}
<figure>
<picture>
<!-- Auto scaling with imagemagick -->
<!-- See https://www.debugbear.com/blog/responsive-images#w-descriptors-and-the-sizes-attribute and
https://developer.mozilla.org/en-US/docs/Learn/HTML/Multimedia_and_embedding/Responsive_images for info on defining 'sizes' for responsive images-->
{% if site.imagemagick.enabled %}
<source class = "responsive-img-srcset" srcset="
{% for i in site.imagemagick.widths -%}
{{ img_path | relative_url }}-{{ i }}.webp {{i}}w,
{% endfor -%}"
{% if include.sizes %} sizes="{{include.sizes}}" {% else %} sizes="95vw" {% endif %}
type="image/webp"/>
{% endif %}
<img
src="{% if include.cache_bust %}{{ include.path | relative_url | bust_file_cache }}{% else %}{{ include.path | relative_url }}{% endif %}"
{% if include.class %}class="{{ include.class }}"{% endif %}
{% if include.width %}width="{{ include.width }}"{% else %}width="100%"{% endif %}
{% if include.height %}height="{{ include.height }}"{% else %}height="auto"{% endif %}
{% if include.min-width %}min-width="{{ include.min-width }}"{% endif %}
{% if include.min-height %}min-height="{{ include.min-height }}"{% endif %}
{% if include.max-width %}max-width="{{ include.max-width }}"{% endif %}
{% if include.max-height %}max-height="{{ include.max-height }}"{% endif %}
{% if include.alt %}alt="{{ include.alt }}"{% endif %}
{% if include.title %}title="{{ include.title }}"{% endif %}
{% if include.zoomable %}data-zoomable{% endif %}
onerror="this.onerror=null; $('.responsive-img-srcset').remove();"
/>
</picture>
{%- if include.caption -%}<figcaption class="caption">{{ include.caption }}</figcaption>{%- endif %}
</figure>

65
_includes/figure.liquid Normal file
View File

@ -0,0 +1,65 @@
{% assign img_path = include.path | remove: '.jpg' | remove: '.jpeg' | remove: '.png' | remove: '.tiff' | remove: '.gif' %}
<figure>
<picture>
<!-- Auto scaling with imagemagick -->
<!--
See https://www.debugbear.com/blog/responsive-images#w-descriptors-and-the-sizes-attribute and
https://developer.mozilla.org/en-US/docs/Learn/HTML/Multimedia_and_embedding/Responsive_images for info on defining 'sizes' for responsive images
-->
{% if site.imagemagick.enabled %}
<source
class="responsive-img-srcset"
srcset="{% for i in site.imagemagick.widths %}{{ img_path | relative_url }}-{{ i }}.webp {{i}}w,{% endfor %}"
{% if include.sizes %}
sizes="{{include.sizes}}"
{% else %}
sizes="95vw"
{% endif %}
type="image/webp"
>
{% endif %}
<img
src="{% if include.cache_bust %}{{ include.path | relative_url | bust_file_cache }}{% else %}{{ include.path | relative_url }}{% endif %}"
{% if include.class %}
class="{{ include.class }}"
{% endif %}
{% if include.width %}
width="{{ include.width }}"
{% else %}
width="100%"
{% endif %}
{% if include.height %}
height="{{ include.height }}"
{% else %}
height="auto"
{% endif %}
{% if include['min-width'] %}
min-width="{{ include.min-width }}"
{% endif %}
{% if include['min-height'] %}
min-height="{{ include.min-height }}"
{% endif %}
{% if include['max-width'] %}
max-width="{{ include.max-width }}"
{% endif %}
{% if include['max-height'] %}
max-height="{{ include.max-height }}"
{% endif %}
{% if include.alt %}
alt="{{ include.alt }}"
{% endif %}
{% if include.title %}
title="{{ include.title }}"
{% endif %}
{% if include.zoomable %}
data-zoomable
{% endif %}
onerror="this.onerror=null; $('.responsive-img-srcset').remove();"
>
</picture>
{% if include.caption %}
<figcaption class="caption">{{ include.caption }}</figcaption>
{% endif %}
</figure>

View File

@ -1,25 +0,0 @@
{% if site.footer_fixed %}
<footer class="fixed-bottom">
<div class="container mt-0">
&copy; Copyright {{ site.time | date: '%Y' }} {{ site.first_name }} {{ site.middle_name }} {{ site.last_name }}. {{ site.footer_text }}
{%- if site.impressum_path -%}
<a href="{{ site.url }}{{ site.baseurl }}{{ site.impressum_path }}">Impressum</a>.
{%- endif -%}
{%- if site.last_updated -%}
Last updated: {{ "now" | date: '%B %d, %Y' }}.
{%- endif %}
</div>
</footer>
{%- else -%}
<footer class="sticky-bottom mt-5">
<div class="container">
&copy; Copyright {{ site.time | date: '%Y' }} {{ site.first_name }} {{ site.middle_name }} {{ site.last_name }}. {{ site.footer_text }}
{%- if site.impressum_path -%}
<a href="{{ site.url }}{{ site.baseurl }}{{ site.impressum_path }}">Impressum</a>.
{%- endif -%}
{%- if site.last_updated -%}
Last updated: {{ "now" | date: '%B %d, %Y' }}.
{%- endif %}
</div>
</footer>
{%- endif %}

31
_includes/footer.liquid Normal file
View File

@ -0,0 +1,31 @@
{% if site.footer_fixed %}
<footer class="fixed-bottom">
<div class="container mt-0">
&copy; Copyright {{ site.time | date: '%Y' }}
{{ site.first_name }}
{{ site.middle_name }}
{{ site.last_name }}. {{ site.footer_text }}
{% if site.impressum_path %}
<a href="{{ site.url }}{{ site.baseurl }}{{ site.impressum_path }}">Impressum</a>.
{% endif %}
{% if site.last_updated %}
Last updated: {{ 'now' | date: '%B %d, %Y' }}.
{% endif %}
</div>
</footer>
{% else %}
<footer class="sticky-bottom mt-5">
<div class="container">
&copy; Copyright {{ site.time | date: '%Y' }}
{{ site.first_name }}
{{ site.middle_name }}
{{ site.last_name }}. {{ site.footer_text }}
{% if site.impressum_path %}
<a href="{{ site.url }}{{ site.baseurl }}{{ site.impressum_path }}">Impressum</a>.
{% endif %}
{% if site.last_updated %}
Last updated: {{ 'now' | date: '%B %d, %Y' }}.
{% endif %}
</div>
</footer>
{% endif %}

View File

@ -1,36 +0,0 @@
<div id="giscus_thread" style="max-width: {{ site.max_width }}; margin: 0 auto;">
{%- if site.giscus.repo -%}
<script>
let giscusTheme = localStorage.getItem("theme");
let giscusAttributes = {
"src": "https://giscus.app/client.js",
"data-repo": "{{ site.giscus.repo }}",
"data-repo-id": "{{ site.giscus.repo_id }}",
"data-category": "{{ site.giscus.category }}",
"data-category-id": "{{ site.giscus.category_id }}",
"data-mapping": "{{ site.giscus.mapping }}",
"data-strict": "{{ site.giscus.strict }}",
"data-reactions-enabled": "{{ site.giscus.reactions_enabled }}",
"data-emit-metadata": "{{ site.giscus.emit_metadata }}",
"data-input-position": "{{ site.giscus.input_position }}",
"data-theme": giscusTheme,
"data-lang": "{{ site.giscus.lang }}",
"crossorigin": "anonymous",
"async": "",
};
let giscusScript = document.createElement("script");
Object.entries(giscusAttributes).forEach(([key, value]) => giscusScript.setAttribute(key, value));
document.getElementById("giscus_thread").appendChild(giscusScript);
</script>
<noscript>Please enable JavaScript to view the <a href="http://giscus.app/?ref_noscript">comments powered by giscus.</a></noscript>
{%- else -%}
{% capture giscus_warning %}
> ##### giscus comments misconfigured
> Please follow instructions at [http://giscus.app](http://giscus.app) and update your giscus configuration.
{: .block-danger }
{% endcapture %}
{{ giscus_warning | markdownify }}
{%- endif -%}
</div>

32
_includes/giscus.liquid Normal file
View File

@ -0,0 +1,32 @@
<div id="giscus_thread" style="max-width: {{ site.max_width }}; margin: 0 auto;">
{% if site.giscus.repo %}
<script>
let giscusTheme = localStorage.getItem('theme');
let giscusAttributes = {
src: 'https://giscus.app/client.js',
'data-repo': '{{ site.giscus.repo }}',
'data-repo-id': '{{ site.giscus.repo_id }}',
'data-category': '{{ site.giscus.category }}',
'data-category-id': '{{ site.giscus.category_id }}',
'data-mapping': '{{ site.giscus.mapping }}',
'data-strict': '{{ site.giscus.strict }}',
'data-reactions-enabled': '{{ site.giscus.reactions_enabled }}',
'data-emit-metadata': '{{ site.giscus.emit_metadata }}',
'data-input-position': '{{ site.giscus.input_position }}',
'data-theme': giscusTheme,
'data-lang': '{{ site.giscus.lang }}',
crossorigin: 'anonymous',
async: '',
};
let giscusScript = document.createElement('script');
Object.entries(giscusAttributes).forEach(([key, value]) => giscusScript.setAttribute(key, value));
document.getElementById('giscus_thread').appendChild(giscusScript);
</script>
<noscript>Please enable JavaScript to view the <a href="http://giscus.app/?ref_noscript">comments powered by giscus.</a></noscript>
{% else %}
{% capture giscus_warning %} > ##### giscus comments misconfigured > Please follow instructions at
[http://giscus.app](http://giscus.app) and update your giscus configuration. {: .block-danger } {% endcapture %}
{{ giscus_warning | markdownify }}
{% endif %}
</div>

View File

@ -1,42 +0,0 @@
<!-- Metadata, OpenGraph and Schema.org -->
{% include metadata.html %}
<!-- Bootstrap & MDB -->
<link rel="stylesheet" href="{{ '/assets/css/bootstrap.min.css' | relative_url | bust_file_cache }}">
<!-- <link rel="stylesheet" href="{{ '/assets/css/mdb.min.css' | relative_url | bust_file_cache }}"> -->
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/mdbootstrap@{{ site.mdb.version }}/css/mdb.min.css" integrity="{{ site.mdb.integrity.css }}" crossorigin="anonymous" />
<!-- Bootstrap Table -->
<link defer rel="stylesheet" href="https://unpkg.com/bootstrap-table@{{ site.bootstrap-table.version }}/dist/bootstrap-table.min.css">
<!-- Fonts & Icons -->
<link rel="stylesheet" href="{{ '/assets/css/academicons.min.css' | relative_url | bust_file_cache }}">
<link rel="stylesheet" type="text/css" href="https://fonts.googleapis.com/css?family=Roboto:300,400,500,700|Roboto+Slab:100,300,400,500,700|Material+Icons">
<!-- Code Syntax Highlighting -->
<link rel="stylesheet" href="{{ '/assets/css/jekyll-pygments-themes-github.css' | relative_url | bust_file_cache }}" media="" id="highlight_theme_light" />
{% if page.toc and page.toc.sidebar %}
<!-- Sidebar Table of Contents -->
<link href="{{ '/assets/css/bootstrap-toc.min.css' | relative_url | bust_file_cache }}" rel="stylesheet" />
{% endif %}
{% if page.tikzjax %}
<link defer rel="stylesheet" type="text/css" href="https://tikzjax.com/v1/fonts.css">
<script defer src="https://tikzjax.com/v1/tikzjax.js"></script>
{% endif %}
<!-- Styles -->
{% if site.icon.size <= 4 %}
<link rel="shortcut icon" href="data:image/svg+xml,<svg xmlns=%22http://www.w3.org/2000/svg%22 viewBox=%220 0 100 100%22><text y=%22.9em%22 font-size=%2290%22>{{ site.icon }}</text></svg>">
{% elsif site.icon != blank %}
<link rel="shortcut icon" href="{{ site.icon | prepend: '/assets/img/' | relative_url | bust_file_cache}}"/>
{% endif %}
<link rel="stylesheet" href="{{ '/assets/css/main.css' | relative_url | bust_css_cache }}">
<link rel="canonical" href="{{ page.url | replace:'index.html','' | absolute_url }}">
<!-- Dark Mode -->
{% if site.enable_darkmode %}
<link rel="stylesheet" href="{{ '/assets/css/jekyll-pygments-themes-native.css' | relative_url | bust_file_cache }}" media="none" id="highlight_theme_dark" />
<script src="{{ '/assets/js/theme.js' | relative_url | bust_file_cache }}"></script>
{% endif %}

63
_includes/head.liquid Normal file
View File

@ -0,0 +1,63 @@
<!-- Metadata, OpenGraph and Schema.org -->
{% include metadata.liquid %}
<!-- Bootstrap & MDB -->
<link rel="stylesheet" href="{{ '/assets/css/bootstrap.min.css' | relative_url | bust_file_cache }}">
<!-- <link rel="stylesheet" href="{{ '/assets/css/mdb.min.css' | relative_url | bust_file_cache }}"> -->
<link
rel="stylesheet"
href="https://cdn.jsdelivr.net/npm/mdbootstrap@{{ site.mdb.version }}/css/mdb.min.css"
integrity="{{ site.mdb.integrity.css }}"
crossorigin="anonymous"
>
<!-- Bootstrap Table -->
<link defer rel="stylesheet" href="https://unpkg.com/bootstrap-table@{{ site.bootstrap-table.version }}/dist/bootstrap-table.min.css">
<!-- Fonts & Icons -->
<link rel="stylesheet" href="{{ '/assets/css/academicons.min.css' | relative_url | bust_file_cache }}">
<link
rel="stylesheet"
type="text/css"
href="https://fonts.googleapis.com/css?family=Roboto:300,400,500,700|Roboto+Slab:100,300,400,500,700|Material+Icons"
>
<!-- Code Syntax Highlighting -->
<link
rel="stylesheet"
href="{{ '/assets/css/jekyll-pygments-themes-github.css' | relative_url | bust_file_cache }}"
media=""
id="highlight_theme_light"
>
{% if page.toc and page.toc.sidebar %}
<!-- Sidebar Table of Contents -->
<link href="{{ '/assets/css/bootstrap-toc.min.css' | relative_url | bust_file_cache }}" rel="stylesheet">
{% endif %}
{% if page.tikzjax %}
<link defer rel="stylesheet" type="text/css" href="https://tikzjax.com/v1/fonts.css">
<script defer src="https://tikzjax.com/v1/tikzjax.js"></script>
{% endif %}
<!-- Styles -->
{% if site.icon.size <= 4 %}
<link
rel="shortcut icon"
href="data:image/svg+xml,<svg xmlns=%22http://www.w3.org/2000/svg%22 viewBox=%220 0 100 100%22><text y=%22.9em%22 font-size=%2290%22>{{ site.icon }}</text></svg>"
>
{% elsif site.icon != blank %}
<link rel="shortcut icon" href="{{ site.icon | prepend: '/assets/img/' | relative_url | bust_file_cache}}">
{% endif %}
<link rel="stylesheet" href="{{ '/assets/css/main.css' | relative_url | bust_css_cache }}">
<link rel="canonical" href="{{ page.url | replace:'index.html','' | absolute_url }}">
<!-- Dark Mode -->
{% if site.enable_darkmode %}
<link
rel="stylesheet"
href="{{ '/assets/css/jekyll-pygments-themes-native.css' | relative_url | bust_file_cache }}"
media="none"
id="highlight_theme_dark"
>
<script src="{{ '/assets/js/theme.js' | relative_url | bust_file_cache }}"></script>
{% endif %}

View File

@ -1,120 +0,0 @@
<header>
<!-- Nav Bar -->
<nav id="navbar" class="navbar navbar-light navbar-expand-sm {% if site.navbar_fixed %}fixed-top{% else %}sticky-top{% endif %}">
<div class="container">
{% if page.permalink != '/' -%}
<a class="navbar-brand title font-weight-lighter" href="{{ site.baseurl }}/">
{%- if site.title == "blank" -%}
{%- if site.first_name -%}
<span class="font-weight-bold">{{- site.first_name -}}&nbsp;</span>
{%- endif -%}
{%- if site.middle_name -%}
{{- site.middle_name -}}&nbsp;
{%- endif -%}
{%- if site.last_name -%}
{{- site.last_name -}}
{%- endif -%}
{%- else -%}
{{- site.title -}}
{%- endif -%}
</a>
{%- elsif site.enable_navbar_social -%}
<!-- Social Icons -->
<div class="navbar-brand social">
{% include social.html %}
</div>
{% endif %}
<!-- Navbar Toggle -->
<button class="navbar-toggler collapsed ml-auto" type="button" data-toggle="collapse" data-target="#navbarNav" aria-controls="navbarNav" aria-expanded="false" aria-label="Toggle navigation">
<span class="sr-only">Toggle navigation</span>
<span class="icon-bar top-bar"></span>
<span class="icon-bar middle-bar"></span>
<span class="icon-bar bottom-bar"></span>
</button>
<div class="collapse navbar-collapse text-right" id="navbarNav">
<ul class="navbar-nav ml-auto flex-nowrap">
{%- for page in site.pages -%}
{% if page.permalink == '/' %}
{% assign about_title = page.title %}
{% endif %}
{% endfor %}
<!-- About -->
<li class="nav-item {% if page.permalink == '/' %}active{% endif %}">
<a class="nav-link" href="{{ '/' | relative_url }}">{{ about_title }}
{%- if page.permalink == '/' -%}
<span class="sr-only">(current)</span>
{%- endif -%}
</a>
</li>
<!-- Other pages -->
{%- assign sorted_pages = site.pages | sort: "nav_order" -%}
{%- for p in sorted_pages -%}
{%- if p.nav and p.autogen == nil -%}
{%- if p.dropdown %}
{%- assign has_active_child = false -%}
{%- for child in p.children -%}
{%- if page.title == child.title -%}
{%- assign has_active_child = true -%}
{%- endif -%}
{%- endfor -%}
<li class="nav-item dropdown {% if page.title == p.title or has_active_child %}active{% endif %}">
<a class="nav-link dropdown-toggle" href="#" id="navbarDropdown" role="button" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false">{{ p.title }}
{%- if page.title == p.title or has_active_child -%}
<span class="sr-only">(current)</span>
{%- endif -%}
</a>
<div class="dropdown-menu dropdown-menu-right" aria-labelledby="navbarDropdown">
{%- for child in p.children -%}
{%- if child.title == 'divider' %}
<div class="dropdown-divider"></div>
{%- else %}
<a class="dropdown-item {% if page.title == child.title %}active{% endif %}" href="{{ child.permalink | relative_url }}">{{ child.title }}</a>
{%- endif -%}
{% endfor %}
</div>
</li>
{%- else %}
<li class="nav-item {% if page.url contains p.permalink %}active{% endif %}">
{%- if p.permalink contains '/blog/' %}
{%- assign url = '/blog/' -%}
{%- else -%}
{%- assign url = p.url -%}
{%- endif -%}
<a class="nav-link" href="{{ url | relative_url }}">{{ p.title }}
{%- if page.url contains p.url -%}
<span class="sr-only">(current)</span>
{%- endif -%}
</a>
</li>
{%- endif -%}
{%- endif -%}
{% endfor -%}
{%- if site.enable_darkmode %}
<!-- Toogle theme mode -->
<li class="toggle-container">
<button id="light-toggle" title="Change theme">
<i class="fa-solid fa-moon"></i>
<i class="fa-solid fa-sun"></i>
</button>
</li>
{%- endif %}
</ul>
</div>
</div>
</nav>
{% if site.enable_progressbar %}
<!-- Scrolling Progress Bar -->
<progress id="progress" value="0">
<div class="progress-container">
<span class="progress-bar"></span>
</div>
</progress>
{%- endif %}
</header>

133
_includes/header.liquid Normal file
View File

@ -0,0 +1,133 @@
<header>
<!-- Nav Bar -->
<nav id="navbar" class="navbar navbar-light navbar-expand-sm {% if site.navbar_fixed %}fixed-top{% else %}sticky-top{% endif %}">
<div class="container">
{% if page.permalink != '/' %}
<a class="navbar-brand title font-weight-lighter" href="{{ site.baseurl }}/">
{% if site.title == 'blank' %}
{% if site.first_name %}
<span class="font-weight-bold">
{{- site.first_name -}}
&nbsp;</span
>
{% endif %}
{% if site.middle_name %}
{{- site.middle_name -}}
&nbsp;
{% endif %}
{% if site.last_name %}
{{- site.last_name -}}
{% endif %}
{% else %}
{{- site.title -}}
{% endif %}
</a>
{% elsif site.enable_navbar_social %}
<!-- Social Icons -->
<div class="navbar-brand social">{% include social.liquid %}</div>
{% endif %}
<!-- Navbar Toggle -->
<button
class="navbar-toggler collapsed ml-auto"
type="button"
data-toggle="collapse"
data-target="#navbarNav"
aria-controls="navbarNav"
aria-expanded="false"
aria-label="Toggle navigation"
>
<span class="sr-only">Toggle navigation</span>
<span class="icon-bar top-bar"></span>
<span class="icon-bar middle-bar"></span>
<span class="icon-bar bottom-bar"></span>
</button>
<div class="collapse navbar-collapse text-right" id="navbarNav">
<ul class="navbar-nav ml-auto flex-nowrap">
{% for page in site.pages %}
{% if page.permalink == '/' %} {% assign about_title = page.title %} {% endif %}
{% endfor %}
<!-- About -->
<li class="nav-item {% if page.permalink == '/' %}active{% endif %}">
<a class="nav-link" href="{{ '/' | relative_url }}">
{{- about_title }}
{% if page.permalink == '/' %}
<span class="sr-only">(current)</span>
{% endif %}
</a>
</li>
<!-- Other pages -->
{% assign sorted_pages = site.pages | sort: 'nav_order' %}
{% for p in sorted_pages %}
{% if p.nav and p.autogen == null %}
{% if p.dropdown %}
{% assign has_active_child = false %}
{% for child in p.children %}
{% if page.title == child.title %}
{% assign has_active_child = true %}
{% endif %}
{% endfor %}
<li class="nav-item dropdown {% if page.title == p.title or has_active_child %}active{% endif %}">
<a
class="nav-link dropdown-toggle"
href="#"
id="navbarDropdown"
role="button"
data-toggle="dropdown"
aria-haspopup="true"
aria-expanded="false"
>
{{- p.title }}
{% if page.title == p.title or has_active_child %}
<span class="sr-only">(current)</span>
{% endif %}
</a>
<div class="dropdown-menu dropdown-menu-right" aria-labelledby="navbarDropdown">
{% for child in p.children %}
{% if child.title == 'divider' %}
<div class="dropdown-divider"></div>
{% else %}
<a class="dropdown-item {% if page.title == child.title %}active{% endif %}" href="{{ child.permalink | relative_url }}">
{{- child.title -}}
</a>
{% endif %}
{% endfor %}
</div>
</li>
{% else %}
<li class="nav-item {% if page.url contains p.permalink %}active{% endif %}">
{% if p.permalink contains '/blog/' %}{% assign url = '/blog/' %} {% else %}{% assign url = p.url %}{% endif %}
<a class="nav-link" href="{{ url | relative_url }}">
{{- p.title }}
{% if page.url contains p.url %}
<span class="sr-only">(current)</span>
{% endif %}
</a>
</li>
{% endif %}
{% endif %}
{% endfor %}
{% if site.enable_darkmode %}
<!-- Toogle theme mode -->
<li class="toggle-container">
<button id="light-toggle" title="Change theme">
<i class="fa-solid fa-moon"></i>
<i class="fa-solid fa-sun"></i>
</button>
</li>
{% endif %}
</ul>
</div>
</div>
</nav>
{% if site.enable_progressbar %}
<!-- Scrolling Progress Bar -->
<progress id="progress" value="0">
<div class="progress-container">
<span class="progress-bar"></span>
</div>
</progress>
{% endif %}
</header>

View File

@ -1,35 +0,0 @@
<div class="news">
{% if site.latest_posts != blank -%}
{%- assign latest_posts_size = site.posts | size -%}
<div class="table-responsive" {% if site.latest_posts.scrollable and latest_posts_size > 3 %}style="max-height: 60vw"{% endif %}>
<table class="table table-sm table-borderless">
{%- assign latest_posts = site.posts -%}
{% if site.latest_posts.limit %}
{% assign latest_posts_limit = site.latest_posts.limit %}
{% else %}
{% assign latest_posts_limit = latest_posts_size %}
{% endif %}
{% for item in latest_posts limit: latest_posts_limit %}
<tr>
<th scope="row" style="width: 20%">{{ item.date | date: "%b %-d, %Y" }}</th>
<td>
{% if item.redirect == blank %}
<a class="news-title" href="{{ item.url | relative_url }}">{{ item.title }}</a>
{% elsif item.redirect contains '://' %}
<a class="news-title" href="{{ item.redirect }}" target="_blank">{{ item.title }}</a>
<svg width="2rem" height="2rem" viewBox="0 0 40 40" xmlns="http://www.w3.org/2000/svg">
<path d="M17 13.5v6H5v-12h6m3-3h6v6m0-6-9 9" class="icon_svg-stroke" stroke="#999" stroke-width="1.5" fill="none" fill-rule="evenodd" stroke-linecap="round" stroke-linejoin="round"></path>
</svg>
{% else %}
<a class="news-title" href="{{ item.redirect | relative_url }}">{{ item.title }}</a>
{% endif %}
</td>
</tr>
{%- endfor %}
</table>
</div>
{%- else -%}
<p>No posts so far...</p>
{%- endif %}
</div>

View File

@ -0,0 +1,48 @@
<div class="news">
{% if site.latest_posts != blank %}
{% assign latest_posts_size = site.posts | size %}
<div
class="table-responsive"
{% if site.latest_posts.scrollable and latest_posts_size > 3 %}
style="max-height: 60vw"
{% endif %}
>
<table class="table table-sm table-borderless">
{% assign latest_posts = site.posts %}
{% if site.latest_posts.limit %}
{% assign latest_posts_limit = site.latest_posts.limit %}
{% else %}
{% assign latest_posts_limit = latest_posts_size %}
{% endif %}
{% for item in latest_posts limit: latest_posts_limit %}
<tr>
<th scope="row" style="width: 20%">{{ item.date | date: '%b %d, %Y' }}</th>
<td>
{% if item.redirect == blank %}
<a class="news-title" href="{{ item.url | relative_url }}">{{ item.title }}</a>
{% elsif item.redirect contains '://' %}
<a class="news-title" href="{{ item.redirect }}" target="_blank">{{ item.title }}</a>
<svg width="2rem" height="2rem" viewBox="0 0 40 40" xmlns="http://www.w3.org/2000/svg">
<path
d="M17 13.5v6H5v-12h6m3-3h6v6m0-6-9 9"
class="icon_svg-stroke"
stroke="#999"
stroke-width="1.5"
fill="none"
fill-rule="evenodd"
stroke-linecap="round"
stroke-linejoin="round"
></path>
</svg>
{% else %}
<a class="news-title" href="{{ item.redirect | relative_url }}">{{ item.title }}</a>
{% endif %}
</td>
</tr>
{% endfor %}
</table>
</div>
{% else %}
<p>No posts so far...</p>
{% endif %}
</div>

View File

@ -1,239 +0,0 @@
{% if site.enable_google_verification or site.enable_bing_verification %}
<!-- Website verification -->
{% if site.enable_google_verification -%}
<meta name="google-site-verification" content="{{ site.google_site_verification }}" />
{%- endif -%}
{% if site.enable_bing_verification -%}
<meta name="msvalidate.01" content="{{ site.bing_site_verification }}" />
{%- endif -%}
<!-- Avoid warning on Google Chrome
Error with Permissions-Policy header: Origin trial controlled feature not enabled: 'interest-cohort'.
see https://stackoverflow.com/a/75119417
-->
<meta http-equiv="Permissions-Policy" content="interest-cohort=()" />
{%- endif %}
<!-- Standard metadata -->
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<title>
{%- if site.title == "blank" -%}
{%- capture title -%}{{ site.first_name }} {{ site.middle_name }} {{ site.last_name }}{%- endcapture -%}
{%- else -%}
{%- capture title -%}{{ site.title }}{%- endcapture -%}
{%- endif -%}
{% if page.url == '/blog/index.html' %}
{{ page.title }} | {{ title }}
{%- elsif page.title != "blank" and page.url != "/" -%}
{%- if page.title == nil or page.title == "" -%}
{{ page.date | date: "%Y" }} | {{ title }}
{%- else -%}
{{ page.title }} | {{ title }}
{%- endif -%}
{%- else -%}
{{ title }}
{%- endif -%}
</title>
<meta name="author" content="{{ site.first_name }} {{ site.middle_name }} {{ site.last_name }}" />
<meta name="description" content="{%- if page.description -%}{{ page.description }}{%- else -%}{{ site.description }}{%- endif -%}" />
{%- if page.keywords or site.keywords %}
<meta name="keywords" content="{%- if page.keywords -%}{{ page.keywords }}{%- else -%}{{ site.keywords }}{%- endif -%}" />
{%- endif %}
{%- assign is_blog_post = false -%}
{%- if page.url != '/blog/index.html' and page.url contains '/blog/' -%}
{%- unless page.url contains '/tag/' or page.url contains '/category/' -%}
{%- assign is_blog_post = true -%}
{%- endunless -%}
{%- endif -%}
{%- if site.serve_og_meta %}
<!-- OpenGraph -->
<meta property="og:site_name" content="{{ title }}" />
<meta property="og:type" content="{%- if is_blog_post -%}article{%- else -%}website{%- endif -%}" />
<meta property="og:title" content="{%- if page.title -%}{{ title }} | {{ page.title }}{%- else -%}{{ title }}{%- endif -%}" />
<meta property="og:url" content="{{ page.url | prepend: site.baseurl | prepend: site.url | remove_first: 'index.html' }}" />
<meta property="og:description" content="{%- if page.description -%}{{ page.description }}{%- else -%}{{ site.description }}{%- endif -%}" />
{% if page.og_image or site.og_image -%}
<meta property="og:image" content="{%- if page.og_image -%}{{ page.og_image }}{%- else -%}{{ site.og_image }}{%- endif -%}" />
{%- endif %}
<meta property="og:locale" content="{{ site.lang }}" />
<!-- Twitter card -->
<meta name="twitter:card" content="summary" />
<meta name="twitter:title" content="{%- if page.title -%}{{ page.title }}{%- else -%}{{ title }}{%- endif -%}" />
<meta name="twitter:description" content="{%- if page.description -%}{{ page.description }}{%- else -%}{{ site.description }}{%- endif -%}" />
{% if page.og_image or site.og_image -%}
<meta name="twitter:image" content="{%- if page.og_image -%}{{ page.og_image }}{%- else -%}{{ site.og_image }}{%- endif -%}" />
{%- endif %}
{% if site.x_username -%}
<meta name="twitter:site" content="@{{ site.x_username }}" />
<meta name="twitter:creator" content="@{{ site.x_username }}" />
{%- endif %}
{%- endif %}
{%- if site.serve_schema_org %}
<!-- Schema.org -->
{%- comment -%} Social links generator for "sameAs schema" {%- endcomment %}
{% assign sameaslinks = "" | split: "," %}
{%- if site.orcid_id -%}
{%- capture link -%}https://orcid.org/{{ site.orcid_id }}{%- endcapture -%}
{%- assign sameaslinks = sameaslinks | push: link -%}
{%- endif -%}
{%- if site.scholar_userid -%}
{%- capture link -%}https://scholar.google.com/citations?user={{ site.scholar_userid }}{%- endcapture -%}
{%- assign sameaslinks = sameaslinks | push: link -%}
{%- endif -%}
{%- if site.semanticscholar_id -%}
{%- capture link -%}https://www.semanticscholar.org/author/{{ site.semanticscholar_id }}{%- endcapture -%}
{%- assign sameaslinks = sameaslinks | push: link -%}
{%- endif -%}
{%- if site.publons_id -%}
{%- capture link -%}https://publons.com/a/{{ site.publons_id }}/{%- endcapture -%}
{%- assign sameaslinks = sameaslinks | push: link -%}
{%- endif -%}
{%- if site.lattes_id -%}
{%- capture link -%}http://lattes.cnpq.br/{{ site.lattes_id }}{%- endcapture -%}
{%- assign sameaslinks = sameaslinks | push: link -%}
{%- endif -%}
{%- if site.osf_id -%}
{%- capture link -%}https://osf.io/{{ site.osf_id }}/{%- endcapture -%}
{%- assign sameaslinks = sameaslinks | push: link -%}
{%- endif -%}
{%- if site.research_gate_profile -%}
{%- capture link -%}https://www.researchgate.net/profile/{{site.research_gate_profile}}{%- endcapture -%}
{%- assign sameaslinks = sameaslinks | push: link -%}
{%- endif -%}
{%- if site.scopus_id -%}
{%- capture link -%}https://www.scopus.com/authid/detail.uri?authorId={{site.scopus_id}}{%- endcapture -%}
{%- assign sameaslinks = sameaslinks | push: link -%}
{%- endif -%}
{%- if site.github_username -%}
{%- capture link -%}https://github.com/{{ site.github_username }}{%- endcapture -%}
{%- assign sameaslinks = sameaslinks | push: link -%}
{%- endif -%}
{%- if site.telegram_username -%}
{%- capture link -%}https://telegram.me/{{ site.telegram_username }}{%- endcapture -%}
{%- assign sameaslinks = sameaslinks | push: link -%}
{%- endif -%}
{%- if site.linkedin_username -%}
{%- capture link -%}https://www.linkedin.com/in/{{ site.linkedin_username }}{%- endcapture -%}
{%- assign sameaslinks = sameaslinks | push: link -%}
{%- endif -%}
{%- if site.x_username -%}
{%- capture link -%}https://twitter.com/{{ site.x_username }}{%- endcapture -%}
{%- assign sameaslinks = sameaslinks | push: link -%}
{%- endif -%}
{%- if site.mastodon_username -%}
{%- capture link -%}https://{{ site.mastodon_username }}{%- endcapture -%}
{%- assign sameaslinks = sameaslinks | push: link -%}
{%- endif -%}
{%- if site.medium_username -%}
{%- capture link -%}https://medium.com/@{{ site.medium_username }}{%- endcapture -%}
{%- assign sameaslinks = sameaslinks | push: link -%}
{%- endif -%}
{%- if site.quora_username -%}
{%- capture link -%}https://www.quora.com/profile/{{ site.quora_username }}{%- endcapture -%}
{%- assign sameaslinks = sameaslinks | push: link -%}
{%- endif -%}
{%- if site.blogger_url -%}
{%- capture link -%}{{ site.blogger_url }}{%- endcapture -%}
{%- assign sameaslinks = sameaslinks | push: link -%}
{%- endif -%}
{%- if site.work_url -%}
{%- capture link -%}{{ site.work_url }}{%- endcapture -%}
{%- assign sameaslinks = sameaslinks | push: link -%}
{%- endif -%}
{%- if site.wikidata_id -%}
{%- capture link -%}https://www.wikidata.org/wiki/{{ site.wikidata_id }}{%- endcapture -%}
{%- assign sameaslinks = sameaslinks | push: link -%}
{%- endif -%}
{%- if site.wikipedia_id -%}
{%- capture link -%}https://wikipedia.org/wiki/User:{{ site.wikipedia_id }}{%- endcapture -%}
{%- assign sameaslinks = sameaslinks | push: link -%}
{%- endif -%}
{%- if site.strava_userid -%}
{%- capture link -%}https://www.strava.com/athletes/{{ site.strava_userid }}{%- endcapture -%}
{%- assign sameaslinks = sameaslinks | push: link -%}
{%- endif -%}
{%- if site.keybase_username -%}
{%- capture link -%}https://keybase.io/{{ site.keybase_username }}{%- endcapture -%}
{%- assign sameaslinks = sameaslinks | push: link -%}
{%- endif -%}
{%- if site.gitlab_username -%}
{%- capture link -%}https://gitlab.com/{{ site.gitlab_username }}{%- endcapture -%}
{%- assign sameaslinks = sameaslinks | push: link -%}
{%- endif -%}
{%- if site.dblp_url -%}
{%- capture link -%}{{ site.dblp_url }}{%- endcapture -%}
{%- assign sameaslinks = sameaslinks | push: link -%}
{%- endif -%}
{%- if site.stackoverflow_id -%}
{%- capture link -%}https://stackoverflow.com/users/{{ site.stackoverflow_id }}{%- endcapture -%}
{%- assign sameaslinks = sameaslinks | push: link -%}
{%- endif -%}
{%- if site.kaggle_id -%}
{%- capture link -%}https://www.kaggle.com/{{ site.kaggle_id }}{%- endcapture -%}
{%- assign sameaslinks = sameaslinks | push: link -%}
{%- endif -%}
{%- if site.lastfm_id -%}
{%- capture link -%}https://www.last.fm/user/{{ site.lastfm_id }}{%- endcapture -%}
{%- assign sameaslinks = sameaslinks | push: link -%}
{%- endif -%}
{%- if site.spotify_id -%}
{%- capture link -%}https://open.spotify.com/user/{{ site.spotify_id }}{%- endcapture -%}
{%- assign sameaslinks = sameaslinks | push: link -%}
{%- endif -%}
{%- if site.pinterest_id -%}
{%- capture link -%}https://www.pinterest.com/{{ site.pinterest_id }}{%- endcapture -%}
{%- assign sameaslinks = sameaslinks | push: link -%}
{%- endif -%}
{%- if site.unsplash_id -%}
{%- capture link -%}https://unsplash.com/@{{ site.unsplash_id }}{%- endcapture -%}
{%- assign sameaslinks = sameaslinks | push: link -%}
{%- endif -%}
{%- if site.instagram_id -%}
{%- capture link -%}https://instagram.com/{{ site.instagram_id }}{%- endcapture -%}
{%- assign sameaslinks = sameaslinks | push: link -%}
{%- endif -%}
{%- if site.facebook_id -%}
{%- capture link -%}https://facebook.com/{{ site.facebook_id }}{%- endcapture -%}
{%- assign sameaslinks = sameaslinks | push: link -%}
{%- endif -%}
{%- if site.youtube_id -%}
{%- capture link -%}https://youtube.com/@{{ site.youtube_id }}{%- endcapture -%}
{%- assign sameaslinks = sameaslinks | push: link -%}
{%- endif -%}
{%- if site.discord_id -%}
{%- capture link -%}https://discord.com/users/{{ site.discord_id }}{%- endcapture -%}
{%- assign sameaslinks = sameaslinks | push: link -%}
{%- endif -%}
{%- if site.zotero_username -%}
{%- capture link -%}https://www.zotero.org/{{ site.zotero_username }}{%- endcapture -%}
{%- assign sameaslinks = sameaslinks | push: link -%}
{%- endif -%}
{%- if sameaslinks != blank -%}
{%- assign sameaslinks = sameaslinks | split: "" -%}
{%- endif -%}
<script type="application/ld+json">
{
"author":
{
"@type": "Person",
"name": "{{ site.first_name }} {{ site.middle_name }} {{ site.last_name }}"
},
"url": "{{ page.url | prepend: site.baseurl | prepend: site.url }}",
"@type": "{%- if is_blog_post -%}BlogPosting{%- else -%}WebSite{%- endif -%}",
"description": "{%- if page.description -%}{{ page.description }}{%- else if site.description -%}{{ site.description }}{%- endif -%}",
"headline": "{%- if page.title -%}{{ page.title }}{%- else -%}{{ site.title }}{%- endif -%}",
{% if sameaslinks != blank -%}
"sameAs": {{ sameaslinks }},
{%- endif %}
"name": "{{ site.first_name }} {{ site.middle_name }} {{ site.last_name }}",
"@context": "https://schema.org"
}
</script>
{%- endif %}

239
_includes/metadata.liquid Normal file
View File

@ -0,0 +1,239 @@
{% if site.enable_google_verification or site.enable_bing_verification %}
<!-- Website verification -->
{% if site.enable_google_verification %}
<meta name="google-site-verification" content="{{ site.google_site_verification }}">
{% endif %}
{% if site.enable_bing_verification %}
<meta name="msvalidate.01" content="{{ site.bing_site_verification }}">
{% endif %}
<!--
Avoid warning on Google Chrome Error with Permissions-Policy header:
Origin trial controlled feature not enabled: 'interest-cohort'.
see https://stackoverflow.com/a/75119417
-->
<meta http-equiv="Permissions-Policy" content="interest-cohort=()">
{% endif %}
<!-- Standard metadata -->
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<title>
{% if site.title == 'blank' %}
{% capture title %}{{ site.first_name }} {{ site.middle_name }} {{ site.last_name }}{% endcapture %}
{% else %}
{% capture title %}{{ site.title }}{% endcapture %}
{% endif %}
{% if page.url == '/blog/index.html' %}
{{ page.title }} | {{ title }}
{% elsif page.title != 'blank' and page.url != '/' %}
{% if page.title == null or page.title == '' %}
{{ page.date | date: '%Y' }} | {{ title }}
{% else %}
{{ page.title }} | {{ title }}
{% endif %}
{% else %}
{{ title }}
{% endif %}
</title>
<meta name="author" content="{{ site.first_name }} {{ site.middle_name }} {{ site.last_name }}">
<meta name="description" content="{% if page.description %}{{ page.description }}{% else %}{{ site.description }}{% endif %}">
{% if page.keywords or site.keywords %}
<meta name="keywords" content="{% if page.keywords %}{{ page.keywords }}{% else %}{{ site.keywords }}{% endif %}">
{% endif %}
{% assign is_blog_post = false %}
{% if page.url != '/blog/index.html' and page.url contains '/blog/' %}
{% unless page.url contains '/tag/' or page.url contains '/category/' %}
{% assign is_blog_post = true %}
{% endunless %}
{% endif %}
{% if site.serve_og_meta %}
<!-- OpenGraph -->
<meta property="og:site_name" content="{{ title }}">
<meta property="og:type" content="{% if is_blog_post %}article{% else %}website{% endif %}">
<meta property="og:title" content="{% if page.title %}{{ title }} | {{ page.title }}{% else %}{{ title }}{% endif %}">
<meta property="og:url" content="{{ page.url | prepend: site.baseurl | prepend: site.url | remove_first: 'index.html' }}">
<meta property="og:description" content="{% if page.description %}{{ page.description }}{% else %}{{ site.description }}{% endif %}">
{% if page.og_image or site.og_image %}
<meta property="og:image" content="{% if page.og_image %}{{ page.og_image }}{% else %}{{ site.og_image }}{% endif %}">
{% endif %}
<meta property="og:locale" content="{{ site.lang }}">
<!-- Twitter card -->
<meta name="twitter:card" content="summary">
<meta name="twitter:title" content="{% if page.title %}{{ page.title }}{% else %}{{ title }}{% endif %}">
<meta name="twitter:description" content="{% if page.description %}{{ page.description }}{% else %}{{ site.description }}{% endif %}">
{% if page.og_image or site.og_image %}
<meta name="twitter:image" content="{% if page.og_image %}{{ page.og_image }}{% else %}{{ site.og_image }}{% endif %}">
{% endif %}
{% if site.x_username %}
<meta name="twitter:site" content="@{{ site.x_username }}">
<meta name="twitter:creator" content="@{{ site.x_username }}">
{% endif %}
{% endif %}
{% if site.serve_schema_org %}
<!-- Schema.org -->
{% comment %} Social links generator for "sameAs schema" {% endcomment %}
{% assign sameaslinks = '' | split: ',' %}
{% if site.orcid_id %}
{% capture link %}https://orcid.org/{{ site.orcid_id }}{% endcapture %}
{% assign sameaslinks = sameaslinks | push: link %}
{% endif %}
{% if site.scholar_userid %}
{% capture link %}https://scholar.google.com/citations?user={{ site.scholar_userid }}{% endcapture %}
{% assign sameaslinks = sameaslinks | push: link %}
{% endif %}
{% if site.semanticscholar_id %}
{% capture link %}https://www.semanticscholar.org/author/{{ site.semanticscholar_id }}{% endcapture %}
{% assign sameaslinks = sameaslinks | push: link %}
{% endif %}
{% if site.publons_id %}
{% capture link %}https://publons.com/a/{{ site.publons_id }}/{% endcapture %}
{% assign sameaslinks = sameaslinks | push: link %}
{% endif %}
{% if site.lattes_id %}
{% capture link %}http://lattes.cnpq.br/{{ site.lattes_id }}{% endcapture %}
{% assign sameaslinks = sameaslinks | push: link %}
{% endif %}
{% if site.osf_id %}
{% capture link %}https://osf.io/{{ site.osf_id }}/{% endcapture %}
{% assign sameaslinks = sameaslinks | push: link %}
{% endif %}
{% if site.research_gate_profile %}
{% capture link %}https://www.researchgate.net/profile/{{site.research_gate_profile}}{% endcapture %}
{% assign sameaslinks = sameaslinks | push: link %}
{% endif %}
{% if site.scopus_id %}
{% capture link %}https://www.scopus.com/authid/detail.uri?authorId={{site.scopus_id}}{% endcapture %}
{% assign sameaslinks = sameaslinks | push: link %}
{% endif %}
{% if site.github_username %}
{% capture link %}https://github.com/{{ site.github_username }}{% endcapture %}
{% assign sameaslinks = sameaslinks | push: link %}
{% endif %}
{% if site.telegram_username %}
{% capture link %}https://telegram.me/{{ site.telegram_username }}{% endcapture %}
{% assign sameaslinks = sameaslinks | push: link %}
{% endif %}
{% if site.linkedin_username %}
{% capture link %}https://www.linkedin.com/in/{{ site.linkedin_username }}{% endcapture %}
{% assign sameaslinks = sameaslinks | push: link %}
{% endif %}
{% if site.x_username %}
{% capture link %}https://twitter.com/{{ site.x_username }}{% endcapture %}
{% assign sameaslinks = sameaslinks | push: link %}
{% endif %}
{% if site.mastodon_username %}
{% capture link %}https://{{ site.mastodon_username }}{% endcapture %}
{% assign sameaslinks = sameaslinks | push: link %}
{% endif %}
{% if site.medium_username %}
{% capture link %}https://medium.com/@{{ site.medium_username }}{% endcapture %}
{% assign sameaslinks = sameaslinks | push: link %}
{% endif %}
{% if site.quora_username %}
{% capture link %}https://www.quora.com/profile/{{ site.quora_username }}{% endcapture %}
{% assign sameaslinks = sameaslinks | push: link %}
{% endif %}
{% if site.blogger_url %}
{% capture link %}{{ site.blogger_url }}{% endcapture %}
{% assign sameaslinks = sameaslinks | push: link %}
{% endif %}
{% if site.work_url %}
{% capture link %}{{ site.work_url }}{% endcapture %}
{% assign sameaslinks = sameaslinks | push: link %}
{% endif %}
{% if site.wikidata_id %}
{% capture link %}https://www.wikidata.org/wiki/{{ site.wikidata_id }}{% endcapture %}
{% assign sameaslinks = sameaslinks | push: link %}
{% endif %}
{% if site.wikipedia_id %}
{% capture link %}https://wikipedia.org/wiki/User:{{ site.wikipedia_id }}{% endcapture %}
{% assign sameaslinks = sameaslinks | push: link %}
{% endif %}
{% if site.strava_userid %}
{% capture link %}https://www.strava.com/athletes/{{ site.strava_userid }}{% endcapture %}
{% assign sameaslinks = sameaslinks | push: link %}
{% endif %}
{% if site.keybase_username %}
{% capture link %}https://keybase.io/{{ site.keybase_username }}{% endcapture %}
{% assign sameaslinks = sameaslinks | push: link %}
{% endif %}
{% if site.gitlab_username %}
{% capture link %}https://gitlab.com/{{ site.gitlab_username }}{% endcapture %}
{% assign sameaslinks = sameaslinks | push: link %}
{% endif %}
{% if site.dblp_url %}
{% capture link %}{{ site.dblp_url }}{% endcapture %}
{% assign sameaslinks = sameaslinks | push: link %}
{% endif %}
{% if site.stackoverflow_id %}
{% capture link %}https://stackoverflow.com/users/{{ site.stackoverflow_id }}{% endcapture %}
{% assign sameaslinks = sameaslinks | push: link %}
{% endif %}
{% if site.kaggle_id %}
{% capture link %}https://www.kaggle.com/{{ site.kaggle_id }}{% endcapture %}
{% assign sameaslinks = sameaslinks | push: link %}
{% endif %}
{% if site.lastfm_id %}
{% capture link %}https://www.last.fm/user/{{ site.lastfm_id }}{% endcapture %}
{% assign sameaslinks = sameaslinks | push: link %}
{% endif %}
{% if site.spotify_id %}
{% capture link %}https://open.spotify.com/user/{{ site.spotify_id }}{% endcapture %}
{% assign sameaslinks = sameaslinks | push: link %}
{% endif %}
{% if site.pinterest_id %}
{% capture link %}https://www.pinterest.com/{{ site.pinterest_id }}{% endcapture %}
{% assign sameaslinks = sameaslinks | push: link %}
{% endif %}
{% if site.unsplash_id %}
{% capture link %}https://unsplash.com/@{{ site.unsplash_id }}{% endcapture %}
{% assign sameaslinks = sameaslinks | push: link %}
{% endif %}
{% if site.instagram_id %}
{% capture link %}https://instagram.com/{{ site.instagram_id }}{% endcapture %}
{% assign sameaslinks = sameaslinks | push: link %}
{% endif %}
{% if site.facebook_id %}
{% capture link %}https://facebook.com/{{ site.facebook_id }}{% endcapture %}
{% assign sameaslinks = sameaslinks | push: link %}
{% endif %}
{% if site.youtube_id %}
{% capture link %}https://youtube.com/@{{ site.youtube_id }}{% endcapture %}
{% assign sameaslinks = sameaslinks | push: link %}
{% endif %}
{% if site.discord_id %}
{% capture link %}https://discord.com/users/{{ site.discord_id }}{% endcapture %}
{% assign sameaslinks = sameaslinks | push: link %}
{% endif %}
{% if site.zotero_username %}
{% capture link %}https://www.zotero.org/{{ site.zotero_username }}{% endcapture %}
{% assign sameaslinks = sameaslinks | push: link %}
{% endif %}
{% if sameaslinks != blank %}
{% assign sameaslinks = sameaslinks | split: '' %}
{% endif %}
<script type="application/ld+json">
{
"author":
{
"@type": "Person",
"name": "{{ site.first_name }} {{ site.middle_name }} {{ site.last_name }}"
},
"url": "{{ page.url | prepend: site.baseurl | prepend: site.url }}",
"@type": "{% if is_blog_post %}BlogPosting{% else %}WebSite{% endif %}",
"description": "{% if page.description %}{{ page.description }}{% else if site.description %}{{ site.description }}{% endif %}",
"headline": "{% if page.title %}{{ page.title }}{% else %}{{ site.title }}{% endif %}",
{% if sameaslinks != blank %}
"sameAs": {{ sameaslinks }},
{% endif %}
"name": "{{ site.first_name }} {{ site.middle_name }} {{ site.last_name }}",
"@context": "https://schema.org"
}
</script>
{% endif %}

View File

@ -1,29 +0,0 @@
<div class="news">
{% if site.news != blank -%}
{%- assign news_size = site.news | size -%}
<div class="table-responsive" {% if include.limit and site.announcements.scrollable and news_size > 3 %}style="max-height: 60vw"{% endif %}>
<table class="table table-sm table-borderless">
{%- assign news = site.news | reverse -%}
{% if include.limit and site.announcements.limit %}
{% assign news_limit = site.announcements.limit %}
{% else %}
{% assign news_limit = news_size %}
{% endif %}
{% for item in news limit: news_limit %}
<tr>
<th scope="row" style="width: 20%">{{ item.date | date: "%b %-d, %Y" }}</th>
<td>
{% if item.inline -%}
{{ item.content | remove: '<p>' | remove: '</p>' | emojify }}
{%- else -%}
<a class="news-title" href="{{ item.url | relative_url }}">{{ item.title }}</a>
{%- endif %}
</td>
</tr>
{%- endfor %}
</table>
</div>
{%- else -%}
<p>No news so far...</p>
{%- endif %}
</div>

34
_includes/news.liquid Normal file
View File

@ -0,0 +1,34 @@
<div class="news">
{% if site.news != blank %}
{% assign news_size = site.news | size %}
<div
class="table-responsive"
{% if include.limit and site.announcements.scrollable and news_size > 3 %}
style="max-height: 60vw"
{% endif %}
>
<table class="table table-sm table-borderless">
{% assign news = site.news | reverse %}
{% if include.limit and site.announcements.limit %}
{% assign news_limit = site.announcements.limit %}
{% else %}
{% assign news_limit = news_size %}
{% endif %}
{% for item in news limit: news_limit %}
<tr>
<th scope="row" style="width: 20%">{{ item.date | date: '%b %d, %Y' }}</th>
<td>
{% if item.inline %}
{{ item.content | remove: '<p>' | remove: '</p>' | emojify }}
{% else %}
<a class="news-title" href="{{ item.url | relative_url }}">{{ item.title }}</a>
{% endif %}
</td>
</tr>
{% endfor %}
</table>
</div>
{% else %}
<p>No news so far...</p>
{% endif %}
</div>

View File

@ -1,17 +0,0 @@
{%- if paginator.total_pages > 1 -%}
<nav aria-label="Blog page naviation">
<ul class="pagination pagination-lg justify-content-center">
<li class="page-item {% unless paginator.previous_page %}disabled{% endunless %}">
<a class="page-link" href="{{ paginator.previous_page_path | relative_url }}" tabindex="-1" aria-disabled="{{ paginator.previous_page }}">Newer</a>
</li>
{%- if paginator.page_trail -%}
{% for trail in paginator.page_trail -%}
<li class="page-item {% if page.url == trail.path %}active{% endif %}"><a class="page-link" href="{{ trail.path | relative_url }}" title="{{trail.title}}">{{ trail.num }}</a></li>
{% endfor -%}
{%- endif -%}
<li class="page-item {% unless paginator.next_page %}disabled{% endunless %}">
<a class="page-link" href="{{ paginator.next_page_path | relative_url }}">Older</a>
</li>
</ul>
</nav>
{%- endif -%}

View File

@ -0,0 +1,21 @@
{% if paginator.total_pages > 1 %}
<nav aria-label="Blog page naviation">
<ul class="pagination pagination-lg justify-content-center">
<li class="page-item {% unless paginator.previous_page %}disabled{% endunless %}">
<a class="page-link" href="{{ paginator.previous_page_path | relative_url }}" tabindex="-1" aria-disabled="{{ paginator.previous_page }}"
>Newer</a
>
</li>
{% if paginator.page_trail %}
{% for trail in paginator.page_trail %}
<li class="page-item {% if page.url == trail.path %}active{% endif %}">
<a class="page-link" href="{{ trail.path | relative_url }}" title="{{trail.title}}">{{ trail.num }}</a>
</li>
{% endfor %}
{% endif %}
<li class="page-item {% unless paginator.next_page %}disabled{% endunless %}">
<a class="page-link" href="{{ paginator.next_page_path | relative_url }}">Older</a>
</li>
</ul>
</nav>
{% endif %}

View File

@ -1,37 +0,0 @@
<!-- _includes/projects.html -->
<div class="grid-sizer"></div>
<div class="grid-item">
{% if project.redirect -%}
<a href="{{ project.redirect }}">
{%- else -%}
<a href="{{ project.url | relative_url }}">
{%- endif %}
<div class="card hoverable">
{%- if project.img %}
{%- include figure.html
path=project.img
sizes = "250px"
alt="project thumbnail" -%}
{%- endif %}
<div class="card-body">
<h2 class="card-title text-lowercase">{{ project.title }}</h2>
<p class="card-text">{{ project.description }}</p>
<div class="row ml-1 mr-1 p-0">
{%- if project.github -%}
<div class="github-icon">
<div class="icon" data-toggle="tooltip" title="Code Repository">
<a href="{{ project.github }}"><i class="fa-brands fa-github gh-icon"></i></a>
</div>
{%- if project.github_stars -%}
<span class="stars" data-toggle="tooltip" title="GitHub Stars">
<i class="fa-solid fa-star"></i>
<span id="{{ project.github_stars }}-stars"></span>
</span>
{%- endif %}
</div>
{%- endif %}
</div>
</div>
</div>
</a>
</div>

35
_includes/projects.liquid Normal file
View File

@ -0,0 +1,35 @@
<!-- _includes/projects.html -->
<div class="grid-sizer"></div>
<div class="grid-item">
<a href="{% if project.redirect %}{{ project.redirect }}{% else %}{{ project.url | relative_url }}{% endif %}">
<div class="card hoverable">
{% if project.img %}
{%
include figure.liquid
path=project.img
sizes = "250px"
alt="project thumbnail"
%}
{% endif %}
<div class="card-body">
<h2 class="card-title text-lowercase">{{ project.title }}</h2>
<p class="card-text">{{ project.description }}</p>
<div class="row ml-1 mr-1 p-0">
{% if project.github %}
<div class="github-icon">
<div class="icon" data-toggle="tooltip" title="Code Repository">
<a href="{{ project.github }}"><i class="fa-brands fa-github gh-icon"></i></a>
</div>
{% if project.github_stars %}
<span class="stars" data-toggle="tooltip" title="GitHub Stars">
<i class="fa-solid fa-star"></i>
<span id="{{ project.github_stars }}-stars"></span>
</span>
{% endif %}
</div>
{% endif %}
</div>
</div>
</div>
</a>
</div>

View File

@ -1,40 +0,0 @@
<div class="card-item col">
{%- if project.redirect -%}
<a href="{{ project.redirect }}">
{%- else -%}
<a href="{{ project.url | relative_url }}">
{%- endif -%}
<div class="card hoverable">
<div class="row g-0">
{%- if project.img -%}
<div class="card-img col-md-6">
{% include figure.html path=project.img sizes="(min-width: 768px) 156px, 50vw" alt="project thumbnail" %}
</div>
<div class="col-md-6">
{%- else -%}
<div class="col-md-12">
{%- endif -%}
<div class="card-body">
<h3 class="card-title text-lowercase">{{ project.title }}</h3>
<p class="card-text">{{ project.description }}</p>
<div class="row ml-1 mr-1 p-0">
{%- if project.github -%}
<div class="github-icon">
<div class="icon" data-toggle="tooltip" title="Code Repository">
<a href="{{ project.github }}"><i class="fa-brands fa-github gh-icon"></i></a>
</div>
{%- if project.github_stars -%}
<span class="stars" data-toggle="tooltip" title="GitHub Stars">
<i class="fa-solid fa-star"></i>
<span id="{{ project.github_stars }}-stars"></span>
</span>
{%- endif -%}
</div>
{%- endif -%}
</div>
</div>
</div>
</div>
</div>
</a>
</div>

View File

@ -0,0 +1,34 @@
<div class="card-item col">
<a href="{% if project.redirect %}{{ project.redirect }}{% else %}{{ project.url | relative_url }}{% endif %}">
<div class="card hoverable">
<div class="row g-0">
{% if project.img %}
<div class="card-img col-md-6">
{% include figure.liquid path=project.img sizes="(min-width: 768px) 156px, 50vw" alt="project thumbnail" %}
</div>
{% endif %}
<div class="{% if project.img %}col-md-6{% else %}col-md-12{% endif %}">
<div class="card-body">
<h3 class="card-title text-lowercase">{{ project.title }}</h3>
<p class="card-text">{{ project.description }}</p>
<div class="row ml-1 mr-1 p-0">
{% if project.github %}
<div class="github-icon">
<div class="icon" data-toggle="tooltip" title="Code Repository">
<a href="{{ project.github }}"><i class="fa-brands fa-github gh-icon"></i></a>
</div>
{% if project.github_stars %}
<span class="stars" data-toggle="tooltip" title="GitHub Stars">
<i class="fa-solid fa-star"></i>
<span id="{{ project.github_stars }}-stars"></span>
</span>
{% endif %}
</div>
{% endif %}
</div>
</div>
</div>
</div>
</div>
</a>
</div>

View File

@ -1,5 +1,4 @@
{% assign have_related_posts = false %}
{% for post in site.related_posts | limit: site.related_blog_posts.max_related %}
{% unless have_related_posts %}
{% assign have_related_posts = true %}

View File

@ -1,14 +0,0 @@
{% assign repo_url = include.repository | split: '/' %}
{% if site.data.repositories.github_users contains repo_url.first %}
{% assign show_owner = false %}
{% else %}
{% assign show_owner = true %}
{% endif %}
<div class="repo p-2 text-center">
<a href="https://github.com/{{ include.repository }}">
<img class="repo-img-light w-100" alt="{{ include.repository }}" src="https://github-readme-stats.vercel.app/api/pin/?username={{ repo_url[0] }}&repo={{ repo_url[1] }}&theme={{ site.repo_theme_light }}&show_owner={{ show_owner }}">
<img class="repo-img-dark w-100" alt="{{ include.repository }}" src="https://github-readme-stats.vercel.app/api/pin/?username={{ repo_url[0] }}&repo={{ repo_url[1] }}&theme={{ site.repo_theme_dark }}&show_owner={{ show_owner }}">
</a>
</div>

View File

@ -0,0 +1,21 @@
{% assign repo_url = include.repository | split: '/' %}
{% if site.data.repositories.github_users contains repo_url.first %}
{% assign show_owner = false %}
{% else %}
{% assign show_owner = true %}
{% endif %}
<div class="repo p-2 text-center">
<a href="https://github.com/{{ include.repository }}">
<img
class="repo-img-light w-100"
alt="{{ include.repository }}"
src="https://github-readme-stats.vercel.app/api/pin/?username={{ repo_url[0] }}&repo={{ repo_url[1] }}&theme={{ site.repo_theme_light }}&show_owner={{ show_owner }}"
>
<img
class="repo-img-dark w-100"
alt="{{ include.repository }}"
src="https://github-readme-stats.vercel.app/api/pin/?username={{ repo_url[0] }}&repo={{ repo_url[1] }}&theme={{ site.repo_theme_dark }}&show_owner={{ show_owner }}"
>
</a>
</div>

View File

@ -1,18 +0,0 @@
<div class="repo p-2 text-center">
<a href="https://github.com/ryo-ma/github-profile-trophy">
<span class="d-none d-sm-none d-md-block">
<img class="repo-img-light" alt="{{ include.username }}" src="https://github-profile-trophy.vercel.app/?username={{ include.username }}&theme={{ site.repo_trophies.theme_light }}&locale={{ site.lang }}&margin-w=15&margin-h=15&no-bg=true&rank=-C&column=6">
<img class="repo-img-dark" alt="{{ include.username }}" src="https://github-profile-trophy.vercel.app/?username={{ include.username }}&theme={{ site.repo_trophies.theme_dark }}&locale={{ site.lang }}&margin-w=15&margin-h=15&no-bg=true&rank=-C&column=6">
</span>
<span class="d-none d-sm-block d-md-none">
<img class="repo-img-light" alt="{{ include.username }}" src="https://github-profile-trophy.vercel.app/?username={{ include.username }}&theme={{ site.repo_trophies.theme_light }}&locale={{ site.lang }}&margin-w=15&margin-h=15&no-bg=true&rank=-C&column=4">
<img class="repo-img-dark" alt="{{ include.username }}" src="https://github-profile-trophy.vercel.app/?username={{ include.username }}&theme={{ site.repo_trophies.theme_dark }}&locale={{ site.lang }}&margin-w=15&margin-h=15&no-bg=true&rank=-C&column=4">
</span>
<span class="d-block d-sm-none">
<img class="repo-img-light" alt="{{ include.username }}" src="https://github-profile-trophy.vercel.app/?username={{ include.username }}&theme={{ site.repo_trophies.theme_light }}&locale={{ site.lang }}&margin-w=15&margin-h=15&no-bg=true&rank=-C&column=3">
<img class="repo-img-dark" alt="{{ include.username }}" src="https://github-profile-trophy.vercel.app/?username={{ include.username }}&theme={{ site.repo_trophies.theme_dark }}&locale={{ site.lang }}&margin-w=15&margin-h=15&no-bg=true&rank=-C&column=3">
</span>
</a>
</div>

View File

@ -0,0 +1,42 @@
<div class="repo p-2 text-center">
<a href="https://github.com/ryo-ma/github-profile-trophy">
<span class="d-none d-sm-none d-md-block">
<img
class="repo-img-light"
alt="{{ include.username }}"
src="https://github-profile-trophy.vercel.app/?username={{ include.username }}&theme={{ site.repo_trophies.theme_light }}&locale={{ site.lang }}&margin-w=15&margin-h=15&no-bg=true&rank=-C&column=6"
>
<img
class="repo-img-dark"
alt="{{ include.username }}"
src="https://github-profile-trophy.vercel.app/?username={{ include.username }}&theme={{ site.repo_trophies.theme_dark }}&locale={{ site.lang }}&margin-w=15&margin-h=15&no-bg=true&rank=-C&column=6"
>
</span>
<span class="d-none d-sm-block d-md-none">
<img
class="repo-img-light"
alt="{{ include.username }}"
src="https://github-profile-trophy.vercel.app/?username={{ include.username }}&theme={{ site.repo_trophies.theme_light }}&locale={{ site.lang }}&margin-w=15&margin-h=15&no-bg=true&rank=-C&column=4"
>
<img
class="repo-img-dark"
alt="{{ include.username }}"
src="https://github-profile-trophy.vercel.app/?username={{ include.username }}&theme={{ site.repo_trophies.theme_dark }}&locale={{ site.lang }}&margin-w=15&margin-h=15&no-bg=true&rank=-C&column=4"
>
</span>
<span class="d-block d-sm-none">
<img
class="repo-img-light"
alt="{{ include.username }}"
src="https://github-profile-trophy.vercel.app/?username={{ include.username }}&theme={{ site.repo_trophies.theme_light }}&locale={{ site.lang }}&margin-w=15&margin-h=15&no-bg=true&rank=-C&column=3"
>
<img
class="repo-img-dark"
alt="{{ include.username }}"
src="https://github-profile-trophy.vercel.app/?username={{ include.username }}&theme={{ site.repo_trophies.theme_dark }}&locale={{ site.lang }}&margin-w=15&margin-h=15&no-bg=true&rank=-C&column=3"
>
</span>
</a>
</div>

View File

@ -1,6 +0,0 @@
<div class="repo p-2 text-center">
<a href="https://github.com/{{ include.username }}">
<img class="repo-img-light w-100" alt="{{ include.username }}" src="https://github-readme-stats.vercel.app/api/?username={{ include.username }}&theme={{ site.repo_theme_light }}&show_icons=true">
<img class="repo-img-dark w-100" alt="{{ include.username }}" src="https://github-readme-stats.vercel.app/api/?username={{ include.username }}&theme={{ site.repo_theme_dark }}&show_icons=true">
</a>
</div>

View File

@ -0,0 +1,14 @@
<div class="repo p-2 text-center">
<a href="https://github.com/{{ include.username }}">
<img
class="repo-img-light w-100"
alt="{{ include.username }}"
src="https://github-readme-stats.vercel.app/api/?username={{ include.username }}&theme={{ site.repo_theme_light }}&show_icons=true"
>
<img
class="repo-img-dark w-100"
alt="{{ include.username }}"
src="https://github-readme-stats.vercel.app/api/?username={{ include.username }}&theme={{ site.repo_theme_dark }}&show_icons=true"
>
</a>
</div>

View File

@ -1,23 +0,0 @@
<ul class="card-text font-weight-light list-group list-group-flush">
{% for content in data[1] %}
<li class="list-group-item">
<div class="row">
<div class="col-xs-2 cl-sm-2 col-md-2 text-center" style="width: 75px;">
{% if content.date %}
{% assign date = content.date | split: "-" | join: "." %}
{% else %}
{% assign date = "" %}
{% endif %}
<span class="badge font-weight-bold danger-color-dark text-uppercase align-middle" style="min-width: 75px;">
{{ date }}
</span>
</div>
<div class="col-xs-10 cl-sm-10 col-md-10 mt-2 mt-md-0">
<h6 class="title font-weight-bold ml-1 ml-md-4"><a href="{{ content.url }}">{{content.title}}</a></h6>
<h6 class="ml-1 ml-md-4" style="font-size: 0.95rem;">{{content.awarder}}</h6>
<h6 class="ml-1 ml-md-4" style="font-size: 0.95rem; font-style: italic;">{{content.summary}}</h6>
</div>
</div>
</li>
{% endfor %}
</ul>

View File

@ -0,0 +1,19 @@
<ul class="card-text font-weight-light list-group list-group-flush">
{% for content in data[1] %}
<li class="list-group-item">
<div class="row">
<div class="col-xs-2 cl-sm-2 col-md-2 text-center" style="width: 75px">
{% if content.date %} {% assign date = content.date | split: '-' | join: '.' %} {% else %} {% assign date = '' %} {% endif %}
<span class="badge font-weight-bold danger-color-dark text-uppercase align-middle" style="min-width: 75px"> {{ date }} </span>
</div>
<div class="col-xs-10 cl-sm-10 col-md-10 mt-2 mt-md-0">
<h6 class="title font-weight-bold ml-1 ml-md-4">
<a href="{{ content.url }}">{{ content.title }}</a>
</h6>
<h6 class="ml-1 ml-md-4" style="font-size: 0.95rem">{{ content.awarder }}</h6>
<h6 class="ml-1 ml-md-4" style="font-size: 0.95rem; font-style: italic">{{ content.summary }}</h6>
</div>
</div>
</li>
{% endfor %}
</ul>

View File

@ -1,23 +0,0 @@
<table class="table table-cv table-sm table-borderless table-responsive table-cv-map">
{% assign skip_basics = "image,profiles,location" | split:"," %}
{% for content in data[1] %}
{% if (content[1] == "") or (skip_basics contains content[0]) %}
{% continue %}
{% endif %}
<tr>
<td class="p-1 pr-2 font-weight-bold"><b>{{ content[0] | capitalize }}</b></td>
<td class="p-1 pl-2 font-weight-light text">
{% if content[0] == "url" %}
<a href="{{ content[1] }}" target="_blank" rel="noopener noreferrer">{{ content[1] }}</a>
{% elsif content[0] == "email" %}
<a href="mailto:{{ content[1] }}" target="_blank">{{ content[1] }}</a>
{% elsif content[0] == "phone" %}
<a href="tel:{{ content[1] }}">{{ content[1] }}</a>
{% else %}
{{ content[1] }}
{% endif %}
</td>
</tr>
{% endfor %}
</table>

View File

@ -0,0 +1,28 @@
<table class="table table-cv table-sm table-borderless table-responsive table-cv-map">
{% assign skip_basics = 'image,profiles,location' | split: ',' %}
{% for content in data[1] %}
{%
if (content[1] == "") or (skip_basics contains
content[0])
%}
{% continue %}
{% endif %}
<tr>
<td class="p-1 pr-2 font-weight-bold">
<b>{{ content[0] | capitalize }}</b>
</td>
<td class="p-1 pl-2 font-weight-light text">
{% if content[0] == 'url' %}
<a href="{{ content[1] }}" target="_blank" rel="noopener noreferrer">{{ content[1] }}</a>
{% elsif content[0] == 'email' %}
<a href="mailto:{{ content[1] }}" target="_blank">{{ content[1] }}</a>
{% elsif content[0] == 'phone' %}
<a href="tel:{{ content[1] }}">{{ content[1] }}</a>
{% else %}
{{ content[1] }}
{% endif %}
</td>
</tr>
{% endfor %}
</table>

View File

@ -6,14 +6,16 @@
<tbody>
<tr>
{% if content.icon %}
<td class="list-group-category-icon"><i class="{{ content.icon }}"></i></td>
<td class="list-group-category-icon">
<i class="{{ content.icon }}"></i>
</td>
{% else %}
<td class="list-group-category-icon"></td>
{% endif %}
<!-- Calculate colspan number for category title -->
{% assign i = 1 %}
{% for item in content.items %}
{% assign i = i | plus:1 %}
{% assign i = i | plus: 1 %}
{% endfor %}
<td colspan="{{ i }}" class="list-group-category">
<a href="{{ content.url | default: # }}">{{ content.name }}</a>
@ -21,11 +23,13 @@
</tr>
<tr>
<td></td>
<td class="list-group-name"><b>{{ content.issuer }}</b></td>
<td class="list-group-name">
<b>{{ content.issuer }}</b>
</td>
<td class="list-group-name">{{ content.date }}</td>
</tr>
</tbody>
</table>
</div>
{% endfor %}
</div>
</div>

View File

@ -1,51 +0,0 @@
<ul class="card-text font-weight-light list-group list-group-flush">
{% assign education = data[1] | sort: 'startDate' | reverse %}
{% for content in education %}
<li class="list-group-item">
<div class="row">
<div class="col-xs-2 cl-sm-2 col-md-2 text-center" style="width: 75px;">
{% if content.startDate and content.startDate!="" %}
{% assign startDate = content.startDate | split: "-" | slice: 0,2 | join: "." %}
{% assign endDate = content.endDate | split: "-" | slice: 0,2 | join: "." | default: "Present" %}
{% assign date = startDate | append: " - "%}
{% assign date = date | append: endDate %}
{% else %}
{% assign date = null %}
{% endif %}
<table class="table-cv">
<tbody>
<tr>
<td>
{% if date %}
<span class="badge font-weight-bold danger-color-dark text-uppercase align-middle" style="min-width: 75px;">
{{date}}
</span>
{% endif %}
</td>
</tr>
{% if content.location %}
<tr>
<td>
<p class="location"><i class="fa-solid fa-location-dot iconlocation"></i> {{ content.location }}</p>
</td>
</tr>
{% endif %}
</tbody>
</table>
</div>
<div class="col-xs-10 cl-sm-10 col-md-10 mt-2 mt-md-0">
<h6 class="title font-weight-bold ml-1 ml-md-4"><a href="{{ content.url }}">{{content.studyType}}</a></h6>
<h6 class="ml-1 ml-md-4" style="font-size: 0.95rem;">{{content.institution}}</h6>
<h6 class="ml-1 ml-md-4" style="font-size: 0.95rem; font-style: italic;">{{content.area}}</h6>
<ul class="items">
{% for item in content.courses %}
<li>
<span class="item">{{ item }}</span>
</li>
{% endfor %}
</ul>
</div>
</div>
</li>
{% endfor %}
</ul>

View File

@ -0,0 +1,54 @@
<ul class="card-text font-weight-light list-group list-group-flush">
{% assign education = data[1] | sort: 'startDate' | reverse %}
{% for content in education %}
<li class="list-group-item">
<div class="row">
<div class="col-xs-2 cl-sm-2 col-md-2 text-center" style="width: 75px">
{% if content.startDate and content.startDate != '' %}
{% assign startDate = content.startDate | split: '-' | slice: 0, 2 | join: '.' %}
{% assign endDate = content.endDate | split: '-' | slice: 0, 2 | join: '.' | default: 'Present' %}
{% assign date = startDate | append: ' - ' %}
{% assign date = date | append: endDate %}
{% else %}
{% assign date = null %}
{% endif %}
<table class="table-cv">
<tbody>
<tr>
<td>
{% if date %}
<span class="badge font-weight-bold danger-color-dark text-uppercase align-middle" style="min-width: 75px"> {{ date }} </span>
{% endif %}
</td>
</tr>
{% if content.location %}
<tr>
<td>
<p class="location">
<i class="fa-solid fa-location-dot iconlocation"></i>
{{ content.location }}
</p>
</td>
</tr>
{% endif %}
</tbody>
</table>
</div>
<div class="col-xs-10 cl-sm-10 col-md-10 mt-2 mt-md-0">
<h6 class="title font-weight-bold ml-1 ml-md-4">
<a href="{{ content.url }}">{{ content.studyType }}</a>
</h6>
<h6 class="ml-1 ml-md-4" style="font-size: 0.95rem">{{ content.institution }}</h6>
<h6 class="ml-1 ml-md-4" style="font-size: 0.95rem; font-style: italic">{{ content.area }}</h6>
<ul class="items">
{% for item in content.courses %}
<li>
<span class="item">{{ item }}</span>
</li>
{% endfor %}
</ul>
</div>
</div>
</li>
{% endfor %}
</ul>

View File

@ -5,25 +5,29 @@
<tbody>
<tr>
{% if content.icon %}
<td class="list-group-category-icon"><i class="{{ content.icon }}"></i></td>
<td class="list-group-category-icon">
<i class="{{ content.icon }}"></i>
</td>
{% else %}
<td class="list-group-category-icon"></td>
{% endif %}
<!-- Calculate colspan number for category title -->
{% assign i = 1 %}
{% for item in content.items %}
{% assign i = i | plus:1 %}
{% assign i = i | plus: 1 %}
{% endfor %}
<td colspan="{{ i }}" class="list-group-category">{{ content.name }}</td>
</tr>
{% for item in content.keywords %}
<tr>
<td></td>
<td class="list-group-name"><b>{{ item }}</b></td>
<td class="list-group-name">
<b>{{ item }}</b>
</td>
</tr>
{% endfor %}
</tbody>
</table>
</div>
{% endfor %}
</div>
</div>

View File

@ -5,23 +5,27 @@
<tbody>
<tr>
{% if content.icon %}
<td class="list-group-category-icon"><i class="{{ content.icon }}"></i></td>
<td class="list-group-category-icon">
<i class="{{ content.icon }}"></i>
</td>
{% else %}
<td class="list-group-category-icon"></td>
{% endif %}
<!-- Calculate colspan number for category title -->
{% assign i = 1 %}
{% for item in content.items %}
{% assign i = i | plus:1 %}
{% assign i = i | plus: 1 %}
{% endfor %}
<td colspan="{{ i }}" class="list-group-category">{{ content.language }}</td>
</tr>
<tr>
<td></td>
<td class="list-group-name"><b>{{ content.fluency }}</b></td>
<td class="list-group-name">
<b>{{ content.fluency }}</b>
</td>
</tr>
</tbody>
</table>
</div>
{% endfor %}
</div>
</div>

View File

@ -1,32 +0,0 @@
<ul class="card-text font-weight-light list-group list-group-flush">
{% for content in data[1] %}
<li class="list-group-item">
<div class="row">
<div class="col-xs-2 cl-sm-2 col-md-2 text-center" style="width: 75px;">
{% if content.startDate %}
{% assign startDate = content.startDate | split: "-" | slice: 0,2 | join: "." %}
{% assign endDate = content.endDate | split: "-" | slice: 0,2 | join: "." | default: "Present" %}
{% assign date = startDate | append: " - "%}
{% assign date = date | append: endDate %}
{% else %}
{% assign date = "" %}
{% endif %}
<span class="badge font-weight-bold danger-color-dark text-uppercase align-middle" style="min-width: 75px;">
{{ date }}
</span>
</div>
<div class="col-xs-10 cl-sm-10 col-md-10 mt-2 mt-md-0">
<h6 class="title font-weight-bold ml-1 ml-md-4"><a href="{{ content.url }}">{{content.name}}</a></h6>
<h6 class="ml-1 ml-md-4" style="font-size: 0.95rem; font-style: italic;">{{content.summary}}</h6>
<ul class="items">
{% for item in content.highlights %}
<li>
<span class="item">{{ item }}</span>
</li>
{% endfor %}
</ul>
</div>
</div>
</li>
{% endfor %}
</ul>

View File

@ -0,0 +1,32 @@
<ul class="card-text font-weight-light list-group list-group-flush">
{% for content in data[1] %}
<li class="list-group-item">
<div class="row">
<div class="col-xs-2 cl-sm-2 col-md-2 text-center" style="width: 75px">
{% if content.startDate %}
{% assign startDate = content.startDate | split: '-' | slice: 0, 2 | join: '.' %}
{% assign endDate = content.endDate | split: '-' | slice: 0, 2 | join: '.' | default: 'Present' %}
{% assign date = startDate | append: ' - ' %}
{% assign date = date | append: endDate %}
{% else %}
{% assign date = '' %}
{% endif %}
<span class="badge font-weight-bold danger-color-dark text-uppercase align-middle" style="min-width: 75px"> {{ date }} </span>
</div>
<div class="col-xs-10 cl-sm-10 col-md-10 mt-2 mt-md-0">
<h6 class="title font-weight-bold ml-1 ml-md-4">
<a href="{{ content.url }}">{{ content.name }}</a>
</h6>
<h6 class="ml-1 ml-md-4" style="font-size: 0.95rem; font-style: italic">{{ content.summary }}</h6>
<ul class="items">
{% for item in content.highlights %}
<li>
<span class="item">{{ item }}</span>
</li>
{% endfor %}
</ul>
</div>
</div>
</li>
{% endfor %}
</ul>

View File

@ -1,30 +0,0 @@
<ul class="card-text font-weight-light list-group list-group-flush">
{% assign publications = data[1] | sort: 'releaseDate' | reverse %}
{% for content in publications %}
<li class="list-group-item">
<div class="row">
<div class="col-xs-2 cl-sm-2 col-md-2 text-center" style="width: 75px;">
{% if content.releaseDate %}
{% assign date = content.releaseDate | split: "-" | join: "." %}
{% else %}
{% assign date = "" %}
{% endif %}
<table class="table-cv">
<tbody>
<tr>
<td>
<span class="badge font-weight-bold danger-color-dark text-uppercase align-middle" style="min-width: 75px;">{{date}}</span>
</td>
</tr>
</tbody>
</table>
</div>
<div class="col-xs-10 cl-sm-10 col-md-10 mt-2 mt-md-0">
<h6 class="title font-weight-bold ml-1 ml-md-4"><a href="{{ content.url }}">{{content.name}}</a></h6>
<h6 class="ml-1 ml-md-4" style="font-size: 0.95rem;">{{content.publisher}}</h6>
<h6 class="ml-1 ml-md-4" style="font-size: 0.95rem; font-style: italic;">{{content.summary}}</h6>
</div>
</div>
</li>
{% endfor %}
</ul>

View File

@ -0,0 +1,28 @@
<ul class="card-text font-weight-light list-group list-group-flush">
{% assign publications = data[1] | sort: 'releaseDate' | reverse %}
{% for content in publications %}
<li class="list-group-item">
<div class="row">
<div class="col-xs-2 cl-sm-2 col-md-2 text-center" style="width: 75px">
{% if content.releaseDate %} {% assign date = content.releaseDate | split: '-' | join: '.' %} {% else %} {% assign date = '' %} {% endif %}
<table class="table-cv">
<tbody>
<tr>
<td>
<span class="badge font-weight-bold danger-color-dark text-uppercase align-middle" style="min-width: 75px">{{ date }}</span>
</td>
</tr>
</tbody>
</table>
</div>
<div class="col-xs-10 cl-sm-10 col-md-10 mt-2 mt-md-0">
<h6 class="title font-weight-bold ml-1 ml-md-4">
<a href="{{ content.url }}">{{ content.name }}</a>
</h6>
<h6 class="ml-1 ml-md-4" style="font-size: 0.95rem">{{ content.publisher }}</h6>
<h6 class="ml-1 ml-md-4" style="font-size: 0.95rem; font-style: italic">{{ content.summary }}</h6>
</div>
</div>
</li>
{% endfor %}
</ul>

View File

@ -5,23 +5,27 @@
<tbody>
<tr>
{% if content.icon %}
<td class="list-group-category-icon"><i class="{{ content.icon }}"></i></td>
<td class="list-group-category-icon">
<i class="{{ content.icon }}"></i>
</td>
{% else %}
<td class="list-group-category-icon"></td>
{% endif %}
<!-- Calculate colspan number for category title -->
{% assign i = 1 %}
{% for item in content.items %}
{% assign i = i | plus:1 %}
{% assign i = i | plus: 1 %}
{% endfor %}
<td colspan="{{ i }}" class="list-group-category">{{ content.name }}</td>
</tr>
<tr>
<td></td>
<td class="list-group-name"><b>{{ content.reference }}</b></td>
<td class="list-group-name">
<b>{{ content.reference }}</b>
</td>
</tr>
</tbody>
</table>
</div>
{% endfor %}
</div>
</div>

View File

@ -5,25 +5,29 @@
<tbody>
<tr>
{% if content.icon %}
<td class="list-group-category-icon"><i class="{{ content.icon }}"></i></td>
<td class="list-group-category-icon">
<i class="{{ content.icon }}"></i>
</td>
{% else %}
<td class="list-group-category-icon"></td>
{% endif %}
<!-- Calculate colspan number for category title -->
{% assign i = 1 %}
{% for item in content.items %}
{% assign i = i | plus:1 %}
{% assign i = i | plus: 1 %}
{% endfor %}
<td colspan="{{ i }}" class="list-group-category">{{ content.name }}</td>
</tr>
{% for item in content.keywords %}
<tr>
<td></td>
<td class="list-group-name"><b>{{ item }}</b></td>
<td class="list-group-name">
<b>{{ item }}</b>
</td>
</tr>
{% endfor %}
</tbody>
</table>
</div>
{% endfor %}
</div>
</div>

View File

@ -1,34 +0,0 @@
<ul class="card-text font-weight-light list-group list-group-flush">
{% assign volunteer = data[1] | sort: 'startDate' | reverse %}
{% for content in volunteer %}
<li class="list-group-item">
<div class="row">
<div class="col-xs-2 cl-sm-2 col-md-2 text-center" style="width: 75px;">
{% if content.startDate %}
{% assign startDate = content.startDate | split: "-" | slice: 0,2 | join: "." %}
{% assign endDate = content.endDate | split: "-" | slice: 0,2 | join: "." | default: "Present" %}
{% assign date = startDate | append: " - "%}
{% assign date = date | append: endDate %}
{% else %}
{% assign date = "" %}
{% endif %}
<span class="badge font-weight-bold danger-color-dark text-uppercase align-middle" style="min-width: 75px;">
{{ date }}
</span>
</div>
<div class="col-xs-10 cl-sm-10 col-md-10 mt-2 mt-md-0">
<h6 class="title font-weight-bold ml-1 ml-md-4"><a href="{{ content.url }}">{{content.position}}</a></h6>
<h6 class="ml-1 ml-md-4" style="font-size: 0.95rem;">{{content.organization}}</h6>
<h6 class="ml-1 ml-md-4" style="font-size: 0.95rem; font-style: italic;">{{content.summary}}</h6>
<ul class="items">
{% for item in content.highlights %}
<li>
<span class="item">{{ item }}</span>
</li>
{% endfor %}
</ul>
</div>
</div>
</li>
{% endfor %}
</ul>

View File

@ -0,0 +1,34 @@
<ul class="card-text font-weight-light list-group list-group-flush">
{% assign volunteer = data[1] | sort: 'startDate' | reverse %}
{% for content in volunteer %}
<li class="list-group-item">
<div class="row">
<div class="col-xs-2 cl-sm-2 col-md-2 text-center" style="width: 75px">
{% if content.startDate %}
{% assign startDate = content.startDate | split: '-' | slice: 0, 2 | join: '.' %}
{% assign endDate = content.endDate | split: '-' | slice: 0, 2 | join: '.' | default: 'Present' %}
{% assign date = startDate | append: ' - ' %}
{% assign date = date | append: endDate %}
{% else %}
{% assign date = '' %}
{% endif %}
<span class="badge font-weight-bold danger-color-dark text-uppercase align-middle" style="min-width: 75px"> {{ date }} </span>
</div>
<div class="col-xs-10 cl-sm-10 col-md-10 mt-2 mt-md-0">
<h6 class="title font-weight-bold ml-1 ml-md-4">
<a href="{{ content.url }}">{{ content.position }}</a>
</h6>
<h6 class="ml-1 ml-md-4" style="font-size: 0.95rem">{{ content.organization }}</h6>
<h6 class="ml-1 ml-md-4" style="font-size: 0.95rem; font-style: italic">{{ content.summary }}</h6>
<ul class="items">
{% for item in content.highlights %}
<li>
<span class="item">{{ item }}</span>
</li>
{% endfor %}
</ul>
</div>
</div>
</li>
{% endfor %}
</ul>

View File

@ -1,34 +0,0 @@
<ul class="card-text font-weight-light list-group list-group-flush">
{% assign work = data[1] | sort: 'startDate' | reverse %}
{% for content in work %}
<li class="list-group-item">
<div class="row">
<div class="col-xs-2 cl-sm-2 col-md-2 text-center" style="width: 75px;">
{% if content.startDate %}
{% assign startDate = content.startDate | split: "-" | slice: 0,2 | join: "." %}
{% assign endDate = content.endDate | split: "-" | slice: 0,2 | join: "." | default: "Present" %}
{% assign date = startDate | append: " - "%}
{% assign date = date | append: endDate %}
{% else %}
{% assign date = "" %}
{% endif %}
<span class="badge font-weight-bold danger-color-dark text-uppercase align-middle" style="min-width: 75px;">
{{ date }}
</span>
</div>
<div class="col-xs-10 cl-sm-10 col-md-10 mt-2 mt-md-0">
<h6 class="title font-weight-bold ml-1 ml-md-4"><a href="{{ content.url }}">{{content.position}}</a></h6>
<h6 class="ml-1 ml-md-4" style="font-size: 0.95rem;">{{content.name}}</h6>
<h6 class="ml-1 ml-md-4" style="font-size: 0.95rem; font-style: italic;">{{content.summary}}</h6>
<ul class="items">
{% for item in content.highlights %}
<li>
<span class="item">{{ item }}</span>
</li>
{% endfor %}
</ul>
</div>
</div>
</li>
{% endfor %}
</ul>

View File

@ -0,0 +1,34 @@
<ul class="card-text font-weight-light list-group list-group-flush">
{% assign work = data[1] | sort: 'startDate' | reverse %}
{% for content in work %}
<li class="list-group-item">
<div class="row">
<div class="col-xs-2 cl-sm-2 col-md-2 text-center" style="width: 75px">
{% if content.startDate %}
{% assign startDate = content.startDate | split: '-' | slice: 0, 2 | join: '.' %}
{% assign endDate = content.endDate | split: '-' | slice: 0, 2 | join: '.' | default: 'Present' %}
{% assign date = startDate | append: ' - ' %}
{% assign date = date | append: endDate %}
{% else %}
{% assign date = '' %}
{% endif %}
<span class="badge font-weight-bold danger-color-dark text-uppercase align-middle" style="min-width: 75px"> {{ date }} </span>
</div>
<div class="col-xs-10 cl-sm-10 col-md-10 mt-2 mt-md-0">
<h6 class="title font-weight-bold ml-1 ml-md-4">
<a href="{{ content.url }}">{{ content.position }}</a>
</h6>
<h6 class="ml-1 ml-md-4" style="font-size: 0.95rem">{{ content.name }}</h6>
<h6 class="ml-1 ml-md-4" style="font-size: 0.95rem; font-style: italic">{{ content.summary }}</h6>
<ul class="items">
{% for item in content.highlights %}
<li>
<span class="item">{{ item }}</span>
</li>
{% endfor %}
</ul>
</div>
</div>
</li>
{% endfor %}
</ul>

View File

@ -1,18 +1,24 @@
{%- if site.enable_google_analytics -%}
{% if site.enable_google_analytics %}
<!-- Global site tag (gtag.js) - Google Analytics -->
<script async src="https://www.googletagmanager.com/gtag/js?id={{ site.google_analytics }}"></script>
<script>
window.dataLayer = window.dataLayer || [];
function gtag(){ window.dataLayer.push(arguments); }
function gtag() {
window.dataLayer.push(arguments);
}
gtag('js', new Date());
gtag('config', '{{ site.google_analytics }}');
</script>
{%- endif -%}
{%- if site.enable_cronitor_analytics -%}
{% endif %}
{% if site.enable_cronitor_analytics %}
<!-- Cronitor RUM -->
<script async src="https://rum.cronitor.io/script.js"></script>
<script>
window.cronitor = window.cronitor || function() { (window.cronitor.q = window.cronitor.q || []).push(arguments); };
window.cronitor =
window.cronitor ||
function () {
(window.cronitor.q = window.cronitor.q || []).push(arguments);
};
cronitor('config', { clientKey: '{{site.cronitor_analytics}}' });
</script>
{%- endif -%}
{% endif %}

View File

@ -1,6 +1,6 @@
{%- if site.enable_publication_badges.altmetric %}
{% if site.enable_publication_badges.altmetric %}
<script async src="https://d1bxh8uas1mnw7.cloudfront.net/assets/embed.js"></script>
{%- endif %}
{%- if site.enable_publication_badges.dimensions %}
{% endif %}
{% if site.enable_publication_badges.dimensions %}
<script async src="https://badge.dimensions.ai/badge.js"></script>
{%- endif %}
{% endif %}

View File

@ -1,4 +0,0 @@
<!-- Bootsrap & MDB scripts -->
<script src="{{ '/assets/js/bootstrap.bundle.min.js' | relative_url }}"></script>
<!-- <script src="{{ '/assets/js/mdb.min.js' | relative_url }}"></script> -->
<script src="https://cdn.jsdelivr.net/npm/mdbootstrap@{{ site.mdb.version }}/js/mdb.min.js" integrity="{{ site.mdb.integrity.js }}" crossorigin="anonymous"></script>

View File

@ -0,0 +1,8 @@
<!-- Bootsrap & MDB scripts -->
<script src="{{ '/assets/js/bootstrap.bundle.min.js' | relative_url }}"></script>
<!-- <script src="{{ '/assets/js/mdb.min.js' | relative_url }}"></script> -->
<script
src="https://cdn.jsdelivr.net/npm/mdbootstrap@{{ site.mdb.version }}/js/mdb.min.js"
integrity="{{ site.mdb.integrity.js }}"
crossorigin="anonymous"
></script>

View File

@ -1,2 +0,0 @@
<!-- jQuery -->
<script src="https://cdn.jsdelivr.net/npm/jquery@{{ site.jquery.version }}/dist/jquery.min.js" integrity="{{ site.jquery.integrity }}" crossorigin="anonymous"></script>

View File

@ -0,0 +1,6 @@
<!-- jQuery -->
<script
src="https://cdn.jsdelivr.net/npm/jquery@{{ site.jquery.version }}/dist/jquery.min.js"
integrity="{{ site.jquery.integrity }}"
crossorigin="anonymous"
></script>

View File

@ -1,6 +0,0 @@
{%- if site.enable_masonry -%}
<!-- Masonry & imagesLoaded -->
<script defer src="https://cdn.jsdelivr.net/npm/masonry-layout@{{ site.masonry.version }}/dist/masonry.pkgd.min.js" integrity="{{ site.masonry.integrity }}" crossorigin="anonymous"></script>
<script defer src="https://cdn.jsdelivr.net/npm/imagesloaded@4/imagesloaded.pkgd.min.js"></script>
<script defer src="{{ '/assets/js/masonry.js' | relative_url }}" type="text/javascript"></script>
{%- endif -%}

View File

@ -0,0 +1,11 @@
{% if site.enable_masonry %}
<!-- Masonry & imagesLoaded -->
<script
defer
src="https://cdn.jsdelivr.net/npm/masonry-layout@{{ site.masonry.version }}/dist/masonry.pkgd.min.js"
integrity="{{ site.masonry.integrity }}"
crossorigin="anonymous"
></script>
<script defer src="https://cdn.jsdelivr.net/npm/imagesloaded@4/imagesloaded.pkgd.min.js"></script>
<script defer src="{{ '/assets/js/masonry.js' | relative_url }}" type="text/javascript"></script>
{% endif %}

View File

@ -1,12 +0,0 @@
{%- if site.enable_math -%}
<!-- MathJax -->
<script type="text/javascript">
window.MathJax = {
tex: {
tags: 'ams'
}
};
</script>
<script defer type="text/javascript" id="MathJax-script" src="https://cdn.jsdelivr.net/npm/mathjax@{{ site.mathjax.version }}/es5/tex-mml-chtml.js"></script>
<script defer src="https://polyfill.io/v3/polyfill.min.js?features=es6"></script>
{%- endif %}

View File

@ -0,0 +1,17 @@
{% if site.enable_math %}
<!-- MathJax -->
<script type="text/javascript">
window.MathJax = {
tex: {
tags: 'ams',
},
};
</script>
<script
defer
type="text/javascript"
id="MathJax-script"
src="https://cdn.jsdelivr.net/npm/mathjax@{{ site.mathjax.version }}/es5/tex-mml-chtml.js"
></script>
<script defer src="https://polyfill.io/v3/polyfill.min.js?features=es6"></script>
{% endif %}

View File

@ -1,10 +1,10 @@
{% if page.mermaid and page.mermaid.enabled %}
{% if page.mermaid and page.mermaid.enabled %}
<script src="https://cdn.jsdelivr.net/npm/mermaid@10/dist/mermaid.min.js"></script>
{% if page.mermaid.zoomable %}
<script src="https://d3js.org/d3.v7.min.js"></script>
{% endif %}
<script>
let theme = localStorage.getItem("theme");
let theme = localStorage.getItem('theme');
/* Create mermaid diagram as another node and hide the code block, appending the mermaid node after it
this is done to enable retrieving the code again when changing theme between light/dark */
@ -20,22 +20,22 @@
backup.after(mermaid);
});
mermaid.initialize({ theme: theme })
mermaid.initialize({ theme: theme });
/* Zoomable mermaid diagrams */
if (typeof d3 !== 'undefined') {
window.addEventListener('load', function () {
var svgs = d3.selectAll(".mermaid svg");
var svgs = d3.selectAll('.mermaid svg');
svgs.each(function () {
var svg = d3.select(this);
svg.html("<g>" + svg.html() + "</g>");
var inner = svg.select("g");
var zoom = d3.zoom().on("zoom", function (event) {
inner.attr("transform", event.transform);
svg.html('<g>' + svg.html() + '</g>');
var inner = svg.select('g');
var zoom = d3.zoom().on('zoom', function (event) {
inner.attr('transform', event.transform);
});
svg.call(zoom);
});
});
}
</script>
{% endif %}
{% endif %}

View File

@ -1,25 +0,0 @@
{% if site.enable_tooltips %}
<!-- Enable Tooltips -->
<script type="text/javascript">
$(function () {$('[data-toggle="tooltip"]').tooltip()})
</script>
{%- endif %}
{%- if site.enable_medium_zoom %}
<!-- Medium Zoom JS -->
<script defer src="https://cdn.jsdelivr.net/npm/medium-zoom@{{ site.medium_zoom.version }}/dist/medium-zoom.min.js" integrity="{{ site.medium_zoom.integrity }}" crossorigin="anonymous"></script>
<script defer src="{{ '/assets/js/zoom.js' | relative_url | bust_file_cache }}"></script>
{%- endif -%}
{% if page.toc and page.toc.sidebar %}
<!-- Sidebar Table of Contents -->
<script defer src="{{ '/assets/js/bootstrap-toc.min.js' | relative_url | bust_file_cache }}"></script>
{% endif %}
<!-- Bootstrap Table -->
<script defer src="https://unpkg.com/bootstrap-table@{{ site.bootstrap-table.version }}/dist/bootstrap-table.min.js"></script>
<!-- Load Common JS -->
<script src="{{ '/assets/js/no_defer.js' | relative_url | bust_file_cache }}"></script>
<script defer src="{{ '/assets/js/common.js' | relative_url | bust_file_cache }}"></script>
<script defer src="{{ '/assets/js/copy_code.js' | relative_url | bust_file_cache }}" type="text/javascript"></script>

View File

@ -0,0 +1,30 @@
{% if site.enable_tooltips %}
<!-- Enable Tooltips -->
<script type="text/javascript">
$(function () {
$('[data-toggle="tooltip"]').tooltip();
});
</script>
{% endif %}
{% if site.enable_medium_zoom %}
<!-- Medium Zoom JS -->
<script
defer
src="https://cdn.jsdelivr.net/npm/medium-zoom@{{ site.medium_zoom.version }}/dist/medium-zoom.min.js"
integrity="{{ site.medium_zoom.integrity }}"
crossorigin="anonymous"
></script>
<script defer src="{{ '/assets/js/zoom.js' | relative_url | bust_file_cache }}"></script>
{% endif %}
{% if page.toc and page.toc.sidebar %}
<!-- Sidebar Table of Contents -->
<script defer src="{{ '/assets/js/bootstrap-toc.min.js' | relative_url | bust_file_cache }}"></script>
{% endif %}
<!-- Bootstrap Table -->
<script defer src="https://unpkg.com/bootstrap-table@{{ site.bootstrap-table.version }}/dist/bootstrap-table.min.js"></script>
<!-- Load Common JS -->
<script src="{{ '/assets/js/no_defer.js' | relative_url | bust_file_cache }}"></script>
<script defer src="{{ '/assets/js/common.js' | relative_url | bust_file_cache }}"></script>
<script defer src="{{ '/assets/js/copy_code.js' | relative_url | bust_file_cache }}" type="text/javascript"></script>

View File

@ -1,80 +0,0 @@
{% if site.enable_progressbar %}
<!-- Scrolling Progress Bar -->
<script type="text/javascript">
/*
* This JavaScript code has been adapted from the article
* https://css-tricks.com/reading-position-indicator/ authored by Pankaj Parashar,
* published on the website https://css-tricks.com on the 7th of May, 2014.
* Couple of changes were made to the original code to make it compatible
* with the `al-foio` theme.
*/
const progressBar = $("#progress");
/*
* We set up the bar after all elements are done loading.
* In some cases, if the images in the page are larger than the intended
* size they'll have on the page, they'll be resized via CSS to accomodate
* the desired size. This mistake, however, breaks the computations as the
* scroll size is computed as soon as the elements finish loading.
* To account for this, a minimal delay was introduced before computing the
* values.
*/
window.onload = function () {
setTimeout(progressBarSetup, 50);
};
/*
* We set up the bar according to the browser.
* If the browser supports the progress element we use that.
* Otherwise, we resize the bar thru CSS styling
*/
function progressBarSetup() {
if ("max" in document.createElement("progress")) {
initializeProgressElement();
$(document).on("scroll", function() {
progressBar.attr({ value: getCurrentScrollPosition() });
});
$(window).on("resize", initializeProgressElement);
} else {
resizeProgressBar();
$(document).on("scroll", resizeProgressBar);
$(window).on("resize", resizeProgressBar);
}
}
/*
* The vertical scroll position is the same as the number of pixels that
* are hidden from view above the scrollable area. Thus, a value > 0 is
* how much the user has scrolled from the top
*/
function getCurrentScrollPosition() {
return $(window).scrollTop();
}
function initializeProgressElement() {
let navbarHeight = $("#navbar").outerHeight(true);
$("body").css({ "padding-top": navbarHeight });
$("progress-container").css({ "padding-top": navbarHeight });
progressBar.css({ top: navbarHeight });
progressBar.attr({
max: getDistanceToScroll(),
value: getCurrentScrollPosition(),
});
}
/*
* The offset between the html document height and the browser viewport
* height will be greater than zero if vertical scroll is possible.
* This is the distance the user can scroll
*/
function getDistanceToScroll() {
return $(document).height() - $(window).height();
}
function resizeProgressBar() {
progressBar.css({ width: getWidthPercentage() + "%" });
}
// The scroll ratio equals the percentage to resize the bar
function getWidthPercentage() {
return (getCurrentScrollPosition() / getDistanceToScroll()) * 100;
}
</script>
{%- endif %}

View File

@ -0,0 +1,78 @@
{% if site.enable_progressbar %}
<!-- Scrolling Progress Bar -->
<script type="text/javascript">
/*
* This JavaScript code has been adapted from the article
* https://css-tricks.com/reading-position-indicator/ authored by Pankaj Parashar,
* published on the website https://css-tricks.com on the 7th of May, 2014.
* Couple of changes were made to the original code to make it compatible
* with the `al-foio` theme.
*/
const progressBar = $('#progress');
/*
* We set up the bar after all elements are done loading.
* In some cases, if the images in the page are larger than the intended
* size they'll have on the page, they'll be resized via CSS to accomodate
* the desired size. This mistake, however, breaks the computations as the
* scroll size is computed as soon as the elements finish loading.
* To account for this, a minimal delay was introduced before computing the
* values.
*/
window.onload = function () {
setTimeout(progressBarSetup, 50);
};
/*
* We set up the bar according to the browser.
* If the browser supports the progress element we use that.
* Otherwise, we resize the bar thru CSS styling
*/
function progressBarSetup() {
if ('max' in document.createElement('progress')) {
initializeProgressElement();
$(document).on('scroll', function () {
progressBar.attr({ value: getCurrentScrollPosition() });
});
$(window).on('resize', initializeProgressElement);
} else {
resizeProgressBar();
$(document).on('scroll', resizeProgressBar);
$(window).on('resize', resizeProgressBar);
}
}
/*
* The vertical scroll position is the same as the number of pixels that
* are hidden from view above the scrollable area. Thus, a value > 0 is
* how much the user has scrolled from the top
*/
function getCurrentScrollPosition() {
return $(window).scrollTop();
}
function initializeProgressElement() {
let navbarHeight = $('#navbar').outerHeight(true);
$('body').css({ 'padding-top': navbarHeight });
$('progress-container').css({ 'padding-top': navbarHeight });
progressBar.css({ top: navbarHeight });
progressBar.attr({
max: getDistanceToScroll(),
value: getCurrentScrollPosition(),
});
}
/*
* The offset between the html document height and the browser viewport
* height will be greater than zero if vertical scroll is possible.
* This is the distance the user can scroll
*/
function getDistanceToScroll() {
return $(document).height() - $(window).height();
}
function resizeProgressBar() {
progressBar.css({ width: getWidthPercentage() + '%' });
}
// The scroll ratio equals the percentage to resize the bar
function getWidthPercentage() {
return (getCurrentScrollPosition() / getDistanceToScroll()) * 100;
}
</script>
{% endif %}

View File

@ -1,20 +0,0 @@
{% if site.wechat_qr %}
<!-- WeChat Modal -->
<script>
var wechatModal = document.getElementById("WeChatMod");
var wechatBtn = document.getElementById("WeChatBtn");
wechatBtn.onclick = function() {
wechatModal.style.display = "block";
}
window.onclick = function(event) {
if (event.target == wechatModal) {
wechatModal.style.display = "none";
}
}
</script>
{% endif %}

View File

@ -0,0 +1,18 @@
{% if site.wechat_qr %}
<!-- WeChat Modal -->
<script>
var wechatModal = document.getElementById('WeChatMod');
var wechatBtn = document.getElementById('WeChatBtn');
wechatBtn.onclick = function () {
wechatModal.style.display = 'block';
};
window.onclick = function (event) {
if (event.target == wechatModal) {
wechatModal.style.display = 'none';
}
};
</script>
{% endif %}

View File

@ -1,4 +0,0 @@
<div class="publications">
{% bibliography --group_by none --query @*[selected=true]* %}
</div>

View File

@ -0,0 +1,3 @@
<div class="publications">
{% bibliography --group_by none --query @*[selected=true]* %}
</div>

View File

@ -1,118 +0,0 @@
{%- if site.email -%}
<a href="mailto:{{ site.email | encode_email }}" title="email"><i class="fa-solid fa-envelope"></i></a>
{% endif %}
{%- if site.telegram_username -%}
<a href="https://telegram.me/{{ site.telegram_username }}" title="telegram"><i class="fa-brands fa-telegram"></i></a>
{% endif %}
{%- if site.whatsapp_number -%}
<a href="https://wa.me/{{ site.whatsapp_number }}" title="whatsapp"><i class="fa-brands fa-whatsapp"></i></a>
{% endif %}
{%- if site.orcid_id -%}
<a href="https://orcid.org/{{ site.orcid_id }}" title="ORCID"><i class="ai ai-orcid"></i></a>
{% endif %}
{%- if site.scholar_userid -%}
<a href="https://scholar.google.com/citations?user={{ site.scholar_userid }}" title="Google Scholar"><i class="ai ai-google-scholar"></i></a>
{% endif %}
{%- if site.semanticscholar_id -%}
<a href="https://www.semanticscholar.org/author/{{ site.semanticscholar_id }}" title="Semantic Scholar"><i class="ai ai-semantic-scholar"></i></a>
{% endif %}
{%- if site.publons_id -%}
<a href="https://publons.com/a/{{ site.publons_id }}/" title="Publons"><i class="ai ai-publons"></i></a>
{% endif %}
{%- if site.lattes_id -%}
<a href="http://lattes.cnpq.br/{{ site.lattes_id }}" target="_blank" title="Lattes"><i class="ai ai-lattes"></i></a>
{% endif %}
{%- if site.osf_id -%}
<a href="https://osf.io/{{ site.osf_id }}/" title="Open Science Framework"><i class="ai ai-osf"></i></a>
{% endif %}
{%- if site.research_gate_profile -%}
<a href="https://www.researchgate.net/profile/{{site.research_gate_profile}}/" title="ResearchGate"><i class="ai ai-researchgate"></i></a>
{% endif %}
{%- if site.scopus_id -%}
<a href="https://www.scopus.com/authid/detail.uri?authorId={{site.scopus_id}}" title="Scopus"><i class="ai ai-scopus"></i></a>
{% endif %}
{%- if site.github_username -%}
<a href="https://github.com/{{ site.github_username }}" title="GitHub"><i class="fa-brands fa-github"></i></a>
{% endif %}
{%- if site.linkedin_username -%}
<a href="https://www.linkedin.com/in/{{ site.linkedin_username }}" title="LinkedIn"><i class="fa-brands fa-linkedin"></i></a>
{% endif %}
{%- if site.x_username -%}
<a href="https://twitter.com/{{ site.x_username }}" title="X"><i class="fa-brands fa-x-twitter"></i></a>
{% endif %}
{%- if site.mastodon_username -%}
<a rel="me" href="https://{{ site.mastodon_username }}" title="Mastodon"><i class="fa-brands fa-mastodon"></i></a>
{% endif %}
{%- if site.medium_username -%}
<a href="https://medium.com/@{{ site.medium_username }}" title="Medium"><i class="fa-brands fa-medium"></i></a>
{% endif %}
{%- if site.quora_username -%}
<a href="https://www.quora.com/profile/{{ site.quora_username }}" title="Quora"><i class="fa-brands fa-quora"></i></a>
{% endif %}
{%- if site.blogger_url -%}
<a href="{{ site.blogger_url }}" title="Blogger"><i class="fa-brands fa-blogger-b"></i></a>
{% endif %}
{%- if site.work_url -%}
<a href="{{ site.work_url }}" title="Work"><i class="fa-solid fa-briefcase"></i></a>
{% endif %}
{%- if site.wikidata_id -%}
<a href="https://www.wikidata.org/wiki/{{ site.wikidata_id }}" title="Wikidata"><i class="fa-solid fa-barcode"></i></a>
{% endif %}
{%- if site.wikipedia_id -%}
<a href="https://wikipedia.org/wiki/User:{{ site.wikipedia_id }}" title="Wikipedia"><i class="fa-brands fa-wikipedia-w"></i></a>
{% endif %}
{%- if site.strava_userid -%}
<a href="https://www.strava.com/athletes/{{ site.strava_userid }}" title="Strava"><i class="fa-brands fa-strava"></i></a>
{% endif %}
{%- if site.keybase_username -%}
<a href="https://keybase.io/{{ site.keybase_username }}" title="Keybase"><i class="fa-brands fa-keybase"></i></a>
{% endif %}
{%- if site.gitlab_username -%}
<a href="https://gitlab.com/{{ site.gitlab_username }}" title="GitLab"><i class="fa-brands fa-gitlab"></i></a>
{% endif %}
{%- if site.dblp_url -%}
<a href="{{ site.dblp_url }}" title="DBLP"><i class="ai ai-dblp"></i></a>
{% endif %}
{%- if site.stackoverflow_id -%}
<a href="https://stackoverflow.com/users/{{ site.stackoverflow_id }}" title="Stackoverflow"><i class="fa-brands fa-stack-overflow"></i></a>
{% endif %}
{%- if site.kaggle_id -%}
<a href="https://www.kaggle.com/{{ site.kaggle_id }}" title="Kaggle"><i class="fa-brands fa-kaggle"></i></a>
{% endif %}
{%- if site.lastfm_id -%}
<a href="https://www.last.fm/user/{{ site.lastfm_id }}" title="Last FM"><i class="fa-brands fa-lastfm"></i></a>
{% endif %}
{%- if site.spotify_id -%}
<a href="https://open.spotify.com/user/{{ site.spotify_id }}" title="Spotify"><i class="fa-brands fa-spotify"></i></a>
{% endif %}
{%- if site.pinterest_id -%}
<a href="https://www.pinterest.com/{{ site.pinterest_id }}" title="Pinterest"><i class="fa-brands fa-pinterest"></i></a>
{% endif %}
{%- if site.unsplash_id -%}
<a href="https://unsplash.com/@{{ site.unsplash_id }}" title="Unsplash"><i class="fa-brands fa-unsplash"></i></a>
{% endif %}
{%- if site.instagram_id -%}
<a href="https://instagram.com/{{ site.instagram_id }}" title="Instagram"><i class="fa-brands fa-instagram"></i></a>
{% endif %}
{%- if site.facebook_id -%}
<a href="https://facebook.com/{{ site.facebook_id }}" title="Facebook"><i class="fa-brands fa-facebook"></i></a>
{% endif %}
{%- if site.youtube_id -%}
<a href="https://youtube.com/@{{ site.youtube_id }}" title="YouTube"><i class="fa-brands fa-youtube"></i></a>
{% endif %}
{%- if site.discord_id -%}
<a href="https://discord.com/users/{{ site.discord_id }}" title="Discord"><i class="fa-brands fa-discord"></i></a>
{% endif %}
{%- if site.zotero_username -%}
<a href="https://www.zotero.org/{{ site.zotero_username }}" title="Zotero"><i class="ai ai-zotero"></i></a>
{% endif %}
{%- if site.rss_icon -%}
<a href="{{ site.baseurl }}/feed.xml" title="RSS Feed"><i class="fa-solid fa-square-rss"></i></a>
{% endif %}
{%- if site.wechat_qr -%}
<a id="WeChatBtn" title="WeChat"><i class="fa-brands fa-weixin"></i></a>
<div id="WeChatMod" class="wechat-modal">
<img src="{{ site.wechat_qr | prepend: 'assets/img/' | relative_url }}" alt="WeChat QR" id="WeChatQR">
</div>
{% include scripts/wechatModal.html %}
{% endif %}

118
_includes/social.liquid Normal file
View File

@ -0,0 +1,118 @@
{% if site.email %}
<a href="mailto:{{ site.email | encode_email }}" title="email"><i class="fa-solid fa-envelope"></i></a>
{% endif %}
{% if site.telegram_username %}
<a href="https://telegram.me/{{ site.telegram_username }}" title="telegram"><i class="fa-brands fa-telegram"></i></a>
{% endif %}
{% if site.whatsapp_number %}
<a href="https://wa.me/{{ site.whatsapp_number }}" title="whatsapp"><i class="fa-brands fa-whatsapp"></i></a>
{% endif %}
{% if site.orcid_id %}
<a href="https://orcid.org/{{ site.orcid_id }}" title="ORCID"><i class="ai ai-orcid"></i></a>
{% endif %}
{% if site.scholar_userid %}
<a href="https://scholar.google.com/citations?user={{ site.scholar_userid }}" title="Google Scholar"><i class="ai ai-google-scholar"></i></a>
{% endif %}
{% if site.semanticscholar_id %}
<a href="https://www.semanticscholar.org/author/{{ site.semanticscholar_id }}" title="Semantic Scholar"><i class="ai ai-semantic-scholar"></i></a>
{% endif %}
{% if site.publons_id %}
<a href="https://publons.com/a/{{ site.publons_id }}/" title="Publons"><i class="ai ai-publons"></i></a>
{% endif %}
{% if site.lattes_id %}
<a href="http://lattes.cnpq.br/{{ site.lattes_id }}" target="_blank" title="Lattes"><i class="ai ai-lattes"></i></a>
{% endif %}
{% if site.osf_id %}
<a href="https://osf.io/{{ site.osf_id }}/" title="Open Science Framework"><i class="ai ai-osf"></i></a>
{% endif %}
{% if site.research_gate_profile %}
<a href="https://www.researchgate.net/profile/{{site.research_gate_profile}}/" title="ResearchGate"><i class="ai ai-researchgate"></i></a>
{% endif %}
{% if site.scopus_id %}
<a href="https://www.scopus.com/authid/detail.uri?authorId={{site.scopus_id}}" title="Scopus"><i class="ai ai-scopus"></i></a>
{% endif %}
{% if site.github_username %}
<a href="https://github.com/{{ site.github_username }}" title="GitHub"><i class="fa-brands fa-github"></i></a>
{% endif %}
{% if site.linkedin_username %}
<a href="https://www.linkedin.com/in/{{ site.linkedin_username }}" title="LinkedIn"><i class="fa-brands fa-linkedin"></i></a>
{% endif %}
{% if site.x_username %}
<a href="https://twitter.com/{{ site.x_username }}" title="X"><i class="fa-brands fa-x-twitter"></i></a>
{% endif %}
{% if site.mastodon_username %}
<a rel="me" href="https://{{ site.mastodon_username }}" title="Mastodon"><i class="fa-brands fa-mastodon"></i></a>
{% endif %}
{% if site.medium_username %}
<a href="https://medium.com/@{{ site.medium_username }}" title="Medium"><i class="fa-brands fa-medium"></i></a>
{% endif %}
{% if site.quora_username %}
<a href="https://www.quora.com/profile/{{ site.quora_username }}" title="Quora"><i class="fa-brands fa-quora"></i></a>
{% endif %}
{% if site.blogger_url %}
<a href="{{ site.blogger_url }}" title="Blogger"><i class="fa-brands fa-blogger-b"></i></a>
{% endif %}
{% if site.work_url %}
<a href="{{ site.work_url }}" title="Work"><i class="fa-solid fa-briefcase"></i></a>
{% endif %}
{% if site.wikidata_id %}
<a href="https://www.wikidata.org/wiki/{{ site.wikidata_id }}" title="Wikidata"><i class="fa-solid fa-barcode"></i></a>
{% endif %}
{% if site.wikipedia_id %}
<a href="https://wikipedia.org/wiki/User:{{ site.wikipedia_id }}" title="Wikipedia"><i class="fa-brands fa-wikipedia-w"></i></a>
{% endif %}
{% if site.strava_userid %}
<a href="https://www.strava.com/athletes/{{ site.strava_userid }}" title="Strava"><i class="fa-brands fa-strava"></i></a>
{% endif %}
{% if site.keybase_username %}
<a href="https://keybase.io/{{ site.keybase_username }}" title="Keybase"><i class="fa-brands fa-keybase"></i></a>
{% endif %}
{% if site.gitlab_username %}
<a href="https://gitlab.com/{{ site.gitlab_username }}" title="GitLab"><i class="fa-brands fa-gitlab"></i></a>
{% endif %}
{% if site.dblp_url %}
<a href="{{ site.dblp_url }}" title="DBLP"><i class="ai ai-dblp"></i></a>
{% endif %}
{% if site.stackoverflow_id %}
<a href="https://stackoverflow.com/users/{{ site.stackoverflow_id }}" title="Stackoverflow"><i class="fa-brands fa-stack-overflow"></i></a>
{% endif %}
{% if site.kaggle_id %}
<a href="https://www.kaggle.com/{{ site.kaggle_id }}" title="Kaggle"><i class="fa-brands fa-kaggle"></i></a>
{% endif %}
{% if site.lastfm_id %}
<a href="https://www.last.fm/user/{{ site.lastfm_id }}" title="Last FM"><i class="fa-brands fa-lastfm"></i></a>
{% endif %}
{% if site.spotify_id %}
<a href="https://open.spotify.com/user/{{ site.spotify_id }}" title="Spotify"><i class="fa-brands fa-spotify"></i></a>
{% endif %}
{% if site.pinterest_id %}
<a href="https://www.pinterest.com/{{ site.pinterest_id }}" title="Pinterest"><i class="fa-brands fa-pinterest"></i></a>
{% endif %}
{% if site.unsplash_id %}
<a href="https://unsplash.com/@{{ site.unsplash_id }}" title="Unsplash"><i class="fa-brands fa-unsplash"></i></a>
{% endif %}
{% if site.instagram_id %}
<a href="https://instagram.com/{{ site.instagram_id }}" title="Instagram"><i class="fa-brands fa-instagram"></i></a>
{% endif %}
{% if site.facebook_id %}
<a href="https://facebook.com/{{ site.facebook_id }}" title="Facebook"><i class="fa-brands fa-facebook"></i></a>
{% endif %}
{% if site.youtube_id %}
<a href="https://youtube.com/@{{ site.youtube_id }}" title="YouTube"><i class="fa-brands fa-youtube"></i></a>
{% endif %}
{% if site.discord_id %}
<a href="https://discord.com/users/{{ site.discord_id }}" title="Discord"><i class="fa-brands fa-discord"></i></a>
{% endif %}
{% if site.zotero_username %}
<a href="https://www.zotero.org/{{ site.zotero_username }}" title="Zotero"><i class="ai ai-zotero"></i></a>
{% endif %}
{% if site.rss_icon %}
<a href="{{ site.baseurl }}/feed.xml" title="RSS Feed"><i class="fa-solid fa-square-rss"></i></a>
{% endif %}
{% if site.wechat_qr %}
<a id="WeChatBtn" title="WeChat"><i class="fa-brands fa-weixin"></i></a>
<div id="WeChatMod" class="wechat-modal">
<img src="{{ site.wechat_qr | prepend: 'assets/img/' | relative_url }}" alt="WeChat QR" id="WeChatQR">
</div>
{% include scripts/wechatModal.liquid %}
{% endif %}

View File

@ -1,47 +0,0 @@
{% assign extension = include.path | split:'.' | last %}
<figure>
{% if extension == "mp4" or extension == "webm" or extension == "ogg" %}
<video
src="{% if include.cache_bust %}{{ include.path | relative_url | bust_file_cache }}{% else %}{{ include.path | relative_url }}{% endif %}"
{% if include.class %}class="{{ include.class }}"{% endif %}
{% if include.width %}width="{{ include.width }}"{% else %}width="auto"{% endif %}
{% if include.height %}height="{{ include.height }}"{% else %}height="auto"{% endif %}
{% if include.min-width %}min-width="{{ include.min-width }}"{% endif %}
{% if include.min-height %}min-height="{{ include.min-height }}"{% endif %}
{% if include.max-width %}max-width="{{ include.max-width }}"{% endif %}
{% if include.max-height %}height="{{ include.max-height }}"{% endif %}
{% if include.title %}title="{{ include.title }}"{% endif %}
{% if include.alt %}alt="{{ include.alt }}"{% endif %}
{% if include.autoplay %}autoplay{% endif %}
{% if include.controls %}controls{% endif %}
{% if include.loop %}loop{% endif %}
{% if include.muted %}muted{% endif %}
{% if include.poster %}poster="{{ include.poster }}"{% endif %}
/>
{% else %}
<iframe
src="{{ include.path }}"
{% if include.class %}class="{{ include.class }}"{% endif %}
frameborder="0"
allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share"
allowfullscreen
{% if include.width %}width="{{ include.width }}"{% else %}width="auto"{% endif %}
{% if include.height %}height="{{ include.height }}"{% else %}height="auto"{% endif %}
{% if include.min-width %}min-width="{{ include.min-width }}"{% endif %}
{% if include.min-height %}min-height="{{ include.min-height }}"{% endif %}
{% if include.max-width %}max-width="{{ include.max-width }}"{% endif %}
{% if include.max-height %}height="{{ include.max-height }}"{% endif %}
{% if include.alt %}alt="{{ include.alt }}"{% endif %}
{% if include.title %}title="{{ include.title }}"{% endif %}
/>
{% endif %}
{%- if include.caption -%}<figcaption class="caption">{{ include.caption }}</figcaption>{%- endif %}
</figure>

97
_includes/video.liquid Normal file
View File

@ -0,0 +1,97 @@
{% assign extension = include.path | split: '.' | last %}
<figure>
{% if extension == 'mp4' or extension == 'webm' or extension == 'ogg' %}
<video
src="{% if include.cache_bust %}{{ include.path | relative_url | bust_file_cache }}{% else %}{{ include.path | relative_url }}{% endif %}"
{% if include.class %}
class="{{ include.class }}"
{% endif %}
{% if include.width %}
width="{{ include.width }}"
{% else %}
width="auto"
{% endif %}
{% if include.height %}
height="{{ include.height }}"
{% else %}
height="auto"
{% endif %}
{% if include['min-width'] %}
min-width="{{ include.min-width }}"
{% endif %}
{% if include['min-height'] %}
min-height="{{ include.min-height }}"
{% endif %}
{% if include['max-width'] %}
max-width="{{ include.max-width }}"
{% endif %}
{% if include['max-height'] %}
height="{{ include.max-height }}"
{% endif %}
{% if include.title %}
title="{{ include.title }}"
{% endif %}
{% if include.alt %}
alt="{{ include.alt }}"
{% endif %}
{% if include.autoplay %}
autoplay
{% endif %}
{% if include.controls %}
controls
{% endif %}
{% if include.loop %}
loop
{% endif %}
{% if include.muted %}
muted
{% endif %}
{% if include.poster %}
poster="{{ include.poster }}"
{% endif %}
/>
{% else %}
<iframe
src="{{ include.path }}"
{% if include.class %}
class="{{ include.class }}"
{% endif %}
frameborder="0"
allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share"
allowfullscreen
{% if include.width %}
width="{{ include.width }}"
{% else %}
width="auto"
{% endif %}
{% if include.height %}
height="{{ include.height }}"
{% else %}
height="auto"
{% endif %}
{% if include['min-width'] %}
min-width="{{ include.min-width }}"
{% endif %}
{% if include['min-height'] %}
min-height="{{ include.min-height }}"
{% endif %}
{% if include['max-width'] %}
max-width="{{ include.max-width }}"
{% endif %}
{% if include['max-height'] %}
height="{{ include.max-height }}"
{% endif %}
{% if include.alt %}
alt="{{ include.alt }}"
{% endif %}
{% if include.title %}
title="{{ include.title }}"
{% endif %}
/>
{% endif %}
{% if include.caption %}
<figcaption class="caption">{{ include.caption }}</figcaption>
{% endif %}
</figure>

Some files were not shown because too many files have changed in this diff Show More