Compare commits

...

No commits in common. "master" and "gh-pages" have entirely different histories.

414 changed files with 2636 additions and 99627 deletions

View File

@ -1,44 +0,0 @@
{
"files": ["README.md"],
"imageSize": 100,
"commit": false,
"contributorsPerLine": 7,
"projectName": "al-folio",
"projectOwner": "alshedivat",
"repoType": "github",
"repoHost": "https://github.com",
"badgeTemplate": "[core_contributors]: https://img.shields.io/badge/core_contributors-<%= contributors.length %>-orange.svg 'Number of core contributors'",
"contributorTemplate": "<a href=\"<%= contributor.profile %>\"><img src=\"<%= contributor.avatar_url %>\" width=\"<%= options.imageSize %>px;\" alt=\"\"/><br /><sub><b><%= contributor.name %></b></sub></a>",
"skipCi": true,
"contributors": [
{
"login": "alshedivat",
"name": "Maruan",
"avatar_url": "https://avatars.githubusercontent.com/u/2126561?v=4",
"profile": "http://maruan.alshedivat.com",
"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"]
},
{
"login": "pourmand1376",
"name": "Amir Pourmand",
"avatar_url": "https://avatars.githubusercontent.com/u/32064808?v=4",
"profile": "https://amirpourmand.ir",
"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"]
}
],
"commitConvention": "angular"
}

View File

@ -1,31 +0,0 @@
// For format details, see https://aka.ms/devcontainer.json. For config options, see the
// README at: https://github.com/devcontainers/templates/tree/main/src/jekyll
{
"name": "Jekyll",
"image": "mcr.microsoft.com/devcontainers/jekyll",
// Features to add to the dev container. More info: https://containers.dev/features.
"features": {
"ghcr.io/rocker-org/devcontainer-features/apt-packages:1": {
"packages": "build-essential,imagemagick,inotify-tools,jupyter-nbconvert,procps,ruby-full,zlib1g-dev"
},
"ghcr.io/devcontainers-contrib/features/prettier:1": {}
},
// Optionally: run jekyll serve automatically on container entering using the Docker entrypoint
"postAttachCommand": "./bin/entry_point.sh",
"customizations": {
"vscode": {
"extensions": ["esbenp.prettier-vscode", "sissel.shopify-liquid", "yzhang.markdown-all-in-one"],
"settings": {
// use prettier code formatter as default formatter
"editor.defaultFormatter": "esbenp.prettier-vscode",
"prettier.configPath": ".prettierrc",
"editor.formatOnSave": true
}
}
},
"remoteUser": "vscode"
}

View File

@ -1,3 +0,0 @@
_site/
.git/
assets/

View File

@ -1,24 +0,0 @@
# Template taken from https://github.com/v8/v8/blob/master/.git-blame-ignore-revs.
#
# This file contains a list of git hashes of revisions to be ignored by git blame. These
# revisions are considered "unimportant" in that they are unlikely to be what you are
# interested in when blaming. Most of these will probably be commits related to linting
# and code formatting.
#
# Instructions:
# - Only large (generally automated) reformatting or renaming CLs should be
# added to this list. Do not put things here just because you feel they are
# trivial or unimportant. If in doubt, do not put it on this list.
# - Precede each revision with a comment containing the PR title and number.
# For bulk work over many commits, place all commits in a block with a single
# comment at the top describing the work done in those commits.
# - Only put full 40-character hashes on this list (not short hashes or any
# other revision reference).
# - Append to the bottom of the file (revisions should be in chronological order
# from oldest to newest).
# - Because you must use a hash, you need to append to this list in a follow-up
# PR to the actual reformatting PR that you are trying to ignore.
# Format all the code using prettier.io. (#2048, #2062)
beb6f27d596e753014cb9bff1939e5f78d66431c
2d34024961c3a3d27d6fd18ce06a551657983234

View File

@ -1,101 +0,0 @@
name: 🐛 Report a bug
description: Any errors.
labels: ["needs triage", "bug"]
body:
- type: markdown
attributes:
value: >
Before you go any further. Is this really a **🐛 bug**?
If it's a question about how al-folio works, have a look at our [documentation](https://github.com/alshedivat/al-folio/blob/master/README.md),
[frequently asked questions](https://github.com/alshedivat/al-folio/blob/master/FAQ.md),
[past questions](https://github.com/alshedivat/al-folio/discussions/categories/q-a),
or [ask a question](https://github.com/alshedivat/al-folio/discussions/new?category=q-a).
- type: checkboxes
id: requirements
attributes:
label: Have you checked that your issue isn't already filed?
description: >
Please check if somebody else has already filed the same issue.
If you find a similar issue, please add a 👍 reaction or comment on the original post.
options:
- label: I read through [FAQ](https://github.com/alshedivat/al-folio/blob/master/FAQ.md) and searched through the [past issues](https://github.com/alshedivat/al-folio/issues), none of which addressed my issue.
required: true
- label: Yes, I have checked that this issue isn't already filed.
required: true
- type: input
attributes:
label: Bug description
description: A description of the 🐛 bug.
placeholder: A clear and concise description of what the bug is.
validations:
required: true
- type: textarea
attributes:
label: How to reproduce the bug
description: Provide steps to reproduce the 🐛 bug.
placeholder: |
Include steps to reproduce, the expected behaviour, and the actual behaviour.
1. Go to '...'
2. Click on '....'
3. Scroll down to '....'
4. See error
validations:
required: true
- type: textarea
attributes:
label: Error messages and logs
description: >
Provide any error messages and/or logs
placeholder: "Copy the complete error messages and logs"
value: |
```
The error message you got, with the full traceback if available. Please paste it between these triple backticks.
```
validations:
required: false
- type: dropdown
id: os
attributes:
label: What operating system are you using?
description: select all OSs where you have experienced this issue
multiple: true
options:
- Linux
- Mac
- Windows
- Not applicable (e.g. you're using GitHub Pages or other hosting)
validations:
required: true
- type: dropdown
id: environment
attributes:
label: Where are you seeing the problem on?
description: select all environments where you have experienced this issue
multiple: true
options:
- "Running locally with Docker"
- "Running locally without Docker"
- "Deployed site"
validations:
required: true
- type: textarea
attributes:
label: More info
description: Add any other info about the issue here.
placeholder: |
Add any other context about the problem here, such as versions of the libraries if running without docker, screenshots, links to the deployed site, etc.
validations:
required: false
- type: markdown
attributes:
value: "**Happy coding!**"

View File

@ -1,56 +0,0 @@
name: 🚀 Feature request
description: Propose a feature for this project
labels: ["needs triage", "enhancement"]
body:
- type: markdown
attributes:
value: >
Before you go any further, are you sure that this feature is not already implemented?
If it's a question about how al-folio works, have a look at our [documentation](https://github.com/alshedivat/al-folio/blob/master/README.md),
[frequently asked questions](https://github.com/alshedivat/al-folio/blob/master/FAQ.md),
[past questions](https://github.com/alshedivat/al-folio/discussions/categories/q-a),
or [ask a question](https://github.com/alshedivat/al-folio/discussions/new?category=q-a).
- type: checkboxes
id: requirements
attributes:
label: Have you checked that your feature request isn't already filed?
description: >
Please check if somebody else has already filed the same 🚀 feature request.
If you find a similar feature request, please add a 👍 reaction or comment on the original post.
options:
- label: I read through [FAQ](https://github.com/alshedivat/al-folio/blob/master/FAQ.md) and searched through the [past issues](https://github.com/alshedivat/al-folio/issues), none of which addressed my feature request.
required: true
- label: Yes, I have checked that this feature request isn't already filed.
required: true
- type: textarea
attributes:
label: Description & Motivation
description: A clear and concise description of the 🚀 feature proposal
placeholder: |
Please outline the motivation for the proposal.
Is your feature request related to a problem? e.g., I'm always frustrated when [...].
If this is related to another GitHub issue, please link it here
- type: textarea
attributes:
label: Pitch
description: A clear and concise description of what you want to happen.
validations:
required: false
- type: textarea
attributes:
label: Alternatives
description: A clear and concise description of any alternative solutions or features you've considered, if any.
validations:
required: false
- type: textarea
attributes:
label: Additional context
description: Add any other context or screenshots about the feature request here.
validations:
required: false

View File

@ -1,8 +0,0 @@
blank_issues_enabled: false
contact_links:
- name: ❓ Ask a Question
url: https://github.com/alshedivat/al-folio/discussions/categories/q-a
about: Ask and answer al-folio related questions.
- name: 📖 Read the documentation
url: https://github.com/alshedivat/al-folio/blob/master/README.md
about: Please consult the documentation before opening any issues!

14
.github/release.yml vendored
View File

@ -1,14 +0,0 @@
changelog:
exclude:
labels:
- ignore-for-release
categories:
- title: new features 🚀
labels:
- enhancement
- title: bug fixes and improvements ✨
labels:
- bug-fix
- title: other changes 🛠️
labels:
- "*"

18
.github/stale.yml vendored
View File

@ -1,18 +0,0 @@
# Number of days of inactivity before an issue becomes stale
daysUntilStale: 60
# Number of days of inactivity before a stale issue is closed
daysUntilClose: 7
# Issues with these labels will never be considered stale
exemptLabels:
- pinned
- security
- enhancement
# Label to use when marking an issue as stale
staleLabel: wontfix
# Comment to post when marking an issue as stale. Set to `false` to disable
markComment: >
This issue has been automatically marked as stale because it has not had
recent activity. It will be closed if no further activity occurs. Thank you
for your contributions.
# Comment to post when closing a stale issue. Set to `false` to disable
closeComment: false

View File

@ -1,73 +0,0 @@
name: Axe accessibility testing
on:
# if you want to run this on every push uncomment the following lines
# push:
# branches:
# - master
# - main
# pull_request:
# branches:
# - master
# - main
workflow_dispatch:
inputs:
url:
description: "URL to be checked (e.g.: blog/)"
required: false
env:
URL: ""
jobs:
check:
# available images: https://github.com/actions/runner-images#available-images
runs-on: ubuntu-latest
steps:
- name: Checkout 🛎️
uses: actions/checkout@v4
- name: Setup Ruby
uses: ruby/setup-ruby@v1
with:
ruby-version: "3.2.2"
bundler-cache: true
- name: Update _config.yml ⚙️
uses: fjogeleit/yaml-update-action@main
with:
commitChange: false
valueFile: "_config.yml"
changes: |
{
"giscus.repo": "${{ github.repository }}",
"baseurl": ""
}
- name: Install and Build 🔧
run: |
pip3 install --upgrade jupyter
export JEKYLL_ENV=production
bundle exec jekyll build
- name: Purge unused CSS 🧹
run: |
npm install -g purgecss
purgecss -c purgecss.config.js
- name: Get Chromium version 🌐
# https://github.com/GoogleChromeLabs/chrome-for-testing?tab=readme-ov-file#other-api-endpoints
run: |
CHROMIUM_VERSION=$(wget -qO- https://googlechromelabs.github.io/chrome-for-testing/LATEST_RELEASE_STABLE | cut -d. -f1)
echo "Chromium version: $CHROMIUM_VERSION"
echo "CHROMIUM_VERSION=$CHROMIUM_VERSION" >> $GITHUB_ENV
- name: Setup Chrome 🌐
id: setup-chrome
uses: browser-actions/setup-chrome@v1
with:
chrome-version: ${{ env.CHROMIUM_VERSION }}
- name: Install chromedriver 🚗
run: |
npm install -g chromedriver@$CHROMIUM_VERSION
- name: Run axe 🪓
# https://github.com/dequelabs/axe-core-npm/tree/develop/packages/cli
run: |
npm install -g @axe-core/cli
npm install -g http-server
http-server _site/ &
axe --chromedriver-path $(npm root -g)/chromedriver/bin/chromedriver http://localhost:8080/${{ github.event.inputs.url || env.URL }} --load-delay=1500 --exit

View File

@ -1,46 +0,0 @@
name: Check for broken links on site
on:
workflow_run:
workflows: [Deploy site]
types: [completed]
jobs:
check-links-on-site:
# https://docs.github.com/en/actions/using-workflows/events-that-trigger-workflows#running-a-workflow-based-on-the-conclusion-of-another-workflow
if: ${{ github.event.workflow_run.conclusion == 'success' }}
# available images: https://github.com/actions/runner-images#available-images
runs-on: ubuntu-latest
steps:
- name: Checkout 🛎️
uses: actions/checkout@v4
- name: Setup Ruby
uses: ruby/setup-ruby@v1
with:
ruby-version: "3.2.2"
bundler-cache: true
- name: Update _config.yml ⚙️
uses: fjogeleit/yaml-update-action@main
with:
commitChange: false
valueFile: "_config.yml"
changes: |
{
"giscus.repo": "${{ github.repository }}",
"baseurl": ""
}
- name: Install and Build 🔧
run: |
pip3 install --upgrade jupyter
export JEKYLL_ENV=production
bundle exec jekyll build
- name: Purge unused CSS 🧹
run: |
npm install -g purgecss
purgecss -c purgecss.config.js
- name: Link Checker 🔗
uses: lycheeverse/lychee-action@v1.9.0
with:
fail: true
# only check local links
args: --offline --remap '_site(/?.*)/assets/(.*) _site/assets/$2' --verbose --no-progress '_site/**/*.html'

View File

@ -1,52 +0,0 @@
name: Check for broken links
on:
push:
branches:
- master
- main
paths:
- "assets/**"
- "**.html"
- "**.js"
- "**.liquid"
- "**/*.md"
- "**.yml"
- "!.github/workflows/axe.yml"
- "!.github/workflows/deploy-docker-tag.yml"
- "!.github/workflows/deploy-image.yml"
- "!.github/workflows/docker-slim.yml"
- "!.github/workflows/lighthouse-badger.yml"
- "!.github/workflows/prettier.yml"
- "!lighthouse_results/**"
pull_request:
branches:
- master
- main
paths:
- "assets/**"
- "**.html"
- "**.js"
- "**.liquid"
- "**/*.md"
- "**.yml"
- "!.github/workflows/axe.yml"
- "!.github/workflows/deploy-docker-tag.yml"
- "!.github/workflows/deploy-image.yml"
- "!.github/workflows/docker-slim.yml"
- "!.github/workflows/lighthouse-badger.yml"
- "!.github/workflows/prettier.yml"
- "!lighthouse_results/**"
jobs:
link-checker:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Link Checker 🔗
uses: lycheeverse/lychee-action@v1.9.0
with:
fail: true
# removed md files that include liquid tags
args: --user-agent 'curl/7.54' --exclude-path README.md --exclude-path _pages/404.md --exclude-path _pages/blog.md --exclude-path _posts/2018-12-22-distill.md --exclude-path _posts/2023-04-24-videos.md --verbose --no-progress './**/*.md' './**/*.html'

View File

@ -1,50 +0,0 @@
name: Docker Image CI (Upload Tag)
on:
push:
tags:
- "v*"
paths:
- ".github/workflows/deploy-docker-tag.yml"
- ".github/workflows/deploy-image.yml"
- "bin/entry_point.sh"
- "Dockerfile"
- "Gemfile"
- "Gemfile.lock"
- "package.json"
- "package-lock.json"
jobs:
build:
runs-on: ubuntu-latest
steps:
- name: Checkout
uses: actions/checkout@v4
- name: Set up QEMU
uses: docker/setup-qemu-action@v3
- name: Buildx
uses: docker/setup-buildx-action@v3
- name: Docker meta
id: meta
uses: docker/metadata-action@v5
with:
images: amirpourmand/al-folio
- name: Login
uses: docker/login-action@v3
with:
username: ${{ secrets.DOCKER_USERNAME }}
password: ${{ secrets.DOCKER_PASSWORD }}
- name: Build and push
uses: docker/build-push-action@v5
with:
context: .
platforms: linux/amd64,linux/arm64/v8
push: ${{ github.event_name != 'pull_request' }}
tags: ${{ steps.meta.outputs.tags }}
labels: ${{ steps.meta.outputs.labels }}

View File

@ -1,44 +0,0 @@
name: Docker Image CI
on:
push:
branches:
- master
- main
paths:
- ".github/workflows/deploy-image.yml"
- "bin/entry_point.sh"
- "Dockerfile"
- "Gemfile"
- "Gemfile.lock"
- "package.json"
- "package-lock.json"
jobs:
build:
runs-on: ubuntu-latest
if: github.repository_owner == 'alshedivat'
steps:
- name: Checkout
uses: actions/checkout@v4
- name: Set up QEMU
uses: docker/setup-qemu-action@v3
- name: Buildx
uses: docker/setup-buildx-action@v3
- name: Login
uses: docker/login-action@v3
with:
username: ${{ secrets.DOCKER_USERNAME }}
password: ${{ secrets.DOCKER_PASSWORD }}
- name: Build and push
uses: docker/build-push-action@v5
with:
context: .
push: true
platforms: linux/amd64,linux/arm64/v8
tags: amirpourmand/al-folio

View File

@ -1,95 +0,0 @@
name: Deploy site
on:
push:
branches:
- master
- main
paths:
- "assets/**"
- "**.bib"
- "**.html"
- "**.js"
- "**.liquid"
- "**/*.md"
- "**.yml"
- "Gemfile"
- "Gemfile.lock"
- "!.github/workflows/axe.yml"
- "!.github/workflows/broken-links.yml"
- "!.github/workflows/deploy-docker-tag.yml"
- "!.github/workflows/deploy-image.yml"
- "!.github/workflows/docker-slim.yml"
- "!.github/workflows/lighthouse-badger.yml"
- "!.github/workflows/prettier.yml"
- "!lighthouse_results/**"
- "!CONTRIBUTING.md"
- "!CUSTOMIZE.md"
- "!FAQ.md"
- "!INSTALL.md"
- "!README.md"
pull_request:
branches:
- master
- main
paths:
- "assets/**"
- "**.bib"
- "**.html"
- "**.js"
- "**.liquid"
- "**/*.md"
- "**.yml"
- "Gemfile"
- "Gemfile.lock"
- "!.github/workflows/axe.yml"
- "!.github/workflows/broken-links.yml"
- "!.github/workflows/deploy-docker-tag.yml"
- "!.github/workflows/deploy-image.yml"
- "!.github/workflows/docker-slim.yml"
- "!.github/workflows/lighthouse-badger.yml"
- "!.github/workflows/prettier.yml"
- "!lighthouse_results/**"
- "!CONTRIBUTING.md"
- "!CUSTOMIZE.md"
- "!FAQ.md"
- "!INSTALL.md"
- "!README.md"
workflow_dispatch:
permissions:
contents: write
jobs:
deploy:
# available images: https://github.com/actions/runner-images#available-images
runs-on: ubuntu-latest
steps:
- name: Checkout 🛎️
uses: actions/checkout@v4
- name: Setup Ruby
uses: ruby/setup-ruby@v1
with:
ruby-version: "3.2.2"
bundler-cache: true
- name: Update _config.yml ⚙️
uses: fjogeleit/yaml-update-action@main
with:
commitChange: false
valueFile: "_config.yml"
propertyPath: "giscus.repo"
value: ${{ github.repository }}
- name: Install and Build 🔧
run: |
pip3 install --upgrade jupyter
export JEKYLL_ENV=production
bundle exec jekyll build
- name: Purge unused CSS 🧹
run: |
npm install -g purgecss
purgecss -c purgecss.config.js
- name: Deploy 🚀
if: github.event_name != 'pull_request'
uses: JamesIves/github-pages-deploy-action@v4
with:
folder: _site

View File

@ -1,57 +0,0 @@
name: Docker Slim
#Only trigger, when the build workflow succeeded
on:
push:
branches:
- master
- main
paths:
- ".github/workflows/docker-slim.yml"
workflow_run:
workflows: ["Docker Image CI"]
types:
- completed
# on:
# push:
# branches:
# - 'master'
jobs:
build:
# https://docs.github.com/en/actions/using-workflows/events-that-trigger-workflows#running-a-workflow-based-on-the-conclusion-of-another-workflow
if: ${{ github.event.workflow_run.conclusion == 'success' && github.repository_owner == 'alshedivat' }}
runs-on: ubuntu-latest
defaults:
run:
working-directory: ${{ github.workspace }}
steps:
- name: Checkout
uses: actions/checkout@v4
- name: Login
uses: docker/login-action@v3
with:
username: ${{ secrets.DOCKER_USERNAME }}
password: ${{ secrets.DOCKER_PASSWORD }}
- name: update docker-compose
shell: bash
run: |
sed -i "s|\.:|${{ github.workspace }}:|g" ${{ github.workspace }}/docker-compose.yml
cat ${{ github.workspace }}/docker-compose.yml
- uses: kitabisa/docker-slim-action@v1.1.1
env:
DSLIM_PULL: true
DSLIM_COMPOSE_FILE: ${{ github.workspace }}/docker-compose.yml
DSLIM_TARGET_COMPOSE_SVC: jekyll
DSLIM_CONTINUE_AFTER: signal
with:
target: amirpourmand/al-folio
tag: "slim"
# Push to the registry
- run: docker image push amirpourmand/al-folio:slim

View File

@ -1,63 +0,0 @@
# Lighthouse-Badger-Easy | GitHub Action Workflow
#
# Description: Generates, adds & updates manually/automatically Lighthouse badges & reports from one/multiple input URL(s) to the current repository & main branch with minimal settings
# Author: Sitdisch
# Source: https://github.com/myactionway/lighthouse-badger-workflows
# License: MIT
# Copyright (c) 2021 Sitdisch
name: "Lighthouse Badger"
########################################################################
# DEFINE YOUR INPUTS AND TRIGGERS IN THE FOLLOWING
########################################################################
# INPUTS as environmental variables (env) for not manually triggered workflows
env:
URLS: https://alshedivat.github.io/al-folio/
TOKEN_NAME: LIGHTHOUSE_BADGER_TOKEN
# If any of the following env is blank, a default value is used instead
REPO_BRANCH: "${{ github.repository }} master" # target repository & branch e.g. 'dummy/mytargetrepo main'
MOBILE_LIGHTHOUSE_PARAMS: "--only-categories=performance,accessibility,best-practices,seo --throttling.cpuSlowdownMultiplier=2"
DESKTOP_LIGHTHOUSE_PARAMS: "--only-categories=performance,accessibility,best-practices,seo --preset=desktop --throttling.cpuSlowdownMultiplier=1"
# TRIGGERS
on:
page_build:
# schedule: # Check your schedule here => https://crontab.guru/
# - cron: '55 23 * * 0' # e.g. every Sunday at 23:55
#
# THAT'S IT; YOU'RE DONE;
workflow_dispatch:
########################################################################
# THAT'S IT; YOU DON'T HAVE TO DEFINE ANYTHING IN THE FOLLOWING
########################################################################
jobs:
lighthouse-badger-easy:
runs-on: ubuntu-latest
timeout-minutes: 8
steps:
- name: Preparatory Tasks
run: |
REPOSITORY=`expr "${{ env.REPO_BRANCH }}" : "\([^ ]*\)"`
BRANCH=`expr "${{ env.REPO_BRANCH }}" : ".* \([^ ]*\)"`
echo "REPOSITORY=$REPOSITORY" >> $GITHUB_ENV
echo "BRANCH=$BRANCH" >> $GITHUB_ENV
env:
REPO_BRANCH: ${{ env.REPO_BRANCH }}
- uses: actions/checkout@v4
with:
repository: ${{ env.REPOSITORY }}
token: ${{ secrets[github.event.inputs.token_name] || secrets[env.TOKEN_NAME] }}
ref: ${{ env.BRANCH }}
- uses: actions/checkout@v4
with:
repository: "myactionway/lighthouse-badges"
path: temp_lighthouse_badges_nested
- uses: myactionway/lighthouse-badger-action@v2.2
with:
urls: ${{ env.URLS }}
mobile_lighthouse_params: ${{ env.MOBILE_LIGHTHOUSE_PARAMS }}
desktop_lighthouse_params: ${{ env.DESKTOP_LIGHTHOUSE_PARAMS }}

View File

@ -1,18 +0,0 @@
name: Comment on pull request
on:
repository_dispatch:
types: [prettier-failed-on-pr]
jobs:
comment:
# available images: https://github.com/actions/runner-images#available-images
runs-on: ubuntu-latest
steps:
- name: PR comment with html diff 💬
uses: thollander/actions-comment-pull-request@v2
with:
comment_tag: prettier-failed
pr_number: ${{ github.event.client_payload.pr_number }}
message: |
Failed [prettier code check](${{ github.server_url }}/${{ github.repository }}/actions/runs/${{ github.event.client_payload.run_id }}). Check [this file](${{ github.event.client_payload.artifact_url }}) for more information.

View File

@ -1,48 +0,0 @@
name: Prettier code formatter
on:
pull_request:
branches:
- master
- main
push:
branches:
- master
- main
jobs:
check:
# available images: https://github.com/actions/runner-images#available-images
runs-on: ubuntu-latest
steps:
- name: Checkout 🛎️
uses: actions/checkout@v4
- 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 🔎
id: prettier
run: npx prettier . --check
- name: Create diff 📝
# https://docs.github.com/en/actions/learn-github-actions/expressions#failure
if: ${{ failure() }}
run: |
npx prettier . --write
git diff -- . ':(exclude)package-lock.json' ':(exclude)package.json' > diff.txt
npm install -g diff2html-cli
diff2html -i file -s side -F diff.html -- diff.txt
- name: Upload html diff ⬆️
id: artifact-upload
if: ${{ failure() && steps.prettier.conclusion == 'failure' }}
uses: actions/upload-artifact@v4
with:
name: HTML Diff
path: diff.html
retention-days: 7
- name: Dispatch information to repository 🗣️
if: ${{ failure() && steps.prettier.conclusion == 'failure' && github.event_name == 'pull_request' }}
uses: peter-evans/repository-dispatch@v2
with:
event-type: prettier-failed-on-pr
client-payload: '{"pr_number": "${{ github.event.number }}", "artifact_url": "${{ steps.artifact-upload.outputs.artifact-url }}", "run_id": "${{ github.run_id }}"}'

13
.gitignore vendored
View File

@ -1,13 +0,0 @@
_site
.bundle
.sass-cache
.jekyll-cache
.jekyll-metadata
.DS_store
.ruby-version
.tweet-cache
Gemfile.lock
assets/libs/
node_modules/
vendor
.idea

View File

@ -1,10 +0,0 @@
# 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
rev: v4.3.0
hooks:
- id: trailing-whitespace
- id: end-of-file-fixer
- id: check-yaml
- id: check-added-large-files

View File

@ -1,10 +0,0 @@
**/*.map
**/*.min.css
**/*.min.js
assets/css/main.scss
assets/js/search-data.js
assets/js/distillpub/template.v2.js
assets/js/search/*.js
assets/plotly/demo.html
lighthouse_results/**
_posts/2015-10-20-math.md

View File

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

View File

@ -1,2 +0,0 @@
{
}

1
404.html Normal file

File diff suppressed because one or more lines are too long

View File

@ -1,28 +0,0 @@
# Contributing to al-folio
Thank you for considering contributing 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.
Note that since [#2048](https://github.com/alshedivat/al-folio/pull/2048) al-folio uses the [prettier formatter](https://prettier.io/) for its code, meaning all new submitted code must conform to its standard. If you don't have `prettier` installed for your setup and the `prettier` code check fails when submitting a PR, you can check the referred failed action in our repo. In that action there will be an artifact with an HTML diff showing the needed changes.
## 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](FAQ.md) 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.
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

@ -1,154 +0,0 @@
# Customize
Here we will give you some tips on how to customize the website. One important thing to note is that **ALL** the changes you make should be done on the **main** branch of your repository. The `gh-pages` branch is automatically overwritten every time you make a change to the main branch.
## Project structure
The project is structured as follows, focusing on the main components that you will need to modify:
```txt
.
├── 📂 assets/: contains the assets that are displayed in the website
│   └── 📂 json/
│   └── 📄 resume.json: CV in JSON format (https://jsonresume.org/)
├── 📂 _bibliography/
│   └── 📄 papers.bib: bibliography in BibTeX format
├── 📄 _config.yml: the configuration file of the template
├── 📂 _data/: contains some of the data used in the template
│   ├── 📄 cv.yml: CV in YAML format, used when assets/json/resume.json is not found
│   └── 📄 repositories.yml: users and repositories info in YAML format
├── 📂 _includes/: contains code parts that are included in the main HTML file
│   └── 📄 news.liquid: defines the news section layout in the about page
├── 📂 _layouts/: contains the layouts to choose from in the frontmatter of the Markdown files
├── 📂 _news/: the news that will appear in the news section in the about page
├── 📂 _pages/: contains the pages of the website
| └── 📄 404.md: 404 page (page not found)
├── 📂 _posts/: contains the blog posts
├── 📂 _projects/: contains the projects
└── 📂 _sass/: contains the SASS files that define the style of the website
├── 📄 _base.scss: base style of the website
├── 📄 _cv.scss: style of the CV page
├── 📄 _distill.scss: style of the Distill articles
├── 📄 _layout.scss: style of the overall layout
├── 📄 _themes.scss: themes colors and a few icons
└── 📄 _variables.scss: variables used in the SASS files
```
## 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).
> Note that the `url` and `baseurl` settings are used to generate the links of the website, as explained in the [install instructions](INSTALL.md).
All changes made to this file are only visible after you rebuild the website. That means that you need to run `bundle exec jekyll serve` again if you are running the website locally or push your changes to GitHub if you are using GitHub Pages. All other changes are visible immediately, you only need to refresh the page.
## 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.
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.
## 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 by changing the [layout](https://jekyllrb.com/docs/layouts/) attribute in the [frontmatter](https://jekyllrb.com/docs/front-matter/) of the Markdown file, and also the path to access it by changing the [permalink](https://jekyllrb.com/docs/permalinks/) attribute. 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](https://jekyllrb.com/docs/posts/#creating-posts) 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.
## 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.
## 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.
## 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).
## 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.
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`, `annotation`, `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):
```yaml
scholar:
last_name: [Einstein]
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,
```yaml
"adams":
- firstname: ["Edwin", "E.", "E. P.", "Edwin Plimpton"]
url: https://en.wikipedia.org/wiki/Edwin_Plimpton_Adams
"podolsky":
- firstname: ["Boris", "B.", "B. Y.", "Boris Yakovlevich"]
url: https://en.wikipedia.org/wiki/Boris_Podolsky
"rosen":
- firstname: ["Nathan", "N."]
url: https://en.wikipedia.org/wiki/Nathan_Rosen
"bach":
- firstname: ["Johann Sebastian", "J. S."]
url: https://en.wikipedia.org/wiki/Johann_Sebastian_Bach
- firstname: ["Carl Philipp Emanuel", "C. P. E."]
url: https://en.wikipedia.org/wiki/Carl_Philipp_Emanuel_Bach
```
If the entry matches one of the combinations of the last names and the first names, it will be highlighted and linked to the url provided.
### Buttons (through custom bibtex keywords)
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.
- `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)
- `annotation`: Adds a popover info message to the end of the author list that can potentially be used to clarify superscripts. HTML is allowed.
- `arxiv`: Adds a link to the Arxiv website (Note: only add the arxiv identifier here - the link is generated automatically)
- `bibtex_show`: Adds a "Bib" button that expands a hidden text field with the full bibliography entry
- `blog`: Adds a "Blog" button redirecting to the specified link
- `code`: Adds a "Code" button redirecting to the specified link
- `dimensions`: Adds a [Dimensions](https://www.dimensions.ai/) badge (Note: if DOI or PMID is provided just use `true`, otherwise only add the Dimensions' identifier here - the link is generated automatically)
- `html`: Inserts an "HTML" button redirecting to the user-specified link
- `pdf`: Adds a "PDF" button redirecting to a specified file (if a full link is not specified, the file will be assumed to be placed in the /assets/pdf/ directory)
- `poster`: Adds a "Poster" button redirecting to a specified file (if a full link is not specified, the file will be assumed to be placed in the /assets/pdf/ directory)
- `slides`: Adds a "Slides" button redirecting to a specified file (if a full link is not specified, the file will be assumed to be placed in the /assets/pdf/ directory)
- `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.liquid](_layouts/bib.liquid) 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.
## 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.
## Adding a newsletter
You can add a newsletter subscription form by adding the specified information at the `newsletter` section in the [\_config.yml](_config.yml) file. To set up a newsletter, you can use a service like [Loops.so](https://loops.so/), which is the current supported solution. Once you have set up your newsletter, you can add the form [endpoint](https://loops.so/docs/forms/custom-form) to the `endpoint` field in the `newsletter` section of the [\_config.yml](_config.yml) file.
Depending on your specified footer behavior, the sign up form either will appear at the bottom of the `About` page and at the bottom of blogposts if `related_posts` are enabled, or in the footer at the bottom of each page.

View File

@ -1,41 +0,0 @@
FROM ruby:latest
ENV DEBIAN_FRONTEND noninteractive
Label MAINTAINER Amir Pourmand
RUN apt-get update -y && apt-get install -y --no-install-recommends \
locales \
imagemagick \
build-essential \
zlib1g-dev \
jupyter-nbconvert \
inotify-tools procps && \
apt-get clean && rm -rf /var/lib/apt/lists/* /var/cache/apt/archives/*
RUN sed -i '/en_US.UTF-8/s/^# //g' /etc/locale.gen && \
locale-gen
ENV LANG=en_US.UTF-8 \
LANGUAGE=en_US:en \
LC_ALL=en_US.UTF-8 \
JEKYLL_ENV=production
RUN mkdir /srv/jekyll
ADD Gemfile.lock /srv/jekyll
ADD Gemfile /srv/jekyll
WORKDIR /srv/jekyll
# install jekyll and dependencies
RUN gem install jekyll bundler
RUN bundle install --no-cache
# && rm -rf /var/lib/gems/3.1.0/cache
EXPOSE 8080
COPY bin/entry_point.sh /tmp/entry_point.sh
CMD ["/tmp/entry_point.sh"]

101
FAQ.md
View File

@ -1,101 +0,0 @@
# Frequently Asked Questions
Here are some frequently asked questions. If you have a different question, please check if it was not already answered in the Q&A section of the [GitHub Discussions](https://github.com/alshedivat/al-folio/discussions/categories/q-a). If not, feel free to ask a new question there.
- [After I create a new repository from this template and setup the repo, I get a deployment error. Isn't the website supposed to correctly deploy automatically?](#after-i-create-a-new-repository-from-this-template-and-setup-the-repo-i-get-a-deployment-error-isnt-the-website-supposed-to-correctly-deploy-automatically)
- [I am using a custom domain (e.g., `foo.com`). My custom domain becomes blank in the repository settings after each deployment. How do I fix that?](#i-am-using-a-custom-domain-eg-foocom-my-custom-domain-becomes-blank-in-the-repository-settings-after-each-deployment-how-do-i-fix-that)
- [My webpage works locally. But after deploying, it fails to build and throws `Unknown tag 'toc'`. How do I fix that?](#my-webpage-works-locally-but-after-deploying-it-fails-to-build-and-throws-unknown-tag-toc-how-do-i-fix-that)
- [My webpage works locally. But after deploying, it is not displayed correctly (CSS and JS are not loaded properly). How do I fix that?](#my-webpage-works-locally-but-after-deploying-it-is-not-displayed-correctly-css-and-js-are-not-loaded-properly-how-do-i-fix-that)
- [Atom feed doesn't work. Why?](#atom-feed-doesnt-work-why)
- [My site doesn't work when I enable `related_blog_posts`. Why?](#my-site-doesnt-work-when-i-enable-related_blog_posts-why)
- [When trying to deploy, it's asking for github login credentials, which github disabled password authentication and it exits with an error. How to fix?](#when-trying-to-deploy-its-asking-for-github-login-credentials-which-github-disabled-password-authentication-and-it-exits-with-an-error-how-to-fix)
- [When I manually run the Lighthouse Badger workflow, it fails with `Error: Input required and not supplied: token`. How do I fix that?](#when-i-manually-run-the-lighthouse-badger-workflow-it-fails-with-error-input-required-and-not-supplied-token-how-do-i-fix-that)
- [My code runs fine locally, but when I create a commit and submit it, it fails with `prettier code formatter workflow run failed for master branch`. How do I fix that?](#my-code-runs-fine-locally-but-when-i-create-a-commit-and-submit-it-it-fails-with-prettier-code-formatter-workflow-run-failed-for-master-branch-how-do-i-fix-that)
- [After I update my site with some new content, even a small change, the GitHub action throws an error or displays a warning. What happened?](#after-i-update-my-site-with-some-new-content-even-a-small-change-the-github-action-throws-an-error-or-displays-a-warning-what-happened)
- [I am trying to deploy my site, but it fails with `Could not find gem 'jekyll-diagrams' in locally installed gems`. How do I fix that?](#i-am-trying-to-deploy-my-site-but-it-fails-with-could-not-find-gem-jekyll-diagrams-in-locally-installed-gems-how-do-i-fix-that)
- [How can I update Font Awesome version on the template](#how-can-i-update-font-awesome-version-on-the-template)
- [What do all these GitHub actions/workflows mean?](#what-do-all-these-github-actionsworkflows-mean)
---
#### After I create a new repository from this template and setup the repo, I get a deployment error. Isn't the website supposed to correctly deploy automatically?
Yes, if you are using release `v0.3.5` or later, the website will automatically and correctly re-deploy right after your first commit. Please make some changes (e.g., change your website info in `_config.yml`), commit, and push. Make sure to follow [deployment instructions](https://github.com/alshedivat/al-folio#deployment). (Relevant issue: [209](https://github.com/alshedivat/al-folio/issues/209#issuecomment-798849211).)
#### I am using a custom domain (e.g., `foo.com`). My custom domain becomes blank in the repository settings after each deployment. How do I fix that?
You need to add `CNAME` file to the `master` or `source` branch of your repository. The file should contain your custom domain name. (Relevant issue: [130](https://github.com/alshedivat/al-folio/issues/130).)
#### My webpage works locally. But after deploying, it fails to build and throws `Unknown tag 'toc'`. How do I fix that?
Make sure you followed through the [deployment instructions](#deployment) in the previous section. You should have set the deployment branch to `gh-pages`. (Related issue: [1438](https://github.com/alshedivat/al-folio/issues/1438).)
#### My webpage works locally. But after deploying, it is not displayed correctly (CSS and JS are not loaded properly). How do I fix that?
If the website does not load the theme, the layout looks weird, and all links are broken, make sure to correctly specify the `url` and `baseurl` paths in `_config.yml`. Set `url` to `https://<your-github-username>.github.io` or to `https://<your.custom.domain>` if you are using a custom domain. If you are deploying a personal or organization website, leave `baseurl` blank. If you are deploying a project page, set `baseurl: /<your-project-name>/`. If all previous steps were done correctly, all is missing is [for your browser to fetch again the site stylesheet](https://github.com/alshedivat/al-folio/issues/1398#issuecomment-1609518404).
#### Atom feed doesn't work. Why?
Make sure to correctly specify the `url` and `baseurl` paths in `_config.yml`. RSS Feed plugin works with these correctly set up fields: `title`, `url`, `description` and `author`. Make sure to fill them in an appropriate way and try again.
#### My site doesn't work when I enable `related_blog_posts`. Why?
This is probably due to the [classifier reborn](https://github.com/jekyll/classifier-reborn) plugin, which is used to calculate related posts. If the error states `Liquid Exception: Zero vectors can not be normalized...` or `sqrt': Numerical argument is out of domain - "sqrt"`, it means that it could not calculate related posts for a specific post. This is usually caused by [empty or minimal blog posts](https://github.com/jekyll/classifier-reborn/issues/64) without meaningful words (i.e. only [stop words](https://en.wikipedia.org/wiki/Stop_words)) or even [specific characters](https://github.com/jekyll/classifier-reborn/issues/194) you used in your posts. Also, the calculus for similar posts are made for every `post`, which means every page that uses `layout: post`, including the announcements. To change this behavior, simply add `related_posts: false` to the front matter of the page you don't want to display related posts on. Another solution is to disable the lsi (latent semantic indexing) entirely by setting the `lsi` flag to `false` in `_config.yml`. Related issue: [#1828](https://github.com/alshedivat/al-folio/issues/1828).
#### When trying to deploy, it's asking for github login credentials, which github disabled password authentication and it exits with an error. How to fix?
Open .git/config file using your preferred editor. Change the `https` portion of the `url` variable to `ssh`. Try deploying again.
#### When I manually run the [Lighthouse Badger](https://github.com/alshedivat/al-folio/actions/workflows/lighthouse-badger.yml) workflow, it fails with `Error: Input required and not supplied: token`. How do I fix that?
You need to [create a personal access token](https://docs.github.com/en/authentication/keeping-your-account-and-data-secure/managing-your-personal-access-tokens#creating-a-fine-grained-personal-access-token) and [add it as a secret](https://docs.github.com/en/actions/security-guides/using-secrets-in-github-actions#creating-encrypted-secrets-for-a-repository) named `LIGHTHOUSE_BADGER_TOKEN` to your repository. For more information, check [lighthouse-badger documentation](https://github.com/MyActionWay/lighthouse-badger-workflows#lighthouse-badger-easyyml) on how to do this.
#### My code runs fine locally, but when I create a commit and submit it, it fails with `prettier code formatter workflow run failed for master branch`. How do I fix that?
We implemented support for [Prettier code formatting](https://prettier.io/) in [#2048](https://github.com/alshedivat/al-folio/pull/2048). It basically ensures that your code is well formatted. If you want to ensure your code is compliant with `Prettier` you can install it in your computer [integrated with an editor](https://prettier.io/docs/en/editors), [install it and run manually](https://prettier.io/docs/en/install), or you can disable it for your repo. For this, just delete the file [.github/workflows/prettier.yml](https://github.com/alshedivat/al-folio/blob/master/.github/workflows/prettier.yml).
#### After I update my site with some new content, even a small change, the GitHub action throws an error or displays a warning. What happened?
Probably your GitHub workflow is throwing an error like this:
```bash
/opt/hostedtoolcache/Ruby/3.0.2/x64/lib/ruby/gems/3.0.0/gems/bundler-2.5.5/lib/bundler/runtime.rb:304:in `check_for_activated_spec!': You have already activated uri 0.10.1, but your Gemfile requires uri 0.13.0. Since uri is a default gem, you can either remove your dependency on it or try updating to a newer version of bundler that supports uri as a default gem. (Gem::LoadError)
```
or maybe displaying a warning like one of these:
```
Node.js 16 actions are deprecated. Please update the following actions to use Node.js 20: actions/checkout@v3. For more information see: https://github.blog/changelog/2023-09-22-github-actions-transitioning-from-node-16-to-node-20/.
Node.js 16 actions are deprecated. Please update the following actions to use Node.js 20: actions/checkout@v2, actions/cache@v2. For more information see: https://github.blog/changelog/2023-09-22-github-actions-transitioning-from-node-16-to-node-20/.
The following actions uses node12 which is deprecated and will be forced to run on node16: actions/checkout@v2, actions/cache@v2. For more info: https://github.blog/changelog/2023-06-13-github-actions-all-actions-will-run-on-node16-instead-of-node12-by-default/
The `set-output` command is deprecated and will be disabled soon. Please upgrade to using Environment Files. For more information see: https://github.blog/changelog/2022-10-11-github-actions-deprecating-save-state-and-set-output-commands/
```
If that's the case, you are using deprecated libraries/commands. This happens because you are using a very old version of al-folio. To fix this it is recommended [upgrading your code to the latest version](INSTALL.md#upgrading-from-a-previous-version) of the template. You will probably need to do some manual merging. If you find it easier, you could create a copy of your repository, do a fresh installation from the template and reapply all your changes. For this I would recommend a tool like [meld](https://meldmerge.org/) or [winmerge](https://winmerge.org/) to check the differences between directories/files.
Note that libraries tend to be deprecated and support for them dropped as they are no longer maintained, and keep using them involves security breaches. Also, some of these deprecations are enforced, for example, by GitHub itself, so there's so much we can do. We have also added tons of new functionality, as well as tidying things up and improving the overall speed and structure, so you could also benefit from these improvements.
#### I am trying to deploy my site, but it fails with `Could not find gem 'jekyll-diagrams' in locally installed gems`. How do I fix that?
`jekyll-diagrams` support was dropped in [#1992](https://github.com/alshedivat/al-folio/pull/1992) in favor of using `mermaid.js` directly. Simply [update your code](INSTALL.md#upgrading-from-a-previous-version) to get the latest changes.
#### How can I update Font Awesome version on the template
To update the Font Awesome version, you need to download the latest release "for the web" from the [Font Awesome website](https://fontawesome.com/download). After downloading, extract the zip file and copy the `scss/` directory content to `_sass/font-awesome/` and the `webfonts/` content to `assets/webfonts/`.
#### What do all these GitHub actions/workflows mean?
GitHub actions are a way to automate tasks in the repository. They are defined in `.github/workflows/` directory. Each file in this directory is a workflow. Workflows are made up of one or more jobs, and each job runs on a virtual machine hosted by GitHub. You can see the status of the workflows in the `Actions` tab of your repository. For more information, check the [GitHub Actions documentation](https://docs.github.com/en/actions).
Currently we have the following workflows:
- `axe.yml`: does some accessibility testing in your site. It uses the [axe cli](https://github.com/dequelabs/axe-core-npm/tree/develop/packages/cli) tool with a chrome driver to render the webpage and allow the analysis. Must be run manually, since fixing some of the issues is not straightforward
- `broken-links-site.yml`: checks for broken links in your built website with the [lychee-action](https://github.com/lycheeverse/lychee-action)
- `broken-links.yml`: checks for broken links in your repository with the [lychee-action](https://github.com/lycheeverse/lychee-action)
- `deploy-docker-tag.yml`: adds some metadata to the docker image and pushes it to Docker Hub
- `deploy-image.yml`: deploys a new docker image with the latest changes to Docker Hub
- `deploy.yml`: deploys the website to GitHub Pages
- `docker-slim.yml`: deploys a smaller version of the docker image to Docker Hub with the [docker-slim-action](https://github.com/kitabisa/docker-slim-action)
- `lighthouse-badger.yml`: runs a [lighthouse](https://github.com/GoogleChrome/lighthouse) test for your site with the [lighthouse-badger-action](https://github.com/MyActionWay/lighthouse-badger-action), saving the results in the repository for easy inspecting, as can be seen [here](https://github.com/alshedivat/al-folio?tab=readme-ov-file#lighthouse-pagespeed-insights). For more information on how to enable this workflow, check our [FAQ question about it](https://github.com/alshedivat/al-folio/blob/master/FAQ.md#when-i-manually-run-the-lighthouse-badger-workflow-it-fails-with-error-input-required-and-not-supplied-token-how-do-i-fix-that)
- `prettier-comment-on-pr.yml`: not working. For now, this action is disabled. It was supposed to run prettier on the PRs and comment on them with the changes needed. For more information, check [issue 2115](https://github.com/alshedivat/al-folio/issues/2115)
- `prettier.yml`: runs [prettier](https://prettier.io/) on the code to ensure it is well formatted. For more information, check our [FAQ question about it](https://github.com/alshedivat/al-folio/blob/master/FAQ.md#my-code-runs-fine-locally-but-when-i-create-a-commit-and-submit-it-it-fails-with-prettier-code-formatter-workflow-run-failed-for-master-branch-how-do-i-fix-that)

29
Gemfile
View File

@ -1,29 +0,0 @@
source 'https://rubygems.org'
group :jekyll_plugins do
gem 'classifier-reborn'
gem 'jekyll'
gem 'jekyll-archives'
gem 'jekyll-email-protect'
gem 'jekyll-feed'
gem 'jekyll-get-json'
gem 'jekyll-imagemagick'
gem 'jekyll-jupyter-notebook'
gem 'jekyll-link-attributes'
gem 'jekyll-minifier'
gem 'jekyll-paginate-v2'
gem 'jekyll-regex-replace'
gem 'jekyll-scholar'
gem 'jekyll-sitemap'
gem 'jekyll-tabs'
gem 'jekyll-toc'
gem 'jekyll-twitter-plugin'
gem 'jemoji'
gem 'mini_racer'
gem 'unicode_utils'
gem 'webrick'
end
group :other_plugins do
gem 'css_parser'
gem 'feedjira'
gem 'httparty'
end

View File

@ -1,213 +0,0 @@
GEM
remote: https://rubygems.org/
specs:
activesupport (7.1.3.4)
base64
bigdecimal
concurrent-ruby (~> 1.0, >= 1.0.2)
connection_pool (>= 2.2.5)
drb
i18n (>= 1.6, < 2)
minitest (>= 5.1)
mutex_m
tzinfo (~> 2.0)
addressable (2.8.7)
public_suffix (>= 2.0.2, < 7.0)
base64 (0.2.0)
bibtex-ruby (6.1.0)
latex-decode (~> 0.0)
racc (~> 1.7)
bigdecimal (3.1.8)
citeproc (1.0.10)
namae (~> 1.0)
citeproc-ruby (1.1.14)
citeproc (~> 1.0, >= 1.0.9)
csl (~> 1.6)
classifier-reborn (2.3.0)
fast-stemmer (~> 1.0)
matrix (~> 0.4)
colorator (1.1.0)
concurrent-ruby (1.3.3)
connection_pool (2.4.1)
crass (1.0.6)
csl (1.6.0)
namae (~> 1.0)
rexml
csl-styles (1.0.1.11)
csl (~> 1.0)
css_parser (1.17.1)
addressable
cssminify2 (2.0.1)
csv (3.3.0)
deep_merge (1.2.2)
drb (2.2.1)
em-websocket (0.5.3)
eventmachine (>= 0.12.9)
http_parser.rb (~> 0)
eventmachine (1.2.7)
execjs (2.9.1)
fast-stemmer (1.0.2)
feedjira (3.2.3)
loofah (>= 2.3.1, < 3)
sax-machine (>= 1.0, < 2)
ffi (1.17.0-x86_64-linux-gnu)
forwardable-extended (2.6.0)
gemoji (4.1.0)
google-protobuf (4.27.2-x86_64-linux)
bigdecimal
rake (>= 13)
html-pipeline (2.14.3)
activesupport (>= 2)
nokogiri (>= 1.4)
htmlcompressor (0.4.0)
http_parser.rb (0.8.0)
httparty (0.22.0)
csv
mini_mime (>= 1.0.0)
multi_xml (>= 0.5.2)
i18n (1.14.5)
concurrent-ruby (~> 1.0)
jekyll (4.3.3)
addressable (~> 2.4)
colorator (~> 1.0)
em-websocket (~> 0.5)
i18n (~> 1.0)
jekyll-sass-converter (>= 2.0, < 4.0)
jekyll-watch (~> 2.0)
kramdown (~> 2.3, >= 2.3.1)
kramdown-parser-gfm (~> 1.0)
liquid (~> 4.0)
mercenary (>= 0.3.6, < 0.5)
pathutil (~> 0.9)
rouge (>= 3.0, < 5.0)
safe_yaml (~> 1.0)
terminal-table (>= 1.8, < 4.0)
webrick (~> 1.7)
jekyll-archives (2.2.1)
jekyll (>= 3.6, < 5.0)
jekyll-email-protect (1.1.0)
jekyll-feed (0.17.0)
jekyll (>= 3.7, < 5.0)
jekyll-get-json (1.0.0)
deep_merge (~> 1.2)
jekyll (>= 3.0)
jekyll-imagemagick (1.4.0)
jekyll (>= 3.4)
jekyll-jupyter-notebook (0.0.6)
jekyll
jekyll-link-attributes (1.0.1)
jekyll-minifier (0.1.10)
cssminify2 (~> 2.0)
htmlcompressor (~> 0.4)
jekyll (>= 3.5)
json-minify (~> 0.0.3)
uglifier (~> 4.1)
jekyll-paginate-v2 (3.0.0)
jekyll (>= 3.0, < 5.0)
jekyll-regex-replace (1.1.0)
jekyll-sass-converter (3.0.0)
sass-embedded (~> 1.54)
jekyll-scholar (7.1.3)
bibtex-ruby (~> 6.0)
citeproc-ruby (~> 1.0)
csl-styles (~> 1.0)
jekyll (~> 4.0)
jekyll-sitemap (1.4.0)
jekyll (>= 3.7, < 5.0)
jekyll-tabs (1.2.1)
jekyll (>= 3.0, < 5.0)
jekyll-toc (0.19.0)
jekyll (>= 3.9)
nokogiri (~> 1.12)
jekyll-twitter-plugin (2.1.0)
jekyll-watch (2.2.1)
listen (~> 3.0)
jemoji (0.13.0)
gemoji (>= 3, < 5)
html-pipeline (~> 2.2)
jekyll (>= 3.0, < 5.0)
json (2.7.2)
json-minify (0.0.3)
json (> 0)
kramdown (2.4.0)
rexml
kramdown-parser-gfm (1.1.0)
kramdown (~> 2.0)
latex-decode (0.4.0)
libv8-node (21.7.2.0-x86_64-linux)
liquid (4.0.4)
listen (3.9.0)
rb-fsevent (~> 0.10, >= 0.10.3)
rb-inotify (~> 0.9, >= 0.9.10)
loofah (2.22.0)
crass (~> 1.0.2)
nokogiri (>= 1.12.0)
matrix (0.4.2)
mercenary (0.4.0)
mini_mime (1.1.5)
mini_racer (0.12.0)
libv8-node (~> 21.7.2.0)
minitest (5.24.1)
multi_xml (0.6.0)
mutex_m (0.2.0)
namae (1.2.0)
racc (~> 1.7)
nokogiri (1.16.6-x86_64-linux)
racc (~> 1.4)
pathutil (0.16.2)
forwardable-extended (~> 2.6)
public_suffix (6.0.0)
racc (1.8.0)
rake (13.2.1)
rb-fsevent (0.11.2)
rb-inotify (0.11.1)
ffi (~> 1.0)
rexml (3.3.1)
strscan
rouge (4.3.0)
safe_yaml (1.0.5)
sass-embedded (1.77.5-x86_64-linux-gnu)
google-protobuf (>= 3.25, < 5.0)
sax-machine (1.3.2)
strscan (3.1.0)
terminal-table (3.0.2)
unicode-display_width (>= 1.1.1, < 3)
tzinfo (2.0.6)
concurrent-ruby (~> 1.0)
uglifier (4.2.0)
execjs (>= 0.3.0, < 3)
unicode-display_width (2.5.0)
unicode_utils (1.4.0)
webrick (1.8.1)
PLATFORMS
x86_64-linux-gnu
DEPENDENCIES
classifier-reborn
css_parser
feedjira
httparty
jekyll
jekyll-archives
jekyll-email-protect
jekyll-feed
jekyll-get-json
jekyll-imagemagick
jekyll-jupyter-notebook
jekyll-link-attributes
jekyll-minifier
jekyll-paginate-v2
jekyll-regex-replace
jekyll-scholar
jekyll-sitemap
jekyll-tabs
jekyll-toc
jekyll-twitter-plugin
jemoji
mini_racer
unicode_utils
webrick
BUNDLED WITH
2.5.14

View File

@ -1,232 +0,0 @@
# Table of Contents
- [Table of Contents](#table-of-contents)
- [Installing and Deploying](#installing-and-deploying)
- [Recommended Approach](#recommended-approach)
- [Local setup on Windows](#local-setup-on-windows)
- [Local setup using Docker (Recommended)](#local-setup-using-docker-recommended)
- [Build your own docker image](#build-your-own-docker-image)
- [Local Setup with Development Containers](#local-setup-with-development-containers)
- [Local Setup (Legacy, no longer supported)](#local-setup-legacy-no-longer-supported)
- [Deployment](#deployment)
- [For personal and organization webpages](#for-personal-and-organization-webpages)
- [For project pages](#for-project-pages)
- [Enabling automatic deployment](#enabling-automatic-deployment)
- [Manual deployment to GitHub Pages](#manual-deployment-to-github-pages)
- [Deployment to another hosting server (non GitHub Pages)](#deployment-to-another-hosting-server-non-github-pages)
- [Deployment to a separate repository (advanced users only)](#deployment-to-a-separate-repository-advanced-users-only)
- [Upgrading from a previous version](#upgrading-from-a-previous-version)
# Installing and Deploying
## Recommended Approach
The recommended approach for using **al-folio** is to first create your own site using the template with as few changes as possible, and only when it is up and running customize it however you like. This way it is easier to pinpoint what causes a potential issue in case of a bug. The minimum steps required to create your own site are:
1. Create a new repository using this template. For this, click on [Use this template -> Create a new repository](https://github.com/new?template_name=al-folio&template_owner=alshedivat) above the file list. If you plan to upload your site to `<your-github-username>.github.io`, note that the name of your repository :warning: **MUST BE** :warning: `<your-github-username>.github.io` or `<your-github-orgname>.github.io`, as stated in the [GitHub pages docs](https://docs.github.com/en/pages/getting-started-with-github-pages/about-github-pages#types-of-github-pages-sites).
2. In this new repository, go to `Settings -> Actions -> General -> Workflow permissions` and give `Read and write permissions` to GitHub Actions.
3. Open file `_config.yml`, set `url` to `https://<your-github-username>.github.io` and leave `baseurl` **empty** (do NOT delete it).
4. Wait until the GitHub actions finish (check your repository **Actions** tab). Now, in addition to the master branch, your repository has a newly built gh-pages branch.
5. Finally, in the repository page go to `Settings -> Pages -> Build and deployment`, make sure that `Source` is set to `Deploy from a branch` and set the branch to `gh-pages` (NOT to master).
6. Wait until the GitHub actions finish (check your repository **Actions** tab), then simply navigate to `https://<your-github-username>.github.io` in your browser. At this point you should see a copy of the theme's [demo website](https://alshedivat.github.io/al-folio/).
After everything is set up, you can download the repository to your machine and start customizing it. To do so, run the following commands:
```bash
$ git clone git@github.com:<your-username>/<your-repo-name>.git
```
Starting version [v0.3.5](https://github.com/alshedivat/al-folio/releases/tag/v0.3.5), **al-folio** will automatically re-deploy your webpage each time you push new changes to your repository! :sparkles:
## Local setup on Windows
If you are using Windows, it is **highly recommended** to use [Windows Subsystem for Linux (WSL)](https://learn.microsoft.com/en-us/windows/wsl/install), which is a compatibility layer for running Linux on top of Windows. You can follow [these instructions](https://ubuntu.com/tutorials/install-ubuntu-on-wsl2-on-windows-11-with-gui-support) to install WSL and Ubuntu on your machine. You only need to go up to the step 4 of the tutorial (you don't have to enable the optional `systemd` nor the graphical applications), and then you can follow the instructions below to install docker. You can install docker natively on Windows as well, but it has been having some issues as can be seen in [#1540](https://github.com/alshedivat/al-folio/issues/1540), [#2007](https://github.com/alshedivat/al-folio/issues/2007).
## Local setup using Docker (Recommended)
Using Docker to install Jekyll and Ruby dependencies is the easiest way.
You need to take the following steps to get `al-folio` up and running on your local machine:
- First, install [docker](https://docs.docker.com/get-docker/) and [docker-compose](https://docs.docker.com/compose/install/).
- Finally, run the following command that will pull the latest pre-built image from DockerHub and will run your website.
```bash
$ docker compose pull
$ docker compose up
```
Note that when you run it for the first time, it will download a docker image of size 400MB or so. To see the template running, open your browser and go to `http://localhost:8080`. You should see a copy of the theme's demo website.
Now, feel free to customize the theme however you like (don't forget to change the name!). Also, your changes should be automatically rendered in real-time (or maybe after a few seconds).
> Beta: You can also use the slimmed docker image with a size below 100MBs and exact same functionality. Just use `docker compose -f docker-compose-slim.yml up`
### Build your own docker image
> Note: this approach is only necessary if you would like to build an older or very custom version of al-folio.
Build and run a new docker image using:
```bash
$ docker compose up --build
```
> If you want to update jekyll, install new ruby packages, etc., all you have to do is build the image again using `--force-recreate` argument at the end of the previous command! It will download Ruby and Jekyll and install all Ruby packages again from scratch.
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.
## Local Setup with Development Containers
`al-folio` supports [Development Containers](https://containers.dev/supporting).
For example, when you open the repository with Visual Studio Code (VSCode), it prompts you to install the necessary extension and automatically install everything necessary.
## Local Setup (Legacy, no longer supported)
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/)_).
```bash
$ bundle install
# assuming pip is your Python package manager
$ pip install jupyter
$ bundle exec jekyll serve
```
To see the template running, open your browser and go to `http://localhost:4000`. You should see a copy of the theme's [demo website](https://alshedivat.github.io/al-folio/). Now, feel free to customize the theme however you like. After you are done, remember to **commit** your final changes.
## Deployment
Deploying your website to [GitHub Pages](https://pages.github.com/) is the most popular option.
Starting version [v0.3.5](https://github.com/alshedivat/al-folio/releases/tag/v0.3.5), **al-folio** will automatically re-deploy your webpage each time you push new changes to your repository **main branch**! :sparkles:
### For personal and organization webpages
1. The name of your repository **MUST BE** `<your-github-username>.github.io` or `<your-github-orgname>.github.io`.
2. In `_config.yml`, set `url` to `https://<your-github-username>.github.io` and leave `baseurl` empty.
3. Set up automatic deployment of your webpage (see instructions below).
4. Make changes to your main branch, commit, and push!
5. After deployment, the webpage will become available at `<your-github-username>.github.io`.
### For project pages
1. In `_config.yml`, set `url` to `https://<your-github-username>.github.io` and `baseurl` to `/<your-repository-name>/`.
2. Set up automatic deployment of your webpage (see instructions below).
3. Make changes to your main branch, commit, and push!
4. After deployment, the webpage will become available at `<your-github-username>.github.io/<your-repository-name>/`.
### Enabling automatic deployment
1. Click on **Actions** tab and **Enable GitHub Actions**; do not worry about creating any workflows as everything has already been set for you.
2. Go to `Settings -> Actions -> General -> Workflow permissions`, and give `Read and write permissions` to GitHub Actions
3. Make any other changes to your webpage, commit, and push to your main branch. This will automatically trigger the **Deploy** action.
4. Wait for a few minutes and let the action complete. You can see the progress in the **Actions** tab. If completed successfully, in addition to the `master` branch, your repository should now have a newly built `gh-pages` branch. **Do NOT touch this branch!**
5. Finally, in the **Settings** of your repository, in the Pages section, set the branch to `gh-pages` (**NOT** to `master`). For more details, see [Configuring a publishing source for your GitHub Pages site](https://docs.github.com/en/pages/getting-started-with-github-pages/configuring-a-publishing-source-for-your-github-pages-site#choosing-a-publishing-source).
If you keep your site on another branch, open `.github/workflows/deploy.yml` **on the branch you keep your website on** and change `on->push->branches` and `on->pull\_request->branches` to the branch you keep your website on. This will trigger the action on pulls/pushes on that branch. The action will then deploy the website on the branch it was triggered from.
### Manual deployment to GitHub Pages
If you need to manually re-deploy your website to GitHub pages, go to Actions, click "Deploy" in the left sidebar, then "Run workflow."
### Deployment to another hosting server (non GitHub Pages)
If you decide to not use GitHub Pages and host your page elsewhere, simply run:
```bash
$ bundle exec jekyll build
```
which will (re-)generate the static webpage in the `_site/` folder.
Then simply copy the contents of the `_site/` directory to your hosting server.
If you also want to remove unused css classes from your file, run:
```bash
$ purgecss -c purgecss.config.js
```
which will replace the css files in the `_site/assets/css/` folder with the purged css files.
**Note:** Make sure to correctly set the `url` and `baseurl` fields in `_config.yml` before building the webpage. If you are deploying your webpage to `your-domain.com/your-project/`, you must set `url: your-domain.com` and `baseurl: /your-project/`. If you are deploying directly to `your-domain.com`, leave `baseurl` blank, **do not delete it**.
### Deployment to a separate repository (advanced users only)
**Note:** Do not try using this method unless you know what you are doing (make sure you are familiar with [publishing sources](https://help.github.com/en/github/working-with-github-pages/about-github-pages#publishing-sources-for-github-pages-sites)). This approach allows to have the website's source code in one repository and the deployment version in a different repository.
Let's assume that your website's publishing source is a `publishing-source` subdirectory of a git-versioned repository cloned under `$HOME/repo/`.
For a user site this could well be something like `$HOME/<user>.github.io`.
Firstly, from the deployment repo dir, checkout the git branch hosting your publishing source.
Then from the website sources dir (commonly your al-folio fork's clone):
```bash
$ bundle exec jekyll build --destination $HOME/repo/publishing-source
```
This will instruct jekyll to deploy the website under `$HOME/repo/publishing-source`.
**Note:** Jekyll will clean `$HOME/repo/publishing-source` before building!
The quote below is taken directly from the [jekyll configuration docs](https://jekyllrb.com/docs/configuration/options/):
> Destination folders are cleaned on site builds
>
> The contents of `<destination>` are automatically cleaned, by default, when the site is built. Files or folders that are not created by your site will be removed. Some files could be retained by specifying them within the `<keep_files>` configuration directive.
>
> Do not use an important location for `<destination>`; instead, use it as a staging area and copy files from there to your web server.
If `$HOME/repo/publishing-source` contains files that you want jekyll to leave untouched, specify them under `keep_files` in `_config.yml`.
In its default configuration, al-folio will copy the top-level `README.md` to the publishing source. If you want to change this behavior, add `README.md` under `exclude` in `_config.yml`.
**Note:** Do _not_ run `jekyll clean` on your publishing source repo as this will result in the entire directory getting deleted, irrespective of the content of `keep_files` in `_config.yml`.
## Upgrading from a previous version
If you installed **al-folio** as described above, you can configure a [GitHub action](https://github.com/AndreasAugustin/actions-template-sync) to automatically sync your repository with the latest version of the theme.
Go to Settings -> Actions -> General -> Workflow permissions, give Read and write permissions to GitHub Actions, check "Allow GitHub Actions to create and approve pull requests", and save your changes.
Then go to Actions -> New workflow -> set up a workflow yourself, setup the following workflow and commit your changes:
```yaml
name: Sync from template
on:
# cronjob trigger
schedule:
- cron: "0 0 1 * *"
# manual trigger
workflow_dispatch:
jobs:
repo-sync:
runs-on: ubuntu-latest
steps:
# To use this repository's private action, you must check out the repository
- name: Checkout
uses: actions/checkout@v4
- name: actions-template-sync
uses: AndreasAugustin/actions-template-sync@v1
with:
github_token: ${{ secrets.GITHUB_TOKEN }}
source_repo_path: alshedivat/al-folio
upstream_branch: master
```
You will receive a pull request within your repository if there are some changes available in the template.
Another option is to manually update your code by following the steps below:
```bash
# Assuming the current directory is <your-repo-name>
$ git remote add upstream https://github.com/alshedivat/al-folio.git
$ git fetch upstream
$ git rebase v0.11.0
```
If you have extensively customized a previous version, it might be trickier to upgrade.
You can still follow the steps above, but `git rebase` may result in merge conflicts that must be resolved.
See [git rebase manual](https://help.github.com/en/github/using-git/about-git-rebase) and how to [resolve conflicts](https://help.github.com/en/github/using-git/resolving-merge-conflicts-after-a-git-rebase) for more information.
If rebasing is too complicated, we recommend re-installing the new version of the theme from scratch and port over your content and changes from the previous version manually. You can use tools like [meld](https://meldmerge.org/)
or [winmerge](https://winmerge.org/) to help in this process.

20
LICENSE
View File

@ -1,20 +0,0 @@
The MIT License (MIT)
Copyright (c) 2022 Maruan Al-Shedivat.
Permission is hereby granted, free of charge, to any person obtaining a copy of
this software and associated documentation files (the "Software"), to deal in
the Software without restriction, including without limitation the rights to
use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of
the Software, and to permit persons to whom the Software is furnished to do so,
subject to the following conditions:
The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.

464
README.md
View File

@ -1,464 +0,0 @@
# al-folio
<div align="center">
[![Preview](readme_preview/al-folio-preview.png)](https://alshedivat.github.io/al-folio/)
**A simple, clean, and responsive [Jekyll](https://jekyllrb.com/) theme for academics.**
---
[![deploy](https://github.com/alshedivat/al-folio/actions/workflows/deploy.yml/badge.svg)](https://github.com/alshedivat/al-folio/actions/workflows/deploy.yml)
[![Maintainers](https://img.shields.io/badge/maintainers-4-success.svg)](#maintainers)
[![GitHub contributors](https://img.shields.io/github/contributors/alshedivat/al-folio.svg)](https://github.com/alshedivat/al-folio/graphs/contributors/)
[![Docker Image Version](https://img.shields.io/docker/v/amirpourmand/al-folio?sort=semver&label=docker%20image&color=blueviolet)](https://hub.docker.com/r/amirpourmand/al-folio)
[![Docker Image Size](https://img.shields.io/docker/image-size/amirpourmand/al-folio?sort=date&label=docker%20image%20size&color=blueviolet)](https://hub.docker.com/r/amirpourmand/al-folio)
[![Docker Pulls](https://img.shields.io/docker/pulls/amirpourmand/al-folio?color=blueviolet)](https://hub.docker.com/r/amirpourmand/al-folio)
[![GitHub release](https://img.shields.io/github/v/release/alshedivat/al-folio)](https://github.com/alshedivat/al-folio/releases/latest)
[![GitHub license](https://img.shields.io/github/license/alshedivat/al-folio?color=blue)](https://github.com/alshedivat/al-folio/blob/master/LICENSE)
[![GitHub stars](https://img.shields.io/github/stars/alshedivat/al-folio)](https://github.com/alshedivat/al-folio)
[![GitHub forks](https://img.shields.io/github/forks/alshedivat/al-folio)](https://github.com/alshedivat/al-folio/fork)
</div>
## User community
The vibrant community of **al-folio** users is growing!
Academics around the world use this theme for their homepages, blogs, lab pages, as well as webpages for courses, workshops, conferences, meetups, and more.
Check out the community webpages below.
Feel free to add your own page(s) by sending a PR.
<table>
<tr>
<td>Academics</td>
<td>
<a href="https://martinbulla.github.io" target="_blank"></a>
<a href="https://maruan.alshedivat.com" target="_blank"></a>
<a href="https://www.cs.columbia.edu/~chen1ru/" target="_blank"></a>
<a href="https://maithraraghu.com" target="_blank"></a>
<a href="https://platanios.org" target="_blank"></a>
<a href="https://otiliastr.github.io" target="_blank"></a>
<a href="https://www.maths.dur.ac.uk/~sxwc62/" target="_blank"></a>
<a href="https://jessachandler.com/" target="_blank"></a>
<a href="https://mayankm96.github.io/" target="_blank"></a>
<a href="https://markdean.info/" target="_blank"></a>
<a href="https://kakodkar.github.io/" target="_blank"></a>
<a href="https://sahirbhatnagar.com/" target="_blank"></a>
<a href="https://spd.gr/" target="_blank"></a>
<a href="https://jay-sarkar.github.io/" target="_blank"></a>
<a href="https://aborowska.github.io/" target="_blank"></a>
<a href="https://aditisgh.github.io/" target="_blank"></a>
<a href="https://alexhaydock.co.uk/" target="_blank"></a>
<a href="https://alixkeener.net/" target="_blank"></a>
<a href="https://andreea7b.github.io/" target="_blank"></a>
<a href="https://rishabhjoshi.github.io/" target="_blank"></a>
<a href="https://sheelabhadra.github.io/" target="_blank"></a>
<a href="https://giograno.me/" target="_blank"></a>
<a href="https://immsrini.github.io/" target="_blank"></a>
<a href="https://apooladian.github.io/" target="_blank"></a>
<a href="https://chinmoy-dutta.github.io/" target="_blank"></a>
<a href="https://liamcli.com/" target="_blank"></a>
<a href="https://yoonholee.com/" target="_blank"></a>
<a href="https://zrqiao.github.io/" target="_blank"></a>
<a href="https://abstractgeek.github.io/" target="_blank"></a>
<a href="https://www.compphys.de/" target="_blank"></a>
<a href="https://julianstreyczek.github.io" target="_blank"></a>
<a href="https://sdaza.com" target="_blank"></a>
<a href="https://niweera.gq" target="_blank"></a>
<a href="https://www.alihkw.com" target="_blank"></a>
<a href="https://amirpourmand.ir" target="_blank"></a>
<a href="https://scottleechua.github.io" target="_blank"></a>
<a href="https://sk1y101.github.io" target="_blank"></a>
<a href="https://yyang768osu.github.io" target="_blank"></a>
<a href="https://veedata.github.io" target="_blank"></a>
<a href="https://K-Wu.github.io" target="_blank"></a>
<a href="https://amalawilson.com" target="_blank"></a>
<a href="https://tirtharajdash.github.io" target="_blank"></a>
<a href="https://carolinacarreira.github.io" target="_blank"></a>
<a href="https://manandey.github.io" target="_blank"></a>
<a href="https://johanneshoerner.github.io" target="_blank"></a>
<a href="https://ioannismavromatis.com" target="_blank"></a>
<a href="https://taidnguyen.github.io" target="_blank"></a>
<a href="https://lbugnon.github.io" target="_blank"></a>
<a href="https://joahannes.github.io" target="_blank"></a>
<a href="https://dominikstrb.github.io" target="_blank"></a>
<a href="https://tylerbarna.com" target="_blank"></a>
<a href="https://daviddmc.github.io/" target="_blank"></a>
<a href="https://andreaskuster.ch/" target="_blank"></a>
<a href="https://ellisbrown.github.io/" target="_blank"></a>
<a href="https://noman-bashir.github.io/" target="_blank"></a>
<a href="https://djherron.github.io/" target="_blank"></a>
<a href="https://rodosingh.github.io/" target="_blank"></a>
<a href="https://vdivakar.github.io/" target="_blank"></a>
<a href="https://george-gca.github.io/" target="_blank"></a>
<a href="https://bashirkazimi.github.io/" target="_blank"></a>
<a href="https://dohaison.github.io/" target="_blank"></a>
<a href="https://raphaaal.github.io/" target="_blank"></a>
<a href="https://varuniyer.info/" target="_blank"></a>
<a href="https://yukimasano.github.io/" target="_blank"></a>
<a href="https://hashe037.github.io/" target="_blank"></a>
<a href="https://wang-boyu.github.io/" target="_blank"></a>
<a href="https://qingqingchen.info" target="_blank"></a>
<a href="https://bajinsheng.github.io/" target="_blank"></a>
<a href="https://www.silviofanzon.com/" target="_blank"></a>
<a href="https://kaikaiyao.github.io/" target="_blank"></a>
<a href="https://alchemz.github.io/" target="_blank"></a>
<a href="https://samadamday.com/" target="_blank"></a>
<a href="https://fanpu.io/" target="_blank"></a>
<a href="https://abigalekim.github.io/" target="_blank"></a>
<a href="https://lucasresck.github.io/" target="_blank"></a>
<a href="https://users.wpi.edu/~lfichera/" target="_blank"></a>
<a href="https://anmspro.github.io/" target="_blank"></a>
<a href="https://berlyne.net/" target="_blank"></a>
<a href="https://filippomazzoli.github.io/" target="_blank"></a>
<a href="https://www.escontrela.me/" target="_blank"></a>
<a href="https://raffaem.github.io/" target="_blank"></a>
<a href="https://cbueth.de/" target="_blank"></a>
<a href="https://kyleaoman.github.io/" target="_blank"></a>
<a href="https://decwest.github.io/" target="_blank"></a>
<a href="https://www.jedburkat.com" target="_blank"></a>
<a href="https://hrzhang.me" target="_blank"></a>
<a href="https://kudhru.github.io/" target="_blank"></a>
<a href="https://mbarbetti.github.io/" target="_blank"></a>
<a href="https://www.zhivotenko.com/" target="_blank"></a>
<a href="https://giordanodaloisio.github.io/" target="_blank"></a>
<a href="https://aadityaura.github.io/" target="_blank"></a>
<a href="https://abhinav-mehta.github.io/" target="_blank"></a>
<a href="https://shubhashisroydipta.com/" target="_blank"></a>
<a href="https://astanziola.github.io" target="_blank"></a>
<a href="https://tinkerer.in" target="_blank"></a>
<a href="https://sam-bieberich.github.io/" target="_blank"></a>
<a href="https://afraniomelo.github.io/en/" target="_blank"></a>
<a href="https://jonaruthardt.github.io" target="_blank"></a>
<a href="https://www.zla.app/" target="_blank"></a>
<a href="https://stavros.github.io" target="_blank"></a>
<a href="https://ericslyman.com" target="_blank"></a>
<a href="https://ztjona.github.io/" target="_blank"></a>
<a href="https://chrischoi314.github.io" target="_blank"></a>
<a href="https://riccobelli.faculty.polimi.it" target="_blank"></a>
<a href="https://kishanved.tech/" target="_blank"></a>
<a href="https://abhilesh.github.io/" target="_blank"></a>
<a href="https://jackjburnett.github.io/" target="_blank"></a>
<a href="https://physics-morris.github.io/" target="_blank"></a>
<a href="https://sraf.ir" target="_blank"></a>
<a href="https://acad.garywei.dev/" target="_blank"></a>
</td>
</tr>
<tr>
<td>Labs</td>
<td>
<a href="https://www.haylab.caltech.edu/" target="_blank"></a>
<a href="https://sjkimlab.github.io/" target="_blank"></a>
<a href="https://systemconsultantgroup.github.io/scg-folio/" target="_blank"></a>
<a href="https://decisionlab.ucsf.edu/" target="_blank"></a>
<a href="https://programming-group.com/" target="_blank"></a>
<a href="https://sailing-lab.github.io/" target="_blank"></a>
<a href="https://inbt.jhu.edu/epidiagnostics/" target="_blank"></a>
<a href="https://www.nuesl.org/" target="_blank"></a>
<a href="https://big-culture.github.io/" target="_blank"></a>
</td>
</tr>
<tr>
<td>Courses</td>
<td>
CMU PGM (<a href="https://sailinglab.github.io/pgm-spring-2019/" target="_blank">S-19</a>) <br>
CMU DeepRL (<a href="https://cmudeeprl.github.io/403_website/" target="_blank">S-21</a>, <a href="https://cmudeeprl.github.io/703website_f21/" target="_blank">F-21</a>, <a href="https://cmudeeprl.github.io/403website_s22/" target="_blank">S-22</a>, <a href="https://cmudeeprl.github.io/703website_f22/" target="_blank">F-22</a>, <a href="https://cmudeeprl.github.io/403website_s23/" target="_blank">S-23</a>, <a href="https://cmudeeprl.github.io/703website_f23/" target="_blank">F-23</a>) <br>
CMU MMML (<a href="https://cmu-multicomp-lab.github.io/mmml-course/fall2020/" target="_blank">F-20</a>, <a href="https://cmu-multicomp-lab.github.io/mmml-course/fall2022/" target="_blank">F-22</a>) <br>
CMU AMMML (<a href="https://cmu-multicomp-lab.github.io/adv-mmml-course/spring2022/" target="_blank">S-22</a>, <a href="https://cmu-multicomp-lab.github.io/adv-mmml-course/spring2023/" target="_blank">S-23</a>) <br>
CMU ASI (<a href="https://cmu-multicomp-lab.github.io/asi-course/spring2023/" target="_blank">S-23</a>) <br>
CMU Distributed Systems (<a href="https://andrew.cmu.edu/course/15-440/" target="_blank">S-24</a>)
</td>
</tr>
<tr>
<td>Conferences & workshops</td>
<td>
ICLR Blog Post Track (<a href="https://iclr-blogposts.github.io/2023/" target="_blank">2023</a>, <a href="https://iclr-blogposts.github.io/2024/about" target="_blank">2024</a>) <br>
ML Retrospectives (NeurIPS: <a href="https://ml-retrospectives.github.io/neurips2019/" target="_blank">2019</a>, <a href="https://ml-retrospectives.github.io/neurips2020/" target="_blank">2020</a>; ICML: <a href="https://ml-retrospectives.github.io/icml2020/" target="_blank">2020</a>) <br>
HAMLETS (NeurIPS: <a href="https://hamlets-workshop.github.io/" target="_blank">2020</a>) <br>
ICBINB (NeurIPS: <a href="https://i-cant-believe-its-not-better.github.io/" target="_blank">2020</a>, <a href="https://i-cant-believe-its-not-better.github.io/neurips2021/" target="_blank">2021</a>) <br>
Neural Compression (ICLR: <a href="https://neuralcompression.github.io/" target="_blank">2021</a>) <br>
Score Based Methods (NeurIPS: <a href="https://score-based-methods-workshop.github.io/" target="_blank">2022</a>)<br>
Images2Symbols (CogSci: <a href="https://images2symbols.github.io/" target="_blank"> 2022</a>) <br>
Medical Robotics Junior Faculty Forum (ISMR: <a href="https://junior-forum-ismr.github.io/" target="_blank"> 2023</a>)<br>
Beyond Vision: Physics meets AI (ICIAP: <a href="https://physicsmeetsai.github.io/beyond-vision/" target="_blank">2023</a>) <br>
Workshop on Diffusion Models (NeurIPS: <a href="https://diffusionworkshop.github.io/" target="_blank">2023</a>) <br>
Workshop on Structured Probabilistic Inference & Generative Modeling (ICML: <a href="https://spigmworkshop.github.io/" target="_blank">2023</a>, <a href="https://spigmworkshop2024.github.io/" target="_blank">2024</a>)
</td>
</tr>
</table>
## Lighthouse PageSpeed Insights
### Desktop
[![Google Lighthouse PageSpeed Insights](lighthouse_results/desktop/pagespeed.svg)](https://htmlpreview.github.io/?https://github.com/alshedivat/al-folio/blob/master/lighthouse_results/desktop/alshedivat_github_io_al_folio_.html)
Run the test yourself: [Google Lighthouse PageSpeed Insights](https://pagespeed.web.dev/report?url=https%3A%2F%2Falshedivat.github.io%2Fal-folio%2F&form_factor=desktop)
### Mobile
[![Google Lighthouse PageSpeed Insights](lighthouse_results/mobile/pagespeed.svg)](https://htmlpreview.github.io/?https://github.com/alshedivat/al-folio/blob/master/lighthouse_results/mobile/alshedivat_github_io_al_folio_.html)
Run the test yourself: [Google Lighthouse PageSpeed Insights](https://pagespeed.web.dev/report?url=https%3A%2F%2Falshedivat.github.io%2Fal-folio%2F&form_factor=mobile)
## Table Of Contents
- [al-folio](#al-folio)
- [User community](#user-community)
- [Lighthouse PageSpeed Insights](#lighthouse-pagespeed-insights)
- [Desktop](#desktop)
- [Mobile](#mobile)
- [Table Of Contents](#table-of-contents)
- [Getting started](#getting-started)
- [Installing and Deploying](#installing-and-deploying)
- [Customizing](#customizing)
- [Features](#features)
- [Light/Dark Mode](#lightdark-mode)
- [CV](#cv)
- [People](#people)
- [Publications](#publications)
- [Collections](#collections)
- [Layouts](#layouts)
- [The iconic style of Distill](#the-iconic-style-of-distill)
- [Full support for math \& code](#full-support-for-math--code)
- [Photos, Audio, Video and more](#photos-audio-video-and-more)
- [Other features](#other-features)
- [GitHub's repositories and user stats](#githubs-repositories-and-user-stats)
- [Theming](#theming)
- [Social media previews](#social-media-previews)
- [Atom (RSS-like) Feed](#atom-rss-like-feed)
- [Related posts](#related-posts)
- [Code quality checks](#code-quality-checks)
- [FAQ](#faq)
- [Contributing](#contributing)
- [Maintainers](#maintainers)
- [All Contributors](#all-contributors)
- [Star History](#star-history)
- [License](#license)
## Getting started
Want to learn more about Jekyll? Check out [this tutorial](https://www.taniarascia.com/make-a-static-website-with-jekyll/). Why Jekyll? Read [Andrej Karpathy's blog post](https://karpathy.github.io/2014/07/01/switching-to-jekyll/)! Why write a blog? Read [Rachel Thomas blog post](https://medium.com/@racheltho/why-you-yes-you-should-blog-7d2544ac1045).
## Installing and Deploying
For installation and deployment details please refer to [INSTALL.md](INSTALL.md).
## Customizing
For customization details please refer to [CUSTOMIZE.md](CUSTOMIZE.md).
## Features
### Light/Dark Mode
This template has a built-in light/dark mode. It detects the user preferred color scheme and automatically switches to it. You can also manually switch between light and dark mode by clicking on the sun/moon icon in the top right corner of the page.
<p align="center">
<img src="readme_preview/light.png" width=400>
<img src="readme_preview/dark.png" width=400>
</p>
---
### 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.
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](readme_preview/cv.png)](https://alshedivat.github.io/al-folio/cv/)
---
### People
You can create a people page if you want to feature more than one person. Each person can have its own short bio, profile picture, and you can also set if every person will appear at the same or opposite sides.
[![People Preview](readme_preview/people.png)](https://alshedivat.github.io/al-folio/people/)
---
### 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.
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`.
[![Publications Preview](readme_preview/publications.png)](https://alshedivat.github.io/al-folio/publications/)
---
### 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.
[![Projects Preview](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`.
---
### Layouts
**al-folio** comes with stylish layouts for pages and blog posts.
#### The iconic style of Distill
The theme allows you to create blog posts in the [distill.pub](https://distill.pub/) style:
[![Distill Preview](readme_preview/distill.png)](https://alshedivat.github.io/al-folio/blog/2021/distill/)
For more details on how to create distill-styled posts using `<d-*>` tags, please refer to [the example](https://alshedivat.github.io/al-folio/blog/2021/distill/).
#### Full support for math & code
**al-folio** supports fast math typesetting through [MathJax](https://www.mathjax.org/) and code syntax highlighting using [GitHub style](https://github.com/jwarby/jekyll-pygments-themes). Also supports [chartjs charts](https://www.chartjs.org/), [mermaid diagrams](https://mermaid-js.github.io/mermaid/#/), and [TikZ figures](https://tikzjax.com/).
<p align="center">
<a href="https://alshedivat.github.io/al-folio/blog/2015/math/" target="_blank"><img src="readme_preview/math.png" width=400></a>
<a href="https://alshedivat.github.io/al-folio/blog/2015/code/" target="_blank"><img src="readme_preview/code.png" width=400></a>
</p>
#### Photos, Audio, Video and more
Photo formatting is made simple using [Bootstrap's grid system](https://getbootstrap.com/docs/4.4/layout/grid/). Easily create beautiful grids within your blog posts and project pages, also with support for [video](https://alshedivat.github.io/al-folio/blog/2023/videos/) and [audio](https://alshedivat.github.io/al-folio/blog/2023/audios/) embeds:
<p align="center">
<a href="https://alshedivat.github.io/al-folio/projects/1_project/">
<img src="readme_preview/photos-screenshot.png" width="75%">
</a>
</p>
---
### Other features
#### GitHub's repositories and user stats
**al-folio** uses [github-readme-stats](https://github.com/anuraghazra/github-readme-stats) and [github-profile-trophy](https://github.com/ryo-ma/github-profile-trophy) to display GitHub repositories and user stats on the `/repositories/` page.
[![Repositories Preview](readme_preview/repositories.png)](https://alshedivat.github.io/al-folio/repositories/)
Edit the `_data/repositories.yml` and change the `github_users` and `github_repos` lists to include your own GitHub profile and repositories to the `/repositories/` page.
You may also use the following codes for displaying this in any other pages.
```html
<!-- 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.liquid 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.liquid 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.liquid repository=repo %} {% endfor %}
</div>
{% endif %}
```
---
#### 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.
---
#### 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.
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.
---
#### Atom (RSS-like) Feed
It generates an Atom (RSS-like) feed of your posts, useful for Atom and RSS readers. The feed is reachable simply by typing after your homepage `/feed.xml`. E.g. assuming your website mountpoint is the main folder, you can type `yourusername.github.io/feed.xml`
---
#### 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).
---
#### Code quality checks
Currently, we run some checks to ensure that the code quality and generated site are good. The checks are done using GitHub Actions and the following tools:
- [Prettier](https://prettier.io/) - check if the formatting of the code follows the style guide
- [lychee](https://lychee.cli.rs/) - check for broken links
- [Axe](https://github.com/dequelabs/axe-core) (need to run manually) - do some accessibility testing
We decided to keep `Axe` runs manual because fixing the issues are not straightforward and might be hard for people without web development knowledge.
## FAQ
For frequently asked questions, please refer to [FAQ.md](FAQ.md).
## Contributing
Contributions to al-folio are very welcome! Before you get started, please take a look at [the guidelines](CONTRIBUTING.md).
If you would like to improve documentation or fix a minor inconsistency or bug, please feel free to send a PR directly to `master`. For more complex issues/bugs or feature requests, please open an issue using the appropriate template.
### Maintainers
Our most active contributors are welcome to join the maintainers team. If you are interested, please reach out!
<!-- ALL-CONTRIBUTORS-LIST:START - Do not remove or modify this section -->
<!-- prettier-ignore-start -->
<!-- markdownlint-disable -->
<table>
<tbody>
<tr>
<td align="center" valign="top" width="14.28%"><a href="http://maruan.alshedivat.com"><img src="https://avatars.githubusercontent.com/u/2126561?v=4" width="100px;" alt=""/><br /><sub><b>Maruan</b></sub></a></td>
<td align="center" valign="top" width="14.28%"><a href="http://rohandebsarkar.github.io"><img src="https://avatars.githubusercontent.com/u/50144004?v=4" width="100px;" alt=""/><br /><sub><b>Rohan Deb Sarkar</b></sub></a></td>
<td align="center" valign="top" width="14.28%"><a href="https://amirpourmand.ir"><img src="https://avatars.githubusercontent.com/u/32064808?v=4" width="100px;" alt=""/><br /><sub><b>Amir Pourmand</b></sub></a></td>
<td align="center" valign="top" width="14.28%"><a href="https://george-gca.github.io/"><img src="https://avatars.githubusercontent.com/u/31376482?v=4" width="100px;" alt=""/><br /><sub><b>George</b></sub></a></td>
</tr>
</tbody>
</table>
<!-- markdownlint-restore -->
<!-- prettier-ignore-end -->
<!-- ALL-CONTRIBUTORS-LIST:END -->
### All Contributors
<a href="https://contrib.rocks">
<img src="https://contrib.rocks/image?repo=alshedivat/al-folio" />
</a>
## Star History
<a href="https://star-history.com/#alshedivat/al-folio&Date">
<picture>
<source media="(prefers-color-scheme: dark)" srcset="https://api.star-history.com/svg?repos=alshedivat/al-folio&type=Date&theme=dark" />
<source media="(prefers-color-scheme: light)" srcset="https://api.star-history.com/svg?repos=alshedivat/al-folio&type=Date" />
<img alt="Star History Chart" src="https://api.star-history.com/svg?repos=alshedivat/al-folio&type=Date" />
</picture>
</a>
## License
The theme is available as open source under the terms of the [MIT License](https://github.com/alshedivat/al-folio/blob/master/LICENSE).
Originally, **al-folio** was based on the [\*folio theme](https://github.com/bogoli/-folio) (published by [Lia Bogoev](https://liabogoev.com) and under the MIT license). Since then, it got a full re-write of the styles and many additional cool features.

View File

@ -1,114 +0,0 @@
---
---
@string{aps = {American Physical Society,}}
@book{einstein1920relativity,
title={Relativity: the Special and General Theory},
author={Einstein, Albert},
year={1920},
publisher={Methuen & Co Ltd},
html={relativity.html}
}
@book{einstein1956investigations,
bibtex_show={true},
title={Investigations on the Theory of the Brownian Movement},
author={Einstein, Albert},
year={1956},
publisher={Courier Corporation},
preview={brownian-motion.gif}
}
@article{einstein1950meaning,
abbr={AJP},
bibtex_show={true},
title={The meaning of relativity},
author={Einstein, Albert and Taub, AH},
journal={American Journal of Physics},
volume={18},
number={6},
pages={403--404},
year={1950},
publisher={American Association of Physics Teachers}
}
@article{PhysRev.47.777,
abbr={PhysRev},
title={Can Quantum-Mechanical Description of Physical Reality Be Considered Complete?},
author={Einstein*†, A. and Podolsky*, B. and Rosen*, N.},
abstract={In a complete theory there is an element corresponding to each element of reality. A sufficient condition for the reality of a physical quantity is the possibility of predicting it with certainty, without disturbing the system. In quantum mechanics in the case of two physical quantities described by non-commuting operators, the knowledge of one precludes the knowledge of the other. Then either (1) the description of reality given by the wave function in quantum mechanics is not complete or (2) these two quantities cannot have simultaneous reality. Consideration of the problem of making predictions concerning a system on the basis of measurements made on another system that had previously interacted with it leads to the result that if (1) is false then (2) is also false. One is thus led to conclude that the description of reality as given by a wave function is not complete.},
journal={Phys. Rev.},
location={New Jersey},
volume={47},
issue={10},
pages={777--780},
numpages={0},
year={1935},
month={May},
publisher=aps,
doi={10.1103/PhysRev.47.777},
url={http://link.aps.org/doi/10.1103/PhysRev.47.777},
html={https://journals.aps.org/pr/abstract/10.1103/PhysRev.47.777},
pdf={example_pdf.pdf},
altmetric={248277},
dimensions={true},
google_scholar_id={qyhmnyLat1gC},
video={https://www.youtube-nocookie.com/embed/aqz-KE-bpKQ},
additional_info={. *More Information* can be [found here](https://github.com/alshedivat/al-folio/)},
annotation={* Example use of superscripts<br>† Albert Einstein},
selected={true}
}
@article{einstein1905molekularkinetischen,
title={{\"U}ber die von der molekularkinetischen Theorie der W{\"a}rme geforderte Bewegung von in ruhenden Fl{\"u}ssigkeiten suspendierten Teilchen},
author={Einstein, A.},
journal={Annalen der physik},
volume={322},
number={8},
pages={549--560},
year={1905},
publisher={Wiley Online Library}
}
@article{einstein1905movement,
abbr={Ann. Phys.},
title={Un the movement of small particles suspended in statiunary liquids required by the molecular-kinetic theory 0f heat},
author={Einstein, A.},
journal={Ann. Phys.},
volume={17},
pages={549--560},
year={1905}
}
@article{einstein1905electrodynamics,
title={On the electrodynamics of moving bodies},
author={Einstein, A.},
year={1905}
}
@Article{einstein1905photoelectriceffect,
bibtex_show={true},
abbr={Ann. Phys.},
title="{{\"U}ber einen die Erzeugung und Verwandlung des Lichtes betreffenden heuristischen Gesichtspunkt}",
author={Albert Einstein},
abstract={This is the abstract text.},
journal={Ann. Phys.},
volume={322},
number={6},
pages={132--148},
year={1905},
doi={10.1002/andp.19053220607},
award={Albert Einstein receveid the **Nobel Prize in Physics** 1921 *for his services to Theoretical Physics, and especially for his discovery of the law of the photoelectric effect*},
award_name={Nobel Prize}
}
@book{przibram1967letters,
bibtex_show={true},
title={Letters on wave mechanics},
author={Einstein, Albert and Schrödinger, Erwin and Planck, Max and Lorentz, Hendrik Antoon and Przibram, Karl},
year={1967},
publisher={Vision},
preview={wave-mechanics.gif},
abbr={Vision}
}

View File

@ -1,645 +0,0 @@
# -----------------------------------------------------------------------------
# Site settings
# -----------------------------------------------------------------------------
title: blank # the website title (if blank, full name will be used instead)
first_name: Vinicius
middle_name: F.
last_name: Silva
email: silva.vinicius@dcc.ufmg.br, viniciusdasilva@ufmg.br
description: > # the ">" symbol means to ignore newlines until "footer_text:"
A simple, whitespace theme for academics. Based on [*folio](https://github.com/bogoli/-folio) design.
footer_text: >
Powered by <a href="https://jekyllrb.com/" target="_blank">Jekyll</a> with <a href="https://github.com/alshedivat/al-folio">al-folio</a> theme.
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/)
url: https://alshedivat.github.io # the base hostname & protocol for your site
baseurl: /al-folio # the subpath of your site, e.g. /blog/. Leave blank for root
last_updated: false # set to true if you want to display last updated in the footer
impressum_path: # set to path to include impressum link in the footer, use the same path as permalink in a page, helps to conform with EU GDPR
back_to_top: true # set to false to disable the back to top button
# -----------------------------------------------------------------------------
# Theme
# -----------------------------------------------------------------------------
# repo color theme
repo_theme_light: default # https://github.com/anuraghazra/github-readme-stats/blob/master/themes/README.md
repo_theme_dark: dark # https://github.com/anuraghazra/github-readme-stats/blob/master/themes/README.md
repo_trophies:
enabled: true
theme_light: flat # https://github.com/ryo-ma/github-profile-trophy
theme_dark: gitdimmed # https://github.com/ryo-ma/github-profile-trophy
# -----------------------------------------------------------------------------
# RSS Feed
# -----------------------------------------------------------------------------
# will use title and url fields
# Take a look to https://github.com/jekyll/jekyll-feed for more customization
rss_icon: false
# -----------------------------------------------------------------------------
# Layout
# -----------------------------------------------------------------------------
navbar_fixed: true
footer_fixed: true
search_enabled: true
socials_in_search: true
bib_search: true
# Dimensions
max_width: 930px
# TODO: add layout settings (single page vs. multi-page)
# -----------------------------------------------------------------------------
# Open Graph & Schema.org
# -----------------------------------------------------------------------------
# Display links to the page with a preview object on social media.
# see https://schema.org/docs/faq.html for more information
serve_og_meta: false # Include Open Graph meta tags in the HTML head
serve_schema_org: false # Include Schema.org in the HTML head
og_image: # The site-wide (default for all links) Open Graph preview image
# -----------------------------------------------------------------------------
# Social integration
# -----------------------------------------------------------------------------
acm_id: # your dl.acm.org/profile/id
blogger_url: # your blogger URL
bluesky_url: # your bluesky URL
dblp_url: # your DBLP profile url
discord_id: # your discord id (18-digit unique numerical identifier)
facebook_id: # your facebook id
flickr_id: # your flickr id
github_username: viniciusfdasilva # your GitHub user name
gitlab_username: # your GitLab user name
ieee_id: # your ieeexplore.ieee.org/author/id
instagram_id: # your instagram id
kaggle_id: # your kaggle id
keybase_username: # your keybase user name
lastfm_id: # your lastfm id
lattes_id: 7926652029249045
linkedin_username: viniciusfsilva # your LinkedIn user name
mastodon_username: # your mastodon instance+username in the format instance.tld/@username
medium_username: # your Medium username
orcid_id: 0009-0008-9063-8804
osf_id: # your OSF ID
pinterest_id: # your pinterest id
publons_id: # your ID on Publons
quora_username: # your Quora username
research_gate_profile: Vinicius-Silva-42 # your profile on ResearchGate
scholar_userid: # your Google Scholar ID
scopus_id: # your profile on Scopus
semanticscholar_id: # your Semantic Scholar ID
spotify_id: # your spotify id
stackoverflow_id: # your stackoverflow id
telegram_username: # your Telegram user name
unsplash_id: # your unsplash id
wechat_qr: # filename of your wechat qr-code saved as an image (e.g., wechat-qr.png if saved to assets/img/wechat-qr.png)
whatsapp_number: # your WhatsApp number (full phone number in international format. Omit any zeroes, brackets, or dashes when adding the phone number in international format.)
wikidata_id: # your wikidata id
wikipedia_id: # your wikipedia id (Case sensitive)
work_url: # work page URL
x_username: # your X handle
youtube_id: # your youtube channel id (youtube.com/@<youtube_id>)
zotero_username: # your zotero username
contact_note: >
Contact me through these social media.
# -----------------------------------------------------------------------------
# Analytics and search engine verification
# -----------------------------------------------------------------------------
# For Google Analytics, see https://support.google.com/analytics/answer/10447272?hl=en&ref_topic=14088998&sjid=5129943941510317771-SA#zippy=%2Cgoogle-sites
# and follow the instructions for Google Sites. You will need to create a Google Analytics property and copy the Google tag ID.
google_analytics: # your Google Analytics measurement ID (format: G-XXXXXXXXXX)
cronitor_analytics: # cronitor RUM analytics site ID (format: XXXXXXXXX)
pirsch_analytics: # your Pirsch analytics site ID (length 32 characters)
# For Google Search Console, see https://support.google.com/webmasters/answer/9008080?hl=en#meta_tag_verification&zippy=%2Chtml-tag
google_site_verification: # your google-site-verification ID (Google Search Console)
bing_site_verification: # out your bing-site-verification ID (Bing Webmaster)
# -----------------------------------------------------------------------------
# Blog
# -----------------------------------------------------------------------------
blog_name: al-folio # blog_name will be displayed in your blog page
blog_description: a simple whitespace theme for academics
permalink: /blog/:year/:title/
lsi: false # produce an index for related posts
# Pagination
pagination:
enabled: true
related_blog_posts:
enabled: true
max_related: 5
# Giscus comments (RECOMMENDED)
# Follow instructions on https://giscus.app/ to setup for your repo to fill out the information below.
giscus:
repo: # <your-github-user-name>/<your-github-repo-name>
repo_id: # leave empty or specify your repo_id (see https://giscus.app/)
category: Comments # name of the category under which discussions will be created
category_id: # leave empty or specify your category_id (see https://giscus.app/)
mapping: title # identify discussions by post title
strict: 1 # use strict identification mode
reactions_enabled: 1 # enable (1) or disable (0) emoji reactions
input_position: bottom # whether to display input form below (bottom) or above (top) the comments
theme: preferred_color_scheme # name of the color scheme (preferred works well with al-folio light/dark mode)
emit_metadata: 0
lang: en
# Disqus comments (DEPRECATED)
disqus_shortname: al-folio # put your disqus shortname
# https://help.disqus.com/en/articles/1717111-what-s-a-shortname
# External sources.
# If you have blog posts published on medium.com or other external sources,
# you can display them in your blog by adding a link to the RSS feed.
external_sources:
- name: medium.com
rss_url: https://medium.com/@al-folio/feed
- name: Google Blog
posts:
- url: https://blog.google/technology/ai/google-gemini-update-flash-ai-assistant-io-2024/
published_date: 2024-05-14
# -----------------------------------------------------------------------------
# Newsletter
# -----------------------------------------------------------------------------
newsletter:
enabled: false
endpoint: # your loops endpoint (e.g., https://app.loops.so/api/newsletter-form/YOUR-ENDPOINT)
# https://loops.so/docs/forms/custom-form
# -----------------------------------------------------------------------------
# Collections
# -----------------------------------------------------------------------------
collections:
news:
defaults:
layout: post
output: true
permalink: /:collection/:title/
projects:
output: true
permalink: /:collection/:title/
announcements:
enabled: true
scrollable: true # adds a vertical scroll bar if there are more than 3 news items
limit: 5 # leave blank to include all the news in the `_news` folder
latest_posts:
enabled: false
scrollable: true # adds a vertical scroll bar if there are more than 3 new posts items
limit: 3 # leave blank to include all the blog posts
# -----------------------------------------------------------------------------
# Jekyll settings
# -----------------------------------------------------------------------------
# Markdown and syntax highlight
markdown: kramdown
highlighter: rouge
kramdown:
input: GFM
syntax_highlighter_opts:
css_class: "highlight"
span:
line_numbers: false
block:
line_numbers: false
start_line: 1
# Includes & excludes
include: ["_pages"]
exclude:
- bin/
- CONTRIBUTING.md
- CUSTOMIZE.md
- Dockerfile
- docker-compose.yml
- docker-compose-slim.yml
- FAQ.md
- Gemfile
- Gemfile.lock
- INSTALL.md
- LICENSE
- lighthouse_results/
- package.json
- package-lock.json
- _pages/about_einstein.md
- purgecss.config.js
- README.md
- readme_preview/
- vendor
keep_files:
- CNAME
- .nojekyll
# Plug-ins
plugins:
- jekyll-archives
- jekyll-email-protect
- jekyll-feed
- jekyll-get-json
- jekyll-imagemagick
- jekyll-jupyter-notebook
- jekyll-link-attributes
- jekyll-minifier
- jekyll-paginate-v2
- jekyll-regex-replace
- jekyll/scholar
- jekyll-sitemap
- jekyll-tabs
- jekyll-toc
- jekyll-twitter-plugin
- jemoji
# Sitemap settings
defaults:
- scope:
path: "assets"
values:
sitemap: false
sass:
style: compressed
# -----------------------------------------------------------------------------
# Jekyll Minifier
# -----------------------------------------------------------------------------
jekyll-minifier:
exclude: ["robots.txt", "assets/js/search/*.js"]
uglifier_args:
harmony: true
# -----------------------------------------------------------------------------
# Jekyll Archives
# -----------------------------------------------------------------------------
jekyll-archives:
enabled: [year, tags, categories] # enables year, tag and category archives (remove if you need to disable one of them).
layouts:
year: archive-year
tag: archive-tag
category: archive-category
permalinks:
year: "/blog/:year/"
tag: "/blog/tag/:name/"
category: "/blog/category/:name/"
display_tags: ["formatting", "images", "links", "math", "code", "blockquotes"] # these tags will be displayed on the front page of your blog
display_categories: ["external-services"] # these categories will be displayed on the front page of your blog
# -----------------------------------------------------------------------------
# Jekyll Scholar
# -----------------------------------------------------------------------------
scholar:
last_name: [Einstein]
first_name: [Albert, A.]
style: apa
locale: en
source: /_bibliography/
bibliography: papers.bib
bibliography_template: bib
# Note: if you have latex math in your bibtex, the latex filter
# preprocessing may conflict with MathJAX if the latter is enabled.
# See https://github.com/alshedivat/al-folio/issues/357.
bibtex_filters: [latex, smallcaps, superscript]
replace_strings: true
join_strings: true
details_dir: bibliography
details_link: Details
query: "@*"
group_by: year
group_order: descending
# Display different badges withs stats for your publications
# Customize badge behavior in _layouts/bib.liquid
enable_publication_badges:
altmetric: true # Altmetric badge (Customization options: https://badge-docs.altmetric.com/index.html)
dimensions: true # Dimensions badge (Customization options: https://badge.dimensions.ai/)
google_scholar: true # Google Scholar badge (https://scholar.google.com/intl/en/scholar/citations.html)
# Filter out certain bibtex entry keywords used internally from the bib output
filtered_bibtex_keywords:
[
abbr,
abstract,
additional_info,
altmetric,
annotation,
arxiv,
award,
award_name,
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
more_authors_animation_delay: 10 # more authors are revealed on click using animation; smaller delay means faster animation
# Enables publication thumbnails. If disabled, none of the publications will display thumbnails, even if specified in the bib entry.
enable_publication_thumbnails: true
# -----------------------------------------------------------------------------
# Jekyll Link Attributes
# -----------------------------------------------------------------------------
# These are the defaults
external_links:
enabled: true
rel: external nofollow noopener
target: _blank
exclude:
# -----------------------------------------------------------------------------
# Responsive WebP Images
# -----------------------------------------------------------------------------
# MAKE SURE imagemagick is installed and on your PATH before enabling imagemagick. In a terminal, run:
# convert -version
imagemagick:
enabled: true # enables responsive images for your site (recommended, see https://github.com/alshedivat/al-folio/issues/537)
widths:
- 480
- 800
- 1400
input_directories:
- assets/img/
input_formats:
- ".jpg"
- ".jpeg"
- ".png"
- ".tiff"
- ".gif"
output_formats:
webp: "-quality 85"
# Lazy loading images
# If you enable lazy loading, all images will add the loading="lazy" attribute.
# This will make your site load faster, but it may not be supported in all browsers.
# You can also set loading="" to other values for specific images to override the default behavior.
# Options: "auto", "eager", "lazy"
# See https://web.dev/browser-level-image-lazy-loading/ for more information.
lazy_loading_images: true # enables lazy loading of images (recommended)
# -----------------------------------------------------------------------------
# Optional Features
# -----------------------------------------------------------------------------
enable_google_analytics: false # enables google analytics
enable_cronitor_analytics: false # enables cronitor RUM analytics
enable_pirsch_analytics: false # enables Pirsch analytics (https://pirsch.io/)
enable_google_verification: false # enables google site verification
enable_bing_verification: false # enables bing site verification
enable_masonry: true # enables automatic project cards arrangement
enable_math: true # enables math typesetting (uses MathJax)
enable_tooltips: false # enables automatic tooltip links generated for each section titles on pages and posts
enable_darkmode: false # enables switching between light/dark modes
enable_navbar_social: false # enables displaying social links in the navbar on the about page
enable_project_categories: true # enables categorization of projects into multiple categories
enable_medium_zoom: true # enables image zoom feature (as on medium.com)
enable_progressbar: true # enables a horizontal progress bar linked to the vertical scroll position
enable_video_embedding: false # enables video embedding for bibtex entries. If false, the button opens the video link in a new window.
# -----------------------------------------------------------------------------
# Library versions
# -----------------------------------------------------------------------------
# Add the url, version and integrity hash of the libraries you use in your site.
# The integrity hash is used to ensure that the library is not tampered with.
# Integrity hashes not provided by the libraries were generated using https://www.srihash.org/
third_party_libraries:
download: false # if true, download the versions of the libraries specified below and use the downloaded files
bootstrap-table:
integrity:
css: "sha256-uRX+PiRTR4ysKFRCykT8HLuRCub26LgXJZym3Yeom1c="
js: "sha256-4rppopQE9POKfukn2kEvhJ9Um25Cf6+IDVkARD0xh78="
url:
css: "https://cdn.jsdelivr.net/npm/bootstrap-table@{{version}}/dist/bootstrap-table.min.css"
js: "https://cdn.jsdelivr.net/npm/bootstrap-table@{{version}}/dist/bootstrap-table.min.js"
version: "1.22.4"
chartjs:
integrity:
js: "sha256-0q+JdOlScWOHcunpUk21uab1jW7C1deBQARHtKMcaB4="
url:
js: "https://cdn.jsdelivr.net/npm/chart.js@{{version}}/dist/chart.umd.min.js"
version: "4.4.1"
d3:
integrity:
js: "sha256-1rA678n2xEx7x4cTZ5x4wpUCj6kUMZEZ5cxLSVSFWxw="
url:
js: "https://cdn.jsdelivr.net/npm/d3@{{version}}/dist/d3.min.js"
version: "7.8.5"
diff2html:
integrity:
css: "sha256-IMBK4VNZp0ivwefSn51bswdsrhk0HoMTLc2GqFHFBXg="
js: "sha256-eU2TVHX633T1o/bTQp6iIJByYJEtZThhF9bKz/DcbbY="
url:
css: "https://cdn.jsdelivr.net/npm/diff2html@{{version}}/bundles/css/diff2html.min.css"
js: "https://cdn.jsdelivr.net/npm/diff2html@{{version}}/bundles/js/diff2html-ui.min.js"
version: "3.4.47"
echarts:
integrity:
js:
library: "sha256-QvgynZibb2U53SsVu98NggJXYqwRL7tg3FeyfXvPOUY="
dark_theme: "sha256-sm6Ui9w41++ZCWmIWDLC18a6ki72FQpWDiYTDxEPXwU="
url:
js:
library: "https://cdn.jsdelivr.net/npm/echarts@{{version}}/dist/echarts.min.js"
dark_theme: "https://cdn.jsdelivr.net/npm/echarts@{{version}}/theme/dark-fresh-cut.js"
version: "5.5.0"
google_fonts:
url:
fonts: "https://fonts.googleapis.com/css?family=Roboto:300,400,500,700|Roboto+Slab:100,300,400,500,700|Material+Icons&display=swap"
highlightjs:
integrity:
css:
light: "sha256-Oppd74ucMR5a5Dq96FxjEzGF7tTw2fZ/6ksAqDCM8GY="
dark: "sha256-nyCNAiECsdDHrr/s2OQsp5l9XeY2ZJ0rMepjCT2AkBk="
url:
css:
light: "https://cdn.jsdelivr.net/npm/highlight.js@{{version}}/styles/github.min.css"
dark: "https://cdn.jsdelivr.net/npm/highlight.js@{{version}}/styles/github-dark.min.css"
version: "11.9.0"
imagesloaded:
integrity:
js: "sha256-htrLFfZJ6v5udOG+3kNLINIKh2gvoKqwEhHYfTTMICc="
url:
js: https://cdn.jsdelivr.net/npm/imagesloaded@{{version}}/imagesloaded.pkgd.min.js
version: "5.0.0"
img-comparison-slider:
integrity:
css: "sha256-3qTIuuUWIFnnU3LpQMjqiXc0p09rvd0dmj+WkpQXSR8="
js: "sha256-EXHg3x1K4oIWdyohPeKX2ZS++Wxt/FRPH7Nl01nat1o="
map: "sha256-3wfqS2WU5kGA/ePcgFzJXl5oSN1QsgZI4/edprTgX8w="
url:
css: "https://cdn.jsdelivr.net/npm/img-comparison-slider@{{version}}/dist/styles.min.css"
js: "https://cdn.jsdelivr.net/npm/img-comparison-slider@{{version}}/dist/index.min.js"
map: "https://cdn.jsdelivr.net/npm/img-comparison-slider@{{version}}/dist/index.js.map"
version: "8.0.6"
jquery:
integrity:
js: "sha256-/xUj+3OJU5yExlq6GSYGSHk7tPXikynS7ogEvDej/m4="
url:
js: "https://cdn.jsdelivr.net/npm/jquery@{{version}}/dist/jquery.min.js"
version: "3.6.0"
leaflet:
integrity:
css: "sha256-q9ba7o845pMPFU+zcAll8rv+gC+fSovKsOoNQ6cynuQ="
js: "sha256-MgH13bFTTNqsnuEoqNPBLDaqxjGH+lCpqrukmXc8Ppg="
js_map: "sha256-YAoQ3FzREN4GmVENMir8vgHHypC0xfSK3CAxTHCqx1M="
local:
images: "images/"
url:
css: "https://cdn.jsdelivr.net/npm/leaflet@{{version}}/dist/leaflet.min.css"
images: "https://cdn.jsdelivr.net/npm/leaflet@{{version}}/dist/images/"
js: "https://cdn.jsdelivr.net/npm/leaflet@{{version}}/dist/leaflet.min.js"
js_map: "https://cdn.jsdelivr.net/npm/leaflet@{{version}}/dist/leaflet.js.map"
version: "1.9.4"
mathjax:
integrity:
js: "sha256-MASABpB4tYktI2Oitl4t+78w/lyA+D7b/s9GEP0JOGI="
local:
fonts: "output/chtml/fonts/woff-v2/"
url:
fonts: "https://cdn.jsdelivr.net/npm/mathjax@{{version}}/es5/output/chtml/fonts/woff-v2/"
js: "https://cdn.jsdelivr.net/npm/mathjax@{{version}}/es5/tex-mml-chtml.js"
version: "3.2.2"
masonry:
integrity:
js: "sha256-Nn1q/fx0H7SNLZMQ5Hw5JLaTRZp0yILA/FRexe19VdI="
url:
js: "https://cdn.jsdelivr.net/npm/masonry-layout@{{version}}/dist/masonry.pkgd.min.js"
version: "4.2.2"
mdb:
integrity:
css: "sha256-jpjYvU3G3N6nrrBwXJoVEYI/0zw8htfFnhT9ljN3JJw="
css_map: "sha256-iYYMNfsJdVZjvsebJulg09miBXM4/GMTJgv1u5EZFFM="
js: "sha256-NdbiivsvWt7VYCt6hYNT3h/th9vSTL4EDWeGs5SN3DA="
js_map: "sha256-UPgyn4YNsT0khkBK5553QwhnlbTlU0aa+igyc6qP1bE="
url:
css: "https://cdn.jsdelivr.net/npm/mdbootstrap@{{version}}/css/mdb.min.css"
css_map: "https://cdn.jsdelivr.net/npm/mdbootstrap@{{version}}/css/mdb.min.css.map"
js: "https://cdn.jsdelivr.net/npm/mdbootstrap@{{version}}/js/mdb.min.js"
js_map: "https://cdn.jsdelivr.net/npm/mdbootstrap@{{version}}/js/mdb.min.js.map"
version: "4.20.0"
medium_zoom:
integrity:
js: "sha256-ZgMyDAIYDYGxbcpJcfUnYwNevG/xi9OHKaR/8GK+jWc="
url:
js: "https://cdn.jsdelivr.net/npm/medium-zoom@{{version}}/dist/medium-zoom.min.js"
version: "1.1.0"
mermaid:
integrity:
js: "sha256-TtLOdUA8mstPoO6sGvHIGx2ceXrrX4KgIItO06XOn8A="
url:
js: "https://cdn.jsdelivr.net/npm/mermaid@{{version}}/dist/mermaid.min.js"
version: "10.7.0"
polyfill:
url:
js: "https://cdnjs.cloudflare.com/polyfill/v{{version}}/polyfill.min.js?features=es6"
version: "3"
pseudocode:
integrity:
css: "sha256-VwMV//xgBPDyRFVSOshhRhzJRDyBmIACniLPpeXNUdc="
js: "sha256-aVkDxqyzrB+ExUsOY9PdyelkDhn/DfrjWu08aVpqNlo="
url:
css: "https://cdn.jsdelivr.net/npm/pseudocode@{{version}}/build/pseudocode.min.css"
js: "https://cdn.jsdelivr.net/npm/pseudocode@{{version}}/build/pseudocode.min.js"
version: "2.4.1"
swiper:
integrity:
css: "sha256-yUoNxsvX+Vo8Trj3lZ/Y5ZBf8HlBFsB6Xwm7rH75/9E="
js: "sha256-BPrwikijIybg9OQC5SYFFqhBjERYOn97tCureFgYH1E="
map: "sha256-lbF5CsospW93otqvWOIbbhj80CjazrZXvamD7nC7TBI="
url:
css: "https://cdn.jsdelivr.net/npm/swiper@{{version}}/swiper-bundle.min.css"
js: "https://cdn.jsdelivr.net/npm/swiper@{{version}}/swiper-element-bundle.min.js"
map: "https://cdn.jsdelivr.net/npm/swiper@{{version}}/swiper-element-bundle.min.js.map"
version: "11.0.5"
swiper-map:
integrity:
js: "sha256-hlZaH8ySXX97bZaetnrtYlKuhx3oEXFz/s2IXchu6vk="
url:
js: "https://cdn.jsdelivr.net/npm/swiper@11.1.0/swiper-element-bundle.min.js.map"
version: "11.0.5"
vega:
integrity:
js: "sha256-Yot/cfgMMMpFwkp/5azR20Tfkt24PFqQ6IQS+80HIZs="
js_map: "sha256-z0x9ICA65dPkZ0JVa9wTImfF6n7AJsKc6WlFE96/wNA="
url:
js: "https://cdn.jsdelivr.net/npm/vega@{{version}}/build/vega.min.js"
js_map: "https://cdn.jsdelivr.net/npm/vega@{{version}}/build/vega.min.js.map"
version: "5.27.0"
vega-embed:
integrity:
js: "sha256-FPCJ9JYCC9AZSpvC/t/wHBX7ybueZhIqOMjpWqfl3DU="
js_map: "sha256-VBbfSEFYSMdX/rTdGrONEHNP6BprCB7H/LpMMNt/cPA="
url:
js: "https://cdn.jsdelivr.net/npm/vega-embed@{{version}}/build/vega-embed.min.js"
js_map: "https://cdn.jsdelivr.net/npm/vega-embed@{{version}}/build/vega-embed.min.js.map"
version: "6.24.0"
vega-lite:
integrity:
js: "sha256-TvBvIS5jUN4BSy009usRjNzjI1qRrHPYv7xVLJyjUyw="
js_map: "sha256-l2I4D5JC23Ulsu6e3sKVe5AJ+r+DFkzkKnZS8nUGz28="
url:
js: "https://cdn.jsdelivr.net/npm/vega-lite@{{version}}/build/vega-lite.min.js"
js_map: "https://cdn.jsdelivr.net/npm/vega-lite@{{version}}/build/vega-lite.min.js.map"
version: "5.16.3"
# -----------------------------------------------------------------------------
# Get external JSON data
# -----------------------------------------------------------------------------
jekyll_get_json:
- data: resume
json: assets/json/resume.json # it can also be an url
jsonresume:
- basics
- work
- education
- publications
- projects
- volunteer
- awards
- certificates
- skills
- languages
- interests
- references

View File

@ -1,34 +0,0 @@
"adams":
- firstname: ["Edwin", "E.", "E. P.", "Edwin Plimpton"]
url: https://en.wikipedia.org/wiki/Edwin_Plimpton_Adams
"podolsky":
- firstname: ["Boris", "B.", "B. Y.", "Boris Yakovlevich"]
url: https://en.wikipedia.org/wiki/Boris_Podolsky
"rosen":
- firstname: ["Nathan", "N."]
url: https://en.wikipedia.org/wiki/Nathan_Rosen
"bach":
- firstname: ["Johann Sebastian", "J. S."]
url: https://en.wikipedia.org/wiki/Johann_Sebastian_Bach
- firstname: ["Carl Philipp Emanuel", "C. P. E."]
url: https://en.wikipedia.org/wiki/Carl_Philipp_Emanuel_Bach
"przibram":
- firstname: ["Karl"]
url: https://link.springer.com/article/10.1007/s00016-019-00242-z
"schrodinger":
- firstname: ["Erwin"]
url: https://en.wikipedia.org/wiki/Erwin_Schr%C3%B6dinger
"lorentz":
- firstname: ["Hendrik Antoon"]
url: https://en.wikipedia.org/wiki/Hendrik_Lorentz
"planck":
- firstname: ["Max"]
url: https://en.wikipedia.org/wiki/Max_Planck

View File

View File

@ -1,10 +0,0 @@
github_users:
- viniciusfdasilva
repo_description_lines_max: 2
github_repos:
- viniciusfdasilva/vchip8
- viniciusfdasilva/riscv_emulator
- viniciusfdasilva/danixfs
- viniciusfdasilva/riscv64_asm

View File

@ -1,9 +0,0 @@
"AJP":
url: https://aapt.scitation.org/journal/ajp
color: "#00369f"
"PhysRev":
url: https://journals.aps.org/
"Vision":
color: "#009f36"

View File

@ -1,30 +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>

View File

@ -1,4 +0,0 @@
{% if site.bib_search %}
<script src="{{ '/assets/js/bibsearch.js' | relative_url | bust_file_cache }}" type="module"></script>
<input type="text" id="bibsearch" spellcheck="false" autocomplete="off" class="search bibsearch-form-input" placeholder="Type to filter">
{% endif %}

View File

@ -1,26 +0,0 @@
<br>
<hr>
<br>
If you found this useful, please cite this as:
{% capture citation_quote -%}
> {{ site.last_name }}, {{ site.first_name }}{% if site.middle_name %} {{ site.middle_name }}{% endif %} ({{ page.date | date: "%b %Y" }}). {{ page.title }}. {% if site.title != 'blank' %}{{ site.title }}. {% endif %}{{ site.url }}.
{%- endcapture %}
{{ citation_quote | markdownify }}
<p>or as a BibTeX entry:</p>
{% capture citation_code -%}
```bibtex
@article{ {{- site.last_name | downcase }}{{ page.date | date: "%Y" }}{{ page.title | slugify }},
title = { {{- page.title -}} },
author = { {{- site.last_name }}, {{ site.first_name }}{% if site.middle_name %} {{ site.middle_name }}{% endif -%}},
{%- if site.title != 'blank' %}journal = { {{- site.title -}} },{% endif %}
year = { {{- page.date | date: "%Y" -}} },
month = { {{- page.date | date: "%b" -}} },
url = { {{- site.url }}{{ page.url -}} }
}
```
{%- endcapture %}
{{ citation_code | markdownify }}

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>

View File

@ -1,51 +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

@ -1,29 +0,0 @@
<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>
{% if content.value %}
<td class="p-1 pl-2 font-weight-light text">{{ content.value }}</td>
{% endif %}
{% if content.links %}
<td class="p-1 pl-2 font-weight-light text">
<div class="container-pdf">
{% for item in content.links %}
{% 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>
{% else %}
<a href="{{ item.link }}" target="_blank" class="btncv z-depth-0">doc</a>
{% endif %}
</div>
{% endif %}
{% endfor %}
</div>
</td>
{% endif %}
</tr>
{% endfor %}
</table>

View File

@ -1,16 +0,0 @@
<ul class="card-text font-weight-light list-group list-group-flush">
{% for content in entry.contents %}
<li class="list-group-item">
<h5 class="font-italic">{{ content.title }}</h5>
{% if content.items %}
<ul class="subitems">
{% for subitem in content.items %}
<li>
<span class="subitem">{{ subitem }}</span>
</li>
{% endfor %}
</ul>
{% endif %}
</li>
{% endfor %}
</ul>

View File

@ -1,118 +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

@ -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>

View File

@ -1,78 +0,0 @@
{% assign img_path = include.path | remove: '.jpg' | remove: '.jpeg' | remove: '.png' | remove: '.tiff' | remove: '.gif' %}
<figure
{% if include.slot %}
slot="{{ include.slot }}"
{% endif %}
>
<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'] or include['min-height'] or include['max-width'] or include['max-height'] %}
style="
{% 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 %}
"
{% endif %}
{% if include.alt %}
alt="{{ include.alt }}"
{% endif %}
{% if include.title %}
title="{{ include.title }}"
{% endif %}
{% if include.zoomable %}
data-zoomable
{% endif %}
{% if include.loading %}
loading="{{ include.loading }}"
{% elsif site.lazy_loading_images %}
loading="lazy"
{% endif %}
onerror="this.onerror=null; $('.responsive-img-srcset').remove();"
>
</picture>
{% if include.caption %}
<figcaption class="caption">{{ include.caption }}</figcaption>
{% endif %}
</figure>

View File

@ -1,35 +0,0 @@
{% if site.footer_fixed %}
<footer class="fixed-bottom" role="contentinfo">
<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" role="contentinfo">
{% if site.newsletter.enabled %}
{% include scripts/newsletter.liquid %}
{% endif %}
<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,32 +0,0 @@
<div id="giscus_thread" style="max-width: {{ site.max_width }}; margin: 0 auto;">
{% if site.giscus.repo %}
<script>
let giscusTheme = determineComputedTheme();
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,149 +0,0 @@
<!-- 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="{{ site.third_party_libraries.mdb.url.css }}"
integrity="{{ site.third_party_libraries.mdb.integrity.css }}"
crossorigin="anonymous"
>
<!-- Bootstrap Table -->
{% if page.pretty_table %}
<link
defer
rel="stylesheet"
href="{{ site.third_party_libraries.bootstrap-table.url.css }}"
integrity="{{ site.third_party_libraries.bootstrap-table.integrity.css }}"
crossorigin="anonymous"
>
{% endif %}
<!-- Fonts & Icons -->
<link defer rel="stylesheet" href="{{ '/assets/css/academicons.min.css' | relative_url | bust_file_cache }}">
<link
defer
rel="stylesheet"
type="text/css"
href="{{ site.third_party_libraries.google_fonts.url.fonts }}"
>
<!-- Code Syntax Highlighting -->
<link
defer
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 defer href="{{ '/assets/css/bootstrap-toc.min.css' | relative_url | bust_file_cache }}" rel="stylesheet">
{% endif %}
<!-- Styles -->
<!-- pseudocode -->
{% if page.pseudocode %}
<link
defer
rel="stylesheet"
href="{{ site.third_party_libraries.pseudocode.url.css }}"
integrity="{{ site.third_party_libraries.pseudocode.integrity.css }}"
crossorigin="anonymous"
>
{% endif %}
{% 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 -->
<script src="{{ '/assets/js/theme.js' | relative_url | bust_file_cache }}"></script>
{% if site.enable_darkmode %}
<link
defer
rel="stylesheet"
href="{{ '/assets/css/jekyll-pygments-themes-native.css' | relative_url | bust_file_cache }}"
media="none"
id="highlight_theme_dark"
>
<script>
initTheme();
</script>
{% endif %}
<!-- GeoJSON support via Leaflet -->
{% if page.map %}
<link
defer
rel="stylesheet"
href="{{ site.third_party_libraries.leaflet.url.css }}"
integrity="{{ site.third_party_libraries.leaflet.integrity.css }}"
crossorigin="anonymous"
>
{% endif %}
<!-- diff2html -->
{% if page.code_diff %}
<link
defer
rel="stylesheet"
href="{{ site.third_party_libraries.highlightjs.url.css.light }}"
integrity="{{ site.third_party_libraries.highlightjs.integrity.css.light }}"
crossorigin="anonymous"
media="screen and (prefers-color-scheme: light)"
>
<link
defer
rel="stylesheet"
href="{{ site.third_party_libraries.highlightjs.url.css.dark }}"
integrity="{{ site.third_party_libraries.highlightjs.integrity.css.dark }}"
crossorigin="anonymous"
media="screen and (prefers-color-scheme: dark)"
>
<link
defer
rel="stylesheet"
href="{{ site.third_party_libraries.diff2html.url.css }}"
integrity="{{ site.third_party_libraries.diff2html.integrity.css }}"
crossorigin="anonymous"
>
{% endif %}
{% if page.images %}
<!-- Image comparison slider -->
{% if page.images.compare %}
<link
defer
rel="stylesheet"
href="{{ site.third_party_libraries.img-comparison-slider.url.css }}"
integrity="{{ site.third_party_libraries.img-comparison-slider.integrity.css }}"
crossorigin="anonymous"
>
{% endif %}
<!-- Image slider -->
{% if page.images.slider %}
<link
defer
rel="stylesheet"
href="{{ site.third_party_libraries.swiper.url.css }}"
integrity="{{ site.third_party_libraries.swiper.integrity.css }}"
crossorigin="anonymous"
>
{% endif %}
{% endif %}
{% if page.tikzjax %}
<link defer rel="stylesheet" type="text/css" href="https://tikzjax.com/v1/fonts.css">
{% endif %}

View File

@ -1,141 +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 %}" role="navigation">
<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 -}}
</span>
{% endif %}
{% if site.middle_name %}
{{- site.middle_name -}}
{% 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 %}
{% assign parent_link = p.permalink | remove: 'index.html' %}
<li class="nav-item {% if page.url contains parent_link %}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.search_enabled %}
<!-- Search -->
<li class="nav-item">
<button id="search-toggle" title="Search" onclick="openSearchModal()">
<span class="nav-link">ctrl k <i class="ti ti-search"></i></span>
</button>
</li>
{% endif %}
{% if site.enable_darkmode %}
<!-- Toogle theme mode -->
<li class="toggle-container">
<button id="light-toggle" title="Change theme">
<i class="ti ti-sun-moon" id="light-toggle-system"></i>
<i class="ti ti-moon-filled" id="light-toggle-dark"></i>
<i class="ti ti-sun-filled" id="light-toggle-light"></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,48 +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

@ -1,241 +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 %}
{% capture author_name %}{{ site.first_name }}{% if site.middle_name %} {{ site.middle_name }}{% endif %} {{ site.last_name }}{% endcapture %}
<!-- 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 %}{{ author_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="{{ author_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": "{{ author_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": "{{ author_name }}",
"@context": "https://schema.org"
}
</script>
{% endif %}

View File

@ -1,34 +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>

View File

@ -1,21 +0,0 @@
{% if paginator.total_pages > 1 %}
<nav aria-label="Blog page navigation">
<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 | remove: 'index.html' }}" 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,35 +0,0 @@
<div class="col">
<a href="{% if project.redirect %}{{ project.redirect }}{% else %}{{ project.url | relative_url }}{% endif %}">
<div class="card h-100 hoverable">
{% if project.img %}
{%
include figure.liquid
loading="eager"
path=project.img
sizes = "250px"
alt="project thumbnail"
class="card-img-top"
%}
{% endif %}
<div class="card-body">
<h2 class="card-title">{{ 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,34 +0,0 @@
<div class="col mb-4">
<a href="{% if project.redirect %}{{ project.redirect }}{% else %}{{ project.url | relative_url }}{% endif %}">
<div class="card h-100 hoverable">
<div class="row no-gutters">
{% if project.img %}
<div class="col-md-6">
{% include figure.liquid loading="eager" path=project.img sizes="(min-width: 768px) 156px, 50vw" alt="project thumbnail" class="card-img" %}
</div>
{% endif %}
<div class="{% if project.img %}col-md-6{% else %}col-md-12{% endif %}">
<div class="card-body">
<h3 class="card-title">{{ 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,22 +0,0 @@
{% 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 %}
<br>
<hr>
<br>
<ul class="list-disc pl-8"></ul>
<!-- Adds related posts to the end of an article -->
<h2 class="text-3xl font-semibold mb-4 mt-12">Enjoy Reading This Article?</h2>
<p class="mb-2">Here are some more articles you might like to read next:</p>
{% endunless %}
<li class="my-2">
<a class="text-pink-700 underline font-semibold hover:text-pink-800" href="{{ site.baseurl }}{{ post.url }}">{{ post.title }}</a>
</li>
{% endfor %}
{% if site.newsletter.enabled and site.footer_fixed %}
<p class="mb-2" style="margin-top: 1.5rem !important">Subscribe to be notified of future articles:</p>
{% include scripts/newsletter.liquid left=true %}
{% endif %}

View File

@ -1,27 +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 %}
{% if site.data.repositories.repo_description_lines_max %}
{% assign max_lines = site.data.repositories.repo_description_lines_max %}
{% else %}
{% assign max_lines = 2 %}
{% 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 }}&description_lines_count={{ max_lines }}"
>
<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 }}&description_lines_count={{ max_lines }}"
>
</a>
</div>

View File

@ -1,42 +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

@ -1,14 +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

@ -1,19 +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 date-column">
{% 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,28 +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

@ -1,35 +0,0 @@
<div class="list-groups">
{% assign certificates = data[1] | sort: 'date' | reverse %}
{% for content in certificates %}
<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">
<a href="{{ content.url | default: # }}">{{ content.name }}</a>
</td>
</tr>
<tr>
<td></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>

View File

@ -1,54 +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 date-column">
{% 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

@ -1,33 +0,0 @@
<div class="list-groups">
{% for content in data[1] %}
<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.name }}</td>
</tr>
{% for item in content.keywords %}
<tr>
<td></td>
<td class="list-group-name">
<b>{{ item }}</b>
</td>
</tr>
{% endfor %}
</tbody>
</table>
</div>
{% endfor %}
</div>

View File

@ -1,31 +0,0 @@
<div class="list-groups">
{% for content in data[1] %}
<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.language }}</td>
</tr>
<tr>
<td></td>
<td class="list-group-name">
<b>{{ content.fluency }}</b>
</td>
</tr>
</tbody>
</table>
</div>
{% endfor %}
</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 date-column">
{% 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,28 +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 date-column">
{% 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

@ -1,31 +0,0 @@
<div class="list-groups">
{% for content in data[1] %}
<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.name }}</td>
</tr>
<tr>
<td></td>
<td class="list-group-name">
<b>{{ content.reference }}</b>
</td>
</tr>
</tbody>
</table>
</div>
{% endfor %}
</div>

View File

@ -1,33 +0,0 @@
<div class="list-groups">
{% for content in data[1] %}
<div class="list-group col-md-6" title="{{ content.level }}">
<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.name }}</td>
</tr>
{% for item in content.keywords %}
<tr>
<td></td>
<td class="list-group-name">
<b>{{ item }}</b>
</td>
</tr>
{% endfor %}
</tbody>
</table>
</div>
{% endfor %}
</div>

View File

@ -1,52 +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 date-column">
{% 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 %}
<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>
{% 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.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,52 +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 date-column">
{% 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 %}
<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>
{% 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.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,32 +0,0 @@
{% 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);
}
gtag('js', new Date());
gtag('config', '{{ site.google_analytics }}');
</script>
{% 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);
};
cronitor('config', { clientKey: '{{site.cronitor_analytics}}' });
</script>
{% endif %}
{% if site.enable_pirsch_analytics %}
<script
defer
src="https://api.pirsch.io/pa.js"
id="pianjs"
data-code="{{ site.pirsch_analytics }}"
></script>
{% endif %}

View File

@ -1,6 +0,0 @@
{% if site.back_to_top %}
<script src="{{ '/assets/js/vanilla-back-to-top.min.js' | relative_url | bust_file_cache }}"></script>
<script>
addBackToTop();
</script>
{% endif %}

View File

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

View File

@ -1,8 +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="{{ site.third_party_libraries.mdb.url.js }}"
integrity="{{ site.third_party_libraries.mdb.integrity.js }}"
crossorigin="anonymous"
></script>

View File

@ -1,24 +0,0 @@
{% if page.chart and page.chart.chartjs %}
<script
defer
src="{{ site.third_party_libraries.chartjs.url.js }}"
integrity="{{ site.third_party_libraries.chartjs.integrity.js }}"
crossorigin="anonymous"
></script>
<script>
$(document).ready(function () {
var $canvas = null,
$this = null,
_ctx = null,
_text = '';
$('.language-chartjs').each(function () {
$this = $(this);
$canvas = $('<canvas></canvas>');
_text = $this.text();
$this.text('').append($canvas);
_ctx = $canvas.get(0).getContext('2d');
_ctx && _text && new Chart(_ctx, JSON.parse(_text)) && $this.attr('data-processed', true);
});
});
</script>
{% endif %}

View File

@ -1,30 +0,0 @@
{% if page.code_diff %}
<!-- diff2html doesn't go well with Bootstrap Table -->
<script
src="{{ site.third_party_libraries.diff2html.url.js }}"
integrity="{{ site.third_party_libraries.diff2html.integrity.js }}"
crossorigin="anonymous"
></script>
<script>
let diff2HtmlTheme = determineComputedTheme();
/* Create diff2html as another node and hide the code block, appending the diff2html node after it
this is done to enable retrieving the code again when changing theme between light/dark */
document.addEventListener('readystatechange', () => {
if (document.readyState === 'complete') {
document.querySelectorAll('pre>code.language-diff2html').forEach((elem) => {
const textData = elem.textContent;
const backup = elem.parentElement;
backup.classList.add('unloaded');
/* create diff node */
let diffElement = document.createElement('div');
diffElement.classList.add('diff2html');
backup.after(diffElement);
const configuration = { colorScheme: diff2HtmlTheme, drawFileList: true, highlight: true, matching: 'lines' };
const diff2htmlUi = new Diff2HtmlUI(diffElement, textData, configuration);
diff2htmlUi.draw();
});
}
});
</script>
{% endif %}

View File

@ -1,45 +0,0 @@
{% if page.chart and page.chart.echarts %}
<script
src="{{ site.third_party_libraries.echarts.url.js.library }}"
integrity="{{ site.third_party_libraries.echarts.integrity.js.library }}"
crossorigin="anonymous"
></script>
{% if site.enable_darkmode %}
<script
src="{{ site.third_party_libraries.echarts.url.js.dark_theme }}"
integrity="{{ site.third_party_libraries.echarts.integrity.js.dark_theme }}"
crossorigin="anonymous"
></script>
{% endif %}
<script>
let echartsTheme = determineComputedTheme();
/* Create echarts chart as another node and hide the code block, appending the echarts node after it
this is done to enable retrieving the code again when changing theme between light/dark */
document.addEventListener('readystatechange', () => {
if (document.readyState === 'complete') {
document.querySelectorAll('pre>code.language-echarts').forEach((elem) => {
const jsonData = elem.textContent;
const backup = elem.parentElement;
backup.classList.add('unloaded');
/* create echarts node */
let chartElement = document.createElement('div');
chartElement.classList.add('echarts');
backup.after(chartElement);
/* create echarts */
if (echartsTheme === 'dark') {
var chart = echarts.init(chartElement, 'dark-fresh-cut');
} else {
var chart = echarts.init(chartElement);
}
chart.setOption(JSON.parse(jsonData));
window.addEventListener('resize', function () {
chart.resize();
});
});
}
});
</script>
{% endif %}

View File

@ -1,18 +0,0 @@
{% if page.images %}
{% if page.images.compare %}
<script
defer
src="{{ site.third_party_libraries.img-comparison-slider.url.js }}"
integrity="{{ site.third_party_libraries.img-comparison-slider.integrity.js }}"
crossorigin="anonymous"
></script>
{% endif %}
{% if page.images.slider %}
<script
defer
src="{{ site.third_party_libraries.swiper.url.js }}"
integrity="{{ site.third_party_libraries.swiper.integrity.js }}"
crossorigin="anonymous"
></script>
{% endif %}
{% endif %}

View File

@ -1,3 +0,0 @@
{% if page.tabs %}
<script src="{{ '/assets/js/tabs.min.js' | relative_url | bust_file_cache }}"></script>
{% endif %}

View File

@ -1,6 +0,0 @@
<!-- jQuery -->
<script
src="{{ site.third_party_libraries.jquery.url.js }}"
integrity="{{ site.third_party_libraries.jquery.integrity.js }}"
crossorigin="anonymous"
></script>

View File

@ -1,31 +0,0 @@
{% if page.map %}
<script
src="{{ site.third_party_libraries.leaflet.url.js }}"
integrity="{{ site.third_party_libraries.leaflet.integrity.js }}"
crossorigin="anonymous"
></script>
<script>
/* Create leaflet map as another node and hide the code block, appending the leaflet node after it */
document.addEventListener('readystatechange', () => {
if (document.readyState === 'complete') {
document.querySelectorAll('pre>code.language-geojson').forEach((elem) => {
const jsonData = elem.textContent;
const backup = elem.parentElement;
backup.classList.add('unloaded');
/* create leaflet node */
let mapElement = document.createElement('div');
mapElement.classList.add('map');
backup.after(mapElement);
var map = L.map(mapElement);
L.tileLayer('https://tile.openstreetmap.org/{z}/{x}/{y}.png', {
maxZoom: 19,
attribution: '&copy; <a href="http://www.openstreetmap.org/copyright">OpenStreetMap</a>',
}).addTo(map);
let geoJSON = L.geoJSON(JSON.parse(jsonData)).addTo(map);
map.fitBounds(geoJSON.getBounds());
});
}
});
</script>
{% endif %}

View File

@ -1,16 +0,0 @@
{% if site.enable_masonry %}
<!-- Masonry & imagesLoaded -->
<script
defer
src="{{ site.third_party_libraries.masonry.url.js }}"
integrity="{{ site.third_party_libraries.masonry.integrity.js }}"
crossorigin="anonymous"
></script>
<script
defer
src="{{ site.third_party_libraries.imagesloaded.url.js }}"
integrity="{{ site.third_party_libraries.imagesloaded.integrity.js }}"
crossorigin="anonymous"
></script>
<script defer src="{{ '/assets/js/masonry.js' | relative_url }}" type="text/javascript"></script>
{% endif %}

View File

@ -1,25 +0,0 @@
{% if site.enable_math %}
{% unless page.pseudocode %}
<!-- MathJax -->
<script type="text/javascript">
window.MathJax = {
tex: {
tags: 'ams',
},
};
</script>
<script
defer
type="text/javascript"
id="MathJax-script"
src="{{ site.third_party_libraries.mathjax.url.js }}"
integrity="{{ site.third_party_libraries.mathjax.integrity.js }}"
crossorigin="anonymous"
></script>
<script
defer
src="{{ site.third_party_libraries.polyfill.url.js }}"
crossorigin="anonymous"
></script>
{% endunless %}
{% endif %}

View File

@ -1,55 +0,0 @@
{% if page.mermaid and page.mermaid.enabled %}
<script
defer
src="{{ site.third_party_libraries.mermaid.url.js }}"
integrity="{{ site.third_party_libraries.mermaid.integrity.js }}"
crossorigin="anonymous"
></script>
{% if page.mermaid.zoomable %}
<script
defer
src="{{ site.third_party_libraries.d3.url.js }}"
integrity="{{ site.third_party_libraries.d3.integrity.js }}"
crossorigin="anonymous"
></script>
{% endif %}
<script>
let mermaidTheme = determineComputedTheme();
/* 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 */
document.addEventListener('readystatechange', () => {
if (document.readyState === 'complete') {
document.querySelectorAll('pre>code.language-mermaid').forEach((elem) => {
const svgCode = elem.textContent;
const backup = elem.parentElement;
backup.classList.add('unloaded');
/* create mermaid node */
let mermaid = document.createElement('pre');
mermaid.classList.add('mermaid');
const text = document.createTextNode(svgCode);
mermaid.appendChild(text);
backup.after(mermaid);
});
mermaid.initialize({ theme: mermaidTheme });
/* Zoomable mermaid diagrams */
if (typeof d3 !== 'undefined') {
window.addEventListener('load', function () {
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.call(zoom);
});
});
}
}
});
</script>
{% endif %}

View File

@ -1,43 +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="{{ site.third_party_libraries.medium_zoom.url.js }}"
integrity="{{ site.third_party_libraries.medium_zoom.integrity.js }}"
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 -->
{% if page.pretty_table %}
<!-- Bootstrap Table doesn't go well with diff2html -->
<script
defer
src="{{ site.third_party_libraries.bootstrap-table.url.js }}"
integrity="{{ site.third_party_libraries.bootstrap-table.integrity.js }}"
crossorigin="anonymous"
></script>
{% endif %}
<!-- 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>
<!-- Jupyter Open External Links New Tab -->
<script defer src="{{ '/assets/js/jupyter_new_tab.js' | relative_url | bust_file_cache }}"></script>
{% assign site.test-library.url = site.test-library.url | append: 'teste' %}

View File

@ -1,176 +0,0 @@
<div
class="newsletter-form-container"
{% if include.center %}
style="margin: 20px"
{% endif %}
>
<form
class="newsletter-form"
action="https://app.loops.so/api/newsletter-form/{{ site.newsletter.endpoint }}"
method="POST"
style="justify-content: {% if include.left %}flex-start{% elsif include.right %}flex-end{% else %}center{% endif %}"
>
<input
class="newsletter-form-input"
name="newsletter-form-input"
type="email"
placeholder="user@example.com"
required=""
>
<button
type="submit"
class="newsletter-form-button"
style="justify-content: {% if include.left %}flex-start{% elsif include.right %}flex-end{% else %}center{% endif %}"
>
subscribe
</button>
<button
type="button"
class="newsletter-loading-button"
style="justify-content: {% if include.left %}flex-start{% elsif include.right %}flex-end{% else %}center{% endif %}"
>
Please wait...
</button>
</form>
<div
class="newsletter-success"
style="justify-content: {% if include.left %}flex-start{% elsif include.right %}flex-end{% else %}center{% endif %}"
>
<p class="newsletter-success-message">You're subscribed!</p>
</div>
<div
class="newsletter-error"
style="justify-content: {% if include.left %}flex-start{% elsif include.right %}flex-end{% else %}center{% endif %}"
>
<p class="newsletter-error-message">Oops! Something went wrong, please try again</p>
</div>
<button
class="newsletter-back-button"
type="button"
onmouseout='this.style.textDecoration="none"'
onmouseover='this.style.textDecoration="underline"'
>
&larr; Back
</button>
</div>
<script>
function submitHandler(event) {
event.preventDefault();
var container = event.target.parentNode;
var form = container.querySelector('.newsletter-form');
var formInput = container.querySelector('.newsletter-form-input');
var success = container.querySelector('.newsletter-success');
var errorContainer = container.querySelector('.newsletter-error');
var errorMessage = container.querySelector('.newsletter-error-message');
var backButton = container.querySelector('.newsletter-back-button');
var submitButton = container.querySelector('.newsletter-form-button');
var loadingButton = container.querySelector('.newsletter-loading-button');
const rateLimit = () => {
errorContainer.style.display = 'flex';
errorMessage.innerText = 'Too many signups, please try again in a little while';
submitButton.style.display = 'none';
formInput.style.display = 'none';
backButton.style.display = 'block';
};
// Compare current time with time of previous sign up
var time = new Date();
var timestamp = time.valueOf();
var previousTimestamp = localStorage.getItem('loops-form-timestamp');
// If last sign up was less than a minute ago
// display error
if (previousTimestamp && Number(previousTimestamp) + 60000 > timestamp) {
rateLimit();
return;
}
localStorage.setItem('loops-form-timestamp', timestamp);
submitButton.style.display = 'none';
loadingButton.style.display = 'flex';
var formBody = 'userGroup=&email=' + encodeURIComponent(formInput.value);
fetch(event.target.action, {
method: 'POST',
body: formBody,
headers: {
'Content-Type': 'application/x-www-form-urlencoded',
},
})
.then((res) => [res.ok, res.json(), res])
.then(([ok, dataPromise, res]) => {
if (ok) {
// If response successful
// display success
success.style.display = 'flex';
form.reset();
} else {
// If response unsuccessful
// display error message or response status
dataPromise.then((data) => {
errorContainer.style.display = 'flex';
errorMessage.innerText = data.message ? data.message : res.statusText;
});
}
})
.catch((error) => {
// check for cloudflare error
if (error.message === 'Failed to fetch') {
rateLimit();
return;
}
// If error caught
// display error message if available
errorContainer.style.display = 'flex';
if (error.message) errorMessage.innerText = error.message;
localStorage.setItem('loops-form-timestamp', '');
})
.finally(() => {
formInput.style.display = 'none';
loadingButton.style.display = 'none';
backButton.style.display = 'block';
});
}
function resetFormHandler(event) {
var container = event.target.parentNode;
var formInput = container.querySelector('.newsletter-form-input');
var success = container.querySelector('.newsletter-success');
var errorContainer = container.querySelector('.newsletter-error');
var errorMessage = container.querySelector('.newsletter-error-message');
var backButton = container.querySelector('.newsletter-back-button');
var submitButton = container.querySelector('.newsletter-form-button');
success.style.display = 'none';
errorContainer.style.display = 'none';
errorMessage.innerText = 'Oops! Something went wrong, please try again';
backButton.style.display = 'none';
formInput.style.display = 'flex';
submitButton.style.display = 'flex';
}
var formContainers = document.getElementsByClassName('newsletter-form-container');
for (var i = 0; i < formContainers.length; i++) {
var formContainer = formContainers[i];
var handlersAdded = formContainer.classList.contains('newsletter-handlers-added');
if (handlersAdded) continue;
formContainer.querySelector('.newsletter-form').addEventListener('submit', submitHandler);
formContainer.querySelector('.newsletter-back-button').addEventListener('click', resetFormHandler);
formContainer.classList.add('newsletter-handlers-added');
}
</script>
<noscript>
<style>
.newsletter-form-container {
display: none;
}
</style>
</noscript>

View File

@ -1,78 +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

@ -1,52 +0,0 @@
{% if site.enable_math and page.pseudocode %}
<!-- MathJax -->
<script type="text/javascript">
window.MathJax = {
tex: {
inlineMath: [
['$', '$'],
['\\(', '\\)'],
],
displayMath: [
['$$', '$$'],
['\\[', '\\]'],
],
processEscapes: true,
processEnvironments: true,
},
};
</script>
<script
type="text/javascript"
id="MathJax-script"
src="{{ site.third_party_libraries.mathjax.url.js }}"
integrity="{{ site.third_party_libraries.mathjax.integrity.js }}"
crossorigin="anonymous"
></script>
<script
type="text/javascript"
src="{{ site.third_party_libraries.pseudocode.url.js }}"
integrity="{{ site.third_party_libraries.pseudocode.integrity.js }}"
crossorigin="anonymous"
></script>
<script>
document.addEventListener('readystatechange', () => {
if (document.readyState === 'complete') {
document.querySelectorAll('pre>code.language-pseudocode').forEach((elem) => {
const texData = elem.textContent;
const parent = elem.parentElement.parentElement;
/* create pseudocode node */
let pseudoCodeElement = document.createElement('pre');
pseudoCodeElement.classList.add('pseudocode');
const text = document.createTextNode(texData);
pseudoCodeElement.appendChild(text);
/* add pseudocode node and remove the original code block */
parent.appendChild(pseudoCodeElement);
parent.removeChild(elem.parentElement);
/* embed the visualization in the container */
pseudocode.renderElement(pseudoCodeElement);
});
}
});
</script>
{% endif %}

View File

@ -1,579 +0,0 @@
{% if site.search_enabled %}
<script type="module" src="{{ '/assets/js/search/ninja-keys.min.js' | relative_url | bust_file_cache }}"></script>
<ninja-keys hideBreadcrumbs noAutoLoadMdIcons placeholder="Type to start searching"></ninja-keys>
<script>
let searchTheme = determineComputedTheme();
const ninjaKeys = document.querySelector('ninja-keys');
if (searchTheme === 'dark') {
ninjaKeys.classList.add('dark');
} else {
ninjaKeys.classList.remove('dark');
}
const openSearchModal = () => {
// collapse navbarNav if expanded on mobile
const $navbarNav = $('#navbarNav');
if ($navbarNav.hasClass('show')) {
$navbarNav.collapse('hide');
}
ninjaKeys.open();
};
</script>
<script>
// get the ninja-keys element
const ninja = document.querySelector('ninja-keys');
// add the home and posts menu items
ninja.data = [
{%- for page in site.pages -%}
{%- if page.permalink == '/' -%}{%- assign about_title = page.title | strip -%}{%- endif -%}
{%- endfor -%}
{
id: "nav-{{ about_title | slugify }}",
title: "{{ about_title | truncatewords: 13 }}",
section: "Navigation",
handler: () => {
window.location.href = "{{ '/' | relative_url }}";
},
},
{%- assign sorted_pages = site.pages | sort: "nav_order" -%}
{%- for p in sorted_pages -%}
{%- if p.nav and p.autogen == null -%}
{%- if p.dropdown -%}
{%- for child in p.children -%}
{%- unless child.title == 'divider' -%}
{
{%- assign title = child.title | escape | strip -%}
{%- if child.permalink contains "/blog/" -%}{%- assign url = "/blog/" -%} {%- else -%}{%- assign url = child.url -%}{%- endif -%}
id: "dropdown-{{ title | slugify }}",
title: "{{ title | truncatewords: 13 }}",
description: "{{ child.description | strip_html | strip_newlines | escape | strip }}",
section: "Dropdown",
handler: () => {
window.location.href = "{{ url | relative_url }}";
},
},
{%- endunless -%}
{%- endfor -%}
{%- else -%}
{
{%- assign title = p.title | escape | strip -%}
{%- if p.permalink contains "/blog/" -%}{%- assign url = "/blog/" -%} {%- else -%}{%- assign url = p.url -%}{%- endif -%}
id: "nav-{{ title | slugify }}",
title: "{{ title | truncatewords: 13 }}",
description: "{{ p.description | strip_html | strip_newlines | escape | strip }}",
section: "Navigation",
handler: () => {
window.location.href = "{{ url | relative_url }}";
},
},
{%- endif -%}
{%- endif -%}
{%- endfor -%}
{%- for post in site.posts -%}
{
{%- assign title = post.title | escape | strip -%}
id: "post-{{ title | slugify }}",
{% if post.redirect == blank %}
title: "{{ title | truncatewords: 13 }}",
{% elsif post.redirect contains '://' %}
title: '{{ title | truncatewords: 13 }} <svg width="1.2rem" height="1.2rem" top=".5rem" 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 %}
title: "{{ title | truncatewords: 13 }}",
{% endif %}
description: "{{ post.description | strip_html | strip_newlines | escape | strip }}",
section: "Posts",
handler: () => {
{% if post.redirect == blank %}
window.location.href = "{{ post.url | relative_url }}";
{% elsif post.redirect contains '://' %}
window.open("{{ post.redirect }}", "_blank");
{% else %}
window.location.href = "{{ post.redirect | relative_url }}";
{% endif %}
},
},
{%- endfor -%}
{%- for collection in site.collections -%}
{%- if collection.label != 'posts' -%}
{%- for item in collection.docs -%}
{
{%- if item.inline -%}
{%- assign title = item.content | newline_to_br | replace: "<br />", " " | replace: "<br/>", " " | strip_html | strip_newlines | escape | strip -%}
{%- else -%}
{%- assign title = item.title | newline_to_br | replace: "<br />", " " | replace: "<br/>", " " | strip_html | strip_newlines | escape | strip -%}
{%- endif -%}
id: "{{ collection.label }}-{{ title | slugify }}",
title: '{{ title | emojify | truncatewords: 13 }}',
description: "{{ item.description | strip_html | strip_newlines | escape | strip }}",
section: "{{ collection.label | capitalize }}",
{%- unless item.inline -%}
handler: () => {
window.location.href = "{{ item.url | relative_url }}";
},
{%- endunless -%}
},
{%- endfor -%}
{%- endif -%}
{%- endfor -%}
{%- if site.socials_in_search -%}
{%- if site.email -%}
{
id: 'socials-email',
title: 'Send email',
section: 'Socials',
handler: () => {
window.open("mailto:{{ site.email | encode_email }}", "_blank");
},
},
{%- endif -%}
{%- if site.telegram_username -%}
{
id: 'socials-telegram',
title: 'Telegram',
section: 'Socials',
handler: () => {
window.open("https://telegram.me/{{ site.telegram_username }}", "_blank");
},
},
{%- endif -%}
{%- if site.whatsapp_number -%}
{
id: 'socials-whatsapp',
title: 'WhatsApp',
section: 'Socials',
handler: () => {
window.open("https://wa.me/{{ site.whatsapp_number }}", "_blank");
},
},
{%- endif -%}
{%- if site.orcid_id -%}
{
id: 'socials-orcid',
title: 'ORCID',
section: 'Socials',
handler: () => {
window.open("https://orcid.org/{{ site.orcid_id }}", "_blank");
},
},
{%- endif -%}
{%- if site.scholar_userid -%}
{
id: 'socials-google-scholar',
title: 'Google Scholar',
section: 'Socials',
handler: () => {
window.open("https://scholar.google.com/citations?user={{ site.scholar_userid }}", "_blank");
},
},
{%- endif -%}
{%- if site.semanticscholar_id -%}
{
id: 'socials-semantic-scholar',
title: 'Semantic Scholar',
section: 'Socials',
handler: () => {
window.open("https://www.semanticscholar.org/author/{{ site.semanticscholar_id }}", "_blank");
},
},
{%- endif -%}
{%- if site.publons_id -%}
{
id: 'socials-publons',
title: 'Publons',
section: 'Socials',
handler: () => {
window.open("https://publons.com/a/{{ site.publons_id }}/", "_blank");
},
},
{%- endif -%}
{%- if site.lattes_id -%}
{
id: 'socials-lattes',
title: 'Lattes',
section: 'Socials',
handler: () => {
window.open("http://lattes.cnpq.br/{{ site.lattes_id }}", "_blank");
},
},
{%- endif -%}
{%- if site.osf_id -%}
{
id: 'socials-open-science-framework',
title: 'Open Science Framework',
section: 'Socials',
handler: () => {
window.open("https://osf.io/{{ site.osf_id }}/", "_blank");
},
},
{%- endif -%}
{%- if site.research_gate_profile -%}
{
id: 'socials-researchgate',
title: 'ResearchGate',
section: 'Socials',
handler: () => {
window.open("https://www.researchgate.net/profile/{{site.research_gate_profile}}/", "_blank");
},
},
{%- endif -%}
{%- if site.ieee_id -%}
{
id: 'socials-ieee-xplore',
title: 'IEEE Xplore',
section: 'Socials',
handler: () => {
window.open("https://ieeexplore.ieee.org/author/{{site.ieee_id}}/", "_blank");
},
},
{%- endif -%}
{%- if site.acm_id -%}
{
id: 'socials-acm-dl',
title: 'ACM DL',
section: 'Socials',
handler: () => {
window.open("https://dl.acm.org/profile/{{site.acm_id}}/", "_blank");
},
},
{%- endif -%}
{%- if site.scopus_id -%}
{
id: 'socials-scopus',
title: 'Scopus',
section: 'Socials',
handler: () => {
window.open("https://www.scopus.com/authid/detail.uri?authorId={{site.scopus_id}}", "_blank");
},
},
{%- endif -%}
{%- if site.github_username -%}
{
id: 'socials-github',
title: 'GitHub',
section: 'Socials',
handler: () => {
window.open("https://github.com/{{ site.github_username }}", "_blank");
},
},
{%- endif -%}
{%- if site.linkedin_username -%}
{
id: 'socials-linkedin',
title: 'LinkedIn',
section: 'Socials',
handler: () => {
window.open("https://www.linkedin.com/in/{{ site.linkedin_username }}", "_blank");
},
},
{%- endif -%}
{%- if site.x_username -%}
{
id: 'socials-x',
title: 'X',
description: 'Twitter',
section: 'Socials',
handler: () => {
window.open("https://twitter.com/{{ site.x_username }}", "_blank");
},
},
{%- endif -%}
{%- if site.mastodon_username -%}
{
id: 'socials-mastodon',
title: 'Mastodon',
section: 'Socials',
handler: () => {
window.open("https://{{ site.mastodon_username }}", "_blank");
},
},
{%- endif -%}
{%- if site.medium_username -%}
{
id: 'socials-medium',
title: 'Medium',
section: 'Socials',
handler: () => {
window.open("https://medium.com/@{{ site.medium_username }}", "_blank");
},
},
{%- endif -%}
{%- if site.quora_username -%}
{
id: 'socials-quora',
title: 'Quora',
section: 'Socials',
handler: () => {
window.open("https://www.quora.com/profile/{{ site.quora_username }}", "_blank");
},
},
{%- endif -%}
{%- if site.flickr_id -%}
{
id: 'socials-flickr',
title: 'Flickr',
section: 'Socials',
handler: () => {
window.open("https://www.flickr.com/{{ site.flickr_id }}", "_blank");
},
},
{%- endif -%}
{%- if site.blogger_url -%}
{
id: 'socials-blogger',
title: 'Blogger',
section: 'Socials',
handler: () => {
window.open("{{ site.blogger_url }}", "_blank");
},
},
{%- endif -%}
{%- if site.work_url -%}
{
id: 'socials-work',
title: 'Work',
section: 'Socials',
handler: () => {
window.open("{{ site.work_url }}", "_blank");
},
},
{%- endif -%}
{%- if site.wikidata_id -%}
{
id: 'socials-wikidata',
title: 'Wikidata',
section: 'Socials',
handler: () => {
window.open("https://www.wikidata.org/wiki/{{ site.wikidata_id }}", "_blank");
},
},
{%- endif -%}
{%- if site.wikipedia_id -%}
{
id: 'socials-wikipedia',
title: 'Wikipedia',
section: 'Socials',
handler: () => {
window.open("https://wikipedia.org/wiki/User:{{ site.wikipedia_id }}", "_blank");
},
},
{%- endif -%}
{%- if site.strava_userid -%}
{
id: 'socials-strava',
title: 'Strava',
section: 'Socials',
handler: () => {
window.open("https://www.strava.com/athletes/{{ site.strava_userid }}", "_blank");
},
},
{%- endif -%}
{%- if site.keybase_username -%}
{
id: 'socials-keybase',
title: 'Keybase',
section: 'Socials',
handler: () => {
window.open("https://keybase.io/{{ site.keybase_username }}", "_blank");
},
},
{%- endif -%}
{%- if site.gitlab_username -%}
{
id: 'socials-gitlab',
title: 'GitLab',
section: 'Socials',
handler: () => {
window.open("https://gitlab.com/{{ site.gitlab_username }}", "_blank");
},
},
{%- endif -%}
{%- if site.dblp_url -%}
{
id: 'socials-dblp',
title: 'DBLP',
section: 'Socials',
handler: () => {
window.open("{{ site.dblp_url }}", "_blank");
},
},
{%- endif -%}
{%- if site.stackoverflow_id -%}
{
id: 'socials-stackoverflow',
title: 'Stackoverflow',
section: 'Socials',
handler: () => {
window.open("https://stackoverflow.com/users/{{ site.stackoverflow_id }}", "_blank");
},
},
{%- endif -%}
{%- if site.kaggle_id -%}
{
id: 'socials-kaggle',
title: 'Kaggle',
section: 'Socials',
handler: () => {
window.open("https://www.kaggle.com/{{ site.kaggle_id }}", "_blank");
},
},
{%- endif -%}
{%- if site.lastfm_id -%}
{
id: 'socials-last-fm',
title: 'Last FM',
section: 'Socials',
handler: () => {
window.open("https://www.last.fm/user/{{ site.lastfm_id }}", "_blank");
},
},
{%- endif -%}
{%- if site.spotify_id -%}
{
id: 'socials-spotify',
title: 'Spotify',
section: 'Socials',
handler: () => {
window.open("https://open.spotify.com/user/{{ site.spotify_id }}", "_blank");
},
},
{%- endif -%}
{%- if site.pinterest_id -%}
{
id: 'socials-pinterest',
title: 'Pinterest',
section: 'Socials',
handler: () => {
window.open("https://www.pinterest.com/{{ site.pinterest_id }}", "_blank");
},
},
{%- endif -%}
{%- if site.unsplash_id -%}
{
id: 'socials-unsplash',
title: 'Unsplash',
section: 'Socials',
handler: () => {
window.open("https://unsplash.com/@{{ site.unsplash_id }}", "_blank");
},
},
{%- endif -%}
{%- if site.instagram_id -%}
{
id: 'socials-instagram',
title: 'Instagram',
section: 'Socials',
handler: () => {
window.open("https://instagram.com/{{ site.instagram_id }}", "_blank");
},
},
{%- endif -%}
{%- if site.facebook_id -%}
{
id: 'socials-facebook',
title: 'Facebook',
section: 'Socials',
handler: () => {
window.open("https://facebook.com/{{ site.facebook_id }}", "_blank");
},
},
{%- endif -%}
{%- if site.bluesky_url -%}
{
id: 'socials-bluesky',
title: 'Bluesky',
section: 'Socials',
handler: () => {
window.open("https://bsky.app/profile/{{ site.bluesky_url }}", "_blank");
},
},
{%- endif -%}
{%- if site.youtube_id -%}
{
id: 'socials-youtube',
title: 'YouTube',
section: 'Socials',
handler: () => {
window.open("https://youtube.com/@{{ site.youtube_id }}", "_blank");
},
},
{%- endif -%}
{%- if site.discord_id -%}
{
id: 'socials-discord',
title: 'Discord',
section: 'Socials',
handler: () => {
window.open("https://discord.com/users/{{ site.discord_id }}", "_blank");
},
},
{%- endif -%}
{%- if site.zotero_username -%}
{
id: 'socials-zotero',
title: 'Zotero',
section: 'Socials',
handler: () => {
window.open("https://www.zotero.org/{{ site.zotero_username }}", "_blank");
},
},
{%- endif -%}
{%- if site.rss_icon -%}
{
id: 'socials-rss',
title: 'RSS Feed',
section: 'Socials',
handler: () => {
window.open("{{ site.baseurl }}/feed.xml", "_blank");
},
},
{%- endif -%}
{%- comment -%}
{%- if site.wechat_qr -%}
// check how to add wechat qr code
{
id: 'socials-wechat',
title: 'WeChat',
section: 'Socials',
handler: () => {
window.open("", "_blank");
},
},
{%- endif -%}
{%- endcomment -%}
{%- endif -%}
{%- if site.enable_darkmode -%}
{
id: 'light-theme',
title: 'Change theme to light',
description: 'Change the theme of the site to Light',
section: 'Theme',
handler: () => {
setThemeSetting("light");
},
},
{
id: 'dark-theme',
title: 'Change theme to dark',
description: 'Change the theme of the site to Dark',
section: 'Theme',
handler: () => {
setThemeSetting("dark");
},
},
{
id: 'system-theme',
title: 'Use system default theme',
description: 'Change the theme of the site to System Default',
section: 'Theme',
handler: () => {
setThemeSetting("system");
},
},
{%- endif -%}
];
</script>
<script src="{{ '/assets/js/shortcut-key.js' | relative_url | bust_file_cache }}"></script>
{% endif %}

View File

@ -1,8 +0,0 @@
{% if page.tikzjax %}
<script
defer
src="https://tikzjax.com/v1/tikzjax.js"
integrity="sha256-+1qyucCXRZJrCg3lm3KxRt/7WXaYhBid4/1XJRHGB1E="
crossorigin="anonymous"
></script>
{% endif %}

View File

@ -1,23 +0,0 @@
{% if page.typograms %}
<script src="{{ '/assets/js/typograms.js' | relative_url | bust_file_cache }}"></script>
<script>
/* Create typogram as another node and hide the code block, appending the typogram node after it
this is done to enable retrieving the code again when changing theme between light/dark */
document.addEventListener('readystatechange', () => {
if (document.readyState === 'complete') {
document.querySelectorAll('pre>code.language-typograms').forEach((elem) => {
const texData = elem.textContent;
const parent = elem.parentElement.parentElement;
/* create typograms node */
let typogram = document.createElement('pre');
typogram.classList.add('typogram');
const svg = create('\n' + texData, 0.3, false);
typogram.appendChild(svg);
parent.appendChild(typogram);
parent.removeChild(elem.parentElement);
});
}
});
</script>
{% endif %}

View File

@ -1,47 +0,0 @@
{% if page.chart and page.chart.vega_lite %}
<script
defer
src="{{ site.third_party_libraries.vega.url.js }}"
integrity="{{ site.third_party_libraries.vega.integrity.js }}"
crossorigin="anonymous"
></script>
<script
defer
src="{{ site.third_party_libraries.vega-lite.url.js }}"
integrity="{{ site.third_party_libraries.vega-lite.integrity.js }}"
crossorigin="anonymous"
></script>
<script
defer
src="{{ site.third_party_libraries.vega-embed.url.js }}"
integrity="{{ site.third_party_libraries.vega-embed.integrity.js }}"
crossorigin="anonymous"
></script>
<script>
let vegaTheme = determineComputedTheme();
/* Create vega lite chart as another node and hide the code block, appending the vega lite node after it
this is done to enable retrieving the code again when changing theme between light/dark */
document.addEventListener('readystatechange', () => {
if (document.readyState === 'complete') {
document.querySelectorAll('pre>code.language-vega_lite').forEach((elem) => {
const jsonData = elem.textContent;
const backup = elem.parentElement;
backup.classList.add('unloaded');
/* create vega lite node */
let chartElement = document.createElement('div');
chartElement.classList.add('vega-lite');
backup.after(chartElement);
/* Embed the visualization in the container */
if (vegaTheme === 'dark') {
vegaEmbed(chartElement, JSON.parse(jsonData), { theme: 'dark' });
} else {
vegaEmbed(chartElement, JSON.parse(jsonData));
}
});
}
});
</script>
{% endif %}

View File

@ -1,18 +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

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

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