From 4086266d9cb96c87b66aaabc6e33334c2a296f9a Mon Sep 17 00:00:00 2001 From: jimmyff Date: Wed, 1 Feb 2023 17:58:59 +0000 Subject: [PATCH] Initial import of zola-inky --- CHANGELOG.md | 18 ++ README.md | 56 ++++ config.toml | 73 +++++ content/_index.md | 20 ++ content/about.md | 18 ++ content/gallery/_index.md | 8 + content/gallery/luctus-dolor/1.png | Bin 0 -> 2363 bytes content/gallery/luctus-dolor/index.md | 13 + content/gallery/quisque-viverra/4.png | Bin 0 -> 2461 bytes content/gallery/quisque-viverra/index.md | 14 + content/gallery/suspendisse-quis/2.png | Bin 0 -> 2474 bytes content/gallery/suspendisse-quis/3.png | Bin 0 -> 2395 bytes content/gallery/suspendisse-quis/index.md | 16 + content/posts/_index.md | 8 + content/posts/lorem-ipsum.md | 18 ++ content/posts/reponsive-images/1.png | Bin 0 -> 2363 bytes content/posts/reponsive-images/index.md | 17 ++ content/posts/typography.md | 82 +++++ content/search.md | 6 + sass/base.scss | 142 +++++++++ sass/blog.scss | 117 ++++++++ sass/custom.scss | 1 + sass/footer.scss | 9 + sass/gallery.scss | 50 +++ sass/header.scss | 89 ++++++ sass/normalize.scss | 351 ++++++++++++++++++++++ sass/search.scss | 58 ++++ sass/tags.scss | 9 + sass/typography.scss | 89 ++++++ sass/utilities.scss | 19 ++ sass/variables.scss | 17 ++ screenshot.png | Bin 0 -> 92626 bytes static/inky.png | Bin 0 -> 5294 bytes static/js/search.js | 180 +++++++++++ templates/base.html | 134 +++++++++ templates/gallery.html | 25 ++ templates/index.html | 6 + templates/macros/head.html | 11 + templates/macros/hooks.html | 6 + templates/macros/images.html | 47 +++ templates/macros/opengraph.html | 53 ++++ templates/page.html | 16 + templates/post.html | 29 ++ templates/search.html | 22 ++ templates/section.html | 33 ++ templates/shortcodes/image.html | 5 + templates/shortcodes/spotify.html | 5 + templates/shortcodes/thumbnail.html | 22 ++ templates/shortcodes/youtube.html | 7 + templates/taxonomy_list.html | 14 + templates/taxonomy_single.html | 29 ++ theme.toml | 19 ++ 52 files changed, 1981 insertions(+) create mode 100644 CHANGELOG.md create mode 100644 README.md create mode 100644 config.toml create mode 100644 content/_index.md create mode 100644 content/about.md create mode 100644 content/gallery/_index.md create mode 100644 content/gallery/luctus-dolor/1.png create mode 100644 content/gallery/luctus-dolor/index.md create mode 100644 content/gallery/quisque-viverra/4.png create mode 100644 content/gallery/quisque-viverra/index.md create mode 100644 content/gallery/suspendisse-quis/2.png create mode 100644 content/gallery/suspendisse-quis/3.png create mode 100644 content/gallery/suspendisse-quis/index.md create mode 100644 content/posts/_index.md create mode 100644 content/posts/lorem-ipsum.md create mode 100644 content/posts/reponsive-images/1.png create mode 100644 content/posts/reponsive-images/index.md create mode 100644 content/posts/typography.md create mode 100644 content/search.md create mode 100644 sass/base.scss create mode 100644 sass/blog.scss create mode 100644 sass/custom.scss create mode 100644 sass/footer.scss create mode 100644 sass/gallery.scss create mode 100644 sass/header.scss create mode 100644 sass/normalize.scss create mode 100644 sass/search.scss create mode 100644 sass/tags.scss create mode 100644 sass/typography.scss create mode 100644 sass/utilities.scss create mode 100644 sass/variables.scss create mode 100644 screenshot.png create mode 100644 static/inky.png create mode 100644 static/js/search.js create mode 100644 templates/base.html create mode 100644 templates/gallery.html create mode 100644 templates/index.html create mode 100644 templates/macros/head.html create mode 100644 templates/macros/hooks.html create mode 100644 templates/macros/images.html create mode 100644 templates/macros/opengraph.html create mode 100644 templates/page.html create mode 100644 templates/post.html create mode 100644 templates/search.html create mode 100644 templates/section.html create mode 100644 templates/shortcodes/image.html create mode 100644 templates/shortcodes/spotify.html create mode 100644 templates/shortcodes/thumbnail.html create mode 100644 templates/shortcodes/youtube.html create mode 100644 templates/taxonomy_list.html create mode 100644 templates/taxonomy_single.html create mode 100644 theme.toml diff --git a/CHANGELOG.md b/CHANGELOG.md new file mode 100644 index 0000000..cd3f293 --- /dev/null +++ b/CHANGELOG.md @@ -0,0 +1,18 @@ + +# Changelog + +All notable changes to this project will be documented in this file. + +## [1.0] + +- Packaged the theme based on the work of mr-karan and hugo-ink +- Created sample theme content, readme & changelog +- Added search template & feature +- Added gallery template & feature +- Added macro/hooks.html for customisability +- Added avatar image to header +- Added social buttons in footer +- Added tags to posts below main content +- Added responsive image macros (original author: crepererum) +- Refactored templates for consistency +- Refactored styling (more to do) & fixes for styling inconsistencies diff --git a/README.md b/README.md new file mode 100644 index 0000000..d6e65cd --- /dev/null +++ b/README.md @@ -0,0 +1,56 @@ + +# Zola-Inky + +> An elegant and understated theme for Zola + +Zola Inky ([View demo](https://jimmyff.github.io/zola-inky)) is a theme by [jimmyff](https://github.com/jimmyff) and [mr-karan](https://github.com/mr-karan) for the Zola static site generator. This theme was originally based on the [hugo-ink](https://github.com/knadh/hugo-ink) theme, ported by mr-karan. It was then packaged and developed further by jimmyff. The theme is available on [Github](()) under the MIT license, for more information on how to use it please see the [readme](https://github.com/jimmyff/zola-inky/README.md) and check the [changelog](https://github.com/jimmyff/zola-inky/CHANGELOG.md) for a list of the latest changes. + +[![PNG](screenshot.png)](https://jimmyff.github.io/zola-inky) + +## Changelog + +For latest changes please see the [changelog](CHANGELOG.md). + +## Features + +- Responsive design +- Responsive images +- Gallery template +- Taxonomy support +- Search +- Customisable via template hooks + +## Getting started + +1. Add this theme to your `themes/` folder (recommended method: git submodule). +2. Copy of the the theme's config.toml file and put in your projects root directory. Update it as required and don't forget to add `theme = 'zola-inky'` at the top of the file. +3. Copy this contents of the `content/` directory the root of your project and change the files as your necessary. + +## Customising the theme + +- __To change the settings__ copy `config.toml` in to your project and update as required (make sure you add the theme variable at the top of the file, see the getting started heading above). +- __To change the themes colours__ copy `sass/variables.scss` in to your project under the same folder and update as required. +- __To inject content in to templates__ copy `templates/macros/hooks.html` and update as required. + +## Using the responsive image shortcode + +Using the responsive images will make sure your images are generated at various sizes and served up to viewers at the size that best suits their device via the image srcset attribute. You can use this feature in your markdown like so: + +```md +{{ image(src="yourimage.jpg", alt="This is my image") }} +``` + +## Feature requests & support + +I'm afraid I'm unable to accept feature requests or provide user support for this theme. The [Zola documentation](https://www.getzola.org/documentation/getting-started/overview/) and [Tera documentation](https://tera.netlify.app/docs/) are great resources and there is a [Zola discussion forum](https://zola.discourse.group/). If you've found a bug in the themse please open a github issue. + +## Contributing + +Contributions are very welcome! If you are planning to add a feature to the theme then feel free to open an issue to discuss your approach and we will be able to say if it's it will likely be accepted. Please keep the following in mind: + +- Only widely generic features will be accepted, anything too specific should be kept to your own templates. +- Be careful about destroying indentation as Tera syntax doesn't seem to be widely supported by IDEs. +- Keep it lean. Adding bloat will likely result in your PR being rejected. +- Consider backward compatibility, ideally people blindly-upgrading won't see any unexpected changes to their sites. + +New theme maintainers are welcome but should provide pull-request or two first! diff --git a/config.toml b/config.toml new file mode 100644 index 0000000..8ab5295 --- /dev/null +++ b/config.toml @@ -0,0 +1,73 @@ +title = "Zola Inky" +description = "An elegant and understated theme for Zola" + +# The URL the site will be built for +base_url = "http://127.0.0.1:1111" + +# Whether to automatically compile all Sass files in the sass directory +compile_sass = true + +# Whether to build a search index to be used later on by a JavaScript library +build_search_index = true +default_language = "en" + +# The taxonomies to be rendered for the site and their configuration of the default languages +# Example: +# taxonomies = [ +# {name = "tags", feed = true}, # each tag will have its own feed +# {name = "tags"}, # you can have taxonomies with the same name in multiple languages +# {name = "categories", paginate_by = 5}, # 5 items per page for a term +# {name = "authors"}, # Basic definition: no feed or pagination +# ] +# +taxonomies = [{ name = "tags", lang = "en", rss = true }] + +[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 + + +[slugify] +paths = "on" +taxonomies = "on" +anchors = "on" + +[extra] + +# Place your avatar in your /static folder +avatar = "/inky.png" + +keywords = "zola, theme, ink, hugo-ink" + +search_enabled = false + + +image_resizing_disabled = false +image_format = "auto" # "auto", "jpg", "png", "webp" + +# responsive image shortcode +# example: {{ image(src="foo.jpeg", alt="some image") }} +image_quality = 80 +images_default_size = 1024 +images_sizes = [512, 1024, 2048] + +thumbnail_quality = 70 +thumbnail_default_size = 256 +thumbnail_sizes = [128, 256] + + +link_github_username = "jimmyff/zola-inky" +# link_twitter_username = "" +# link_mastodon_url = "" +# link_medium_username = "" +# link_instagram_username = "" + +menu_links = [ + { url = "$BASE_URL/", name = "About" }, + { url = "$BASE_URL/posts/", name = "Posts" }, + { url = "$BASE_URL/gallery/", name = "Gallery" }, + { url = "$BASE_URL/tags/", name = "Tags" }, + # { url = "https://github.com/jimmyff/zola-inky", name = "Github" }, + { url = "$BASE_URL/search/", name = "Search" }, +] diff --git a/content/_index.md b/content/_index.md new file mode 100644 index 0000000..4147bea --- /dev/null +++ b/content/_index.md @@ -0,0 +1,20 @@ ++++ +title = "Zola-Inky" +images = [] +template = "index.html" +in_search_index = true ++++ + +# About this theme + +Zola Inky is a theme by [jimmyff](https://github.com/jimmyff) and [mr-karan](https://github.com/mr-karan) for the Zola static site generator. This theme was originally based on the [hugo-ink](https://github.com/knadh/hugo-ink) theme, ported by mr-karan. It was then packaged and developed further by jimmyff. The theme is available on [Github](()) under the MIT license, for more information on how to use it please see the [readme](https://github.com/jimmyff/zola-inky/README.md) and check the [changelog](https://github.com/jimmyff/zola-inky/CHANGELOG.md) for a list of the latest changes. + +--- + +## Getting started + +Below are some basic steps to getting started with this theme however the readme has the most up-to-date and detailed instructions. + + 1. Add this theme to your `themes/` folder (recommended method: git submodule). + 2. Copy of the the theme's config.toml file and put in your projects root directory. Update it as required and don't forget to add `theme = 'zola-inky'` at the top of the file. + 3. Copy this contents of the `content/` directory the root of your project and change the files as your necessary. diff --git a/content/about.md b/content/about.md new file mode 100644 index 0000000..d790b35 --- /dev/null +++ b/content/about.md @@ -0,0 +1,18 @@ ++++ +title = "About" +images = [] +template = "page.html" +in_search_index = true ++++ + +Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nunc eu feugiat sapien. Aenean ligula nunc, laoreet id sem in, interdum bibendum felis. Donec vel dui neque. Praesent ac sem ut justo volutpat rutrum a imperdiet tellus. Nam lobortis massa non hendrerit hendrerit. Vivamus porttitor dignissim turpis, eget aliquam urna tincidunt non. Aliquam et fringilla turpis. Nullam eros est, eleifend in ornare sed, hendrerit eget est. Aliquam tellus felis, suscipit vitae ex vel, fringilla tempus massa. Nulla facilisi. Pellentesque lobortis consequat lectus. Maecenas ac libero elit. + + + +Ut luctus dolor ut tortor hendrerit, sed hendrerit augue scelerisque. Suspendisse quis sodales dui, at tempus ante. Nulla at tempor metus. Aliquam vitae rutrum diam. Curabitur iaculis massa dui, quis varius nulla finibus a. Praesent eu blandit justo. Suspendisse pharetra, arcu in rhoncus rutrum, magna magna viverra erat, eget vestibulum enim tellus id dui. Nunc vel dui et arcu posuere maximus. Mauris quam quam, bibendum sed libero nec, tempus hendrerit arcu. Suspendisse sed gravida orci. Fusce tempor arcu ac est pretium porttitor. Aenean consequat risus venenatis sem aliquam, at sollicitudin nulla semper. Aenean bibendum cursus hendrerit. Nulla congue urna nec finibus bibendum. Donec porta tincidunt ligula non ultricies. + +Sed vulputate tristique elit, eget pharetra elit sodales sed. Proin dignissim ipsum lorem, at porta eros malesuada sed. Proin tristique eros eu quam ornare, suscipit luctus mauris lobortis. Phasellus ut placerat enim. Donec egestas faucibus maximus. Nam quis efficitur eros. Cras tincidunt, lacus ac pretium porta, dui dolor varius elit, eget laoreet justo justo vitae metus. Morbi eget nisi ut ex scelerisque lobortis ut in lorem. Vestibulum et lorem quis ipsum feugiat varius. Mauris nec nulla viverra nisi porttitor efficitur. Morbi vel purus eleifend, finibus erat non, placerat ipsum. Mauris et augue vel nisi volutpat aliquam. Curabitur malesuada tortor est, at condimentum neque eleifend in. + +Morbi id ornare lacus. Suspendisse ultrices rutrum posuere. Nullam porttitor libero quis ligula finibus semper. Mauris iaculis magna et nisl tristique, eget maximus ex feugiat. Nam eu felis leo. Quisque ultrices varius purus in molestie. Duis non accumsan ligula. Vivamus dignissim malesuada metus, vel hendrerit tellus viverra id. Curabitur posuere, mauris vitae dignissim dictum, velit mi condimentum lorem, nec varius velit arcu a mi. In dolor sapien, condimentum sed aliquam at, dignissim id purus. Cras lorem leo, vulputate ac ante sed, molestie tempus lectus. Curabitur efficitur libero quam, rhoncus faucibus libero pharetra nec. Curabitur lobortis ullamcorper nisl eu imperdiet. Duis porttitor interdum magna, ac eleifend orci consequat vitae. Aliquam augue felis, faucibus vel blandit sed, maximus non turpis. + +Quisque viverra a eros id auctor. Proin id nibh ut nisl dignissim pellentesque et ac mi. Nullam mattis urna quis consequat bibendum. Donec pretium dui elit, a semper purus tristique et. Mauris euismod nisl eu vehicula facilisis. Maecenas facilisis non massa non scelerisque. Integer malesuada cursus erat eu viverra. Duis ligula mi, eleifend vel justo id, laoreet porttitor ex. Etiam ultricies lacus lorem, sed aliquam nulla blandit in. Maecenas vel facilisis neque, vitae fringilla eros. In justo nibh, pellentesque sed faucibus nec, varius sit amet risus. diff --git a/content/gallery/_index.md b/content/gallery/_index.md new file mode 100644 index 0000000..3b64f77 --- /dev/null +++ b/content/gallery/_index.md @@ -0,0 +1,8 @@ ++++ +title = "Example gallery" +sort_by = "date" +template = "gallery.html" +page_template = "section.html" ++++ + +Here is the example gallery. The gallery uses a responsive grid and responsive image sizes. These example images are a mix of landscape and portrait images. You can include any number of images from each post and they are grouped by year. diff --git a/content/gallery/luctus-dolor/1.png b/content/gallery/luctus-dolor/1.png new file mode 100644 index 0000000000000000000000000000000000000000..ed1b35424dfdfb94999935525cf5ad5c13069e58 GIT binary patch literal 2363 zcmcgteM}Q)7(YO_f#@=I$}sBf0Edv?U5gZZ^iXKA5GmHuj?cxN?OS@#_Uhf$7RNF_ zB4lQp)66AyWSi5tpy=EXCsA~g8D(L*%>~_b`iC;6`!IgSkWBX863Zn_taXdh?@ob#L@)A%jZ+B2; z{i0!Ic%m_CI64xU+Z#6S5r(sebsz$amr&v)F`Ddkav~=#f3VxQlnNY zRJc;+O5LJNYyh|_^sF0r1UOkVHh(zT2wFJ`RgXqx?`3eMpo@@6siRb}o2domtX*_Q ztVMtl;Hj065lb>6b;jkBM%(IPVJ}s3fHG7O!DuW;MT~M(83jqpf@~aXuTnH67hv;W`kY5XDhsN?94i-k* zfSRN&LRF{=C-G1V!YY0zfab<_a(GCH;iw2{kw?PP5>bI`Wx}Yy{>+SkQEG=UhB>I+tAjK~vR* z^y=h}9a~iwT%Y}II)Aw9`i}mWJFV{>yz%?mqpPd?tL9>9U)D^?X*+xC=eosrTTTgi z1FwBJaJ6M%wPN$q_C@Qaf6;k()}+BLoxdIa;da5ySI(`t{8np|T20UVWasM_7wz@jwJVNJ7)GZ z&rbfxc&lrA@W8f%Ah^u1vr^kM_|m~%>&@~>%st)hJsWi5W;!k*r9Q@23*IMG~MHZ(MZEX-)V4bSo3qDlclCQOmu7$n$|1pjnt z#rk|ppykig`OmE;k+1e`{W>*c#lFiiZ8_%g-_BRFZLUKfoUz&n zy=v94GL#gUgX25|j(fdcu{T9bGj=>VJv|+lNO7rD1Q{Z>+|7|bk(*86O@wTy0Bd0= z4@c2%l($Ki&}Ezg!yt~1MCS5@jl0?5?BP4$KGK6HizWDIvd2MlH0z+Bq7sJ3DFPoA z$zhBe9vMgHDBDx$JTi_B-&(7Eb`~zzm_%4ky%|2l@S~0iXe4jeQ0@V^9T zz|AEHZvnj#N(PV|P{E%9lS-s1B1y6+CD|ZJCz6*EOH-31@Px@)+Dh5V|BalIN~Fq) zB1G63R+1zCgBpHjf+vPTferc0I3hYq+DS7oBp7*$;5h>2D3v;fwoy)qv3gAwnxj_A zlG9}}kyM;4aQSKxI?4x}W)tB?zl{9RQjeTgl-j!H1*5`9U5DOOB5VTrLnsO+M5M-NB6l zR}&uIO;8ALH{gaH#K7HEwJEv@L89KJU@wg80R&0hUAFsH(zZ3TFRZA(czCgR!7Mu7 z^l5d`&BWsPrbGLrH=W-+*4;SU(toITZL{&CGxz?eYTa7gTeKKk`0ctGX${vN{IYTN zquNe3qwnp{`fk_uZ58cV)3|Eetdq@W=S>^h+x+|49|p4KzIA<5&(6APnM^VFz~L?3 zt501&df|w1`CscB@r7}(-tlkO7`2zDDw}d0_5F;`D;bMSphnRt3Bt&%^K4 zpRb$#PH}@K5OusMCaG@8ho%$$uExN9X5G&nM~cqvdN^H!r7ce=-PPfa3rxIsP}06E zsxnT3b=TBn4gt*vmHqUSnMr%J((>C!14j(`7yUC8uO}$m?gVe0i*MiG zrZ20RAOE@bLCY-v>HTMbf4$~#p}czNjWZp_`=)8+pmN~oj^7BRZ*uK=gugOM$+?#7IZfcM(6wOH(KMXg`GfD!NevL>^+K5#b0?&Vn s_U(OsrGIMp?V=Z~hC(ZSsV2)`qIT0kXxzg8%>k literal 0 HcmV?d00001 diff --git a/content/gallery/quisque-viverra/index.md b/content/gallery/quisque-viverra/index.md new file mode 100644 index 0000000..d861d39 --- /dev/null +++ b/content/gallery/quisque-viverra/index.md @@ -0,0 +1,14 @@ ++++ +title = "Quisque viverra" +date = 2022-01-17 +[taxonomies] +tags= ["Zola", "Theme", "gallery"] +[extra] +images= ["4.png"] ++++ + +Quisque viverra a eros id auctor. Proin id nibh ut nisl dignissim pellentesque et ac mi. Nullam mattis urna quis consequat bibendum. Donec pretium dui elit, a semper purus tristique et. Mauris euismod nisl eu vehicula facilisis. Maecenas facilisis non massa non scelerisque. Integer malesuada cursus erat eu viverra. + +{{ image(src="4.png", alt="Example image") }} + +Duis ligula mi, eleifend vel justo id, laoreet porttitor ex. Etiam ultricies lacus lorem, sed aliquam nulla blandit in. Maecenas vel facilisis neque, vitae fringilla eros. In justo nibh, pellentesque sed faucibus nec, varius sit amet risus. diff --git a/content/gallery/suspendisse-quis/2.png b/content/gallery/suspendisse-quis/2.png new file mode 100644 index 0000000000000000000000000000000000000000..426af73108a9ba305a156e37d78ac4706ff45fbc GIT binary patch literal 2474 zcmd5-eM}Q)7(c|hfxsW?)UctqLm9%_YYS94S{<}lIw{uDO8Hpa(O%n=wpZ^CTNsND zCuC-u^D|jTwmA(8QXLLIAQKHuoU$3WY!N>&nz$fSh6Dv;NVe|1E3_r3`(yjVH@W0} z-rw(ip5OaE&-31g+9FkaY+@_~LGkJWr4E8-7$GPco)HaJ>JvswAn1h`NxhLZY6>wE z%EkZhI5g`27f7Oo_$q*IOze}5K%NwXX&$qaq0^kq7`oz|=Td+#_%@$()Oz z4<*5vXwt=!loRHB;+0f2D@PE3!;{J!u8?ylGjV!w52y!sp<Bl6iYES>M2`7 z@U)GDhYX)#N*E5AMrTROQ|KHrjSlWwqj~lz9F8dmVc7i5;36h2b&8Uc9L%$80HHI!%bX#IpU%zbG3;u^Ado&Aj(h{){WCd zt`*dd9LcpBfV-)goG21>LKVt2@}w*oI!(BYCq#5U z*cV&_FA8{?(9qiijL_>wI6(!`;O!bIADs_DQSXzW7N*qz1f}k(-gPT|+q#A4S2bK{ zUM5_!fJ!X+yrJwyYI)*`L!U`**uVWt+jqKa_)!1)PQ%`gk-_@2Tg&^)mLW?|Rm@%P zyYle*#x;+cE-@+Qq|VXLgRwQ6bB7lB;%JbjJB- zjvN&Atca?M6CpPn8*|4A)yH+i)Zg>ccen1ilKNG9;f~CjyGQ(o^=mJ9=gD77R&?JB z+&YukbD&#S-MBdMOU=Ws1>TbfItcFuRdcDVVf^)ui-rd!3HW2h=#d?FFlb;_(+0!w z$HEGG-oU~6znRYJx(drBG1ND|ByNB7imfzt%vX1*CtBIt-+C0M7LPBv+4(qnt=HPu zrAxU0enN5DLVbSjSm27(6*wVE$?rLTzcdM~&t!E)#eqNodNZwM6xcDYf>H*8X3yom zD9GEi5d7`-s+GBVPt(x#?s&fln%SMH-lOkX{ORp@@v*(vW;tU!hC0oCm$we%``X?z zF7?e>AJh7Q!JqbAn6*~9Fn0F;HwIIDLt0~K47SbM6f%rkOhdQZLZf+6LTDZ_x&Om> z)2lHdMS~T+ci}fChcDWvjQ58= aSR1uJVCZv^bAJLw3#s#qlt=U4ss9J|mvk}! literal 0 HcmV?d00001 diff --git a/content/gallery/suspendisse-quis/3.png b/content/gallery/suspendisse-quis/3.png new file mode 100644 index 0000000000000000000000000000000000000000..3e6a8bdf109ee72a21ed2af12ae2f1535b076929 GIT binary patch literal 2395 zcmcgtdrT8|96t(9i)c1=YS`5CKt)M=ZF$MrBGA^tq)4m5L>3u(88Ju@qyW9^>MNM>rBL zGSEXv8V(s@&XVTGm~+Sob8y#M?UTE(*+Lp&SoJD!5kr?6QqXYUjKS?7P(8s=m9&vi zuOjSh41X6O8>XZQoF!D?r$A&9S%OF+6(vXwl2lBZh$SY)OMv)|wUmi8yZ_BNAq7iJ zDG3+?W|(jm{|{6DHDjEiuM|MYC)N@0QBqcl1|@;Y6Zp&lC|jx2(Uh6A0*ujXGU05s zGFh6MoGg-wrMxXSElfwc2y2mwv=Md&FiU~VA8Iy$76+lp!6=_SAFLEe;S0%46w9{Z zWkexqVl9Da0U(F4mvP8&Bp%@=W3A+)``X9)^S?|%V3#UBKD2I@8Yx&AYAAqhe(1BRfTekJY1F>9Z|TPHwfB%;O9F7 zFA8{?Q2*Nm6#wf+*a3rR@OJ%pps@sk!fHssg%KQppt#MIo3F<Qc?Z!dma1x#HL< zRCM9?+LB9grO`)rZeAklxyY<9mQ74)?78a^(Hz<31_RjR40;t2j>y2J~w}Ga1ctL*Ki-`LPu6H13_aaa=$Rh zQ$H1a>D1Y(41=rw*0~ztx^yTaV|&i~4d(@KwY~D?cRNHswG^kJWa}R%Is^@)^ka8V z&Jt}Zfsdq@*L?d_2ghb!*)9ls7Sj5{q58;(V7d1E=wQ_}!MiD35G4Ju_v`e>%k>&- z-fdxUgb368F+u(Unb717Y0VvX?d8cK9wEv#?WS7?chyt}%b#0E1&7!cA&U)$tL5Wq q61)Qci}YmNe9Cc#GN7p^eW`crZ*$V{HAex + +Ut luctus dolor ut tortor hendrerit, sed hendrerit augue scelerisque. Suspendisse quis sodales dui, at tempus ante. Nulla at tempor metus. Aliquam vitae rutrum diam. Curabitur iaculis massa dui, quis varius nulla finibus a. Praesent eu blandit justo. Suspendisse pharetra, arcu in rhoncus rutrum, magna magna viverra erat, eget vestibulum enim tellus id dui. Nunc vel dui et arcu posuere maximus. Mauris quam quam, bibendum sed libero nec, tempus hendrerit arcu. Suspendisse sed gravida orci. Fusce tempor arcu ac est pretium porttitor. Aenean consequat risus venenatis sem aliquam, at sollicitudin nulla semper. Aenean bibendum cursus hendrerit. Nulla congue urna nec finibus bibendum. Donec porta tincidunt ligula non ultricies. + +Sed vulputate tristique elit, eget pharetra elit sodales sed. Proin dignissim ipsum lorem, at porta eros malesuada sed. Proin tristique eros eu quam ornare, suscipit luctus mauris lobortis. Phasellus ut placerat enim. Donec egestas faucibus maximus. Nam quis efficitur eros. Cras tincidunt, lacus ac pretium porta, dui dolor varius elit, eget laoreet justo justo vitae metus. Morbi eget nisi ut ex scelerisque lobortis ut in lorem. Vestibulum et lorem quis ipsum feugiat varius. Mauris nec nulla viverra nisi porttitor efficitur. Morbi vel purus eleifend, finibus erat non, placerat ipsum. Mauris et augue vel nisi volutpat aliquam. Curabitur malesuada tortor est, at condimentum neque eleifend in. + +Morbi id ornare lacus. Suspendisse ultrices rutrum posuere. Nullam porttitor libero quis ligula finibus semper. Mauris iaculis magna et nisl tristique, eget maximus ex feugiat. Nam eu felis leo. Quisque ultrices varius purus in molestie. Duis non accumsan ligula. Vivamus dignissim malesuada metus, vel hendrerit tellus viverra id. Curabitur posuere, mauris vitae dignissim dictum, velit mi condimentum lorem, nec varius velit arcu a mi. In dolor sapien, condimentum sed aliquam at, dignissim id purus. Cras lorem leo, vulputate ac ante sed, molestie tempus lectus. Curabitur efficitur libero quam, rhoncus faucibus libero pharetra nec. Curabitur lobortis ullamcorper nisl eu imperdiet. Duis porttitor interdum magna, ac eleifend orci consequat vitae. Aliquam augue felis, faucibus vel blandit sed, maximus non turpis. + +Quisque viverra a eros id auctor. Proin id nibh ut nisl dignissim pellentesque et ac mi. Nullam mattis urna quis consequat bibendum. Donec pretium dui elit, a semper purus tristique et. Mauris euismod nisl eu vehicula facilisis. Maecenas facilisis non massa non scelerisque. Integer malesuada cursus erat eu viverra. Duis ligula mi, eleifend vel justo id, laoreet porttitor ex. Etiam ultricies lacus lorem, sed aliquam nulla blandit in. Maecenas vel facilisis neque, vitae fringilla eros. In justo nibh, pellentesque sed faucibus nec, varius sit amet risus. diff --git a/content/posts/reponsive-images/1.png b/content/posts/reponsive-images/1.png new file mode 100644 index 0000000000000000000000000000000000000000..ed1b35424dfdfb94999935525cf5ad5c13069e58 GIT binary patch literal 2363 zcmcgteM}Q)7(YO_f#@=I$}sBf0Edv?U5gZZ^iXKA5GmHuj?cxN?OS@#_Uhf$7RNF_ zB4lQp)66AyWSi5tpy=EXCsA~g8D(L*%>~_b`iC;6`!IgSkWBX863Zn_taXdh?@ob#L@)A%jZ+B2; z{i0!Ic%m_CI64xU+Z#6S5r(sebsz$amr&v)F`Ddkav~=#f3VxQlnNY zRJc;+O5LJNYyh|_^sF0r1UOkVHh(zT2wFJ`RgXqx?`3eMpo@@6siRb}o2domtX*_Q ztVMtl;Hj065lb>6b;jkBM%(IPVJ}s3fHG7O!DuW;MT~M(83jqpf@~aXuTnH67hv;W`kY5XDhsN?94i-k* zfSRN&LRF{=C-G1V!YY0zfab<_a(GCH;iw2{kw?PP5>bI`Wx}Yy{>+SkQEG=UhB>I+tAjK~vR* z^y=h}9a~iwT%Y}II)Aw9`i}mWJFV{>yz%?mqpPd?tL9>9U)D^?X*+xC=eosrTTTgi z1FwBJaJ6M%wPN$q_C@Qaf6;k()}+BLoxdIa;da5ySI(`t{8np|T20UVWasM_7wz@jwJVNJ7)GZ z&rbfxc&lrA@W8f%Ah^u1vr^kM_|m~%>&@~>%st)hJsWi5W;!k*r9Q@23*IMG~MHZ(MZEX-)V4bSo3qDlclCQOmu7$n$|1pjnt z#rk|ppykig`OmE;k+1e`{W>*c#lFiiZ8_%g-_BRFZL 'I want to do with you what spring does with the cherry trees.' cited ~Pablo Neruda* + +> Et harum quidem *rerum facilis* est et expeditasi distinctio. Nam libero tempore, cum soluta nobis est eligendi optio cumque nihilse impedit + +Unordered list + +* Red +* Green +* Blue + +Ordered list + +1. Red +2. Green +3. Blue diff --git a/content/search.md b/content/search.md new file mode 100644 index 0000000..25a1272 --- /dev/null +++ b/content/search.md @@ -0,0 +1,6 @@ ++++ +title = "Search" +images = [] +template = "search.html" +in_search_index = false ++++ \ No newline at end of file diff --git a/sass/base.scss b/sass/base.scss new file mode 100644 index 0000000..8b68a1b --- /dev/null +++ b/sass/base.scss @@ -0,0 +1,142 @@ +/*Resets*/ +@import "normalize.css"; + +/*Site Wide Components*/ +@import "variables.css"; +@import "utilities.css"; +@import "typography.css"; +@import "header.css"; +@import "footer.css"; +@import "search.css"; + +/* Page Specific Components*/ +@import "blog.css"; +@import "gallery.css"; +@import "tags.css"; +@import "custom.css"; + +body { + font-family: var(--font-base); + word-wrap: break-word; + background-color: var(--bg-color); + color: var(--text-color); + max-width: 50em; + font-size: 1.25rem; + margin: 0 auto; + padding: 0 3rem; + line-height: 1.8rem; + display: flex; + min-height: 100vh; + flex-direction: column; + overflow-y: scroll; +} + +::selection { + text-shadow: none; + color: #fff; + background: var(--text-color); +} + +article { + flex: 1; + margin-bottom: 2rem; +} + +.highlight-handle { + background: var(--text-color); + border-radius: 4px; + color: var(--white); + padding: 4px 8px; +} + +pre { + margin-bottom: 0; + margin-top: 0; + padding: 20px; +} + +hr { + border: 0; + height: 1px; + margin: 2rem 0; + background: var(--light-grey); +} + +pre, +textarea { + overflow: auto; +} + +img { + margin: 10px auto 10px auto; + max-width: 100%; + display: block; +} + +a img { + border: none; +} + +figure { + margin: 0; + text-align: center; +} + +fieldset { + border: 0; + margin: 0; + padding: 0; +} + +textarea { + resize: vertical; +} + +.site-name { + color: var(--text-color); +} + + +@media (max-width: 900px) { + body { + padding: 0 2rem; + } + + h1 { + font-size: 2.2rem; + } + + h2 { + font-size: 1.8rem; + } + + h3 { + font-size: 1.5rem; + } + + h4 { + font-size: 1.3rem; + } +} + +@media (max-width: 600px) { + body { + padding: 0 1rem; + } + + h1 { + font-size: 1.8rem; + } + + h2 { + font-size: 1.6rem; + } + + h3 { + font-size: 1.2rem; + } + + h4 { + font-size: 1rem; + } +} \ No newline at end of file diff --git a/sass/blog.scss b/sass/blog.scss new file mode 100644 index 0000000..582e14e --- /dev/null +++ b/sass/blog.scss @@ -0,0 +1,117 @@ +.posts { + margin: 0; + padding: 0; +} + +.post { + display: block; + + article { + img { + // max-width: 800px; + max-height: 90vh; + + border-radius: var(--border-radius); + } + } +} + +.post-header { + display: flex; + align-items: center; +} + +.post-header .meta .date { + margin-right: 2rem; + width: 64px; + text-align: center; + color: var(--heading-color); +} + +.post-header .meta .date .day { + font-family: "Playfair Display", serif; + font-weight: 700; + line-height: 0.75em; + font-size: 2em; + display: block; + margin: 0 0 0.5rem 0; +} + +.post-header .meta .date .rest { + display: block; + font-size: 0.75em; +} + +.post .title.small { + margin: 0 0 10px 0; +} + +.post .post-header { + margin: 30px 0; +} + +.post-header h1.title { + margin: -10px 0 0 0; +} + +.archive-year { + display: flex; + width: 100%; + justify-content: center; + align-items: center; + text-align: center; +} + +.archive-year:before, +.archive-year:after { + content: ""; + border-top: 1px solid var(--light-grey); + margin: 0 20px 0 0; + flex: 1 0 20px; +} + +.archive-year:after { + margin: 0 0 0 20px; +} + +.youtube { + + position: relative; + padding-bottom: 56.25%; + + iframe { + position: absolute; + top: 0; + left: 0; + width: 100%; + height: 100%; + } +} + +.draft { + color: var(--red); + font-weight: bold; + font-size: 1rem; +} + +.tags { + list-style: none; + padding: 0; + margin: 1rem 0; + + li { + display: inline-block; + + + a { + display: block; + margin: 0.25rem; + padding: 0.25rem 1rem; + font-size: 0.9em; + background-color: transparent; + border: 1px solid var(--primary); + border-radius: var(--border-radius); + } + + } +} \ No newline at end of file diff --git a/sass/custom.scss b/sass/custom.scss new file mode 100644 index 0000000..43ea6d6 --- /dev/null +++ b/sass/custom.scss @@ -0,0 +1 @@ +// Override this scss file in your own sass folder to add your own styling \ No newline at end of file diff --git a/sass/footer.scss b/sass/footer.scss new file mode 100644 index 0000000..93dce9c --- /dev/null +++ b/sass/footer.scss @@ -0,0 +1,9 @@ +footer { + text-align: right; + font-size: 0.75em; + border-top: 1px solid var(--light-grey); + padding: 1rem 0; + display: flex; + justify-content: space-between; + align-items: center; +} \ No newline at end of file diff --git a/sass/gallery.scss b/sass/gallery.scss new file mode 100644 index 0000000..7e06294 --- /dev/null +++ b/sass/gallery.scss @@ -0,0 +1,50 @@ +.gallery { + margin: 0; + padding: 0; + list-style: none; + display: flex; + flex-wrap: wrap; + align-items: flex-start; + justify-content: flex-start; + align-content: space-around; + +} + +.thumbnail { + display: inline-block; + width: 10rem; + // Body has 1rem horizontal padding + width: calc(100% / 6); + + a { + display: inline-block; + padding: 0.5rem; + + img { + margin: 0; + border-radius: var(--border-radius); + } + } +} + +@media (max-width: 850px) { + .thumbnail { + width: calc(100% / 5); + } +} + +@media (max-width: 700px) { + .thumbnail { + width: calc(100% / 4); + } +} + +@media (max-width: 550px) { + .thumbnail { + width: calc(100% / 3); + + a { + padding: 0.25rem; + } + } +} \ No newline at end of file diff --git a/sass/header.scss b/sass/header.scss new file mode 100644 index 0000000..17cab7b --- /dev/null +++ b/sass/header.scss @@ -0,0 +1,89 @@ +header { + margin: 2rem 0; +} + +header .avatar { + float: left; + margin: 0 2rem 0 0; +} + +header .links { + line-height: 2.2rem; +} + +header .avatar img { + width: 4rem; + height: 4rem; + overflow: hidden; + border-radius: 100%; +} + +header .site-description { + display: flex; + justify-content: space-between; + align-items: center; + + p { + margin: 0 0 1rem 0; + } +} + +header h1 { + margin: 0; + // line-height: 0.2rem; +} + +.social li, +.social ul { + margin: 0; + padding: 0; +} + +.social li { + display: inline-block; + list-style: none; + margin: 0 30px 0 0; +} + +.social a { + color: #333; +} + +.social a:hover { + color: var(--primary); +} + +.social nav { + margin: 0; + padding: 0; + border: none; + min-width: 50px; + margin-left: 15px; +} + +.social ul svg { + max-height: 15px; +} + +nav { + border-top: 1px solid var(--light-grey); + padding-top: 1rem; +} + +nav a { + margin-right: 1.5rem; +} + +@media (max-width: 900px) { + .social li { + margin: 0; + } + + nav a { + margin-right: 0.5rem; + } + + header { + margin: 1rem 0; + } +} \ No newline at end of file diff --git a/sass/normalize.scss b/sass/normalize.scss new file mode 100644 index 0000000..bb6e2a7 --- /dev/null +++ b/sass/normalize.scss @@ -0,0 +1,351 @@ +/*! normalize.css v8.0.1 | MIT License | github.com/necolas/normalize.css */ + +/* Document + ========================================================================== */ + +/** + * 1. Correct the line height in all browsers. + * 2. Prevent adjustments of font size after orientation changes in iOS. + */ + +html { + line-height: 1.15; /* 1 */ + -webkit-text-size-adjust: 100%; /* 2 */ +} + +/* Sections + ========================================================================== */ + +/** + * Remove the margin in all browsers. + */ + +body { + margin: 0; +} + +/** + * Render the `main` element consistently in IE. + */ + +main { + display: block; +} + +/** + * Correct the font size and margin on `h1` elements within `section` and + * `article` contexts in Chrome, Firefox, and Safari. + */ + +h1 { + font-size: 2em; + margin: 0.67em 0; +} + +/* Grouping content + ========================================================================== */ + +/** + * 1. Add the correct box sizing in Firefox. + * 2. Show the overflow in Edge and IE. + */ + +hr { + box-sizing: content-box; /* 1 */ + height: 0; /* 1 */ + overflow: visible; /* 2 */ +} + +/** + * 1. Correct the inheritance and scaling of font size in all browsers. + * 2. Correct the odd `em` font sizing in all browsers. + */ + +pre { + font-family: monospace, monospace; /* 1 */ + font-size: 1em; /* 2 */ +} + +/* Text-level semantics + ========================================================================== */ + +/** + * Remove the gray background on active links in IE 10. + */ + +a { + background-color: transparent; +} + +/** + * 1. Remove the bottom border in Chrome 57- + * 2. Add the correct text decoration in Chrome, Edge, IE, Opera, and Safari. + */ + +abbr[title] { + border-bottom: none; /* 1 */ + text-decoration: underline; /* 2 */ + text-decoration: underline dotted; /* 2 */ +} + +/** + * Add the correct font weight in Chrome, Edge, and Safari. + */ + +b, +strong { + font-weight: bolder; +} + +/** + * 1. Correct the inheritance and scaling of font size in all browsers. + * 2. Correct the odd `em` font sizing in all browsers. + */ + +code, +kbd, +samp { + font-family: monospace, monospace; /* 1 */ + font-size: 1em; /* 2 */ +} + +/** + * Add the correct font size in all browsers. + */ + +small { + font-size: 80%; +} + +/** + * Prevent `sub` and `sup` elements from affecting the line height in + * all browsers. + */ + +sub, +sup { + font-size: 75%; + line-height: 0; + position: relative; + vertical-align: baseline; +} + +sub { + bottom: -0.25em; +} + +sup { + top: -0.5em; +} + +/* Embedded content + ========================================================================== */ + +/** + * Remove the border on images inside links in IE 10. + */ + +img { + border-style: none; +} + +/* Forms + ========================================================================== */ + +/** + * 1. Change the font styles in all browsers. + * 2. Remove the margin in Firefox and Safari. + */ + +button, +input, +optgroup, +select, +textarea { + font-family: inherit; /* 1 */ + font-size: 100%; /* 1 */ + line-height: 1.15; /* 1 */ + margin: 0; /* 2 */ +} + +/** + * Show the overflow in IE. + * 1. Show the overflow in Edge. + */ + +button, +input { + /* 1 */ + overflow: visible; +} + +/** + * Remove the inheritance of text transform in Edge, Firefox, and IE. + * 1. Remove the inheritance of text transform in Firefox. + */ + +button, +select { + /* 1 */ + text-transform: none; +} + +/** + * Correct the inability to style clickable types in iOS and Safari. + */ + +button, +[type="button"], +[type="reset"], +[type="submit"] { + -webkit-appearance: button; +} + +/** + * Remove the inner border and padding in Firefox. + */ + +button::-moz-focus-inner, +[type="button"]::-moz-focus-inner, +[type="reset"]::-moz-focus-inner, +[type="submit"]::-moz-focus-inner { + border-style: none; + padding: 0; +} + +/** + * Restore the focus styles unset by the previous rule. + */ + +button:-moz-focusring, +[type="button"]:-moz-focusring, +[type="reset"]:-moz-focusring, +[type="submit"]:-moz-focusring { + outline: 1px dotted ButtonText; +} + +/** + * Correct the padding in Firefox. + */ + +fieldset { + padding: 0.35em 0.75em 0.625em; +} + +/** + * 1. Correct the text wrapping in Edge and IE. + * 2. Correct the color inheritance from `fieldset` elements in IE. + * 3. Remove the padding so developers are not caught out when they zero out + * `fieldset` elements in all browsers. + */ + +legend { + box-sizing: border-box; /* 1 */ + color: inherit; /* 2 */ + display: table; /* 1 */ + max-width: 100%; /* 1 */ + padding: 0; /* 3 */ + white-space: normal; /* 1 */ +} + +/** + * Add the correct vertical alignment in Chrome, Firefox, and Opera. + */ + +progress { + vertical-align: baseline; +} + +/** + * Remove the default vertical scrollbar in IE 10+. + */ + +textarea { + overflow: auto; +} + +/** + * 1. Add the correct box sizing in IE 10. + * 2. Remove the padding in IE 10. + */ + +[type="checkbox"], +[type="radio"] { + box-sizing: border-box; /* 1 */ + padding: 0; /* 2 */ +} + +/** + * Correct the cursor style of increment and decrement buttons in Chrome. + */ + +[type="number"]::-webkit-inner-spin-button, +[type="number"]::-webkit-outer-spin-button { + height: auto; +} + +/** + * 1. Correct the odd appearance in Chrome and Safari. + * 2. Correct the outline style in Safari. + */ + +[type="search"] { + -webkit-appearance: textfield; /* 1 */ + outline-offset: -2px; /* 2 */ +} + +/** + * Remove the inner padding in Chrome and Safari on macOS. + */ + +[type="search"]::-webkit-search-decoration { + -webkit-appearance: none; +} + +/** + * 1. Correct the inability to style clickable types in iOS and Safari. + * 2. Change font properties to `inherit` in Safari. + */ + +::-webkit-file-upload-button { + -webkit-appearance: button; /* 1 */ + font: inherit; /* 2 */ +} + +/* Interactive + ========================================================================== */ + +/* + * Add the correct display in Edge, IE 10+, and Firefox. + */ + +details { + display: block; +} + +/* + * Add the correct display in all browsers. + */ + +summary { + display: list-item; +} + +/* Misc + ========================================================================== */ + +/** + * Add the correct display in IE 10+. + */ + +template { + display: none; +} + +/** + * Add the correct display in IE 10. + */ + +[hidden] { + display: none; +} diff --git a/sass/search.scss b/sass/search.scss new file mode 100644 index 0000000..5cc3079 --- /dev/null +++ b/sass/search.scss @@ -0,0 +1,58 @@ +.search-container input { + + width: 100%; + padding: 0.5rem 1rem; + margin-bottom: 2rem; + font-weight: bold; + background-color: transparent; + border: 1px solid var(--light-grey); + border-radius: var(--border-radius); +} + +.search-container input:focus { + border-color: var(--dark-grey); +} + + +.search-results { + display: none; + color: var(--text-color); + overflow: auto; + +} + +.search-results__items { + list-style: none; +} + +.search-results li { + margin-top: 1rem; + border-bottom: 1px solid var(--light-grey); +} + +.search-results li:last-child { + border-bottom: none; +} + +.search-results li:first-of-type { + margin-top: 0; +} + +.search-results__item { + margin-bottom: 1rem; + + h3 { + margin: 1rem 0 0 0; + } + + p { + margin: 0 0 0 0; + padding-bottom: 1rem; + } +} + +.search-results__item a { + font-size: 1.2rem; + display: inline-block; + margin-bottom: 0.5rem; +} \ No newline at end of file diff --git a/sass/tags.scss b/sass/tags.scss new file mode 100644 index 0000000..ec302c3 --- /dev/null +++ b/sass/tags.scss @@ -0,0 +1,9 @@ +.tag-cloud { + margin-top: 20px; +} + +.tag-cloud li { + display: inline; + list-style-type: none; + padding-right: 20px; +} diff --git a/sass/typography.scss b/sass/typography.scss new file mode 100644 index 0000000..a9a344e --- /dev/null +++ b/sass/typography.scss @@ -0,0 +1,89 @@ +h1, +h2, +h3, +h4, +h5, +h6 { + font-family: var(--font-headings); + line-height: 1.3em; + margin: 30px 0 20px 0; + font-weight: bold; + color: var(--heading-color); +} + +h1 { + font-size: 2.7rem; +} + +h2 { + font-size: 2.3rem; +} + +h3 { + font-size: 1.95rem; +} + +h4 { + font-size: 1.55rem; +} + +h5 { + font-size: 1.25rem; +} + +h6 { + font-size: 1rem; +} + +blockquote { + margin-left: 1rem; + font-style: italic; + font-size: 1.4rem; + font-family: Georgia, bitstream charter, serif; + border-left: 3px solid; + border-color: var(--text-color); + padding-left: 20px; +} + +blockquote cite { + font-size: 70%; + opacity: 0.8; +} + +blockquote em { + font-weight: 600; +} + +a { + color: var(--primary); + text-decoration: none; + +} + +a:hover, +a.active { + text-decoration: underline; +} + +input:focus, +textarea:focus { + outline: none; +} + +pre, +code { + font-family: var(--font-monospace); + text-rendering: optimizeLegibility; +} + +@media (max-width: 700px) { + + h1, + h2, + h3, + h4, + h5, + h6 { + letter-spacing: 1px; + } +} \ No newline at end of file diff --git a/sass/utilities.scss b/sass/utilities.scss new file mode 100644 index 0000000..eebe31b --- /dev/null +++ b/sass/utilities.scss @@ -0,0 +1,19 @@ +.center { + text-align: center; +} + +.ad-info { + border-left: solid 0.3rem #64dd17; + line-height: 24px; + overflow: hidden; + padding: 0.8rem; + background-color: rgba(100, 221, 23, 0.1); +} + +.ad-warning { + border-left: solid 0.3rem #fa9209; + line-height: 24px; + overflow: hidden; + padding: 0.8rem; + background-color: red; +} diff --git a/sass/variables.scss b/sass/variables.scss new file mode 100644 index 0000000..0336112 --- /dev/null +++ b/sass/variables.scss @@ -0,0 +1,17 @@ +:root { + --primary: #661fff; + --red: red; + --heading-color: #1a043b; + --text-color: #3e3f4d; + --bg-color: #f8f5f3; + --black: #212529; + --white: #fdfdfd; + --dark-grey: #343334; + --gray: #616060; + --light-grey: #ccc; + --lighter-gray: #f6f6f6; + --font-base: 'Andada Pro', sans-serif; + --font-monospace: menlo, monaco, lucida console, liberation mono, dejavu sans mono, bitstream vera sans mono, courier new, monospace, serif; + --font-headings: 'Andada Pro', sans-serif; + --border-radius: 0.5rem; +} \ No newline at end of file diff --git a/screenshot.png b/screenshot.png new file mode 100644 index 0000000000000000000000000000000000000000..d551c3a3e5dffd29da9f6dbf8bb3ce93c09dbf2b GIT binary patch literal 92626 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 literal 0 HcmV?d00001 diff --git a/static/inky.png b/static/inky.png new file mode 100644 index 0000000000000000000000000000000000000000..d2af4148f2b75e7d720895390f2d8efb97b30197 GIT binary patch literal 5294 zcmcgwi91wn*gxku82c!)O^irn2}xv|F@&-&sSqk&lnhcr97CfhBq>W-Qnr$ir7VNI zNJY}CtRq<~O_mAad}sQu?_c=ldai5E+}FLG-}Afg=YHmzy{&~1zcfDp076!lW{v;= zVUG}iKB0 zg8_%xIqyP^rz7uA&*n@c>S+#D2je6v>leNq6P9 zIEE$2N$1)uHcDjGlnjIUh-L(0Fih8B5ux0#?DK9^cde_Be_TOY#xp$D8V?Vx(MjE2*DRz54JI)f#@kb*`XihMi?t!uw*oA@U{1B6)IX-CNB{a?qEet~+$D)s~pw-vVP&G6_5q(?34#2{_X3tNtLv>L0 zJUb^4jnqLK@3GUp(IgkN8dHu%Lp9Mj5}I@jEeuAJ?9s-2cH?dK<7;U8F?94_cBmez z!rg8F09#-yGqQ7d&X0SZLD`lP3E4ILuR^GgEvuPnUt8U{6NM1gSh?MU30uZH3^vfe_qA-Jmn*0%MpvFXBR$hl9KP-V#A+pJ>o96r_=T! zm_)YhqwiL@->KOSe^$3ld^vI!f~gQJc~$wfcGk{Zp|E>CeULexA&+OM`b&4rQyR)M zZ71|>O2%#*;Tc+Z2A9oNdQ{9xio<}n@~Ja8umJ#b+2H}|7alNscgpRL2aWu`s=%S8TAPxYJ7)mWT4m?R}rua$3;Ss_^$nV7ZcGG&vctFrz8DY1N z$@^+q?%j$Jb29Ky($GDXS-0cBiuh&=Mt2@-t7kHR*mRBBdJGcY*$?EZKtJm|n znu^ERV64JFI-A>kA}^Zm)c^eFk|rkG^phT)lnY*;<(}`EskIh_NPwq~(C@ghXjB)9 z+O*yv6#a7B%?}chJ$gYEf?-D4QlRhNQ300^+Fyb)Fy^r+84k@gp$&qYCgtVDxs!y= z;}-ImxFw*yal-)Dba{x6#bOwF7~NYtBuoKt%=-n*Tp&7Xy}DyUVR*-(5q%aOM)YtbT^l#rN zVENOM+*w0o-8hc2Su0O(I!)HL*}Ez~x_q&2Owbeyxn)y^)aDtpeJgVD(v0vxHW>$i z!}8u-e*ENQo95U^@6K(te}(R%=Id=G^a0aU%8CSCvh=l2nk@1Gqtj~~a&SCg6a#}w{y;V6Ihi{>?F1Q`IGN;b_n9sA;D9P& zX;~T_MDK9<9p!cO>n@UM+O`e0K`QS?Cr_bYLjmzk97iWSEW1j@A9 zX=Pg}`)k!%31Z0g-oYwEyhg0Oes;f^=yK@b7CJsp9M6aYY!oJUg&w#(B+M3FtdDQK zK*2AG@L~z}ib(l*(bcLlqvHy-$iNvQ!V7+l0*rU_n9#37!4xzFz~1h1>f)(-Bgw&S zD)~>6l9r{RqabLABNhpM{c=*o+&=@Yu5o(1(j{L8LHlS7v z^z#q>PwO~IN3Z+s-Jr{v6z6`3rnjw5|)#=z8tdH z&g@`DPrg+R69R1^PPB(N`lyjZ=E#uS+;mM*WR)_O*huOvjgoIKUuryvPJLwX6&B7fDaVZJa?eC;j!>1E<7I!RkW)>8H$(2u)jt>y zyr~d%pMvZs0V0sjjhx(9(d4}CAvChf$7m@WNF*72T_-|*X>amm zT10Bi`90hQX14yHLioT<5ty|D$;oZ&KI{s)pKwfR&tUt=V}Mta-=&QEP6Vt8g-Dwx zLD0IuUqy<1G^2xH}0VR1;m_$B7av6cBl zmxlTNq~No4MuX$1koxil5qtX@og3F5jKA0}6c~4%v~qs%ksimFo2*<(g0BUd!AeQ( z+dZlz24l@cUAs>{aL?5_JCN4G3A&?;FQHReI50Gpvu!n&k`WoJInixTJ^N1?+Tk&lF^>aMllZab zKifzLZ{59|#G%s#%R0pZtcaroSS+Hv%DI?J@Lws8_QFW)i-My2oo6RF4eAKM*T#0` zuS|)r#Q*tr3d>9~3Hadu`|!yj)}#RHL&U7gxtY0wY**pvtML~>EKfIZWk20kiNdFu zX`ix8VBhJ$lJMe1Rh_37^WnQaB^?pT?GQu)Y9Z<#T=!!BqcO%toS&x{4`#f5IK?tT z>NVo-;gIrMhb>`&*=h=d>jZ&C(czRNtnL`k0W!&`*hy_0#kM*2cg?3JO%AjM;k8#* z^raWX8oIxh@nZrTtm}xVGZyzQ-?ihUr39AF&7boF=jX$lMX`pngkyah==~7HbXVe_ zdj{0wrO|ERAIu!Q<2Jr{AR!!&glf-B(M^$TnYrMY>y>ATu%6j%KrEZYHLWm#VL?>~ z#tM49ldtIUjNQm9E%m~&WJMsBIWI^<%yebq+m+gY}Ym!ElX>bOTwoLO4%n|FAREUG89P9bPJ0qfQc}UGS||01-r@c*7mV9MgOeylg~SY!e@gOr)Yo7lKL40qf zy%gpvDjntZE zMXahgG8KWY&;YP5zJ2fx4XdAC55TzN-*?mLA53zcQerH!C%myPHls=s3)a`3pS|XY z6z!V(6_jZ^wC@V%Y_$W7B|3XGxa!rwA@?m@7!L)&6-DywA@c%H1kulHk-&Cst@BBMP^am5kLMh(8~@! zzPYTzJ;sZL*)$Wq)8Cn4cu{WK{hrnM7(thh&!xVrbIJhedFJ3YHy9YPGDWvr`{!`2 zLjLGqz*f@f--}BNs8y0VZxd+)yUJsvI#oFqv36B6sy_OeOJ`(WzRb3+D+!z#6^y`f z>iei#v1hl|m%7M5D?ikq;s=udZ?@t;H=gIZus&Pj;pb-@6Y)iSO_;WO@=aN}5B{}hylp`cmNy0F zv&mg`Bfz;>fQH{e`oJ0!JoIXrhbjQ$<0QcfsioLILd&R z(Kv?ed+2VSCaQh-UH|i3fTfB@_I=^j6gov1D)X_=(8y*abAgh3`N8XurSL_0+`63! z?DfVE*6i{wzcCS2vfGo7SxW*QT|b1BmHmlS?xmN$XqNN!B?5;J?m|`ty;S@T;{_KN zgAhPa>LGyR`>buYGA)i>Hs14liID&JmxvInnqs(kr$aqTxA$4GoH zfH=N)T2V(0g<-FFP6mEb`UlelO*Zg|XaKBvT57Q4cc$&e^O*ZQPzC88U@81#@9BkU z%oex}5tXY?tuT9xvHR0==&n#cyPY`lC5RU$n%4t7Z&eV|UR-W4xCakztkP zTP5`~q@q+;Cb9CV6A1xhfg@(`^|&a(Z~mG6%@0co;(BSC1lL4mTx;suJy~8z5Q6<~ zsBDu;fXS&o!x_;SL4J~ucanUk6X>r)8mA0ad2mc|TyORxK1wEUcYm1V0@k@;77t9N z8}gmDZUUijY!PiH?#9S;otN%t*wR!K3na$^C$1H!P5jX+{-!o@m!;1QQ*qd>`eQ)V zxVVxq?Jd3OZJ7X`fn7+cSxPpGIZaWIOBW1ne9o>WbI$M6*Lk{kzOAe%zjL_DshJzA zOD%gb@4Jd^g~{F8R;{U&GqnPo`DCj@wRp?r&hP^xwhh&!9(|5X!Dg#D=l_H)9V3*3 zWPFEJnh#bLeG-v!m}ka{O5(?W#?gjU#Y;^`Uj=WN;+;`Zc&aD3;po>(X?L4zPdq(x p>e$phtm6WCQn)vjVV>mAS21xv3ZJe*le<5OM$j literal 0 HcmV?d00001 diff --git a/static/js/search.js b/static/js/search.js new file mode 100644 index 0000000..830129d --- /dev/null +++ b/static/js/search.js @@ -0,0 +1,180 @@ +function debounce(func, wait) { + var timeout; + + return function () { + var context = this; + var args = arguments; + clearTimeout(timeout); + + timeout = setTimeout(function () { + timeout = null; + func.apply(context, args); + }, wait); + }; +} + +// Taken from mdbook +// The strategy is as follows: +// First, assign a value to each word in the document: +// Words that correspond to search terms (stemmer aware): 40 +// Normal words: 2 +// First word in a sentence: 8 +// Then use a sliding window with a constant number of words and count the +// sum of the values of the words within the window. Then use the window that got the +// maximum sum. If there are multiple maximas, then get the last one. +// Enclose the terms in . +function makeTeaser(body, terms) { + var TERM_WEIGHT = 40; + var NORMAL_WORD_WEIGHT = 2; + var FIRST_WORD_WEIGHT = 8; + var TEASER_MAX_WORDS = 30; + + var stemmedTerms = terms.map(function (w) { + return elasticlunr.stemmer(w.toLowerCase()); + }); + var termFound = false; + var index = 0; + var weighted = []; // contains elements of ["word", weight, index_in_document] + + // split in sentences, then words + var sentences = body.toLowerCase().split(". "); + + for (var i in sentences) { + var words = sentences[i].split(" "); + var value = FIRST_WORD_WEIGHT; + + for (var j in words) { + var word = words[j]; + + if (word.length > 0) { + for (var k in stemmedTerms) { + if (elasticlunr.stemmer(word).startsWith(stemmedTerms[k])) { + value = TERM_WEIGHT; + termFound = true; + } + } + weighted.push([word, value, index]); + value = NORMAL_WORD_WEIGHT; + } + + index += word.length; + index += 1; // ' ' or '.' if last word in sentence + } + + index += 1; // because we split at a two-char boundary '. ' + } + + if (weighted.length === 0) { + return body; + } + + var windowWeights = []; + var windowSize = Math.min(weighted.length, TEASER_MAX_WORDS); + // We add a window with all the weights first + var curSum = 0; + for (var i = 0; i < windowSize; i++) { + curSum += weighted[i][1]; + } + windowWeights.push(curSum); + + for (var i = 0; i < weighted.length - windowSize; i++) { + curSum -= weighted[i][1]; + curSum += weighted[i + windowSize][1]; + windowWeights.push(curSum); + } + + // If we didn't find the term, just pick the first window + var maxSumIndex = 0; + if (termFound) { + var maxFound = 0; + // backwards + for (var i = windowWeights.length - 1; i >= 0; i--) { + if (windowWeights[i] > maxFound) { + maxFound = windowWeights[i]; + maxSumIndex = i; + } + } + } + + var teaser = []; + var startIndex = weighted[maxSumIndex][2]; + for (var i = maxSumIndex; i < maxSumIndex + windowSize; i++) { + var word = weighted[i]; + if (startIndex < word[2]) { + // missing text from index to start of `word` + teaser.push(body.substring(startIndex, word[2])); + startIndex = word[2]; + } + + // add around search terms + if (word[1] === TERM_WEIGHT) { + teaser.push(""); + } + startIndex = word[2] + word[0].length; + teaser.push(body.substring(word[2], startIndex)); + + if (word[1] === TERM_WEIGHT) { + teaser.push(""); + } + } + teaser.push("…"); + return teaser.join(""); +} + +function formatSearchResultItem(item, terms) { + return '
' + + `

${item.doc.title}

` + + `

${makeTeaser(item.doc.body, terms)}

` + + '
'; +} + +function initSearch() { + var $searchInput = document.getElementById("search"); + var $searchResults = document.querySelector(".search-results"); + var $searchResultsItems = document.querySelector(".search-results__items"); + var MAX_ITEMS = 20; + + var options = { + bool: "AND", + fields: { + title: { boost: 2 }, + body: { boost: 1 }, + } + }; + var currentTerm = ""; + var index = elasticlunr.Index.load(window.searchIndex); + + $searchInput.addEventListener("keyup", debounce(function () { + var term = $searchInput.value.trim(); + if (term === currentTerm || !index) { + return; + } + $searchResults.style.display = term === "" ? "none" : "block"; + $searchResultsItems.innerHTML = ""; + if (term === "") { + return; + } + + var results = index.search(term, options); + if (results.length === 0) { + $searchResults.style.display = "none"; + return; + } + + currentTerm = term; + for (var i = 0; i < Math.min(results.length, MAX_ITEMS); i++) { + var item = document.createElement("li"); + item.innerHTML = formatSearchResultItem(results[i], term.split(" ")); + $searchResultsItems.appendChild(item); + } + }, 150)); +} + + +if (document.readyState === "complete" || + (document.readyState !== "loading" && !document.documentElement.doScroll) +) { + initSearch(); +} else { + document.addEventListener("DOMContentLoaded", initSearch); +} diff --git a/templates/base.html b/templates/base.html new file mode 100644 index 0000000..da7a5f5 --- /dev/null +++ b/templates/base.html @@ -0,0 +1,134 @@ +{% import "macros/head.html" as head -%} +{% import "macros/opengraph.html" as social -%} +{% import "macros/hooks.html" as hooks -%} +{% import "macros/images.html" as images -%} + + + + + {%- block general_meta -%} + {{ head::general_meta() }} + {%- endblock general_meta -%} + {%- block og_preview -%} + {{ social::og_preview() }} + {%-endblock og_preview -%} + {% block rss %} + {% + endblock %} + + + + + + + + + +
+ {% if config.extra.avatar %} + + {% endif %} + +

{{ config.title }}

+
+
+

{{ config.description }}

+
+ +
+
+ {% block content %} + {% endblock %} +
+
+ +

© {{ config.title }} {{ now() | date(format="%Y") }} + + {# If you remove the powered by information, it would be appreciated if + you could add information & links somewhere else on your site to credit + those that have created your tools. #} + {% if config.extra.disable_powered_by and config.extra.disable_powered_by == true %}{% else %}
Powered by Zola. Theme: Inky.{% endif %} +

+
+ + {% block body_end %} + {% endblock %} + + + \ No newline at end of file diff --git a/templates/gallery.html b/templates/gallery.html new file mode 100644 index 0000000..666acee --- /dev/null +++ b/templates/gallery.html @@ -0,0 +1,25 @@ + +{% extends "base.html" %} {% block content %} +

{{ section.title }}

+ +
{{ section.content | safe }}
+ +{% for year, posts in section.pages | group_by(attribute="year") %} + +{% endfor %} {% endblock content %} + diff --git a/templates/index.html b/templates/index.html new file mode 100644 index 0000000..ba611ea --- /dev/null +++ b/templates/index.html @@ -0,0 +1,6 @@ +{% extends "base.html" %} + +{% block content %} +
{{ section.content | safe }}
+ +{% endblock content %} \ No newline at end of file diff --git a/templates/macros/head.html b/templates/macros/head.html new file mode 100644 index 0000000..3bab5ea --- /dev/null +++ b/templates/macros/head.html @@ -0,0 +1,11 @@ +{% macro general_meta() %} + + + + + +{% endmacro general_meta %} \ No newline at end of file diff --git a/templates/macros/hooks.html b/templates/macros/hooks.html new file mode 100644 index 0000000..8cc6a4b --- /dev/null +++ b/templates/macros/hooks.html @@ -0,0 +1,6 @@ +{% extends "base.html" %} + +{# Page hooks #} +{% macro above_page(page) %}{% endmacro above_page %} +{% macro below_page(page) %}{% endmacro below_page %} +{% macro below_tags(page) %}{% endmacro below_tags %} \ No newline at end of file diff --git a/templates/macros/images.html b/templates/macros/images.html new file mode 100644 index 0000000..25e1f08 --- /dev/null +++ b/templates/macros/images.html @@ -0,0 +1,47 @@ +{% extends "base.html" %} + +{# + Original author: crepererum https://github.com/getzola/even/pull/48/files + Adapted to Inky template by jimmyff +#} + +{% macro responsive_image(path, src, alt, default_size, sizes) %} +{% if config.extra.image_resizing_disabled and config.extra.image_resizing_disabled == true %} +{{ alt }} +{% else %} + {% set abspath = "./" ~ path ~ src %} + {% set meta = get_image_metadata(path=abspath) %} + {% set width = meta.width %} + {% set srcset_list = [] %} + {% for s in sizes %} + {% if width >= s %} + {% set resized = resize_image(format=config.extra.image_format, path=abspath, width=s, op="fit_width", quality=config.extra.image_quality) %} + {% set element = resized.url ~ " " ~ s ~ "w" %} + {% set_global srcset_list = srcset_list | concat(with=[element]) %} + {% endif %} + {% endfor %} + {% set default_resized = resize_image(format=config.extra.image_format, path=abspath, width=default_size, op="fit_width", quality=config.extra.image_quality) %} + {{ alt }} +{% endif %} +{% endmacro responsive_image %} + + +{% macro responsive_thumbnail(path, src, alt, default_size, sizes) %} +{% if config.extra.image_resizing_disabled and config.extra.image_resizing_disabled == true %} + {{ alt }} +{% else %} + {% set abspath = "./" ~ path ~ src %} + {% set meta = get_image_metadata(path=abspath) %} + {% set width = meta.width %} + {% set srcset_list = [] %} + {% for s in sizes %} + {% if width >= s %} + {% set resized = resize_image(format=config.extra.image_format, path=abspath, width=s, height=s, op="fill", quality=config.extra.thumbnail_quality) %} + {% set element = resized.url ~ " " ~ s ~ "w" %} + {% set_global srcset_list = srcset_list | concat(with=[element]) %} + {% endif %} + {% endfor %} + {% set default_resized = resize_image(format=config.extra.image_format, path=abspath, width=default_size, height=default_size, op="fill", quality=config.extra.thumbnail_quality) %} + {{ alt }} +{% endif %} +{% endmacro responsive_thumbnail %} \ No newline at end of file diff --git a/templates/macros/opengraph.html b/templates/macros/opengraph.html new file mode 100644 index 0000000..18a036b --- /dev/null +++ b/templates/macros/opengraph.html @@ -0,0 +1,53 @@ +{% macro og_preview() %} +{{config.title}} | {{social::og_title() }} + + + + + + + + + + + + +{% endmacro og_preview %} + +{% macro og_description() %} {%- if section -%} {%- if +section.description -%} {{ section.description }} {%- else -%} {{ +config.description }} {%- endif -%} {%- elif page -%} {%- if page.summary | +string -%} {{ page.summary | striptags | truncate(length=200) }} {%- elif +page.description -%} {{ page.description }} {%- else -%} {{ config.description +}} {%- endif -%} {%- endif -%} +{% endmacro og_description %} + +{% macro og_title() %} +{%- if section -%} +{%- if section.title -%} +{{ section.title | striptags }}{%- else -%} +{{ config.description }}{%- endif -%} +{%- elif page -%} +{%- if page.title -%} +{{ page.title | striptags }} +{%- else -%} +{{ config.description }} +{%- endif -%} +{%- elif term -%} + {%- if term.name -%} + {{ term.name | striptags }} + {%- else -%} + {{ config.description }} + {%- endif -%} +{%- elif taxonomy -%} +{%- if taxonomy.name -%} {{ taxonomy.name | striptags }} {%- else -%} {{ config.description }} {%- endif -%} {%- endif -%} +{% endmacro og_title %} + +{% macro og_image() %} +{%- if page.extra.og_preview_img -%} +{{ get_url(path=page.extra.og_preview_img) | safe }} +{%- endif -%} +{% endmacro og_image %} diff --git a/templates/page.html b/templates/page.html new file mode 100644 index 0000000..98e530c --- /dev/null +++ b/templates/page.html @@ -0,0 +1,16 @@ +{% extends "base.html" %} + +{% block title %} +{{ config.title }} | {{page.title}} +{% endblock title %} + +{% block content %} +

+ {{ page.title }} +

+ +
+ {{ page.content | safe }} +
+ +{% endblock content %} \ No newline at end of file diff --git a/templates/post.html b/templates/post.html new file mode 100644 index 0000000..00c7ada --- /dev/null +++ b/templates/post.html @@ -0,0 +1,29 @@ +{% extends "base.html" %} {% block content %} +

{{ section.title }}

+ +
{{ section.content | safe }}
+ +{% for year, posts in section.pages | group_by(attribute="year") %} +
    +

    {{ year }}

    + {% for post in posts %} +
  • +
    +
    +
    + {{ post.day }} + {{ post.date | date(format='%b') }} +
    +
    +
    +

    + {{ post.title }} + {% if post.draft %}Draft{% endif %} +

    + {{post.description}} +
    +
    +
  • + {% endfor %} +
+{% endfor %} {% endblock content %} diff --git a/templates/search.html b/templates/search.html new file mode 100644 index 0000000..38283ae --- /dev/null +++ b/templates/search.html @@ -0,0 +1,22 @@ +{% extends "base.html" %} + +{% block content %} + + + + + +
+ +
+
+
+
+ + +{% endblock content %} + + diff --git a/templates/section.html b/templates/section.html new file mode 100644 index 0000000..a71a984 --- /dev/null +++ b/templates/section.html @@ -0,0 +1,33 @@ + +{% extends "base.html" %} +{% block content %} + +
+
+
+
+ {{ page.date | date(format='%d')}} + {{ page.date | date(format='%b %y')}} +
+
+ +
+

{{ page.title }} {% if page.draft %}Draft{% endif %}

+
+
+ {{ hooks::above_page(page=page) }} +
{{ page.content | safe }}
+ + + {{ hooks::below_page(page=page) }} + {% if page.taxonomies is containing ("tags") %} +
    + {% for tag in page.taxonomies["tags"] %} +
  • {{ tag }}
  • + {% endfor %} +
+ {% endif %} + + {{ hooks::below_tags(page=page) }} +
+{% endblock content %} diff --git a/templates/shortcodes/image.html b/templates/shortcodes/image.html new file mode 100644 index 0000000..ca21028 --- /dev/null +++ b/templates/shortcodes/image.html @@ -0,0 +1,5 @@ + +{% import "macros/images.html" as images -%} + +{{ images::responsive_image(path=page.path, src=src, default_size=config.extra.images_default_size, sizes=config.extra.images_sizes, alt=alt ) }} + diff --git a/templates/shortcodes/spotify.html b/templates/shortcodes/spotify.html new file mode 100644 index 0000000..a7eae3d --- /dev/null +++ b/templates/shortcodes/spotify.html @@ -0,0 +1,5 @@ +
+ +
\ No newline at end of file diff --git a/templates/shortcodes/thumbnail.html b/templates/shortcodes/thumbnail.html new file mode 100644 index 0000000..29f7853 --- /dev/null +++ b/templates/shortcodes/thumbnail.html @@ -0,0 +1,22 @@ +{# + Original author: crepererum https://github.com/getzola/even/pull/48/files + Adapted to Inky template by jimmyff +#} + +{% if config.extra.image_resizing_disabled and config.extra.image_resizing_disabled == true %} +{{ alt }} +{% else %} +{% set abspath = "./" ~ page.path ~ src %} +{% set meta = get_image_metadata(path=abspath) %} +{% set width = meta.width %} +{% set srcset_list = [] %} +{% for s in config.extra.thumbnail_sizes %} +{% if width >= s %} +{% set resized = resize_image(format=config.extra.image_format, path=abspath, width=s, height=s, op="fill", quality=config.extra.thumbnail_quality) %} +{% set element = resized.url ~ " " ~ s ~ "w" %} +{% set_global srcset_list = srcset_list | concat(with=[element]) %} +{% endif %} +{% endfor %} +{% set default_resized = resize_image(format=config.extra.image_format, path=abspath, width=config.extra.images_default_size, height=config.extra.images_default_size, op="fill", quality=config.extra.thumbnail_quality) %} +{{ alt }} +{% endif %}1 \ No newline at end of file diff --git a/templates/shortcodes/youtube.html b/templates/shortcodes/youtube.html new file mode 100644 index 0000000..d86d43d --- /dev/null +++ b/templates/shortcodes/youtube.html @@ -0,0 +1,7 @@ +
+ +
\ No newline at end of file diff --git a/templates/taxonomy_list.html b/templates/taxonomy_list.html new file mode 100644 index 0000000..3e53637 --- /dev/null +++ b/templates/taxonomy_list.html @@ -0,0 +1,14 @@ +{% extends "base.html" %} + +{% block content %} + +

{{ taxonomy.name | capitalize }}

+ +{% if terms %} + +{% endif %} +{% endblock content %} \ No newline at end of file diff --git a/templates/taxonomy_single.html b/templates/taxonomy_single.html new file mode 100644 index 0000000..d2e3ea2 --- /dev/null +++ b/templates/taxonomy_single.html @@ -0,0 +1,29 @@ +{% extends "base.html" %} + +{% block content %} +

{{taxonomy.name | capitalize }} » {{ term.name | capitalize }}

+ +{% for year, posts in term.pages | group_by(attribute="year") %} +
    +

    {{ year }}

    + {% for post in posts %} +
  • +
    +
    +
    + {{ post.day }} + {{ post.date | date(format='%b') }} +
    +
    +
    +

    + {{ post.title }} + {% if post.draft %}Draft{% endif %} +

    + {{post.description}} +
    +
    +
  • + {% endfor %} +
+ {% endfor %}{% endblock content %} \ No newline at end of file diff --git a/theme.toml b/theme.toml new file mode 100644 index 0000000..49e59f9 --- /dev/null +++ b/theme.toml @@ -0,0 +1,19 @@ +name = "zola-inky" +description = "Simple theme" +license = "MIT" +homepage = "https://github.com/getzola/hyde" +# The minimum version of Zola required +min_version = "0.4.0" +# An optional live demo URL +demo = "" + +[extra] + +[author] +name = "jimmyff" +homepage = "https://www.jimmyff.co.uk" + +[original] +author = "mr-karan" +homepage = "https://mrkaran.dev/" +repo = "https://github.com/mr-karan/website" \ No newline at end of file