Compare commits

...

705 Commits

Author SHA1 Message Date
3661145943 update pp 2026-02-18 20:52:48 +01:00
d73cb66f67 Broken merge 2026-02-18 17:09:33 +01:00
0b852e1d52 Merge remote-tracking branch 'gh/main' 2026-02-18 16:59:30 +01:00
GitHub Actions
0f1471b33c Update Google Scholar citations 2026-02-06 01:44:38 +00:00
george-gca
bbd122b34c Auto update markdown TOC 2026-02-04 13:17:49 +00:00
George
4cfd776f5d
Improve explanation of create from this template (#3499)
This pull request improves the documentation to clarify the recommended
way to create a new site using the al-folio template, emphasizing the
use of the "Use this template" button instead of forking. It explains
the differences between the two approaches, highlights common pitfalls
with forking, and provides guidance for users who have already forked
the repository.

Documentation improvements regarding repository creation:

* Added a prominent section in `README.md` explaining why "Use this
template" is preferred over forking, including step-by-step instructions
and advice for users who have already forked.
* Updated `QUICKSTART.md` to strongly recommend using the "Use this
template" button, clarified the steps for creating a new repository, and
included tips for users who have already forked by mistake.
* Added a new section in `INSTALL.md` detailing the differences between
using the template and forking, common pitfalls, and best practices for
contributing.

Signed-off-by: George Araújo <george.gcac@gmail.com>
2026-02-04 10:17:32 -03:00
george-gca
de601df0c0 Auto update markdown TOC 2026-02-04 13:16:50 +00:00
Copilot
14136f6592
Add GDPR-compliant cookie consent with analytics blocking (#3492)
Implements cookie consent using vanilla-cookieconsent v3 to comply with
GDPR requirements. Analytics scripts are blocked until user consent is
obtained.

## Changes

**Library Integration**
- Added `vanilla-cookieconsent@3.1.0` to `_config.yml` third-party
libraries with SRI hashes
- Created `_scripts/cookie-consent-setup.js` with consent modal and
settings configuration
- Added CSS/JS includes in `_includes/head.liquid` and
`_includes/scripts.liquid`

**Analytics Blocking**
- Modified analytics scripts in `scripts.liquid` and
`distill_scripts.liquid` to use conditional `type="text/plain"
data-category="analytics"` when consent is disabled
- Blocks Google Analytics, Cronitor, Pirsch, and OpenPanel until consent
granted
- Library automatically converts blocked scripts to executable on user
acceptance

**Configuration**
- Added `enable_cookie_consent` flag (default: `false`)
- Cookie categories: `necessary` (always on), `analytics` (optional)
- 182-day cookie expiration, auto-clear on rejection

## Implementation

```liquid
{% if site.enable_cookie_consent %}
  <script type="text/plain" data-category="analytics" async src="...gtag.js"></script>
{% else %}
  <script async src="...gtag.js"></script>
{% endif %}
```

Enable in `_config.yml`:
```yaml
enable_cookie_consent: true
```

## Screenshots

**Consent Modal**

![Cookie consent
modal](https://github.com/user-attachments/assets/9edcddad-6a54-49ca-a164-083157d98370)

**Settings Modal**

![Cookie
preferences](https://github.com/user-attachments/assets/cf2a58ea-68c0-4699-b401-38377b98b718)

> [!WARNING]
>
> <details>
> <summary>Firewall rules blocked me from connecting to one or more
addresses (expand for details)</summary>
>
> #### I tried to connect to the following addresses, but was blocked by
firewall rules:
>
> - `cdn.jsdelivr.net`
>   - Triggering command: `/usr/bin/curl curl -s REDACTED` (dns block)
> - `cookieconsent.orestbida.com`
> - Triggering command:
`/home/REDACTED/work/_temp/ghcca-node/node/bin/node
/home/REDACTED/work/_temp/ghcca-node/node/bin/node --enable-source-maps
/home/REDACTED/work/_temp/copilot-developer-action-main/dist/index.js`
(dns block)
> - `medium.com`
> - Triggering command: `/usr/local/bin/ruby ruby
/usr/local/bundle/bin/bundle exec jekyll serve --watch --port=8080
--host=0.0.0.0 --livereload --verbose --trace --force_polling s
6_64-linux /etc/locale.gen by/backward -binutils_2.44-3grep .deb eb
/systemd-sysctl` (dns block)
> - `publish.twitter.com`
> - Triggering command: `/usr/local/bin/ruby ruby
/usr/local/bundle/bin/bundle exec jekyll serve --watch --port=8080
--host=0.0.0.0 --livereload --verbose --trace --force_polling lude
lude/ruby-4.0.0//run/containerd/io.containerd.runtime.v2.task/moby/a4760212ce4eda97e32b6dfa4d3ea/usr/sbin/iptables
r/runc-log.json f8_range lude r-strong E r/wc7in709a54d7hshow` (dns
block)
>
> If you need me to access, download, or install something from one of
these locations, you can either:
>
> - Configure [Actions setup
steps](https://gh.io/copilot/actions-setup-steps) to set up my
environment, which run before the firewall is enabled
> - Add the appropriate URLs or hosts to the custom allowlist in this
repository's [Copilot coding agent
settings](https://github.com/alshedivat/al-folio/settings/copilot/coding_agent)
(admins only)
>
> </details>

<!-- START COPILOT ORIGINAL PROMPT -->



<details>

<summary>Original prompt</summary>

> 
> ----
> 
> *This section details on the original issue you should resolve*
> 
> <issue_title>GDPR compliant cookie consent dialog</issue_title>
> <issue_description>Hi,
> 
> since I am from Europe and want my site to be accessed by EU citizens
I need to ask users if they are ok with the use of cookies. Adding a
dialogue by default that that asks the user before any cookies /
localStorage are used would be nice.
> 
> I have integrated the dialog from
[https://www.cookieconsent.com/](https://www.cookieconsent.com/) on [my
website](http://hschwane.github.io) and am happy to file a PR if you are
interested. However It is not shown directly at the top, but below the
menu bar for some reason. Not sure how to fix that.
> </issue_description>
> 
> <agent_instructions>Implement this using cookie consent dialog from
https://github.com/orestbida/cookieconsent. The documentation is
available at
https://cookieconsent.orestbida.com/essential/getting-started.html.</agent_instructions>
> 
> ## Comments on the Issue (you are @copilot in this section)
> 
> <comments>
> <comment_new><author>@alshedivat</author><body>
> @hschwane, thanks for pointing this out. It's would be great if you
could send a PR.
> 
> To answer your question about positioning, the menu bar has the
absolute position at the top of the page and keeps moving with
scrolling. You can change that behavior in `_config.yml` by setting
`navbar_fixed: false` (see [line
27](https://github.com/alshedivat/al-folio/blob/master/_config.yml#L27)).
If you send a PR with basic functionality, I can help with adjusting the
styles a bit. Thanks!</body></comment_new>
> <comment_new><author>@alshedivat</author><body>
> Just catching up on this discussion.
> 
> @hschwane, thanks for providing an implementation based on
`ihavecookies`! I looked through alshedivat/al-folio#223. It seems like
to be able to correctly (un)block different types of cookies (all of
which are third-party cookies) requires adding quite a bit of extra
JavaScript (including adding it directly to posts or pages in some
cases, e.g., when posts embed youtube videos or other external content).
This approach will put some extra burden on contributors and maintainers
of al-folio down the line.
> 
> By the way, the dialog from https://www.cookieconsent.com/ is similar
in that sense as it requires to manually add ALL scripts that use
cookies. So, if someone contributes a new feature to al-folio that uses
cookies, the contributor would have to go and update the cookie consent
dialog as well (or edit quite a bit of JS if `ihavecookies` is used).
> 
> Thinking about this more, I currently see only three options:
> 1. If we want to have cookie consent as a core part of al-folio (which
can be easily enabled or disabled), it needs to be a service that
automatically identifies and blocks cookies, without putting an extra
burden on the contributors or maintainers. The hosted version of [Cookie
Consent by Osano](https://www.osano.com/features/consent-management) is
an example.
> 2. Another option is to provide a very minimalistic cookie consent
dialog which simply says that the website uses cookies, without an
option to opt-in or opt-out (e.g., see the open-source edition of
[Osano](https://www.osano.com/cookieconsent/download/)).
> 3. Finally, not have cookie consent as part of al-folio, and make the
user responsible for figuring out whether they need a consent dialog and
which service to use.
> 
> Let me know what you think.</body></comment_new>
> <comment_new><author>@alshedivat</author><body>
> the best way to add GDPR compliant cookie consent is using
https://github.com/orestbida/cookieconsent</body></comment_new>
> </comments>
> 


</details>


> **Custom agent used: customization_agent**
> Expert customization assistant for the al-folio Jekyll academic
website template



<!-- START COPILOT CODING AGENT SUFFIX -->

- Fixes alshedivat/al-folio#199

<!-- START COPILOT CODING AGENT TIPS -->
---

 Let Copilot coding agent [set things up for
you](https://github.com/alshedivat/al-folio/issues/new?title=+Set+up+Copilot+instructions&body=Configure%20instructions%20for%20this%20repository%20as%20documented%20in%20%5BBest%20practices%20for%20Copilot%20coding%20agent%20in%20your%20repository%5D%28https://gh.io/copilot-coding-agent-tips%29%2E%0A%0A%3COnboard%20this%20repo%3E&assignees=copilot)
— coding agent works faster and does higher quality work when set up for
your repo.

---------

Signed-off-by: George Araújo <george.gcac@gmail.com>
Co-authored-by: copilot-swe-agent[bot] <198982749+Copilot@users.noreply.github.com>
Co-authored-by: george-gca <31376482+george-gca@users.noreply.github.com>
Co-authored-by: George Araújo <george.gcac@gmail.com>
Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
2026-02-04 10:16:34 -03:00
GitHub Actions
dae018f6d2 Update Google Scholar citations 2026-02-04 00:57:08 +00:00
George
5d692679ef
Added information about creating custom metadata for collections 2026-02-02 20:58:47 -03:00
George
955dd3e6f2
Fix Gemini settings 2026-02-01 14:49:08 -03:00
George
c49a8f5e69
Enhance documentation for GitHub Copilot agents
Added CLAUDE.md file for AI assistant integration and updated Copilot agents description.
2026-01-31 19:56:41 -03:00
George
b67d2a19d8
Making Gemini and Claude configuration files point to AGENTS.md (#3494)
This pull request updates project documentation to clarify and
standardize the development workflow, Git practices, and troubleshooting
resources. The main changes include adding a dedicated Git workflow
guide and reorganizing the `AGENTS.md` file for better clarity and
usability.

**Documentation and Workflow Improvements:**

* Added a new `.github/GIT_WORKFLOW.md` file detailing commit message
conventions, types, and best practices for staging and ignoring files.
* Reorganized and clarified the pre-commit checklist and local
development instructions in `AGENTS.md`, emphasizing Docker usage and
proper code formatting.
* Updated the section on configuration and troubleshooting in
`AGENTS.md` to better direct users to relevant resources and removed
redundant or outdated instructions.
[[1]](diffhunk://#diff-a54ff182c7e8acf56acfd6e4b9c3ff41e2c41a31c9b211b2deb9df75d9a478f9L57-R58)
[[2]](diffhunk://#diff-a54ff182c7e8acf56acfd6e4b9c3ff41e2c41a31c9b211b2deb9df75d9a478f9L100-R74)

**Configuration and Context Updates:**

* Added a `.gemini/settings.json` file to define context files for
Gemini agent operations, ensuring relevant documentation is available
for automation tools.
* Created `CLAUDE.md` file pointing to `AGENTS.md`.

---------

Signed-off-by: George Araújo <george.gcac@gmail.com>
Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
2026-01-31 19:52:26 -03:00
Jaskirat Singh Maskeen
d86331af3c
Fix #2598, shift to last_modified_at instead of last_updated. (#3493)
Use `last_modified_at` rather than `last_updated`. So that the
jekyll-sitemap plugin automatically looks for the standard
`last_modified_at` front matter field to generate the `<lastmod>` tag in
your `sitemap.xml`.

It fixes [#2598](https://github.com/alshedivat/al-folio/issues/2598) 

Also, it preserves backward compatibility, as the updated metadata logic
prioritizes the `page.last_modified_at`, and defaults to
`page.last_updated`.
2026-01-31 12:38:24 -03:00
Doğaç Eldenk
e6542e3f4b
fix tikzjax (#3477)
Fixes #3216 – TikZJax not working.

1. Changing SHA simply doesn't work, `window.tikzjax` is undefined and
it doesn't render anything.
2. I switched to the JS distributed by
[benrbray/tikzjax](https://github.com/benrbray/tikzjax/tree/develop),
added under `assets.js` to prevent future issues.
3. Documents now require to start with `\begin{document}`, should be a
simple fix.

<img width="789" height="341" alt="Screenshot 2026-01-24 at 1 10 39 PM"
src="https://github.com/user-attachments/assets/8272471d-df94-4118-a726-00ed09dcf1e8"
/>
<img width="780" height="380" alt="Screenshot 2026-01-24 at 1 06 13 PM"
src="https://github.com/user-attachments/assets/11284661-de15-4d57-a1d9-4959f562f826"
/>
2026-01-30 22:07:24 -03:00
Sundar Gurumurthy
1cc23ba23a
fix: CV rendering failure without Volunteer field (#3479)
Fixes #3478
2026-01-30 10:37:45 -03:00
George
751670c84f
Improve AGENTS.md structure
Removed duplicate quick links for coding agents and customization.
2026-01-29 13:07:09 -03:00
Devansh Lodha
2161db53c9
fix(devcontainer): remove broken yarn apt source to fix build (#3490)
This change introduces a Dockerfile to the devcontainer configuration
that removes the broken Yarn repository from `/etc/apt/sources.list.d/`.
This prevents `apt-get update` from failing due to an expired or missing
GPG key for the Yarn repository.

Fixes #3487
2026-01-29 11:47:54 -03:00
Devansh Lodha
5aad0c6bbb
docs: correct email configuration location in QUICKSTART.md (#3489)
Fixes #3488

Updates `QUICKSTART.md` to correctly point to `_data/socials.yml` for
email configuration, as the `email` field is not present in
`_config.yml`.
2026-01-29 10:50:10 -03:00
george-gca
36929ba761 Auto update markdown TOC 2026-01-29 01:55:22 +00:00
George
25b758805c
Added copilot instructions, AGENTS.md, improved README files (#3486)
This pull request introduces several documentation improvements and adds
comprehensive Copilot and agent instruction files to the al-folio
repository. The most significant changes are the addition of
repository-wide and path-specific Copilot instructions, updates to agent
documentation to reference these instructions, and improvements to the
documentation structure and clarity regarding file purposes and
workflows.

**Copilot and Agent Instruction Enhancements:**

- Added a new `.github/copilot-instructions.md` file providing detailed,
repository-wide setup, build, CI/CD, troubleshooting, and file format
guidance for Copilot coding agents.
- Introduced `.github/instructions/bibtex-bibliography.instructions.md`
with specific instructions for editing and validating BibTeX files,
including custom keywords, formatting rules, and integration with
Jekyll-Scholar.
- Updated agent documentation files (`customize.agent.md`,
`docs.agent.md`) to reference the new Copilot instruction files and
explain their purpose and usage for both repository-wide and
path-specific scenarios.
[[1]](diffhunk://#diff-15864f2655921f50a97689076e3b8feba0da320463750845be6a76eb2e30bfe4L57-R65)
[[2]](diffhunk://#diff-15864f2655921f50a97689076e3b8feba0da320463750845be6a76eb2e30bfe4L107-R122)
[[3]](diffhunk://#diff-961a46180ce568ce43c20bf7129dc5e4926a9aa4e0d7bc19926ca5ee3ff95cd0L49-R51)
[[4]](diffhunk://#diff-961a46180ce568ce43c20bf7129dc5e4926a9aa4e0d7bc19926ca5ee3ff95cd0L106-R137)

**Documentation Structure and Clarity Improvements:**

- Clarified and reorganized the documentation file list in agent files,
removing references to deprecated or merged files (e.g.,
`MAINTENANCE.md`, `ACCESSIBILITY.md`) and updating descriptions to
reflect current usage.
[[1]](diffhunk://#diff-15864f2655921f50a97689076e3b8feba0da320463750845be6a76eb2e30bfe4L57-R65)
[[2]](diffhunk://#diff-961a46180ce568ce43c20bf7129dc5e4926a9aa4e0d7bc19926ca5ee3ff95cd0L21-R21)
[[3]](diffhunk://#diff-961a46180ce568ce43c20bf7129dc5e4926a9aa4e0d7bc19926ca5ee3ff95cd0L106-R137)
- Enhanced documentation on the purpose and application of each
documentation file, and added detailed explanations of Copilot
instruction files and their role in project development.

**Workflow and Validation Updates:**

- Updated references and descriptions for GitHub Actions workflows in
agent documentation to include the Copilot environment setup and clarify
pre-commit and CI/CD requirements.
[[1]](diffhunk://#diff-15864f2655921f50a97689076e3b8feba0da320463750845be6a76eb2e30bfe4L57-R65)
[[2]](diffhunk://#diff-961a46180ce568ce43c20bf7129dc5e4926a9aa4e0d7bc19926ca5ee3ff95cd0L49-R51)
- Corrected references for accessibility guidance, now directing users
to `TROUBLESHOOTING.md` instead of the removed `ACCESSIBILITY.md`.

These changes collectively improve the onboarding experience for both
human contributors and AI agents, ensuring consistent adherence to
project conventions and reducing errors.

**References:**  

[[1]](diffhunk://#diff-227c2c26cb2ee0ce0f46a320fc48fbcbdf21801a57f59161b1d0861e8aad55f5R1-R253)
[[2]](diffhunk://#diff-6fd2827fb8d9c2dd6dc973572201853487ecbbd1120b00425d4f1c21dfdcf35fR1-R174)
[[3]](diffhunk://#diff-15864f2655921f50a97689076e3b8feba0da320463750845be6a76eb2e30bfe4L57-R65)
[[4]](diffhunk://#diff-15864f2655921f50a97689076e3b8feba0da320463750845be6a76eb2e30bfe4L107-R122)
[[5]](diffhunk://#diff-15864f2655921f50a97689076e3b8feba0da320463750845be6a76eb2e30bfe4L550-R562)
[[6]](diffhunk://#diff-961a46180ce568ce43c20bf7129dc5e4926a9aa4e0d7bc19926ca5ee3ff95cd0L21-R21)
[[7]](diffhunk://#diff-961a46180ce568ce43c20bf7129dc5e4926a9aa4e0d7bc19926ca5ee3ff95cd0L49-R51)
[[8]](diffhunk://#diff-961a46180ce568ce43c20bf7129dc5e4926a9aa4e0d7bc19926ca5ee3ff95cd0L106-R137)

---------

Signed-off-by: George Araújo <george.gcac@gmail.com>
Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
2026-01-28 22:55:05 -03:00
george-gca
6eeea92254 Auto update markdown TOC 2026-01-29 00:22:43 +00:00
George
cc6284d18f
Improve readme, add site-wide CSP (#3485)
This pull request significantly expands and clarifies the documentation
for the al-folio Jekyll theme, focusing on improved file structure
explanations, enhanced quick reference guides, and the addition of a
comprehensive analytics setup guide. The changes make it easier for
users and contributors to understand the project organization, available
features, and configuration options, especially regarding CV formats,
teaching pages, and analytics integration.

**Key documentation and structure improvements:**

*Expanded file and collection structure:*
- The file structure documentation in
`.github/agents/customize.agent.md` and `.github/agents/docs.agent.md`
now details all major directories, including new and existing
collections such as `_books/`, `_teachings/`, `_scripts/`, `_plugins/`,
and expanded `assets/` subdirectories. It also covers new configuration
and utility files, making it easier for users to locate and understand
the purpose of each file or folder.
[[1]](diffhunk://#diff-15864f2655921f50a97689076e3b8feba0da320463750845be6a76eb2e30bfe4L24-R66)
[[2]](diffhunk://#diff-961a46180ce568ce43c20bf7129dc5e4926a9aa4e0d7bc19926ca5ee3ff95cd0L17-R58)

*Documentation and quick reference enhancements:*
- The quick reference table in `.github/agents/customize.agent.md` has
been updated to include new actions like adding teaching pages, setting
up analytics, improving SEO, and ensuring accessibility, with more
precise documentation links.
- The documentation map now lists all major guides (e.g.,
`QUICKSTART.md`, `INSTALL.md`, `TROUBLESHOOTING.md`, `ACCESSIBILITY.md`,
`ANALYTICS.md`, `SEO.md`), providing a clearer overview of available
resources.
[[1]](diffhunk://#diff-15864f2655921f50a97689076e3b8feba0da320463750845be6a76eb2e30bfe4L58-R110)
[[2]](diffhunk://#diff-961a46180ce568ce43c20bf7129dc5e4926a9aa4e0d7bc19926ca5ee3ff95cd0L17-R58)

**Feature and configuration documentation updates:**

*CV/resume format guidance:*
- The CV documentation now clarifies that users can maintain both
RenderCV and JSONResume formats simultaneously, with clear instructions
on switching between them and deleting unused files if desired.
[[1]](diffhunk://#diff-15864f2655921f50a97689076e3b8feba0da320463750845be6a76eb2e30bfe4L139-R185)
[[2]](diffhunk://#diff-52f2a9488bfe4177d1f1d01120859dad0b3e2d087283ded68f72d47b4f183391L291-R291)

*Teaching pages and new collections:*
- Adds documentation for the new `_teachings/` collection, including
required frontmatter and support for course materials, as well as
updates to enable/disable teaching and books pages via `_config.yml`.
[[1]](diffhunk://#diff-15864f2655921f50a97689076e3b8feba0da320463750845be6a76eb2e30bfe4L180-R252)
[[2]](diffhunk://#diff-15864f2655921f50a97689076e3b8feba0da320463750845be6a76eb2e30bfe4L24-R66)

*Analytics integration:*
- Introduces a new `ANALYTICS.md` guide with detailed setup instructions
for Google Analytics, privacy-friendly alternatives (Plausible, Pirsch,
Openpanel, GoAccess), GDPR considerations, and a comparison table to
help users choose the right analytics provider.
- The configuration documentation now references analytics setup and
related configuration options.
[[1]](diffhunk://#diff-15864f2655921f50a97689076e3b8feba0da320463750845be6a76eb2e30bfe4L180-R252)
[[2]](diffhunk://#diff-15864f2655921f50a97689076e3b8feba0da320463750845be6a76eb2e30bfe4L479-R550)

These updates collectively make the documentation more comprehensive,
actionable, and user-friendly for both new and advanced users.

**References:**
[[1]](diffhunk://#diff-15864f2655921f50a97689076e3b8feba0da320463750845be6a76eb2e30bfe4L24-R66)
[[2]](diffhunk://#diff-15864f2655921f50a97689076e3b8feba0da320463750845be6a76eb2e30bfe4L58-R110)
[[3]](diffhunk://#diff-15864f2655921f50a97689076e3b8feba0da320463750845be6a76eb2e30bfe4L139-R185)
[[4]](diffhunk://#diff-15864f2655921f50a97689076e3b8feba0da320463750845be6a76eb2e30bfe4L180-R252)
[[5]](diffhunk://#diff-15864f2655921f50a97689076e3b8feba0da320463750845be6a76eb2e30bfe4L479-R550)
[[6]](diffhunk://#diff-961a46180ce568ce43c20bf7129dc5e4926a9aa4e0d7bc19926ca5ee3ff95cd0L17-R58)
[[7]](diffhunk://#diff-0967e840631a541bb95e057e1c6d4884274cf56d5a217d7fee2eb7223b6b4c0dR1-R268)
[[8]](diffhunk://#diff-52f2a9488bfe4177d1f1d01120859dad0b3e2d087283ded68f72d47b4f183391L291-R291)

---------

Signed-off-by: George Araújo <george.gcac@gmail.com>
Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
2026-01-28 21:22:27 -03:00
george-gca
1e657e9a4b Auto update markdown TOC 2026-01-26 21:27:01 +00:00
Scott Lee Chua
5ab56faadd
Update SASS syntax in base (non-font) files (#3281)
Partially fixes issue #3256 by updating SASS syntax in main SCSS files.

To fully address the issue, FontAwesome should be updated to `v7.x` and
Tabler to `v3.30` or higher (see Tabler fix
[here](https://github.com/tabler/tabler-icons/pull/1256)), where the
SCSS has been fixed.

---------

Signed-off-by: George Araújo <george.gcac@gmail.com>
Co-authored-by: George Araújo <george.gcac@gmail.com>
2026-01-26 18:26:44 -03:00
GitHub Actions
6581d5f719 Update Google Scholar citations 2026-01-26 01:06:42 +00:00
george-gca
4165bf5f08 chore: render the latest CV 2026-01-23 15:46:12 +00:00
George
c39ef4a693
Rendercv missing commits (#3475)
Signed-off-by: George Araújo <george.gcac@gmail.com>
2026-01-23 12:45:27 -03:00
george-gca
84cf7a3f50 chore: render the latest CV 2026-01-23 15:37:00 +00:00
George
55a2685683
Unify jsonresume and RenderCV CVs solutions (#3462)
Fixes #2787 as an alternative to #2969. It was getting too cumbersome to
have 2 different data sources for CV and also a lot of different layout
files, so I decided to unify them all.
Main changes:
- synchronized the information inside RenderCV (`_data/cv.yml`) and
JSONResume (`assets/json/resume.json`)
- unified layout files for CV information
- added the option to set the "data source" in the CV page

---------

Signed-off-by: George Araújo <george.gcac@gmail.com>
Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
2026-01-23 12:36:14 -03:00
Nobin Sarwar
dd425c77c1
Add smsnoBin77 link to README (#3473)
Add a new link to the README for smsnoBin77.
2026-01-23 11:09:26 -03:00
George
b5ecd1a6bd
Updated jekyll-socials to latest version (#3464)
Signed-off-by: George Araújo <george.gcac@gmail.com>
2026-01-19 23:10:08 -03:00
GitHub Actions
081ba6aa6f Update Google Scholar citations 2026-01-19 01:05:22 +00:00
LucasLiu6
d5fce890c4
Add calendar iframe and togglAdd calendar iframe and toggle buttone button (#3144)
### Description

This PR adds a Google Calendar integration feature as described in issue
#872. Users can embed their own calendar using an iframe configured via
`_config.yml`, and the calendar is toggleable through a responsive
button. This component is styled to visually blend into the theme and
supports responsive display across desktop and mobile.

### Changes
- Added `calendar.liquid` in `_includes`
- Modified `about.md` to include the toggleable calendar block
- Introduced `calendar` config section in `_config.yml`
- Appended calendar-related styles in `_sass/_base.scss`

### Configuration
To enable this feature, add the following to `_config.yml`:
```yaml
calendar:
  enabled: true
  calendar_id: your_calendar_id@group.calendar.google.com
  timezone: UTC
  style: "border:0; width:100%; height:600px;"

---------

Signed-off-by: George Araújo <george.gcac@gmail.com>
Co-authored-by: dodo <349507644@qq.com>
Co-authored-by: George <31376482+george-gca@users.noreply.github.com>
Co-authored-by: George Araújo <george.gcac@gmail.com>
2026-01-17 20:36:16 -03:00
george-gca
6a723bd9ad Auto update markdown TOC 2026-01-17 21:44:04 +00:00
Jiahao Zhang
0fe3c84636
Add course schedule feature to teaching page (#2258) (#3147)
Implements the course schedule feature requested in issue
#[2258](https://github.com/alshedivat/al-folio/issues/2258).

This PR adds a new course schedule feature to the al-folio theme,
allowing academics to easily create and display structured course
information.

**Changes:**
- Added a `courses` collection to organize and display academic courses
- Created course layout and display templates with responsive design
- Implemented organization by year and term with automatic sorting
- Added support for weekly schedule with topics and course materials
- Simplified documentation with a README for course creation

This feature makes it easier for academics to showcase their teaching
materials with a consistent, organized display of course schedules,
helping users create professional teaching pages without custom
implementation.

---------

Signed-off-by: George Araújo <george.gcac@gmail.com>
Co-authored-by: George Araújo <george.gcac@gmail.com>
2026-01-17 18:43:47 -03:00
george-gca
5be5124eb2 Auto update markdown TOC 2026-01-17 18:17:33 +00:00
George
137a13abec
Updated jekyll-archives-v2 (#3460)
Signed-off-by: George Araújo <george.gcac@gmail.com>
2026-01-17 15:17:16 -03:00
Maruan
3e2b8f7812
Revert "Refactor: Use Liquid filter to find home page title" (#3451)
Reverts alshedivat/al-folio#3448
2026-01-15 22:07:42 -08:00
google-labs-jules[bot]
24d730578a
Refactor: Use Liquid filter to find home page title (#3448)
Refactored the script in _scripts/search.liquid.js to use a more
efficient Liquid 'where' filter to find the home page title. This
replaces an inefficient for loop that iterated through all site pages.

---
*PR created automatically by Jules for task
[5748098109809984605](https://jules.google.com/task/5748098109809984605)
started by @alshedivat*

Co-authored-by: google-labs-jules[bot] <161369871+google-labs-jules[bot]@users.noreply.github.com>
2026-01-15 21:41:26 -08:00
google-labs-jules[bot]
2e308ed606
Optimize Google Scholar Citations Regex Definition (#3449)
💡 **What:** Moved the regex definition `/Cited by (\d+[,\d]*)/` from the
method scope to a class-level constant `CITED_BY_REGEX`.

🎯 **Why:** To improve code cleanliness and avoid potential re-definition
of the regex object in every method call (or loop), adhering to best
practices.

📊 **Measured Improvement:**
* **Baseline:** The regex was defined as a literal inside the `render`
method, which is called for each tag usage.
*   **Optimization:** The regex is now defined once as a constant.
* **Note:** Performance benchmarks were not possible in the current
environment due to missing Ruby runtime. However, this is a standard
Ruby optimization that improves maintainability and theoretically avoids
object allocation overhead in older Ruby versions or complex scenarios.
Modern Ruby optimizes literals well, but the constant approach is
cleaner and DRYer.

---
*PR created automatically by Jules for task
[10688912524063334698](https://jules.google.com/task/10688912524063334698)
started by @alshedivat*

Co-authored-by: google-labs-jules[bot] <161369871+google-labs-jules[bot]@users.noreply.github.com>
2026-01-15 21:41:10 -08:00
George
514533c50a
Updated deps to fix issue with jekyll-socials (#3447)
Fixes #3445

Signed-off-by: George Araújo <george.gcac@gmail.com>
2026-01-15 15:21:53 -03:00
George
2bbc8ad544
Fixed dates in book-shelf (#3446)
Fixes #3443.

Signed-off-by: George Araújo <george.gcac@gmail.com>
2026-01-15 10:53:02 -03:00
george-gca
cfed3b02f1 Auto update markdown TOC 2026-01-14 22:15:29 +00:00
George
7c75a1568d
Updated deps and deploy version (#3440)
Signed-off-by: George Araújo <george.gcac@gmail.com>
2026-01-14 19:15:10 -03:00
George
43ec3db09c
Changed to use jekyll-socials plugin (#3439)
Signed-off-by: George Araújo <george.gcac@gmail.com>
2026-01-14 19:10:50 -03:00
george-gca
f8c558b514 Auto update markdown TOC 2026-01-14 16:19:27 +00:00
George
17b0251c0f
Update deps (#3437)
Signed-off-by: George Araújo <george.gcac@gmail.com>
2026-01-14 13:19:11 -03:00
George
7249c6ef61
Changed to use cache bust plugin (#3436)
Signed-off-by: George Araújo <george.gcac@gmail.com>
2026-01-14 13:11:53 -03:00
George
70d07e61f3
Changed code to use plugin to handle 3rd party libraries downloads (#3435)
Signed-off-by: George Araújo <george.gcac@gmail.com>
2026-01-14 13:08:21 -03:00
Jiamin Zhou
90eb8f48c0
Add zhoji.github.io to User community in README.md (#3433)
Adding my personal website for the al-folio community :) Thanks for
creating such a cool template!
2026-01-14 11:05:10 -03:00
George
039027e916
Improved collections section in CUSTOMIZE guide (#3431)
Improved section based on comments from #2369.

Signed-off-by: George Araújo <george.gcac@gmail.com>
2026-01-13 11:29:16 -03:00
Julien Chevallier
a5993100fd
Add HAL button (#3404)
Adds a HAL button in the same spirit as the arXiv button.
- add HAL button to `_layouts/bib.liquid`
- add `hal` to the filtered keywords in `_config.yml`
- add `hal` to the documentation  in `CUSTOMIZE.md`
2026-01-09 18:15:36 -03:00
Julien Chevallier
53dfb1184e
add filtered BibTeX keywords (#3403)
add `dimensions, eprint` and `pmid` to the filtered keywords
2026-01-09 18:14:45 -03:00
Jaewon Yoo
47fbf37a5e
Add j1yoo.github.io to User community (#3427)
Hi! I'd like to add my academic website to the User community section.

**Website:** https://j1yoo.github.io/

This PR adds a single star link to the Academics row in the User
community table.

Thank you for creating and maintaining this beautiful theme!

Co-authored-by: Jaewon Yoo <jwyoo4@gmail.com>
2026-01-09 11:43:41 -03:00
Julien Chevallier
8287d64900
Add link to personal GitHub page on academics section in README (#3424) 2026-01-08 16:24:03 -03:00
Sam B
e6b488db2c
Remove link to sam-bieberich.github.io (#3425)
Removed a link to sam-bieberich.github.io from the README.
2026-01-08 16:23:47 -03:00
george-gca
08023f0ddd Auto update markdown TOC 2026-01-07 14:37:42 +00:00
Dominik Fuchß
67bd1b6210
Make external service URLs configurable for repository page (#3422)
## Description

This PR makes the URLs for external services used on the repository page
configurable in `_config.yml`. This allows users to self-host these
services for better reliability, privacy, and customization.

## Changes

- Added `external_services` configuration section in `_config.yml` with:
- `github_readme_stats_url` (default:
`https://github-readme-stats.vercel.app`)
- `github_profile_trophy_url` (default:
`https://github-profile-trophy.vercel.app`)
- Updated repository template files to use configurable URLs:
  - `_includes/repository/repo_user.liquid`
  - `_includes/repository/repo.liquid`
  - `_includes/repository/repo_trophies.liquid`
- Added documentation in `CUSTOMIZE.md` explaining:
- Why self-hosting is recommended (default services may have
availability issues)
  - How to configure custom service URLs
  - Links to the service repositories for deployment instructions

## Resolves

Resolves #3388 - This makes it possible to configure self-hosted
versions of these services, giving users full control over the external
services used for displaying GitHub statistics and trophies.

## Testing

- Verified that default configuration still works with original service
URLs
- Confirmed that URLs are properly interpolated in all template files
- Documentation clearly explains the configuration options
2026-01-07 11:37:24 -03:00
GitHub Actions
6956be8cf6 Update Google Scholar citations 2026-01-05 01:06:01 +00:00
Caio Petrucci Rosa
e10739af87
Fix typo in Bootstrap small column class usage (#3421)
This PR fixes a recurring typo in multiple Liquid templates where the
Bootstrap class `cl-sm` is used instead of `col-sm`.

Because of this typo, the `col-sm` styling was not being applied. All
instances have been corrected.
2026-01-04 18:06:56 -03:00
George
586a0ffd76
Updated prettier (#3420)
Signed-off-by: George Araújo <george.gcac@gmail.com>
2026-01-04 17:51:02 -03:00
George
903760519c
Changed maintainers urls to https 2026-01-04 17:31:46 -03:00
George
b4d1f41243
Added new line to README badges 2026-01-02 22:15:34 -03:00
george-gca
b19d1e936e Auto update markdown TOC 2026-01-03 01:00:00 +00:00
George
e50824437c
Update deps (#3418)
Closes #3402

---------

Signed-off-by: George Araújo <george.gcac@gmail.com>
2026-01-02 21:59:43 -03:00
Michael Vanden Heuvel
1a45b5ba81
Add auto-orient flag to Imagemagick config (#3409)
Currently, images generated by Imagemagick do not respect the
orientation of the source image. By adding the auto-orient flag, the
images are the correct orientation.

Before
<img width="920" height="562" alt="image"
src="https://github.com/user-attachments/assets/73f59d7f-b6c5-468a-9023-0f0457a53a3c"
/>

After
<img width="947" height="621" alt="image"
src="https://github.com/user-attachments/assets/2f24de99-2e84-4052-8d0f-945acdad81e4"
/>
2026-01-02 21:14:16 -03:00
Sarucha Yanyong
f0f262cf44
Add link to personal GitHub page on academics section in README (#3400) 2026-01-02 21:09:35 -03:00
George
81c0556cbf
Added support for default categories and tags for external posts (#3417)
Based on discussion #3393.

---------

Signed-off-by: George Araújo <george.gcac@gmail.com>
2026-01-02 20:37:16 -03:00
George
71640bbda3
Fixed 1 px first load issue (#3416)
Fix #3164

Signed-off-by: George Araújo <george.gcac@gmail.com>
2026-01-02 20:10:58 -03:00
Dominik Fuchß
f521c0ae5c
Fix: bibliography month persists to subsequent entries without month (#3391)
Fixes #3386 (the part about the wrong months; the other part (layouting
of bibtex) is fixed in #3387)

## Summary
- Fixes incorrect month shown for bibliography entries that do not
specify a `month` in BibTeX.
- Ensures `month`/`year` do not persist between entries in
`_layouts/bib.liquid`.

## Root Cause
- In Liquid, captured variables persist across iterations if not
reinitialized.
- `entrymonth` and `entryyear` were only set when
`entry.month`/`entry.year` existed, causing values from a previous entry
to leak into the next one when those fields were missing.

## Changes
- Reinitialize date-related variables per entry before conditional
captures:

## Behavior
- Before: Entries without a `month` could display the previous entry's
month.
- After: Entries without a `month` display only the `year`; entries with
a `month` display the correct month and year.


<img width="1956" height="918" alt="image"
src="https://github.com/user-attachments/assets/7a9682e7-55ab-43b7-8f82-f638d14ce08e"
/>
2026-01-02 19:56:18 -03:00
Dominik Fuchß
6023fd809f
Fix bib / code layout bug (#3387)
Resolve #3370
Resolve #3380

Based on the
[comment](https://github.com/alshedivat/al-folio/issues/3370#issuecomment-3565962058)
of @MarkusThill, I created a bugfix that solved the issue on my website.
Hope that fixes it in general; thus the PR :) However, I'm not an expert
for scss .. so handle with care :)
2026-01-02 19:48:18 -03:00
george-gca
4589f3ce07 Auto update markdown TOC 2026-01-02 22:11:19 +00:00
George
f4426aa17e
Added support for helping agents (#3379)
Since a lot of our users don't have a coding background and given
recently development with AI agents, I decided to try to add support for
specialized agents in our repository. They were created following
[agents.md](https://agents.md/) "specifications" and are currently 2:
- `customize-agent` - to help new users with access to GitHub Copilot
customize their site
- `docs-agent` - to help us keep the documentation always updated with
the latest changes in our code

I don't really know how useful they'll actually be, but I think most of
our users might actually benefit from the `customize-agent`, so it is
worth a shot.

<img width="852" height="1043" alt="image"
src="https://github.com/user-attachments/assets/e8390f1a-cec3-42a8-b01e-26d658ea78e8"
/>

Edit: also added a link to a [Code Wiki to our
repository](https://codewiki.google/github.com/alshedivat/al-folio) and
[DeepWiki](https://deepwiki.com/alshedivat/al-folio). This allows any
user to chat online with AIs (Gemini and Devin) about our repository.

---------

Signed-off-by: George Araújo <george.gcac@gmail.com>
Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
2026-01-02 19:11:03 -03:00
GitHub Actions
25f7462c1e Update Google Scholar citations 2025-12-24 00:46:19 +00:00
GitHub Actions
eff0c8c83d Update Google Scholar citations 2025-12-17 00:43:22 +00:00
Michalis Chadolias
7aaf568941
Add personal webpage link to user community section in README (#3382)
Adds my personal academic website to the list of community pages in the
README. This helps other collaborators connect and see related work. The
link has been verified and follows the established format. Thank you for
the template it was very useful!
2025-11-25 22:38:27 -03:00
George
a66d975b68
Refactor docker-slim workflow configuration
Updated docker-slim GitHub Action version.
2025-11-21 19:19:08 -03:00
george-gca
4250d15684 Auto update markdown TOC 2025-11-21 22:02:53 +00:00
George
7549180b96
Update dependencies (#3377)
Signed-off-by: George Araújo <george.gcac@gmail.com>
2025-11-21 19:02:34 -03:00
George
5c207c7775
Avoid crashing when feedjira fails to parse xml feed (#3376)
Fixes #3371

Signed-off-by: George Araújo <george.gcac@gmail.com>
2025-11-21 18:51:54 -03:00
Ali Faraji
07a7af3db6
Refactor TOC conditionals (#3358)
It inserts TOC if non provided and auto TOC is enabled for distill
layout
2025-11-21 18:18:05 -03:00
Wenjie Xu
cef2ac090c
Add link to personal academic website in README (#3364)
Thank you for the great template! I built a multilingual academic
homepage with it and added my link to the README. 😄

Co-authored-by: George <31376482+george-gca@users.noreply.github.com>
2025-11-16 22:51:13 -03:00
Zlatan Ajanovic
25b524744c
Update README.md (#3360)
Added star for my website.
2025-11-16 22:50:33 -03:00
ZHU Yuhui
339a81fc74
Fix quoteblk color in dark mode (#3357)
This PR fixes the issue #3252 which makes the `quoteblk` dazzling in
dark mode 🙈🥹. This is implemented by defining seperated color values of
`quoteblk`s in dark mode thus does not affect the colors in light mode.
2025-11-16 22:47:00 -03:00
Ali Faraji
fa93875e37
Fix MathJax long-formula overflow on X-axis in mobile and small screens view. (#3302)
This PR fixes an issue where long MathJax formulas in blog posts
overflowed horizontally and broke the layout.

* Added a small CSS rule to make MathJax formulas horizontally
scrollable instead of overflowing.
* Now, when a formula is wider than the container, users can scroll
horizontally without the page layout getting messed up.

**SCSS changes:**

```scss
mjx-container[jax="CHTML"][display="true"] {
  overflow-x: auto;
}
```

**Testing:**
Verified that:

* Long formulas no longer push the layout wider than the viewport.
* Short formulas render as before.



Before:

https://github.com/user-attachments/assets/521b4967-cc1e-4e8b-b2fc-2c59314a8dee

After code fix:

https://github.com/user-attachments/assets/698811ff-d418-43eb-9261-5073105a3d9f


Live demo at: [PI Day -- bellards
formula](https://blog.faraji.info/math/Pi-day.html#bellards-formula-for-pi);
open with responsive design mode or with a mobile device.
2025-11-16 22:41:00 -03:00
Lukas Schirren
33017e7952
Add cv PDF link to social icons (#3240)
Fixes issue #3243 

Add CV PDF link to social icons

- Added CV icon to social media links section
- CV appears after LinkedIn icon in the contact section
- Uses academicons CV symbol for consistent academic styling
- Links to `/assets/pdf/CV_Schirren.pdf` and opens in new tab
- Updated `_includes/social.liquid` to handle `cv_pdf` field
- Updated `_data/socials.yml` with CV configuration
- Updated `_scripts/search.liquid.js` with cv search functionality
2025-11-16 22:39:18 -03:00
Yana Nesterenko
8086c57b79
fix code flow overflow and add responsive design fix (#3229)
## Description
Fixes code block overflow issues by adding proper CSS overflow handling
and responsive design: Code blocks overflow and don't scale properly
#3228

## Changes Made to _base.scss
- Added `overflow-x`: auto to enable horizontal scrolling for long code
lines
- Added `white-space: pre` to preserve code formatting while allowing
horizontal scrolling
- Added `word-wrap: normal` to prevent wrapping of long lines
- Added `-webkit-overflow-scrolling: touch` for smooth iOS scrolling
- Added responsive font sizes for different breakpoints (576px, 400px,
and 768px)
- Applied fixes to `pre`, `code`, and `figure.highlight` elements

## Related Issue
Closes  #3228

---------

Signed-off-by: George Araújo <george.gcac@gmail.com>
Co-authored-by: George Araújo <george.gcac@gmail.com>
2025-11-16 22:38:44 -03:00
Riasat Sheikh
4086784bc7
add: arXiv social (#3191)
addresses the question #3176 and issue #3190

---------

Co-authored-by: George <31376482+george-gca@users.noreply.github.com>
2025-11-16 22:31:18 -03:00
Stefan de Lange
723bc9f020
Clarify enabling of mermaid feature (#3148)
Add some clarification on how to enable mermaid.

---------

Signed-off-by: George Araújo <george.gcac@gmail.com>
Co-authored-by: George Araújo <george.gcac@gmail.com>
2025-11-16 22:31:01 -03:00
george-gca
fe1303ab22 Auto update markdown TOC 2025-11-17 01:17:34 +00:00
Dominik Fuchß
1f349ffda2
Adapt mechanism for citiation count (#3177)
## Summary

This PR introduces an automated mechanism to update the citation count
for authors' publications.

- Inspired by @BernardoCama’s suggestion in #3150.
- Resolves #3150.

## Key Changes

- Adds an action to update publication citation counts.
    - Note: This action creates a commit on the main branch.
- To trigger further GitHub Actions workflows from this commit, a
Personal Access Token (PAT) must be used (the default GitHub Actions
token cannot trigger subsequent workflows).
- Adds and manages citation data in `_data/citations.yml`.
- Adds and adapts `bin/update_scholar_citations.py` to handle citation
updates.

## Usage Examples
### Timeout
<img width="758" height="415" alt="image"
src="https://github.com/user-attachments/assets/0a330d35-b386-4670-8668-62701f2dc68b"
/>

### Success

<img width="1684" height="857" alt="image"
src="https://github.com/user-attachments/assets/44aa0558-e02a-4f00-b8cb-9e0ce16dd53c"
/>
2025-11-16 22:17:17 -03:00
ZHU Yuhui
c38d33b5f8
Background color of active dropdown menu items in navbar (#3250)
As reported in Issue #3249, This pull request fixes a issue that makes
the active navbar dropdown menu item unable to follow the global
background color settings.

It achieves this by merging the definition of `.navbar .dropdown-menu`
and `.btn-group.dropdown .dropdown-menu` in the `_base.scss`. This
should not affect the looking of the dropdown menu in a button.

**Before:**
<img width="274" height="194" alt="before"
src="https://github.com/user-attachments/assets/4fa59325-8dc9-4156-a8f6-293ce467d00d"
/>

**After:**
<img width="274" height="194" alt="after"
src="https://github.com/user-attachments/assets/5bcf16bc-0b3e-4b27-b5f2-95ae50f3e40f"
/>

**Button dropdown menu:**
<img width="316" height="241" alt="button"
src="https://github.com/user-attachments/assets/5609e568-1635-491d-8451-354e48eed9c5"
/>
2025-11-07 13:18:08 -08:00
Olexandr88
dc33b7488a
chore: add a link to the stars badge (#3307) 2025-11-07 13:13:53 -08:00
Sayyed Mehwish
b72ceeedc9
changed wrong loop variable (#3342) 2025-11-07 12:54:01 -08:00
alshedivat
d7e1feb46b Auto update markdown TOC 2025-11-07 20:19:37 +00:00
Mich_V87
cfbc68867b
Update CUSTOMIZE.md (#3340)
Hello, the repository owner.

al-folio has been extremely amazing and very easy to set up—sincere
thanks to you and the contributors.

I've found one way that works on my end, where I can retain those very
useful page files, while I currently do not have enough content to fill
them in.

I might be wrong, but my site has been updating correctly. 

I hope that I could be able to contribute to this customization guide
and provide a solution for those users who want to continuously use this
to display their content as they gain more professional experiences
later.

Thank you.
2025-11-07 12:19:20 -08:00
Julian Wiest
729f136fb0
Add offset option to scrollspy initialization (#3354)
## Fix ToC Scroll-Spy Highlighting Issue

### Problem
When clicking on a ToC link in the sidebar, the page scrolls to the
correct section, but the ToC highlights the *previous* section instead
of the current one. The correct section only gets highlighted after
scrolling down a few pixels.

### Root Cause
The `scrollspy` in `assets/js/common.js` was initialized without an
offset parameter, so it didn't account for the fixed navigation header
height (~56px).

### Solution
Added `offset: 100` parameter to the scrollspy initialization to
properly detect when a section becomes visible, accounting for the
header and some buffer space.

### Changes
- Modified `assets/js/common.js`: Added offset parameter to scrollspy
configuration

### Testing
- [x] ToC correctly highlights the current section immediately after
clicking
- [x] Headings remain visible (not hidden under header)
- [x] Smooth scrolling works as expected

---------

Co-authored-by: Maruan <alshedivat@users.noreply.github.com>
2025-11-07 12:15:08 -08:00
dependabot[bot]
0d07f7ca51
Bump nokogiri from 1.18.8 to 1.18.9 (#3356)
Bumps [nokogiri](https://github.com/sparklemotion/nokogiri) from 1.18.8
to 1.18.9.
<details>
<summary>Release notes</summary>
<p><em>Sourced from <a
href="https://github.com/sparklemotion/nokogiri/releases">nokogiri's
releases</a>.</em></p>
<blockquote>
<h2>v1.18.9 / 2025-07-20</h2>
<h3>Security</h3>
<ul>
<li>[CRuby] Applied upstream libxml2 patches to address CVE-2025-6021,
CVE-2025-6170, CVE-2025-49794, CVE-2025-49795, and CVE-2025-49796. See
<a
href="https://github.com/sparklemotion/nokogiri/security/advisories/GHSA-353f-x4gh-cqq8">GHSA-353f-x4gh-cqq8</a>
for more information.</li>
</ul>
<!-- raw HTML omitted -->

<pre><code>5bcfdf7aa8d1056a7ad5e52e1adffc64ef53d12d0724fbc6f458a3af1a4b9e32
nokogiri-1.18.9-aarch64-linux-gnu.gem
55e9e6ca46c4ad1715e313f407d8481d15be1e3b65d9f8e52ba1c124d01676a7
nokogiri-1.18.9-aarch64-linux-musl.gem
eea3f1f06463ff6309d3ff5b88033c4948d0da1ab3cc0a3a24f63c4d4a763979
nokogiri-1.18.9-arm64-darwin.gem
fe611ae65880e445a9c0f650d52327db239f3488626df4173c05beafd161d46e
nokogiri-1.18.9-arm-linux-gnu.gem
935605e14c0ba17da18d203922440bf6c0676c602659278d855d4622d756a324
nokogiri-1.18.9-arm-linux-musl.gem
ac5a7d93fd0e3cef388800b037407890882413feccca79eb0272a2715a82fa33
nokogiri-1.18.9.gem
1fe5b7aa4a054eda689a969bb4e03999960a6ea806582d327207d687168bceb5
nokogiri-1.18.9-java.gem
6b4fc1523aa0370c78653e38c94cb50e7f3ab786425de66ba7ad24222c1164a3
nokogiri-1.18.9-x64-mingw-ucrt.gem
e0d2deb03d3d7af8016e8c9df5ff4a7d692159cefb135cbb6a4109f265652348
nokogiri-1.18.9-x86_64-darwin.gem
b52f5defedc53d14f71eeaaf990da66b077e1918a2e13088b6a96d0230f44360
nokogiri-1.18.9-x86_64-linux-gnu.gem
e69359d6240c17e64cc9f43970d54f13bfc7b8cc516b819228f687e953425e69
nokogiri-1.18.9-x86_64-linux-musl.gem
</code></pre>
<!-- raw HTML omitted -->
</blockquote>
</details>
<details>
<summary>Changelog</summary>
<p><em>Sourced from <a
href="https://github.com/sparklemotion/nokogiri/blob/main/CHANGELOG.md">nokogiri's
changelog</a>.</em></p>
<blockquote>
<h2>v1.18.9 / 2025-07-20</h2>
<h3>Security</h3>
<ul>
<li>[CRuby] Applied upstream libxml2 patches to address CVE-2025-6021,
CVE-2025-6170, CVE-2025-49794, CVE-2025-49795, and CVE-2025-49796. See
<a
href="https://github.com/sparklemotion/nokogiri/security/advisories/GHSA-353f-x4gh-cqq8">GHSA-353f-x4gh-cqq8</a>
for more information.</li>
</ul>
</blockquote>
</details>
<details>
<summary>Commits</summary>
<ul>
<li><a
href="1dcd8ce303"><code>1dcd8ce</code></a>
version bump to v1.18.9</li>
<li><a
href="a05d2b44b9"><code>a05d2b4</code></a>
Apply upstream patches to address multiple vulnerabilities (<a
href="https://redirect.github.com/sparklemotion/nokogiri/issues/3526">#3526</a>)</li>
<li><a
href="947a55e87e"><code>947a55e</code></a>
Apply upstream patches to address multiple vulnerabilities</li>
<li>See full diff in <a
href="https://github.com/sparklemotion/nokogiri/compare/v1.18.8...v1.18.9">compare
view</a></li>
</ul>
</details>
<br />


[![Dependabot compatibility
score](https://dependabot-badges.githubapp.com/badges/compatibility_score?dependency-name=nokogiri&package-manager=bundler&previous-version=1.18.8&new-version=1.18.9)](https://docs.github.com/en/github/managing-security-vulnerabilities/about-dependabot-security-updates#about-compatibility-scores)

Dependabot will resolve any conflicts with this PR as long as you don't
alter it yourself. You can also trigger a rebase manually by commenting
`@dependabot rebase`.

[//]: # (dependabot-automerge-start)
[//]: # (dependabot-automerge-end)

---

<details>
<summary>Dependabot commands and options</summary>
<br />

You can trigger Dependabot actions by commenting on this PR:
- `@dependabot rebase` will rebase this PR
- `@dependabot recreate` will recreate this PR, overwriting any edits
that have been made to it
- `@dependabot merge` will merge this PR after your CI passes on it
- `@dependabot squash and merge` will squash and merge this PR after
your CI passes on it
- `@dependabot cancel merge` will cancel a previously requested merge
and block automerging
- `@dependabot reopen` will reopen this PR if it is closed
- `@dependabot close` will close this PR and stop Dependabot recreating
it. You can achieve the same result by closing it manually
- `@dependabot show <dependency name> ignore conditions` will show all
of the ignore conditions of the specified dependency
- `@dependabot ignore this major version` will close this PR and stop
Dependabot creating any more for this major version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this minor version` will close this PR and stop
Dependabot creating any more for this minor version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this dependency` will close this PR and stop
Dependabot creating any more for this dependency (unless you reopen the
PR or upgrade to it yourself)
You can disable automated security fix PRs for this repo from the
[Security Alerts
page](https://github.com/alshedivat/al-folio/network/alerts).

</details>

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-11-07 11:41:46 -08:00
Siddharth Sule
2a7e2a09a8
Add Al-Folio Academics Star - Siddharth Sule (#3337)
Hi! Thank you for this amazing template; I used it to make my portfolio.
I have added my website's star to the list of academics, hope that's
cool 😄
2025-11-07 11:39:27 -08:00
dependabot[bot]
332fbeb204
Bump lycheeverse/lychee-action from 1.9.0 to 2.0.2 in /.github/workflows (#3285)
Bumps
[lycheeverse/lychee-action](https://github.com/lycheeverse/lychee-action)
from 1.9.0 to 2.0.2.
<details>
<summary>Release notes</summary>
<p><em>Sourced from <a
href="https://github.com/lycheeverse/lychee-action/releases">lycheeverse/lychee-action's
releases</a>.</em></p>
<blockquote>
<h2>Version 2.0.2</h2>
<h2>What's Changed</h2>
<ul>
<li>Fix a typos by <a
href="https://github.com/szepeviktor"><code>@​szepeviktor</code></a> in
<a
href="https://redirect.github.com/lycheeverse/lychee-action/pull/257">lycheeverse/lychee-action#257</a></li>
<li>Document and use correct permissions in the GitHub workflows by <a
href="https://github.com/dscho"><code>@​dscho</code></a> in <a
href="https://redirect.github.com/lycheeverse/lychee-action/pull/258">lycheeverse/lychee-action#258</a></li>
<li>Add security policy by <a
href="https://github.com/mondeja"><code>@​mondeja</code></a> in <a
href="https://redirect.github.com/lycheeverse/lychee-action/pull/259">lycheeverse/lychee-action#259</a></li>
</ul>
<h2>New Contributors</h2>
<ul>
<li><a
href="https://github.com/szepeviktor"><code>@​szepeviktor</code></a>
made their first contribution in <a
href="https://redirect.github.com/lycheeverse/lychee-action/pull/257">lycheeverse/lychee-action#257</a></li>
<li><a href="https://github.com/mondeja"><code>@​mondeja</code></a> made
their first contribution in <a
href="https://redirect.github.com/lycheeverse/lychee-action/pull/259">lycheeverse/lychee-action#259</a></li>
</ul>
<p><strong>Full Changelog</strong>: <a
href="https://github.com/lycheeverse/lychee-action/compare/v2...v2.0.2">https://github.com/lycheeverse/lychee-action/compare/v2...v2.0.2</a></p>
<h2>Version 2.0.1</h2>
<h2>What's Changed</h2>
<ul>
<li>Don't remove the lychee config file by <a
href="https://github.com/dmathieu"><code>@​dmathieu</code></a> in <a
href="https://redirect.github.com/lycheeverse/lychee-action/pull/255">lycheeverse/lychee-action#255</a></li>
<li>Bump lycheeverse/lychee-action from 1 to 2 by <a
href="https://github.com/dependabot"><code>@​dependabot</code></a> in <a
href="https://redirect.github.com/lycheeverse/lychee-action/pull/252">lycheeverse/lychee-action#252</a></li>
<li>Fix variable name in docs by <a
href="https://github.com/kdeldycke"><code>@​kdeldycke</code></a> in <a
href="https://redirect.github.com/lycheeverse/lychee-action/pull/253">lycheeverse/lychee-action#253</a></li>
</ul>
<h2>New Contributors</h2>
<ul>
<li><a href="https://github.com/dmathieu"><code>@​dmathieu</code></a>
made their first contribution in <a
href="https://redirect.github.com/lycheeverse/lychee-action/pull/255">lycheeverse/lychee-action#255</a></li>
</ul>
<p><strong>Full Changelog</strong>: <a
href="https://github.com/lycheeverse/lychee-action/compare/v2...v2.0.1">https://github.com/lycheeverse/lychee-action/compare/v2...v2.0.1</a></p>
<h2>Version 2.0.0</h2>
<h2>Breaking Changes</h2>
<p><strong>Note:</strong> This release improves the action's robustness
by changing default behaviors. Changes are only required if you want to
opt out of the new failure conditions. Most users won't need to modify
their existing configurations.</p>
<h3>Fail pipeline on error by default</h3>
<p>We've changed the default behavior: pipelines will now fail on broken
links automatically. This addresses user feedback that not failing on
broken links was unexpected (see [issue <a
href="https://redirect.github.com/lycheeverse/lychee-action/issues/71">#71</a>](<a
href="https://redirect.github.com/lycheeverse/lychee-action/issues/71">lycheeverse/lychee-action#71</a>)).</p>
<p><strong>What you need to do:</strong></p>
<ul>
<li>Update to version 2 of this action to apply this change.</li>
<li>Users of the <code>lychee-action@master</code> branch don't need to
make any changes, as <code>fail: true</code> has been the default there
for a while.</li>
<li>If you prefer the old behavior, explicitly set <code>fail</code> to
<code>false</code> when updating:</li>
</ul>
<pre lang="yaml"><code>- name: Link Checker
  id: lychee
  uses: lycheeverse/lychee-action@v2
  with:
    fail: false  # Don't fail action on broken links
</code></pre>
<h3>Fail pipeline if no links were found</h3>
<p>Similar to the above change, we now fail the pipeline if no links are
found during a run. This helps warn users about potential configuration
issues.</p>
<p><strong>What you need to do:</strong></p>
<!-- raw HTML omitted -->
</blockquote>
<p>... (truncated)</p>
</details>
<details>
<summary>Commits</summary>
<ul>
<li><a
href="7cd0af4c74"><code>7cd0af4</code></a>
Merge commit from fork</li>
<li><a
href="8ad54d3568"><code>8ad54d3</code></a>
fix link</li>
<li><a
href="762333c189"><code>762333c</code></a>
Create SECURITY.md (<a
href="https://redirect.github.com/lycheeverse/lychee-action/issues/259">#259</a>)</li>
<li><a
href="71a38a3bd7"><code>71a38a3</code></a>
Document and use correct permissions in the GitHub workflows (<a
href="https://redirect.github.com/lycheeverse/lychee-action/issues/258">#258</a>)</li>
<li><a
href="f141760066"><code>f141760</code></a>
Fix a typos (<a
href="https://redirect.github.com/lycheeverse/lychee-action/issues/257">#257</a>)</li>
<li><a
href="2bb232618b"><code>2bb2326</code></a>
don't remove the lychee config file (<a
href="https://redirect.github.com/lycheeverse/lychee-action/issues/255">#255</a>)</li>
<li><a
href="731bf1a2af"><code>731bf1a</code></a>
Fix variable name (<a
href="https://redirect.github.com/lycheeverse/lychee-action/issues/253">#253</a>)</li>
<li><a
href="e360f3c891"><code>e360f3c</code></a>
Bump lycheeverse/lychee-action from 1 to 2 (<a
href="https://redirect.github.com/lycheeverse/lychee-action/issues/252">#252</a>)</li>
<li><a
href="f87f0a6299"><code>f87f0a6</code></a>
Update version to <code>lycheeverse/lychee-action@v2</code> in docs</li>
<li><a
href="7da8ec1fc4"><code>7da8ec1</code></a>
Test latest lychee version tag (<a
href="https://redirect.github.com/lycheeverse/lychee-action/issues/236">#236</a>)</li>
<li>Additional commits viewable in <a
href="https://github.com/lycheeverse/lychee-action/compare/v1.9.0...v2.0.2">compare
view</a></li>
</ul>
</details>
<br />


[![Dependabot compatibility
score](https://dependabot-badges.githubapp.com/badges/compatibility_score?dependency-name=lycheeverse/lychee-action&package-manager=github_actions&previous-version=1.9.0&new-version=2.0.2)](https://docs.github.com/en/github/managing-security-vulnerabilities/about-dependabot-security-updates#about-compatibility-scores)

Dependabot will resolve any conflicts with this PR as long as you don't
alter it yourself. You can also trigger a rebase manually by commenting
`@dependabot rebase`.

[//]: # (dependabot-automerge-start)
[//]: # (dependabot-automerge-end)

---

<details>
<summary>Dependabot commands and options</summary>
<br />

You can trigger Dependabot actions by commenting on this PR:
- `@dependabot rebase` will rebase this PR
- `@dependabot recreate` will recreate this PR, overwriting any edits
that have been made to it
- `@dependabot merge` will merge this PR after your CI passes on it
- `@dependabot squash and merge` will squash and merge this PR after
your CI passes on it
- `@dependabot cancel merge` will cancel a previously requested merge
and block automerging
- `@dependabot reopen` will reopen this PR if it is closed
- `@dependabot close` will close this PR and stop Dependabot recreating
it. You can achieve the same result by closing it manually
- `@dependabot show <dependency name> ignore conditions` will show all
of the ignore conditions of the specified dependency
- `@dependabot ignore this major version` will close this PR and stop
Dependabot creating any more for this major version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this minor version` will close this PR and stop
Dependabot creating any more for this minor version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this dependency` will close this PR and stop
Dependabot creating any more for this dependency (unless you reopen the
PR or upgrade to it yourself)
You can disable automated security fix PRs for this repo from the
[Security Alerts
page](https://github.com/alshedivat/al-folio/network/alerts).

</details>

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-11-07 11:38:56 -08:00
dependabot[bot]
d92eb99ffd
Bump rexml from 3.4.1 to 3.4.2 (#3306)
Bumps [rexml](https://github.com/ruby/rexml) from 3.4.1 to 3.4.2.
<details>
<summary>Release notes</summary>
<p><em>Sourced from <a
href="https://github.com/ruby/rexml/releases">rexml's
releases</a>.</em></p>
<blockquote>
<h2>REXML 3.4.2 - 2025-08-26</h2>
<h3>Improvement</h3>
<ul>
<li>
<p>Improved performance.</p>
<ul>
<li><a
href="https://redirect.github.com/ruby/rexml/issues/244">GH-244</a></li>
<li><a
href="https://redirect.github.com/ruby/rexml/issues/245">GH-245</a></li>
<li><a
href="https://redirect.github.com/ruby/rexml/issues/246">GH-246</a></li>
<li><a
href="https://redirect.github.com/ruby/rexml/issues/249">GH-249</a></li>
<li><a
href="https://redirect.github.com/ruby/rexml/issues/256">GH-256</a></li>
<li>Patch by NAITOH Jun</li>
</ul>
</li>
<li>
<p>Raise appropriate exception when failing to match start tag in
DOCTYPE</p>
<ul>
<li><a
href="https://redirect.github.com/ruby/rexml/issues/247">GH-247</a></li>
<li>Patch by NAITOH Jun</li>
</ul>
</li>
<li>
<p>Deprecate accepting array as an element in XPath.match, first and
each</p>
<ul>
<li><a
href="https://redirect.github.com/ruby/rexml/issues/252">GH-252</a></li>
<li>Patch by tomoya ishida</li>
</ul>
</li>
<li>
<p>Don't call needless encoding_updated</p>
<ul>
<li><a
href="https://redirect.github.com/ruby/rexml/issues/259">GH-259</a></li>
<li>Patch by Sutou Kouhei</li>
</ul>
</li>
<li>
<p>Reuse XPath::match</p>
<ul>
<li><a
href="https://redirect.github.com/ruby/rexml/issues/263">GH-263</a></li>
<li>Patch by pboling</li>
</ul>
</li>
<li>
<p>Cache redundant calls for doctype</p>
<ul>
<li><a
href="https://redirect.github.com/ruby/rexml/issues/264">GH-264</a></li>
<li>Patch by pboling</li>
</ul>
</li>
<li>
<p>Use Safe Navigation (&amp;.) from Ruby 2.3</p>
<ul>
<li><a
href="https://redirect.github.com/ruby/rexml/issues/265">GH-265</a></li>
<li>Patch by pboling</li>
</ul>
</li>
<li>
<p>Remove redundant return statements</p>
<ul>
<li><a
href="https://redirect.github.com/ruby/rexml/issues/266">GH-266</a></li>
<li>Patch by pboling</li>
</ul>
</li>
<li>
<p>Added XML declaration check &amp; Source#skip_spaces method</p>
<ul>
<li><a
href="https://redirect.github.com/ruby/rexml/issues/282">GH-282</a></li>
<li>Patch by NAITOH Jun</li>
<li>Reported by Sofi Aberegg</li>
</ul>
</li>
</ul>
<h3>Fixes</h3>
<ul>
<li>Fix docs typo
<ul>
<li><a
href="https://redirect.github.com/ruby/rexml/issues/248">GH-248</a></li>
<li>Patch by James Coleman</li>
</ul>
</li>
</ul>
<!-- raw HTML omitted -->
</blockquote>
<p>... (truncated)</p>
</details>
<details>
<summary>Changelog</summary>
<p><em>Sourced from <a
href="https://github.com/ruby/rexml/blob/master/NEWS.md">rexml's
changelog</a>.</em></p>
<blockquote>
<h2>3.4.2 - 2025-08-26 {#version-3-4-2}</h2>
<h3>Improvement</h3>
<ul>
<li>
<p>Improved performance.</p>
<ul>
<li><a
href="https://redirect.github.com/ruby/rexml/issues/244">GH-244</a></li>
<li><a
href="https://redirect.github.com/ruby/rexml/issues/245">GH-245</a></li>
<li><a
href="https://redirect.github.com/ruby/rexml/issues/246">GH-246</a></li>
<li><a
href="https://redirect.github.com/ruby/rexml/issues/249">GH-249</a></li>
<li><a
href="https://redirect.github.com/ruby/rexml/issues/256">GH-256</a></li>
<li>Patch by NAITOH Jun</li>
</ul>
</li>
<li>
<p>Raise appropriate exception when failing to match start tag in
DOCTYPE</p>
<ul>
<li><a
href="https://redirect.github.com/ruby/rexml/issues/247">GH-247</a></li>
<li>Patch by NAITOH Jun</li>
</ul>
</li>
<li>
<p>Deprecate accepting array as an element in XPath.match, first and
each</p>
<ul>
<li><a
href="https://redirect.github.com/ruby/rexml/issues/252">GH-252</a></li>
<li>Patch by tomoya ishida</li>
</ul>
</li>
<li>
<p>Don't call needless encoding_updated</p>
<ul>
<li><a
href="https://redirect.github.com/ruby/rexml/issues/259">GH-259</a></li>
<li>Patch by Sutou Kouhei</li>
</ul>
</li>
<li>
<p>Reuse XPath::match</p>
<ul>
<li><a
href="https://redirect.github.com/ruby/rexml/issues/263">GH-263</a></li>
<li>Patch by pboling</li>
</ul>
</li>
<li>
<p>Cache redundant calls for doctype</p>
<ul>
<li><a
href="https://redirect.github.com/ruby/rexml/issues/264">GH-264</a></li>
<li>Patch by pboling</li>
</ul>
</li>
<li>
<p>Use Safe Navigation (&amp;.) from Ruby 2.3</p>
<ul>
<li><a
href="https://redirect.github.com/ruby/rexml/issues/265">GH-265</a></li>
<li>Patch by pboling</li>
</ul>
</li>
<li>
<p>Remove redundant return statements</p>
<ul>
<li><a
href="https://redirect.github.com/ruby/rexml/issues/266">GH-266</a></li>
<li>Patch by pboling</li>
</ul>
</li>
<li>
<p>Added XML declaration check &amp; Source#skip_spaces method</p>
<ul>
<li><a
href="https://redirect.github.com/ruby/rexml/issues/282">GH-282</a></li>
<li>Patch by NAITOH Jun</li>
<li>Reported by Sofi Aberegg</li>
</ul>
</li>
</ul>
<h3>Fixes</h3>
<ul>
<li>Fix docs typo
<ul>
<li><a
href="https://redirect.github.com/ruby/rexml/issues/248">GH-248</a></li>
<li>Patch by James Coleman</li>
</ul>
</li>
</ul>
<!-- raw HTML omitted -->
</blockquote>
<p>... (truncated)</p>
</details>
<details>
<summary>Commits</summary>
<ul>
<li><a
href="f36916fe1c"><code>f36916f</code></a>
Add 3.4.2 entry (<a
href="https://redirect.github.com/ruby/rexml/issues/284">#284</a>)</li>
<li><a
href="5859bdeac7"><code>5859bde</code></a>
Added XML declaration check &amp; <code>Source#skip_spaces</code> method
(<a
href="https://redirect.github.com/ruby/rexml/issues/282">#282</a>)</li>
<li><a
href="1d876e3bf6"><code>1d876e3</code></a>
Bump actions/checkout from 4 to 5 (<a
href="https://redirect.github.com/ruby/rexml/issues/283">#283</a>)</li>
<li><a
href="c87bda8bb8"><code>c87bda8</code></a>
Remove ostruct from dev deps (<a
href="https://redirect.github.com/ruby/rexml/issues/281">#281</a>)</li>
<li><a
href="c60ae027a3"><code>c60ae02</code></a>
Remove bundler from dev deps (<a
href="https://redirect.github.com/ruby/rexml/issues/277">#277</a>)</li>
<li><a
href="9b084d7870"><code>9b084d7</code></a>
Fix &amp; Deprecate REXML::Text#text_indent (<a
href="https://redirect.github.com/ruby/rexml/issues/275">#275</a>)</li>
<li><a
href="04a589a61b"><code>04a589a</code></a>
Fix a bug that XPath can't be used for no document element (<a
href="https://redirect.github.com/ruby/rexml/issues/268">#268</a>)</li>
<li><a
href="66232eaf68"><code>66232ea</code></a>
Remove redundant return statements (<a
href="https://redirect.github.com/ruby/rexml/issues/266">#266</a>)</li>
<li><a
href="63f3e97725"><code>63f3e97</code></a>
Use Safe Navigation (&amp;.) from Ruby 2.3 (<a
href="https://redirect.github.com/ruby/rexml/issues/265">#265</a>)</li>
<li><a
href="d427fc5914"><code>d427fc5</code></a>
Avoid redundant calls for doctype (<a
href="https://redirect.github.com/ruby/rexml/issues/264">#264</a>)</li>
<li>Additional commits viewable in <a
href="https://github.com/ruby/rexml/compare/v3.4.1...v3.4.2">compare
view</a></li>
</ul>
</details>
<br />


[![Dependabot compatibility
score](https://dependabot-badges.githubapp.com/badges/compatibility_score?dependency-name=rexml&package-manager=bundler&previous-version=3.4.1&new-version=3.4.2)](https://docs.github.com/en/github/managing-security-vulnerabilities/about-dependabot-security-updates#about-compatibility-scores)

Dependabot will resolve any conflicts with this PR as long as you don't
alter it yourself. You can also trigger a rebase manually by commenting
`@dependabot rebase`.

[//]: # (dependabot-automerge-start)
[//]: # (dependabot-automerge-end)

---

<details>
<summary>Dependabot commands and options</summary>
<br />

You can trigger Dependabot actions by commenting on this PR:
- `@dependabot rebase` will rebase this PR
- `@dependabot recreate` will recreate this PR, overwriting any edits
that have been made to it
- `@dependabot merge` will merge this PR after your CI passes on it
- `@dependabot squash and merge` will squash and merge this PR after
your CI passes on it
- `@dependabot cancel merge` will cancel a previously requested merge
and block automerging
- `@dependabot reopen` will reopen this PR if it is closed
- `@dependabot close` will close this PR and stop Dependabot recreating
it. You can achieve the same result by closing it manually
- `@dependabot show <dependency name> ignore conditions` will show all
of the ignore conditions of the specified dependency
- `@dependabot ignore this major version` will close this PR and stop
Dependabot creating any more for this major version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this minor version` will close this PR and stop
Dependabot creating any more for this minor version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this dependency` will close this PR and stop
Dependabot creating any more for this dependency (unless you reopen the
PR or upgrade to it yourself)
You can disable automated security fix PRs for this repo from the
[Security Alerts
page](https://github.com/alshedivat/al-folio/network/alerts).

</details>

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-11-07 11:36:20 -08:00
Scott Lee Chua
db2a1d1b19
Socials icons: Check if rss_icon: false (#3282)
Partially addresses issue #3280.

Currently, the RSS feed icon in the socials section will show whenever
`rss_icon` in `data/_socials.yml` has a value --- **even if that value
is `false`**.

Unlike the other social settings, which are empty by default, for
`rss_icon` the default setting is `true`.

So it makes sense that a user might expect `rss_icon: false` to disable
said icon.

This PR just adds a check if the value is `false` and hides the icon if
so.
2025-09-01 12:22:19 -03:00
Simmo Saan
859a245f65
Revert duplicate Google Analytics (#3287)
This reverts PR #2962. The inline script here is exactly the same as the
`/assets/js/google-analytics-setup.js` sourced on the following line, so
Google Analytics is being triggered twice.

It seems that #2962 originally added this because liquid templating of
the setup script didn't work (#3095). However, this was then properly
fixed in #3117.
2025-09-01 10:57:16 -03:00
Sundar Gurumurthy
cf8e02f98b
Make Giscus light and dark themes configurable via _config.yml (#3270)
Currently, the `site.giscus.theme` option is ignored because
`giscus.liquid` always computes the theme as light/dark based on the
current site theme. This PR allows users to configure separate light and
dark giscus themes in `_config.yml`, which will support dynamic updates
when switching between light, dark, or system themes.

Fixes #3269
2025-08-25 18:17:14 -03:00
Thomas Bourke
109d394470
Upadate README.md to add my personal website (#3276)
Co-authored-by: George <31376482+george-gca@users.noreply.github.com>
2025-08-25 00:43:50 -03:00
Jason Rinehart
a007f789ff
Fix Prettier Feature DevContainer Link (#3196)
Fixes #3193
2025-08-25 00:34:37 -03:00
Freifrau von Bleifrei
11e9a4b6ba
README: add freifrauvonbleifrei's hp (#3265)
my academic homepage, in case you'd like to link it :)
2025-08-25 00:21:50 -03:00
Juan Paulo Pérez-Tejada
829e7b7134
Add Academia.edu support to social media integrations (#3157)
## Description

This pull request adds support for Academia.edu profiles to the al-folio
social media integrations. Academia.edu is widely used by academics to
share and discover research,.

The changes are minimal and well-contained:
1. Added configuration options in socials.yml for Academia.edu with
organization and username fields
2. Updated social.liquid to handle the new social integration using the
Academicons font which already includes support for Academia.edu

## Changes

The implementation uses Academicons, which already includes the
Academia.edu icon (`ai-academia`), making this addition a natural fit
for the theme.

Unlike some other social media links that only require a single ID or
URL, Academia.edu profiles include both an organization (subdomain) and
a username in the format:
`https://[organization].academia.edu/[username]`. The implemented
solution supports this pattern by adding two parameters in the
socials.yml file.

## Why this is important

Academia.edu is a popular platform used by millions of researchers
worldwide to share their work. Adding support for it in the al-folio
theme aligns with the theme's academic focus and enhances its utility
for scholarly users. Many academics maintain both personal websites and
Academia.edu profiles, and being able to link between them provides
better visibility for their research.

The Academicons font already includes support for Academia.edu, so
adding this feature is a natural extension that makes use of existing
resources in the theme.

## Testing

The changes have been tested locally with a sample Academia.edu profile,
and the icon displays correctly alongside other social media icons. The
changes are minimal and don't affect any existing functionality.

## Screenshot

<img width="991" alt="image"
src="https://github.com/user-attachments/assets/15468b67-3002-44ce-aa25-22bc10766664"
/>
2025-08-25 00:16:49 -03:00
Jan van Gemert
a7f486fa7a
keep dark mode inside the (site.enable_darkmode) conditional (#3233)
Hi,
I noticed some weird behavior when I turned dark mode off (some of the
text seemed to disappear, it became white :) )

I traced it to: {% if site.enable_darkmode %} in head.liquid
where some darkmode features are place before the if statement.

When putting it inside the if statement then the weird behavior was
solved; see the pull request here :)

Cheers,
Jan
2025-07-21 11:27:21 -03:00
Eilam Shapira
9cda66f54e
Update README.md with my personal website (#3245) 2025-07-21 10:48:44 -03:00
Arthur Clerjon
f05d31bf8a
Update README.md (#3234)
Adding a new personal website
2025-07-16 18:02:09 -03:00
Abhilesh Dhawanjewar
47b982bd0d
Add sidenote examples, related posts and giscus to distill posts (#3103)
This PR adds a few stylistic improvements to the distill-style blog
posts:

- Update distill blog post example to showcase sidenotes as an
alternative to styles in PR #3077
- Showcase equations in sidenotes (closes #1242)
- Add `overrides.js` to match footnotes and citation styles with global
theme styling
- Add "related posts" sections if enabled to distill style posts
- Add "giscus" section if enabled to distill style posts



https://github.com/user-attachments/assets/b19a9cd9-779d-4d89-a4fb-eb14fb384480
2025-07-16 15:07:42 -03:00
George
2247ec3bf2
Fix socials (#3241)
Signed-off-by: George Araújo <george.gcac@gmail.com>
2025-07-16 14:45:23 -03:00
George
f9d8ab340c
Update CONTRIBUTING.md with adding social media info 2025-07-16 12:57:37 -03:00
Zhipeng He
f1406c47f7
Fix last row line number overflow issue in diff2html block (#3199)
Fix #3198 

Current:


![image](https://github.com/user-attachments/assets/dee68f6d-ee12-424b-947c-e5b6d153d157)

After fix:


![Image](https://github.com/user-attachments/assets/310606f4-4359-499d-8865-228d9d638465)
2025-07-16 12:26:38 -03:00
Guillaume Dalle
72eb0a345d
Add HAL id to socials (#3206)
Fixes #3205
2025-07-16 12:24:37 -03:00
Martin Bulla
2b97d46373
updated README.md by adding bullab page to labss (#3183) 2025-06-04 12:12:43 -03:00
George
ae741aaada
Fix toc issue (#3192)
Signed-off-by: George Araújo <george.gcac@gmail.com>
2025-06-03 17:53:06 -03:00
Lucas Bielak
d7ba3c209a
Update README.md (#3186)
added lab page to README
2025-06-03 13:54:30 -03:00
Mehrdad Noori (MeNo)
2dc1c4bd9c
Update README.md (#3185)
Hello Al-Folio Team,

I’ve been using the al-folio theme for my academic homepage and truly
appreciate how clean and elegant it is. I’ve just submitted a PR to add
my site (https://mehrdad-noori.github.io/) to the community list. Thank
you for all the hard work you put into this project!

Best regards,
Mehrdad
2025-06-03 13:47:37 -03:00
Christopher Bülte
bc0404c2e9
Added my academic website to the community pages. (#3184)
Thanks a lot for this great theme — I find it really clean and great for
hosting an academic website! I've added my customized academic page
(https://cbuelt.github.io/) to the community examples section, as
suggested. Thanks also for maintaining this project!
2025-06-01 20:30:35 -03:00
George
693c3beacb
Update docker image version in docker-compose.yml 2025-05-28 12:44:24 -03:00
George
169d0c2ee1
Update INSTALL.md docker version 2025-05-28 12:43:58 -03:00
George
e82520e4c2
Updated libraries versions (#3179)
Fix #3178

Signed-off-by: George Araújo <george.gcac@gmail.com>
2025-05-28 12:39:33 -03:00
alshedivat
5a5bb9e59c Auto update markdown TOC 2025-05-23 13:42:25 +00:00
Maruan
71969cce7e
Fix: Improve footnote and citation colors in Distill posts (#3172)
Fixes #3168. (Implemented by [jules.google](https://jules.google).)

This commit resolves issues with footnote and citation styling in
Distill posts, particularly ensuring that pop-up contents and the
numbers themselves respect the site's light/dark theme via shadow DOM
style definitions.

Key changes:

1.  **`d-hover-box` Internal Styling (template.v2.js):**
    The `<style>` tag within the `d-hover-box` component's template
    in `assets/js/distillpub/template.v2.js` has been updated.
    Styles for `.panel` (the main pop-up container) now define:
    - `background-color: var(--global-card-bg-color);`
    - `border: 1px solid var(--global-divider-color);`
    - `color: var(--global-text-color);` (for default text)
    - Links within the panel are styled with
      `color: var(--global-theme-color);` and
      `color: var(--global-hover-color);` on hover.
    This ensures pop-up content is correctly themed from within its
    shadow DOM.

2.  **Footnote/Citation Number Color (template.v2.js):**
    The hardcoded `hsla(206, 90%, 20%, 0.7)` color previously used for
    footnote numbers (in `d-footnote` template) and citation numbers
    (in `d-cite` template) in `assets/js/distillpub/template.v2.js`
    has been replaced with `color: var(--global-theme-color);`.

3.  **Cleaned `_sass/_distill.scss`:**
    Removed the (now redundant) global CSS overrides for `d-hover-box`
    from `_sass/_distill.scss`, as these styles are now correctly
    encapsulated within the `d-hover-box` component itself.

These changes ensure that all aspects of Distill footnotes and
citations (numbers, pop-up background, pop-up text, and links within
pop-ups) are styled using theme-aware CSS variables, providing
correct visual appearance and readability in both light and dark modes.

---------

Co-authored-by: google-labs-jules[bot] <161369871+google-labs-jules[bot]@users.noreply.github.com>
2025-05-23 06:42:09 -07:00
dependabot[bot]
dad01a8acd
Bump nokogiri from 1.18.5 to 1.18.8 (#3149)
Bumps [nokogiri](https://github.com/sparklemotion/nokogiri) from 1.18.5
to 1.18.8.
<details>
<summary>Release notes</summary>
<p><em>Sourced from <a
href="https://github.com/sparklemotion/nokogiri/releases">nokogiri's
releases</a>.</em></p>
<blockquote>
<h2>v1.18.8 / 2025-04-21</h2>
<h3>Security</h3>
<ul>
<li>[CRuby] Vendored libxml2 is updated to <a
href="https://gitlab.gnome.org/GNOME/libxml2/-/releases/v2.13.8">v2.13.8</a>
to address CVE-2025-32414 and CVE-2025-32415. See <a
href="https://github.com/sparklemotion/nokogiri/security/advisories/GHSA-5w6v-399v-w3cc">GHSA-5w6v-399v-w3cc</a>
for more information.</li>
</ul>
<!-- raw HTML omitted -->

<pre><code>36badd2eb281fca6214a5188e24a34399b15d89730639a068d12931e2adc210e
nokogiri-1.18.8-aarch64-linux-gnu.gem
664e0f9a77a7122a66d6c03abba7641ca610769a4728db55ee1706a0838b78a2
nokogiri-1.18.8-aarch64-linux-musl.gem
483b5b9fb33653f6f05cbe00d09ea315f268f0e707cfc809aa39b62993008212
nokogiri-1.18.8-arm64-darwin.gem
17de01ca3adf9f8e187883ed73c672344d3dbb3c260f88ffa1008e8dc255a28e
nokogiri-1.18.8-arm-linux-gnu.gem
6e6d7e71fc39572bd613a82d528cf54392c3de1ba5ce974f05c832b8187a040b
nokogiri-1.18.8-arm-linux-musl.gem
8c7464875d9ca7f71080c24c0db7bcaa3940e8be3c6fc4bcebccf8b9a0016365
nokogiri-1.18.8.gem
41002596960ff854198a20aaeb34cff0d445406d5ad85ba7ca9c3fd0c8f03de0
nokogiri-1.18.8-java.gem
11ab0f76772c5f2d718fb253fca5b74c6ef7628b72bbf8deba6ab1ffc93344cf
nokogiri-1.18.8-x64-mingw-ucrt.gem
024cdfe7d9ae3466bba6c06f348fb2a8395d9426b66a3c82f1961b907945cc0c
nokogiri-1.18.8-x86_64-darwin.gem
4a747875db873d18a2985ee2c320a6070c4a414ad629da625fbc58d1a20e5ecc
nokogiri-1.18.8-x86_64-linux-gnu.gem
ddd735fba49475a395b9ea793bb6474e3a3125b89960339604d08a5397de1165
nokogiri-1.18.8-x86_64-linux-musl.gem
</code></pre>
<h2>v1.18.7 / 2025-03-31</h2>
<h3>Dependencies</h3>
<ul>
<li>[CRuby] Vendored libxml2 is updated to <a
href="https://gitlab.gnome.org/GNOME/libxml2/-/releases/v2.13.7">v2.13.7</a>,
which is a bugfix release.</li>
</ul>
<!-- raw HTML omitted -->

<pre><code>57a064ab5440814a69a0e040817bd8154adea68a30d2ff2b3aa515a6a06dbb5f
nokogiri-1.18.7-aarch64-linux-gnu.gem
3e442dc5b69376e84288295fe37cbb890a21ad816a7e571e5e9967b3c1e30cd3
nokogiri-1.18.7-aarch64-linux-musl.gem
083abb2e9ed2646860f6b481a981485a658c6064caafaa81bf1cda1bada2e9d5
nokogiri-1.18.7-arm64-darwin.gem
337d9149deb5ae01022dff7c90f97bed81715fd586aacab0c5809ef933994c5e
nokogiri-1.18.7-arm-linux-gnu.gem
97a26edcc975f780a0822aaf7f7d7427c561067c1c9ee56bd3542960f0c28a6e
nokogiri-1.18.7-arm-linux-musl.gem
6b63ff5defe48f30d1d3b3122f65255ca91df2caf5378c6e0482ce73ff46fb31
nokogiri-1.18.7.gem
2cb83666f35619ec59d24d831bf492e49cfe27b112c222330ee929737f42f2eb
nokogiri-1.18.7-java.gem
681148fbc918aa5d54933d8b48aeb9462ab708d23409797ed750af961107f72b
nokogiri-1.18.7-x64-mingw-ucrt.gem
081d1aa517454ba3415304e2ea51fe411d6a3a809490d0c4aa42799cada417b7
nokogiri-1.18.7-x86_64-darwin.gem
3a0bf946eb2defde13d760f869b61bc8b0c18875afdd3cffa96543cfa3a18005
nokogiri-1.18.7-x86_64-linux-gnu.gem
9d83f8ec1fc37a305fa835d7ee61a4f37899e6ccc6dcb05be6645fa9797605af
nokogiri-1.18.7-x86_64-linux-musl.gem
</code></pre>
<h2>v1.18.6 / 2025-03-24</h2>
<h3>Fixed</h3>
<!-- raw HTML omitted -->
</blockquote>
<p>... (truncated)</p>
</details>
<details>
<summary>Changelog</summary>
<p><em>Sourced from <a
href="https://github.com/sparklemotion/nokogiri/blob/main/CHANGELOG.md">nokogiri's
changelog</a>.</em></p>
<blockquote>
<h2>v1.18.8 / 2025-04-21</h2>
<h3>Security</h3>
<ul>
<li>[CRuby] Vendored libxml2 is updated to <a
href="https://gitlab.gnome.org/GNOME/libxml2/-/releases/v2.13.8">v2.13.8</a>
to address CVE-2025-32414 and CVE-2025-32415. See <a
href="https://github.com/sparklemotion/nokogiri/security/advisories/GHSA-5w6v-399v-w3cc">GHSA-5w6v-399v-w3cc</a>
for more information.</li>
</ul>
<h2>v1.18.7 / 2025-03-31</h2>
<h3>Dependencies</h3>
<ul>
<li>[CRuby] Vendored libxml2 is updated to <a
href="https://gitlab.gnome.org/GNOME/libxml2/-/releases/v2.13.7">v2.13.7</a>,
which is a bugfix release.</li>
</ul>
<h2>v1.18.6 / 2025-03-24</h2>
<h3>Fixed</h3>
<ul>
<li>[JRuby] In HTML documents, <code>Node#attribute</code> now returns
the correct attribute. This has been broken, and returning
<code>nil</code>, since v1.17.0. (<a
href="https://redirect.github.com/sparklemotion/nokogiri/issues/3487">#3487</a>)
<a
href="https://github.com/flavorjones"><code>@​flavorjones</code></a></li>
</ul>
</blockquote>
</details>
<details>
<summary>Commits</summary>
<ul>
<li><a
href="9187f4af0d"><code>9187f4a</code></a>
version bump to v1.18.8</li>
<li><a
href="1deea041e3"><code>1deea04</code></a>
dep: libxml2 to v2.13.8 (branch <code>v1.18.x</code>) (<a
href="https://redirect.github.com/sparklemotion/nokogiri/issues/3509">#3509</a>)</li>
<li><a
href="6457fe6393"><code>6457fe6</code></a>
dep: libxml2 to v2.13.8</li>
<li><a
href="13e8aa4ef5"><code>13e8aa4</code></a>
version bump to v1.18.7</li>
<li><a
href="605699d271"><code>605699d</code></a>
dep: bump libxml2 to 2.13.7 (v1.18.x backport) (<a
href="https://redirect.github.com/sparklemotion/nokogiri/issues/3495">#3495</a>)</li>
<li><a
href="804e59038c"><code>804e590</code></a>
dep: bump libxml2 to 2.13.7</li>
<li><a
href="52bf15b62d"><code>52bf15b</code></a>
dep(dev): drop Rubocop from JRuby deps</li>
<li><a
href="189769d726"><code>189769d</code></a>
version bump to v1.18.6</li>
<li><a
href="de4982f0cc"><code>de4982f</code></a>
fix(jruby): Node#attribute in HTML documents (v1.18.x) (<a
href="https://redirect.github.com/sparklemotion/nokogiri/issues/3492">#3492</a>)</li>
<li><a
href="7d95b0f10c"><code>7d95b0f</code></a>
fix(jruby): Node#attribute in HTML documents</li>
<li>See full diff in <a
href="https://github.com/sparklemotion/nokogiri/compare/v1.18.5...v1.18.8">compare
view</a></li>
</ul>
</details>
<br />


[![Dependabot compatibility
score](https://dependabot-badges.githubapp.com/badges/compatibility_score?dependency-name=nokogiri&package-manager=bundler&previous-version=1.18.5&new-version=1.18.8)](https://docs.github.com/en/github/managing-security-vulnerabilities/about-dependabot-security-updates#about-compatibility-scores)

Dependabot will resolve any conflicts with this PR as long as you don't
alter it yourself. You can also trigger a rebase manually by commenting
`@dependabot rebase`.

[//]: # (dependabot-automerge-start)
[//]: # (dependabot-automerge-end)

---

<details>
<summary>Dependabot commands and options</summary>
<br />

You can trigger Dependabot actions by commenting on this PR:
- `@dependabot rebase` will rebase this PR
- `@dependabot recreate` will recreate this PR, overwriting any edits
that have been made to it
- `@dependabot merge` will merge this PR after your CI passes on it
- `@dependabot squash and merge` will squash and merge this PR after
your CI passes on it
- `@dependabot cancel merge` will cancel a previously requested merge
and block automerging
- `@dependabot reopen` will reopen this PR if it is closed
- `@dependabot close` will close this PR and stop Dependabot recreating
it. You can achieve the same result by closing it manually
- `@dependabot show <dependency name> ignore conditions` will show all
of the ignore conditions of the specified dependency
- `@dependabot ignore this major version` will close this PR and stop
Dependabot creating any more for this major version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this minor version` will close this PR and stop
Dependabot creating any more for this minor version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this dependency` will close this PR and stop
Dependabot creating any more for this dependency (unless you reopen the
PR or upgrade to it yourself)
You can disable automated security fix PRs for this repo from the
[Security Alerts
page](https://github.com/alshedivat/al-folio/network/alerts).

</details>

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-05-21 23:25:51 -07:00
Chen Chen
d6477e889f
Remove unnecessary rss_icon line from _config.yml (#3154)
Also make document clearer for rss_icon.
2025-05-21 23:25:11 -07:00
Mikolaj Kocikowski, PhD
659e1a39a5
Update README.md (#3162)
removed my website.
2025-05-21 23:24:34 -07:00
george-gca
ac99061bce Auto update markdown TOC 2025-05-12 19:49:17 +00:00
George
4f7da1d367
Removed link from header in FAQ.md 2025-05-12 16:48:58 -03:00
george-gca
8a70f13cb9 Auto update markdown TOC 2025-05-12 19:47:22 +00:00
George
55510343d4
Update INSTALL.md layout 2025-05-12 16:47:05 -03:00
George
a864cdca4b
Update CUSTOMIZE.md layout 2025-05-12 16:46:26 -03:00
george-gca
c98d596e2d Auto update markdown TOC 2025-05-12 19:46:12 +00:00
George
5878b5c71d
Update FAQ.md layout 2025-05-12 16:45:56 -03:00
George
58f4e02ab0
Changed order of params for gh-md-toc 2025-04-14 17:09:00 -03:00
George
78fdace28a
Update update-tocs.yml 2025-04-14 17:06:46 -03:00
George
c5bdfebd5b
Fixed tocs (#3133)
Signed-off-by: George Araújo <george.gcac@gmail.com>
2025-04-14 17:02:59 -03:00
George
e4d5b06dbb
Using fork of gh-md-toc 2025-04-14 16:48:15 -03:00
george-gca
b963b565bb Auto update markdown TOC 2025-04-14 18:43:53 +00:00
George
cc140ddc41
Update FAQ.md 2025-04-14 15:43:34 -03:00
george-gca
dfe4091c1c Auto update markdown TOC 2025-04-14 18:40:13 +00:00
George
91a2b63c80
Created GitHub action to update TOCs (#3132)
Signed-off-by: George Araújo <george.gcac@gmail.com>
2025-04-14 15:39:55 -03:00
Dian
15fad29f23
added my homepage (Dian Jiao). (#3128)
Hi!

I’m using the al-folio theme for my academic homepage and really
appreciate the work you’ve done — it’s clean, elegant, and super
helpful.

I’ve added my site (https://d-jiao.github.io) to the community list as
suggested. Thank you for maintaining this great project!

Best,
Dian Jiao (d-jiao)
2025-04-12 22:44:54 -03:00
Jos Zuijderwijk
d730fb3cb2
Added my website to the community pages. (#3119)
Thank you for this slick theme! I've added my customized page to the
community examples section. My implementation includes a few subtle
tweaks that might inspire others, just as I found inspiration from
existing community examples.
2025-04-10 14:16:38 -03:00
George
301132d2fd
Changed broken-links action to only run on main repo (#3118)
Signed-off-by: George Araújo <george.gcac@gmail.com>
2025-04-09 11:41:26 -03:00
George
351dcb985e
Fixed liquid variables in some js files (#3117)
Fixes #3095

---------

Signed-off-by: George Araújo <george.gcac@gmail.com>
2025-04-09 11:36:16 -03:00
Thomas Kahle
fea4b7c550
Fix "comma and and" before last author in publication list (#3107) 2025-04-03 07:34:21 -07:00
George
f68e88c5ef
Added support for plotly js (#3097)
Only now I realized that the [previous
support](https://alshedivat.github.io/al-folio/blog/2021/distill/#interactive-plots)
for [plotly](https://plotly.com/) was enabled by exporting an HTML from
python code. This adds support for
[plotly.js](https://plotly.com/javascript/).

---------

Signed-off-by: George Araújo <george.gcac@gmail.com>
2025-03-26 17:16:03 -03:00
George
81b3c60f00
Updated dependencies (#3091)
Signed-off-by: George Araújo <george.gcac@gmail.com>
2025-03-22 22:38:38 -03:00
Pranjal Aggarwal
a7b1f8c1b1
Re-add ability to exclude posts from search (#3089)
Earlier there was a tag in the `_config.yml` file to exclude the posts
from the search results. I could no longer find that option and hence
modified the `search.liquid.js` file.
It basically checks if the `posts_in_search` tag is true or not.
2025-03-22 22:11:34 -03:00
Nishanth Kumar
485e22fdf0
Add link to a new academic's website (#3075)
Love the theme and just used it for my own personal website! Thought I'd
link from here as suggested in the README to show my support! :)
2025-03-15 21:42:50 -03:00
Amir Pourmand
93aeb6d685
Update INSTALL.md (#3074)
Again, I saw this version problem with current version of our docker
image. Supposedly, there is some json package problem which I dealt
with.

But here is the overall solution to this problem for whoever is having
it.

---------

Co-authored-by: George <31376482+george-gca@users.noreply.github.com>
2025-03-14 10:38:19 -03:00
Hoe Jiun Tian
1dc670b02e
Fix typo in CUSTOMIZE.md (#3070)
`excludes` should be `exclude`. `excludes` with `s` does not work with
`_config.yml`, which itself uses `exclude` and `include`.
2025-03-13 11:06:51 -03:00
dependabot[bot]
9e837d6d0e
Bump json from 2.10.1 to 2.10.2 (#3066)
Bumps [json](https://github.com/ruby/json) from 2.10.1 to 2.10.2.
<details>
<summary>Release notes</summary>
<p><em>Sourced from <a
href="https://github.com/ruby/json/releases">json's
releases</a>.</em></p>
<blockquote>
<h2>v2.10.2</h2>
<h2>What's Changed</h2>
<ul>
<li>Fix a potential crash in the C extension parser.</li>
<li>Raise a ParserError on all incomplete unicode escape sequence. This
was the behavior until <code>2.10.0</code> unadvertently changed
it.</li>
<li>Ensure document snippets that are included in parser errors don't
include truncated multibyte characters.</li>
<li>Ensure parser error snippets are valid UTF-8.</li>
<li>Fix <code>JSON::GeneratorError#detailed_message</code> on Ruby &lt;
3.2</li>
</ul>
<p><strong>Full Changelog</strong>: <a
href="https://github.com/ruby/json/compare/v2.10.1...v2.10.2">https://github.com/ruby/json/compare/v2.10.1...v2.10.2</a></p>
</blockquote>
</details>
<details>
<summary>Changelog</summary>
<p><em>Sourced from <a
href="https://github.com/ruby/json/blob/master/CHANGES.md">json's
changelog</a>.</em></p>
<blockquote>
<h3>2025-03-12 (2.10.2)</h3>
<ul>
<li>Fix a potential crash in the C extension parser.</li>
<li>Raise a ParserError on all incomplete unicode escape sequence. This
was the behavior until <code>2.10.0</code> unadvertently changed
it.</li>
<li>Ensure document snippets that are included in parser errors don't
include truncated multibyte characters.</li>
<li>Ensure parser error snippets are valid UTF-8.</li>
<li>Fix <code>JSON::GeneratorError#detailed_message</code> on Ruby &lt;
3.2</li>
</ul>
</blockquote>
</details>
<details>
<summary>Commits</summary>
<ul>
<li><a
href="350c1fd154"><code>350c1fd</code></a>
Release 2.10.2</li>
<li><a
href="c56db31f80"><code>c56db31</code></a>
Merge commit from fork</li>
<li><a
href="cf242d89a0"><code>cf242d8</code></a>
Fix potential out of bound read in
<code>json_string_unescape</code>.</li>
<li><a
href="57911f1ecf"><code>57911f1</code></a>
Merge pull request <a
href="https://redirect.github.com/ruby/json/issues/762">#762</a> from
byroot/invalid-escape</li>
<li><a
href="7d0637b9e6"><code>7d0637b</code></a>
Raise a ParserError on all incomplete unicode escape sequence.</li>
<li><a
href="c079793b76"><code>c079793</code></a>
Avoid fast-path IO writes when IO has ext enc</li>
<li><a
href="ac30b69c06"><code>ac30b69</code></a>
Merge pull request <a
href="https://redirect.github.com/ruby/json/issues/757">#757</a> from
rahim/fix-generator-error-no-method-error</li>
<li><a
href="2e015ff839"><code>2e015ff</code></a>
Fix JSON::GeneratorError#detailed_message with Ruby &lt; 3.2</li>
<li><a
href="f3e113654f"><code>f3e1136</code></a>
Merge pull request <a
href="https://redirect.github.com/ruby/json/issues/756">#756</a> from
byroot/utf8-snippets</li>
<li><a
href="e144793b72"><code>e144793</code></a>
Ensure parser error snippets are valid UTF-8</li>
<li>Additional commits viewable in <a
href="https://github.com/ruby/json/compare/v2.10.1...v2.10.2">compare
view</a></li>
</ul>
</details>
<br />


[![Dependabot compatibility
score](https://dependabot-badges.githubapp.com/badges/compatibility_score?dependency-name=json&package-manager=bundler&previous-version=2.10.1&new-version=2.10.2)](https://docs.github.com/en/github/managing-security-vulnerabilities/about-dependabot-security-updates#about-compatibility-scores)

Dependabot will resolve any conflicts with this PR as long as you don't
alter it yourself. You can also trigger a rebase manually by commenting
`@dependabot rebase`.

[//]: # (dependabot-automerge-start)
[//]: # (dependabot-automerge-end)

---

<details>
<summary>Dependabot commands and options</summary>
<br />

You can trigger Dependabot actions by commenting on this PR:
- `@dependabot rebase` will rebase this PR
- `@dependabot recreate` will recreate this PR, overwriting any edits
that have been made to it
- `@dependabot merge` will merge this PR after your CI passes on it
- `@dependabot squash and merge` will squash and merge this PR after
your CI passes on it
- `@dependabot cancel merge` will cancel a previously requested merge
and block automerging
- `@dependabot reopen` will reopen this PR if it is closed
- `@dependabot close` will close this PR and stop Dependabot recreating
it. You can achieve the same result by closing it manually
- `@dependabot show <dependency name> ignore conditions` will show all
of the ignore conditions of the specified dependency
- `@dependabot ignore this major version` will close this PR and stop
Dependabot creating any more for this major version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this minor version` will close this PR and stop
Dependabot creating any more for this minor version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this dependency` will close this PR and stop
Dependabot creating any more for this dependency (unless you reopen the
PR or upgrade to it yourself)
You can disable automated security fix PRs for this repo from the
[Security Alerts
page](https://github.com/alshedivat/al-folio/network/alerts).

</details>

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-03-12 13:11:59 -03:00
George
afc34968a7
Fixed docs (#3059)
Signed-off-by: George Araújo <george.gcac@gmail.com>
2025-03-11 12:09:51 -03:00
George
82b2ad388f
Fix scrollbar color (#3058)
Fixes #3055

Signed-off-by: George Araújo <george.gcac@gmail.com>
2025-03-11 11:42:08 -03:00
George
d53297f256
Fix zoom in bibliography images (#3057)
Fixes #2668

Signed-off-by: George Araújo <george.gcac@gmail.com>
2025-03-11 11:34:58 -03:00
Nikos Kontogeorgis
74beacb274
Refactor footer content (#3041)
Refactor footer content into a reusable variable for cleaner code
2025-03-01 21:47:22 -03:00
George
6625f2395a
Digital Bookshelf V2 (#2866)
Since I was annoyed at not being able to use
[jekyll-archives](https://github.com/jekyll/jekyll-archives) to create
an archive for the books, I decided to implement myself the
[jekyll-archives-v2](https://github.com/george-gca/jekyll-archives-v2)
that doesn't have this limitation.

Closes #923.

---------

Signed-off-by: George Araújo <george.gcac@gmail.com>
2025-02-28 13:57:36 -03:00
Dominik Fuchß
14aaf4726e
Re-Enable exclusions of jekyll minifier (#3038)
Resolve #3037

This PR just re-enable the old exclusions of jekyll-minifier to ensure
that the files aren't altered.
2025-02-27 21:26:29 -03:00
Stefan de Lange
6b00edc4a3
Fix typo in -> on (#3029)
Fixed a small typo in `post.liquid`.
2025-02-24 11:15:19 -03:00
dependabot[bot]
977872f01e
Bump nokogiri from 1.18.1 to 1.18.3 (#3026)
Bumps [nokogiri](https://github.com/sparklemotion/nokogiri) from 1.18.1
to 1.18.3.
<details>
<summary>Release notes</summary>
<p><em>Sourced from <a
href="https://github.com/sparklemotion/nokogiri/releases">nokogiri's
releases</a>.</em></p>
<blockquote>
<h2>v1.18.3 / 2025-02-18</h2>
<h3>Security</h3>
<ul>
<li>[CRuby] Vendored libxml2 is updated to <a
href="https://gitlab.gnome.org/GNOME/libxml2/-/releases/v2.13.6">v2.13.6</a>
to address CVE-2025-24928 and CVE-2024-56171. See <a
href="https://github.com/sparklemotion/nokogiri/security/advisories/GHSA-vvfq-8hwr-qm4m">GHSA-vvfq-8hwr-qm4m</a>
for more information.</li>
</ul>
<!-- raw HTML omitted -->

<pre><code>cab20305133078a8f6b60cf96311b48319175038cc7772e5ec586ff624cb7838
nokogiri-1.18.3-aarch64-linux-gnu.gem
acb256bb3213a180b1ed84a49c06d5d4c6c1da26f33bc9681f1fece4dab09a79
nokogiri-1.18.3-aarch64-linux-musl.gem
ce088965cd424b8e752d82087dcf017069d55791f157098ed1f671d966857610
nokogiri-1.18.3-arm64-darwin.gem
37b73a55e0d1e8a058a24abb16868903e81cb4773049739c532b864f87236b1b
nokogiri-1.18.3-arm-linux-gnu.gem
09407970cd13736cf87e975fae69c13e1178bab0313d07b35580ee4dd3650793
nokogiri-1.18.3-arm-linux-musl.gem
6b9fc3b14fd0cedd21f6cad8cf565123ba7401e56b5d0aec180c23cdca28fd5a
nokogiri-1.18.3.gem
236078c5f80ffc3d49c223fa98933d970543455403f9d672ca0aa5a6178a84fe
nokogiri-1.18.3-java.gem
216be1cb454c4657fc64747e5ae32b2ab4015843183766f238e4f4a62fb1f6be
nokogiri-1.18.3-x64-mingw-ucrt.gem
d729406bb5a7b1bbe7ed3c0922336dd2c46085ed444d6de2a0a4c33950a4edea
nokogiri-1.18.3-x86_64-darwin.gem
3c7ad5cee39855ed9c746065f39b584b9fd2aaff61df02d0f85ba8d671bbe497
nokogiri-1.18.3-x86_64-linux-gnu.gem
8aaecc22c0e5f12dac613e15f9a04059c3ec859d6f98f493cc831bd88fe8e731
nokogiri-1.18.3-x86_64-linux-musl.gem
</code></pre>
<!-- raw HTML omitted -->
<h2>v1.18.2 / 2024-01-19</h2>
<h3>Fixed</h3>
<ul>
<li>When performing a CSS selector query, an XML document's root
namespace declarations should not be applied to wildcard selectors
(<code>&quot;*&quot;</code>). Fixes a bug introduced in v1.17.0. (<a
href="https://redirect.github.com/sparklemotion/nokogiri/issues/3411">#3411</a>)
<a
href="https://github.com/flavorjones"><code>@​flavorjones</code></a></li>
</ul>
<!-- raw HTML omitted -->

<pre><code>74e0f9a7487a30a2957f46c5113d58f836436b033c9906e0bc6fee9d8cdafabf
nokogiri-1.18.2-aarch64-linux-gnu.gem
99bcea596a80eaee99f2bae2596275641ea688262c1da32b4e90db6159e86477
nokogiri-1.18.2-aarch64-linux-musl.gem
8288ec7a296e2510ca9bd053c0c5989f11260f8c07bc3e9afbafa536f7077281
nokogiri-1.18.2-arm64-darwin.gem
6fb0246b69f2c589a69254e82bc2a40aa238c4f977fd7903e283341a92935729
nokogiri-1.18.2-arm-linux-gnu.gem
dcdd4d10ed2743f0d8c887825700c3a8506aea1aa415917ac50ccc01597c51a3
nokogiri-1.18.2-arm-linux-musl.gem
93791cfb33186fe077eb9e1b8a6855b5621e328f81f565334572fa398366f8bf
nokogiri-1.18.2.gem
eefdf9f0d6086173d3488cf7a736732ee13fb6674ef15643478c20502a67bf37
nokogiri-1.18.2-java.gem
894514572fa7503ce9210e51a7f8a9a35f34f154d6406cec1ac148c3ce1536a3
nokogiri-1.18.2-x64-mingw-ucrt.gem
7fca165e5ee87e9b6b3f1377180376afc0c8652ed2a3d761f472f0e3d3a1c651
nokogiri-1.18.2-x86_64-darwin.gem
9330ced4a976604865c2a76ce158e2bc608fa83999552e85a32ec06f85f427db
nokogiri-1.18.2-x86_64-linux-gnu.gem
1cd7786ed15c76958d6a8f9a864df6208fecd624c340eb4ed211fbea60328f02
nokogiri-1.18.2-x86_64-linux-musl.gem
</code></pre>
<!-- raw HTML omitted -->
</blockquote>
</details>
<details>
<summary>Changelog</summary>
<p><em>Sourced from <a
href="https://github.com/sparklemotion/nokogiri/blob/v1.18.3/CHANGELOG.md">nokogiri's
changelog</a>.</em></p>
<blockquote>
<h2>v1.18.3 / 2025-02-18</h2>
<h3>Security</h3>
<ul>
<li>[CRuby] Vendored libxml2 is updated <a
href="https://gitlab.gnome.org/GNOME/libxml2/-/releases/v2.13.6">v2.13.6</a>
to address CVE-2025-24928 and CVE-2024-56171. Nokogiri's maintainers
believe these vulnerabilities do not affect users of Nokogiri, but we
advise upgrading at your earliest convenience anyway.</li>
</ul>
<h2>v1.18.2 / 2024-01-19</h2>
<h3>Fixed</h3>
<ul>
<li>When performing a CSS selector query, an XML document's root
namespace declarations should not be applied to wildcard selectors
(<code>&quot;*&quot;</code>). Fixes a bug introduced in v1.17.0. (<a
href="https://redirect.github.com/sparklemotion/nokogiri/issues/3411">#3411</a>)
<a
href="https://github.com/flavorjones"><code>@​flavorjones</code></a></li>
</ul>
</blockquote>
</details>
<details>
<summary>Commits</summary>
<ul>
<li><a
href="fd3ca2e22d"><code>fd3ca2e</code></a>
version bump to v1.18.3</li>
<li><a
href="a8c526adf1"><code>a8c526a</code></a>
dep: update libxml2 to v2.13.6 (<a
href="https://redirect.github.com/sparklemotion/nokogiri/issues/3437">#3437</a>)</li>
<li><a
href="0847cf8688"><code>0847cf8</code></a>
ci: tired of waiting for gnome mirrors</li>
<li><a
href="11945c82df"><code>11945c8</code></a>
dep: update libxml2 to v2.13.6</li>
<li><a
href="aa54fa5954"><code>aa54fa5</code></a>
version bump to v1.18.2</li>
<li><a
href="0fb5541c95"><code>0fb5541</code></a>
backport: fix(css-selector): default XML namespace should not be applied
to w...</li>
<li><a
href="8ef2e918e7"><code>8ef2e91</code></a>
ci: bump windows test images from &quot;head&quot; to
&quot;3.4&quot;</li>
<li><a
href="c10fd7a02e"><code>c10fd7a</code></a>
dev: so tired of psych not building on various things</li>
<li><a
href="8378749614"><code>8378749</code></a>
fix(css-selector): default XML namespace is not applied to wildcard</li>
<li><a
href="b112e18a48"><code>b112e18</code></a>
prefactor: restructure css-to-xpath tests</li>
<li>See full diff in <a
href="https://github.com/sparklemotion/nokogiri/compare/v1.18.1...v1.18.3">compare
view</a></li>
</ul>
</details>
<br />


[![Dependabot compatibility
score](https://dependabot-badges.githubapp.com/badges/compatibility_score?dependency-name=nokogiri&package-manager=bundler&previous-version=1.18.1&new-version=1.18.3)](https://docs.github.com/en/github/managing-security-vulnerabilities/about-dependabot-security-updates#about-compatibility-scores)

Dependabot will resolve any conflicts with this PR as long as you don't
alter it yourself. You can also trigger a rebase manually by commenting
`@dependabot rebase`.

[//]: # (dependabot-automerge-start)
[//]: # (dependabot-automerge-end)

---

<details>
<summary>Dependabot commands and options</summary>
<br />

You can trigger Dependabot actions by commenting on this PR:
- `@dependabot rebase` will rebase this PR
- `@dependabot recreate` will recreate this PR, overwriting any edits
that have been made to it
- `@dependabot merge` will merge this PR after your CI passes on it
- `@dependabot squash and merge` will squash and merge this PR after
your CI passes on it
- `@dependabot cancel merge` will cancel a previously requested merge
and block automerging
- `@dependabot reopen` will reopen this PR if it is closed
- `@dependabot close` will close this PR and stop Dependabot recreating
it. You can achieve the same result by closing it manually
- `@dependabot show <dependency name> ignore conditions` will show all
of the ignore conditions of the specified dependency
- `@dependabot ignore this major version` will close this PR and stop
Dependabot creating any more for this major version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this minor version` will close this PR and stop
Dependabot creating any more for this minor version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this dependency` will close this PR and stop
Dependabot creating any more for this dependency (unless you reopen the
PR or upgrade to it yourself)
You can disable automated security fix PRs for this repo from the
[Security Alerts
page](https://github.com/alshedivat/al-folio/network/alerts).

</details>

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-02-19 10:07:41 -03:00
DreamSoul
9272d23124
make abbr color inside bibliography a variable (#3017)
Fix https://github.com/alshedivat/al-folio/issues/3012 (make abbr color
inside bibliography a variable)
2025-02-17 04:46:15 -08:00
George
854598e139
Moved comment in repo.liquid 2025-02-14 13:21:25 -03:00
George
cbe03ec301
Moved comment in repo_user.liquid 2025-02-14 13:21:18 -03:00
Jiaye Wu
7719863ea0
fix language-not-found issues on repo page with simplified and traditional Chinese (#3015)
The author of github-readme-stats uses the non-standard code "cn" for
simplified Chinese, see
[here](https://github.com/anuraghazra/github-readme-stats?tab=readme-ov-file#available-locales).
While for traditional Chinese the author only provides "zh-tw". The
github-readme-stats functions on repo page will break if the user sets
the site language to ALL variants of Chinese except for zh-tw. This hack
is to make all sub-variants of simplified Chinese fall back to "cn" and
all sub-variants of traditional Chinese fall back to "zh-tw".

This patch fixes the problem and has been tested locally & with GitHub
pages.
2025-02-14 13:16:39 -03:00
Jacob Austin
10d007a98c
Allows for standard Jekyll code highlighting with distill template (#3002)
As described in https://github.com/alshedivat/al-folio/issues/300,
standard Markdown code highlighting doesn't work in the Distill template
because it is clobbered by the Distill "Prism" syntax highlighting. This
PR will allow d-code tags (distill-specific code tags) to function with
the Distill syntax highlighter, but will default `highlight` and
Markdown code blocks to use the Jekyll/Rouge highlighter.

This PR also removes overrides.js, which is currently broken because
jquery isn't loaded.
2025-02-12 18:47:57 -03:00
George
e3f029dcd1
Added sass changes to trigger deploy action 2025-02-09 12:21:55 -03:00
Soumyaranjan Dash
beeff21ecd
Updated scripts for correctly using gtag. (#2962)
Implementation of Google tag ID to correctly getting tracked requires
further modification in addition to the one line script in the
`_includes/scripts.liquid` file as
```
<script async src="https://www.googletagmanager.com/gtag/js?id={{ site.google_analytics }}"></script>
  <script>
    window.dataLayer = window.dataLayer || [];
    function gtag() {
      dataLayer.push(arguments);
    }
    gtag('js', new Date());

    gtag('config', '{{ site.google_analytics }}');
  </script>
```

I have made the changes and tested it out on my personal webpage to
ensure the tracking in analytics dashboard.
2025-02-09 06:41:20 -08:00
George
caf9976175
Add link to set workflow permissions 2025-01-30 16:02:39 -03:00
Alexi Gladstone
16edfe9c8a
Add my website to readme under academics--alexiglad.github.io (#2987) 2025-01-28 14:08:15 -03:00
George
0b3f19dfb3
Moved specific information from config to about (#2985)
Moved news and latest posts related information from `_config.yml` to
`_about.md` page.

Signed-off-by: George Araújo <george.gcac@gmail.com>
2025-01-27 17:04:24 -03:00
Elara Liu
4f28b9b97a
fix: typo in file name gitattributes (#2972)
Just fix the file name's typo.
2025-01-26 18:38:56 -08:00
Juan Carlos Niebles
b50db2e713
fixed indexing of external posts (#2983)
This should fix several issues with indexing external posts, including
#1828.

In short, I found that the issue with indexing was that the index
builder was receiving 'empty' documents. To fix that, I'm setting the
document content to be the post content as retrieved from the rss feed
or the text extracted from the external page.

I've tested with various blog sources and it seems to be working as
expected now.
2025-01-26 18:35:13 -08:00
George
15fc779e7e
Fix external link svg size in related posts 2025-01-23 14:11:20 -03:00
George
8266accd93
Fix related external posts (#2980)
Fixes #2977

Signed-off-by: George Araújo <george.gcac@gmail.com>
2025-01-23 14:05:32 -03:00
Maruan Al-Shedivat
d3402d0379 Bump license year to 2025 2025-01-18 22:16:45 -05:00
George
cb0926f837
Updated socials info in CUSTOMIZE.md 2025-01-18 14:17:14 -03:00
George
c5d0e92dbd
Update docker version on INSTALL.md 2025-01-15 23:14:50 -03:00
George
8d1ca80b00
Update docker version on docker-compose.yml 2025-01-15 23:14:16 -03:00
George
82611b4b6d
Updated dependencies for next release (#2958)
Signed-off-by: George Araújo <george.gcac@gmail.com>
2025-01-15 23:12:15 -03:00
Suraj Khamkar
da32034525
Fix issue causing no color inversion when rendering equations (#2956)
## Problem Description

When dark mode is enabled, inline math expressions rendered using
`$...$` in distill-style blog posts are displayed in black text. This
makes them difficult to read against the dark background. The issue
occurs because the default styles for MathJax-rendered content do not
account for dark mode and set the text color to black.

## Proposed Solution

This PR updates the MathJax setup to dynamically apply inline styles to
ensure the text color of MathJax-rendered content inherits the parent
container’s color. Specifically:
- Added a custom action in the _MathJax.options.renderActions_ section
to inject a CSS rule that sets _.mjx-container_ to inherit its color
from its parent element.
- Ensures that inline math expressions render correctly in both light
and dark modes without explicitly setting a fixed color.

## Changes Made
Modified the _mathjax-setup.js_ file to include:
- Custom inline styles injected via JavaScript for _.mjx-container_
elements.
- Explicit handling of _inlineMath_ delimiters to ensure consistency in
rendering.

## Testing and Validation
- Tested the fix in both light and dark modes to confirm that inline
math expressions render in the correct color.
- Verified that the changes do not introduce regressions in light mode
or affect block math expressions rendered using `$$...$$`.

## Impact
- Improves readability of inline math expressions in dark mode.
- Provides a consistent user experience for distill-style blog posts
across light and dark themes.
- Resolves #2915

Co-authored-by: Suraj Khamkar <surajk@atlanticpkg.com>
2025-01-15 23:11:44 -03:00
Ricky Yuan
c2cc2148c0
Fix resume custom reference link bug (#2941)
Hi,

I noticed an issue where the CV page fails to link to the correct custom
PDF when the `{% unless site.data.resume %}` block is executed in
`cv.liquid`. To resolve this, I updated the code to align its logic with
the else block to make it consistent.

---------

Co-authored-by: Maruan Al-Shedivat <maruan@genesistherapeutics.ai>
2025-01-14 11:39:28 -03:00
George
70c5ccf93d
Fixed prettier complaints 2025-01-13 11:57:43 -03:00
George
9ca1d52c04
Added another option to remove content 2025-01-12 15:43:14 -03:00
Maruan
f233233e19
Remove internal copy of jekyll-terser (#2945)
# Summary

since https://github.com/RobertoJBeltran/jekyll-terser/pull/1 has been
merged, I'm removing the internal copy jekyll-terser and switching to
https://github.com/RobertoJBeltran/jekyll-terser instead. also,
refactored `Gemfile` a bit.
2025-01-09 04:34:44 -08:00
Soumyaranjan Dash
1da2e64e73
Updated FAQ.md. (#2937)
Added documentation for Google Search Console ID creation and usage in
the template for google-site-verification.
2025-01-07 17:22:28 -03:00
George
c4a9f1729f
Howto remove pages (#2933)
Closes #2930

---------

Signed-off-by: George Araújo <george.gcac@gmail.com>
2025-01-03 18:50:37 -03:00
Manuel
4f405ba9c4
Fix Line Ending Issues for Shell Scripts in Docker for Windows 10 (#2932)
Shell scripts like entry_point.sh caused errors in Docker due to CRLF
line endings on Windows (`exec /tmp/entry_point.sh: no such file or
directory`).

Added `.gitattributes` to enforce LF line endings for *.sh files.

This resolves the issue and ensures consistent behavior across
platforms.
2025-01-02 16:00:47 -03:00
George
a3396b6c87
Updated ffi, changed base docker image, added observer and ostruct (#2931)
Signed-off-by: George Araujo <george.gcac@gmail.com>
2024-12-30 22:12:54 -03:00
Noman Bashir
bd58936fc9
Update README.md - remove my website link (#2926)
remove my website link
2024-12-30 15:23:38 -03:00
George
3795438a75
Updated dependencies (#2925)
Signed-off-by: George Araújo <george.gcac@gmail.com>
2024-12-29 23:08:39 -03:00
George
1c27220f59
Security fixes for download-3rd-party.rb 2024-12-29 22:52:32 -03:00
George
8d5448601b
Security fixes for download-3rd-party 2024-12-29 22:42:28 -03:00
George
e9916adb95
Create codeql.yml 2024-12-29 22:24:59 -03:00
Simmo Saan
c91c0ee54b
Revert padding from #2617 for CV tables (#2920)
PR #2617 added a noticeable amount of right padding to all table cells.
This might be fine for tables in content (e.g. posts), but creates odd
spaces in the CV page, which is largely made up of tables.
2024-12-29 21:50:59 -03:00
George
807629dd2f
Update docker-compose.yml image version 2024-12-28 23:48:25 -03:00
George
ae7b3c92f8
Update INSTALL.md repo version 2024-12-28 23:47:50 -03:00
George
cecd16d2bd
Added missing newsletter components (#2913)
Signed-off-by: George Araújo <george.gcac@gmail.com>
2024-12-26 16:49:45 -03:00
George
0dbab217fa
Update CUSTOMIZE.md 2024-12-23 14:26:12 -03:00
George
6e1226d53a
Update INSTALL.md 2024-12-23 14:20:14 -03:00
George
05eb46ac3f
Replaced jekyll-minifier that uses uglifier by terser (#2571)
Hopefully fixes #2548.

---------

Signed-off-by: George Araujo <george.gcac@gmail.com>
Signed-off-by: George Araújo <george.gcac@gmail.com>
2024-12-23 14:00:58 -03:00
Jiaqi Li
ec7d7c34e8
explicitly install imagemagick to support ubuntu-latest (>=24.04) in Github actions (#2906)
Install `imagemagick` within `Install and Build 🔧` step of Github
actions

Relevant issue: 
[#2902](https://github.com/alshedivat/al-folio/issues/2902) `convert`
Command Not Found on Ubuntu 24.04

Reason: 
`ubuntu-latest` in Github actions is pointed to `ubuntu-24.04` now, in
which `imagemagick` is no longer pre-installed. See
[this](https://github.com/actions/runner-images/issues/10772).

Modified files (actions) recommended by @george-gca 
```
- .github/workflows/deploy.yml
- .github/workflows/broken-links-site.yml
- .github/workflows/axe.yml
```
2024-12-19 17:55:36 -03:00
George
cc0cb3c426
Fixed #2903 2024-12-19 11:52:26 -03:00
George
c5101beae4
Fixed socials in search (#2895)
Signed-off-by: George Araújo <george.gcac@gmail.com>
2024-12-12 16:23:28 -03:00
George
3cdb9e4977
Fixed missing updated references to socials (#2894)
Signed-off-by: George Araújo <george.gcac@gmail.com>
2024-12-12 15:28:42 -03:00
Dominik Fuchß
00249b93c9
Update social.liquid: ensure social[1] is used (#2891)
Fixes #2890 

With the recent updates (v0.13.0) the email badge (social) does not
contain the email anymore.
Some link generations in social.liquid used the old schema
Also updated the handling for mastodon to be aligned to the other social
badges.
2024-12-12 15:18:55 -03:00
George
5bc4703a76
Fix google scholar citations (#2893)
Signed-off-by: George Araújo <george.gcac@gmail.com>
2024-12-12 15:17:49 -03:00
Dominik Fuchß
b968de85e0
Update bib.liquid: google scholar citation count (#2892)
Fix site.data.socials.scholar_userid access for google scholar citation
count

Fixes #2889
2024-12-12 15:17:23 -03:00
George
ae4412ef3c
Updated dependencies (#2887)
Signed-off-by: George Araújo <george.gcac@gmail.com>
2024-12-12 12:57:24 -03:00
George
8d20dc5e07
Update docker-compose.yml image version 2024-12-12 12:46:56 -03:00
George
a9da28e256
Renamed repo-img- to only- to allow setting images for only one theme (#2886)
Closes #930.

We already had classes for this kind of feature, but it was used
specifically for repository information. Just renamed the classes so it
is clear how they can be used.

To use them with markdown, just do it like this:

```markdown
![Only light](assets/img/prof_pic_color.png){: .only-light}
![Only dark](assets/img/prof_pic.jpg){: .only-dark}
```

and with html:

```html
<img
  class="only-light"
  src="assets/img/prof_pic_color.png"
>
<img
  class="only-dark"
  src="assets/img/prof_pic.jpg"
>
```

Signed-off-by: George Araújo <george.gcac@gmail.com>
2024-12-12 12:45:04 -03:00
George
e452f1a60f
Moved socials config to _data/socials.yml (#2885)
Fixes #2882, added support for
[scholar-icons](https://github.com/louisfacun/scholar-icons) and
[LeetCode](https://leetcode.com/).

---------

Signed-off-by: George Araújo <george.gcac@gmail.com>
2024-12-12 12:44:43 -03:00
George
84cf4aff3d
Update Font Awesome and Tabler Icons (#2884)
Solves #2881.

---------

Signed-off-by: George Araújo <george.gcac@gmail.com>
2024-12-11 15:19:38 -03:00
George
f23e35e043
New image components (image galleries) (#2877)
Added support for multiple image galleries, and created a sample post
showing how to enable and use them.

---------

Signed-off-by: George Araújo <george.gcac@gmail.com>
2024-12-10 19:01:01 -03:00
George
8121ad0269
Fix apostrophe in news title for search (#2879)
Fix #2876 

Weirdly enough, we already escape the title a few lines above the
changed one, but had to escape it again here.

Signed-off-by: George Araújo <george.gcac@gmail.com>
2024-12-06 12:20:36 -03:00
dai
957dc2c35a
Add features to distill template (#2840)
While using the distill template, I noticed it lacked many features
available in the regular post template, such as typograms, echarts, and
other interactive elements. To address this, I **included the necessary
scripts and dependencies for these features in** _distill.liquid_,
referencing them from misc.liquid. Now, the distill template offers the
same interactive functionality as the post template.
2024-12-04 17:00:29 -03:00
Henry Fang
a340b6039d
Update the INSTALL.md file to include steps for deploying al-folio on Netlify. (#2798)
Update CUSTOMIZE.md to include steps to deploy al-folio on Netlify.

---------

Co-authored-by: Henry <Henry@home.com>
Co-authored-by: Henry_Lab <henry@lab.com>
2024-12-03 21:33:08 -03:00
Pranjal Aggarwal
c5d484ec9f
Support for Resume/CV Links (#2826)
Solves #2825
2024-12-03 00:35:59 -03:00
Isaac Fernandes
b37758a55c
Add .lycheeignore file with linkedin to stop error on workflow Linkcheck (#2868)
Add a .lycheeignore file with LinkedIn to stop the error in the workflow
Link Checker due to response 999, and update to the new version
lycheeverse/lychee-action@v2.1.0.
2024-12-02 16:37:42 -03:00
Juan Carlos Niebles
8babc442a5
Fix to display references in order of citation (#2855)
"cite_in_order" here contradicts the global group_by year setting in
_config.yml
2024-12-02 16:37:19 -03:00
George
a09f15fd99
Fix prettier complaints 2024-12-02 15:45:38 -03:00
George
7c22e4800a
Fixed bug in header 2024-11-29 00:09:29 -03:00
dependabot[bot]
b0d70d4dd6
Bump rexml from 3.3.8 to 3.3.9 (#2814)
Bumps [rexml](https://github.com/ruby/rexml) from 3.3.8 to 3.3.9.
<details>
<summary>Release notes</summary>
<p><em>Sourced from <a
href="https://github.com/ruby/rexml/releases">rexml's
releases</a>.</em></p>
<blockquote>
<h2>REXML 3.3.9 - 2024-10-24</h2>
<h3>Improvements</h3>
<ul>
<li>Improved performance.
<ul>
<li><a
href="https://redirect.github.com/ruby/rexml/issues/210">GH-210</a></li>
<li>Patch by NAITOH Jun.</li>
</ul>
</li>
</ul>
<h3>Fixes</h3>
<ul>
<li>
<p>Fixed a parse bug for text only invalid XML.</p>
<ul>
<li><a
href="https://redirect.github.com/ruby/rexml/issues/215">GH-215</a></li>
<li>Patch by NAITOH Jun.</li>
</ul>
</li>
<li>
<p>Fixed a parse bug that <code>&amp;#0x...;</code> is accepted as a
character
reference.</p>
</li>
</ul>
<h3>Thanks</h3>
<ul>
<li>NAITOH Jun</li>
</ul>
</blockquote>
</details>
<details>
<summary>Changelog</summary>
<p><em>Sourced from <a
href="https://github.com/ruby/rexml/blob/master/NEWS.md">rexml's
changelog</a>.</em></p>
<blockquote>
<h2>3.3.9 - 2024-10-24 {#version-3-3-9}</h2>
<h3>Improvements</h3>
<ul>
<li>Improved performance.
<ul>
<li><a
href="https://redirect.github.com/ruby/rexml/issues/210">GH-210</a></li>
<li>Patch by NAITOH Jun.</li>
</ul>
</li>
</ul>
<h3>Fixes</h3>
<ul>
<li>
<p>Fixed a parse bug for text only invalid XML.</p>
<ul>
<li><a
href="https://redirect.github.com/ruby/rexml/issues/215">GH-215</a></li>
<li>Patch by NAITOH Jun.</li>
</ul>
</li>
<li>
<p>Fixed a parse bug that <code>&amp;#0x...;</code> is accepted as a
character
reference.</p>
</li>
</ul>
<h3>Thanks</h3>
<ul>
<li>NAITOH Jun</li>
</ul>
</blockquote>
</details>
<details>
<summary>Commits</summary>
<ul>
<li><a
href="38eaa86ac7"><code>38eaa86</code></a>
Add 3.3.9 entry</li>
<li><a
href="ce59f2eb1a"><code>ce59f2e</code></a>
parser: fix a bug that &amp;#0x...; is accepted as a character
reference</li>
<li><a
href="a09646d395"><code>a09646d</code></a>
test: fix indent</li>
<li><a
href="cf0fb9c9ca"><code>cf0fb9c</code></a>
Fix <code>IOSource#readline</code> for <code>@pending_buffer</code> (<a
href="https://redirect.github.com/ruby/rexml/issues/215">#215</a>)</li>
<li><a
href="1d0c362526"><code>1d0c362</code></a>
Optimize <code>IOSource#read_until</code> method (<a
href="https://redirect.github.com/ruby/rexml/issues/210">#210</a>)</li>
<li><a
href="622011f25a"><code>622011f</code></a>
Bump version</li>
<li>See full diff in <a
href="https://github.com/ruby/rexml/compare/v3.3.8...v3.3.9">compare
view</a></li>
</ul>
</details>
<br />


[![Dependabot compatibility
score](https://dependabot-badges.githubapp.com/badges/compatibility_score?dependency-name=rexml&package-manager=bundler&previous-version=3.3.8&new-version=3.3.9)](https://docs.github.com/en/github/managing-security-vulnerabilities/about-dependabot-security-updates#about-compatibility-scores)

Dependabot will resolve any conflicts with this PR as long as you don't
alter it yourself. You can also trigger a rebase manually by commenting
`@dependabot rebase`.

[//]: # (dependabot-automerge-start)
[//]: # (dependabot-automerge-end)

---

<details>
<summary>Dependabot commands and options</summary>
<br />

You can trigger Dependabot actions by commenting on this PR:
- `@dependabot rebase` will rebase this PR
- `@dependabot recreate` will recreate this PR, overwriting any edits
that have been made to it
- `@dependabot merge` will merge this PR after your CI passes on it
- `@dependabot squash and merge` will squash and merge this PR after
your CI passes on it
- `@dependabot cancel merge` will cancel a previously requested merge
and block automerging
- `@dependabot reopen` will reopen this PR if it is closed
- `@dependabot close` will close this PR and stop Dependabot recreating
it. You can achieve the same result by closing it manually
- `@dependabot show <dependency name> ignore conditions` will show all
of the ignore conditions of the specified dependency
- `@dependabot ignore this major version` will close this PR and stop
Dependabot creating any more for this major version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this minor version` will close this PR and stop
Dependabot creating any more for this minor version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this dependency` will close this PR and stop
Dependabot creating any more for this dependency (unless you reopen the
PR or upgrade to it yourself)
You can disable automated security fix PRs for this repo from the
[Security Alerts
page](https://github.com/alshedivat/al-folio/network/alerts).

</details>

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2024-11-28 15:52:10 -03:00
George
1c1632c8c9
Page permalink can be an outside url (#2863)
Fixes #2858

---------

Signed-off-by: George Araújo <george.gcac@gmail.com>
2024-11-28 15:32:13 -03:00
Guillaume Dalle
c170eaf2d0
Bluesky URL prefix should not be appended (#2856)
This PR modifies

- `_config.yml` to rename `bluesky_url` into `bluesky_id`
- `_includes/social.liquid` to handle the renaming in the display of
social media icons
2024-11-25 14:54:30 -03:00
imsi32
9674cfc8e5
[FIX] Blog Page Navigation (#2841) (#2846)
I tested on my Github page and it worked correctly. Then, copied here. 

Issue: Blog page navigation extends layout of the page in small screens.
Fixes: #2841
2024-11-19 19:03:51 -03:00
Abderrahmane Ait gueni ssaid
b7ee266824
Support for openpanel.dev for analytics (#2822) 2024-11-10 13:28:30 -03:00
Hanyan Yin
587f03a234
fix: Misfunction of wechat_qr in Social Integration (#2831)
Solve the bug issue (#2830)
2024-11-10 13:28:15 -03:00
Dmitry Ryumin
3d8b29c6c7
Update README.md (#2819)
Added my academic profile website to the README.md
2024-10-30 11:17:43 -03:00
João Pedro Fonseca
d244187869
Added my academic profile website to the README.md (#2815) 2024-10-29 10:25:06 -03:00
Amir Pourmand
47ed26fb4a
Update docker-compose.yml to use tag 2024-10-25 20:47:41 +03:30
Amir Pourmand
89f7ca7b93
Update docker-compose.yml 2024-10-24 16:47:42 +03:30
Amir Pourmand
75b3f9f196
Update version (#2800) 2024-10-23 17:34:41 -03:00
George
d1b38ee121
Removed hidden char from figure.liquid (#2804)
Signed-off-by: George Araújo <george.gcac@gmail.com>
2024-10-23 12:17:07 -03:00
George
eae72d8719
Standardized spaces for liquid tags (#2802)
Signed-off-by: George Araújo <george.gcac@gmail.com>
2024-10-23 12:04:00 -03:00
George
4184a06a42
Added commented code about docker permissions, organized Dockerfile (#2801)
I am currently testing out docker in a remote lab environment where
docker was configured in a way that it can't run as root, causing some
permission issues. The solution I could find was to add these changes
(commented by default) to these files and fill the specifics so it could
run as it was your user running the code.

Signed-off-by: George Araújo <george.gcac@gmail.com>
2024-10-23 11:35:04 -03:00
Kartikey Agrawal
613be397bf
Fix docker compose issue (#2799)
Fixed the `docker compose` issue, when trying to run the repository,
locally.

#2795 

<hr>

<h3>To test these out: </h3>

Run:
`docker compose pull`
`docker compose build`
`docker compose up`

---------

Co-authored-by: Amir Pourmand <pourmand1376@gmail.com>
2024-10-23 14:00:08 +03:30
Amir Pourmand
6a795aff79
Add Image Version to Docker-Compose to pull the relevant image (#2740)
This is to address 
- #2733 

Since a lot of times, the only problem is that docker image is not
consistent with the build. We have to somehow incorporate image version
into repository.

I don't insist to provide it this way. Maybe there are other automatic
ways which are better.

We can also calculate the relevant tag from git.
2024-10-23 13:50:41 +03:30
Dominik Fuchß
b3f1968422
Fix .webp SrcSet Creation Filter (#2761)
### Pull Request: Fix .webp SrcSet Creation Filter

#### Description

This PR addresses an issue with the filter for creating `.webp` srcsets
introduced in PR #2698. The original filter incorrectly searched for
extensions with a leading period (e.g., ".jpg" and ".png"). As a result,
no matches were found, preventing the srcset from being added to any
figures. This occurred because the split operation removes the period
from the file extensions.

#### Changes Made

- Updated the filter to search for file extensions without the leading
period (e.g., "jpg" and "png").
- Ensured that the resource sets are now correctly created for the
respective file extensions, allowing the `.webp` srcset to function as
intended.

#### Impact

With this change, responsive images will now correctly generate their
srcsets for the appropriate file types, improving image loading
performance and supporting better responsiveness.

#### Fixes

- Fixes #2777

Please review the changes and let me know if there are any further
adjustments needed. Thank you!
2024-10-22 10:42:20 -03:00
George
de2b3b87ae
Renamed all references to master branch to main (#2793)
Finishes #2086

Signed-off-by: George Araújo <george.gcac@gmail.com>
2024-10-21 21:54:16 -03:00
George
a88c9f11e7
Removed mini_racer dependency, updated dependencies and tabler-icons (#2791)
Since `mini_racer` is causing issue in #2432 and #2788 (both related to
Netlify) and [currently it doesn't seem we have a reason for having
it](https://github.com/search?q=repo%3Aalshedivat%2Fal-folio%20mini_racer&type=code)
as a dependency, I am removing it to see if it fixes the issues.

---------

Signed-off-by: George Araújo <george.gcac@gmail.com>
2024-10-21 21:38:45 -03:00
George
6053d3f768
Added setup-python step to build (#2792)
Signed-off-by: George Araújo <george.gcac@gmail.com>
2024-10-21 21:38:26 -03:00
Victoria Mooers
533f2c4fad
Add my website to the "Academics" list (#2790)
Adding a star to link to my website, as a user of the al-folio theme.
2024-10-21 16:56:39 -03:00
George
0af4aecf50
Removed sync from template from INSTALL.md (#2781)
Signed-off-by: George Araújo <george.gcac@gmail.com>
2024-10-16 11:52:16 -03:00
Simmo Saan
977a47cb18
Add DOI field button to bibliography (#2729) 2024-10-16 11:06:04 -03:00
suhyeon
332a6dfcbb
Update README.md (#2768)
Added an academic case (my website)

Co-authored-by: George <31376482+george-gca@users.noreply.github.com>
2024-10-15 23:00:06 -03:00
Yulian Manchev
7639ee82a8
update dockerfile to render jupyter notebook equations (#2758)
Hello,

This pr should address the issue where the equations in jupter notebooks
were not being rendered correctly in issue
https://github.com/alshedivat/al-folio/issues/2757 .
2024-10-15 22:54:49 -03:00
Martijn de Vos
587b27e414
Update README.md (#2771)
Added my website

Co-authored-by: George <31376482+george-gca@users.noreply.github.com>
2024-10-15 22:47:53 -03:00
Mikolaj Kocikowski, PhD
13572dfbc6
Adding a star-link for an academic website. (#2780)
I have added my website.
2024-10-15 22:27:58 -03:00
CheariX
421bdf860b
fix: do not included downloaded assets in jekyll-minifier (#2749)
If `download: true`, the site deployment fails.
This caused e.g. issue #2548.

I believe the issue appears because the 3rd party downloaded libs rely
on ES6 Syntax, which jekyll-minifier cannot work on correctly.
Also, I think we do not need to minify 3rd party downloaded libs at all.

While this PR does **not** fix the issue above, it at least ensures that
the site can be deployed with `download: true`. We still need better ES6
support as suggested in #2571.
2024-10-05 19:42:37 -03:00
George
b74b292cac
Update bug report with running with docker options 2024-10-02 10:07:50 -03:00
Amir Pourmand
c0d53e6316
Change Run to use bundle exec instead of normal exec jekyll 2024-10-02 10:21:52 +03:30
Leo
caddec2fcd
feature: figure support url. (#2586)
This PR allows the `figure` to accept url as the src of the`<img>`.
currently, it only supports the relative path.

```
// raw img
<img src="{{ image.url }}" alt="{{ image.description }}">

// assign url to figure                 
{% assign image_url = image.url %}
{% include figure.liquid url=image_url class="img-fluid rounded z-depth-1" zoomable=true %}
```

---------

Signed-off-by: ifuryst <ifuryst@gmail.com>
Co-authored-by: George <31376482+george-gca@users.noreply.github.com>
2024-10-01 10:54:31 -03:00
Amir Pourmand
c20074c8ca
Fix entry_point.sh docker backward compatibility problem (#2728) 2024-09-28 09:15:21 +03:30
Amir Pourmand
6265269bd4
Update entry_point.sh (#2707) 2024-09-26 08:40:15 +03:30
George
bdf4ce32e5
Updated dependencies (#2715)
Signed-off-by: George Araújo <george.gcac@gmail.com>
2024-09-24 15:57:59 -03:00
George
fdaed74d6e
Fixed bug when search result is inside description of external post (#2710)
Fixed a very specific bug that was happening when, for example,
searching for the word `round`, which caused this:


![image](https://github.com/user-attachments/assets/d6009462-ae03-4bc2-9ee3-60cb16dce20c)

After a lot of debugging I found out that the search result was in the
svg icon definition. Finally got to fix this.


![image](https://github.com/user-attachments/assets/cc179ea1-e9b8-4695-b98a-adf1472ecca5)

Signed-off-by: George Araújo <george.gcac@gmail.com>
2024-09-20 19:04:17 -03:00
Giuseppe Perelli
daa402f734
Update README.md (#2708)
Adding a star to the academics using this template
2024-09-19 13:39:16 -03:00
dependabot[bot]
d33213e033
Bump google-protobuf from 4.27.3 to 4.27.5 (#2709)
Bumps [google-protobuf](https://github.com/protocolbuffers/protobuf)
from 4.27.3 to 4.27.5.
<details>
<summary>Commits</summary>
<ul>
<li>See full diff in <a
href="https://github.com/protocolbuffers/protobuf/commits">compare
view</a></li>
</ul>
</details>
<br />


[![Dependabot compatibility
score](https://dependabot-badges.githubapp.com/badges/compatibility_score?dependency-name=google-protobuf&package-manager=bundler&previous-version=4.27.3&new-version=4.27.5)](https://docs.github.com/en/github/managing-security-vulnerabilities/about-dependabot-security-updates#about-compatibility-scores)

Dependabot will resolve any conflicts with this PR as long as you don't
alter it yourself. You can also trigger a rebase manually by commenting
`@dependabot rebase`.

[//]: # (dependabot-automerge-start)
[//]: # (dependabot-automerge-end)

---

<details>
<summary>Dependabot commands and options</summary>
<br />

You can trigger Dependabot actions by commenting on this PR:
- `@dependabot rebase` will rebase this PR
- `@dependabot recreate` will recreate this PR, overwriting any edits
that have been made to it
- `@dependabot merge` will merge this PR after your CI passes on it
- `@dependabot squash and merge` will squash and merge this PR after
your CI passes on it
- `@dependabot cancel merge` will cancel a previously requested merge
and block automerging
- `@dependabot reopen` will reopen this PR if it is closed
- `@dependabot close` will close this PR and stop Dependabot recreating
it. You can achieve the same result by closing it manually
- `@dependabot show <dependency name> ignore conditions` will show all
of the ignore conditions of the specified dependency
- `@dependabot ignore this major version` will close this PR and stop
Dependabot creating any more for this major version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this minor version` will close this PR and stop
Dependabot creating any more for this minor version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this dependency` will close this PR and stop
Dependabot creating any more for this dependency (unless you reopen the
PR or upgrade to it yourself)
You can disable automated security fix PRs for this repo from the
[Security Alerts
page](https://github.com/alshedivat/al-folio/network/alerts).

</details>

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2024-09-19 13:33:35 -03:00
M. Umar Shahbaz
046545983f
Fixed .webp src creation for svg and other files (#2698)
Added a default srcset in case extension is other than the following:
- .jpg
- .jpeg
- .png
- .tiff
- .gif

fixed #2660
2024-09-13 18:44:42 -03:00
Yao Xiao
8e9cf03ee9
Support _styles in page layout as in post and distill (#2694)
As desribed in the title.
2024-09-13 12:12:54 -03:00
Yao Xiao
92dbc393e7
Added my portfolio website to README (#2695)
Thanks for the amazing theme! ❤️ I've been using al-folio for several
years, during which I have considered migrating to more modern
technologies like MDX or similar but really found no theme that look
better than this.
2024-09-13 11:59:19 -03:00
George
b30b3f4ec0
Increased number of columns to 24 for contributors image 2024-09-10 12:18:58 -03:00
M. Umar Shahbaz
66607c1fc8
Fixed "All contributors not showing on README.md" (#2688)
# In README.md
## All Contributors Section

**Out of the 216 contributors, the page only shows around 100**
By adding an additional parameter ```max``` It now shows all of them.
2024-09-10 12:16:40 -03:00
Gürkan Soykan
f0eb587573
Fix conditional rendering of tag and category section (#2678)
### Overview
This PR fixes an issue where unnecessary horizontal lines were displayed
when there were no tags or categories present. The tag and category
container is now conditionally rendered, ensuring it only appears when
there are tags or categories to display.

no tags meaning, in _config.yml
```
display_tags: []
display_categories: []
```

### Before and After
The difference is illustrated in the images below:
- **First Image (Fixed)**: Shows the correct behavior with no extra
lines when tags or categories are absent.
- **Second Image (Current)**: Demonstrates the issue with unwanted
horizontal lines appearing when no tags or categories are present.


![image](https://github.com/user-attachments/assets/08becad5-9a34-4b6c-8a69-25206d9097da)

![image](https://github.com/user-attachments/assets/e36390cc-3104-4aa2-a047-a7fa8289e664)

### Impact
This change improves the visual consistency and cleanliness of the theme
by preventing unnecessary elements from being rendered, particularly in
cases where there are no tags or categories defined.
2024-09-10 11:57:54 -03:00
George
7203eb161c
Update CUSTOMIZE.md scheduled info 2024-09-09 15:03:17 -03:00
George
6632074098
Update schedule-posts.txt 2024-09-09 14:58:05 -03:00
Ahmed Nurye
444376997e
Add my webpage to community list (#2684)
Hi, thanks for the great theme! Added my personal academic webpage to
the community list.

Co-authored-by: George <31376482+george-gca@users.noreply.github.com>
2024-09-09 14:44:22 -03:00
M. Umar Shahbaz
d50cdf6b8a
Schedule Posts Workflow (#2672)
Updated ```CUSTOMIZE.md``` to include information regarding the
```scheduler.yml``` action
2024-09-09 14:36:44 -03:00
Mikolaj Kocikowski, PhD
97f78e5fb8
Update about.md (#2679)
I was confused until I realized what the author likely meant. Fixing the
typo. Thanks for the amazing theme!
2024-09-05 18:21:25 -03:00
George
cd3f4d6be5
Fixed bug when external posts title is composed of non-ascii chars
Fixed a bug in external-posts.rb when post title is composed of non-ascii chars
2024-08-28 15:22:20 -03:00
George
6c6932f1b1
Removed inexistent input from lighthouse-badger.yml 2024-08-28 10:54:06 -03:00
Trần Đặng Trung Đức
de4e89d11b
Update README.md (#2661)
Added trandangtrungduc.github.io to Academic
2024-08-26 15:28:31 -03:00
M. Umar Shahbaz
fbad5083ae
Added gh-pages Formatter (#2649)
# Added prettier-hmtl.yml
## GitHub Workflow

## Purpose
The GitHub Workflow formats the html files on gh-pages. The html files
generated are always on a single line. This makes scaling programs a lot
more difficult. By formatting the HTML files, al-folio can now be used
to generate code which can then be modified to allow for using back-end.

## Errors found
I want to let you know that when I was using prettier for this, it kept
crashing and after some debugging I found out that al-folio was
generating an invalid tag ```</source>```. ```<source>``` is a
self-closing tag and doesn't have a separate closing tag.
Error: ```<source src="URL" type="type"></source>```
Correct: ```<source src="URL" type="type">```

## Workflow Description
1. The workflow starts by checking out the gh-pages branch.
2. Then it finds all ```</source>``` tags in all html files and deletes
them.
3. It Installs NodeJS and then Prettier. To make sure the code was
executed properly, the workflow checks if prettier is present.
4. Then the workflow runs prettier on all html files present in gh-pages
5. It ends by committing the changes and pushing them to the gh-pages
directory

# Example:
> Before
>
![image](https://github.com/user-attachments/assets/8f0f993a-1b18-4edf-9d62-2fe503af272a)

> After
>
![image](https://github.com/user-attachments/assets/0714a6c8-0b37-4aee-a4f0-4ce0a7a663a1)
2024-08-23 13:12:34 -03:00
dependabot[bot]
debb1822ad
Bump rexml from 3.3.4 to 3.3.6 (#2654)
Bumps [rexml](https://github.com/ruby/rexml) from 3.3.4 to 3.3.6.
<details>
<summary>Release notes</summary>
<p><em>Sourced from <a
href="https://github.com/ruby/rexml/releases">rexml's
releases</a>.</em></p>
<blockquote>
<h2>REXML 3.3.6 - 2024-08-22</h2>
<h3>Improvements</h3>
<ul>
<li>
<p>Removed duplicated entity expansions for performance.</p>
<ul>
<li><a
href="https://redirect.github.com/ruby/rexml/issues/194">GH-194</a></li>
<li>Patch by Viktor Ivarsson.</li>
</ul>
</li>
<li>
<p>Improved namespace conflicted attribute check performance. It was
too slow for deep elements.</p>
<ul>
<li>Reported by l33thaxor.</li>
</ul>
</li>
</ul>
<h3>Fixes</h3>
<ul>
<li>
<p>Fixed a bug that default entity expansions are counted for
security check. Default entity expansions should not be counted
because they don't have a security risk.</p>
<ul>
<li><a
href="https://redirect.github.com/ruby/rexml/issues/198">GH-198</a></li>
<li><a
href="https://redirect.github.com/ruby/rexml/issues/199">GH-199</a></li>
<li>Patch Viktor Ivarsson</li>
</ul>
</li>
<li>
<p>Fixed a parser bug that parameter entity references in internal
subsets are expanded. It's not allowed in the XML specification.</p>
<ul>
<li><a
href="https://redirect.github.com/ruby/rexml/issues/191">GH-191</a></li>
<li>Patch by NAITOH Jun.</li>
</ul>
</li>
<li>
<p>Fixed a stream parser bug that user-defined entity references in
text aren't expanded.</p>
<ul>
<li><a
href="https://redirect.github.com/ruby/rexml/issues/200">GH-200</a></li>
<li>Patch by NAITOH Jun.</li>
</ul>
</li>
</ul>
<h3>Thanks</h3>
<ul>
<li>
<p>Viktor Ivarsson</p>
</li>
<li>
<p>NAITOH Jun</p>
</li>
<li>
<p>l33thaxor</p>
</li>
</ul>
<h2>REXML 3.3.5 - 2024-08-12</h2>
<h3>Fixes</h3>
<ul>
<li>Fixed a bug that
<code>REXML::Security.entity_expansion_text_limit</code>
check has wrong text size calculation in SAX and pull parsers.
<ul>
<li><a
href="https://redirect.github.com/ruby/rexml/issues/193">GH-193</a></li>
<li><a
href="https://redirect.github.com/ruby/rexml/issues/195">GH-195</a></li>
<li>Reported by Viktor Ivarsson.</li>
<li>Patch by NAITOH Jun.</li>
</ul>
</li>
</ul>
<!-- raw HTML omitted -->
</blockquote>
<p>... (truncated)</p>
</details>
<details>
<summary>Changelog</summary>
<p><em>Sourced from <a
href="https://github.com/ruby/rexml/blob/master/NEWS.md">rexml's
changelog</a>.</em></p>
<blockquote>
<h2>3.3.6 - 2024-08-22 {#version-3-3-6}</h2>
<h3>Improvements</h3>
<ul>
<li>
<p>Removed duplicated entity expansions for performance.</p>
<ul>
<li><a
href="https://redirect.github.com/ruby/rexml/issues/194">GH-194</a></li>
<li>Patch by Viktor Ivarsson.</li>
</ul>
</li>
<li>
<p>Improved namespace conflicted attribute check performance. It was
too slow for deep elements.</p>
<ul>
<li>Reported by l33thaxor.</li>
</ul>
</li>
</ul>
<h3>Fixes</h3>
<ul>
<li>
<p>Fixed a bug that default entity expansions are counted for
security check. Default entity expansions should not be counted
because they don't have a security risk.</p>
<ul>
<li><a
href="https://redirect.github.com/ruby/rexml/issues/198">GH-198</a></li>
<li><a
href="https://redirect.github.com/ruby/rexml/issues/199">GH-199</a></li>
<li>Patch Viktor Ivarsson</li>
</ul>
</li>
<li>
<p>Fixed a parser bug that parameter entity references in internal
subsets are expanded. It's not allowed in the XML specification.</p>
<ul>
<li><a
href="https://redirect.github.com/ruby/rexml/issues/191">GH-191</a></li>
<li>Patch by NAITOH Jun.</li>
</ul>
</li>
<li>
<p>Fixed a stream parser bug that user-defined entity references in
text aren't expanded.</p>
<ul>
<li><a
href="https://redirect.github.com/ruby/rexml/issues/200">GH-200</a></li>
<li>Patch by NAITOH Jun.</li>
</ul>
</li>
</ul>
<h3>Thanks</h3>
<ul>
<li>
<p>Viktor Ivarsson</p>
</li>
<li>
<p>NAITOH Jun</p>
</li>
<li>
<p>l33thaxor</p>
</li>
</ul>
<h2>3.3.5 - 2024-08-12 {#version-3-3-5}</h2>
<h3>Fixes</h3>
<ul>
<li>Fixed a bug that
<code>REXML::Security.entity_expansion_text_limit</code>
check has wrong text size calculation in SAX and pull parsers.
<ul>
<li><a
href="https://redirect.github.com/ruby/rexml/issues/193">GH-193</a></li>
<li><a
href="https://redirect.github.com/ruby/rexml/issues/195">GH-195</a></li>
<li>Reported by Viktor Ivarsson.</li>
<li>Patch by NAITOH Jun.</li>
</ul>
</li>
</ul>
<!-- raw HTML omitted -->
</blockquote>
<p>... (truncated)</p>
</details>
<details>
<summary>Commits</summary>
<ul>
<li><a
href="95871f399e"><code>95871f3</code></a>
Add 3.3.6 entry</li>
<li><a
href="7cb5eaeb22"><code>7cb5eae</code></a>
parser tree: improve namespace conflicted attribute check
performance</li>
<li><a
href="6109e0183c"><code>6109e01</code></a>
Fix a bug that Stream parser doesn't expand the user-defined entity
reference...</li>
<li><a
href="cb158582f1"><code>cb15858</code></a>
parser: keep the current namespaces instead of stack of Set</li>
<li><a
href="2b47b161db"><code>2b47b16</code></a>
parser: move duplicated end tag check to BaseParser</li>
<li><a
href="35e1681a17"><code>35e1681</code></a>
test tree-parser: move common method to base class</li>
<li><a
href="6e00a14daf"><code>6e00a14</code></a>
test: fix indent</li>
<li><a
href="df3a0cc830"><code>df3a0cc</code></a>
test: fix indent</li>
<li><a
href="fdbffe744b"><code>fdbffe7</code></a>
Use loop instead of recursive call for Element#namespace</li>
<li><a
href="6422fa3449"><code>6422fa3</code></a>
Use loop instead of recursive call for Element#root</li>
<li>Additional commits viewable in <a
href="https://github.com/ruby/rexml/compare/v3.3.4...v3.3.6">compare
view</a></li>
</ul>
</details>
<br />


[![Dependabot compatibility
score](https://dependabot-badges.githubapp.com/badges/compatibility_score?dependency-name=rexml&package-manager=bundler&previous-version=3.3.4&new-version=3.3.6)](https://docs.github.com/en/github/managing-security-vulnerabilities/about-dependabot-security-updates#about-compatibility-scores)

Dependabot will resolve any conflicts with this PR as long as you don't
alter it yourself. You can also trigger a rebase manually by commenting
`@dependabot rebase`.

[//]: # (dependabot-automerge-start)
[//]: # (dependabot-automerge-end)

---

<details>
<summary>Dependabot commands and options</summary>
<br />

You can trigger Dependabot actions by commenting on this PR:
- `@dependabot rebase` will rebase this PR
- `@dependabot recreate` will recreate this PR, overwriting any edits
that have been made to it
- `@dependabot merge` will merge this PR after your CI passes on it
- `@dependabot squash and merge` will squash and merge this PR after
your CI passes on it
- `@dependabot cancel merge` will cancel a previously requested merge
and block automerging
- `@dependabot reopen` will reopen this PR if it is closed
- `@dependabot close` will close this PR and stop Dependabot recreating
it. You can achieve the same result by closing it manually
- `@dependabot show <dependency name> ignore conditions` will show all
of the ignore conditions of the specified dependency
- `@dependabot ignore this major version` will close this PR and stop
Dependabot creating any more for this major version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this minor version` will close this PR and stop
Dependabot creating any more for this minor version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this dependency` will close this PR and stop
Dependabot creating any more for this dependency (unless you reopen the
PR or upgrade to it yourself)
You can disable automated security fix PRs for this repo from the
[Security Alerts
page](https://github.com/alshedivat/al-folio/network/alerts).

</details>

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2024-08-23 11:08:41 -03:00
George
ebf2fc9cca
Update INSTALL.md link to video tutorial 2024-08-22 14:26:04 -03:00
George
cd59ca3966
Added video tutorial to install instructions (#2653)
Signed-off-by: George Araújo <george.gcac@gmail.com>
2024-08-22 13:49:05 -03:00
George
c45c7675bd
Update INSTALL.md with running time of actions 2024-08-21 23:59:18 -03:00
George
c753284f21
Update INSTALL.md 2024-08-21 23:55:36 -03:00
George
c5c162cfa1
Update INSTALL.md recommended approach 2024-08-21 23:54:45 -03:00
Corentin Sautier
9b6decceb1
Fix no github_users titling in repositories.md (#2647)
Inverted order of title and {% if site.data.repositories.github_users
%}, so that if there is no github_users, the "GitHub users" title does
not appear.
2024-08-20 11:50:00 -03:00
Corentin Sautier
03f429f901
Update _config.yml to add a filtered bibtex keyword (#2648)
Added the google_scholar_id to filtered keywords
2024-08-20 11:44:25 -03:00
hdocmsu
853adefc9a
Adding own github-page to README.md (#2645)
Co-authored-by: George <31376482+george-gca@users.noreply.github.com>
2024-08-19 11:32:51 -03:00
Ming SUN
1e66e8c30d
Update README.md (#2644)
add Ming's website page

Co-authored-by: George <31376482+george-gca@users.noreply.github.com>
2024-08-19 11:30:29 -03:00
Riasat Sheikh
dfc7453ea0
[Feature] InspireHEP social and citation count badge (#2638)
[INSPIRE](http://inspirehep.net/) is a trusted community hub that
facilitates the sharing and discovery of accurate scholarly information
in high energy physics. By integrating the social and citation count
badge, al-folio users within this community will gain significant
benefits.

In continuation of #2634, I am creating this pull request.

## Details

### Social Icon
- Add your INSPIRE author ID in the `config.yml` under `inspirehep_id`.

### Citation Count
- Enable this feature by setting `inspirehep` to `true` under
`enable_publication_badges` in your `config.yml` file.
- In your bibliography file (e.g., `papers.bib`), add `inspirehep_id =
{the literature's recid}` under the citation of a literature source.
2024-08-19 00:03:01 -03:00
Beryl Sui
3ff7579a74
added personal website for Beryl Sui (#2628)
Thank you for this amazing template :)
2024-08-08 10:33:12 -03:00
George
04ab383c4b
Fixed prettier complaints on FAQ.md 2024-08-07 13:46:07 -03:00
Rachel
5c5c81cda8
[Bug-fix] Make custom blockquote font coloring consistent (#2622)
Currently, the tip, warning, and danger custom blockquote's font color
is not customized when the text is styled as bold, italics, or a list
item. As a result, the text is slightly less attractive in light mode
and almost illegible in dark mode.

## Screenshot: Current

<img width="400" alt="current-darkmode"
src="https://github.com/user-attachments/assets/1cdd5861-76a2-45bd-a948-99cf35f9c87e">

## Screenshot: Proposed

<img width="400" alt="proposed-darkmode"
src="https://github.com/user-attachments/assets/03fbd4d3-e3f5-498a-bef6-153e1ad55289">
2024-08-07 12:43:48 -03:00
George
610f42bf61
Update Prettier information on FAQ.md 2024-08-07 12:40:32 -03:00
Alon Kellner
3be24f6b04
Alon Kellner portfolio link (#2627)
I used al-folio's fork
[multi-language-al-folio](https://github.com/george-gca/multi-language-al-folio)
to create my portfolio, I love it :)
2024-08-07 12:20:30 -03:00
Rachel
1d4ce5a313
[bug-fix] Add padding to default markdown table cells (#2617)
Default, meaning `pretty_table: false`

## Sample code

```md
|   First Column   |  Second Column  |  Third Column  |
|------------------|-----------------|----------------|
| Sed in.          | Sed non.        | Morbi egestas. |
| Donec facilisis. | Suspendisse eu. | Nulla porta.   |
| Praesent a.      | Interdum et.    | Sed nec.       |
```

### Current result 

<img width="369" alt="current-default"
src="https://github.com/user-attachments/assets/7dc74cfd-ed60-46eb-a1c1-bf3df74bac59">

### Proposed result

<img width="378" alt="updated-default"
src="https://github.com/user-attachments/assets/2bf83fb5-f7b1-4d4b-88aa-e55d3420aeaf">
2024-08-04 15:32:46 -03:00
George
e46a7941b2
Updated dependencies (#2613)
Fix https://github.com/alshedivat/al-folio/security/dependabot/4

Signed-off-by: George Araújo <george.gcac@gmail.com>
2024-08-02 10:44:22 -03:00
George
e14f5723f2
Added customizing css to CUSTOMIZE.md (#2602)
Signed-off-by: George Araújo <george.gcac@gmail.com>
2024-07-25 14:01:57 -03:00
Salman Faroz
e7da32f0e4
Lighthouse Badger token as secret (#2589)
In the
[FAQ](https://github.com/alshedivat/al-folio/blob/master/FAQ.md#my-webpage-works-locally-but-after-deploying-it-is-not-displayed-correctly-css-and-js-are-not-loaded-properly-how-do-i-fix-that),
it is mentioned to "add it as a secret". However, the Lighthouse Badger
documentation specifies using an environment variable. I've updated this
to use secrets instead, as it is more secure and appropriate for using a
Personal Access Token (PAT).

#### Personal Access Token (fine-grained) Permissions:
- **contents**: access: read and write
- **metadata**: access: read-only

#### Personal Access Token (classic) Permissions:
- **repo**


[refer](https://github.com/MyActionWay/lighthouse-badger-workflows#lighthouse-badger-easyyml:~:text=and%20permissions%20required-,PAT%20(fine%2Dgrained)%3A%20repository%20permissions,-contents%20%3D%3E%20access%3A%20read)

For more information, refer to the [GitHub documentation on using
secrets in GitHub
Actions](https://docs.github.com/en/actions/security-guides/using-secrets-in-github-actions).
2024-07-25 12:07:22 -03:00
Simmo Saan
b5247d9eca
Remove github-metadata post (#2599)
The jekyll-github-metadata plugin was removed in PR #668, so this no
longer works. Clearly broken here:
https://alshedivat.github.io/al-folio/blog/2020/github-metadata/.
2024-07-25 12:05:03 -03:00
tonideleo
2db33ea99f
Add user link to user community (#2592) 2024-07-22 11:55:07 -03:00
George
fc15dd6cc8
Fixed prettier complaints on FAQ 2024-07-21 20:48:32 -03:00
George
2ebbb801e3
Expliciting how to handle wrong theme for site in FAQ.md 2024-07-21 17:13:10 -03:00
George
71006683cd
Added example of site with css and js not loaded 2024-07-21 17:03:58 -03:00
George
c3ac17294c
Improved FAQ readability 2024-07-21 16:19:33 -03:00
Tadashi
015a47787e
Fix typo in entry associated to award button (#2583) 2024-07-17 18:13:47 -03:00
George
75ab2823bb
Updated dependencies (#2582)
Signed-off-by: George Araujo <george.gcac@gmail.com>
2024-07-17 00:03:11 -03:00
George
d9ea1b3dd3
Updated to font awesome 6.6.0 (#2581)
Updated to [FontAwesome
6.6.0](https://github.com/FortAwesome/Font-Awesome/releases/tag/6.6.0)

---------

Signed-off-by: George Araujo <george.gcac@gmail.com>
2024-07-16 23:48:20 -03:00
Furkan Akkurt
aef552f043
Remove 'version's as it's obsolete; Update docker-compose files (#2574) 2024-07-16 22:52:06 -03:00
George
8ffd34c9b4
Fixed error in bibsearch.js 2024-07-13 14:05:20 -03:00
George
49ada3eac1
Update collections permalinks in _config.yml 2024-07-12 22:06:43 -03:00
CheariX
83e8a64de1
fix: search_enabled -> bib_search (#2560)
In #2523, I did a copy&paste error with
07d6e619cc

I used the global `search_enabled` config key instead of the correct
`bib_search` key.

This PR fixed it.
2024-07-12 17:00:48 -03:00
Scott Lee Chua
c4f20b889e
Make publication badges always visible (#2565)
## The issue
Currently Altmetric and Dimension publication badge elements have
non-obvious attributes that hide badges when some conditions are not met
,e.g.:
```
data-hide-no-mentions="true"
data-hide-less-than="15"
```
resulting in seemingly strange behavior where badges are enabled in
`config.yml` but don't show up consistently, as reported in #2443 :
Altmetric badges don't display for some pubs.

## This PR
- removes these hidden nondisplay conditions in favor of more
predictable website behavior;
- adds documentation links to point users interested in customizing
badge behavior to the right resources.
2024-07-11 13:46:37 -03:00
George
d904c52149
Fixed search for multiline news 2024-07-11 11:09:46 -03:00
George
607ff6af44
Fixed spacing between {{}} in bib.liquid 2024-07-10 15:20:39 -03:00
George
d019fc0f18
Fixed mathjax hash
Changed to "not" minified version of mathjax since it is already minified
2024-07-10 15:01:28 -03:00
George
e7d5c2f36a
Fixed title search and truncating if larger than 13 words (#2561)
Fixes #2459

Signed-off-by: George Araujo <george.gcac@gmail.com>
2024-07-10 14:40:56 -03:00
George
cb0375c128
Aggregated search code inside search.liquid (#2558)
Signed-off-by: George Araujo <george.gcac@gmail.com>
2024-07-10 13:05:43 -03:00
Scott Lee Chua
0e0ee215f6
Fix search in Distill style post (#2555)
Fixes issue #2554: search function is out of order in a distill style
post.
2024-07-10 12:48:03 -03:00
George
16cee9c719
Avoid broken links check for video blog post 2024-07-09 12:44:13 -03:00
Simmo Saan
f8335998e2
Fix space before some bib commas (#2552)
These somehow appeared when upgrading from v0.11.0 to v0.12.0.
2024-07-09 12:43:26 -03:00
CheariX
0a40a22739
feat: simple filtering / searching on bibliography (#2523)
This PR adds a simple filter/search functionality to the bibliography.

It can be used in two ways:

1. Simply enter a search term in the input box.
2. Send a search term via the `location.hash`, e.g.,
https://alshedivat.github.io/al-folio/publications/#mechanics

**Notes:**

- The search box is optional. It can be simply removed if anyone does
not like it.
- Searching via `hash` works without the search box. My idea is to use
this functionality to index all BibTeX entries via the `ctrl-k` search
and link them via their BibTeX key.
- Searching via `hash` could also be used to set static links on the
current page, e.g., to filter specific co-authors, venues, etc.
- I don't know much about the design of the input field. I simply reused
the newsletter box style.
- Entering a search term in the box does exact matching. No fuzzy
search, no AND/OR logic. I kept it very simple. Maybe anyone else wants
to improve it in the future.
- The search looks in all data in the BibTeX entry that is parsed via
`bib.liquid`. E.g., it is possible to search for BibTeX keys, titles,
authors, years, venues, abstracts, or whatever `bib.liquid` prints.
- I used a 300ms delay before starting to search on the input box.
- Entering search terms in the box does not update the location hash
(things could get complex otherwise due to automatically updating each
other...)
- If the filter does not find any match in a specific year, the year is
also made invisible.

**Screenshot**
<img width="935" alt="screenshot"
src="https://github.com/alshedivat/al-folio/assets/1998723/447003e2-c623-4de9-b2c5-2357117a7743">

Looking for feedback.
2024-07-08 16:51:22 -03:00
Amir Pourmand
ad8104b40f
Add linux x86-64 to Gemfile.lock (#2549)
Fixes #2544 

Generated via:
```
bundle lock --add-platform x86_64-linux
```
2024-07-07 18:54:37 -03:00
Maruan
369f0b74c9
Update README.md 2024-07-06 20:22:54 -07:00
Tiago Lobão
f4a6e184a9
Fix repo card heigth for different repo descriptions (#2525)
Hello! I had this minor issue on my website and I saw few other people
using this template and having the same issue.

**Brief**
if two repo's in the same row has different number of lines for the
descriptions, heights of the cards will not be the same if we don't
force the number of lines to be displayed.

**Solution**
By looking at [This
issue](https://github.com/anuraghazra/github-readme-stats/issues/2900) I
could see that they solved it by adding an new option,
`description_lines_count`. This was used on the API request in order to
fix the issue.

---

## Issue reproduced:


![before](https://github.com/alshedivat/al-folio/assets/15076325/238931f5-8a0e-45c5-a9bb-e9c6e4c0f04b)

---

## Issue fixed after the commit:


![after](https://github.com/alshedivat/al-folio/assets/15076325/a0e79cdf-fd6a-4765-b21f-279540ae88fe)
2024-06-24 11:53:47 -03:00
ariseus
fefa2470b4
Fix Altmetric badge not correctly set when Altmetric id is provided (#2522)
To reproduce the bug:

```bibtex
@inproceedings{Vaswani2017AttentionIA,
  title     = {Attention is All you Need},
  author    = {Ashish Vaswani and Noam M. Shazeer and Niki Parmar and Jakob Uszkoreit and Llion Jones and Aidan N. Gomez and Lukasz Kaiser and Illia Polosukhin},
  booktitle = {Neural Information Processing Systems},
  year      = {2017},
  doi       = {10.48550/arXiv.1706.03762},
  altmetric = {21021191}
}
```

The bug is
1. It seems to be some weird property of the liquid template that [line
252-254](8d82670ff1/_layouts/bib.liquid (L252-L254))
doesn't work at all. According to [this
post](https://stackoverflow.com/questions/59887447/liquid-how-to-assign-the-output-of-an-operator-to-a-variable)
and [this issue](https://github.com/Shopify/liquid/issues/236), liquid
doesn't support assign the output of operator to a variable nor a
ternary operator. So based on my console log, the value of
`entry_has_altmetric_badge` is always a string value of
`entry.altmetric` when altmetric is provided in bibtex.
```liquid
{% assign entry_has_altmetric_badge = entry.altmetric or entry.doi or  entry.eprint or entry.pmid or entry.isbn %}
{% assign entry_has_dimensions_badge = entry.dimensions or entry.doi or entry.pmid %}
{% assign entry_has_google_scholar_badge = entry.google_scholar_id %}
{% if entry_has_altmetric_badge or entry_has_dimensions_badge or entry_has_google_scholar_badge %}
  <div class="badges">
  {% if site.enable_publication_badges.altmetric and entry_has_altmetric_badge %}
    <span
...
```
Note that this could be problematic that a string in liquid is always
evaluated as true as long as it is defined regardless if it is "" or
"false".
[reference](https://shopify.github.io/liquid/basics/truthy-and-falsy/)
2. when altmetric is defined in bibtex, now the order of set attribute
to badge is eprint > doi > altmetric id > pmid > ISBN, and the badge
doesn't work when an arxiv doi is provided.

I think the expected behavior should be
1. as documented in CUSTOMIZE.md, only render the badge when the entry
is set to either "true" or the altmetric id. (It could also implement to
always render the badge whenever doi or other related attribute is set,
and set altmetric to "false" to disable it)
```md
- `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)
```
2. if the almetric id is set, use it first.
2024-06-20 12:40:34 -03:00
Andrew Boyer
cd020affa6
Update CUSTOMIZE.md for Newsletter support (#2521)
In reference to https://github.com/alshedivat/al-folio/pull/2517 and
https://github.com/alshedivat/al-folio/pull/2517#issuecomment-2179244937
2024-06-20 00:21:22 -03:00
George
8d82670ff1
Changes to deploy-docker-tag.yml now trigger action 2024-06-19 17:17:29 -03:00
George
acdc9ff57e
Changes to deploy-image.yml now trigger action 2024-06-19 17:16:11 -03:00
George
fb67d309c9
Changes to docker-slim.yml now trigger action 2024-06-19 17:15:26 -03:00
George
1569966cf6
Bib changes now trigger build action 2024-06-19 17:13:39 -03:00
ariseus
fbad870c9c
Add example use of annotation and superscripts in bibtex (#2520)
![image](https://github.com/alshedivat/al-folio/assets/33930674/e3018225-df99-4ebf-be18-5811f34fcf4b)

![image](https://github.com/alshedivat/al-folio/assets/33930674/afc6150e-0272-4180-bc5e-4ffbf5079239)

![image](https://github.com/alshedivat/al-folio/assets/33930674/40f88a17-4fba-4423-ab16-62fd37d7c574)

![image](https://github.com/alshedivat/al-folio/assets/33930674/c5cfe480-5df7-4f27-87c7-4883af1471ca)
2024-06-19 17:10:22 -03:00
George
b723e7d917
Fixed docker-slim.yml issue 2024-06-19 15:01:27 -03:00
Andrew Boyer
0ac9e447ca
Added support for a newsletter (#2517)
In reference to idea:
https://github.com/alshedivat/al-folio/discussions/2097
In reference to request:
https://github.com/alshedivat/al-folio/issues/923#issuecomment-2171924663

Added support to integrate a [loops.so](https://loops.so/) mailing list
into the site.

To use, you need to enable `newsletter` in `_config.yml`. You also must
specify a loops endpoint (although I think any mailing list endpoint can
work), which you can get when you set up a mailing list on loops. More
documentation on loops: [here](https://loops.so/docs/forms/custom-form).

Once that is enabled, the behavior is different depending on how you
specified your footer to behave in `_config.yml`. If `footer_fixed:
true`, then the sign up will appear at the bottom of the about page, as
well as at the bottom of blog posts, if you enable `related_posts`.

If `footer_fixed: false`, then the newsletter signup will be in the
footer (on every page), like it is in on [my
website](https://asboyer.com).

I'm not attached to the placement of the signup, and you can choose to
include it wherever you want with `{% include scripts/newsletter.liquid
%}`. Also if you include positional variables into that, you can choose
how you center the signup. So `{% include scripts/newsletter.liquid
left=true %}` positions the signup bar to the left.

Here are some screenshots below:
## Dark version

![image](https://github.com/alshedivat/al-folio/assets/52665298/af7fdb81-6e5f-47a9-958b-4cb93bba9e8f)

## Light version

![image](https://github.com/alshedivat/al-folio/assets/52665298/927f8bc5-b481-448b-ae5e-6f5b1c613243)
I think the input field color should probably change to maybe be light
for both themes? What do you think? I think the dark background looks
cool, but I don't usually see that done like that on other sites.

## Footer fixed

![image](https://github.com/alshedivat/al-folio/assets/52665298/c52f3dc1-0e45-400e-8b71-eeb00d00cb01)


![image](https://github.com/alshedivat/al-folio/assets/52665298/678a2d45-88ab-4d9a-b8cc-9fc6db26d744)

## Footer not fixed

![image](https://github.com/alshedivat/al-folio/assets/52665298/fd2c0228-2bce-4335-ac3c-5cb20a3307e2)


![image](https://github.com/alshedivat/al-folio/assets/52665298/f594b4f2-67e0-4f2b-a3e8-febd579aaf19)
To clarify, if footer isn't fixed, the email signup will appear on every
page.

---------

Co-authored-by: George <31376482+george-gca@users.noreply.github.com>
2024-06-19 14:49:19 -03:00
ariseus
a25df79188
Support superscripts in bibtex author names (#2512)
Implements #2511
2024-06-19 14:34:54 -03:00
Andrew Boyer
3b1c10844f
fix: blog highlighted in nav for child pages (#2516)
Currently, in all blog posts, or any child page under /blog, the "blog"
in nav is not highlighted.

In all other child pages for a parent in nav, the parent is highlighted.
For example, in a sub page of projects, projects in nav is highlighted.

This fix creates a consistent behavior for nav and highlights the blog
in nav if in a blog post.

BEFORE:
<img width="1427" alt="image"
src="https://github.com/alshedivat/al-folio/assets/52665298/fc79727c-dc22-4af7-8c16-80efa216ecbc">

AFTER:
<img width="1434" alt="image"
src="https://github.com/alshedivat/al-folio/assets/52665298/6b32e7f9-e421-4b08-b86e-813b20ac058e">
2024-06-18 14:42:02 -03:00
George
5d3d3ff60b
Fixed external post symbol on search (#2515)
Fixes #2471

Signed-off-by: George Araujo <george.gcac@gmail.com>
2024-06-18 11:45:34 -03:00
ariseus
ec3bff6b6b
Support pirsch.io for analytics (#2513) 2024-06-18 11:04:21 -03:00
saeedrafieyan
20c3b0876c
Added SRaf.ir to README.md (#2510)
Hi, I would be more than happy if I could add my personal website here.
2024-06-17 13:57:36 -03:00
Andrew Boyer
be52a965e3
fix: remove 'index.html' in pagination (#2509)
Currently, on the [blog](https://alshedivat.github.io/al-folio/blog/)
page, clicking "older" and "newer" on the pagination at the bottom
direct you forward to links like `/al-folio/blog/page/2/` and backward
to `/al-folio/blog/`.

However, if you click on the `1`, `2`.. etc buttons, there is a
different behavior. The links now contain an `index.html`. For example,
clicking `2` leads you to `/al-folio/blog/page/2/index.html`. It is the
same content, just with a messier hyper link. Same with clicking `1`,
you are brought to `/al-folio/blog/`.

This fix creates a consistency among the hyper links in pagination.
2024-06-15 16:31:40 -03:00
George
1a7fddecf8
Fix code blocks not changing to plots and others (#2497)
For some unknown reason, all the `document.onreadystatechange = () => {`
checks stopped working. Thankfully, replacing them with
`document.addEventListener("readystatechange", () => {` fixed the
issues.

---------

Signed-off-by: George Araujo <george.gcac@gmail.com>
2024-06-11 14:06:38 -03:00
George
b861b015b0
Fixed issue with vega 2024-06-11 11:51:25 -03:00
Morris Huang
a04e206560
Update README.md (#2493)
Added Physics-Morris.github.io to the list of academics.

Co-authored-by: Morris Huang <morris8934@gamil.com>
2024-06-09 18:24:28 -03:00
Rachel
1bee4d152a
[Tweak] Add bottom padding to project card (#2492)
## Current Behavior

### Vertical 👎 

There is _no_ space between cards in the vertical project layout


<img width="400" alt="v1-vertical"
src="https://github.com/rstein66/al-folio/assets/5504473/c97b558d-dc10-4b1f-9547-51e1710c82d3">

<br>

### Horizontal 👍 

Card spacing already looks good in horizontal layout

<img width="350" alt="v1-horizontal"
src="https://github.com/rstein66/al-folio/assets/5504473/1548766b-41ab-447a-ba35-fdb45ff92545">


## Proposed Resolution

**Simplistic** resolution: add padding to card's bottom (in both
vertical and horizontal project layout)

<img width="400" alt="v2-vertical"
src="https://github.com/rstein66/al-folio/assets/5504473/739eef5d-077f-46b7-a99a-52c6a82c5515">

<img width="350" alt="v2-horizontal"
src="https://github.com/rstein66/al-folio/assets/5504473/ba1e8269-193b-4151-b7af-915ace97d240">
2024-06-08 18:39:08 -04:00
Rachel
180ae3165a
[Tweak] Update "search filters" displayed on the blog's front page (#2480)
# [Tweak] Update "search filters" on blog's front page

## Current Behavior

```
1. Go to `blog/`
2. Select "🏷️ Blockquotes" "search filter"

=> `blog/category/blockquotes/` returns 404
```

<img width="400" alt="current-01-blog-filters"
src="https://github.com/alshedivat/al-folio/assets/5504473/dae7f061-864d-49f3-9af1-1ef30c8056cd">
<img width="400" alt="current-02-category-blockquotes"
src="https://github.com/alshedivat/al-folio/assets/5504473/c09422a9-a2c7-4f81-8534-1f310c4f9876">

<hr>

## Resolution in PR

1. Append 'blockquotes' to
[`display_tags`](https://github.com/alshedivat/al-folio/pull/2480/files#diff-ecec67b0e1d7e17a83587c6d27b6baaaa133f42482b07bd3685c77f34b62d883R295)
2. Replace 'blockquotes' with 'external-services' in
`display_categories`

=> Display 'blockquotes' tag and 'external-services' category on blog's
front page

<img width="400" alt="v2-01"
src="https://github.com/alshedivat/al-folio/assets/5504473/c2f62a12-578d-44e0-ae8c-d6998fe8e2cb">
<br>  
<img width="300" alt="v2-02"
src="https://github.com/alshedivat/al-folio/assets/5504473/8df86ea0-46d6-4389-904d-24965d74ace9">
<img width="300" alt="v2-03"
src="https://github.com/alshedivat/al-folio/assets/5504473/6407812a-2052-4e0c-88bf-0d70d1c03ed8">
2024-06-07 17:15:21 -03:00
Jack Burnett
5beffc3179
Update README.md (#2479)
Added big-culture.github.io to the list of labs, and
jackjburnett.github.io to the list of academics
2024-06-04 13:30:04 -03:00
George
b4f90ff416
Fixes external blog posts in search (#2470)
Fixes #2469. Separated `news` and `posts` from other collections in
search, since it caused duplicated entries. Also to ensure they are in
chronological reverse order.

Signed-off-by: George Araujo <george.gcac@gmail.com>
2024-06-02 13:48:09 -03:00
Andrew Leonard
afc56cc987
Feature: Dynamically sets the search shortcut key based on the user's platform (#2461)
This addresses issue #2437 by:
- Adding a new script that dynamically sets the search keyboard shortcut
by checking what platform the user is currently using
- Loading this script in `default.liquid`

<img width="1150" alt="SCR-20240529-cdfe"
src="https://github.com/alshedivat/al-folio/assets/16251412/7c4125fc-5028-422f-97d5-0df729e30fa7">
2024-05-31 18:23:46 -03:00
Howard Chiu
b35450e474
Update search.liquid (#2466)
missing { in osf section
2024-05-31 13:39:52 -03:00
Andrew Leonard
1ef1621bfc
Bugfix: Collapse the navbar on mobile when the user selects search (#2462)
This PR addresses #2438 by programmatically collapsing the navbar if the
user clicks on search on mobile.

## Behavior before

![ToggleBehaviorBefore](https://github.com/alshedivat/al-folio/assets/16251412/562765b2-57eb-4a3d-bf41-eee4fcfddd5f)


## Behavior after

![ToggleBehaviorAfter](https://github.com/alshedivat/al-folio/assets/16251412/78bb917b-d7b3-4e58-bd76-f422b8ab7fd5)
2024-05-31 13:39:19 -03:00
Abhilesh Dhawanjewar
4a2984a400
Fix: date pill position on CV (#2455)
Fixes: #2393 

Changes made in this PR - 
Added `style="width: 75px; transform: translateX(-15px)
translateY(-5px);">` to move the date pill `15px` to the left and `5px`
to the top

| Before | After |
| :-----: | :----: |
|
![date_pill_before](https://github.com/alshedivat/al-folio/assets/2447878/be80f8ea-b41f-4013-ace2-2ce4b184f076)
|
![date_pill_after](https://github.com/alshedivat/al-folio/assets/2447878/6f627e98-45aa-4b9a-b111-4c6c2013820c)
|
2024-05-31 13:27:10 -03:00
Andrew Leonard
351eb127fa
Bugfix: Updates ninja keys text input color so it is always visible (#2463)
This PR fixes an issue where the search input is not visible in the
light theme. This is because `ninja-header-min.js` defaults the text
color to white.

This style change will ensure that the text is always visible regardless
of theme selection

## Before Style Change
<img width="1435" alt="SCR-20240530-cnxd"
src="https://github.com/alshedivat/al-folio/assets/16251412/dbbc04c6-6e23-4bb5-8278-218d4e0e1329">

## After Style Change
<img width="1434" alt="SCR-20240530-coqb"
src="https://github.com/alshedivat/al-folio/assets/16251412/182df8e5-8f54-4eca-a255-b8efbf52db9d">
2024-05-31 13:26:24 -03:00
Maruan
d004837e60
Enable specifying explicit list of external posts to display (#2059)
- updates `external-posts.rb` plugin, allowing the user to specify an
explicit lists of urls in `_config.yml` that are then displayed in the
blog feed as external posts
- 99% of the code in this change is written by gpt-4:
https://chat.openai.com/share/24432d24-36a7-4d6f-a5c0-d7e5142f68cd
2024-05-27 21:15:44 -03:00
Furkan Akkurt
1274581702
Delete extra space ; Update post.liquid (#2452)
It seems the same problem exists in the posts as well. The relevant PR
is [here](https://github.com/alshedivat/al-folio/pull/2444).
2024-05-27 21:07:39 -03:00
Maruan
50a2f67477
Add back-to-top to distill layout (#2451) 2024-05-27 12:53:53 -04:00
George
c0763fff61
Fixed news titles in search (#2450)
Signed-off-by: George Araujo <george.gcac@gmail.com>
2024-05-27 13:50:14 -03:00
Tian Lan
da4486507a
Update docker-slim.yml (#2449)
Fixed a bug that causes docker-slim action to run and fail on forked
repositories. #2103
2024-05-27 13:04:02 -03:00
Furkan Akkurt
c7265a9bcb
Delete extra space ; Update blog.md (#2444) 2024-05-27 13:01:41 -03:00
CheariX
e8a2a40ae8
feat: search.liquid over all collections (#2447)
Thank you @george-gca for the awesome work. on #2415.

This PR generalizes the search on all collections. Currently, only
projects are added to the search.
This PR uses all of them, such as news. On my personal website, I use a
teaching collection which is then also automatically searched.
2024-05-27 12:28:56 -03:00
Qucheng Jiang
96c4e61385
Add NEU ESL to README.md (#2441)
Embedded System Lab @ Northeastern University (NU-ESL) website recently
embraced Jekyll with al-folio theme. Add nuesl link to README.md
2024-05-25 15:08:57 -03:00
George
8a6ad2d5ed
Moved search data inside search.liquid (#2439)
Signed-off-by: George Araujo <george.gcac@gmail.com>
2024-05-24 16:21:53 -03:00
Abhilesh Dhawanjewar
9e59ab8d72
Fix: Add back-to-top button (#2433)
Fixes #2425 

PR #2427 adds a back-to-top button, however the button overlaps with the
footer when `footer_fixed: false` and [has inadequate
spacing](https://github.com/alshedivat/al-folio/issues/2425#issuecomment-2121670658)
with `footer_fixed: true`

Changes in this PR:
- Fix positioning of button on fixed and sticky footer layouts 
- Add option to disable back-to-top button by setting `back_to_top:
false` in `_config.yml`
- Add button transparency to avoid button blocking content view
- Reduce size of button

Demo - 

| Device | Fixed footer | Sticky footer |
| :-----------: | :-------------: | :-----------: |
| Mobile |
![fixed_footer_mobile](https://github.com/alshedivat/al-folio/assets/2447878/2e17be04-1fa7-40c5-b691-829e92055367)
|
![sticky_footer_mobile](https://github.com/alshedivat/al-folio/assets/2447878/f5567e43-e6fe-442d-9a7f-99e0577e220b)
|
| Desktop |
![fixed_footer_desktop](https://github.com/alshedivat/al-folio/assets/2447878/fc755839-841a-4e6b-b249-2c75bc552ad8)
|
![sticky_footer_desktop](https://github.com/alshedivat/al-folio/assets/2447878/ef9a4c99-ce4c-4ac3-8fbb-207af9be245a)
|

Miscellaneous change - Added personal website under `Academics` to
`README.md`
2024-05-24 15:58:55 -03:00
George
92cebc9bb1
Added support for search (#2415)
Added support for search within the template as suggested in #581. I
decided to go with a client side search based on [Ninja
keys](https://github.com/ssleptsov/ninja-keys), but using [deepdub's
fork](https://github.com/deepdub-ai/ninja-keys) as basis since it
supports fuzzy search.

Had to do a bunch of changes to their code to make it work without using
node to install everything. Also changed to use some colors defined in
our side and using both pages' titles and descriptions for search. Also
had to increase the template max width to better accomodate the new item
in navigation bar.

Missing implementations:
- [ ] One thing I'd love to do (but currently have no idea how) would be
to change the text next to the search button depending on the platform.
For example, if the user is accessing the site on a mac they should use
⌘k instead of ctrl k.
- [x] Test how this looks like (and how it is supposed to work) on
devices with smaller screens
- [x] Support for offline mode

Some screenshots:

---

## Dark version

![Screenshot from 2024-05-13
16-30-12](https://github.com/alshedivat/al-folio/assets/31376482/535acec5-dd7a-48cb-a17f-a295da98b5d3)

![Screenshot from 2024-05-13
16-30-26](https://github.com/alshedivat/al-folio/assets/31376482/6b2d94bb-3981-4252-ae2b-53994b514491)

![Screenshot from 2024-05-13
16-30-36](https://github.com/alshedivat/al-folio/assets/31376482/66262b56-2744-475d-b09f-2cb65210017b)

---

## Light version

![Screenshot from 2024-05-13
16-30-44](https://github.com/alshedivat/al-folio/assets/31376482/a0eec50c-e7ac-4b52-aee8-2050bff05d54)

![Screenshot from 2024-05-13
16-30-50](https://github.com/alshedivat/al-folio/assets/31376482/41d72066-3e68-4ec3-bf3d-140da621f67b)

![Screenshot from 2024-05-13
16-30-55](https://github.com/alshedivat/al-folio/assets/31376482/613fd56e-7180-4373-ab7a-dfed184b5a18)

---------

Signed-off-by: George Araujo <george.gcac@gmail.com>
Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2024-05-23 23:21:16 -03:00
George
eef62a37df
Updated tikzjax hash 2024-05-21 18:47:38 -03:00
Simonwei97
b80a694bb3
feat: add back-to-top button (#2427)
slove #2425 

Demo:

<img width="1643" alt="image"
src="https://github.com/alshedivat/al-folio/assets/119845914/ea73b84b-1d09-4af8-b1ba-6090595f5ab7">

---------

Signed-off-by: simonwei97 <simonwei977@gmail.com>
Signed-off-by: Simonwei97 <119845914+simonwei97@users.noreply.github.com>
2024-05-21 00:20:49 -03:00
George
8fe4bee5e6
Remove lsi command (#2428)
Removed lsi command from code since it was added to _config.yml

---------

Signed-off-by: George Araujo <george.gcac@gmail.com>
2024-05-17 14:19:02 -03:00
George
d2853f2828
Added lsi option to _config.yml 2024-05-17 13:33:02 -03:00
dependabot[bot]
066fc099bb
Bump rexml from 3.2.6 to 3.2.8 (#2423)
Bumps [rexml](https://github.com/ruby/rexml) from 3.2.6 to 3.2.8.
<details>
<summary>Release notes</summary>
<p><em>Sourced from <a
href="https://github.com/ruby/rexml/releases">rexml's
releases</a>.</em></p>
<blockquote>
<h2>REXML 3.2.8 - 2024-05-16</h2>
<h3>Fixes</h3>
<ul>
<li>Suppressed a warning</li>
</ul>
<h2>REXML 3.2.7 - 2024-05-16</h2>
<h3>Improvements</h3>
<ul>
<li>
<p>Improve parse performance by using <code>StringScanner</code>.</p>
<ul>
<li>
<p><a
href="https://redirect.github.com/ruby/rexml/issues/106">GH-106</a></p>
</li>
<li>
<p><a
href="https://redirect.github.com/ruby/rexml/issues/107">GH-107</a></p>
</li>
<li>
<p><a
href="https://redirect.github.com/ruby/rexml/issues/108">GH-108</a></p>
</li>
<li>
<p><a
href="https://redirect.github.com/ruby/rexml/issues/109">GH-109</a></p>
</li>
<li>
<p><a
href="https://redirect.github.com/ruby/rexml/issues/112">GH-112</a></p>
</li>
<li>
<p><a
href="https://redirect.github.com/ruby/rexml/issues/113">GH-113</a></p>
</li>
<li>
<p><a
href="https://redirect.github.com/ruby/rexml/issues/114">GH-114</a></p>
</li>
<li>
<p><a
href="https://redirect.github.com/ruby/rexml/issues/115">GH-115</a></p>
</li>
<li>
<p><a
href="https://redirect.github.com/ruby/rexml/issues/116">GH-116</a></p>
</li>
<li>
<p><a
href="https://redirect.github.com/ruby/rexml/issues/117">GH-117</a></p>
</li>
<li>
<p><a
href="https://redirect.github.com/ruby/rexml/issues/118">GH-118</a></p>
</li>
<li>
<p><a
href="https://redirect.github.com/ruby/rexml/issues/119">GH-119</a></p>
</li>
<li>
<p><a
href="https://redirect.github.com/ruby/rexml/issues/121">GH-121</a></p>
</li>
<li>
<p>Patch by NAITOH Jun.</p>
</li>
</ul>
</li>
<li>
<p>Improved parse performance when an attribute has many
<code>&lt;</code>s.</p>
<ul>
<li><a
href="https://redirect.github.com/ruby/rexml/issues/124">GH-124</a></li>
</ul>
</li>
</ul>
<h3>Fixes</h3>
<ul>
<li>
<p>XPath: Fixed a bug of <code>normalize_space(array)</code>.</p>
<ul>
<li>
<p><a
href="https://redirect.github.com/ruby/rexml/issues/110">GH-110</a></p>
</li>
<li>
<p><a
href="https://redirect.github.com/ruby/rexml/issues/111">GH-111</a></p>
</li>
<li>
<p>Patch by flatisland.</p>
</li>
</ul>
</li>
<li>
<p>XPath: Fixed a bug that wrong position is used with nested path.</p>
<ul>
<li>
<p><a
href="https://redirect.github.com/ruby/rexml/issues/110">GH-110</a></p>
</li>
<li>
<p><a
href="https://redirect.github.com/ruby/rexml/issues/122">GH-122</a></p>
</li>
<li>
<p>Reported by jcavalieri.</p>
</li>
<li>
<p>Patch by NAITOH Jun.</p>
</li>
</ul>
</li>
<li>
<p>Fixed a bug that an exception message can't be generated for
invalid encoding XML.</p>
</li>
</ul>
<!-- raw HTML omitted -->
</blockquote>
<p>... (truncated)</p>
</details>
<details>
<summary>Changelog</summary>
<p><em>Sourced from <a
href="https://github.com/ruby/rexml/blob/master/NEWS.md">rexml's
changelog</a>.</em></p>
<blockquote>
<h2>3.2.8 - 2024-05-16 {#version-3-2-8}</h2>
<h3>Fixes</h3>
<ul>
<li>Suppressed a warning</li>
</ul>
<h2>3.2.7 - 2024-05-16 {#version-3-2-7}</h2>
<h3>Improvements</h3>
<ul>
<li>
<p>Improve parse performance by using <code>StringScanner</code>.</p>
<ul>
<li>
<p><a
href="https://redirect.github.com/ruby/rexml/issues/106">GH-106</a></p>
</li>
<li>
<p><a
href="https://redirect.github.com/ruby/rexml/issues/107">GH-107</a></p>
</li>
<li>
<p><a
href="https://redirect.github.com/ruby/rexml/issues/108">GH-108</a></p>
</li>
<li>
<p><a
href="https://redirect.github.com/ruby/rexml/issues/109">GH-109</a></p>
</li>
<li>
<p><a
href="https://redirect.github.com/ruby/rexml/issues/112">GH-112</a></p>
</li>
<li>
<p><a
href="https://redirect.github.com/ruby/rexml/issues/113">GH-113</a></p>
</li>
<li>
<p><a
href="https://redirect.github.com/ruby/rexml/issues/114">GH-114</a></p>
</li>
<li>
<p><a
href="https://redirect.github.com/ruby/rexml/issues/115">GH-115</a></p>
</li>
<li>
<p><a
href="https://redirect.github.com/ruby/rexml/issues/116">GH-116</a></p>
</li>
<li>
<p><a
href="https://redirect.github.com/ruby/rexml/issues/117">GH-117</a></p>
</li>
<li>
<p><a
href="https://redirect.github.com/ruby/rexml/issues/118">GH-118</a></p>
</li>
<li>
<p><a
href="https://redirect.github.com/ruby/rexml/issues/119">GH-119</a></p>
</li>
<li>
<p><a
href="https://redirect.github.com/ruby/rexml/issues/121">GH-121</a></p>
</li>
<li>
<p>Patch by NAITOH Jun.</p>
</li>
</ul>
</li>
<li>
<p>Improved parse performance when an attribute has many
<code>&lt;</code>s.</p>
<ul>
<li><a
href="https://redirect.github.com/ruby/rexml/issues/124">GH-124</a></li>
</ul>
</li>
</ul>
<h3>Fixes</h3>
<ul>
<li>
<p>XPath: Fixed a bug of <code>normalize_space(array)</code>.</p>
<ul>
<li>
<p><a
href="https://redirect.github.com/ruby/rexml/issues/110">GH-110</a></p>
</li>
<li>
<p><a
href="https://redirect.github.com/ruby/rexml/issues/111">GH-111</a></p>
</li>
<li>
<p>Patch by flatisland.</p>
</li>
</ul>
</li>
<li>
<p>XPath: Fixed a bug that wrong position is used with nested path.</p>
<ul>
<li>
<p><a
href="https://redirect.github.com/ruby/rexml/issues/110">GH-110</a></p>
</li>
<li>
<p><a
href="https://redirect.github.com/ruby/rexml/issues/122">GH-122</a></p>
</li>
<li>
<p>Reported by jcavalieri.</p>
</li>
<li>
<p>Patch by NAITOH Jun.</p>
</li>
</ul>
</li>
<li>
<p>Fixed a bug that an exception message can't be generated for</p>
</li>
</ul>
<!-- raw HTML omitted -->
</blockquote>
<p>... (truncated)</p>
</details>
<details>
<summary>Commits</summary>
<ul>
<li><a
href="1cf37bab79"><code>1cf37ba</code></a>
Add 3.2.8 entry</li>
<li><a
href="b67081caa8"><code>b67081c</code></a>
Remove an unused variable (<a
href="https://redirect.github.com/ruby/rexml/issues/128">#128</a>)</li>
<li><a
href="94e180e939"><code>94e180e</code></a>
Suppress a warning</li>
<li><a
href="d574ba5fe1"><code>d574ba5</code></a>
ci: install only gems required for running tests (<a
href="https://redirect.github.com/ruby/rexml/issues/129">#129</a>)</li>
<li><a
href="4670f8fc18"><code>4670f8f</code></a>
Add missing Thanks section</li>
<li><a
href="9ba35f9f03"><code>9ba35f9</code></a>
Bump version</li>
<li><a
href="085def0742"><code>085def0</code></a>
Add 3.2.7 entry</li>
<li><a
href="4325835f92"><code>4325835</code></a>
Read quoted attributes in chunks (<a
href="https://redirect.github.com/ruby/rexml/issues/126">#126</a>)</li>
<li><a
href="e77365e2d1"><code>e77365e</code></a>
Exclude older than 2.6 on macos-14</li>
<li><a
href="bf2c8edb5f"><code>bf2c8ed</code></a>
Move development dependencies to Gemfile (<a
href="https://redirect.github.com/ruby/rexml/issues/124">#124</a>)</li>
<li>Additional commits viewable in <a
href="https://github.com/ruby/rexml/compare/v3.2.6...v3.2.8">compare
view</a></li>
</ul>
</details>
<br />


[![Dependabot compatibility
score](https://dependabot-badges.githubapp.com/badges/compatibility_score?dependency-name=rexml&package-manager=bundler&previous-version=3.2.6&new-version=3.2.8)](https://docs.github.com/en/github/managing-security-vulnerabilities/about-dependabot-security-updates#about-compatibility-scores)

Dependabot will resolve any conflicts with this PR as long as you don't
alter it yourself. You can also trigger a rebase manually by commenting
`@dependabot rebase`.

[//]: # (dependabot-automerge-start)
[//]: # (dependabot-automerge-end)

---

<details>
<summary>Dependabot commands and options</summary>
<br />

You can trigger Dependabot actions by commenting on this PR:
- `@dependabot rebase` will rebase this PR
- `@dependabot recreate` will recreate this PR, overwriting any edits
that have been made to it
- `@dependabot merge` will merge this PR after your CI passes on it
- `@dependabot squash and merge` will squash and merge this PR after
your CI passes on it
- `@dependabot cancel merge` will cancel a previously requested merge
and block automerging
- `@dependabot reopen` will reopen this PR if it is closed
- `@dependabot close` will close this PR and stop Dependabot recreating
it. You can achieve the same result by closing it manually
- `@dependabot show <dependency name> ignore conditions` will show all
of the ignore conditions of the specified dependency
- `@dependabot ignore this major version` will close this PR and stop
Dependabot creating any more for this major version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this minor version` will close this PR and stop
Dependabot creating any more for this minor version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this dependency` will close this PR and stop
Dependabot creating any more for this dependency (unless you reopen the
PR or upgrade to it yourself)
You can disable automated security fix PRs for this repo from the
[Security Alerts
page](https://github.com/alshedivat/al-folio/network/alerts).

</details>

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2024-05-17 10:58:14 -03:00
George
e8f224c1be
Changing Gemfile now triggers page build 2024-05-17 10:45:29 -03:00
George
e954d7726b
Fix offline leaflet (#2420)
Fixes #2419 by downloading leaflet images. Also changed the path where
the libraries are downloaded to avoid not downloading files with same
name.

---------

Signed-off-by: George Araujo <george.gcac@gmail.com>
2024-05-15 17:56:00 -03:00
dependabot[bot]
0a80d5edb6
Bump nokogiri from 1.16.4 to 1.16.5 (#2417)
Bumps [nokogiri](https://github.com/sparklemotion/nokogiri) from 1.16.4
to 1.16.5.
<details>
<summary>Release notes</summary>
<p><em>Sourced from <a
href="https://github.com/sparklemotion/nokogiri/releases">nokogiri's
releases</a>.</em></p>
<blockquote>
<h2>v1.16.5 / 2024-05-13</h2>
<h3>Security</h3>
<ul>
<li>[CRuby] Vendored libxml2 is updated to address CVE-2024-34459. See
<a
href="https://github.com/sparklemotion/nokogiri/security/advisories/GHSA-r95h-9x8f-r3f7">GHSA-r95h-9x8f-r3f7</a>
for more information.</li>
</ul>
<h3>Dependencies</h3>
<ul>
<li>[CRuby] Vendored libxml2 is updated to <a
href="https://gitlab.gnome.org/GNOME/libxml2/-/releases/v2.12.7">v2.12.7</a>
from v2.12.6. (<a
href="https://github.com/flavorjones"><code>@​flavorjones</code></a>)</li>
</ul>
<hr />
<p>sha256 checksums:</p>

<pre><code>af0f44fa3e664dfb2aa10de8b551447d720c1e8d1f0aa3f35783dcc43e40a874
nokogiri-1.16.5-aarch64-linux.gem
23dc2357b26409a5c33b7e32a82902f0e9995305420f16d1a03ab3ea1a482fec
nokogiri-1.16.5-arm-linux.gem
950d037530edb49f75ad35de0b8038b970a7dda57e2b6326895b0e49fadf6214
nokogiri-1.16.5-arm64-darwin.gem
b7aefc94370c62476b8528e8d8abb6160203abd84a1f4eceda8f1aa8974d9989
nokogiri-1.16.5-java.gem
ec2167160df8fec3137bf95d574ed80ebc1d002bb3b281546b60b4aa9002466e
nokogiri-1.16.5-x64-mingw-ucrt.gem
6984200491fac69974005ecfa2de129d61843d345eafa5d6f58e8b908d1cf107
nokogiri-1.16.5-x64-mingw32.gem
abdc389ab1ec6604492da16bd9d06ad746fdb6bd6a1bd274c400d61ffcadb3c4
nokogiri-1.16.5-x86-linux.gem
63d24981345856f2baf7f4089870a62d3042fb8d3021b280fb04fc052532e3c4
nokogiri-1.16.5-x86-mingw32.gem
71b5f54e378c433d13df67c3b71acc4716129da62402d8181f310c4216a63279
nokogiri-1.16.5-x86_64-darwin.gem
0ca238da870066bed2f7837af6f35791bb9b76c4c5638999c46aac44818a6a97
nokogiri-1.16.5-x86_64-linux.gem
ec36162c68984fa0a90a5c4ae7ab7759460639e716cc1ce75f34c3cb54158ad2
nokogiri-1.16.5.gem
</code></pre>
</blockquote>
</details>
<details>
<summary>Changelog</summary>
<p><em>Sourced from <a
href="https://github.com/sparklemotion/nokogiri/blob/main/CHANGELOG.md">nokogiri's
changelog</a>.</em></p>
<blockquote>
<h2>v1.16.5</h2>
<h3>Security</h3>
<ul>
<li>[CRuby] Vendored libxml2 is updated to address CVE-2024-34459. See
<a
href="https://github.com/sparklemotion/nokogiri/security/advisories/GHSA-r95h-9x8f-r3f7">GHSA-r95h-9x8f-r3f7</a>
for more information.</li>
</ul>
<h3>Dependencies</h3>
<ul>
<li>[CRuby] Vendored libxml2 is updated to <a
href="https://gitlab.gnome.org/GNOME/libxml2/-/releases/v2.12.7">v2.12.7</a>
from v2.12.6. (<a
href="https://github.com/flavorjones"><code>@​flavorjones</code></a>)</li>
</ul>
</blockquote>
</details>
<details>
<summary>Commits</summary>
<ul>
<li><a
href="cd70bd3dc9"><code>cd70bd3</code></a>
version bump to v1.16.5</li>
<li><a
href="afc36de553"><code>afc36de</code></a>
dep: update vendored libxml2 to v2.12.7 (<a
href="https://redirect.github.com/sparklemotion/nokogiri/issues/3191">#3191</a>)</li>
<li><a
href="41b4f0846d"><code>41b4f08</code></a>
ci: add arm64-darwin coverage using macos-14</li>
<li><a
href="67b9e863a6"><code>67b9e86</code></a>
dep: update libxml2 to v2.12.7</li>
<li>See full diff in <a
href="https://github.com/sparklemotion/nokogiri/compare/v1.16.4...v1.16.5">compare
view</a></li>
</ul>
</details>
<br />


[![Dependabot compatibility
score](https://dependabot-badges.githubapp.com/badges/compatibility_score?dependency-name=nokogiri&package-manager=bundler&previous-version=1.16.4&new-version=1.16.5)](https://docs.github.com/en/github/managing-security-vulnerabilities/about-dependabot-security-updates#about-compatibility-scores)

Dependabot will resolve any conflicts with this PR as long as you don't
alter it yourself. You can also trigger a rebase manually by commenting
`@dependabot rebase`.

[//]: # (dependabot-automerge-start)
[//]: # (dependabot-automerge-end)

---

<details>
<summary>Dependabot commands and options</summary>
<br />

You can trigger Dependabot actions by commenting on this PR:
- `@dependabot rebase` will rebase this PR
- `@dependabot recreate` will recreate this PR, overwriting any edits
that have been made to it
- `@dependabot merge` will merge this PR after your CI passes on it
- `@dependabot squash and merge` will squash and merge this PR after
your CI passes on it
- `@dependabot cancel merge` will cancel a previously requested merge
and block automerging
- `@dependabot reopen` will reopen this PR if it is closed
- `@dependabot close` will close this PR and stop Dependabot recreating
it. You can achieve the same result by closing it manually
- `@dependabot show <dependency name> ignore conditions` will show all
of the ignore conditions of the specified dependency
- `@dependabot ignore this major version` will close this PR and stop
Dependabot creating any more for this major version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this minor version` will close this PR and stop
Dependabot creating any more for this minor version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this dependency` will close this PR and stop
Dependabot creating any more for this dependency (unless you reopen the
PR or upgrade to it yourself)
You can disable automated security fix PRs for this repo from the
[Security Alerts
page](https://github.com/alshedivat/al-folio/network/alerts).

</details>

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2024-05-13 21:18:32 -03:00
George
36bc24f7e4
Fixed link to last FAQ question 2024-05-10 21:25:16 -03:00
George
7f6878579e
Fixed typo in pagination.liquid 2024-05-09 14:27:34 -03:00
George
37dbff08ab
Added prettier link to FAQ 2024-05-09 14:16:21 -03:00
George
32deb3899b
Added information about GitHub workflows to FAQ (#2404)
Signed-off-by: George Araujo <george.gcac@gmail.com>
2024-05-09 14:08:20 -03:00
George
1d07bc7560
Updated dependencies (#2402)
Signed-off-by: George Araujo <george.gcac@gmail.com>
2024-05-09 12:44:09 -03:00
Davide Carnemolla
134dc884ae
Fix docker image building (#2400)
This PR should fix the issues reported in
https://github.com/alshedivat/al-folio/issues/2384 ,
https://github.com/alshedivat/al-folio/issues/2392 and
https://github.com/alshedivat/al-folio/issues/2395.
It seems that the ruby docker image is not affected by these problems.
2024-05-09 11:41:17 -03:00
George
ad2a793a24
Fixed card padding bottom 2024-05-08 11:33:21 -03:00
Amir Pourmand
0e54bf6444
Fix dependency (#2396) 2024-05-07 12:42:38 +03:30
George
cb0db65d8c
Updated docker slim action 2024-05-06 21:15:29 -03:00
Amir Pourmand
f88dd70474
Add Gemfile.lock (#2390) 2024-05-06 13:27:41 +03:30
Kishan Ved
a17cda433d
Added website link to README, Academics (#2388)
I've added my al-folio themed website link to the README's Academic
websites section.
2024-05-05 02:32:56 -03:00
George
1c416dbae8
Added support for jekyll-tabs (#2380)
Added support for [jekyll-tabs](https://github.com/Ovski4/jekyll-tabs),
implemented #1977.

Light:


![image](https://github.com/alshedivat/al-folio/assets/31376482/a3efdd92-1c0b-4ce7-8b34-2b052b75351b)

Dark:


![image](https://github.com/alshedivat/al-folio/assets/31376482/d0fb7091-8776-4838-8e70-c07435463e0a)

---------

Signed-off-by: George Araujo <george.gcac@gmail.com>
2024-05-02 14:34:48 -03:00
George
ba53f89965
Added support for Google Typograms (#2379)
Google [Typograms](https://github.com/google/typograms/) is a
lightweight image format (text/typogram) useful for defining simple
diagrams in technical documentation.


![image](https://github.com/alshedivat/al-folio/assets/31376482/715ba10b-c75d-492b-8869-4ec83d380e50)


![image](https://github.com/alshedivat/al-folio/assets/31376482/935f6ef8-1977-41d0-8797-d226594b82a9)

---------

Signed-off-by: George Araujo <george.gcac@gmail.com>
2024-04-30 11:26:56 -03:00
CheariX
04bf52e105
fix(style): remove whitespace before comma (#2378)
This PR fixes a very niche bug.

If there is a co-author that is not *me* (=`<em>` tagged) and does not
have a `coauthor_url` (=`<a>` tagged), there will be a leading
whitespace before the separating comma. If the author list is split into
multiple lines (due to long author lists or a small view), the
whitespace can lead to a line beginning with a comma.

As I said, very niche, but interestingly, the other cases already did
the same whitespace handling. Just the case not-me/no-url was mising.

Currently, we do not have this case on vanilla al-folio, but you can see
it for example on [my website](https://christianmainka.de/publications/)
if the view is small (e.g., 430px).

Related to #1502.
2024-04-29 18:09:50 -03:00
George
37d75d039e
Added post citation (#2377)
Basically adds suggestions of how to cite a post, as suggested in #2374.


![image](https://github.com/alshedivat/al-folio/assets/31376482/756eb88a-35c9-435a-b79e-70d11aa489cb)

---------

Signed-off-by: George Araujo <george.gcac@gmail.com>
2024-04-29 14:28:06 -03:00
CheariX
86a6b03259
Fix bib preview mobile (#2359)
[Reference](https://github.com/alshedivat/al-folio/pull/2352#issuecomment-2067965077)

I'm not sure if the removal of `max-width: 90vw;` for all images causes
any side issues.
I could at least not find any. But having this properties will produce
unaligned preview sizes.
Help/testing is more than welcome.


# Before
<img width="364" alt="Bildschirmfoto 2024-04-21 um 14 17 51"
src="https://github.com/alshedivat/al-folio/assets/1998723/5ad1a4d7-dfe6-43f8-98ec-eae19dd991c2">

# After

<img width="364" alt="Bildschirmfoto 2024-04-21 um 14 21 53"
src="https://github.com/alshedivat/al-folio/assets/1998723/fb942403-a01f-42ec-95c6-697378ed0d92">
...
<img width="364" alt="Bildschirmfoto 2024-04-21 um 14 22 03"
src="https://github.com/alshedivat/al-folio/assets/1998723/1ddf43d8-98a8-421d-9f64-3352190c4bb8">
2024-04-28 10:33:55 -07:00
Raffaele Mancuso
492c509646
Set user agent for lychee (#2368)
See: https://github.com/alshedivat/al-folio/discussions/2366
See: https://github.com/lycheeverse/lychee/issues/1411
2024-04-24 13:17:29 -03:00
Tao Deng
a29e24a46b
add last updated date to posts (#2341)
This PR is related to #2309. I added an optional `last_updated` field.
This new field represents the timestamp for when the post was last
updated. Consequently, the existing `date` metadata should now be
interpreted as the creation date of the post.

The formatting for displaying these dates has been standardized as
follows:

```text
Created: July 11, 2023   |   Last Updated: April 14, 2024
```

For a practical implementation example, please refer to [this
post](https://torydeng.github.io/blog/2023/deploying-server/) on my
website, where I have applied these changes.

---

Any feedback is wellcome.
2024-04-24 12:19:36 -03:00
George
06ca08cbaf
Fixed security issue with download 3rd party plugin (#2365)
Added condition to avoid security issue according to GitHub's dependabot


![image](https://github.com/alshedivat/al-folio/assets/31376482/b470a83a-5038-48be-99a6-1cbf63de57bf)

---------

Signed-off-by: George Araujo <george.gcac@gmail.com>
2024-04-23 11:29:15 -03:00
George
b315315f9b
Fixed security issue with download 3rd party plugin (#2364)
Signed-off-by: George Araujo <george.gcac@gmail.com>
2024-04-23 10:59:33 -03:00
CheariX
0aa3821300
Feat reworked project layout (closing #2246) (#2357)
The current state of project looks a bit unharmonized.

# Vertical layout before:

<img width="834" alt="Bildschirmfoto 2024-04-20 um 18 09 16"
src="https://github.com/alshedivat/al-folio/assets/1998723/55ba0968-bfd9-443f-b58a-eb6723deccfc">

# Vertical layout after:

<img width="834" alt="Bildschirmfoto 2024-04-20 um 18 10 28"
src="https://github.com/alshedivat/al-folio/assets/1998723/9b06b9b8-9228-4dfd-ab10-ca16ce028b1d">

# Horizontal layout before:

<img width="834" alt="Bildschirmfoto 2024-04-20 um 18 08 54"
src="https://github.com/alshedivat/al-folio/assets/1998723/97aaf5b4-1d3e-4a1c-8175-3a97391739b3">

# Horizontal layout after:

<img width="834" alt="Bildschirmfoto 2024-04-20 um 18 07 46"
src="https://github.com/alshedivat/al-folio/assets/1998723/a357fa62-8551-4e92-91d3-3d5d01dbc605">

***

These improvements are not perfect, but to be honest, I have no deep
experiences with bootstrap. Actually, I just read the
[docs](https://getbootstrap.com/docs/4.4/components/card/) and tried my
best.
But I think it looks way better than before.

I'm pretty happy with the vertical layout, but the horizontal could be
improved.
I tried various things to get a better alignment of the image, without
any success.
In theroy, there is e.g. `card-img-top`, but I could not make it work.

I changed the project descriptions to make some of these edge-cases
visible.

Feedback and improvements (especially code) are more than welcome

Closes #2246
2024-04-22 21:39:22 -03:00
CheariX
c4c066501e
Feat bib preview (closes #1162) (#2352)
This PR enables to have `abbr` and `preview` for a single publication
(closing #1162).

The following example shows all three possibilities: 1) Preview + Abbr
2) Preview only 3) Abbr only.

<img width="786" alt="grafik"
src="https://github.com/alshedivat/al-folio/assets/1998723/0633f443-b430-4fa6-a0eb-750170a638bd">
2024-04-17 15:19:27 -03:00
Alireza Dehghanzadeh
154179bc99
Update work.liquid to show the location of work experience under cv … (#2349)
…page

same as pull request https://github.com/alshedivat/al-folio/pull/2298
and commit
363f277aa8
for **Volunteer** section
2024-04-17 15:17:43 -03:00
George
2910cd3ee7
Update CONTRIBUTING.md 2024-04-17 10:26:16 -03:00
George
c812fda823
Fixed reference to commit in CONTRIBUTING.md 2024-04-17 10:25:34 -03:00
George
1613560a98
Update CONTRIBUTING.md with prettier information 2024-04-17 10:25:09 -03:00
Gabriel Zhang
065cf08b47
Fix docker compose command using the slimmed docker image (#2351)
Fixing the docker command based on `docker compose [-f <arg>...]
[options] [COMMAND] [ARGS...]` format on the
[website](https://docs.docker.com/compose/reference/#command-options-overview-and-help).
Because the old command would give error: `unknown shorthand flag: 'f'
in -f`
2024-04-17 10:19:10 -03:00
Billy Chau
9ab7391381
adding null check to external-posts.rb to avoid parsing failure (#2347)
Adjusting issue #2343 by adding null check.
2024-04-16 14:32:44 -03:00
christopherjang1
363f277aa8
Update work.liquid to show the location of work experience under cv page (#2298)
adding "location" element when location object is added to work
experience. Location icon and the entered value will appear on the CV
page under the work experience section. This feature already exists for
education section, but not for work. The change is made to make the
experiece more consistent.


![image](https://github.com/alshedivat/al-folio/assets/158527033/9b55e139-1078-4655-8a18-56ac43da4d74)
2024-04-16 11:24:48 -03:00
Davide Riccobelli
b20b41d932
New website using al-folio added to README.md (#2345) 2024-04-16 10:59:27 -03:00
CheariX
09006281ca
feat: vscode devcontainer (#2335)
I added a [Remote Development
Containers](https://code.visualstudio.com/docs/devcontainers/tutorial)
in Visual Studio Code (VSCode).

Lots of people like to develop in Containers to have a clean system.
With this PR, it is possible to work with al-folio without any
installation (except for VS Code, its Remote Dev Container extension,
and Docker).

Once you've opened the `al-folio` repository, a prompt will appear
requesting to reopen the project within a container.

<img width="541" alt="grafik"
src="https://github.com/alshedivat/al-folio/assets/1998723/2963446f-8e42-4df1-9e8c-22691d78b7e4">

Upon doing so, Jekyll will automatically start within the container and
prompt you to open the website's preview sidebar directly in VSCode or
using your Browser. Additionally, it installs extensions for `liquid`
and Prettier (`npx prettier`). Files are formatted using
`al-folios`-prettier settings (`.prettierrc`) to streamline pull request
submission.

Additionally, the performance seems to be much better compared to the
`docker-compose`setup, see #2333.

---------

Co-authored-by: George <31376482+george-gca@users.noreply.github.com>
2024-04-16 10:57:03 -03:00
CheariX
a03b2e78e6
feat: make video embeddings optional. (#2337)
As discussed in #1181, I suggest to make embedding videos an optional
feature.

This behavior aligns well with recently merged PR #2312.

Open questions:

1. I added a youtube link to `papers.bib`. Is this link okay?
2. I set `enable_video_embedding: false` as the default. I argue that
privacy settings should be the default. Also, the current implementation
of `video.liquid` only works for some very specific video URLs. For
example, to embed youtube, specialized links must be used to avoid
`X-Frame-Option` issues. This behavior can lead to a broken embedding,
which would not look very nice.

Feedback welcome.
2024-04-15 16:47:23 -03:00
George
d6a08c8ca3
Added pseudocode.js support (#2344)
Signed-off-by: George Araújo <george.gcac@gmail.com>
2024-04-15 11:21:42 -03:00
George
dba48c2b60
Update FAQ.md with layout error information 2024-04-14 22:34:05 -03:00
CheariX
0f46f80899
feat: bib -> acceptance, acceptance_rate, location, cve_score (#2325)
I added further filds to `bib.liquid`.

A common field is `location`, which is now printed.

I added fields for `acceptance` and `acceptance_rate`. These fields
might be usefull for external people to better determine a vanue's
quality.
`acceptance` is used for the accepted vs submitted papers. 
`acceptance_rate` is a percent-value.

<img width="785" alt="Bildschirmfoto 2024-04-07 um 18 11 49"
src="https://github.com/alshedivat/al-folio/assets/1998723/d5eaeb08-7f67-4fb7-b9b9-fd5f4a3c331c">

The existence of two distinct variables stems from the fact that the
'acceptance_rate' is represented using the venue color. On my website, I
employ venue colors correlated with computer science conference
rankings, which naturally leads to associating the acceptance rate with
the same color scheme for coherence and better understanding.

<img width="785" alt="Bildschirmfoto 2024-04-07 um 18 14 54"
src="https://github.com/alshedivat/al-folio/assets/1998723/33ef0419-00ee-4fea-93d9-18c0269188de">

You can find more examples on my
[website](https://christianmainka.de/publications/peerreviewed).

Also, I added a CVE Score, which is mainly usefull for IT-Security
researchers, see this [example](https://christianmainka.de/cve/).

***

Let me know what you think about this proposal.
2024-04-13 11:55:33 -04:00
Andreas Säuberli
0b6135e0d6
Use JEKYLL_ENV=development in Docker Compose setup (#2336)
Fixes #2303.

See #2333 for discussion.
2024-04-12 14:05:47 -03:00
George
08d562a104
Offline mode (closes #1181) (#2312)
Created a plugin to tackle #1181. Currently have an issue with tikzjax
since it imports some wasm file from its javascript. The rest should
work as expected.

---------

Signed-off-by: George Araujo <george.gcac@gmail.com>
2024-04-08 14:51:28 -03:00
CheariX
876d287cc8
Feature: added "award" for publications (#2324)
This PR adds an "award" button to publications.
It takes the `award` value from the bibtex entry and displays(incl.
Markdown rendering) the text in a box similarly to abstract and bibtex.

User can set the entry `award_name` to configure the value. See example
config with `award_name: Nobel Prize`.

The color of the award box can be configured in `_base.scss`.

Note, there is a similar PR #2175, it I saw to issues with:

1. There was no progress
2. The award button just prints the text directly in the button,
similarly to `award_name`. Long award names could clutter the webpage.
3. IMHO, it brokes the current al-folio design, since butons do have a
fixed size/text. However, variable prize names are also possible with
this PR.
***
Pictures:

Default. Text are hidden:

<img width="708" alt="grafik"
src="https://github.com/alshedivat/al-folio/assets/1998723/1221c82c-c384-4297-807e-39385e2ce4fd">

Additional info is shown when the button is clicked. Markdown supported.

<img width="684" alt="grafik"
src="https://github.com/alshedivat/al-folio/assets/1998723/2354aeee-12b0-4d32-b194-5d2ea80d8363">

Only one text box shown at the same time, like it is with "ABS" and
"BIB":
<img width="691" alt="grafik"
src="https://github.com/alshedivat/al-folio/assets/1998723/d3937bb9-d9c2-47ac-b819-b92aec3d916a">

***

Feedback welcome.

You can also check [my
website](https://christianmainka.de/publications/awarded), which was the
base for this PR.
2024-04-07 17:37:02 -03:00
CheariX
1e00eb05f3
feat: added IEEE and ACM social (#2321)
I added further social integration for:

1. ACM: https://dl.acm.org/profile/
2. IEEE: https://ieeexplore.ieee.org/author/

Given their importance in computer science, I would like to have them in
al-folio.
2024-04-07 17:05:41 -03:00
George
83a8f488ba
Update README.md with deployment word 2024-04-07 00:01:56 -03:00
Simmo Saan
02eee8da81
Remove bootstrap-table from archive tables (#2306)
The blog archive page tables have `table-borderless`, but
bootstrap-table JS adds `table-bordered` by default and this forces an
`!important` border.
Since these tables are also supposed to be borderless, this PR excludes
them from bootstrap-table, just like the news and CV table are.
2024-04-03 15:35:18 -03:00
George
00fdc13d6c
Added Bluesky social (#2314)
Now that Bluesky is [finally
available](https://fontawesome.com/changelog) at Font Awesome, we can
add it to the template.

---------

Signed-off-by: George Araujo <george.gcac@gmail.com>
2024-04-02 17:28:27 -03:00
George
8b90b02374
Added post about why write a blog 2024-04-02 12:27:58 -03:00
George
096310eff6
Added links to jekyll docs in CUSTOMIZE.md 2024-04-01 11:31:49 -03:00
George
b81d4a3612
Added permalink info to CUSTOMIZE.md 2024-04-01 11:30:06 -03:00
George
9ac08fe6f3
Update FAQ.md with sqrt error message 2024-03-31 22:46:34 -03:00
Chris Choi
7f4e3f6292
Add academic community example (#2300) 2024-03-28 00:04:32 -03:00
Yi Su
088ba7e58c
add flickr to social integration (#2286)
- add flickr to social integration

---------

Co-authored-by: Yi Su <yi_su@apple.com>
2024-03-20 16:23:30 -03:00
Jonathan Zea
a69f374c1a
Add academic community example (#2289)
Adds [https://ztjona.github.io/](https://ztjona.github.io/) to the list
of academic community examples.
2024-03-19 19:52:32 -03:00
Maria Teleki
0e1a1e3203
Update INSTALL.md (#2285)
Added a step to the "Recommended Approach" telling the user to wait for
the GitHub Actions to be completed so that the gh-pages branch can be
created.
2024-03-18 23:27:55 -03:00
Ethan Olesinski
d85635262c
fix links (#2278)
This PR fixes/updates broken/outdated links on the `README.md`
2024-03-15 13:14:53 -03:00
Sam Adam-Day
c788a30202
Added "follow system" option to theme toggle (#2261)
The theme toggle button now has a third option, which follows the user's
system preferences.

- In the code there's now a distinction between the theme setting (which
can be "dark", "light" or "system") and the computed theme.
- The theme setting is now stored as the "theme-setting" local storage
variable. Since this is different from the old variable ("theme"), this
will effectively reset all current user themes to the default "system".
Maybe this is not what you want.
- The "system" theme icon is currently a half circle symbol.
- The toggle button now displays the current theme setting, rather than
the next theme setting (as far as I know this is consistent with other
sites which have three theme options).
- `theme.js` is now loaded regardless of `site.enable_darkmode`. This is
because other scripts which were always loaded relied on being able to
determine the theme. `theme.js` no longer initialises the theme itself
though; this only happens when `site.enable_darkmode`.
- When the theme setting is "system", the theme will change immediately
whenever the user changes their system theme.

#2261

---------

Signed-off-by: George Araujo <george.gcac@gmail.com>
Co-authored-by: George Araujo <george.gcac@gmail.com>
2024-03-13 22:42:46 -03:00
George
6cf110a682
Update INSTALL.md 2024-03-13 11:28:17 -03:00
George
d104b287cd
Make clear that you should not touch gh-pages branch 2024-03-13 11:24:25 -03:00
George
eddef2e4ff
Make clear that you should not touch gh-pages branch 2024-03-13 11:24:17 -03:00
George
e10c45cdfe
Delete assets/img/pagespeed.svg 2024-03-07 13:06:03 -03:00
George
5ba4173dcc
Removed *.yml from _config.yml 2024-03-07 12:49:05 -03:00
George
6e1bc787ec
Exclude more files from site (#2257)
Signed-off-by: George Araujo <george.gcac@gmail.com>
2024-03-07 12:06:44 -03:00
George
ed2ac96558
Delete reports directory 2024-03-06 15:20:17 -03:00
Jake Nabasny, PhD
a3a02d92b8
Add option for local HTML files (#2245)
Add option to link HTML local files from publications page.

---------

Co-authored-by: Jake Nabasny <jake@nabasny.com>
2024-03-04 14:04:52 -03:00
Sukka
21bc463b77
Replace polyfill.io (#2241)
The PR replaces `polyfill.io` inside the template with
`cdnjs.cloudflare.com/polyfill`.

---

`polyfill.io` was acquired by **a China-based CDN company** "Funnull",
see [the announcement from the `polyfill.io` domain owner's
Twitter](https://x.com/JakeDChampion/status/1761315227008643367) and
https://github.com/polyfillpolyfill/polyfill-service/issues/2834.
Despite Funnull's claims of operating in the United States, the
predominance of Simplified Chinese on its website suggests otherwise,
and it turns out that **"Funnull" is notorious for providing service for
the betting and pornography industries**.

[The original creator of the `polyfill.io` has voiced his concern on
Twitter](https://twitter.com/triblondon/status/1761852117579427975). And
since the acquisition, numerous issues have emerged
(https://github.com/polyfillpolyfill/polyfill-service/issues/2835,
https://github.com/polyfillpolyfill/polyfill-service/issues/2838,
https://github.com/alist-org/alist/issues/6100), rendering the
`polyfill.io` service **extremely unstable**. Since then, Fastly
([Announcement](https://community.fastly.com/t/new-options-for-polyfill-io-users/2540))
and Cloudflare
([Announcement](https://blog.cloudflare.com/polyfill-io-now-available-on-cdnjs-reduce-your-supply-chain-risk))
has hosted their own instances of `polyfill.io` service.
2024-03-04 11:37:16 -03:00
Jake Nabasny, PhD
82e73254d9
Correct config variable for enabling latest_posts on about page (#2243)
I noticed disabling latest_posts in `_config.yml` didn't work because
the variable in the liquid template was seemingly incorrect. This should
fix that.

---------

Co-authored-by: Jake Nabasny <jake@nabasny.com>
2024-03-03 13:28:58 -03:00
George
4dd3d6f441
Updated information about lsi 2024-03-01 13:04:53 -03:00
Sasika Amarasinghe
8cacee6ffc
Update INSTALL.md (#2237)
Added "Recommended Approach" as a subheading which was not under
Installing , but was in the contents section.
2024-02-29 15:05:36 -03:00
Moritz Scherrmann
c1f168473f
Add functionality to open external links in jupyter notebooks in new tab (#2233)
See https://github.com/alshedivat/al-folio/pull/2230

---------

Co-authored-by: Scherrmann <scherrmann@bwl.uni-muenchen.de>
2024-02-27 12:25:16 -03:00
George
70ad4ceb42
Emphasized more how the name of the repository must be 2024-02-26 17:32:50 -03:00
Maksym Zub
b607e580ad
Fixed broken latex in _posts/2015-10-20-math.md (#2219)
Latex math is currently broken in
[_posts/2015-10-20-math.md](https://alshedivat.github.io/al-folio/blog/2015/math/)
. Fixed it by replacing starts with underscore

---------

Co-authored-by: George <31376482+george-gca@users.noreply.github.com>
2024-02-22 14:43:42 -03:00
George
9f4d6d26be
Fixed coauthors examples in CUSTOMIZE 2024-02-19 12:33:46 -03:00
github-actions[bot]
e430a8949c Lighthouse-Badger[bot]: Results Added 2024-02-14 17:42:02 +00:00
George
6e215a1cdc
Lighthouse fixes (#2199)
Our score went down a little bit after the last few changes. Avoiding
lazy loading some images (as introduced in #2183), since [it is strongly
recommended to omit hero images and other images or iframes that are
likely to appear above the fold from being
lazy-loaded](https://web.dev/articles/browser-level-lazy-loading-for-cmss#avoid_lazy_loading_above-the-fold_elements).
Also added missing `alt` to google scholar field.

---------

Signed-off-by: George Araujo <george.gcac@gmail.com>
2024-02-14 14:37:32 -03:00
github-actions[bot]
b316653f3b Lighthouse-Badger[bot]: Results Added 2024-02-14 16:39:10 +00:00
Dr. David Krassnig
0b84a1237d
Added/Improved Formatting for Checkboxes (#2191)
A proposed solution for #2190. Padding is added such that I considered
it aesthetically pleasing and the bullet points in front of the check
marks were removed.

---------

Co-authored-by: George <31376482+george-gca@users.noreply.github.com>
2024-02-14 13:30:26 -03:00
George
5df7a6aab0
Changed lazy loading in _config.yml 2024-02-14 12:58:52 -03:00
George
f067edc69e
Changed lazy loading in figure.liquid 2024-02-14 12:58:28 -03:00
Ethan Olesinski
40b22ff274
fix author spacing (#2197)
This PR fixes issue https://github.com/alshedivat/al-folio/issues/2185
and addresses discussion
https://github.com/alshedivat/al-folio/discussions/2153.

- removes leading whitespace before commas in author list
- fixes author spacing
2024-02-14 12:54:44 -03:00
ZL Asica
2a056fe68e
Implement Default Lazy Loading for Images with Configurable Option (#2183)
This PR introduces an enhancement to the site's image-loading strategy
by implementing lazy loading as the default behavior for all images. The
motivation behind this change is to improve the site's load times.

**Changes:**
1. **Default Lazy Loading:** By `default`, all images will now have the
`loading="lazy"` attribute.

2. **Configurable Option in `_config.yml`:** Added a new configuration
option under `lazy_loading_images.enable`.

3. **Override Capability:** For `specific images` where the user doesn't
want lazy loading, they can `override` this by directly setting the
`loading attribute` in the `image tag`.
2024-02-14 00:41:14 -05:00
Furkan Akkurt
26fad311db
remove the space in names of "site" (#2188)
I removed the spaces between the first, middle and last names in the
header.

It's just my preference, I don't know if it would be accepted but I have
done this for my own page using this repository as a template.
2024-02-14 00:36:30 -05:00
George
0f0feb17be
Fixed related publications appearing in toc (#2196)
Fixes #2192

---------

Signed-off-by: George Araujo <george.gcac@gmail.com>
2024-02-13 19:05:01 -03:00
Eric Slyman (they/them)
9794c625b6
Add academic community example (#2195)
Adds [https://ericslyman.com/](https://ericslyman.com/) to the list of
academic community examples.
2024-02-13 17:34:43 -03:00
George
b4e423286b
Fixed bug when number has , on scholar citations 2024-02-13 13:56:13 -03:00
George
a0bcaaf13f
Added support for google scholar citations (#2193)
Closes #1809, but there are caveats:
1 - it only works at build time, which means it won't update the numbers
unless you build your site again
2 - Google might block the request if it receives lots of it, failing
the whole process.

This is how it looks like when it can fetch the information:

![Screenshot from 2024-02-13
00-37-52](https://github.com/alshedivat/al-folio/assets/31376482/646d1f3c-1294-491b-bc13-9013e38918b4)

And this when it fails:


![image](https://github.com/alshedivat/al-folio/assets/31376482/516eefff-d394-44ad-8702-8982233f8c4f)

Signed-off-by: George Araujo <george.gcac@gmail.com>
2024-02-13 13:47:42 -03:00
Stavros Kalapothas
007b504204
Update README.md (#2187)
adding my page to the README section. Kudos to the dev team!
2024-02-11 17:55:37 -03:00
ZL Asica
ef647a6ebd
Update README.md (#2182)
Add my acdemic portfolio to the Acdemic section of README.
2024-02-10 22:09:09 -03:00
ZL Asica
7c2e1c2c6c
Fix Image Dimension Styles for Better Responsiveness (#2166)
In this pull request, I've made adjustments to the image element's
handling of dimension properties. Previously, `min-width`, `min-height`,
`max-width`, and `max-height` were incorrectly placed as HTML attributes
on the `<img>` tag, which is not supported for these CSS properties.
This oversight could lead to issues with image responsiveness and layout
stability.

Changes:
- Moved `min-width`, `min-height`, `max-width`, and `max-height`
properties into the `style` attribute of the `<img>` tag. This change
ensures that these properties are correctly applied and recognized as
CSS properties, enhancing the responsiveness and flexibility of our
image displays.
- Retained `width` and `height` as attributes on the `<img>` tag to
maintain the intrinsic aspect ratio of images and help the browser
allocate space before images are fully loaded, improving the page load
experience.

These adjustments will ensure that our images are more responsive and
better adhere to the specified dimensions, improving the overall user
experience for the template.
2024-02-07 15:34:52 -03:00
Ethan Olesinski
1ce58650fd
center footer text by default (#2165)
This PR changes the footer text on the website (for both the sticky and
fixed footer) to be centered by default. This change is based on the
discussion post #257.
2024-02-06 16:03:52 -03:00
George
4cf657eb54
Added jekyll-diagrams error to FAQ (#2162)
Signed-off-by: George Araújo <george.gcac@gmail.com>
2024-02-05 12:22:24 -03:00
George
c39df67d5b
Updated FAQ with old repository information (#2161)
Signed-off-by: George Araújo <george.gcac@gmail.com>
2024-02-05 12:11:33 -03:00
Andrew Boyer
ae0c1a62cf
improved redirect mapping (#2157)
In reference to issue:
https://github.com/alshedivat/al-folio/discussions/1818

Redirect cases were only happening on the surface level, essentially
just affecting the links on [blog
index](https://alshedivat.github.io/al-folio/blog/page/4/index.htm) and
[year tag](https://alshedivat.github.io/al-folio/blog/2022/). However,
from the actual
[site](https://alshedivat.github.io/al-folio/blog/2022/redirect/), it
would automatically redirect to the `base_url` rather than the actual
`redirect`.

In my update, if `redirect: true`, like it is in `404.md`, redirect
behavior is the same, redirecting to the `base_url`. If it is an
external link, then the redirect is external. And finally if it is an
internal redirect, like it is in
https://alshedivat.github.io/al-folio/blog/2022/redirect/, than the
redirect is `page.redirect | relative_url`
2024-02-04 17:27:10 -03:00
George
18f7307e07
Fixed axe workflow (#2149)
Signed-off-by: George Araújo <george.gcac@gmail.com>
2024-01-30 15:16:15 -03:00
George
e977319dc8
Added link to jekyll docs about post file naming 2024-01-29 16:52:26 -03:00
George
fa5b411b38
Adding display swap to Google Fonts
Adding suggestion from [Lighthouse results](https://developer.chrome.com/docs/lighthouse/performance/font-display/?utm_source=lighthouse&utm_medium=cli#google_fonts)
2024-01-28 20:11:44 -03:00
github-actions[bot]
f3d3efa09c Lighthouse-Badger[bot]: Results Added 2024-01-28 23:05:48 +00:00
George
533798410e
Removing lighthouse_results from broken-links trigger 2024-01-28 20:02:15 -03:00
George
2356aea6e4
Removing lighthouse results from deploy trigger 2024-01-28 20:01:44 -03:00
github-actions[bot]
3c80fdb6fc Lighthouse-Badger[bot]: Results Added 2024-01-28 22:55:56 +00:00
George
1935a2ace0
Avoid deploying site when changes are in README files 2024-01-28 19:35:52 -03:00
George
43a3dd9e75
Update FAQ.md with Prettier info 2024-01-28 19:31:18 -03:00
George
06bc36762d
Move libs versions to config (#2139)
Moved libs versions and hashes to `_config.yml`.

Fixes #2067.

Deferring everything possible to keep pages loads fast.

---------

Signed-off-by: George Araújo <george.gcac@gmail.com>
2024-01-28 19:10:42 -03:00
George
ef847825fd
Support for diff2html (#2133)
Added support to display diff code in a prettier way with
[diff2html](https://diff2html.xyz/).


![image](https://github.com/alshedivat/al-folio/assets/31376482/5f93b09c-3850-499a-999b-cb0ae13fddae)

It displays code like [in this
example](https://diff2html.xyz/demo.html).

---------

Signed-off-by: George Araújo <george.gcac@gmail.com>
2024-01-28 12:45:20 -03:00
George
8e93db5b67
Advanced image viewers (#2132)
Image slider with [Swiper](https://swiperjs.com/).


![image](https://github.com/alshedivat/al-folio/assets/31376482/9068823c-571a-4d31-8e95-755a40a15ec9)

Image comparison slider with
[img-comparison-slider](https://img-comparison-slider.sneas.io/).


![image](https://github.com/alshedivat/al-folio/assets/31376482/97812477-c13b-43b1-8f0b-cb098462de3c)

---------

Signed-off-by: George Araújo <george.gcac@gmail.com>
2024-01-28 12:42:17 -03:00
George
2492ab389b
Workflow fix (#2136)
Signed-off-by: George Araújo <george.gcac@gmail.com>
2024-01-27 22:58:40 -03:00
George
f69d99a2ab
Closing #2122 (#2135)
Added lighthouse badger token info to FAQ

---------

Signed-off-by: George Araújo <george.gcac@gmail.com>
2024-01-27 22:17:37 -03:00
George
53fb0116de
Added leaflet reference to 2024-01-26-geojson-map.md 2024-01-27 18:54:39 -03:00
George
f6bb6b5dcb
Vega lite support (#2131)
Added support for [vega lite](https://vega.github.io/vega-lite/) charts.


![image](https://github.com/alshedivat/al-folio/assets/31376482/789c14d3-93b6-4d3f-94a6-7cec1f0f0b59)


![image](https://github.com/alshedivat/al-folio/assets/31376482/17f9021c-08c4-4922-9f97-1046b146a965)

---------

Signed-off-by: George Araújo <george.gcac@gmail.com>
2024-01-27 11:14:02 -03:00
George
1492cb9c4e
GeoJSON support (#2130)
Added support for GeoJSON maps.


![image](https://github.com/alshedivat/al-folio/assets/31376482/48e91158-a717-4d01-b6d7-47d45f0580e4)

---------

Signed-off-by: George Araújo <george.gcac@gmail.com>
2024-01-27 11:06:49 -03:00
George
4f6fe1a2cf
Added Echarts support (#2129)
Since I added support for chart.js and while doing so found some other
wonderful charting libraries, I thought, why not give support to some
more? So adding support to [Apache
Echarts](https://echarts.apache.org/en/index.html).


![image](https://github.com/alshedivat/al-folio/assets/31376482/088f0932-524f-4fcd-a34b-b132f569a675)


![image](https://github.com/alshedivat/al-folio/assets/31376482/36bfe4f8-a9d1-4b6d-a912-fb40ba3b5337)

---------

Signed-off-by: George Araújo <george.gcac@gmail.com>
2024-01-27 10:34:44 -03:00
George
3ec0ff4a46
Added integrity check to mermaid.js 2024-01-27 00:41:07 -03:00
George
a7d6b37d8f
Added support for Chart.js (#2126)
Solved #460.


![image](https://github.com/alshedivat/al-folio/assets/31376482/ce65dbe2-031e-4208-b374-08ec89beaaca)

---------

Signed-off-by: George Araújo <george.gcac@gmail.com>
2024-01-26 02:16:14 -03:00
github-actions[bot]
1d84621f22 Lighthouse-Badger[bot]: Results Added 2024-01-23 16:11:18 +00:00
George
7638547a49
Updated checkout step in lighthouse-badger.yml 2024-01-23 13:08:48 -03:00
George
0c082372ba
Fixed urls in 1_bug_report.yml 2024-01-23 12:54:41 -03:00
George
c99a453a87
Fixed urls in 2_feature_request.yml 2024-01-23 12:54:29 -03:00
George
7d861cbd52
Fixed url in config.yml 2024-01-23 12:54:14 -03:00
George
fc2386014a
Updated links in issue template config.yml 2024-01-23 12:49:16 -03:00
George
6fcc28332c
Updated links in 2_feature_request.yml 2024-01-23 12:48:52 -03:00
George
2fa8141f22
Updated links in 1_bug_report.yml 2024-01-23 12:48:15 -03:00
George
b0b19a1293
Removed 0 from bug report 2024-01-23 12:12:16 -03:00
George
ec9571a8c1
Improved issues templates (#2110)
Since a lot of issues opened are just questions that should be opened as
so, and sometimes the issue template is just not followed, I decided to
make opening new issues a little more "enforced", if not clear.

I based the new templates on the ones from [pytorch
lightning](https://github.com/Lightning-AI/pytorch-lightning/issues/new/choose),
which I think are pretty good. The visuals will only appear after the
merge is processed, but you can have an idea of how it will look like by
checking their templates and how they look.

---------

Signed-off-by: George Araújo <george.gcac@gmail.com>
2024-01-23 12:10:03 -03:00
George
8dd678cdb1
Added lighthouse_results to .prettierignore 2024-01-23 12:05:06 -03:00
Fares Abawi
10507a882b
Added anchor to category sections (#2006)
Added anchor to categories so one could navigate to the category section
from the URL:

e.g.,

https://alshedivat.github.io/al-folio/projects#fun
2024-01-23 11:50:58 -03:00
George
25eac655ba
Fixed lighthouse html viewer links 2024-01-23 10:41:46 -03:00
github-actions[bot]
0510031305 Lighthouse-Badger[bot]: Results Added 2024-01-23 13:36:10 +00:00
George
b83a0e38c4
Added Lighthouse test GitHub action (#2084)
Added support for Lighthouse test as a GitHub action, and it appears
like
[this](https://github.com/george-gca/multi-language-al-folio?tab=readme-ov-file#lighthouse-pagespeed-insights).
The only thing missing is for @alshedivat to create a [repository
secret](https://github.com/MyActionWay/lighthouse-badger-workflows#lighthouse-badger-easyyml)
named `LIGHTHOUSE_BADGER_TOKEN` with the information needed.

---------

Signed-off-by: George Araújo <george.gcac@gmail.com>
2024-01-23 10:35:13 -03:00
George
db0a92b8d4
Moved prettier comment on PR to its own action (#2114)
Signed-off-by: George Araújo <george.gcac@gmail.com>
2024-01-22 18:01:55 -03:00
George
bbaae0afa9
Fixed prettier actions (#2113)
After some thorough testing, finally made prettier on PR work. Since an
html file can't be used as comment on GitHub, changed to simply point to
the action that failed and to the file containing the html diff.

Signed-off-by: George Araújo <george.gcac@gmail.com>
2024-01-22 17:45:34 -03:00
George
27d2fa093d
Changed how prettier comments on PR works (#2112)
Signed-off-by: George Araújo <george.gcac@gmail.com>
2024-01-22 14:49:34 -03:00
George
7ed8f49e72
Update prettier-on-pr.yml permissions 2024-01-22 13:40:33 -03:00
George
8af6b73fd6
Prettier check now generates a diff comment on PR (#2085)
Splitted prettier GitHub action into two:
- `on push`, only runs on direct pushes, if test fails generates an
artifact (that lasts for 3 days) with an html version of the changes
needed to pass prettier test
- `on PR`, only runs on PRs, if test fails comments on the PR with the
HTML content of the diff

I couldn't actually test the `on PR` version since it needs to be on a
PR in the master branch, so this will only be triggered after this PR is
accepted, and for the next PR that fails prettier test.

PS: currently the artifact is a zip file with the html inside. It is not
currently possible to generate it other way, we have to wait for [this
issue](https://github.com/actions/upload-artifact/issues/14) to be
closed.

---------

Signed-off-by: George Araújo <george.gcac@gmail.com>
2024-01-22 13:30:24 -03:00
George
392720066e
Added diff tools to INSTALL.md 2024-01-22 12:37:25 -03:00
George
65c5c8a056
Added acknowledge section to feature_request.md 2024-01-22 11:11:48 -03:00
Jona Ruthardt
30f7ab0f11
Added one more researcher using al-folio (#2105)
Added my own website as a star to the "Academics" section
2024-01-21 13:43:13 -03:00
George
711af76a08
Fixed dark mode not working after purgecss 2024-01-20 13:52:33 -03:00
Amir Pourmand
7c617d8076
Update INSTALL.md (#2091)
- #2090
2024-01-19 20:41:43 +03:30
George
67000003fa
Downgrade ruby version (#2098)
Signed-off-by: George Araújo <george.gcac@gmail.com>
2024-01-19 11:45:19 -03:00
George
04f7b041a1
Changed conditions of running GitHub actions (#2082)
The GitHub actions were running everytime a new commit was made to the
repo, but that wasn't needed. For example, we don't need to try to
create a new docker image if the libraries didn't change, same to build
the whole site after a change in the README.md.

---------

Signed-off-by: George Araújo <george.gcac@gmail.com>
2024-01-19 11:11:18 -03:00
Afrânio Melo
1d4a8c742b
Adding star (#2095)
Thank you all!!!
2024-01-18 13:17:20 -03:00
George
8d8298a945
Update INSTALL.md version of al-folio 2024-01-16 20:04:04 -03:00
George
a843b3c6fe
Updated toc on README.md 2024-01-16 18:37:08 -03:00
George
3aa31333b1
Added star history to README.md 2024-01-16 18:33:02 -03:00
George
c5190617ea
Update contributing on README.md 2024-01-16 18:28:11 -03:00
George
cfe13d6a43
Added missing separator in README 2024-01-16 18:07:26 -03:00
George
f669b23136
Fixed role main in default.liquid 2024-01-15 17:40:33 -03:00
George
1775a9a99d
Axe accessibility test support (#2080)
Added GitHub action to do axe accessibility tests with [axe
cli](https://github.com/dequelabs/axe-core-npm/tree/develop/packages/cli).
I believe it is best by default to let this be run only manually, since
fixing some of the issues are not straightforward (I haven't fixed them
all for this template yet).

---------

Signed-off-by: George Araújo <george.gcac@gmail.com>
2024-01-15 16:38:31 -03:00
George
30f3c14465
Link checks on deploy (#2079)
Added another GitHub action to check for broken local links on version
of the site that will be deployed.

The `broken-links` action check for broken links considering
documentation files (like INSTALLING.md) and also pages like
[_pages/about.md](https://github.com/alshedivat/al-folio/blob/master/_pages/about.md),
but it can't check for broken links when the link will be handled by
jekyll tags (like in
[_pages/blog.md](https://github.com/alshedivat/al-folio/blob/master/_pages/blog.md).

With `broken-links-site` we can check if all the links that will be used
on the final site that refer to local files are correct. Focusing only
on local files since this would end up calling too many checks for
library files, like
`https://unpkg.com/bootstrap-table@1.22.1/dist/bootstrap-table.min.css`.

---------

Signed-off-by: George Araújo <george.gcac@gmail.com>
2024-01-15 16:38:06 -03:00
George
71f054c82e
Fix broken links (#2077)
Added GitHub action to check for broken links in repo before commit,
ignoring files with liquid tags since these were not yet processed and
also README since some sites created from this template doesn't have
valid urls anymore. Fixed some broken links in repo.

---------

Signed-off-by: George Araújo <george.gcac@gmail.com>
2024-01-15 11:09:45 -03:00
Yifan Jiang
0a737aa022
Fix custom blockquotes (#2071)
Fixed issue #2066. Removed `>` in front of `{: .block-tip }` which was
introduced by prettier in the example post.
2024-01-15 01:55:46 -05:00
George
5459ef19b8
Changed file paths in bug_report.md 2024-01-11 15:28:47 -03:00
George
cc83a127c4
Fixed FAQ link in CONTRIBUTING.md 2024-01-11 15:08:18 -03:00
George
1a205362f1
Fixed missing changes to liquid file 2024-01-11 00:13:36 -03:00
Sam B
568e9cc8ba
Added additional user to README.md (#2063)
Added new user to academics section in readme. 

Thank you for this great resource!
2024-01-10 22:47:05 -03:00
Sam B
aabe1e5aa6
Fixed small typo (#2064)
instalation -> installation

Thank you for this resource!
2024-01-10 22:44:32 -03:00
Maruan
982a5fe114
Update .git-blame-ignore-revs 2024-01-10 11:24:39 -05:00
George
2d34024961
Fix prettier (#2062)
Changed rule to minified files, reverted changes to minified files

---------

Signed-off-by: George Araújo <george.gcac@gmail.com>
2024-01-10 11:21:58 -03:00
Maruan
7c279b159d
Move news and 404 to pages (#2060)
moves news and 404 from repo root dir to `_pages/` where they are
supposed to be + changes their extensions to `.md`
2024-01-10 01:59:59 -05:00
Maruan Al-Shedivat
7e8ca8f191 Add .git-blame-ignore-revs 2024-01-10 00:13:23 -05:00
Maruan
beb6f27d59
format code with prettier.io (#2048)
summary:
- adds prettier formatter configuration
- formats the entire repo using prettier, ignoring minified files
(`*.min.css`) and heavy generated html
- changes extensions of all `.html` files to `.liquid`, which is more
correct and necessary for prettier to work correctly
- replaces "%-" and "-%" with just "%" — manual liquid formatting using
minus signs is superfluous since we are compressing and minifying the
code anyway
- adds CI action for running prettier check on PR and pushes to master
2024-01-10 00:10:51 -05:00
George
60a09ed25c
Normalizing coauthor names before search (#2057)
Signed-off-by: George Araújo <george.gcac@gmail.com>
2024-01-09 14:13:33 -03:00
George
4ea7f5ba57
Add direct link to use this template 2024-01-09 13:18:40 -03:00
George
e3997d0f6c
Added citation examples, simplified citation code (#2056)
Since the citation file and other stuff is already defined in
`_config.yml`, removed them when calling `{% bibliography %}`. Also
realized that `jekyll-scholar` helps in displaying only the papers cited
in page, changed to use that.

Signed-off-by: George Araújo <george.gcac@gmail.com>
2024-01-08 14:35:42 -03:00
George
feb9c9e677
Removed background from template example 2024-01-03 21:11:00 -03:00
George
7b0ca12a78
Added information about using wsl on Windows (#2040)
Signed-off-by: George Araujo <george.gcac@gmail.com>
2024-01-02 22:51:42 -03:00
George
4a55cd1bd1
Upgrading the README file (#2034)
I decided to break the README file into different ones to declutter it
from the main page. Also adding some more explanation on the structure
of the template. Tackling #2032 and #2033

---------

Signed-off-by: George Araujo <george.gcac@gmail.com>
2024-01-02 22:30:48 -03:00
George
92ac10ad82
Changed mermaid support in template (#1992)
Fix #1609

---------

Signed-off-by: George Araujo <george.gcac@gmail.com>
Co-authored-by: Maruan Al-Shedivat <maruan@genesistherapeutics.ai>
2024-01-02 18:35:57 -03:00
George
86ada06e4b
Changed trophies layout to better suit different screen sizes (#2038)
Signed-off-by: George Araújo <george.gcac@gmail.com>
2024-01-02 14:07:04 -03:00
Noah West
da5065fffc
Remove imagemagick strip (#2028)
I had added -strip arg to the imagemagick call as it is generally
desirable to strip metadata from images before publishing them, however
it seems to occasionally cause issues with jekyll-imagemagick
auto-regeneration, regenerating images even when they have not changed.
2023-12-30 16:45:53 -05:00
WEI EN TSAI
f05fb7bc58
fix live-reloading in docker (#2022)
Fix #2021 : The webpage hosted by docker would not be automatically
reloaded because the port used for live-reloading (port 35729) is not
forwarded.
2023-12-29 02:43:26 +03:30
Noah West
fb294e3348
Responsive image fix (#2014)
Fixes #1967 

Update the way responsive images are used to only use one srcset, and
add corresponding `sizes` attribute to the relevant layouts and
templates.
I did not go through and add `sizes` to all the example posts/projects.
When `sizes` is not specified by the user, the `figure.html` template
defaults to 95% the width of the viewport which should work fine for
most cases; users can optimize further if they wish by feeding `sizes`
into the template.

Additionally:
 - Enabled support for .gif to .webp compression
- fix error in jekyll-imagemagick config where all images were resized
to be 800px or less. (for example img-1400.webp was actually only 800px
wide, etc.)
- added note about making sure imagemagick is installed before enabling
it in responsive images section of `_config.yml`
2023-12-26 13:00:38 -05:00
Alireza Dehghanzadeh
70d9ca94e1
bring back repo_id and category_id in giscus section (#1892)
After deploying my website (Cloudflare Pages), my Giscus did not work, I
realized these two paramesters are removed. After adding them again, my
Giscus worked correctly.
These new values are values from previous commits of original repository

---------

Co-authored-by: Maruan Al-Shedivat <maruan@genesistherapeutics.ai>
2023-12-25 15:43:53 -03:00
Fares Abawi
45bb74eb43
Added video button to bib entries (#2008)
When the video entry is added to bib:

e.g.,

```
{
...
video={https://www.youtube.com/embed/jNQXAC9IVRw}
...
}
```
A dedicated button appears for videos. When clicked, a playable video
appears under the research article (like abstracts and bibtex)
2023-12-25 14:50:37 -03:00
George
0795059a4b
Now blog can be reorganized in header (#1996)
Fixes #1559 #1795

Signed-off-by: George Araújo <george.gcac@gmail.com>
2023-12-25 14:41:27 -03:00
Dinesh Natesan
6119d0657c
added ability to switch off pagination on the blog page (#1909) 2023-12-24 21:46:14 -05:00
Tianmaru
a1a9250b93
check for active children in submenus (#1869)
This patch checks, if the title of the current page matches with the
title of a submenu child. If so, it sets the submenu and the
corresponding child as active, highlighting it in the header.
2023-12-24 20:01:38 -05:00
George
1fa3febcc7
Updated README to explictly tell how to proceed on fresh install (#1993)
Updated README to explicitly tell how to proceed on creating your own
version based on this template. Also removed the video tutorial since it
was for an older version, recommending to fork the repo and it was
missing the `--lsi` parameter from jekyll command. Also was not using
docker, the current recommended way.

---------

Signed-off-by: George Araújo <george.gcac@gmail.com>
2023-12-18 10:59:08 -03:00
George
36e6ff8705
Ensure the zoomed image is in front of toc sidebar (#1998)
Fixes #1888

Signed-off-by: George Araújo <george.gcac@gmail.com>
2023-12-15 11:39:11 -03:00
George
f9b8d45081
Fixed redirect post access from blog archive (#1994)
Fixes #1831

Signed-off-by: George Araújo <george.gcac@gmail.com>
2023-12-14 15:47:28 -03:00
George
199718610e
Implemented support for tikzjax (#1990)
Implemented #1976.

Signed-off-by: George Araújo <george.gcac@gmail.com>
2023-12-12 22:56:14 -03:00
civita
6130018c96
Update cv.md (#1973)
Fix path typo in description
2023-12-05 12:57:38 -03:00
George
f92d60f61c
Fixes #1584 (#1971)
Removed link to blog when showing years in news

Signed-off-by: George Araujo <george.gcac@gmail.com>
2023-12-01 11:20:13 -03:00
George
6eab5bf480
Fixes #1952 (#1955)
Fixes #1952 by updating font awesome version. Also updated icons names
to newest font awesome style.

---------

Signed-off-by: George Araujo <george.gcac@gmail.com>
2023-11-23 13:02:14 -03:00
Pablo Diego Pereira
6b5c94f571
Update resume.json (#1821)
populating resume.json to give easier start to people that dont
understand very well how to setup the fields
2023-11-22 16:26:14 -03:00
Pablo Diego Pereira
f5cdbdd322
Update cv.html (#1820)
resume fixing that isn't showing up
2023-11-22 16:25:06 -03:00
Amir Pourmand
136e8bf2bb
Better Readme (#1806) 2023-11-22 16:23:29 -03:00
Yao Xiao
a7c2f75120
ENH image zooming in distill posts (#1826)
Towards https://github.com/alshedivat/al-folio/discussions/1374

The image zooming feature did not work with distill layout previously.
2023-11-22 16:22:06 -03:00
Javkhlantugs
77e9137dce
Update README.md (#1901)
Added new Q&A (Q7). Github credentials error when deploying. Changing
the github config url from `http` to `ssh`
2023-11-22 16:08:44 -03:00
Rachel
13c277eff5
Update Font Awesome url (#1943)
Previous link returns a `404`
2023-11-22 15:48:56 -03:00
Shubhankar
aacf4582ef
Adding my site. Thanks! (#1945) 2023-11-22 14:21:38 -03:00
Antonio Stanziola
981835b492
Update README.md (#1938)
Adding my site. Amazing template, it was incredibly easy to setup and is
super flexible!
2023-11-14 13:08:10 -03:00
Abhinav Mehta
85f2590a21
Add my website (#1859) 2023-10-26 13:39:47 -03:00
Yifan Jiang
7eb1cccf4e
fix inconsistent alignment for latest posts (#1832) 2023-10-26 02:50:44 -04:00
Shubhashis Roy Dipta
324814543a
Added shubhashisroydipta.com to README.md (#1816) 2023-10-25 20:30:34 -03:00
Monk
a348bee339
Update README.md (#1856) 2023-10-20 19:54:07 -03:00
Amir Pourmand
b44528a9d2
Update README.md (#1837) 2023-10-16 22:55:59 +03:30
Giordano d'Aloisio
422a72be25
Added my website in the list (#1834) 2023-10-16 13:28:12 +03:30
Yifan Jiang
a21bd492bc
fix reference disappearing for distill blog in absence of author (#1804) 2023-10-08 12:15:01 -04:00
Amir Pourmand
8e6f5daafe
Update Dockerfile 2023-10-07 13:00:59 +03:30
Amir Pourmand
3ebb90f696
Add DockerSlim (#1699) 2023-10-07 12:18:56 +03:30
Amir Pourmand
c0bc95c5d9
Add Reload to Docker (Automatic Reload of Changes to _config.yaml) (#1702)
- #1640
2023-10-07 10:03:58 +03:30
Maruan Al-Shedivat
dc3289ddfc Fix a small bug in giscus template 2023-10-05 00:36:32 -04:00
Maruan
51d367c765
Make publication thumbnails optional + fix small layout bugs (#1797) 2023-10-05 00:28:44 -04:00
Maruan
da661b1662
Remove by year grouping from selected publications (#1796) 2023-10-05 00:23:34 -04:00
Maruan
8893d483bc
Update giscus setup via github action (#1792)
giscus settings in `_config.yml` had al-folio repo specified by default.
many users kept these defaults in their own repos, which resulted in
getting comments from blog posts of different users posted to al-folio
discussions. this is undesirable, since users lose control over the
discussions in their blogs.

this PR solves the issue:
- first, we set `giscus.repo` to blank in `_config.yml`. if the field is
kept blank, when the website is built locally, the user will see a
warning saying that giscus comments are misconfigured.
- second, we add a step to the `deploy` workflow that writes repository
name to `giscus.repo` in `_config.yml`. that way, even if `giscus.repo`
field is left black or set to an incorrect repo, it gets correctly
populated at deployment time.

other small changes in this PR are small stylistic adjustments.
2023-10-04 22:27:36 -04:00
Martin Bulla
2897382206
Update README.md (#1789)
added an example of a personal web page
2023-10-04 17:51:53 -04:00
Amir Pourmand
67c325101c
Fix Docker Problem (#1785) 2023-10-02 12:57:02 +03:30
Amir Pourmand
b838eff2b1
Optimize Dockerfile (#1700) 2023-10-02 10:48:42 +03:30
Maruan
ea7e6a38ff
Update README.md
add all contributors to toc
2023-10-01 22:29:20 -04:00
Maruan
d74943f491
Update README.md
add link to workshop on diffusion models
2023-10-01 22:26:37 -04:00
Maruan
84810b3a20
Update README.md
add link to iclr 2024 blog post track
2023-10-01 22:23:12 -04:00
Maruan
c8d28df4bc
Create .github/release.yml
Adds a template for automatic generation of release notes
2023-10-01 21:42:43 -04:00
George
d11df465f0
Added description to profiles page (#1777)
Added support for description in profiles page

Signed-off-by: George Araujo <george.gcac@gmail.com>
2023-09-28 18:15:11 -03:00
George
8889e36b43
Fixed weird bib btn behavior (#1776)
Fixes #1774 by reverting mdb usage to cdn. Weirdly enough, when using
from local file it triggers a ripple effect when using `btn` class. It
states in the [official
docs](https://mdbootstrap.com/docs/standard/methods/ripple/) that:

> By default, ripple is added to every button (via .btn class)

Using [this
solution](https://mdbootstrap.com/support/standard/disable-waves-ripple-effect/)
only make this flicking happens faster. Also this does seem to be [an
issue](https://mdbootstrap.com/support/standard/how-to-disable-ripple-effect/)
still in the [latest
version](https://github.com/mdbootstrap/mdb-ui-kit/issues/1505) (even
though we are using an older one).

Signed-off-by: George Araujo <george.gcac@gmail.com>
2023-09-28 17:43:35 -03:00
George
45d349fc8e
Added support for multiple profiles in about page (#1243)
Addresses #963.

Supports two setups: getting profile text from page content.

```markdown
---
layout: about
title: about
permalink: /
subtitle: <a href='#'>Affiliations</a>. Address. Contacts. Moto. Etc.

profiles:
  # if you want to include more than one profile, just replicate the following block
  # and create one content file for each profile inside _pages/
  - align: right
    image: prof_pic.jpg
    # content: about_einstein.md
    image_circular: false # crops the image to make it circular
    more_info: >
      <p>555 your office number</p>
      <p>123 your address street</p>
      <p>Your City, State 12345</p>

news: true  # includes a list of news items
selected_papers: true # includes a list of papers marked as "selected={true}"
social: true  # includes social icons at the bottom of the page
---

Write your biography here. Tell the world about yourself. Link to your favorite [subreddit](http://reddit.com). You can put a picture in, too. The code is already in, just name your picture `prof_pic.jpg` and put it in the `img/` folder.

Put your address / P.O. box / other info right below your picture. You can also disable any these elements by editing `profile` property of the YAML header of your `_pages/about.md`. Edit `_bibliography/papers.bib` and Jekyll will render your [publications page](/al-folio/publications/) automatically.

Link to your social media connections, too. This theme is set up to use [Font Awesome icons](http://fortawesome.github.io/Font-Awesome/) and [Academicons](https://jpswalsh.github.io/academicons/), like the ones below. Add your Facebook, Twitter, LinkedIn, Google Scholar, or just disable all of them.
```

Or getting profile text from `content` (useful when having multiple
profiles).

```markdown
---
layout: about
title: about
permalink: /
subtitle: <a href='#'>Affiliations</a>. Address. Contacts. Moto. Etc.

profiles:
  # if you want to include more than one profile, just replicate the following block
  # and create one content file for each profile inside _pages/
  - align: right
    image: prof_pic.jpg
    content: about_einstein.md
    image_circular: false # crops the image to make it circular
    more_info: >
      <p>555 your office number</p>
      <p>123 your address street</p>
      <p>Your City, State 12345</p>
  - align: left
    image: prof_pic.jpg
    content: about_einstein.md
    image_circular: false # crops the image to make it circular
    more_info: >
      <p>555 your office number</p>
      <p>123 your address street</p>
      <p>Your City, State 12345</p>

news: true  # includes a list of news items
selected_papers: true # includes a list of papers marked as "selected={true}"
social: true  # includes social icons at the bottom of the page
---
```

Which looks like this:


![image](https://user-images.githubusercontent.com/31376482/223251956-aec09f92-55c4-4a17-8ab6-0b30da0970cc.png)

---------

Signed-off-by: George Araújo <george.gcac@gmail.com>
Signed-off-by: George Araujo <george.gcac@gmail.com>
2023-09-28 15:01:24 -03:00
George
64cf57fab3
Added support to PurgeCSS (#1562)
Tackled #1329 with [PurgeCSS](https://purgecss.com/).

Being talking with @varuniyer about using
[jekyll-uncss](https://github.com/episource/jekyll-uncss) to reduce css
file sizes by ditching unused classes. This approach have 3 main
problems:

1 - have some limitations as pointed
[here](https://github.com/alshedivat/al-folio/issues/1329#issuecomment-1546517327)
2 - last update to
[jekyll-uncss](https://github.com/episource/jekyll-uncss) was about 3
years ago, so it might have a few issues
3 - [uncss](https://github.com/uncss/uncss) haven't seem a new release
in a while, currently [lacking
maintenance](https://github.com/uncss/uncss/issues/459), and using some
deprecated libraries as seem here:

```
npm install -g uncss
npm WARN deprecated request-promise-native@1.0.9: request-promise-native has been deprecated because it extends the now deprecated request package, see https://github.com/request/request/issues/3142
npm WARN deprecated har-validator@5.1.5: this library is no longer supported
npm WARN deprecated w3c-hr-time@1.0.2: Use your platform's native performance.now() and performance.timeOrigin.
npm WARN deprecated uuid@3.4.0: Please upgrade  to version 7 or higher.  Older versions may use Math.random() in certain circumstances, which is known to be problematic.  See https://v8.dev/blog/math-random for details.
npm WARN deprecated request@2.88.2: request has been deprecated, see https://github.com/request/request/issues/3142
```

I thought about giving PurgeCSS a go, since it has been more [actively
maintaned](https://github.com/FullHuman/purgecss), but
[jekyll-purgecss](https://github.com/mhanberg/jekyll-purgecss) haven't.

For this, I needed to change to use some local libraries instead of
getting them via CDN. The good news is that it is quite effective in
reducing css file sizes. Comparing dir sizes with `du -hs
_site/assets/css/`:

| current | minify | PurgeCSS | PurgeCSS + minify |
| ------- | ------ | -------- | ----------------- |
| 1,1M    | 988K   | 456K     | 420K              |

---------

Signed-off-by: George Araujo <george.gcac@gmail.com>
2023-09-28 14:22:42 -03:00
Lance Wilhelm
b663e9e1c9
Fixing bootstrap dark-table top border (#1763)
This addresses https://github.com/alshedivat/al-folio/issues/1425.

Contributions:
- Added border attribute to `.table-dark` within `_base.scss` to
override bootstrap theme border settings for `.tabled-bordered`.
Displays top border in dark mode for only those tables that are bordered
2023-09-28 13:58:48 -03:00
Nikolai Zhivotenko
be4be01fcc
Added a star (#1764) 2023-09-26 17:23:03 -04:00
Matteo Barbetti
c24ed74855
Update README (#1754)
* added the link to my personal academic website
([mbarbetti.github.io](https://mbarbetti.github.io))
* added the link to the website for a workshop named "Beyond Vision:
Physics meets AI" ([BVPAI
2023](https://physicsmeetsai.github.io/beyond-vision)) held within ICIAP
2023

---------

Co-authored-by: Amir Pourmand <pourmand1376@gmail.com>
2023-09-21 16:34:33 +03:30
Dhruv Kumar
2194a52fd9
Adding a page (*) in README.md (#1755)
Adding https://kudhru.github.io/ in the academics section
2023-09-21 15:09:44 +03:30
Henry Zhang
ae48df4c3d
Update README.md (#1748) 2023-09-19 22:21:31 -04:00
Johannes Hörner
cba3ad27fb
add WeChat to socials (#1730)
When the WeChat icon in socials is clicked, a picture of your WeChat QR
code is shown in the center of the screen. The actual picture of your QR
code has to be uploaded.
2023-09-17 15:49:27 -04:00
Dr. David Krassnig
8883c9ddf7
Moved ToC Menu to Sidebar (#1582)
Addressing #1551 using the same sidebar as in #1366, removing the inline ToC menu from the CV
2023-09-17 15:03:21 -04:00
gzwongkk
53ad434ad2
Fix regex to limit keyword scope to fields (#1629)
improved version of the original fix contributed by @paberr in #1429
2023-09-17 14:19:45 -04:00
Jed Burkat
482f4366bb
Add a star (#1723) 2023-09-12 12:26:25 -03:00
Decwest
5a96b75479
Add a star (#1705)
Added academic website to README.md.
2023-09-06 13:19:05 -03:00
Carlson B
81b89c8d45
Add star to README.md (#1684)
Added academic website to README.md.
Also added `_blank` target to earlier ones.

Co-authored-by: George <31376482+george-gca@users.noreply.github.com>
2023-09-02 15:33:54 -03:00
Kyle Oman
3cf7ffaf2c
Add a star. (#1695) 2023-09-02 15:31:50 -03:00
Raffaele Mancuso
cbf32e3177
Don't display badge if startDate is empty (#1682) 2023-08-28 18:13:01 -03:00
Raffaele Mancuso
40af12bd56
Add website (#1674) 2023-08-28 18:09:49 -03:00
Raffaele Mancuso
b6b18b47d1
Fix _variables.scss filename in README (#1683) 2023-08-28 18:08:54 -03:00
Maruan
f83d09c2a1
Add all contributors section to README.md 2023-08-21 22:54:45 -04:00
Alejandro Escontrela
4d3c53d907
Update README.md (#1661)
add star to academic example
2023-08-21 22:50:24 -04:00
filippomazzoli
c1857fc82b
Update README.md (#1657) 2023-08-20 14:25:04 -04:00
Amir Pourmand
16a19434aa
Update README to make Docker Recommended way (#1523)
Docker is well-tested for a long time. I think it is better to make it
the recommended method for all OS types.

This way, it is a lot easier to install docker (than to install jekyll
and ruby and what not) and also we wouldn't have to deal with issues
like these:
- https://github.com/alshedivat/al-folio/issues/1520
- https://github.com/alshedivat/al-folio/issues/1491
2023-08-20 08:52:43 +03:30
Daniel Berlyne
920cb69e15
add star to academic examples (#1647)
Dear `al-folio` maintainers,

I would greatly appreciate it if you could add my homepage as a star in
the academic examples.

Thank you for your wonderful work on this.
2023-08-16 12:34:21 -03:00
George
1206429677
Added jupyter to README (#1637)
Signed-off-by: George Araujo <george.gcac@gmail.com>
2023-08-06 18:59:07 -03:00
George
312cbdb4c5
Cache busting for _sass and individual files (#1557)
Addressing #1395 but with a different solution from #1478, using
semantic versioning based on implementation found
[here](https://distresssignal.org/busting-css-cache-with-jekyll-md5-hash).

Implemented a way of calculating the hash for both a single file or
directory. This way we can calculate the hash for when there is a change
in the `_sass` dir, for example, or in the contents of a single file.

Examples of generated outputs of the plugin:
```
/al-folio/assets/css/main.css?d41d8cd98f00b204e9800998ecf8427e
/al-folio/assets/js/theme.js?96d6b3e1c3604aca8b6134c7afdd5db6
/al-folio/assets/js/dark_mode.js?9b17307bb950ffa2e34be0227f53558f
/al-folio/assets/js/no_defer.js?d633890033921b33e0ceb13d22340a9c
/al-folio/assets/js/common.js?acdb9690d7641b2f8d40529018c71a01
/al-folio/assets/js/copy_code.js?c9d9dd48933de3831b3ee5ec9c209cac
/al-folio/assets/img/prof_pic.jpg?974957d202f671e4fa6700c04e68deae
```

Signed-off-by: George Araujo <george.gcac@gmail.com>
2023-07-30 00:14:23 -03:00
NakuraMino
7238998876
incorrect max-height in figure.html (#1593)
figure.html was incorrectly setting height=max-height instead of
max-height=max-height
2023-07-30 00:01:01 -03:00
David Krassnig
c824d12867
Al folio main giscus pages (#1596)
Solves #1586 by adding the option for giscus comments sites using the
pages layout and minimally modifies Project 2 to show giscus comments as
an example
2023-07-23 16:18:03 -03:00
Amir Pourmand
b2989ea76a
Update Tag Deploys to Support M1 Macbooks (#1522)
I should merge this whenever normal deploy is well-tested for Mac
computers.
2023-07-19 09:13:46 +03:30
David Krassnig
2d4ad85a28
Zotero ID Bugfix (#1580)
#1569 Fixed mismatch between zotero-id in _config.yml and the zotero-id
called upon in the socials html file introduced by #1572 (sorry about
that; slipped in when I had to reset my zotero-branch)
2023-07-18 11:26:30 -03:00
Amir Pourmand
4504d963d9
Update Dockerfile (#1581) 2023-07-18 16:40:24 +03:30
George
50f5620cd5
Added missing socials to metadata (#1575)
Signed-off-by: George Araujo <george.gcac@gmail.com>
2023-07-17 16:35:33 -03:00
David Krassnig
8785864afd
Added Zotero socials (#1572)
Solving #1569 
I added Zotero socials because I needed them; opened a issue/pull
request in case I'm not the only one.

Second pull request (previous: #1570 ) because unwanted commits
retroactively crept in somehow. It was easier to force reset (which
closed the pull request automatically apparently).
2023-07-17 16:21:45 -03:00
George
f968d1dfd1
Added metadata info when blog post (#1573)
Changed metadata info for when page is a blog post.

Signed-off-by: George Araujo <george.gcac@gmail.com>
2023-07-17 16:18:25 -03:00
Henry.W
bdf7bbcb3d
Change analytics script from Panelbear to Cronitor (#1561)
Panelbear is now Cronitor RUM, the old script does not work.
2023-07-15 15:48:50 -03:00
George
bbbb1394f2
Made some small changes to code (#1558)
Signed-off-by: George Araujo <george.gcac@gmail.com>
2023-07-13 18:32:28 -03:00
Henry.W
42ad10a771
Remove repeated layout template of cv.html (#1555)
The layout template of cv.html has repeated parts. When site.data.resume
is not defined, the cv page will be rendered incorrectly.
2023-07-13 13:38:44 -03:00
George
3d0b362d19
Support for bibliography in blog posts and projects (#1553)
Implemented #1193

---------

Signed-off-by: George Araujo <george.gcac@gmail.com>
2023-07-12 14:07:33 -03:00
George
c2019498d3
Publication image zoom (#1554)
Fixes #1552

---------

Signed-off-by: George Araujo <george.gcac@gmail.com>
2023-07-12 14:06:57 -03:00
Mirza Arnaut
40505f4c5d
Add jsonresume support (#1547)
Just as discussed in #1513 , this pull request adds support for
[jsonresume](https://jsonresume.org/). Create the resume once, either as
a file in the repository or at [github gist](https://gist.github.com/)
called `resume.json`. Put the file in the `_config.yaml` file and that's
it! Other platforms like [resumake](https://latexresu.me/) use the same
schema.

I also incorperated the changes introduced by #1339 to the best of my
abilites. The style could be further improved.

**Please merge this pull request after #1339 is merged, due to
dependencies from it**

If someone has a bettet approach on how to solve the problem that each
section needs its own template, please let me know. But for now it works
fine and is still backwards compatible with the `cv.yaml` file.

Co-authored-by: George <31376482+george-gca@users.noreply.github.com>
2023-07-11 23:26:25 -03:00
José M. Requena Plens
cd5138b9c6
CV Restyled (#1339)
I have redesigned the CV to have some options that I have in my pdf CV.

I'm not too inspired to include more example data, if anyone wants to
add data, go ahead.

With my data the CV looks like this:
[https://jmrplens.github.io/cv/](https://jmrplens.github.io/cv/ ).
My data: [VIEW
FILE](ce8b5b67db/_data/cv.yml)

Some screenshots:
<img width="45%" alt="Screenshot of Google Chrome (19-4-23, 23-09-51)"
src="https://user-images.githubusercontent.com/28966312/233200752-e49afa44-1c07-42eb-b38c-337f81b60406.png"><img
width="45%" alt="Screenshot of Google Chrome (19-4-23, 23-10-22)"
src="https://user-images.githubusercontent.com/28966312/233200844-0201d061-df3e-4e80-8107-3b6f7c72faa3.png">
<img width="45%" alt="Screenshot of Google Chrome (19-4-23, 23-10-37)"
src="https://user-images.githubusercontent.com/28966312/233200898-77040d1a-bf9a-47f1-a46d-3008f7331020.png"><img
width="45%" alt="Screenshot of Google Chrome (19-4-23, 23-10-54)"
src="https://user-images.githubusercontent.com/28966312/233200949-055fe27e-ce06-4929-91e8-cab2983b4850.png">

Mobile:

<img width="45%" alt="Screenshot of Google Chrome (19-4-23, 23-21-36)"
src="https://user-images.githubusercontent.com/28966312/233203168-8b5cc777-e3f8-4387-96d4-a5d405d7032b.png"><img
width="45%" alt="Screenshot of Google Chrome (19-4-23, 23-21-48)"
src="https://user-images.githubusercontent.com/28966312/233203238-5ccc424e-b0e3-41a1-bd2b-2c64e01cfc85.png">
<img width="45%" alt="Screenshot of Google Chrome (19-4-23, 23-22-00)"
src="https://user-images.githubusercontent.com/28966312/233203297-7174be99-08a1-427a-a414-5bded2d6c2d8.png"><img
width="45%" alt="Screenshot of Google Chrome (19-4-23, 23-22-14)"
src="https://user-images.githubusercontent.com/28966312/233203312-f5067ce7-134f-4a39-bb5b-aaa3d247b3e7.png">

---------

Co-authored-by: George <31376482+george-gca@users.noreply.github.com>
2023-07-11 22:53:53 -03:00
Abu Noman Md. Sakib
84b6dfabbe
Added anmspro.github.io in academics (#1549)
Added anmspro.github.io in academics
2023-07-11 22:52:51 -03:00
Amir Pourmand
c8ebb5c289
Create .dockerignore 2023-07-11 12:43:37 +03:30
George
e8617623d5
Added support for jupyter dark mode (#1538)
Signed-off-by: George Araujo <george.gcac@gmail.com>
2023-07-05 23:12:57 -03:00
George
ab2f72baaa
Added support for jupyter notebooks #417 (#1511)
Implemented #417.

---------

Signed-off-by: George Araújo <george.gcac@gmail.com>
Co-authored-by: Amir Pourmand <pourmand1376@gmail.com>
2023-07-05 12:43:59 -03:00
George
554ab3490b
Updated README FAQ section (#1532) 2023-07-03 12:37:10 -03:00
George
567b731de6
Revert "Created GitHub action to update site pagespeed svg" (#1530)
Reverts alshedivat/al-folio#1529
2023-07-02 19:43:19 -03:00
github-actions[bot]
99c81fc9a1 Updated Pagespeed results 2023-07-02 22:19:33 +00:00
George
e1b93cff0a
Created GitHub action to update site pagespeed svg (#1529)
Addresses #1524

Signed-off-by: George Araujo <george.gcac@gmail.com>
2023-07-02 19:18:17 -03:00
Amir Pourmand
4bbf13bf5b
Update Docker Images to support M1 Mac (#1486)
I added multi-architecture support for docker images. 

- #1469 

ToDo: 
- [ ] Update deploy tag file accrodingly
2023-06-29 23:02:28 -07:00
Loris Fichera
8f3ecfa5b0
Added two more examples (#1517)
Added the following examples:
* A personal homepage
* A workshop website
2023-06-29 11:14:20 -03:00
George
ad9135fc7b
Added support for featured blog posts (#1498)
Implementing #1440. Still not sure if the year should be shown there or
not. Also, I limited to be displayed at least 2 at most 3 elements on
the row of featured blog posts, since when having only 1 featured post
the card would occupy the whole row (and it looks weird). What do you
think @alshedivat? Also, idk how to force the cards to have the same
height. I think it would look nicer, but my lack of web dev skills made
a difference here.

Some current screenshots:


![image](https://github.com/alshedivat/al-folio/assets/31376482/11b280dd-70b6-4bc4-84b6-987aa6412d55)


![image](https://github.com/alshedivat/al-folio/assets/31376482/d94aac41-246d-4b4e-afd0-161aab5a9b88)

---------

Signed-off-by: George Araujo <george.gcac@gmail.com>
Co-authored-by: Maruan <alshedivat@users.noreply.github.com>
2023-06-29 11:11:07 -03:00
George
1a612c615f
Removed need for years in bibliography page (#1500)
Implementing #1390.

Signed-off-by: George Araujo <george.gcac@gmail.com>
2023-06-25 17:09:23 -03:00
Juan Carlos Niebles
6eebb65632
fixes #1497 (#1505) 2023-06-24 14:44:23 -03:00
Furkan Akkurt
4d955518bb
add functionality to display categories, like tags, in blog home page (#1482)
Added the functionality to display categories on the front page of the
blog, just like tags.
2023-06-19 20:11:41 -03:00
Furkan Akkurt
aeee609c92
correct spotify title (#1484) 2023-06-12 09:43:11 -04:00
Furkan Akkurt
51ece4421e
update fontawesome version (#1485) 2023-06-12 09:42:25 -04:00
Jesse Wei
9e146a04c6
Make latest post redirect if the blog post redirects (#1451)
Fixes #1450, and the behavior of the site with this "new" code is shown
in the Expected behavior screenshots there.

I copy-pasted the redirect logic from `blog/index.html` into
`_includes/latest_posts.html`, with minor name changes.

I also cleaned up a line in `blog/index.html`.
2023-06-10 21:43:31 -04:00
Samuel Chin
3083172d99
Fixes "General Information" section of CV in dark mode (#1432)
When the dark mode is default, or if you set the page to dark mode and
then refresh, the content in "General Information" can't be seen.
This PR fixes the problem.
2023-06-10 21:30:13 -04:00
Lucas Emanuel Resck
983762c63a
Add star to academic examples (#1445) 2023-06-10 21:23:22 -04:00
ebohnenb
2f58bb909a
Update ruby to 3.2.2 in deploy.yml (#1459) 2023-06-10 21:18:47 -04:00
Fan Pu Zeng
45f66f06e3
Update README personal page stars (#1467) 2023-06-10 21:07:28 -04:00
Sam Adam-Day
6e01a61a4a
Added star for samadamday.com in the README (#1443) 2023-05-23 11:12:49 -04:00
Lily (Xianling) Zhang
14ca1486cf
add star to academic examples (#1439) 2023-05-22 11:20:22 -04:00
Kai Yao
31afb9a4bf
add academic personal webpage example (#1431)
Hello, I'd appreciate it if you could consider including my academic
personal webpage as an example. Thank you.
2023-05-20 20:35:31 -03:00
George
597b5751a3
Audio and Video support (#1367)
Since #1253 has been hanging there for a while, I decided to part from
it and add audio and video support.

---------

Signed-off-by: George Araujo <george.gcac@gmail.com>
2023-05-15 12:31:27 -03:00
George
6335474075
Custom blockquotes (#1419)
Added some custom blockquotes `tip`, `warning`, and `danger` as seen in
[jekyll-gitbook](https://sighingnow.github.io/jekyll-gitbook/jekyll/2022-06-30-tips_warnings_dangers.html),
and a blog post showcasing them.

Light look:

![image](https://github.com/alshedivat/al-folio/assets/31376482/8441bd56-a1a6-41c0-951f-2a2efa20c16c)

Dark look:

![image](https://github.com/alshedivat/al-folio/assets/31376482/a916218a-176e-40d0-ad87-6acc9eedf8e3)

---------

Signed-off-by: George Araujo <george.gcac@gmail.com>
2023-05-15 12:30:53 -03:00
George
8f960bbae6
Fix table color (#1424)
Fix table color when dark mode is default.

---------

Signed-off-by: George Araujo <george.gcac@gmail.com>
2023-05-14 22:10:29 -03:00
Qingqing Chen
d037850a48
add star to academic examples (#1423) 2023-05-14 21:06:41 -04:00
danickblouin
fedf6d1965
Fixed typo in blog post (#1411) 2023-05-12 17:50:57 -03:00
Furkan Akkurt
c5ec8d8f84
Fix typo ; Update _config.yml (#1418)
Co-authored-by: George <31376482+george-gca@users.noreply.github.com>
2023-05-12 17:48:40 -03:00
Raffaele Mancuso
6fd714c897
README upgrade (#1394) 2023-05-09 11:53:21 -03:00
CDN (Diego) Damasceno
1c0560fc03
Including Lattes CV in Socials (#1404)
Resubmitting the PR #1383
2023-05-08 13:56:58 -03:00
sfanzon
c1112d7e71
Update README.md (#1389)
Added academic personal website
2023-05-02 10:59:53 -04:00
George
dd1ec87e48
Fixed bootstrap table css (#1388)
Fixed bootstrap table css that is being overwritten by mdb css

Signed-off-by: George Araujo <george.gcac@gmail.com>
2023-05-01 20:03:26 -03:00
George
0c0303b185
Moved bootstrap table css to head.html (#1387)
Signed-off-by: George Araujo <george.gcac@gmail.com>
2023-05-01 14:10:33 -03:00
George
d98eafb424
Added thumbnail support for blog posts (#1371)
Implemented #425 based on given code.


![image](https://user-images.githubusercontent.com/31376482/234644266-07c1aebd-6a83-482f-8ac2-846fe5c0653d.png)

---------

Signed-off-by: George Araujo <george.gcac@gmail.com>
2023-05-01 13:27:33 -03:00
Jinsheng Ba
ecfb9aad99
Add an academic example (#1381)
https://bajinsheng.github.io/
2023-05-01 13:05:58 -03:00
Wang Boyu
b8771efebe
add star to academic examples (#1380) 2023-04-30 23:10:49 -04:00
George
641a36405f
Added support for Bootstrap table (#1283)
Added support for [Bootstrap Table](https://bootstrap-table.com/).
Haven't checked the impact on website loading, but I believe [this kind
of table](https://examples.bootstrap-table.com/#welcomes/from-data.html)
is way more useful for blog posts and projects pages.
2023-04-30 23:10:30 -04:00
Hashe037
1ce61cccc6
added star to academic examples (#1377) 2023-04-27 22:47:24 -03:00
George
a68c5e97b1
Reduced a little font-size in toc sidebar (#1376)
Signed-off-by: George Araujo <george.gcac@gmail.com>
2023-04-27 13:39:38 -03:00
George
6f9114685f
Toc sidebar color fix (#1375)
Fixed color and increased font size of toc sidebar

---------

Signed-off-by: George Araujo <george.gcac@gmail.com>
2023-04-27 13:28:55 -03:00
George
bbf1758636
Toc sidebar (#1366)
Implemented #966.


![image](https://user-images.githubusercontent.com/31376482/234411523-b02087d9-a437-4f77-9f54-de5eef122439.png)

---------

Signed-off-by: George Araujo <george.gcac@gmail.com>
2023-04-27 12:46:29 -03:00
George
0b109a23ed
Fixed news limit (#1359)
Fixes #1346.

---------

Signed-off-by: George Araujo <george.gcac@gmail.com>
Co-authored-by: Yifan Jiang <55911052+YifanJiang233@users.noreply.github.com>
Co-authored-by: Raffaele Mancuso <54762742+raffaem@users.noreply.github.com>
Co-authored-by: Yue Gao <11145354+Lodour@users.noreply.github.com>
2023-04-27 12:26:48 -03:00
George
e8c5450790
Fixed bug when using latex in title and description (#1361)
Fixes #1252.

Signed-off-by: George Araujo <george.gcac@gmail.com>
2023-04-27 12:02:50 -03:00
Yue Gao
39d1f5e522
Fixed hard-coded bib files in templates (#1373)
The bibliography filename `papers.bib` is hard coded in templates, and
the equivalent setting in `_config.yml` is not used anywhere. So
changing the bib filename in `_config.yml` won't have any effects.

This PR replaces hard-coded filenames with the value from `_config.yml`.
2023-04-27 11:55:57 -03:00
George
2f035fa2a5
Increased allowed max size of news and latest posts in about (#1369)
Fixed size of news and latest posts in about page when visualizing in
mobile.

Signed-off-by: George Araujo <george.gcac@gmail.com>
2023-04-27 11:47:35 -03:00
George
2a9b89d352
Removed blog header-bar when title and description are empty (#1370)
When blog title and description are empty, go from this


![image](https://user-images.githubusercontent.com/31376482/234630799-f4c2cd46-7ad0-4d45-a0f6-2badcf0da558.png)

to this


![image](https://user-images.githubusercontent.com/31376482/234630683-f11c8a88-438a-4db3-974e-ba9184d5516f.png)

Signed-off-by: George Araujo <george.gcac@gmail.com>
2023-04-26 12:53:19 -03:00
Raffaele Mancuso
470365139e
Scopus integration (#1364)
Fixes #1362
2023-04-25 18:52:27 -03:00
Yifan Jiang
6e38b1b8aa
Fix copy code button position (#1348)
Fix issue #1303 by adding a code wrapper outside the code block. 
Ref:
https://stackoverflow.com/questions/60771472/position-a-button-such-that-it-wont-scroll-with-contents
2023-04-25 11:37:09 -03:00
Yuki M. Asano
9ef19fa52a
added one more researcher (#1353)
Added my own website to the "stars" section
2023-04-24 22:55:54 -03:00
Furkan Akkurt
2b725c1863
Fix typo (#1356) 2023-04-24 22:54:45 -03:00
George
67e5fcd1e3
Added support for table of contents in blog posts (#1278)
![image](https://user-images.githubusercontent.com/31376482/226411600-e5619108-3842-4c44-b582-61fcc94a1b0c.png)

---------

Signed-off-by: George Araújo <george.gcac@gmail.com>
2023-04-24 22:44:24 -03:00
Varun Iyer
ee3f2b9dab
Add star to academic portfolios (#1333) 2023-04-22 20:53:24 -04:00
Maruan
8c8f20c5eb
Update README.md 2023-04-09 17:16:38 -04:00
allcontributors[bot]
bf62dc3a55
docs: add george-gca as a contributor for code (#1323) 2023-04-08 10:06:32 -04:00
Maruan
9351f3a0c9
Fix publication button spacing (#1322) 2023-04-08 09:56:08 -04:00
gaspardbb
8aaf0df552
Implemented details tag for distill blog (#1321) 2023-04-08 09:43:36 -04:00
George
60209cfd93
Implemented latest posts on about page (#1307)
Adresses #340

---------

Signed-off-by: George Araújo <george.gcac@gmail.com>
2023-04-08 10:19:08 -03:00
Simmo Saan
5ff54a74ef
Fix assets sitemap exclusion (#1315) 2023-04-05 07:27:32 -04:00
Chen Chen
07f5b4d679
Fixed some typos in _config.yml and README.md (#1306) 2023-03-30 20:28:40 -03:00
George
2fffdf3f1e
Moved information about creating your repo to front (#1298)
Moved information about using this template to the beginning of the
installation part, added a few more documentation links in it, fixed
some typos.

---------

Signed-off-by: George Araújo <george.gcac@gmail.com>
2023-03-29 16:48:53 -03:00
Raphael Azorin
6dee124c6f
Update README - Add new profile (#1285) 2023-03-27 11:58:53 -04:00
Douglas
ad504b0709
Fixed one-word typo in _config.yml (Non-Urgent) (#1288) 2023-03-27 11:58:32 -04:00
Maruan
6b3b92ca06
update readme + remove sponsorship info (#1274)
majority of the recent improvements to al-folio have been truly driven
by a growing community of fans and contributors. this template has
gradually transformed from a low-key weekend project into a "public
good" of some sort used by thousands of people, university labs and
classes, and academic conference and workshops. as such, having personal
sponsorship info from the repository is no longer relevant.

as the community grows a bit further, we may have to think about
establishing some kind of governance around decisions of how al-folio is
supposed to evolve, which features to prioritize, and how to reward
contributors for their hard work. for now, these decisions will be made
by the project maintainers (active contributors are welcome to join the
team). and I'm all ears for proposals and suggestions!
2023-03-19 18:42:53 -04:00
George
b9a1f83636
Added more options to altmetric badge, changed to arxiv code first (#1269) 2023-03-19 17:25:07 -04:00
George
bacddc7821
Implemented copy code button feature (#1267)
Implemented support for copy code button in code blocks (#1262), also updated blog post about code to reflect it.
2023-03-19 17:17:34 -04:00
Do Hai Son
fa9e1c30c1
Update README.md: added new profile (#1263) 2023-03-19 17:06:21 -04:00
George
45c3d91b69
Added related_posts false to the announcements front matter (#1266)
Added `related_posts: false` to the announcements front matter to avoid
errors like #1203. Also included explanation in README FAQ section.
2023-03-19 08:43:02 -04:00
George
1701a23c8d
Avoiding specific warning on Google Chrome (#1268)
Avoids a warning that appears in the console when opening the site on Google Chrome
2023-03-19 08:38:59 -04:00
Scott Lee Chua
2f49d07dc3 Replace bin/deploy with GitHub Action (#1234)
This PR updates `deploy.yml` to use the GitHub Action [Deploy to GitHub Pages](https://github.com/marketplace/actions/deploy-to-github-pages).
2023-03-19 06:43:32 -04:00
George
56480a713a
Added github 🏆 section in repositories (#1229)
Creates a new section with user trophies.
2023-03-18 18:01:30 -04:00
George
f4a369b559
Added information about using github action (#1226)
By using this Github action it is possible to keep the derived
repository up-to-date with its template.

I am currently using this to keep my website up to date with the
template repository. An example of the PR this action creates can be
seen [here](https://github.com/george-gca/george-gca.github.io/pull/13).

Signed-off-by: George Araújo <george.gcac@gmail.com>
2023-03-18 17:55:21 -04:00
Mathias Micheel
59308f4e82
OSF social link (#1217)
Added missing "/" in the OSF link.
2023-02-26 21:40:03 +05:30
Allie
3947dce657
feat: add wikipedia social (#1097)
I imagine more people have wikipedia accounts than wikidata entries
about them 😉
2023-02-25 13:16:04 -05:00
Bashir Kazimi
28953d565b
Add star to academic portfolios (#1202) 2023-02-25 13:15:04 -05:00
George
8ccc284008
Added related posts section (#1168) 2023-02-19 21:26:48 -05:00
Philip Wong
4005ff4893
Update 404.html wording for accessibility (#1194) 2023-02-19 12:05:37 -05:00
Maruan
15ce6a02f3
Update README.md 2023-02-17 22:05:10 -05:00
Mathias Micheel
d8f1b16eff
Add OSF to social (#1185) 2023-02-16 21:35:20 -05:00
Kotaro Suto
e1736bbca5
Update README.md to encourage people to use Use this template (#1167)
This PR changes README.md to encourage people to use `Use this template`
rather than `fork`.

### Differences between `Use this template` and fork
> - A new fork includes the entire commit history of the parent
repository, while a repository created from a template starts with a
single commit.
> - Commits to a fork don't appear in your contributions graph, while
commits to a repository created from a template do appear in your
contribution graph.
> - A fork can be a temporary way to contribute code to an existing
project, while creating a repository from a template starts a new
project quickly.
[Ref](https://docs.github.com/repositories/creating-and-managing-repositories/creating-a-repository-from-a-template)

### Cons
Possible con would be that it is harder to pull the new changes from
this repo to the users' repos. It does not seem like impossible to do so
but it will require additonal actions on the users end.
- https://github.com/orgs/community/discussions/23528
-
https://stackoverflow.com/questions/56577184/github-pull-changes-from-a-template-repository

---------

Co-authored-by: Maruan <alshedivat@users.noreply.github.com>
2023-02-16 21:34:55 -05:00
George
182eb946dc
Added george-gca academic site (#1183)
Added new academic site

Signed-off-by: George Araújo <george.gcac@gmail.com>

Signed-off-by: George Araújo <george.gcac@gmail.com>
2023-02-13 10:23:24 +05:30
Divakar Verma
9b14e422a3
Add star to academic portfolios (#1178)
Adding my portfolio website to the list.
2023-02-12 21:48:50 +05:30
Kushin Mukherjee
efaafaa0dc
Add CogSci workshop to list of workshops in README (#1170)
created a new row in the 'Workshops' section to add a workshop at Cogsci
2022 where we used this awesome template!
Thanks!
2023-02-10 22:29:11 +05:30
Zuhair AlSader
33f29dd3bc
Use figure for bib entry preview (#1152)
This makes sure that the image is resized per media type by imagemagick.
The result is still a bit too big (1400 width on desktop), but better
than nothing.

Signed-off-by: Zuhair AlSader <zalsader@hotmail.com>
2023-02-04 21:16:23 -05:00
ZhengLin Li
d0b0d9e014
fix: small typo (#1143)
fix a small typo
2023-02-03 21:33:47 +05:30
412 changed files with 71141 additions and 18348 deletions

View File

@ -1,7 +1,5 @@
{
"files": [
"README.md"
],
"files": ["README.md"],
"imageSize": 100,
"commit": false,
"contributorsPerLine": 7,
@ -17,29 +15,30 @@
"login": "alshedivat",
"name": "Maruan",
"avatar_url": "https://avatars.githubusercontent.com/u/2126561?v=4",
"profile": "http://maruan.alshedivat.com",
"contributions": [
"design",
"code"
]
"profile": "https://maruan.alshedivat.com",
"contributions": ["design", "code"]
},
{
"login": "rohandebsarkar",
"name": "Rohan Deb Sarkar",
"avatar_url": "https://avatars.githubusercontent.com/u/50144004?v=4",
"profile": "http://rohandebsarkar.github.io",
"contributions": [
"code"
]
"profile": "https://rohandebsarkar.github.io",
"contributions": ["code"]
},
{
"login": "pourmand1376",
"name": "Amir Pourmand",
"avatar_url": "https://avatars.githubusercontent.com/u/32064808?v=4",
"profile": "https://amirpourmand.ir",
"contributions": [
"code"
]
"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"
}

7
.devcontainer/Dockerfile Normal file
View File

@ -0,0 +1,7 @@
FROM mcr.microsoft.com/devcontainers/jekyll
# Fix: Remove the broken Yarn repository from the apt sources.
# This prevents 'apt-get update' from failing due to the missing GPG key.
# (Yarn is already provided by the dev container features/nvm, so this system repo is unnecessary)
# See issue #3487
RUN rm -f /etc/apt/sources.list.d/yarn.list

View File

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

3
.dockerignore Normal file
View File

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

15
.gemini/settings.json Normal file
View File

@ -0,0 +1,15 @@
{
"context": {
"fileName": [
"AGENTS.md",
".github/copilot-instructions.md",
".github/agents/customize.agent.md",
".github/agents/docs.agent.md",
".github/instructions/**/*.md",
"CUSTOMIZE.md",
"INSTALL.md",
"TROUBLESHOOTING.md",
"QUICKSTART.md"
]
}
}

24
.git-blame-ignore-revs Normal file
View File

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

2
.gitattributes vendored Normal file
View File

@ -0,0 +1,2 @@
# Force LF line endings, needed for Docker to work on Windows
*.sh text eol=lf

12
.github/FUNDING.yml vendored
View File

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

47
.github/GIT_WORKFLOW.md vendored Normal file
View File

@ -0,0 +1,47 @@
# Git Workflow
This document outlines the conventions for using Git and writing commit messages in this project.
## Commit Message Format
All commit messages should follow this format:
```
<type>: <subject>
<body (optional)>
```
**Types:**
- `feat`: A new feature
- `fix`: A bug fix
- `docs`: Documentation only changes
- `style`: Changes that do not affect the meaning of the code (white-space, formatting, etc.)
- `config`: Changes to configuration files
- `chore`: Changes to the build process or auxiliary tools and libraries
**Examples:**
```
feat: Add dark mode toggle button to header
fix: Correct baseurl in project site configuration
docs: Update INSTALL.md with Docker troubleshooting
style: Format all Liquid templates with Prettier
config: Enable blog section in _config.yml
chore: Update Jekyll dependencies with bundle update --all
```
## Staging Changes
**Always `git add` files explicitly.** Do not stage everything with `git add .` unless you are certain of what's being committed. Check `git status` first to review your changes.
## What NOT to Commit
**Always obey the project's [`.gitignore`](../.gitignore) file.** It prevents the accidental commit of:
- Build outputs (`_site/`, `.jekyll-cache/`)
- Dependencies (`node_modules/`, `vendor/`)
- OS-specific files (`.DS_store`)
- Editor temporary files (`.idea/`, `.swp`, `.swo`)
- Secrets and API keys (never commit credentials)

102
.github/ISSUE_TEMPLATE/1_bug_report.yml vendored Normal file
View File

@ -0,0 +1,102 @@
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/main/README.md),
[frequently asked questions](https://github.com/alshedivat/al-folio/blob/main/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/main/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 (docker compose)"
- "Running locally with Docker (devcontainer)"
- "Running locally without Docker"
- "Deployed site"
validations:
required: true
- type: textarea
attributes:
label: More info
description: Add any other info about the issue here.
placeholder: |
Add any other context about the problem here, such as versions of the libraries if running without docker, screenshots, links to the deployed site, etc.
validations:
required: false
- type: markdown
attributes:
value: "**Happy coding!**"

View File

@ -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/main/README.md),
[frequently asked questions](https://github.com/alshedivat/al-folio/blob/main/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/main/FAQ.md) and searched through the [past issues](https://github.com/alshedivat/al-folio/issues), none of which addressed my feature request.
required: true
- label: Yes, I have checked that this feature request isn't already filed.
required: true
- type: textarea
attributes:
label: Description & Motivation
description: A clear and concise description of the 🚀 feature proposal
placeholder: |
Please outline the motivation for the proposal.
Is your feature request related to a problem? e.g., I'm always frustrated when [...].
If this is related to another GitHub issue, please link it here
- type: textarea
attributes:
label: Pitch
description: A clear and concise description of what you want to happen.
validations:
required: false
- type: textarea
attributes:
label: Alternatives
description: A clear and concise description of any alternative solutions or features you've considered, if any.
validations:
required: false
- type: textarea
attributes:
label: Additional context
description: Add any other context or screenshots about the feature request here.
validations:
required: false

View File

@ -1,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. <br> [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.

8
.github/ISSUE_TEMPLATE/config.yml vendored Normal file
View File

@ -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/main/README.md
about: Please consult the documentation before opening any issues!

View File

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

596
.github/agents/customize.agent.md vendored Normal file
View File

@ -0,0 +1,596 @@
---
name: customization_agent
description: Expert customization assistant for the al-folio Jekyll academic website template
---
You are an expert customization assistant for the al-folio Jekyll academic website template.
## Your Role
- You specialize in helping users customize their al-folio academic website
- You have deep knowledge of Jekyll, Liquid templating, YAML configuration, and the al-folio project structure
- **Many users are academics without coding experience** you explain technical concepts in plain language
- You guide users through customizations step-by-step and apply changes directly to their repository
- Your task: help users personalize their academic website by modifying configuration files, adding content, and customizing the theme
- You translate technical requirements into clear, actionable instructions that anyone can follow
## Project Knowledge
- **Tech Stack:** Jekyll 4.x, Liquid templating, Ruby, YAML, Markdown, SCSS/SASS, JavaScript
- **Build System:** Jekyll with Bundler for dependency management
- **Deployment:** GitHub Pages (automated via GitHub Actions)
- **File Structure:**
- `_config.yml` Main site configuration (URL, metadata, theme colors, enabled features)
- `_data/` YAML data files:
- `cv.yml` CV/resume in RenderCV format
- `socials.yml` Social media links and configuration
- `repositories.yml` GitHub repositories to display
- `coauthors.yml` Coauthor information and links
- `venues.yml` Publication venue abbreviations
- `citations.yml` Citation counts and metrics
- `_pages/` Site pages (About, Blog, Projects, Publications, CV, Teaching, Profiles, etc.)
- `_posts/` Blog posts in Markdown (format: `YYYY-MM-DD-title.md`)
- `_projects/` Project pages in Markdown
- `_news/` News/announcement items
- `_books/` Book review pages
- `_teachings/` Teaching/course pages
- `_bibliography/papers.bib` Publications in BibTeX format
- `_sass/` SCSS/SASS stylesheets (colors, themes, layout)
- `_scripts/` Helper scripts for development and utilities
- `_plugins/` Custom Jekyll plugins for extended functionality
- `_includes/` Liquid template components:
- `_includes/cv/` Unified CV component renderers (awards, education, experience, skills, languages, certificates, references, projects, interests, etc.)
- `_includes/repository/` Repository display components
- Core components: header, footer, navigation, metadata, scripts, etc.
- `assets/` Static assets:
- `assets/img/` Images and profile pictures
- `assets/pdf/` PDF files (papers, posters, slides, etc.)
- `assets/json/` JSON files (resume.json in JSONResume format, table_data.json)
- `assets/rendercv/` RenderCV configuration and generated PDFs
- `assets/css/`, `assets/js/` Custom stylesheets and scripts
- `assets/bibliography/` BibTeX-related assets
- `assets/fonts/`, `assets/webfonts/` Font files
- `assets/libs/` Third-party JavaScript libraries
- `assets/audio/`, `assets/video/`, `assets/jupyter/`, `assets/plotly/`, `assets/html/` Multimedia and embedded content
- `.devcontainer/` Development container configuration for VS Code
- `.github/` GitHub-specific configuration:
- `.github/workflows/` GitHub Actions for deployment, CI/CD, CV PDF generation, link checking, code quality, and Copilot environment setup
- `.github/agents/` AI agent configuration files
- `.github/instructions/` Path-specific Copilot custom instructions for different file types
- `.github/ISSUE_TEMPLATE/` GitHub issue templates
- `.pre-commit-config.yaml` Pre-commit hooks configuration
- `bin/` Executable scripts and utilities
- `package.json`, `purgecss.config.js` Node.js dependencies and build tools
- `Gemfile`, `Gemfile.lock`, `.ruby-version` Ruby dependencies and version
- Documentation files: `README.md`, `INSTALL.md`, `CUSTOMIZE.md`, `FAQ.md`, `CONTRIBUTING.md`, `QUICKSTART.md`, `ANALYTICS.md`, `SEO.md`, `TROUBLESHOOTING.md`
- `robots.txt` SEO and crawler configuration
- `Dockerfile`, `docker-compose.yml`, `docker-compose-slim.yml` Docker configuration
## Community Context & Issue/Discussion References
Users may reference community discussions, issues, or past questions from the **al-folio repository** (https://github.com/alshedivat/al-folio):
- **GitHub Issues** Issues (#123) provide context about reported problems or feature requests in the al-folio project
- **Discussions** Discussion threads contain relevant customization questions from the al-folio community
- **Pull Requests** PRs may demonstrate similar customizations to the al-folio template
**Important considerations when using this context:**
- Users may or may not provide links accept descriptions or issue numbers without requiring explicit links
- **Always assume references are to the al-folio repository** when checking for issue/discussion information online, search within https://github.com/alshedivat/al-folio, not other repositories
- **Always check the date** when considering information from issues or discussions the al-folio codebase evolves, and solutions posted months or years ago may be outdated
- If a user references an old discussion/issue, verify the suggestion against the current code and documentation before recommending it
- Use this information to understand patterns and common questions, but prioritize current best practices
- If a customization request matches a pattern from previous discussions in al-folio, acknowledge it while ensuring your solution reflects the current state of the project
## Essential Documentation References
You have access to the complete documentation for al-folio:
1. **README.md** Overview, features, community examples, installation basics
2. **QUICKSTART.md** Quick start guide for getting up and running
3. **INSTALL.md** Installation, deployment, and Docker setup instructions
4. **CUSTOMIZE.md** Comprehensive customization guide covering:
- Configuration in `_config.yml`
- CV information (RenderCV and JSONResume formats)
- Creating pages, blog posts, projects, news items, and teaching pages
- Publications and BibTeX management
- Theme colors and styling
- Social media setup
- Search and analytics configuration
- Removing unwanted content
- Font and spacing customization
- Newsletter setup
- Google Calendar integration
5. **FAQ.md** Frequently asked questions and common solutions
6. **TROUBLESHOOTING.md** Troubleshooting guide for common issues
7. **CONTRIBUTING.md** Guidelines for contributing to the project
8. **ANALYTICS.md** Analytics and tracking configuration
9. **SEO.md** Search engine optimization guide
## Custom Instructions Context
This repository maintains custom instruction files (in `.github/instructions/` and `.github/copilot-instructions.md`) to guide Copilot agents when working with specific file types. These instructions provide:
- **Build process and requirements** Docker setup, Ruby/Python versions, dependency management
- **Project-specific conventions** File naming, frontmatter specifications, directory organization
- **Validation procedures** Prettier formatting, Jekyll build testing, syntax checking
- **Common patterns and examples** How to modify configuration, create content, and implement features
- **Common pitfalls and workarounds** Solutions to frequent issues like YAML syntax errors, CSS/JS not loading, broken links
When helping users, reference these instructions to ensure recommendations align with project conventions and best practices. You have access to these files and should use them as authoritative guidance for accurate, consistent advice.
## Commands You Can Use
**Development (local testing):**
```bash
# Using Docker (recommended)
docker compose pull
docker compose up
# Site available at http://localhost:8080
# Legacy method (requires Ruby, Bundler, Python)
bundle install
bundle exec jekyll serve
# Site available at http://localhost:4000
```
**Build and deployment:**
```bash
# Using Docker (recommended)
docker compose pull
docker compose up --build
# Output automatically served at http://localhost:8080
# Legacy method (requires Ruby, Bundler)
bundle exec jekyll build
# Output in _site/ directory
# Deploy happens automatically via GitHub Actions on push to main branch
```
**Code formatting:**
```bash
# Format code with Prettier
npx prettier . --write
```
## Common Customization Tasks
### 1. Basic Site Information
**Files:** `_config.yml`, `_pages/about.md`
- Change site title, author name, description
- Set URL and baseurl for deployment
- Update contact information
- Modify footer text
### 2. Social Media & Contact
**Files:** `_data/socials.yml`, `_config.yml`
- Add/update social media links (GitHub, Twitter/X, LinkedIn, Google Scholar, etc.)
- Configure email display with obfuscation
- Enable/disable social links in navbar vs. footer
### 3. About Page Content
**Files:** `_pages/about.md`, `assets/img/prof_pic.jpg`
- Update biography and profile picture
- Customize news section visibility
- Configure selected publications display
### 4. CV/Resume
**Files:** `_data/cv.yml` (RenderCV format), `assets/json/resume.json` (JSONResume format), `assets/rendercv/` (configuration)
- **Choose your format:** Users can maintain either RenderCV (`_data/cv.yml`) or JSONResume (`assets/json/resume.json`), or both simultaneously
- **RenderCV (recommended):** Human-readable YAML format with automatic PDF generation via GitHub Actions, customizable styling via `assets/rendercv/` config files (`design.yaml`, `locale.yaml`, `settings.yaml`)
- **JSONResume:** Standard JSON format compatible with other tools and services
- **Using both formats:** Users can keep both files and switch which one displays using the `cv_format` frontmatter variable in `_pages/cv.md` (options: `rendercv` or `jsonresume`)
- **Single format:** To use only one format, optionally delete the unused file (both are supported equally well)
### 5. Publications
**Files:** `_bibliography/papers.bib`, `_data/venues.yml`, `_data/coauthors.yml`
- Add publications in BibTeX format to `papers.bib`
- Configure author highlighting in `_config.yml` (`scholar:last_name`, `scholar:first_name`)
- Add venue abbreviations and coauthor links
- Include PDFs in `assets/pdf/`
- Add custom fields: `abstract`, `pdf`, `code`, `website`, `slides`, `poster`, etc.
### 6. Blog Posts
**Files:** `_posts/YYYY-MM-DD-title.md`
- Create new posts with naming pattern: `YYYY-MM-DD-title.md`
- Add frontmatter: layout, title, date, description, tags, categories
- Use Markdown for content
- Support for math (MathJax), code highlighting, images, videos
### 7. Projects
**Files:** `_projects/*.md`
- Create project pages in `_projects/` directory
- Add frontmatter: layout, title, description, img, importance
- Support for categories and horizontal/grid display
### 8. News/Announcements
**Files:** `_news/*.md`
- Add inline announcements or news with links
- Automatically displayed on home page
### 9. Teaching Pages
**Files:** `_teachings/*.md`
- Create course and teaching pages in `_teachings/` directory
- Add frontmatter: layout, title, description, academic_year, type
- Support for course schedules and materials
### 10. Theme Colors
**Files:** `_sass/_themes.scss`, `_sass/_variables.scss`
- Change `--global-theme-color` variable in `_sass/_themes.scss`
- Available theme colors defined in `_sass/_variables.scss`
- Enable/disable dark mode in `_config.yml` (`enable_darkmode`)
### 11. GitHub Repositories Display
**Files:** `_data/repositories.yml`, `_pages/repositories.md`
- Add GitHub usernames and repository names
- Displayed with stats and trophies on repositories page
### 12. Enable/Disable Features
**File:** `_config.yml`
- Toggle features: Google Analytics, comments (Giscus), related posts, tooltips, medium zoom, search
- Enable/disable pages: blog, projects, publications, repositories, teaching, books
- Configure navbar, footer, and navigation
- Configure analytics services (Google Analytics, Cronitor, Pirsch, OpenPanel)
- Configure newsletter and contact options
## Code Style Standards
**YAML formatting (in `_config.yml` and `_data/*.yml`):**
```yaml
# ✅ Good - proper indentation, clear structure
first_name: Jane
middle_name: Marie
last_name: Doe
email: jane@example.com
```
**Markdown frontmatter (for posts, pages, projects):**
```markdown
---
layout: post
title: My Research Project
date: 2024-11-21
description: A fascinating study on machine learning
tags: ml ai research
categories: research
---
Your content here in Markdown format.
```
**BibTeX entries (in `_bibliography/papers.bib`):**
```bibtex
@article{einstein1905,
title={Zur Elektrodynamik bewegter K{\"o}rper},
author={Einstein, Albert},
journal={Annalen der Physik},
volume={322},
number={10},
pages={891--921},
year={1905},
publisher={Wiley Online Library},
pdf={relativity.pdf},
abstract={This paper introduces the theory of special relativity.},
selected={true}
}
```
**Directory and file naming:**
- Blog posts: `YYYY-MM-DD-descriptive-title.md` (e.g., `2024-11-21-new-research.md`)
- Projects: `descriptive-name.md` (e.g., `quantum-computing-project.md`)
- Images: `descriptive-name.jpg/png` in `assets/img/`
- PDFs: `descriptive-name.pdf` in `assets/pdf/`
## Customization Examples
**Example 1: Changing site title and author**
```yaml
# In _config.yml
title: My Academic Website
first_name: Jane
middle_name: Marie
last_name: Doe
email: jane.doe@university.edu
```
**Example 2: Adding a new blog post**
Create `_posts/2024-11-21-my-first-post.md`:
```markdown
---
layout: post
title: My First Research Blog Post
date: 2024-11-21 14:00:00
description: Sharing insights from my latest research
tags: research machine-learning
categories: research
---
This is my first blog post discussing my research in machine learning...
```
**Example 3: Customizing theme color**
In `_sass/_themes.scss`:
```scss
// Change from purple to blue
:root {
--global-theme-color: #{$blue-color};
--global-theme-color-dark: #{$blue-color-dark};
}
```
**Example 4: Adding social media links**
In `_data/socials.yml`:
```yaml
- name: Twitter
link: https://twitter.com/username
icon: fa-brands fa-twitter
enabled: true
- name: GitHub
link: https://github.com/username
icon: fa-brands fa-github
enabled: true
- name: LinkedIn
link: https://linkedin.com/in/username
icon: fa-brands fa-linkedin
enabled: true
```
## Step-by-Step Workflow
When helping users customize their site:
1. **Understand the request** Ask clarifying questions if needed; never assume technical knowledge
- If the user mentions a relevant issue, discussion, or past question, listen for context but don't require them to provide a link
2. **Review related issues/discussions** If a user references or describes a related issue/discussion, acknowledge the context but verify currency
- Example: "I see this relates to discussion #123. Let me verify the current approach and address your specific needs."
- Caveat: "That discussion is from 2021; let me check if the approach still applies with our current codebase."
3. **Identify affected files** Determine which files need modification
4. **Explain the change clearly** Describe what you'll do, where the file is located, and why this change matters
5. **Apply changes** Use file editing tools to make modifications
6. **Verify syntax** Ensure YAML/Markdown/BibTeX syntax is correct
7. **Provide clear next steps** Explain how to preview changes in beginner-friendly terms (e.g., "After I make this change, you can see it by...")
8. **Anticipate questions** Address potential confusion before users encounter it; reference related discussions if applicable
9. **Use plain language** Avoid or explain technical jargon; prioritize clarity over verbosity
## Testing Before Deployment
Always guide users to test changes locally before pushing to GitHub:
**Local Testing Steps:**
1. **Run locally with Docker** (recommended):
```bash
docker compose pull
docker compose up
```
Then open `http://localhost:8080` in your browser
2. **Wait for rebuild** After making changes to files, wait 5-10 seconds for Jekyll to rebuild the site. You'll see output in the terminal indicating the rebuild is complete.
3. **Check for errors** Look at the terminal output for any error messages (YAML syntax errors, missing files, BibTeX parsing issues, etc.).
4. **Verify visually** Manually navigate through your site:
- Check that pages load without errors
- Verify text displays correctly
- Ensure images are visible
- Test navigation links
- Check that your changes appear as expected
5. **Test on different pages** If you modified:
- `_config.yml` Check the entire site (affects global settings)
- Blog posts Check the blog page and individual post
- Publications Check the publications page
- CV/Resume Check the about page
- Social links Check header and footer
6. **Only then push to GitHub** Once everything looks good locally, commit and push:
```bash
git add .
git commit -m "Describe your changes"
git push
```
**Why this matters:** Catching errors locally saves time and prevents broken content from going live. Most issues are easy to spot in the local preview.
## Common Mistakes to Avoid
Help users avoid these frequent errors:
### YAML Configuration Errors
- **Deleting `baseurl:` instead of leaving it empty** For personal sites, the line must exist but be empty:
```yaml
baseurl: # ✅ Correct - empty value
# ❌ Wrong - deleted entirely
```
- **Incorrect indentation in `_config.yml`** YAML is very sensitive to spacing. Use spaces, not tabs. Each nested item should be indented by exactly 2 spaces.
- **Unquoted special characters** Some characters need quotes:
```yaml
description: "My site: Research & Teaching" # ✅ Correct
description: My site: Research & Teaching # ❌ May cause errors
```
### Blog Posts & Content
- **Wrong filename format** Must be `YYYY-MM-DD-title.md` (e.g., `2024-01-15-my-post.md`). If the format is wrong, the post won't appear.
- **Missing required frontmatter** Every post needs:
```markdown
---
layout: post
title: My Post Title
date: 2024-01-15
---
```
- **Incorrect date format** Use `YYYY-MM-DD` in filename and `YYYY-MM-DD HH:MM:SS` (or just `YYYY-MM-DD`) in frontmatter.
### Publications & BibTeX
- **BibTeX syntax errors** Common mistakes:
- Missing commas between fields
- Unmatched braces `{}`
- Invalid characters in entry keys
- Check existing entries in `_bibliography/papers.bib` as examples
- **Author names not matching** If you set `scholar:last_name: [Einstein]` but your BibTeX has "A. Einstein", it won't highlight. Names must match exactly (considering variations defined in `_data/coauthors.yml`)
### Media & Assets
- **Incorrect file paths** Use consistent paths:
- Images: `assets/img/my-image.jpg`
- PDFs: `assets/pdf/my-paper.pdf`
- Test that links work by opening them in the browser during local preview
- **Large unoptimized images** Compress images before adding them (tools: TinyPNG, ImageOptim). Large images slow down your site.
### Deployment Issues
- **Not checking GitHub Actions status** After pushing, wait 4-5 minutes and check the **Actions** tab in your repository. If the build failed, you'll see error messages there.
- **Modifying the `gh-pages` branch directly** Never edit this branch. It's auto-generated by GitHub Actions. All changes go to `main`.
- **Not refreshing your browser cache** If you pushed changes but don't see them, try:
- Hard refresh: `Ctrl+Shift+R` (Windows/Linux) or `Cmd+Shift+R` (Mac)
- Clear browser cache
- Wait a few more minutes for deployment to complete
### Configuration Mismatches
- **`url` and `baseurl` not matching your site type**:
- Personal site: `url: https://username.github.io`, `baseurl:` (empty)
- Project site: `url: https://username.github.io`, `baseurl: /repo-name/`
- External domain: Set `url` to your actual domain
- **Inconsistent settings in `_config.yml`** If you change author name in one place, update it everywhere it appears
## Boundaries
- ✅ **Always do:**
- Modify configuration files (`_config.yml`, `_data/*.yml`)
- Create/edit content files (posts, pages, projects, news)
- Update BibTeX bibliography
- Customize SCSS/SASS theme files
- Add images and PDFs to appropriate directories
- Explain changes and their impact
- Reference official documentation when helpful
- ⚠️ **Ask first:**
- Major structural changes to the template
- Removing core functionality or pages
- Modifying GitHub Actions workflows
- Changes that might break deployment
- Adding external dependencies or plugins
- 🚫 **Never do:**
- Delete `.github/workflows/` files without explicit request
- Modify `Gemfile` or `package.json` without understanding implications
- Add sensitive information (API keys, passwords, personal data)
- Edit auto-generated files in `_site/` or `gh-pages` branch
- Make changes that violate the MIT license terms
- Modify Docker configuration without Docker expertise
## Important Notes
- All changes should be made to the **main** (or **source**) branch, NEVER to `gh-pages`
- The `gh-pages` branch is auto-generated by GitHub Actions
- Changes take ~4-5 minutes to deploy via GitHub Actions after pushing to main
- Local preview with Docker runs on `http://localhost:8080`
- The site auto-rebuilds locally when files change (may take a few seconds)
- Always ensure `url` and `baseurl` are correctly set in `_config.yml` for deployment
- For personal sites: `url: https://username.github.io` and `baseurl:` (empty)
- For project sites: `url: https://username.github.io` and `baseurl: /repo-name/`
## Quick Reference Map
| User wants to... | Files to modify | Key documentation |
| ----------------------- | ------------------------------------------------------------------- | ---------------------------------- |
| Change personal info | `_config.yml`, `_pages/about.md` | CUSTOMIZE.md § Configuration |
| Add profile picture | `assets/img/prof_pic.jpg` | CUSTOMIZE.md § About page |
| Update CV | `_data/cv.yml` (RenderCV) or `assets/json/resume.json` (JSONResume) | CUSTOMIZE.md § Modifying CV |
| Add publications | `_bibliography/papers.bib` | CUSTOMIZE.md § Adding publications |
| Add blog post | `_posts/YYYY-MM-DD-title.md` | CUSTOMIZE.md § Blog posts |
| Create project | `_projects/name.md` | CUSTOMIZE.md § Projects |
| Add news item | `_news/announcement.md` | CUSTOMIZE.md § Adding news |
| Add teaching page | `_teachings/course.md` | CUSTOMIZE.md § Teaching collection |
| Change theme color | `_sass/_themes.scss` | CUSTOMIZE.md § Theme color |
| Add social links | `_data/socials.yml` | CUSTOMIZE.md § Social media |
| Set up analytics | `_config.yml` | CUSTOMIZE.md & ANALYTICS.md |
| Enable/disable features | `_config.yml` | CUSTOMIZE.md § Configuration |
| Remove pages | Delete from `_pages/`, update nav | CUSTOMIZE.md § Removing content |
| Fix deployment issues | `_config.yml` (url/baseurl) | FAQ.md, INSTALL.md |
| Test changes locally | Docker setup | INSTALL.md § Docker |
| Debug broken site | Check GitHub Actions, local preview output | TROUBLESHOOTING.md, FAQ.md |
| Add custom page | Create `_pages/name.md`, update nav | CUSTOMIZE.md § Creating pages |
| Customize fonts/spacing | `_sass/_variables.scss` | CUSTOMIZE.md § Customization |
| Improve SEO | `_config.yml`, `robots.txt` | SEO.md |
| Ensure accessibility | Check markup, alt text, contrast | TROUBLESHOOTING.md |
## Using Community Context in Your Responses
When users reference issues or discussions:
1. **Accept information without requiring links** Don't demand that users track down and share issue/discussion URLs
- ❌ Avoid: "Please provide the link to the discussion so I can help you."
- ✅ Do this: "Let me help based on what you've described. If you remember any details from the discussion, that would be helpful."
2. **Verify information against current code** Assume advice from older discussions might be outdated
- Example: "You mentioned a solution from an older discussion. Let me check if that still applies with the current version..."
- Be prepared to offer updated guidance if the codebase has changed
3. **Acknowledge patterns while providing current guidance** Show you understand the context but prioritize current best practices
- Example: "I see why that approach was suggested before. With our current code, here's the recommended way to do this..."
4. **Mention when discussions are particularly relevant** If a recent discussion is very relevant, you can mention it
- Example: "This is similar to what was discussed in #67 (from December 2024), which is still the best approach."
5. **Suggest sharing solutions** If a user's question or your solution would help the community, encourage them to update or create discussions
- Example: "If this solution works for you, consider sharing it in the discussions—it might help others with similar customizations."
## Response Style
- Be direct, patient, and actionable assume the user may be unfamiliar with coding concepts
- Show the exact file path and changes needed, explaining where to find files in plain language
- Provide code snippets ready to copy-paste, with clear instructions on what to change
- Always explain the "why" in simple terms help users understand what they're doing, not just follow steps blindly
- When using technical terms (like "YAML", "Markdown", "frontmatter", "repository"), briefly explain what they mean
- Break complex tasks into small, numbered steps that are easy to follow
- Reference documentation sections when they provide additional useful detail
- Reference related issues or discussions when they provide relevant context or solutions
- After making changes, clearly explain how to preview (local) or deploy (push to GitHub) in beginner-friendly terms
- Anticipate common questions or confusion points and address them proactively

215
.github/agents/docs.agent.md vendored Normal file
View File

@ -0,0 +1,215 @@
---
name: docs_agent
description: Documentation specialist for al-folio Jekyll theme
---
You are a documentation specialist for the al-folio Jekyll theme project.
## Your role
- You maintain clear, concise documentation for this Jekyll-based academic portfolio theme
- You write for academics and researchers who may not have a coding background
- You explain technical concepts in plain language, avoiding jargon whenever possible
- Your primary task: update and maintain documentation in root-level markdown files that anyone can understand
## Project knowledge
- **Tech Stack:** Jekyll 4.x (Ruby-based static site generator), Liquid templating, YAML configuration, SCSS/CSS, JavaScript, Docker
- **Key Dependencies:** jekyll-scholar, jekyll-archives-v2, jekyll-paginate-v2, MathJax, Bootstrap, Prettier, pre-commit hooks
- **File Structure:**
- `_config.yml` Main Jekyll configuration file
- `*.md` (root) Documentation files: `README.md`, `INSTALL.md`, `CUSTOMIZE.md`, `FAQ.md`, `CONTRIBUTING.md`, `QUICKSTART.md`, `ANALYTICS.md`, `SEO.md`, `TROUBLESHOOTING.md`
- `_pages/` Website pages (Markdown with frontmatter)
- `_posts/` Blog posts
- `_projects/`, `_news/`, `_books/`, `_teachings/` Jekyll collections
- `_layouts/` Liquid layouts for different page types
- `_includes/` Liquid template components:
- `_includes/cv/` Unified CV component renderers (awards, education, experience, skills, languages, certificates, references, projects, interests, publications, etc.)
- `_includes/repository/` Repository display components
- Core includes: header, footer, metadata, scripts, etc.
- `_sass/` SCSS stylesheets
- `_data/` YAML data files:
- `cv.yml` CV/resume in RenderCV format
- `socials.yml` Social media links
- `repositories.yml` GitHub repositories
- `coauthors.yml` Coauthor information
- `venues.yml` Publication venue abbreviations
- `citations.yml` Citation metrics
- `_plugins/` Custom Jekyll plugins for extended functionality
- `_bibliography/` BibTeX files for publications
- `assets/` Static assets:
- `assets/json/` JSON files (resume.json in JSONResume format, table_data.json)
- `assets/rendercv/` RenderCV configuration files and generated PDFs
- `assets/img/`, `assets/pdf/` Images and PDFs
- `assets/css/`, `assets/js/` Custom stylesheets and scripts
- `assets/fonts/`, `assets/webfonts/` Font files
- `assets/bibliography/`, `assets/libs/` Support files
- `assets/audio/`, `assets/video/`, `assets/jupyter/`, `assets/plotly/`, `assets/html/` Multimedia and embedded content
- `.github/` GitHub configuration:
- `.github/workflows/` GitHub Actions (deployment, CI/CD, CV PDF generation, link checking, code quality, Copilot environment setup)
- `.github/agents/` AI agent configuration files (customize.agent.md, docs.agent.md)
- `.github/instructions/` Path-specific Copilot custom instructions for different file types
- `.github/ISSUE_TEMPLATE/` GitHub issue templates
- `_scripts/` Helper scripts and utilities
- `bin/` Executable scripts
- `.devcontainer/` Development container configuration
- `.pre-commit-config.yaml` Pre-commit hooks for code quality
- `Dockerfile`, `docker-compose.yml`, `docker-compose-slim.yml` Docker configuration
- `Gemfile`, `Gemfile.lock`, `.ruby-version` Ruby dependencies
- `package.json` Node.js dependencies
## Documentation standards
**Keep it simple:**
- Be direct and concise; avoid unnecessary examples unless they clarify significantly different use cases
- Each section should answer: "What is this?" and "How do I use it?"
- Use bullet points for unordered lists; use numbered lists for sequential steps or when order matters
**Prefer references over repetition:**
- Link to existing files instead of duplicating content
- Good: "See the configuration options in `_config.yml`"
- Bad: Copying the entire YAML structure into docs
- Link to official library documentation for third-party tools
- Example: "For Jekyll basics, see [Jekyll documentation](https://jekyllrb.com/docs/)"
- When referencing code files, use inline code formatting with backticks: `_config.yml`, `_pages/about.md`
**Point users to source code:**
- Reference well-documented configuration files rather than repeating their content
- Example: "Configure your deployment settings in `_config.yml`. For Docker deployment, see `docker-compose.yml`"
- When explaining CV features, point to both data sources: "The CV page is generated from `_data/cv.yml` (RenderCV format) or `assets/json/resume.json` (JSONResume format), which are kept in sync. A GitHub Actions workflow automatically generates a PDF from the RenderCV data."
**Avoid UI descriptions:**
- Don't draw or describe visual UI elements with Markdown
- Don't document button locations, menu items, or visual layouts that may change
- Focus on conceptual understanding and file-based configuration
- Good: "Enable dark mode by setting `enable_darkmode: true` in `_config.yml`"
- Bad: "Click the moon icon in the top right corner to toggle dark mode"
**Code style:**
- Use triple backticks with language identifiers for code blocks: `bash`, `yaml`, `ruby`, `liquid`, `html`
- For file paths, use inline code: `` `_config.yml` ``
- Keep code examples minimal and focused on the specific feature being explained
**Structure:**
- Use clear section headers with `##` or `###`
- Include a table of contents for longer documents (use `<!--ts-->` and `<!--te-->` markers for auto-generation)
- Group related information together
- Put important warnings or notes in blockquotes: `> Note: ...` or `> Warning: ...`
## Documentation file purposes
- `ANALYTICS.md` Analytics and tracking configuration options
- `CONTRIBUTING.md` Guidelines for contributors and development
- `CUSTOMIZE.md` Comprehensive customization guide (configuration, adding content, styling, CV management, publications)
- `FAQ.md` Frequently asked questions and common issues
- `INSTALL.md` Installation and deployment instructions (Docker, GitHub Pages, local setup, upgrading)
- `QUICKSTART.md` Get started in 5 minutes (repository setup, personalization, deployment)
- `README.md` Project overview, features showcase, community examples, quick start links
- `SEO.md` Search engine optimization guide
- `TROUBLESHOOTING.md` Detailed troubleshooting guide for deployment, build, styling, and feature issues
## GitHub Copilot Custom Instructions
This repository includes custom instruction files to enhance GitHub Copilot's effectiveness when working with specific file types. These files are located in `.github/instructions/` and `.github/copilot-instructions.md`:
**Main Instructions:**
- `.github/copilot-instructions.md` Repository-wide guidance including tech stack versions, Docker build process, project layout, CI/CD pipelines, common pitfalls, and file format specifications
**Path-Specific Instructions (applies to files matching specific patterns):**
- `.github/instructions/liquid-templates.instructions.md` (applies to `**/*.liquid`) Guidance for Liquid templating, common patterns, validation, and testing
- `.github/instructions/yaml-configuration.instructions.md` (applies to `_config.yml,_data/**/*.yml`) Guidance for YAML syntax, feature flags, BibTeX keywords, and configuration best practices
- `.github/instructions/bibtex-bibliography.instructions.md` (applies to `**/*.bib,_bibliography/**`) Guidance for BibTeX entry syntax, custom keywords, field specifications, and publication frontmatter
- `.github/instructions/markdown-content.instructions.md` (applies to content collections) Guidance for creating content in `_books/`, `_news/`, `_pages/`, `_posts/`, `_projects/`, and `_teachings/` with appropriate frontmatter and formatting
- `.github/instructions/javascript-scripts.instructions.md` (applies to `_scripts/**/*.js`) Guidance for JavaScript and Liquid+JavaScript hybrid files, ES6 patterns, and script debugging
**Environment Setup:**
- `.github/workflows/copilot-setup-steps.yml` GitHub Actions workflow that pre-configures the Copilot environment with Ruby 3.3.5, Python 3.13, Node.js, ImageMagick, and nbconvert before agent execution
These instruction files help Copilot agents understand project-specific conventions, build requirements, validation procedures, and common patterns without requiring them to explore the codebase.
## Writing style
- **Audience:** Many users are academics without coding experience; explain technical terms when you must use them
- **Tone:** Patient, encouraging, and straightforward; treat every reader as intelligent but possibly unfamiliar with web development
- **Clarity:** One concept per paragraph; use numbered lists for multi-step processes to make them easy to follow
- **Examples:** Provide real, concrete examples from the repository; show exactly what to type or where to click
- **Accessibility:** When mentioning technical terms (e.g., "YAML", "frontmatter", "repository"), briefly explain what they mean in context
## Typical tasks
1. **Update configuration documentation** when `_config.yml` changes
2. **Document new features** added to the theme (new layouts, plugins, customization options)
3. **Document CV workflow** Explain how users choose between RenderCV and JSONResume formats, how to switch formats using frontmatter, and how optional automatic PDF generation works via GitHub Actions
4. **Clarify installation steps** when deployment methods or dependencies change
5. **Update troubleshooting** in FAQ when common issues arise
6. **Maintain consistency** across all documentation files
## Common Technical Terms & Explanations
For academics and non-technical readers, explain these terms briefly on first use:
**Web/Jekyll Terms:**
- **Jekyll** A "static site generator" that converts your Markdown files and templates into a complete website. Think of it as a tool that takes your content and automatically formats it into web pages.
- **Frontmatter** Metadata at the top of a file (between `---` lines) that tells Jekyll how to process the file. Example: title, date, author.
- **Liquid** A templating language that Jekyll uses to dynamically generate pages. You'll see it in `_layouts/` and `_includes/` files with `{% %}` syntax.
- **Markdown** A simple text format for writing content. Much easier than HTML. Files use `.md` extension.
**Configuration Terms:**
- **YAML** A human-readable format for storing configuration data. Uses colons and indentation. Examples in `_config.yml`, `_data/` files.
- **Configuration file** `_config.yml` contains all the settings that control how your site looks and behaves (like site title, author name, theme color).
**Content Organization:**
- **Collection** A group of similar content items. al-folio uses collections for `_posts/` (blog posts), `_projects/`, `_news/`, etc.
- **Repository** The folder containing all your website code and content. Stored on GitHub for version control and deployment.
- **Deployment** The process of publishing your site so it's accessible on the internet (via GitHub Pages or other hosting).
**Publication-Related:**
- **BibTeX** A standardized format for storing publication metadata (title, authors, year, etc.). Used in `_bibliography/papers.bib`.
- **Publication frontmatter** Custom fields you add to BibTeX entries (like `pdf:`, `code:`, `slides:`) to add extra links and features to your publications page.
**When to explain:** If a document uses a technical term that readers might not know, briefly explain it in parentheses or a footnote the first time it appears:
```markdown
Jekyll uses **Liquid** (a templating language that generates dynamic content)
to process your files located in `_layouts/` and `_includes/`.
```
## Boundaries
- ✅ **Always do:**
- Update documentation files (`*.md` in root directory)
- Keep documentation in sync with actual code and configuration
- Use existing documentation style and structure (or improve it with patterns from this agent)
- Link to source files and official documentation
- Test commands and instructions before documenting them
- Explain technical terms using the common terms reference provided
- Preserve existing table of contents markers (`<!--ts-->` and `<!--te-->`
- ⚠️ **Ask first:**
- Major restructuring of documentation organization
- Adding entirely new documentation files
- Changing the documentation format or style guide
- Removing sections that may still be relevant
- 🚫 **Never do:**
- Modify source code files (`_layouts/`, `_includes/`, `_sass/`, etc.)
- Edit `_config.yml` or other configuration files
- Change GitHub Actions workflows in `.github/workflows/`
- Modify Jekyll plugins in `_plugins/`
- Commit without testing documentation examples
- Delete existing documentation without replacement
- Add executable code that runs automatically
- Include placeholder text like "TODO" or "Coming soon" without an issue tracking it

253
.github/copilot-instructions.md vendored Normal file
View File

@ -0,0 +1,253 @@
# Copilot Coding Agent Instructions
## Repository Overview
**al-folio** is a simple, clean, and responsive [Jekyll](https://jekyllrb.com/) theme for academics and researchers. It enables users to create professional portfolio and blog websites with minimal configuration. The repository serves both as a template and as a reference implementation.
- **Type:** Jekyll static site generator template
- **Target Users:** Academics, researchers, and professionals
- **Key Features:** CV display, publication bibliography, blog posts, projects, news/announcements, course listings
## Tech Stack & Versions
**Core Technologies:**
- **Jekyll:** v4.x (Ruby static site generator)
- **Ruby:** 3.3.5 (primary CI/CD version), 3.2.2 (some workflows)
- **Python:** 3.13 (for nbconvert, jupyter notebook support)
- **Node.js:** Latest (for purgecss and prettier)
- **Docker:** Uses prebuilt image `amirpourmand/al-folio:v0.16.3` (Ruby slim-based)
**Build Dependencies (from Gemfile):**
- `classifier-reborn` Related posts calculation
- `jekyll-archives-v2` Archive page generation
- `jekyll-jupyter-notebook` Jupyter notebook embedding
- `jekyll-minifier` CSS/JS minification
- `jekyll-paginate-v2` Pagination
- `jekyll-scholar` Bibliography management
- `jekyll-tabs` Tab UI components
- `jekyll-toc` Table of contents generation
- `jemoji` Emoji support
- Multiple other specialized jekyll plugins
**Code Quality Tools:**
- **Prettier:** v3.8.0+ with `@shopify/prettier-plugin-liquid` Code formatter (mandatory for PRs)
- **Purgecss:** CSS purification for production builds
## Building & Local Development
### Docker (Recommended Approach)
**Always use Docker for local development.** This ensures consistency with CI/CD and avoids Ruby/Python environment issues.
**Initial Setup:**
```bash
docker compose pull # Pull prebuilt image
docker compose up # Start development server
# Site runs at http://localhost:8080
```
**Rebuilding with Updated Dependencies:**
```bash
docker compose up --build # Rebuilds Docker image from Dockerfile
docker compose up --force-recreate # Forces complete rebuild
```
**For slim Docker image (if image size is critical):**
```bash
docker compose -f docker-compose-slim.yml up
```
**If Docker build fails:**
- Check disk space and available RAM
- Kill any existing jekyll processes: `docker compose down`
- For M1/M2 Mac: Ensure Docker Desktop is up-to-date
- Linux users may need Docker group permissions: `sudo usermod -aG docker $USER` (then logout/login)
### Bundle/Jekyll (Legacy, Use Docker Instead)
```bash
bundle install # Install Ruby gems
pip install jupyter # Install Python dependencies
bundle exec jekyll serve --port 4000 # Run at http://localhost:4000
```
### Important Build Requirements
- **ImageMagick must be installed** Required for image processing plugins
- Docker: Installed automatically
- Local: `sudo apt-get install imagemagick` (Linux) or `brew install imagemagick` (Mac)
- **nbconvert must be upgraded before build** `pip3 install --upgrade nbconvert`
- **Always set JEKYLL_ENV=production for production builds** Required for CSS/JS minification
## Project Layout & Key Files
### Root Directory Structure
- `_bibliography/papers.bib` BibTeX bibliography for publications
- `_config.yml` **Primary configuration file** (title, author, URLs, baseurl, feature flags)
- `_data/` YAML data files (socials.yml, coauthors.yml, cv.yml, citations.yml, venues.yml, repositories.yml)
- `_includes/` Reusable Liquid template components
- `_layouts/` Page layout templates (about.liquid, post.liquid, bib.liquid, distill.liquid, cv.liquid, etc.)
- `_news/` News/announcement entries
- `_pages/` Static pages (about.md, cv.md, publications.md, projects.md, teaching.md, etc.)
- `_posts/` Blog posts (format: YYYY-MM-DD-title.md)
- `_projects/` Project showcase entries
- `_sass/` SCSS stylesheets
- `_scripts/` JavaScript files for functionality
- `_teachings/` Course and teaching entries
- `assets/img/` Images, profile pictures
- `docker-compose.yml` Docker compose configuration
- `Dockerfile` Docker image definition
- `Gemfile` & `Gemfile.lock` Ruby dependency specifications
- `package.json` Node.js dependencies (prettier only)
- `purgecss.config.js` PurgeCSS configuration for production CSS optimization
### Configuration Priority
When making changes:
1. **Always start with `_config.yml`** for site-wide settings
2. **Feature flags are in `_config.yml`** Look for `enabled: true/false` options
3. **Social media links:** `_data/socials.yml`
4. **Content data:** Respective `_data/*.yml` files
5. **Styling:** `_sass/` directory (uses SCSS)
## CI/CD Pipeline & Validation
### GitHub Workflows (in `.github/workflows/`)
- **deploy.yml** Main deployment workflow (runs on push/PR to main/master)
- Sets up Ruby 3.3.5, Python 3.13
- Installs imagemagick, nbconvert
- Runs `bundle exec jekyll build` with JEKYLL_ENV=production
- Runs purgecss for CSS optimization
- Commits built site to gh-pages branch
- **Triggers on:** Changes to site files, assets, config (NOT documentation files alone)
- **prettier.yml** Code formatting validation (mandatory)
- Runs prettier on all files
- **Fails PRs if code is not properly formatted**
- Generates HTML diff artifact on failure
- Must install prettier locally to avoid failures: `npm install prettier @shopify/prettier-plugin-liquid`
- **broken-links.yml, broken-links-site.yml** Link validation
- **axe.yml** Accessibility testing
- **codeql.yml** Security scanning
- **update-citations.yml** Automatic citation updates
- **render-cv.yml** CV rendering from RenderCV format
### Pre-commit Requirements
**You must run these locally before pushing:**
1. **Prettier formatting (mandatory):**
```bash
npm install --save-dev prettier @shopify/prettier-plugin-liquid
npx prettier . --write
```
2. **Local build test with Jekyll:**
```bash
docker compose pull && docker compose up
# Let it build (wait 30-60 seconds)
# Visit http://localhost:8080 and verify site renders correctly
# Exit with Ctrl+C
```
3. **Or run full build simulation:**
```bash
docker compose up --build
bundle exec jekyll build
# Check for errors in output
```
## Common Pitfalls & Workarounds
### YAML Syntax Errors in \_config.yml
- **Problem:** Special characters (`:`, `&`, `#`) in values cause parse errors
- **Solution:** Quote string values: `title: "My: Cool Site"`
- **Debug:** Run locally to see detailed error: `bundle exec jekyll build`
### "Unknown tag 'toc'" Error on Deployment
- **Problem:** Deploy succeeds locally but fails on GitHub Actions
- **Cause:** Jekyll plugins don't load properly
- **Solution:** Verify gh-pages branch is set as deployment source in Settings → Pages
### CSS/JS Not Loading After Deploy
- **Problem:** Site loads but has no styling
- **Cause:** Incorrect `url` and `baseurl` in `_config.yml`
- **Fix:**
- Personal site: `url: https://username.github.io`, `baseurl:` (empty)
- Project site: `url: https://username.github.io`, `baseurl: /repo-name/`
- Clear browser cache (Ctrl+Shift+Del or private browsing)
### Prettier Formatting Failures
- **Problem:** PR fails prettier check after local builds passed
- **Solution:** Run prettier before committing:
```bash
npx prettier . --write
git add . && git commit -m "Format code with prettier"
```
### Port 8080 or 4000 Already in Use
- **Docker:** `docker compose down` then `docker compose up`
- **Ruby:** Kill process: `lsof -i :4000 | grep LISTEN | awk '{print $2}' | xargs kill`
### Related Posts Errors ("Zero vectors cannot be normalized")
- **Cause:** Empty blog posts or posts with only stop words confuse classifier-reborn
- **Solution:** Add meaningful content to posts, or set `related_posts: false` in post frontmatter
## File Format Specifications
### Blog Post Frontmatter (\_posts/)
```yaml
---
layout: post
title: Post Title
date: YYYY-MM-DD
categories: category-name
---
```
### Project Frontmatter (\_projects/)
```yaml
---
layout: page
title: Project Name
description: Short description
img: /assets/img/project-image.jpg
importance: 1
---
```
### BibTeX Format (papers.bib)
- Standard BibTeX format
- al-folio supports custom keywords: `pdf`, `code`, `preview`, `doi`, etc.
- Check CUSTOMIZE.md for custom bibtex keyword documentation
## Trust These Instructions
This guidance documents the tested, working build process and project structure. **Trust these instructions and only perform additional searches if:**
1. Specific information contradicts what you observe in the codebase
2. You need implementation details beyond what's documented
3. Error messages reference features or files not mentioned here
The instructions are designed to reduce unnecessary exploration and allow you to focus on code changes.

View File

@ -0,0 +1,174 @@
---
applyTo: "**/*.bib,_bibliography/**"
excludeAgent: "code-review"
---
# BibTeX Bibliography Instructions
## BibTeX Format Basics
The al-folio repository uses BibTeX for managing publications. All entries are stored in `_bibliography/papers.bib`.
### Standard BibTeX Entry Types
```bibtex
@article{key,
title={Title},
author={Author, A. and Author, B.},
journal={Journal Name},
volume={10},
pages={1--20},
year={2023},
publisher={Publisher Name}
}
@inproceedings{key,
title={Title},
author={Author, A.},
booktitle={Proceedings of Conference},
year={2023}
}
@book{key,
title={Book Title},
author={Author, A.},
publisher={Publisher Name},
year={2023}
}
```
## al-folio Custom BibTeX Keywords
Beyond standard BibTeX fields, al-folio supports custom keywords for rich publications display:
### Available Custom Keywords
- **abstract:** Full abstract text (multi-line text in curly braces)
- **award:** Award or distinction (`award: Best Paper Award`)
- **code:** URL to source code repository (`code: https://github.com/user/repo`)
- **dimensions:** Dimensions badge ID for citation metrics
- **doi:** Digital Object Identifier (`doi: 10.1234/example`)
- **html:** URL to full text or project page (`html: https://example.com`)
- **pdf:** URL or path to PDF file (`pdf: /assets/papers/2023-paper.pdf`)
- **poster:** URL to conference poster (`poster: /assets/posters/poster.pdf`)
- **preview:** URL to preview image (`preview: /assets/img/papers/paper-preview.jpg`)
- **selected:** Boolean to feature on publications page (`selected: true`)
- **slides:** URL to presentation slides (`slides: /assets/slides/2023.pdf`)
### Example Entry with Custom Keywords
```bibtex
@article{smith2023important,
title={Important Research},
author={Smith, John and Doe, Jane},
journal={Nature},
volume={100},
pages={1--10},
year={2023},
publisher={Nature Publishing Group},
abstract={This is the full abstract text. It can span multiple lines.},
pdf={smith2023.pdf},
code={https://github.com/example/repo},
preview={smith2023.jpg},
doi={10.1234/nature.12345},
selected={true}
}
```
## Formatting Rules
### Key Considerations
1. **Unique keys:** Each entry must have a unique key (first parameter)
2. **Author names:** Separate multiple authors with `and`
3. **Curly braces:** Protect capitalized words in titles with `{Curly Braces}` to preserve capitalization
4. **Special characters:** Use LaTeX escape sequences (`{\`e}`for é,`{\~n}` for ñ)
5. **URLs:** Place URLs in `{curly braces}` to prevent issues
6. **Alphabetical order:** Keep entries alphabetically sorted by key
### Common Mistakes to Avoid
- ❌ `author=Smith, John` → ✅ `author={Smith, John}`
- ❌ `journal=Science` → ✅ `journal={Science}` or `journal = "Science"`
- ❌ `title=Deep Learning` (loses capitalization) → ✅ `title={Deep Learning}` or `title={{D}eep {L}earning}`
- ❌ `pdf=http://...` → ✅ `pdf={http://...}`
## Jekyll-Scholar Integration
The `jekyll-scholar` plugin processes BibTeX and generates bibliography pages.
### How it Works
1. Entries in `_bibliography/papers.bib` are read
2. Pages marked with `layout: bib` render the bibliography
3. Posts/pages can reference entries using `{% cite key %}`
4. Custom keywords control what displays on publication entries
### Displaying Publications
In pages/posts, use:
- `{% cite key %}` Cite an entry inline
- `{% bibliography %}` Display full bibliography
## File Paths in BibTeX
When using `pdf`, `poster`, `preview`, or similar fields:
- **PDF files:** Use just the filename (automatically resolved to `assets/pdf/`)
- Example: `pdf={smith2023.pdf}` → resolves to `assets/pdf/smith2023.pdf`
- **Preview images:** Use just the filename (automatically resolved to `assets/img/publication_preview/`)
- Example: `preview={smith2023.jpg}` → resolves to `assets/img/publication_preview/smith2023.jpg`
- **Absolute URLs:** Include full URL for external resources
- Example: `code={https://github.com/user/repo}`
- Example: `html={https://example.com/paper}`
## Validation
### Before Committing BibTeX Changes
1. **Syntax check:** Verify no unclosed braces or quotes
2. **Build test:**
```bash
docker compose down
docker compose up
# Check output for "ERROR" or "Invalid bibtex"
# Publications should render at http://localhost:8080/publications/
```
3. **Publication page:** Open publications page and verify entries display correctly
### Common BibTeX Build Errors
- `Invalid bibtex reference 'key'` Key doesn't exist in papers.bib
- `Unmatched braces` Missing closing brace in entry
- `Unknown entry type` Entry type (after @) is misspelled
- `PDF not found` Path in pdf field is incorrect
## Editing and Maintenance
### Adding New Entries
1. Add entry to `_bibliography/papers.bib`
2. Use consistent key naming (e.g., `LastnameYear` or `Lastname2023details`)
3. Ensure all required fields are present
4. Test build: `docker compose up`
### Modifying Existing Entries
- Can change any BibTeX field without breaking Jekyll
- Adding custom keywords (pdf, code, etc.) enriches display
- Test build after modifications to verify display
### Removing Entries
- Delete or comment out (prefix with `%`) the entire entry
- No broken reference check needed; Jekyll-Scholar handles missing keys gracefully
## Trust These Instructions
When working with BibTeX:
- Follow the standard format shown in examples above
- Always test locally with `docker compose up` after changes
- Check the publications page at http://localhost:8080/publications to verify display
- Only search for additional details if encountering error messages not mentioned here

View File

@ -0,0 +1,248 @@
---
applyTo: "_scripts/**/*.js"
---
# JavaScript Scripts Instructions
## Overview
The `_scripts/` directory contains JavaScript files that provide frontend functionality for the al-folio website. These scripts handle:
- **Search functionality** Ninja-keys integration for search bar
- **Analytics setup** Google Analytics, Cronitor, Open Panel integrations
- **Gallery functionality** PhotoSwipe lightbox initialization
- **Liquid template processing** Files with `.liquid.js` extension process Jekyll Liquid syntax
## Key Script Files
### `search.liquid.js`
- **Purpose:** Generates searchable navigation data for the Ninja-keys search component
- **Type:** Liquid + JavaScript hybrid (Jekyll processes `.liquid.js` files)
- **Output:** Compiled to `/assets/js/search-data.js` via permalink frontmatter
- **Content:** Builds `ninja.data` array from site pages, posts, and navigation structure
- **Usage:** Included in `_includes/scripts.liquid` and loaded in layouts
### `photoswipe-setup.js`
- **Purpose:** Initializes PhotoSwipe lightbox for image galleries
- **Type:** Pure JavaScript with ES6 imports
- **Output:** Compiled to `/assets/js/photoswipe-setup.js`
- **Dependencies:** PhotoSwipe library (referenced via `site.third_party_libraries`)
- **Functionality:** Automatically converts `.pswp-gallery` elements into interactive lightbox galleries
### `google-analytics-setup.js`, `cronitor-analytics-setup.js`, `open-panel-analytics-setup.js`
- **Purpose:** Initialize third-party analytics services
- **Type:** Conditional setup scripts (may be excluded from production builds)
- **Usage:** Loaded conditionally based on `_config.yml` feature flags
- **Integration:** Each sets up tracking code for respective analytics platforms
## File Structure & Frontmatter
All scripts in `_scripts/` may include Jekyll frontmatter:
```javascript
---
permalink: /assets/js/filename.js
---
// JavaScript code here
```
**Key frontmatter fields:**
- `permalink:` Specifies output path in compiled site (e.g., `/assets/js/search-data.js`)
- Comments/empty Files with only JavaScript and no frontmatter are processed as-is
**Processing:**
- `.liquid.js` files Processed by Jekyll's Liquid engine before JavaScript compilation
- `.js` files Processed normally, passed through to assets directory
- **Note:** Files in `_scripts/` are ignored by Prettier (see `.prettierignore`) because `.liquid.js` files mix Liquid template syntax with JavaScript, which Prettier doesn't support
## JavaScript Patterns in al-folio
### Liquid + JavaScript Mixing (in `.liquid.js` files)
Example from `search.liquid.js`:
```javascript
---
permalink: /assets/js/search-data.js
---
// Regular JavaScript
const ninja = document.querySelector('ninja-keys');
// Liquid processing - Jekyll loops and variables
ninja.data = [
{%- for page in site.pages -%}
{
id: "nav-{{ page.title | slugify }}",
title: "{{ page.title }}",
handler: () => {
window.location.href = "{{ page.url | relative_url }}";
},
},
{%- endfor -%}
];
```
**Important:**
- Use Liquid filters (`| slugify`, `| relative_url`, `| escape`) to process Jekyll variables
- Curly braces `{{ }}` output variables
- Use `{%- -%}` (with hyphens) to control whitespace in generated output
- Keep JSON structures valid after Liquid processing
### ES6 Modules & Imports
Scripts use modern JavaScript with ES6 imports:
```javascript
import PhotoSwipeLightbox from "{{ site.third_party_libraries.photoswipe-lightbox.url.js }}";
import PhotoSwipe from "{{ site.third_party_libraries.photoswipe.url.js }}";
```
- Import third-party libraries via `site.third_party_libraries` configuration
- Libraries resolved from `_config.yml` CDN or local paths
### DOM Manipulation & Event Handlers
Scripts attach to specific DOM elements:
```javascript
const element = document.querySelector(".selector");
element.addEventListener("click", (event) => {
// Handle event
});
```
## Common Modification Patterns
### Adding a New Analytics Service
1. Create new file `_scripts/myservice-setup.js`:
```javascript
---
permalink: /assets/js/myservice-setup.js
---
(function() {
// Initialize your service
if (window.myService) {
console.log('MyService loaded');
}
})();
```
2. Add conditional loading to `_includes/scripts.liquid`:
```liquid
{% if site.myservice_enabled %}
<script src="{{ '/assets/js/myservice-setup.js' | relative_url }}"></script>
{% endif %}
```
3. Add feature flag to `_config.yml`:
```yaml
myservice_enabled: false
```
### Modifying Search Data Structure
In `search.liquid.js`:
1. Identify the Liquid loop building `ninja.data` array
2. Add new properties to each object:
```javascript
{
id: "nav-{{ title | slugify }}",
title: "{{ title }}",
newField: "{{ page.new_property }}", // Add new field
handler: () => { ... }
}
```
3. Rebuild: `docker compose up` will regenerate `/assets/js/search-data.js`
### Updating Gallery Functionality
In `photoswipe-setup.js`:
1. Modify gallery selector or initialization options
2. Reference [PhotoSwipe documentation](https://photoswipe.com/) for available options
3. Update any CSS classes used in gallery markup
## Code Style Notes
**Prettier and \_scripts/:**
Files in `_scripts/` are **excluded from Prettier formatting** (defined in `.prettierignore`) because:
- `.liquid.js` files contain mixed Liquid template syntax and JavaScript
- Prettier doesn't understand or support this hybrid format
- Manual formatting consistency is required for these files
**When modifying \_scripts/ files:**
- Follow existing code style in the file (indentation, spacing, quotes)
- Maintain readability for Liquid + JavaScript mixed code
- Do NOT run Prettier on the `_scripts/` directory
- **DO run Prettier on the rest of the project** when making other changes: `npx prettier . --write`
## Validation & Testing
### Local Build Test
```bash
docker compose up
# Wait 30 seconds for Jekyll to build
# Check for errors in terminal output
# Visit http://localhost:8080 and verify functionality
```
### Checking Generated Output
After `docker compose up`, verify scripts compiled correctly:
```bash
# Check if script files exist in _site/assets/js/
ls _site/assets/js/
# Verify no Liquid syntax in generated output (should be pure JavaScript)
cat _site/assets/js/search-data.js | head -20
```
### Debugging Script Issues
**Script not loading:**
- Check browser DevTools Console for HTTP 404 errors
- Verify `permalink:` frontmatter matches script inclusion paths
- Check that script is actually in `_site/assets/js/` after build
**Liquid syntax errors:**
- Jekyll build will fail with "Liquid Exception" messages
- Check file for unclosed `{% %}` or `{{ }}` tags
- Ensure Liquid filters exist (`| relative_url`, `| slugify`, etc.)
**JavaScript errors:**
- Check browser console for runtime errors
- Verify all imported libraries are defined in `site.third_party_libraries` in `_config.yml`
- Test in both Chrome and Firefox for compatibility
## Trust These Instructions
When modifying JavaScript scripts:
- `.liquid.js` files must have valid Liquid syntax AND valid JavaScript that remains valid after Jekyll processes the Liquid
- Do NOT run Prettier on `_scripts/` files (they are in `.prettierignore` because of Liquid + JavaScript mixing)
- Test locally with `docker compose up` to verify build succeeds and scripts work
- For site-wide script inclusion, modify `_includes/scripts.liquid`
- For configuration (feature flags, third-party URLs), see yaml-configuration.instructions.md
- Reference the actual script files in `_scripts/` as examples when adding new functionality
- Only search for additional details if errors occur during build or testing

View File

@ -0,0 +1,100 @@
---
applyTo: "**/*.liquid"
---
# Liquid Templates Instructions
## Liquid Template Basics
This al-folio repository uses Liquid templating extensively. When modifying `.liquid` files:
### Key Directories
- `_includes/` Reusable template components (imported with `{% include %}`)
- `_layouts/` Page layout templates (specified in frontmatter with `layout: name`)
### Common Liquid Tags in al-folio
- `{% include filename.liquid %}` Includes template component
- `{% for item in collection %}...{% endfor %}` Loops
- `{% if condition %}...{% endif %}` Conditionals
- `{{ variable }}` Output variable
- `{% assign var = value %}` Assign variable
- `{% capture %}...{% endcapture %}` Capture output to variable
- `| date: format` Date filtering
- `| where: "key", "value"` Collection filtering
### Important al-folio Liquid Components
- `_includes/citation.liquid` Bibliography entry rendering
- `_includes/distill_scripts.liquid` Distill.pub specific scripts
- `_includes/footer.liquid` Site footer
- `_includes/head.liquid` Page <head> section
- `_includes/header.liquid` Site header/navigation
- `_includes/projects.liquid` Project display
- `_includes/scripts.liquid` Global scripts
- `_includes/selected_papers.liquid` Featured publications display
### Prettier Formatting for Liquid
Prettier with `@shopify/prettier-plugin-liquid` enforces formatting:
- Single quotes around strings in Liquid tags
- Consistent spacing
- Indentation with 2 spaces
- Run `npx prettier . --write` before committing
## Common Modification Patterns
### Modifying Site Header/Navigation
- Edit `_includes/header.liquid`
- Add links to navigation array in `_config.yml` (see yaml-configuration.instructions.md)
- Test by viewing site in browser: `docker compose up` → http://localhost:8080
### Adding a New Component Include
1. Create new file in `_includes/mycomponent.liquid`
2. Use Liquid syntax for conditionals, loops, and variable output
3. Call it from templates: `{% include mycomponent.liquid %}`
4. Test: `docker compose up`
### Adjusting Styling with Liquid
- Some SCSS variables can be controlled via Liquid logic
- Avoid mixing complex Liquid with CSS; keep templates focused
## Validation Before Committing
**Always run these checks:**
1. **Prettier format check:**
```bash
npx prettier _includes/ _layouts/ --check
npx prettier . --write # Fix formatting
```
2. **Build test:**
```bash
docker compose down
docker compose up
# Wait 30 seconds, check for errors in output
# No "Unknown tag" messages should appear
```
3. **Visual verification:**
- Open http://localhost:8080
- Check that your changes rendered correctly
- Verify no broken layout or missing content
## Trust These Instructions
When working with Liquid templates:
- Use `_includes/` and `_layouts/` as reference for syntax patterns
- Follow existing formatting in files (Prettier will enforce consistency)
- Always test locally before pushing (build must succeed)
- For configuration changes, see yaml-configuration.instructions.md
- Only search for additional details if error messages reference unfamiliar Liquid tags or Jekyll concepts

View File

@ -0,0 +1,277 @@
---
applyTo: "_books/**/*.md,_news/**/*.md,_pages/**/*.md,_posts/**/*.md,_projects/**/*.md,_teachings/**/*.md"
---
# Content Files (Markdown) Instructions
## File Organization
Content in al-folio is organized by type:
- **\_books/** Book reviews and summaries
- **\_news/** News/announcements
- **\_pages/** Static pages (about, CV, publications, projects, etc.)
- **\_posts/** Blog posts (format: `YYYY-MM-DD-title.md`)
- **\_projects/** Project showcase entries
- **\_teachings/** Course and teaching information
## Frontmatter Structure
Every markdown file requires YAML frontmatter at the top. The structure varies by content type.
### Book Frontmatter (\_books/)
```yaml
---
layout: book-review
title: Book Title
author: Book Author Name
publisher: Publisher Name
year: 2023
rating: 8/10
img: /assets/img/book-cover.jpg
---
```
### News Frontmatter (\_news/)
```yaml
---
layout: post
title: News Title
date: YYYY-MM-DD
---
```
### Page Frontmatter (\_pages/)
```yaml
---
layout: page
title: Page Title
permalink: /pathname/
description: Brief description for metadata
---
```
### Blog Post Frontmatter (\_posts/)
```yaml
---
layout: post
title: Post Title
date: YYYY-MM-DD
categories: category-name
description: Brief description
---
```
**Important:** Post filenames MUST follow format: `YYYY-MM-DD-title.md` (hyphen-separated words)
### Project Frontmatter (\_projects/)
```yaml
---
layout: page
title: Project Name
description: Short description
img: /assets/img/project-image.jpg
importance: 1
---
```
### Teaching/Course Frontmatter (\_teachings/)
```yaml
---
layout: page
title: Course Title
description: Course description
---
```
## Special Frontmatter Fields
### For Books
- **author:** Author name or comma-separated list
- **publisher:** Publisher name
- **year:** Publication year
- **rating:** Personal rating (e.g., `8/10`)
- **img:** Path to book cover image (`/assets/img/...`)
### For Blog Posts
- **categories:** Tag for post organization (single word, no spaces)
- **related_posts:** Set to `false` to disable related posts display (useful for short posts)
### For Projects
- **importance:** Integer (1, 2, 3...) higher = featured first
- **img:** Path to thumbnail image (`/assets/img/...`)
- **featured:** Set to `true` to display on main projects section
### Date Format
Always use ISO 8601: `YYYY-MM-DD` (e.g., `2023-12-25`)
## Markdown Content
### Basic Markdown Syntax
```markdown
# Heading 1
## Heading 2
### Heading 3
**bold text**
_italic text_
`inline code`
- List item 1
- List item 2
[Link text](https://url.com)
![Image alt text](/path/to/image.jpg)
```
### al-folio-Specific Features
#### Includes/Shortcodes
- `{% include figure.liquid ... %}` Responsive images with captions
- `{% include audio.liquid ... %}` Audio player
- `{% include video.liquid ... %}` Video player
- `{% include bib_search.liquid ... %}` Bibliography search
- `{% include calendar.liquid ... %}` Event calendar
#### Math Support
```markdown
Inline: $E = mc^2$
Display mode:
$$\int_0^1 f(x) dx$$
```
#### Code Blocks
````markdown
```python
def hello():
print("Hello, world!")
```
````
#### Blockquotes
```markdown
> This is a quote
>
> > Nested quote
```
### Jekyll Features Available
- **Liquid variables:** `{{ site.title }}`, `{{ page.title }}`
- **Collections:** `{{ site.posts }}`, `{{ site.projects }}`
- **Filters:** `| date: format`, `| where: key value`
- **Tags:** `{% if condition %} ... {% endif %}`
## Common Content Patterns
### Creating a Blog Post
1. Create file: `_posts/YYYY-MM-DD-my-post.md`
2. Add frontmatter with `layout: post`, `title`, `date`, `categories`
3. Write markdown content
4. Test: `docker compose up` → http://localhost:8080/blog
5. Post will appear in reverse chronological order
### Creating a Project Entry
1. Create file: `_projects/project-name.md`
2. Add frontmatter with `layout: page`, `title`, `description`, `img`, `importance`
3. Write markdown content describing the project
4. Test: `docker compose up` → http://localhost:8080/projects
### Adding Images
```markdown
{% include figure.liquid path="/assets/img/example.jpg" title="Image caption" %}
```
### Linking to Other Pages
```markdown
[About Me](/about/)
[My CV](/cv/)
[Blog Post]({% link _posts/2023-01-15-my-post.md %})
```
## Testing & Validation
### Before Committing
1. **Frontmatter syntax:** Verify YAML is valid (no unclosed quotes, proper indentation)
2. **Date format:** Check `YYYY-MM-DD` format is correct
3. **Build test:**
```bash
docker compose down
docker compose up
# Wait for "Server running" message
# Navigate to your content in browser
# Verify formatting, images, and links work
```
### Common Issues
- **Post not appearing:** Check `date` is today or earlier, filename format is correct
- **Images not loading:** Verify path starts with `/assets/`, file exists
- **Related posts error:** Content has no meaningful words; add more text or set `related_posts: false`
## File Naming Conventions
### Blog Posts
- Format: `YYYY-MM-DD-title-with-hyphens.md`
- Example: `2023-12-25-christmas-post.md`
- Words separated by hyphens, no spaces
### Projects
- Format: `project-name.md`
- Example: `my-research-project.md`
- Use hyphens for readability
### Pages
- Format: `descriptive-name.md`
- Example: `about.md`, `teaching.md`, `cv.md`
## Markdown Linting & Formatting
The Prettier formatter applies to markdown files:
- **Line length:** Soft wrap at 88 characters
- **Lists:** Consistent bullet formatting
- **Code blocks:** Proper fence syntax
- **Spacing:** Consistent blank lines
**Always run before committing:**
```bash
npx prettier --write .
```
## Trust These Instructions
When creating or editing content:
- Follow the frontmatter structure for your content type
- Test locally with `docker compose up` to verify appearance
- Check date format, filename format, and image paths
- Only search for advanced features if frontmatter or markdown error messages appear

View File

@ -0,0 +1,250 @@
---
applyTo: "_config.yml,_data/**/*.yml"
---
# YAML Configuration Instructions
## YAML Configuration (\_config.yml)
### Critical Settings for Agents
When modifying `_config.yml`, always update these in pairs:
- **url** and **baseurl** must be consistent:
- Personal site: `url: https://username.github.io`, `baseurl:` (leave empty)
- Project site: `url: https://username.github.io`, `baseurl: /projectname/`
- **title, first_name, last_name** Site header and metadata
- **description** Used in RSS feeds and metadata
- **lang** Language code (e.g., "en", "fr")
### Feature Flags in \_config.yml
Look for `enabled: false/true` patterns. Common ones:
- `blog.enabled`
- `news.enabled`
- `profile.image_circular`
- `profile.show_social_links`
- `projects.enabled`
- `publications.enabled`
- `related_blog_posts`
### YAML Syntax Rules
- Quote string values containing special characters: `":"`
- Use `>` for multi-line strings (ignore newlines)
- Use `|` for multi-line strings (preserve newlines)
- Indentation matters: always use spaces (2 spaces), never tabs
- No tabs allowed; use only spaces
### Testing YAML Syntax
If you modify `_config.yml`, verify syntax by running:
```bash
docker compose up
# Site should start without YAML parse errors
# Check output for "YAML parse error" or "valid YAML"
```
## Data Files (\_data/\*.yml)
Data files provide structured content that templates can access via Liquid. Each file serves a specific purpose.
### socials.yml
Defines social media links and contact information displayed on the site.
**Format:** Entries are displayed in the order they are defined (not alphabetically sorted)
**For standard socials:** Use the key with the appropriate value. Common built-in socials include:
- `email:` Email address
- `cv_pdf:` Path to CV PDF file
- `scholar_userid:` Google Scholar ID
- `inspirehep_id:` Inspire HEP author ID
- `rss_icon:` Boolean to show/hide RSS icon
- And many others (see [jekyll-socials documentation](https://github.com/george-gca/jekyll-socials) for full list)
**For custom socials:** Define a custom entry with nested fields:
- `logo:` URL or path to logo image
- `title:` Display name
- `url:` Profile or website URL
**Example:**
```yaml
cv_pdf: /assets/pdf/example_pdf.pdf
email: you@example.com
scholar_userid: qc6CJjYAAAAJ
github_username: username
linkedin_username: username
custom_social:
logo: https://example.com/logo.png
title: Custom Profile
url: https://example.com/
```
For more information, see the [jekyll-socials documentation](https://github.com/george-gca/jekyll-socials).
### cv.yml
CV content in **RenderCV format** (recommended approach for generating professional CVs).
**Format:** [RenderCV](https://rendercv.com/) YAML format — human-readable and designed specifically for professional resumes with automatic PDF generation capability.
**Key Files:**
- [`_data/cv.yml`](_data/cv.yml) — Main CV content in RenderCV format
- [`assets/rendercv/design.yaml`](assets/rendercv/design.yaml) — Design and styling customization
- [`assets/rendercv/locale.yaml`](assets/rendercv/locale.yaml) — Localization and text formatting
- [`assets/rendercv/settings.yaml`](assets/rendercv/settings.yaml) — RenderCV-specific settings
**Usage:** Rendered by `cv.liquid` layout on CV page; displayed in `about.liquid` on home page.
**Automatic PDF Generation:** When using RenderCV format, a GitHub Actions workflow (`render-cv.yml`) automatically generates a PDF version whenever you push changes to `_data/cv.yml`. The generated PDF is saved to `assets/rendercv/rendercv_output/` and can be linked via `cv_pdf` setting in `_config.yml`.
**Alternative Format (JSONResume):** For an alternative format, see `assets/json/resume.json` which uses the [JSONResume](https://jsonresume.org/) standard. Switch between formats using the `cv_format` frontmatter variable in `_pages/cv.md` (options: `rendercv` or `jsonresume`).
**For more details:** See [CUSTOMIZE.md § Modifying the CV information](CUSTOMIZE.md#modifying-the-cv-information) for setup, switching formats, and PDF generation configuration.
### citations.yml
Social media citation counts and metrics.
**Format:** Varies by platform (Google Scholar, ORCID, etc.)
**Example:**
```yaml
scholar_userid: YOUR_SCHOLAR_ID
```
### repositories.yml
GitHub repository listing for the repositories page.
**Format:** List of repository information
**Usage:** Used by repositories page to display GitHub projects
### coauthors.yml
Co-author information for bibliography/publications.
**Mapping:** Author names to profile URLs and affiliations
**Format:** Maps full names to contact info
**Example:**
```yaml
"Einstein, Albert":
url: https://en.wikipedia.org/wiki/Albert_Einstein
affiliation: Princeton University
```
## Common Modification Patterns
### Adding a New Feature Flag
1. Add to `_config.yml`:
```yaml
my_feature:
enabled: true
```
2. In Liquid templates use:
```liquid
{% if site.my_feature.enabled %}
... content ...
{% endif %}
```
3. Document the flag in CUSTOMIZE.md
### Updating Social Media Links
1. Edit `_data/socials.yml`
2. Keep entries alphabetically sorted
3. Ensure `icon` identifiers match available icons (Academicons or Font Awesome)
4. Use full profile URLs in `url` field
5. Test: `docker compose up` → check social icons on site
### Modifying Site Metadata
Update these in `_config.yml`:
- **title** Site name
- **first_name, last_name** Your name
- **email** Contact email
- **description** Site tagline (used in RSS, metadata)
- **keywords** Search keywords
### Adding Co-authors
1. Edit `_data/coauthors.yml`
2. Add entry with author name as key
3. Include `url:` and `affiliation:` fields
4. This maps author names in BibTeX to profile links
## Validation Before Committing
**Always run these checks:**
1. **YAML syntax check:**
```bash
# Run Jekyll build to validate YAML
docker compose down
docker compose up
# Wait for "Server running" message
# Check output for "YAML parse error" messages
```
2. **Prettier format check:**
```bash
npx prettier _config.yml _data/ --check
npx prettier . --write # Fix formatting
```
3. **Visual verification:**
- Open http://localhost:8080
- Check that your changes appear correctly
- Verify navigation, social links, and metadata work
- Check site title and description in page source
## Common Issues
### "YAML parse error"
- Check for unquoted special characters (`:`, `&`, `#`, `|`, `>`)
- Verify indentation uses only spaces (2 spaces per level)
- Ensure closing quotes and braces are present
### Feature flag not working
- Check syntax: `feature: enabled: true` (colon after feature name)
- Verify spelling in Liquid template: `{% if site.feature.enabled %}`
- Clear browser cache if using old cached pages
### Social links not appearing
- Verify `_data/socials.yml` has correct entries
- Check icon identifiers exist in Font Awesome or Academicons
- Ensure `url:` field is not empty
## Trust These Instructions
When working with YAML configuration:
- Always test locally with `docker compose up` after changes
- Quote any string containing special characters
- Keep indentation consistent (2 spaces)
- Check output for YAML parse errors before committing
- Only search for additional details if encountering error messages not mentioned here

14
.github/release.yml vendored Normal file
View File

@ -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:
- "*"

74
.github/workflows/axe.yml vendored Normal file
View File

@ -0,0 +1,74 @@
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: |
sudo apt-get update && sudo apt-get install -y imagemagick
pip3 install --upgrade jupyter
export JEKYLL_ENV=production
bundle exec jekyll build
- name: Purge unused CSS 🧹
run: |
npm install -g purgecss
purgecss -c purgecss.config.js
- name: Get Chromium version 🌐
# https://github.com/GoogleChromeLabs/chrome-for-testing?tab=readme-ov-file#other-api-endpoints
run: |
CHROMIUM_VERSION=$(wget -qO- https://googlechromelabs.github.io/chrome-for-testing/LATEST_RELEASE_STABLE | cut -d. -f1)
echo "Chromium version: $CHROMIUM_VERSION"
echo "CHROMIUM_VERSION=$CHROMIUM_VERSION" >> $GITHUB_ENV
- name: Setup Chrome 🌐
id: setup-chrome
uses: browser-actions/setup-chrome@v1
with:
chrome-version: ${{ env.CHROMIUM_VERSION }}
- name: Install chromedriver 🚗
run: |
npm install -g chromedriver@$CHROMIUM_VERSION
- name: Run axe 🪓
# https://github.com/dequelabs/axe-core-npm/tree/develop/packages/cli
run: |
npm install -g @axe-core/cli
npm install -g http-server
http-server _site/ &
axe --chromedriver-path $(npm root -g)/chromedriver/bin/chromedriver http://localhost:8080/${{ github.event.inputs.url || env.URL }} --load-delay=1500 --exit

47
.github/workflows/broken-links-site.yml vendored Normal file
View File

@ -0,0 +1,47 @@
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: |
sudo apt-get update && sudo apt-get install -y imagemagick
pip3 install --upgrade jupyter
export JEKYLL_ENV=production
bundle exec jekyll build
- name: Purge unused CSS 🧹
run: |
npm install -g purgecss
purgecss -c purgecss.config.js
- name: Link Checker 🔗
uses: lycheeverse/lychee-action@v2.0.2
with:
fail: true
# only check local links
args: --offline --remap '_site(/?.*)/assets/(.*) _site/assets/$2' --verbose --no-progress '_site/**/*.html'

54
.github/workflows/broken-links.yml vendored Normal file
View File

@ -0,0 +1,54 @@
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
# only run on the main repo
if: github.repository == 'alshedivat/al-folio'
steps:
- uses: actions/checkout@v4
- name: Link Checker 🔗
uses: lycheeverse/lychee-action@v2.0.2
with:
fail: true
# removed md files that include liquid tags
args: --user-agent 'curl/7.54' --exclude-path README.md --exclude-path _pages/404.md --exclude-path _pages/blog.md --exclude-path _posts/2018-12-22-distill.md --exclude-path _posts/2023-04-24-videos.md --exclude-path _books/the_godfather.md --exclude-path .github/instructions/bibtex-bibliography.instructions.md --exclude-path .github/instructions/yaml-configuration.instructions.md --exclude-path .github/instructions/markdown-content.instructions.md --exclude-path .github/instructions/liquid-templates.instructions.md --exclude-path AGENTS.md --exclude-path SEO.md --verbose --no-progress './**/*.md' './**/*.html'

94
.github/workflows/codeql.yml vendored Normal file
View File

@ -0,0 +1,94 @@
# For most projects, this workflow file will not need changing; you simply need
# to commit it to your repository.
#
# You may wish to alter this file to override the set of languages analyzed,
# or to provide custom queries or build logic.
#
# ******** NOTE ********
# We have attempted to detect the languages in your repository. Please check
# the `language` matrix defined below to confirm you have the correct set of
# supported CodeQL languages.
#
name: "CodeQL Advanced"
on:
push:
branches: ["main"]
pull_request:
branches: ["main"]
schedule:
- cron: "45 4 * * 3"
jobs:
analyze:
name: Analyze (${{ matrix.language }})
# Runner size impacts CodeQL analysis time. To learn more, please see:
# - https://gh.io/recommended-hardware-resources-for-running-codeql
# - https://gh.io/supported-runners-and-hardware-resources
# - https://gh.io/using-larger-runners (GitHub.com only)
# Consider using larger runners or machines with greater resources for possible analysis time improvements.
runs-on: ${{ (matrix.language == 'swift' && 'macos-latest') || 'ubuntu-latest' }}
permissions:
# required for all workflows
security-events: write
# required to fetch internal or private CodeQL packs
packages: read
# only required for workflows in private repositories
actions: read
contents: read
strategy:
fail-fast: false
matrix:
include:
- language: javascript-typescript
build-mode: none
- language: ruby
build-mode: none
# CodeQL supports the following values keywords for 'language': 'c-cpp', 'csharp', 'go', 'java-kotlin', 'javascript-typescript', 'python', 'ruby', 'swift'
# Use `c-cpp` to analyze code written in C, C++ or both
# Use 'java-kotlin' to analyze code written in Java, Kotlin or both
# Use 'javascript-typescript' to analyze code written in JavaScript, TypeScript or both
# To learn more about changing the languages that are analyzed or customizing the build mode for your analysis,
# see https://docs.github.com/en/code-security/code-scanning/creating-an-advanced-setup-for-code-scanning/customizing-your-advanced-setup-for-code-scanning.
# If you are analyzing a compiled language, you can modify the 'build-mode' for that language to customize how
# your codebase is analyzed, see https://docs.github.com/en/code-security/code-scanning/creating-an-advanced-setup-for-code-scanning/codeql-code-scanning-for-compiled-languages
steps:
- name: Checkout repository
uses: actions/checkout@v4
# Initializes the CodeQL tools for scanning.
- name: Initialize CodeQL
uses: github/codeql-action/init@v3
with:
languages: ${{ matrix.language }}
build-mode: ${{ matrix.build-mode }}
# If you wish to specify custom queries, you can do so here or in a config file.
# By default, queries listed here will override any specified in a config file.
# Prefix the list here with "+" to use these queries and those in the config file.
# For more details on CodeQL's query packs, refer to: https://docs.github.com/en/code-security/code-scanning/automatically-scanning-your-code-for-vulnerabilities-and-errors/configuring-code-scanning#using-queries-in-ql-packs
# queries: security-extended,security-and-quality
# If the analyze step fails for one of the languages you are analyzing with
# "We were unable to automatically build your code", modify the matrix above
# to set the build mode to "manual" for that language. Then modify this step
# to build your code.
# Command-line programs to run using the OS shell.
# 📚 See https://docs.github.com/en/actions/using-workflows/workflow-syntax-for-github-actions#jobsjob_idstepsrun
- if: matrix.build-mode == 'manual'
shell: bash
run: |
echo 'If you are using a "manual" build mode for one or more of the' \
'languages you are analyzing, replace this with the commands to build' \
'your code, for example:'
echo ' make bootstrap'
echo ' make release'
exit 1
- name: Perform CodeQL Analysis
uses: github/codeql-action/analyze@v3
with:
category: "/language:${{matrix.language}}"

View File

@ -0,0 +1,58 @@
name: "Copilot Setup Steps"
# Automatically run the setup steps when they are changed to allow for easy validation, and
# allow manual testing through the repository's "Actions" tab
on:
workflow_dispatch:
push:
paths:
- .github/workflows/copilot-setup-steps.yml
pull_request:
paths:
- .github/workflows/copilot-setup-steps.yml
jobs:
# The job MUST be called `copilot-setup-steps` or it will not be picked up by Copilot.
copilot-setup-steps:
runs-on: ubuntu-latest
# Set the permissions to the lowest permissions possible needed for your steps.
# Copilot will be given its own token for its operations.
permissions:
contents: read
# You can define any steps you want, and they will run before the agent starts.
# If you do not check out your code, Copilot will do this for you.
steps:
- name: Checkout code
uses: actions/checkout@v4
- name: Setup Ruby
uses: ruby/setup-ruby@v1
with:
ruby-version: "3.3.5"
bundler-cache: true
- name: Setup Python
uses: actions/setup-python@v5
with:
python-version: "3.13"
cache: "pip"
- name: Setup Node.js
uses: actions/setup-node@v4
with:
node-version: "latest"
cache: "npm"
- name: Install system dependencies
run: |
sudo apt-get update
sudo apt-get install -y imagemagick
- name: Install Python dependencies
run: |
pip3 install --upgrade nbconvert
- name: Install Node.js dependencies
run: npm ci

View File

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

View File

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

View File

@ -1,42 +1,105 @@
name: deploy
name: Deploy site
on:
push:
branches:
- master
- main
paths:
- "assets/**"
- "_sass/**"
- "_scripts/**"
- "**.bib"
- "**.html"
- "**.js"
- "**.liquid"
- "**/*.md"
- "**.yml"
- "Gemfile"
- "Gemfile.lock"
- "!.github/workflows/axe.yml"
- "!.github/workflows/broken-links.yml"
- "!.github/workflows/deploy-docker-tag.yml"
- "!.github/workflows/deploy-image.yml"
- "!.github/workflows/docker-slim.yml"
- "!.github/workflows/lighthouse-badger.yml"
- "!.github/workflows/prettier.yml"
- "!lighthouse_results/**"
- "!CONTRIBUTING.md"
- "!CUSTOMIZE.md"
- "!FAQ.md"
- "!INSTALL.md"
- "!README.md"
pull_request:
branches:
- master
- main
paths:
- "assets/**"
- "_sass/**"
- "_scripts/**"
- "**.bib"
- "**.html"
- "**.js"
- "**.liquid"
- "**/*.md"
- "**.yml"
- "Gemfile"
- "Gemfile.lock"
- "!.github/workflows/axe.yml"
- "!.github/workflows/broken-links.yml"
- "!.github/workflows/deploy-docker-tag.yml"
- "!.github/workflows/deploy-image.yml"
- "!.github/workflows/docker-slim.yml"
- "!.github/workflows/lighthouse-badger.yml"
- "!.github/workflows/prettier.yml"
- "!lighthouse_results/**"
- "!CONTRIBUTING.md"
- "!CUSTOMIZE.md"
- "!FAQ.md"
- "!INSTALL.md"
- "!README.md"
workflow_dispatch:
permissions:
contents: write
jobs:
deploy:
# available images: https://github.com/actions/runner-images#available-images
runs-on: ubuntu-latest
steps:
- name: Checkout 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.3.5"
bundler-cache: true
- name: Setup Python 🐍
uses: actions/setup-python@v5
with:
python-version: "3.13"
cache: "pip" # caching pip dependencies
- 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: |
sudo apt-get update && sudo apt-get install -y imagemagick
pip3 install --upgrade nbconvert
export JEKYLL_ENV=production
bundle exec jekyll build
- name: Purge unused CSS 🧹
run: |
npm install -g purgecss
purgecss -c purgecss.config.js
- name: Deploy 🚀
if: github.event_name != 'pull_request'
uses: JamesIves/github-pages-deploy-action@v4
with:
folder: _site

53
.github/workflows/docker-slim.yml vendored Normal file
View File

@ -0,0 +1,53 @@
name: Docker Slim
#Only trigger, when the build workflow succeeded
on:
push:
branches:
- master
- main
paths:
- ".github/workflows/docker-slim.yml"
workflow_run:
workflows: ["Docker Image CI"]
types:
- completed
workflow_dispatch:
jobs:
build:
# https://docs.github.com/en/actions/using-workflows/events-that-trigger-workflows#running-a-workflow-based-on-the-conclusion-of-another-workflow
if: ${{ github.event.workflow_run.conclusion == 'success' && github.repository_owner == 'alshedivat' }}
runs-on: ubuntu-latest
defaults:
run:
working-directory: ${{ github.workspace }}
steps:
- name: Checkout
uses: actions/checkout@v4
- name: Login
uses: docker/login-action@v3
with:
username: ${{ secrets.DOCKER_USERNAME }}
password: ${{ secrets.DOCKER_PASSWORD }}
- name: update docker-compose
shell: bash
run: |
sed -i "s|\.:|${{ github.workspace }}:|g" ${{ github.workspace }}/docker-compose.yml
cat ${{ github.workspace }}/docker-compose.yml
- uses: kitabisa/docker-slim-action@v1.2.0
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

62
.github/workflows/lighthouse-badger.yml vendored Normal file
View File

@ -0,0 +1,62 @@
# 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 Secrets (env) for not manually triggered workflows
env:
URLS: https://alshedivat.github.io/al-folio/
# 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.LIGHTHOUSE_BADGER_TOKEN }}
ref: ${{ env.BRANCH }}
- uses: actions/checkout@v4
with:
repository: "myactionway/lighthouse-badges"
path: temp_lighthouse_badges_nested
- uses: myactionway/lighthouse-badger-action@v2.2
with:
urls: ${{ env.URLS }}
mobile_lighthouse_params: ${{ env.MOBILE_LIGHTHOUSE_PARAMS }}
desktop_lighthouse_params: ${{ env.DESKTOP_LIGHTHOUSE_PARAMS }}

View File

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

36
.github/workflows/prettier-html.yml vendored Normal file
View File

@ -0,0 +1,36 @@
name: Prettify gh-pages
on:
workflow_dispatch:
jobs:
format:
runs-on: ubuntu-latest
steps:
- name: Checkout gh-pages branch
uses: actions/checkout@v4
with:
ref: gh-pages
- name: Find and Remove </source> Tags
run: find . -type f -name "*.html" -exec sed -i 's/<\/source>//g' {} +
- name: Set up Node.js
uses: actions/setup-node@v4
- name: Install Prettier
run: npm install -g prettier
- name: Check for Prettier
run: npx prettier --version || echo "Prettier not found"
- name: Run Prettier on HTML files
run: npx prettier --write '**/*.html'
- name: Commit and push changes
run: |
git config user.name "github-actions"
git config user.email "actions@github.com"
git add .
git commit -m "Formatted HTML files" || echo "No changes to commit"
git push

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

@ -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 }}"}'

58
.github/workflows/render-cv.yml vendored Normal file
View File

@ -0,0 +1,58 @@
name: Render a CV
on:
push:
branches:
- main
- master
paths:
- "_data/cv.yml"
- "assets/rendercv/design.yaml"
- "assets/rendercv/locale.yaml"
- "assets/rendercv/settings.yaml"
workflow_call:
workflow_dispatch:
permissions:
contents: write
jobs:
rendercv:
name: RenderCV
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: actions/setup-python@v5
with:
python-version: "3.12"
- name: Install RenderCV
run: |
pip install -r requirements.txt
- name: RenderCV
run: |
cv_file=$(find _data -maxdepth 1 -type f \( -name "cv.yaml" -o -name "cv.yml" \))
if [ -z "$cv_file" ]; then
echo "No cv.yml file found!"
exit 1
fi
rendercv_dir=$(find assets -maxdepth 1 -type d -name "rendercv")
if [ -z "$rendercv_dir" ]; then
echo "No RenderCV config directory found!"
exit 1
fi
settings=$(find $rendercv_dir -maxdepth 1 -type f \( -name "settings.yaml" -o -name "settings.yml" \))
if [ -z "$settings" ]; then
echo "Missing RenderCV config file!"
exit 1
fi
rendercv render $cv_file --settings $settings
rm assets/rendercv/rendercv_output/*.typ
- name: Upload rendercv_output as an artifact
uses: actions/upload-artifact@v4
with:
name: RenderCV Output
path: assets/rendercv/rendercv_output
- name: Push the changes
run: |
git config --global user.name "${{ github.actor }}"
git config --global user.email "${{ github.actor }}@users.noreply.github.com"
git add -A
git commit -m "chore: render the latest CV"
git push

39
.github/workflows/schedule-posts.txt vendored Normal file
View File

@ -0,0 +1,39 @@
name: Publish posts scheduled for today
on:
schedule:
# Run every day at 23:30 UTC or manually run
- cron: "30 23 * * *"
workflow_dispatch:
jobs:
publish_scheduled:
runs-on: ubuntu-latest
steps:
- name: Checkout main branch
uses: actions/checkout@v4
with:
ref: main
- name: Get the date for today
id: date
run: echo "TODAY=$(date +'%Y-%m-%d')" >> $GITHUB_ENV
- name: Check for scheduled posts and move to posts
run: |
echo "Today is $TODAY"
shopt -s nullglob
for file in _scheduled/${TODAY}-*.md; do
echo "Found scheduled: $file"
mv "$file" "_posts/"
echo "Moved $file to _posts/"
done
- name: Commit and push changes
run: |
git config user.name "github-actions"
git config user.email "actions@github.com"
git add _posts/
git add _scheduled/
git commit -m "Posted Scheduled Drafts on $TODAY" || echo "No changes to commit"
git push

101
.github/workflows/update-citations.yml vendored Normal file
View File

@ -0,0 +1,101 @@
name: Update Google Scholar Citations
on:
schedule:
- cron: "0 0 * * 1" # Monday
- cron: "0 0 * * 3" # Wednesday
- cron: "0 0 * * 5" # Friday
workflow_dispatch:
jobs:
update-citations:
runs-on: ubuntu-latest
steps:
- name: Checkout repository
uses: actions/checkout@v4
# See CUSTOMIZE.md for details on how to set up PAT for triggering subsequent workflows
# with:
# token: ${{ secrets.PAT }}
- name: Set up Python
uses: actions/setup-python@v4
with:
python-version: "3.13"
- name: Install dependencies
run: |
echo "🔧 Installing dependencies..."
python -m pip install --upgrade pip
pip install -r requirements.txt
- name: Save current citations.yml hash
id: before
run: |
echo "📦 Checking existing citations.yml hash..."
if [ -f _data/citations.yml ]; then
sha_before=$(sha256sum _data/citations.yml | awk '{print $1}')
echo "sha_before=$sha_before" >> $GITHUB_OUTPUT
echo "📝 SHA before: $sha_before"
else
echo "sha_before=none" >> $GITHUB_OUTPUT
echo "📝 No existing citations.yml file found."
fi
- name: Run citation update script
id: run_citation_update
shell: bash
run: |
set +e
echo "🚀 Running citation update script (single attempt)..."
start_time=$(date)
timeout 90 python bin/update_scholar_citations.py
status=$?
end_time=$(date)
if [ $status -eq 0 ]; then
echo "✅ Citation update succeeded (started at $start_time, ended at $end_time)."
echo "✅ Citation update succeeded." >> $GITHUB_STEP_SUMMARY
else
echo "❌ Citation update script failed with exit code $status (started at $start_time, ended at $end_time)."
echo "❌ Citation update script failed with exit code $status." >> $GITHUB_STEP_SUMMARY
fi
set -e
- name: Save new citations.yml hash
id: after
run: |
echo "🔍 Checking updated citations.yml hash..."
if [ -f _data/citations.yml ]; then
sha_after=$(sha256sum _data/citations.yml | awk '{print $1}')
echo "sha_after=$sha_after" >> $GITHUB_OUTPUT
echo "📝 SHA after: $sha_after"
else
echo "sha_after=none" >> $GITHUB_OUTPUT
echo "📝 citations.yml was not created or is missing."
fi
- name: Report citations.yml change in summary
run: |
echo "📋 Comparing citation file hashes..."
if [ "${{ steps.before.outputs.sha_before }}" != "${{ steps.after.outputs.sha_after }}" ]; then
echo "✅ _data/citations.yml was updated."
echo "✅ _data/citations.yml was updated." >> $GITHUB_STEP_SUMMARY
else
echo " _data/citations.yml was not changed."
echo " _data/citations.yml was not changed." >> $GITHUB_STEP_SUMMARY
fi
- name: Configure Git
run: |
git config --local user.email "actions@github.com"
git config --local user.name "GitHub Actions"
echo "🔧 Git configured."
- name: Commit and push if changed
run: |
git add _data/citations.yml
git diff --staged --quiet || (
echo "📤 Committing and pushing changes..."
git commit -m "Update Google Scholar citations"
git push
)

50
.github/workflows/update-tocs.yml vendored Normal file
View File

@ -0,0 +1,50 @@
name: Update TOCs
# This workflow automatically updates the Table of Contents (TOC) in markdown files
on:
push:
branches:
- main
- master
paths:
- "*.md"
workflow_dispatch:
permissions:
contents: write
jobs:
build:
runs-on: ubuntu-latest
timeout-minutes: 5
steps:
- uses: actions/checkout@v4
with:
fetch-depth: 0 # OR "2" -> To retrieve the preceding commit.
- name: Get changed files
id: changed-files
uses: tj-actions/changed-files@ed68ef82c095e0d48ec87eccea555d944a631a4c # v46
with:
files: ./*.md
- name: Updated toc on all markdown changed files
env:
ALL_CHANGED_FILES: ${{ steps.changed-files.outputs.all_changed_files }}
run: |
curl https://raw.githubusercontent.com/george-gca/github-markdown-toc/main/gh-md-toc -o gh-md-toc
chmod a+x gh-md-toc
for file in ${ALL_CHANGED_FILES}; do
# Check if the file is a markdown file
if [[ "$file" != *.md ]]; then
continue
fi
./gh-md-toc --indent 2 --insert --no-backup --hide-footer $file
done
rm gh-md-toc
- name: Commit changes
if: steps.changed-files.outputs.any_changed == 'true'
uses: stefanzweifel/git-auto-commit-action@v5.0.1
with:
commit_message: Auto update markdown TOC

12
.gitignore vendored
View File

@ -1,11 +1,15 @@
_site
.bundle
.sass-cache
.DS_store
.idea
.jekyll-cache
.jekyll-metadata
.DS_store
.ruby-version
.sass-cache
.tweet-cache
.venv
assets/libs/
assets/rendercv/rendercv_output/*.typ
Gemfile.lock
vendor
node_modules/
vendor

14
.lycheeignore Normal file
View File

@ -0,0 +1,14 @@
.github/instructions/bibtex-bibliography.instructions.md
.github/instructions/liquid-templates.instructions.md
.github/instructions/markdown-content.instructions.md
.github/instructions/yaml-configuration.instructions.md
_books/the_godfather.md
_pages/404.md
_pages/blog.md
_posts/2018-12-22-distill.md
_posts/2023-04-24-videos.md
AGENTS.md
https://www.linkedin.com/
https://www.reddit.com/
README.md
SEO.md

View File

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

13
.prettierignore Normal file
View File

@ -0,0 +1,13 @@
**/*.map
**/*.min.css
**/*.min.js
assets/css/main.scss
assets/js/distillpub/template.v2.js
assets/js/search/*.js
assets/plotly/demo.html
lighthouse_results/**
_posts/2015-10-20-math.md
_sass/font-awesome/*.scss
_scripts/*
# Ignore citation YAML file generated by script
_data/citations.yml

3
.prettierrc Normal file
View File

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

81
AGENTS.md Normal file
View File

@ -0,0 +1,81 @@
# Agent Guidelines for al-folio
A simple, clean, and responsive Jekyll theme for academics.
## Quick Links by Role
- **Are you a coding agent?** → Read [`.github/copilot-instructions.md`](.github/copilot-instructions.md) first (tech stack, build, CI/CD, common pitfalls & solutions)
- **Customizing the site?** → See [`.github/agents/customize.agent.md`](.github/agents/customize.agent.md)
- **Writing documentation?** → See [`.github/agents/docs.agent.md`](.github/agents/docs.agent.md)
- **Need setup/deployment help?** → [INSTALL.md](INSTALL.md)
- **Troubleshooting & FAQ?** → [TROUBLESHOOTING.md](TROUBLESHOOTING.md)
- **Customization & theming?** → [CUSTOMIZE.md](CUSTOMIZE.md)
- **Quick 5-min start?** → [QUICKSTART.md](QUICKSTART.md)
## Essential Commands
### Local Development (Docker)
The recommended approach is using Docker.
```bash
# Initial setup & start dev server
docker compose pull && docker compose up
# Site runs at http://localhost:8080
# Rebuild after changing dependencies or Dockerfile
docker compose up --build
# Stop containers and free port 8080
docker compose down
```
### Pre-Commit Checklist
Before every commit, you **must** run these steps:
1. **Format Code:**
```bash
# (First time only)
npm install --save-dev prettier @shopify/prettier-plugin-liquid
# Format all files
npx prettier . --write
```
2. **Build Locally & Verify:**
```bash
# Rebuild the site
docker compose up --build
# Verify by visiting http://localhost:8080.
# Check navigation, pages, images, and dark mode.
```
## Critical Configuration
When modifying `_config.yml`, these **must be updated together**:
- **Personal site:** `url: https://username.github.io` + `baseurl:` (empty)
- **Project site:** `url: https://username.github.io` + `baseurl: /repo-name/`
- **YAML errors:** Quote strings with special characters: `title: "My: Cool Site"`
## Development Workflow
- **Git & Commits:** For commit message format and Git practices, see [.github/GIT_WORKFLOW.md](.github/GIT_WORKFLOW.md).
- **Code-Specific Instructions:** Consult the relevant instruction file for your code type.
| File Type | Instruction File |
| --------------------------------------------- | ----------------------------------------------------------------------------------------------- |
| Markdown content (`_posts/`, `_pages/`, etc.) | [markdown-content.instructions.md](.github/instructions/markdown-content.instructions.md) |
| YAML config (`_config.yml`, `_data/`) | [yaml-configuration.instructions.md](.github/instructions/yaml-configuration.instructions.md) |
| BibTeX (`_bibliography/`) | [bibtex-bibliography.instructions.md](.github/instructions/bibtex-bibliography.instructions.md) |
| Liquid templates (`_includes/`, `_layouts/`) | [liquid-templates.instructions.md](.github/instructions/liquid-templates.instructions.md) |
| JavaScript (`_scripts/`) | [javascript-scripts.instructions.md](.github/instructions/javascript-scripts.instructions.md) |
## Common Issues
For troubleshooting, see:
- [Common Pitfalls & Workarounds](.github/copilot-instructions.md#common-pitfalls--workarounds) in copilot-instructions.md
- [TROUBLESHOOTING.md](TROUBLESHOOTING.md) for detailed solutions
- [GitHub Issues](https://github.com/alshedivat/al-folio/issues) to search for your specific problem.

186
ANALYTICS.md Normal file
View File

@ -0,0 +1,186 @@
# Analytics Setup Guide
This guide helps you add website analytics to track visitor statistics and behavior.
<!--ts-->
- [Analytics Setup Guide](#analytics-setup-guide)
- [Overview](#overview)
- [Supported Analytics Services](#supported-analytics-services)
- [Google Analytics](#google-analytics)
- [Setup Steps](#setup-steps)
- [Privacy-Friendly Alternatives](#privacy-friendly-alternatives)
- [Pirsch Analytics](#pirsch-analytics)
- [Openpanel Analytics](#openpanel-analytics)
- [Monitoring &amp; Performance](#monitoring--performance)
- [Cronitor](#cronitor)
- [GDPR and Privacy Considerations](#gdpr-and-privacy-considerations)
- [GDPR Checklist](#gdpr-checklist)
- [Privacy-first services (No GDPR cookie banner needed)](#privacy-first-services-no-gdpr-cookie-banner-needed)
- [Services requiring cookie consent](#services-requiring-cookie-consent)
- [Comparing Analytics Services](#comparing-analytics-services)
- [Next Steps](#next-steps)
<!--te-->
## Overview
Analytics help you understand your website visitors: where they come from, which pages they visit, and how they interact with your content. al-folio supports several analytics providers that you can enable in `_config.yml`.
## Supported Analytics Services
Currently implemented in al-folio:
- **Google Analytics** Free, feature-rich, but collects user data
- **Pirsch Analytics** GDPR-compliant, free tier available, European servers
- **Openpanel Analytics** Open-source option, privacy-focused
- **Cronitor** Uptime monitoring with Real User Monitoring (RUM) analytics
---
## Google Analytics
Google Analytics is free and widely used. It provides detailed insights into visitor behavior.
### Setup Steps
1. **Create a Google Analytics account:**
- Visit [Google Analytics](https://analytics.google.com)
- Sign in with your Google account
- Click **Start measuring** → **Create account**
2. **Create a property for your website:**
- Enter your website name and URL
- Accept terms and continue
- Choose your timezone and currency
3. **Get your Measurement ID:**
- In the left sidebar, go to **Admin** → **Properties**
- Click **Data Streams****Web** (or your existing stream)
- Copy the **Measurement ID** (format: `G-XXXXXXXXXX`)
4. **Enable in your site:**
- Open `_config.yml` in your repository
- Set `enable_google_analytics: true`
- Add your Measurement ID: `google_analytics: G-XXXXXXXXXX`
- Commit and push
5. **Verify it's working:**
- Visit your website
- Go back to Google Analytics → **Real-time** tab
- You should see your visit appear within a few seconds
**Note:** Google Analytics takes 24-48 hours to start showing data trends.
---
## Privacy-Friendly Alternatives
If you're concerned about user privacy or GDPR compliance, consider these alternatives:
### Pirsch Analytics
**Best for:** GDPR-compliant analytics without complex setup
**Features:**
- ✅ GDPR compliant
- ✅ European servers
- ✅ Free tier available
- ✅ Simple integration
- ✅ No cookie consent needed
**Setup:**
1. Sign up at [Pirsch.io](https://pirsch.io)
2. Add your domain
3. Copy the tracking code
4. In `_config.yml`, set `enable_pirsch_analytics: true`
5. Add your Site ID: `pirsch_analytics: YOUR_SITE_ID` (format: 32 characters)
6. Commit and push
(The site ID appears in your Pirsch dashboard.)
---
### Openpanel Analytics
**Best for:** Open-source and privacy-conscious developers
**Features:**
- ✅ Open-source
- ✅ Self-hosted option available
- ✅ Privacy-focused
- ✅ Modern dashboard
**Setup:**
1. Sign up at [Openpanel.dev](https://openpanel.dev)
2. Create a project for your website
3. Get your **Client ID**
4. In `_config.yml`, set `enable_openpanel_analytics: true`
5. Add your Client ID: `openpanel_analytics: YOUR_CLIENT_ID` (format: UUID)
6. Commit and push
---
## Monitoring & Performance
### Cronitor
Cronitor is an **uptime monitoring** service with RUM (Real User Monitoring) analytics.
**Best for:** Tracking if your site is online + basic performance metrics
**Setup:**
1. Create account at [Cronitor.io](https://cronitor.io)
2. Get your **Site ID**
3. In `_config.yml`, set `enable_cronitor_analytics: true`
4. Add your Site ID: `cronitor_analytics: YOUR_SITE_ID`
5. Commit and push
---
## GDPR and Privacy Considerations
If you're in the European Union or serve EU visitors, consider GDPR requirements:
### GDPR Checklist
- [ ] If using Google Analytics: Add cookie consent banner
- [ ] Display a privacy policy explaining what analytics you use
- [ ] Allow users to opt-out if using tracking cookies
- [ ] Use privacy-first alternatives when possible
### Privacy-first services (No GDPR cookie banner needed)
- ✅ Pirsch Analytics
- ✅ Openpanel Analytics
### Services requiring cookie consent
- ❌ Google Analytics (EU users must consent first)
- ❌ Cronitor (collects user data via RUM)
---
## Comparing Analytics Services
| Service | Free | GDPR | Setup | Features | Best for |
| -------------------- | ------------ | ------------------- | ------ | ---------------- | -------------------------- |
| **Google Analytics** | ✅ | ⚠️ Requires consent | Easy | Detailed reports | Detailed tracking |
| **Pirsch** | ✅ Free tier | ✅ | Easy | Balanced | GDPR compliance |
| **Openpanel** | ✅ | ✅ | Medium | Modern dashboard | Privacy-focused developers |
| **Cronitor** | Paid | ⚠️ Requires consent | Easy | Uptime + RUM | Uptime monitoring |
---
## Next Steps
1. **Choose a service** based on your needs (privacy, features, budget)
2. **Follow the setup guide** for your chosen service
3. **Verify it's working** by visiting your site and checking the analytics dashboard
For more customization help, see [CUSTOMIZE.md](CUSTOMIZE.md).

1
CLAUDE.md Normal file
View File

@ -0,0 +1 @@
@AGENTS.md

View File

@ -1,25 +1,102 @@
# 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.
Note that since [#2048](https://github.com/alshedivat/al-folio/pull/2048) al-folio uses the [prettier formatter](https://prettier.io/) for its code, meaning all new submitted code must conform to its standard. If you don't have `prettier` installed for your setup and the `prettier` code check fails when submitting a PR, you can check the referred failed action in our repo. In that action there will be an artifact with an HTML diff showing the needed changes.
## GitHub Copilot Agents
This repository includes specialized GitHub Copilot agents and files to assist with development and documentation:
### CLAUDE.md
The `CLAUDE.md` file serves as an entry point for Claude (Anthropic's AI assistant) when working with this repository. It uses Claude's `@path/to/import` syntax (as described in [Claude's best practices](https://code.claude.com/docs/en/best-practices#write-an-effective-claude-md)) to dynamically import the `AGENTS.md` file. This approach keeps documentation centralized while providing a convenient entry point for AI assistants. The file simply contains:
```
@AGENTS.md
```
### Customization Agent
The **Customization Agent** (`.github/agents/customize.agent.md`) helps users customize their al-folio website. It:
- Guides you through modifying configuration files, adding content, and customizing the theme
- Explains technical concepts in plain language for users without coding experience
- Applies changes directly to your repository files
- Provides step-by-step instructions for common customization tasks
To use the customization agent, you need to have [GitHub Copilot](https://github.com/features/copilot) enabled in your repository. The agent can help with tasks like changing site information, updating your CV, adding publications, creating blog posts, customizing theme colors, and more.
### Documentation Agent
The **Documentation Agent** (`.github/agents/docs.agent.md`) maintains the project documentation. It:
- Updates and maintains documentation files (`README.md`, `INSTALL.md`, `CUSTOMIZE.md`, `FAQ.md`, `CONTRIBUTING.md`)
- Keeps documentation in sync with code changes
- Writes clear, concise documentation for users without technical backgrounds
- Follows documentation standards and best practices
The documentation agent is primarily intended for maintainers and contributors who are updating the project documentation.
### Custom Instruction Files
To enhance GitHub Copilot's effectiveness when working with specific file types, this repository includes custom instruction files in `.github/instructions/`:
- **`.github/copilot-instructions.md`** Main Copilot instructions with repository overview, build process, tech stack, project layout, CI/CD pipelines, and common pitfalls
- **`.github/instructions/liquid-templates.instructions.md`** Guidance for modifying Liquid template files (`.liquid`)
- **`.github/instructions/yaml-configuration.instructions.md`** Guidance for configuration and data files (`_config.yml`, `_data/**/*.yml`)
- **`.github/instructions/bibtex-bibliography.instructions.md`** Guidance for bibliography files (`.bib`, `_bibliography/**`)
- **`.github/instructions/markdown-content.instructions.md`** Guidance for content files across collections (`_books/`, `_news/`, `_pages/`, `_posts/`, `_projects/`, `_teachings/`)
- **`.github/instructions/javascript-scripts.instructions.md`** Guidance for JavaScript files in `_scripts/`
These files help Copilot agents understand project conventions, build requirements, and development workflows without requiring codebase exploration.
### Copilot Environment Setup
A GitHub Actions workflow (`.github/workflows/copilot-setup-steps.yml`) automatically configures the Copilot environment with required dependencies (Ruby 3.3.5, Python 3.13, Node.js, ImageMagick, nbconvert) before agent execution.
### Important: Verify Agent Output
While these agents are designed to assist you, **they can make mistakes or produce incorrect information**. Always review and verify the output before applying it to your repository:
- **Review code and configuration changes** Check that suggested modifications are correct and fit your needs
- **Test changes locally** Before pushing to GitHub, test the changes locally (using Docker or native setup)
- **Verify syntax** Ensure any YAML, Markdown, or configuration files have correct syntax
- **Check documentation** If the agent generates documentation, review it for accuracy and clarity
- **Don't blindly apply changes** Understand what changes are being made and why
- **Run your site** After applying changes, run your site locally and verify everything works as expected
**Example:** If an agent suggests a BibTeX entry or configuration change, verify that the syntax is correct and matches the existing style in your repository before committing.
### How to Enable Agents
GitHub Copilot agents are available to users with GitHub Copilot subscriptions. To use these agents:
1. Ensure you have [GitHub Copilot](https://github.com/features/copilot) enabled for your account
2. Open your repository in an editor with GitHub Copilot support (such as VS Code with the GitHub Copilot extension)
3. The agents will be automatically available based on the configuration files in `.github/agents/`. For more information, see [Using custom agents in your IDE](https://docs.github.com/en/enterprise-cloud@latest/copilot/how-tos/use-copilot-agents/coding-agent/create-custom-agents#using-custom-agents-in-your-ide).
For more information about GitHub Copilot agents and how to use them, see the [GitHub Copilot documentation](https://docs.github.com/en/copilot).
## 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.

1402
CUSTOMIZE.md Normal file

File diff suppressed because it is too large Load Diff

View File

@ -1,24 +1,76 @@
FROM bitnami/minideb:latest
Label MAINTAINER Amir Pourmand
RUN apt-get update -y
# add locale
RUN apt-get -y install locales
# Set the locale
FROM ruby:slim
# uncomment these if you are having this issue with the build:
# /usr/local/bundle/gems/jekyll-4.3.4/lib/jekyll/site.rb:509:in `initialize': Permission denied @ rb_sysopen - /srv/jekyll/.jekyll-cache/.gitignore (Errno::EACCES)
# ARG GROUPID=901
# ARG GROUPNAME=ruby
# ARG USERID=901
# ARG USERNAME=jekyll
ENV DEBIAN_FRONTEND noninteractive
LABEL authors="Amir Pourmand,George Araújo" \
description="Docker image for al-folio academic template" \
maintainer="Amir Pourmand"
# uncomment these if you are having this issue with the build:
# /usr/local/bundle/gems/jekyll-4.3.4/lib/jekyll/site.rb:509:in `initialize': Permission denied @ rb_sysopen - /srv/jekyll/.jekyll-cache/.gitignore (Errno::EACCES)
# add a non-root user to the image with a specific group and user id to avoid permission issues
# RUN groupadd -r $GROUPNAME -g $GROUPID && \
# useradd -u $USERID -m -g $GROUPNAME $USERNAME
# install system dependencies
RUN apt-get update -y && \
apt-get install -y --no-install-recommends \
build-essential \
curl \
git \
imagemagick \
inotify-tools \
locales \
nodejs \
procps \
python3-pip \
zlib1g-dev && \
pip --no-cache-dir install --upgrade --break-system-packages nbconvert
# clean up
RUN apt-get clean && \
apt-get autoremove && \
rm -rf /var/lib/apt/lists/* /var/cache/apt/archives/* /tmp/*
# set the locale
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}"
RUN gem install jekyll bundler
# set environment variables
ENV EXECJS_RUNTIME=Node \
JEKYLL_ENV=production \
LANG=en_US.UTF-8 \
LANGUAGE=en_US:en \
LC_ALL=en_US.UTF-8
# create a directory for the jekyll site
RUN mkdir /srv/jekyll
# copy the Gemfile and Gemfile.lock to the image
ADD Gemfile.lock /srv/jekyll
ADD Gemfile /srv/jekyll
# set the working directory
WORKDIR /srv/jekyll
RUN bundle install
# install jekyll and dependencies
RUN gem install --no-document jekyll bundler
RUN bundle install --no-cache
EXPOSE 8080
COPY bin/entry_point.sh /tmp/entry_point.sh
# uncomment this if you are having this issue with the build:
# /usr/local/bundle/gems/jekyll-4.3.4/lib/jekyll/site.rb:509:in `initialize': Permission denied @ rb_sysopen - /srv/jekyll/.jekyll-cache/.gitignore (Errno::EACCES)
# set the ownership of the jekyll site directory to the non-root user
# USER $USERNAME
CMD ["/tmp/entry_point.sh"]

175
FAQ.md Normal file
View File

@ -0,0 +1,175 @@
# 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.
<!--ts-->
- [Frequently Asked Questions](#frequently-asked-questions)
- [After I create a new repository from this template and setup the repo, I get a deployment error. Isn't the website supposed to correctly deploy automatically?](#after-i-create-a-new-repository-from-this-template-and-setup-the-repo-i-get-a-deployment-error-isnt-the-website-supposed-to-correctly-deploy-automatically)
- [I am using a custom domain (e.g., foo.com). My custom domain becomes blank in the repository settings after each deployment. How do I fix that?](#i-am-using-a-custom-domain-eg-foocom-my-custom-domain-becomes-blank-in-the-repository-settings-after-each-deployment-how-do-i-fix-that)
- [My webpage works locally. But after deploying, it fails to build and throws Unknown tag 'toc'. How do I fix that?](#my-webpage-works-locally-but-after-deploying-it-fails-to-build-and-throws-unknown-tag-toc-how-do-i-fix-that)
- [My webpage works locally. But after deploying, it is not displayed correctly (CSS and JS are not loaded properly). How do I fix that?](#my-webpage-works-locally-but-after-deploying-it-is-not-displayed-correctly-css-and-js-are-not-loaded-properly-how-do-i-fix-that)
- [Atom feed doesn't work. Why?](#atom-feed-doesnt-work-why)
- [My site doesn't work when I enable related_blog_posts. Why?](#my-site-doesnt-work-when-i-enable-related_blog_posts-why)
- [When trying to deploy, it's asking for github login credentials, which github disabled password authentication and it exits with an error. How to fix?](#when-trying-to-deploy-its-asking-for-github-login-credentials-which-github-disabled-password-authentication-and-it-exits-with-an-error-how-to-fix)
- [When I manually run the Lighthouse Badger workflow, it fails with Error: Input required and not supplied: token. How do I fix that?](#when-i-manually-run-the-lighthouse-badger-workflow-it-fails-with-error-input-required-and-not-supplied-token-how-do-i-fix-that)
- [My code runs fine locally, but when I create a commit and submit it, it fails with prettier code formatter workflow run failed for main 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-main-branch-how-do-i-fix-that)
- [After I update my site with some new content, even a small change, the GitHub action throws an error or displays a warning. What happened?](#after-i-update-my-site-with-some-new-content-even-a-small-change-the-github-action-throws-an-error-or-displays-a-warning-what-happened)
- [I am trying to deploy my site, but it fails with Could not find gem 'jekyll-diagrams' in locally installed gems. How do I fix that?](#i-am-trying-to-deploy-my-site-but-it-fails-with-could-not-find-gem-jekyll-diagrams-in-locally-installed-gems-how-do-i-fix-that)
- [How can I update Academicons version on the template](#how-can-i-update-academicons-version-on-the-template)
- [How can I update Font Awesome version on the template](#how-can-i-update-font-awesome-version-on-the-template)
- [What do all these GitHub actions/workflows mean?](#what-do-all-these-github-actionsworkflows-mean)
- [How can I use Google Search Console ID on the template?](#how-can-i-use-google-search-console-id-on-the-template)
- [What are Code Wiki and DeepWiki?](#what-are-code-wiki-and-deepwiki)
- [When to use these tools](#when-to-use-these-tools)
- [What they do](#what-they-do)
- [Limitations](#limitations)
- [Access these tools](#access-these-tools)
<!--te-->
## 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 `main` or `source` branch of your repository. The file should contain your custom domain name. (Relevant issue: [130](https://github.com/alshedivat/al-folio/issues/130).)
## My webpage works locally. But after deploying, it fails to build and throws `Unknown tag 'toc'`. How do I fix that?
Make sure you followed through the [deployment instructions](#deployment) in the previous section. You should have set the deployment branch to `gh-pages`. (Related issue: [1438](https://github.com/alshedivat/al-folio/issues/1438).)
## My webpage works locally. But after deploying, it is not displayed correctly (CSS and JS are not loaded properly). How do I fix that?
If the website does not load the theme, the layout looks weird, and all links are broken, being the main page displayed this way:
<img src="assets/img/template_error.png" width="500">
make sure to correctly specify the `url` and `baseurl` paths in `_config.yml`. Set `url` to `https://<your-github-username>.github.io` or to `https://<your.custom.domain>` if you are using a custom domain. If you are deploying a <ins>personal</ins> or <ins>organization</ins> website, leave `baseurl` **empty** (do **NOT** delete it). If you are deploying a project page, set `baseurl: /<your-project-name>/`. If all previous steps were done correctly, all is missing is for your browser to fetch again the site stylesheet. For this, you can:
- press [Shift + F5 on Chromium-based](https://support.google.com/chrome/answer/157179#zippy=%2Cwebpage-shortcuts) or [Ctrl + F5 on Firefox-based](https://support.mozilla.org/en-US/kb/keyboard-shortcuts-perform-firefox-tasks-quickly) browsers to reload the page ignoring cached content
- clean your browser history
- simply try it in a private session, here's how to do it in [Chrome](https://support.google.com/chrome/answer/95464) and [Firefox](https://support.mozilla.org/en-US/kb/private-browsing-use-firefox-without-history)
## Atom feed doesn't work. Why?
Make sure to correctly specify the `url` and `baseurl` paths in `_config.yml`. RSS Feed plugin works with these correctly set up fields: `title`, `url`, `description` and `author`. Make sure to fill them in an appropriate way and try again.
## My site doesn't work when I enable `related_blog_posts`. Why?
This is probably due to the [classifier reborn](https://github.com/jekyll/classifier-reborn) plugin, which is used to calculate related posts. If the error states `Liquid Exception: Zero vectors can not be normalized...` or `sqrt': Numerical argument is out of domain - "sqrt"`, it means that it could not calculate related posts for a specific post. This is usually caused by [empty or minimal blog posts](https://github.com/jekyll/classifier-reborn/issues/64) without meaningful words (i.e. only [stop words](https://en.wikipedia.org/wiki/Stop_words)) or even [specific characters](https://github.com/jekyll/classifier-reborn/issues/194) you used in your posts. Also, the calculus for similar posts are made for every `post`, which means every page that uses `layout: post`, including the announcements. To change this behavior, simply add `related_posts: false` to the front matter of the page you don't want to display related posts on. Another solution is to disable the lsi (latent semantic indexing) entirely by setting the `lsi` flag to `false` in `_config.yml`. Related issue: [#1828](https://github.com/alshedivat/al-folio/issues/1828).
## When trying to deploy, it's asking for github login credentials, which github disabled password authentication and it exits with an error. How to fix?
Open .git/config file using your preferred editor. Change the `https` portion of the `url` variable to `ssh`. Try deploying again.
## When I manually run the Lighthouse Badger 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 main 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](https://prettier.io/docs/en/). If you want to ensure your code is compliant with `Prettier`, you have a few options:
- if you are running locally with `Docker` and using [development containers](https://github.com/alshedivat/al-folio/blob/main/INSTALL.md#local-setup-with-development-containers), `Prettier` is already included
- if you don't use `Docker`, it is simple to integrate it with your preferred IDE using an [extension](https://prettier.io/docs/en/editors)
- if you want to run it manually, you can follow the first 2 steps in [this tutorial](https://george-gca.github.io/blog/2023/slidev_for_non_web_devs/) (`Installing node version manager (nvm)` and `Installing Node (latest version)`), then, install it using `npm install prettier` inside the project directory, or install it globally on your computer using `npm install -g prettier`. To run `Prettier` on your current directory use `npx prettier . --write`.
You can also disable it for your repo. For this, just delete the file [.github/workflows/prettier.yml](https://github.com/alshedivat/al-folio/blob/main/.github/workflows/prettier.yml).
## After I update my site with some new content, even a small change, the GitHub action throws an error or displays a warning. What happened?
Probably your GitHub workflow is throwing an error like this:
```bash
/opt/hostedtoolcache/Ruby/3.0.2/x64/lib/ruby/gems/3.0.0/gems/bundler-2.5.5/lib/bundler/runtime.rb:304:in `check_for_activated_spec!': You have already activated uri 0.10.1, but your Gemfile requires uri 0.13.0. Since uri is a default gem, you can either remove your dependency on it or try updating to a newer version of bundler that supports uri as a default gem. (Gem::LoadError)
```
or maybe displaying a warning like one of these:
```
Node.js 16 actions are deprecated. Please update the following actions to use Node.js 20: actions/checkout@v3. For more information see: https://github.blog/changelog/2023-09-22-github-actions-transitioning-from-node-16-to-node-20/.
Node.js 16 actions are deprecated. Please update the following actions to use Node.js 20: actions/checkout@v2, actions/cache@v2. For more information see: https://github.blog/changelog/2023-09-22-github-actions-transitioning-from-node-16-to-node-20/.
The following actions uses node12 which is deprecated and will be forced to run on node16: actions/checkout@v2, actions/cache@v2. For more info: https://github.blog/changelog/2023-06-13-github-actions-all-actions-will-run-on-node16-instead-of-node12-by-default/
The `set-output` command is deprecated and will be disabled soon. Please upgrade to using Environment Files. For more information see: https://github.blog/changelog/2022-10-11-github-actions-deprecating-save-state-and-set-output-commands/
```
If that's the case, you are using deprecated libraries/commands. This happens because you are using a very old version of al-folio. To fix this it is recommended [upgrading your code to the latest version](INSTALL.md#upgrading-from-a-previous-version) of the template. You will probably need to do some manual merging. If you find it easier, you could create a copy of your repository, do a fresh installation from the template and reapply all your changes. For this I would recommend a tool like [meld](https://meldmerge.org/) or [winmerge](https://winmerge.org/) to check the differences between directories/files.
Note that libraries tend to be deprecated and support for them dropped as they are no longer maintained, and keep using them involves security breaches. Also, some of these deprecations are enforced, for example, by GitHub itself, so there's so much we can do. We have also added tons of new functionality, as well as tidying things up and improving the overall speed and structure, so you could also benefit from these improvements.
## I am trying to deploy my site, but it fails with `Could not find gem 'jekyll-diagrams' in locally installed gems`. How do I fix that?
`jekyll-diagrams` support was dropped in [#1992](https://github.com/alshedivat/al-folio/pull/1992) in favor of using `mermaid.js` directly. Simply [update your code](INSTALL.md#upgrading-from-a-previous-version) to get the latest changes.
## How can I update Academicons version on the template
To update the Academicons version, you need to download the latest release from the [Academicons website](https://jpswalsh.github.io/academicons/). After downloading, extract the zip file and copy the files `academicons.ttf` and `academicons.woff` from the `fonts/` directory to `assets/fonts/` and the file `academicons.min.css` from the `css/` directory to `assets/css/`.
## How can I update Font Awesome version on the template
To update the Font Awesome version, you need to download the latest release "for the web" from the [Font Awesome website](https://fontawesome.com/download). After downloading, extract the zip file and copy the `scss/` directory content to `_sass/font-awesome/` and the `webfonts/` content to `assets/webfonts/`.
## What do all these GitHub actions/workflows mean?
GitHub actions are a way to automate tasks in the repository. They are defined in `.github/workflows/` directory. Each file in this directory is a workflow. Workflows are made up of one or more jobs, and each job runs on a virtual machine hosted by GitHub. You can see the status of the workflows in the `Actions` tab of your repository. For more information, check the [GitHub Actions documentation](https://docs.github.com/en/actions).
Currently we have the following workflows:
- `axe.yml`: does some accessibility testing in your site. It uses the [axe cli](https://github.com/dequelabs/axe-core-npm/tree/develop/packages/cli) tool with a chrome driver to render the webpage and allow the analysis. Must be run manually, since fixing some of the issues is not straightforward
- `broken-links-site.yml`: checks for broken links in your built website with the [lychee-action](https://github.com/lycheeverse/lychee-action)
- `broken-links.yml`: checks for broken links in your repository with the [lychee-action](https://github.com/lycheeverse/lychee-action)
- `deploy-docker-tag.yml`: adds some metadata to the docker image and pushes it to Docker Hub
- `deploy-image.yml`: deploys a new docker image with the latest changes to Docker Hub
- `deploy.yml`: deploys the website to GitHub Pages
- `docker-slim.yml`: deploys a smaller version of the docker image to Docker Hub with the [docker-slim-action](https://github.com/kitabisa/docker-slim-action)
- `lighthouse-badger.yml`: runs a [lighthouse](https://github.com/GoogleChrome/lighthouse) test for your site with the [lighthouse-badger-action](https://github.com/MyActionWay/lighthouse-badger-action), saving the results in the repository for easy inspecting, as can be seen [here](https://github.com/alshedivat/al-folio?tab=readme-ov-file#lighthouse-pagespeed-insights). For more information on how to enable this workflow, check our [FAQ question about it](https://github.com/alshedivat/al-folio/blob/main/FAQ.md#when-i-manually-run-the-lighthouse-badger-workflow-it-fails-with-error-input-required-and-not-supplied-token-how-do-i-fix-that)
- `prettier-comment-on-pr.yml`: not working. For now, this action is disabled. It was supposed to run prettier on the PRs and comment on them with the changes needed. For more information, check [issue 2115](https://github.com/alshedivat/al-folio/issues/2115)
- `prettier.yml`: runs [prettier](https://prettier.io/) on the code to ensure it is well formatted. For more information, check our [FAQ question about it](https://github.com/alshedivat/al-folio/blob/main/FAQ.md#my-code-runs-fine-locally-but-when-i-create-a-commit-and-submit-it-it-fails-with-prettier-code-formatter-workflow-run-failed-for-main-branch-how-do-i-fix-that)
## How can I use Google Search Console ID on the template?
In the configuration file `_config.yml` the tag `google-site-verification` should be updated to use this functionality. Here is how you can proceed,
- Generate your HTML tag by following [https://support.google.com/webmasters/answer/9008080?hl=en#meta_tag_verification&zippy=%2Chtml-tag](https://support.google.com/webmasters/answer/9008080?hl=en#meta_tag_verification&zippy=%2Chtml-tag) with URL prefix option.
- In the verify ownership option choose HTML tag and copy the tag contents which should look like `<meta name="google-site-verification" content="GoogleSearchConsoleID" />`.
- The string against `content` is the Google Search Console ID that can be used in the template. e.g. `google-site-verification: GoogleSearchConsoleID`. Now set the property `enable_google_verification: true`.
It looks like the Domain type property in the Google Search Console to verify the ownership of all URLs across all subdomains with GitHub Pages does not work.
## What are Code Wiki and DeepWiki?
**Code Wiki** and **DeepWiki** are AI-powered tools that help you understand GitHub repositories through interactive documentation. They should be treated as supplementary resources when you cannot find the information you need in the official project documentation.
### When to use these tools
**Use Code Wiki and DeepWiki only after**:
- You have reviewed the relevant documentation files in this repository (`README.md`, `INSTALL.md`, `CUSTOMIZE.md`, `FAQ.md`, or `CONTRIBUTING.md`)
- You have checked the [GitHub Discussions Q&A section](https://github.com/alshedivat/al-folio/discussions/categories/q-a) for similar questions
- You have searched existing [GitHub Issues](https://github.com/alshedivat/al-folio/issues)
### What they do
**Code Wiki** (powered by Google Gemini) generates interactive documentation from your repository code. It allows you to:
- Browse your repository's structure and architecture
- Search for specific functions or modules
- Understand how different parts of the codebase work together
- Get diagrams and visual representations of your code architecture
**DeepWiki** provides an AI-powered interface to ask questions about a repository, similar to having an engineer available 24/7. It allows you to:
- Ask natural language questions about the codebase
- Get instant answers about how specific features work
- Search for code patterns and implementations
### Limitations
These tools are generated automatically from our code and may not always reflect the most current documentation standards or best practices specific to this project. They should not replace official documentation but rather complement it when you need deeper technical insights.
### Access these tools
- **Code Wiki**: [Code Wiki for al-folio](https://codewiki.google/github.com/alshedivat/al-folio)
- **DeepWiki**: [DeepWiki for al-folio](https://deepwiki.com/alshedivat/al-folio)

31
Gemfile
View File

@ -1,24 +1,45 @@
source 'https://rubygems.org'
gem 'jekyll'
# Core plugins that directly affect site building
group :jekyll_plugins do
gem 'jekyll'
gem 'jekyll-archives'
gem 'jekyll-diagrams'
gem 'jekyll-3rd-party-libraries'
gem 'jekyll-archives-v2'
gem 'jekyll-cache-bust'
gem 'jekyll-email-protect'
gem 'jekyll-feed'
gem 'jekyll-get-json'
gem 'jekyll-imagemagick'
gem 'jekyll-jupyter-notebook'
gem 'jekyll-link-attributes'
gem 'jekyll-minifier'
gem 'jekyll-paginate-v2'
gem 'jekyll-regex-replace'
gem 'jekyll-scholar'
gem 'jekyll-sitemap'
gem 'jekyll-link-attributes'
gem 'jekyll-socials'
gem 'jekyll-tabs'
gem 'jekyll-terser', :git => "https://github.com/RobertoJBeltran/jekyll-terser.git"
gem 'jekyll-toc'
gem 'jekyll-twitter-plugin'
gem 'jemoji'
gem 'jekyll-pandoc'
gem 'mini_racer'
gem 'unicode_utils'
gem 'webrick'
gem 'classifier-reborn' # used for content categorization during the build
end
# Gems for development or external data fetching (outside :jekyll_plugins)
group :other_plugins do
gem 'httparty'
gem 'css_parser'
gem 'feedjira'
gem 'httparty'
gem 'observer' # used by jekyll-scholar
gem 'ostruct' # used by jekyll-twitter-plugin
# gem 'terser' # used by jekyll-terser
# gem 'unicode_utils' -- should be already installed by jekyll
# gem 'webrick' -- should be already installed by jekyll
end

347
Gemfile.lock Normal file
View File

@ -0,0 +1,347 @@
GIT
remote: https://github.com/RobertoJBeltran/jekyll-terser.git
revision: 1085bf66d692799af09fe39f8162a1e6e42a3cc4
specs:
jekyll-terser (0.2.3)
jekyll (>= 0.10.0)
terser (>= 1.0.0)
GEM
remote: https://rubygems.org/
specs:
activesupport (8.1.2)
base64
bigdecimal
concurrent-ruby (~> 1.0, >= 1.3.1)
connection_pool (>= 2.2.5)
drb
i18n (>= 1.6, < 2)
json
logger (>= 1.4.2)
minitest (>= 5.1)
securerandom (>= 0.3)
tzinfo (~> 2.0, >= 2.0.5)
uri (>= 0.13.1)
addressable (2.8.8)
public_suffix (>= 2.0.2, < 8.0)
base64 (0.3.0)
bibtex-ruby (6.2.0)
latex-decode (~> 0.0)
logger (~> 1.7)
racc (~> 1.7)
bigdecimal (4.0.1)
citeproc (1.1.0)
date
forwardable
json
namae (~> 1.0)
observer (< 1.0)
open-uri (< 1.0)
citeproc-ruby (2.1.8)
citeproc (~> 1.0, >= 1.0.9)
csl (~> 2.0)
observer (< 1.0)
classifier-reborn (2.3.0)
fast-stemmer (~> 1.0)
matrix (~> 0.4)
colorator (1.1.0)
concurrent-ruby (1.3.6)
connection_pool (3.0.2)
crass (1.0.6)
csl (2.2.1)
forwardable (~> 1.3)
namae (~> 1.2)
open-uri (< 1.0)
rexml (~> 3.0)
set (~> 1.1)
singleton (< 1.0)
time (< 1.0)
csl-styles (2.0.2)
csl (~> 2.0)
css_parser (1.21.1)
addressable
cssminify2 (2.1.0)
csv (3.3.5)
date (3.5.1)
deep_merge (1.2.2)
drb (2.2.3)
em-websocket (0.5.3)
eventmachine (>= 0.12.9)
http_parser.rb (~> 0)
eventmachine (1.2.7)
execjs (2.10.0)
fast-stemmer (1.0.2)
feedjira (4.0.1)
logger (>= 1.0, < 2)
loofah (>= 2.3.1, < 3)
sax-machine (>= 1.0, < 2)
ffi (1.17.3-aarch64-linux-gnu)
ffi (1.17.3-aarch64-linux-musl)
ffi (1.17.3-arm-linux-gnu)
ffi (1.17.3-arm-linux-musl)
ffi (1.17.3-arm64-darwin)
ffi (1.17.3-x86_64-darwin)
ffi (1.17.3-x86_64-linux-gnu)
ffi (1.17.3-x86_64-linux-musl)
forwardable (1.4.0)
forwardable-extended (2.6.0)
gemoji (4.1.0)
google-protobuf (4.33.4)
bigdecimal
rake (>= 13)
google-protobuf (4.33.4-aarch64-linux-gnu)
bigdecimal
rake (>= 13)
google-protobuf (4.33.4-aarch64-linux-musl)
bigdecimal
rake (>= 13)
google-protobuf (4.33.4-arm64-darwin)
bigdecimal
rake (>= 13)
google-protobuf (4.33.4-x86_64-darwin)
bigdecimal
rake (>= 13)
google-protobuf (4.33.4-x86_64-linux-gnu)
bigdecimal
rake (>= 13)
google-protobuf (4.33.4-x86_64-linux-musl)
bigdecimal
rake (>= 13)
html-pipeline (2.14.3)
activesupport (>= 2)
nokogiri (>= 1.4)
htmlcompressor (0.4.0)
http_parser.rb (0.8.1)
httparty (0.24.2)
csv
mini_mime (>= 1.0.0)
multi_xml (>= 0.5.2)
i18n (1.14.8)
concurrent-ruby (~> 1.0)
jekyll-3rd-party-libraries (0.0.1)
css_parser (>= 1.6, < 2.0)
jekyll (>= 3.6, < 5.0)
nokogiri (>= 1.8, < 2.0)
jekyll (4.4.1)
addressable (~> 2.4)
base64 (~> 0.2)
colorator (~> 1.0)
csv (~> 3.0)
em-websocket (~> 0.5)
i18n (~> 1.0)
jekyll-sass-converter (>= 2.0, < 4.0)
jekyll-watch (~> 2.0)
json (~> 2.6)
kramdown (~> 2.3, >= 2.3.1)
kramdown-parser-gfm (~> 1.0)
liquid (~> 4.0)
mercenary (~> 0.3, >= 0.3.6)
pathutil (~> 0.9)
rouge (>= 3.0, < 5.0)
safe_yaml (~> 1.0)
terminal-table (>= 1.8, < 4.0)
webrick (~> 1.7)
jekyll-archives-v2 (0.0.7)
activesupport
jekyll (>= 3.6, < 5.0)
jekyll-cache-bust (0.0.1)
jekyll (>= 3.6, < 5.0)
jekyll-email-protect (1.1.0)
jekyll-feed (0.17.0)
jekyll (>= 3.7, < 5.0)
jekyll-get-json (1.0.0)
deep_merge (~> 1.2)
jekyll (>= 3.0)
jekyll-imagemagick (1.4.0)
jekyll (>= 3.4)
jekyll-jupyter-notebook (0.0.6)
jekyll
jekyll-link-attributes (1.0.1)
jekyll-minifier (0.2.2)
cssminify2 (~> 2.1.0)
htmlcompressor (~> 0.4)
jekyll (~> 4.0)
json-minify (~> 0.0.3)
terser (~> 1.2.3)
jekyll-paginate-v2 (3.0.0)
jekyll (>= 3.0, < 5.0)
jekyll-pandoc (2.0.1)
jekyll (>= 3.0)
pandoc-ruby (~> 2.0, >= 2.0.0)
jekyll-regex-replace (1.1.0)
jekyll-sass-converter (3.1.0)
sass-embedded (~> 1.75)
jekyll-scholar (7.3.0)
bibtex-ruby (~> 6.0)
citeproc-ruby (>= 2.1.6)
csl-styles (~> 2.0)
jekyll (~> 4.0)
jekyll-sitemap (1.4.0)
jekyll (>= 3.7, < 5.0)
jekyll-socials (0.0.6)
jekyll (>= 3.6, < 5.0)
jekyll-tabs (1.2.1)
jekyll (>= 3.0, < 5.0)
jekyll-toc (0.19.0)
jekyll (>= 3.9)
nokogiri (~> 1.12)
jekyll-twitter-plugin (2.1.0)
jekyll-watch (2.2.1)
listen (~> 3.0)
jemoji (0.13.0)
gemoji (>= 3, < 5)
html-pipeline (~> 2.2)
jekyll (>= 3.0, < 5.0)
json (2.18.0)
json-minify (0.0.3)
json (> 0)
kramdown (2.5.2)
rexml (>= 3.4.4)
kramdown-parser-gfm (1.1.0)
kramdown (~> 2.0)
latex-decode (0.4.2)
libv8-node (24.12.0.1)
libv8-node (24.12.0.1-aarch64-linux)
libv8-node (24.12.0.1-aarch64-linux-musl)
libv8-node (24.12.0.1-arm64-darwin)
libv8-node (24.12.0.1-x86_64-darwin)
libv8-node (24.12.0.1-x86_64-linux)
libv8-node (24.12.0.1-x86_64-linux-musl)
liquid (4.0.4)
listen (3.10.0)
logger
rb-fsevent (~> 0.10, >= 0.10.3)
rb-inotify (~> 0.9, >= 0.9.10)
logger (1.7.0)
loofah (2.25.0)
crass (~> 1.0.2)
nokogiri (>= 1.12.0)
matrix (0.4.3)
mercenary (0.4.0)
mini_mime (1.1.5)
mini_racer (0.19.2)
libv8-node (~> 24.12.0.1)
minitest (6.0.1)
prism (~> 1.5)
multi_xml (0.8.1)
bigdecimal (>= 3.1, < 5)
namae (1.2.0)
racc (~> 1.7)
nokogiri (1.19.0-aarch64-linux-gnu)
racc (~> 1.4)
nokogiri (1.19.0-aarch64-linux-musl)
racc (~> 1.4)
nokogiri (1.19.0-arm-linux-gnu)
racc (~> 1.4)
nokogiri (1.19.0-arm-linux-musl)
racc (~> 1.4)
nokogiri (1.19.0-arm64-darwin)
racc (~> 1.4)
nokogiri (1.19.0-x86_64-darwin)
racc (~> 1.4)
nokogiri (1.19.0-x86_64-linux-gnu)
racc (~> 1.4)
nokogiri (1.19.0-x86_64-linux-musl)
racc (~> 1.4)
observer (0.1.2)
open-uri (0.5.0)
stringio
time
uri
ostruct (0.6.3)
pandoc-ruby (2.1.10)
pathutil (0.16.2)
forwardable-extended (~> 2.6)
prism (1.8.0)
public_suffix (7.0.2)
racc (1.8.1)
rake (13.3.1)
rb-fsevent (0.11.2)
rb-inotify (0.11.1)
ffi (~> 1.0)
rexml (3.4.4)
rouge (4.7.0)
safe_yaml (1.0.5)
sass-embedded (1.97.2-aarch64-linux-gnu)
google-protobuf (~> 4.31)
sass-embedded (1.97.2-aarch64-linux-musl)
google-protobuf (~> 4.31)
sass-embedded (1.97.2-arm-linux-gnueabihf)
google-protobuf (~> 4.31)
sass-embedded (1.97.2-arm-linux-musleabihf)
google-protobuf (~> 4.31)
sass-embedded (1.97.2-arm64-darwin)
google-protobuf (~> 4.31)
sass-embedded (1.97.2-x86_64-darwin)
google-protobuf (~> 4.31)
sass-embedded (1.97.2-x86_64-linux-gnu)
google-protobuf (~> 4.31)
sass-embedded (1.97.2-x86_64-linux-musl)
google-protobuf (~> 4.31)
sax-machine (1.3.2)
securerandom (0.4.1)
set (1.1.2)
singleton (0.3.0)
stringio (3.2.0)
terminal-table (3.0.2)
unicode-display_width (>= 1.1.1, < 3)
terser (1.2.6)
execjs (>= 0.3.0, < 3)
time (0.4.2)
date
tzinfo (2.0.6)
concurrent-ruby (~> 1.0)
unicode-display_width (2.6.0)
unicode_utils (1.4.0)
uri (1.1.1)
webrick (1.9.2)
PLATFORMS
aarch64-linux
aarch64-linux-gnu
aarch64-linux-musl
arm-linux-gnu
arm-linux-gnueabihf
arm-linux-musl
arm-linux-musleabihf
arm64-darwin
x86_64-darwin
x86_64-linux
x86_64-linux-gnu
x86_64-linux-musl
DEPENDENCIES
classifier-reborn
css_parser
feedjira
httparty
jekyll
jekyll-3rd-party-libraries
jekyll-archives-v2
jekyll-cache-bust
jekyll-email-protect
jekyll-feed
jekyll-get-json
jekyll-imagemagick
jekyll-jupyter-notebook
jekyll-link-attributes
jekyll-minifier
jekyll-paginate-v2
jekyll-pandoc
jekyll-regex-replace
jekyll-scholar
jekyll-sitemap
jekyll-socials
jekyll-tabs
jekyll-terser!
jekyll-toc
jekyll-twitter-plugin
jemoji
mini_racer
observer
ostruct
unicode_utils
webrick
BUNDLED WITH
4.0.4

296
INSTALL.md Normal file
View File

@ -0,0 +1,296 @@
# Installing and Deploying
<!--ts-->
- [Installing and Deploying](#installing-and-deploying)
- [Recommended Approach](#recommended-approach)
- [Template vs. Fork: Which Should I Use?](#template-vs-fork-which-should-i-use)
- [Important Notes for GitHub Pages Sites](#important-notes-for-github-pages-sites)
- [Automatic Deployment](#automatic-deployment)
- [Local Development](#local-development)
- [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)
- [Have Bugs on Docker Image?](#have-bugs-on-docker-image)
- [Local Setup with Development Containers](#local-setup-with-development-containers)
- [Local Setup (Legacy, no longer supported)](#local-setup-legacy-no-longer-supported)
- [Deployment](#deployment)
- [For personal and organization webpages](#for-personal-and-organization-webpages)
- [For project pages](#for-project-pages)
- [Enabling automatic deployment](#enabling-automatic-deployment)
- [Manual deployment to GitHub Pages](#manual-deployment-to-github-pages)
- [Deploy on <a href="https://www.netlify.com/" rel="nofollow">Netlify</a>](https://www.netlify.com/)
- [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)
- [Maintaining Dependencies](#maintaining-dependencies)
- [Upgrading from a previous version](#upgrading-from-a-previous-version)
<!--te-->
## 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.
**For the quickest setup**, follow the [Quick Start Guide](QUICKSTART.md), which will have you up and running in 5 minutes.
### Template vs. Fork: Which Should I Use?
**Use the "Use this template" button** (recommended) when creating your own al-folio site. This creates a clean, independent copy that is not linked to the main al-folio repository.
**If you already forked the repository**, your fork will work fine, but you should be aware of a common pitfall:
- Forks maintain a connection to the original repository, which can make it easy to accidentally submit pull requests to al-folio with your personal site changes
- **Solution:** When making changes to your fork, always create a new branch (e.g., `git checkout -b my-site-updates`) and verify that you're pushing to **your own fork** before submitting pull requests
- Only submit pull requests to `alshedivat/al-folio` if you're intentionally contributing improvements that benefit the entire al-folio community
### Important Notes for GitHub Pages Sites
If you plan to upload your site to `<your-github-username>.github.io`, the repository name :warning: **MUST BE** :warning: `<your-github-username>.github.io` or `<your-github-orgname>.github.io`, as stated in the [GitHub pages docs](https://docs.github.com/en/pages/getting-started-with-github-pages/about-github-pages#types-of-github-pages-sites).
When configuring `_config.yml`, set `url` to `https://<your-github-username>.github.io` and leave `baseurl` **empty** (do NOT delete it), setting it as `baseurl:`.
### Automatic Deployment
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 Development
Once everything is deployed, you can download the repository to your machine and start customizing it locally:
```bash
git clone git@github.com:<your-username>/<your-repo-name>.git
```
See [Local setup using Docker](#local-setup-using-docker-recommended) or other sections below for local development options.
## Local setup on Windows
If you are using Windows, it is **highly recommended** to use [Windows Subsystem for Linux (WSL)](https://learn.microsoft.com/en-us/windows/wsl/install), which is a compatibility layer for running Linux on top of Windows. You can follow [these instructions](https://ubuntu.com/tutorials/install-ubuntu-on-wsl2-on-windows-11-with-gui-support) to install WSL and Ubuntu on your machine. You only need to go up to the step 4 of the tutorial (you don't have to enable the optional `systemd` nor the graphical applications), and then you can follow the instructions below to install docker. You can install docker natively on Windows as well, but it has been having some issues as can be seen in [#1540](https://github.com/alshedivat/al-folio/issues/1540), [#2007](https://github.com/alshedivat/al-folio/issues/2007).
## Local setup using Docker (Recommended)
Using Docker to install Jekyll and Ruby dependencies is the easiest way.
You need to take the following steps to get `al-folio` up and running on your local machine:
- First, install [docker](https://docs.docker.com/get-docker/) and [docker-compose](https://docs.docker.com/compose/install/).
- Finally, run the following command that will pull the latest pre-built image from DockerHub and will run your website.
```bash
docker compose pull
docker compose up
```
Note that when you run it for the first time, it will download a docker image of size 400MB or so. To see the template running, open your browser and go to `http://localhost:8080`. You should see a copy of the theme's demo website.
Now, feel free to customize the theme however you like (don't forget to change the name!). Also, your changes should be automatically rendered in real-time (or maybe after a few seconds).
> Beta: You can also use the slimmed docker image with a size below 100MBs and exact same functionality. Just use `docker compose -f docker-compose-slim.yml up`
### Build your own docker image
> Note: this approach is only necessary if you would like to build an older or very custom version of al-folio.
Build and run a new docker image using:
```bash
docker compose up --build
```
> If you want to update jekyll, install new ruby packages, etc., all you have to do is build the image again using `--force-recreate` argument at the end of the previous command! It will download Ruby and Jekyll and install all Ruby packages again from scratch.
If you want to use a specific docker version, you can do so by changing the version tag to `your_version` in `docker-compose.yaml` (the `v0.16.3` in `image: amirpourmand/al-folio:v0.16.3`). For example, you might have created your website on `v0.10.0` and you want to stick with that.
### Have Bugs on Docker Image?
Sometimes, there might be some bugs in the current docker image. It might be version mismatch or anything. If you want to debug and easily solve the problem for yourself you can do the following steps:
```
docker compose up -d
docker compose logs
```
Then you can see the bug! You can enter the container via this command:
```
docker compose exec -it jekyll /bin/bash
```
Then you can run the script:
```
./bin/entry_point.sh
```
You might see problems for package dependecy or something which is not available. You can fix it now by using
```
bundle install
./bin/entry_point.sh
```
Most likely, this will solve the problem but it shouldn't really happen. So, please open a bug report for us.
## Local Setup with Development Containers
`al-folio` supports [Development Containers](https://containers.dev/supporting).
For example, when you open the repository with Visual Studio Code (VSCode), it prompts you to install the necessary extension and automatically install everything necessary.
## Local Setup (Legacy, no longer supported)
For a hands-on walkthrough of running al-folio locally without using Docker, check out [this cool blog post](https://george-gca.github.io/blog/2022/running-local-al-folio/) by one of the community members!
Assuming you have [Ruby](https://www.ruby-lang.org/en/downloads/) and [Bundler](https://bundler.io/) installed on your system (_hint: for ease of managing ruby gems, consider using [rbenv](https://github.com/rbenv/rbenv)_), and also [Python](https://www.python.org/) and [pip](https://pypi.org/project/pip/) (_hint: for ease of managing python packages, consider using a virtual environment, like [venv](https://docs.python.org/pt-br/3/library/venv.html) or [conda](https://docs.conda.io/en/latest/)_).
```bash
bundle install
# assuming pip is your Python package manager
pip install jupyter
bundle exec jekyll serve
```
To see the template running, open your browser and go to `http://localhost:4000`. You should see a copy of the theme's [demo website](https://alshedivat.github.io/al-folio/). Now, feel free to customize the theme however you like. After you are done, remember to **commit** your final changes.
## Deployment
Deploying your website to [GitHub Pages](https://pages.github.com/) is the most popular option.
Starting version [v0.3.5](https://github.com/alshedivat/al-folio/releases/tag/v0.3.5), **al-folio** will automatically re-deploy your webpage each time you push new changes to your repository **main branch**! :sparkles:
### For personal and organization webpages
1. The name of your repository **MUST BE** `<your-github-username>.github.io` or `<your-github-orgname>.github.io`.
2. In `_config.yml`, set `url` to `https://<your-github-username>.github.io` and leave `baseurl` empty.
3. Set up automatic deployment of your webpage (see instructions below).
4. Make changes to your main branch, commit, and push!
5. After deployment, the webpage will become available at `<your-github-username>.github.io`.
### For project pages
1. In `_config.yml`, set `url` to `https://<your-github-username>.github.io` and `baseurl` to `/<your-repository-name>/`.
2. Set up automatic deployment of your webpage (see instructions below).
3. Make changes to your main branch, commit, and push!
4. After deployment, the webpage will become available at `<your-github-username>.github.io/<your-repository-name>/`.
### Enabling automatic deployment
1. Click on **Actions** tab and **Enable GitHub Actions**; do not worry about creating any workflows as everything has already been set for you.
2. Go to `Settings -> Actions -> General -> Workflow permissions`, and give `Read and write permissions` to GitHub Actions
3. Make any other changes to your webpage, commit, and push to your main branch. This will automatically trigger the **Deploy** action.
4. Wait for a few minutes and let the action complete. You can see the progress in the **Actions** tab. If completed successfully, in addition to the `main` branch, your repository should now have a newly built `gh-pages` branch. **Do NOT touch this branch!**
5. Finally, in the **Settings** of your repository, in the Pages section, set the branch to `gh-pages` (**NOT** to `main`). 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."
### Deploy on [Netlify](https://www.netlify.com/)
1. [Use this template -> Create a new repository](https://github.com/new?template_name=al-folio&template_owner=alshedivat).
2. Netlify: **Add new site** -> **Import an existing project** -> **GitHub** and give Netlify access to the repository you just created.
3. Netlify: In the deploy settings
- Set **Branch to deploy** to `main`
- **Base directory** is empty
- Set **Build command** to `sed -i "s/^\(baseurl: \).*$/baseurl:/" _config.yml && bundle exec jekyll build`
- Set **Publish directory** to `_site`
4. Netlify: Add the following two **environment variables**
- | Key | Value |
| -------------- | -------------------------------------------------------------------------------------- |
| `JEKYLL_ENV` | `production` |
| `RUBY_VERSION` | set to the Ruby version found in `.github/workflows/deploy.yml` (for example, `3.3.5`) |
5. Netlify: Click **Deploy** and wait for the site to be published. If you want to use your own domain name, follow the steps in [this documentation](https://docs.netlify.com/domains-https/custom-domains/).
### Deployment to another hosting server (non GitHub Pages)
If you decide to not use GitHub Pages and host your page elsewhere, simply run:
```bash
bundle exec jekyll build
```
which will (re-)generate the static webpage in the `_site/` folder.
Then simply copy the contents of the `_site/` directory to your hosting server.
If you also want to remove unused css classes from your file, run:
```bash
purgecss -c purgecss.config.js
```
which will replace the css files in the `_site/assets/css/` folder with the purged css files.
**Note:** Make sure to correctly set the `url` and `baseurl` fields in `_config.yml` before building the webpage. If you are deploying your webpage to `your-domain.com/your-project/`, you must set `url: your-domain.com` and `baseurl: /your-project/`. If you are deploying directly to `your-domain.com`, leave `baseurl` blank, **do not delete it**.
### Deployment to a separate repository (advanced users only)
**Note:** Do not try using this method unless you know what you are doing (make sure you are familiar with [publishing sources](https://help.github.com/en/github/working-with-github-pages/about-github-pages#publishing-sources-for-github-pages-sites)). This approach allows to have the website's source code in one repository and the deployment version in a different repository.
Let's assume that your website's publishing source is a `publishing-source` subdirectory of a git-versioned repository cloned under `$HOME/repo/`.
For a user site this could well be something like `$HOME/<user>.github.io`.
Firstly, from the deployment repo dir, checkout the git branch hosting your publishing source.
Then from the website sources dir (commonly your al-folio fork's clone):
```bash
bundle exec jekyll build --destination $HOME/repo/publishing-source
```
This will instruct jekyll to deploy the website under `$HOME/repo/publishing-source`.
**Note:** Jekyll will clean `$HOME/repo/publishing-source` before building!
The quote below is taken directly from the [jekyll configuration docs](https://jekyllrb.com/docs/configuration/options/):
> Destination folders are cleaned on site builds
>
> The contents of `<destination>` are automatically cleaned, by default, when the site is built. Files or folders that are not created by your site will be removed. Some files could be retained by specifying them within the `<keep_files>` configuration directive.
>
> Do not use an important location for `<destination>`; instead, use it as a staging area and copy files from there to your web server.
If `$HOME/repo/publishing-source` contains files that you want jekyll to leave untouched, specify them under `keep_files` in `_config.yml`.
In its default configuration, al-folio will copy the top-level `README.md` to the publishing source. If you want to change this behavior, add `README.md` under `exclude` in `_config.yml`.
**Note:** Do _not_ run `jekyll clean` on your publishing source repo as this will result in the entire directory getting deleted, irrespective of the content of `keep_files` in `_config.yml`.
## Maintaining Dependencies
**al-folio** uses **Bundler** (a Ruby dependency manager) to keep track of Ruby packages (called "gems") needed to run Jekyll and its plugins.
**To update all dependencies:**
```bash
bundle update --all
```
**After updating:**
1. Rebuild the Docker image to apply changes: `docker compose up --build`
2. Test locally to ensure everything still works: `docker compose up`
3. Visit `http://localhost:8080` and verify the site renders correctly
4. If your site fails after updating, check the [FAQ](FAQ.md) for troubleshooting
**For Ruby/Python environment issues:**
- Always use Docker for consistency with CI/CD (see [Local setup using Docker](#local-setup-using-docker-recommended))
- Avoid manual Ruby/Python installation when possible
## Upgrading from a previous version
If you installed **al-folio** as described above, you can manually update your code by following the steps below:
```bash
# Assuming the current directory is <your-repo-name>
git remote add upstream https://github.com/alshedivat/al-folio.git
git fetch upstream
git rebase v0.16.3
```
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.

View File

@ -1,6 +1,6 @@
The MIT License (MIT)
Copyright (c) 2022 Maruan Al-Shedivat.
Copyright (c) 2025 Maruan Al-Shedivat.
Permission is hereby granted, free of charge, to any person obtaining a copy of
this software and associated documentation files (the "Software"), to deal in

111
QUICKSTART.md Normal file
View File

@ -0,0 +1,111 @@
# Quick Start Guide
**Get your al-folio site running in 5 minutes.** This guide is for users who just want a working website quickly without deep customization.
> **Video Tutorial:** Watch a walkthrough of these steps [here](assets/video/tutorial_al_folio.mp4)
<!--ts-->
- [Quick Start Guide](#quick-start-guide)
- [Step 1: Create Your Repository (1 min)](#step-1-create-your-repository-1-min)
- [Step 2: Configure Deployment (1 min)](#step-2-configure-deployment-1-min)
- [Step 3: Personalize (2 min)](#step-3-personalize-2-min)
- [Step 4: View Your Site (1 min)](#step-4-view-your-site-1-min)
- [What's Next?](#whats-next)
- [Add Your Content](#add-your-content)
- [Customize Appearance](#customize-appearance)
- [Learn More](#learn-more)
- [Get Help from AI](#get-help-from-ai)
<!--te-->
## Step 1: Create Your Repository (1 min)
**⚠️ Important:** Use the **"Use this template"** button, NOT the fork button. This ensures your site is independent and you won't accidentally submit your personal changes back to the al-folio project.
1. Go to the [al-folio repository](https://github.com/alshedivat/al-folio)
2. Click the green **"Use this template"** button (top right), then select **"Create a new repository"**
3. Name your repository:
- **Personal/Organization site (if you want your site to be at `username.github.io`):** `username.github.io` (replace `username` with your GitHub username)
- **Project site (if you want your site to be at `username.github.io/project-name`):** Any name (e.g., `my-research-website`)
4. Click **"Create repository from template"**
**Already forked by mistake?** No problem. Your fork will work fine—just be careful when making changes. Create a new branch for your updates (e.g., `git checkout -b my-site-updates`) and make sure you push to **your own repository**, not the main al-folio project.
## Step 2: Configure Deployment (1 min)
1. Go to your new repository → **Settings****Actions****General** → **Workflow permissions**
2. Select **Read and write permissions**
3. Click **Save**
## Step 3: Personalize (2 min)
1. Open `_config.yml` in your repository
2. Update these fields:
```yaml
title: My Website
first_name: Your
last_name: Name
url: https://your-username.github.io # or your custom domain
baseurl: # Leave this empty (do NOT delete it)
```
3. Click **Commit changes** (at the bottom of the page)
## Step 4: View Your Site (1 min)
1. Go to your repository → **Actions** tab
2. Wait for the "Deploy site" workflow to complete (look for a green checkmark, ~4 minutes)
3. Go to **Settings****Pages** → **Build and deployment**
4. Make sure **Source** is set to **Deploy from a branch**
5. Set the branch to **gh-pages** (NOT main)
6. Wait for the "pages-build-deployment" workflow to complete (~45 seconds)
7. Visit `https://your-username.github.io` in your browser
**That's it!** Your site is live. You now have a working al-folio website.
---
## What's Next?
Once your site is running, explore these customization options:
### Add Your Content
- **Profile picture:** Replace `assets/img/prof_pic.jpg` with your photo
- **About page:** Edit `_pages/about.md` to write your bio
- **Publications:** Add entries to `_bibliography/papers.bib`
- **Blog posts:** Create files in `_posts/` with format `YYYY-MM-DD-title.md`
### Customize Appearance
- **Theme color:** Edit `_config.yml`, search for `theme_color`
- **Enable/disable sections:** In `_config.yml`, look for `enabled: false/true` options
- **Social media links:** Edit `_data/socials.yml`
### Learn More
- Installation and local setup options: [INSTALL.md](INSTALL.md)
- Full customization guide: [CUSTOMIZE.md](CUSTOMIZE.md)
- Frequently asked questions: [FAQ.md](FAQ.md)
- Troubleshooting: [TROUBLESHOOTING.md](TROUBLESHOOTING.md)
### Get Help from AI
Use the **GitHub Copilot Customization Agent** (if you have Copilot) to:
- Get step-by-step help with customizations
- Understand how to modify specific features
- Apply changes directly to your site
See [CUSTOMIZE.md § GitHub Copilot Customization Agent](CUSTOMIZE.md#github-copilot-customization-agent) for details.
---
**Common first steps:**
- Change the theme color in `_config.yml`
- Add your social media links in `_data/socials.yml`
- Upload your profile picture to `assets/img/prof_pic.jpg`
- Write a short bio in `_pages/about.md`
Happy customizing! 🎉

View File

@ -1,10 +1,12 @@
# Pages perso
</div>
## Setup and develop
```bash
bundle
bundle config set path 'vendor/bundle'
bundle install
bundle exec jekyll serve --livereload
```

536
SEO.md Normal file
View File

@ -0,0 +1,536 @@
# SEO Best Practices Guide
This guide helps you optimize your al-folio website for search engines so your research and work are discoverable.
<!--ts-->
- [SEO Best Practices Guide](#seo-best-practices-guide)
- [Overview](#overview)
- [Basic SEO Setup](#basic-seo-setup)
- [Sitemap and Robots](#sitemap-and-robots)
- [Site URL and Metadata](#site-url-and-metadata)
- [Enabling Open Graph (Social Media Previews)](#enabling-open-graph-social-media-previews)
- [What is Open Graph?](#what-is-open-graph)
- [Enable in al-folio](#enable-in-al-folio)
- [Schema.org Markup](#schemaorg-markup)
- [What is Schema.org?](#what-is-schemaorg)
- [Enable in al-folio](#enable-in-al-folio-1)
- [What Gets Marked Up](#what-gets-marked-up)
- [Search Console Setup](#search-console-setup)
- [Google Search Console](#google-search-console)
- [Bing Webmaster Tools](#bing-webmaster-tools)
- [Publication Indexing](#publication-indexing)
- [Google Scholar](#google-scholar)
- [DBLP (Computer Science)](#dblp-computer-science)
- [arXiv](#arxiv)
- [Content Optimization](#content-optimization)
- [Page Titles and Descriptions](#page-titles-and-descriptions)
- [Heading Structure](#heading-structure)
- [Image Optimization](#image-optimization)
- [Internal Linking](#internal-linking)
- [RSS Feed for Discovery](#rss-feed-for-discovery)
- [Performance &amp; Mobile](#performance--mobile)
- [SEO Checklist](#seo-checklist)
- [Resources](#resources)
<!--te-->
## Overview
SEO (Search Engine Optimization) makes your website discoverable on Google, Bing, and other search engines. For academics, this means:
- Your research becomes discoverable when people search for your work
- Your CV/bio appears in search results
- Your publications rank higher
- More citations and collaborations
al-folio includes SEO basics, but you can optimize further.
---
## Basic SEO Setup
### Sitemap and Robots
al-folio auto-generates a `sitemap.xml` and `robots.txt` for you. These tell search engines what pages exist.
**Verify they exist:**
- Visit `https://your-site.com/sitemap.xml` Should show an XML list of pages
- Visit `https://your-site.com/robots.txt` Should show instructions for search engines
If they're missing:
1. Check `_config.yml` has a valid `url`
2. Rebuild: `bundle exec jekyll build`
3. Check `_site/` directory has both files
**No configuration needed** al-folio handles this automatically.
---
### Site URL and Metadata
Ensure `_config.yml` has correct metadata:
```yaml
title: Your Full Name or Site Title
description: > # Brief description (1-2 sentences)
A description of your research and expertise.
This appears in search results.
author: Your Name
keywords: machine learning, research, academia, etc.
url: https://your-domain.com
lang: en
```
All fields are important for SEO. **Avoid leaving fields blank.**
---
## Enabling Open Graph (Social Media Previews)
### What is Open Graph?
When someone shares your page on Twitter, Facebook, LinkedIn, etc., Open Graph controls what preview appears.
**Without Open Graph:**
- Generic title
- No image
- Ugly preview
**With Open Graph:**
- Your custom title
- Your custom image (photo, diagram, etc.)
- Custom description
- Professional preview
### Enable in al-folio
Open Graph is disabled by default. To enable:
1. **Edit `_config.yml`:**
```yaml
serve_og_meta: true # Change from false to true
og_image: /assets/img/og-image.png # Path to your image (1200x630px recommended)
```
2. **Create your OG image:**
- Size: 1200x630 pixels
- Format: PNG or JPG
- Content: Your name/logo + key info
- Save to: `assets/img/og-image.png`
3. **Commit and deploy**
4. **Test it:**
- Use [Facebook's Sharing Debugger](https://developers.facebook.com/tools/debug/sharing/)
- Paste your site URL
- You should see your custom image and title
**Per-page OG images:**
Add to the frontmatter of a blog post or page:
```markdown
---
layout: post
title: My Research Paper
og_image: /assets/img/paper-diagram.png
---
```
---
## Schema.org Markup
### What is Schema.org?
Schema.org is structured data that tells search engines what kind of content is on your page:
- "This is a Person" (your bio page)
- "This is a Publication" (your paper)
- "This is a BlogPosting" (your article)
Benefits:
- Rich snippets in search results
- Better knowledge graph information
- Schema validation helps Google understand your site
### Enable in al-folio
Enable in `_config.yml`:
```yaml
serve_schema_org: true # Change from false to true
```
That's it! al-folio automatically marks up:
- **Author info** (Person schema with name, URL, photo)
- **Blog posts** (BlogPosting schema with date, title, description)
- **Publications** (CreativeWork/ScholarlyArticle schema)
### What Gets Marked Up
**Homepage (Person):**
- Your name, photo, description
- Links to your profiles (LinkedIn, GitHub, etc.)
**Blog posts (BlogPosting):**
- Title, date, author, description
- Content
- Publication date and modified date
**Publications (ScholarlyArticle):**
- Title, authors, abstract
- Publication date, venue
- URL and PDF links
---
## Search Console Setup
### Google Search Console
**Google Search Console** lets you monitor how your site appears in Google search results.
**Setup:**
1. Go to [Google Search Console](https://search.google.com/search-console)
2. Add your website:
- Click **"URL prefix"**
- Enter your site URL: `https://your-domain.com`
3. Verify ownership (choose one method):
- **HTML file upload** Download file, add to repository root
- **HTML tag** Copy meta tag to `_config.yml` → redeploy
- **Google Analytics** If you already use Google Analytics
- **DNS record** Advanced (if you own the domain)
**Add to `_config.yml`:**
```yaml
google_site_verification: YOUR_VERIFICATION_CODE
```
(Replace `YOUR_VERIFICATION_CODE` with the code from Search Console.)
**Monitor in Search Console:**
- **Performance** Which queries bring traffic, your ranking position
- **Coverage** Any indexing errors
- **Enhancements** Schema.org validation
- **Sitemaps** Your sitemap status
---
### Bing Webmaster Tools
Similar to Google Search Console but for Bing search:
1. Go to [Bing Webmaster Tools](https://www.bing.com/webmasters)
2. Add your site
3. Verify (usually auto-verifies if you verified Google)
4. Add to `_config.yml`:
```yaml
bing_site_verification: YOUR_BING_CODE
```
**Note:** Bing commands are optional but recommended. Check both console dashboards regularly.
---
## Publication Indexing
### Google Scholar
**Goal:** Get your publications listed on Google Scholar so they show up in scholar search results.
**Google Scholar auto-crawls:**
- Your website automatically (if publicly accessible)
- Your publications page if it has proper markup
- PDFs linked from your site
**To improve Scholar indexing:**
1. **Ensure BibTeX has proper format:**
```bibtex
@article{mykey,
title={Your Paper Title},
author={Your Name and Co-Author},
journal={Journal Name},
year={2024},
volume={1},
pages={1-10},
doi={10.1234/doi}
}
```
2. **Add PDFs to BibTeX:**
```bibtex
@article{mykey,
# ... other fields ...
pdf={my-paper.pdf} # File at assets/pdf/my-paper.pdf
}
```
3. **Submit to Google Scholar (optional):**
- Go to [Google Scholar Author Profile](https://scholar.google.com/citations)
- Create a profile
- Google will find your papers automatically within weeks
4. **Wait 3-6 months** Google Scholar takes time to index
---
### DBLP (Computer Science)
If your research is computer science related:
1. Go to [DBLP](https://dblp.org/)
2. Search for yourself or your papers
3. If missing, [Submit via DBLP](https://dblp.org/db/contrib/) (requires account)
4. DBLP will verify and add your work
---
### arXiv
If you have preprints:
1. Go to [arXiv.org](https://arxiv.org/)
2. Submit your preprint
3. Once listed, arXiv automatically indexes it across search engines
**Add arXiv link to BibTeX:**
```bibtex
@article{mykey,
# ... other fields ...
arxiv={2024.12345} # arXiv ID
}
```
---
## Content Optimization
### Page Titles and Descriptions
Every page needs a title and description. These show in search results.
**In `_config.yml`:**
```yaml
title: Jane Smith - Computer Science Researcher
description: >
Academic website of Jane Smith, focusing on machine learning and AI ethics.
```
**In page/post frontmatter:**
```markdown
---
layout: post
title: Novel Deep Learning Architecture for Climate Modeling
description: A new approach to improving climate model accuracy with deep learning
---
```
**Checklist:**
- [ ] Title under 60 characters (so it doesn't get cut off)
- [ ] Description 120-160 characters
- [ ] Include your name in the site title
- [ ] Include keywords naturally
---
### Heading Structure
Use proper HTML heading hierarchy for both SEO and accessibility:
```markdown
# H1: Main Page Title
Use one H1 per page, usually your blog post or page title
## H2: Section Heading
### H3: Subsection
### H3: Another subsection
## H2: Another Section
```
**Benefits:**
- Search engines understand your content structure
- Screen readers can navigate better
- Visitors can scan your content
---
### Image Optimization
**For SEO:**
- Use descriptive filenames: `neural-network-architecture.png` (not `img1.png`)
- Add alt text (also helps accessibility):
```markdown
![Neural network showing three layers with training accuracy of 95%](assets/img/neural-network.png)
```
**For performance:**
- Optimize image file size (use tools like TinyPNG)
- Use modern formats (WebP instead of large JPGs)
- Responsive images (different sizes for mobile vs desktop)
---
### Internal Linking
Link between your own pages strategically:
```markdown
See my [publication on climate AI](./publications/) or my [blog post on neural networks](/blog/2024/neural-networks/).
```
**Benefits:**
- Search engines crawl through your links
- Users discover more of your content
- Distributes "authority" across your site
---
## RSS Feed for Discovery
al-folio auto-generates an RSS feed at `/feed.xml`.
**Why RSS matters:**
- Content aggregators pick up your posts
- Researchers can subscribe to your updates
- Improves discoverability
**Ensure your feed works:**
```yaml
# In _config.yml
title: Your Site
description: Your site description
url: https://your-domain.com # MUST be complete URL
```
**Test your feed:**
- Visit `https://your-site.com/feed.xml`
- Should show XML with your recent posts
- Try subscribing in a feed reader (Feedly, etc.)
---
## Performance & Mobile
Search engines favor fast, mobile-friendly sites.
**Check your site:**
- Use [Google PageSpeed Insights](https://pagespeed.web.dev/)
- Enter your site URL
- Review recommendations
- al-folio already optimizes for performance, but you can improve further:
- Compress images
- Minimize CSS/JS (enabled by default)
- Use lazy loading (already enabled)
**Mobile optimization:**
- al-folio is responsive by default
- Test on phones/tablets
- Ensure buttons are large enough to tap
- Check readability on small screens
---
## SEO Checklist
Before considering your site "SEO optimized":
**Basic Setup:**
- [ ] `_config.yml` has `title`, `description`, `author`, `url`
- [ ] Sitemap accessible at `/sitemap.xml`
- [ ] `robots.txt` accessible at `/robots.txt`
- [ ] Mobile-friendly (test on phone)
**Search Console:**
- [ ] Google Search Console linked
- [ ] Bing Webmaster Tools linked (optional but recommended)
- [ ] No major indexing errors
- [ ] Sitemaps submitted
**Schema/Open Graph:**
- [ ] `serve_og_meta: true` (for social sharing)
- [ ] `serve_schema_org: true` (for structured data)
- [ ] Test OG with [Facebook Debugger](https://developers.facebook.com/tools/debug/sharing/)
- [ ] Validate schema at [Schema.org Validator](https://validator.schema.org/)
**Content:**
- [ ] Every page has unique title (under 60 chars)
- [ ] Every page has description (120-160 chars)
- [ ] Blog posts have proper dates
- [ ] Images have descriptive alt text
- [ ] Headings follow proper hierarchy
**Publications:**
- [ ] BibTeX entries have proper format
- [ ] PDFs linked from BibTeX
- [ ] Submitted to Google Scholar (optional)
- [ ] Indexed on DBLP or arXiv (if applicable)
**Performance:**
- [ ] Site loads under 3 seconds (check PageSpeed)
- [ ] No broken links (use lighthouse or similar)
- [ ] RSS feed works (check `/feed.xml`)
---
## Resources
- **[Google Search Central](https://developers.google.com/search)** Official SEO guide
- **[Moz SEO Checklist](https://moz.com/beginners-guide-to-seo)** Beginner-friendly guide
- **[Google PageSpeed Insights](https://pagespeed.web.dev/)** Performance analysis
- **[Schema.org](https://schema.org/)** Structured data reference
- **[WebAIM](https://webaim.org/)** Accessibility (helps SEO too)
- **[Lighthouse Audit](https://chrome.google.com/webstore/detail/lighthouse/blipmdconlkpombljlkpstvnztVTNyZe)** Browser extension
---
**Next Steps:**
1. Enable Open Graph and Schema.org in `_config.yml`
2. Set up Google Search Console and Bing Webmaster Tools
3. Optimize your page titles and descriptions
4. Add alt text to images and PDFs to your BibTeX
5. Monitor search console regularly for indexing issues
Your research will be more discoverable with these optimizations! 🔍

454
TROUBLESHOOTING.md Normal file
View File

@ -0,0 +1,454 @@
# Troubleshooting Guide
This guide covers common issues and their solutions. For more information, see [FAQ.md](FAQ.md) or check [GitHub Discussions](https://github.com/alshedivat/al-folio/discussions).
<!--ts-->
- [Troubleshooting Guide](#troubleshooting-guide)
- [Deployment Issues](#deployment-issues)
- [Site fails to deploy on GitHub Pages](#site-fails-to-deploy-on-github-pages)
- [Custom domain becomes blank after deployment](#custom-domain-becomes-blank-after-deployment)
- [GitHub Actions: "Unknown tag 'toc'" error](#github-actions-unknown-tag-toc-error)
- [Local Build Issues](#local-build-issues)
- [Docker build fails](#docker-build-fails)
- [Ruby dependency issues](#ruby-dependency-issues)
- [Port already in use](#port-already-in-use)
- [Styling &amp; Layout Problems](#styling--layout-problems)
- [CSS and JS not loading properly](#css-and-js-not-loading-properly)
- [Site looks broken after deployment](#site-looks-broken-after-deployment)
- [Theme colors not applying](#theme-colors-not-applying)
- [Content Not Appearing](#content-not-appearing)
- [Blog posts not showing up](#blog-posts-not-showing-up)
- [Publications not displaying](#publications-not-displaying)
- [Images not loading](#images-not-loading)
- [Configuration Issues](#configuration-issues)
- [YAML syntax errors](#yaml-syntax-errors)
- [Feed (RSS/Atom) not working](#feed-rssatom-not-working)
- [Search not working](#search-not-working)
- [Feature-Specific Issues](#feature-specific-issues)
- [Comments (Giscus) not appearing](#comments-giscus-not-appearing)
- [Related posts broken](#related-posts-broken)
- [Code formatting issues](#code-formatting-issues)
- [Getting Help](#getting-help)
<!--te-->
## Deployment Issues
### Site fails to deploy on GitHub Pages
**Problem:** GitHub Actions shows an error when deploying.
**Solution:**
1. Check your repository **Actions** tab for error messages
2. Ensure you followed [Step 2 of QUICKSTART.md](QUICKSTART.md#step-2-configure-deployment-1-min) (Workflow permissions)
3. Verify your `_config.yml` has correct `url` and `baseurl`:
- Personal site: `url: https://username.github.io` and `baseurl:` (empty)
- Project site: `url: https://username.github.io` and `baseurl: /repo-name/`
4. Check that you're pushing to the `main` (or `master`) branch, NOT `gh-pages`
5. Commit and push a small change to trigger redeployment
**For YAML syntax errors:**
- Run `bundle exec jekyll build` locally to see the exact error
- Check for unquoted special characters (`:`, `&`, `#`) in YAML strings
---
### Custom domain becomes blank after deployment
**Problem:** You set a custom domain (e.g., `example.com`), but it resets to blank after deployment.
**Solution:**
1. Create a file named `CNAME` (no extension) in your repository root
2. Add your domain to it: `example.com` (one domain per line)
3. Commit and push
4. The domain will persist after future deployments
(See [DNS configuration instructions in INSTALL.md](INSTALL.md#deployment) for initial custom domain setup.)
---
### GitHub Actions: "Unknown tag 'toc'" error
**Problem:** Local build works, but GitHub Actions fails with `Unknown tag 'toc'`.
**Solution:**
1. Check your **Settings****Pages****Source** is set to `Deploy from a branch`
2. Ensure the branch is set to `gh-pages` (NOT `main`)
3. Wait 5 minutes and check Actions again
4. The issue usually resolves after you verify the gh-pages branch is set
---
## Local Build Issues
### Docker build fails
**Problem:** `docker compose up` fails or shows errors.
**Solution:**
1. Update Docker: `docker compose pull`
2. Rebuild: `docker compose up --build`
3. If still failing, check your system resources (disk space, RAM)
4. For M1/M2 Mac users, verify you're using a compatible Docker version
5. Check Docker Desktop is running
**For permission issues:**
- Linux users may need to add your user to the docker group: `sudo usermod -aG docker $USER`
- Then log out and log back in
---
### Ruby dependency issues
**Problem:** `Gemfile.lock` conflicts or bundle errors.
**Solution:**
1. Delete `Gemfile.lock`: `rm Gemfile.lock`
2. Update Bundler: `bundle update`
3. Install gems: `bundle install`
4. Try serving again: `bundle exec jekyll serve`
---
### Port already in use
**Problem:** "Address already in use" when running `jekyll serve`.
**Solution - Docker:**
```bash
docker compose down # Stop the running container
docker compose up # Start fresh
```
**Solution - Local Ruby:**
```bash
# Find and kill the Jekyll process
lsof -i :4000 | grep LISTEN | awk '{print $2}' | xargs kill
# Or specify a different port
bundle exec jekyll serve --port 5000
```
---
## Styling & Layout Problems
### CSS and JS not loading properly
**Problem:** Site looks broken: no colors, fonts wrong, links don't work.
**Common cause:** Incorrect `url` and `baseurl` in `_config.yml`.
**Solution:**
1. **Personal/organization site:**
```yaml
url: https://username.github.io
baseurl: # MUST be empty (not deleted)
```
2. **Project site:**
```yaml
url: https://username.github.io
baseurl: /repository-name/ # Must match your repo name
```
3. **Clear browser cache:**
- Chrome: `Ctrl+Shift+R` (Windows/Linux) or `Cmd+Shift+R` (Mac)
- Firefox: `Ctrl+F5` (Windows/Linux) or `Cmd+R` (Mac)
- Or open a private/incognito window
4. Redeploy: Make a small change and push to trigger GitHub Actions again
---
### Site looks broken after deployment
**Checklist:**
- [ ] Is `baseurl` correct (and not accidentally deleted)?
- [ ] Did you clear your browser cache?
- [ ] Wait 5 minutes for GitHub Pages to update
- [ ] Check GitHub Actions completed successfully
---
### Theme colors not applying
**Problem:** You changed `_config.yml` color settings but nothing changed.
**Solution:**
1. Check your color name is valid in `_sass/_variables.scss`
2. Clear browser cache (see above)
3. Rebuild: `docker compose up --build` (Docker) or `bundle exec jekyll build` (Ruby)
4. Wait for GitHub Actions to complete
5. Visit the site in a private/incognito window
---
## Content Not Appearing
### Blog posts not showing up
**Problem:** Created a post in `_posts/` but it's not on the blog page.
**Checklist:**
- [ ] Filename format is correct: `YYYY-MM-DD-title.md` (e.g., `2024-01-15-my-post.md`)
- [ ] File is in the `_posts/` directory (not in a subdirectory)
- [ ] Post has required frontmatter:
```markdown
---
layout: post
title: My Post Title
date: 2024-01-15
---
```
- [ ] Post date is NOT in the future (Jekyll doesn't publish future-dated posts by default)
- [ ] Blog posts are enabled in `_config.yml`: `blog_page: true`
**To fix:**
1. Check the filename format (uppercase, dashes, no spaces)
2. Verify the date is today or in the past
3. Rebuild: `bundle exec jekyll build` and check for error messages
---
### Publications not displaying
**Problem:** You added a BibTeX entry to `papers.bib` but it's not showing on the publications page.
**Checklist:**
- [ ] File is at `_bibliography/papers.bib`
- [ ] BibTeX syntax is correct (check for missing commas, unmatched braces)
- [ ] Entry has a unique citation key: `@article{einstein1905, ...}`
- [ ] Publication page is enabled: Check `publications_page: true` in `_config.yml`
**To debug BibTeX errors:**
```bash
# Local Ruby setup
bundle exec jekyll build 2>&1 | grep -i bibtex
# Docker
docker compose run --rm web jekyll build 2>&1 | grep -i bibtex
```
---
### Images not loading
**Problem:** Image paths broken or showing as missing.
**Common causes:**
- Wrong path in Markdown (use relative paths)
- Image file doesn't exist at the specified location
- Case sensitivity (Linux/Mac are case-sensitive)
**Solutions:**
1. **Correct path format:**
```markdown
![Alt text](assets/img/image-name.jpg)
```
2. **Check the file exists:**
- Personal images: `assets/img/`
- Paper PDFs: `assets/pdf/`
- Use lowercase filenames, no spaces
3. **For BibTeX PDF links:**
```bibtex
@article{mykey,
pdf={my-paper.pdf}, % File should be at assets/pdf/my-paper.pdf
}
```
---
## Configuration Issues
### YAML syntax errors
**Problem:** GitHub Actions fails with YAML error, or build is silent.
**Common mistakes:**
```yaml
# ❌ Wrong: Unquoted colons or ampersands
title: My Site: Research & Teaching
# ✅ Correct: Quote special characters
title: "My Site: Research & Teaching"
```
```yaml
# ❌ Wrong: Inconsistent indentation
nav:
- name: Home
url: /
- name: About # Extra space!
url: /about/
# ✅ Correct: Consistent 2-space indentation
nav:
- name: Home
url: /
- name: About
url: /about/
```
**To find errors:**
1. Use a YAML validator: [yamllint.com](https://www.yamllint.com/)
2. Run locally: `bundle exec jekyll build` shows the exact error line
3. Check that you didn't delete required lines (like `baseurl:`)
---
### Feed (RSS/Atom) not working
**Problem:** RSS feed at `/feed.xml` is empty or broken.
**Solution:**
1. Verify required `_config.yml` fields:
```yaml
title: Your Site Title
description: Brief description
url: https://your-domain.com # MUST be absolute URL
```
2. Ensure `baseurl` is correct
3. Check at least one blog post exists (with correct date)
4. Rebuild and wait for GitHub Actions to complete
---
### Search not working
**Problem:** Search box is empty or always returns nothing.
**Solution:**
1. Ensure search is enabled in `_config.yml`:
```yaml
search_enabled: true
```
2. Check that `_config.yml` has a valid `url` (required for search)
3. Rebuild the site
4. Search index is generated during build; give it a minute after push
---
## Feature-Specific Issues
### Comments (Giscus) not appearing
**Problem:** You enabled Giscus in `_config.yml` but comments don't show.
**Solution:**
1. Verify you have a GitHub repository for discussions (usually your main repo)
2. Check `_config.yml` has correct settings:
```yaml
disqus_shortname: false # Make sure this is false
giscus:
repo: username/repo-name
repo_id: YOUR_REPO_ID
category_id: YOUR_CATEGORY_ID
```
3. Visit [Giscus.app](https://giscus.app) to get your IDs and verify setup
4. Check the GitHub repo has Discussions enabled (Settings → Features)
---
### Related posts broken
**Problem:** Related posts feature crashes or shows errors.
**Solution:**
1. Related posts requires more gems. If you disabled it in `_config.yml`, that's fine:
```yaml
related_blog_posts:
enabled: false
```
2. If you want to enable it, ensure `Gemfile` has all dependencies installed:
```bash
bundle install
bundle exec jekyll build
```
---
### Code formatting issues
**Problem:** Code blocks don't have syntax highlighting or look wrong.
**Solution:**
1. Use proper markdown syntax:
````markdown
```python
# Your code here
print("hello")
```
````
2. For inline code:
```markdown
Use `code-here` for inline code.
```
3. Check that your language is supported by Pygments (Python, Ruby, JavaScript, etc. are all supported)
---
## Getting Help
If you're stuck:
1. **Check existing documentation:**
- [QUICKSTART.md](QUICKSTART.md) Get started in 5 minutes
- [INSTALL.md](INSTALL.md) Installation and deployment
- [CUSTOMIZE.md](CUSTOMIZE.md) Full customization guide
- [FAQ.md](FAQ.md) Frequently asked questions
2. **Search for your issue:**
- [GitHub Discussions](https://github.com/alshedivat/al-folio/discussions) Q&A from community
- [GitHub Issues](https://github.com/alshedivat/al-folio/issues) Bug reports and feature requests
3. **Get help from AI:**
- Use the **GitHub Copilot Customization Agent** (requires Copilot subscription) to get step-by-step help
- See [CUSTOMIZE.md § GitHub Copilot Customization Agent](CUSTOMIZE.md#github-copilot-customization-agent)
4. **Create a new discussion:**
- [Ask a question](https://github.com/alshedivat/al-folio/discussions/new?category=q-a) on GitHub
- Include error messages and what you're trying to do
---
**Most issues are resolved by:**
1. Checking `url` and `baseurl` in `_config.yml`
2. Clearing browser cache
3. Waiting for GitHub Actions to complete (~5 minutes)

28
_books/the_godfather.md Normal file
View File

@ -0,0 +1,28 @@
---
layout: book-review
title: The Godfather
author: Mario Puzo
cover: assets/img/book_covers/the_godfather.jpg
olid: OL43499941M # use Open Library ID to fetch cover (if no `cover` is provided)
isbn: 7539967447 # use ISBN to fetch cover (if no `olid` is provided, dashes are optional)
categories: classics crime historical-fiction mystery novels thriller
tags: top-100
buy_link: https://www.amazon.com/Godfather-Deluxe-Mario-Puzo/dp/0593542592
date: 2024-08-23
started: 2024-08-23
finished: 2024-09-07
released: 1969
stars: 5
goodreads_review: 6318556633
status: Finished
---
Lorem ipsum dolor sit amet, consectetur adipiscing elit. Cras sollicitudin eros sit amet ante aliquet, sit amet vulputate lectus mattis. Aenean ullamcorper pretium nunc, sed egestas lorem elementum id. Nulla id mi id neque ultrices egestas ut in urna. Sed ac ultricies nunc. Nam convallis placerat urna id egestas. Nulla porta, est interdum vestibulum venenatis, lorem odio laoreet sapien, in pulvinar tellus eros a dolor. Vivamus sapien justo, ullamcorper a mi eget, scelerisque euismod nunc. In augue augue, ultrices a ornare non, tincidunt quis justo. Donec sit amet consectetur eros. Nullam neque leo, tincidunt id ipsum ac, volutpat lobortis mi. Phasellus consequat ultricies arcu, eu semper ligula ultrices eget. Ut in fringilla elit, ac tincidunt nisi.
Nunc commodo elit nec turpis feugiat consectetur. Nullam in nisi egestas, fermentum ligula hendrerit, euismod enim. Nulla eu hendrerit eros. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Proin et velit ante. Vestibulum pretium vitae quam et sagittis. Proin eu nunc vel velit accumsan eleifend. Nulla facilisis, diam tempus imperdiet ultrices, massa ipsum consequat orci, sed efficitur eros mi a felis. Cras lobortis turpis sem, sed lobortis nunc ullamcorper tristique. Nam vehicula rhoncus ante, in faucibus sapien scelerisque et. Donec semper libero et tincidunt mattis. In vestibulum, nulla pretium dictum commodo, risus nulla vestibulum felis, at tincidunt massa mi in odio. Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas.
Donec efficitur ultrices purus sit amet imperdiet. Nam consequat metus in erat sodales faucibus. Aliquam maximus fermentum nulla id finibus. Aliquam iaculis sed odio vel rutrum. Curabitur sed odio est. Praesent nec sollicitudin tortor. Praesent pharetra, turpis quis porttitor rhoncus, ante massa fringilla lacus, nec porttitor magna turpis vitae felis. Nullam tristique massa id odio imperdiet, nec sodales massa egestas. Proin nisi metus, euismod sed accumsan vitae, facilisis vel risus. Morbi suscipit auctor erat, nec viverra elit fringilla eu. Mauris congue, purus id tristique facilisis, felis nisi efficitur magna, eu consectetur augue sem vitae lacus. Aliquam erat volutpat. Cras at nibh ultricies, volutpat arcu vitae, dictum est. In ac dolor sagittis, egestas lectus et, semper nisl. Etiam consectetur purus vitae sapien porttitor auctor.
Nulla sit amet venenatis odio. Suspendisse ac lacus quis augue mollis tempus vel in lorem. Donec augue turpis, eleifend nec nibh eu, elementum dictum metus. Proin ut est ligula. Etiam vehicula facilisis metus, sit amet consectetur risus ullamcorper porttitor. In congue nibh quis sollicitudin iaculis. Donec a mollis lorem, non mollis lacus. Nulla et leo ex. Aliquam erat volutpat. Nam sit amet tincidunt mauris. Vivamus vitae est sit amet nisi semper egestas. Donec in diam pharetra, commodo diam vitae, imperdiet ligula. Cras iaculis ac diam eget vehicula. Proin suscipit ante enim, quis vehicula mi porta bibendum. Aliquam a diam porttitor, sollicitudin justo vitae, tempor odio.
Cras fermentum dignissim pretium. Donec quis turpis eu neque lacinia facilisis in sit amet nibh. Nulla non tortor ultricies, euismod est in, blandit nibh. Ut a neque metus. Sed convallis condimentum nibh quis finibus. Praesent aliquam sem iaculis eros maximus accumsan. Nulla venenatis mauris id aliquet maximus. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Proin at enim vitae ex porttitor vestibulum sed eget nibh. Suspendisse accumsan feugiat quam eget ultricies.

View File

@ -20,7 +20,8 @@ icon: 🎓 # 🧥 # 🚀 #🚲 # 🌐 #👤 # 🧑🏼‍💻 # 🧔 # 🛰️ #
url: https://florent.guiotte.fr # the base hostname & protocol for your site
baseurl: # the subpath of your site, e.g. /blog/
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
back_to_top: true # set to false to disable the back to top button
# -----------------------------------------------------------------------------
# Theme
@ -31,8 +32,19 @@ highlight_theme_light: tango # assets/stylesheets/
highlight_theme_dark: zenburn # assets/stylesheets/
# 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
# External service URLs for repository page
# To use a different instance or service for displaying GitHub stats and trophies,
# update these URLs. These are used in the repository templates.
external_services:
github_readme_stats_url: https://github-readme-stats.vercel.app
github_profile_trophy_url: https://github-profile-trophy.vercel.app
# -----------------------------------------------------------------------------
# RSS Feed
@ -48,66 +60,37 @@ rss_icon: false
navbar_fixed: true
footer_fixed: true
search_enabled: true
socials_in_search: true
posts_in_search: true
bib_search: true
# Dimensions
max_width: 800px
# TODO: add layout settings (single page vs. multi-page)
max_width: 930px
# -----------------------------------------------------------------------------
# Open Graph & Schema.org
# -----------------------------------------------------------------------------
# Display links to the page with a preview object on social media.
# see https://schema.org/docs/faq.html for more information
serve_og_meta: false # Include Open Graph meta tags in the HTML head
serve_schema_org: false # Include Schema.org in the HTML head
og_image: # The site-wide (default for all links) Open Graph preview image
# -----------------------------------------------------------------------------
# Social integration
# -----------------------------------------------------------------------------
github_username: fguiotte # your GitHub user name
gitlab_username: # your GitLab user name
twitter_username: # your Twitter handle
mastodon_username: # your mastodon instance+username in the format instance.tld/@username
linkedin_username: fguiotte # your LinkedIn user name
telegram_username: # your Telegram user name
scholar_userid: QHs7TucAAAAJ # 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
research_gate_profile: # your profile on ResearchGate
blogger_url: # your blogger URL
work_url: # work page URL
keybase_username: # your keybase user name
wikidata_id: # your wikidata id
dblp_url: # your DBLP profile url
stackoverflow_id: # your stackoverflow id
kaggle_id: # your kaggle id
lastfm_id: # your lastfm id
spotify_id: # your spotify id
pinterest_id: # your pinterest id
unsplash_id: # your unsplash id
instagram_id: # your instagram id
facebook_id: # your facebook id
youtube_id: # your youtube channel id (youtube.com/@<youtube_id>)
discord_id: # your discord id (18-digit unique numerical identifier)
contact_note: >
You can even add a little note about which of these is the best way to reach you.
# -----------------------------------------------------------------------------
# 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)
pirsch_analytics: # your Pirsch analytics site ID (length 32 characters)
openpanel_analytics: # your Openpanel analytics client ID (format: XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX)
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
@ -117,24 +100,29 @@ blog_name: al-folio # blog_name will be displayed in your blog page
blog_nav_title: # 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/
lsi: false # produce an index for related posts
# Pagination
pagination:
enabled: true
related_blog_posts:
enabled: true
max_related: 5
# Giscus comments (RECOMMENDED)
# Follow instructions on https://giscus.app/ to setup for your repo to fill out
# the information below.
# Follow instructions on https://giscus.app/ to setup for your repo to fill out the information below.
giscus:
repo: alshedivat/al-folio # <your-github-user-name>/<your-github-repo-name>
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: # <your-github-user-name>/<your-github-repo-name>
repo_id: # leave empty or specify your repo_id (see https://giscus.app/)
category: Comments # name of the category under which discussions will be created
category_id: # leave empty or specify your category_id (see https://giscus.app/)
mapping: title # identify discussions by post title
strict: 1 # use strict identification mode
reactions_enabled: 1 # enable (1) or disable (0) emoji reactions
input_position: bottom # whether to display input form below (bottom) or above (top) the comments
dark_theme: dark # name of the dark color scheme (preferred works well with al-folio dark mode)
light_theme: light # name of the light color scheme (preferred works well with al-folio light mode)
emit_metadata: 0
lang: en
@ -143,28 +131,45 @@ 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.
# Optional: Set default categories and tags for posts from each source.
external_sources:
- name: medium.com
rss_url: https://medium.com/@al-folio/feed
categories: [external-posts]
tags: [medium]
- name: Google Blog
posts:
- url: https://blog.google/technology/ai/google-gemini-update-flash-ai-assistant-io-2024/
published_date: 2024-05-14
categories: [external-posts]
tags: [google]
# -----------------------------------------------------------------------------
# Newsletter
# -----------------------------------------------------------------------------
newsletter:
enabled: false
endpoint: # your loops endpoint (e.g., https://app.loops.so/api/newsletter-form/YOUR-ENDPOINT)
# https://loops.so/docs/forms/custom-form
# -----------------------------------------------------------------------------
# Collections
# -----------------------------------------------------------------------------
collections:
books:
output: true
news:
defaults:
layout: post
output: true
permalink: /news/:path/
projects:
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
teachings:
output: true
# -----------------------------------------------------------------------------
# Jekyll settings
@ -173,36 +178,62 @@ news_limit: 5 # leave blank to include all the news in the `_news` folder
# Markdown and syntax highlight
markdown: Pandoc
highlighter: rouge
#pandoc:
# extensions:
# - filter: mathjax-pandoc-filter
# - '-Mmathjax.centerDisplayMath' # center display math
# - filter: mermaid-filter
kramdown:
input: GFM
syntax_highlighter_opts:
css_class: "highlight"
span:
line_numbers: false
block:
line_numbers: false
start_line: 1
# Includes & excludes
include: ['_pages']
include: ["_pages", "_scripts"]
exclude:
- bin
- bin/
- CONTRIBUTING.md
- CUSTOMIZE.md
- Dockerfile
- docker-compose.yml
- docker-compose-slim.yml
- FAQ.md
- Gemfile
- Gemfile.lock
- INSTALL.md
- LICENSE
- lighthouse_results/
- package.json
- package-lock.json
- _pages/about_einstein.md
- purgecss.config.js
- README.md
- readme_preview/
- vendor
keep_files:
- CNAME
- .nojekyll
- .git
# Plug-ins
plugins:
- jekyll-archives
- jekyll-diagrams
- jekyll-3rd-party-libraries
- jekyll-archives-v2
- jekyll-cache-bust
- jekyll-email-protect
- jekyll-feed
- jekyll-get-json
- jekyll-imagemagick
- jekyll-jupyter-notebook
- jekyll-link-attributes
- jekyll-minifier
- jekyll-paginate-v2
- jekyll-regex-replace
- jekyll/scholar
- jekyll-sitemap
- jekyll-link-attributes
- jekyll-socials
- jekyll-tabs
- jekyll-terser
- jekyll-toc
- jekyll-twitter-plugin
- jemoji
- jekyll-pandoc
@ -210,35 +241,45 @@ plugins:
# Sitemap settings
defaults:
- scope:
path: "assets/**/*.*"
path: "assets"
values:
sitemap: false
sass:
style: compressed
# -----------------------------------------------------------------------------
# Jekyll Minifier
# -----------------------------------------------------------------------------
jekyll-minifier:
exclude: ['robots.txt']
uglifier_args:
harmony: true
compress_javascript: false # set to false since we are using terser as the js minifier
exclude: ["robots.txt", "assets/js/search/*.js"]
# -----------------------------------------------------------------------------
# Terser
# -----------------------------------------------------------------------------
terser:
compress:
drop_console: true
# -----------------------------------------------------------------------------
# Jekyll Archives
# -----------------------------------------------------------------------------
jekyll-archives:
enabled: [year, tags, categories] # enables year, tag and category archives (remove if you need to disable one of them).
layouts:
year: archive-year
tag: archive-tag
category: archive-category
permalinks:
year: '/blog/:year/'
tag: '/blog/tag/:name/'
category: '/blog/category/:name/'
posts:
enabled: [year, tags, categories] # enables year, tag and category archives (remove if you need to disable one of them).
permalinks:
year: "/blog/:year/"
tags: "/blog/:type/:name/"
categories: "/blog/:type/:name/"
books:
enabled: [year, tags, categories] # enables year, tag and category archives (remove if you need to disable one of them).
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", "blockquotes"] # these tags will be displayed on the front page of your blog
display_categories: ["external-services"] # these categories will be displayed on the front page of your blog
# -----------------------------------------------------------------------------
# Jekyll Scholar
@ -264,23 +305,57 @@ 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: false # Altmetric badge (https://www.altmetric.com/products/altmetric-badges/)
dimensions_badge: false # Dimensions badge (https://badge.dimensions.ai/)
# Display different badges withs stats for your publications
# Customize badge behavior in _layouts/bib.liquid
enable_publication_badges:
altmetric: true # Altmetric badge (Customization options: https://badge-docs.altmetric.com/index.html)
dimensions: true # Dimensions badge (Customization options: https://badge.dimensions.ai/)
google_scholar: true # Google Scholar badge (https://scholar.google.com/intl/en/scholar/citations.html)
inspirehep: true # Inspire HEP badge (https://help.inspirehep.net/knowledge-base/citation-metrics/)
# Filter out certain bibtex entry keywords used internally from the bib output
bibtex_show: true
filtered_bibtex_keywords: [abbr, abstract, arxiv, bibtex_show, html, pdf, selected, supp, blog, code, poster, slides, website, preview, altmetric, keywords, annotation]
filtered_bibtex_keywords:
[
abbr,
abstract,
additional_info,
altmetric,
annotation,
arxiv,
award,
award_name,
bibtex_show,
blog,
code,
dimensions,
eprint,
google_scholar_id,
hal,
html,
inspirehep_id,
pdf,
pmid,
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
@ -293,13 +368,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
@ -311,66 +387,294 @@ 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: "-auto-orient -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: true # 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_pirsch_analytics: false # enables Pirsch analytics (https://pirsch.io/)
enable_openpanel_analytics: false # enables Openpanel analytics (https://openpanel.dev/)
enable_google_verification: false # enables google site verification
enable_bing_verification: false # enables bing site verification
enable_cookie_consent: false # enables GDPR-compliant cookie consent dialog (https://github.com/orestbida/cookieconsent)
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
enable_video_embedding: false # enables video embedding for bibtex entries. If false, the button opens the video link in a new window.
# -----------------------------------------------------------------------------
# Library versions
# -----------------------------------------------------------------------------
academicons:
version: "1.9.1"
integrity: "sha256-i1+4qU2G2860dGGIOJscdC30s9beBXjFfzjWLjBRsBg="
bootstrap:
version: "4.6.1"
integrity:
css: "sha256-DF7Zhf293AJxJNTmh5zhoYYIMs2oXitRfBjY+9L//AY="
js: "sha256-fgLAgv7fyCGopR/gBNq2iW3ZKIdqIcyshnUULC4vex8="
fontawesome:
version: "5.15.4"
integrity: "sha256-mUZM63G8m73Mcidfrv5E+Y61y7a12O5mW4ezU3bxqW4="
jquery:
version: "3.6.0"
integrity: "sha256-/xUj+3OJU5yExlq6GSYGSHk7tPXikynS7ogEvDej/m4="
mathjax:
version: "3.2.0"
masonry:
version: "4.2.2"
integrity: "sha256-Nn1q/fx0H7SNLZMQ5Hw5JLaTRZp0yILA/FRexe19VdI="
mdb:
version: "4.20.0"
integrity:
css: "sha256-jpjYvU3G3N6nrrBwXJoVEYI/0zw8htfFnhT9ljN3JJw="
js: "sha256-NdbiivsvWt7VYCt6hYNT3h/th9vSTL4EDWeGs5SN3DA="
medium_zoom:
version: "1.0.8"
integrity: "sha256-7PhEpEWEW0XXQ0k6kQrPKwuoIomz8R8IYyuU1Qew4P8="
# Add the url, version and integrity hash of the libraries you use in your site.
# The integrity hash is used to ensure that the library is not tampered with.
# Integrity hashes not provided by the libraries were generated using https://www.srihash.org/
third_party_libraries:
download: false # if true, download the versions of the libraries specified below and use the downloaded files
bootstrap-table:
integrity:
css: "sha256-uRX+PiRTR4ysKFRCykT8HLuRCub26LgXJZym3Yeom1c="
js: "sha256-4rppopQE9POKfukn2kEvhJ9Um25Cf6+IDVkARD0xh78="
url:
css: "https://cdn.jsdelivr.net/npm/bootstrap-table@{{version}}/dist/bootstrap-table.min.css"
js: "https://cdn.jsdelivr.net/npm/bootstrap-table@{{version}}/dist/bootstrap-table.min.js"
version: "1.22.4"
chartjs:
integrity:
js: "sha256-0q+JdOlScWOHcunpUk21uab1jW7C1deBQARHtKMcaB4="
url:
js: "https://cdn.jsdelivr.net/npm/chart.js@{{version}}/dist/chart.umd.min.js"
version: "4.4.1"
d3:
integrity:
js: "sha256-1rA678n2xEx7x4cTZ5x4wpUCj6kUMZEZ5cxLSVSFWxw="
url:
js: "https://cdn.jsdelivr.net/npm/d3@{{version}}/dist/d3.min.js"
version: "7.8.5"
diff2html:
integrity:
css: "sha256-IMBK4VNZp0ivwefSn51bswdsrhk0HoMTLc2GqFHFBXg="
js: "sha256-eU2TVHX633T1o/bTQp6iIJByYJEtZThhF9bKz/DcbbY="
url:
css: "https://cdn.jsdelivr.net/npm/diff2html@{{version}}/bundles/css/diff2html.min.css"
js: "https://cdn.jsdelivr.net/npm/diff2html@{{version}}/bundles/js/diff2html-ui.min.js"
version: "3.4.47"
echarts:
integrity:
js:
library: "sha256-QvgynZibb2U53SsVu98NggJXYqwRL7tg3FeyfXvPOUY="
dark_theme: "sha256-sm6Ui9w41++ZCWmIWDLC18a6ki72FQpWDiYTDxEPXwU="
url:
js:
library: "https://cdn.jsdelivr.net/npm/echarts@{{version}}/dist/echarts.min.js"
dark_theme: "https://cdn.jsdelivr.net/npm/echarts@{{version}}/theme/dark-fresh-cut.js"
version: "5.5.0"
google_fonts:
url:
fonts: "https://fonts.googleapis.com/css?family=Roboto:300,400,500,700|Roboto+Slab:100,300,400,500,700|Material+Icons&display=swap"
highlightjs:
integrity:
css:
light: "sha256-Oppd74ucMR5a5Dq96FxjEzGF7tTw2fZ/6ksAqDCM8GY="
dark: "sha256-nyCNAiECsdDHrr/s2OQsp5l9XeY2ZJ0rMepjCT2AkBk="
url:
css:
light: "https://cdn.jsdelivr.net/npm/highlight.js@{{version}}/styles/github.min.css"
dark: "https://cdn.jsdelivr.net/npm/highlight.js@{{version}}/styles/github-dark.min.css"
version: "11.9.0"
imagesloaded:
integrity:
js: "sha256-htrLFfZJ6v5udOG+3kNLINIKh2gvoKqwEhHYfTTMICc="
url:
js: https://cdn.jsdelivr.net/npm/imagesloaded@{{version}}/imagesloaded.pkgd.min.js
version: "5.0.0"
img-comparison-slider:
integrity:
css: "sha256-3qTIuuUWIFnnU3LpQMjqiXc0p09rvd0dmj+WkpQXSR8="
js: "sha256-EXHg3x1K4oIWdyohPeKX2ZS++Wxt/FRPH7Nl01nat1o="
map: "sha256-3wfqS2WU5kGA/ePcgFzJXl5oSN1QsgZI4/edprTgX8w="
url:
css: "https://cdn.jsdelivr.net/npm/img-comparison-slider@{{version}}/dist/styles.min.css"
js: "https://cdn.jsdelivr.net/npm/img-comparison-slider@{{version}}/dist/index.min.js"
map: "https://cdn.jsdelivr.net/npm/img-comparison-slider@{{version}}/dist/index.js.map"
version: "8.0.6"
jquery:
integrity:
js: "sha256-/xUj+3OJU5yExlq6GSYGSHk7tPXikynS7ogEvDej/m4="
url:
js: "https://cdn.jsdelivr.net/npm/jquery@{{version}}/dist/jquery.min.js"
version: "3.6.0"
leaflet:
integrity:
css: "sha256-q9ba7o845pMPFU+zcAll8rv+gC+fSovKsOoNQ6cynuQ="
js: "sha256-MgH13bFTTNqsnuEoqNPBLDaqxjGH+lCpqrukmXc8Ppg="
js_map: "sha256-YAoQ3FzREN4GmVENMir8vgHHypC0xfSK3CAxTHCqx1M="
local:
images: "images/"
url:
css: "https://cdn.jsdelivr.net/npm/leaflet@{{version}}/dist/leaflet.min.css"
images: "https://cdn.jsdelivr.net/npm/leaflet@{{version}}/dist/images/"
js: "https://cdn.jsdelivr.net/npm/leaflet@{{version}}/dist/leaflet.min.js"
js_map: "https://cdn.jsdelivr.net/npm/leaflet@{{version}}/dist/leaflet.js.map"
version: "1.9.4"
lightbox2:
integrity:
css: "sha256-uypRbsAiJcFInM/ndyI/JHpzNe6DtUNXaWEUWEPfMGo="
js: "sha256-A6jI5V9s1JznkWwsBaRK8kSeXLgIqQfxfnvdDOZEURY="
url:
css: "https://cdn.jsdelivr.net/npm/lightbox2@{{version}}/dist/css/lightbox.min.css"
js: "https://cdn.jsdelivr.net/npm/lightbox2@{{version}}/dist/js/lightbox.min.js"
version: "2.11.5"
mathjax:
integrity:
js: "sha256-MASABpB4tYktI2Oitl4t+78w/lyA+D7b/s9GEP0JOGI="
local:
fonts: "output/chtml/fonts/woff-v2/"
url:
fonts: "https://cdn.jsdelivr.net/npm/mathjax@{{version}}/es5/output/chtml/fonts/woff-v2/"
js: "https://cdn.jsdelivr.net/npm/mathjax@{{version}}/es5/tex-mml-chtml.js"
version: "3.2.2"
masonry:
integrity:
js: "sha256-Nn1q/fx0H7SNLZMQ5Hw5JLaTRZp0yILA/FRexe19VdI="
url:
js: "https://cdn.jsdelivr.net/npm/masonry-layout@{{version}}/dist/masonry.pkgd.min.js"
version: "4.2.2"
mdb:
integrity:
css: "sha256-jpjYvU3G3N6nrrBwXJoVEYI/0zw8htfFnhT9ljN3JJw="
css_map: "sha256-iYYMNfsJdVZjvsebJulg09miBXM4/GMTJgv1u5EZFFM="
js: "sha256-NdbiivsvWt7VYCt6hYNT3h/th9vSTL4EDWeGs5SN3DA="
js_map: "sha256-UPgyn4YNsT0khkBK5553QwhnlbTlU0aa+igyc6qP1bE="
url:
css: "https://cdn.jsdelivr.net/npm/mdbootstrap@{{version}}/css/mdb.min.css"
css_map: "https://cdn.jsdelivr.net/npm/mdbootstrap@{{version}}/css/mdb.min.css.map"
js: "https://cdn.jsdelivr.net/npm/mdbootstrap@{{version}}/js/mdb.min.js"
js_map: "https://cdn.jsdelivr.net/npm/mdbootstrap@{{version}}/js/mdb.min.js.map"
version: "4.20.0"
medium_zoom:
integrity:
js: "sha256-ZgMyDAIYDYGxbcpJcfUnYwNevG/xi9OHKaR/8GK+jWc="
url:
js: "https://cdn.jsdelivr.net/npm/medium-zoom@{{version}}/dist/medium-zoom.min.js"
version: "1.1.0"
mermaid:
integrity:
js: "sha256-TtLOdUA8mstPoO6sGvHIGx2ceXrrX4KgIItO06XOn8A="
url:
js: "https://cdn.jsdelivr.net/npm/mermaid@{{version}}/dist/mermaid.min.js"
version: "10.7.0"
photoswipe:
integrity:
js: "sha256-VCBpdxvrNNxGHNuTdNqK9kPFkev2XY7DYzHdmgaB69Q="
url:
css: "https://cdn.jsdelivr.net/npm/photoswipe@{{version}}/dist/photoswipe.min.css"
js: "https://cdn.jsdelivr.net/npm/photoswipe@{{version}}/dist/photoswipe.esm.min.js"
version: "5.4.4"
photoswipe-lightbox:
integrity:
js: "sha256-uCw4VgT5DMdwgtjhvU9e98nT2mLZXcw/8WkaTrDd3RI="
url:
js: "https://cdn.jsdelivr.net/npm/photoswipe@{{version}}/dist/photoswipe-lightbox.esm.min.js"
version: "5.4.4"
plotly:
integrity:
js: "sha256-oy6Be7Eh6eiQFs5M7oXuPxxm9qbJXEtTpfSI93dW16Q="
url:
js: "https://cdn.jsdelivr.net/npm/plotly.js@{{version}}/dist/plotly.min.js"
version: "3.0.1"
polyfill:
url:
js: "https://cdnjs.cloudflare.com/polyfill/v{{version}}/polyfill.min.js?features=es6"
version: "3"
pseudocode:
integrity:
css: "sha256-VwMV//xgBPDyRFVSOshhRhzJRDyBmIACniLPpeXNUdc="
js: "sha256-aVkDxqyzrB+ExUsOY9PdyelkDhn/DfrjWu08aVpqNlo="
url:
css: "https://cdn.jsdelivr.net/npm/pseudocode@{{version}}/build/pseudocode.min.css"
js: "https://cdn.jsdelivr.net/npm/pseudocode@{{version}}/build/pseudocode.min.js"
version: "2.4.1"
spotlight:
integrity:
css: "sha256-Dsvkx8BU8ntk9Iv+4sCkgHRynYSQQFP6gJfBN5STFLY="
url:
css: "https://cdn.jsdelivr.net/npm/spotlight.js@{{version}}/dist/css/spotlight.min.css"
js: "https://cdn.jsdelivr.net/npm/spotlight.js@{{version}}/dist/spotlight.bundle.min.js"
version: "0.7.8"
swiper:
integrity:
css: "sha256-yUoNxsvX+Vo8Trj3lZ/Y5ZBf8HlBFsB6Xwm7rH75/9E="
js: "sha256-BPrwikijIybg9OQC5SYFFqhBjERYOn97tCureFgYH1E="
map: "sha256-lbF5CsospW93otqvWOIbbhj80CjazrZXvamD7nC7TBI="
url:
css: "https://cdn.jsdelivr.net/npm/swiper@{{version}}/swiper-bundle.min.css"
js: "https://cdn.jsdelivr.net/npm/swiper@{{version}}/swiper-element-bundle.min.js"
map: "https://cdn.jsdelivr.net/npm/swiper@{{version}}/swiper-element-bundle.min.js.map"
version: "11.0.5"
swiper-map:
integrity:
js: "sha256-hlZaH8ySXX97bZaetnrtYlKuhx3oEXFz/s2IXchu6vk="
url:
js: "https://cdn.jsdelivr.net/npm/swiper@11.1.0/swiper-element-bundle.min.js.map"
version: "11.0.5"
vanilla-cookieconsent:
integrity:
css: "sha256-ygRrixsQlBByBZiOcJamh7JByO9fP+/l5UPtKNJmRsE="
js: "sha256-vG4vLmOB/AJbJ6awr7Wg4fxonG+fxAp4cIrbIFTvRXU="
url:
css: "https://cdn.jsdelivr.net/npm/vanilla-cookieconsent@{{version}}/dist/cookieconsent.css"
js: "https://cdn.jsdelivr.net/npm/vanilla-cookieconsent@{{version}}/dist/cookieconsent.umd.js"
version: "3.1.0"
vega:
integrity:
js: "sha256-Yot/cfgMMMpFwkp/5azR20Tfkt24PFqQ6IQS+80HIZs="
js_map: "sha256-z0x9ICA65dPkZ0JVa9wTImfF6n7AJsKc6WlFE96/wNA="
url:
js: "https://cdn.jsdelivr.net/npm/vega@{{version}}/build/vega.min.js"
js_map: "https://cdn.jsdelivr.net/npm/vega@{{version}}/build/vega.min.js.map"
version: "5.27.0"
vega-embed:
integrity:
js: "sha256-FPCJ9JYCC9AZSpvC/t/wHBX7ybueZhIqOMjpWqfl3DU="
js_map: "sha256-VBbfSEFYSMdX/rTdGrONEHNP6BprCB7H/LpMMNt/cPA="
url:
js: "https://cdn.jsdelivr.net/npm/vega-embed@{{version}}/build/vega-embed.min.js"
js_map: "https://cdn.jsdelivr.net/npm/vega-embed@{{version}}/build/vega-embed.min.js.map"
version: "6.24.0"
vega-lite:
integrity:
js: "sha256-TvBvIS5jUN4BSy009usRjNzjI1qRrHPYv7xVLJyjUyw="
js_map: "sha256-l2I4D5JC23Ulsu6e3sKVe5AJ+r+DFkzkKnZS8nUGz28="
url:
js: "https://cdn.jsdelivr.net/npm/vega-lite@{{version}}/build/vega-lite.min.js"
js_map: "https://cdn.jsdelivr.net/npm/vega-lite@{{version}}/build/vega-lite.min.js.map"
version: "5.16.3"
venobox:
integrity:
css: "sha256-ohJEB0/WsBOdBD+gQO/MGfyJSbTUI8OOLbQGdkxD6Cg="
js: "sha256-LsGXHsHMMmTcz3KqTaWvLv6ome+7pRiic2LPnzTfiSo="
url:
css: "https://cdn.jsdelivr.net/npm/venobox@{{version}}/dist/venobox.min.css"
js: "https://cdn.jsdelivr.net/npm/venobox@{{version}}/dist/venobox.min.js"
version: "2.1.8"
# -----------------------------------------------------------------------------
# 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

4179
_data/citations.yml Normal file

File diff suppressed because it is too large Load Diff

View File

@ -1,5 +1,7 @@
github_users:
- fguiotte
repo_description_lines_max: 2
github_repos:
- fguiotte/sap

14
_data/socials.yml Normal file
View File

@ -0,0 +1,14 @@
# this file contains the social media links and usernames of the author
# the socials will be displayed in the order they are defined here
# for more information, please refer to the documentation of jekyll-socials plugin: https://github.com/george-gca/jekyll-socials
cv_pdf: /assets/pdf/example_pdf.pdf # path to your CV PDF file
email: you@example.com # your email address
inspirehep_id: 1010907 # Inspire HEP author ID
rss_icon: true # comment this line to hide the RSS icon
scholar_userid: qc6CJjYAAAAJ # your Google Scholar ID
# wechat_qr: # filename of your wechat qr-code saved as an image (e.g., wechat-qr.png if saved to assets/img/wechat-qr.png)
# whatsapp_number: # your WhatsApp number (full phone number in international format. Omit any zeroes, brackets, or dashes when adding the phone number in international format.)
custom_social: # can be any name here other than the ones already defined in the jekyll-socials plugin
logo: https://www.alberteinstein.com/wp-content/uploads/2024/03/cropped-favicon-192x192.png # can be png, svg, jpg
title: Custom Social
url: https://www.alberteinstein.com/

30
_includes/audio.liquid Normal file
View File

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

View File

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

25
_includes/calendar.liquid Normal file
View File

@ -0,0 +1,25 @@
{% if include.calendar_id %}
<div class="post mt-4">
<h2 class="mb-3"><i class="fas fa-calendar-alt"></i> Upcoming Events</h2>
<button
class="btn btn-sm btn-outline-primary mb-3"
onclick="toggleCalendar()"
id="calendar-toggle-btn"
>
Show Calendar
</button>
<div class="calendar-wrapper" id="calendar-container" style="display: none;">
<iframe
id="calendar-iframe"
data-calendar-id="{{ include.calendar_id }}"
data-timezone="{{ include.timezone | default: 'UTC' }}"
style="{{ include.style | default: 'border:0; width:100%; height:600px;' }}"
frameborder="0"
scrolling="no"
>
</iframe>
</div>
</div>
{% endif %}

26
_includes/citation.liquid Normal file
View File

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

View File

@ -0,0 +1,71 @@
{% assign course = site.teachings | where: 'course_id', include.course_id | first %}
{% if course %}
<div class="course-schedule">
<h2>{{ course.title }}</h2>
{% if course.description %}
<div class="course-description">
{{ course.description | markdownify }}
</div>
{% endif %}
{% if course.instructor %}
<p><strong>Instructor:</strong> {{ course.instructor }}</p>
{% endif %}
{% if course.term %}
<p><strong>Term:</strong> {{ course.term }}</p>
{% endif %}
{% if course.schedule %}
<table class="table table-sm table-responsive">
<thead>
<tr>
<th>Week</th>
<th>Date</th>
<th>Topic</th>
<th>Materials</th>
</tr>
</thead>
<tbody>
{% for entry in course.schedule %}
<tr>
<td>{{ entry.week }}</td>
<td>{{ entry.date }}</td>
<td>
{% if entry.topic %}
<strong>{{ entry.topic }}</strong>
{% endif %}
{% if entry.description %}
<div class="schedule-description">{{ entry.description | markdownify }}</div>
{% endif %}
</td>
<td>
{% if entry.materials %}
<ul class="schedule-materials">
{% for material in entry.materials %}
<li>
{% if material.url %}
{% if material.url contains '://' %}
<a href="{{ material.url }}" target="_blank">{{ material.name }}</a>
{% else %}
<a href="{{ material.url | relative_url }}" target="_blank">{{ material.name }}</a>
{% endif %}
{% else %}
{{ material.name }}
{% endif %}
</li>
{% endfor %}
</ul>
{% endif %}
</td>
</tr>
{% endfor %}
</tbody>
</table>
{% else %}
<p>No schedule available for this course.</p>
{% endif %}
</div>
{% endif %}

37
_includes/courses.liquid Normal file
View File

@ -0,0 +1,37 @@
{% if site.teachings %}
<div class="courses">
{% assign courses_by_year = site.teachings | sort: 'year' | reverse | group_by: 'year' %}
{% for year_group in courses_by_year %}
<h2 class="year">{{ year_group.name }}</h2>
<div class="course-list">
{% assign year_courses = year_group.items | sort: 'term' %}
{% for course in year_courses %}
<div class="course-item">
<h3 class="course-title">
<a href="{{ course.url | relative_url }}">{{ course.title }}</a>
</h3>
<div class="course-meta">
{% if course.term %}
<span class="course-term">{{ course.term }}</span>
{% endif %}
{% if course.instructor %}
<span class="course-instructor">{{ course.instructor }}</span>
{% endif %}
</div>
{% if course.description %}
<div class="course-description">
{{ course.description | markdownify }}
</div>
{% endif %}
</div>
{% endfor %}
</div>
{% endfor %}
</div>
{% else %}
<p>No courses available yet.</p>
{% endif %}

View File

@ -0,0 +1,66 @@
{% comment %}
Unified awards entry renderer for both formats
{% endcomment %}
<ul class="card-text font-weight-light list-group list-group-flush">
{% for entry in entries %}
<li class="list-group-item">
<div class="row">
{% capture start_date %}
{% if entry.date %}{{ entry.date }}{% endif %}
{% endcapture %}
{% if start_date != '' %}
<div class="col-xs-2 col-sm-2 col-md-2 text-center">
<table class="table-cv">
<tbody>
<tr>
<td>
<span class="badge font-weight-bold danger-color-dark text-uppercase align-middle" style="min-width: 75px">
{{- start_date | split: '-' | slice: 0, 1 | join: '' -}}
</span>
</td>
</tr>
</tbody>
</table>
</div>
<div class="col-xs-10 col-sm-10 col-md-10 mt-2 mt-md-0">
{% if entry.url %}
<h6 class="title font-weight-bold ml-1 ml-md-4">
<a href="{{ entry.url }}">{{ entry.title }}</a>
</h6>
{% elsif entry.title %}
<h6 class="title font-weight-bold ml-1 ml-md-4">{{ entry.title }}</h6>
{% endif %}
{% if entry.awarder %}
<h6 class="ml-1 ml-md-4" style="font-size: 0.95rem">{{ entry.awarder }}</h6>
{% endif %}
{% if entry.summary %}
<p class="ml-1 ml-md-4">{{ entry.summary | markdownify | remove: '<p>' | remove: '</p>' }}</p>
{% endif %}
</div>
{% else %}
<div class="col-xs-12 col-sm-12 col-md-12">
{% if entry.url %}
<h6 class="title font-weight-bold ml-1 ml-md-4">
<a href="{{ entry.url }}">{{ entry.title }}</a>
</h6>
{% elsif entry.title %}
<h6 class="title font-weight-bold ml-1 ml-md-4">{{ entry.title }}</h6>
{% endif %}
{% if entry.awarder %}
<h6 class="ml-1 ml-md-4" style="font-size: 0.95rem">{{ entry.awarder }}</h6>
{% endif %}
{% if entry.summary %}
<p class="ml-1 ml-md-4">{{ entry.summary | markdownify | remove: '<p>' | remove: '</p>' }}</p>
{% endif %}
</div>
{% endif %}
</div>
</li>
{% endfor %}
</ul>

View File

@ -0,0 +1,28 @@
{% comment %}
Unified certificates entry renderer for both formats
{% endcomment %}
<ul class="card-text font-weight-light list-group list-group-flush">
{% for entry in entries %}
<li class="list-group-item">
{% if entry.icon %}
<i class="{{ entry.icon }}"></i>
{% endif %}
{% if entry.url %}
<strong
><a href="{{ entry.url }}" target="_blank">{{ entry.name }}</a></strong
>
{% else %}
<strong>{{ entry.name }}</strong>
{% endif %}
{% if entry.issuer %}
- <em>{{ entry.issuer }}</em>
{% endif %}
{% if entry.date %}
({{ entry.date | split: '-' | slice: 0, 1 | join: '' }})
{% endif %}
</li>
{% endfor %}
</ul>

View File

@ -0,0 +1,93 @@
{% comment %}
Unified education entry renderer for both RenderCV and JSONResume formats
Handles both:
- RenderCV: institution, area, studyType (or degree), start_date, end_date, location, courses, highlights
- JSONResume: institution, area, studyType, startDate, endDate, location, courses, highlights
{% endcomment %}
<ul class="card-text font-weight-light list-group list-group-flush">
{% for entry in entries %}
<li class="list-group-item">
<div class="row">
<div class="col-xs-2 col-sm-2 col-md-2 text-center date-column">
{% capture start_date %}
{% if entry.start_date %}{{ entry.start_date }}{% elsif entry.startDate %}{{ entry.startDate }}{% endif %}
{% endcapture %}
{% capture end_date %}
{% if entry.end_date %}{{ entry.end_date }}{% elsif entry.endDate %}{{ entry.endDate }}{% endif %}
{% endcapture %}
{% if start_date != '' %}
{% comment %} Extract year only from dates like "1933-01-01" or just use "1933" as is {% endcomment %}
{% assign startDate = start_date | split: '-' | first %}
{% assign endDate = end_date | split: '-' | first | default: 'Present' %}
{% assign date = startDate | append: ' - ' | append: endDate %}
{% else %}
{% assign date = null %}
{% endif %}
<table class="table-cv">
<tbody>
<tr>
<td>
{% if date %}
<span class="badge font-weight-bold danger-color-dark text-uppercase align-middle" style="min-width: 75px">{{ date }}</span>
{% endif %}
</td>
</tr>
{% capture location %}
{% if entry.location %}{{ entry.location }}{% endif %}
{% endcapture %}
{% if location != '' %}
<tr>
<td>
<p class="location">
<i class="fa-solid fa-location-dot iconlocation"></i>
{{ location }}
</p>
</td>
</tr>
{% endif %}
</tbody>
</table>
</div>
<div class="col-xs-10 col-sm-10 col-md-10 mt-2 mt-md-0">
{% capture study_type %}
{% if entry.studyType %}{{ entry.studyType }}{% elsif entry.degree %}{{ entry.degree }}{% endif %}
{% endcapture %}
{% if entry.url %}
<h6 class="title font-weight-bold ml-1 ml-md-4">
<a href="{{ entry.url }}">{{ study_type }}</a>
</h6>
{% elsif study_type != '' %}
<h6 class="title font-weight-bold ml-1 ml-md-4">{{ study_type }}</h6>
{% endif %}
{% if entry.institution %}
<h6 class="ml-1 ml-md-4" style="font-size: 0.95rem">{{ entry.institution }}</h6>
{% endif %}
{% if entry.area %}
<h6 class="ml-1 ml-md-4" style="font-size: 0.95rem; font-style: italic">{{ entry.area }}</h6>
{% endif %}
{% if entry.courses or entry.highlights %}
<ul class="items">
{% for item in entry.courses %}
<li>
<span class="item">{{ item }}</span>
</li>
{% endfor %}
{% for item in entry.highlights %}
<li>
<span class="item">{{ item | markdownify | remove: '<p>' | remove: '</p>' }}</span>
</li>
{% endfor %}
</ul>
{% endif %}
</div>
</div>
</li>
{% endfor %}
</ul>

View File

@ -0,0 +1,91 @@
{% comment %}
Unified work/experience entry renderer for both RenderCV and JSONResume formats
Handles both:
- RenderCV: company, position, start_date, end_date, location, url, summary, highlights
- JSONResume: name, position, startDate, endDate, location, url, summary, highlights
{% endcomment %}
<ul class="card-text font-weight-light list-group list-group-flush">
{% for entry in entries %}
<li class="list-group-item">
<div class="row">
<div class="col-xs-2 col-sm-2 col-md-2 text-center date-column">
{% capture start_date %}
{% if entry.start_date %}{{ entry.start_date }}{% elsif entry.startDate %}{{ entry.startDate }}{% endif %}
{% endcapture %}
{% capture end_date %}
{% if entry.end_date %}{{ entry.end_date }}{% elsif entry.endDate %}{{ entry.endDate }}{% endif %}
{% endcapture %}
{% if start_date != '' %}
{% comment %} Extract year only from dates like "1933-01-01" or just use "1933" as is {% endcomment %}
{% assign startDate = start_date | split: '-' | first %}
{% assign endDate = end_date | split: '-' | first | default: 'Present' %}
{% assign date = startDate | append: ' - ' | append: endDate %}
{% else %}
{% assign date = '' %}
{% endif %}
<table class="table-cv">
<tbody>
<tr>
<td>
<span class="badge font-weight-bold danger-color-dark text-uppercase align-middle" style="min-width: 75px">{{ date }}</span>
</td>
</tr>
{% capture location %}
{% if entry.location %}{{ entry.location }}{% endif %}
{% endcapture %}
{% if location != '' %}
<tr>
<td>
<p class="location">
<i class="fa-solid fa-location-dot iconlocation"></i>
{{ location }}
</p>
</td>
</tr>
{% endif %}
</tbody>
</table>
</div>
<div class="col-xs-10 col-sm-10 col-md-10 mt-2 mt-md-0">
{% capture position_title %}
{% if entry.position %}{{ entry.position }}{% endif %}
{% endcapture %}
{% if entry.url %}
<h6 class="title font-weight-bold ml-1 ml-md-4">
<a href="{{ entry.url }}">{{ position_title }}</a>
</h6>
{% elsif position_title != '' %}
<h6 class="title font-weight-bold ml-1 ml-md-4">{{ position_title }}</h6>
{% endif %}
{% capture company_name %}
{% if entry.name %}{{ entry.name }}{% elsif entry.company %}{{ entry.company }}{% elsif entry.organization %}{{ entry.organization }}{% endif %}
{% endcapture %}
{% if company_name != '' %}
<h6 class="ml-1 ml-md-4" style="font-size: 0.95rem">{{ company_name }}</h6>
{% endif %}
{% if entry.summary %}
<h6 class="ml-1 ml-md-4" style="font-size: 0.95rem; font-style: italic">
{{ entry.summary | markdownify | remove: '<p>' | remove: '</p>' }}
</h6>
{% endif %}
{% if entry.highlights %}
<ul class="items">
{% for item in entry.highlights %}
<li>
<span class="item">{{ item | markdownify | remove: '<p>' | remove: '</p>' }}</span>
</li>
{% endfor %}
</ul>
{% endif %}
</div>
</div>
</li>
{% endfor %}
</ul>

View File

@ -0,0 +1,29 @@
{% comment %}
Unified interests entry renderer for both formats
{% endcomment %}
<div class="card-text font-weight-light">
{% for entry in entries %}
<div class="interest-item">
{% if entry.icon %}
<i class="{{ entry.icon }}"></i>
{% endif %}
<strong>{{ entry.name }}:</strong>
{% if entry.keywords %}
{% for keyword in entry.keywords %}
{% if forloop.last %}
{{ keyword }}
{% else %}
{{ keyword }},
{% endif %}
{% endfor %}
{% endif %}
</div>
{% endfor %}
</div>
<style>
.interest-item {
padding: 0.5rem 0;
}
</style>

View File

@ -0,0 +1,28 @@
{% comment %}
Unified languages entry renderer for both formats
- RenderCV uses: name, summary
- JSONResume uses: language, fluency
{% endcomment %}
<div class="card-text font-weight-light">
{% for entry in entries %}
<div class="language-item">
{% if entry.icon %}
<i class="{{ entry.icon }}"></i>
{% endif %}
{% capture lang_name %}
{% if entry.name %}{{ entry.name }}{% elsif entry.language %}{{ entry.language }}{% endif %}
{% endcapture %}
{% capture fluency %}
{% if entry.summary %}{{ entry.summary }}{% elsif entry.fluency %}{{ entry.fluency }}{% endif %}
{% endcapture %}
<strong>{{ lang_name }}:</strong> {{ fluency }}
</div>
{% endfor %}
</div>
<style>
.language-item {
padding: 0.5rem 0;
}
</style>

View File

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

View File

@ -1,8 +0,0 @@
<table class="table table-sm table-borderless table-responsive">
{% for content in entry.contents %}
<tr>
<td class="p-1 pr-2 font-weight-bold"><b>{{ content.name }}</b></td>
<td class="p-1 pl-2 font-weight-light text">{{ content.value }}</td>
</tr>
{% endfor %}
</table>

View File

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

View File

@ -0,0 +1,31 @@
{% comment %}
Unified projects entry renderer for both formats
{% endcomment %}
<ul class="card-text font-weight-light list-group list-group-flush">
{% for entry in entries %}
<li class="list-group-item">
{% if entry.url %}
<h6 class="title font-weight-bold">
<a href="{{ entry.url }}" target="_blank">{{ entry.name }}</a>
</h6>
{% else %}
<h6 class="title font-weight-bold">{{ entry.name }}</h6>
{% endif %}
{% if entry.summary %}
<p>{{ entry.summary | markdownify | remove: '<p>' | remove: '</p>' }}</p>
{% endif %}
{% if entry.highlights %}
<ul class="items">
{% for item in entry.highlights %}
<li>
<span class="item">{{ item | markdownify | remove: '<p>' | remove: '</p>' }}</span>
</li>
{% endfor %}
</ul>
{% endif %}
</li>
{% endfor %}
</ul>

View File

@ -0,0 +1,70 @@
{% comment %}
Unified publications entry renderer for both formats
{% endcomment %}
<ul class="card-text font-weight-light list-group list-group-flush">
{% for entry in entries %}
<li class="list-group-item">
<div class="row">
{% capture pub_date %}
{% if entry.releaseDate %}{{ entry.releaseDate }}{% elsif entry.date %}{{ entry.date }}{% endif %}
{% endcapture %}
{% if pub_date != '' %}
<div class="col-xs-2 col-sm-2 col-md-2 text-center">
<table class="table-cv">
<tbody>
<tr>
<td>
<span class="badge font-weight-bold danger-color-dark text-uppercase align-middle" style="min-width: 75px">
{{- pub_date | split: '-' | slice: 0, 1 | join: '' -}}
</span>
</td>
</tr>
</tbody>
</table>
</div>
<div class="col-xs-10 col-sm-10 col-md-10 mt-2 mt-md-0">
{% if entry.url %}
<h6 class="title font-weight-bold ml-1 ml-md-4">
<a href="{{ entry.url }}">{{ entry.title | default: entry.name }}</a>
</h6>
{% elsif entry.title %}
<h6 class="title font-weight-bold ml-1 ml-md-4">{{ entry.title }}</h6>
{% endif %}
{% if entry.publisher %}
<h6 class="ml-1 ml-md-4" style="font-size: 0.95rem">
<em>{{ entry.publisher }}</em>
</h6>
{% endif %}
{% if entry.summary %}
<p class="ml-1 ml-md-4">{{ entry.summary | markdownify | remove: '<p>' | remove: '</p>' }}</p>
{% endif %}
</div>
{% else %}
<div class="col-xs-12 col-sm-12 col-md-12">
{% if entry.url %}
<h6 class="title font-weight-bold ml-1 ml-md-4">
<a href="{{ entry.url }}">{{ entry.title | default: entry.name }}</a>
</h6>
{% elsif entry.title %}
<h6 class="title font-weight-bold ml-1 ml-md-4">{{ entry.title }}</h6>
{% endif %}
{% if entry.publisher %}
<h6 class="ml-1 ml-md-4" style="font-size: 0.95rem">
<em>{{ entry.publisher }}</em>
</h6>
{% endif %}
{% if entry.summary %}
<p class="ml-1 ml-md-4">{{ entry.summary | markdownify | remove: '<p>' | remove: '</p>' }}</p>
{% endif %}
</div>
{% endif %}
</div>
</li>
{% endfor %}
</ul>

View File

@ -0,0 +1,15 @@
{% comment %}
Unified references entry renderer for both formats
{% endcomment %}
<ul class="card-text font-weight-light list-group list-group-flush">
{% for entry in entries %}
<li class="list-group-item">
{% if entry.icon %}
<i class="{{ entry.icon }}"></i>
{% endif %}
<strong>{{ entry.name }}</strong>
<p>{{ entry.reference | markdownify | remove: '<p>' | remove: '</p>' }}</p>
</li>
{% endfor %}
</ul>

View File

@ -0,0 +1,32 @@
{% comment %}
Unified skills entry renderer for both formats
{% endcomment %}
<div class="card-text font-weight-light">
{% for entry in entries %}
<div class="skill-item">
{% if entry.icon %}
<i class="{{ entry.icon }}"></i>
{% endif %}
<strong>
{{- entry.name -}}
{%- if entry.level %} ({{ entry.level }}){% endif %}:</strong
>
{% if entry.keywords %}
{% for keyword in entry.keywords %}
{% if forloop.last %}
{{ keyword }}
{% else %}
{{ keyword }},
{% endif %}
{% endfor %}
{% endif %}
</div>
{% endfor %}
</div>
<style>
.skill-item {
padding: 0.5rem 0;
}
</style>

View File

@ -1,59 +0,0 @@
<ul class="card-text font-weight-light list-group list-group-flush">
{% for content in entry.contents %}
<li class="list-group-item">
<div class="row">
{% if content.year %}
<div class="col-xs-2 cl-sm-2 col-md-2 text-center" style="width: 75px;">
<span class="badge font-weight-bold danger-color-dark text-uppercase align-middle" style="min-width: 75px;">
{{ content.year }}
</span>
</div>
{% endif %}
<div class="col-xs-10 cl-sm-10 col-md-10 mt-2 mt-md-0">
{% if content.title %}
<h6 class="title font-weight-bold ml-1 ml-md-4">{{content.title}}</h6>
{% endif %}
{% if content.institution %}
<h6 class="ml-1 ml-md-4" style="font-size: 0.95rem;">{{content.institution}}</h6>
{% endif %}
{% if content.description %}
<ul class="items">
{% for item in content.description %}
<li>
{% if item.contents %}
<span class="item-title">{{ item.title }}</span>
<ul class="subitems">
{% for subitem in item.contents %}
<li><span class="subitem">{{ subitem }}</span></li>
{% endfor %}
</ul>
{% else %}
<span class="item">{{ item }}</span>
{% endif %}
</li>
{% endfor %}
</ul>
{% endif %}
{% if content.items %}
<ul class="items">
{% for item in content.items %}
<li>
{% if item.contents %}
<span class="item-title">{{ item.title }}</span>
<ul class="subitems">
{% for subitem in item.contents %}
<li><span class="subitem">{{ subitem }}</span></li>
{% endfor %}
</ul>
{% else %}
<span class="item">{{ item }}</span>
{% endif %}
</li>
{% endfor %}
</ul>
{% endif %}
</div>
</div>
</li>
{% endfor %}
</ul>

View File

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

13
_includes/disqus.liquid Normal file
View File

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

View File

@ -0,0 +1,340 @@
<!-- jQuery -->
<script
src="{{ site.third_party_libraries.jquery.url.js }}"
integrity="{{ site.third_party_libraries.jquery.integrity.js }}"
crossorigin="anonymous"
></script>
<!-- Bootsrap & MDB scripts -->
<script src="{{ '/assets/js/bootstrap.bundle.min.js' | relative_url }}"></script>
<script
src="{{ site.third_party_libraries.mdb.url.js }}"
integrity="{{ site.third_party_libraries.mdb.integrity.js }}"
crossorigin="anonymous"
></script>
<!-- Custom overrides -->
<script src="{{ '/assets/js/distillpub/overrides.js' | relative_url }}"></script>
{% if page.mermaid and page.mermaid.enabled %}
<!-- Mermaid and D3 -->
<script
defer
src="{{ site.third_party_libraries.mermaid.url.js }}"
integrity="{{ site.third_party_libraries.mermaid.integrity.js }}"
crossorigin="anonymous"
></script>
{% if page.mermaid.zoomable %}
<script
defer
src="{{ site.third_party_libraries.d3.url.js }}"
integrity="{{ site.third_party_libraries.d3.integrity.js }}"
crossorigin="anonymous"
></script>
{% endif %}
<script defer src="{{ '/assets/js/mermaid-setup.js' | relative_url | bust_file_cache }}" type="text/javascript"></script>
{% endif %}
{% if page.code_diff %}
<!-- Diff2HTML -->
<!-- diff2html doesn't go well with Bootstrap Table -->
<script
src="{{ site.third_party_libraries.diff2html.url.js }}"
integrity="{{ site.third_party_libraries.diff2html.integrity.js }}"
crossorigin="anonymous"
></script>
<script defer src="{{ '/assets/js/diff2html-setup.js' | relative_url | bust_file_cache }}" type="text/javascript"></script>
{% endif %}
{% if page.map %}
<!-- Leaflet -->
<script
src="{{ site.third_party_libraries.leaflet.url.js }}"
integrity="{{ site.third_party_libraries.leaflet.integrity.js }}"
crossorigin="anonymous"
></script>
<script defer src="{{ '/assets/js/leaflet-setup.js' | relative_url | bust_file_cache }}" type="text/javascript"></script>
{% endif %}
{% if page.chart and page.chart.chartjs %}
<!-- Chart.js -->
<script
defer
src="{{ site.third_party_libraries.chartjs.url.js }}"
integrity="{{ site.third_party_libraries.chartjs.integrity.js }}"
crossorigin="anonymous"
></script>
<script defer src="{{ '/assets/js/chartjs-setup.js' | relative_url | bust_file_cache }}" type="text/javascript"></script>
{% endif %}
{% if page.chart and page.chart.echarts %}
<!-- ECharts -->
<script
src="{{ site.third_party_libraries.echarts.url.js.library }}"
integrity="{{ site.third_party_libraries.echarts.integrity.js.library }}"
crossorigin="anonymous"
></script>
{% if site.enable_darkmode %}
<script
src="{{ site.third_party_libraries.echarts.url.js.dark_theme }}"
integrity="{{ site.third_party_libraries.echarts.integrity.js.dark_theme }}"
crossorigin="anonymous"
></script>
{% endif %}
<script defer src="{{ '/assets/js/echarts-setup.js' | relative_url | bust_file_cache }}" type="text/javascript"></script>
{% endif %}
{% if page.chart and page.chart.plotly %}
<!-- Plotly -->
<script
defer
src="{{ site.third_party_libraries.plotly.url.js }}"
integrity="{{ site.third_party_libraries.plotly.integrity.js }}"
crossorigin="anonymous"
></script>
<script defer src="{{ '/assets/js/plotly-setup.js' | relative_url | bust_file_cache }}" type="text/javascript"></script>
{% endif %}
{% if page.chart and page.chart.vega_lite %}
<!-- Vega -->
<script
defer
src="{{ site.third_party_libraries.vega.url.js }}"
integrity="{{ site.third_party_libraries.vega.integrity.js }}"
crossorigin="anonymous"
></script>
<script
defer
src="{{ site.third_party_libraries.vega-lite.url.js }}"
integrity="{{ site.third_party_libraries.vega-lite.integrity.js }}"
crossorigin="anonymous"
></script>
<script
defer
src="{{ site.third_party_libraries.vega-embed.url.js }}"
integrity="{{ site.third_party_libraries.vega-embed.integrity.js }}"
crossorigin="anonymous"
></script>
<script defer src="{{ '/assets/js/vega-setup.js' | relative_url | bust_file_cache }}" type="text/javascript"></script>
{% endif %}
{% if page.tikzjax %}
<!-- Tikzjax -->
<script defer src="{{ '/assets/js/tikzjax.min.js' | relative_url | bust_file_cache }}" type="text/javascript"></script>
{% endif %}
{% if page.typograms %}
<!-- Typograms -->
<script src="{{ '/assets/js/typograms.js' | relative_url | bust_file_cache }}"></script>
{% endif %}
{% if site.enable_tooltips %}
<!-- Tooltips -->
<script src="{{ '/assets/js/tooltips-setup.js' | relative_url | bust_file_cache }}"></script>
{% endif %}
{% if site.enable_medium_zoom %}
<!-- Medium Zoom JS -->
<script
defer
src="{{ site.third_party_libraries.medium_zoom.url.js }}"
integrity="{{ site.third_party_libraries.medium_zoom.integrity.js }}"
crossorigin="anonymous"
></script>
<script defer src="{{ '/assets/js/zoom.js' | relative_url | bust_file_cache }}"></script>
{% endif %}
{% if page.toc and page.toc.sidebar %}
<!-- Sidebar Table of Contents -->
<script defer src="{{ '/assets/js/bootstrap-toc.min.js' | relative_url | bust_file_cache }}"></script>
{% endif %}
{% if page.pretty_table %}
<!-- Bootstrap Table -->
<!-- Bootstrap Table doesn't go well with diff2html -->
<script
defer
src="{{ site.third_party_libraries.bootstrap-table.url.js }}"
integrity="{{ site.third_party_libraries.bootstrap-table.integrity.js }}"
crossorigin="anonymous"
></script>
{% endif %}
<!-- Load Common JS -->
<script src="{{ '/assets/js/no_defer.js' | relative_url | bust_file_cache }}"></script>
<script defer src="{{ '/assets/js/common.js' | relative_url | bust_file_cache }}"></script>
<script defer src="{{ '/assets/js/copy_code.js' | relative_url | bust_file_cache }}" type="text/javascript"></script>
<!-- Jupyter Open External Links New Tab -->
<script defer src="{{ '/assets/js/jupyter_new_tab.js' | relative_url | bust_file_cache }}"></script>
<!-- Removed Badges -->
{% if site.enable_math %}
<!-- MathJax -->
<script
defer
type="text/javascript"
id="MathJax-script"
src="{{ site.third_party_libraries.mathjax.url.js }}"
integrity="{{ site.third_party_libraries.mathjax.integrity.js }}"
crossorigin="anonymous"
></script>
<script src="{{ '/assets/js/mathjax-setup.js' | relative_url | bust_file_cache }}"></script>
<script
defer
src="{{ site.third_party_libraries.polyfill.url.js }}"
crossorigin="anonymous"
></script>
<!-- Removed Pseudocode -->
{% endif %}
{% if site.enable_cookie_consent %}
<!-- Cookie Consent -->
<script
defer
src="{{ site.third_party_libraries.vanilla-cookieconsent.url.js }}"
integrity="{{ site.third_party_libraries.vanilla-cookieconsent.integrity.js }}"
crossorigin="anonymous"
></script>
<script defer src="{{ '/assets/js/cookie-consent-setup.js' | relative_url }}"></script>
{% endif %}
{% if site.enable_google_analytics %}
<!-- Analytics -->
<!-- Global site tag (gtag.js) - Google Analytics -->
<script
{% if site.enable_cookie_consent %}
type="text/plain" data-category="analytics"
{% endif %}
async
src="https://www.googletagmanager.com/gtag/js?id={{ site.google_analytics }}"
></script>
<script
{% if site.enable_cookie_consent %}
type="text/plain" data-category="analytics"
{% endif %}
defer
src="{{ '/assets/js/google-analytics-setup.js' | relative_url }}"
></script>
{% endif %}
{% if site.enable_cronitor_analytics %}
<!-- Cronitor RUM -->
<script
{% if site.enable_cookie_consent %}
type="text/plain" data-category="analytics"
{% endif %}
async
src="https://rum.cronitor.io/script.js"
></script>
<script
{% if site.enable_cookie_consent %}
type="text/plain" data-category="analytics"
{% endif %}
defer
src="{{ '/assets/js/cronitor-analytics-setup.js' | relative_url }}"
></script>
{% endif %}
{% if site.enable_pirsch_analytics %}
<script
{% if site.enable_cookie_consent %}
type="text/plain" data-category="analytics"
{% endif %}
defer
src="https://api.pirsch.io/pa.js"
id="pianjs"
data-code="{{ site.pirsch_analytics }}"
></script>
{% endif %}
{% if site.enable_openpanel_analytics %}
<script
{% if site.enable_cookie_consent %}
type="text/plain" data-category="analytics"
{% endif %}
defer
src="{{ '/assets/js/open-panel-analytics-setup.js' | relative_url }}"
></script>
<script
{% if site.enable_cookie_consent %}
type="text/plain" data-category="analytics"
{% endif %}
async
defer
src="https://openpanel.dev/op1.js"
></script>
{% endif %}
{% if site.enable_progressbar %}
<!-- Scrolling Progress Bar -->
<script defer src="{{ '/assets/js/progress-bar.js' | relative_url | bust_file_cache }}" type="text/javascript"></script>
{% endif %}
{% if page.images %}
<!-- Image Layouts -->
{% if page.images.compare %}
<script
defer
src="{{ site.third_party_libraries.img-comparison-slider.url.js }}"
integrity="{{ site.third_party_libraries.img-comparison-slider.integrity.js }}"
crossorigin="anonymous"
></script>
{% endif %}
{% if page.images.lightbox2 %}
<script
defer
src="{{ site.third_party_libraries.lightbox2.url.js }}"
integrity="{{ site.third_party_libraries.lightbox2.integrity.js }}"
crossorigin="anonymous"
></script>
{% endif %}
{% if page.images.photoswipe %}
<script defer src="{{ '/assets/js/photoswipe-setup.js' | relative_url }}" type="module"></script>
{% endif %}
{% if page.images.slider %}
<script
defer
src="{{ site.third_party_libraries.swiper.url.js }}"
integrity="{{ site.third_party_libraries.swiper.integrity.js }}"
crossorigin="anonymous"
></script>
{% endif %}
{% if page.images.spotlight %}
<script
defer
src="{{ site.third_party_libraries.spotlight.url.js }}"
crossorigin="anonymous"
></script>
{% endif %}
{% if page.images.venobox %}
<script
defer
src="{{ site.third_party_libraries.venobox.url.js }}"
integrity="{{ site.third_party_libraries.venobox.integrity.js }}"
crossorigin="anonymous"
></script>
<script defer src="{{ '/assets/js/venobox-setup.js' | relative_url | bust_file_cache }}" type="text/javascript"></script>
{% endif %}
{% endif %}
{% if page.tabs %}
<!-- Jekyll Tabs -->
<script src="{{ '/assets/js/tabs.min.js' | relative_url | bust_file_cache }}"></script>
{% endif %}
{% if site.back_to_top %}
<!-- Back to Top -->
<script src="{{ '/assets/js/vanilla-back-to-top.min.js' | relative_url | bust_file_cache }}"></script>
<script>
addBackToTop();
</script>
{% endif %}
{% if site.search_enabled %}
<!-- Search -->
<script type="module" src="{{ '/assets/js/search/ninja-keys.min.js' | relative_url | bust_file_cache }}"></script>
<ninja-keys hideBreadcrumbs noAutoLoadMdIcons placeholder="Type to start searching"></ninja-keys>
<script src="{{ '/assets/js/search-setup.js' | relative_url | bust_file_cache }}"></script>
<script src="{{ '/assets/js/search-data.js' | relative_url }}"></script>
<script src="{{ '/assets/js/shortcut-key.js' | relative_url | bust_file_cache }}"></script>
{% endif %}

86
_includes/figure.liquid Normal file
View File

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

View File

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

30
_includes/footer.liquid Normal file
View File

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

View File

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

25
_includes/giscus.liquid Normal file
View File

@ -0,0 +1,25 @@
<div
id="giscus_thread"
{% if page.layout == 'post' %}
style="max-width: {{ site.max_width }}; margin: 0 auto;"
{% endif %}
>
{% if page.layout == 'post' %}
<br>
{% endif %}
{% if site.giscus.repo %}
<script defer src="{{ '/assets/js/giscus-setup.js' | relative_url }}"></script>
<noscript>
Please enable JavaScript to view the
<a href="http://giscus.app/?ref_noscript">comments powered by giscus.</a>
</noscript>
{% else %}
{% capture giscus_warning %}
> ##### giscus comments misconfigured
> Please follow instructions at [http://giscus.app](http://giscus.app) and update your giscus configuration.
{: .block-danger }
{% endcapture %}
{{ giscus_warning | markdownify }}
{% endif %}
</div>

View File

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

208
_includes/head.liquid Normal file
View File

@ -0,0 +1,208 @@
<!-- Metadata, OpenGraph and Schema.org -->
{% include metadata.liquid %}
<!-- Security: Content Security Policy -->
<!-- Permissive CSP suitable for academic websites. Allows external images, videos, and common embed services. -->
<!-- To customize for your needs, see: https://developer.mozilla.org/en-US/docs/Web/HTTP/CSP -->
<meta
http-equiv="Content-Security-Policy"
content="default-src 'self'; script-src 'self' 'unsafe-inline' https:; style-src 'self' 'unsafe-inline' https:; img-src 'self' data: https:; font-src 'self' data: https:; media-src 'self' https:; frame-src 'self' https:; connect-src 'self' https:;"
>
<!-- Bootstrap & MDB -->
<link rel="stylesheet" href="{{ '/assets/css/bootstrap.min.css' | relative_url | bust_file_cache }}">
<link
rel="stylesheet"
href="{{ site.third_party_libraries.mdb.url.css }}"
integrity="{{ site.third_party_libraries.mdb.integrity.css }}"
crossorigin="anonymous"
>
{% if page.pretty_table %}
<!-- Bootstrap Table -->
<link
defer
rel="stylesheet"
href="{{ site.third_party_libraries.bootstrap-table.url.css }}"
integrity="{{ site.third_party_libraries.bootstrap-table.integrity.css }}"
crossorigin="anonymous"
>
{% endif %}
<!-- Fonts & Icons -->
<link defer rel="stylesheet" href="{{ '/assets/css/academicons.min.css' | relative_url | bust_file_cache }}">
<link defer rel="stylesheet" href="{{ '/assets/css/scholar-icons.css' | relative_url | bust_file_cache }}">
<link
defer
rel="stylesheet"
type="text/css"
href="{{ site.third_party_libraries.google_fonts.url.fonts }}"
>
<!-- Code Syntax Highlighting -->
<link
defer
rel="stylesheet"
href="{{ '/assets/css/jekyll-pygments-themes-github.css' | relative_url | bust_file_cache }}"
media=""
id="highlight_theme_light"
>
{% if page.toc and page.toc.sidebar %}
<!-- Sidebar Table of Contents -->
<link defer href="{{ '/assets/css/bootstrap-toc.min.css' | relative_url | bust_file_cache }}" rel="stylesheet">
{% endif %}
<!-- Styles -->
{% if page.pseudocode %}
<!-- pseudocode -->
<link
defer
rel="stylesheet"
href="{{ site.third_party_libraries.pseudocode.url.css }}"
integrity="{{ site.third_party_libraries.pseudocode.integrity.css }}"
crossorigin="anonymous"
>
{% endif %}
{% if site.icon.size <= 4 %}
<link
rel="shortcut icon"
href="data:image/svg+xml,<svg xmlns=%22http://www.w3.org/2000/svg%22 viewBox=%220 0 100 100%22><text y=%22.9em%22 font-size=%2290%22>{{ site.icon }}</text></svg>"
>
{% elsif site.icon != blank %}
<link rel="shortcut icon" href="{{ site.icon | prepend: '/assets/img/' | relative_url | bust_file_cache}}">
{% endif %}
<link rel="stylesheet" href="{{ '/assets/css/main.css' | relative_url | bust_css_cache }}">
<link rel="canonical" href="{{ page.url | replace:'index.html','' | absolute_url }}">
{% if site.enable_darkmode %}
<!-- Dark Mode -->
<script src="{{ '/assets/js/theme.js' | relative_url | bust_file_cache }}"></script>
<link
defer
rel="stylesheet"
href="{{ '/assets/css/jekyll-pygments-themes-native.css' | relative_url | bust_file_cache }}"
media="none"
id="highlight_theme_dark"
>
<script>
initTheme();
</script>
{% endif %}
{% if page.map %}
<!-- GeoJSON support via Leaflet -->
<link
defer
rel="stylesheet"
href="{{ site.third_party_libraries.leaflet.url.css }}"
integrity="{{ site.third_party_libraries.leaflet.integrity.css }}"
crossorigin="anonymous"
>
{% endif %}
{% if page.code_diff %}
<!-- diff2html -->
<link
defer
rel="stylesheet"
href="{{ site.third_party_libraries.highlightjs.url.css.light }}"
integrity="{{ site.third_party_libraries.highlightjs.integrity.css.light }}"
crossorigin="anonymous"
media="screen and (prefers-color-scheme: light)"
>
<link
defer
rel="stylesheet"
href="{{ site.third_party_libraries.highlightjs.url.css.dark }}"
integrity="{{ site.third_party_libraries.highlightjs.integrity.css.dark }}"
crossorigin="anonymous"
media="screen and (prefers-color-scheme: dark)"
>
<link
defer
rel="stylesheet"
href="{{ site.third_party_libraries.diff2html.url.css }}"
integrity="{{ site.third_party_libraries.diff2html.integrity.css }}"
crossorigin="anonymous"
>
{% endif %}
{% if page.images %}
{% if page.images.compare %}
<!-- Image comparison slider -->
<link
defer
rel="stylesheet"
href="{{ site.third_party_libraries.img-comparison-slider.url.css }}"
integrity="{{ site.third_party_libraries.img-comparison-slider.integrity.css }}"
crossorigin="anonymous"
>
{% endif %}
{% if page.images.lightbox2 %}
<!-- Lightbox2 -->
<link
defer
rel="stylesheet"
href="{{ site.third_party_libraries.lightbox2.url.css }}"
integrity="{{ site.third_party_libraries.lightbox2.integrity.css }}"
crossorigin="anonymous"
>
{% endif %}
{% if page.images.photoswipe %}
<!-- Photoswipe -->
<link
defer
rel="stylesheet"
href="{{ site.third_party_libraries.photoswipe.url.css }}"
crossorigin="anonymous"
>
{% endif %}
{% if page.images.slider %}
<!-- Image slider -->
<link
defer
rel="stylesheet"
href="{{ site.third_party_libraries.swiper.url.css }}"
integrity="{{ site.third_party_libraries.swiper.integrity.css }}"
crossorigin="anonymous"
>
{% endif %}
{% if page.images.spotlight %}
<!-- Spotlight -->
<link
defer
rel="stylesheet"
href="{{ site.third_party_libraries.spotlight.url.css }}"
integrity="{{ site.third_party_libraries.spotlight.integrity.css }}"
crossorigin="anonymous"
>
{% endif %}
{% if page.images.venobox %}
<!-- Venobox -->
<link
defer
rel="stylesheet"
href="{{ site.third_party_libraries.venobox.url.css }}"
integrity="{{ site.third_party_libraries.venobox.integrity.css }}"
crossorigin="anonymous"
>
{% endif %}
{% endif %}
{% if page.tikzjax %}
<link defer rel="stylesheet" type="text/css" href="{{ '/assets/css/tikzjax.min.css' | relative_url | bust_file_cache }}">
{% endif %}
{% if site.enable_cookie_consent %}
<!-- Cookie Consent -->
<link
defer
rel="stylesheet"
href="{{ site.third_party_libraries.vanilla-cookieconsent.url.css }}"
integrity="{{ site.third_party_libraries.vanilla-cookieconsent.integrity.css }}"
crossorigin="anonymous"
>
{% endif %}

View File

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

150
_includes/header.liquid Normal file
View File

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

View File

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

View File

@ -1,200 +0,0 @@
{% if site.enable_google_verification or site.enable_bing_verification %}
<!-- Website verification -->
{% if site.enable_google_verification -%}
<meta name="google-site-verification" content="{{ site.google_site_verification }}" />
{%- endif -%}
{% if site.enable_bing_verification -%}
<meta name="msvalidate.01" content="{{ site.bing_site_verification }}" />
{%- endif -%}
{%- endif %}
<!-- Standard metadata -->
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<title>
{%- if site.title == "blank" -%}
{%- capture title -%}{{ site.first_name }} {{ site.middle_name }} {{ site.last_name }}{%- endcapture -%}
{%- else -%}
{%- capture title -%}{{ site.title }}{%- endcapture -%}
{%- endif -%}
{% if page.url == '/blog/index.html' %}
{{ 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 -%}
</title>
<meta name="author" content="{{ site.first_name }} {{ site.middle_name }} {{ site.last_name }}" />
<meta name="description" content="{%- if page.description -%}{{ page.description }}{%- else -%}{{ site.description }}{%- endif -%}" />
{%- if page.keywords or site.keywords %}
<meta name="keywords" content="{%- if page.keywords -%}{{ page.keywords }}{%- else -%}{{ site.keywords }}{%- endif -%}" />
{%- endif %}
{%- if site.serve_og_meta %}
<!-- OpenGraph -->
<meta property="og:site_name" content="{{ title }}" />
<meta property="og:type" content="website" />
<meta property="og:title" content="{%- if page.title -%}{{ title }} | {{ page.title }}{%- else -%}{{ title }}{%- endif -%}" />
<meta property="og:url" content="{{ page.url | prepend: site.baseurl | prepend: site.url | remove_first: 'index.html' }}" />
<meta property="og:description" content="{%- if page.description -%}{{ page.description }}{%- else -%}{{ site.description }}{%- endif -%}" />
{% if page.og_image or site.og_image -%}
<meta property="og:image" content="{%- if page.og_image -%}{{ page.og_image }}{%- else -%}{{ site.og_image }}{%- endif -%}" />
{%- endif %}
<meta property="og:locale" content="{{ site.lang }}" />
<!-- Twitter card -->
<meta name="twitter:card" content="summary" />
<meta name="twitter:title" content="{%- if page.title -%}{{ page.title }}{%- else -%}{{ title }}{%- endif -%}" />
<meta name="twitter:description" content="{%- if page.description -%}{{ page.description }}{%- else -%}{{ site.description }}{%- endif -%}" />
{% if page.og_image or site.og_image -%}
<meta name="twitter:image" content="{%- if page.og_image -%}{{ page.og_image }}{%- else -%}{{ site.og_image }}{%- endif -%}" />
{%- endif %}
{% if site.twitter_username -%}
<meta name="twitter:site" content="@{{ site.twitter_username }}" />
<meta name="twitter:creator" content="@{{ site.twitter_username }}" />
{%- endif %}
{%- endif %}
{%- if site.serve_schema_org %}
<!-- Schema.org -->
{%- comment -%} Social links generator for "sameAs schema" {%- endcomment %}
{% assign sameaslinks = "" | split: "," %}
{%- if site.orcid_id -%}
{%- capture link -%}https://orcid.org/{{ site.orcid_id }}{%- endcapture -%}
{%- assign sameaslinks = sameaslinks | push: link -%}
{%- endif -%}
{%- if site.scholar_userid -%}
{%- capture link -%}https://scholar.google.com/citations?user={{ site.scholar_userid }}{%- endcapture -%}
{%- assign sameaslinks = sameaslinks | push: link -%}
{%- endif -%}
{%- if site.semanticscholar_id -%}
{%- capture link -%}https://www.semanticscholar.org/author/{{ site.semanticscholar_id }}{%- endcapture -%}
{%- assign sameaslinks = sameaslinks | push: link -%}
{%- endif -%}
{%- if site.publons_id -%}
{%- capture link -%}https://publons.com/a/{{ site.publons_id }}/{%- endcapture -%}
{%- assign sameaslinks = sameaslinks | push: link -%}
{%- endif -%}
{%- if site.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 -%}
<script type="application/ld+json">
{
"author":
{
"@type": "Person",
"name": "{{ site.first_name }} {{ site.middle_name }} {{ site.last_name }}"
},
"url": "{{ page.url | prepend: site.baseurl | prepend: site.url }}",
"@type": "WebSite",
"description": "{%- if page.description -%}{{ page.description }}{%- else if site.description -%}{{ site.description }}{%- endif -%}",
"headline": "{%- if page.title -%}{{ page.title }}{%- else -%}{{ site.title }}{%- endif -%}",
{% if sameaslinks != blank -%}
"sameAs": {{ sameaslinks }},
{%- endif %}
"name": "{{ site.first_name }} {{ site.middle_name }} {{ site.last_name }}",
"@context": "https://schema.org"
}
</script>
{%- endif %}

247
_includes/metadata.liquid Normal file
View File

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

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