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

**Settings Modal**

> [!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>
673 lines
26 KiB
YAML
673 lines
26 KiB
YAML
# -----------------------------------------------------------------------------
|
|
# Site settings
|
|
# -----------------------------------------------------------------------------
|
|
|
|
title: blank # the website title (if blank, full name will be used instead)
|
|
first_name: You
|
|
middle_name: R.
|
|
last_name: Name
|
|
contact_note: >
|
|
You can even add a little note about which of these is the best way to reach you.
|
|
description: > # the ">" symbol means to ignore newlines until "footer_text:"
|
|
A simple, whitespace theme for academics. Based on [*folio](https://github.com/bogoli/-folio) design.
|
|
footer_text: >
|
|
Powered by <a href="https://jekyllrb.com/" target="_blank">Jekyll</a> with <a href="https://github.com/alshedivat/al-folio">al-folio</a> theme.
|
|
Hosted by <a href="https://pages.github.com/" target="_blank">GitHub Pages</a>.
|
|
Photos from <a href="https://unsplash.com" target="_blank">Unsplash</a>.
|
|
keywords: jekyll, jekyll-theme, academic-website, portfolio-website # add your own keywords or leave empty
|
|
lang: en # the language of your site (for example: en, fr, cn, ru, etc.)
|
|
icon: ⚛️ # the emoji used as the favicon (alternatively, provide image name in /assets/img/)
|
|
|
|
url: https://alshedivat.github.io # the base hostname & protocol for your site
|
|
baseurl: /al-folio # the subpath of your site, e.g. /blog/. Leave blank for root
|
|
last_updated: false # set to true if you want to display last updated in the footer
|
|
impressum_path: # set to path to include impressum link in the footer, use the same path as permalink in a page, helps to conform with EU GDPR
|
|
back_to_top: true # set to false to disable the back to top button
|
|
|
|
# -----------------------------------------------------------------------------
|
|
# Theme
|
|
# -----------------------------------------------------------------------------
|
|
|
|
# repo color theme
|
|
repo_theme_light: default # https://github.com/anuraghazra/github-readme-stats/blob/master/themes/README.md
|
|
repo_theme_dark: dark # https://github.com/anuraghazra/github-readme-stats/blob/master/themes/README.md
|
|
repo_trophies:
|
|
enabled: true
|
|
theme_light: flat # https://github.com/ryo-ma/github-profile-trophy
|
|
theme_dark: gitdimmed # https://github.com/ryo-ma/github-profile-trophy
|
|
|
|
# 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
|
|
# -----------------------------------------------------------------------------
|
|
# will use title and url fields
|
|
# Take a look to https://github.com/jekyll/jekyll-feed for more customization
|
|
|
|
# -----------------------------------------------------------------------------
|
|
# Layout
|
|
# -----------------------------------------------------------------------------
|
|
|
|
navbar_fixed: true
|
|
footer_fixed: true
|
|
search_enabled: true
|
|
socials_in_search: true
|
|
posts_in_search: true
|
|
bib_search: true
|
|
|
|
# Dimensions
|
|
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
|
|
|
|
# -----------------------------------------------------------------------------
|
|
# Analytics and search engine verification
|
|
# -----------------------------------------------------------------------------
|
|
|
|
# For Google Analytics, see https://support.google.com/analytics/answer/10447272?hl=en&ref_topic=14088998&sjid=5129943941510317771-SA#zippy=%2Cgoogle-sites
|
|
# and follow the instructions for Google Sites. You will need to create a Google Analytics property and copy the Google tag ID.
|
|
google_analytics: # your Google Analytics measurement ID (format: G-XXXXXXXXXX)
|
|
cronitor_analytics: # cronitor RUM analytics site ID (format: XXXXXXXXX)
|
|
pirsch_analytics: # your Pirsch analytics site ID (length 32 characters)
|
|
openpanel_analytics: # your Openpanel analytics client ID (format: XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX)
|
|
|
|
# For Google Search Console, see https://support.google.com/webmasters/answer/9008080?hl=en#meta_tag_verification&zippy=%2Chtml-tag
|
|
google_site_verification: # your google-site-verification ID (Google Search Console)
|
|
bing_site_verification: # out your bing-site-verification ID (Bing Webmaster)
|
|
|
|
# -----------------------------------------------------------------------------
|
|
# Blog
|
|
# -----------------------------------------------------------------------------
|
|
|
|
blog_name: al-folio # blog_name will be displayed in your blog page
|
|
blog_description: a simple whitespace theme for academics
|
|
permalink: /blog/:year/:title/
|
|
lsi: false # produce an index for related posts
|
|
|
|
# Pagination
|
|
pagination:
|
|
enabled: true
|
|
|
|
related_blog_posts:
|
|
enabled: true
|
|
max_related: 5
|
|
|
|
# Giscus comments (RECOMMENDED)
|
|
# Follow instructions on https://giscus.app/ to setup for your repo to fill out the information below.
|
|
giscus:
|
|
repo: # <your-github-user-name>/<your-github-repo-name>
|
|
repo_id: # leave empty or specify your repo_id (see https://giscus.app/)
|
|
category: Comments # name of the category under which discussions will be created
|
|
category_id: # leave empty or specify your category_id (see https://giscus.app/)
|
|
mapping: title # identify discussions by post title
|
|
strict: 1 # use strict identification mode
|
|
reactions_enabled: 1 # enable (1) or disable (0) emoji reactions
|
|
input_position: bottom # whether to display input form below (bottom) or above (top) the comments
|
|
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
|
|
|
|
# Disqus comments (DEPRECATED)
|
|
disqus_shortname: al-folio # put your disqus shortname
|
|
# https://help.disqus.com/en/articles/1717111-what-s-a-shortname
|
|
|
|
# External sources.
|
|
# If you have blog posts published on medium.com or other external sources,
|
|
# you can display them in your blog by adding a link to the RSS feed.
|
|
# 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
|
|
projects:
|
|
output: true
|
|
teachings:
|
|
output: true
|
|
|
|
# -----------------------------------------------------------------------------
|
|
# Jekyll settings
|
|
# -----------------------------------------------------------------------------
|
|
|
|
# Markdown and syntax highlight
|
|
markdown: kramdown
|
|
highlighter: rouge
|
|
kramdown:
|
|
input: GFM
|
|
syntax_highlighter_opts:
|
|
css_class: "highlight"
|
|
span:
|
|
line_numbers: false
|
|
block:
|
|
line_numbers: false
|
|
start_line: 1
|
|
|
|
# Includes & excludes
|
|
include: ["_pages", "_scripts"]
|
|
exclude:
|
|
- bin/
|
|
- CONTRIBUTING.md
|
|
- CUSTOMIZE.md
|
|
- Dockerfile
|
|
- docker-compose.yml
|
|
- docker-compose-slim.yml
|
|
- FAQ.md
|
|
- Gemfile
|
|
- Gemfile.lock
|
|
- INSTALL.md
|
|
- LICENSE
|
|
- lighthouse_results/
|
|
- package.json
|
|
- package-lock.json
|
|
- _pages/about_einstein.md
|
|
- purgecss.config.js
|
|
- README.md
|
|
- readme_preview/
|
|
- vendor
|
|
keep_files:
|
|
- CNAME
|
|
- .nojekyll
|
|
|
|
# Plug-ins
|
|
plugins:
|
|
- jekyll-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-socials
|
|
- jekyll-tabs
|
|
- jekyll-terser
|
|
- jekyll-toc
|
|
- jekyll-twitter-plugin
|
|
- jemoji
|
|
|
|
# Sitemap settings
|
|
defaults:
|
|
- scope:
|
|
path: "assets"
|
|
values:
|
|
sitemap: false
|
|
|
|
sass:
|
|
style: compressed
|
|
|
|
# -----------------------------------------------------------------------------
|
|
# Jekyll Minifier
|
|
# -----------------------------------------------------------------------------
|
|
|
|
jekyll-minifier:
|
|
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:
|
|
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", "blockquotes"] # these tags will be displayed on the front page of your blog
|
|
display_categories: ["external-services"] # these categories will be displayed on the front page of your blog
|
|
|
|
# -----------------------------------------------------------------------------
|
|
# Jekyll Scholar
|
|
# -----------------------------------------------------------------------------
|
|
|
|
scholar:
|
|
last_name: [Einstein]
|
|
first_name: [Albert, A.]
|
|
|
|
style: apa
|
|
locale: en
|
|
|
|
source: /_bibliography/
|
|
bibliography: papers.bib
|
|
bibliography_template: bib
|
|
# Note: if you have latex math in your bibtex, the latex filter
|
|
# preprocessing may conflict with MathJAX if the latter is enabled.
|
|
# See https://github.com/alshedivat/al-folio/issues/357.
|
|
bibtex_filters: [latex, smallcaps, superscript]
|
|
|
|
replace_strings: true
|
|
join_strings: true
|
|
|
|
details_dir: bibliography
|
|
details_link: Details
|
|
|
|
query: "@*"
|
|
group_by: year
|
|
group_order: descending
|
|
|
|
# Display different badges withs stats for your publications
|
|
# Customize badge behavior in _layouts/bib.liquid
|
|
enable_publication_badges:
|
|
altmetric: true # Altmetric badge (Customization options: https://badge-docs.altmetric.com/index.html)
|
|
dimensions: true # Dimensions badge (Customization options: https://badge.dimensions.ai/)
|
|
google_scholar: true # Google Scholar badge (https://scholar.google.com/intl/en/scholar/citations.html)
|
|
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
|
|
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
|
|
|
|
# Enables publication thumbnails. If disabled, none of the publications will display thumbnails, even if specified in the bib entry.
|
|
enable_publication_thumbnails: true
|
|
|
|
# -----------------------------------------------------------------------------
|
|
# Jekyll Link Attributes
|
|
# -----------------------------------------------------------------------------
|
|
|
|
# These are the defaults
|
|
external_links:
|
|
enabled: true
|
|
rel: external nofollow noopener
|
|
target: _blank
|
|
exclude:
|
|
|
|
# -----------------------------------------------------------------------------
|
|
# Responsive WebP Images
|
|
# -----------------------------------------------------------------------------
|
|
|
|
# MAKE SURE imagemagick is installed and on your PATH before enabling imagemagick. In a terminal, run:
|
|
# convert -version
|
|
imagemagick:
|
|
enabled: true # enables responsive images for your site (recommended, see https://github.com/alshedivat/al-folio/issues/537)
|
|
widths:
|
|
- 480
|
|
- 800
|
|
- 1400
|
|
input_directories:
|
|
- assets/img/
|
|
input_formats:
|
|
- ".jpg"
|
|
- ".jpeg"
|
|
- ".png"
|
|
- ".tiff"
|
|
- ".gif"
|
|
output_formats:
|
|
webp: "-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_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
|
|
# -----------------------------------------------------------------------------
|
|
|
|
# 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
|