Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Poster #1

Merged
merged 173 commits into from
Aug 26, 2024
Merged
Changes from all commits
Commits
Show all changes
173 commits
Select commit Hold shift + click to select a range
1c79364
Fix keybase class (#3221)
amcintosh Jan 5, 2022
b5d5431
Update CHANGELOG and history
mmistakes Jan 5, 2022
2b36c12
✏ fix typo (#3232)
smholvoet Jan 5, 2022
64577f4
Update CHANGELOG and history
mmistakes Jan 5, 2022
ee7e2da
Add missing comma (#3318)
yzhong52 Jan 5, 2022
c83ab60
Update CHANGELOG and history
mmistakes Jan 5, 2022
b8f6489
Automatically close invalid PRs using GitHub Actions (#3313)
iBug Jan 10, 2022
8015512
Update CHANGELOG and history
mmistakes Jan 10, 2022
d10eaf7
Added sameAs (#3087)
lsolesen May 27, 2022
3ece2da
Update CHANGELOG and history
mmistakes May 27, 2022
31bb5de
Update CHANGELOG and history
mmistakes May 27, 2022
687194b
Use <a> color for blockquote.notice border (#3140)
iBug May 27, 2022
1f109be
Fix inline code style not applied to stylized text (#3253)
iBug May 27, 2022
e0de7c2
Update CHANGELOG and history
mmistakes May 27, 2022
3f39f03
Update to Jquery 3.6.0 (#3254)
lsolesen May 27, 2022
0971743
Update CHANGELOG and history
mmistakes May 27, 2022
163c45f
fix typo about loading javascript in footer (#3350)
ultimape May 27, 2022
14e6a61
Update CHANGELOG and history
mmistakes May 27, 2022
88e49ea
add optinal lunr searching of pages (#3352)
ultimape May 27, 2022
a1a3ad4
Update CHANGELOG and history
mmistakes May 27, 2022
c998243
Exclude `main.scss` from Lunr search index
mmistakes May 27, 2022
e1794c9
Add Kiswahili translation (#3489)
bkmgit May 27, 2022
938c59b
Update
mmistakes May 27, 2022
1f9d1db
Update attribution link (#3553)
bkmgit May 27, 2022
d5cf0b0
Update CHANGELOG and history
mmistakes May 27, 2022
4820f36
Update link to Font Awesome gallery (#3599)
iBug May 27, 2022
688d7f3
Update CHANGELOG and history
mmistakes May 27, 2022
d2d2b64
Make it possible to enable breadcrumbs per page (#3096)
lsolesen May 27, 2022
288255e
Update CHANGELOG and history
mmistakes May 27, 2022
faa67e4
Update algolia-search-scripts.html (#3102)
May 27, 2022
31c7ed4
Replace with public YouTube video
mmistakes May 27, 2022
f22e91d
Replace with public YouTube video embeds
mmistakes May 27, 2022
41d7c14
Update CHANGELOG and history
mmistakes May 27, 2022
911b943
Fix #3096 enabling breadcrumb on all pages (#3668)
iBug May 29, 2022
2c82e05
Remove IE9 upgrade notice (#3666)
iBug May 29, 2022
aba3e2f
Update CHANGELOG and history
mmistakes May 29, 2022
06f1ce9
Fix #3668 breaking "disable per-page when globally enabled" (#3669)
iBug May 30, 2022
d83f061
Update CHANGELOG and history
mmistakes May 30, 2022
a0decad
Improve PR close auto-comment message (#3713)
iBug Jul 8, 2022
3b1c113
Delete .github/FUNDING.yml
mmistakes Apr 22, 2024
5b2c87e
Update README.md
mmistakes Apr 22, 2024
4224e47
load latest fontawesome package (#3765)
marciska Apr 22, 2024
8405625
Update CHANGELOG and history
mmistakes Apr 22, 2024
7fb4b31
Fixed a grammar mistake. (#3890)
wermos Apr 22, 2024
2d26fb6
Update the Polish translation (#3969)
skolima Apr 22, 2024
61e026b
Update CHANGELOG and history
mmistakes Apr 22, 2024
1207e1e
Remove redundant downcase from _layouts/categories.html (#4531)
eabneka Apr 22, 2024
102c771
Improve Finnish translations (#4595)
niklas-e Apr 22, 2024
ce9ae2e
Remove JS and other files from search index (#4000)
LasseAhhMann Apr 22, 2024
abe4b8f
Lazy-load InstantSearch scripts and stylesheets (#3691)
iBug Apr 22, 2024
9c312a2
Fix wrong `first_page_path` because of hard-coded `page:num` (#3778)
yusanshi Apr 22, 2024
05468cb
Fix Linkedin social share link (#4754)
moose115 Apr 22, 2024
8aad203
Add site.copyright and site.copyright_url config options (#4313)
raubvogel Apr 22, 2024
062daa6
Fix non-English characters being url encoded in breadcrumb (#3819)
boh5 Apr 22, 2024
b89baaa
Update CHANGELOG and history
iBug Apr 22, 2024
884712b
Sync CHANGELOG with history
iBug Apr 22, 2024
4386fbd
Add Rakefile for automatically syncing CHANGELOG with history
iBug Apr 22, 2024
6feea30
Consolidate hard-coded version numbers where possible
iBug Apr 22, 2024
f3d82f2
Fix bad Liquid include syntax
iBug Apr 22, 2024
862fff9
Remove remainders of browser-upgrade.html
iBug Apr 22, 2024
ae9b833
Release 4.25.0 💎
iBug Apr 22, 2024
4a93272
Bump shell-quote from 1.7.1 to 1.7.3 (#3692)
dependabot[bot] Apr 22, 2024
dd0d357
Update CHANGELOG and history
iBug Apr 22, 2024
33e284c
Add Ukrainian translation (#4273)
4ndr116 Apr 22, 2024
6940cab
Update CHANGELOG
iBug Apr 22, 2024
7b1ef39
Bump node.js dependencies
iBug Apr 22, 2024
0511cc4
Remove h1 from 18-history.md
iBug Apr 23, 2024
3904823
Add _includes/after-content.html and remove docs site default layout …
iBug Apr 23, 2024
4e6cd65
Add _includes/before-related.html and remove docs site single layout …
iBug Apr 23, 2024
4aa35fd
Add a missing include to before-related.html
iBug Apr 23, 2024
8e0ca34
Exclude hidden posts from page__related, fix #4653
iBug Apr 23, 2024
d954d97
GitHub Workflows security hardening (#3884)
sashashura Apr 23, 2024
6d17a42
Update CHANGELOG and history
iBug Apr 23, 2024
1f394bf
Add more configuration for Giscus (#4274)
4ndr116 Apr 23, 2024
6777437
Update CHANGELOG and history
iBug Apr 23, 2024
1977956
Bump jekyll-toc to v1.2.1
iBug Apr 23, 2024
ca73696
Replace fontawesome.com/v5/search with v6
iBug Apr 23, 2024
97e5a76
Try an FAQ page
iBug Apr 25, 2024
3bddb70
Replace dead link in _includes/head.html, close #4421
iBug Apr 25, 2024
96cf1f7
Update quick-start guide to use 4.25.0, fix #4809
iBug Apr 27, 2024
b1fea54
Fix where_exp for Jekyll < 4.0
iBug Apr 27, 2024
444cb14
Release 4.25.1 💎
iBug Apr 27, 2024
7954f34
Rewrite skin previews on `05-configuration.md` in Liquid template
iBug May 4, 2024
d58ebe8
Add documentation for the incoming Jekyll Paginate V2 support
iBug May 4, 2024
1a9c743
conflict merge config.yml
minyoongi96 Aug 26, 2024
838d00b
Add .notice--danger for unsupported settings in j-p-v2
iBug May 4, 2024
4006e96
Remove unused classes from `_layouts/single.html`
iBug May 4, 2024
67fe045
Auto scroll sticky ToC with content (#3115)
iBug May 4, 2024
c316d69
Update CHANGELOG and history
iBug May 4, 2024
e41f379
Try sticky ToC on all docs pages
iBug May 4, 2024
f21570a
Fix logic error in toc-scroll
iBug May 4, 2024
4994d00
04-upgrading.md: Minor formatting and grammar fixes
iBug May 4, 2024
94b612d
page__hero.html: Fix an unclosed `<p>` tag
iBug May 4, 2024
7bac60d
Replace "hidden" check in Liquid with `where_exp`
iBug May 4, 2024
ebb7e0f
Migrate `npm run` scripts to `Rakefile` tasks
iBug May 4, 2024
20219c8
Merge banner.js into Rake task
iBug May 4, 2024
637e9be
conflict merge Gemfile
minyoongi96 Aug 26, 2024
158dc01
Remove deprecated "page.header.cta_url" setting (#4821)
iBug May 4, 2024
7e6db3b
Update CHANGELOG and history
iBug May 4, 2024
f8e71cc
Add Rake task `:version`
iBug May 4, 2024
8782cf9
Update CHANGELOG and history
iBug May 4, 2024
e87c8c1
Update README
iBug May 4, 2024
531d90e
Merge `categories` and `tags` layout into `_includes/posts-taxonomy.h…
iBug May 5, 2024
0428164
Rakefile: Add jQuery to uglify targets
iBug May 5, 2024
f8a3bbb
bundle exec rake js
iBug May 5, 2024
f0d6149
Update CHANGELOG and history
iBug May 5, 2024
95961ac
conflict merge nav_list
minyoongi96 Aug 26, 2024
cf4d8ca
Update Social Sharing links section (#4066)
jstrong013 May 5, 2024
053c152
Update CHANGELOG and history
iBug May 5, 2024
3328b0e
Revert f3c617f on _includes/figure to make way for #3119
iBug May 5, 2024
6ad079d
Add popup parameter for figure include (#3119)
JohnScottUK May 5, 2024
ffd067c
Update CHANGELOG and history
iBug May 5, 2024
829d3cf
Add target attribute for navigation link (#3056)
xepozz May 5, 2024
b197aa8
Update CHANGELOG and history
iBug May 5, 2024
835577f
Remove overlay and revert X to hamburger icon when popup disappears (…
ddomdel May 5, 2024
9f52bff
Split schema to a separate include file (#3085)
lsolesen May 5, 2024
be22996
Update CHANGELOG and `bundle exec rake`
iBug May 5, 2024
b6aeb2d
Fix SEO title when it contains a vertical bar (#3113)
lsolesen May 5, 2024
0abb4c9
Cleanup seo.html and update CHANGELOG
iBug May 5, 2024
cee69fa
Remove "sticky sidebar" JS in favor of CSS media queries
iBug May 5, 2024
13c67db
Add "copy to clipboard" button for code blocks (#2812)
iBug May 5, 2024
f1f8dd8
Update CHANGELOG and `bundle exec rake`
iBug May 5, 2024
53bcd23
Add "new in v4.26.0" in documentation
iBug May 5, 2024
678e1f8
Release 4.26.0 💎
iBug May 5, 2024
1d3c008
Add success indicator for code block copy button
iBug May 5, 2024
2c0c1d6
Try fixing copy button flying out
iBug May 6, 2024
3035a37
Disable copy button for bad pre blocks
iBug May 6, 2024
64760d7
Fix typo: dribbble → dribble
iBug May 6, 2024
056a028
Oops, fixed the typo the wrong way
iBug May 6, 2024
57adbad
Rewrite social icons SCSS with a loop
iBug May 6, 2024
4c648c4
Limit "auto scroll ToC" to Chromium-based
iBug May 7, 2024
a8e4a07
Actually 3 B's in "dribbble"
iBug May 7, 2024
7680984
Release 4.26.1 💎
iBug May 10, 2024
67af995
Update CHANGELOG and history
iBug May 10, 2024
ff1d69e
_includes/figure: Replace remove:<p> with strip_html, fix #4841
iBug May 14, 2024
de85a57
conflict merge main.scss
minyoongi96 Aug 26, 2024
c097e6a
changelog: Clarify #4841 only triggers with popup=true
iBug May 26, 2024
5107fd5
feat: add Czech localization (#4866)
MikkCZ Jun 9, 2024
2a74e3e
Update CHANGELOG and history
iBug Jun 9, 2024
463fd47
Allow overriding HTML lang on a per-page basis (#4862)
suhlig Jun 15, 2024
266effa
Update CHANGELOG and history
iBug Jun 15, 2024
0298cae
Release 4.26.2 💎
iBug Jun 15, 2024
6c74f4b
Update CHANGELOG and history
iBug Jun 15, 2024
fd471a0
Change the link it is redirecting to - Fix ahref issue (#4882)
deepakmahakale Jun 23, 2024
1bbb0b5
Add missing Polish translation (#4890)
wssbck Jun 23, 2024
e85180c
conflict merge config.yml
minyoongi96 Aug 26, 2024
3f49a94
Update CHANGELOG and history
iBug Jun 25, 2024
ec3da3f
Replace '[dir=rtl] &' with CSS logical properties where it makes sense
iBug Jun 25, 2024
ad45b0d
Fix two misdirections
iBug Jun 25, 2024
f993d2b
Update all CSS to use logical properties
iBug Jun 25, 2024
c40d8e8
Fix the remaining issues with CSS logical properties
iBug Jun 25, 2024
25a3bf7
Fix wrong direction for feature_row with type=right, fix #4061
iBug Jun 25, 2024
904dabf
Update CHANGELOG and history
iBug Jun 25, 2024
23e6c0f
Accidentally committed a test file
iBug Jun 25, 2024
8e917dc
Update Algolia index with GH Actions
iBug Jun 27, 2024
a88bea8
conflict merge config.yml
minyoongi96 Aug 26, 2024
b6288e8
Update bug_report issue template
iBug Aug 4, 2024
b93644f
Remove unnecessary "type" attribute (#4956)
davorg Aug 20, 2024
71de5bc
The "if" means the default is never used (#4955)
davorg Aug 20, 2024
0ebc44c
Fix: Prevent double title issue in SEO metadata by updating seo.html …
alouiadel Aug 20, 2024
4043c61
Update CHANGELOG
iBug Aug 20, 2024
8e81c41
conflict merge config.yml
minyoongi96 Aug 26, 2024
051aa4c
conflict merge config.yml
minyoongi96 Aug 26, 2024
026e548
updating config.yml
minyoongi96 Aug 26, 2024
d566d7f
Update _config.yml
minyoongi96 Nov 27, 2022
029e65b
updating gemfile
minyoongi96 Aug 26, 2024
47ca21f
merge conflicting
minyoongi96 Aug 26, 2024
8b11fdd
change main.scss:
minyoongi96 Nov 28, 2022
91a509e
post
minyoongi96 Nov 29, 2022
cc10ef0
merge conflicting
minyoongi96 Aug 26, 2024
3957095
merge conflicting
minyoongi96 Aug 26, 2024
f61a207
S3 기본 개념 업로드
minyoongi96 Aug 26, 2024
e6f8afb
test
minyoongi96 Aug 26, 2024
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 0 additions & 2 deletions .github/FUNDING.yml

This file was deleted.

68 changes: 0 additions & 68 deletions .github/ISSUE_TEMPLATE/bug_report.md

This file was deleted.

19 changes: 16 additions & 3 deletions .github/ISSUE_TEMPLATE/bug_report.yml
Original file line number Diff line number Diff line change
@@ -19,7 +19,7 @@ body:
- type: textarea
id: environment
attributes:
label: What happened?
label: Theme version and system environment
description: |
Please include theme version, Jekyll version, public git repository, whether
you are hosting with GitHub Pages, and the operating system you tested with.
@@ -33,8 +33,21 @@ body:
- Ruby gem or remote theme version:
- Jekyll version:
- Git repository URL:
- Hosted on GitHub Pages (if yes provide URL to site):
- URL to the page with the problem:
- Operating system:
- Browser version:
validations:
required: true

- type: textarea
id: what-happened
attributes:
label: What happened?
description: |
Describe the problem **in detail**. For example:
- What is missing?
- What error do you see? Attach the error log if available.
validations:
required: true

@@ -78,4 +91,4 @@ body:
Please provide a code repository, gist, code snippet, sample files,
screenshots, or anything else you think will aid in reproducing the issue.
validations:
required: false
required: false
16 changes: 0 additions & 16 deletions .github/ISSUE_TEMPLATE/documentation.md

This file was deleted.

6 changes: 5 additions & 1 deletion .github/PULL_REQUEST_TEMPLATE.md
Original file line number Diff line number Diff line change
@@ -23,4 +23,8 @@

<!--
Is this related to any GitHub issue(s)?
-->
-->

<!--
Please confirm that you want to submit this Pull Request to Minimal Mistakes, the free Jekyll theme by Michael Rose, by deleting this comment block.
-->
32 changes: 32 additions & 0 deletions .github/workflows/bad-pr.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,32 @@
name: Cleanup bad PR

on:
pull_request_target:
types: [opened, reopened]

permissions:
contents: read

jobs:
close-pr:
permissions:
pull-requests: write
runs-on: ubuntu-latest
if: "contains(github.event.pull_request.body, 'by deleting this comment block') || github.event.pull_request.body == ''"
steps:
- uses: actions-ecosystem/action-add-labels@v1
with:
labels: 'Type: Invalid'
- uses: superbrothers/close-pull-request@v3
with:
# Optional. Post an issue comment just before closing a pull request.
comment: |
**You have created a Pull Request to the wrong repository.** This is the repository for [Minimal Mistakes][1], the free Jekyll theme. See [GitHub Docs: About pull requests][2] if you need help.
[1]: https://mmistakes.github.io/minimal-mistakes/
[2]: https://docs.github.com/en/pull-requests/collaborating-with-pull-requests/proposing-changes-to-your-work-with-pull-requests/about-pull-requests
- uses: sudo-bot/[email protected]
with:
github-token: ${{ secrets.GITHUB_TOKEN }}
number: ${{ github.event.pull_request.number }}
lock-reason: spam
47 changes: 47 additions & 0 deletions .github/workflows/build.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,47 @@
name: build

on:
push:
branches:
- master
workflow_dispatch: {}
repository_dispatch: {}

jobs:
build:
if: github.repository == 'mmistakes/minimal-mistakes'
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
with:
fetch-depth: 0

- uses: ruby/setup-ruby@v1
with:
ruby-version: '3.2'
- name: Setup cache for Bundler
id: cache
uses: actions/cache@v4
with:
path: |
docs/Gemfile.lock
docs/vendor/bundle
key: ${{ runner.os }}-bundler-${{ hashFiles('docs/Gemfile') }}
restore-keys: |
${{ runner.os }}-bundler-
- name: Install - Bundler
env:
MAKE: make -j2
working-directory: docs/
run: |
bundle config set path vendor/bundle
bundle install --jobs=4 --retry=3
bundle clean
- name: Update Algolia index
working-directory: docs/
run: bundle exec jekyll algolia push
env:
ALGOLIA_API_KEY: ${{ secrets.ALGOLIA_API_KEY }}
continue-on-error: true
3 changes: 3 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
@@ -2,6 +2,9 @@
*~
*.sw[p_]

# IntelliJ IDEA
*.idea

# Sublime Text
*.sublime-project
*.sublime-workspace
627 changes: 381 additions & 246 deletions CHANGELOG.md

Large diffs are not rendered by default.

1 change: 1 addition & 0 deletions Gemfile
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
source "https://rubygems.org"
gemspec

gem "webrick", "~> 1.7"

# Windows does not include zoneinfo files, so bundle the tzinfo-data gem
2 changes: 1 addition & 1 deletion LICENSE
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
The MIT License (MIT)

Copyright (c) 2013-2020 Michael Rose and contributors
Copyright (c) 2013-2024 Michael Rose and contributors

Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
53 changes: 34 additions & 19 deletions README.md
Original file line number Diff line number Diff line change
@@ -2,19 +2,11 @@

[![LICENSE](https://img.shields.io/badge/license-MIT-lightgrey.svg)](https://raw.githubusercontent.com/mmistakes/minimal-mistakes/master/LICENSE)
[![Jekyll](https://img.shields.io/badge/jekyll-%3E%3D%203.7-blue.svg)](https://jekyllrb.com/)
[![Ruby gem](https://img.shields.io/gem/v/minimal-mistakes-jekyll.svg)](https://rubygems.org/gems/minimal-mistakes-jekyll)
[![Tip Me via PayPal](https://img.shields.io/badge/PayPal-tip%20me-green.svg?logo=paypal)](https://www.paypal.me/mmistakes)
[![Donate to this project using Buy Me A Coffee](https://img.shields.io/badge/buy%20me%20a%20coffee-donate-yellow.svg)](https://www.buymeacoffee.com/mmistakes)

Minimal Mistakes is a flexible two-column Jekyll theme, perfect for building personal sites, blogs, and portfolios. As the name implies, styling is purposely minimalistic to be enhanced and customized by you :smile:.

:sparkles: See what's new in the [CHANGELOG](CHANGELOG.md).

**If you enjoy this theme, please consider sponsoring:**

[!["Buy Me A Coffee"](https://user-images.githubusercontent.com/1376749/120938564-50c59780-c6e1-11eb-814f-22a0399623c5.png)](https://www.buymeacoffee.com/mmistakes)
[![Support via PayPal](https://cdn.jsdelivr.net/gh/twolfson/paypal-github-button@1.0.0/dist/button.svg)](https://www.paypal.me/mmistakes)

**Note:** The theme uses the [jekyll-include-cache](https://github.com/benbalter/jekyll-include-cache) plugin which will need to be installed in your `Gemfile` and must be retained in the `plugins` array of `_config.yml`. Otherwise you'll encounter `Unknown tag 'include_cached'` errors at build.

[![Minimal Mistakes live preview][2]][1]
@@ -35,7 +27,7 @@ Minimal Mistakes is a flexible two-column Jekyll theme, perfect for building per
- Optional [header images](https://mmistakes.github.io/minimal-mistakes/docs/layouts/#headers), [custom sidebars](https://mmistakes.github.io/minimal-mistakes/docs/layouts/#sidebars), [table of contents](https://mmistakes.github.io/minimal-mistakes/docs/helpers/#table-of-contents), [galleries](https://mmistakes.github.io/minimal-mistakes/docs/helpers/#gallery), related posts, [breadcrumb links](https://mmistakes.github.io/minimal-mistakes/docs/configuration/#breadcrumb-navigation-beta), [navigation lists](https://mmistakes.github.io/minimal-mistakes/docs/helpers/#navigation-list), and more.
- Commenting support (powered by [Disqus](https://disqus.com/), [Facebook](https://developers.facebook.com/docs/plugins/comments), Google+, [Discourse](https://www.discourse.org/), static-based via [Staticman](https://staticman.net/), [utterances](https://utteranc.es/), and [giscus](https://giscus.app/)).
- [Google Analytics](https://www.google.com/analytics/) support.
- UI localized text in English (default), Arabic (عربي), Brazilian Portuguese (Português brasileiro), Catalan, Chinese, Danish, Dutch, Finnish, French (Français), German (Deutsch), Greek, Hebrew, Hindi (हिंदी), Hungarian, Indonesian, Irish (Gaeilge), Italian (Italiano), Japanese, Korean, Malayalam, Myanmar (Burmese), Nepali (Nepalese), Norwegian (Norsk), Persian (فارسی), Polish, Punjabi (ਪੰਜਾਬੀ), Romanian, Russian, Slovak, Spanish (Español), Swedish, Thai, Turkish (Türkçe), and Vietnamese.
- UI localized text in English (default), Arabic (عربي), Brazilian Portuguese (Português brasileiro), Catalan, Chinese, Czech, Danish, Dutch, Finnish, French (Français), German (Deutsch), Greek, Hebrew, Hindi (हिंदी), Hungarian, Indonesian, Irish (Gaeilge), Italian (Italiano), Japanese, Kiswahili, Korean, Malayalam, Myanmar (Burmese), Nepali (Nepalese), Norwegian (Norsk), Persian (فارسی), Polish, Punjabi (ਪੰਜਾਬੀ), Romanian, Russian, Slovak, Spanish (Español), Swedish, Thai, Turkish (Türkçe), Ukrainian (Українська) and Vietnamese.

## Skins (color variations)

@@ -123,22 +115,44 @@ To install:

2. Add `jekyll-include-cache` to the `plugins` array of your `_config.yml`.

3. Fetch and update bundled gems by running the following [Bundler](http://bundler.io/) command:
3. Fetch and update bundled gems by running the following [Bundler](https://bundler.io/) command:

```bash
bundle
```

4. Add `remote_theme: "mmistakes/minimal-mistakes@4.24.0"` to your `_config.yml` file. Remove any other `theme:` or `remote_theme:` entry.
4. Add `remote_theme: "mmistakes/minimal-mistakes@4.26.2"` to your `_config.yml` file. Remove any other `theme:` or `remote_theme:` entry.

<!--
Dev note: The version number is currently hard-coded in these files:

- package.json
- README.md (this file)
- docs/_data/theme.yml
- docs/_pages/home.md (in Front Matter "excerpt")

`package.json` holds the authoritative version number, and the others can be updated with `bundle exec rake version`.

The following files should also be regenerated:

- _includes/copyright.html, _includes/copyright.js, _sass/minimal-mistakes/_copyright.scss
(Run `bundle exec rake clean` then `bundle exec rake copyright` - all three references `package.json`)
- assets/js/main.min.js (Run `bundle exec rake js`, references `_includes/copyright.js`)

*Tip*: The default Rake task will update all of the above files at once.

Additionally, the license year is hard-coded in these files and are NOT covered by a Rake task:

- README.md (this file, near the end)
- LICENSE
-->

**Looking for an example?** Use the [Minimal Mistakes remote theme starter](https://github.com/mmistakes/mm-github-pages-starter/generate) for the quickest method of getting a GitHub Pages hosted site up and running. Generate a new repository from the starter, replace sample content with your own, and configure as needed.

## Usage

For detailed instructions on how to configure, customize, add/migrate content, and more read the [theme's documentation](https://mmistakes.github.io/minimal-mistakes/docs/quick-start-guide/).

---

## Contributing

Found a typo in the documentation or interested in [fixing a bug](https://github.com/mmistakes/minimal-mistakes/issues)? Then by all means [submit an issue](https://github.com/mmistakes/minimal-mistakes/issues/new) or [pull request](https://help.github.com/articles/using-pull-requests/). If this is your first pull request, it may be helpful to read up on the [GitHub Flow](https://guides.github.com/introduction/flow/) first.
@@ -161,8 +175,6 @@ To set up your environment to develop this theme, run `bundle install`.

To test the theme, run `bundle exec rake preview` and open your browser at `http://localhost:4000/test/`. This starts a Jekyll server using content in the `test/` directory. As modifications are made to the theme and test site, it will regenerate and you should see the changes in the browser after a refresh.

---

## Credits

### Creator
@@ -175,7 +187,7 @@ To test the theme, run `bundle exec rake preview` and open your browser at `http

### Icons + Demo Images:

- [The Noun Project](https://thenounproject.com) -- Garrett Knoll, Arthur Shlain, and [tracy tam](https://thenounproject.com/tracytam)
- [The Noun Project](https://thenounproject.com) - Garrett Knoll, Arthur Shlain, and [tracy tam](https://thenounproject.com/tracytam)
- [Font Awesome](http://fontawesome.io/)
- [Unsplash](https://unsplash.com/)

@@ -192,14 +204,13 @@ To test the theme, run `bundle exec rake preview` and open your browser at `http
- [Gumshoe](https://github.com/cferdinandi/gumshoe)
- [jQuery throttle / debounce](http://benalman.com/projects/jquery-throttle-debounce-plugin/)
- [Lunr](http://lunrjs.com)

---
- [Clipboard.js](https://clipboardjs.com)

## License

The MIT License (MIT)

Copyright (c) 2013-2020 Michael Rose and contributors
Copyright (c) 2013-2024 Michael Rose and contributors

Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
@@ -272,3 +283,7 @@ Pure Liquid Jekyll Table of Contents is distributed under the terms of the [MIT
Minimal Mistakes incorporates [Lunr](http://lunrjs.com),
Copyright (c) 2018 Oliver Nightingale.
Lunr is distributed under the terms of the [MIT License](http://opensource.org/licenses/MIT).

Minimal Mistakes incorporates [clipboard.js](https://clipboardjs.com/),
Copyright (c) 2021 Zeno Rocha.
Clipboard.js is distributed under the terms of the [MIT License](https://opensource.org/licenses/MIT).
135 changes: 133 additions & 2 deletions Rakefile
Original file line number Diff line number Diff line change
@@ -1,6 +1,15 @@
require "bundler/gem_tasks"
require "jekyll"
require "json"
require "listen"
require "rake/clean"
require "shellwords"
require "time"
require "yaml"

task :default => %i[copyright changelog js version]

package_json = JSON.parse(File.read("package.json"))

def listen_ignore_paths(base, options)
[
@@ -65,12 +74,134 @@ task :preview do
puts " Halting auto-regeneration."
exit 0
end

loop { sleep 1000 }
sleep
end
rescue ThreadError
# You pressed Ctrl-C, oh my!
end

Jekyll::Commands::Serve.process(options)
end

task :history => :changelog
task :changelog => "docs/_docs/18-history.md"
file "docs/_docs/18-history.md" => "CHANGELOG.md" do |t|
front_matter = {
title: "History",
classes: "wide",
permalink: "/docs/history/",
excerpt: "Change log of enhancements and bug fixes made to the theme.",
sidebar: {
nav: "docs",
},
last_modified_at: Time.now.iso8601,
toc: false,
}
# https://stackoverflow.com/a/49553523/5958455
front_matter = JSON.parse(JSON.dump(front_matter))
File.open(t.name, "w") do |f|
f.puts front_matter.to_yaml
f.puts "---"
f.puts ""
f.puts "<!--\n Sourced from CHANGELOG.md\n See Rakefile `task :changelog` for details\n-->"
f.puts ""
f.puts "{% raw %}"
# Remove H1
changelog = File.read(t.prerequisites.first)
.gsub(/^# [^\n]*$/m, "")
.gsub(/\(#(\d+)\)$/m, "[#\\1](https://github.com/mmistakes/minimal-mistakes/issues/\\1)")
.strip
f.write changelog
f.puts ""
f.puts "{% endraw %}"
end
end

COPYRIGHT_LINES = [
"Minimal Mistakes Jekyll Theme #{package_json["version"]} by Michael Rose",
"Copyright 2013-#{Time.now.year} Michael Rose - mademistakes.com | @mmistakes",
"Free for personal and commercial use under the MIT license",
"https://github.com/mmistakes/minimal-mistakes/blob/master/LICENSE",
]

COPYRIGHT_FILES = [
"_includes/copyright.html",
"_includes/copyright.js",
"_sass/minimal-mistakes/_copyright.scss",
]

def genenerate_copyright_file(filename, header, prefix, footer)
File.open(filename, "w") do |f|
f.puts header
COPYRIGHT_LINES.each do |line|
f.puts "#{prefix}#{line}"
end
f.puts footer
end
end

file "_includes/copyright.html" => "package.json" do |t|
genenerate_copyright_file(t.name, "<!--", " ", "-->")
end

file "_includes/copyright.js" => "package.json" do |t|
genenerate_copyright_file(t.name, "/*!", " * ", " */")
end

file "_sass/minimal-mistakes/_copyright.scss" => "package.json" do |t|
genenerate_copyright_file(t.name, "/*!", " * ", " */")
end

task :copyright => COPYRIGHT_FILES

CLEAN.include(*COPYRIGHT_FILES)

JS_FILES = ["assets/js/vendor/jquery/jquery-3.6.0.js"] + Dir.glob("assets/js/plugins/*.js") + ["assets/js/_main.js"]
JS_TARGET = "assets/js/main.min.js"
task :js => JS_TARGET
file JS_TARGET => ["_includes/copyright.js"] + JS_FILES do |t|
sh Shellwords.join(%w[npx uglifyjs -c --comments /@mmistakes/ --source-map -m -o] +
[t.name] + t.prerequisites)
end

task :watch_js do
listener = Listen.to(
"assets/js",
ignore: /main\.min\.js$/,
) do |modified, added, removed|
Rake::Task[:js].invoke
end

trap("INT") do
listener.stop
exit 0
end

begin
listener.start
sleep
rescue ThreadError
end
end

task :version => ["docs/_data/theme.yml", "README.md", "docs/_pages/home.md"]

file "docs/_data/theme.yml" => "package.json" do |t|
theme = { "version" => package_json["version"] }
File.open(t.name, "w") do |f|
f.puts "# for use with in-page templates"
f.puts theme.to_yaml
end
end

file "README.md" => "package.json" do |t|
content = File.read(t.name)
content = content.gsub(/(mmistakes\/minimal-mistakes@)[\d.]+/, '\1' + package_json["version"])
File.write(t.name, content)
end

file "docs/_pages/home.md" => "package.json" do |t|
content = File.read(t.name)
content = content.gsub(/(\breleases\/tag\/|Latest release v)[\d.]+/, '\1' + package_json["version"])
File.write(t.name, content)
end
11 changes: 11 additions & 0 deletions _config.yml
Original file line number Diff line number Diff line change
@@ -15,6 +15,7 @@
minimal_mistakes_skin : "default" # "air", "aqua", "contrast", "dark", "dirt", "neon", "mint", "plum", "sunrise"

# Site Settings
rtl : # true, false (default) # turns direction of the page into right to left for RTL languages
locale : "ko-KR"
title : "YoonkieNote"
title_separator : "|"
@@ -29,6 +30,9 @@ logo : # path of logo image to display in the masthead, e.g.
masthead_title : # overrides the website title displayed in the masthead, use " " for no title
breadcrumbs : true # true, false (default)
words_per_minute : 200
enable_copy_code_button : # true, false (default)
copyright : # "copyright" name, defaults to site.title
copyright_url : # "copyright" URL, defaults to site.url
comments:
provider : "disqus" # (default), "disqus", "discourse", "facebook", "staticman", "staticman_v2", "utterances", "giscus", "custom"
disqus:
@@ -50,6 +54,11 @@ comments:
discussion_term : # "pathname" (default), "url", "title", "og:title"
reactions_enabled : # '1' for enabled (default), '0' for disabled
theme : # "light" (default), "dark", "dark_dimmed", "transparent_dark", "preferred_color_scheme"
strict : # 1 for enabled, 0 for disabled (default)
input_position : # "top", "bottom" # The comment input box will be placed above or below the comments
emit_metadata : # 1 for enabled, 0 for disabled (default) # https://github.com/giscus/giscus/blob/main/ADVANCED-USAGE.md#imetadatamessage
lang : # "en" (default)
lazy : # true, false # Loading of the comments will be deferred until the user scrolls near the comments container.
staticman:
branch : # "master"
endpoint : # "https://{your Staticman v3 API}/v3/entry/github/"
@@ -62,6 +71,8 @@ atom_feed:
search : # true, false (default)
search_full_content : # true, false (default)
search_provider : # lunr (default), algolia, google
lunr:
search_within_pages : # true, false (default)
algolia:
application_id : # YOUR_APPLICATION_ID
index_name : # YOUR_INDEX_NAME
52 changes: 25 additions & 27 deletions _data/navigation.yml
Original file line number Diff line number Diff line change
@@ -13,30 +13,28 @@ main:
# - title: "Sitemap"
# url: /sitemap/

# docs:
# - title: Back-end
# childen:
# - title: "Spring"
# url: spring/
# category: "springboot"
# - title: AI
# childen:
# - title: "Deep Learning"
# url: deeplearning/
# category: "딥러닝"
# - title: "Machine Learning"
# url: machinelearning/
# category: "머신러닝"
# - title: 알고리즘
# childen:
# - title: "Algorithm"
# url: algorithm/
# category: "자료구조-알고리즘"
# - title: Git
# childen:
# - title: "Git"
# url: git/
# category: "git"
# - title: AWS
# url: aws/
# category: "AWS"
docs:
- title: Back-end
childen:
- title: "Spring"
url: spring/
category: "springboot"
- title: AI
childen:
- title: "Deep Learning"
url: deeplearning/
category: "딥러닝"
- title: "Machine Learning"
url: machinelearning/
category: "머신러닝"
- title: 알고리즘
childen:
- title: "Algorithm"
url: algorithm/
category: "자료구조-알고리즘"
- title: Git
childen:
- title: "Git"
url: git/
category: "git"

217 changes: 190 additions & 27 deletions _data/ui-text.yml
Original file line number Diff line number Diff line change
@@ -1070,17 +1070,17 @@ da-DK:
# Polish
# ------
pl: &DEFAULT_PL
skip_links :
skip_primary_nav :
skip_content :
skip_footer :
skip_links : "Pomiń linki"
skip_primary_nav : "Przejdź do nawigacji"
skip_content : "Przejdź do treści"
skip_footer : "Przejdź do stopki"
page : "Strona"
pagination_previous : "Poprzednia"
pagination_next : "Następna"
breadcrumb_home_label : "Strona główna"
breadcrumb_separator : "/"
menu_label : "Przełącz menu"
search_label :
search_label : "Przełącz wyszukiwanie"
toc_label : "Spis treści"
ext_link_label : "Link bezpośredni"
less_than : "mniej niż"
@@ -1101,7 +1101,7 @@ pl: &DEFAULT_PL
email_label : "Email"
recent_posts : "Najnowsze wpisy"
undefined_wpm : "Parametr words_per_minute nie został zdefiniowany w _config.yml."
comment_form_info : "Twój adres email nie będzie udostępiony. Wymagane pola są oznaczone"
comment_form_info : "Twój adres email nie będzie udostępiony. Wymagane pola są oznaczone."
comment_form_comment_label : "Skomentuj"
comment_form_md_info : "Markdown jest wspierany"
comment_form_name_label : "Imię"
@@ -1112,8 +1112,11 @@ pl: &DEFAULT_PL
comment_success_msg : "Dziękuję za Twój komentarz! Zostanie dodany po akceptacji."
comment_error_msg : "Niestety wystąpił błąd. Proszę upewnij się, że wszystkie wymagane pola zostały wypełnione i spróbuj ponownie."
loading_label : "Trwa ładowanie strony..."
search_label_text :
search_label_text : "Wprowadź kryteria wyszukiwania..."
search_placeholder_text : "Wprowadź kryteria wyszukiwania..."
search_algolia_no_results : "Brak wyników"
results_found : "Znalezione wyniki"
back_to_top : "Wróć na górę"
pl-PL:
<<: *DEFAULT_PL

@@ -1397,7 +1400,7 @@ fa: &DEFAULT_FA
toc_label : "در این صفحه"
ext_link_label : "لینک مستقیم"
less_than : " "
minute_read : "(طول مطالعه (دقیقه"
minute_read : "دقیقه، طول مطالعه"
share_on_label : "اشتراک گذاری در"
meta_label :
tags_label : "تگ ها: "
@@ -1424,9 +1427,9 @@ fa: &DEFAULT_FA
comment_btn_submitted : "ارسال شد"
comment_success_msg : ".باتشکر از ارسال دیدگاه! پس از تأیید، این دیدگاه در سایت نشان داده خواهد شد"
comment_error_msg : ".متاسفانه در ارسال شما خطایی بود. لطفا مطمئن شوید تمام فیلدهای مورد نیاز تکمیل شده و دوباره امتحان کنید"
loading_label : "...بارگذاری"
loading_label : "بارگذاری..."
search_label_text :
search_placeholder_text : "...عبارت جستجوی خود را وارد کنید"
search_placeholder_text : "عبارت جستجوی خود را وارد کنید..."
search_algolia_no_results :
results_found : "نتایج"
back_to_top : "بازگشت به بالا"
@@ -1697,9 +1700,9 @@ ga-IE:
# -----------------
fi: &DEFAULT_FI
skip_links : "Ohita linkit"
skip_primary_nav : "Hyppää pää navigaatioon"
skip_content : "Hyppää sisältöön"
skip_footer : "Hyppää alareunaan"
skip_primary_nav : "Siirry päävalikkoon"
skip_content : "Siirry sisältöön"
skip_footer : "Siirry alareunaan"
page : "Sivu"
pagination_previous : "Edellinen"
pagination_next : "Seuraava"
@@ -1710,39 +1713,39 @@ fi: &DEFAULT_FI
toc_label : "Tällä sivulla"
ext_link_label : "Suora linkki"
less_than : "vähemmän kuin"
minute_read : "lukuaika"
minute_read : "minuuttia luettavaa"
share_on_label : "Jaa"
meta_label :
tags_label : "Tagit:"
tags_label : "Tunnisteet:"
categories_label : "Kategoriat:"
date_label : "Päivitetty:"
comments_label : "Jätä kommentti"
comments_title : "Kommentit"
more_label : "Lisää"
related_label : "Voit olla kiinnostunut myös"
related_label : "Saatat olla kiinnostunut myös"
follow_label : "Seuraa:"
feed_label : "Syöte"
powered_by : "Voimanlähteenä"
website_label : "Websivu"
email_label : "Email"
recent_posts : "Viimeisimmät postaukset"
powered_by : "Käyttäen"
website_label : "Kotisivu"
email_label : "Sähköposti"
recent_posts : "Viimeisimmät kirjoitukset"
undefined_wpm : "words_per_minute asetusta ei ole määritelty _config.yml tiedostossa"
comment_form_info : "Your email address will not be published. Required fields are marked"
comment_form_info : "Sinun sähköpostiosoitetta ei julkaista. Vaaditut kentät ovat merkittyjä"
comment_form_comment_label : "Kommentti"
comment_form_md_info : "Tukee markdown muotoilua."
comment_form_name_label : "Nimi"
comment_form_email_label : "Email osoite"
comment_form_website_label : "Webbisivu (vapaaehtoinen)"
comment_form_email_label : "Sähköpostiosoite"
comment_form_website_label : "Nettisivu (vapaaehtoinen)"
comment_btn_submit : "Lähetä"
comment_btn_submitted : "Lähetetty"
comment_success_msg : "Kiitos kommentista, se julkaistaan tällä sivulla moderoinnin jälkeen."
comment_error_msg : "Tarkista että olet täyttänyt kaikki kentät ja yritä uudelleen."
comment_success_msg : "Kiitos kommentista, se julkaistaan tällä sivulla tarkastelun jälkeen."
comment_error_msg : "Tapahtui virhe. Tarkista, että olet täyttänyt kaikki kentät ja yritä uudelleen."
loading_label : "Ladataan..."
search_label_text : "Hakusana..."
search_placeholder_text : "Hakusana..."
search_algolia_no_results :
search_algolia_no_results : "Ei hakutuloksia"
results_found : "Tulosta"
back_to_top : "Ylös"
back_to_top : "Siirry ylös"

# Myanmar (Burmese)
# -----------------
@@ -1964,6 +1967,166 @@ ar-AE:
ar-EG:
<<: *DEFAULT_AR

# Kiswahili
# -----------------
sw: &DEFAULT_SW
skip_links : "Ruka viungo"
skip_primary_nav : "Ruka orodha kuu"
skip_content : "Ruka maandiko maakuu"
skip_footer : "Ruka chini"
page : "Ukurasa"
pagination_previous : "Rudi"
pagination_next : "Endelea"
breadcrumb_home_label : "Ukurasa wa kwanza"
breadcrumb_separator : "/"
menu_label : "Wezesha/Zima orodha"
search_label : "Wezesha/Zima kutafuta"
toc_label : "Kwa ukurasa huu"
ext_link_label : "Kiungo mbio"
less_than : "Soma kwa dakikia ndogo kuliko"
minute_read : "Soma kwa dakika"
share_on_label : "Tangaza"
meta_label :
tags_label : "Alama:"
categories_label : "Aina:"
date_label : "Geuzi ya mwisho:"
comments_label : "Wacha maoni"
comments_title : "Maoni"
more_label : "Jifunze zaidi"
related_label : "Pia, utapenda"
follow_label : "Fuata:"
feed_label : "Feed"
powered_by : "Inatumia"
website_label : "Tovuti"
email_label : "Barua pepe"
recent_posts : "Makala juzi"
undefined_wpm : "Ingizo words_per_minute kwa _config.yml haijawekwa"
comment_form_info : "Barua pepe yako haitaonekana. Kuna alama kwa ingizo tunahitaji."
comment_form_comment_label : "Maoni"
comment_form_md_info : "Unaweza kutumia `Markdown`."
comment_form_name_label : "Jina"
comment_form_email_label : "Barua pepe"
comment_form_website_label : "Tovuti (hiari)"
comment_btn_submit : "Tuma maoni"
comment_btn_submitted : "Umetuma"
comment_success_msg : "Asante kwa maoni yako! Itaonekana ikiridhiwa."
comment_error_msg : "Pole, kuna makosa kwa ingizo yako. Tafadhali angalia umeandika kwa ingizo zote zinahitaji, na jaribu tena."
loading_label : "Inapakiwa..."
search_label_text : "Ingiza neno unatafuta..."
search_placeholder_text : "Ingiza neno unatafuta..."
search_algolia_no_results : "Hakuna matokeo"
results_found : "Tumepata"
back_to_top : "Rudi juu"
sw-KE:
<<: *DEFAULT_SW
sw-TZ:
<<: *DEFAULT_SW

# Ukrainian / Українська
# -----------------
uk: &DEFAULT_UK
skip_links : "Посилання для переходу"
skip_primary_nav : "Перейти до основної навігації"
skip_content : "Перейти до змісту"
skip_footer : "Перейти до нижнього колонтитула"
page : "Сторінка"
pagination_previous : "Попередня"
pagination_next : "Наступна"
breadcrumb_home_label : "Головна"
breadcrumb_separator : "/"
menu_label : "Випадаюче меню"
search_label : "Пошук"
toc_label : "Зміст"
ext_link_label : "Пряме посилання"
less_than : "менше ніж"
minute_read : "хв. на чітання"
share_on_label : "Поділитися"
meta_label :
tags_label : "Мітки:"
categories_label : "Розділи:"
date_label : "Дата зміни:"
comments_label : "Залишити коментар"
comments_title : "Коментарі"
more_label : "Читати далі"
related_label : "Вам також може сподобатись"
follow_label : "Зв'язатися зі мною:"
feed_label : "RSS-стрічка"
powered_by : "Сайт працює на"
website_label : "Сайт"
email_label : "Электронна пошта"
recent_posts : "Останні записи"
undefined_wpm : "Не визначено параметр words_per_minute в _config.yml"
comment_form_info : "Вашу адресу електронної пошти не буде опубліковано. Обов'язкові поля позначені"
comment_form_comment_label : "Коментар"
comment_form_md_info : "Підтримується синтаксис Markdown."
comment_form_name_label : "Ім'я"
comment_form_email_label : "Електронна пошта"
comment_form_website_label : "Посилання на сайт (необов'язково)"
comment_btn_submit : "Залишити коментар"
comment_btn_submitted : "Відправлено"
comment_success_msg : "Дякую за Ваш коментар! Його буде опубліковано на сайті після перевірки."
comment_error_msg : "На жаль, сталася помилка з надсиланням коментаря. Будь ласка, переконайтеся, що всі обов'язкові поля заповнені та спробуйте знову."
loading_label : "Відправка..."
search_label_text : "Введіть пошуковий запит..."
search_placeholder_text : "Введіть пошуковий запит..."
search_algolia_no_results :
results_found : "Знайдено"
uk-UA:
<<: *DEFAULT_UK

# Czech / čeština
# -----------------
cs: &DEFAULT_CS
skip_links : "Rychlé odkazy"
skip_primary_nav : "Přejít na hlavní navigace"
skip_content : "Přejít na obsah"
skip_footer : "Přejít na zápatí"
page : "Stránka"
pagination_previous : "Předchozí"
pagination_next : "Další"
breadcrumb_home_label : "Domů"
breadcrumb_separator : "/"
menu_label : "Přepnout zobrazení menu"
search_label : "Přepnout zobrazení vyhledávání"
toc_label : "Na této stránce"
ext_link_label : "Přímý odkaz"
less_than : "méně než"
minute_read : "minut"
share_on_label : "Sdílet"
meta_label :
tags_label : "Štítky:"
categories_label : "Rubriky:"
date_label : "Aktualizováno:"
comments_label : "Okomentovat"
comments_title : "Komentáře"
more_label : "Zjistit více"
related_label : "Může se vám také líbit"
follow_label : "Sledovat:"
feed_label : "Zdroj"
powered_by : "Používáme"
website_label : "Web"
email_label : "E-mail"
recent_posts : "Nejnovější příspěvky"
undefined_wpm : "V souboru _config.yml chybí parametr words_per_minute"
comment_form_info : "Vaše e-mailová adresa nebude zveřejněna. Povinná pole jsou označena"
comment_form_comment_label : "Komentář"
comment_form_md_info : "Podporuje markdown."
comment_form_name_label : "Jméno"
comment_form_email_label : "E-mailová adresa"
comment_form_website_label : "Web (volitelné)"
comment_btn_submit : "Odeslat komentář"
comment_btn_submitted : "Odesláno"
comment_success_msg : "Děkujeme za komentář. Na stránce se objeví jakmile projde schválením."
comment_error_msg : "Odeslání se nezdařilo. Zkontrolujte, že jste vyplnili všechna povinná pole a zkuste to znovu."
loading_label : "Načítání..."
search_label_text : "Zadejte vyhledávání..."
search_placeholder_text : "Zadejte vyhledávání..."
search_algolia_no_results : "Žádné výsledky"
results_found : "Nalezené výsledky"
back_to_top : "Na začátek stránky"
cs-CZ:
<<: *DEFAULT_CS

# Another locale
# --------------
#
Empty file added _includes/after-content.html
Empty file.
2 changes: 1 addition & 1 deletion _includes/archive-single.html
Original file line number Diff line number Diff line change
@@ -11,7 +11,7 @@
{% endif %}

<div class="{{ include.type | default: 'list' }}__item">
<article class="archive__item" itemscope itemtype="https://schema.org/CreativeWork">
<article class="archive__item" itemscope itemtype="https://schema.org/CreativeWork"{% if post.locale %} lang="{{ post.locale }}"{% endif %}>
{% if include.type == "grid" and teaser %}
<div class="archive__item-teaser">
<img src="{{ teaser | relative_url }}" alt="">
6 changes: 3 additions & 3 deletions _includes/author-profile.html
Original file line number Diff line number Diff line change
@@ -34,7 +34,7 @@ <h3 class="author__name p-name" itemprop="name">
{% if author.links %}
{% for link in author.links %}
{% if link.label and link.url %}
<li><a href="{{ link.url }}" rel="nofollow noopener noreferrer me"><i class="{{ link.icon | default: 'fas fa-link' }}" aria-hidden="true"></i><span class="label">{{ link.label }}</span></a></li>
<li><a href="{{ link.url }}" rel="nofollow noopener noreferrer me"{% if link.url contains 'http' %} itemprop="sameAs"{% endif %}><i class="{{ link.icon | default: 'fas fa-link' }}" aria-hidden="true"></i><span class="label">{{ link.label }}</span></a></li>
{% endif %}
{% endfor %}
{% endif %}
@@ -59,7 +59,7 @@ <h3 class="author__name p-name" itemprop="name">
{% if author.keybase %}
<li>
<a href="https://keybase.io/{{ author.keybase }}" itemprop="sameAs" rel="nofollow noopener noreferrer me">
<i class="fas fa-fw fa-key" aria-hidden="true"></i><span class="label">Keybase</span>
<i class="fab fa-fw fa-keybase" aria-hidden="true"></i><span class="label">Keybase</span>
</a>
</li>
{% endif %}
@@ -243,4 +243,4 @@ <h3 class="author__name p-name" itemprop="name">
{% include author-profile-custom-links.html %}
</ul>
</div>
</div>
</div>
Empty file added _includes/before-related.html
Empty file.
4 changes: 2 additions & 2 deletions _includes/breadcrumbs.html
Original file line number Diff line number Diff line change
@@ -26,11 +26,11 @@
<span class="sep">{{ site.data.ui-text[site.locale].breadcrumb_separator | default: "/" }}</span>
{% endif %}
{% if forloop.last %}
<li class="current">{{ page.title }}</li>
<li class="current"{% if page.locale %} lang="{{ page.locale }}"{% endif %}>{{ page.title }}</li>
{% else %}
{% assign i = i | plus: 1 %}
<li itemprop="itemListElement" itemscope itemtype="https://schema.org/ListItem">
<a href="{{ crumb | downcase | replace: '%20', '-' | prepend: path_type | prepend: crumb_path | relative_url }}" itemprop="item"><span itemprop="name">{{ crumb | replace: '-', ' ' | replace: '%20', ' ' | capitalize }}</span></a>
<a href="{{ crumb | downcase | replace: '%20', '-' | prepend: path_type | prepend: crumb_path | relative_url }}" itemprop="item"><span itemprop="name">{{ crumb | url_decode | replace: '-', ' ' | capitalize }}</span></a>
<meta itemprop="position" content="{{ i }}" />
</li>
<span class="sep">{{ site.data.ui-text[site.locale].breadcrumb_separator | default: "/" }}</span>
3 changes: 0 additions & 3 deletions _includes/browser-upgrade.html

This file was deleted.

12 changes: 11 additions & 1 deletion _includes/comments-providers/giscus.html
Original file line number Diff line number Diff line change
@@ -9,16 +9,26 @@
}

var script = document.createElement('script');

script.setAttribute('src', 'https://giscus.app/client.js');
script.setAttribute('data-repo', '{{ site.repository | downcase }}');
script.setAttribute('data-repo-id', '{{ site.comments.giscus.repo_id }}');
script.setAttribute('data-category', '{{ site.comments.giscus.category_name }}');
script.setAttribute('data-category-id', '{{ site.comments.giscus.category_id }}');
script.setAttribute('data-mapping', '{{ site.comments.giscus.discussion_term | default: "pathname" }}');
script.setAttribute('data-strict', '{{ site.comments.giscus.strict | default: 0 }}');
script.setAttribute('data-reactions-enabled', '{{ site.comments.giscus.reactions_enabled | default: 1 }}');
script.setAttribute('data-emit-metadata', '{{ site.comments.giscus.emit_metadata | default: 0 }}');
script.setAttribute('data-input-position', '{{ site.comments.giscus.input_position | default: "top" }}');
script.setAttribute('data-theme', '{{ site.comments.giscus.theme | default: "light" }}');
script.setAttribute('data-lang', '{{ site.comments.giscus.lang | default: "en" }}');
{% if site.comments.giscus.lazy %}
script.setAttribute('data-loading', 'lazy');
{% endif %}
script.setAttribute('crossorigin', 'anonymous');

script.setAttribute('async', '');

commentContainer.appendChild(script);
})();
</script>
</script>
6 changes: 6 additions & 0 deletions _includes/copyright.html
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
<!--
Minimal Mistakes Jekyll Theme 4.26.2 by Michael Rose
Copyright 2013-2024 Michael Rose - mademistakes.com | @mmistakes
Free for personal and commercial use under the MIT license
https://github.com/mmistakes/minimal-mistakes/blob/master/LICENSE
-->
6 changes: 6 additions & 0 deletions _includes/copyright.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
/*!
* Minimal Mistakes Jekyll Theme 4.26.2 by Michael Rose
* Copyright 2013-2024 Michael Rose - mademistakes.com | @mmistakes
* Free for personal and commercial use under the MIT license
* https://github.com/mmistakes/minimal-mistakes/blob/master/LICENSE
*/
6 changes: 2 additions & 4 deletions _includes/documents-collection.html
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
{% assign entries = site[include.collection] %}
{% assign entries = site[include.collection] | where_exp: "post", "post.hidden != true" %}

{% if include.sort_by %}
{% assign entries = entries | sort: include.sort_by %}
@@ -9,7 +9,5 @@
{% endif %}

{%- for post in entries -%}
{%- unless post.hidden -%}
{% include archive-single.html %}
{%- endunless -%}
{% include archive-single.html %}
{%- endfor -%}
2 changes: 2 additions & 0 deletions _includes/figure
Original file line number Diff line number Diff line change
@@ -1,6 +1,8 @@
<figure class="{{ include.class }}">
{%- if include.popup -%}<a href="{{ include.image_path | relative_url }}" class="image-popup"{% if include.caption %} title="{{ include.caption | markdownify | strip_html }}"{% endif %}>{%- endif -%}
<img src="{{ include.image_path | relative_url }}"
alt="{% if include.alt %}{{ include.alt }}{% endif %}">
{%- if include.popup -%}</a>{%- endif -%}
{%- if include.caption -%}
<figcaption>
{{ include.caption | markdownify | remove: "<p>" | remove: "</p>" }}
2 changes: 1 addition & 1 deletion _includes/footer.html
Original file line number Diff line number Diff line change
@@ -18,4 +18,4 @@
</ul>
</div>

<div class="page__footer-copyright">&copy; {{ site.time | date: '%Y' }} {{ site.name | default: site.title }}. {{ site.data.ui-text[site.locale].powered_by | default: "Powered by" }} <a href="https://jekyllrb.com" rel="nofollow">Jekyll</a> &amp; <a href="https://mademistakes.com/work/minimal-mistakes-jekyll-theme/" rel="nofollow">Minimal Mistakes</a>.</div>
<div class="page__footer-copyright">&copy; {{ site.time | date: '%Y' }} <a href="{{ site.copyright_url | default: site.url }}">{{ site.copyright | default: site.title }}</a>. {{ site.data.ui-text[site.locale].powered_by | default: "Powered by" }} <a href="https://jekyllrb.com" rel="nofollow">Jekyll</a> &amp; <a href="https://mademistakes.com/work/jekyll-themes/minimal-mistakes/" rel="nofollow">Minimal Mistakes</a>.</div>
9 changes: 6 additions & 3 deletions _includes/head.html
Original file line number Diff line number Diff line change
@@ -6,17 +6,20 @@
<link href="{% if site.atom_feed.path %}{{ site.atom_feed.path }}{% else %}{{ '/feed.xml' | relative_url }}{% endif %}" type="application/atom+xml" rel="alternate" title="{{ site.title }} Feed">
{% endunless %}

<!-- https://t.co/dKP3o1e -->
{%- comment %} https://docs.google.com/presentation/d/1rmxwWa9P6_xHqonmh5ONXRS-jPc5XKbnv99Rjkhe04s/present {% endcomment -%}
<meta name="viewport" content="width=device-width, initial-scale=1.0">

<script>
document.documentElement.className = document.documentElement.className.replace(/\bno-js\b/g, '') + ' js ';
{% if site.enable_copy_code_button -%}
window.enable_copy_code_button = true;
{%- endif %}
</script>

<!-- For all browsers -->
<link rel="stylesheet" href="{{ '/assets/css/main.css' | relative_url }}">
<link rel="preload" href="https://cdn.jsdelivr.net/npm/@fortawesome/fontawesome-free@5/css/all.min.css" as="style" onload="this.onload=null;this.rel='stylesheet'">
<noscript><link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/@fortawesome/fontawesome-free@5/css/all.min.css"></noscript>
<link rel="preload" href="https://cdn.jsdelivr.net/npm/@fortawesome/fontawesome-free@latest/css/all.min.css" as="style" onload="this.onload=null;this.rel='stylesheet'">
<noscript><link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/@fortawesome/fontawesome-free@latest/css/all.min.css"></noscript>

{% if site.head_scripts %}
{% for script in site.head_scripts %}
6 changes: 5 additions & 1 deletion _includes/masthead.html
Original file line number Diff line number Diff line change
@@ -14,7 +14,11 @@
<ul class="visible-links">
{%- for link in site.data.navigation.main -%}
<li class="masthead__menu-item">
<a href="{{ link.url | relative_url }}"{% if link.description %} title="{{ link.description }}"{% endif %}>{{ link.title }}</a>
<a
href="{{ link.url | relative_url }}"
{% if link.description %} title="{{ link.description }}"{% endif %}
{% if link.target %} target="{{ link.target }}"{% endif %}
>{{ link.title }}</a>
</li>
{%- endfor -%}
</ul>
37 changes: 18 additions & 19 deletions _includes/nav_list
Original file line number Diff line number Diff line change
@@ -1,27 +1,26 @@
{% assign navigation = site.data.navigation[include.nav] %}

<nav class="nav__list">
{% if page.sidebar.title %}<h3 class="nav__title" style="padding-left: 0;">{{ page.sidebar.title }}</h3>{% endif %}
<input id="ac-toc" name="accordion-toc" type="checkbox" />
<label for="ac-toc">{{ site.data.ui-text[site.locale].menu_label | default: "Toggle Menu" }}</label>
<ul class="nav__items">
{% for nav in navigation %}
<li>
{% if nav.url %}
<a href="{{ nav.url | relative_url }}"><span class="nav__sub-title">{{ nav.title }}</span></a>
{% else %}
<span class="nav__sub-title">{{ nav.title }}</span>
{% endif %}

{% if nav.children != null %}
<ul>
{% for child in nav.children %}
{% assign category = site.categories[child.category] | where_exp: "item", "item.hidden != true" %}
<li><a href="{{ child.url | relative_url }}"{% if child.url == page.url %} class="active"{% endif %}>{{ child.title }} ({{ category.size }})</a></li>
{% endfor %}
</ul>
{% endif %}
</li>
{% for navname in include.nav %}
{% assign navigation = site.data.navigation[navname] %}
{% for nav in navigation %}
<li>
{% if nav.url %}
<a href="{{ nav.url | relative_url }}"><span class="nav__sub-title">{{ nav.title }}</span></a>
{% else %}
<span class="nav__sub-title">{{ nav.title }}</span>
{% endif %}
{% if nav.children != null %}
<ul>
{% for child in nav.children %}
<li><a href="{{ child.url | relative_url }}"{% if child.url == page.url %} class="active"{% endif %}>{{ child.title }}</a></li>
{% endfor %}
</ul>
{% endif %}
</li>
{% endfor %}
{% endfor %}
</ul>
</nav>
4 changes: 1 addition & 3 deletions _includes/page__hero.html
Original file line number Diff line number Diff line change
@@ -36,14 +36,12 @@ <h1 id="page-title" class="page__title" itemprop="headline">
<p class="page__lead">{{ page.excerpt | markdownify | remove: "<p>" | remove: "</p>" }}</p>
{% endif %}
{% include page__meta.html %}
{% if page.header.cta_url %}
<p><a href="{{ page.header.cta_url | relative_url }}" class="btn btn--light-outline btn--large">{{ page.header.cta_label | default: site.data.ui-text[site.locale].more_label | default: "Learn More" }}</a></p>
{% endif %}
{% if page.header.actions %}
<p>
{% for action in page.header.actions %}
<a href="{{ action.url | relative_url }}" class="btn btn--light-outline btn--large">{{ action.label | default: site.data.ui-text[site.locale].more_label | default: "Learn More" }}</a>
{% endfor %}
</p>
{% endif %}
</div>
{% else %}
11 changes: 11 additions & 0 deletions _includes/page__related.html
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
{% assign posts = include.posts | where_exp: "post", "post.hidden != true" %}
<div class="page__related">
{% include before-related.html %}
<h2 class="page__related-title">{{ site.data.ui-text[site.locale].related_label | default: "You May Also Enjoy" }}</h2>
<div class="grid__wrapper">
{% for post in posts limit:4 %}
{% if post.id == page.id %}{% continue %}{% endif %}
{% include archive-single.html type="grid" %}
{% endfor %}
</div>
</div>
70 changes: 70 additions & 0 deletions _includes/paginator-v1.html
Original file line number Diff line number Diff line change
@@ -0,0 +1,70 @@
{% if paginator.total_pages > 1 %}
<nav class="pagination">
{% assign paginate_path_last = site.paginate_path | split: '/' | last %}
{% assign first_page_path = paginator.first_page_path | default: site.paginate_path | replace: paginate_path_last, '' | replace: '//', '/' | relative_url %}
<ul>
{% comment %} Link for previous page {% endcomment %}
{% if paginator.previous_page %}
{% if paginator.previous_page == 1 %}
<li><a href="{{ first_page_path }}">{{ site.data.ui-text[site.locale].pagination_previous | default: "Previous" }}</a></li>
{% else %}
<li><a href="{{ site.paginate_path | replace: ':num', paginator.previous_page | replace: '//', '/' | relative_url }}">{{ site.data.ui-text[site.locale].pagination_previous | default: "Previous" }}</a></li>
{% endif %}
{% else %}
<li><a href="#" class="disabled"><span aria-hidden="true">{{ site.data.ui-text[site.locale].pagination_previous | default: "Previous" }}</span></a></li>
{% endif %}

{% comment %} First page {% endcomment %}
{% if paginator.page == 1 %}
<li><a href="#" class="disabled current">1</a></li>
{% else %}
<li><a href="{{ first_page_path }}">1</a></li>
{% endif %}

{% assign page_start = 2 %}
{% if paginator.page > 4 %}
{% assign page_start = paginator.page | minus: 2 %}
{% comment %} Ellipsis for truncated links {% endcomment %}
<li><a href="#" class="disabled">&hellip;</a></li>
{% endif %}

{% assign page_end = paginator.total_pages | minus: 1 %}
{% assign pages_to_end = paginator.total_pages | minus: paginator.page %}
{% if pages_to_end > 4 %}
{% assign page_end = paginator.page | plus: 2 %}
{% endif %}

{% for index in (page_start..page_end) %}
{% if index == paginator.page %}
<li><a href="{{ site.paginate_path | replace: ':num', index | replace: '//', '/' | relative_url }}" class="disabled current">{{ index }}</a></li>
{% else %}
{% comment %} Distance from current page and this link {% endcomment %}
{% assign dist = paginator.page | minus: index %}
{% if dist < 0 %}
{% comment %} Distance must be a positive value {% endcomment %}
{% assign dist = 0 | minus: dist %}
{% endif %}
<li><a href="{{ site.paginate_path | replace: ':num', index | relative_url }}">{{ index }}</a></li>
{% endif %}
{% endfor %}

{% comment %} Ellipsis for truncated links {% endcomment %}
{% if pages_to_end > 3 %}
<li><a href="#" class="disabled">&hellip;</a></li>
{% endif %}

{% if paginator.page == paginator.total_pages %}
<li><a href="#" class="disabled current">{{ paginator.page }}</a></li>
{% else %}
<li><a href="{{ site.paginate_path | replace: ':num', paginator.total_pages | replace: '//', '/' | relative_url }}">{{ paginator.total_pages }}</a></li>
{% endif %}

{% comment %} Link next page {% endcomment %}
{% if paginator.next_page %}
<li><a href="{{ site.paginate_path | replace: ':num', paginator.next_page | replace: '//', '/' | relative_url }}">{{ site.data.ui-text[site.locale].pagination_next | default: "Next" }}</a></li>
{% else %}
<li><a href="#" class="disabled"><span aria-hidden="true">{{ site.data.ui-text[site.locale].pagination_next | default: "Next" }}</span></a></li>
{% endif %}
</ul>
</nav>
{% endif %}
68 changes: 68 additions & 0 deletions _includes/paginator-v2.html
Original file line number Diff line number Diff line change
@@ -0,0 +1,68 @@
<nav class="pagination">
<ul>
{% comment %} Link for previous page {% endcomment %}
{% if paginator.previous_page %}
{% if paginator.previous_page == 1 %}
<li><a href="{{ paginator.first_page_path | relative_url }}">{{ site.data.ui-text[site.locale].pagination_previous | default: "Previous" }}</a></li>
{% else %}
<li><a href="{{ paginator.previous_page_path | relative_url }}">{{ site.data.ui-text[site.locale].pagination_previous | default: "Previous" }}</a></li>
{% endif %}
{% else %}
<li><a href="#" class="disabled"><span aria-hidden="true">{{ site.data.ui-text[site.locale].pagination_previous | default: "Previous" }}</span></a></li>
{% endif %}

{% comment %} Determine whether the first page and the last page are already included in trail {% endcomment %}
{% for trail in paginator.page_trail %}
{% if trail.num == paginator.first_page %}
{% assign has_first_page = true %}
{% elsif trail.num == paginator.last_page %}
{% assign has_last_page = true %}
{% endif %}
{% endfor %}

{% comment %} First page {% endcomment %}
{% unless has_first_page %}
{% if paginator.page == 1 %}
<li><a href="#" class="disabled current">1</a></li>
{% else %}
<li><a href="{{ paginator.first_page_path | relative_url }}">1</a></li>
{% endif %}
{% endunless %}

{% comment %} Ellipsis for truncated links {% endcomment %}
{% assign ellipsis_start = paginator.first_page | plus: 1 %}
{% if paginator.page_trail.first.num > ellipsis_start %}
<li><a href="#" class="disabled">&hellip;</a></li>
{% endif %}

{% comment %} Main pagination trail {% endcomment %}
{% for trail in paginator.page_trail %}
{% if paginator.page == trail.num %}
<li><a href="{{ trail.path | remove: 'index.html' | relative_url }}" class="disabled current">{{ trail.num }}</a></li>
{% else %}
<li><a href="{{ trail.path | remove: 'index.html' | relative_url }}">{{ trail.num }}</a></li>
{% endif %}
{% endfor %}

{% comment %} Ellipsis for truncated links {% endcomment %}
{% assign ellipsis_end = paginator.last_page | minus: 1 %}
{% if paginator.page_trail.last.num < ellipsis_end %}
<li><a href="#" class="disabled">&hellip;</a></li>
{% endif %}

{% unless has_last_page %}
{% if paginator.page == paginator.total_pages %}
<li><a href="#" class="disabled current">{{ paginator.page }}</a></li>
{% else %}
<li><a href="{{ paginator.last_page_path | remove: 'index.html' | relative_url }}">{{ paginator.total_pages }}</a></li>
{% endif %}
{% endunless %}

{% comment %} Link next page {% endcomment %}
{% if paginator.next_page %}
<li><a href="{{ paginator.next_page_path | remove: 'index.html' | relative_url }}">{{ site.data.ui-text[site.locale].pagination_next | default: "Next" }}</a></li>
{% else %}
<li><a href="#" class="disabled"><span aria-hidden="true">{{ site.data.ui-text[site.locale].pagination_next | default: "Next" }}</span></a></li>
{% endif %}
</ul>
</nav>
72 changes: 5 additions & 67 deletions _includes/paginator.html
Original file line number Diff line number Diff line change
@@ -1,69 +1,7 @@
{% if paginator.total_pages > 1 %}
<nav class="pagination">
{% assign first_page_path = paginator.first_page_path | default: site.paginate_path | replace: 'page:num', '' | replace: '//', '/' | relative_url %}
<ul>
{% comment %} Link for previous page {% endcomment %}
{% if paginator.previous_page %}
{% if paginator.previous_page == 1 %}
<li><a href="{{ first_page_path }}">{{ site.data.ui-text[site.locale].pagination_previous | default: "Previous" }}</a></li>
{% else %}
<li><a href="{{ site.paginate_path | replace: ':num', paginator.previous_page | replace: '//', '/' | relative_url }}">{{ site.data.ui-text[site.locale].pagination_previous | default: "Previous" }}</a></li>
{% endif %}
{% else %}
<li><a href="#" class="disabled"><span aria-hidden="true">{{ site.data.ui-text[site.locale].pagination_previous | default: "Previous" }}</span></a></li>
{% endif %}

{% comment %} First page {% endcomment %}
{% if paginator.page == 1 %}
<li><a href="#" class="disabled current">1</a></li>
{% else %}
<li><a href="{{ first_page_path }}">1</a></li>
{% endif %}

{% assign page_start = 2 %}
{% if paginator.page > 4 %}
{% assign page_start = paginator.page | minus: 2 %}
{% comment %} Ellipsis for truncated links {% endcomment %}
<li><a href="#" class="disabled">&hellip;</a></li>
{% endif %}

{% assign page_end = paginator.total_pages | minus: 1 %}
{% assign pages_to_end = paginator.total_pages | minus: paginator.page %}
{% if pages_to_end > 4 %}
{% assign page_end = paginator.page | plus: 2 %}
{% endif %}

{% for index in (page_start..page_end) %}
{% if index == paginator.page %}
<li><a href="{{ site.paginate_path | replace: ':num', index | replace: '//', '/' | relative_url }}" class="disabled current">{{ index }}</a></li>
{% else %}
{% comment %} Distance from current page and this link {% endcomment %}
{% assign dist = paginator.page | minus: index %}
{% if dist < 0 %}
{% comment %} Distance must be a positive value {% endcomment %}
{% assign dist = 0 | minus: dist %}
{% endif %}
<li><a href="{{ site.paginate_path | replace: ':num', index | relative_url }}">{{ index }}</a></li>
{% endif %}
{% endfor %}

{% comment %} Ellipsis for truncated links {% endcomment %}
{% if pages_to_end > 3 %}
<li><a href="#" class="disabled">&hellip;</a></li>
{% endif %}

{% if paginator.page == paginator.total_pages %}
<li><a href="#" class="disabled current">{{ paginator.page }}</a></li>
{% else %}
<li><a href="{{ site.paginate_path | replace: ':num', paginator.total_pages | replace: '//', '/' | relative_url }}">{{ paginator.total_pages }}</a></li>
{% endif %}

{% comment %} Link next page {% endcomment %}
{% if paginator.next_page %}
<li><a href="{{ site.paginate_path | replace: ':num', paginator.next_page | replace: '//', '/' | relative_url }}">{{ site.data.ui-text[site.locale].pagination_next | default: "Next" }}</a></li>
{% else %}
<li><a href="#" class="disabled"><span aria-hidden="true">{{ site.data.ui-text[site.locale].pagination_next | default: "Next" }}</span></a></li>
{% endif %}
</ul>
</nav>
{% if site.paginate %}
{% include paginator-v1.html %}
{% elsif site.pagination.enabled %}
{% include paginator-v2.html %}
{% endif %}
{% endif %}
7 changes: 3 additions & 4 deletions _includes/posts-category.html
Original file line number Diff line number Diff line change
@@ -1,5 +1,4 @@
{%- for post in site.categories[include.taxonomy] -%}
{%- unless post.hidden -%}
{% include archive-single.html %}
{%- endunless -%}
{% assign posts = site.categories[include.taxonomy] | where_exp: "post", "post.hidden != true" %}
{%- for post in posts -%}
{% include archive-single.html %}
{%- endfor -%}
7 changes: 3 additions & 4 deletions _includes/posts-tag.html
Original file line number Diff line number Diff line change
@@ -1,5 +1,4 @@
{%- for post in site.tags[include.taxonomy] -%}
{%- unless post.hidden -%}
{% include archive-single.html %}
{%- endunless -%}
{% assign posts = site.tags[include.taxonomy] | where_exp: "post", "post.hidden != true" %}
{%- for post in posts -%}
{% include archive-single.html %}
{%- endfor -%}
37 changes: 37 additions & 0 deletions _includes/posts-taxonomy.html
Original file line number Diff line number Diff line change
@@ -0,0 +1,37 @@
{% assign items_max = 0 %}
{% for item in include.taxonomies %}
{% if item[1].size > items_max %}
{% assign items_max = item[1].size %}
{% endif %}
{% endfor %}

<ul class="taxonomy__index">
{% for i in (1..items_max) reversed %}
{% for item in include.taxonomies %}
{% if item[1].size == i %}
<li>
<a href="#{{ item[0] | slugify }}">
<strong>{{ item[0] }}</strong> <span class="taxonomy__count">{{ i }}</span>
</a>
</li>
{% endif %}
{% endfor %}
{% endfor %}
</ul>

{% assign entries_layout = page.entries_layout | default: 'list' %}
{% for i in (1..items_max) reversed %}
{% for taxonomy in include.taxonomies %}
{% if taxonomy[1].size == i %}
<section id="{{ taxonomy[0] | slugify }}" class="taxonomy__section">
<h2 class="archive__subtitle">{{ taxonomy[0] }}</h2>
<div class="entries-{{ entries_layout }}">
{% for post in taxonomy.last %}
{% include archive-single.html type=entries_layout %}
{% endfor %}
</div>
<a href="#page-title" class="back-to-top">{{ site.data.ui-text[site.locale].back_to_top | default: 'Back to Top' }} &uarr;</a>
</section>
{% endif %}
{% endfor %}
{% endfor %}
16 changes: 16 additions & 0 deletions _includes/schema.html
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
<script type="application/ld+json">
{
"@context": "https://schema.org",
{% if site.social.type == "Organization" -%}
"@type": "Organization",
"url": {{ '/' | absolute_url | jsonify }}{% if site.og_image %},
"logo": {{ site_og_image | jsonify }}{% endif %}{% if site.social.links %},
"sameAs": {{ site.social.links | jsonify }}{% endif %}
{%- else -%}
"@type": "Person",
"name": {{ site.social.name | default: site.name | jsonify }},
"url": {{ '/' | absolute_url | jsonify }}{% if site.social.links %},
"sameAs": {{ site.social.links | jsonify }}{% endif %}
{%- endif %}
}
</script>
123 changes: 72 additions & 51 deletions _includes/search/algolia-search-scripts.html
Original file line number Diff line number Diff line change
@@ -1,60 +1,81 @@
<!-- Including InstantSearch.js library and styling -->
<script src="https://cdn.jsdelivr.net/npm/instantsearch.js@2.3.3/dist/instantsearch.min.js"></script>
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/instantsearch.js@2.3.3/dist/instantsearch.min.css">
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/instantsearch.js@2.3.3/dist/instantsearch-theme-algolia.min.css">

<script>
// Instanciating InstantSearch.js with Algolia credentials
const search = instantsearch({
appId: '{{ site.algolia.application_id }}',
apiKey: '{{ site.algolia.search_only_api_key }}',
indexName: '{{ site.algolia.index_name }}',
searchParameters: {
restrictSearchableAttributes: [
'title',
'content'
]
}
});
// Including InstantSearch.js library and styling
const loadSearch = function() {
const loadCSS = function(src) {
var link = document.createElement('link');
link.rel = 'stylesheet';
link.type = 'text/css';
link.href = src;
link.media = 'all';
document.head.appendChild(link);
};

var script = document.createElement('script');
script.setAttribute("type", "text/javascript");
script.setAttribute("src", "https://cdn.jsdelivr.net/npm/instantsearch.js@2.3.3/dist/instantsearch.min.js");
script.addEventListener("load", function() {
// Instantiating InstantSearch.js with Algolia credentials
const search = instantsearch({
appId: '{{ site.algolia.application_id }}',
apiKey: '{{ site.algolia.search_only_api_key }}',
indexName: '{{ site.algolia.index_name }}',
searchParameters: {
restrictSearchableAttributes: ['title', 'content']
}
});

const hitTemplate = function(hit) {
const url = hit.url;
const hightlight = hit._highlightResult;
const title = hightlight.title && hightlight.title.value || "";
const content = hightlight.html && hightlight.html.value || "";

return `
<div class="list__item">
<article class="archive__item" itemscope itemtype="https://schema.org/CreativeWork">
<h2 class="archive__item-title" itemprop="headline"><a href="{{ site.baseurl }}${url}">${title}</a></h2>
<div class="archive__item-excerpt" itemprop="description">${content}</div>
</article>
</div>
`;
}

const hitTemplate = function(hit) {
const url = hit.url;
const title = hit._highlightResult.title.value;
const content = hit._highlightResult.html.value;

return `
<div class="list__item">
<article class="archive__item" itemscope itemtype="https://schema.org/CreativeWork">
<h2 class="archive__item-title" itemprop="headline"><a href="{{ site.baseurl }}${url}">${title}</a></h2>
<div class="archive__item-excerpt" itemprop="description">${content}</div>
</article>
</div>
`;
}

// Adding searchbar and results widgets
search.addWidget(
instantsearch.widgets.searchBox({
container: '.search-searchbar',
{% unless site.algolia.powered_by == false %}poweredBy: true,{% endunless %}
placeholder: '{{ site.data.ui-text[site.locale].search_placeholder_text | default: "Enter your search term..." }}'
})
);
search.addWidget(
instantsearch.widgets.hits({
container: '.search-hits',
templates: {
item: hitTemplate,
empty: '{{ site.data.ui-text[site.locale].search_algolia_no_results | default: "No results" }}',
// Adding searchbar and results widgets
search.addWidget(
instantsearch.widgets.searchBox({
container: '.search-searchbar',
{% unless site.algolia.powered_by == false %}poweredBy: true,{% endunless %}
placeholder: '{{ site.data.ui-text[site.locale].search_placeholder_text | default: "Enter your search term..." }}'
})
);
search.addWidget(
instantsearch.widgets.hits({
container: '.search-hits',
templates: {
item: hitTemplate,
empty: '{{ site.data.ui-text[site.locale].search_algolia_no_results | default: "No results" }}',
}
})
);

if (!search.started) {
search.start();
}
})
);
});
document.body.appendChild(script);

loadCSS("https://cdn.jsdelivr.net/npm/instantsearch.js@2.3.3/dist/instantsearch.min.css");
loadCSS("https://cdn.jsdelivr.net/npm/instantsearch.js@2.3.3/dist/instantsearch-theme-algolia.min.css");
};

// Starting the search only when toggle is clicked
$(document).ready(function () {
$(document).ready(function() {
var scriptLoaded = false;

$(".search__toggle").on("click", function() {
if(!search.started) {
search.start();
if (!scriptLoaded) {
loadSearch();
scriptLoaded = true;
}
});
});
60 changes: 18 additions & 42 deletions _includes/seo.html
Original file line number Diff line number Diff line change
@@ -1,24 +1,17 @@
<!-- begin _includes/seo.html -->
{%- if site.url -%}
{%- assign seo_url = site.url | append: site.baseurl -%}
{%- endif -%}
{%- assign seo_url = seo_url | default: site.github.url -%}

{% assign title_separator = site.title_separator | default: '-' | replace: '|', '&#124;' %}
{%- assign title_separator = site.title_separator | default: '-' -%}

{%- if page.title -%}
{%- assign seo_title = page.title | append: " " | append: title_separator | append: " " | append: site.title -%}
{%- assign page_title = page.title | default: site.title | replace: '|', '&#124;' -%}
{%- if page_title contains site.title -%}
{%- assign seo_title = page_title | replace: '|', '&#124;' -%}
{%- else -%}
{%- assign seo_title = page_title | append: " " | append: title_separator | append: " " | append: site.title | replace: '|', '&#124;' -%}
{%- endif -%}

{%- if seo_title -%}
{%- assign seo_title = seo_title | markdownify | strip_html | strip_newlines | escape_once -%}
{%- endif -%}
{%- assign page_title = page_title | markdownify | strip_html | strip_newlines | escape_once -%}
{%- assign seo_title = seo_title | markdownify | strip_html | strip_newlines | escape_once -%}

{% if page.canonical_url %}
{%- assign canonical_url = page.canonical_url %}
{% else %}
{%- assign canonical_url = page.url | replace: "index.html", "" | absolute_url %}
{% endif %}
{%- assign canonical_url = page.canonical_url | default: page.url | replace: "/index.html", "/" | absolute_url %}

{%- assign seo_description = page.description | default: page.excerpt | default: site.description -%}
{%- if seo_description -%}
@@ -32,22 +25,17 @@
{%- assign author_twitter = author.twitter | replace: "@", "" -%}
{%- endif -%}

{%- assign page_large_image = page.header.og_image | default: page.header.overlay_image | default: page.header.image | absolute_url -%}
{%- assign page_large_image = page_large_image | escape -%}

{%- assign page_teaser_image = page.header.teaser | default: site.og_image | absolute_url -%}
{%- assign page_teaser_image = page_teaser_image | escape -%}

{%- assign site_og_image = site.og_image | absolute_url -%}
{%- assign site_og_image = site_og_image | escape -%}
{%- assign page_large_image = page.header.og_image | default: page.header.overlay_image | default: page.header.image | absolute_url | escape -%}
{%- assign page_teaser_image = page.header.teaser | default: site.og_image | absolute_url | escape -%}
{%- assign site_og_image = site.og_image | absolute_url | escape -%}

{%- if page.date -%}
{%- assign og_type = "article" -%}
{%- else -%}
{%- assign og_type = "website" -%}
{%- endif -%}

<title>{{ seo_title | default: site.title }}{% if paginator %}{% unless paginator.page == 1 %} {{ title_separator }} {{ site.data.ui-text[site.locale].page | default: "Page" }} {{ paginator.page }}{% endunless %}{% endif %}</title>
<title>{{ seo_title }}{% if paginator %}{% unless paginator.page == 1 %} {{ title_separator }} {{ site.data.ui-text[site.locale].page | default: "Page" }} {{ paginator.page }}{% endunless %}{% endif %}</title>
<meta name="description" content="{{ seo_description }}">

{% if author.name %}
@@ -60,7 +48,7 @@
<meta property="og:type" content="{{ og_type }}">
<meta property="og:locale" content="{{ site.locale | replace: "-", "_" | default: "en_US" }}">
<meta property="og:site_name" content="{{ site.title }}">
<meta property="og:title" content="{{ page.title | default: site.title | markdownify | strip_html | strip_newlines | escape_once }}">
<meta property="og:title" content="{{ page_title }}">
<meta property="og:url" content="{{ canonical_url }}">

{% if seo_description %}
@@ -75,7 +63,7 @@

{% if site.twitter.username %}
<meta name="twitter:site" content="@{{ site.twitter.username | replace: "@", "" }}">
<meta name="twitter:title" content="{{ page.title | default: site.title | markdownify | strip_html | strip_newlines | escape_once }}">
<meta name="twitter:title" content="{{ page_title }}">
<meta name="twitter:description" content="{{ seo_description }}">
<meta name="twitter:url" content="{{ canonical_url }}">

@@ -121,21 +109,9 @@
<link rel="next" href="{{ paginator.next_page_path | absolute_url }}">
{% endif %}

<script type="application/ld+json">
{
"@context": "https://schema.org",
{% if site.social.type == "Organization" %}
"@type": "Organization",
"url": {{ '/' | absolute_url | jsonify }}{% if site.og_image %},
"logo": {{ site_og_image | jsonify }}{% endif %}
{% else %}
"@type": "Person",
"name": {{ site.social.name | default: site.name | jsonify }},
"url": {{ '/' | absolute_url |jsonify }}{% if site.social.links %},
"sameAs": {{ site.social.links | jsonify }}{% endif %}
{% endif %}
}
</script>
{% if page.url == '/' %}
{% include schema.html %}
{% endif %}

{% if site.google_site_verification %}
<meta name="google-site-verification" content="{{ site.google_site_verification }}" />
6 changes: 2 additions & 4 deletions _includes/social-share.html
Original file line number Diff line number Diff line change
@@ -1,11 +1,9 @@
<section class="page__share">
{% if site.data.ui-text[site.locale].share_on_label %}
<h4 class="page__share-title">{{ site.data.ui-text[site.locale].share_on_label | default: "Share on" }}</h4>
{% endif %}
<h4 class="page__share-title">{{ site.data.ui-text[site.locale].share_on_label | default: "Share on" }}</h4>

<a href="https://twitter.com/intent/tweet?{% if site.twitter.username %}via={{ site.twitter.username | url_encode }}&{% endif %}text={{ page.title | url_encode }}%20{{ page.url | absolute_url | url_encode }}" class="btn btn--twitter" onclick="window.open(this.href, 'window', 'left=20,top=20,width=500,height=500,toolbar=1,resizable=0'); return false;" title="{{ site.data.ui-text[site.locale].share_on_label | default: 'Share on' }} Twitter"><i class="fab fa-fw fa-twitter" aria-hidden="true"></i><span> Twitter</span></a>

<a href="https://www.facebook.com/sharer/sharer.php?u={{ page.url | absolute_url | url_encode }}" class="btn btn--facebook" onclick="window.open(this.href, 'window', 'left=20,top=20,width=500,height=500,toolbar=1,resizable=0'); return false;" title="{{ site.data.ui-text[site.locale].share_on_label | default: 'Share on' }} Facebook"><i class="fab fa-fw fa-facebook" aria-hidden="true"></i><span> Facebook</span></a>

<a href="https://www.linkedin.com/shareArticle?mini=true&url={{ page.url | absolute_url | url_encode }}" class="btn btn--linkedin" onclick="window.open(this.href, 'window', 'left=20,top=20,width=500,height=500,toolbar=1,resizable=0'); return false;" title="{{ site.data.ui-text[site.locale].share_on_label | default: 'Share on' }} LinkedIn"><i class="fab fa-fw fa-linkedin" aria-hidden="true"></i><span> LinkedIn</span></a>
<a href="https://www.linkedin.com/shareArticle?mini=true&url={{ page.url | absolute_url }}" class="btn btn--linkedin" onclick="window.open(this.href, 'window', 'left=20,top=20,width=500,height=500,toolbar=1,resizable=0'); return false;" title="{{ site.data.ui-text[site.locale].share_on_label | default: 'Share on' }} LinkedIn"><i class="fab fa-fw fa-linkedin" aria-hidden="true"></i><span> LinkedIn</span></a>
</section>
19 changes: 13 additions & 6 deletions _includes/toc.html
Original file line number Diff line number Diff line change
@@ -24,7 +24,7 @@
OTHER DEALINGS IN THE SOFTWARE.
{% endcomment %}
{% comment %}
Version 1.1.0
Version 1.2.1
https://github.com/allejo/jekyll-toc

"...like all things liquid - where there's a will, and ~36 hours to spare, there's usually a/some way" ~jaybe
@@ -47,6 +47,7 @@
* base_url (string) : '' - add a base url to the TOC links for when your TOC is on another page than the actual content
* anchor_class (string) : '' - add custom class(es) for each anchor element
* skip_no_ids (bool) : false - skip headers that do not have an `id` attribute
* flat_toc (bool) : false - when set to true, the TOC will be a single level list

Output:
An ordered or unordered list representing the table of contents of a markdown block. This snippet will only
@@ -69,6 +70,7 @@

{% capture jekyll_toc %}{% endcapture %}
{% assign orderedList = include.ordered | default: false %}
{% assign flatToc = include.flat_toc | default: false %}
{% assign baseURL = include.base_url | default: include.baseurl | default: '' %}
{% assign skipNoIDs = include.skip_no_ids | default: include.skipNoIDs | default: false %}
{% assign minHeader = include.h_min | default: 1 %}
@@ -138,9 +140,9 @@
{% capture listItem %}{{ anchorBody }}{% endcapture %}
{% endif %}

{% if currLevel > lastLevel %}
{% if currLevel > lastLevel and flatToc == false %}
{% capture jekyll_toc %}{{ jekyll_toc }}<{{ listModifier }}{{ subMenuClass }}>{% endcapture %}
{% elsif currLevel < lastLevel %}
{% elsif currLevel < lastLevel and flatToc == false %}
{% assign repeatCount = lastLevel | minus: currLevel %}

{% for i in (1..repeatCount) %}
@@ -158,8 +160,13 @@
{% assign firstHeader = false %}
{% endfor %}

{% assign repeatCount = minHeader | minus: 1 %}
{% assign repeatCount = lastLevel | minus: repeatCount %}
{% if flatToc == true %}
{% assign repeatCount = 1 %}
{% else %}
{% assign repeatCount = minHeader | minus: 1 %}
{% assign repeatCount = lastLevel | minus: repeatCount %}
{% endif %}

{% for i in (1..repeatCount) %}
{% capture jekyll_toc %}{{ jekyll_toc }}</li></{{ listModifier }}>{% endcapture %}
{% endfor %}
@@ -179,4 +186,4 @@
{% capture jekyll_toc %}<{{ listModifier }}{{ rootAttributes }}>{{ nodes | shift | join: '>' }}>{% endcapture %}
{% endif %}
{% endif %}
{% endcapture %}{% assign tocWorkspace = '' %}{{ deprecation_warnings }}{{ jekyll_toc }}
{% endcapture %}{% assign tocWorkspace = '' %}{{ deprecation_warnings }}{{ jekyll_toc -}}
2 changes: 1 addition & 1 deletion _layouts/archive-taxonomy.html
Original file line number Diff line number Diff line change
@@ -20,7 +20,7 @@

<div class="archive">
{% unless page.header.overlay_color or page.header.overlay_image %}
<h1 id="page-title" class="page__title">{{ page.title }}</h1>
<h1 id="page-title" class="page__title"{% if page.locale %} lang="{{ page.locale }}"{% endif %}>{{ page.title }}</h1>
{% endunless %}
{% for post in page.posts %}
{% include archive-single.html %}
4 changes: 2 additions & 2 deletions _layouts/archive.html
Original file line number Diff line number Diff line change
@@ -19,8 +19,8 @@

<div class="archive">
{% unless page.header.overlay_color or page.header.overlay_image %}
<h1 id="page-title" class="page__title">{{ page.title }}</h1>
<h1 id="page-title" class="page__title"{% if page.locale %} lang="{{ page.locale }}"{% endif %}>{{ page.title }}</h1>
{% endunless %}
{{ content }}
</div>
</div>
</div>
38 changes: 1 addition & 37 deletions _layouts/categories.html
Original file line number Diff line number Diff line change
@@ -4,40 +4,4 @@

{{ content }}

{% assign categories_max = 0 %}
{% for category in site.categories %}
{% if category[1].size > categories_max %}
{% assign categories_max = category[1].size %}
{% endif %}
{% endfor %}

<ul class="taxonomy__index">
{% for i in (1..categories_max) reversed %}
{% for category in site.categories %}
{% if category[1].size == i %}
<li>
<a href="#{{ category[0] | slugify }}">
<strong>{{ category[0] }}</strong> <span class="taxonomy__count">{{ i }}</span>
</a>
</li>
{% endif %}
{% endfor %}
{% endfor %}
</ul>

{% assign entries_layout = page.entries_layout | default: 'list' %}
{% for i in (1..categories_max) reversed %}
{% for category in site.categories %}
{% if category[1].size == i %}
<section id="{{ category[0] | slugify | downcase }}" class="taxonomy__section">
<h2 class="archive__subtitle">{{ category[0] }}</h2>
<div class="entries-{{ entries_layout }}">
{% for post in category.last %}
{% include archive-single.html type=entries_layout %}
{% endfor %}
</div>
<a href="#page-title" class="back-to-top">{{ site.data.ui-text[site.locale].back_to_top | default: 'Back to Top' }} &uarr;</a>
</section>
{% endif %}
{% endfor %}
{% endfor %}
{% include posts-taxonomy.html taxonomies=site.categories %}
14 changes: 4 additions & 10 deletions _layouts/default.html
Original file line number Diff line number Diff line change
@@ -2,25 +2,20 @@
---

<!doctype html>
<!--
Minimal Mistakes Jekyll Theme 4.24.0 by Michael Rose
Copyright 2013-2020 Michael Rose - mademistakes.com | @mmistakes
Free for personal and commercial use under the MIT license
https://github.com/mmistakes/minimal-mistakes/blob/master/LICENSE
-->
<html lang="{{ site.locale | slice: 0,2 | default: "en" }}" class="no-js">
{% include copyright.html %}
<html lang="{{ site.locale | replace: "_", "-" | default: "en" }}" class="no-js">
<head>
{% include head.html %}
{% include head/custom.html %}
</head>

<body class="layout--{{ page.layout | default: layout.layout }}{% if page.classes or layout.classes %}{{ page.classes | default: layout.classes | join: ' ' | prepend: ' ' }}{% endif %}">
<body class="layout--{{ page.layout | default: layout.layout }}{% if page.classes or layout.classes %}{{ page.classes | default: layout.classes | join: ' ' | prepend: ' ' }}{% endif %}" dir="{% if site.rtl %}rtl{% else %}ltr{% endif %}">
{% include_cached skip-links.html %}
{% include_cached browser-upgrade.html %}
{% include_cached masthead.html %}

<div class="initial-content">
{{ content }}
{% include after-content.html %}
</div>

{% if site.search == true %}
@@ -37,6 +32,5 @@
</div>

{% include scripts.html %}

</body>
</html>
2 changes: 1 addition & 1 deletion _layouts/search.html
Original file line number Diff line number Diff line change
@@ -17,7 +17,7 @@

<div class="archive">
{% unless page.header.overlay_color or page.header.overlay_image %}
<h1 id="page-title" class="page__title">{{ page.title }}</h1>
<h1 id="page-title" class="page__title"{% if page.locale %} lang="{{ page.locale }}"{% endif %}>{{ page.title }}</h1>
{% endunless %}

{{ content }}
43 changes: 16 additions & 27 deletions _layouts/single.html
Original file line number Diff line number Diff line change
@@ -8,7 +8,11 @@
{% include page__hero_video.html %}
{% endif %}

{% if page.url != "/" and site.breadcrumbs %}
{% assign breadcrumbs_enabled = site.breadcrumbs %}
{% if page.breadcrumbs != null %}
{% assign breadcrumbs_enabled = page.breadcrumbs %}
{% endif %}
{% if page.url != "/" and breadcrumbs_enabled %}
{% unless paginator %}
{% include breadcrumbs.html %}
{% endunless %}
@@ -17,23 +21,25 @@
<div id="main" role="main">
{% include sidebar.html %}

<article class="page h-entry" itemscope itemtype="https://schema.org/CreativeWork">
{% if page.title %}<meta itemprop="headline" content="{{ page.title | markdownify | strip_html | strip_newlines | escape_once }}">{% endif %}
<article class="page" itemscope itemtype="https://schema.org/CreativeWork"{% if page.locale %} lang="{{ page.locale }}"{% endif %}>
{% if page.title %}<meta itemprop="headline" content="{{ page.title | replace: '|', '&#124;' | markdownify | strip_html | strip_newlines | escape_once }}">{% endif %}
{% if page.excerpt %}<meta itemprop="description" content="{{ page.excerpt | markdownify | strip_html | strip_newlines | escape_once }}">{% endif %}
{% if page.date %}<meta itemprop="datePublished" content="{{ page.date | date_to_xmlschema }}">{% endif %}
{% if page.last_modified_at %}<meta itemprop="dateModified" content="{{ page.last_modified_at | date_to_xmlschema }}">{% endif %}

<div class="page__inner-wrap">
{% unless page.header.overlay_color or page.header.overlay_image %}
<header>
{% if page.title %}<h1 id="page-title" class="page__title p-name" itemprop="headline">
<a href="{{ page.url | absolute_url }}" class="u-url" itemprop="url">{{ page.title | markdownify | remove: "<p>" | remove: "</p>" }}</a>
</h1>{% endif %}
{% if page.title -%}
<h1 id="page-title" class="page__title" itemprop="headline">
<a href="{{ page.url | absolute_url }}" itemprop="url">{{ page.title | markdownify | remove: "<p>" | remove: "</p>" }}</a>
</h1>
{%- endif %}
{% include page__meta.html %}
</header>
{% endunless %}

<section class="page__content e-content" itemprop="text">
<section class="page__content" itemprop="text">
{% if page.toc %}
<aside class="sidebar__right {% if page.toc_sticky %}sticky{% endif %}">
<nav class="toc">
@@ -66,26 +72,9 @@ <h4 class="page__meta-title">{{ site.data.ui-text[site.locale].meta_label }}</h4

{% comment %}<!-- only show related on a post page when `related: true` -->{% endcomment %}
{% if page.id and page.related and site.related_posts.size > 0 %}
<div class="page__related">
<h2 class="page__related-title">{{ site.data.ui-text[site.locale].related_label | default: "You May Also Enjoy" }}</h2>
<div class="grid__wrapper">
{% for post in site.related_posts limit:4 %}
{% include archive-single.html type="grid" %}
{% endfor %}
</div>
</div>
{% include page__related.html posts=site.related_posts %}
{% comment %}<!-- otherwise show recent posts if no related when `related: true` -->{% endcomment %}
{% elsif page.id and page.related %}
<div class="page__related">
<h2 class="page__related-title">{{ site.data.ui-text[site.locale].related_label | default: "You May Also Enjoy" }}</h2>
<div class="grid__wrapper">
{% for post in site.posts limit:4 %}
{% if post.id == page.id %}
{% continue %}
{% endif %}
{% include archive-single.html type="grid" %}
{% endfor %}
</div>
</div>
{% include page__related.html posts=site.posts %}
{% endif %}
</div>
</div>
2 changes: 1 addition & 1 deletion _layouts/splash.html
Original file line number Diff line number Diff line change
@@ -9,7 +9,7 @@
{% endif %}

<div id="main" role="main">
<article class="splash" itemscope itemtype="https://schema.org/CreativeWork">
<article class="splash" itemscope itemtype="https://schema.org/CreativeWork"{% if page.locale %} lang="{{ page.locale }}"{% endif %}>
{% if page.title %}<meta itemprop="headline" content="{{ page.title | markdownify | strip_html | strip_newlines | escape_once }}">{% endif %}
{% if page.excerpt %}<meta itemprop="description" content="{{ page.excerpt | markdownify | strip_html | strip_newlines | escape_once }}">{% endif %}
{% if page.date %}<meta itemprop="datePublished" content="{{ page.date | date_to_xmlschema }}">{% endif %}
38 changes: 1 addition & 37 deletions _layouts/tags.html
Original file line number Diff line number Diff line change
@@ -4,40 +4,4 @@

{{ content }}

{% assign tags_max = 0 %}
{% for tag in site.tags %}
{% if tag[1].size > tags_max %}
{% assign tags_max = tag[1].size %}
{% endif %}
{% endfor %}

<ul class="taxonomy__index">
{% for i in (1..tags_max) reversed %}
{% for tag in site.tags %}
{% if tag[1].size == i %}
<li>
<a href="#{{ tag[0] | slugify }}">
<strong>{{ tag[0] }}</strong> <span class="taxonomy__count">{{ i }}</span>
</a>
</li>
{% endif %}
{% endfor %}
{% endfor %}
</ul>

{% assign entries_layout = page.entries_layout | default: 'list' %}
{% for i in (1..tags_max) reversed %}
{% for tag in site.tags %}
{% if tag[1].size == i %}
<section id="{{ tag[0] | slugify | downcase }}" class="taxonomy__section">
<h2 class="archive__subtitle">{{ tag[0] }}</h2>
<div class="entries-{{ entries_layout }}">
{% for post in tag.last %}
{% include archive-single.html type=entries_layout %}
{% endfor %}
</div>
<a href="#page-title" class="back-to-top">{{ site.data.ui-text[site.locale].back_to_top | default: 'Back to Top' }} &uarr;</a>
</section>
{% endif %}
{% endfor %}
{% endfor %}
{% include posts-taxonomy.html taxonomies=site.tags %}
282 changes: 282 additions & 0 deletions _posts/2022-11-09-springboot01_Spring Boot 프로젝트 시작.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,282 @@
---
layout: single
title: "Spring Boot 프로젝트 시작"
categories: SpringBoot
tag: [Java, Spring, Spring Boot, STS, Eclipse]
toc: true
toc_sticky: true

---

<head>
<style>
table.dataframe {
white-space: normal;
width: 100%;
height: 240px;
display: block;
overflow: auto;
font-family: Arial, sans-serif;
font-size: 0.9rem;
line-height: 20px;
text-align: center;
border: 0px !important;
}

table.dataframe th {
text-align: center;
font-weight: bold;
padding: 8px;
}

table.dataframe td {
text-align: center;
padding: 8px;
}

table.dataframe tr:hover {
background: #b8d1f3;
}

.output_prompt {
overflow: auto;
font-size: 0.9rem;
line-height: 1.45;
border-radius: 0.3rem;
-webkit-overflow-scrolling: touch;
padding: 0.8rem;
margin-top: 0;
margin-bottom: 15px;
font: 1rem Consolas, "Liberation Mono", Menlo, Courier, monospace;
color: $code-text-color;
border: solid 1px $border-color;
border-radius: 0.3rem;
word-break: normal;
white-space: pre;
}

.dataframe tbody tr th:only-of-type {
vertical-align: middle;
}

.dataframe tbody tr th {
vertical-align: top;
}

.dataframe thead th {
text-align: center !important;
padding: 8px;
}

.page__content p {
margin: 0 0 0px !important;
}

.page__content p > strong {
font-size: 0.8rem !important;
}

</style>
</head>


## STS로 스프링 부트 시작하기

- Java Development Kit(JDK): 8이상 (11이상 권장)
- STS 다운로드 : [https://spring.io/tools](https://spring.io/tools)

## 프로젝트 생성하기

Spring Initializer로 프로젝트 세팅 후 STS에서 프로젝트를 시작하는 방법이다.

[https://start.spring.io/](https://start.spring.io/)

![00_1.png](/assets/images/springboot01/00_1.png)

- 프로젝트 환경
- Tool : STS
- build : Maven
- Language : Java
- Spring Boot Version : 2.7.4
- Packageing : Jar
- JAVA Version : 8

이니셜라이저를 사용하게 되면 프로젝트를 좀 더 간편하게 생성할 수 있다.

필요한 기능을 사용하기 위해 우측의 Dependencies에서 선택하여 프로젝트를 생성할 수 있기 때문에 초반 세팅에 귀찮은 작업에 낭비되는 시간을 절약할 수 있다.

프로젝트 셋팅 완료 후 다운로드 받은 후, 해당 파일을 STS의 workspace로 이동시킨다.

## Spring Boot 프로젝트 설정

## 1. porm.xml 설정

### **POM(프로젝트 객체 모델(Project Object Model))**

- Maven의 기능을 이용하기 위해서 POM이 사용된다.
- POM은 pom.xml파일을 말하며 pom.xml은 Maven을 이용하는 프로젝트의 root에 존재하는 xml 파일이다.

(하나의 자바 프로젝트에 빌드 툴을 Maven으로 설정하면, 프로젝트 최상위 디렉토리에 "pom.xml"이라는 파일이 생성된다.)

- 파일은 프로젝트마다 1개이며, pom.xml만 보면 프로젝트의 모든 설정, 의존성 등을 알 수 있다.
- 다른 파일이름으로 지정할 수도 있다. (mvn -f 파일명.xml test). 하지만 pom.xml으로 사용하기를 권장

**ex) pom.xml 예시**

```xml
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.7.4</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<groupId>com.example</groupId>
<artifactId>demo</artifactId>
<version>0.0.1-SNAPSHOT</version>
<name>demo</name>
<description>Demo project for Spring Boot</description>
<properties>
<java.version>1.8</java.version>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.mybatis.spring.boot</groupId>
<artifactId>mybatis-spring-boot-starter</artifactId>
<version>2.2.2</version>
</dependency>

<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-devtools</artifactId>
<scope>runtime</scope>
<optional>true</optional>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<scope>runtime</scope>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<optional>true</optional>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
<!--ThymeLeaf-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-thymeleaf</artifactId>
</dependency>

</dependencies>

<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<configuration>
<excludes>
<exclude>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
</exclude>
</excludes>
</configuration>
</plugin>
</plugins>
</build>

</project>
```

### 엘리먼트

- modelVersion : POM model의 버전
- parent : 프로젝트의 계층 정보
- groupId : 프로젝트를 생성하는 조직의 고유 아이디를 결정한다. 일반적으로 도메인 이름을 거꾸로 적는다.
- artifactId : 프로젝트 빌드시 파일 대표이름 이다. groupId 내에서 유일해야 한다. Maven을 이용하여 빌드시 다음과 같은 규칙으로 파일이 생성 된다.

artifactid-version.packaging. 위 예의 경우 빌드할 경우 bo-0.0.1-SNAPSHOT.war 파일이 생성된다.  (하단 예시 파일 참고)

- version : 프로젝트의 현재 버전, 프로젝트 개발 중일 때는 SNAPSHOT을 접미사로 사용.
- packaging : 패키징 유형(jar, war, ear 등)
- name : 프로젝트, 프로젝트 이름
- description : 프로젝트에 대한 간략한 설명
- url : 프로젝트에 대한 참고 Reference 사이트
- properties : 버전관리시 용이 하다. ex) 하당 자바 버전을 선언 하고 dependencies에서 다음과 같이 활용 가능 하다.

<version>${java.version}</version>

- dependencies : dependencies태그 안에는 프로젝트와 의존 관계에 있는 라이브러리들을 관리 한다.
- build : 빌드에 사용할 플러그인 목록

### 라이브러리

Spring부트는 spring-boot-starter로 시작하는 라이브러리를 제공한다. starter-parent에 지정된 라이브러리 버전을 따른다.

- spring-boot-starter-web

: Spring MVC를 사용한 RESTful서비스를 개발하는데 사용.

- spring-boot-starter-test

: Junit, Hamcrest, Mockito를 포함하는 스프링 어플리케이션을 테스트 가능하도록 한다.

- spring-boot-devtools

: devtools는 Spring boot에서 제공하는 개발 편의를 위한 모듈이다. 쉽게 말하면 브라우저로 전송되는 내용들에 대한 코드가 변경되면, **자동으로 어플리케이션을 재시작**하여 브라우저에도 업데이트를 해주는 역할을 한다.

- mybatis-spring-boot-starter

: 스프링부트 위에 MyBatis 애플리케이션을 빠르게 빌드 할 수 있다.

- DataSource 를 자동 감지합니다.
- SqlSessionFactory 를 전달 하는 인스턴스를 자동 생성하고 등록합니다
- DataSource.SqlSessionFactoryBean 의 인스턴스를 만들고 등록합니다.
- @Mapper주석이 표시된 매퍼를 자동 스캔하고에 연결합니다.
- SqlSessionTemplateSpring 컨텍스트에 등록하여 Bean에 주입 할 수 있도록합니다.
- mysql-connector-java

: 스프링부트에서 MySQL을 사용하기 위한 라이브러리

- lombok

: Java 라이브러리로 반복되는 getter, setter, toString 등의 메서드 작성 코드를 줄여주는 코드 다이어트 라이브러리

- spring-boot-starter-thymeleaf

: ThymeLeaf 템플릿을 사용하기 위한 라이브러리


## 2. application.properties 설정

이 파일은 스프링부트가 애플리케이션을 구동할 때 자동으로 로딩하는 파일이다.

key - value 형식으로 값을 정의하면 애플리케이션에서 참조하여 사용할 수 있다.

![01_1.png](/assets/images/springboot01/01_1.png)

- url을 호출할 때 필요한 context-path
- Server 포트 설정

기본 포트는 8080

- JSP View Resolver(JSP 사용할 때)
- MySQL 접속 정보
- mapper.xml 경로 설정(별도의 경로를 사용할 때 설정)
- ThymeLeaf 설정

기본 경로는 classpath:/templates/
Original file line number Diff line number Diff line change
@@ -0,0 +1,121 @@
---
layout: single
title: "Spring Boot 에서 jsessionid 문제 해결"
categories: SpringBoot
tag: [Java, Spring, Spring Boot, STS, Eclipse]
toc: true
toc_sticky: true

---

<head>
<style>
table.dataframe {
white-space: normal;
width: 100%;
height: 240px;
display: block;
overflow: auto;
font-family: Arial, sans-serif;
font-size: 0.9rem;
line-height: 20px;
text-align: center;
border: 0px !important;
}

table.dataframe th {
text-align: center;
font-weight: bold;
padding: 8px;
}

table.dataframe td {
text-align: center;
padding: 8px;
}

table.dataframe tr:hover {
background: #b8d1f3;
}

.output_prompt {
overflow: auto;
font-size: 0.9rem;
line-height: 1.45;
border-radius: 0.3rem;
-webkit-overflow-scrolling: touch;
padding: 0.8rem;
margin-top: 0;
margin-bottom: 15px;
font: 1rem Consolas, "Liberation Mono", Menlo, Courier, monospace;
color: $code-text-color;
border: solid 1px $border-color;
border-radius: 0.3rem;
word-break: normal;
white-space: pre;
}

.dataframe tbody tr th:only-of-type {
vertical-align: middle;
}

.dataframe tbody tr th {
vertical-align: top;
}

.dataframe thead th {
text-align: center !important;
padding: 8px;
}

.page__content p {
margin: 0 0 0px !important;
}

.page__content p > strong {
font-size: 0.8rem !important;
}

</style>
</head>


## jsessionid란?

- jsessionid는 새 세션이 만들어지면 클라이언트가 쿠키를 지원하는지 여부를 서버가 알 수 없으므로, 쿠키와 URL에 모두 jsessionid를 만들어 주는 것을 의미한다.
- url에 붙거나 헤더에 붙여서 표시된다.
- jsessionid를 탈취당하면 **사용자 ID, Password를 몰라도 접근이 가능하게 된다.**

# 해결방법

### 1. application.properties에 아래와 같은 옵션을 추가한다.

![00_1.png](/assets/images/springboot02/00_1.png)

### 2. 클래스 계승 시작 SpringBootServletInitializer 재 작성 onStartup 방법

```java
@Override
public void onStartup(ServletContext servletContext) throws ServletException {
super.onStartup(servletContext);
servletContext.setSessionTrackingModes(Collections.singleton(SessionTrackingMode.COOKIE));
SessionCookieConfig sessionCookieConfig=servletContext.getSessionCookieConfig();
sessionCookieConfig.setHttpOnly(true);
}
```

### 3. @ Configuration 설정 클래스 에 bean 등록

ServletContextInitializer 클래스를 Bean객체로 등록하여 스프링 부트가 jseesion과 관련된 설정을 읽도록 해 주면 된다.

```java
@Bean
public ServletContextInitializer servletContextInitializer1() {
return new ServletContextInitializer() {
@Override
public void onStartup(ServletContext servletContext) throws ServletException {
servletContext.setSessionTrackingModes(Collections.singleton(SessionTrackingMode.COOKIE) );
}
};
}
```
129 changes: 129 additions & 0 deletions _posts/2022-11-18-springboot03_Spring Data JPA.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,129 @@
---
layout: single
title: "Spring Data JPA란?"
categories: SpringBoot
tag: [Java, Spring, JPA, Spring Boot, STS, Eclipse]
toc: true
toc_sticky: true

---

<head>
<style>
table.dataframe {
white-space: normal;
width: 100%;
height: 240px;
display: block;
overflow: auto;
font-family: Arial, sans-serif;
font-size: 0.9rem;
line-height: 20px;
text-align: center;
border: 0px !important;
}

table.dataframe th {
text-align: center;
font-weight: bold;
padding: 8px;
}

table.dataframe td {
text-align: center;
padding: 8px;
}

table.dataframe tr:hover {
background: #b8d1f3;
}

.output_prompt {
overflow: auto;
font-size: 0.9rem;
line-height: 1.45;
border-radius: 0.3rem;
-webkit-overflow-scrolling: touch;
padding: 0.8rem;
margin-top: 0;
margin-bottom: 15px;
font: 1rem Consolas, "Liberation Mono", Menlo, Courier, monospace;
color: $code-text-color;
border: solid 1px $border-color;
border-radius: 0.3rem;
word-break: normal;
white-space: pre;
}

.dataframe tbody tr th:only-of-type {
vertical-align: middle;
}

.dataframe tbody tr th {
vertical-align: top;
}

.dataframe thead th {
text-align: center !important;
padding: 8px;
}

.page__content p {
margin: 0 0 0px !important;
}

.page__content p > strong {
font-size: 0.8rem !important;
}

</style>
</head>



## ORM이란?

어플리케이션의 객체와 관계형 데이터베이스의 데이터를 자동으로 매핑해주는 것을 의미

- Java의 데이터 클래스와 관계형 데이터베이스의 테이블을 매핑

객체지향 프로그래밍과 관계형 데이터베이스의 차이로 발생하는 제약사항을 해결해주는 역할을 수행

대표적으로 JPA, Hibernate 등이 있음 (Persistent API)

## ORM의 장점

1. SQL 쿼리가 아닌 직관적인 코드로 데이터를 조작할 수 있음
- 개발자가 보다 비즈니스 로직에 집중할 수 있음
2. 재사용 및 유지보수가 편리
- ORM은 독릭접으로 작성되어 있어 재사용이 가능
- 매핑정보를 명확하게 설계하기 때문에 따로 데이터베이스를 볼 필요가 없음
3. DBMS에 대한 종속성이 줄어듬
- DBMS를 교체하는 작업을 비교적 적은 리스크로 수행 가능

## ORM의 단점

1. 복잡성이 커질 경우 ORM만으로 구현하기 어려움
- 직접 쿼리를 구현하지 않아 복잡한 설계가 어려움
2. 잘못 구현할 경우 속도 저하 발생
3. 대형 쿼리는 별도의 튜닝이 필요할 수 있음

## JPA (Java Persistance API)

### **Hibernate**

ORM Framework중 하나

JPA의 실제 구현체 중 하나이며, 현재 JPA 구현체 중 가장 많이 사용됨

![00_1.png](/assets/images/springboot03/00_1.png)

### Spring Data JPA

Spring Framework에서 JPA를 편리하게 사용할 수 있게 지원하는 라이브러리

- CRUD 처리용 인터페이스 제공
- Repository 개발 시 인터페이스만 작성하면 구현 객체를 동적으로 생성해서 주입
- 데이터 접근 계층 개발시 인터페이스만 작성해도 됨

Hibernate에서 자주 사용되는 기능을 조금 더 쉽게 사용할 수 있게 구현
Loading