Skip to content

Commit 9883d68

Browse files
author
Ronokof
committed
Initial commit
0 parents  commit 9883d68

23 files changed

Lines changed: 1731 additions & 0 deletions
Lines changed: 42 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,42 @@
1+
name: Deploy Jekyll with GitHub Pages dependencies preinstalled
2+
3+
on:
4+
push:
5+
branches: ["gh-pages"]
6+
workflow_dispatch:
7+
8+
permissions:
9+
contents: read
10+
pages: write
11+
id-token: write
12+
13+
concurrency:
14+
group: "pages"
15+
cancel-in-progress: false
16+
17+
jobs:
18+
build:
19+
runs-on: ubuntu-latest
20+
steps:
21+
- name: Checkout
22+
uses: actions/checkout@v5
23+
- name: Setup Pages
24+
uses: actions/configure-pages@v5
25+
- name: Build with Jekyll
26+
uses: actions/jekyll-build-pages@v1
27+
with:
28+
source: ./
29+
destination: ./_site
30+
- name: Upload artifact
31+
uses: actions/upload-pages-artifact@v3
32+
33+
deploy:
34+
environment:
35+
name: github-pages
36+
url: ${{ steps.deployment.outputs.page_url }}
37+
runs-on: ubuntu-latest
38+
needs: build
39+
steps:
40+
- name: Deploy to GitHub Pages
41+
id: deployment
42+
uses: actions/deploy-pages@v4

_config.yml

Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,36 @@
1+
title: Full Japanese Study Deck
2+
baseurl: "/Full-Japanese-Study-Deck"
3+
url: "https://ronokof.github.io"
4+
5+
# Site info
6+
titleabbr: "FJSD"
7+
ogdescription: "A Comprehensive Anki Deck Covering Kana, Core & JLPT Vocabulary, Kanji & Grammar + Extra Vocab/Kanji"
8+
keywords: "fjsd, japanese, japanese-language, japanese-learning, anki-cards, anki-deck, anki, katakana, hiragana, kana, kanji, japanese-grammar, jlpt, core, henkan"
9+
author: "Ronokof"
10+
email: "ronokoffjsd@gmail.com"
11+
12+
# Google info
13+
googlesearchkey: "uLA8h6wddU2AB2ADmbT0uz80KlOvQdnnLTEvGxk1NBc"
14+
googleanalyticsid: "G-1VTT4LZ48H"
15+
16+
# Asset paths
17+
bannerpath: "/assets/fjsd.png"
18+
kanapath: "/assets/kana.png"
19+
kanjipath: "/assets/kanji.png"
20+
radicalpath: "/assets/radical.png"
21+
wordpath: "/assets/word.png"
22+
grammarpath: "/assets/grammar.png"
23+
24+
# Anki deck entries count
25+
kana: "142"
26+
kanaextended: "230"
27+
corevocab: "10,013"
28+
corekanji: "2,216"
29+
grammar: "644"
30+
radicals: "261"
31+
kanaonlywords: "5,810"
32+
extrakanji: "558"
33+
extrakanjiwords: "28,192"
34+
35+
# Anki deck info
36+
deckversion: "10.2"

_includes/footer.html

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
<footer>
2+
© 2026 {{ site.author }}
3+
<div id="cookieConsent" aria-live="polite" role="dialog" aria-label="Cookie consent">
4+
We use cookies to improve the site. Do you accept?
5+
6+
<div id="consent-div">
7+
<button id="btn-accept">Accept</button>
8+
<button id="btn-reject">Reject</button>
9+
</div>
10+
</div>
11+
</footer>

_includes/header.html

Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,32 @@
1+
<header>
2+
<div class="header-left">
3+
<div class="logo">{{ site.title }}</div>
4+
<div class="tabs">
5+
<a target="_self" href="{{ site.baseurl }}/">
6+
<div class="tab">Home</div>
7+
</a>
8+
<a target="_self" href="{{ site.baseurl }}/guide/">
9+
<div class="tab">How to Use</div>
10+
</a>
11+
<a target="_self" href="{{ site.baseurl }}/updating/">
12+
<div class="tab">Updating</div>
13+
</a>
14+
<a target="_self" href="{{ site.baseurl }}/contents/">
15+
<div class="tab">Deck Contents</div>
16+
</a>
17+
<a target="_self" href="{{ site.baseurl }}/sources/">
18+
<div class="tab">Credits</div>
19+
</a>
20+
<a target="_blank"
21+
href="https://github.com/{{ site.author }}{{ site.baseurl }}/releases/latest/download/notes.tar.gz">
22+
<div class="tab">Download Raw Notes</div>
23+
</a>
24+
</div>
25+
</div>
26+
</div>
27+
<div class="header-right">
28+
<a target="_blank" href="https://github.com/{{ site.author }}{{ site.baseurl }}" aria-label="GitHub"><i
29+
class="fab fa-github"></i></a>
30+
<a href="mailto:{{ site.email }}" aria-label="Email"><i class="fas fa-envelope"></i></a>
31+
</div>
32+
</header>

_layouts/default.html

Lines changed: 165 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,165 @@
1+
<!DOCTYPE html>
2+
<html lang="en">
3+
4+
<head>
5+
<title>{{ page.pagetitle | default: site.title }}</title>
6+
<meta charset="UTF-8" />
7+
<meta http-equiv="content-type" content="text/html; charset=UTF-8" />
8+
<meta name="viewport" content="width=device-width, initial-scale=1.0, user-scalable=yes" />
9+
<link rel="stylesheet" href="{{ site.url }}{{ site.baseurl }}/styles/{{ page.pgname }}.css">
10+
<link rel="preconnect" href="https://fonts.googleapis.com">
11+
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
12+
<link rel="preload" href="https://fonts.googleapis.com/css2?family=Inter:wght@300;400;600;800&display=swap" as="style"
13+
onload="this.rel='stylesheet'">
14+
<noscript>
15+
<link href="https://fonts.googleapis.com/css2?family=Inter:wght@300;400;600;800&display=swap" rel="stylesheet">
16+
</noscript>
17+
<link rel="preload" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.5.0/css/all.min.css" as="style"
18+
onload="this.rel='stylesheet'">
19+
<noscript>
20+
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.5.0/css/all.min.css">
21+
</noscript>
22+
<style>
23+
:root {
24+
--cookie-banner-height: 0px;
25+
}
26+
27+
#cookieConsent {
28+
position: fixed;
29+
left: 0;
30+
right: 0;
31+
bottom: 0;
32+
z-index: 9999;
33+
box-sizing: border-box;
34+
background: #222;
35+
color: #fff;
36+
padding: 12px 16px;
37+
padding-bottom: calc(12px + env(safe-area-inset-bottom));
38+
display: flex;
39+
gap: 12px;
40+
align-items: center;
41+
justify-content: space-between;
42+
box-shadow: 0 -6px 18px rgba(0, 0, 0, 0.25);
43+
}
44+
45+
@supports (padding-bottom: constant(safe-area-inset-bottom)) {
46+
#cookieConsent {
47+
padding-bottom: calc(12px + constant(safe-area-inset-bottom));
48+
}
49+
}
50+
51+
#consent-div {
52+
display: flex;
53+
gap: 8px;
54+
}
55+
56+
#cookieConsent button {
57+
padding: 8px 12px;
58+
border-radius: 6px;
59+
border: none;
60+
cursor: pointer;
61+
}
62+
63+
#btn-accept {
64+
background: #0a84ff;
65+
color: white;
66+
}
67+
68+
#btn-reject {
69+
background: transparent;
70+
color: #ddd;
71+
border: 1px solid rgba(255, 255, 255, 0.08);
72+
}
73+
</style>
74+
<link rel="icon" type="image/x-icon" href="{{ site.url }}/favicon.ico" />
75+
<meta name="application-name" content="{{ site.title }}" />
76+
<meta name="author" content="{{ site.author }}" />
77+
<meta name="description" content="{{ site.ogdescription }}" />
78+
<meta name="keywords" content="{{ site.keywords }}">
79+
<meta name="robots" content="index, follow" />
80+
<meta property="og:type" content="website" />
81+
<meta property="og:site_name" content="{{ site.title }}" />
82+
<meta property="og:title" content="{{ site.title }}{{ page.ogsuffix }}" />
83+
<meta property="og:description" content="{{ site.ogdescription }}" />
84+
<meta property="og:url" content="{{ site.url }}{{ site.baseurl }}/" />
85+
<meta property="og:image" content="{{ site.url }}{{ site.baseurl }}{{ site.bannerpath }}" />
86+
<meta property="og:image:secure_url" content="{{ site.url }}{{ site.baseurl }}{{ site.bannerpath }}" />
87+
<meta property="og:image:alt" content="{{ site.title }}" />
88+
<meta name="twitter:card" content="summary" />
89+
<meta name="twitter:site" content="@{{ site.titleabbr }}" />
90+
<meta name="twitter:title" content="{{ site.title }}{{ page.ogsuffix }}" />
91+
<meta name="twitter:description" content="{{ site.ogdescription }}" />
92+
<meta name="twitter:image" content="{{ site.url }}{{ site.baseurl }}{{ site.bannerpath }}" />
93+
<meta name="twitter:image:alt" content="{{ site.title }}" />
94+
<meta name="google-site-verification" content="{{ site.googlesearchkey }}" />
95+
</head>
96+
97+
<body>
98+
{% include header.html %}
99+
<main>
100+
{{ content }}
101+
</main>
102+
{% include footer.html %}
103+
<script>
104+
const KEY = 'cookieConsentStatus';
105+
const banner = document.getElementById('cookieConsent');
106+
107+
function setBodyPaddingForBanner() {
108+
const h = banner.offsetHeight || 0;
109+
document.documentElement.style.setProperty('--cookie-banner-height', h + 'px');
110+
document.body.style.paddingBottom = h + 'px';
111+
}
112+
113+
function hideBanner() {
114+
banner.style.display = 'none';
115+
document.body.style.paddingBottom = '';
116+
}
117+
118+
function showBanner() {
119+
banner.style.display = 'flex';
120+
requestAnimationFrame(setBodyPaddingForBanner);
121+
}
122+
123+
function injectTrackingScript() {
124+
if (window.__gaInjected) return;
125+
window.__gaInjected = true;
126+
const gaScript = document.createElement('script');
127+
gaScript.src = "https://www.googletagmanager.com/gtag/js?id={{ site.googleanalyticsid }}";
128+
gaScript.async = true;
129+
document.head.appendChild(gaScript);
130+
gaScript.onload = function () {
131+
window.dataLayer = window.dataLayer || [];
132+
function gtag() { dataLayer.push(arguments); }
133+
gtag('js', new Date());
134+
gtag('config', '{{ site.googleanalyticsid }}');
135+
};
136+
}
137+
138+
function setConsent(status) {
139+
localStorage.setItem(KEY, status);
140+
if (status === 'accepted') injectTrackingScript();
141+
hideBanner();
142+
}
143+
144+
document.getElementById('btn-accept').addEventListener('click', () => setConsent('accepted'));
145+
document.getElementById('btn-reject').addEventListener('click', () => setConsent('rejected'));
146+
147+
const saved = localStorage.getItem(KEY);
148+
if (saved === 'accepted') {
149+
injectTrackingScript();
150+
hideBanner();
151+
} else if (saved === 'rejected') hideBanner();
152+
else showBanner();
153+
154+
window.addEventListener('resize', setBodyPaddingForBanner);
155+
window.addEventListener('orientationchange', setBodyPaddingForBanner);
156+
157+
window.addEventListener('focusin', setBodyPaddingForBanner);
158+
window.addEventListener('focusout', setBodyPaddingForBanner);
159+
160+
window.addEventListener('load', () => setTimeout(setBodyPaddingForBanner, 50));
161+
</script>
162+
163+
</body>
164+
165+
</html>

assets/fjsd.png

32.4 KB
Loading

assets/grammar.png

4.24 MB
Loading

assets/kana.png

2.26 MB
Loading

assets/kanji.png

5.99 MB
Loading

assets/radical.png

4.13 MB
Loading

0 commit comments

Comments
 (0)