diff --git a/.all-contributorsrc b/.all-contributorsrc index bc6a9103f7ea..99b43da46864 100644 --- a/.all-contributorsrc +++ b/.all-contributorsrc @@ -1,7 +1,5 @@ { - "files": [ - "README.md" - ], + "files": ["README.md"], "imageSize": 100, "commit": false, "contributorsPerLine": 7, @@ -18,28 +16,29 @@ "name": "Maruan", "avatar_url": "https://avatars.githubusercontent.com/u/2126561?v=4", "profile": "http://maruan.alshedivat.com", - "contributions": [ - "design", - "code" - ] + "contributions": ["design", "code"] }, { "login": "rohandebsarkar", "name": "Rohan Deb Sarkar", "avatar_url": "https://avatars.githubusercontent.com/u/50144004?v=4", "profile": "http://rohandebsarkar.github.io", - "contributions": [ - "code" - ] + "contributions": ["code"] }, { "login": "pourmand1376", "name": "Amir Pourmand", "avatar_url": "https://avatars.githubusercontent.com/u/32064808?v=4", "profile": "https://amirpourmand.ir", - "contributions": [ - "code" - ] + "contributions": ["code"] + }, + { + "login": "george-gca", + "name": "George", + "avatar_url": "https://avatars.githubusercontent.com/u/31376482?v=4", + "profile": "https://george-gca.github.io/", + "contributions": ["code"] } - ] + ], + "commitConvention": "angular" } diff --git a/.dockerignore b/.dockerignore new file mode 100644 index 000000000000..7e826743e5e2 --- /dev/null +++ b/.dockerignore @@ -0,0 +1,3 @@ +_site/ +.git/ +assets/ diff --git a/.git-blame-ignore-revs b/.git-blame-ignore-revs new file mode 100644 index 000000000000..691dff408f11 --- /dev/null +++ b/.git-blame-ignore-revs @@ -0,0 +1,24 @@ +# 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 diff --git a/.github/FUNDING.yml b/.github/FUNDING.yml deleted file mode 100644 index c78502f480c8..000000000000 --- a/.github/FUNDING.yml +++ /dev/null @@ -1,12 +0,0 @@ -# These are supported funding model platforms - -github: # Replace with up to 4 GitHub Sponsors-enabled usernames e.g., [user1, user2] -patreon: # Replace with a single Patreon username -open_collective: # Replace with a single Open Collective username -ko_fi: alshedivat -tidelift: # Replace with a single Tidelift platform-name/package-name e.g., npm/babel -community_bridge: # Replace with a single Community Bridge project-name e.g., cloud-foundry -liberapay: # Replace with a single Liberapay username -issuehunt: # Replace with a single IssueHunt username -otechie: # Replace with a single Otechie username -custom: # ['https://www.buymeacoffee.com/TkFxuKo'] diff --git a/.github/ISSUE_TEMPLATE/1_bug_report.yml b/.github/ISSUE_TEMPLATE/1_bug_report.yml new file mode 100644 index 000000000000..96ec317e50b3 --- /dev/null +++ b/.github/ISSUE_TEMPLATE/1_bug_report.yml @@ -0,0 +1,101 @@ +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!**" diff --git a/.github/ISSUE_TEMPLATE/2_feature_request.yml b/.github/ISSUE_TEMPLATE/2_feature_request.yml new file mode 100644 index 000000000000..36c218062a1d --- /dev/null +++ b/.github/ISSUE_TEMPLATE/2_feature_request.yml @@ -0,0 +1,56 @@ +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 diff --git a/.github/ISSUE_TEMPLATE/bug_report.md b/.github/ISSUE_TEMPLATE/bug_report.md deleted file mode 100644 index 511f585150ba..000000000000 --- a/.github/ISSUE_TEMPLATE/bug_report.md +++ /dev/null @@ -1,38 +0,0 @@ ---- -name: Bug report -about: Create a report to help us improve -title: '' -labels: bug -assignees: '' - ---- - -**Acknowledge the following** -- [ ] I carefully read and followed the [Getting Started](https://github.com/alshedivat/al-folio#getting-started) guide. -- [ ] I read through [FAQ](https://github.com/alshedivat/al-folio#faq) and searched through the [past issues](https://github.com/alshedivat/al-folio/issues), none of which addressed my issue. -- [ ] The issue I am raising is a potential bug in al-folio and not just a usage question.
[For usage questions, please post in the [Discussions](https://github.com/alshedivat/al-folio/discussions) instead of raising an issue.] - -**Describe the bug** -A clear and concise description of what the bug is. - -**To Reproduce** -Steps to reproduce the behavior: -1. Go to '...' -2. Click on '....' -3. Scroll down to '....' -4. See error - -**Expected behavior** -A clear and concise description of what you expected to happen. - -**Screenshots** -If applicable, add screenshots to help explain your problem. - -**System (please complete the following information):** - - OS: [e.g. iOS] - - Browser (and its version) [e.g. chrome, safari] - - Jekyll version [e.g. 3.8.7] -- Ruby version [e.g. 2.6.5] - -**Additional context** -Add any other context about the problem here. diff --git a/.github/ISSUE_TEMPLATE/config.yml b/.github/ISSUE_TEMPLATE/config.yml new file mode 100644 index 000000000000..5da20df00b4b --- /dev/null +++ b/.github/ISSUE_TEMPLATE/config.yml @@ -0,0 +1,8 @@ +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! diff --git a/.github/ISSUE_TEMPLATE/feature_request.md b/.github/ISSUE_TEMPLATE/feature_request.md deleted file mode 100644 index 11fc491ef1da..000000000000 --- a/.github/ISSUE_TEMPLATE/feature_request.md +++ /dev/null @@ -1,20 +0,0 @@ ---- -name: Feature request -about: Suggest an idea for this project -title: '' -labels: enhancement -assignees: '' - ---- - -**Is your feature request related to a problem? Please describe.** -A clear and concise description of what the problem is. Ex. I'm always frustrated when [...] - -**Describe the solution you'd like** -A clear and concise description of what you want to happen. - -**Describe alternatives you've considered** -A clear and concise description of any alternative solutions or features you've considered. - -**Additional context** -Add any other context or screenshots about the feature request here. diff --git a/.github/release.yml b/.github/release.yml new file mode 100644 index 000000000000..4fdc27eed59a --- /dev/null +++ b/.github/release.yml @@ -0,0 +1,14 @@ +changelog: + exclude: + labels: + - ignore-for-release + categories: + - title: new features 🚀 + labels: + - enhancement + - title: bug fixes and improvements ✨ + labels: + - bug-fix + - title: other changes 🛠️ + labels: + - "*" diff --git a/.github/workflows/axe.yml b/.github/workflows/axe.yml new file mode 100644 index 000000000000..a745c7dc9bed --- /dev/null +++ b/.github/workflows/axe.yml @@ -0,0 +1,73 @@ +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 --lsi + - 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 diff --git a/.github/workflows/broken-links-site.yml b/.github/workflows/broken-links-site.yml new file mode 100644 index 000000000000..fae797c8977f --- /dev/null +++ b/.github/workflows/broken-links-site.yml @@ -0,0 +1,46 @@ +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 --lsi + - 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' diff --git a/.github/workflows/broken-links.yml b/.github/workflows/broken-links.yml new file mode 100644 index 000000000000..36d1d6e42acf --- /dev/null +++ b/.github/workflows/broken-links.yml @@ -0,0 +1,52 @@ +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: --exclude-path README.md --exclude-path _pages/404.md --exclude-path _pages/blog.md --exclude-path _posts/2018-12-22-distill.md --verbose --no-progress './**/*.md' './**/*.html' diff --git a/.github/workflows/deploy-docker-tag.yml b/.github/workflows/deploy-docker-tag.yml index 3e6b6a3a169f..fadfff665e9a 100644 --- a/.github/workflows/deploy-docker-tag.yml +++ b/.github/workflows/deploy-docker-tag.yml @@ -3,38 +3,46 @@ name: Docker Image CI (Upload Tag) on: push: tags: - - 'v*' + - "v*" + paths: + - "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@v2 - - name: Buildx - uses: docker/setup-buildx-action@v1 - - - - name: Docker meta - id: meta - uses: docker/metadata-action@v4 - with: - images: amirpourmand/al-folio - - - name: Login - uses: docker/login-action@v1 - with: - username: ${{ secrets.DOCKER_USERNAME }} - password: ${{ secrets.DOCKER_PASSWORD }} - - - name: Build and push - uses: docker/build-push-action@v3 - with: - context: . - push: ${{ github.event_name != 'pull_request' }} - tags: ${{ steps.meta.outputs.tags }} - labels: ${{ steps.meta.outputs.labels }} - + - 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 }} diff --git a/.github/workflows/deploy-image.yml b/.github/workflows/deploy-image.yml index b747dfc1d15c..133f22d7d143 100644 --- a/.github/workflows/deploy-image.yml +++ b/.github/workflows/deploy-image.yml @@ -2,30 +2,42 @@ name: Docker Image CI on: push: - branches: [ master ] - -jobs: + branches: + - master + - main + paths: + - "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@v2 - - name: Buildx - uses: docker/setup-buildx-action@v1 + - 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: Login - uses: docker/login-action@v1 - with: - username: ${{ secrets.DOCKER_USERNAME }} - password: ${{ secrets.DOCKER_PASSWORD }} - - - name: Build and push - uses: docker/build-push-action@v2 - with: - context: . - push: true - tags: amirpourmand/al-folio + - name: Build and push + uses: docker/build-push-action@v5 + with: + context: . + push: true + platforms: linux/amd64,linux/arm64/v8 + tags: amirpourmand/al-folio diff --git a/.github/workflows/deploy.yml b/.github/workflows/deploy.yml index 0301f08040fc..4979e3efa96b 100644 --- a/.github/workflows/deploy.yml +++ b/.github/workflows/deploy.yml @@ -1,42 +1,89 @@ -name: deploy +name: Deploy site on: push: branches: - master - main + paths: + - "assets/**" + - "**.html" + - "**.js" + - "**.liquid" + - "**/*.md" + - "**.yml" + - "!.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/**" + - "**.html" + - "**.js" + - "**.liquid" + - "**/*.md" + - "**.yml" + - "!.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 code - uses: actions/checkout@v3 - - name: Setup Ruby - uses: ruby/setup-ruby@v1 - with: - ruby-version: '3.0.2' - bundler-cache: true - - name: Install deps - run: | - npm install -g mermaid.cli - - name: Setup deploy options - id: setup - run: | - git config --global user.name "GitHub Action" - git config --global user.email "41898282+github-actions[bot]@users.noreply.github.com" - if [[ ${GITHUB_REF} = refs/pull/*/merge ]]; then # pull request - echo "SRC_BRANCH=${GITHUB_HEAD_REF}" >> $GITHUB_OUTPUT - echo "NO_PUSH=--no-push" >> $GITHUB_OUTPUT - elif [[ ${GITHUB_REF} = refs/heads/* ]]; then # branch, e.g. master, source etc - echo "SRC_BRANCH=${GITHUB_REF#refs/heads/}" >> $GITHUB_OUTPUT - fi - echo "DEPLOY_BRANCH=gh-pages" >> $GITHUB_OUTPUT - - name: Deploy website - run: yes | bash bin/deploy --verbose ${{ steps.setup.outputs.NO_PUSH }} - --src ${{ steps.setup.outputs.SRC_BRANCH }} - --deploy ${{ steps.setup.outputs.DEPLOY_BRANCH }} + - 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 --lsi + - 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 diff --git a/.github/workflows/docker-slim.yml b/.github/workflows/docker-slim.yml new file mode 100644 index 000000000000..8c8cf71b85fc --- /dev/null +++ b/.github/workflows/docker-slim.yml @@ -0,0 +1,51 @@ +name: Docker Slim + +#Only trigger, when the build workflow succeeded +on: + 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' }} and 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.0.3 + 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 diff --git a/.github/workflows/lighthouse-badger.yml b/.github/workflows/lighthouse-badger.yml new file mode 100644 index 000000000000..182517c75cb2 --- /dev/null +++ b/.github/workflows/lighthouse-badger.yml @@ -0,0 +1,63 @@ +# 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 }} diff --git a/.github/workflows/prettier-comment-on-pr.yml b/.github/workflows/prettier-comment-on-pr.yml new file mode 100644 index 000000000000..e95075ce82e4 --- /dev/null +++ b/.github/workflows/prettier-comment-on-pr.yml @@ -0,0 +1,18 @@ +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. diff --git a/.github/workflows/prettier.yml b/.github/workflows/prettier.yml new file mode 100644 index 000000000000..60446c8db359 --- /dev/null +++ b/.github/workflows/prettier.yml @@ -0,0 +1,48 @@ +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 }}"}' diff --git a/.gitignore b/.gitignore index b97cf91da550..5cbbca274f5b 100644 --- a/.gitignore +++ b/.gitignore @@ -7,5 +7,5 @@ _site .ruby-version .tweet-cache Gemfile.lock -vendor - +node_modules/ +vendor \ No newline at end of file diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml index ca7e46543084..d61cba840b0d 100644 --- a/.pre-commit-config.yaml +++ b/.pre-commit-config.yaml @@ -1,10 +1,10 @@ # See https://pre-commit.com for more information # See https://pre-commit.com/hooks.html for more hooks repos: -- repo: https://github.com/pre-commit/pre-commit-hooks + - repo: https://github.com/pre-commit/pre-commit-hooks rev: v4.3.0 hooks: - - id: trailing-whitespace - - id: end-of-file-fixer - - id: check-yaml - - id: check-added-large-files + - id: trailing-whitespace + - id: end-of-file-fixer + - id: check-yaml + - id: check-added-large-files diff --git a/.prettierignore b/.prettierignore new file mode 100644 index 000000000000..f917ab0212d1 --- /dev/null +++ b/.prettierignore @@ -0,0 +1,6 @@ +**/*.min.css +**/*.min.js +assets/css/main.scss +assets/plotly/demo.html +lighthouse_results/** +_posts/2015-10-20-math.md diff --git a/.prettierrc b/.prettierrc new file mode 100644 index 000000000000..0163f1997d14 --- /dev/null +++ b/.prettierrc @@ -0,0 +1,3 @@ +plugins: ["@shopify/prettier-plugin-liquid"] +printWidth: 150 +trailingComma: "es5" diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 349456bf9032..184507460b82 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -1,25 +1,26 @@ # Contributing to al-folio -Thank you for considering to contribute 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. - ## Issues + We use GitHub issues to track bugs and feature requests. Before submitting an issue, please make sure: -1. You have read [the FAQ section](https://github.com/alshedivat/al-folio#faq) of the README and your question is NOT addressed there. +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. + 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. diff --git a/CUSTOMIZE.md b/CUSTOMIZE.md new file mode 100644 index 000000000000..0bf9e692e581 --- /dev/null +++ b/CUSTOMIZE.md @@ -0,0 +1,147 @@ +# Customize + +Here we will give you some tips on how to customize the website. + +## 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 --lsi` 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 in the [frontmatter](https://jekyllrb.com/docs/front-matter/) of the Markdown file. You can also add new layouts in the [\_layouts](_layouts/) directory if you feel the need for it. + +## Creating new blog posts + +To create a new blog post, you can add a new Markdown file in the [\_posts](_posts/) directory. The [name of the file must follow](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`, `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) +- `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. diff --git a/Dockerfile b/Dockerfile index a1eb21a9f908..e55a99f998ba 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,24 +1,41 @@ -FROM bitnami/minideb:latest +FROM ubuntu:latest +ENV DEBIAN_FRONTEND noninteractive + Label MAINTAINER Amir Pourmand -RUN apt-get update -y -# add locale -RUN apt-get -y install locales -# Set the locale + +RUN apt-get update -y && apt-get install -y --no-install-recommends \ + locales \ + imagemagick \ + ruby-full \ + 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 -ENV LANGUAGE en_US:en -ENV LC_ALL en_US.UTF-8 - -# add ruby and jekyll -RUN apt-get install --no-install-recommends ruby-full build-essential zlib1g-dev -y -RUN apt-get install imagemagick -y -RUN apt-get clean \ - && rm -rf /var/lib/apt/lists/ -# ENV GEM_HOME='root/gems' \ -# PATH="root/gems/bin:${PATH}" + + +ENV LANG=en_US.UTF-8 \ + LANGUAGE=en_US:en \ + LC_ALL=en_US.UTF-8 \ + JEKYLL_ENV=production + +# install jekyll and dependencies RUN gem install jekyll bundler + RUN mkdir /srv/jekyll + ADD Gemfile /srv/jekyll + WORKDIR /srv/jekyll -RUN bundle install \ No newline at end of file + +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"] diff --git a/FAQ.md b/FAQ.md new file mode 100644 index 000000000000..694e4223f1dd --- /dev/null +++ b/FAQ.md @@ -0,0 +1,78 @@ +# 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 is not loaded properly). How do I fix that?](#my-webpage-works-locally-but-after-deploying-it-is-not-displayed-correctly-css-and-js-is-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) + +--- + +#### 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 is not loaded properly). How do I fix that? + +Make sure to correctly specify the `url` and `baseurl` paths in `_config.yml`. Set `url` to `https://.github.io` or to `https://` 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: //`. 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...`, 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 removing the `--lsi` flag in the code. 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. diff --git a/Gemfile b/Gemfile index 0cb2a8af6fc5..be5458541018 100644 --- a/Gemfile +++ b/Gemfile @@ -1,16 +1,19 @@ source 'https://rubygems.org' group :jekyll_plugins do + gem 'classifier-reborn' gem 'jekyll' gem 'jekyll-archives' - gem 'jekyll-diagrams' 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-scholar' gem 'jekyll-sitemap' - gem 'jekyll-link-attributes' + gem 'jekyll-toc' gem 'jekyll-twitter-plugin' gem 'jemoji' gem 'mini_racer' @@ -18,6 +21,6 @@ group :jekyll_plugins do gem 'webrick' end group :other_plugins do - gem 'httparty' gem 'feedjira' + gem 'httparty' end diff --git a/INSTALL.md b/INSTALL.md new file mode 100644 index 000000000000..fc50d44468b4 --- /dev/null +++ b/INSTALL.md @@ -0,0 +1,224 @@ +# 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 (Legacy)](#local-setup-legacy) + - [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 `.github.io`, note that the name of your repository :warning: **MUST BE** :warning: `.github.io` or `.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://.github.io` and leave `baseurl` **empty**. +4. 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). +5. Wait until the GitHub actions finish, then simply navigate to `https://.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:/.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 up -f docker-compose-slim.yml` + +### 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 (Legacy) + +For a hands-on walkthrough of running al-folio locally without using Docker, check out [this cool blog post](https://george-gca.github.io/blog/2022/running-local-al-folio/) by one of the community members! + +Assuming you have [Ruby](https://www.ruby-lang.org/en/downloads/) and [Bundler](https://bundler.io/) installed on your system (_hint: for ease of managing ruby gems, consider using [rbenv](https://github.com/rbenv/rbenv)_), and also [Python](https://www.python.org/) and [pip](https://pypi.org/project/pip/) (_hint: for ease of managing python packages, consider using a virtual environment, like [venv](https://docs.python.org/pt-br/3/library/venv.html) or [conda](https://docs.conda.io/en/latest/)_). + +```bash +$ bundle install +# assuming pip is your Python package manager +$ pip install jupyter +$ bundle exec jekyll serve --lsi +``` + +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! :sparkles: + +### For personal and organization webpages + +1. The name of your repository **MUST BE** `.github.io` or `.github.io`. +2. In `_config.yml`, set `url` to `https://.github.io` and leave `baseurl` empty. +3. Set up automatic deployment of your webpage (see instructions below). +4. Make changes, commit, and push! +5. After deployment, the webpage will become available at `.github.io`. + +### For project pages + +1. In `_config.yml`, set `url` to `https://.github.io` and `baseurl` to `//`. +2. Set up automatic deployment of your webpage (see instructions below). +3. Make changes, commit, and push! +4. After deployment, the webpage will become available at `.github.io//`. + +### 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. 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. +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 --lsi +``` + +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. + +### 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/.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 --lsi --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 `` 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 `` configuration directive. +> +> Do not use an important location for ``; 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 +$ 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. diff --git a/README.md b/README.md index 6174d566d33b..3169b9bfb8a9 100644 --- a/README.md +++ b/README.md @@ -1,26 +1,26 @@ # al-folio - -[maintainers]: https://img.shields.io/badge/maintainers-3-success.svg 'Number of maintainers' - + +
+ +[![Preview](assets/img/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) -[![demo](https://img.shields.io/badge/theme-demo-brightgreen.svg)](https://alshedivat.github.io/al-folio/) +[![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/) -[![Maintainers][maintainers]](#maintainers) -[![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) - [![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) -A simple, clean, and responsive [Jekyll](https://jekyllrb.com/) theme for academics. -If you like the theme, give it a star! - -[![Preview](https://raw.githubusercontent.com/alshedivat/al-folio/master/assets/img/al-folio-preview.png)](https://alshedivat.github.io/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) +
## User community @@ -33,6 +33,7 @@ Feel free to add your own page(s) by sending a PR. Academics + @@ -89,6 +90,50 @@ Feel free to add your own page(s) by sending a PR. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -107,338 +152,139 @@ Feel free to add your own page(s) by sending a PR. Courses CMU PGM (S-19)
-CMU DeepRL (F-19, S-20, F-20, S-21)
-CMU MMML (F-20)
+CMU DeepRL (F-19, S-20, F-20, S-21, F-21, S-22)
+CMU MMML (F-20, F-22)
+CMU AMMML (S-22, S-23)
+CMU ASI (S-23)
CMU Distributed Systems (S-21) Conferences & workshops +ICLR Blog Post Track (2023, 2024)
ML Retrospectives (NeurIPS: 2019, 2020; ICML: 2020)
HAMLETS (NeurIPS: 2020)
ICBINB (NeurIPS: 2020, 2021)
Neural Compression (ICLR: 2021)
-Score Based Methods (NeurIPS: 2022) +Score Based Methods (NeurIPS: 2022)
+Images2Symbols (CogSci: 2022)
+Medical Robotics Junior Faculty Forum (ISMR: 2023)
+Beyond Vision: Physics meets AI (ICIAP: 2023)
+Workshop on Diffusion Models (NeurIPS: 2023) - ## Lighthouse PageSpeed Insights -[![Google PageSpeeg](https://raw.githubusercontent.com/alshedivat/al-folio/master/assets/img/pagespeed.svg)](https://pagespeed.web.dev/report?url=https%3A%2F%2Falshedivat.github.io%2Fal-folio%2F&form_factor=desktop) +### 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 - * [User community](#user-community) - * [Lighthouse PageSpeed Insights](#lighthouse-pagespeed-insights) - * [Getting started](#getting-started) - + [Installation](#installation) - - [Local setup using Docker (Recommended on Windows)](#local-setup-using-docker-recommended-on-windows) - - [Local Setup (Standard)](#local-setup-standard) - - [Deployment](#deployment) - - [Upgrading from a previous version](#upgrading-from-a-previous-version) - + [FAQ](#faq) - * [Features](#features) - + [Publications](#publications) - + [Collections](#collections) - + [Layouts](#layouts) +- [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](#installing) + - [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](#photos) - + [Other features](#other-features) - - [GitHub repositories and user stats](#github-repositories-and-user-stats) + - [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) - * [Contributing](#contributing) - + [Core Contributors](#core-contributors) - * [License](#license) + - [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/)! - - -### Installation - -For a hands-on walkthrough of al-folio installation, check out [this cool video tutorial](https://www.youtube.com/watch?v=g6AJ9qPPoyc) by one of the community members! 🎬 🍿 - ---- - -#### Local setup using Docker (Recommended on Windows) - -You need to take the following steps to get `al-folio` up and running in your local machine: - -- First, install [docker](https://docs.docker.com/get-docker/) and [docker-compose](https://docs.docker.com/compose/install/). -- Then, clone this repository to your machine: - -```bash -$ git clone git@github.com:/.git -$ cd -``` - -Finally, run the following command that will pull a pre-built image from DockerHub and will run your website. +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/)! -```bash -$ docker-compose up -``` - -Note that when you run it for the first time, it will download a docker image of size 300MB or so. - -Now, feel free to customize the theme however you like (don't forget to change the name!). After you are done, you can use the same command (`docker-compose up`) to render the webpage with all you changes. Also, make sure to commit your final changes. - -> To change port number, you can edit `docker-compose.yml` file. +## Installing -
(click to expand) Build your own docker image: +For installation details please refer to [INSTALL.md](INSTALL.md). -> Note: this approach is only necessary if you would like to build an older or very custom version of al-folio. +## Customizing -Build and run a new docker image using: -```bash -$ docker-compose -f docker-local.yml up -``` -> 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 previous command! It will download ruby and jekyll and install all ruby packages again from scratch. - -
- ---- +For customization details please refer to [CUSTOMIZE.md](CUSTOMIZE.md). -#### Local Setup (Standard) +## Features -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)*), first [fork](https://guides.github.com/activities/forking/) the theme from `github.com:alshedivat/al-folio` to `github.com:/` and do the following: +### Light/Dark Mode -```bash -$ git clone git@github.com:/.git -$ cd -$ bundle install -$ bundle exec jekyll serve -``` +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. -Now, feel free to customize the theme however you like (don't forget to change the name!). -After you are done, **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! :sparkles: - -**For personal and organization webpages:** -1. Rename your repository to `.github.io` or `.github.io`. -2. In `_config.yml`, set `url` to `https://.github.io` and leave `baseurl` empty. -3. Set up automatic deployment of your webpage (see instructions below). -4. Make changes, commit, and push! -5. After deployment, the webpage will become available at `.github.io`. - -**For project pages:** -1. In `_config.yml`, set `url` to `https://.github.io` and `baseurl` to `//`. -2. Set up automatic deployment of your webpage (see instructions below). -3. Make changes, commit, and push! -4. After deployment, the webpage will become available at `.github.io//`. - -**To enable 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. Make any other changes to your webpage, commit, and push. This will automatically trigger the **Deploy** action. -3. 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. -4. 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). - - -
(click to expand) Manual deployment to GitHub Pages: - -If you need to manually re-deploy your website to GitHub pages, run the deploy script from the root directory of your repository: -```bash -$ ./bin/deploy -``` -uses the `master` branch for the source code and deploys the webpage to `gh-pages`. - -
- -
(click to expand) 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/` foder to your hosting server. - -**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 deploing directly to `your-domain.com`, leave `baseurl` blank. - -
- -
(click to expand) 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` sub-directory of a git-versioned repository cloned under `$HOME/repo/`. -For a user site this could well be something like `$HOME/.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 `` 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 `` configuration directive. -> -> Do not use an important location for ``; instead, use it as a staging area and copy files from there to your web server. +### CV -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 behaviour, add `README.md` under `exclude` in `_config.yml`. +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. -**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`. +What this means is, if there is no resume data defined in [\_config.yml](_config.yml) and loaded via a json file, it will load the contents of [\_data/cv.yml](_data/cv.yml) as fallback. -
+[![CV Preview](assets/img/readme_preview/cv.png)](https://alshedivat.github.io/al-folio/cv/) --- -#### Upgrading from a previous version +### People -If you installed **al-folio** as described above, you can upgrade to the latest version as follows: +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. -```bash -# Assuming the current directory is -$ git remote add upstream https://github.com/alshedivat/al-folio.git -$ git fetch upstream -$ git rebase v0.3.5 -``` - -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 to re-install the new version of the theme from scratch and port over your content and changes from the previous version manually. +[![People Preview](assets/img/readme_preview/people.png)](https://alshedivat.github.io/al-folio/people/) --- -### FAQ - -Here are some frequently asked questions. -If you have a different question, please ask using [Discussions](https://github.com/alshedivat/al-folio/discussions/categories/q-a). - -1. **Q:** After I fork and setup the repo, I get a deployment error. - Isn't the website supposed to correctly deploy automatically?
- **A:** 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) in the previous section. - (Relevant issue: [209](https://github.com/alshedivat/al-folio/issues/209#issuecomment-798849211).) - -2. **Q:** 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?
- **A:** 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).) - -3. **Q:** My webpage works locally. - But after deploying, it is not displayed correctly (CSS and JS is not loaded properly). - How do I fix that?
- **A:** Make sure to correctly specify the `url` and `baseurl` paths in `_config.yml`. - Set `url` to `https://.github.io` or to `https://` 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: //`. - -4. **Q:** Atom feed doesn't work. Why? -
- **A:** 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. - - -## Features - ### Publications -Your publications page is generated automatically from your BibTex bibliography. -Simply edit `_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`. - -

+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. -
(click to expand) Author annotation: +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`. -In publications, the author entry for yourself is identified by string array `scholar:last_name` and string array `scholar:first_name` in `_config.yml`: -``` -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` and Jekyll will insert links to their webpages automatically. -The coauthor data format in `_data/coauthors.yml` is as follows, -``` -"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. - -
- -
(click to expand) 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 -- `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 -- `html`: Inserts a "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) -- `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) -- `blog`: Adds a "Blog" button redirecting to the specified link -- `code`: Adds a "Code" button redirecting to the specified link -- `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) -- `website`: Adds a "Website" button redirecting to the specified link -- `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) -- `dimensions`: Adds an [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) - -You can implement your own buttons by editing the bib.html file. - -
+[![Publications Preview](assets/img/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. +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](assets/img/readme_preview/projects.png)](https://alshedivat.github.io/al-folio/projects/) -You can easily create your own collections, apps, short stories, courses, or whatever your creative work is. -To do this, edit the collections in the `_config.yml` file, create a corresponding folder, and create a landing page for your collection, similar to `_pages/projects.md`. +You can easily create your own collections, apps, short stories, courses, or whatever your creative work is. To do this, edit the collections in the [\_config.yml](_config.yml) file, create a corresponding folder, and create a landing page for your collection, similar to `_pages/projects.md`. --- @@ -450,27 +296,26 @@ To do this, edit the collections in the `_config.yml` file, create a correspondi The theme allows you to create blog posts in the [distill.pub](https://distill.pub/) style: -

+[![Distill Preview](assets/img/readme_preview/distill.png)](https://alshedivat.github.io/al-folio/blog/2021/distill/) For more details on how to create distill-styled posts using `` 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): +**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/).

- - + +

-#### Photos +#### 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: +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:

- +

@@ -478,75 +323,105 @@ Easily create beautiful grids within your blog posts and project pages: ### Other features -#### GitHub repositories and user stats -**al-folio** uses [github-readme-stats](https://github.com/anuraghazra/github-readme-stats) to display GitHub repositories and user stats on the the `/repositories/` page. +#### 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](assets/img/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 the `/repositories/` page. +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 {% if site.data.repositories.github_users %}
- {% for user in site.data.repositories.github_users %} - {% include repository/repo_user.html username=user %} - {% endfor %} + {% for user in site.data.repositories.github_users %} {% include repository/repo_user.liquid username=user %} {% endfor %}
{% endif %} + +{% if site.repo_trophies.enabled %} {% for user in site.data.repositories.github_users %} {% if site.data.repositories.github_users.size > 1 %} +

{{ user }}

+{% endif %} +
+ {% include repository/repo_trophies.liquid username=user %} +
+{% endfor %} {% endif %} + {% if site.data.repositories.github_repos %}
- {% for repo in site.data.repositories.github_repos %} - {% include repository/repo.html repository=repo %} - {% endfor %} + {% for repo in site.data.repositories.github_repos %} {% include repository/repo.liquid repository=repo %} {% endfor %}
{% 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`. -You can also add your own colors to this file assigning each a name for ease of -use across the template. + +A variety of beautiful theme colors have been selected for you to choose from. The default is purple, but you can quickly change it by editing the `--global-theme-color` variable in the `_sass/_themes.scss` file. Other color variables are listed there as well. The stock theme color options available can be found at [\_sass/\_variables.scss](_sass/_variables.scss). You can also add your own colors to this file assigning each a name for ease of use across the template. + +--- #### Social media previews -**al-folio** supports preview images on social media. -To enable this functionality you will need to set `serve_og_meta` to `true` in your `_config.yml`. -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`. -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. +**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` + +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). +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, add your webpage to the list below, 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. +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! + - - - - - + + + + + + + +

Maruan

Rohan Deb Sarkar

Amir Pourmand

Maruan

Rohan Deb Sarkar

Amir Pourmand

George
@@ -554,9 +429,24 @@ For more complex issues/bugs or feature requests, please open an issue using the +### All Contributors + + + + + +## Star History + + + + + + Star History Chart + + + ## 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. +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. diff --git a/_bibliography/papers.bib b/_bibliography/papers.bib index 975613e74577..f6d8b6bc4505 100644 --- a/_bibliography/papers.bib +++ b/_bibliography/papers.bib @@ -3,12 +3,20 @@ @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,}, + publisher={Courier Corporation}, preview={brownian-motion.gif} } @@ -17,12 +25,12 @@ @article{einstein1950meaning bibtex_show={true}, title={The meaning of relativity}, author={Einstein, Albert and Taub, AH}, - journal={American Journal of Physics,}, + journal={American Journal of Physics}, volume={18}, number={6}, pages={403--404}, year={1950}, - publisher={American Association of Physics Teachers,} + publisher={American Association of Physics Teachers} } @article{PhysRev.47.777, @@ -30,7 +38,7 @@ @article{PhysRev.47.777 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.,}, + journal={Phys. Rev.}, volume={47}, issue={10}, pages={777--780}, @@ -44,13 +52,14 @@ @article{PhysRev.47.777 pdf={example_pdf.pdf}, altmetric={248277}, dimensions={true}, + google_scholar_id={qyhmnyLat1gC}, 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,}, + journal={Annalen der physik}, volume={322}, number={8}, pages={549--560}, @@ -62,7 +71,7 @@ @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.,}, + journal={Ann. Phys.}, volume={17}, pages={549--560}, year={1905} diff --git a/_config.yml b/_config.yml index dd2e00925871..110b5bdb442c 100644 --- a/_config.yml +++ b/_config.yml @@ -13,27 +13,26 @@ footer_text: > Powered by Jekyll with al-folio theme. Hosted by GitHub Pages. Photos from Unsplash. -keywords: jekyll, jekyll-theme, academic-website, portfolio-website # add your own keywords or leave empty - +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/) +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/ +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 +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 # ----------------------------------------------------------------------------- # Theme # ----------------------------------------------------------------------------- -# code highlighter theme -highlight_theme_light: github # https://github.com/jwarby/jekyll-pygments-themes -highlight_theme_dark: native # https://github.com/jwarby/jekyll-pygments-themes - # 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_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 @@ -59,6 +58,7 @@ max_width: 800px # 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 @@ -69,22 +69,26 @@ og_image: # The site-wide (default for all links) Open Graph preview image github_username: # your GitHub user name gitlab_username: # your GitLab user name -twitter_username: # your Twitter handle +x_username: # your X handle mastodon_username: # your mastodon instance+username in the format instance.tld/@username linkedin_username: # your LinkedIn user name telegram_username: # your Telegram user name -scholar_userid: # your Google Scholar ID +scholar_userid: qc6CJjYAAAAJ # your Google Scholar ID semanticscholar_id: # your Semantic Scholar ID 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.) orcid_id: # your ORCID ID medium_username: # your Medium username quora_username: # your Quora username publons_id: # your ID on Publons +lattes_id: # your ID on Lattes (Brazilian Lattes CV) +osf_id: # your OSF ID research_gate_profile: # your profile on ResearchGate +scopus_id: # your profile on Scopus blogger_url: # your blogger URL work_url: # work page URL keybase_username: # your keybase user name wikidata_id: # your wikidata id +wikipedia_id: # your wikipedia id (Case sensitive) dblp_url: # your DBLP profile url stackoverflow_id: # your stackoverflow id kaggle_id: # your kaggle id @@ -96,6 +100,8 @@ instagram_id: # your instagram id facebook_id: # your facebook id youtube_id: # your youtube channel id (youtube.com/@) discord_id: # your discord id (18-digit unique numerical identifier) +zotero_username: # your zotero username +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) contact_note: > You can even add a little note about which of these is the best way to reach you. @@ -104,18 +110,20 @@ contact_note: > # Analytics and search engine verification # ----------------------------------------------------------------------------- -google_analytics: # your Goole Analytics measurement ID (format: G-XXXXXXXXXX) -panelbear_analytics: # panelbear analytics site ID (format: XXXXXXXXX) +# 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) -google_site_verification: # your google-site-verification ID (Google Search Console) -bing_site_verification: # out your bing-site-verification ID (Bing Webmaster) +# 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_nav_title: blog # your blog must have a title for it to be displayed in the nav bar blog_description: a simple whitespace theme for academics permalink: /blog/:year/:title/ @@ -123,19 +131,22 @@ permalink: /blog/:year/:title/ 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. +# Follow instructions on https://giscus.app/ to setup for your repo to fill out the information below. giscus: - repo: alshedivat/al-folio # / - repo_id: MDEwOlJlcG9zaXRvcnk2MDAyNDM2NQ== - category: Comments # name of the category under which discussions will be created - category_id: DIC_kwDOA5PmLc4CTBt6 - 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) + repo: # / + 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 @@ -144,7 +155,7 @@ 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 exteranl 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 @@ -164,8 +175,15 @@ collections: output: true permalink: /projects/:path/ -news_scrollable: true # adds a vertical scroll bar if there are more than 3 news items -news_limit: 5 # leave blank to include all the news in the `_news` folder +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: true + 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 @@ -177,7 +195,7 @@ highlighter: rouge kramdown: input: GFM syntax_highlighter_opts: - css_class: 'highlight' + css_class: "highlight" span: line_numbers: false block: @@ -185,45 +203,60 @@ kramdown: start_line: 1 # Includes & excludes -include: ['_pages'] +include: ["_pages"] exclude: - bin + - CONTRIBUTING.md + - CUSTOMIZE.md + - docker-compose.yml + - Dockerfile + - FAQ.md - Gemfile - Gemfile.lock + - INSTALL.md + - LICENSE + - package.json + - package-lock.json + - purgecss.config.js + - README.md - vendor keep_files: - CNAME - .nojekyll - - .git # Plug-ins plugins: - jekyll-archives - - jekyll-diagrams - jekyll-email-protect - jekyll-feed + - jekyll-get-json - jekyll-imagemagick + - jekyll-jupyter-notebook + - jekyll-link-attributes - jekyll-minifier - jekyll-paginate-v2 - jekyll/scholar - jekyll-sitemap - - jekyll-link-attributes + - jekyll-toc - jekyll-twitter-plugin - jemoji # Sitemap settings defaults: - scope: - path: "assets/**/*.*" + path: "assets" values: sitemap: false +sass: + style: compressed + # ----------------------------------------------------------------------------- # Jekyll Minifier # ----------------------------------------------------------------------------- jekyll-minifier: - exclude: ['robots.txt'] + exclude: ["robots.txt"] uglifier_args: harmony: true @@ -238,18 +271,18 @@ jekyll-archives: tag: archive-tag category: archive-category permalinks: - year: '/blog/:year/' - tag: '/blog/tag/:name/' - category: '/blog/category/:name/' + year: "/blog/:year/" + tag: "/blog/tag/:name/" + category: "/blog/category/:name/" -display_tags: ['formatting', 'images', 'links', 'math', 'code'] # this tags will be dispalyed on the front page of your blog +display_tags: ["formatting", "images", "links", "math", "code"] # these tags will be displayed on the front page of your blog +display_categories: ["blockquotes"] # these categories will be displayed on the front page of your blog # ----------------------------------------------------------------------------- # Jekyll Scholar # ----------------------------------------------------------------------------- scholar: - last_name: [Einstein] first_name: [Albert, A.] @@ -268,22 +301,28 @@ scholar: join_strings: true details_dir: bibliography - details_layout: bibtex.html details_link: Details query: "@*" + group_by: year + group_order: descending -badges: # Display different badges for your pulications - altmetric_badge: true # Altmetric badge (https://www.altmetric.com/products/altmetric-badges/) - dimensions_badge: true # Dimensions badge (https://badge.dimensions.ai/) +# Display different badges withs stats for your publications +enable_publication_badges: + altmetric: true # Altmetric badge (https://www.altmetric.com/products/altmetric-badges/) + dimensions: true # Dimensions badge (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, arxiv, bibtex_show, html, pdf, selected, supp, blog, code, poster, slides, website, preview, altmetric] +filtered_bibtex_keywords: + [abbr, abstract, altmetric, arxiv, bibtex_show, blog, code, html, pdf, poster, preview, selected, slides, supp, video, website] # Maximum number of authors to be shown for each publication (more authors are visible on click) -max_author_limit: 3 # leave blank to always show all authors -more_authors_animation_delay: 10 # more authors are revealed on click using animation; smaller delay means faster animation +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 @@ -296,13 +335,14 @@ external_links: 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 (recomended, see https://github.com/alshedivat/al-folio/issues/537) + enabled: true # enables responsive images for your site (recommended, see https://github.com/alshedivat/al-folio/issues/537) widths: - 480 - 800 @@ -314,56 +354,75 @@ imagemagick: - ".jpeg" - ".png" - ".tiff" + - ".gif" output_formats: - webp: "-resize 800x" - -# ----------------------------------------------------------------------------- -# Jekyll Diagrams -# ----------------------------------------------------------------------------- - -jekyll-diagrams: - # configuration, see https://github.com/zhustec/jekyll-diagrams. - # feel free to comment out this section if not using jekyll diagrams. + 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_panelbear_analytics: false # enables panelbear analytics -enable_google_verification: false # enables google site verification -enable_bing_verification: false # enables bing site verification -enable_masonry: true # enables automatic project cards arangement -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: true # 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_google_analytics: false # enables google analytics +enable_cronitor_analytics: false # enables cronitor RUM analytics +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: true # 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 # ----------------------------------------------------------------------------- # Library versions # ----------------------------------------------------------------------------- -academicons: - version: "1.9.1" - integrity: "sha256-i1+4qU2G2860dGGIOJscdC30s9beBXjFfzjWLjBRsBg=" -bootstrap: - version: "4.6.1" +bootstrap-table: + version: "1.22.1" +chartjs: + version: "4.4.1" +d3: + version: "7.8.5" + integrity: "sha256-1rA678n2xEx7x4cTZ5x4wpUCj6kUMZEZ5cxLSVSFWxw=" +diff2html: + version: "3.4.47" + integrity: + css: "sha256-IMBK4VNZp0ivwefSn51bswdsrhk0HoMTLc2GqFHFBXg=" + js: "sha256-eU2TVHX633T1o/bTQp6iIJByYJEtZThhF9bKz/DcbbY=" +echarts: + version: "5.4.3" + integrity: + library: "sha256-EVZCmhajjLhgTcxlGMGUBtQiYULZCPjt0uNTFEPFTRk=" + dark_theme: "sha256-UmFIP/4VvOqBDIl2QWl1HBuAJ1XWs/iFZxT5yJRZOKo=" +highlightjs: + version: "11.9.0" integrity: - css: "sha256-DF7Zhf293AJxJNTmh5zhoYYIMs2oXitRfBjY+9L//AY=" - js: "sha256-fgLAgv7fyCGopR/gBNq2iW3ZKIdqIcyshnUULC4vex8=" -fontawesome: - version: "5.15.4" - integrity: "sha256-mUZM63G8m73Mcidfrv5E+Y61y7a12O5mW4ezU3bxqW4=" + css: + light: "sha256-Oppd74ucMR5a5Dq96FxjEzGF7tTw2fZ/6ksAqDCM8GY=" + dark: "sha256-nyCNAiECsdDHrr/s2OQsp5l9XeY2ZJ0rMepjCT2AkBk=" +imagesloaded: + version: "5.0.0" + integrity: "sha256-htrLFfZJ6v5udOG+3kNLINIKh2gvoKqwEhHYfTTMICc=" +img-comparison-slider: + version: "8.0.6" jquery: version: "3.6.0" integrity: "sha256-/xUj+3OJU5yExlq6GSYGSHk7tPXikynS7ogEvDej/m4=" +leaflet: + version: "1.9.4" + integrity: + css: "sha256-p4NxAoJBhIIN+hmNHrzRCf9tD/miZyoHS5obTRR9BMY=" + js: "sha256-20nQCchB9co0qIjJZRGuk2/Z9VM+kNiyxNV1lvTlZBo=" mathjax: version: "3.2.0" masonry: @@ -375,5 +434,43 @@ mdb: css: "sha256-jpjYvU3G3N6nrrBwXJoVEYI/0zw8htfFnhT9ljN3JJw=" js: "sha256-NdbiivsvWt7VYCt6hYNT3h/th9vSTL4EDWeGs5SN3DA=" medium_zoom: - version: "1.0.8" - integrity: "sha256-7PhEpEWEW0XXQ0k6kQrPKwuoIomz8R8IYyuU1Qew4P8=" + version: "1.1.0" + integrity: "sha256-ZgMyDAIYDYGxbcpJcfUnYwNevG/xi9OHKaR/8GK+jWc=" +mermaid: + version: "10.7.0" + integrity: "sha256-TtLOdUA8mstPoO6sGvHIGx2ceXrrX4KgIItO06XOn8A=" +swiper: + version: "11.0.5" + integrity: + css: "sha256-yUoNxsvX+Vo8Trj3lZ/Y5ZBf8HlBFsB6Xwm7rH75/9E=" + js: "sha256-BPrwikijIybg9OQC5SYFFqhBjERYOn97tCureFgYH1E=" +vega: + version: "5.27.0" + integrity: "sha256-Yot/cfgMMMpFwkp/5azR20Tfkt24PFqQ6IQS+80HIZs=" +vega-embed: + version: "6.24.0" + integrity: "sha256-FPCJ9JYCC9AZSpvC/t/wHBX7ybueZhIqOMjpWqfl3DU=" +vega-lite: + version: "5.16.3" + integrity: "sha256-TvBvIS5jUN4BSy009usRjNzjI1qRrHPYv7xVLJyjUyw=" + +# ----------------------------------------------------------------------------- +# 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 diff --git a/_data/coauthors.yml b/_data/coauthors.yml index 8ed521248d81..5a989cf01e3e 100644 --- a/_data/coauthors.yml +++ b/_data/coauthors.yml @@ -1,34 +1,34 @@ -"Adams": +"adams": - firstname: ["Edwin", "E.", "E. P.", "Edwin Plimpton"] url: https://en.wikipedia.org/wiki/Edwin_Plimpton_Adams -"Podolsky": +"podolsky": - firstname: ["Boris", "B.", "B. Y.", "Boris Yakovlevich"] url: https://en.wikipedia.org/wiki/Boris_Podolsky -"Rosen": +"rosen": - firstname: ["Nathan", "N."] url: https://en.wikipedia.org/wiki/Nathan_Rosen -"Bach": +"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": +"przibram": - firstname: ["Karl"] url: https://link.springer.com/article/10.1007/s00016-019-00242-z -"Schrödinger": +"schrodinger": - firstname: ["Erwin"] url: https://en.wikipedia.org/wiki/Erwin_Schr%C3%B6dinger -"Lorentz": +"lorentz": - firstname: ["Hendrik Antoon"] url: https://en.wikipedia.org/wiki/Hendrik_Lorentz -"Planck": +"planck": - firstname: ["Max"] url: https://en.wikipedia.org/wiki/Max_Planck diff --git a/_data/cv.yml b/_data/cv.yml index 5b1157240e07..5885b30b6304 100644 --- a/_data/cv.yml +++ b/_data/cv.yml @@ -72,18 +72,18 @@ type: time_table contents: - year: 1921 - items: - - Nobel Prize in Physics + items: + - Nobel Prize in Physics - Matteucci Medal - year: 2029 - items: + items: - Max Planck Medal - title: Academic Interests type: nested_list contents: - title: Topic 1. - items: + items: - Description 1. - Description 2. - title: Topic 2. diff --git a/_includes/audio.liquid b/_includes/audio.liquid new file mode 100644 index 000000000000..338e2124985d --- /dev/null +++ b/_includes/audio.liquid @@ -0,0 +1,30 @@ +
+
diff --git a/_includes/cv/list.html b/_includes/cv/list.html deleted file mode 100644 index 7562585916d3..000000000000 --- a/_includes/cv/list.html +++ /dev/null @@ -1,5 +0,0 @@ -
    - {% for content in entry.contents %} -
  • {{ content }}
  • - {% endfor %} -
\ No newline at end of file diff --git a/_includes/cv/list.liquid b/_includes/cv/list.liquid new file mode 100644 index 000000000000..1cc2598eff77 --- /dev/null +++ b/_includes/cv/list.liquid @@ -0,0 +1,5 @@ +
    + {% for content in entry.contents %} +
  • {{ content }}
  • + {% endfor %} +
diff --git a/_includes/cv/list_groups.liquid b/_includes/cv/list_groups.liquid new file mode 100644 index 000000000000..1ca90e4b2376 --- /dev/null +++ b/_includes/cv/list_groups.liquid @@ -0,0 +1,51 @@ +
+ {% for content in entry.contents %} +
+ + + + {% if content.icon %} + + {% else %} + + {% endif %} + + {% assign i = 1 %} + {% for item in content.items %} + {% assign i = i | plus: 1 %} + {% endfor %} + + + {% for item in content.items %} + + + + {% if item.level %} + + {% endif %} + {% if item.school %} + + {% else %} + + {% endif %} + {% if item.link %} + + {% endif %} + + {% endfor %} + +
{{ content.category }}
+ {{ item.name }} + {{ item.level }}{{ item.school }} + {% endif %} + {% if item.time %} +
+ {{ item.time }} +
+
+ {% endfor %} +
diff --git a/_includes/cv/map.html b/_includes/cv/map.html deleted file mode 100644 index e0d1983ef0ee..000000000000 --- a/_includes/cv/map.html +++ /dev/null @@ -1,8 +0,0 @@ - - {% for content in entry.contents %} - - - - - {% endfor %} -
{{ content.name }}{{ content.value }}
\ No newline at end of file diff --git a/_includes/cv/map.liquid b/_includes/cv/map.liquid new file mode 100644 index 000000000000..aee3419fab61 --- /dev/null +++ b/_includes/cv/map.liquid @@ -0,0 +1,29 @@ + + {% for content in entry.contents %} + + + {% if content.value %} + + {% endif %} + {% if content.links %} + + {% endif %} + + {% endfor %} +
+ {{ content.name }} + {{ content.value }} +
+ {% for item in content.links %} + {% if item.link %} + + {% endif %} + {% endfor %} +
+
diff --git a/_includes/cv/nested_list.html b/_includes/cv/nested_list.liquid similarity index 59% rename from _includes/cv/nested_list.html rename to _includes/cv/nested_list.liquid index 4778aca07ff1..72200dec57b6 100644 --- a/_includes/cv/nested_list.html +++ b/_includes/cv/nested_list.liquid @@ -1,14 +1,16 @@
    - {% for content in entry.contents %} -
  • + {% for content in entry.contents %} +
  • {{ content.title }}
    {% if content.items %}
      {% for subitem in content.items %} -
    • {{ subitem }}
    • +
    • + {{ subitem }} +
    • {% endfor %}
    {% endif %} -
  • - {% endfor %} -
\ No newline at end of file + + {% endfor %} + diff --git a/_includes/cv/time_table.html b/_includes/cv/time_table.html deleted file mode 100644 index 123b9d099fde..000000000000 --- a/_includes/cv/time_table.html +++ /dev/null @@ -1,59 +0,0 @@ -
    - {% for content in entry.contents %} -
  • -
    - {% if content.year %} -
    - - {{ content.year }} - -
    - {% endif %} -
    - {% if content.title %} -
    {{content.title}}
    - {% endif %} - {% if content.institution %} -
    {{content.institution}}
    - {% endif %} - {% if content.description %} -
      - {% for item in content.description %} -
    • - {% if item.contents %} - {{ item.title }} -
        - {% for subitem in item.contents %} -
      • {{ subitem }}
      • - {% endfor %} -
      - {% else %} - {{ item }} - {% endif %} -
    • - {% endfor %} -
    - {% endif %} - {% if content.items %} -
      - {% for item in content.items %} -
    • - {% if item.contents %} - {{ item.title }} -
        - {% for subitem in item.contents %} -
      • {{ subitem }}
      • - {% endfor %} -
      - {% else %} - {{ item }} - {% endif %} -
    • - {% endfor %} -
    - {% endif %} -
    -
    -
  • - {% endfor %} -
\ No newline at end of file diff --git a/_includes/cv/time_table.liquid b/_includes/cv/time_table.liquid new file mode 100644 index 000000000000..beb1c52e0014 --- /dev/null +++ b/_includes/cv/time_table.liquid @@ -0,0 +1,118 @@ +
    + {% for content in entry.contents %} +
  • +
    + {% if content.year %} +
    + + + + + + {% if content.location %} + + + + {% endif %} + +
    + + {{- content.year -}} + +
    +

    + + {{ content.location }} +

    +
    +
    + {% endif %} +
    + {% if content.title %} +
    {{ content.title }}
    + {% endif %} + {% if content.department or content.institution %} + + + {% if content.institution %} + + + + + {% endif %} + {% if content.department %} + + + + + {% endif %} + +
    + + {{ content.institution }}
    + + {{ content.department }}
    + {% endif %} + {% if content.maindescription %} +
    {{ content.maindescription }}
    + {% endif %} + {% if content.description %} +
      + {% for item in content.description %} +
    • + {% if item.contents %} + {{ item.title }} +
        + {% for subitem in item.contents %} +
      • + {{ subitem }} +
      • + {% endfor %} +
      + {% else %} + {{ item }} + {% endif %} +
    • + {% endfor %} +
    + {% endif %} + {% if content.items %} +
      + {% for item in content.items %} +
    • + {% if item.contents %} + {{ item.title }} +
        + {% for subitem in item.contents %} +
      • + {{ subitem }} +
      • + {% endfor %} +
      + {% else %} + {{ item }} + {% endif %} +
    • + {% endfor %} +
    + {% endif %} + {% if content.linkitems %} + + {% endif %} +
    +
    +
  • + {% endfor %} +
diff --git a/_includes/disqus.html b/_includes/disqus.html deleted file mode 100644 index 73fe9538d0dc..000000000000 --- a/_includes/disqus.html +++ /dev/null @@ -1,13 +0,0 @@ -
- - -
diff --git a/_includes/disqus.liquid b/_includes/disqus.liquid new file mode 100644 index 000000000000..6979a4eced2d --- /dev/null +++ b/_includes/disqus.liquid @@ -0,0 +1,13 @@ +
+ + +
diff --git a/_includes/figure.html b/_includes/figure.html deleted file mode 100644 index e67e8043f6c4..000000000000 --- a/_includes/figure.html +++ /dev/null @@ -1,36 +0,0 @@ -{%- assign img_path = include.path | remove: ".jpg" | remove: ".jpeg" | remove: ".png" | remove: ".tiff" -%} - -
- - - {% if site.imagemagick.enabled %} - {% for i in site.imagemagick.widths -%} - - {% endfor -%} - {% endif %} - - - - - - - {%- if include.caption -%}
{{ include.caption }}
{%- endif %} - -
diff --git a/_includes/figure.liquid b/_includes/figure.liquid new file mode 100644 index 000000000000..7c108541225d --- /dev/null +++ b/_includes/figure.liquid @@ -0,0 +1,78 @@ +{% assign img_path = include.path | remove: '.jpg' | remove: '.jpeg' | remove: '.png' | remove: '.tiff' | remove: '.gif' %} + +
+ + + + {% if site.imagemagick.enabled %} + + {% endif %} + {{ include.alt }} + + + {% if include.caption %} +
{{ include.caption }}
+ {% endif %} +
diff --git a/_includes/footer.html b/_includes/footer.html deleted file mode 100644 index acc4688f7cff..000000000000 --- a/_includes/footer.html +++ /dev/null @@ -1,25 +0,0 @@ - {% if site.footer_fixed %} -
-
- © Copyright {{ site.time | date: '%Y' }} {{ site.first_name }} {{ site.middle_name }} {{ site.last_name }}. {{ site.footer_text }} - {%- if site.impressum_path -%} - Impressum. - {%- endif -%} - {%- if site.last_updated -%} - Last updated: {{ "now" | date: '%B %d, %Y' }}. - {%- endif %} -
-
- {%- else -%} -
-
- © Copyright {{ site.time | date: '%Y' }} {{ site.first_name }} {{ site.middle_name }} {{ site.last_name }}. {{ site.footer_text }} - {%- if site.impressum_path -%} - Impressum. - {%- endif -%} - {%- if site.last_updated -%} - Last updated: {{ "now" | date: '%B %d, %Y' }}. - {%- endif %} -
-
- {%- endif %} \ No newline at end of file diff --git a/_includes/footer.liquid b/_includes/footer.liquid new file mode 100644 index 000000000000..7541c96ca834 --- /dev/null +++ b/_includes/footer.liquid @@ -0,0 +1,31 @@ +{% if site.footer_fixed %} +
+
+ © Copyright {{ site.time | date: '%Y' }} + {{ site.first_name }} + {{ site.middle_name }} + {{ site.last_name }}. {{ site.footer_text }} + {% if site.impressum_path %} + Impressum. + {% endif %} + {% if site.last_updated %} + Last updated: {{ 'now' | date: '%B %d, %Y' }}. + {% endif %} +
+
+{% else %} +
+
+ © Copyright {{ site.time | date: '%Y' }} + {{ site.first_name }} + {{ site.middle_name }} + {{ site.last_name }}. {{ site.footer_text }} + {% if site.impressum_path %} + Impressum. + {% endif %} + {% if site.last_updated %} + Last updated: {{ 'now' | date: '%B %d, %Y' }}. + {% endif %} +
+
+{% endif %} diff --git a/_includes/giscus.html b/_includes/giscus.html deleted file mode 100644 index bb504f64dbb8..000000000000 --- a/_includes/giscus.html +++ /dev/null @@ -1,27 +0,0 @@ -
- - -
diff --git a/_includes/giscus.liquid b/_includes/giscus.liquid new file mode 100644 index 000000000000..10a5d5d813b8 --- /dev/null +++ b/_includes/giscus.liquid @@ -0,0 +1,32 @@ +
+ {% if site.giscus.repo %} + + + {% 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 %} +
diff --git a/_includes/head.html b/_includes/head.html deleted file mode 100644 index 75c9b342fb2a..000000000000 --- a/_includes/head.html +++ /dev/null @@ -1,31 +0,0 @@ - - {% include metadata.html %} - - - - - - - - - - - - - - - {% if site.icon.size <= 4 %} - - {% elsif site.icon != blank %} - - {% endif %} - - - - - {% if site.enable_darkmode %} - - - - - {% endif %} diff --git a/_includes/head.liquid b/_includes/head.liquid new file mode 100644 index 000000000000..e03272650f63 --- /dev/null +++ b/_includes/head.liquid @@ -0,0 +1,127 @@ + +{% include metadata.liquid %} + + + + + + + +{% if page.pretty_table %} + +{% endif %} + + + + + + + + +{% if page.toc and page.toc.sidebar %} + + +{% endif %} + + +{% if site.icon.size <= 4 %} + +{% elsif site.icon != blank %} + +{% endif %} + + + + +{% if site.enable_darkmode %} + + +{% endif %} + + +{% if page.map %} + +{% endif %} + + +{% if page.code_diff %} + + + +{% endif %} + +{% if page.images %} + + {% if page.images.compare %} + + {% endif %} + + {% if page.images.slider %} + + {% endif %} +{% endif %} + +{% if page.tikzjax %} + +{% endif %} diff --git a/_includes/header.html b/_includes/header.html deleted file mode 100644 index 79779f6a44ff..000000000000 --- a/_includes/header.html +++ /dev/null @@ -1,119 +0,0 @@ - -
- - - -{% if site.enable_progressbar %} - - -
- -
-
-{%- endif %} -
diff --git a/_includes/header.liquid b/_includes/header.liquid new file mode 100644 index 000000000000..e4e25b5b7434 --- /dev/null +++ b/_includes/header.liquid @@ -0,0 +1,131 @@ +
+ + + {% if site.enable_progressbar %} + + +
+ +
+
+ {% endif %} +
diff --git a/_includes/latest_posts.liquid b/_includes/latest_posts.liquid new file mode 100644 index 000000000000..e710727a605e --- /dev/null +++ b/_includes/latest_posts.liquid @@ -0,0 +1,48 @@ +
+ {% if site.latest_posts != blank %} + {% assign latest_posts_size = site.posts | size %} +
3 %} + style="max-height: 60vw" + {% endif %} + > + + {% 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 %} + + + + + {% endfor %} +
{{ item.date | date: '%b %d, %Y' }} + {% if item.redirect == blank %} + {{ item.title }} + {% elsif item.redirect contains '://' %} + {{ item.title }} + + + + {% else %} + {{ item.title }} + {% endif %} +
+
+ {% else %} +

No posts so far...

+ {% endif %} +
diff --git a/_includes/metadata.html b/_includes/metadata.html deleted file mode 100644 index a404ca97aa96..000000000000 --- a/_includes/metadata.html +++ /dev/null @@ -1,200 +0,0 @@ -{% if site.enable_google_verification or site.enable_bing_verification %} - - {% if site.enable_google_verification -%} - - {%- endif -%} - {% if site.enable_bing_verification -%} - - {%- endif -%} -{%- endif %} - - - - - - - {%- if site.title == "blank" -%} - {%- capture title -%}{{ site.first_name }} {{ site.middle_name }} {{ site.last_name }}{%- endcapture -%} - {%- else -%} - {%- capture title -%}{{ site.title }}{%- endcapture -%} - {%- endif -%} - {% if page.url == '/blog/index.html' %} - {{ site.blog_nav_title }} | {{ title }} - {%- elsif page.title != "blank" and page.url != "/" -%} - {%- if page.title == nil or page.title == "" -%} - {{ page.date | date: "%Y" }} | {{ title }} - {%- else -%} - {{ page.title }} | {{ title }} - {%- endif -%} - {%- else -%} - {{ title }} - {%- endif -%} - - - -{%- if page.keywords or site.keywords %} - -{%- endif %} - -{%- if site.serve_og_meta %} - - - - - - - - {% if page.og_image or site.og_image -%} - - {%- endif %} - - - - - - - {% if page.og_image or site.og_image -%} - - {%- endif %} - {% if site.twitter_username -%} - - - {%- endif %} -{%- endif %} - -{%- if site.serve_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.research_gate_profile -%} - {%- capture link -%}https://www.researchgate.net/profile/{{site.research_gate_profile}}{%- 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.twitter_username -%} - {%- capture link -%}https://twitter.com/{{ site.twitter_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.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.discord_id -%} - {%- capture link -%}https://discord.com/users/{{ site.discord_id }}{%- endcapture -%} - {%- assign sameaslinks = sameaslinks | push: link -%} - {%- endif -%} - {%- if sameaslinks != blank -%} - {%- assign sameaslinks = sameaslinks | split: "" -%} - {%- endif -%} - - -{%- endif %} diff --git a/_includes/metadata.liquid b/_includes/metadata.liquid new file mode 100644 index 000000000000..b7373704b85f --- /dev/null +++ b/_includes/metadata.liquid @@ -0,0 +1,241 @@ +{% if site.enable_google_verification or site.enable_bing_verification %} + + {% if site.enable_google_verification %} + + {% endif %} + {% if site.enable_bing_verification %} + + {% endif %} + + +{% endif %} + +{% capture author_name %}{{ site.first_name }}{% if site.middle_name %} {{ site.middle_name }}{% endif %} {{ site.last_name }}{% endcapture %} + + + + + + + {% 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 %} + + + +{% if page.keywords or site.keywords %} + +{% 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 %} + + + + + + + {% if page.og_image or site.og_image %} + + {% endif %} + + + + + + + {% if page.og_image or site.og_image %} + + {% endif %} + {% if site.x_username %} + + + {% endif %} +{% endif %} + +{% if site.serve_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 %} + + +{% endif %} diff --git a/_includes/news.html b/_includes/news.html deleted file mode 100644 index 14d286daa7f2..000000000000 --- a/_includes/news.html +++ /dev/null @@ -1,30 +0,0 @@ - -
- {% if site.news != blank -%} - {%- assign news_size = site.news | size -%} -
3 %}style="max-height: 10vw"{% endif %}> - - {%- assign news = site.news | reverse -%} - {% if site.news_limit %} - {% assign news_limit = site.news_limit %} - {% else %} - {% assign news_limit = news_size %} - {% endif %} - {% for item in news limit: news_limit %} - - - - - {%- endfor %} -
{{ item.date | date: "%b %-d, %Y" }} - {% if item.inline -%} - {{ item.content | remove: '

' | remove: '

' | emojify }} - {%- else -%} - {{ item.title }} - {%- endif %} -
-
- {%- else -%} -

No news so far...

- {%- endif %} -
diff --git a/_includes/news.liquid b/_includes/news.liquid new file mode 100644 index 000000000000..547ccf1a9b0d --- /dev/null +++ b/_includes/news.liquid @@ -0,0 +1,34 @@ +
+ {% if site.news != blank %} + {% assign news_size = site.news | size %} +
3 %} + style="max-height: 60vw" + {% endif %} + > + + {% 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 %} + + + + + {% endfor %} +
{{ item.date | date: '%b %d, %Y' }} + {% if item.inline %} + {{ item.content | remove: '

' | remove: '

' | emojify }} + {% else %} + {{ item.title }} + {% endif %} +
+
+ {% else %} +

No news so far...

+ {% endif %} +
diff --git a/_includes/pagination.html b/_includes/pagination.html deleted file mode 100644 index 4b8d27e3aee1..000000000000 --- a/_includes/pagination.html +++ /dev/null @@ -1,17 +0,0 @@ -{%- if paginator.total_pages > 1 -%} - -{%- endif -%} diff --git a/_includes/pagination.liquid b/_includes/pagination.liquid new file mode 100644 index 000000000000..7d504b1d1f70 --- /dev/null +++ b/_includes/pagination.liquid @@ -0,0 +1,21 @@ +{% if paginator.total_pages > 1 %} + +{% endif %} diff --git a/_includes/projects.html b/_includes/projects.html deleted file mode 100644 index 503146e2a2db..000000000000 --- a/_includes/projects.html +++ /dev/null @@ -1,36 +0,0 @@ - -
- \ No newline at end of file diff --git a/_includes/projects.liquid b/_includes/projects.liquid new file mode 100644 index 000000000000..926ad1e7da39 --- /dev/null +++ b/_includes/projects.liquid @@ -0,0 +1,35 @@ +
+ diff --git a/_includes/projects_horizontal.html b/_includes/projects_horizontal.html deleted file mode 100644 index ddf7405843c1..000000000000 --- a/_includes/projects_horizontal.html +++ /dev/null @@ -1,40 +0,0 @@ -
- {%- if project.redirect -%} - - {%- else -%} - - {%- endif -%} - diff --git a/_includes/projects_horizontal.liquid b/_includes/projects_horizontal.liquid new file mode 100644 index 000000000000..b0f12b4c8907 --- /dev/null +++ b/_includes/projects_horizontal.liquid @@ -0,0 +1,34 @@ + diff --git a/_includes/related_posts.liquid b/_includes/related_posts.liquid new file mode 100644 index 000000000000..4cf4ffbd7a26 --- /dev/null +++ b/_includes/related_posts.liquid @@ -0,0 +1,18 @@ +{% 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 %} +
+
+
+
    + + +

    Enjoy Reading This Article?

    +

    Here are some more articles you might like to read next:

    + {% endunless %} + +
  • + {{ post.title }} +
  • +{% endfor %} diff --git a/_includes/repository/repo.html b/_includes/repository/repo.html deleted file mode 100644 index a0881c0b022f..000000000000 --- a/_includes/repository/repo.html +++ /dev/null @@ -1,14 +0,0 @@ -{% assign repo_url = include.repository | split: '/' %} - -{% if site.data.repositories.github_users contains repo_url.first %} - {% assign show_owner = false %} -{% else %} - {% assign show_owner = true %} -{% endif %} - - diff --git a/_includes/repository/repo.liquid b/_includes/repository/repo.liquid new file mode 100644 index 000000000000..86aecc50705c --- /dev/null +++ b/_includes/repository/repo.liquid @@ -0,0 +1,21 @@ +{% assign repo_url = include.repository | split: '/' %} +{% if site.data.repositories.github_users contains repo_url.first %} + {% assign show_owner = false %} +{% else %} + {% assign show_owner = true %} +{% endif %} + + diff --git a/_includes/repository/repo_trophies.liquid b/_includes/repository/repo_trophies.liquid new file mode 100644 index 000000000000..07a8d42d0462 --- /dev/null +++ b/_includes/repository/repo_trophies.liquid @@ -0,0 +1,42 @@ + diff --git a/_includes/repository/repo_user.html b/_includes/repository/repo_user.html deleted file mode 100644 index ae06a058fccc..000000000000 --- a/_includes/repository/repo_user.html +++ /dev/null @@ -1,6 +0,0 @@ - diff --git a/_includes/repository/repo_user.liquid b/_includes/repository/repo_user.liquid new file mode 100644 index 000000000000..35c301dde8e2 --- /dev/null +++ b/_includes/repository/repo_user.liquid @@ -0,0 +1,14 @@ + diff --git a/_includes/resume/awards.liquid b/_includes/resume/awards.liquid new file mode 100644 index 000000000000..13bd9b3f683f --- /dev/null +++ b/_includes/resume/awards.liquid @@ -0,0 +1,19 @@ +
      + {% for content in data[1] %} +
    • +
      +
      + {% if content.date %} {% assign date = content.date | split: '-' | join: '.' %} {% else %} {% assign date = '' %} {% endif %} + {{ date }} +
      +
      +
      + {{ content.title }} +
      +
      {{ content.awarder }}
      +
      {{ content.summary }}
      +
      +
      +
    • + {% endfor %} +
    diff --git a/_includes/resume/basics.liquid b/_includes/resume/basics.liquid new file mode 100644 index 000000000000..3f8d5bfd2f92 --- /dev/null +++ b/_includes/resume/basics.liquid @@ -0,0 +1,28 @@ + + {% assign skip_basics = 'image,profiles,location' | split: ',' %} + {% for content in data[1] %} + {% + if (content[1] == "") or (skip_basics contains + content[0]) + %} + {% continue %} + {% endif %} + + + + + + {% endfor %} +
    + {{ content[0] | capitalize }} + + {% if content[0] == 'url' %} + {{ content[1] }} + {% elsif content[0] == 'email' %} + {{ content[1] }} + {% elsif content[0] == 'phone' %} + {{ content[1] }} + {% else %} + {{ content[1] }} + {% endif %} +
    diff --git a/_includes/resume/certificates.liquid b/_includes/resume/certificates.liquid new file mode 100644 index 000000000000..70ec00ac2113 --- /dev/null +++ b/_includes/resume/certificates.liquid @@ -0,0 +1,35 @@ +
    + {% assign certificates = data[1] | sort: 'date' | reverse %} + {% for content in certificates %} +
    + + + + {% if content.icon %} + + {% else %} + + {% endif %} + + {% assign i = 1 %} + {% for item in content.items %} + {% assign i = i | plus: 1 %} + {% endfor %} + + + + + + + + +
    + + + {{ content.name }} +
    + {{ content.issuer }} + {{ content.date }}
    +
    + {% endfor %} +
    diff --git a/_includes/resume/education.liquid b/_includes/resume/education.liquid new file mode 100644 index 000000000000..a570605d99da --- /dev/null +++ b/_includes/resume/education.liquid @@ -0,0 +1,54 @@ +
      + {% assign education = data[1] | sort: 'startDate' | reverse %} + {% for content in education %} +
    • +
      +
      + {% 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 %} + + + + + + {% if content.location %} + + + + {% endif %} + +
      + {% if date %} + {{ date }} + {% endif %} +
      +

      + + {{ content.location }} +

      +
      +
      +
      +
      + {{ content.studyType }} +
      +
      {{ content.institution }}
      +
      {{ content.area }}
      +
        + {% for item in content.courses %} +
      • + {{ item }} +
      • + {% endfor %} +
      +
      +
      +
    • + {% endfor %} +
    diff --git a/_includes/resume/interests.liquid b/_includes/resume/interests.liquid new file mode 100644 index 000000000000..b3b72dec5f6b --- /dev/null +++ b/_includes/resume/interests.liquid @@ -0,0 +1,33 @@ +
    + {% for content in data[1] %} +
    + + + + {% if content.icon %} + + {% else %} + + {% endif %} + + {% assign i = 1 %} + {% for item in content.items %} + {% assign i = i | plus: 1 %} + {% endfor %} + + + {% for item in content.keywords %} + + + + + {% endfor %} + +
    + + {{ content.name }}
    + {{ item }} +
    +
    + {% endfor %} +
    diff --git a/_includes/resume/languages.liquid b/_includes/resume/languages.liquid new file mode 100644 index 000000000000..36d7875a6b40 --- /dev/null +++ b/_includes/resume/languages.liquid @@ -0,0 +1,31 @@ +
    + {% for content in data[1] %} +
    + + + + {% if content.icon %} + + {% else %} + + {% endif %} + + {% assign i = 1 %} + {% for item in content.items %} + {% assign i = i | plus: 1 %} + {% endfor %} + + + + + + + +
    + + {{ content.language }}
    + {{ content.fluency }} +
    +
    + {% endfor %} +
    diff --git a/_includes/resume/projects.liquid b/_includes/resume/projects.liquid new file mode 100644 index 000000000000..5f47ea8b461f --- /dev/null +++ b/_includes/resume/projects.liquid @@ -0,0 +1,32 @@ +
      + {% for content in data[1] %} +
    • +
      +
      + {% 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 %} + {{ date }} +
      +
      +
      + {{ content.name }} +
      +
      {{ content.summary }}
      +
        + {% for item in content.highlights %} +
      • + {{ item }} +
      • + {% endfor %} +
      +
      +
      +
    • + {% endfor %} +
    diff --git a/_includes/resume/publications.liquid b/_includes/resume/publications.liquid new file mode 100644 index 000000000000..ef234139c611 --- /dev/null +++ b/_includes/resume/publications.liquid @@ -0,0 +1,28 @@ +
      + {% assign publications = data[1] | sort: 'releaseDate' | reverse %} + {% for content in publications %} +
    • +
      +
      + {% if content.releaseDate %} {% assign date = content.releaseDate | split: '-' | join: '.' %} {% else %} {% assign date = '' %} {% endif %} + + + + + + +
      + {{ date }} +
      +
      +
      +
      + {{ content.name }} +
      +
      {{ content.publisher }}
      +
      {{ content.summary }}
      +
      +
      +
    • + {% endfor %} +
    diff --git a/_includes/resume/references.liquid b/_includes/resume/references.liquid new file mode 100644 index 000000000000..22365685b766 --- /dev/null +++ b/_includes/resume/references.liquid @@ -0,0 +1,31 @@ +
    + {% for content in data[1] %} +
    + + + + {% if content.icon %} + + {% else %} + + {% endif %} + + {% assign i = 1 %} + {% for item in content.items %} + {% assign i = i | plus: 1 %} + {% endfor %} + + + + + + + +
    + + {{ content.name }}
    + {{ content.reference }} +
    +
    + {% endfor %} +
    diff --git a/_includes/resume/skills.liquid b/_includes/resume/skills.liquid new file mode 100644 index 000000000000..672fd0564a9a --- /dev/null +++ b/_includes/resume/skills.liquid @@ -0,0 +1,33 @@ +
    + {% for content in data[1] %} +
    + + + + {% if content.icon %} + + {% else %} + + {% endif %} + + {% assign i = 1 %} + {% for item in content.items %} + {% assign i = i | plus: 1 %} + {% endfor %} + + + {% for item in content.keywords %} + + + + + {% endfor %} + +
    + + {{ content.name }}
    + {{ item }} +
    +
    + {% endfor %} +
    diff --git a/_includes/resume/volunteer.liquid b/_includes/resume/volunteer.liquid new file mode 100644 index 000000000000..c0b41f7df044 --- /dev/null +++ b/_includes/resume/volunteer.liquid @@ -0,0 +1,34 @@ +
      + {% assign volunteer = data[1] | sort: 'startDate' | reverse %} + {% for content in volunteer %} +
    • +
      +
      + {% 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 %} + {{ date }} +
      +
      +
      + {{ content.position }} +
      +
      {{ content.organization }}
      +
      {{ content.summary }}
      +
        + {% for item in content.highlights %} +
      • + {{ item }} +
      • + {% endfor %} +
      +
      +
      +
    • + {% endfor %} +
    diff --git a/_includes/resume/work.liquid b/_includes/resume/work.liquid new file mode 100644 index 000000000000..50b107442da3 --- /dev/null +++ b/_includes/resume/work.liquid @@ -0,0 +1,34 @@ +
      + {% assign work = data[1] | sort: 'startDate' | reverse %} + {% for content in work %} +
    • +
      +
      + {% 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 %} + {{ date }} +
      +
      +
      + {{ content.position }} +
      +
      {{ content.name }}
      +
      {{ content.summary }}
      +
        + {% for item in content.highlights %} +
      • + {{ item }} +
      • + {% endfor %} +
      +
      +
      +
    • + {% endfor %} +
    diff --git a/_includes/scripts/analytics.html b/_includes/scripts/analytics.html deleted file mode 100644 index db2aeef96cd0..000000000000 --- a/_includes/scripts/analytics.html +++ /dev/null @@ -1,18 +0,0 @@ -{%- if site.enable_google_analytics -%} - - - -{%- endif -%} -{%- if site.enable_panelbear_analytics -%} - - - -{%- endif -%} diff --git a/_includes/scripts/analytics.liquid b/_includes/scripts/analytics.liquid new file mode 100644 index 000000000000..886cfd3aa465 --- /dev/null +++ b/_includes/scripts/analytics.liquid @@ -0,0 +1,24 @@ +{% if site.enable_google_analytics %} + + + +{% endif %} +{% if site.enable_cronitor_analytics %} + + + +{% endif %} diff --git a/_includes/scripts/badges.html b/_includes/scripts/badges.liquid similarity index 55% rename from _includes/scripts/badges.html rename to _includes/scripts/badges.liquid index b8a3ccddec36..72706905136d 100644 --- a/_includes/scripts/badges.html +++ b/_includes/scripts/badges.liquid @@ -1,6 +1,6 @@ -{%- if site.badges.altmetric_badge %} +{% if site.enable_publication_badges.altmetric %} -{%- endif %} -{%- if site.badges.dimensions_badge %} +{% endif %} +{% if site.enable_publication_badges.dimensions %} -{%- endif %} +{% endif %} diff --git a/_includes/scripts/bootstrap.html b/_includes/scripts/bootstrap.html deleted file mode 100644 index 1c213650a841..000000000000 --- a/_includes/scripts/bootstrap.html +++ /dev/null @@ -1,3 +0,0 @@ - - - diff --git a/_includes/scripts/bootstrap.liquid b/_includes/scripts/bootstrap.liquid new file mode 100644 index 000000000000..647aaf1a0d52 --- /dev/null +++ b/_includes/scripts/bootstrap.liquid @@ -0,0 +1,8 @@ + + + + diff --git a/_includes/scripts/chartjs.liquid b/_includes/scripts/chartjs.liquid new file mode 100644 index 000000000000..8574f749ec7f --- /dev/null +++ b/_includes/scripts/chartjs.liquid @@ -0,0 +1,19 @@ +{% if page.chart and page.chart.chartjs %} + + +{% endif %} diff --git a/_includes/scripts/diff2html.liquid b/_includes/scripts/diff2html.liquid new file mode 100644 index 000000000000..e3add886e74e --- /dev/null +++ b/_includes/scripts/diff2html.liquid @@ -0,0 +1,31 @@ +{% if page.code_diff %} + + + +{% endif %} diff --git a/_includes/scripts/echarts.liquid b/_includes/scripts/echarts.liquid new file mode 100644 index 000000000000..8b61abd51c81 --- /dev/null +++ b/_includes/scripts/echarts.liquid @@ -0,0 +1,47 @@ +{% if page.chart and page.chart.echarts %} + + {% if site.enable_darkmode %} + + {% endif %} + +{% endif %} diff --git a/_includes/scripts/imageLayouts.liquid b/_includes/scripts/imageLayouts.liquid new file mode 100644 index 000000000000..bb8c5a2c744b --- /dev/null +++ b/_includes/scripts/imageLayouts.liquid @@ -0,0 +1,13 @@ +{% if page.images %} + {% if page.images.compare %} + + {% endif %} + {% if page.images.slider %} + + {% endif %} +{% endif %} diff --git a/_includes/scripts/jquery.html b/_includes/scripts/jquery.html deleted file mode 100644 index f84a2f22d5b6..000000000000 --- a/_includes/scripts/jquery.html +++ /dev/null @@ -1,2 +0,0 @@ - - diff --git a/_includes/scripts/jquery.liquid b/_includes/scripts/jquery.liquid new file mode 100644 index 000000000000..628f8730112e --- /dev/null +++ b/_includes/scripts/jquery.liquid @@ -0,0 +1,6 @@ + + diff --git a/_includes/scripts/leaflet.liquid b/_includes/scripts/leaflet.liquid new file mode 100644 index 000000000000..13b2bda64b41 --- /dev/null +++ b/_includes/scripts/leaflet.liquid @@ -0,0 +1,32 @@ +{% if page.map %} + + +{% endif %} diff --git a/_includes/scripts/masonry.html b/_includes/scripts/masonry.html deleted file mode 100644 index 804389d31ad3..000000000000 --- a/_includes/scripts/masonry.html +++ /dev/null @@ -1,6 +0,0 @@ - {%- if site.enable_masonry -%} - - - - - {%- endif -%} diff --git a/_includes/scripts/masonry.liquid b/_includes/scripts/masonry.liquid new file mode 100644 index 000000000000..cbc3c9a71eb6 --- /dev/null +++ b/_includes/scripts/masonry.liquid @@ -0,0 +1,16 @@ +{% if site.enable_masonry %} + + + + +{% endif %} diff --git a/_includes/scripts/mathjax.html b/_includes/scripts/mathjax.html deleted file mode 100644 index c55ec056d26b..000000000000 --- a/_includes/scripts/mathjax.html +++ /dev/null @@ -1,12 +0,0 @@ - {%- if site.enable_math -%} - - - - - {%- endif %} diff --git a/_includes/scripts/mathjax.liquid b/_includes/scripts/mathjax.liquid new file mode 100644 index 000000000000..7a454835721a --- /dev/null +++ b/_includes/scripts/mathjax.liquid @@ -0,0 +1,17 @@ +{% if site.enable_math %} + + + + +{% endif %} diff --git a/_includes/scripts/mermaid.liquid b/_includes/scripts/mermaid.liquid new file mode 100644 index 000000000000..e4f18396dba7 --- /dev/null +++ b/_includes/scripts/mermaid.liquid @@ -0,0 +1,55 @@ +{% if page.mermaid and page.mermaid.enabled %} + + {% if page.mermaid.zoomable %} + + {% endif %} + +{% endif %} diff --git a/_includes/scripts/misc.html b/_includes/scripts/misc.html deleted file mode 100644 index 08ba49f03517..000000000000 --- a/_includes/scripts/misc.html +++ /dev/null @@ -1,14 +0,0 @@ -{% if site.enable_tooltips %} - - -{%- endif %} -{%- if site.enable_medium_zoom %} - - - -{%- endif -%} - - - diff --git a/_includes/scripts/misc.liquid b/_includes/scripts/misc.liquid new file mode 100644 index 000000000000..07b117e46990 --- /dev/null +++ b/_includes/scripts/misc.liquid @@ -0,0 +1,36 @@ +{% if site.enable_tooltips %} + + +{% endif %} +{% if site.enable_medium_zoom %} + + + +{% endif %} +{% if page.toc and page.toc.sidebar %} + + +{% endif %} + + +{% if page.pretty_table %} + + +{% endif %} + + + + + + + + diff --git a/_includes/scripts/progressBar.html b/_includes/scripts/progressBar.html deleted file mode 100644 index 88bb73cd35e4..000000000000 --- a/_includes/scripts/progressBar.html +++ /dev/null @@ -1,80 +0,0 @@ -{% if site.enable_progressbar %} - - - - -{%- endif %} diff --git a/_includes/scripts/progressBar.liquid b/_includes/scripts/progressBar.liquid new file mode 100644 index 000000000000..08d191558473 --- /dev/null +++ b/_includes/scripts/progressBar.liquid @@ -0,0 +1,78 @@ +{% if site.enable_progressbar %} + + +{% endif %} diff --git a/_includes/scripts/tikzjax.liquid b/_includes/scripts/tikzjax.liquid new file mode 100644 index 000000000000..aa2a3c163c37 --- /dev/null +++ b/_includes/scripts/tikzjax.liquid @@ -0,0 +1,3 @@ +{% if page.tikzjax %} + +{% endif %} diff --git a/_includes/scripts/vega.liquid b/_includes/scripts/vega.liquid new file mode 100644 index 000000000000..c870cf3577ae --- /dev/null +++ b/_includes/scripts/vega.liquid @@ -0,0 +1,47 @@ +{% if page.chart and page.chart.vega_lite %} + + + + + +{% endif %} diff --git a/_includes/scripts/wechatModal.liquid b/_includes/scripts/wechatModal.liquid new file mode 100644 index 000000000000..17285b3032cb --- /dev/null +++ b/_includes/scripts/wechatModal.liquid @@ -0,0 +1,18 @@ +{% if site.wechat_qr %} + + + +{% endif %} diff --git a/_includes/selected_papers.html b/_includes/selected_papers.html deleted file mode 100644 index cfaeb80386e3..000000000000 --- a/_includes/selected_papers.html +++ /dev/null @@ -1,4 +0,0 @@ - -
    - {% bibliography -f papers -q @*[selected=true]* %} -
    diff --git a/_includes/selected_papers.liquid b/_includes/selected_papers.liquid new file mode 100644 index 000000000000..e9bf0935dd14 --- /dev/null +++ b/_includes/selected_papers.liquid @@ -0,0 +1,3 @@ +
    + {% bibliography --group_by none --query @*[selected=true]* %} +
    diff --git a/_includes/social.html b/_includes/social.html deleted file mode 100644 index 38b5d3bda6f8..000000000000 --- a/_includes/social.html +++ /dev/null @@ -1,96 +0,0 @@ - {%- if site.email -%} - - {% endif %} - {%- if site.telegram_username -%} - - {% endif %} - {%- if site.whatsapp_number -%} - - {% endif %} - {%- if site.orcid_id -%} - - {% endif %} - {%- if site.scholar_userid -%} - - {% endif %} - {%- if site.semanticscholar_id -%} - - {% endif %} - {%- if site.publons_id -%} - - {% endif %} - {%- if site.research_gate_profile -%} - - {% endif %} - {%- if site.github_username -%} - - {% endif %} - {%- if site.linkedin_username -%} - - {% endif %} - {%- if site.twitter_username -%} - - {% endif %} - {%- if site.mastodon_username -%} - - {% endif %} - {%- if site.medium_username -%} - - {% endif %} - {%- if site.quora_username -%} - - {% endif %} - {%- if site.blogger_url -%} - - {% endif %} - {%- if site.work_url -%} - - {% endif %} - {%- if site.wikidata_id -%} - - {% endif %} - {%- if site.strava_userid -%} - - {% endif %} - {%- if site.keybase_username -%} - - {% endif %} - {%- if site.gitlab_username -%} - - {% endif %} - {%- if site.dblp_url -%} - - {% endif %} - {%- if site.stackoverflow_id -%} - - {% endif %} - {%- if site.kaggle_id -%} - - {% endif %} - {%- if site.lastfm_id -%} - - {% endif %} - {%- if site.spotify_id -%} - - {% endif %} - {%- if site.pinterest_id -%} - - {% endif %} - {%- if site.unsplash_id -%} - - {% endif %} - {%- if site.instagram_id -%} - - {% endif %} - {%- if site.facebook_id -%} - - {% endif %} - {%- if site.youtube_id -%} - - {% endif %} - {%- if site.discord_id -%} - - {% endif %} - {%- if site.rss_icon -%} - - {% endif %} diff --git a/_includes/social.liquid b/_includes/social.liquid new file mode 100644 index 000000000000..8d3a783969b6 --- /dev/null +++ b/_includes/social.liquid @@ -0,0 +1,118 @@ +{% if site.email %} + +{% endif %} +{% if site.telegram_username %} + +{% endif %} +{% if site.whatsapp_number %} + +{% endif %} +{% if site.orcid_id %} + +{% endif %} +{% if site.scholar_userid %} + +{% endif %} +{% if site.semanticscholar_id %} + +{% endif %} +{% if site.publons_id %} + +{% endif %} +{% if site.lattes_id %} + +{% endif %} +{% if site.osf_id %} + +{% endif %} +{% if site.research_gate_profile %} + +{% endif %} +{% if site.scopus_id %} + +{% endif %} +{% if site.github_username %} + +{% endif %} +{% if site.linkedin_username %} + +{% endif %} +{% if site.x_username %} + +{% endif %} +{% if site.mastodon_username %} + +{% endif %} +{% if site.medium_username %} + +{% endif %} +{% if site.quora_username %} + +{% endif %} +{% if site.blogger_url %} + +{% endif %} +{% if site.work_url %} + +{% endif %} +{% if site.wikidata_id %} + +{% endif %} +{% if site.wikipedia_id %} + +{% endif %} +{% if site.strava_userid %} + +{% endif %} +{% if site.keybase_username %} + +{% endif %} +{% if site.gitlab_username %} + +{% endif %} +{% if site.dblp_url %} + +{% endif %} +{% if site.stackoverflow_id %} + +{% endif %} +{% if site.kaggle_id %} + +{% endif %} +{% if site.lastfm_id %} + +{% endif %} +{% if site.spotify_id %} + +{% endif %} +{% if site.pinterest_id %} + +{% endif %} +{% if site.unsplash_id %} + +{% endif %} +{% if site.instagram_id %} + +{% endif %} +{% if site.facebook_id %} + +{% endif %} +{% if site.youtube_id %} + +{% endif %} +{% if site.discord_id %} + +{% endif %} +{% if site.zotero_username %} + +{% endif %} +{% if site.rss_icon %} + +{% endif %} +{% if site.wechat_qr %} + +
    + WeChat QR +
    + {% include scripts/wechatModal.liquid %} +{% endif %} diff --git a/_includes/video.liquid b/_includes/video.liquid new file mode 100644 index 000000000000..8823106f5b28 --- /dev/null +++ b/_includes/video.liquid @@ -0,0 +1,97 @@ +{% assign extension = include.path | split: '.' | last %} + +
    + {% if extension == 'mp4' or extension == 'webm' or extension == 'ogg' %} +