commit e3a19b22d5c94ea73b4bc44d456e79a44f16e928 Author: CherryKitten Date: Tue Aug 1 15:50:53 2023 +0200 Initial Commit diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..485dee6 --- /dev/null +++ b/.gitignore @@ -0,0 +1 @@ +.idea diff --git a/LICENSE b/LICENSE new file mode 100644 index 0000000..d2384ce --- /dev/null +++ b/LICENSE @@ -0,0 +1,71 @@ +Copyright (c) 2023 CherryKitten + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. + +I'm using a modification of the Terminimal zola theme, which is in itself a fork of the similar theme for Hugo. +Both are also licensed under the MIT License: + +MIT License + +Copyright (c) 2019 Paweł Romanowski + +Copyright (c) 2019 panr + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. + +--- + +For hugo-theme-terminal: + +The MIT License (MIT) + +Copyright (c) 2019 panr + +Permission is hereby granted, free of charge, to any person obtaining a copy of +this software and associated documentation files (the "Software"), to deal in +the Software without restriction, including without limitation the rights to +use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of +the Software, and to permit persons to whom the Software is furnished to do so, +subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS +FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR +COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER +IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN +CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. diff --git a/config.toml b/config.toml new file mode 100644 index 0000000..54a67c0 --- /dev/null +++ b/config.toml @@ -0,0 +1,40 @@ +# The URL the site will be built for +base_url = "https://cherrykitten.dev" +title = "CherryKitten" + +compile_sass = true + +# Whether to build a search index to be used later on by a JavaScript library +build_search_index = false + +generate_feed = true +feed_filename = "rss.xml" + +taxonomies = [ + {name = "tags"}, +] + +[markdown] +# Whether to do syntax highlighting +# Theme can be customised by setting the `highlight_theme` variable to a theme supported by Zola +highlight_code = true +extra_syntaxes_and_themes = ["highlight_themes"] +highlight_theme = "rosepine" + +[extra] + +# The logo text - defaults to "Terminimal theme" +logo_text = "CherryKitten" + +menu_items = [ + {name = "Home", url = "$BASE_URL"}, + + {name = "About me", url = "$BASE_URL/about"}, + + {name = "Blog", url = "$BASE_URL/blog"}, + + {name = "Contact", url = "$BASE_URL/contact"}, +] + +page_titles = "combined" +post_view_navigation_prompt = "More posts!" diff --git a/highlight_themes/rosepine.tmTheme b/highlight_themes/rosepine.tmTheme new file mode 100644 index 0000000..fc3479b --- /dev/null +++ b/highlight_themes/rosepine.tmTheme @@ -0,0 +1,301 @@ + + + + + + + + + name + Rosé Pine + settings + + + settings + + background + #1F1D29 + caret + #FAEBD7 + foreground + #FFFFFF + invisibles + #3B3A32 + lineHighlight + #3E3D32 + selection + #FAEBD791 + + + + name + Comment + scope + comment + settings + + foreground + #403C58 + + + + name + String + scope + string + settings + + foreground + #F1CA93 + + + + name + Number + scope + constant.numeric + settings + + foreground + #C3A5E6 + + + + name + Built-in constant + scope + constant.language + settings + + foreground + #C3A5E6 + + + + name + User-defined constant + scope + constant.character, constant.other + settings + + foreground + #C3A5E6 + + + + name + Variable + scope + variable + settings + + fontStyle + + + + + name + Keyword + scope + keyword + settings + + foreground + #EA6F91 + + + + name + Storage + scope + storage + settings + + fontStyle + + foreground + #EA6F91 + + + + name + Storage type + scope + storage.type + settings + + fontStyle + italic + foreground + #9BCED7 + + + + name + Class name + scope + entity.name.class + settings + + fontStyle + bold + foreground + #34738E + + + + name + Inherited class + scope + entity.other.inherited-class + settings + + fontStyle + italic + foreground + #34738E + + + + name + Function name + scope + entity.name.function + settings + + fontStyle + + foreground + #34738E + + + + name + Function argument + scope + variable.parameter + settings + + fontStyle + italic + foreground + #F1CA93 + + + + name + Tag name + scope + entity.name.tag + settings + + fontStyle + + foreground + #EA6F91 + + + + name + Tag attribute + scope + entity.other.attribute-name + settings + + fontStyle + + foreground + #34738E + + + + name + Library function + scope + support.function + settings + + fontStyle + + foreground + #66D9EF + + + + name + Library constant + scope + support.constant + settings + + fontStyle + + foreground + #66D9EF + + + + name + Library class/type + scope + support.type, support.class + settings + + fontStyle + italic + foreground + #66D9EF + + + + name + Library variable + scope + support.other.variable + settings + + fontStyle + + + + + name + Invalid + scope + invalid + settings + + background + #EB5E57 + fontStyle + + foreground + #F8F8F0 + + + + name + Invalid deprecated + scope + invalid.deprecated + settings + + background + #BB96E6 + foreground + #F8F8F0 + + + + uuid + D8D5E82E-3D5B-46B5-B38E-8C841C21347D + colorSpaceName + sRGB + semanticClass + theme.dark.rose_pine + author + ThatOneCalculator + comment + soho vibes + + diff --git a/sass/buttons.scss b/sass/buttons.scss new file mode 100644 index 0000000..7a864b0 --- /dev/null +++ b/sass/buttons.scss @@ -0,0 +1,92 @@ +.button-container { + display: table; + margin-left: auto; + margin-right: auto; +} + +button, +.button, +a.button { + position: relative; + display: flex; + align-items: center; + justify-content: center; + padding: 8px 18px; + margin-bottom: 5px; + text-align: center; + border-radius: 8px; + border: 1px solid transparent; + appearance: none; + cursor: pointer; + outline: none; + + /* variants */ + + &.outline { + background: transparent; + box-shadow: none; + padding: 8px 18px; + + :hover { + transform: none; + box-shadow: none; + } + } + + &.primary { + box-shadow: 0 4px 6px rgba(50, 50, 93, .11), 0 1px 3px rgba(0, 0, 0, .08); + + &:hover { + box-shadow: 0 2px 6px rgba(50, 50, 93, .21), 0 1px 3px rgba(0, 0, 0, .08); + } + } + + &.link { + background: none; + font-size: 1rem; + } + + + /* sizes */ + + &.small { + font-size: .8rem; + } + + &.wide { + min-width: 200px; + padding: 14px 24px; + } +} + +a.read-more, +a.read-more:hover, +a.read-more:active { + display: inline-flex; + background: none; + box-shadow: none; + padding: 0; + margin: 20px 0; + max-width: 100%; +} + +.code-toolbar { + margin-bottom: 20px; + + .toolbar-item a { + position: relative; + display: inline-flex; + align-items: center; + justify-content: center; + padding: 3px 8px; + margin-bottom: 5px; + text-align: center; + font-size: 13px; + font-weight: 500; + border-radius: 8px; + border: 1px solid transparent; + appearance: none; + cursor: pointer; + outline: none; + } +} diff --git a/sass/color.scss b/sass/color.scss new file mode 100644 index 0000000..4fd0318 --- /dev/null +++ b/sass/color.scss @@ -0,0 +1,11 @@ +:root { + --accent: rgb(235, 111, 146); + --accent2: rgb(246, 193, 119); + --accent3: rgb(62, 143, 176); + --accent-alpha-70: rgba(235, 111, 146,.7); + --accent-alpha-20: rgba(235, 111, 146,.2); + + --background: #232136; + --color: #e0def4; + --border-color: rgba(246, 193, 119, .1); +} diff --git a/sass/footer.scss b/sass/footer.scss new file mode 100644 index 0000000..529200d --- /dev/null +++ b/sass/footer.scss @@ -0,0 +1,52 @@ +@import "variables"; + +.footer { + padding: 40px 0; + flex-grow: 0; + opacity: .5; + + &__inner { + display: flex; + align-items: center; + justify-content: space-between; + margin: 0; + width: 760px; + max-width: 100%; + + @media (max-width: $tablet-max-width) { + flex-direction: column; + } + } + + a { + color: inherit; + } + + .copyright { + display: flex; + flex-direction: row; + align-items: center; + font-size: 1rem; + color: var(--light-color-secondary); + + &--user { + margin: auto; + text-align: center; + } + + & > *:first-child:not(:only-child) { + margin-right: 10px; + + @media (max-width: $tablet-max-width) { + border: none; + padding: 0; + margin: 0; + } + } + + @media (max-width: $tablet-max-width) { + flex-direction: column; + margin-top: 10px; + } + } +} diff --git a/sass/header.scss b/sass/header.scss new file mode 100644 index 0000000..6d64f7d --- /dev/null +++ b/sass/header.scss @@ -0,0 +1,98 @@ +@import "variables"; + +@mixin menu { + position: absolute; + background: var(--background); + box-shadow: var(--shadow); + color: white; + border: 2px solid; + margin: 0; + padding: 10px; + list-style: none; + z-index: 99; +} + +.header { + display: flex; + flex-direction: column; + position: relative; + + &__inner { + display: flex; + align-items: center; + justify-content: space-between; + } + + &__logo { + display: flex; + flex: 1; + + &:after { + content: ''; + background: repeating-linear-gradient(90deg,var(--accent) 0%, transparent 8%, var(--accent2) 50%,var(--accent3) 100% ); + display: block; + width: 100%; + right: 10px; + border-radius: 0 20px 20px 0; + } + + a { + flex: 0 0 auto; + max-width: 100%; + } + } + + .menu { + margin: 20px 0; + + &__inner { + display: flex; + flex-wrap: wrap; + list-style: none; + margin: 0; + padding: 0; + + li { + color: var(--accent3); + &.active { + color: var(--accent-alpha-70); + } + + &:not(:last-of-type) { + margin-right: 20px; + margin-bottom: 10px; + flex: 0 0 auto; + } + } + } + + &__sub-inner { + position: relative; + list-style: none; + padding: 0; + margin: 0; + + &:not(:only-child) { + margin-left: 20px; + } + + &-more { + @include menu; + top: 35px; + left: 0; + + &-trigger { + color: var(--accent); + user-select: none; + cursor: pointer; + } + + li { + margin: 0; + padding: 5px; + white-space: nowrap; + } + } + } + } +} diff --git a/sass/logo.scss b/sass/logo.scss new file mode 100644 index 0000000..b1248e8 --- /dev/null +++ b/sass/logo.scss @@ -0,0 +1,9 @@ +.logo { + display: flex; + align-items: center; + text-decoration: none; + background: var(--accent); + color: black; + padding: 5px 10px; + border-radius: 20px 0 0 20px; +} diff --git a/sass/main.scss b/sass/main.scss new file mode 100644 index 0000000..58e3764 --- /dev/null +++ b/sass/main.scss @@ -0,0 +1,255 @@ +@import "variables"; + +html { + box-sizing: border-box; +} + +*, +*:before, +*:after { + box-sizing: inherit; +} + +body { + margin: 0; + padding: 0; + font-family: Monaco, Consolas, Ubuntu Mono, monospace; + font-size: 1rem; + line-height: 1.54; + background-color: var(--background); + color: var(--color); + text-rendering: optimizeLegibility; + -webkit-font-smoothing: antialiased; + -webkit-overflow-scrolling: touch; + -webkit-text-size-adjust: 100%; + + @media (max-width: $phone-max-width) { + font-size: 1rem; + } +} + +h1, h2, h3, h4, h5, h6 { + display: flex; + align-items: center; + font-weight: bold; + line-height: 1.3; + color: var(--accent2); +} + +h1 { + font-size: 1.4rem; +} + +h2 { + font-size: 1.3rem; +} + +h3 { + font-size: 1.2rem; +} + +h4, h5, h6 { + font-size: 1.15rem; +} + + +a { + color: inherit; +} + +img { + display: block; + max-width: 100%; + + &.left { + margin-right: auto; + } + + &.center { + margin-left: auto; + margin-right: auto; + } + + &.right { + margin-left: auto; + } +} + +p { + margin-bottom: 20px; +} + +figure { + display: table; + max-width: 100%; + margin: 25px 0; + + &.left { + img { + margin-right: auto; + } + } + + &.center { + img { + margin-left: auto; + margin-right: auto; + } + } + + &.right { + img { + margin-left: auto; + } + } + + figcaption { + font-size: 14px; + padding: 5px 10px; + margin-top: 5px; + background: var(--accent); + color: var(--background); + + &.left { + text-align: left; + } + + &.center { + text-align: center; + } + + &.right { + text-align: right; + } + } +} + +code { + font-family: monospace; + font-feature-settings: normal; + background: var(--accent-alpha-20); + padding: 1px 6px; + margin: 0 2px; + font-size: .95rem; +} + +pre { + font-family: monospace; + padding: 20px; + font-size: .95rem; + overflow: auto; + border-top: 1px solid rgba(255, 255, 255, .1); + border-bottom: 1px solid rgba(255, 255, 255, .1); + + @media (max-width: $phone-max-width) { + white-space: pre-wrap; + word-wrap: break-word; + } + + code { + padding: 0; + margin: 0; + background: none; + } +} + +blockquote { + border-top: 1px solid var(--accent); + border-bottom: 1px solid var(--accent); + margin: 40px 0; + padding: 25px; + + @media (max-width: $phone-max-width) { + padding-right: 0; + } + + &:before { + content: '”'; + font-family: Georgia, serif; + font-size: 3.875rem; + position: absolute; + left: -40px; + top: -20px; + } + + p:first-of-type { + margin-top: 0; + } + + p:last-of-type { + margin-bottom: 0; + } + + p { + position: relative; + } + + p:before { + content: '>'; + display: block; + position: absolute; + left: -25px; + color: var(--accent); + } +} + +table { + table-layout: fixed; + border-collapse: collapse; + width: 100%; + margin: 40px 0; +} + +table, th, td { + border: 1px dashed var(--accent); + padding: 10px; +} + +th { + color: var(--accent); +} + +ul, ol { + margin-left: 30px; + padding: 0; + + li { + position: relative; + } + + @media (max-width: $phone-max-width) { + margin-left: 20px; + } +} + +ol ol { + list-style-type: lower-alpha; +} + +.container { + display: flex; + flex-direction: column; + padding: 40px; + max-width: 864px; + min-height: 100vh; + margin: 0 auto; + + @media (max-width: $phone-max-width) { + padding: 20px; + } +} + +.content { + display: flex; +} + +hr { + width: 100%; + border: none; + background: var(--border-color); + height: 1px; +} + +.hidden { + display: none; +} diff --git a/sass/pagination.scss b/sass/pagination.scss new file mode 100644 index 0000000..566005b --- /dev/null +++ b/sass/pagination.scss @@ -0,0 +1,77 @@ +@import 'variables'; + +.pagination { + margin-top: 50px; + + &__title { + display: flex; + text-align: center; + position: relative; + margin: 100px 0 20px; + + &-h { + text-align: center; + margin: 0 auto; + padding: 5px 10px; + background: var(--background); + font-size: .8rem; + text-transform: uppercase; + letter-spacing: .1em; + z-index: 1; + } + + hr { + position: absolute; + left: 0; + right: 0; + width: 100%; + margin-top: 15px; + z-index: 0; + } + } + + &__buttons { + display: flex; + align-items: center; + justify-content: center; + + @media (max-width: $phone-max-width) { + flex-direction: column; + } + } +} + +.button { + position: relative; + display: inline-flex; + align-items: center; + justify-content: center; + font-size: 1rem; + border-radius: 8px; + max-width: 40%; + padding: 0; + cursor: pointer; + appearance: none; + + @media (max-width: $phone-max-width) { + max-width: 80%; + } + + + .button { + margin-left: 10px; + } + + a { + display: flex; + padding: 8px 16px; + text-overflow: ellipsis; + white-space: nowrap; + overflow: hidden; + } + + &__text { + text-overflow: ellipsis; + white-space: nowrap; + overflow: hidden; + } +} diff --git a/sass/post.scss b/sass/post.scss new file mode 100644 index 0000000..a59a28e --- /dev/null +++ b/sass/post.scss @@ -0,0 +1,135 @@ +@import "variables"; + +.posts { + width: 100%; + margin: 0 auto; +} + +.post { + width: 100%; + text-align: left; + margin: 20px auto; + padding: 20px 0; + + @media (max-width: $tablet-max-width) { + max-width: 660px; + } + + &:not(:last-of-type) { + border-bottom: 1px solid var(--border-color); + } + + %meta { + font-size: 1rem; + margin-bottom: 10px; + color: var(--accent-alpha-70); + } + + &-meta { + @extend %meta; + } + + &-meta-inline { + @extend %meta; + + display: inline; + } + + &-title { + --border: 2px dashed var(--accent); + position: relative; + color: var(--accent2); + margin: 0 0 15px; + padding-bottom: 15px; + border-bottom: var(--border); + font-weight: normal; + + a { + text-decoration: none; + } + } + + %tags { + margin-bottom: 20px; + font-size: 1rem; + opacity: .5; + } + + &-tags { + @extend %tags; + + display: block; + } + + &-tags-inline { + @extend %tags; + + display: inline; + + @media (max-width: $phone-max-width) { + display: block; + } + } + + &-content { + margin-top: 30px; + } + + &-cover { + border: 20px solid var(--accent); + background: transparent; + margin: 40px 0; + padding: 20px; + + @media (max-width: $phone-max-width) { + padding: 10px; + border-width: 10px; + } + } + + ul { + list-style: none; + + li:before { + content: '►'; + position: absolute; + left: -20px; + color: var(--accent); + } + } +} + +.post--regulation { + h1 { + justify-content: center; + } + + h2 { + justify-content: center; + margin-bottom: 10px; + + &+ h2 { + margin-top: -10px; + margin-bottom: 20px; + } + } +} + +.post-list { + .post-date { + color: var(--accent3); + text-decoration: none; + } + + a { + text-decoration: none; + } + + .post-list-title { + text-decoration: underline; + } + + .post-tag { + text-decoration: underline; + } +} diff --git a/sass/style.scss b/sass/style.scss new file mode 100644 index 0000000..3a289d7 --- /dev/null +++ b/sass/style.scss @@ -0,0 +1,8 @@ +@import 'buttons'; + +@import 'header'; +@import 'logo'; +@import 'main'; +@import 'post'; +@import 'pagination'; +@import 'footer'; diff --git a/sass/variables.scss b/sass/variables.scss new file mode 100644 index 0000000..3b95a9c --- /dev/null +++ b/sass/variables.scss @@ -0,0 +1,2 @@ +$phone-max-width: 683px; +$tablet-max-width: 899px; diff --git a/templates/404.html b/templates/404.html new file mode 100644 index 0000000..b081fbc --- /dev/null +++ b/templates/404.html @@ -0,0 +1,16 @@ +{% extends "index.html" %} + +{% block title %} +404 +{% endblock title %} + +{% block header_menu %} +{{ menu_macros::menu_for(config=config, current_item="") }} +{% endblock header_menu %} + +{% block content %} +
+

{% block heading %}Lost?{% endblock heading %}

+

{% block message %}This page does not exist.{% endblock message %}

+
+{% endblock content %} diff --git a/templates/archive.html b/templates/archive.html new file mode 100644 index 0000000..af9df6e --- /dev/null +++ b/templates/archive.html @@ -0,0 +1,15 @@ +{% extends "index.html" %} + +{%- block title -%} +{{ title_macros::title(page_title=page.title, main_title=config.title) }} +{%- endblock -%} + +{% block content %} +
+

{{ page.title }}

+ + {% set section = get_section(path="_index.md") %} + + {{ post_macros::list_posts(pages=section.pages) }} +
+{% endblock content %} diff --git a/templates/index.html b/templates/index.html new file mode 100644 index 0000000..271675d --- /dev/null +++ b/templates/index.html @@ -0,0 +1,117 @@ +{% import "macros/date.html" as date_macros -%} +{% import "macros/head.html" as head_macros -%} +{% import "macros/menu.html" as menu_macros -%} +{% import "macros/post.html" as post_macros -%} +{% import "macros/title.html" as title_macros -%} + + + + + + {%- block title %}{{ config.title }}{% endblock title -%} + {{ head_macros::head(config=config) }} + + {%- if config.generate_feed %} + + {% endif -%} + + {%- if config.extra.favicon %} + + {% endif -%} + + {%- block extra_head %} + {% endblock extra_head -%} + + + +
+ {% block header %} +
+
+ +
+ + {% block header_menu %} + {{ menu_macros::menu(config=config, current_path=current_path) }} + {% endblock header_menu %} +
+ {% endblock header %} + +
+ {% block content %} +
+ {%- if paginator %} + {%- set show_pages = paginator.pages -%} + {% else %} + {%- set show_pages = section.pages -%} + {% endif -%} + + {%- for page in show_pages %} +
+ {{ post_macros::header(page=page) }} + {{ post_macros::content(page=page, summary=true) }} +
+ {% endfor -%} + +
+ {% endblock content %} +
+ + {% block footer %} +
+ +
+ {% endblock footer %} + +
+{%- block extra_body %} +{% endblock extra_body -%} + + + diff --git a/templates/macros/date.html b/templates/macros/date.html new file mode 100644 index 0000000..e793735 --- /dev/null +++ b/templates/macros/date.html @@ -0,0 +1,3 @@ +{% macro now_year() %} + {{ now() | date(format="%Y") }} +{% endmacro %} diff --git a/templates/macros/head.html b/templates/macros/head.html new file mode 100644 index 0000000..596a3e2 --- /dev/null +++ b/templates/macros/head.html @@ -0,0 +1,9 @@ +{% macro head(config) %} + + + + + + + +{% endmacro head %} diff --git a/templates/macros/menu.html b/templates/macros/menu.html new file mode 100644 index 0000000..090388f --- /dev/null +++ b/templates/macros/menu.html @@ -0,0 +1,52 @@ +{% macro menu(config, current_path) %} + {%- set current_item = false -%} + {%- if config.extra.menu_items %} + {%- set menu_items = config.extra.menu_items -%} + + {%- for item in menu_items %} + {%- set abs_item_url = item.url | replace(from="$BASE_URL", to=config.base_url) -%} + {%- set is_current = current_url == abs_item_url ~ "/" + or current_url is starting_with(abs_item_url) + -%} + {%- set is_base = abs_item_url == config.base_url + or abs_item_url == config.base_url ~ "/" + -%} + + {%- if is_base %} + {%- set_global base_item = item -%} + {% endif -%} + + {%- if is_current and not is_base %} + {%- set_global current_item = item -%} + {% endif -%} + {% endfor -%} + + {%- if not current_item and base_item %} + {# Did not match any menu URLs -- assume it's a blog post #} + {%- set current_item = base_item -%} + {% endif -%} + + {{ menu_macros::menu_for(config=config, current_item=current_item) }} + {% endif -%} +{% endmacro menu %} + +{% macro menu_for(config, current_item) %} + {%- if config.extra.menu_items %} + {%- set menu_items = config.extra.menu_items -%} + + + {% endif -%} +{% endmacro menu %} + diff --git a/templates/macros/post.html b/templates/macros/post.html new file mode 100644 index 0000000..f760d48 --- /dev/null +++ b/templates/macros/post.html @@ -0,0 +1,103 @@ +{% macro content(page, summary) %} + {%- if summary and page.summary %} +
+ {{ page.summary | safe }} +
+
+ + + Read more  + ↩︎ + +
+ {% else %} +
+ {{ page.content | safe }} +
+ {%- endif %} +{% endmacro content %} + + +{% macro date(page) %} + + {%- if page.date %} + {{ page.date | date(format="%Y-%m-%d") }} + {% endif -%} + +{% endmacro post_date %} + + +{% macro earlier_later(page) %} + {%- if config.extra.enable_post_view_navigation and page.lower or page.higher %} + + {% endif -%} +{% endmacro earlier_later %} + + +{% macro header(page) %} +

{{ page.title }}

+
+ {{ post_macros::date(page=page) }} +
+ + {{ post_macros::tags(page=page) }} +{% endmacro header %} + + +{% macro list_posts(pages) %} + +{% endmacro list_posts %} + + +{% macro tags(page, short=false) %} + {%- if page.taxonomies and page.taxonomies.tags %} + + {%- if short %} + :: + {%- set sep = "," -%} + {% else %} + :: tags:  + {%- set sep = " " -%} + {% endif -%} + {%- for tag in page.taxonomies.tags %} + + {%- if not loop.last %}{{ sep | safe }}{% endif -%} + {% endfor -%} + + {% endif -%} +{% endmacro tags %} diff --git a/templates/macros/title.html b/templates/macros/title.html new file mode 100644 index 0000000..a8575de --- /dev/null +++ b/templates/macros/title.html @@ -0,0 +1,17 @@ +{% macro title(page_title, main_title) %} + {%- if config.extra.page_titles == "combined" -%} + {%- if page_title -%} + {{ page_title }} | {{ main_title }} + {%- else -%} + {{ main_title }} + {%- endif -%} + {%- elif config.extra.page_titles == "page_only" -%} + {%- if page_title -%} + {{ page_title }} + {%- else -%} + {{ main_title }} + {%- endif -%} + {%- else -%} + {{ main_title }} + {%- endif -%} +{% endmacro title %} diff --git a/templates/page.html b/templates/page.html new file mode 100644 index 0000000..f59d965 --- /dev/null +++ b/templates/page.html @@ -0,0 +1,13 @@ +{% extends "index.html" %} + +{%- block title -%} +{{ title_macros::title(page_title=page.title, main_title=config.title) }} +{%- endblock -%} + +{% block content %} +
+ {{ post_macros::header(page=page) }} + {{ post_macros::content(page=page, summary=false) }} + {{ post_macros::earlier_later(page=page) }} +
+{% endblock content %} diff --git a/templates/shortcodes/figure.html b/templates/shortcodes/figure.html new file mode 100644 index 0000000..b9de271 --- /dev/null +++ b/templates/shortcodes/figure.html @@ -0,0 +1,8 @@ +{% if src %} +
+ + {% if caption %} +
{{ caption }}
+ {% endif %} +
+{% endif %} diff --git a/templates/shortcodes/image.html b/templates/shortcodes/image.html new file mode 100644 index 0000000..410be76 --- /dev/null +++ b/templates/shortcodes/image.html @@ -0,0 +1,3 @@ +{% if src %} + +{% endif %} diff --git a/templates/tags/list.html b/templates/tags/list.html new file mode 100644 index 0000000..98cd693 --- /dev/null +++ b/templates/tags/list.html @@ -0,0 +1,21 @@ +{% extends "index.html" %} + +{%- block title -%} +{{ title_macros::title(page_title="Tags", main_title=config.title) }} +{%- endblock -%} + +{% block content %} +
+

all tags

+ + +
+{% endblock content %} diff --git a/templates/tags/single.html b/templates/tags/single.html new file mode 100644 index 0000000..92183b6 --- /dev/null +++ b/templates/tags/single.html @@ -0,0 +1,21 @@ +{% extends "index.html" %} + +{%- block title -%} +{% set title = "Tag: " ~ term.name %} +{{ title_macros::title(page_title=title, main_title=config.title) }} +{%- endblock -%} + +{% block content %} +
+

+ tag: #{{ term.name }} + ({{ term.pages | length }} post{{ term.pages | length | pluralize }}) +

+ + + Show all tags + + + {{ post_macros::list_posts(pages=term.pages) }} +
+{% endblock content %} diff --git a/theme.toml b/theme.toml new file mode 100644 index 0000000..cf9a4f2 --- /dev/null +++ b/theme.toml @@ -0,0 +1,12 @@ +name = "cherrykitten" +description = "Personal website theme, based on terminimal theme" +license = "MIT" +homepage = "https://git.cherrykitten.dev/sammy/zola-theme-cherrykitten" + +[author] +name = "CherryKitten" +homepage = "https://cherrykitten.dev" + +[original] +author = "Paweł Romanowski" +homepage = "https://github.com/pawroman/zola-theme-terminimal"