jekyll-theme-merida 0.0.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +7 -0
- data/README.md +1 -0
- data/_config.yml +50 -0
- data/_data/menu.yaml +16 -0
- data/_data/repos.yaml +21 -0
- data/_data/social.yaml +10 -0
- data/_includes/footer.html +22 -0
- data/_includes/header.html +18 -0
- data/_includes/latest-news.html +18 -0
- data/_includes/latest-posts.html +9 -0
- data/_includes/navbar.html +67 -0
- data/_includes/post-body.html +5 -0
- data/_includes/search-modal.html +43 -0
- data/_layouts/404.html +28 -0
- data/_layouts/about.html +34 -0
- data/_layouts/base.html +21 -0
- data/_layouts/bib.html +65 -0
- data/_layouts/blog.html +46 -0
- data/_layouts/news.html +35 -0
- data/_layouts/post.html +74 -0
- data/_layouts/projects.html +31 -0
- data/_layouts/publications.html +8 -0
- data/assets/css/app.css +213 -0
- data/assets/css/github-dark.css +116 -0
- data/assets/favicon/android-chrome-192x192.png +0 -0
- data/assets/favicon/android-chrome-512x512.png +0 -0
- data/assets/favicon/apple-touch-icon.png +0 -0
- data/assets/favicon/favicon-16x16.png +0 -0
- data/assets/favicon/favicon-32x32.png +0 -0
- data/assets/favicon/favicon.ico +0 -0
- data/assets/favicon/site.webmanifest +1 -0
- data/assets/img/backgrounds/bg-1.jpg +0 -0
- data/assets/img/profile_pic.jpg +0 -0
- data/assets/scripts/copy-code.js +104 -0
- data/assets/scripts/mathjax-config.js +12 -0
- data/assets/scripts/navbar.js +9 -0
- data/assets/scripts/search.js +99 -0
- data/assets/scripts/table-wrapper.js +15 -0
- data/assets/scripts/without-prose.js +9 -0
- metadata +189 -0
checksums.yaml
ADDED
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
---
|
|
2
|
+
SHA256:
|
|
3
|
+
metadata.gz: 92a28fb315c85e65483cdcdd48f314fae2fe7668cb5a83625ae773b16b8056a6
|
|
4
|
+
data.tar.gz: 7c1398a339af2a92fe187b6f854b7fe6c12a3d66e4a934c1dac6d349c308c02b
|
|
5
|
+
SHA512:
|
|
6
|
+
metadata.gz: ced3d2e886a5633b458bed595de5d8b188c119196580080a45c5416c08935205648f74d02734486d1e7cc9539030a018c06744c44ee6ce807119801c509cc92b
|
|
7
|
+
data.tar.gz: e9677987787e10817dce7e7f317981d81ad6ddb42d87f24c77411fe97230d2efaf7451226939586fc56a0393c968758146d0638dd78c45830d627b255089c19b
|
data/README.md
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
# merida
|
data/_config.yml
ADDED
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
url: "https://example.com" # the base hostname & protocol for your site, e.g. http://example.com
|
|
2
|
+
baseurl: "" # the subpath of your site, e.g. /blog
|
|
3
|
+
title: "Your Name" # the name of your site, e.g. ACME Corp.
|
|
4
|
+
|
|
5
|
+
permalink: /blog/:slug/
|
|
6
|
+
|
|
7
|
+
plugins:
|
|
8
|
+
- jekyll-tailwind
|
|
9
|
+
- jekyll-last-modified-at
|
|
10
|
+
- jekyll-scholar
|
|
11
|
+
- jekyll-feed
|
|
12
|
+
- jekyll-sitemap
|
|
13
|
+
|
|
14
|
+
tailwind:
|
|
15
|
+
input: assets/css/app.css
|
|
16
|
+
minify: true
|
|
17
|
+
|
|
18
|
+
collections:
|
|
19
|
+
pages:
|
|
20
|
+
output: true
|
|
21
|
+
news:
|
|
22
|
+
output: true
|
|
23
|
+
permalink: /news/:slug/
|
|
24
|
+
research:
|
|
25
|
+
output: true
|
|
26
|
+
|
|
27
|
+
markdown: kramdown
|
|
28
|
+
kramdown:
|
|
29
|
+
syntax_highlighter: rouge
|
|
30
|
+
syntax_highlighter_opts:
|
|
31
|
+
css_class: 'highlight'
|
|
32
|
+
span:
|
|
33
|
+
line_numbers: false
|
|
34
|
+
block:
|
|
35
|
+
line_numbers: true
|
|
36
|
+
start_line: 1
|
|
37
|
+
|
|
38
|
+
scholar:
|
|
39
|
+
bibliography: references.bib
|
|
40
|
+
style: apa
|
|
41
|
+
bibliography_template: bib
|
|
42
|
+
bibliography_list_tag: ul
|
|
43
|
+
sort_by: year
|
|
44
|
+
order: descending
|
|
45
|
+
|
|
46
|
+
exclude:
|
|
47
|
+
- README.md
|
|
48
|
+
- DESIGN.md
|
|
49
|
+
- tailwind_enabler.css
|
|
50
|
+
|
data/_data/menu.yaml
ADDED
data/_data/repos.yaml
ADDED
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
items:
|
|
2
|
+
- name: Project Alpha
|
|
3
|
+
description: Linux Kernel by Legendary Linus Torvalds
|
|
4
|
+
date: 2020-05-19
|
|
5
|
+
user_name: torvalds
|
|
6
|
+
repo_name: linux
|
|
7
|
+
host: https://github.com/
|
|
8
|
+
|
|
9
|
+
- name: Project Beta
|
|
10
|
+
description: Python black formatter
|
|
11
|
+
date: 2023-05-07
|
|
12
|
+
user_name: python
|
|
13
|
+
repo_name: black
|
|
14
|
+
host: https://github.com/
|
|
15
|
+
|
|
16
|
+
- name: Project Gamma
|
|
17
|
+
description: The cute numpy
|
|
18
|
+
date: 2024-05-13
|
|
19
|
+
user_name: numpy
|
|
20
|
+
repo_name: numpy
|
|
21
|
+
host: https://github.com/
|
data/_data/social.yaml
ADDED
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
<footer class=" border-border-main border-t-1 bg-gray-200 text-gray-700" data-pagefind-ignore>
|
|
2
|
+
<div class="max-w-theme mx-auto px-1 md:px-4 lg:px-0 py-1 flex flex-col md:flex-row justify-between items-center">
|
|
3
|
+
|
|
4
|
+
<!-- Left side -->
|
|
5
|
+
<p class="text-sm mb-0! sm:text-left text-center">© {{ "now" | date: "%Y" }} <a class="text-primary" href="{{ site.url }}{{ site.baseurl }}" target="_blank">{{ site.title }}</a>. Powered by <a class="text-primary" href="https://jekyllrb.com/" target="_blank">Jekyll</a> with <a class="text-primary" href="https://javadkoushyar.com/merida" target="_blank">Merida</a> theme.</p>
|
|
6
|
+
|
|
7
|
+
<!-- Right side / links -->
|
|
8
|
+
<div class="flex space-x-4 mt-4 md:mt-0 font-medium! text-sm">
|
|
9
|
+
<a class="hover:text-blue-500 transition-colors" href="/">About</a>
|
|
10
|
+
<!-- Social links from _data/social.yml -->
|
|
11
|
+
{% for social in site.data.social.items %}
|
|
12
|
+
<a class="hover:text-blue-500 transition-colors"
|
|
13
|
+
href="{{ social.url }}"
|
|
14
|
+
rel="noopener noreferrer"
|
|
15
|
+
>
|
|
16
|
+
{{ social.name }}
|
|
17
|
+
</a>
|
|
18
|
+
{% endfor %}
|
|
19
|
+
</div>
|
|
20
|
+
|
|
21
|
+
</div>
|
|
22
|
+
</footer>
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
<!-- Stuff that will be places in the head element of the base layout. -->
|
|
2
|
+
|
|
3
|
+
<!-- MathJax -->
|
|
4
|
+
<script src="/assets/scripts/mathjax-config.js"></script>
|
|
5
|
+
<script async id="MathJax-script" src="https://cdn.jsdelivr.net/npm/mathjax@4/tex-mml-chtml.js"></script>
|
|
6
|
+
<!-- Favicons -->
|
|
7
|
+
<link rel="apple-touch-icon" sizes="180x180" href="/assets/favicon/apple-touch-icon.png">
|
|
8
|
+
<link rel="icon" type="image/png" sizes="32x32" href="/assets/favicon/favicon-32x32.png">
|
|
9
|
+
<link rel="icon" type="image/png" sizes="16x16" href="/assets/favicon/favicon-16x16.png">
|
|
10
|
+
<link rel="manifest" href="/assets/favicon/site.webmanifest">
|
|
11
|
+
<!-- Code Syntax Highlighting -->
|
|
12
|
+
<link
|
|
13
|
+
href="{{ '/assets/css/github-dark.css' | relative_url | bust_file_cache }}"
|
|
14
|
+
rel="stylesheet"
|
|
15
|
+
>
|
|
16
|
+
<!-- Merida Theme -->
|
|
17
|
+
<link rel="stylesheet" href="{{ "/assets/css/app.css" | relative_url }}">
|
|
18
|
+
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
<!-- Displays the latest news as a list -->
|
|
2
|
+
<ul class="prose pl-0 sm:pl-6 space-y-4">
|
|
3
|
+
{% assign sorted_news = site.news | sort: "date" | reverse %}
|
|
4
|
+
{% for news in sorted_news limit:5 %}
|
|
5
|
+
<li class="flex flex-row gap-4 sm:gap-6">
|
|
6
|
+
<time class="font-bold min-w-32">{{ news.date | date: "%b %d, %Y" }}</time>
|
|
7
|
+
<!-- Title always plain text -->
|
|
8
|
+
<p class="not-prose mb-0! truncate">
|
|
9
|
+
{{ news.description }}
|
|
10
|
+
|
|
11
|
+
<!-- Only add [more] if news has content -->
|
|
12
|
+
{% if news.content and news.content != "" %}
|
|
13
|
+
<a class="ml-1 text-blue-600 hover:underline" href="{{ news.url }}">[more]</a>
|
|
14
|
+
{% endif %}
|
|
15
|
+
</p>
|
|
16
|
+
</li>
|
|
17
|
+
{% endfor %}
|
|
18
|
+
</ul>
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
<!-- Displays the latest posts as a list -->
|
|
2
|
+
<ul class="prose pl-0 sm:pl-6 space-y-4">
|
|
3
|
+
{% for post in site.posts limit:5 %}
|
|
4
|
+
<li class="flex flex-row gap-4 sm:gap-6">
|
|
5
|
+
<time class="font-bold min-w-32">{{ post.date | date: "%b %d, %Y" }}</time>
|
|
6
|
+
<a class="wrap-break-word" href="{{ post.url }}">{{ post.title | truncate: 100, "..." }}</a>
|
|
7
|
+
</li>
|
|
8
|
+
{% endfor %}
|
|
9
|
+
</ul>
|
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
{% unless page.nav_exclude %}
|
|
2
|
+
<nav class="sticky top-0 z-50 bg-gray-800 border-b border-blue-100" data-pagefind-ignore>
|
|
3
|
+
<div class="px-6 xl:px-0 max-w-theme mx-auto">
|
|
4
|
+
|
|
5
|
+
<div class="flex items-center justify-between py-2">
|
|
6
|
+
|
|
7
|
+
<!-- Hamburger Button -->
|
|
8
|
+
<button class="hover:cursor-pointer md:hidden rounded text-4xl" id="menu-btn">
|
|
9
|
+
<svg class="size-10 stroke-blue-300" fill="none" stroke="currentColor" stroke-width="1.5" viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg">
|
|
10
|
+
<path d="M3.75 6.75h16.5M3.75 12h16.5m-16.5 5.25h16.5" stroke-linecap="round" stroke-linejoin="round" />
|
|
11
|
+
</svg>
|
|
12
|
+
</button>
|
|
13
|
+
|
|
14
|
+
<!-- Desktop Menu -->
|
|
15
|
+
<ul class="hidden md:flex items-center space-x-6">
|
|
16
|
+
{% for item in site.data.menu.items %}
|
|
17
|
+
<li>
|
|
18
|
+
<a class="p-2 rounded text-white hover:text-blue-300 {% if item.url == page.url %}bg-blue-500 hover:text-white {% endif %}"
|
|
19
|
+
href="{{ item.url }}">
|
|
20
|
+
{{ item.title }}
|
|
21
|
+
</a>
|
|
22
|
+
</li>
|
|
23
|
+
{% endfor %}
|
|
24
|
+
|
|
25
|
+
<!-- Search Icon -->
|
|
26
|
+
<li>
|
|
27
|
+
<button class="search-open flex items-center gap-2 p-2 rounded text-white hover:text-blue-300 hover:cursor-pointer">
|
|
28
|
+
<svg class="size-4" fill="none" stroke="currentColor" stroke-width="1.5" viewBox="0 0 24 24">
|
|
29
|
+
<path d="m21 21-5.197-5.197m0 0A7.5 7.5 0 1 0 5.196 5.196a7.5 7.5 0 0 0 10.607 10.607Z" stroke-linecap="round" stroke-linejoin="round"/>
|
|
30
|
+
</svg>
|
|
31
|
+
Search
|
|
32
|
+
</button>
|
|
33
|
+
</li>
|
|
34
|
+
</ul>
|
|
35
|
+
|
|
36
|
+
|
|
37
|
+
</div>
|
|
38
|
+
|
|
39
|
+
<!-- Mobile Menu -->
|
|
40
|
+
<ul class="hidden flex-col space-y-2 pb-4 md:hidden" id="mobile-menu">
|
|
41
|
+
{% for item in site.data.menu.items %}
|
|
42
|
+
<li>
|
|
43
|
+
<a class="block p-2 rounded text-white hover:text-blue-300 {% if item.url == page.url %}bg-blue-500 hover:text-white {% endif %}"
|
|
44
|
+
href="{{ item.url }}">
|
|
45
|
+
{{ item.title }}
|
|
46
|
+
</a>
|
|
47
|
+
</li>
|
|
48
|
+
{% endfor %}
|
|
49
|
+
|
|
50
|
+
<!-- Search -->
|
|
51
|
+
<li>
|
|
52
|
+
<button class="text-white search-open flex items-center gap-2 p-2 rounded text-black hover:text-blue-500 hover:cursor-pointer">
|
|
53
|
+
<svg class=" size-4" fill="none" stroke="currentColor" stroke-width="1.5" viewBox="0 0 24 24">
|
|
54
|
+
<path d="m21 21-5.197-5.197m0 0A7.5 7.5 0 1 0 5.196 5.196a7.5 7.5 0 0 0 10.607 10.607Z" stroke-linecap="round" stroke-linejoin="round"/>
|
|
55
|
+
</svg>
|
|
56
|
+
Search
|
|
57
|
+
</button>
|
|
58
|
+
</li>
|
|
59
|
+
</ul>
|
|
60
|
+
|
|
61
|
+
|
|
62
|
+
</div>
|
|
63
|
+
|
|
64
|
+
{% include search-modal.html %}
|
|
65
|
+
|
|
66
|
+
</nav>
|
|
67
|
+
{% endunless %}
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
<script src="/assets/scripts/navbar.js"></script>
|
|
2
|
+
<script src="/assets/scripts/copy-code.js"></script>
|
|
3
|
+
<script src="/assets/scripts/without-prose.js"></script>
|
|
4
|
+
<script src="/assets/scripts/table-wrapper.js"></script>
|
|
5
|
+
<script src="/assets/scripts/search.js"></script>
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
<!-- Search Modal -->
|
|
2
|
+
<div class="fixed inset-0 z-50 hidden bg-black/40 flex items-start justify-center pt-24" id="search-modal">
|
|
3
|
+
|
|
4
|
+
<div class="modal-animate bg-white w-full max-w-2xl mx-4 rounded-lg shadow-lg overflow-hidden">
|
|
5
|
+
|
|
6
|
+
<!-- Search Box -->
|
|
7
|
+
<div class="border-b p-4">
|
|
8
|
+
<div class="relative">
|
|
9
|
+
|
|
10
|
+
<input
|
|
11
|
+
class="w-full outline-none text-lg pr-8"
|
|
12
|
+
id="search-input"
|
|
13
|
+
placeholder="Type to start searching"
|
|
14
|
+
type="text"
|
|
15
|
+
>
|
|
16
|
+
|
|
17
|
+
<button
|
|
18
|
+
class="hover:cursor-pointer absolute right-0 top-1/2 -translate-y-1/2 text-gray-700 hover:text-gray-800 hidden"
|
|
19
|
+
id="search-clear"
|
|
20
|
+
type="button"
|
|
21
|
+
>
|
|
22
|
+
<svg class="size-5"
|
|
23
|
+
fill="none"
|
|
24
|
+
stroke="currentColor"
|
|
25
|
+
stroke-width="1.5"
|
|
26
|
+
viewBox="0 0 24 24"
|
|
27
|
+
xmlns="http://www.w3.org/2000/svg">
|
|
28
|
+
<path d="M6 18 18 6M6 6l12 12" stroke-linecap="round"
|
|
29
|
+
stroke-linejoin="round"/>
|
|
30
|
+
</svg>
|
|
31
|
+
</button>
|
|
32
|
+
|
|
33
|
+
</div>
|
|
34
|
+
</div>
|
|
35
|
+
|
|
36
|
+
<!-- Results -->
|
|
37
|
+
<div class="h-[376px] overflow-y-auto rounded-b-lg">
|
|
38
|
+
<div class="p-4 h-full flex items-center justify-center" id="search-results">
|
|
39
|
+
<p class="text-sm text-gray-500 text-center">Start typing to search...</p>
|
|
40
|
+
</div>
|
|
41
|
+
</div>
|
|
42
|
+
</div>
|
|
43
|
+
</div>
|
data/_layouts/404.html
ADDED
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
---
|
|
2
|
+
layout: base
|
|
3
|
+
---
|
|
4
|
+
|
|
5
|
+
<section class="min-h-[70vh] flex flex-col items-center justify-center px-6 text-center">
|
|
6
|
+
|
|
7
|
+
<!-- Big 404 -->
|
|
8
|
+
<div class="text-7xl sm:text-8xl font-bold tracking-tight mb-4">
|
|
9
|
+
{{ page.title }}
|
|
10
|
+
</div>
|
|
11
|
+
|
|
12
|
+
<!-- Title -->
|
|
13
|
+
<h1 class="text-2xl sm:text-3xl mb-3">
|
|
14
|
+
{{ page.short_message }}
|
|
15
|
+
</h1>
|
|
16
|
+
|
|
17
|
+
<!-- Description -->
|
|
18
|
+
<p class="text-gray-500 mb-8">
|
|
19
|
+
{{ page.long_message }}
|
|
20
|
+
</p>
|
|
21
|
+
|
|
22
|
+
<!-- Button -->
|
|
23
|
+
<a
|
|
24
|
+
href="/">
|
|
25
|
+
Back to home
|
|
26
|
+
</a>
|
|
27
|
+
|
|
28
|
+
</section>
|
data/_layouts/about.html
ADDED
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
---
|
|
2
|
+
layout: base
|
|
3
|
+
---
|
|
4
|
+
<div class="prose max-w-full">
|
|
5
|
+
<h1>{{ site.title }}</h1>
|
|
6
|
+
<div class="flex flex-col md:flex-row flex-wrap xl:gap-16 sm:gap-6 mb-10">
|
|
7
|
+
<div class="prose flex-1">
|
|
8
|
+
{{ content }}
|
|
9
|
+
</div>
|
|
10
|
+
{% if page.profile %}
|
|
11
|
+
<div>
|
|
12
|
+
{% if page.profile.image %}
|
|
13
|
+
{% assign profile_image_path = page.profile.image | prepend: 'assets/img/' %}
|
|
14
|
+
<img alt="{{ page.profile.caption }}" class="mx-auto mb-0 mt-5 rounded shrink-0 w-64 h-auto" src="{{ profile_image_path }}"/>
|
|
15
|
+
{% endif %}
|
|
16
|
+
{% if page.profile.caption %}
|
|
17
|
+
<p class="text-xs! mt-2 text-center text-gray-500">{{ page.profile.caption }}</p>
|
|
18
|
+
|
|
19
|
+
{% endif %}
|
|
20
|
+
</div>
|
|
21
|
+
|
|
22
|
+
{% endif %}
|
|
23
|
+
</div>
|
|
24
|
+
|
|
25
|
+
{% if page.latest_news and page.latest_news.enabled %}
|
|
26
|
+
<h2 class="mt-0">Latest News</h2>
|
|
27
|
+
{% include latest-news.html %}
|
|
28
|
+
{% endif %}
|
|
29
|
+
|
|
30
|
+
{% if page.latest_posts and page.latest_posts.enabled %}
|
|
31
|
+
<h2>Latest Posts</h2>
|
|
32
|
+
{% include latest-posts.html %}
|
|
33
|
+
{% endif %}
|
|
34
|
+
</div>
|
data/_layouts/base.html
ADDED
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
<!DOCTYPE html>
|
|
2
|
+
<html lang="{{ site.lang | default: "en-US" }}">
|
|
3
|
+
<!-- Headers -->
|
|
4
|
+
<head>
|
|
5
|
+
<meta name="viewport" content="width=device-width, initial-scale=1">
|
|
6
|
+
<meta charset="utf-8">
|
|
7
|
+
<title>{{ page.title }} | {{ site.title }}</title>
|
|
8
|
+
{% include header.html %}
|
|
9
|
+
</head>
|
|
10
|
+
<body data-pagefind-body class="font-main min-h-screen flex flex-col">
|
|
11
|
+
|
|
12
|
+
{% include navbar.html %}
|
|
13
|
+
<!-- Child Content -->
|
|
14
|
+
<div data-pagefind-body class="px-6 xl:px-0 font-main pb-16 main flex flex-col flex-1 mx-auto mt-16 max-w-theme w-full px-2 xl:px-0 grow-1">
|
|
15
|
+
{{ content }}
|
|
16
|
+
</div>
|
|
17
|
+
|
|
18
|
+
{% include post-body.html %}
|
|
19
|
+
{% include footer.html %}
|
|
20
|
+
</body>
|
|
21
|
+
</html>
|
data/_layouts/bib.html
ADDED
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
---
|
|
2
|
+
---
|
|
3
|
+
<div
|
|
4
|
+
class="bib-entry border-1 border-border-main break-words px-2 pb-2 mb-8! last:mb-0 text-center">
|
|
5
|
+
|
|
6
|
+
<!-- Title -->
|
|
7
|
+
<h2 class="mt-2! mb-0! text-center!">
|
|
8
|
+
{{ entry.title }}
|
|
9
|
+
</h2>
|
|
10
|
+
|
|
11
|
+
<!-- Venue / Conference / Journal -->
|
|
12
|
+
{% assign year_str = entry.year | append: "" %}
|
|
13
|
+
{% assign clean_booktitle = entry.booktitle | default: "" | strip %}
|
|
14
|
+
{% assign prefix = clean_booktitle | slice: 0, 4 %}
|
|
15
|
+
{% if prefix == year_str %}
|
|
16
|
+
{% assign cleaned_booktitle = clean_booktitle | remove_first: year_str | strip %}
|
|
17
|
+
{% else %}
|
|
18
|
+
{% assign cleaned_booktitle = clean_booktitle %}
|
|
19
|
+
{% endif %}
|
|
20
|
+
|
|
21
|
+
<p class="text-neutral-500 truncate">
|
|
22
|
+
{% if cleaned_booktitle != "" %}
|
|
23
|
+
<span>{{ cleaned_booktitle }},</span>
|
|
24
|
+
{% endif %}
|
|
25
|
+
{% if entry.journal %}
|
|
26
|
+
<span>{{ entry.journal }},</span>
|
|
27
|
+
{% endif %}
|
|
28
|
+
{% if entry.year %}
|
|
29
|
+
<span>{{ entry.year }}</span>
|
|
30
|
+
{% endif %}
|
|
31
|
+
</p>
|
|
32
|
+
|
|
33
|
+
<!-- Authors -->
|
|
34
|
+
<p>{{ entry.author }}</p>
|
|
35
|
+
|
|
36
|
+
<!-- Optional abstract -->
|
|
37
|
+
{% if entry.abstract %}
|
|
38
|
+
<p class="text-neutral-600 text-sm">{{ entry.abstract | truncate: 250, "..." }}</p>
|
|
39
|
+
{% endif %}
|
|
40
|
+
|
|
41
|
+
<!-- Links -->
|
|
42
|
+
<div class="flex flex-wrap gap-3 text-sm justify-center">
|
|
43
|
+
{% if entry.url %}
|
|
44
|
+
<a class=" border border-border-main px-2 bg-blue-50" href="{{ entry.url }}">Paper</a>
|
|
45
|
+
{% endif %}
|
|
46
|
+
{% if entry.code %}
|
|
47
|
+
<a class=" text-green-500! border border-border-main px-2 bg-green-50" href="{{ entry.code }}">Code</a>
|
|
48
|
+
{% endif %}
|
|
49
|
+
{% if entry.slides %}
|
|
50
|
+
<a class=" text-violet-500! border border-border-main px-2 bg-violet-50" href="{{ entry.slides }}">Slides</a>
|
|
51
|
+
{% endif %}
|
|
52
|
+
{% if entry.bibtex %}
|
|
53
|
+
<button class="hover:cursor-pointer border border-border-main px-2 bg-gray-50 bibtex-toggle" type="button">BibTeX</button>
|
|
54
|
+
{% endif %}
|
|
55
|
+
</div>
|
|
56
|
+
|
|
57
|
+
<!-- Hidden details -->
|
|
58
|
+
{% if entry.bibtex %}
|
|
59
|
+
<details class="bibtex-details mt-4">
|
|
60
|
+
<summary class="sr-only">BibTeX</summary>
|
|
61
|
+
<pre class="text-left mt-2 bg-neutral-200 rounded-lg p-4 text-xs font-mono whitespace-pre-wrap break-words">{{ entry.bibtex }}</pre>
|
|
62
|
+
</details>
|
|
63
|
+
{% endif %}
|
|
64
|
+
|
|
65
|
+
</div>
|
data/_layouts/blog.html
ADDED
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
---
|
|
2
|
+
layout: base
|
|
3
|
+
---
|
|
4
|
+
|
|
5
|
+
<div class="prose min-w-full">
|
|
6
|
+
{{ content }}
|
|
7
|
+
|
|
8
|
+
<section class="w-full">
|
|
9
|
+
<div class="grid grid-cols-1 sm:grid-cols-2 lg:grid-cols-3 gap-6">
|
|
10
|
+
{% for post in site.posts %}
|
|
11
|
+
<article class="border border-border-main rounded-lg p-6 flex flex-col h-full">
|
|
12
|
+
|
|
13
|
+
<!-- Main content (title + date) -->
|
|
14
|
+
<div class="flex flex-col flex-1">
|
|
15
|
+
<a class="mb-2" href="{{ post.url }}">
|
|
16
|
+
{{ post.title }}
|
|
17
|
+
</a>
|
|
18
|
+
|
|
19
|
+
<div class="text-gray-500">
|
|
20
|
+
<time class="text-sm" datetime="{{ post.date | date_to_xmlschema }}">
|
|
21
|
+
{{ post.date | date: "%B %-d, %Y" }}
|
|
22
|
+
</time>
|
|
23
|
+
</div>
|
|
24
|
+
</div>
|
|
25
|
+
|
|
26
|
+
<!-- Tags (first 3 only) -->
|
|
27
|
+
<div class="flex flex-wrap gap-2 mt-3 min-h-[1.5rem]">
|
|
28
|
+
{% if post.tags %}
|
|
29
|
+
{% assign limited_tags = post.tags | slice: 0, 3 %}
|
|
30
|
+
{% for tag in limited_tags %}
|
|
31
|
+
<span class="bg-gray-200 text-gray-700 px-2 py-1 rounded text-xs">
|
|
32
|
+
{{ tag }}
|
|
33
|
+
</span>
|
|
34
|
+
{% endfor %}
|
|
35
|
+
{% else %}
|
|
36
|
+
<!-- empty spacer to preserve height -->
|
|
37
|
+
<span class="invisible px-2 py-1 rounded text-xs">empty</span>
|
|
38
|
+
{% endif %}
|
|
39
|
+
</div>
|
|
40
|
+
|
|
41
|
+
</article>
|
|
42
|
+
{% endfor %}
|
|
43
|
+
|
|
44
|
+
</div>
|
|
45
|
+
</section>
|
|
46
|
+
</div>
|
data/_layouts/news.html
ADDED
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
---
|
|
2
|
+
layout: base
|
|
3
|
+
---
|
|
4
|
+
<div class="prose min-w-full">
|
|
5
|
+
{{ content }}
|
|
6
|
+
<div>
|
|
7
|
+
<ul class="pl-0 divide-y divide-gray-200">
|
|
8
|
+
{% assign sorted_news = site.news | sort: "date" | reverse %}
|
|
9
|
+
{% for news in sorted_news %}
|
|
10
|
+
<li class="px-2 py-2 even:bg-gray-100 my-0! text-center sm:text-left flex flex-col sm:flex-row sm:items-center gap-0 sm:gap-4">
|
|
11
|
+
<!-- Date column -->
|
|
12
|
+
<time class="min-w-32 flex-shrink-0 text-sm">
|
|
13
|
+
{{ news.date | date: "%b %d, %Y" }}
|
|
14
|
+
</time>
|
|
15
|
+
|
|
16
|
+
<!-- Description column -->
|
|
17
|
+
<div class="flex-1 min-w-0">
|
|
18
|
+
{% if news.description %}
|
|
19
|
+
<p class="truncate font-bold">
|
|
20
|
+
{{ news.description }}
|
|
21
|
+
</p>
|
|
22
|
+
{% endif %}
|
|
23
|
+
</div>
|
|
24
|
+
|
|
25
|
+
<!-- Read more column -->
|
|
26
|
+
{% if news.content and news.content != "" %}
|
|
27
|
+
<div class="flex-shrink-0 mt-2 sm:mt-0">
|
|
28
|
+
<a class="text-blue-600 hover:underline" href="{{ news.url }}">[more]</a>
|
|
29
|
+
</div>
|
|
30
|
+
{% endif %}
|
|
31
|
+
</li>
|
|
32
|
+
{% endfor %}
|
|
33
|
+
</ul>
|
|
34
|
+
</div>
|
|
35
|
+
</div>
|
data/_layouts/post.html
ADDED
|
@@ -0,0 +1,74 @@
|
|
|
1
|
+
---
|
|
2
|
+
layout: base
|
|
3
|
+
---
|
|
4
|
+
<div class="prose prose-sm sm:prose-sm md:prose-lg min-w-full">
|
|
5
|
+
<nav class="flex items-center gap-2">
|
|
6
|
+
{% if page.collection == "news" %}
|
|
7
|
+
<a class="text-blue-600 hover:underline" href="/news/">News</a>
|
|
8
|
+
{% else %}
|
|
9
|
+
<a class="text-blue-600 hover:underline" href="/blog/">Blog</a>
|
|
10
|
+
{% endif %}
|
|
11
|
+
<span class="text-gray-400">/</span>
|
|
12
|
+
<span class="text-gray-800 font-semibold">{{ page.title }}</span>
|
|
13
|
+
</nav>
|
|
14
|
+
|
|
15
|
+
<article class="mx-auto w-full px-0 py-8 flex flex-col space-y-4">
|
|
16
|
+
|
|
17
|
+
<!-- Post meta container -->
|
|
18
|
+
<div class="relative overflow-hidden py-3 px-2 md:px-3 rounded-tl-lg rounded-tr-lg mb-0 border border-gray-200">
|
|
19
|
+
|
|
20
|
+
{% if page.background.file %}
|
|
21
|
+
<div
|
|
22
|
+
class="absolute inset-0 -z-10 rounded-tl-lg rounded-tr-lg"
|
|
23
|
+
style="
|
|
24
|
+
background-image: url('{{ page.background.file }}');
|
|
25
|
+
background-size: {{ page.background.size | default: 'cover' }};
|
|
26
|
+
background-repeat: no-repeat;
|
|
27
|
+
background-position: {{ page.background.x | default: '50%' }} {{ page.background.y | default: '50%' }};
|
|
28
|
+
opacity: {{ page.background.opacity | default: 0.8 }};
|
|
29
|
+
{% if page.background.blur %}
|
|
30
|
+
filter: blur({{ page.background.blur | times: 10 }}px);
|
|
31
|
+
{% endif %}
|
|
32
|
+
">
|
|
33
|
+
</div>
|
|
34
|
+
{% else %}
|
|
35
|
+
<div class="absolute inset-0 -z-10 bg-gray-100 rounded-tl-lg rounded-tr-lg"></div>
|
|
36
|
+
{% endif %}
|
|
37
|
+
|
|
38
|
+
<div class="relative flex flex-col gap-4">
|
|
39
|
+
<!-- Published / Updated Date -->
|
|
40
|
+
<span class="text-gray-800 text-sm flex flex-wrap mx-auto md:mx-0 items-center space-x-2">
|
|
41
|
+
<time datetime="{{ page.date | date_to_xmlschema }}">
|
|
42
|
+
{{ page.date | date: "%B %-d, %Y" }}
|
|
43
|
+
</time>
|
|
44
|
+
{% if page.last_modified_at %}
|
|
45
|
+
<span>•</span>
|
|
46
|
+
<time datetime="{{ page.last_modified_at | date_to_xmlschema }}">
|
|
47
|
+
Updated {{ page.last_modified_at | date: "%B %-d, %Y" }}
|
|
48
|
+
</time>
|
|
49
|
+
{% endif %}
|
|
50
|
+
</span>
|
|
51
|
+
|
|
52
|
+
<!-- Title -->
|
|
53
|
+
<h1 class="wrap-break-word text-left">{{ page.title }}</h1>
|
|
54
|
+
|
|
55
|
+
{% if page.tags and page.tags.size > 0 %}
|
|
56
|
+
<!-- Tags -->
|
|
57
|
+
<div class="flex flex-wrap gap-1 sm:gap-2 text-sm md:text-base justify-center md:justify-start">
|
|
58
|
+
{% for tag in page.tags %}
|
|
59
|
+
<span class="bg-gray-700 text-white px-2 py-1 rounded">
|
|
60
|
+
{{ tag }}
|
|
61
|
+
</span>
|
|
62
|
+
{% endfor %}
|
|
63
|
+
</div>
|
|
64
|
+
{% endif %}
|
|
65
|
+
</div>
|
|
66
|
+
</div>
|
|
67
|
+
|
|
68
|
+
<!-- Post content -->
|
|
69
|
+
<div class="px-1 md:px-4 pt-6! max-w-full border-x border-b rounded-b-lg border-b-gray-200 border-x-gray-200">
|
|
70
|
+
{{ content }}
|
|
71
|
+
</div>
|
|
72
|
+
|
|
73
|
+
</article>
|
|
74
|
+
</div>
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
---
|
|
2
|
+
layout: base
|
|
3
|
+
---
|
|
4
|
+
|
|
5
|
+
<div class="prose max-w-full ">
|
|
6
|
+
{{ content }}
|
|
7
|
+
<div class="{% if content != "" %}mt-16{% endif %}">
|
|
8
|
+
<ul class="divide-y divide-border-main pl-0!">
|
|
9
|
+
{% assign sorted_repos = site.data.repos.items | sort: "date" | reverse %}
|
|
10
|
+
{% for repo in sorted_repos %}
|
|
11
|
+
<li class="not-prose flex flex-col sm:flex-row sm:items-center py-6 last:pb-0 gap-0 sm:gap-4">
|
|
12
|
+
<!-- Date column -->
|
|
13
|
+
<time class="min-w-[100px] max-w-[100px] flex-shrink-0 text-sm!">
|
|
14
|
+
{{ repo.date | date: "%b %d, %Y" }}
|
|
15
|
+
</time>
|
|
16
|
+
{% if repo.host %}
|
|
17
|
+
<a class="mb-0! min-w-[200px] max-w-[200px] font-bold! truncate sm:text-center" href="{{ repo.host }}/{{ repo.user_name }}/{{ repo.repo_name}}">
|
|
18
|
+
{{ repo.name }}
|
|
19
|
+
</a>
|
|
20
|
+
{% endif %}
|
|
21
|
+
|
|
22
|
+
<p class="not-prose mb-0! truncate grow">
|
|
23
|
+
{{ repo.description }}
|
|
24
|
+
</p>
|
|
25
|
+
<img alt="GitHub Repo stars" class="not-prose w-[100px] min-w-[100px] mt-1 sm:mt-0 h-auto" src="https://img.shields.io/github/stars/{{ repo.user_name }}/{{ repo.repo_name }}?style=flat-square&cacheSeconds=3600">
|
|
26
|
+
</li>
|
|
27
|
+
{% endfor %}
|
|
28
|
+
</ul>
|
|
29
|
+
</div>
|
|
30
|
+
</div>
|
|
31
|
+
|