From 8a597a5c9c861d2bce22a5e06c7667cd9c8e263a Mon Sep 17 00:00:00 2001
From: Jimmy Cai <github@jimmycai.com>
Date: Sat, 29 Oct 2022 17:02:24 +0200
Subject: [PATCH 01/26] Merge branch 'canary' into master (#711)

* refactor(i18n): simplify the structure of the translation file

* chore: prepare repository for v4.0.0-alpha

* chore: modify go.mod to v4

* refactor: migrate theme configuration to TOML

* fix: exampleSite not using correct theme

* feat: add favicon from assets folder

* refactor: drop linear grandient background feature

remove node-vibrant from dependencies

* feat: use Hugo's code block render hook to implement code copy button

Now it can have i18n support

* refactor: delete color.ts

* refactor: delete Emoji support post from example site

* refactor: drop support for `hidden` field in front matter

* feat: upgrade to PhotoSwipe v5

* chore: bump the required hugo version to 0.100.0

* refactor: remove PhotoSwipe from external.yaml

* fix: extra margin in search result

* fix: incorrect markdown heading level in example site

* refactor: remove some usages of `default` in template

No longer needed thanks to Hugo's configuration merge

* fix: one line codeblock style in firefox

closes https://github.com/CaiJimmy/hugo-theme-stack/issues/564

* feat: add style to new codeblock

* feat: i18n support for codeblock copy text

* fix(menu): jitter when closing menu

It's caused by flexbox gap property, which can't animate

* fix(search): long text overflows under the Search icon

closes https://github.com/CaiJimmy/hugo-theme-stack/issues/515
---
 archetypes/default.md                         |   1 -
 assets/scss/partials/article.scss             |   1 -
 assets/scss/partials/highlight/dark.scss      |   2 +-
 assets/scss/partials/layout/article.scss      |  48 ++--
 assets/scss/partials/layout/search.scss       |   4 +-
 assets/scss/partials/sidebar.scss             |   6 +-
 assets/ts/codeblock.ts                        |  28 ++
 assets/ts/color.ts                            |  63 -----
 assets/ts/gallery.ts                          | 236 ++++++-----------
 assets/ts/main.ts                             |  69 +----
 config.yaml                                   | 143 -----------
 config/_default/module.toml                   |   3 +
 config/_default/params.toml                   |  52 ++++
 data/external.yaml                            |  22 --
 exampleSite/README.md                         |   1 -
 exampleSite/assets/img/favicon.png            | Bin 0 -> 1031 bytes
 exampleSite/assets/img/logo.jpg               | Bin 0 -> 21951 bytes
 exampleSite/config.yaml                       | 239 ------------------
 exampleSite/config/_default/config.toml       |  20 ++
 exampleSite/config/_default/languages.toml    |  16 ++
 exampleSite/config/_default/markup.toml       |  18 ++
 exampleSite/config/_default/menu.toml         |  20 ++
 exampleSite/config/_default/params.toml       | 106 ++++++++
 exampleSite/config/_default/permalinks.toml   |   3 +
 exampleSite/config/_default/related.toml      |  12 +
 .../content/post/emoji-support/index.md       |  50 ----
 ...creative-exchange-d2zvqp3fpro-unsplash.jpg | Bin 35369 -> 0 bytes
 .../content/post/markdown-syntax/index.md     |  39 ++-
 go.mod                                        |   2 +-
 i18n/ar.yaml                                  |  67 ++---
 i18n/bn.yaml                                  |  57 ++---
 i18n/ca.yaml                                  |  66 ++---
 i18n/de.yaml                                  |  67 ++---
 i18n/el.yaml                                  |  63 ++---
 i18n/en.yaml                                  |  69 ++---
 i18n/es.yaml                                  |  66 ++---
 i18n/fa.yaml                                  |  66 ++---
 i18n/fr.yaml                                  |  62 ++---
 i18n/hu.yaml                                  |  66 ++---
 i18n/id.yaml                                  |  66 ++---
 i18n/it.yaml                                  |  66 ++---
 i18n/ja.yaml                                  |  64 ++---
 i18n/ko.yaml                                  |  63 ++---
 i18n/nl.yaml                                  |  51 ++--
 i18n/pl.yaml                                  |  66 ++---
 i18n/pt-br.yaml                               |  62 ++---
 i18n/ru.yaml                                  |  56 ++--
 i18n/th.yaml                                  |  63 ++---
 i18n/tr.yaml                                  |  47 ++--
 i18n/uk.yaml                                  |  63 ++---
 i18n/zh-cn.yaml                               |  64 ++---
 i18n/zh-hk.yaml                               |  66 ++---
 i18n/zh-tw.yaml                               |  53 ++--
 .../_default/_markup/render-codeblock.html    |  20 ++
 layouts/_default/_markup/render-image.html    |   2 +-
 layouts/_default/archives.html                |   6 +-
 layouts/_default/list.html                    |   2 +-
 layouts/_default/rss.xml                      |   1 -
 layouts/index.html                            |   5 +-
 layouts/page/search.json                      |   7 +-
 layouts/partials/article-list/compact.html    |   2 +-
 .../partials/article/components/header.html   |   2 +-
 .../article/components/photoswipe.html        |  82 ++----
 .../article/components/related-content.html   |   2 +-
 layouts/partials/data/title.html              |   7 +-
 .../partials/footer/components/script.html    |   2 -
 layouts/partials/footer/footer.html           |   2 +-
 layouts/partials/head/colorScheme.html        |   4 +-
 layouts/partials/head/head.html               |   7 +-
 .../head/opengraph/provider/twitter.html      |   2 +-
 layouts/partials/sidebar/left.html            |   4 +-
 layouts/partials/widget/archives.html         |   4 +-
 theme.toml                                    |   2 +-
 73 files changed, 892 insertions(+), 1976 deletions(-)
 create mode 100644 assets/ts/codeblock.ts
 delete mode 100644 assets/ts/color.ts
 delete mode 100644 config.yaml
 create mode 100644 config/_default/module.toml
 create mode 100644 config/_default/params.toml
 delete mode 100644 exampleSite/README.md
 create mode 100644 exampleSite/assets/img/favicon.png
 create mode 100644 exampleSite/assets/img/logo.jpg
 delete mode 100644 exampleSite/config.yaml
 create mode 100644 exampleSite/config/_default/config.toml
 create mode 100644 exampleSite/config/_default/languages.toml
 create mode 100644 exampleSite/config/_default/markup.toml
 create mode 100644 exampleSite/config/_default/menu.toml
 create mode 100644 exampleSite/config/_default/params.toml
 create mode 100644 exampleSite/config/_default/permalinks.toml
 create mode 100644 exampleSite/config/_default/related.toml
 delete mode 100644 exampleSite/content/post/emoji-support/index.md
 delete mode 100644 exampleSite/content/post/emoji-support/the-creative-exchange-d2zvqp3fpro-unsplash.jpg
 create mode 100644 layouts/_default/_markup/render-codeblock.html

diff --git a/archetypes/default.md b/archetypes/default.md
index 0556d3a..129dec2 100644
--- a/archetypes/default.md
+++ b/archetypes/default.md
@@ -5,7 +5,6 @@ date: {{ .Date }}
 image: 
 math: 
 license: 
-hidden: false
 comments: true
 draft: true
 ---
\ No newline at end of file
diff --git a/assets/scss/partials/article.scss b/assets/scss/partials/article.scss
index f085ff0..a041e9b 100644
--- a/assets/scss/partials/article.scss
+++ b/assets/scss/partials/article.scss
@@ -192,7 +192,6 @@
         .article-preview {
             font-size: 1.4rem;
             color: var(--card-text-color-tertiary);
-            margin-top: 10px;
             line-height: 1.5;
         }
     }
diff --git a/assets/scss/partials/highlight/dark.scss b/assets/scss/partials/highlight/dark.scss
index 0d3f330..3ea6c56 100644
--- a/assets/scss/partials/highlight/dark.scss
+++ b/assets/scss/partials/highlight/dark.scss
@@ -11,4 +11,4 @@ $text-color: $color;
 $name-color: #a6e22e;
 $literal-color: #e6db74;
 
-@import "common.scss";
+@import "common.scss";
\ No newline at end of file
diff --git a/assets/scss/partials/layout/article.scss b/assets/scss/partials/layout/article.scss
index 97c7e77..ba06c11 100644
--- a/assets/scss/partials/layout/article.scss
+++ b/assets/scss/partials/layout/article.scss
@@ -286,10 +286,12 @@
         line-height: 1.428571429;
         word-break: break-all;
         padding: var(--card-padding);
+
         //  keep Codeblocks LTR
         [dir="rtl"] & {
             direction: ltr;
         }
+
         code {
             color: unset;
             border: none;
@@ -303,15 +305,11 @@
         padding: var(--card-padding);
         position: relative;
 
-        &:hover {
-            .copyCodeButton {
-                opacity: 1;
-            }
-        }
         // keep Codeblocks LTR
         [dir="rtl"] & {
             direction: ltr;
         }
+
         pre {
             margin: initial;
             padding: 0;
@@ -320,20 +318,30 @@
         }
     }
 
-    .copyCodeButton {
-        position: absolute;
-        top: calc(var(--card-padding));
-        right: calc(var(--card-padding));
-        background: var(--card-background);
-        border: none;
-        box-shadow: var(--shadow-l2);
-        border-radius: var(--tag-border-radius);
-        padding: 8px 16px;
-        color: var(--card-text-color-main);
-        cursor: pointer;
-        font-size: 14px;
-        opacity: 0;
-        transition: opacity 0.3s ease;
+    .codeblock {
+        header {
+            background-color: var(--card-background-selected);
+            padding: 5px var(--card-padding);
+            display: flex;
+            justify-content: space-between;
+            box-shadow: var(--shadow-l1);
+
+            span {
+                text-transform: uppercase;
+                font-weight: bold;
+                color: var(--card-text-color-secondary);
+            }
+        }
+
+        .codeblock-copy {
+            cursor: pointer;
+            background-color: transparent;
+            border: none;
+            padding: 8px 16px;
+            color: var(--card-text-color-secondary);
+            font-size: 14px;
+            font-weight: bold;
+        }
     }
 
     .table-wrapper {
@@ -402,7 +410,7 @@
     /// Negative margins
     blockquote,
     figure,
-    .highlight,
+    .codeblock,
     pre,
     .gallery,
     .video-wrapper,
diff --git a/assets/scss/partials/layout/search.scss b/assets/scss/partials/layout/search.scss
index 89cdcef..cbf15b7 100644
--- a/assets/scss/partials/layout/search.scss
+++ b/assets/scss/partials/layout/search.scss
@@ -31,6 +31,7 @@
 
     input {
         padding: 40px 20px 20px;
+        padding-inline-end: var(--button-size);
         border-radius: var(--card-border-radius);
         background-color: var(--card-background);
         box-shadow: var(--shadow-l1);
@@ -78,5 +79,4 @@
             height: 20px;
         }
     }
-
-}
\ No newline at end of file
+}
diff --git a/assets/scss/partials/sidebar.scss b/assets/scss/partials/sidebar.scss
index 95310ca..75332a7 100644
--- a/assets/scss/partials/sidebar.scss
+++ b/assets/scss/partials/sidebar.scss
@@ -11,7 +11,6 @@
     flex-direction: column;
     flex-shrink: 0;
     align-self: stretch;
-    gap: var(--sidebar-element-separation);
     max-width: none;
     width: 100%;
     position: relative;
@@ -65,6 +64,11 @@
             }
         }
     }
+
+    .social-menu,
+    .menu {
+        margin-top: var(--sidebar-element-separation);
+    }
 }
 
 .right-sidebar {
diff --git a/assets/ts/codeblock.ts b/assets/ts/codeblock.ts
new file mode 100644
index 0000000..08c3328
--- /dev/null
+++ b/assets/ts/codeblock.ts
@@ -0,0 +1,28 @@
+/**
+ * Copy button for code blocks
+*/
+export default () => {
+    const copyButtons = document.querySelectorAll('.codeblock-copy');
+    copyButtons.forEach(button => {
+        const codeblockID = button.getAttribute('data-id'),
+            copyText = button.textContent,
+            copiedText = button.getAttribute('data-copied-text');
+        if (!codeblockID) return;
+        button.addEventListener('click', (e) => {
+            e.preventDefault();
+            const codeblock = document.getElementById(codeblockID) as HTMLElement;
+            if (!codeblockID) return;
+            navigator.clipboard.writeText(codeblock.textContent)
+                .then(() => {
+                    button.textContent = copiedText;
+                    setTimeout(() => {
+                        button.textContent = copyText;
+                    }, 1000);
+                })
+                .catch(err => {
+                    alert(err)
+                    console.log('Something went wrong', err);
+                });
+        }, false);
+    });
+}
\ No newline at end of file
diff --git a/assets/ts/color.ts b/assets/ts/color.ts
deleted file mode 100644
index 50581d1..0000000
--- a/assets/ts/color.ts
+++ /dev/null
@@ -1,63 +0,0 @@
-interface colorScheme {
-    hash: string,                        /// Regenerate color scheme when the image hash is changed
-    DarkMuted: {
-        hex: string,
-        rgb: Number[],
-        bodyTextColor: string
-    },
-    Vibrant: {
-        hex: string,
-        rgb: Number[],
-        bodyTextColor: string
-    }
-}
-
-let colorsCache: { [key: string]: colorScheme } = {};
-
-if (localStorage.hasOwnProperty('StackColorsCache')) {
-    try {
-        colorsCache = JSON.parse(localStorage.getItem('StackColorsCache'));
-    }
-    catch (e) {
-        colorsCache = {};
-    }
-}
-
-async function getColor(key: string, hash: string, imageURL: string) {
-    if (!key) {
-        /**
-         * If no key is provided, do not cache the result
-         */
-        return await Vibrant.from(imageURL).getPalette();
-    }
-
-    if (!colorsCache.hasOwnProperty(key) || colorsCache[key].hash !== hash) {
-        /**
-         * If key is provided, but not found in cache, or the hash mismatches => Regenerate color scheme
-         */
-        const palette = await Vibrant.from(imageURL).getPalette();
-
-        colorsCache[key] = {
-            hash: hash,
-            Vibrant: {
-                hex: palette.Vibrant.hex,
-                rgb: palette.Vibrant.rgb,
-                bodyTextColor: palette.Vibrant.bodyTextColor
-            },
-            DarkMuted: {
-                hex: palette.DarkMuted.hex,
-                rgb: palette.DarkMuted.rgb,
-                bodyTextColor: palette.DarkMuted.bodyTextColor
-            }
-        }
-
-        /* Save the result in localStorage */
-        localStorage.setItem('StackColorsCache', JSON.stringify(colorsCache));
-    }
-
-    return colorsCache[key];
-}
-
-export {
-    getColor
-}
\ No newline at end of file
diff --git a/assets/ts/gallery.ts b/assets/ts/gallery.ts
index 9840f1e..e0124d1 100644
--- a/assets/ts/gallery.ts
+++ b/assets/ts/gallery.ts
@@ -1,186 +1,92 @@
-declare global {
-    interface Window {
-        PhotoSwipe: any;
-        PhotoSwipeUI_Default: any
+const wrap = (figures: HTMLElement[]) => {
+    const galleryContainer = document.createElement('div');
+    galleryContainer.className = 'gallery';
+
+    const parentNode = figures[0].parentNode,
+        first = figures[0];
+
+    parentNode.insertBefore(galleryContainer, first)
+
+    for (const figure of figures) {
+        galleryContainer.appendChild(figure);
     }
 }
 
-interface PhotoSwipeItem {
-    w: number;
-    h: number;
-    src: string;
-    msrc: string;
-    title?: string;
-    el: HTMLElement;
-}
+export default (container: HTMLElement) => {
+    /// The process of wrapping image with figure tag is done using JavaScript instead of only Hugo markdown render hook
+    /// because it can not detect whether image is being wrapped by a link or not
+    /// and it lead to a invalid HTML construction (<a><figure><img></figure></a>)
+    const images = container.querySelectorAll('img.gallery-image') as NodeListOf<HTMLImageElement>;
+    for (const img of Array.from(images)) {
+        /// Images are wrapped with figure tag if the paragraph has only images without texts
+        /// This is done to allow inline images within paragraphs
+        const paragraph = img.closest('p');
 
-class StackGallery {
-    private galleryUID: number;
-    private items: PhotoSwipeItem[] = [];
+        if (!paragraph || !container.contains(paragraph)) continue;
 
-    constructor(container: HTMLElement, galleryUID = 1) {
-        if (window.PhotoSwipe == undefined || window.PhotoSwipeUI_Default == undefined) {
-            console.error("PhotoSwipe lib not loaded.");
-            return;
+        if (paragraph.textContent.trim() == '') {
+            /// Once we insert figcaption, this check no longer works
+            /// So we add a class to paragraph to mark it
+            paragraph.classList.add('no-text');
         }
 
-        this.galleryUID = galleryUID;
+        let isNewLineImage = paragraph.classList.contains('no-text');
+        if (!isNewLineImage) continue;
 
-        StackGallery.createGallery(container);
-        this.loadItems(container);
-        this.bindClick();
-    }
+        const hasLink = img.parentElement.tagName == 'A';
 
-    private loadItems(container: HTMLElement) {
-        this.items = [];
+        let el: HTMLElement = img;
+        /// Wrap image with figure tag, with flex-grow and flex-basis values extracted from img's data attributes
+        const figure = document.createElement('figure');
+        figure.style.setProperty('flex-grow', img.getAttribute('data-flex-grow') || '1');
+        figure.style.setProperty('flex-basis', img.getAttribute('data-flex-basis') || '0');
+        if (hasLink) {
+            /// Wrap <a> if it exists
+            el = img.parentElement;
+        }
+        el.parentElement.insertBefore(figure, el);
+        figure.appendChild(el);
 
-        const figures = container.querySelectorAll('figure.gallery-image');
+        /// Add figcaption if it exists
+        if (img.hasAttribute('alt')) {
+            const figcaption = document.createElement('figcaption');
+            figcaption.innerText = img.getAttribute('alt');
+            figure.appendChild(figcaption);
+        }
 
-        for (const el of figures) {
-            const figcaption = el.querySelector('figcaption'),
-                img = el.querySelector('img');
+        /// Wrap img tag with <a> tag if image was not wrapped by <a> tag
+        if (!hasLink) {
+            figure.className = 'gallery-image';
 
-            let aux: PhotoSwipeItem = {
-                w: parseInt(img.getAttribute('width')),
-                h: parseInt(img.getAttribute('height')),
-                src: img.src,
-                msrc: img.getAttribute('data-thumb') || img.src,
-                el: el
-            }
-
-            if (figcaption) {
-                aux.title = figcaption.innerHTML;
-            }
-
-            this.items.push(aux);
+            const a = document.createElement('a');
+            a.href = img.src;
+            a.setAttribute('target', '_blank');
+            a.setAttribute('data-pswp-width', img.width.toString());
+            a.setAttribute('data-pswp-height', img.height.toString());
+            img.parentNode.insertBefore(a, img);
+            a.appendChild(img);
         }
     }
 
-    public static createGallery(container: HTMLElement) {
-        /// The process of wrapping image with figure tag is done using JavaScript instead of only Hugo markdown render hook
-        /// because it can not detect whether image is being wrapped by a link or not
-        /// and it lead to a invalid HTML construction (<a><figure><img></figure></a>)
-
-        const images = container.querySelectorAll('img.gallery-image');
-        for (const img of Array.from(images)) {
-            /// Images are wrapped with figure tag if the paragraph has only images without texts
-            /// This is done to allow inline images within paragraphs
-            const paragraph = img.closest('p');
-
-            if (!paragraph || !container.contains(paragraph)) continue;
-
-            if (paragraph.textContent.trim() == '') {
-                /// Once we insert figcaption, this check no longer works
-                /// So we add a class to paragraph to mark it
-                paragraph.classList.add('no-text');
-            }
-
-            let isNewLineImage = paragraph.classList.contains('no-text');
-            if (!isNewLineImage) continue;
-
-            const hasLink = img.parentElement.tagName == 'A';
-
-            let el: HTMLElement = img;
-            /// Wrap image with figure tag, with flex-grow and flex-basis values extracted from img's data attributes
-            const figure = document.createElement('figure');
-            figure.style.setProperty('flex-grow', img.getAttribute('data-flex-grow') || '1');
-            figure.style.setProperty('flex-basis', img.getAttribute('data-flex-basis') || '0');
-            if (hasLink) {
-                /// Wrap <a> if it exists
-                el = img.parentElement;
-            }
-            el.parentElement.insertBefore(figure, el);
-            figure.appendChild(el);
-
-            /// Add figcaption if it exists
-            if (img.hasAttribute('alt')) {
-                const figcaption = document.createElement('figcaption');
-                figcaption.innerText = img.getAttribute('alt');
-                figure.appendChild(figcaption);
-            }
-
-            /// Wrap img tag with <a> tag if image was not wrapped by <a> tag
-            if (!hasLink) {
-                figure.className = 'gallery-image';
-
-                const a = document.createElement('a');
-                a.href = img.src;
-                a.setAttribute('target', '_blank');
-                img.parentNode.insertBefore(a, img);
-                a.appendChild(img);
-            }
+    const figuresEl = container.querySelectorAll('figure.gallery-image') as NodeListOf<HTMLElement>;
+    let currentGallery = [];
+    for (const figure of Array.from(figuresEl)) {
+        if (!currentGallery.length) {
+            /// First iteration
+            currentGallery = [figure];
         }
-
-        const figuresEl = container.querySelectorAll('figure.gallery-image');
-
-        let currentGallery = [];
-
-        for (const figure of figuresEl) {
-            if (!currentGallery.length) {
-                /// First iteration
-                currentGallery = [figure];
-            }
-            else if (figure.previousElementSibling === currentGallery[currentGallery.length - 1]) {
-                /// Adjacent figures
-                currentGallery.push(figure);
-            }
-            else if (currentGallery.length) {
-                /// End gallery
-                StackGallery.wrap(currentGallery);
-                currentGallery = [figure];
-            }
+        else if (figure.previousElementSibling === currentGallery[currentGallery.length - 1]) {
+            /// Adjacent figures
+            currentGallery.push(figure);
         }
-
-        if (currentGallery.length > 0) {
-            StackGallery.wrap(currentGallery);
+        else if (currentGallery.length) {
+            /// End gallery
+            wrap(currentGallery);
+            currentGallery = [figure];
         }
     }
 
-    /**
-     * Wrap adjacent figure tags with div.gallery
-     * @param figures 
-     */
-    public static wrap(figures: HTMLElement[]) {
-        const galleryContainer = document.createElement('div');
-        galleryContainer.className = 'gallery';
-
-        const parentNode = figures[0].parentNode,
-            first = figures[0];
-
-        parentNode.insertBefore(galleryContainer, first)
-
-        for (const figure of figures) {
-            galleryContainer.appendChild(figure);
-        }
+    if (currentGallery.length > 0) {
+        wrap(currentGallery);
     }
-
-    public open(index: number) {
-        const pswp = document.querySelector('.pswp') as HTMLDivElement;
-        const ps = new window.PhotoSwipe(pswp, window.PhotoSwipeUI_Default, this.items, {
-            index: index,
-            galleryUID: this.galleryUID,
-            getThumbBoundsFn: (index) => {
-                const thumbnail = this.items[index].el.getElementsByTagName('img')[0],
-                    pageYScroll = window.pageYOffset || document.documentElement.scrollTop,
-                    rect = thumbnail.getBoundingClientRect();
-
-                return { x: rect.left, y: rect.top + pageYScroll, w: rect.width };
-            }
-        });
-
-        ps.init();
-    }
-
-    private bindClick() {
-        for (const [index, item] of this.items.entries()) {
-            const a = item.el.querySelector('a');
-
-            a.addEventListener('click', (e) => {
-                e.preventDefault();
-                this.open(index);
-            })
-        }
-    }
-}
-
-export default StackGallery;
\ No newline at end of file
+};
\ No newline at end of file
diff --git a/assets/ts/main.ts b/assets/ts/main.ts
index f3160ae..0668c7c 100644
--- a/assets/ts/main.ts
+++ b/assets/ts/main.ts
@@ -5,8 +5,7 @@
 *   @website: https://jimmycai.com
 *   @link: https://github.com/CaiJimmy/hugo-theme-stack
 */
-import StackGallery from "ts/gallery";
-import { getColor } from 'ts/color';
+import StackCodeBlock from "ts/codeblock";
 import menu from 'ts/menu';
 import createElement from 'ts/createElement';
 import StackColorScheme from 'ts/colorScheme';
@@ -22,76 +21,12 @@ let Stack = {
 
         const articleContent = document.querySelector('.article-content') as HTMLElement;
         if (articleContent) {
-            new StackGallery(articleContent);
             setupSmoothAnchors();
             setupScrollspy();
         }
 
-        /**
-         * Add linear gradient background to tile style article
-         */
-        const articleTile = document.querySelector('.article-list--tile');
-        if (articleTile) {
-            let observer = new IntersectionObserver(async (entries, observer) => {
-                entries.forEach(entry => {
-                    if (!entry.isIntersecting) return;
-                    observer.unobserve(entry.target);
-
-                    const articles = entry.target.querySelectorAll('article.has-image');
-                    articles.forEach(async articles => {
-                        const image = articles.querySelector('img'),
-                            imageURL = image.src,
-                            key = image.getAttribute('data-key'),
-                            hash = image.getAttribute('data-hash'),
-                            articleDetails: HTMLDivElement = articles.querySelector('.article-details');
-
-                        const colors = await getColor(key, hash, imageURL);
-
-                        articleDetails.style.background = `
-                        linear-gradient(0deg, 
-                            rgba(${colors.DarkMuted.rgb[0]}, ${colors.DarkMuted.rgb[1]}, ${colors.DarkMuted.rgb[2]}, 0.5) 0%, 
-                            rgba(${colors.Vibrant.rgb[0]}, ${colors.Vibrant.rgb[1]}, ${colors.Vibrant.rgb[2]}, 0.75) 100%)`;
-                    })
-                })
-            });
-
-            observer.observe(articleTile)
-        }
-
-
-        /**
-         * Add copy button to code block
-        */
-        const highlights = document.querySelectorAll('.article-content div.highlight');
-        const copyText = `Copy`,
-            copiedText = `Copied!`;
-
-        highlights.forEach(highlight => {
-            const copyButton = document.createElement('button');
-            copyButton.innerHTML = copyText;
-            copyButton.classList.add('copyCodeButton');
-            highlight.appendChild(copyButton);
-
-            const codeBlock = highlight.querySelector('code[data-lang]');
-            if (!codeBlock) return;
-
-            copyButton.addEventListener('click', () => {
-                navigator.clipboard.writeText(codeBlock.textContent)
-                    .then(() => {
-                        copyButton.textContent = copiedText;
-
-                        setTimeout(() => {
-                            copyButton.textContent = copyText;
-                        }, 1000);
-                    })
-                    .catch(err => {
-                        alert(err)
-                        console.log('Something went wrong', err);
-                    });
-            });
-        });
-
         new StackColorScheme(document.getElementById('dark-mode-toggle'));
+        StackCodeBlock();
     }
 }
 
diff --git a/config.yaml b/config.yaml
deleted file mode 100644
index fcb4bcb..0000000
--- a/config.yaml
+++ /dev/null
@@ -1,143 +0,0 @@
-module:
-    hugoVersion:
-        extended: true
-        min: "0.87.0"
-
-params:
-    mainSections:
-        - post
-    featuredImageField: image
-    rssFullContent: true
-    favicon:
-
-    footer:
-        since:
-        customText:
-
-    dateFormat:
-        published: Jan 02, 2006
-        lastUpdated: Jan 02, 2006 15:04 MST
-
-    sidebar:
-        compact: false
-        emoji:
-        subtitle:
-        avatar:
-            enabled: true
-            local: true
-            src: img/avatar.png
-
-    article:
-        math: false
-        toc: true
-        readingTime: true
-        license:
-            enabled: false
-            default: Licensed under CC BY-NC-SA 4.0
-
-    comments:
-        enabled: false
-        provider: disqus
-
-        disqusjs:
-            shortname:
-            apiUrl:
-            apiKey:
-            admin:
-            adminLabel:
-
-        utterances:
-            repo:
-            issueTerm: pathname
-            label:
-
-        remark42:
-            host:
-            site:
-            locale:
-
-        vssue:
-            platform:
-            owner:
-            repo:
-            clientId:
-            clientSecret:
-            autoCreateIssue: false
-
-        # Waline client configuration see: https://waline.js.org/en/reference/client.html
-        waline:
-            serverURL:
-            lang:
-            visitor:
-            avatar:
-            emoji:
-                - https://cdn.jsdelivr.net/gh/walinejs/emojis/weibo
-            requiredMeta:
-                - name
-                - email
-                - url
-            placeholder:
-            locale:
-                admin: Admin
-
-        twikoo:
-            envId:
-            region:
-            path:
-            lang:
-
-        giscus:
-            repo:
-            repoID:
-            category:
-            categoryID:
-            mapping:
-            strict:
-            lightTheme:
-            darkTheme:
-            reactionsEnabled: 1
-            emitMetadata: 0
-            inputPosition:
-            lang:
-
-        gitalk:
-            owner:
-            admin:
-            repo:
-            clientID:
-            clientSecret:
-
-        cusdis:
-            host:
-            id:
-
-    widgets:
-        homepage: []
-        page: []
-
-    opengraph:
-        twitter:
-            # Your Twitter username
-            site:
-
-            # Available values: summary, summary_large_image
-            card: summary_large_image
-
-    defaultImage:
-        opengraph:
-            enabled: false
-            local: false
-            src:
-
-    colorScheme:
-        # Display toggle
-        toggle: true
-
-        # Available values: auto, light, dark
-        default: auto
-
-    imageProcessing:
-        cover:
-            enabled: true
-        content:
-            enabled: true
diff --git a/config/_default/module.toml b/config/_default/module.toml
new file mode 100644
index 0000000..cc14cd5
--- /dev/null
+++ b/config/_default/module.toml
@@ -0,0 +1,3 @@
+[hugoVersion]
+extended = true
+min = "0.100.0"
\ No newline at end of file
diff --git a/config/_default/params.toml b/config/_default/params.toml
new file mode 100644
index 0000000..a6bd7ce
--- /dev/null
+++ b/config/_default/params.toml
@@ -0,0 +1,52 @@
+# Theme's default configuration
+mainSections = ["post"]
+featuredImageField = "image"
+rssFullContent = true
+
+[footer]
+
+[dateFormat]
+published = "Jan 02, 2006"
+lastUpdated = "Jan 02, 2006 15:04 MST"
+
+[sidebar]
+compact = false
+
+[sidebar.avatar]
+enabled = true
+local = true
+src = "img/avatar.png"
+
+[article]
+math = false
+toc = true
+readingTime = true
+
+[article.license]
+enabled = false
+default = "Licensed under CC BY-NC-SA 4.0"
+
+[comments]
+enabled = false
+provider = "disqus"
+
+[widgets]
+homepage = []
+page = []
+
+[opengraph.twitter]
+card = "summary_large_image"
+
+[defaultImage.opengraph]
+enabled = false
+local = false
+
+[colorScheme]
+toggle = true
+default = "auto"
+
+[imageProcessing.cover]
+enabled = true
+
+[imageProcessing.content]
+enabled = true
diff --git a/data/external.yaml b/data/external.yaml
index 777620d..269ef4c 100644
--- a/data/external.yaml
+++ b/data/external.yaml
@@ -1,25 +1,3 @@
-Vibrant:
-    - src: https://cdn.jsdelivr.net/npm/node-vibrant@3.1.6/dist/vibrant.min.js
-      integrity: sha256-awcR2jno4kI5X0zL8ex0vi2z+KMkF24hUW8WePSA9HM=
-      type: script
-
-PhotoSwipe:
-    - src: https://cdn.jsdelivr.net/npm/photoswipe@4.1.3/dist/photoswipe.min.js
-      integrity: sha256-ePwmChbbvXbsO02lbM3HoHbSHTHFAeChekF1xKJdleo=
-      type: script
-      defer: true
-
-    - src: https://cdn.jsdelivr.net/npm/photoswipe@4.1.3/dist/photoswipe-ui-default.min.js
-      integrity: sha256-UKkzOn/w1mBxRmLLGrSeyB4e1xbrp4xylgAWb3M42pU=
-      type: script
-      defer: true
-
-    - src: https://cdn.jsdelivr.net/npm/photoswipe@4.1.3/dist/default-skin/default-skin.min.css
-      type: style
-
-    - src: https://cdn.jsdelivr.net/npm/photoswipe@4.1.3/dist/photoswipe.min.css
-      type: style
-
 KaTeX:
     - src: https://cdn.jsdelivr.net/npm/katex@0.15.6/dist/katex.min.css
       integrity: sha256-J+iAE0sgH8QSz9hpcDxXIftnj65JEZgNhGcgReTTK9s=
diff --git a/exampleSite/README.md b/exampleSite/README.md
deleted file mode 100644
index 1b6d403..0000000
--- a/exampleSite/README.md
+++ /dev/null
@@ -1 +0,0 @@
-Example site modified from https://github.com/gohugoio/hugoBasicExample
\ No newline at end of file
diff --git a/exampleSite/assets/img/favicon.png b/exampleSite/assets/img/favicon.png
new file mode 100644
index 0000000000000000000000000000000000000000..74e8efae1bb8bf261283ba836e1300e80b4cf77b
GIT binary patch
literal 1031
zcmV+i1o-=jP)<h;3K|Lk000e1NJLTq001BW001Be1^@s6b9#F800001b5ch_0Itp)
z=>Px&!AV3xR9HvFmrraIRUF4ZZ)P^8%RjYV5KO#KjKu_EG|?Le{shXwOH*7DY)k0L
znAAX^DG3Q{?S)=AwduAHSZwOSi-yF+a8m*zhS->3q?#pK(=8N=l-haknK!djmg(-y
zY+b`7d)oK=z0do--=FUjB>eiv2iLg^q6N#|E)ZKaybAhx-(1WJ_)VjK1TH%%_se6g
zUH6l?7IBOE#)g`dw2uL8KttU6(*N@a#w^R}?`b=DE6S!Sz`*!;!=uFqS%LUaLn`6M
zPc0L$sNszJ&^>XotLsrE9~A*k<wrLO<QE{CSF-VP8$F@1-#d|M|0Vq2GJsD%8{Q_B
z_!@YrKAZbqG!z|6?>xT$(2a7xPXYKRSKroq^I$^*0oJ?akyrvaIXIYhR@+y@VQ+qU
zJ?qkG%t9R#lETbg3is~CtkM(d)Y`YYTU+P7`UzHN^SRSNce%CJn(o~@utaRJcxJyB
zXZZZubwuoXJ<yvu^zjlv-`Ke(E#05O*{+o0$evw^Q$ZFdk>8DS+iK)1`}L}JraFWz
zxAe3fzU3V)doeeHragRmB^5_oc4H#pN)_c0$FT_jrWPEI-)v;nng%w%@k%wj(cVmF
zhwwVwqVs3C$(T(8fTSUi)04<6quiN;_DdF6f_-i8RJ)RSC*`ge*?cYoTnKOC0Vu`M
zy){H23?Kyi_E!Y}B@Y;YVW2Y#AZY~L=}A<11mXZ7CqBuKe6P`O)-wWyIp{D~5Cb3(
z*F`ozQUu*tj|c=gP?!^RToSPWAZE-JxPV>X2qXnSMgx?}Fli11Ww=xY@i|}sBCep;
zK2WLxlLMv<O-GEZ0&@kCNmye9f-0yn2_wp|#t5va472BlGFWzGBTAeDOIMIM2@gcK
z;?gjRpKd;)oW6~`a`s6pj?MwU6??-dpBsS+!$>K%zqXkdSEbpYA7Di)0*#vb8SBmu
z9>53jN$3wF1JHMFs7X6^#c^x~l9H15)eT<YaY>ex>jNWGgeNQ<+s3hBq6i;-Q@s=V
z<Jj3^6myv%89ohSnIJJk$^26CAJTe(n^%8j_U_*m)560LFg-7LEKM0gOXX=e(3|Oe
zB1nw4k_^9AO$i4eQ-vA+`eSyPKnvuWe<B}b^_m7YHE#^T>IwIud^?coD-xv!CdpSJ
zd5gN5C=DF`U$Pu1+HtZxfOw`4lK{e(>CPzu|M6+2&!kgpdjlCBzPebwZ4|STZtag#
z7_(g2-*fQr${wd-(vo;>0ivJhN?vxJ(}|zw{{r2`R|fRB=x+c3002ovPDHLkV1gf|
B+MNIZ

literal 0
HcmV?d00001

diff --git a/exampleSite/assets/img/logo.jpg b/exampleSite/assets/img/logo.jpg
new file mode 100644
index 0000000000000000000000000000000000000000..145804ecd0f0bd39b70b904a6105e24a63e3cd3a
GIT binary patch
literal 21951
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
Sh~rI0#)InsjF<TK`~Dvweo0^e

literal 0
HcmV?d00001

diff --git a/exampleSite/config.yaml b/exampleSite/config.yaml
deleted file mode 100644
index c1b48dd..0000000
--- a/exampleSite/config.yaml
+++ /dev/null
@@ -1,239 +0,0 @@
-baseurl: https://example.com
-languageCode: en-us
-theme: hugo-theme-stack
-paginate: 5
-title: Example Site
-
-languages:
-    en:
-        languageName: English
-        title: Example Site
-        description: Example description
-        weight: 1
-    zh-cn:
-        languageName: 中文
-        title: 演示站点
-        description: 演示说明
-        weight: 2
-    ar:
-        languageName: عربي
-        languagedirection: rtl
-        title: موقع تجريبي
-        description: وصف تجريبي
-        weight: 3
-
-# Change it to your Disqus shortname before using
-disqusShortname: hugo-theme-stack
-
-# GA Tracking ID
-googleAnalytics:
-
-# Theme i18n support
-# Available values: ar, bn, ca, de, el, en, es, fr, hu, id, it, ja, ko, nl, pt-br, th, uk, zh-cn, zh-hk, zh-tw
-DefaultContentLanguage: en
-
-# Set hasCJKLanguage to true if DefaultContentLanguage is in [zh-cn ja ko]
-# This will make .Summary and .WordCount behave correctly for CJK languages.
-hasCJKLanguage: false
-
-permalinks:
-    post: /p/:slug/
-    page: /:slug/
-
-params:
-    mainSections:
-        - post
-    featuredImageField: image
-    rssFullContent: true
-    favicon:  # e.g.: favicon placed in `static/favicon.ico` of your site folder, then set this field to `/favicon.ico` (`/` is necessary)
-
-    footer:
-        since: 2020
-        customText:
-
-    dateFormat:
-        published: Jan 02, 2006
-        lastUpdated: Jan 02, 2006 15:04 MST
-
-    sidebar:
-        emoji: 🍥
-        subtitle: Lorem ipsum dolor sit amet, consectetur adipiscing elit.
-        avatar:
-            enabled: true
-            local: true
-            src: img/avatar.png
-
-    article:
-        math: false
-        toc: true
-        readingTime: true
-        license:
-            enabled: true
-            default: Licensed under CC BY-NC-SA 4.0
-
-    comments:
-        enabled: true
-        provider: disqus
-
-        disqusjs:
-            shortname:
-            apiUrl:
-            apiKey:
-            admin:
-            adminLabel:
-
-        utterances:
-            repo:
-            issueTerm: pathname
-            label:
-
-        remark42:
-            host:
-            site:
-            locale:
-
-        vssue:
-            platform:
-            owner:
-            repo:
-            clientId:
-            clientSecret:
-            autoCreateIssue: false
-
-        # Waline client configuration see: https://waline.js.org/en/reference/component.html
-        waline:
-            serverURL:
-            lang:
-            pageview:
-            emoji:
-                - https://unpkg.com/@waline/emojis@1.0.1/weibo
-            requiredMeta:
-                - name
-                - email
-                - url
-            locale:
-                admin: Admin
-                placeholder:
-
-        twikoo:
-            envId:
-            region:
-            path:
-            lang:
-
-        # See https://cactus.chat/docs/reference/web-client/#configuration for description of the various options
-        cactus:
-            defaultHomeserverUrl: "https://matrix.cactus.chat:8448"
-            serverName: "cactus.chat"
-            siteName: "" # You must insert a unique identifier here matching the one you registered (See https://cactus.chat/docs/getting-started/quick-start/#register-your-site)
-
-        giscus:
-            repo:
-            repoID:
-            category:
-            categoryID:
-            mapping:
-            lightTheme:
-            darkTheme:
-            reactionsEnabled: 1
-            emitMetadata: 0
-
-        gitalk:
-            owner:
-            admin:
-            repo:
-            clientID:
-            clientSecret:
-
-        cusdis:
-            host:
-            id:
-    widgets:
-        homepage:
-            - type: search
-            - type: archives
-              params:
-                  limit: 5
-            - type: categories
-              params:
-                  limit: 10
-            - type: tag-cloud
-              params:
-                  limit: 10
-        page:
-            - type: toc
-
-    opengraph:
-        twitter:
-            # Your Twitter username
-            site:
-
-            # Available values: summary, summary_large_image
-            card: summary_large_image
-
-    defaultImage:
-        opengraph:
-            enabled: false
-            local: false
-            src:
-
-    colorScheme:
-        # Display toggle
-        toggle: true
-
-        # Available values: auto, light, dark
-        default: auto
-
-    imageProcessing:
-        cover:
-            enabled: true
-        content:
-            enabled: true
-
-### Custom menu
-### See https://docs.stack.jimmycai.com/configuration/custom-menu.html
-### To remove about, archive and search page menu item, remove `menu` field from their FrontMatter
-menu:
-    main: []
-
-    social:
-        - identifier: github
-          name: GitHub
-          url: https://github.com/CaiJimmy/hugo-theme-stack
-          params:
-              icon: brand-github
-
-        - identifier: twitter
-          name: Twitter
-          url: https://twitter.com
-          params:
-              icon: brand-twitter
-
-related:
-    includeNewer: true
-    threshold: 60
-    toLower: false
-    indices:
-        - name: tags
-          weight: 100
-
-        - name: categories
-          weight: 200
-
-markup:
-    goldmark:
-        renderer:
-            ## Set to true if you have HTML content inside Markdown
-            unsafe: false
-    tableOfContents:
-        endLevel: 4
-        ordered: true
-        startLevel: 2
-    highlight:
-        noClasses: false
-        codeFences: true
-        guessSyntax: true
-        lineNoStart: 1
-        lineNos: true
-        lineNumbersInTable: true
-        tabWidth: 4
diff --git a/exampleSite/config/_default/config.toml b/exampleSite/config/_default/config.toml
new file mode 100644
index 0000000..548975a
--- /dev/null
+++ b/exampleSite/config/_default/config.toml
@@ -0,0 +1,20 @@
+# Change baseurl before deploy
+baseurl = "https://demo.stack.jimmycai.com"
+languageCode = "en-us"
+paginate = 5
+title = "Hugo Theme Stack Starter"
+theme = "hugo-theme-stack"
+
+# Theme i18n support
+# Available values: ar, bn, ca, de, el, en, es, fr, hu, id, it, ja, ko, nl, pt-br, th, uk, zh-cn, zh-hk, zh-tw
+DefaultContentLanguage = "en"
+
+# Set hasCJKLanguage to true if DefaultContentLanguage is in [zh-cn ja ko]
+# This will make .Summary and .WordCount behave correctly for CJK languages.
+hasCJKLanguage = false
+
+# Change it to your Disqus shortname before using
+disqusShortname = "hugo-theme-stack"
+
+# GA Tracking ID
+googleAnalytics = ""
diff --git a/exampleSite/config/_default/languages.toml b/exampleSite/config/_default/languages.toml
new file mode 100644
index 0000000..ad80c20
--- /dev/null
+++ b/exampleSite/config/_default/languages.toml
@@ -0,0 +1,16 @@
+# Enable multilanguage site support
+[en]
+languageName = "English"
+title = "Hugo Theme Stack Example Site"
+weight = 1
+
+[zh-cn]
+languageName = "中文"
+title = "Hugo 主题 Stack 演示站点"
+weight = 2
+
+[ar]
+languageName = "عربي"
+languagedirection = "rtl"
+title = "موقع تجريبي"
+weight = 3
diff --git a/exampleSite/config/_default/markup.toml b/exampleSite/config/_default/markup.toml
new file mode 100644
index 0000000..591ce9e
--- /dev/null
+++ b/exampleSite/config/_default/markup.toml
@@ -0,0 +1,18 @@
+# Markdown renderer configuration
+[goldmark.renderer]
+# Set it to true if you have HTML content inside Markdown
+unsafe = false
+
+[tableOfContents]
+endLevel = 4
+ordered = true
+startLevel = 2
+
+[highlight]
+noClasses = false
+codeFences = true
+guessSyntax = true
+lineNoStart = 1
+lineNos = true
+lineNumbersInTable = true
+tabWidth = 4
diff --git a/exampleSite/config/_default/menu.toml b/exampleSite/config/_default/menu.toml
new file mode 100644
index 0000000..e01b4f7
--- /dev/null
+++ b/exampleSite/config/_default/menu.toml
@@ -0,0 +1,20 @@
+### Custom menu
+### See https://docs.stack.jimmycai.com/configuration/custom-menu.html
+### To remove about, archive and search page menu item, remove `menu` field from their FrontMatter
+main = []
+
+[[social]]
+identifier = "github"
+name = "GitHub"
+url = "https://github.com/CaiJimmy/hugo-theme-stack"
+
+[social.params]
+icon = "brand-github"
+
+[[social]]
+identifier = "twitter"
+name = "Twitter"
+url = "https://twitter.com"
+
+[social.params]
+icon = "brand-twitter"
diff --git a/exampleSite/config/_default/params.toml b/exampleSite/config/_default/params.toml
new file mode 100644
index 0000000..a87c986
--- /dev/null
+++ b/exampleSite/config/_default/params.toml
@@ -0,0 +1,106 @@
+mainSections = ["post"]
+featuredImageField = "image"
+rssFullContent = true
+favicon = "img/favicon.png"
+
+[footer]
+since = 2020
+
+[dateFormat]
+published = "Jan 02, 2006"
+lastUpdated = "Jan 02, 2006 15:04 MST"
+
+[sidebar]
+emoji = "🍥"
+subtitle = "Lorem ipsum dolor sit amet, consectetur adipiscing elit."
+
+[sidebar.avatar]
+enabled = true
+local = true
+src = "img/logo.jpg"
+
+[article]
+math = false
+toc = true
+readingTime = true
+
+[article.license]
+enabled = true
+default = "Licensed under CC BY-NC-SA 4.0"
+
+[comments]
+enabled = true
+provider = "disqus"
+
+[comments.disqusjs]
+
+[comments.utterances]
+issueTerm = "pathname"
+
+[comments.remark42]
+
+[comments.vssue]
+autoCreateIssue = false
+
+[comments.waline]
+emoji = ["https://unpkg.com/@waline/emojis@1.0.1/weibo"]
+requiredMeta = ["name", "email", "url"]
+
+[comments.waline.locale]
+admin = "Admin"
+
+[comments.twikoo]
+
+[comments.cactus]
+defaultHomeserverUrl = "https://matrix.cactus.chat:8448"
+serverName = "cactus.chat"
+siteName = ""
+
+[comments.giscus]
+reactionsEnabled = 1
+emitMetadata = 0
+
+[comments.gitalk]
+
+[comments.cusdis]
+
+[[widgets.homepage]]
+type = "search"
+
+[[widgets.homepage]]
+type = "archives"
+
+[widgets.homepage.params]
+limit = 5
+
+[[widgets.homepage]]
+type = "categories"
+
+[widgets.homepage.params]
+limit = 10
+
+[[widgets.homepage]]
+type = "tag-cloud"
+
+[widgets.homepage.params]
+limit = 10
+
+[[widgets.page]]
+type = "toc"
+
+[opengraph.twitter]
+card = "summary_large_image"
+
+[defaultImage.opengraph]
+enabled = false
+local = false
+
+[colorScheme]
+toggle = true
+default = "auto"
+
+[imageProcessing.cover]
+enabled = true
+
+[imageProcessing.content]
+enabled = true
\ No newline at end of file
diff --git a/exampleSite/config/_default/permalinks.toml b/exampleSite/config/_default/permalinks.toml
new file mode 100644
index 0000000..2499a7e
--- /dev/null
+++ b/exampleSite/config/_default/permalinks.toml
@@ -0,0 +1,3 @@
+# Permalinks format of each content section
+post = "/p/:slug/"
+page = "/:slug/"
\ No newline at end of file
diff --git a/exampleSite/config/_default/related.toml b/exampleSite/config/_default/related.toml
new file mode 100644
index 0000000..be52654
--- /dev/null
+++ b/exampleSite/config/_default/related.toml
@@ -0,0 +1,12 @@
+# Related contents configuration
+includeNewer = true
+threshold = 60
+toLower = false
+
+[[indices]]
+name = "tags"
+weight = 100
+
+[[indices]]
+name = "categories"
+weight = 200
\ No newline at end of file
diff --git a/exampleSite/content/post/emoji-support/index.md b/exampleSite/content/post/emoji-support/index.md
deleted file mode 100644
index bc3e348..0000000
--- a/exampleSite/content/post/emoji-support/index.md
+++ /dev/null
@@ -1,50 +0,0 @@
-+++
-author = "Hugo Authors"
-title = "Emoji Support"
-date = "2019-03-05"
-description = "Guide to emoji usage in Hugo"
-categories = [
-    "Test"
-]
-tags = [
-    "emoji",
-]
-image = "the-creative-exchange-d2zvqp3fpro-unsplash.jpg"
-+++
-
-Emoji can be enabled in a Hugo project in a number of ways. 
-<!--more-->
-The [`emojify`](https://gohugo.io/functions/emojify/) function can be called directly in templates or [Inline Shortcodes](https://gohugo.io/templates/shortcode-templates/#inline-shortcodes). 
-
-To enable emoji globally, set `enableEmoji` to `true` in your site's [configuration](https://gohugo.io/getting-started/configuration/) and then you can type emoji shorthand codes directly in content files; e.g.
-
-<p><span class="nowrap"><span class="emojify">🙈</span> <code>:see_no_evil:</code></span>  <span class="nowrap"><span class="emojify">🙉</span> <code>:hear_no_evil:</code></span>  <span class="nowrap"><span class="emojify">🙊</span> <code>:speak_no_evil:</code></span></p>
-<br>
-
-The [Emoji cheat sheet](http://www.emoji-cheat-sheet.com/) is a useful reference for emoji shorthand codes.
-
-***
-
-**N.B.** The above steps enable Unicode Standard emoji characters and sequences in Hugo, however the rendering of these glyphs depends on the browser and the platform. To style the emoji you can either use a third party emoji font or a font stack; e.g.
-
-{{< highlight html >}}
-.emoji {
-  font-family: Apple Color Emoji, Segoe UI Emoji, NotoColorEmoji, Segoe UI Symbol, Android Emoji, EmojiSymbols;
-}
-{{< /highlight >}}
-
-{{< css.inline >}}
-<style>
-.emojify {
-	font-family: Apple Color Emoji, Segoe UI Emoji, NotoColorEmoji, Segoe UI Symbol, Android Emoji, EmojiSymbols;
-	font-size: 2rem;
-	vertical-align: middle;
-}
-@media screen and (max-width:650px) {
-  .nowrap {
-    display: block;
-    margin: 25px 0;
-  }
-}
-</style>
-{{< /css.inline >}}
diff --git a/exampleSite/content/post/emoji-support/the-creative-exchange-d2zvqp3fpro-unsplash.jpg b/exampleSite/content/post/emoji-support/the-creative-exchange-d2zvqp3fpro-unsplash.jpg
deleted file mode 100644
index e34a59dba9f555f5d0fb25296c5aa76098cf5593..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 35369
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
DX>Mr7

diff --git a/exampleSite/content/post/markdown-syntax/index.md b/exampleSite/content/post/markdown-syntax/index.md
index 0254cca..752a655 100644
--- a/exampleSite/content/post/markdown-syntax/index.md
+++ b/exampleSite/content/post/markdown-syntax/index.md
@@ -42,12 +42,12 @@ Itatur? Quiatae cullecum rem ent aut odis in re eossequodi nonsequ idebis ne sap
 
 The blockquote element represents content that is quoted from another source, optionally with a citation which must be within a `footer` or `cite` element, and optionally with in-line changes such as annotations and abbreviations.
 
-#### Blockquote without attribution
+### Blockquote without attribution
 
 > Tiam, ad mint andaepu dandae nostion secatur sequo quae.
 > **Note** that you can use *Markdown syntax* within a blockquote.
 
-#### Blockquote with attribution
+### Blockquote with attribution
 
 > Don't communicate by sharing memory, share memory by communicating.<br>
 > — <cite>Rob Pike[^1]</cite>
@@ -63,7 +63,7 @@ Tables aren't part of the core Markdown spec, but Hugo supports supports them ou
     Bob | 27
   Alice | 23
 
-#### Inline Markdown within tables
+### Inline Markdown within tables
 
 | Italics   | Bold     | Code   |
 | --------  | -------- | ------ |
@@ -74,8 +74,7 @@ Tables aren't part of the core Markdown spec, but Hugo supports supports them ou
 | Lorem ipsum dolor sit amet, consectetur adipiscing elit. | Phasellus ultricies, sapien non euismod aliquam, dui ligula tincidunt odio, at accumsan nulla sapien eget ex. | Proin eleifend dictum ipsum, non euismod ipsum pulvinar et. Vivamus sollicitudin, quam in pulvinar aliquam, metus elit pretium purus | Proin sit amet velit nec enim imperdiet vehicula. | Ut bibendum vestibulum quam, eu egestas turpis gravida nec | Sed scelerisque nec turpis vel viverra. Vivamus vitae pretium sapien |
 
 ## Code Blocks
-
-#### Code block with backticks
+### Code block with backticks
 
 ```html
 <!doctype html>
@@ -90,7 +89,7 @@ Tables aren't part of the core Markdown spec, but Hugo supports supports them ou
 </html>
 ```
 
-#### Code block indented with four spaces
+### Code block indented with four spaces
 
     <!doctype html>
     <html lang="en">
@@ -103,21 +102,7 @@ Tables aren't part of the core Markdown spec, but Hugo supports supports them ou
     </body>
     </html>
 
-#### Code block with Hugo's internal highlight shortcode
-{{< highlight html >}}
-<!doctype html>
-<html lang="en">
-<head>
-  <meta charset="utf-8">
-  <title>Example HTML5 Document</title>
-</head>
-<body>
-  <p>Test</p>
-</body>
-</html>
-{{< /highlight >}}
-
-#### Diff code block
+### Diff code block
 
 ```diff
 [dependencies.bevy]
@@ -127,21 +112,27 @@ rev = "11f52b8c72fc3a568e8bb4a4cd1f3eb025ac2e13"
 + features = ["jpeg", "dynamic"]
 ```
 
+### One line code block
+
+```html
+<p>A paragraph</p>
+```
+
 ## List Types
 
-#### Ordered List
+### Ordered List
 
 1. First item
 2. Second item
 3. Third item
 
-#### Unordered List
+### Unordered List
 
 * List item
 * Another item
 * And another item
 
-#### Nested list
+### Nested list
 
 * Fruit
   * Apple
diff --git a/go.mod b/go.mod
index 63df635..e75e573 100644
--- a/go.mod
+++ b/go.mod
@@ -1,3 +1,3 @@
-module github.com/CaiJimmy/hugo-theme-stack/v3
+module github.com/CaiJimmy/hugo-theme-stack/v4
 
 go 1.17
diff --git a/i18n/ar.yaml b/i18n/ar.yaml
index 63101aa..61e0262 100644
--- a/i18n/ar.yaml
+++ b/i18n/ar.yaml
@@ -1,74 +1,45 @@
-toggleMenu:
-    other: اخفي القائمة
+toggleMenu: اخفي القائمة
 
-darkMode:
-    other: الوضع الداكن
+darkMode: الوضع الداكن
 
 list:
     page:
         one: "{{ .Count }} صفحه"
         other: "{{ .Count }} صفحات"
-
-    section:
-        other: قسم
-
+    section: قسم
     subsection:
         one: قسم فرعي
         other: اقسام فرعية
 
 article:
-    back:
-        other: خلف
-
-    tableOfContents:
-        other: جدول المحتويات
-
-    relatedContent:
-        other: محتوى مشابهه
-        
-    lastUpdatedOn:
-        other: التعديل الاخير
-
+    back: خلف
+    tableOfContents: جدول المحتويات
+    relatedContent: محتوى مشابهه
+    lastUpdatedOn: التعديل الاخير
     readingTime:
         one: "تُقرأ خلال دقيقة"
         other: "تُقرأ خلال {{ .Count }} دقائق"
 
 notFound:
-    title:
-        other: غير موجود
-
-    subtitle:
-        other: تعذر العثور على الصفحة المطلوبة.
+    title: غير موجود
+    subtitle: تعذر العثور على الصفحة المطلوبة.
 
 widget:
     archives:
-        title:
-            other: الارشيفات
-
-        more:
-            other: اكثر
+        title: الارشيفات
+        more: اكثر
 
     tagCloud:
-        title:
-            other: وسوم
-            
+        title: وسوم
+
     categoriesCloud:
-        title:
-            other: التصنيفات
+        title: التصنيفات
 
 search:
-    title:
-        other: بحث
-
-    placeholder:
-        other: اكتب...
-
-    resultTitle:
-        other: "#PAGES_COUNT نتيجة (#TIME_SECONDS ثواني)"
+    title: بحث
+    placeholder: اكتب...
+    resultTitle: "#PAGES_COUNT نتيجة (#TIME_SECONDS ثواني)"
 
 footer:
-    builtWith:
-        other: "مبني بستخدام {{ .Generator }}"
-        
-    designedBy:
-        other:  "قالب {{ .Theme }} مصمم من {{ .DesignedBy }}"
+    builtWith: "مبني بستخدام {{ .Generator }}"
+    designedBy: "قالب {{ .Theme }} مصمم من {{ .DesignedBy }}"
diff --git a/i18n/bn.yaml b/i18n/bn.yaml
index 36f25a3..0e3e511 100644
--- a/i18n/bn.yaml
+++ b/i18n/bn.yaml
@@ -1,73 +1,52 @@
-toggleMenu:
-    other: টগল মেনু
+toggleMenu: টগল মেনু
 
-darkMode:
-    other: ডার্ক মোড
+darkMode: ডার্ক মোড
 
 list:
     page:
         one: "{{ .Count }} পাতা"
         other: "{{ .Count }} পাতা"
 
-    section:
-        other: অনুচ্ছেদ
+    section: অনুচ্ছেদ
 
     subsection:
         one: উপ-অনুচ্ছেদ
         other: উপ-অনুচ্ছেদ
 
 article:
-    back:
-        other: পেছনে
+    back: পেছনে
 
-    tableOfContents:
-        other: সূচিপত্র
+    tableOfContents: সূচিপত্র
 
-    relatedContent:
-        other: সম্পর্কিত বিষয়বস্তু
+    relatedContent: সম্পর্কিত বিষয়বস্তু
 
-    lastUpdatedOn:
-        other: সর্বশেষ আপডেট করা হয়েছে
+    lastUpdatedOn: সর্বশেষ আপডেট করা হয়েছে
 
     readingTime:
         one: "{{ .Count }} মিনিটে পড়া যাবে"
         other: "{{ .Count }} মিনিটে পড়া যাবে"
 
 notFound:
-    title:
-        other: পাওয়া যায়নি
+    title: পাওয়া যায়নি
 
-    subtitle:
-        other: এই পাতাটি বিদ্যমান নেই
+    subtitle: এই পাতাটি বিদ্যমান নেই
 
 widget:
     archives:
-        title:
-            other: আর্কাইভ
-
-        more:
-            other: আরও
-
+        title: আর্কাইভ
+        more: আরও
     tagCloud:
-        title:
-            other: ট্যাগ
+        title: ট্যাগ
     categoriesCloud:
-        title:
-            other: বিভাগ
+        title: বিভাগ
 
 search:
-    title:
-        other: অনুসন্ধান
+    title: অনুসন্ধান
 
-    placeholder:
-        other: কিছু টাইপ করুন...
+    placeholder: কিছু টাইপ করুন...
 
-    resultTitle:
-        other: "#PAGES_COUNT পাতা (#TIME_SECONDS সেকেন্ড)"
+    resultTitle: "#PAGES_COUNT পাতা (#TIME_SECONDS সেকেন্ড)"
 
 footer:
-    builtWith:
-        other: "{{ .Generator }} দিয়ে নির্মিত"
-
-    designedBy:
-        other: "থিম {{ .Theme }} ডিজাইন করেছেন {{ .DesignedBy }}"
+    builtWith: "{{ .Generator }} দিয়ে নির্মিত"
+    designedBy: "থিম {{ .Theme }} ডিজাইন করেছেন {{ .DesignedBy }}"
diff --git a/i18n/ca.yaml b/i18n/ca.yaml
index af4167e..da2428b 100644
--- a/i18n/ca.yaml
+++ b/i18n/ca.yaml
@@ -1,73 +1,43 @@
-toggleMenu:
-    other: Toggle Menu
+toggleMenu: Toggle Menu
 
-darkMode:
-    other: Mode fosc
+darkMode: Mode fosc
 
 list:
     page:
         one: "{{ .Count }} pàgina"
         other: "{{ .Count }} pàgines"
-
-    section:
-        other: Secció
-
+    section: Secció
     subsection:
         one: Subsecció
         other: Subseccions
 
 article:
-    back:
-        other: Tornar
-
-    tableOfContents:
-        other: Taula de contingut
-
-    relatedContent:
-        other: Continguts relacionats
-
-    lastUpdatedOn:
-        other: Última vegada actualitzat
-
+    back: Tornar
+    tableOfContents: Taula de contingut
+    relatedContent: Continguts relacionats
+    lastUpdatedOn: Última vegada actualitzat
     readingTime:
         one: "{{ .Count }} minut a llegir"
         other: "{{ .Count }} minuts a llegir"
 
 notFound:
-    title:
-        other: No Trobat
-
-    subtitle:
-        other: Aquesta pàgina no existeix
+    title: No Trobat
+    subtitle: Aquesta pàgina no existeix
 
 widget:
     archives:
-        title:
-            other: Arxiu
-
-        more:
-            other: Més
-
+        title: Arxiu
+        more: Més
     tagCloud:
-        title:
-            other: Etiquetes
+        title: Etiquetes
     categoriesCloud:
-        title:
-            other: Categories
+        title: Categories
 
 search:
-    title:
-        other: Cerca
-
-    placeholder:
-        other: Tecleja alguna cosa...
-
-    resultTitle:
-        other: "#PAGES_COUNT pàgines en (#TIME_SECONDS segons)"
+    title: Cerca
+    placeholder: Tecleja alguna cosa...
+    resultTitle: "#PAGES_COUNT pàgines en (#TIME_SECONDS segons)"
 
 footer:
-    builtWith:
-        other: Creat amb {{ .Generator }}
-
-    designedBy:
-        other: Tema {{ .Theme }} dissenyat per {{ .DesignedBy }}
+    builtWith: Creat amb {{ .Generator }}
+    designedBy: Tema {{ .Theme }} dissenyat per {{ .DesignedBy }}
diff --git a/i18n/de.yaml b/i18n/de.yaml
index 7ab5b56..ff0e351 100644
--- a/i18n/de.yaml
+++ b/i18n/de.yaml
@@ -1,74 +1,43 @@
-toggleMenu:
-    other: Menü umschalten
+toggleMenu: Menü umschalten
 
-darkMode:
-    other: Dunkler Modus
+darkMode: Dunkler Modus
 
 list:
     page:
         one: "{{ .Count }} Seite"
         other: "{{ .Count }} Seiten"
-
-    section:
-        other: Abschnitt
-
+    section: Abschnitt
     subsection:
         one: Unterabschnitt
         other: Unterabschnitte
 
 article:
-    back:
-        other: Zurück
-
-    tableOfContents:
-        other: Inhaltsverzeichnis
-
-    relatedContent:
-        other: Verwandte Inhalte
-
-    lastUpdatedOn:
-        other: Zuletzt aktualisiert am
-
+    back: Zurück
+    tableOfContents: Inhaltsverzeichnis
+    relatedContent: Verwandte Inhalte
+    lastUpdatedOn: Zuletzt aktualisiert am
     readingTime:
         one: "{{ .Count }} Minute Lesezeit"
         other: "{{ .Count }} Minuten Lesezeit"
 
 notFound:
-    title:
-        other: Seite nicht gefunden
-
-    subtitle:
-        other: Diese Seite existiert nicht
+    title: Seite nicht gefunden
+    subtitle: Diese Seite existiert nicht
 
 widget:
     archives:
-        title:
-            other: Archiv
-
-        more:
-            other: Weitere
-
+        title: Archiv
+        more: Weitere
     tagCloud:
-        title:
-            other: Schlagwörter
-
+        title: Schlagwörter
     categoriesCloud:
-        title:
-            other: Kategorien
+        title: Kategorien
 
 search:
-    title:
-        other: Suche
-
-    placeholder:
-        other: Etwas tippen...
-
-    resultTitle:
-        other: "#PAGES_COUNT Seiten (#TIME_SECONDS Sekunden)"
+    title: Suche
+    placeholder: Etwas tippen...
+    resultTitle: "#PAGES_COUNT Seiten (#TIME_SECONDS Sekunden)"
 
 footer:
-    builtWith:
-        other: Erstellt mit {{ .Generator }}
-
-    designedBy:
-        other: Theme {{ .Theme }} gestaltet von {{ .DesignedBy }}
+    builtWith: Erstellt mit {{ .Generator }}
+    designedBy: Theme {{ .Theme }} gestaltet von {{ .DesignedBy }}
diff --git a/i18n/el.yaml b/i18n/el.yaml
index 27a147d..486914a 100644
--- a/i18n/el.yaml
+++ b/i18n/el.yaml
@@ -1,70 +1,41 @@
-toggleMenu:
-    other: Εναλλαγή Μενού
+toggleMenu: Εναλλαγή Μενού
 
-darkMode:
-    other: Σκοτεινό θέμα
+darkMode: Σκοτεινό θέμα
 
 list:
     page:
         one: "{{ .Count }} σελιδα"
         other: "{{ .Count }} σελιδες"
-
-    section:
-        other: Ενότητα
-
+    section: Ενότητα
     subsection:
         one: Υποενότητα
         other: Υποενότητες
 
 article:
-    back:
-        other: Πισω
-
-    tableOfContents:
-        other: Πινακας περιεχομενων
-
-    relatedContent:
-        other: Σχετικο περιεχομενο
-
-    lastUpdatedOn:
-        other: Τελευταια τροποποιηση στις
-
+    back: Πισω
+    tableOfContents: Πινακας περιεχομενων
+    relatedContent: Σχετικο περιεχομενο
+    lastUpdatedOn: Τελευταια τροποποιηση στις
     readingTime:
         one: "{{ .Count }} λεπτό ανάγνωσης"
-        ### Seems that there's no need to add 's' even if it's plural in English
         other: "{{ .Count }} λεπτά ανάγνωσης"
 
 notFound:
-    title:
-        other: Δε βρέθηκε
-    subtitle:
-        other: Η σελίδα δε βρέθηκε.
+    title: Δε βρέθηκε
+    subtitle: Η σελίδα δε βρέθηκε.
 
 widget:
     archives:
-        title:
-            other: Αρχειο
-
-        more:
-            other: Περισσότερα
-
+        title: Αρχειο
+        more: Περισσότερα
     tagCloud:
-        title:
-            other: Tags
+        title: Tags
 
 search:
-    title:
-        other: Αναζήτηση
-
-    placeholder:
-        other: Πληκτρολογήστε κάτι...
-
-    resultTitle:
-        other: "#PAGES_COUNT σελιδες (#TIME_SECONDS δευτερολεπτα)"
+    title: Αναζήτηση
+    placeholder: Πληκτρολογήστε κάτι...
+    resultTitle: "#PAGES_COUNT σελιδες (#TIME_SECONDS δευτερολεπτα)"
 
 footer:
-    builtWith:
-        other: Δημιουργήθηκε με τη χρήση {{ .Generator }}
-
-    designedBy:
-        other: Το θέμα {{ .Theme }} σχεδιάστηκε από το {{ .DesignedBy }}
+    builtWith: Δημιουργήθηκε με τη χρήση {{ .Generator }}
+    designedBy: Το θέμα {{ .Theme }} σχεδιάστηκε από το {{ .DesignedBy }}
diff --git a/i18n/en.yaml b/i18n/en.yaml
index fb07328..3f94ab1 100644
--- a/i18n/en.yaml
+++ b/i18n/en.yaml
@@ -1,73 +1,46 @@
-toggleMenu:
-    other: Toggle Menu
+toggleMenu: Toggle Menu
 
-darkMode:
-    other: Dark Mode
+darkMode: Dark Mode
 
 list:
     page:
         one: "{{ .Count }} page"
         other: "{{ .Count }} pages"
-
-    section:
-        other: Section
-
+    section: Section
     subsection:
         one: Subsection
         other: Subsections
 
 article:
-    back:
-        other: Back
-
-    tableOfContents:
-        other: Table of contents
-
-    relatedContent:
-        other: Related content
-
-    lastUpdatedOn:
-        other: Last updated on
-
+    back: Back
+    tableOfContents: Table of contents
+    relatedContent: Related content
+    lastUpdatedOn: Last updated on
     readingTime:
         one: "{{ .Count }} minute read"
         other: "{{ .Count }} minute read"
+    codeblock:
+        copy: Copy
+        copied: Copied!
 
 notFound:
-    title:
-        other: Not Found
-
-    subtitle:
-        other: This page does not exist
+    title: Not Found
+    subtitle: This page does not exist
 
 widget:
     archives:
-        title:
-            other: Archives
-
-        more:
-            other: More
-
+        title: Archives
+        more: More
     tagCloud:
-        title:
-            other: Tags
+        title: Tags
     categoriesCloud:
-        title:
-            other: Categories
+        title: Categories
 
 search:
-    title:
-        other: Search
-
-    placeholder:
-        other: Type something...
-
-    resultTitle:
-        other: "#PAGES_COUNT pages (#TIME_SECONDS seconds)"
+    title: Search
+    placeholder: Type something...
+    resultTitle: "#PAGES_COUNT pages (#TIME_SECONDS seconds)"
 
 footer:
-    builtWith:
-        other: Built with {{ .Generator }}
-
-    designedBy:
-        other: Theme {{ .Theme }} designed by {{ .DesignedBy }}
+    builtWith: Built with {{ .Generator }}
+    designedBy: Theme {{ .Theme }} designed by {{ .DesignedBy }}
diff --git a/i18n/es.yaml b/i18n/es.yaml
index 76995da..5614e98 100644
--- a/i18n/es.yaml
+++ b/i18n/es.yaml
@@ -1,73 +1,43 @@
-toggleMenu:
-    other: Toggle Menu
+toggleMenu: Toggle Menu
 
-darkMode:
-    other: Modo oscuro
+darkMode: Modo oscuro
 
 list:
     page:
         one: "{{ .Count }} página"
         other: "{{ .Count }} páginas"
-
-    section:
-        other: Sección
-
+    section: Sección
     subsection:
         one: Subsección
         other: Subsecciones
 
 article:
-    back:
-        other: Volver
-
-    tableOfContents:
-        other: Tabla de contenido
-
-    relatedContent:
-        other: Contenidos relacionados
-
-    lastUpdatedOn:
-        other: Última vez actualizado
-
+    back: Volver
+    tableOfContents: Tabla de contenido
+    relatedContent: Contenidos relacionados
+    lastUpdatedOn: Última vez actualizado
     readingTime:
         one: "{{ .Count }} minuto a leer"
         other: "{{ .Count }} minutos a leer"
 
 notFound:
-    title:
-        other: No Encontrado
-
-    subtitle:
-        other: Esta página no existe
+    title: No Encontrado
+    subtitle: Esta página no existe
 
 widget:
     archives:
-        title:
-            other: Archivo
-
-        more:
-            other: Más
-
+        title: Archivo
+        more: Más
     tagCloud:
-        title:
-            other: Etiquetas
+        title: Etiquetas
     categoriesCloud:
-        title:
-            other: Categorías
+        title: Categorías
 
 search:
-    title:
-        other: Búsqueda
-
-    placeholder:
-        other: Teclea algo...
-
-    resultTitle:
-        other: "#PAGES_COUNT páginas en (#TIME_SECONDS segundos)"
+    title: Búsqueda
+    placeholder: Teclea algo...
+    resultTitle: "#PAGES_COUNT páginas en (#TIME_SECONDS segundos)"
 
 footer:
-    builtWith:
-        other: Creado con {{ .Generator }}
-
-    designedBy:
-        other: Tema {{ .Theme }} diseñado por {{ .DesignedBy }}
+    builtWith: Creado con {{ .Generator }}
+    designedBy: Tema {{ .Theme }} diseñado por {{ .DesignedBy }}
diff --git a/i18n/fa.yaml b/i18n/fa.yaml
index 3655757..9de30b5 100644
--- a/i18n/fa.yaml
+++ b/i18n/fa.yaml
@@ -1,73 +1,43 @@
-toggleMenu:
-    other: منو
+toggleMenu: منو
 
-darkMode:
-    other: حالت شب
+darkMode: حالت شب
 
 list:
     page:
         one: "{{ .Count }} صفحه"
         other: "{{ .Count }} صفحه"
-
-    section:
-        other: بخش
-
+    section: بخش
     subsection:
         one: زیربخش
         other: زیربخش
 
 article:
-    back:
-        other: قبلی
-
-    tableOfContents:
-        other: فهرست
-
-    relatedContent:
-        other: مطالب مرتبط
-
-    lastUpdatedOn:
-        other: آخرین بروزرسانی در
-
+    back: قبلی
+    tableOfContents: فهرست
+    relatedContent: مطالب مرتبط
+    lastUpdatedOn: آخرین بروزرسانی در
     readingTime:
         one: "مطالعه در {{ .Count }} دقیقه"
         other: "مطالعه در {{ .Count }} دقیقه"
 
 notFound:
-    title:
-        other: یافت نشد
-
-    subtitle:
-        other: این صحه وجود ندارد
+    title: یافت نشد
+    subtitle: این صحه وجود ندارد
 
 widget:
     archives:
-        title:
-            other: آرشیو
-
-        more:
-            other: بیشتر
-
+        title: آرشیو
+        more: بیشتر
     tagCloud:
-        title:
-            other: تگ ها
+        title: تگ ها
     categoriesCloud:
-        title:
-            other: دسته بندی
+        title: دسته بندی
 
 search:
-    title:
-        other: جستجو
-
-    placeholder:
-        other: تایپ کنید ...
-
-    resultTitle:
-        other: "#PAGES_COUNT صفحه (#TIME_SECONDS ثانیه)"
+    title: جستجو
+    placeholder: تایپ کنید ...
+    resultTitle: "#PAGES_COUNT صفحه (#TIME_SECONDS ثانیه)"
 
 footer:
-    builtWith:
-        other: قدرت گرفته از {{ .Generator }}
-
-    designedBy:
-        other: قالب {{ .Theme }} ساخته شده توسط {{ .DesignedBy }}
+    builtWith: قدرت گرفته از {{ .Generator }}
+    designedBy: قالب {{ .Theme }} ساخته شده توسط {{ .DesignedBy }}
diff --git a/i18n/fr.yaml b/i18n/fr.yaml
index c3feb1d..f18805c 100644
--- a/i18n/fr.yaml
+++ b/i18n/fr.yaml
@@ -1,69 +1,41 @@
-toggleMenu:
-    other: Afficher le menu
+toggleMenu: Afficher le menu
 
-darkMode:
-    other: Mode sombre
+darkMode: Mode sombre
 
 list:
     page:
         one: "{{ .Count }} page"
         other: "{{ .Count }} pages"
-
-    section:
-        other: Section
-
+    section: Section
     subsection:
         one: Sous-section
         other: Sous-sections
 
 article:
-    back:
-        other: Retour
-
-    tableOfContents:
-        other: Table des matières
-
-    relatedContent:
-        other: Contenus liés
-
-    lastUpdatedOn:
-        other: Dernière mise à jour le
-
+    back: Retour
+    tableOfContents: Table des matières
+    relatedContent: Contenus liés
+    lastUpdatedOn: Dernière mise à jour le
     readingTime:
         one: "{{ .Count }} minute de lecture"
         other: "{{ .Count }} minutes de lecture"
 
 notFound:
-    title:
-        other: Page non trouvée
-    subtitle:
-        other: Cette page n'existe pas.
+    title: Page non trouvée
+    subtitle: Cette page n'existe pas.
 
 widget:
     archives:
-        title:
-            other: Archives
-
-        more:
-            other: Autres
-
+        title: Archives
+        more: Autres
     tagCloud:
-        title:
-            other: Mots clés
+        title: Mots clés
 
 search:
-    title:
-        other: Rechercher
-
-    placeholder:
-        other: Cherchez un article, une publication, etc.
-
-    resultTitle:
-        other: "#PAGES_COUNT pages (#TIME_SECONDS secondes)"
+    title: Rechercher
+    placeholder: Cherchez un article, une publication, etc.
+    resultTitle: "#PAGES_COUNT pages (#TIME_SECONDS secondes)"
 
 footer:
-    builtWith:
-        other: Généré avec {{ .Generator }}
-
-    designedBy:
-        other: Thème {{ .Theme }} conçu par {{ .DesignedBy }}
+    builtWith: Généré avec {{ .Generator }}
+    designedBy: Thème {{ .Theme }} conçu par {{ .DesignedBy }}
diff --git a/i18n/hu.yaml b/i18n/hu.yaml
index 5e5af92..0e8c6e5 100644
--- a/i18n/hu.yaml
+++ b/i18n/hu.yaml
@@ -1,73 +1,43 @@
-toggleMenu:
-    other: Menü Kapcsolása
+toggleMenu: Menü Kapcsolása
 
-darkMode:
-    other: Sötét Mód
+darkMode: Sötét Mód
 
 list:
     page:
         one: "{{ .Count }} oldal"
         other: "{{ .Count }} oldalak"
-
-    section:
-        other: Szekció
-
+    section: Szekció
     subsection:
         one: Alszekció
         other: Alszekciók
 
 article:
-    back:
-        other: Vissza
-
-    tableOfContents:
-        other: Tartalomjegyzék
-
-    relatedContent:
-        other: Kapcsolódó tartalom
-
-    lastUpdatedOn:
-        other: Utolsó frissítés időpontja
-
+    back: Vissza
+    tableOfContents: Tartalomjegyzék
+    relatedContent: Kapcsolódó tartalom
+    lastUpdatedOn: Utolsó frissítés időpontja
     readingTime:
         one: "{{ .Count }} percnyi olvasmány"
         other: "{{ .Count }} percnyi olvasmány"
 
 notFound:
-    title:
-        other: Nem található
-
-    subtitle:
-        other: Ez az oldal nem létezik
+    title: Nem található
+    subtitle: Ez az oldal nem létezik
 
 widget:
     archives:
-        title:
-            other: Archívum
-
-        more:
-            other: Több
-
+        title: Archívum
+        more: Több
     tagCloud:
-        title:
-            other: Cimkék
+        title: Cimkék
     categoriesCloud:
-        title:
-            other: Kategóriák
+        title: Kategóriák
 
 search:
-    title:
-        other: Keresés
-
-    placeholder:
-        other: Írj valamit...
-
-    resultTitle:
-        other: "#PAGES_COUNT oldal (#TIME_SECONDS másodperc alatt)"
+    title: Keresés
+    placeholder: Írj valamit...
+    resultTitle: "#PAGES_COUNT oldal (#TIME_SECONDS másodperc alatt)"
 
 footer:
-    builtWith:
-        other: "{{ .Generator }} használatával készült"
-
-    designedBy:
-        other: A {{ .Theme }} dizájnt {{ .DesignedBy }} tervezte
+    builtWith: "{{ .Generator }} használatával készült"
+    designedBy: A {{ .Theme }} dizájnt {{ .DesignedBy }} tervezte
diff --git a/i18n/id.yaml b/i18n/id.yaml
index 8104351..42e9461 100644
--- a/i18n/id.yaml
+++ b/i18n/id.yaml
@@ -1,73 +1,43 @@
-toggleMenu:
-    other: Tampilkan Menu
+toggleMenu: Tampilkan Menu
 
-darkMode:
-    other: Mode Gelap
+darkMode: Mode Gelap
 
 list:
     page:
         one: "{{ .Count }} halaman"
         other: "{{ .Count }} halaman"
-
-    section:
-        other: Bagian
-
+    section: Bagian
     subsection:
         one: Subbagian
         other: Subbagian
 
 article:
-    back:
-        other: Kembali
-
-    tableOfContents:
-        other: Daftar Isi
-
-    relatedContent:
-        other: Konten terkait
-
-    lastUpdatedOn:
-        other: Terakhir diperbarui pada
-
+    back: Kembali
+    tableOfContents: Daftar Isi
+    relatedContent: Konten terkait
+    lastUpdatedOn: Terakhir diperbarui pada
     readingTime:
         one: "Waktu Membaca: {{ .Count }} menit"
         other: "Waktu Membaca: {{ .Count }} menit"
 
 notFound:
-    title:
-        other: Tidak ditemukan
-    subtitle:
-        other: Halaman yang Anda akses tidak ditemukan.
+    title: Tidak ditemukan
+    subtitle: Halaman yang Anda akses tidak ditemukan.
 
 widget:
     archives:
-        title:
-            other: Arsip
-
-        more:
-            other: Lebih
-
+        title: Arsip
+        more: Lebih
     tagCloud:
-        title:
-            other: Tag
-
+        title: Tag
     categoriesCloud:
-        title:
-            other: Kategori
+        title: Kategori
 
 search:
-    title:
-        other: Cari
-
-    placeholder:
-        other: Ketik sesuatu...
-
-    resultTitle:
-        other: "#PAGES_COUNT halaman (#TIME_SECONDS detik)"
+    title: Cari
+    placeholder: Ketik sesuatu...
+    resultTitle: "#PAGES_COUNT halaman (#TIME_SECONDS detik)"
 
 footer:
-    builtWith:
-        other: Dibangun dengan {{ .Generator }}
-
-    designedBy:
-        other: Tema {{ .Theme }} dirancang oleh {{ .DesignedBy }}
+    builtWith: Dibangun dengan {{ .Generator }}
+    designedBy: Tema {{ .Theme }} dirancang oleh {{ .DesignedBy }}
diff --git a/i18n/it.yaml b/i18n/it.yaml
index 0cbeeab..81f3fb4 100644
--- a/i18n/it.yaml
+++ b/i18n/it.yaml
@@ -1,73 +1,43 @@
-toggleMenu:
-    other: Toggle Menu
+toggleMenu: Toggle Menu
 
-darkMode:
-    other: Dark Mode
+darkMode: Dark Mode
 
 list:
     page:
         one: "{{ .Count }} pagina"
         other: "{{ .Count }} pagine"
-
-    section:
-        other: Sezione
-
+    section: Sezione
     subsection:
         one: Sottosezione
         other: Sottosezioni
 
 article:
-    back:
-        other: Indietro
-
-    tableOfContents:
-        other: Indice
-
-    relatedContent:
-        other: Contenuti correlati
-
-    lastUpdatedOn:
-        other: Aggiornato il
-
+    back: Indietro
+    tableOfContents: Indice
+    relatedContent: Contenuti correlati
+    lastUpdatedOn: Aggiornato il
     readingTime:
         one: "{{ .Count }} min per leggere"
         other: "{{ .Count }} min per leggere"
 
 notFound:
-    title:
-        other: Non trovato
-    subtitle:
-        other: Questa pagina non esiste.
+    title: Non trovato
+    subtitle: Questa pagina non esiste.
 
 widget:
     archives:
-        title:
-            other: Archivi
-
-        more:
-            other: Di più
-
+        title: Archivi
+        more: Di più
     tagCloud:
-        title:
-            other: Tags
-
+        title: Tags
     categoriesCloud:
-        title:
-            other: Categorie
+        title: Categorie
 
 search:
-    title:
-        other: Cerca
-
-    placeholder:
-        other: Scrivi qualcosa...
-
-    resultTitle:
-        other: "#PAGES_COUNT pagine (#TIME_SECONDS secondi)"
+    title: Cerca
+    placeholder: Scrivi qualcosa...
+    resultTitle: "#PAGES_COUNT pagine (#TIME_SECONDS secondi)"
 
 footer:
-    builtWith:
-        other: Realizzato con {{ .Generator }}
-
-    designedBy:
-        other: Tema {{ .Theme }} realizzato da {{ .DesignedBy }}
+    builtWith: Realizzato con {{ .Generator }}
+    designedBy: Tema {{ .Theme }} realizzato da {{ .DesignedBy }}
diff --git a/i18n/ja.yaml b/i18n/ja.yaml
index 40380fd..4a1c85f 100644
--- a/i18n/ja.yaml
+++ b/i18n/ja.yaml
@@ -1,60 +1,32 @@
-toggleMenu:
-    other: メニューを開く・閉じる
+toggleMenu: メニューを開く・閉じる
 
-darkMode:
-    other: ダークモード
+darkMode: ダークモード
 
 article:
-    back:
-        other: 前のページ
-
-    tableOfContents:
-        other: 目次
-
-    relatedContent:
-        other: 関連するコンテンツ
-
-    lastUpdatedOn:
-        other: 最終更新
-
-    readingTime:
-        other: "読了時間: {{ .Count }}分"
+    back: 前のページ
+    tableOfContents: 目次
+    relatedContent: 関連するコンテンツ
+    lastUpdatedOn: 最終更新
+    readingTime: "読了時間: {{ .Count }}分"
 
 notFound:
-    title:
-        other: 404 Not Found
-    subtitle:
-        other: 指定されたページは存在しません。
+    title: 404 Not Found
+    subtitle: 指定されたページは存在しません。
 
 widget:
     archives:
-        title:
-            other: アーカイブ
-
-        more:
-            other: さらに見る
-
+        title: アーカイブ
+        more: さらに見る
     tagCloud:
-        title:
-            other: タグ
-
+        title: タグ
     categoriesCloud:
-        title:
-            other: カテゴリ
+        title: カテゴリ
 
 search:
-    title:
-        other: 検索
-
-    placeholder:
-        other: 入力...
-
-    resultTitle:
-        other: "#PAGES_COUNT 件 (#TIME_SECONDS 秒)"
+    title: 検索
+    placeholder: 入力...
+    resultTitle: "#PAGES_COUNT 件 (#TIME_SECONDS 秒)"
 
 footer:
-    builtWith:
-        other: Built with {{ .Generator }}
-
-    designedBy:
-        other: テーマ {{ .Theme }} は {{ .DesignedBy }} によって設計されています。
+    builtWith: Built with {{ .Generator }}
+    designedBy: テーマ {{ .Theme }} は {{ .DesignedBy }} によって設計されています。
diff --git a/i18n/ko.yaml b/i18n/ko.yaml
index 11cdc4a..05c0530 100644
--- a/i18n/ko.yaml
+++ b/i18n/ko.yaml
@@ -1,72 +1,45 @@
-toggleMenu:
-    other: 메뉴 여닫기
+toggleMenu: 메뉴 여닫기
 
-darkMode:
-    other: 다크 모드
+darkMode: 다크 모드
 
 list:
     page:
         one: "{{ .Count }} 페이지"
         other: "{{ .Count }} 페이지"
-
-    section:
-        other: 섹션
-
+    section: 섹션
     subsection:
         one: 서브섹션
         other: 서브섹션
 
 article:
-    back:
-        other: 뒤로가기
-
-    tableOfContents:
-        other: 목차
-        
-    relatedContent:
-        other: 관련 글
-        
-    lastUpdatedOn:
-        other: "마지막 수정: "
-        
+    back: 뒤로가기
+    tableOfContents: 목차
+    relatedContent: 관련 글
+    lastUpdatedOn: "마지막 수정: "
     readingTime:
         one: "{{ .Count }} 분 정도"
         other: "{{ .Count }} 분 정도"
 
 notFound:
-    title:
-        other: 찾을 수 없음
-        
-    subtitle:
-        other: 페이지를 찾을 수 없습니다.
+    title: 찾을 수 없음
+    subtitle: 페이지를 찾을 수 없습니다.
 
 widget:
     archives:
-        title:
-            other: 보관함
-        more:
-            other: 더보기
+        title: 보관함
+        more: 더보기
             
     categoriesCloud:
-        title:
-            other: 카테고리
+        title: 카테고리
             
     tagCloud:
-        title:
-            other: 태그
+        title: 태그
 
 search:
-    title:
-        other: 검색
-        
-    placeholder:
-        other: 검색어를 입력하세요...
-        
-    resultTitle:
-        other: "#PAGES_COUNT 페이지 (#TIME_SECONDS 초)"
+    title: 검색
+    placeholder: 검색어를 입력하세요...
+    resultTitle: "#PAGES_COUNT 페이지 (#TIME_SECONDS 초)"
 
 footer:
-    builtWith:
-        other: "{{ .Generator }}로 만듦"
-    designedBy:
-        other: "{{ .DesignedBy }}의 {{ .Theme }} 테마 사용 중"
+    builtWith: "{{ .Generator }}로 만듦"
+    designedBy: "{{ .DesignedBy }}의 {{ .Theme }} 테마 사용 중"
diff --git a/i18n/nl.yaml b/i18n/nl.yaml
index a814232..620d915 100644
--- a/i18n/nl.yaml
+++ b/i18n/nl.yaml
@@ -1,57 +1,38 @@
-toggleMenu:
-    other: Open Menu
+toggleMenu: Open Menu
 
-darkMode:
-    other: Donkere modus
+darkMode: Donkere modus
 
 list:
     page:
         one: "{{ .Count }} pagina"
         other: "{{ .Count }} pagina's"
-
-    section:
-        other: Sectie
-
+    section: Sectie
     subsection:
         one: Subsectie
         other: Subsecties
 
 article:
-    relatedContent:
-        other: Gerelateerde inhoud
-    lastUpdatedOn:
-        other: Laatst bijgewerkt op
+    relatedContent: Gerelateerde inhoud
+    lastUpdatedOn: Laatst bijgewerkt op
 
 notFound:
-    title:
-        other: Niet gevonden
-    subtitle:
-        other: Deze pagina bestaat niet.
+    title: Niet gevonden
+    subtitle: Deze pagina bestaat niet.
 
 widget:
     archives:
-        title:
-            other: Archief
-        more:
-            other: Meer
+        title: Archief
+        more: Meer
     tagCloud:
-        title:
-            other: Tags
-
+        title: Tags
     categoriesCloud:
-        title:
-            other: Categorie
+        title: Categorie
 
 search:
-    title:
-        other: Zoeken
-    placeholder:
-        other: Typ iets
-    resultTitle:
-        other: "#PAGES_COUNT pagina's (#TIME_SECONDS seconden)"
+    title: Zoeken
+    placeholder: Typ iets
+    resultTitle: "#PAGES_COUNT pagina's (#TIME_SECONDS seconden)"
 
 footer:
-    builtWith:
-        other: Gemaakt met {{ .Generator }}
-    designedBy:
-        other: Theme {{ .Theme }} ontworpen door {{ .DesignedBy }}
+    builtWith: Gemaakt met {{ .Generator }}
+    designedBy: Theme {{ .Theme }} ontworpen door {{ .DesignedBy }}
diff --git a/i18n/pl.yaml b/i18n/pl.yaml
index e44a140..767eb64 100644
--- a/i18n/pl.yaml
+++ b/i18n/pl.yaml
@@ -1,73 +1,43 @@
-toggleMenu:
-    other: Przełącz Menu
+toggleMenu: Przełącz Menu
 
-darkMode:
-    other: Tryb ciemny
+darkMode: Tryb ciemny
 
 list:
     page:
         one: "{{ .Count }} strona"
         other: "{{ .Count }} stron"
-
-    section:
-        other: Sekcja
-
+    section: Sekcja
     subsection:
         one: Podsekcja
         other: Podsekcje
 
 article:
-    back:
-        other: Wróć
-
-    tableOfContents:
-        other: Spis treści
-
-    relatedContent:
-        other: Powiązane artykuły
-
-    lastUpdatedOn:
-        other: Ostatnio zaktualizowany
-    
+    back: Wróć
+    tableOfContents: Spis treści
+    relatedContent: Powiązane artykuły
+    lastUpdatedOn: Ostatnio zaktualizowany
     readingTime:
         one: "Przeczytasz w {{ .Count }} minutę"
         other: "Przeczytasz w {{ .Count }} minut"
 
 notFound:
-    title:
-        other: Nie znaleziono
-    subtitle:
-        other: Ta strona nie istnieje
+    title: Nie znaleziono
+    subtitle: Ta strona nie istnieje
 
 widget:
     archives:
-        title:
-            other: Archiwum
-
-        more:
-            other: Więcej
-
+        title: Archiwum
+        more: Więcej
     tagCloud:
-        title:
-            other: Tagi
-    
+        title: Tagi
     categoriesCloud:
-        title:
-            other: Kategorie
+        title: Kategorie
 
 search:
-    title:
-        other: Szukaj
-
-    placeholder:
-        other: Wpisz coś...
-
-    resultTitle:
-        other: "#PAGES_COUNT stron (#TIME_SECONDS sekund)"
+    title: Szukaj
+    placeholder: Wpisz coś...
+    resultTitle: "#PAGES_COUNT stron (#TIME_SECONDS sekund)"
 
 footer:
-    builtWith:
-        other: Zbudowano z {{ .Generator }}
-
-    designedBy:
-        other: Motyw {{ .Theme }} zaprojektowany przez {{ .DesignedBy }}
+    builtWith: Zbudowano z {{ .Generator }}
+    designedBy: Motyw {{ .Theme }} zaprojektowany przez {{ .DesignedBy }}
diff --git a/i18n/pt-br.yaml b/i18n/pt-br.yaml
index 2784f3d..b1235cb 100644
--- a/i18n/pt-br.yaml
+++ b/i18n/pt-br.yaml
@@ -1,67 +1,45 @@
-toggleMenu:
-    other: Alternar Menu
+toggleMenu: Alternar Menu
 
-darkMode:
-    other: Modo Escuro
+darkMode: Modo Escuro
 
 list:
     page:
         one: "{{ .Count }} página"
         other: "{{ .Count }} páginas"
-
-    section:
-        other: Seção
-
+    section: Seção
     subsection:
         one: Subseção
         other: Subseções
 
 article:
-    back:
-        other: Voltar
-
-    tableOfContents:
-        other: Índice
-
-    relatedContent:
-        other: Conteúdo relacionado
-
-    lastUpdatedOn:
-        other: Última atualização em
-
+    back: Voltar
+    tableOfContents: Índice
+    relatedContent: Conteúdo relacionado
+    lastUpdatedOn: Última atualização em
     readingTime:
         one: "{{ .Count }} minuto de leitura"
         other: "{{ .Count }} minutos de leitura"
 
 notFound:
-    title:
-        other: Não Encontrado
-    subtitle:
-        other: Esta página não existe.
+    title: Não Encontrado
+    subtitle: Esta página não existe.
 
 widget:
     archives:
-        title:
-            other: Arquivos
-        more:
-            other: Mais
+        title: Arquivos
+        more: Mais
+
     tagCloud:
-        title:
-            other: Tags
+        title: Tags
+
     categoriesCloud:
-        title:
-            other: Categorias
+        title: Categorias
 
 search:
-    title:
-        other: Busca
-    placeholder:
-        other: Digite algo...
-    resultTitle:
-        other: "#PAGES_COUNT páginas (#TIME_SECONDS segundos)"
+    title: Busca
+    placeholder: Digite algo...
+    resultTitle: "#PAGES_COUNT páginas (#TIME_SECONDS segundos)"
 
 footer:
-    builtWith:
-        other: Criado com {{ .Generator }}
-    designedBy:
-        other: Tema {{ .Theme }} desenvolvido por {{ .DesignedBy }}
+    builtWith: Criado com {{ .Generator }}
+    designedBy: Tema {{ .Theme }} desenvolvido por {{ .DesignedBy }}
diff --git a/i18n/ru.yaml b/i18n/ru.yaml
index b1f1e51..d04e8a3 100644
--- a/i18n/ru.yaml
+++ b/i18n/ru.yaml
@@ -1,8 +1,6 @@
-toggleMenu:
-    other: Показать/скрыть меню
+toggleMenu: Показать/скрыть меню
 
-darkMode:
-    other: Тёмный режим
+darkMode: Тёмный режим
 
 list:
     page:
@@ -10,10 +8,7 @@ list:
         few: "{{ .Count }} страницы"
         many: "{{ .Count }} страниц"
         other: "{{ .Count }} страниц"
-
-    section:
-        other: Раздел
-
+    section: Раздел
     subsection:
         one: Подраздел
         few: Подразделы
@@ -21,43 +16,28 @@ list:
         other: Подразделы
 
 article:
-    back:
-        other: Назад
-    relatedContent:
-        other: Также рекомендуем
-    lastUpdatedOn:
-        other: Обновлено
-    tableOfContents: 
-        other: Содержание
-    readingTime: 
-        other: "Время чтения: {{ .Count }} мин."
+    back: Назад
+    relatedContent: Также рекомендуем
+    lastUpdatedOn: Обновлено
+    tableOfContents: Содержание
+    readingTime: "Время чтения: {{ .Count }} мин."
 
 notFound:
-    title:
-        other: Не найдено
-    subtitle:
-        other: Запрашиваемая страница не существует
+    title: Не найдено
+    subtitle: Запрашиваемая страница не существует
 
 widget:
     archives:
-        title:
-            other: Архивы
-        more:
-            other: Ещё
+        title: Архивы
+        more: Ещё
     tagCloud:
-        title:
-            other: Теги
+        title: Теги
 
 search:
-    title:
-        other: Поиск
-    placeholder:
-        other: Введите что-нибудь...
-    resultTitle:
-        other: "Найдено #PAGES_COUNT страниц (за #TIME_SECONDS с.)"
+    title: Поиск
+    placeholder: Введите что-нибудь...
+    resultTitle: "Найдено #PAGES_COUNT страниц (за #TIME_SECONDS с.)"
 
 footer:
-    builtWith:
-        other: Создано при помощи {{ .Generator }}
-    designedBy:
-        other: Тема {{ .Theme }}, дизайн {{ .DesignedBy }}
+    builtWith: Создано при помощи {{ .Generator }}
+    designedBy: Тема {{ .Theme }}, дизайн {{ .DesignedBy }}
diff --git a/i18n/th.yaml b/i18n/th.yaml
index 9982c06..81e54d3 100644
--- a/i18n/th.yaml
+++ b/i18n/th.yaml
@@ -1,70 +1,41 @@
-toggleMenu:
-    other: สลับเมนู
+toggleMenu: สลับเมนู
 
-darkMode:
-    other: ธีมมืด
+darkMode: ธีมมืด
 
 list:
     page:
         one: "{{ .Count }} หน้า"
         other: "{{ .Count }} หน้า"
-
-    section:
-        other: หมวดหมู่
-
+    section: หมวดหมู่
     subsection:
         one: หมวดหมู่ย่อย
         other: หมวดหมู่ย่อยอื่นๆ
 
 article:
-    back:
-        other: กลับไป
-
-    tableOfContents:
-        other: สารบัญ
-
-    relatedContent:
-        other: เนื้อหาคล้ายคลึงกัน
-
-    lastUpdatedOn:
-        other: อัปเดตล่าสุดเมื่อ
-
+    back: กลับไป
+    tableOfContents: สารบัญ
+    relatedContent: เนื้อหาคล้ายคลึงกัน
+    lastUpdatedOn: อัปเดตล่าสุดเมื่อ
     readingTime:
         one: "น่าจะใช้เวลา {{ .Count }} นาทีในการอ่าน"
         other: "น่าจะใช้เวลา {{ .Count }} นาทีในการอ่าน"
 
 notFound:
-    title:
-        other: ไม่พบหัวข้อ
-
-    subtitle:
-        other: ไม่พบหน้านี้ในระบบ
+    title: ไม่พบหัวข้อ
+    subtitle: ไม่พบหน้านี้ในระบบ
 
 widget:
     archives:
-        title:
-            other: เนื้อหาที่เก็บถาวรแล้ว
-
-        more:
-            other: อื่นๆ นอกจากนี้
-
+        title: เนื้อหาที่เก็บถาวรแล้ว
+        more: อื่นๆ นอกจากนี้
     tagCloud:
-        title:
-            other: แท็ก
+        title: แท็ก
 
 search:
-    title:
-        other: ค้นหา
-
-    placeholder:
-        other: พิมพ์เพื่อค้นหา ...
-
-    resultTitle:
-        other: "#PAGES_COUNT pages (#TIME_SECONDS seconds)"
+    title: ค้นหา
+    placeholder: พิมพ์เพื่อค้นหา ...
+    resultTitle: "#PAGES_COUNT pages (#TIME_SECONDS seconds)"
 
 footer:
-    builtWith:
-        other: ถูกสร้างด้วย {{ .Generator }}
-
-    designedBy:
-        other: ธีม {{ .Theme }} ออกแบบโดย {{ .DesignedBy }}
+    builtWith: ถูกสร้างด้วย {{ .Generator }}
+    designedBy: ธีม {{ .Theme }} ออกแบบโดย {{ .DesignedBy }}
diff --git a/i18n/tr.yaml b/i18n/tr.yaml
index 2dbb9d5..0df564a 100644
--- a/i18n/tr.yaml
+++ b/i18n/tr.yaml
@@ -1,53 +1,36 @@
-toggleMenu:
-    other: Menüyü Gizle
+toggleMenu: Menüyü Gizle
 
-darkMode:
-    other: Koyu Mod
+darkMode: Koyu Mod
 
 list:
     page:
         one: "{{ .Count }} makale"
         other: "{{ .Count }} makale"
-
-    section:
-        other: Bölüm
-
+    section: Bölüm
     subsection:
         one: Alt bölüm
         other: Alt bölümler
 
 article:
-    relatedContent:
-        other: Alakalı içerikler
-    lastUpdatedOn:
-        other: Son güncelleme
+    relatedContent: Alakalı içerikler
+    lastUpdatedOn: Son güncelleme
 
 notFound:
-    title:
-        other: Bulunamadı
-    subtitle:
-        other: Aradığınız sayfa mevcut değil.
+    title: Bulunamadı
+    subtitle: Aradığınız sayfa mevcut değil.
 
 widget:
     archives:
-        title:
-            other: Arşiv
-        more:
-            other: Daha fazla
+        title: Arşiv
+        more: Daha fazla
     tagCloud:
-        title:
-            other: Etiketler
+        title: Etiketler
 
 search:
-    title:
-        other: Arama
-    placeholder:
-        other: Birşeyler yazın...
-    resultTitle:
-        other: "#PAGES_COUNT sayfa (#TIME_SECONDS saniye)"
+    title: Arama
+    placeholder: Birşeyler yazın...
+    resultTitle: "#PAGES_COUNT sayfa (#TIME_SECONDS saniye)"
 
 footer:
-    builtWith:
-        other: "{{ .Generator }} ile oluşturuldu."
-    designedBy:
-        other: "{{ .Theme }} teması {{ .DesignedBy }} tarafından tasarlandı"
+    builtWith: "{{ .Generator }} ile oluşturuldu."
+    designedBy: "{{ .Theme }} teması {{ .DesignedBy }} tarafından tasarlandı"
diff --git a/i18n/uk.yaml b/i18n/uk.yaml
index 3bd4f71..2e29e26 100644
--- a/i18n/uk.yaml
+++ b/i18n/uk.yaml
@@ -1,71 +1,42 @@
-toggleMenu:
-    other: Показати меню
+toggleMenu: Показати меню
 
-darkMode:
-    other: Темна тема
+darkMode: Темна тема
 
 list:
     page:
         one: "{{ .Count }} сторінка"
         few: "{{ .Count }} сторінки"
         other: "{{ .Count }} сторінок"
-
-    section:
-        other: Секція
-
+    section: Секція
     subsection:
         one: Підсекція
         other: Підсекції
 
 article:
-    back:
-        other: Назад
-
-    tableOfContents:
-        other: Зміст
-
-    relatedContent:
-        other: Схожі матеріали
-
-    lastUpdatedOn:
-        other: Востаннє оновлено
-
+    back: Назад
+    tableOfContents: Зміст
+    relatedContent: Схожі матеріали
+    lastUpdatedOn: Востаннє оновлено
     readingTime:
         one: "Час читання: {{ .Count }} хв"
         other: "Час читання: {{ .Count }} хв"
 
 notFound:
-    title:
-        other: Не знайдено
-
-    subtitle:
-        other: Ця сторінка не існує
+    title: Не знайдено
+    subtitle: Ця сторінка не існує
 
 widget:
     archives:
-        title:
-            other: Архіви
-
-        more:
-            other: Більше
-
+        title: Архіви
+        more: Більше
     tagCloud:
-        title:
-            other: Теґи
+        title: Теґи
 
 search:
-    title:
-        other: Пошук
-
-    placeholder:
-        other: Напишіть що-небудь...
-
-    resultTitle:
-        other: "#PAGES_COUNT сторінок (#TIME_SECONDS секунд)"
+    title: Пошук
+    placeholder: Напишіть що-небудь...
+    resultTitle: "#PAGES_COUNT сторінок (#TIME_SECONDS секунд)"
 
 footer:
-    builtWith:
-        other: Створено з {{ .Generator }}
-
-    designedBy:
-        other: Тема {{ .Theme }}, дизайн {{ .DesignedBy }}
+    builtWith: Створено з {{ .Generator }}
+    designedBy: Тема {{ .Theme }}, дизайн {{ .DesignedBy }}
diff --git a/i18n/zh-cn.yaml b/i18n/zh-cn.yaml
index 9350c2b..e744d08 100644
--- a/i18n/zh-cn.yaml
+++ b/i18n/zh-cn.yaml
@@ -1,60 +1,32 @@
-toggleMenu:
-    other: 切换菜单
+toggleMenu: 切换菜单
 
-darkMode:
-    other: 暗色模式
+darkMode: 暗色模式
 
 article:
-    back:
-        other: 返回
-
-    tableOfContents:
-        other: 目录
-
-    relatedContent:
-        other: 相关文章
-
-    lastUpdatedOn:
-        other: 最后更新于
-
-    readingTime:
-        other: "阅读时长: {{ .Count }} 分钟"
+    back: 返回
+    tableOfContents: 目录
+    relatedContent: 相关文章
+    lastUpdatedOn: 最后更新于
+    readingTime: "阅读时长: {{ .Count }} 分钟"
 
 notFound:
-    title:
-        other: 404 错误
-    subtitle:
-        other: 页面不存在
+    title: 404 错误
+    subtitle: 页面不存在
 
 widget:
     archives:
-        title:
-            other: 归档
-
-        more:
-            other: 更多
-
+        title: 归档
+        more: 更多
     tagCloud:
-        title:
-            other: 标签云
-
+        title: 标签云
     categoriesCloud:
-        title:
-            other: 分类
+        title: 分类
 
 search:
-    title:
-        other: 搜索
-
-    placeholder:
-        other: 输入关键词...
-
-    resultTitle:
-        other: "#PAGES_COUNT 个结果 (用时 #TIME_SECONDS 秒)"
+    title: 搜索
+    placeholder: 输入关键词...
+    resultTitle: "#PAGES_COUNT 个结果 (用时 #TIME_SECONDS 秒)"
 
 footer:
-    builtWith:
-        other: Built with {{ .Generator }}
-
-    designedBy:
-        other: 主题 {{ .Theme }} 由 {{ .DesignedBy }} 设计
+    builtWith: Built with {{ .Generator }}
+    designedBy: 主题 {{ .Theme }} 由 {{ .DesignedBy }} 设计
diff --git a/i18n/zh-hk.yaml b/i18n/zh-hk.yaml
index 9e3c246..4f701ba 100644
--- a/i18n/zh-hk.yaml
+++ b/i18n/zh-hk.yaml
@@ -1,73 +1,43 @@
-toggleMenu:
-    other: 切換選單
+toggleMenu: 切換選單
 
-darkMode:
-    other: 深色模式
+darkMode: 深色模式
 
 list:
     page:
         one: "第 {{ .Count }} 頁"
         other: "第 {{ .Count }} 頁"
-
-    section:
-        other: Section
-
+    section: Section
     subsection:
         one: Subsection
         other: Subsections
 
 article:
-    back:
-        other: 返回
-
-    tableOfContents:
-        other: 目錄
-
-    relatedContent:
-        other: 相關內容
-
-    lastUpdatedOn:
-        other: 上次改過於
-
+    back: 返回
+    tableOfContents: 目錄
+    relatedContent: 相關內容
+    lastUpdatedOn: 上次改過於
     readingTime:
         one: "需要 {{ .Count }} 分鐘閱讀"
         other: "需要 {{ .Count }} 分鐘閱讀"
 
 notFound:
-    title:
-        other: Not Found
-
-    subtitle:
-        other: 頁面不存在
+    title: Not Found
+    subtitle: 頁面不存在
 
 widget:
     archives:
-        title:
-            other: Archives
-
-        more:
-            other: 更多
-
+        title: Archives
+        more: 更多
     tagCloud:
-        title:
-            other: Tags
+        title: Tags
     categoriesCloud:
-        title:
-            other: Categories
+        title: Categories
 
 search:
-    title:
-        other: 搜尋
-
-    placeholder:
-        other: Type 關鍵字...
-
-    resultTitle:
-        other: "#PAGES_COUNT pages (#TIME_SECONDS seconds)"
+    title: 搜尋
+    placeholder: Type 關鍵字...
+    resultTitle: "#PAGES_COUNT pages (#TIME_SECONDS seconds)"
 
 footer:
-    builtWith:
-        other: Built with {{ .Generator }}
-
-    designedBy:
-        other: 主題 {{ .Theme }} 由 {{ .DesignedBy }} 設計
+    builtWith: Built with {{ .Generator }}
+    designedBy: 主題 {{ .Theme }} 由 {{ .DesignedBy }} 設計
diff --git a/i18n/zh-tw.yaml b/i18n/zh-tw.yaml
index d9e124e..8c1acee 100644
--- a/i18n/zh-tw.yaml
+++ b/i18n/zh-tw.yaml
@@ -1,49 +1,26 @@
-toggleMenu:
-    other: 切換選單
+toggleMenu: 切換選單
 
-darkMode:
-    other: 夜晚模式
+darkMode: 夜晚模式
 
 article:
-    back:
-        other: 返回
-
-    tableOfContents:
-        other: 目錄
-
-    relatedContent:
-        other: 相關文章
-
-    lastUpdatedOn:
-        other: 最後更新
-
-    readingTime:
-        other: "閱讀時間: {{ .Count }} 分鐘"
+    back: 返回
+    tableOfContents: 目錄
+    relatedContent: 相關文章
+    lastUpdatedOn: 最後更新
+    readingTime: "閱讀時間: {{ .Count }} 分鐘"
 
 notFound:
-    title:
-        other: 404 錯誤
-    subtitle:
-        other: 頁面不存在
+    title: 404 錯誤
+    subtitle: 頁面不存在
 
 widget:
     archives:
-        title:
-            other: 紀錄
-
-        more:
-            other: 更多
-
+        title: 紀錄
+        more: 更多
     tagCloud:
-        title:
-            other: 標籤雲
+        title: 標籤雲
 
 search:
-    title:
-        other: 搜尋
-
-    placeholder:
-        other: 輸入關鍵字...
-
-    resultTitle:
-        other: "#PAGES_COUNT 個結果 (用時 #TIME_SECONDS 秒)"
+    title: 搜尋
+    placeholder: 輸入關鍵字...
+    resultTitle: "#PAGES_COUNT 個結果 (用時 #TIME_SECONDS 秒)"
diff --git a/layouts/_default/_markup/render-codeblock.html b/layouts/_default/_markup/render-codeblock.html
new file mode 100644
index 0000000..21c5100
--- /dev/null
+++ b/layouts/_default/_markup/render-codeblock.html
@@ -0,0 +1,20 @@
+{{- $class := .Attributes.class | default ""    -}}
+{{- $lang  := .Attributes.lang  | default .Type -}}
+<div class="codeblock">
+    <header>
+        <span class="codeblock-lang">{{ $lang }}</span>
+        <button 
+            class="codeblock-copy"
+            data-id="codeblock-id-{{ .Ordinal }}"
+            data-copied-text="{{ T `article.codeblock.copied` }}"
+        >
+            {{ T `article.codeblock.copy` }}
+        </button>
+    </header>
+    <code id="codeblock-id-{{ .Ordinal }}" style="display:none;">{{- .Inner -}}</code>
+    {{- if transform.CanHighlight $lang -}}
+    <div class="{{ $class }}">{{- highlight .Inner $lang -}}</div>
+    {{- else -}}
+    <pre><code class="{{ $class }}">{{- .Inner -}}</code></pre>
+    {{- end -}}
+</div>
diff --git a/layouts/_default/_markup/render-image.html b/layouts/_default/_markup/render-image.html
index 0ed5584..5577736 100644
--- a/layouts/_default/_markup/render-image.html
+++ b/layouts/_default/_markup/render-image.html
@@ -17,7 +17,7 @@
 		{{- $Height = $image.Height -}}
 		{{- $galleryImage = true -}}
 
-		{{- if (default true .Page.Site.Params.imageProcessing.content.enabled) -}}
+		{{- if .Page.Site.Params.imageProcessing.content.enabled -}}
 			{{- $small := $image.Resize `480x` -}}
 			{{- $big := $image.Resize `1024x` -}}
 			{{- $Srcset = printf `%s 480w, %s 1024w` $small.RelPermalink $big.RelPermalink -}}
diff --git a/layouts/_default/archives.html b/layouts/_default/archives.html
index 5d5243c..9df633e 100644
--- a/layouts/_default/archives.html
+++ b/layouts/_default/archives.html
@@ -16,10 +16,8 @@
     </header>
 
     {{ $pages := where .Site.RegularPages "Type" "in" .Site.Params.mainSections }}
-    {{ $notHidden := where .Site.RegularPages "Params.hidden" "!=" true }}
-    {{ $filtered := ($pages | intersect $notHidden) }}
-
-    {{ range $filtered.GroupByDate "2006" }}
+    
+    {{ range $pages.GroupByDate "2006" }}
     {{ $id := lower (replace .Key " " "-") }}
     <div class="archives-group" id="{{ $id }}">
         <h2 class="archives-date section-title"><a href="{{ $.RelPermalink }}#{{ $id }}">{{ .Key }}</a></h2>
diff --git a/layouts/_default/list.html b/layouts/_default/list.html
index 9bc618d..4e1e0b5 100644
--- a/layouts/_default/list.html
+++ b/layouts/_default/list.html
@@ -25,7 +25,7 @@
                         {{- $Width := $image.resource.Width -}}
                         {{- $Height := $image.resource.Height -}}
     
-                        {{- if (default true .Page.Site.Params.imageProcessing.cover.enabled) -}}
+                        {{- if .Page.Site.Params.imageProcessing.cover.enabled -}}
                             {{- $thumbnail := $image.resource.Fill "120x120" -}}
                             {{- $Permalink = $thumbnail.RelPermalink -}}
                             {{- $Width = $thumbnail.Width -}}
diff --git a/layouts/_default/rss.xml b/layouts/_default/rss.xml
index e9f3f1a..0d3170e 100644
--- a/layouts/_default/rss.xml
+++ b/layouts/_default/rss.xml
@@ -6,7 +6,6 @@
 {{- else -}}
 {{- $pages = $pctx.Pages -}}
 {{- end -}}
-{{- $pages := where $pages "Params.hidden" "!=" true -}}
 {{- $limit := .Site.Config.Services.RSS.Limit -}}
 {{- if ge $limit 1 -}}
 {{- $pages = $pages | first $limit -}}
diff --git a/layouts/index.html b/layouts/index.html
index 0cd0b88..5c1eaa5 100644
--- a/layouts/index.html
+++ b/layouts/index.html
@@ -1,9 +1,6 @@
 {{ define "main" }}
     {{ $pages := where .Site.RegularPages "Type" "in" .Site.Params.mainSections }}
-    {{ $notHidden := where .Site.RegularPages "Params.hidden" "!=" true }}
-    {{ $filtered := ($pages | intersect $notHidden) }}
-    {{ $pag := .Paginate ($filtered) }}
-
+    {{ $pag := .Paginate ($pages) }}
     <section class="article-list">
         {{ range $index, $element := $pag.Pages }}
             {{ partial "article-list/default" . }}
diff --git a/layouts/page/search.json b/layouts/page/search.json
index 5d4e627..a0f5184 100644
--- a/layouts/page/search.json
+++ b/layouts/page/search.json
@@ -1,16 +1,13 @@
 {{- $pages := where .Site.RegularPages "Type" "in" .Site.Params.mainSections -}}
-{{- $notHidden := where .Site.RegularPages "Params.hidden" "!=" true -}}
-{{- $filtered := ($pages | intersect $notHidden) -}}
-
 {{- $result := slice -}}
 
-{{- range $filtered -}}
+{{- range $pages -}}
     {{- $data := dict "title" .Title "date" .Date "permalink" .Permalink "content" (.Plain) -}}
 
     {{- $image := partialCached "helper/image" (dict "Context" . "Type" "articleList") .RelPermalink "articleList" -}}
     {{- if $image.exists -}}
         {{- $imagePermalink := "" -}}
-        {{- if and $image.resource (default true .Page.Site.Params.imageProcessing.cover.enabled) -}}
+        {{- if and $image.resource .Page.Site.Params.imageProcessing.cover.enabled -}}
             {{- $thumbnail := $image.resource.Fill "120x120" -}}
             {{- $imagePermalink = (absURL $thumbnail.Permalink) -}}
         {{- else -}}
diff --git a/layouts/partials/article-list/compact.html b/layouts/partials/article-list/compact.html
index 376512a..edd58a0 100644
--- a/layouts/partials/article-list/compact.html
+++ b/layouts/partials/article-list/compact.html
@@ -19,7 +19,7 @@
                     {{- $Width := $image.resource.Width -}}
                     {{- $Height := $image.resource.Height -}}
 
-                    {{- if (default true .Page.Site.Params.imageProcessing.cover.enabled) -}}
+                    {{- if .Page.Site.Params.imageProcessing.cover.enabled -}}
                         {{- $thumbnail := $image.resource.Fill "120x120" -}}
                         {{- $Permalink = $thumbnail.RelPermalink -}}
                         {{- $Width = $thumbnail.Width -}}
diff --git a/layouts/partials/article/components/header.html b/layouts/partials/article/components/header.html
index 7582ec2..78b41bd 100644
--- a/layouts/partials/article/components/header.html
+++ b/layouts/partials/article/components/header.html
@@ -9,7 +9,7 @@
                     {{- $Height := $image.resource.Height -}}
                     {{- $Srcset := "" -}}
                     
-                    {{- if (default true .Page.Site.Params.imageProcessing.cover.enabled) -}}
+                    {{- if .Page.Site.Params.imageProcessing.cover.enabled -}}
                         {{- $thumbnail := $image.resource.Resize "800x" -}}
                         {{- $thumbnailRetina := $image.resource.Resize "1600x" -}}
                         {{- $Srcset = printf "%s 800w, %s 1600w" $thumbnail.RelPermalink $thumbnailRetina.RelPermalink -}}
diff --git a/layouts/partials/article/components/photoswipe.html b/layouts/partials/article/components/photoswipe.html
index c33ff49..425825c 100644
--- a/layouts/partials/article/components/photoswipe.html
+++ b/layouts/partials/article/components/photoswipe.html
@@ -1,68 +1,20 @@
-<!-- Root element of PhotoSwipe. Must have class pswp. -->
-<div class="pswp" tabindex="-1" role="dialog" aria-hidden="true">
+{{- $opts := dict "minify" hugo.IsProduction "format" "esm" -}}
+{{- $galleryScript := resources.Get "ts/gallery.ts" | js.Build $opts -}}
 
-    <!-- Background of PhotoSwipe. 
-         It's a separate element as animating opacity is faster than rgba(). -->
-    <div class="pswp__bg"></div>
+<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/photoswipe@5.2.7/dist/photoswipe.css"
+    integrity="sha256-olf9rfn3AG8zR6lkPXkN3PZq63z8tElx7Ela6T4eklo=" crossorigin="anonymous">
 
-    <!-- Slides wrapper with overflow:hidden. -->
-    <div class="pswp__scroll-wrap">
+<script type="module">
+    import StackGallery from '{{ $galleryScript.RelPermalink }}';
+    import PhotoSwipeLightbox from 'https://cdn.jsdelivr.net/npm/photoswipe@5.2.7/dist/photoswipe-lightbox.esm.min.js';
+    
+    console.log(StackGallery)
+    StackGallery(document.querySelector('.article-content'));
 
-        <!-- Container that holds slides. 
-            PhotoSwipe keeps only 3 of them in the DOM to save memory.
-            Don't modify these 3 pswp__item elements, data is added later on. -->
-        <div class="pswp__container">
-            <div class="pswp__item"></div>
-            <div class="pswp__item"></div>
-            <div class="pswp__item"></div>
-        </div>
-
-        <!-- Default (PhotoSwipeUI_Default) interface on top of sliding area. Can be changed. -->
-        <div class="pswp__ui pswp__ui--hidden">
-
-            <div class="pswp__top-bar">
-
-                <!--  Controls are self-explanatory. Order can be changed. -->
-
-                <div class="pswp__counter"></div>
-
-                <button class="pswp__button pswp__button--close" title="Close (Esc)"></button>
-
-                <button class="pswp__button pswp__button--share" title="Share"></button>
-
-                <button class="pswp__button pswp__button--fs" title="Toggle fullscreen"></button>
-
-                <button class="pswp__button pswp__button--zoom" title="Zoom in/out"></button>
-
-                <!-- Preloader demo https://codepen.io/dimsemenov/pen/yyBWoR -->
-                <!-- element will get class pswp__preloader--active when preloader is running -->
-                <div class="pswp__preloader">
-                    <div class="pswp__preloader__icn">
-                        <div class="pswp__preloader__cut">
-                            <div class="pswp__preloader__donut"></div>
-                        </div>
-                    </div>
-                </div>
-            </div>
-
-            <div class="pswp__share-modal pswp__share-modal--hidden pswp__single-tap">
-                <div class="pswp__share-tooltip"></div>
-            </div>
-
-            <button class="pswp__button pswp__button--arrow--left" title="Previous (arrow left)">
-            </button>
-
-            <button class="pswp__button pswp__button--arrow--right" title="Next (arrow right)">
-            </button>
-
-            <div class="pswp__caption">
-                <div class="pswp__caption__center"></div>
-            </div>
-
-        </div>
-
-    </div>
-
-</div>
-
-{{- partial "helper/external" (dict "Context" . "Namespace" "PhotoSwipe") -}}
\ No newline at end of file
+    const lightbox = new PhotoSwipeLightbox({
+        gallery: '.article-content',
+        children: '.gallery-image a',
+        pswpModule: () => import('https://cdn.jsdelivr.net/npm/photoswipe@5.2.7/dist/photoswipe.esm.min.js')
+    });
+    lightbox.init();
+</script>
\ No newline at end of file
diff --git a/layouts/partials/article/components/related-content.html b/layouts/partials/article/components/related-content.html
index aba88e3..822fc73 100644
--- a/layouts/partials/article/components/related-content.html
+++ b/layouts/partials/article/components/related-content.html
@@ -1,4 +1,4 @@
-{{ $related := (where (.Site.RegularPages.Related .) "Params.hidden" "!=" true) | first 5 }}
+{{ $related := .Site.RegularPages.Related . | first 5 }}
 {{ with $related }}
 <aside class="related-content--wrapper">
     <h2 class="section-title">{{ T "article.relatedContent" }}</h2>
diff --git a/layouts/partials/data/title.html b/layouts/partials/data/title.html
index 85a7bc7..938a5da 100644
--- a/layouts/partials/data/title.html
+++ b/layouts/partials/data/title.html
@@ -6,9 +6,7 @@
 
     <!-- Build paginator -->
     {{ $pages := where .Site.RegularPages "Section" "in" .Site.Params.mainSections }}
-    {{ $notHidden := where .Site.RegularPages "Params.hidden" "!=" true }}
-    {{ $filtered := ($pages | intersect $notHidden) }}
-    {{ $pag := .Paginate ($filtered) }}
+    {{ $pag := .Paginate ($pages) }}
 
     {{ if .Paginator.HasPrev }}
         <!-- Paginated. Append page number to title -->
@@ -20,8 +18,7 @@
     <!-- Taxonomy page -->
 
     <!-- Build paginator -->
-    {{ $notHidden := where .Pages "Params.hidden" "!=" true }}
-    {{ $pag := .Paginate ($notHidden) }}
+    {{ $pag := .Paginate .Pages }}
 
     <!-- {TAXONOMY_TYPE}: {TAXONOMY_TERM} -->
     {{ $title = slice (title .Data.Singular) ": " $title }}
diff --git a/layouts/partials/footer/components/script.html b/layouts/partials/footer/components/script.html
index 4cb350c..f25dc83 100644
--- a/layouts/partials/footer/components/script.html
+++ b/layouts/partials/footer/components/script.html
@@ -1,5 +1,3 @@
-{{- partial "helper/external" (dict "Context" . "Namespace" "Vibrant") -}}
-
 {{- $opts := dict "minify" hugo.IsProduction -}}
 {{- $script := resources.Get "ts/main.ts" | js.Build $opts -}}
 
diff --git a/layouts/partials/footer/footer.html b/layouts/partials/footer/footer.html
index 49caa89..3b2b46f 100644
--- a/layouts/partials/footer/footer.html
+++ b/layouts/partials/footer/footer.html
@@ -1,4 +1,4 @@
-{{- $ThemeVersion := "3.16.0" -}}
+{{- $ThemeVersion := "4.0.0-alpha.0" -}}
 <footer class="site-footer">
     <section class="copyright">
         &copy; 
diff --git a/layouts/partials/head/colorScheme.html b/layouts/partials/head/colorScheme.html
index 42f4dd8..04d63a5 100644
--- a/layouts/partials/head/colorScheme.html
+++ b/layouts/partials/head/colorScheme.html
@@ -1,5 +1,5 @@
-{{- $defaultColorScheme := default "auto" .Site.Params.colorScheme.default -}}
-{{- if not (default false .Site.Params.colorScheme.toggle) -}}
+{{- $defaultColorScheme := .Site.Params.colorScheme.default -}}
+{{- if not .Site.Params.colorScheme.toggle -}}
     {{/* If toggle is disabled, force default scheme */}}
     <script>
         (function() {
diff --git a/layouts/partials/head/head.html b/layouts/partials/head/head.html
index be63710..5de6071 100644
--- a/layouts/partials/head/head.html
+++ b/layouts/partials/head/head.html
@@ -19,7 +19,12 @@
 {{- end -}}
 
 {{ with .Site.Params.favicon }}
-    <link rel="shortcut icon" href="{{ . }}" />
+    {{ $favicon := resources.Get . }}
+    {{ if $favicon }}
+        <link rel="shortcut icon" href="{{ $favicon.RelPermalink }}" />
+    {{ else }}
+        {{ errorf "Failed loading favicon from %q" . }}
+    {{ end }}
 {{ end }}
 
 {{- template "_internal/google_analytics.html" . -}}
diff --git a/layouts/partials/head/opengraph/provider/twitter.html b/layouts/partials/head/opengraph/provider/twitter.html
index 03bbf22..a837ba3 100644
--- a/layouts/partials/head/opengraph/provider/twitter.html
+++ b/layouts/partials/head/opengraph/provider/twitter.html
@@ -11,6 +11,6 @@
 
 {{- $image := partialCached "helper/image" (dict "Context" . "Type" "opengraph") .RelPermalink "opengraph" -}}
 {{- if $image.exists -}}
-    <meta name="twitter:card" content="{{ default `summary_large_image` .Site.Params.opengraph.twitter.card }}">
+    <meta name="twitter:card" content="{{ .Site.Params.opengraph.twitter.card }}">
     <meta name="twitter:image" content='{{ absURL $image.permalink }}' />
 {{- end -}}
\ No newline at end of file
diff --git a/layouts/partials/sidebar/left.html b/layouts/partials/sidebar/left.html
index f94e50a..2dfa1d4 100644
--- a/layouts/partials/sidebar/left.html
+++ b/layouts/partials/sidebar/left.html
@@ -7,7 +7,7 @@
 
     <header>
         {{ with .Site.Params.sidebar.avatar }}
-            {{ if (default true .enabled) }}
+            {{ if .enabled }}
             <figure class="site-avatar">
                 <a href="{{ .Site.BaseURL | relLangURL }}">
                 {{ if not .local }}
@@ -89,7 +89,7 @@
                 </li>
             {{ end }}
             
-            {{ if (default false .Site.Params.colorScheme.toggle) }}
+            {{ if .Site.Params.colorScheme.toggle }}
                 <li id="dark-mode-toggle">
                     {{ partial "helper/icon" "toggle-left" }}
                     {{ partial "helper/icon" "toggle-right" }}
diff --git a/layouts/partials/widget/archives.html b/layouts/partials/widget/archives.html
index 1f2abc5..e42da27 100644
--- a/layouts/partials/widget/archives.html
+++ b/layouts/partials/widget/archives.html
@@ -10,9 +10,7 @@
         <h2 class="widget-title section-title">{{ T "widget.archives.title" }}</h2>
 
         {{ $pages := where $context.Site.RegularPages "Type" "in" $context.Site.Params.mainSections }}
-        {{ $notHidden := where $context.Site.RegularPages "Params.hidden" "!=" true }}
-        {{ $filtered := ($pages | intersect $notHidden) }}
-        {{ $archives := $filtered.GroupByDate "2006" }}
+        {{ $archives := $pages.GroupByDate "2006" }}
         
         <div class="widget-archive--list">
             {{ range $index, $item := first (add $limit 1) ($archives) }}
diff --git a/theme.toml b/theme.toml
index a1a3d74..ce33cee 100644
--- a/theme.toml
+++ b/theme.toml
@@ -20,7 +20,7 @@ features = [
     "search",
 ]
 
-min_version = "0.87.0"
+min_version = "0.100.0"
 
 [author]
 name = "Jimmy Cai"

From b03390d237427a2b9cfee55949cb1da62f1a6856 Mon Sep 17 00:00:00 2001
From: Jimmy Cai <github@jimmycai.com>
Date: Sat, 29 Oct 2022 17:14:19 +0200
Subject: [PATCH 02/26] Revert "Merge branch 'canary' into master" (#712)

Revert "Merge branch 'canary' into master (#711)"

This reverts commit 8a597a5c9c861d2bce22a5e06c7667cd9c8e263a.
---
 archetypes/default.md                         |   1 +
 assets/scss/partials/article.scss             |   1 +
 assets/scss/partials/highlight/dark.scss      |   2 +-
 assets/scss/partials/layout/article.scss      |  48 ++--
 assets/scss/partials/layout/search.scss       |   4 +-
 assets/scss/partials/sidebar.scss             |   6 +-
 assets/ts/codeblock.ts                        |  28 --
 assets/ts/color.ts                            |  63 +++++
 assets/ts/gallery.ts                          | 236 +++++++++++------
 assets/ts/main.ts                             |  69 ++++-
 config.yaml                                   | 143 +++++++++++
 config/_default/module.toml                   |   3 -
 config/_default/params.toml                   |  52 ----
 data/external.yaml                            |  22 ++
 exampleSite/README.md                         |   1 +
 exampleSite/assets/img/favicon.png            | Bin 1031 -> 0 bytes
 exampleSite/assets/img/logo.jpg               | Bin 21951 -> 0 bytes
 exampleSite/config.yaml                       | 239 ++++++++++++++++++
 exampleSite/config/_default/config.toml       |  20 --
 exampleSite/config/_default/languages.toml    |  16 --
 exampleSite/config/_default/markup.toml       |  18 --
 exampleSite/config/_default/menu.toml         |  20 --
 exampleSite/config/_default/params.toml       | 106 --------
 exampleSite/config/_default/permalinks.toml   |   3 -
 exampleSite/config/_default/related.toml      |  12 -
 .../content/post/emoji-support/index.md       |  50 ++++
 ...creative-exchange-d2zvqp3fpro-unsplash.jpg | Bin 0 -> 35369 bytes
 .../content/post/markdown-syntax/index.md     |  39 +--
 go.mod                                        |   2 +-
 i18n/ar.yaml                                  |  67 +++--
 i18n/bn.yaml                                  |  57 +++--
 i18n/ca.yaml                                  |  66 +++--
 i18n/de.yaml                                  |  67 +++--
 i18n/el.yaml                                  |  63 +++--
 i18n/en.yaml                                  |  69 +++--
 i18n/es.yaml                                  |  66 +++--
 i18n/fa.yaml                                  |  66 +++--
 i18n/fr.yaml                                  |  62 +++--
 i18n/hu.yaml                                  |  66 +++--
 i18n/id.yaml                                  |  66 +++--
 i18n/it.yaml                                  |  66 +++--
 i18n/ja.yaml                                  |  64 +++--
 i18n/ko.yaml                                  |  63 +++--
 i18n/nl.yaml                                  |  51 ++--
 i18n/pl.yaml                                  |  66 +++--
 i18n/pt-br.yaml                               |  62 +++--
 i18n/ru.yaml                                  |  56 ++--
 i18n/th.yaml                                  |  63 +++--
 i18n/tr.yaml                                  |  47 ++--
 i18n/uk.yaml                                  |  63 +++--
 i18n/zh-cn.yaml                               |  64 +++--
 i18n/zh-hk.yaml                               |  66 +++--
 i18n/zh-tw.yaml                               |  53 ++--
 .../_default/_markup/render-codeblock.html    |  20 --
 layouts/_default/_markup/render-image.html    |   2 +-
 layouts/_default/archives.html                |   6 +-
 layouts/_default/list.html                    |   2 +-
 layouts/_default/rss.xml                      |   1 +
 layouts/index.html                            |   5 +-
 layouts/page/search.json                      |   7 +-
 layouts/partials/article-list/compact.html    |   2 +-
 .../partials/article/components/header.html   |   2 +-
 .../article/components/photoswipe.html        |  82 ++++--
 .../article/components/related-content.html   |   2 +-
 layouts/partials/data/title.html              |   7 +-
 .../partials/footer/components/script.html    |   2 +
 layouts/partials/footer/footer.html           |   2 +-
 layouts/partials/head/colorScheme.html        |   4 +-
 layouts/partials/head/head.html               |   7 +-
 .../head/opengraph/provider/twitter.html      |   2 +-
 layouts/partials/sidebar/left.html            |   4 +-
 layouts/partials/widget/archives.html         |   4 +-
 theme.toml                                    |   2 +-
 73 files changed, 1976 insertions(+), 892 deletions(-)
 delete mode 100644 assets/ts/codeblock.ts
 create mode 100644 assets/ts/color.ts
 create mode 100644 config.yaml
 delete mode 100644 config/_default/module.toml
 delete mode 100644 config/_default/params.toml
 create mode 100644 exampleSite/README.md
 delete mode 100644 exampleSite/assets/img/favicon.png
 delete mode 100644 exampleSite/assets/img/logo.jpg
 create mode 100644 exampleSite/config.yaml
 delete mode 100644 exampleSite/config/_default/config.toml
 delete mode 100644 exampleSite/config/_default/languages.toml
 delete mode 100644 exampleSite/config/_default/markup.toml
 delete mode 100644 exampleSite/config/_default/menu.toml
 delete mode 100644 exampleSite/config/_default/params.toml
 delete mode 100644 exampleSite/config/_default/permalinks.toml
 delete mode 100644 exampleSite/config/_default/related.toml
 create mode 100644 exampleSite/content/post/emoji-support/index.md
 create mode 100644 exampleSite/content/post/emoji-support/the-creative-exchange-d2zvqp3fpro-unsplash.jpg
 delete mode 100644 layouts/_default/_markup/render-codeblock.html

diff --git a/archetypes/default.md b/archetypes/default.md
index 129dec2..0556d3a 100644
--- a/archetypes/default.md
+++ b/archetypes/default.md
@@ -5,6 +5,7 @@ date: {{ .Date }}
 image: 
 math: 
 license: 
+hidden: false
 comments: true
 draft: true
 ---
\ No newline at end of file
diff --git a/assets/scss/partials/article.scss b/assets/scss/partials/article.scss
index a041e9b..f085ff0 100644
--- a/assets/scss/partials/article.scss
+++ b/assets/scss/partials/article.scss
@@ -192,6 +192,7 @@
         .article-preview {
             font-size: 1.4rem;
             color: var(--card-text-color-tertiary);
+            margin-top: 10px;
             line-height: 1.5;
         }
     }
diff --git a/assets/scss/partials/highlight/dark.scss b/assets/scss/partials/highlight/dark.scss
index 3ea6c56..0d3f330 100644
--- a/assets/scss/partials/highlight/dark.scss
+++ b/assets/scss/partials/highlight/dark.scss
@@ -11,4 +11,4 @@ $text-color: $color;
 $name-color: #a6e22e;
 $literal-color: #e6db74;
 
-@import "common.scss";
\ No newline at end of file
+@import "common.scss";
diff --git a/assets/scss/partials/layout/article.scss b/assets/scss/partials/layout/article.scss
index ba06c11..97c7e77 100644
--- a/assets/scss/partials/layout/article.scss
+++ b/assets/scss/partials/layout/article.scss
@@ -286,12 +286,10 @@
         line-height: 1.428571429;
         word-break: break-all;
         padding: var(--card-padding);
-
         //  keep Codeblocks LTR
         [dir="rtl"] & {
             direction: ltr;
         }
-
         code {
             color: unset;
             border: none;
@@ -305,11 +303,15 @@
         padding: var(--card-padding);
         position: relative;
 
+        &:hover {
+            .copyCodeButton {
+                opacity: 1;
+            }
+        }
         // keep Codeblocks LTR
         [dir="rtl"] & {
             direction: ltr;
         }
-
         pre {
             margin: initial;
             padding: 0;
@@ -318,30 +320,20 @@
         }
     }
 
-    .codeblock {
-        header {
-            background-color: var(--card-background-selected);
-            padding: 5px var(--card-padding);
-            display: flex;
-            justify-content: space-between;
-            box-shadow: var(--shadow-l1);
-
-            span {
-                text-transform: uppercase;
-                font-weight: bold;
-                color: var(--card-text-color-secondary);
-            }
-        }
-
-        .codeblock-copy {
-            cursor: pointer;
-            background-color: transparent;
-            border: none;
-            padding: 8px 16px;
-            color: var(--card-text-color-secondary);
-            font-size: 14px;
-            font-weight: bold;
-        }
+    .copyCodeButton {
+        position: absolute;
+        top: calc(var(--card-padding));
+        right: calc(var(--card-padding));
+        background: var(--card-background);
+        border: none;
+        box-shadow: var(--shadow-l2);
+        border-radius: var(--tag-border-radius);
+        padding: 8px 16px;
+        color: var(--card-text-color-main);
+        cursor: pointer;
+        font-size: 14px;
+        opacity: 0;
+        transition: opacity 0.3s ease;
     }
 
     .table-wrapper {
@@ -410,7 +402,7 @@
     /// Negative margins
     blockquote,
     figure,
-    .codeblock,
+    .highlight,
     pre,
     .gallery,
     .video-wrapper,
diff --git a/assets/scss/partials/layout/search.scss b/assets/scss/partials/layout/search.scss
index cbf15b7..89cdcef 100644
--- a/assets/scss/partials/layout/search.scss
+++ b/assets/scss/partials/layout/search.scss
@@ -31,7 +31,6 @@
 
     input {
         padding: 40px 20px 20px;
-        padding-inline-end: var(--button-size);
         border-radius: var(--card-border-radius);
         background-color: var(--card-background);
         box-shadow: var(--shadow-l1);
@@ -79,4 +78,5 @@
             height: 20px;
         }
     }
-}
+
+}
\ No newline at end of file
diff --git a/assets/scss/partials/sidebar.scss b/assets/scss/partials/sidebar.scss
index 75332a7..95310ca 100644
--- a/assets/scss/partials/sidebar.scss
+++ b/assets/scss/partials/sidebar.scss
@@ -11,6 +11,7 @@
     flex-direction: column;
     flex-shrink: 0;
     align-self: stretch;
+    gap: var(--sidebar-element-separation);
     max-width: none;
     width: 100%;
     position: relative;
@@ -64,11 +65,6 @@
             }
         }
     }
-
-    .social-menu,
-    .menu {
-        margin-top: var(--sidebar-element-separation);
-    }
 }
 
 .right-sidebar {
diff --git a/assets/ts/codeblock.ts b/assets/ts/codeblock.ts
deleted file mode 100644
index 08c3328..0000000
--- a/assets/ts/codeblock.ts
+++ /dev/null
@@ -1,28 +0,0 @@
-/**
- * Copy button for code blocks
-*/
-export default () => {
-    const copyButtons = document.querySelectorAll('.codeblock-copy');
-    copyButtons.forEach(button => {
-        const codeblockID = button.getAttribute('data-id'),
-            copyText = button.textContent,
-            copiedText = button.getAttribute('data-copied-text');
-        if (!codeblockID) return;
-        button.addEventListener('click', (e) => {
-            e.preventDefault();
-            const codeblock = document.getElementById(codeblockID) as HTMLElement;
-            if (!codeblockID) return;
-            navigator.clipboard.writeText(codeblock.textContent)
-                .then(() => {
-                    button.textContent = copiedText;
-                    setTimeout(() => {
-                        button.textContent = copyText;
-                    }, 1000);
-                })
-                .catch(err => {
-                    alert(err)
-                    console.log('Something went wrong', err);
-                });
-        }, false);
-    });
-}
\ No newline at end of file
diff --git a/assets/ts/color.ts b/assets/ts/color.ts
new file mode 100644
index 0000000..50581d1
--- /dev/null
+++ b/assets/ts/color.ts
@@ -0,0 +1,63 @@
+interface colorScheme {
+    hash: string,                        /// Regenerate color scheme when the image hash is changed
+    DarkMuted: {
+        hex: string,
+        rgb: Number[],
+        bodyTextColor: string
+    },
+    Vibrant: {
+        hex: string,
+        rgb: Number[],
+        bodyTextColor: string
+    }
+}
+
+let colorsCache: { [key: string]: colorScheme } = {};
+
+if (localStorage.hasOwnProperty('StackColorsCache')) {
+    try {
+        colorsCache = JSON.parse(localStorage.getItem('StackColorsCache'));
+    }
+    catch (e) {
+        colorsCache = {};
+    }
+}
+
+async function getColor(key: string, hash: string, imageURL: string) {
+    if (!key) {
+        /**
+         * If no key is provided, do not cache the result
+         */
+        return await Vibrant.from(imageURL).getPalette();
+    }
+
+    if (!colorsCache.hasOwnProperty(key) || colorsCache[key].hash !== hash) {
+        /**
+         * If key is provided, but not found in cache, or the hash mismatches => Regenerate color scheme
+         */
+        const palette = await Vibrant.from(imageURL).getPalette();
+
+        colorsCache[key] = {
+            hash: hash,
+            Vibrant: {
+                hex: palette.Vibrant.hex,
+                rgb: palette.Vibrant.rgb,
+                bodyTextColor: palette.Vibrant.bodyTextColor
+            },
+            DarkMuted: {
+                hex: palette.DarkMuted.hex,
+                rgb: palette.DarkMuted.rgb,
+                bodyTextColor: palette.DarkMuted.bodyTextColor
+            }
+        }
+
+        /* Save the result in localStorage */
+        localStorage.setItem('StackColorsCache', JSON.stringify(colorsCache));
+    }
+
+    return colorsCache[key];
+}
+
+export {
+    getColor
+}
\ No newline at end of file
diff --git a/assets/ts/gallery.ts b/assets/ts/gallery.ts
index e0124d1..9840f1e 100644
--- a/assets/ts/gallery.ts
+++ b/assets/ts/gallery.ts
@@ -1,92 +1,186 @@
-const wrap = (figures: HTMLElement[]) => {
-    const galleryContainer = document.createElement('div');
-    galleryContainer.className = 'gallery';
-
-    const parentNode = figures[0].parentNode,
-        first = figures[0];
-
-    parentNode.insertBefore(galleryContainer, first)
-
-    for (const figure of figures) {
-        galleryContainer.appendChild(figure);
+declare global {
+    interface Window {
+        PhotoSwipe: any;
+        PhotoSwipeUI_Default: any
     }
 }
 
-export default (container: HTMLElement) => {
-    /// The process of wrapping image with figure tag is done using JavaScript instead of only Hugo markdown render hook
-    /// because it can not detect whether image is being wrapped by a link or not
-    /// and it lead to a invalid HTML construction (<a><figure><img></figure></a>)
-    const images = container.querySelectorAll('img.gallery-image') as NodeListOf<HTMLImageElement>;
-    for (const img of Array.from(images)) {
-        /// Images are wrapped with figure tag if the paragraph has only images without texts
-        /// This is done to allow inline images within paragraphs
-        const paragraph = img.closest('p');
+interface PhotoSwipeItem {
+    w: number;
+    h: number;
+    src: string;
+    msrc: string;
+    title?: string;
+    el: HTMLElement;
+}
 
-        if (!paragraph || !container.contains(paragraph)) continue;
+class StackGallery {
+    private galleryUID: number;
+    private items: PhotoSwipeItem[] = [];
 
-        if (paragraph.textContent.trim() == '') {
-            /// Once we insert figcaption, this check no longer works
-            /// So we add a class to paragraph to mark it
-            paragraph.classList.add('no-text');
+    constructor(container: HTMLElement, galleryUID = 1) {
+        if (window.PhotoSwipe == undefined || window.PhotoSwipeUI_Default == undefined) {
+            console.error("PhotoSwipe lib not loaded.");
+            return;
         }
 
-        let isNewLineImage = paragraph.classList.contains('no-text');
-        if (!isNewLineImage) continue;
+        this.galleryUID = galleryUID;
 
-        const hasLink = img.parentElement.tagName == 'A';
+        StackGallery.createGallery(container);
+        this.loadItems(container);
+        this.bindClick();
+    }
 
-        let el: HTMLElement = img;
-        /// Wrap image with figure tag, with flex-grow and flex-basis values extracted from img's data attributes
-        const figure = document.createElement('figure');
-        figure.style.setProperty('flex-grow', img.getAttribute('data-flex-grow') || '1');
-        figure.style.setProperty('flex-basis', img.getAttribute('data-flex-basis') || '0');
-        if (hasLink) {
-            /// Wrap <a> if it exists
-            el = img.parentElement;
-        }
-        el.parentElement.insertBefore(figure, el);
-        figure.appendChild(el);
+    private loadItems(container: HTMLElement) {
+        this.items = [];
 
-        /// Add figcaption if it exists
-        if (img.hasAttribute('alt')) {
-            const figcaption = document.createElement('figcaption');
-            figcaption.innerText = img.getAttribute('alt');
-            figure.appendChild(figcaption);
-        }
+        const figures = container.querySelectorAll('figure.gallery-image');
 
-        /// Wrap img tag with <a> tag if image was not wrapped by <a> tag
-        if (!hasLink) {
-            figure.className = 'gallery-image';
+        for (const el of figures) {
+            const figcaption = el.querySelector('figcaption'),
+                img = el.querySelector('img');
 
-            const a = document.createElement('a');
-            a.href = img.src;
-            a.setAttribute('target', '_blank');
-            a.setAttribute('data-pswp-width', img.width.toString());
-            a.setAttribute('data-pswp-height', img.height.toString());
-            img.parentNode.insertBefore(a, img);
-            a.appendChild(img);
+            let aux: PhotoSwipeItem = {
+                w: parseInt(img.getAttribute('width')),
+                h: parseInt(img.getAttribute('height')),
+                src: img.src,
+                msrc: img.getAttribute('data-thumb') || img.src,
+                el: el
+            }
+
+            if (figcaption) {
+                aux.title = figcaption.innerHTML;
+            }
+
+            this.items.push(aux);
         }
     }
 
-    const figuresEl = container.querySelectorAll('figure.gallery-image') as NodeListOf<HTMLElement>;
-    let currentGallery = [];
-    for (const figure of Array.from(figuresEl)) {
-        if (!currentGallery.length) {
-            /// First iteration
-            currentGallery = [figure];
+    public static createGallery(container: HTMLElement) {
+        /// The process of wrapping image with figure tag is done using JavaScript instead of only Hugo markdown render hook
+        /// because it can not detect whether image is being wrapped by a link or not
+        /// and it lead to a invalid HTML construction (<a><figure><img></figure></a>)
+
+        const images = container.querySelectorAll('img.gallery-image');
+        for (const img of Array.from(images)) {
+            /// Images are wrapped with figure tag if the paragraph has only images without texts
+            /// This is done to allow inline images within paragraphs
+            const paragraph = img.closest('p');
+
+            if (!paragraph || !container.contains(paragraph)) continue;
+
+            if (paragraph.textContent.trim() == '') {
+                /// Once we insert figcaption, this check no longer works
+                /// So we add a class to paragraph to mark it
+                paragraph.classList.add('no-text');
+            }
+
+            let isNewLineImage = paragraph.classList.contains('no-text');
+            if (!isNewLineImage) continue;
+
+            const hasLink = img.parentElement.tagName == 'A';
+
+            let el: HTMLElement = img;
+            /// Wrap image with figure tag, with flex-grow and flex-basis values extracted from img's data attributes
+            const figure = document.createElement('figure');
+            figure.style.setProperty('flex-grow', img.getAttribute('data-flex-grow') || '1');
+            figure.style.setProperty('flex-basis', img.getAttribute('data-flex-basis') || '0');
+            if (hasLink) {
+                /// Wrap <a> if it exists
+                el = img.parentElement;
+            }
+            el.parentElement.insertBefore(figure, el);
+            figure.appendChild(el);
+
+            /// Add figcaption if it exists
+            if (img.hasAttribute('alt')) {
+                const figcaption = document.createElement('figcaption');
+                figcaption.innerText = img.getAttribute('alt');
+                figure.appendChild(figcaption);
+            }
+
+            /// Wrap img tag with <a> tag if image was not wrapped by <a> tag
+            if (!hasLink) {
+                figure.className = 'gallery-image';
+
+                const a = document.createElement('a');
+                a.href = img.src;
+                a.setAttribute('target', '_blank');
+                img.parentNode.insertBefore(a, img);
+                a.appendChild(img);
+            }
         }
-        else if (figure.previousElementSibling === currentGallery[currentGallery.length - 1]) {
-            /// Adjacent figures
-            currentGallery.push(figure);
+
+        const figuresEl = container.querySelectorAll('figure.gallery-image');
+
+        let currentGallery = [];
+
+        for (const figure of figuresEl) {
+            if (!currentGallery.length) {
+                /// First iteration
+                currentGallery = [figure];
+            }
+            else if (figure.previousElementSibling === currentGallery[currentGallery.length - 1]) {
+                /// Adjacent figures
+                currentGallery.push(figure);
+            }
+            else if (currentGallery.length) {
+                /// End gallery
+                StackGallery.wrap(currentGallery);
+                currentGallery = [figure];
+            }
         }
-        else if (currentGallery.length) {
-            /// End gallery
-            wrap(currentGallery);
-            currentGallery = [figure];
+
+        if (currentGallery.length > 0) {
+            StackGallery.wrap(currentGallery);
         }
     }
 
-    if (currentGallery.length > 0) {
-        wrap(currentGallery);
+    /**
+     * Wrap adjacent figure tags with div.gallery
+     * @param figures 
+     */
+    public static wrap(figures: HTMLElement[]) {
+        const galleryContainer = document.createElement('div');
+        galleryContainer.className = 'gallery';
+
+        const parentNode = figures[0].parentNode,
+            first = figures[0];
+
+        parentNode.insertBefore(galleryContainer, first)
+
+        for (const figure of figures) {
+            galleryContainer.appendChild(figure);
+        }
     }
-};
\ No newline at end of file
+
+    public open(index: number) {
+        const pswp = document.querySelector('.pswp') as HTMLDivElement;
+        const ps = new window.PhotoSwipe(pswp, window.PhotoSwipeUI_Default, this.items, {
+            index: index,
+            galleryUID: this.galleryUID,
+            getThumbBoundsFn: (index) => {
+                const thumbnail = this.items[index].el.getElementsByTagName('img')[0],
+                    pageYScroll = window.pageYOffset || document.documentElement.scrollTop,
+                    rect = thumbnail.getBoundingClientRect();
+
+                return { x: rect.left, y: rect.top + pageYScroll, w: rect.width };
+            }
+        });
+
+        ps.init();
+    }
+
+    private bindClick() {
+        for (const [index, item] of this.items.entries()) {
+            const a = item.el.querySelector('a');
+
+            a.addEventListener('click', (e) => {
+                e.preventDefault();
+                this.open(index);
+            })
+        }
+    }
+}
+
+export default StackGallery;
\ No newline at end of file
diff --git a/assets/ts/main.ts b/assets/ts/main.ts
index 0668c7c..f3160ae 100644
--- a/assets/ts/main.ts
+++ b/assets/ts/main.ts
@@ -5,7 +5,8 @@
 *   @website: https://jimmycai.com
 *   @link: https://github.com/CaiJimmy/hugo-theme-stack
 */
-import StackCodeBlock from "ts/codeblock";
+import StackGallery from "ts/gallery";
+import { getColor } from 'ts/color';
 import menu from 'ts/menu';
 import createElement from 'ts/createElement';
 import StackColorScheme from 'ts/colorScheme';
@@ -21,12 +22,76 @@ let Stack = {
 
         const articleContent = document.querySelector('.article-content') as HTMLElement;
         if (articleContent) {
+            new StackGallery(articleContent);
             setupSmoothAnchors();
             setupScrollspy();
         }
 
+        /**
+         * Add linear gradient background to tile style article
+         */
+        const articleTile = document.querySelector('.article-list--tile');
+        if (articleTile) {
+            let observer = new IntersectionObserver(async (entries, observer) => {
+                entries.forEach(entry => {
+                    if (!entry.isIntersecting) return;
+                    observer.unobserve(entry.target);
+
+                    const articles = entry.target.querySelectorAll('article.has-image');
+                    articles.forEach(async articles => {
+                        const image = articles.querySelector('img'),
+                            imageURL = image.src,
+                            key = image.getAttribute('data-key'),
+                            hash = image.getAttribute('data-hash'),
+                            articleDetails: HTMLDivElement = articles.querySelector('.article-details');
+
+                        const colors = await getColor(key, hash, imageURL);
+
+                        articleDetails.style.background = `
+                        linear-gradient(0deg, 
+                            rgba(${colors.DarkMuted.rgb[0]}, ${colors.DarkMuted.rgb[1]}, ${colors.DarkMuted.rgb[2]}, 0.5) 0%, 
+                            rgba(${colors.Vibrant.rgb[0]}, ${colors.Vibrant.rgb[1]}, ${colors.Vibrant.rgb[2]}, 0.75) 100%)`;
+                    })
+                })
+            });
+
+            observer.observe(articleTile)
+        }
+
+
+        /**
+         * Add copy button to code block
+        */
+        const highlights = document.querySelectorAll('.article-content div.highlight');
+        const copyText = `Copy`,
+            copiedText = `Copied!`;
+
+        highlights.forEach(highlight => {
+            const copyButton = document.createElement('button');
+            copyButton.innerHTML = copyText;
+            copyButton.classList.add('copyCodeButton');
+            highlight.appendChild(copyButton);
+
+            const codeBlock = highlight.querySelector('code[data-lang]');
+            if (!codeBlock) return;
+
+            copyButton.addEventListener('click', () => {
+                navigator.clipboard.writeText(codeBlock.textContent)
+                    .then(() => {
+                        copyButton.textContent = copiedText;
+
+                        setTimeout(() => {
+                            copyButton.textContent = copyText;
+                        }, 1000);
+                    })
+                    .catch(err => {
+                        alert(err)
+                        console.log('Something went wrong', err);
+                    });
+            });
+        });
+
         new StackColorScheme(document.getElementById('dark-mode-toggle'));
-        StackCodeBlock();
     }
 }
 
diff --git a/config.yaml b/config.yaml
new file mode 100644
index 0000000..fcb4bcb
--- /dev/null
+++ b/config.yaml
@@ -0,0 +1,143 @@
+module:
+    hugoVersion:
+        extended: true
+        min: "0.87.0"
+
+params:
+    mainSections:
+        - post
+    featuredImageField: image
+    rssFullContent: true
+    favicon:
+
+    footer:
+        since:
+        customText:
+
+    dateFormat:
+        published: Jan 02, 2006
+        lastUpdated: Jan 02, 2006 15:04 MST
+
+    sidebar:
+        compact: false
+        emoji:
+        subtitle:
+        avatar:
+            enabled: true
+            local: true
+            src: img/avatar.png
+
+    article:
+        math: false
+        toc: true
+        readingTime: true
+        license:
+            enabled: false
+            default: Licensed under CC BY-NC-SA 4.0
+
+    comments:
+        enabled: false
+        provider: disqus
+
+        disqusjs:
+            shortname:
+            apiUrl:
+            apiKey:
+            admin:
+            adminLabel:
+
+        utterances:
+            repo:
+            issueTerm: pathname
+            label:
+
+        remark42:
+            host:
+            site:
+            locale:
+
+        vssue:
+            platform:
+            owner:
+            repo:
+            clientId:
+            clientSecret:
+            autoCreateIssue: false
+
+        # Waline client configuration see: https://waline.js.org/en/reference/client.html
+        waline:
+            serverURL:
+            lang:
+            visitor:
+            avatar:
+            emoji:
+                - https://cdn.jsdelivr.net/gh/walinejs/emojis/weibo
+            requiredMeta:
+                - name
+                - email
+                - url
+            placeholder:
+            locale:
+                admin: Admin
+
+        twikoo:
+            envId:
+            region:
+            path:
+            lang:
+
+        giscus:
+            repo:
+            repoID:
+            category:
+            categoryID:
+            mapping:
+            strict:
+            lightTheme:
+            darkTheme:
+            reactionsEnabled: 1
+            emitMetadata: 0
+            inputPosition:
+            lang:
+
+        gitalk:
+            owner:
+            admin:
+            repo:
+            clientID:
+            clientSecret:
+
+        cusdis:
+            host:
+            id:
+
+    widgets:
+        homepage: []
+        page: []
+
+    opengraph:
+        twitter:
+            # Your Twitter username
+            site:
+
+            # Available values: summary, summary_large_image
+            card: summary_large_image
+
+    defaultImage:
+        opengraph:
+            enabled: false
+            local: false
+            src:
+
+    colorScheme:
+        # Display toggle
+        toggle: true
+
+        # Available values: auto, light, dark
+        default: auto
+
+    imageProcessing:
+        cover:
+            enabled: true
+        content:
+            enabled: true
diff --git a/config/_default/module.toml b/config/_default/module.toml
deleted file mode 100644
index cc14cd5..0000000
--- a/config/_default/module.toml
+++ /dev/null
@@ -1,3 +0,0 @@
-[hugoVersion]
-extended = true
-min = "0.100.0"
\ No newline at end of file
diff --git a/config/_default/params.toml b/config/_default/params.toml
deleted file mode 100644
index a6bd7ce..0000000
--- a/config/_default/params.toml
+++ /dev/null
@@ -1,52 +0,0 @@
-# Theme's default configuration
-mainSections = ["post"]
-featuredImageField = "image"
-rssFullContent = true
-
-[footer]
-
-[dateFormat]
-published = "Jan 02, 2006"
-lastUpdated = "Jan 02, 2006 15:04 MST"
-
-[sidebar]
-compact = false
-
-[sidebar.avatar]
-enabled = true
-local = true
-src = "img/avatar.png"
-
-[article]
-math = false
-toc = true
-readingTime = true
-
-[article.license]
-enabled = false
-default = "Licensed under CC BY-NC-SA 4.0"
-
-[comments]
-enabled = false
-provider = "disqus"
-
-[widgets]
-homepage = []
-page = []
-
-[opengraph.twitter]
-card = "summary_large_image"
-
-[defaultImage.opengraph]
-enabled = false
-local = false
-
-[colorScheme]
-toggle = true
-default = "auto"
-
-[imageProcessing.cover]
-enabled = true
-
-[imageProcessing.content]
-enabled = true
diff --git a/data/external.yaml b/data/external.yaml
index 269ef4c..777620d 100644
--- a/data/external.yaml
+++ b/data/external.yaml
@@ -1,3 +1,25 @@
+Vibrant:
+    - src: https://cdn.jsdelivr.net/npm/node-vibrant@3.1.6/dist/vibrant.min.js
+      integrity: sha256-awcR2jno4kI5X0zL8ex0vi2z+KMkF24hUW8WePSA9HM=
+      type: script
+
+PhotoSwipe:
+    - src: https://cdn.jsdelivr.net/npm/photoswipe@4.1.3/dist/photoswipe.min.js
+      integrity: sha256-ePwmChbbvXbsO02lbM3HoHbSHTHFAeChekF1xKJdleo=
+      type: script
+      defer: true
+
+    - src: https://cdn.jsdelivr.net/npm/photoswipe@4.1.3/dist/photoswipe-ui-default.min.js
+      integrity: sha256-UKkzOn/w1mBxRmLLGrSeyB4e1xbrp4xylgAWb3M42pU=
+      type: script
+      defer: true
+
+    - src: https://cdn.jsdelivr.net/npm/photoswipe@4.1.3/dist/default-skin/default-skin.min.css
+      type: style
+
+    - src: https://cdn.jsdelivr.net/npm/photoswipe@4.1.3/dist/photoswipe.min.css
+      type: style
+
 KaTeX:
     - src: https://cdn.jsdelivr.net/npm/katex@0.15.6/dist/katex.min.css
       integrity: sha256-J+iAE0sgH8QSz9hpcDxXIftnj65JEZgNhGcgReTTK9s=
diff --git a/exampleSite/README.md b/exampleSite/README.md
new file mode 100644
index 0000000..1b6d403
--- /dev/null
+++ b/exampleSite/README.md
@@ -0,0 +1 @@
+Example site modified from https://github.com/gohugoio/hugoBasicExample
\ No newline at end of file
diff --git a/exampleSite/assets/img/favicon.png b/exampleSite/assets/img/favicon.png
deleted file mode 100644
index 74e8efae1bb8bf261283ba836e1300e80b4cf77b..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 1031
zcmV+i1o-=jP)<h;3K|Lk000e1NJLTq001BW001Be1^@s6b9#F800001b5ch_0Itp)
z=>Px&!AV3xR9HvFmrraIRUF4ZZ)P^8%RjYV5KO#KjKu_EG|?Le{shXwOH*7DY)k0L
znAAX^DG3Q{?S)=AwduAHSZwOSi-yF+a8m*zhS->3q?#pK(=8N=l-haknK!djmg(-y
zY+b`7d)oK=z0do--=FUjB>eiv2iLg^q6N#|E)ZKaybAhx-(1WJ_)VjK1TH%%_se6g
zUH6l?7IBOE#)g`dw2uL8KttU6(*N@a#w^R}?`b=DE6S!Sz`*!;!=uFqS%LUaLn`6M
zPc0L$sNszJ&^>XotLsrE9~A*k<wrLO<QE{CSF-VP8$F@1-#d|M|0Vq2GJsD%8{Q_B
z_!@YrKAZbqG!z|6?>xT$(2a7xPXYKRSKroq^I$^*0oJ?akyrvaIXIYhR@+y@VQ+qU
zJ?qkG%t9R#lETbg3is~CtkM(d)Y`YYTU+P7`UzHN^SRSNce%CJn(o~@utaRJcxJyB
zXZZZubwuoXJ<yvu^zjlv-`Ke(E#05O*{+o0$evw^Q$ZFdk>8DS+iK)1`}L}JraFWz
zxAe3fzU3V)doeeHragRmB^5_oc4H#pN)_c0$FT_jrWPEI-)v;nng%w%@k%wj(cVmF
zhwwVwqVs3C$(T(8fTSUi)04<6quiN;_DdF6f_-i8RJ)RSC*`ge*?cYoTnKOC0Vu`M
zy){H23?Kyi_E!Y}B@Y;YVW2Y#AZY~L=}A<11mXZ7CqBuKe6P`O)-wWyIp{D~5Cb3(
z*F`ozQUu*tj|c=gP?!^RToSPWAZE-JxPV>X2qXnSMgx?}Fli11Ww=xY@i|}sBCep;
zK2WLxlLMv<O-GEZ0&@kCNmye9f-0yn2_wp|#t5va472BlGFWzGBTAeDOIMIM2@gcK
z;?gjRpKd;)oW6~`a`s6pj?MwU6??-dpBsS+!$>K%zqXkdSEbpYA7Di)0*#vb8SBmu
z9>53jN$3wF1JHMFs7X6^#c^x~l9H15)eT<YaY>ex>jNWGgeNQ<+s3hBq6i;-Q@s=V
z<Jj3^6myv%89ohSnIJJk$^26CAJTe(n^%8j_U_*m)560LFg-7LEKM0gOXX=e(3|Oe
zB1nw4k_^9AO$i4eQ-vA+`eSyPKnvuWe<B}b^_m7YHE#^T>IwIud^?coD-xv!CdpSJ
zd5gN5C=DF`U$Pu1+HtZxfOw`4lK{e(>CPzu|M6+2&!kgpdjlCBzPebwZ4|STZtag#
z7_(g2-*fQr${wd-(vo;>0ivJhN?vxJ(}|zw{{r2`R|fRB=x+c3002ovPDHLkV1gf|
B+MNIZ

diff --git a/exampleSite/assets/img/logo.jpg b/exampleSite/assets/img/logo.jpg
deleted file mode 100644
index 145804ecd0f0bd39b70b904a6105e24a63e3cd3a..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 21951
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
Sh~rI0#)InsjF<TK`~Dvweo0^e

diff --git a/exampleSite/config.yaml b/exampleSite/config.yaml
new file mode 100644
index 0000000..c1b48dd
--- /dev/null
+++ b/exampleSite/config.yaml
@@ -0,0 +1,239 @@
+baseurl: https://example.com
+languageCode: en-us
+theme: hugo-theme-stack
+paginate: 5
+title: Example Site
+
+languages:
+    en:
+        languageName: English
+        title: Example Site
+        description: Example description
+        weight: 1
+    zh-cn:
+        languageName: 中文
+        title: 演示站点
+        description: 演示说明
+        weight: 2
+    ar:
+        languageName: عربي
+        languagedirection: rtl
+        title: موقع تجريبي
+        description: وصف تجريبي
+        weight: 3
+
+# Change it to your Disqus shortname before using
+disqusShortname: hugo-theme-stack
+
+# GA Tracking ID
+googleAnalytics:
+
+# Theme i18n support
+# Available values: ar, bn, ca, de, el, en, es, fr, hu, id, it, ja, ko, nl, pt-br, th, uk, zh-cn, zh-hk, zh-tw
+DefaultContentLanguage: en
+
+# Set hasCJKLanguage to true if DefaultContentLanguage is in [zh-cn ja ko]
+# This will make .Summary and .WordCount behave correctly for CJK languages.
+hasCJKLanguage: false
+
+permalinks:
+    post: /p/:slug/
+    page: /:slug/
+
+params:
+    mainSections:
+        - post
+    featuredImageField: image
+    rssFullContent: true
+    favicon:  # e.g.: favicon placed in `static/favicon.ico` of your site folder, then set this field to `/favicon.ico` (`/` is necessary)
+
+    footer:
+        since: 2020
+        customText:
+
+    dateFormat:
+        published: Jan 02, 2006
+        lastUpdated: Jan 02, 2006 15:04 MST
+
+    sidebar:
+        emoji: 🍥
+        subtitle: Lorem ipsum dolor sit amet, consectetur adipiscing elit.
+        avatar:
+            enabled: true
+            local: true
+            src: img/avatar.png
+
+    article:
+        math: false
+        toc: true
+        readingTime: true
+        license:
+            enabled: true
+            default: Licensed under CC BY-NC-SA 4.0
+
+    comments:
+        enabled: true
+        provider: disqus
+
+        disqusjs:
+            shortname:
+            apiUrl:
+            apiKey:
+            admin:
+            adminLabel:
+
+        utterances:
+            repo:
+            issueTerm: pathname
+            label:
+
+        remark42:
+            host:
+            site:
+            locale:
+
+        vssue:
+            platform:
+            owner:
+            repo:
+            clientId:
+            clientSecret:
+            autoCreateIssue: false
+
+        # Waline client configuration see: https://waline.js.org/en/reference/component.html
+        waline:
+            serverURL:
+            lang:
+            pageview:
+            emoji:
+                - https://unpkg.com/@waline/emojis@1.0.1/weibo
+            requiredMeta:
+                - name
+                - email
+                - url
+            locale:
+                admin: Admin
+                placeholder:
+
+        twikoo:
+            envId:
+            region:
+            path:
+            lang:
+
+        # See https://cactus.chat/docs/reference/web-client/#configuration for description of the various options
+        cactus:
+            defaultHomeserverUrl: "https://matrix.cactus.chat:8448"
+            serverName: "cactus.chat"
+            siteName: "" # You must insert a unique identifier here matching the one you registered (See https://cactus.chat/docs/getting-started/quick-start/#register-your-site)
+
+        giscus:
+            repo:
+            repoID:
+            category:
+            categoryID:
+            mapping:
+            lightTheme:
+            darkTheme:
+            reactionsEnabled: 1
+            emitMetadata: 0
+
+        gitalk:
+            owner:
+            admin:
+            repo:
+            clientID:
+            clientSecret:
+
+        cusdis:
+            host:
+            id:
+    widgets:
+        homepage:
+            - type: search
+            - type: archives
+              params:
+                  limit: 5
+            - type: categories
+              params:
+                  limit: 10
+            - type: tag-cloud
+              params:
+                  limit: 10
+        page:
+            - type: toc
+
+    opengraph:
+        twitter:
+            # Your Twitter username
+            site:
+
+            # Available values: summary, summary_large_image
+            card: summary_large_image
+
+    defaultImage:
+        opengraph:
+            enabled: false
+            local: false
+            src:
+
+    colorScheme:
+        # Display toggle
+        toggle: true
+
+        # Available values: auto, light, dark
+        default: auto
+
+    imageProcessing:
+        cover:
+            enabled: true
+        content:
+            enabled: true
+
+### Custom menu
+### See https://docs.stack.jimmycai.com/configuration/custom-menu.html
+### To remove about, archive and search page menu item, remove `menu` field from their FrontMatter
+menu:
+    main: []
+
+    social:
+        - identifier: github
+          name: GitHub
+          url: https://github.com/CaiJimmy/hugo-theme-stack
+          params:
+              icon: brand-github
+
+        - identifier: twitter
+          name: Twitter
+          url: https://twitter.com
+          params:
+              icon: brand-twitter
+
+related:
+    includeNewer: true
+    threshold: 60
+    toLower: false
+    indices:
+        - name: tags
+          weight: 100
+
+        - name: categories
+          weight: 200
+
+markup:
+    goldmark:
+        renderer:
+            ## Set to true if you have HTML content inside Markdown
+            unsafe: false
+    tableOfContents:
+        endLevel: 4
+        ordered: true
+        startLevel: 2
+    highlight:
+        noClasses: false
+        codeFences: true
+        guessSyntax: true
+        lineNoStart: 1
+        lineNos: true
+        lineNumbersInTable: true
+        tabWidth: 4
diff --git a/exampleSite/config/_default/config.toml b/exampleSite/config/_default/config.toml
deleted file mode 100644
index 548975a..0000000
--- a/exampleSite/config/_default/config.toml
+++ /dev/null
@@ -1,20 +0,0 @@
-# Change baseurl before deploy
-baseurl = "https://demo.stack.jimmycai.com"
-languageCode = "en-us"
-paginate = 5
-title = "Hugo Theme Stack Starter"
-theme = "hugo-theme-stack"
-
-# Theme i18n support
-# Available values: ar, bn, ca, de, el, en, es, fr, hu, id, it, ja, ko, nl, pt-br, th, uk, zh-cn, zh-hk, zh-tw
-DefaultContentLanguage = "en"
-
-# Set hasCJKLanguage to true if DefaultContentLanguage is in [zh-cn ja ko]
-# This will make .Summary and .WordCount behave correctly for CJK languages.
-hasCJKLanguage = false
-
-# Change it to your Disqus shortname before using
-disqusShortname = "hugo-theme-stack"
-
-# GA Tracking ID
-googleAnalytics = ""
diff --git a/exampleSite/config/_default/languages.toml b/exampleSite/config/_default/languages.toml
deleted file mode 100644
index ad80c20..0000000
--- a/exampleSite/config/_default/languages.toml
+++ /dev/null
@@ -1,16 +0,0 @@
-# Enable multilanguage site support
-[en]
-languageName = "English"
-title = "Hugo Theme Stack Example Site"
-weight = 1
-
-[zh-cn]
-languageName = "中文"
-title = "Hugo 主题 Stack 演示站点"
-weight = 2
-
-[ar]
-languageName = "عربي"
-languagedirection = "rtl"
-title = "موقع تجريبي"
-weight = 3
diff --git a/exampleSite/config/_default/markup.toml b/exampleSite/config/_default/markup.toml
deleted file mode 100644
index 591ce9e..0000000
--- a/exampleSite/config/_default/markup.toml
+++ /dev/null
@@ -1,18 +0,0 @@
-# Markdown renderer configuration
-[goldmark.renderer]
-# Set it to true if you have HTML content inside Markdown
-unsafe = false
-
-[tableOfContents]
-endLevel = 4
-ordered = true
-startLevel = 2
-
-[highlight]
-noClasses = false
-codeFences = true
-guessSyntax = true
-lineNoStart = 1
-lineNos = true
-lineNumbersInTable = true
-tabWidth = 4
diff --git a/exampleSite/config/_default/menu.toml b/exampleSite/config/_default/menu.toml
deleted file mode 100644
index e01b4f7..0000000
--- a/exampleSite/config/_default/menu.toml
+++ /dev/null
@@ -1,20 +0,0 @@
-### Custom menu
-### See https://docs.stack.jimmycai.com/configuration/custom-menu.html
-### To remove about, archive and search page menu item, remove `menu` field from their FrontMatter
-main = []
-
-[[social]]
-identifier = "github"
-name = "GitHub"
-url = "https://github.com/CaiJimmy/hugo-theme-stack"
-
-[social.params]
-icon = "brand-github"
-
-[[social]]
-identifier = "twitter"
-name = "Twitter"
-url = "https://twitter.com"
-
-[social.params]
-icon = "brand-twitter"
diff --git a/exampleSite/config/_default/params.toml b/exampleSite/config/_default/params.toml
deleted file mode 100644
index a87c986..0000000
--- a/exampleSite/config/_default/params.toml
+++ /dev/null
@@ -1,106 +0,0 @@
-mainSections = ["post"]
-featuredImageField = "image"
-rssFullContent = true
-favicon = "img/favicon.png"
-
-[footer]
-since = 2020
-
-[dateFormat]
-published = "Jan 02, 2006"
-lastUpdated = "Jan 02, 2006 15:04 MST"
-
-[sidebar]
-emoji = "🍥"
-subtitle = "Lorem ipsum dolor sit amet, consectetur adipiscing elit."
-
-[sidebar.avatar]
-enabled = true
-local = true
-src = "img/logo.jpg"
-
-[article]
-math = false
-toc = true
-readingTime = true
-
-[article.license]
-enabled = true
-default = "Licensed under CC BY-NC-SA 4.0"
-
-[comments]
-enabled = true
-provider = "disqus"
-
-[comments.disqusjs]
-
-[comments.utterances]
-issueTerm = "pathname"
-
-[comments.remark42]
-
-[comments.vssue]
-autoCreateIssue = false
-
-[comments.waline]
-emoji = ["https://unpkg.com/@waline/emojis@1.0.1/weibo"]
-requiredMeta = ["name", "email", "url"]
-
-[comments.waline.locale]
-admin = "Admin"
-
-[comments.twikoo]
-
-[comments.cactus]
-defaultHomeserverUrl = "https://matrix.cactus.chat:8448"
-serverName = "cactus.chat"
-siteName = ""
-
-[comments.giscus]
-reactionsEnabled = 1
-emitMetadata = 0
-
-[comments.gitalk]
-
-[comments.cusdis]
-
-[[widgets.homepage]]
-type = "search"
-
-[[widgets.homepage]]
-type = "archives"
-
-[widgets.homepage.params]
-limit = 5
-
-[[widgets.homepage]]
-type = "categories"
-
-[widgets.homepage.params]
-limit = 10
-
-[[widgets.homepage]]
-type = "tag-cloud"
-
-[widgets.homepage.params]
-limit = 10
-
-[[widgets.page]]
-type = "toc"
-
-[opengraph.twitter]
-card = "summary_large_image"
-
-[defaultImage.opengraph]
-enabled = false
-local = false
-
-[colorScheme]
-toggle = true
-default = "auto"
-
-[imageProcessing.cover]
-enabled = true
-
-[imageProcessing.content]
-enabled = true
\ No newline at end of file
diff --git a/exampleSite/config/_default/permalinks.toml b/exampleSite/config/_default/permalinks.toml
deleted file mode 100644
index 2499a7e..0000000
--- a/exampleSite/config/_default/permalinks.toml
+++ /dev/null
@@ -1,3 +0,0 @@
-# Permalinks format of each content section
-post = "/p/:slug/"
-page = "/:slug/"
\ No newline at end of file
diff --git a/exampleSite/config/_default/related.toml b/exampleSite/config/_default/related.toml
deleted file mode 100644
index be52654..0000000
--- a/exampleSite/config/_default/related.toml
+++ /dev/null
@@ -1,12 +0,0 @@
-# Related contents configuration
-includeNewer = true
-threshold = 60
-toLower = false
-
-[[indices]]
-name = "tags"
-weight = 100
-
-[[indices]]
-name = "categories"
-weight = 200
\ No newline at end of file
diff --git a/exampleSite/content/post/emoji-support/index.md b/exampleSite/content/post/emoji-support/index.md
new file mode 100644
index 0000000..bc3e348
--- /dev/null
+++ b/exampleSite/content/post/emoji-support/index.md
@@ -0,0 +1,50 @@
++++
+author = "Hugo Authors"
+title = "Emoji Support"
+date = "2019-03-05"
+description = "Guide to emoji usage in Hugo"
+categories = [
+    "Test"
+]
+tags = [
+    "emoji",
+]
+image = "the-creative-exchange-d2zvqp3fpro-unsplash.jpg"
++++
+
+Emoji can be enabled in a Hugo project in a number of ways. 
+<!--more-->
+The [`emojify`](https://gohugo.io/functions/emojify/) function can be called directly in templates or [Inline Shortcodes](https://gohugo.io/templates/shortcode-templates/#inline-shortcodes). 
+
+To enable emoji globally, set `enableEmoji` to `true` in your site's [configuration](https://gohugo.io/getting-started/configuration/) and then you can type emoji shorthand codes directly in content files; e.g.
+
+<p><span class="nowrap"><span class="emojify">🙈</span> <code>:see_no_evil:</code></span>  <span class="nowrap"><span class="emojify">🙉</span> <code>:hear_no_evil:</code></span>  <span class="nowrap"><span class="emojify">🙊</span> <code>:speak_no_evil:</code></span></p>
+<br>
+
+The [Emoji cheat sheet](http://www.emoji-cheat-sheet.com/) is a useful reference for emoji shorthand codes.
+
+***
+
+**N.B.** The above steps enable Unicode Standard emoji characters and sequences in Hugo, however the rendering of these glyphs depends on the browser and the platform. To style the emoji you can either use a third party emoji font or a font stack; e.g.
+
+{{< highlight html >}}
+.emoji {
+  font-family: Apple Color Emoji, Segoe UI Emoji, NotoColorEmoji, Segoe UI Symbol, Android Emoji, EmojiSymbols;
+}
+{{< /highlight >}}
+
+{{< css.inline >}}
+<style>
+.emojify {
+	font-family: Apple Color Emoji, Segoe UI Emoji, NotoColorEmoji, Segoe UI Symbol, Android Emoji, EmojiSymbols;
+	font-size: 2rem;
+	vertical-align: middle;
+}
+@media screen and (max-width:650px) {
+  .nowrap {
+    display: block;
+    margin: 25px 0;
+  }
+}
+</style>
+{{< /css.inline >}}
diff --git a/exampleSite/content/post/emoji-support/the-creative-exchange-d2zvqp3fpro-unsplash.jpg b/exampleSite/content/post/emoji-support/the-creative-exchange-d2zvqp3fpro-unsplash.jpg
new file mode 100644
index 0000000000000000000000000000000000000000..e34a59dba9f555f5d0fb25296c5aa76098cf5593
GIT binary patch
literal 35369
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
DX>Mr7

literal 0
HcmV?d00001

diff --git a/exampleSite/content/post/markdown-syntax/index.md b/exampleSite/content/post/markdown-syntax/index.md
index 752a655..0254cca 100644
--- a/exampleSite/content/post/markdown-syntax/index.md
+++ b/exampleSite/content/post/markdown-syntax/index.md
@@ -42,12 +42,12 @@ Itatur? Quiatae cullecum rem ent aut odis in re eossequodi nonsequ idebis ne sap
 
 The blockquote element represents content that is quoted from another source, optionally with a citation which must be within a `footer` or `cite` element, and optionally with in-line changes such as annotations and abbreviations.
 
-### Blockquote without attribution
+#### Blockquote without attribution
 
 > Tiam, ad mint andaepu dandae nostion secatur sequo quae.
 > **Note** that you can use *Markdown syntax* within a blockquote.
 
-### Blockquote with attribution
+#### Blockquote with attribution
 
 > Don't communicate by sharing memory, share memory by communicating.<br>
 > — <cite>Rob Pike[^1]</cite>
@@ -63,7 +63,7 @@ Tables aren't part of the core Markdown spec, but Hugo supports supports them ou
     Bob | 27
   Alice | 23
 
-### Inline Markdown within tables
+#### Inline Markdown within tables
 
 | Italics   | Bold     | Code   |
 | --------  | -------- | ------ |
@@ -74,7 +74,8 @@ Tables aren't part of the core Markdown spec, but Hugo supports supports them ou
 | Lorem ipsum dolor sit amet, consectetur adipiscing elit. | Phasellus ultricies, sapien non euismod aliquam, dui ligula tincidunt odio, at accumsan nulla sapien eget ex. | Proin eleifend dictum ipsum, non euismod ipsum pulvinar et. Vivamus sollicitudin, quam in pulvinar aliquam, metus elit pretium purus | Proin sit amet velit nec enim imperdiet vehicula. | Ut bibendum vestibulum quam, eu egestas turpis gravida nec | Sed scelerisque nec turpis vel viverra. Vivamus vitae pretium sapien |
 
 ## Code Blocks
-### Code block with backticks
+
+#### Code block with backticks
 
 ```html
 <!doctype html>
@@ -89,7 +90,7 @@ Tables aren't part of the core Markdown spec, but Hugo supports supports them ou
 </html>
 ```
 
-### Code block indented with four spaces
+#### Code block indented with four spaces
 
     <!doctype html>
     <html lang="en">
@@ -102,7 +103,21 @@ Tables aren't part of the core Markdown spec, but Hugo supports supports them ou
     </body>
     </html>
 
-### Diff code block
+#### Code block with Hugo's internal highlight shortcode
+{{< highlight html >}}
+<!doctype html>
+<html lang="en">
+<head>
+  <meta charset="utf-8">
+  <title>Example HTML5 Document</title>
+</head>
+<body>
+  <p>Test</p>
+</body>
+</html>
+{{< /highlight >}}
+
+#### Diff code block
 
 ```diff
 [dependencies.bevy]
@@ -112,27 +127,21 @@ rev = "11f52b8c72fc3a568e8bb4a4cd1f3eb025ac2e13"
 + features = ["jpeg", "dynamic"]
 ```
 
-### One line code block
-
-```html
-<p>A paragraph</p>
-```
-
 ## List Types
 
-### Ordered List
+#### Ordered List
 
 1. First item
 2. Second item
 3. Third item
 
-### Unordered List
+#### Unordered List
 
 * List item
 * Another item
 * And another item
 
-### Nested list
+#### Nested list
 
 * Fruit
   * Apple
diff --git a/go.mod b/go.mod
index e75e573..63df635 100644
--- a/go.mod
+++ b/go.mod
@@ -1,3 +1,3 @@
-module github.com/CaiJimmy/hugo-theme-stack/v4
+module github.com/CaiJimmy/hugo-theme-stack/v3
 
 go 1.17
diff --git a/i18n/ar.yaml b/i18n/ar.yaml
index 61e0262..63101aa 100644
--- a/i18n/ar.yaml
+++ b/i18n/ar.yaml
@@ -1,45 +1,74 @@
-toggleMenu: اخفي القائمة
+toggleMenu:
+    other: اخفي القائمة
 
-darkMode: الوضع الداكن
+darkMode:
+    other: الوضع الداكن
 
 list:
     page:
         one: "{{ .Count }} صفحه"
         other: "{{ .Count }} صفحات"
-    section: قسم
+
+    section:
+        other: قسم
+
     subsection:
         one: قسم فرعي
         other: اقسام فرعية
 
 article:
-    back: خلف
-    tableOfContents: جدول المحتويات
-    relatedContent: محتوى مشابهه
-    lastUpdatedOn: التعديل الاخير
+    back:
+        other: خلف
+
+    tableOfContents:
+        other: جدول المحتويات
+
+    relatedContent:
+        other: محتوى مشابهه
+        
+    lastUpdatedOn:
+        other: التعديل الاخير
+
     readingTime:
         one: "تُقرأ خلال دقيقة"
         other: "تُقرأ خلال {{ .Count }} دقائق"
 
 notFound:
-    title: غير موجود
-    subtitle: تعذر العثور على الصفحة المطلوبة.
+    title:
+        other: غير موجود
+
+    subtitle:
+        other: تعذر العثور على الصفحة المطلوبة.
 
 widget:
     archives:
-        title: الارشيفات
-        more: اكثر
+        title:
+            other: الارشيفات
+
+        more:
+            other: اكثر
 
     tagCloud:
-        title: وسوم
-
+        title:
+            other: وسوم
+            
     categoriesCloud:
-        title: التصنيفات
+        title:
+            other: التصنيفات
 
 search:
-    title: بحث
-    placeholder: اكتب...
-    resultTitle: "#PAGES_COUNT نتيجة (#TIME_SECONDS ثواني)"
+    title:
+        other: بحث
+
+    placeholder:
+        other: اكتب...
+
+    resultTitle:
+        other: "#PAGES_COUNT نتيجة (#TIME_SECONDS ثواني)"
 
 footer:
-    builtWith: "مبني بستخدام {{ .Generator }}"
-    designedBy: "قالب {{ .Theme }} مصمم من {{ .DesignedBy }}"
+    builtWith:
+        other: "مبني بستخدام {{ .Generator }}"
+        
+    designedBy:
+        other:  "قالب {{ .Theme }} مصمم من {{ .DesignedBy }}"
diff --git a/i18n/bn.yaml b/i18n/bn.yaml
index 0e3e511..36f25a3 100644
--- a/i18n/bn.yaml
+++ b/i18n/bn.yaml
@@ -1,52 +1,73 @@
-toggleMenu: টগল মেনু
+toggleMenu:
+    other: টগল মেনু
 
-darkMode: ডার্ক মোড
+darkMode:
+    other: ডার্ক মোড
 
 list:
     page:
         one: "{{ .Count }} পাতা"
         other: "{{ .Count }} পাতা"
 
-    section: অনুচ্ছেদ
+    section:
+        other: অনুচ্ছেদ
 
     subsection:
         one: উপ-অনুচ্ছেদ
         other: উপ-অনুচ্ছেদ
 
 article:
-    back: পেছনে
+    back:
+        other: পেছনে
 
-    tableOfContents: সূচিপত্র
+    tableOfContents:
+        other: সূচিপত্র
 
-    relatedContent: সম্পর্কিত বিষয়বস্তু
+    relatedContent:
+        other: সম্পর্কিত বিষয়বস্তু
 
-    lastUpdatedOn: সর্বশেষ আপডেট করা হয়েছে
+    lastUpdatedOn:
+        other: সর্বশেষ আপডেট করা হয়েছে
 
     readingTime:
         one: "{{ .Count }} মিনিটে পড়া যাবে"
         other: "{{ .Count }} মিনিটে পড়া যাবে"
 
 notFound:
-    title: পাওয়া যায়নি
+    title:
+        other: পাওয়া যায়নি
 
-    subtitle: এই পাতাটি বিদ্যমান নেই
+    subtitle:
+        other: এই পাতাটি বিদ্যমান নেই
 
 widget:
     archives:
-        title: আর্কাইভ
-        more: আরও
+        title:
+            other: আর্কাইভ
+
+        more:
+            other: আরও
+
     tagCloud:
-        title: ট্যাগ
+        title:
+            other: ট্যাগ
     categoriesCloud:
-        title: বিভাগ
+        title:
+            other: বিভাগ
 
 search:
-    title: অনুসন্ধান
+    title:
+        other: অনুসন্ধান
 
-    placeholder: কিছু টাইপ করুন...
+    placeholder:
+        other: কিছু টাইপ করুন...
 
-    resultTitle: "#PAGES_COUNT পাতা (#TIME_SECONDS সেকেন্ড)"
+    resultTitle:
+        other: "#PAGES_COUNT পাতা (#TIME_SECONDS সেকেন্ড)"
 
 footer:
-    builtWith: "{{ .Generator }} দিয়ে নির্মিত"
-    designedBy: "থিম {{ .Theme }} ডিজাইন করেছেন {{ .DesignedBy }}"
+    builtWith:
+        other: "{{ .Generator }} দিয়ে নির্মিত"
+
+    designedBy:
+        other: "থিম {{ .Theme }} ডিজাইন করেছেন {{ .DesignedBy }}"
diff --git a/i18n/ca.yaml b/i18n/ca.yaml
index da2428b..af4167e 100644
--- a/i18n/ca.yaml
+++ b/i18n/ca.yaml
@@ -1,43 +1,73 @@
-toggleMenu: Toggle Menu
+toggleMenu:
+    other: Toggle Menu
 
-darkMode: Mode fosc
+darkMode:
+    other: Mode fosc
 
 list:
     page:
         one: "{{ .Count }} pàgina"
         other: "{{ .Count }} pàgines"
-    section: Secció
+
+    section:
+        other: Secció
+
     subsection:
         one: Subsecció
         other: Subseccions
 
 article:
-    back: Tornar
-    tableOfContents: Taula de contingut
-    relatedContent: Continguts relacionats
-    lastUpdatedOn: Última vegada actualitzat
+    back:
+        other: Tornar
+
+    tableOfContents:
+        other: Taula de contingut
+
+    relatedContent:
+        other: Continguts relacionats
+
+    lastUpdatedOn:
+        other: Última vegada actualitzat
+
     readingTime:
         one: "{{ .Count }} minut a llegir"
         other: "{{ .Count }} minuts a llegir"
 
 notFound:
-    title: No Trobat
-    subtitle: Aquesta pàgina no existeix
+    title:
+        other: No Trobat
+
+    subtitle:
+        other: Aquesta pàgina no existeix
 
 widget:
     archives:
-        title: Arxiu
-        more: Més
+        title:
+            other: Arxiu
+
+        more:
+            other: Més
+
     tagCloud:
-        title: Etiquetes
+        title:
+            other: Etiquetes
     categoriesCloud:
-        title: Categories
+        title:
+            other: Categories
 
 search:
-    title: Cerca
-    placeholder: Tecleja alguna cosa...
-    resultTitle: "#PAGES_COUNT pàgines en (#TIME_SECONDS segons)"
+    title:
+        other: Cerca
+
+    placeholder:
+        other: Tecleja alguna cosa...
+
+    resultTitle:
+        other: "#PAGES_COUNT pàgines en (#TIME_SECONDS segons)"
 
 footer:
-    builtWith: Creat amb {{ .Generator }}
-    designedBy: Tema {{ .Theme }} dissenyat per {{ .DesignedBy }}
+    builtWith:
+        other: Creat amb {{ .Generator }}
+
+    designedBy:
+        other: Tema {{ .Theme }} dissenyat per {{ .DesignedBy }}
diff --git a/i18n/de.yaml b/i18n/de.yaml
index ff0e351..7ab5b56 100644
--- a/i18n/de.yaml
+++ b/i18n/de.yaml
@@ -1,43 +1,74 @@
-toggleMenu: Menü umschalten
+toggleMenu:
+    other: Menü umschalten
 
-darkMode: Dunkler Modus
+darkMode:
+    other: Dunkler Modus
 
 list:
     page:
         one: "{{ .Count }} Seite"
         other: "{{ .Count }} Seiten"
-    section: Abschnitt
+
+    section:
+        other: Abschnitt
+
     subsection:
         one: Unterabschnitt
         other: Unterabschnitte
 
 article:
-    back: Zurück
-    tableOfContents: Inhaltsverzeichnis
-    relatedContent: Verwandte Inhalte
-    lastUpdatedOn: Zuletzt aktualisiert am
+    back:
+        other: Zurück
+
+    tableOfContents:
+        other: Inhaltsverzeichnis
+
+    relatedContent:
+        other: Verwandte Inhalte
+
+    lastUpdatedOn:
+        other: Zuletzt aktualisiert am
+
     readingTime:
         one: "{{ .Count }} Minute Lesezeit"
         other: "{{ .Count }} Minuten Lesezeit"
 
 notFound:
-    title: Seite nicht gefunden
-    subtitle: Diese Seite existiert nicht
+    title:
+        other: Seite nicht gefunden
+
+    subtitle:
+        other: Diese Seite existiert nicht
 
 widget:
     archives:
-        title: Archiv
-        more: Weitere
+        title:
+            other: Archiv
+
+        more:
+            other: Weitere
+
     tagCloud:
-        title: Schlagwörter
+        title:
+            other: Schlagwörter
+
     categoriesCloud:
-        title: Kategorien
+        title:
+            other: Kategorien
 
 search:
-    title: Suche
-    placeholder: Etwas tippen...
-    resultTitle: "#PAGES_COUNT Seiten (#TIME_SECONDS Sekunden)"
+    title:
+        other: Suche
+
+    placeholder:
+        other: Etwas tippen...
+
+    resultTitle:
+        other: "#PAGES_COUNT Seiten (#TIME_SECONDS Sekunden)"
 
 footer:
-    builtWith: Erstellt mit {{ .Generator }}
-    designedBy: Theme {{ .Theme }} gestaltet von {{ .DesignedBy }}
+    builtWith:
+        other: Erstellt mit {{ .Generator }}
+
+    designedBy:
+        other: Theme {{ .Theme }} gestaltet von {{ .DesignedBy }}
diff --git a/i18n/el.yaml b/i18n/el.yaml
index 486914a..27a147d 100644
--- a/i18n/el.yaml
+++ b/i18n/el.yaml
@@ -1,41 +1,70 @@
-toggleMenu: Εναλλαγή Μενού
+toggleMenu:
+    other: Εναλλαγή Μενού
 
-darkMode: Σκοτεινό θέμα
+darkMode:
+    other: Σκοτεινό θέμα
 
 list:
     page:
         one: "{{ .Count }} σελιδα"
         other: "{{ .Count }} σελιδες"
-    section: Ενότητα
+
+    section:
+        other: Ενότητα
+
     subsection:
         one: Υποενότητα
         other: Υποενότητες
 
 article:
-    back: Πισω
-    tableOfContents: Πινακας περιεχομενων
-    relatedContent: Σχετικο περιεχομενο
-    lastUpdatedOn: Τελευταια τροποποιηση στις
+    back:
+        other: Πισω
+
+    tableOfContents:
+        other: Πινακας περιεχομενων
+
+    relatedContent:
+        other: Σχετικο περιεχομενο
+
+    lastUpdatedOn:
+        other: Τελευταια τροποποιηση στις
+
     readingTime:
         one: "{{ .Count }} λεπτό ανάγνωσης"
+        ### Seems that there's no need to add 's' even if it's plural in English
         other: "{{ .Count }} λεπτά ανάγνωσης"
 
 notFound:
-    title: Δε βρέθηκε
-    subtitle: Η σελίδα δε βρέθηκε.
+    title:
+        other: Δε βρέθηκε
+    subtitle:
+        other: Η σελίδα δε βρέθηκε.
 
 widget:
     archives:
-        title: Αρχειο
-        more: Περισσότερα
+        title:
+            other: Αρχειο
+
+        more:
+            other: Περισσότερα
+
     tagCloud:
-        title: Tags
+        title:
+            other: Tags
 
 search:
-    title: Αναζήτηση
-    placeholder: Πληκτρολογήστε κάτι...
-    resultTitle: "#PAGES_COUNT σελιδες (#TIME_SECONDS δευτερολεπτα)"
+    title:
+        other: Αναζήτηση
+
+    placeholder:
+        other: Πληκτρολογήστε κάτι...
+
+    resultTitle:
+        other: "#PAGES_COUNT σελιδες (#TIME_SECONDS δευτερολεπτα)"
 
 footer:
-    builtWith: Δημιουργήθηκε με τη χρήση {{ .Generator }}
-    designedBy: Το θέμα {{ .Theme }} σχεδιάστηκε από το {{ .DesignedBy }}
+    builtWith:
+        other: Δημιουργήθηκε με τη χρήση {{ .Generator }}
+
+    designedBy:
+        other: Το θέμα {{ .Theme }} σχεδιάστηκε από το {{ .DesignedBy }}
diff --git a/i18n/en.yaml b/i18n/en.yaml
index 3f94ab1..fb07328 100644
--- a/i18n/en.yaml
+++ b/i18n/en.yaml
@@ -1,46 +1,73 @@
-toggleMenu: Toggle Menu
+toggleMenu:
+    other: Toggle Menu
 
-darkMode: Dark Mode
+darkMode:
+    other: Dark Mode
 
 list:
     page:
         one: "{{ .Count }} page"
         other: "{{ .Count }} pages"
-    section: Section
+
+    section:
+        other: Section
+
     subsection:
         one: Subsection
         other: Subsections
 
 article:
-    back: Back
-    tableOfContents: Table of contents
-    relatedContent: Related content
-    lastUpdatedOn: Last updated on
+    back:
+        other: Back
+
+    tableOfContents:
+        other: Table of contents
+
+    relatedContent:
+        other: Related content
+
+    lastUpdatedOn:
+        other: Last updated on
+
     readingTime:
         one: "{{ .Count }} minute read"
         other: "{{ .Count }} minute read"
-    codeblock:
-        copy: Copy
-        copied: Copied!
 
 notFound:
-    title: Not Found
-    subtitle: This page does not exist
+    title:
+        other: Not Found
+
+    subtitle:
+        other: This page does not exist
 
 widget:
     archives:
-        title: Archives
-        more: More
+        title:
+            other: Archives
+
+        more:
+            other: More
+
     tagCloud:
-        title: Tags
+        title:
+            other: Tags
     categoriesCloud:
-        title: Categories
+        title:
+            other: Categories
 
 search:
-    title: Search
-    placeholder: Type something...
-    resultTitle: "#PAGES_COUNT pages (#TIME_SECONDS seconds)"
+    title:
+        other: Search
+
+    placeholder:
+        other: Type something...
+
+    resultTitle:
+        other: "#PAGES_COUNT pages (#TIME_SECONDS seconds)"
 
 footer:
-    builtWith: Built with {{ .Generator }}
-    designedBy: Theme {{ .Theme }} designed by {{ .DesignedBy }}
+    builtWith:
+        other: Built with {{ .Generator }}
+
+    designedBy:
+        other: Theme {{ .Theme }} designed by {{ .DesignedBy }}
diff --git a/i18n/es.yaml b/i18n/es.yaml
index 5614e98..76995da 100644
--- a/i18n/es.yaml
+++ b/i18n/es.yaml
@@ -1,43 +1,73 @@
-toggleMenu: Toggle Menu
+toggleMenu:
+    other: Toggle Menu
 
-darkMode: Modo oscuro
+darkMode:
+    other: Modo oscuro
 
 list:
     page:
         one: "{{ .Count }} página"
         other: "{{ .Count }} páginas"
-    section: Sección
+
+    section:
+        other: Sección
+
     subsection:
         one: Subsección
         other: Subsecciones
 
 article:
-    back: Volver
-    tableOfContents: Tabla de contenido
-    relatedContent: Contenidos relacionados
-    lastUpdatedOn: Última vez actualizado
+    back:
+        other: Volver
+
+    tableOfContents:
+        other: Tabla de contenido
+
+    relatedContent:
+        other: Contenidos relacionados
+
+    lastUpdatedOn:
+        other: Última vez actualizado
+
     readingTime:
         one: "{{ .Count }} minuto a leer"
         other: "{{ .Count }} minutos a leer"
 
 notFound:
-    title: No Encontrado
-    subtitle: Esta página no existe
+    title:
+        other: No Encontrado
+
+    subtitle:
+        other: Esta página no existe
 
 widget:
     archives:
-        title: Archivo
-        more: Más
+        title:
+            other: Archivo
+
+        more:
+            other: Más
+
     tagCloud:
-        title: Etiquetas
+        title:
+            other: Etiquetas
     categoriesCloud:
-        title: Categorías
+        title:
+            other: Categorías
 
 search:
-    title: Búsqueda
-    placeholder: Teclea algo...
-    resultTitle: "#PAGES_COUNT páginas en (#TIME_SECONDS segundos)"
+    title:
+        other: Búsqueda
+
+    placeholder:
+        other: Teclea algo...
+
+    resultTitle:
+        other: "#PAGES_COUNT páginas en (#TIME_SECONDS segundos)"
 
 footer:
-    builtWith: Creado con {{ .Generator }}
-    designedBy: Tema {{ .Theme }} diseñado por {{ .DesignedBy }}
+    builtWith:
+        other: Creado con {{ .Generator }}
+
+    designedBy:
+        other: Tema {{ .Theme }} diseñado por {{ .DesignedBy }}
diff --git a/i18n/fa.yaml b/i18n/fa.yaml
index 9de30b5..3655757 100644
--- a/i18n/fa.yaml
+++ b/i18n/fa.yaml
@@ -1,43 +1,73 @@
-toggleMenu: منو
+toggleMenu:
+    other: منو
 
-darkMode: حالت شب
+darkMode:
+    other: حالت شب
 
 list:
     page:
         one: "{{ .Count }} صفحه"
         other: "{{ .Count }} صفحه"
-    section: بخش
+
+    section:
+        other: بخش
+
     subsection:
         one: زیربخش
         other: زیربخش
 
 article:
-    back: قبلی
-    tableOfContents: فهرست
-    relatedContent: مطالب مرتبط
-    lastUpdatedOn: آخرین بروزرسانی در
+    back:
+        other: قبلی
+
+    tableOfContents:
+        other: فهرست
+
+    relatedContent:
+        other: مطالب مرتبط
+
+    lastUpdatedOn:
+        other: آخرین بروزرسانی در
+
     readingTime:
         one: "مطالعه در {{ .Count }} دقیقه"
         other: "مطالعه در {{ .Count }} دقیقه"
 
 notFound:
-    title: یافت نشد
-    subtitle: این صحه وجود ندارد
+    title:
+        other: یافت نشد
+
+    subtitle:
+        other: این صحه وجود ندارد
 
 widget:
     archives:
-        title: آرشیو
-        more: بیشتر
+        title:
+            other: آرشیو
+
+        more:
+            other: بیشتر
+
     tagCloud:
-        title: تگ ها
+        title:
+            other: تگ ها
     categoriesCloud:
-        title: دسته بندی
+        title:
+            other: دسته بندی
 
 search:
-    title: جستجو
-    placeholder: تایپ کنید ...
-    resultTitle: "#PAGES_COUNT صفحه (#TIME_SECONDS ثانیه)"
+    title:
+        other: جستجو
+
+    placeholder:
+        other: تایپ کنید ...
+
+    resultTitle:
+        other: "#PAGES_COUNT صفحه (#TIME_SECONDS ثانیه)"
 
 footer:
-    builtWith: قدرت گرفته از {{ .Generator }}
-    designedBy: قالب {{ .Theme }} ساخته شده توسط {{ .DesignedBy }}
+    builtWith:
+        other: قدرت گرفته از {{ .Generator }}
+
+    designedBy:
+        other: قالب {{ .Theme }} ساخته شده توسط {{ .DesignedBy }}
diff --git a/i18n/fr.yaml b/i18n/fr.yaml
index f18805c..c3feb1d 100644
--- a/i18n/fr.yaml
+++ b/i18n/fr.yaml
@@ -1,41 +1,69 @@
-toggleMenu: Afficher le menu
+toggleMenu:
+    other: Afficher le menu
 
-darkMode: Mode sombre
+darkMode:
+    other: Mode sombre
 
 list:
     page:
         one: "{{ .Count }} page"
         other: "{{ .Count }} pages"
-    section: Section
+
+    section:
+        other: Section
+
     subsection:
         one: Sous-section
         other: Sous-sections
 
 article:
-    back: Retour
-    tableOfContents: Table des matières
-    relatedContent: Contenus liés
-    lastUpdatedOn: Dernière mise à jour le
+    back:
+        other: Retour
+
+    tableOfContents:
+        other: Table des matières
+
+    relatedContent:
+        other: Contenus liés
+
+    lastUpdatedOn:
+        other: Dernière mise à jour le
+
     readingTime:
         one: "{{ .Count }} minute de lecture"
         other: "{{ .Count }} minutes de lecture"
 
 notFound:
-    title: Page non trouvée
-    subtitle: Cette page n'existe pas.
+    title:
+        other: Page non trouvée
+    subtitle:
+        other: Cette page n'existe pas.
 
 widget:
     archives:
-        title: Archives
-        more: Autres
+        title:
+            other: Archives
+
+        more:
+            other: Autres
+
     tagCloud:
-        title: Mots clés
+        title:
+            other: Mots clés
 
 search:
-    title: Rechercher
-    placeholder: Cherchez un article, une publication, etc.
-    resultTitle: "#PAGES_COUNT pages (#TIME_SECONDS secondes)"
+    title:
+        other: Rechercher
+
+    placeholder:
+        other: Cherchez un article, une publication, etc.
+
+    resultTitle:
+        other: "#PAGES_COUNT pages (#TIME_SECONDS secondes)"
 
 footer:
-    builtWith: Généré avec {{ .Generator }}
-    designedBy: Thème {{ .Theme }} conçu par {{ .DesignedBy }}
+    builtWith:
+        other: Généré avec {{ .Generator }}
+
+    designedBy:
+        other: Thème {{ .Theme }} conçu par {{ .DesignedBy }}
diff --git a/i18n/hu.yaml b/i18n/hu.yaml
index 0e8c6e5..5e5af92 100644
--- a/i18n/hu.yaml
+++ b/i18n/hu.yaml
@@ -1,43 +1,73 @@
-toggleMenu: Menü Kapcsolása
+toggleMenu:
+    other: Menü Kapcsolása
 
-darkMode: Sötét Mód
+darkMode:
+    other: Sötét Mód
 
 list:
     page:
         one: "{{ .Count }} oldal"
         other: "{{ .Count }} oldalak"
-    section: Szekció
+
+    section:
+        other: Szekció
+
     subsection:
         one: Alszekció
         other: Alszekciók
 
 article:
-    back: Vissza
-    tableOfContents: Tartalomjegyzék
-    relatedContent: Kapcsolódó tartalom
-    lastUpdatedOn: Utolsó frissítés időpontja
+    back:
+        other: Vissza
+
+    tableOfContents:
+        other: Tartalomjegyzék
+
+    relatedContent:
+        other: Kapcsolódó tartalom
+
+    lastUpdatedOn:
+        other: Utolsó frissítés időpontja
+
     readingTime:
         one: "{{ .Count }} percnyi olvasmány"
         other: "{{ .Count }} percnyi olvasmány"
 
 notFound:
-    title: Nem található
-    subtitle: Ez az oldal nem létezik
+    title:
+        other: Nem található
+
+    subtitle:
+        other: Ez az oldal nem létezik
 
 widget:
     archives:
-        title: Archívum
-        more: Több
+        title:
+            other: Archívum
+
+        more:
+            other: Több
+
     tagCloud:
-        title: Cimkék
+        title:
+            other: Cimkék
     categoriesCloud:
-        title: Kategóriák
+        title:
+            other: Kategóriák
 
 search:
-    title: Keresés
-    placeholder: Írj valamit...
-    resultTitle: "#PAGES_COUNT oldal (#TIME_SECONDS másodperc alatt)"
+    title:
+        other: Keresés
+
+    placeholder:
+        other: Írj valamit...
+
+    resultTitle:
+        other: "#PAGES_COUNT oldal (#TIME_SECONDS másodperc alatt)"
 
 footer:
-    builtWith: "{{ .Generator }} használatával készült"
-    designedBy: A {{ .Theme }} dizájnt {{ .DesignedBy }} tervezte
+    builtWith:
+        other: "{{ .Generator }} használatával készült"
+
+    designedBy:
+        other: A {{ .Theme }} dizájnt {{ .DesignedBy }} tervezte
diff --git a/i18n/id.yaml b/i18n/id.yaml
index 42e9461..8104351 100644
--- a/i18n/id.yaml
+++ b/i18n/id.yaml
@@ -1,43 +1,73 @@
-toggleMenu: Tampilkan Menu
+toggleMenu:
+    other: Tampilkan Menu
 
-darkMode: Mode Gelap
+darkMode:
+    other: Mode Gelap
 
 list:
     page:
         one: "{{ .Count }} halaman"
         other: "{{ .Count }} halaman"
-    section: Bagian
+
+    section:
+        other: Bagian
+
     subsection:
         one: Subbagian
         other: Subbagian
 
 article:
-    back: Kembali
-    tableOfContents: Daftar Isi
-    relatedContent: Konten terkait
-    lastUpdatedOn: Terakhir diperbarui pada
+    back:
+        other: Kembali
+
+    tableOfContents:
+        other: Daftar Isi
+
+    relatedContent:
+        other: Konten terkait
+
+    lastUpdatedOn:
+        other: Terakhir diperbarui pada
+
     readingTime:
         one: "Waktu Membaca: {{ .Count }} menit"
         other: "Waktu Membaca: {{ .Count }} menit"
 
 notFound:
-    title: Tidak ditemukan
-    subtitle: Halaman yang Anda akses tidak ditemukan.
+    title:
+        other: Tidak ditemukan
+    subtitle:
+        other: Halaman yang Anda akses tidak ditemukan.
 
 widget:
     archives:
-        title: Arsip
-        more: Lebih
+        title:
+            other: Arsip
+
+        more:
+            other: Lebih
+
     tagCloud:
-        title: Tag
+        title:
+            other: Tag
+
     categoriesCloud:
-        title: Kategori
+        title:
+            other: Kategori
 
 search:
-    title: Cari
-    placeholder: Ketik sesuatu...
-    resultTitle: "#PAGES_COUNT halaman (#TIME_SECONDS detik)"
+    title:
+        other: Cari
+
+    placeholder:
+        other: Ketik sesuatu...
+
+    resultTitle:
+        other: "#PAGES_COUNT halaman (#TIME_SECONDS detik)"
 
 footer:
-    builtWith: Dibangun dengan {{ .Generator }}
-    designedBy: Tema {{ .Theme }} dirancang oleh {{ .DesignedBy }}
+    builtWith:
+        other: Dibangun dengan {{ .Generator }}
+
+    designedBy:
+        other: Tema {{ .Theme }} dirancang oleh {{ .DesignedBy }}
diff --git a/i18n/it.yaml b/i18n/it.yaml
index 81f3fb4..0cbeeab 100644
--- a/i18n/it.yaml
+++ b/i18n/it.yaml
@@ -1,43 +1,73 @@
-toggleMenu: Toggle Menu
+toggleMenu:
+    other: Toggle Menu
 
-darkMode: Dark Mode
+darkMode:
+    other: Dark Mode
 
 list:
     page:
         one: "{{ .Count }} pagina"
         other: "{{ .Count }} pagine"
-    section: Sezione
+
+    section:
+        other: Sezione
+
     subsection:
         one: Sottosezione
         other: Sottosezioni
 
 article:
-    back: Indietro
-    tableOfContents: Indice
-    relatedContent: Contenuti correlati
-    lastUpdatedOn: Aggiornato il
+    back:
+        other: Indietro
+
+    tableOfContents:
+        other: Indice
+
+    relatedContent:
+        other: Contenuti correlati
+
+    lastUpdatedOn:
+        other: Aggiornato il
+
     readingTime:
         one: "{{ .Count }} min per leggere"
         other: "{{ .Count }} min per leggere"
 
 notFound:
-    title: Non trovato
-    subtitle: Questa pagina non esiste.
+    title:
+        other: Non trovato
+    subtitle:
+        other: Questa pagina non esiste.
 
 widget:
     archives:
-        title: Archivi
-        more: Di più
+        title:
+            other: Archivi
+
+        more:
+            other: Di più
+
     tagCloud:
-        title: Tags
+        title:
+            other: Tags
+
     categoriesCloud:
-        title: Categorie
+        title:
+            other: Categorie
 
 search:
-    title: Cerca
-    placeholder: Scrivi qualcosa...
-    resultTitle: "#PAGES_COUNT pagine (#TIME_SECONDS secondi)"
+    title:
+        other: Cerca
+
+    placeholder:
+        other: Scrivi qualcosa...
+
+    resultTitle:
+        other: "#PAGES_COUNT pagine (#TIME_SECONDS secondi)"
 
 footer:
-    builtWith: Realizzato con {{ .Generator }}
-    designedBy: Tema {{ .Theme }} realizzato da {{ .DesignedBy }}
+    builtWith:
+        other: Realizzato con {{ .Generator }}
+
+    designedBy:
+        other: Tema {{ .Theme }} realizzato da {{ .DesignedBy }}
diff --git a/i18n/ja.yaml b/i18n/ja.yaml
index 4a1c85f..40380fd 100644
--- a/i18n/ja.yaml
+++ b/i18n/ja.yaml
@@ -1,32 +1,60 @@
-toggleMenu: メニューを開く・閉じる
+toggleMenu:
+    other: メニューを開く・閉じる
 
-darkMode: ダークモード
+darkMode:
+    other: ダークモード
 
 article:
-    back: 前のページ
-    tableOfContents: 目次
-    relatedContent: 関連するコンテンツ
-    lastUpdatedOn: 最終更新
-    readingTime: "読了時間: {{ .Count }}分"
+    back:
+        other: 前のページ
+
+    tableOfContents:
+        other: 目次
+
+    relatedContent:
+        other: 関連するコンテンツ
+
+    lastUpdatedOn:
+        other: 最終更新
+
+    readingTime:
+        other: "読了時間: {{ .Count }}分"
 
 notFound:
-    title: 404 Not Found
-    subtitle: 指定されたページは存在しません。
+    title:
+        other: 404 Not Found
+    subtitle:
+        other: 指定されたページは存在しません。
 
 widget:
     archives:
-        title: アーカイブ
-        more: さらに見る
+        title:
+            other: アーカイブ
+
+        more:
+            other: さらに見る
+
     tagCloud:
-        title: タグ
+        title:
+            other: タグ
+
     categoriesCloud:
-        title: カテゴリ
+        title:
+            other: カテゴリ
 
 search:
-    title: 検索
-    placeholder: 入力...
-    resultTitle: "#PAGES_COUNT 件 (#TIME_SECONDS 秒)"
+    title:
+        other: 検索
+
+    placeholder:
+        other: 入力...
+
+    resultTitle:
+        other: "#PAGES_COUNT 件 (#TIME_SECONDS 秒)"
 
 footer:
-    builtWith: Built with {{ .Generator }}
-    designedBy: テーマ {{ .Theme }} は {{ .DesignedBy }} によって設計されています。
+    builtWith:
+        other: Built with {{ .Generator }}
+
+    designedBy:
+        other: テーマ {{ .Theme }} は {{ .DesignedBy }} によって設計されています。
diff --git a/i18n/ko.yaml b/i18n/ko.yaml
index 05c0530..11cdc4a 100644
--- a/i18n/ko.yaml
+++ b/i18n/ko.yaml
@@ -1,45 +1,72 @@
-toggleMenu: 메뉴 여닫기
+toggleMenu:
+    other: 메뉴 여닫기
 
-darkMode: 다크 모드
+darkMode:
+    other: 다크 모드
 
 list:
     page:
         one: "{{ .Count }} 페이지"
         other: "{{ .Count }} 페이지"
-    section: 섹션
+
+    section:
+        other: 섹션
+
     subsection:
         one: 서브섹션
         other: 서브섹션
 
 article:
-    back: 뒤로가기
-    tableOfContents: 목차
-    relatedContent: 관련 글
-    lastUpdatedOn: "마지막 수정: "
+    back:
+        other: 뒤로가기
+
+    tableOfContents:
+        other: 목차
+        
+    relatedContent:
+        other: 관련 글
+        
+    lastUpdatedOn:
+        other: "마지막 수정: "
+        
     readingTime:
         one: "{{ .Count }} 분 정도"
         other: "{{ .Count }} 분 정도"
 
 notFound:
-    title: 찾을 수 없음
-    subtitle: 페이지를 찾을 수 없습니다.
+    title:
+        other: 찾을 수 없음
+        
+    subtitle:
+        other: 페이지를 찾을 수 없습니다.
 
 widget:
     archives:
-        title: 보관함
-        more: 더보기
+        title:
+            other: 보관함
+        more:
+            other: 더보기
             
     categoriesCloud:
-        title: 카테고리
+        title:
+            other: 카테고리
             
     tagCloud:
-        title: 태그
+        title:
+            other: 태그
 
 search:
-    title: 검색
-    placeholder: 검색어를 입력하세요...
-    resultTitle: "#PAGES_COUNT 페이지 (#TIME_SECONDS 초)"
+    title:
+        other: 검색
+        
+    placeholder:
+        other: 검색어를 입력하세요...
+        
+    resultTitle:
+        other: "#PAGES_COUNT 페이지 (#TIME_SECONDS 초)"
 
 footer:
-    builtWith: "{{ .Generator }}로 만듦"
-    designedBy: "{{ .DesignedBy }}의 {{ .Theme }} 테마 사용 중"
+    builtWith:
+        other: "{{ .Generator }}로 만듦"
+    designedBy:
+        other: "{{ .DesignedBy }}의 {{ .Theme }} 테마 사용 중"
diff --git a/i18n/nl.yaml b/i18n/nl.yaml
index 620d915..a814232 100644
--- a/i18n/nl.yaml
+++ b/i18n/nl.yaml
@@ -1,38 +1,57 @@
-toggleMenu: Open Menu
+toggleMenu:
+    other: Open Menu
 
-darkMode: Donkere modus
+darkMode:
+    other: Donkere modus
 
 list:
     page:
         one: "{{ .Count }} pagina"
         other: "{{ .Count }} pagina's"
-    section: Sectie
+
+    section:
+        other: Sectie
+
     subsection:
         one: Subsectie
         other: Subsecties
 
 article:
-    relatedContent: Gerelateerde inhoud
-    lastUpdatedOn: Laatst bijgewerkt op
+    relatedContent:
+        other: Gerelateerde inhoud
+    lastUpdatedOn:
+        other: Laatst bijgewerkt op
 
 notFound:
-    title: Niet gevonden
-    subtitle: Deze pagina bestaat niet.
+    title:
+        other: Niet gevonden
+    subtitle:
+        other: Deze pagina bestaat niet.
 
 widget:
     archives:
-        title: Archief
-        more: Meer
+        title:
+            other: Archief
+        more:
+            other: Meer
     tagCloud:
-        title: Tags
+        title:
+            other: Tags
+
     categoriesCloud:
-        title: Categorie
+        title:
+            other: Categorie
 
 search:
-    title: Zoeken
-    placeholder: Typ iets
-    resultTitle: "#PAGES_COUNT pagina's (#TIME_SECONDS seconden)"
+    title:
+        other: Zoeken
+    placeholder:
+        other: Typ iets
+    resultTitle:
+        other: "#PAGES_COUNT pagina's (#TIME_SECONDS seconden)"
 
 footer:
-    builtWith: Gemaakt met {{ .Generator }}
-    designedBy: Theme {{ .Theme }} ontworpen door {{ .DesignedBy }}
+    builtWith:
+        other: Gemaakt met {{ .Generator }}
+    designedBy:
+        other: Theme {{ .Theme }} ontworpen door {{ .DesignedBy }}
diff --git a/i18n/pl.yaml b/i18n/pl.yaml
index 767eb64..e44a140 100644
--- a/i18n/pl.yaml
+++ b/i18n/pl.yaml
@@ -1,43 +1,73 @@
-toggleMenu: Przełącz Menu
+toggleMenu:
+    other: Przełącz Menu
 
-darkMode: Tryb ciemny
+darkMode:
+    other: Tryb ciemny
 
 list:
     page:
         one: "{{ .Count }} strona"
         other: "{{ .Count }} stron"
-    section: Sekcja
+
+    section:
+        other: Sekcja
+
     subsection:
         one: Podsekcja
         other: Podsekcje
 
 article:
-    back: Wróć
-    tableOfContents: Spis treści
-    relatedContent: Powiązane artykuły
-    lastUpdatedOn: Ostatnio zaktualizowany
+    back:
+        other: Wróć
+
+    tableOfContents:
+        other: Spis treści
+
+    relatedContent:
+        other: Powiązane artykuły
+
+    lastUpdatedOn:
+        other: Ostatnio zaktualizowany
+    
     readingTime:
         one: "Przeczytasz w {{ .Count }} minutę"
         other: "Przeczytasz w {{ .Count }} minut"
 
 notFound:
-    title: Nie znaleziono
-    subtitle: Ta strona nie istnieje
+    title:
+        other: Nie znaleziono
+    subtitle:
+        other: Ta strona nie istnieje
 
 widget:
     archives:
-        title: Archiwum
-        more: Więcej
+        title:
+            other: Archiwum
+
+        more:
+            other: Więcej
+
     tagCloud:
-        title: Tagi
+        title:
+            other: Tagi
+    
     categoriesCloud:
-        title: Kategorie
+        title:
+            other: Kategorie
 
 search:
-    title: Szukaj
-    placeholder: Wpisz coś...
-    resultTitle: "#PAGES_COUNT stron (#TIME_SECONDS sekund)"
+    title:
+        other: Szukaj
+
+    placeholder:
+        other: Wpisz coś...
+
+    resultTitle:
+        other: "#PAGES_COUNT stron (#TIME_SECONDS sekund)"
 
 footer:
-    builtWith: Zbudowano z {{ .Generator }}
-    designedBy: Motyw {{ .Theme }} zaprojektowany przez {{ .DesignedBy }}
+    builtWith:
+        other: Zbudowano z {{ .Generator }}
+
+    designedBy:
+        other: Motyw {{ .Theme }} zaprojektowany przez {{ .DesignedBy }}
diff --git a/i18n/pt-br.yaml b/i18n/pt-br.yaml
index b1235cb..2784f3d 100644
--- a/i18n/pt-br.yaml
+++ b/i18n/pt-br.yaml
@@ -1,45 +1,67 @@
-toggleMenu: Alternar Menu
+toggleMenu:
+    other: Alternar Menu
 
-darkMode: Modo Escuro
+darkMode:
+    other: Modo Escuro
 
 list:
     page:
         one: "{{ .Count }} página"
         other: "{{ .Count }} páginas"
-    section: Seção
+
+    section:
+        other: Seção
+
     subsection:
         one: Subseção
         other: Subseções
 
 article:
-    back: Voltar
-    tableOfContents: Índice
-    relatedContent: Conteúdo relacionado
-    lastUpdatedOn: Última atualização em
+    back:
+        other: Voltar
+
+    tableOfContents:
+        other: Índice
+
+    relatedContent:
+        other: Conteúdo relacionado
+
+    lastUpdatedOn:
+        other: Última atualização em
+
     readingTime:
         one: "{{ .Count }} minuto de leitura"
         other: "{{ .Count }} minutos de leitura"
 
 notFound:
-    title: Não Encontrado
-    subtitle: Esta página não existe.
+    title:
+        other: Não Encontrado
+    subtitle:
+        other: Esta página não existe.
 
 widget:
     archives:
-        title: Arquivos
-        more: Mais
-
+        title:
+            other: Arquivos
+        more:
+            other: Mais
     tagCloud:
-        title: Tags
-
+        title:
+            other: Tags
     categoriesCloud:
-        title: Categorias
+        title:
+            other: Categorias
 
 search:
-    title: Busca
-    placeholder: Digite algo...
-    resultTitle: "#PAGES_COUNT páginas (#TIME_SECONDS segundos)"
+    title:
+        other: Busca
+    placeholder:
+        other: Digite algo...
+    resultTitle:
+        other: "#PAGES_COUNT páginas (#TIME_SECONDS segundos)"
 
 footer:
-    builtWith: Criado com {{ .Generator }}
-    designedBy: Tema {{ .Theme }} desenvolvido por {{ .DesignedBy }}
+    builtWith:
+        other: Criado com {{ .Generator }}
+    designedBy:
+        other: Tema {{ .Theme }} desenvolvido por {{ .DesignedBy }}
diff --git a/i18n/ru.yaml b/i18n/ru.yaml
index d04e8a3..b1f1e51 100644
--- a/i18n/ru.yaml
+++ b/i18n/ru.yaml
@@ -1,6 +1,8 @@
-toggleMenu: Показать/скрыть меню
+toggleMenu:
+    other: Показать/скрыть меню
 
-darkMode: Тёмный режим
+darkMode:
+    other: Тёмный режим
 
 list:
     page:
@@ -8,7 +10,10 @@ list:
         few: "{{ .Count }} страницы"
         many: "{{ .Count }} страниц"
         other: "{{ .Count }} страниц"
-    section: Раздел
+
+    section:
+        other: Раздел
+
     subsection:
         one: Подраздел
         few: Подразделы
@@ -16,28 +21,43 @@ list:
         other: Подразделы
 
 article:
-    back: Назад
-    relatedContent: Также рекомендуем
-    lastUpdatedOn: Обновлено
-    tableOfContents: Содержание
-    readingTime: "Время чтения: {{ .Count }} мин."
+    back:
+        other: Назад
+    relatedContent:
+        other: Также рекомендуем
+    lastUpdatedOn:
+        other: Обновлено
+    tableOfContents: 
+        other: Содержание
+    readingTime: 
+        other: "Время чтения: {{ .Count }} мин."
 
 notFound:
-    title: Не найдено
-    subtitle: Запрашиваемая страница не существует
+    title:
+        other: Не найдено
+    subtitle:
+        other: Запрашиваемая страница не существует
 
 widget:
     archives:
-        title: Архивы
-        more: Ещё
+        title:
+            other: Архивы
+        more:
+            other: Ещё
     tagCloud:
-        title: Теги
+        title:
+            other: Теги
 
 search:
-    title: Поиск
-    placeholder: Введите что-нибудь...
-    resultTitle: "Найдено #PAGES_COUNT страниц (за #TIME_SECONDS с.)"
+    title:
+        other: Поиск
+    placeholder:
+        other: Введите что-нибудь...
+    resultTitle:
+        other: "Найдено #PAGES_COUNT страниц (за #TIME_SECONDS с.)"
 
 footer:
-    builtWith: Создано при помощи {{ .Generator }}
-    designedBy: Тема {{ .Theme }}, дизайн {{ .DesignedBy }}
+    builtWith:
+        other: Создано при помощи {{ .Generator }}
+    designedBy:
+        other: Тема {{ .Theme }}, дизайн {{ .DesignedBy }}
diff --git a/i18n/th.yaml b/i18n/th.yaml
index 81e54d3..9982c06 100644
--- a/i18n/th.yaml
+++ b/i18n/th.yaml
@@ -1,41 +1,70 @@
-toggleMenu: สลับเมนู
+toggleMenu:
+    other: สลับเมนู
 
-darkMode: ธีมมืด
+darkMode:
+    other: ธีมมืด
 
 list:
     page:
         one: "{{ .Count }} หน้า"
         other: "{{ .Count }} หน้า"
-    section: หมวดหมู่
+
+    section:
+        other: หมวดหมู่
+
     subsection:
         one: หมวดหมู่ย่อย
         other: หมวดหมู่ย่อยอื่นๆ
 
 article:
-    back: กลับไป
-    tableOfContents: สารบัญ
-    relatedContent: เนื้อหาคล้ายคลึงกัน
-    lastUpdatedOn: อัปเดตล่าสุดเมื่อ
+    back:
+        other: กลับไป
+
+    tableOfContents:
+        other: สารบัญ
+
+    relatedContent:
+        other: เนื้อหาคล้ายคลึงกัน
+
+    lastUpdatedOn:
+        other: อัปเดตล่าสุดเมื่อ
+
     readingTime:
         one: "น่าจะใช้เวลา {{ .Count }} นาทีในการอ่าน"
         other: "น่าจะใช้เวลา {{ .Count }} นาทีในการอ่าน"
 
 notFound:
-    title: ไม่พบหัวข้อ
-    subtitle: ไม่พบหน้านี้ในระบบ
+    title:
+        other: ไม่พบหัวข้อ
+
+    subtitle:
+        other: ไม่พบหน้านี้ในระบบ
 
 widget:
     archives:
-        title: เนื้อหาที่เก็บถาวรแล้ว
-        more: อื่นๆ นอกจากนี้
+        title:
+            other: เนื้อหาที่เก็บถาวรแล้ว
+
+        more:
+            other: อื่นๆ นอกจากนี้
+
     tagCloud:
-        title: แท็ก
+        title:
+            other: แท็ก
 
 search:
-    title: ค้นหา
-    placeholder: พิมพ์เพื่อค้นหา ...
-    resultTitle: "#PAGES_COUNT pages (#TIME_SECONDS seconds)"
+    title:
+        other: ค้นหา
+
+    placeholder:
+        other: พิมพ์เพื่อค้นหา ...
+
+    resultTitle:
+        other: "#PAGES_COUNT pages (#TIME_SECONDS seconds)"
 
 footer:
-    builtWith: ถูกสร้างด้วย {{ .Generator }}
-    designedBy: ธีม {{ .Theme }} ออกแบบโดย {{ .DesignedBy }}
+    builtWith:
+        other: ถูกสร้างด้วย {{ .Generator }}
+
+    designedBy:
+        other: ธีม {{ .Theme }} ออกแบบโดย {{ .DesignedBy }}
diff --git a/i18n/tr.yaml b/i18n/tr.yaml
index 0df564a..2dbb9d5 100644
--- a/i18n/tr.yaml
+++ b/i18n/tr.yaml
@@ -1,36 +1,53 @@
-toggleMenu: Menüyü Gizle
+toggleMenu:
+    other: Menüyü Gizle
 
-darkMode: Koyu Mod
+darkMode:
+    other: Koyu Mod
 
 list:
     page:
         one: "{{ .Count }} makale"
         other: "{{ .Count }} makale"
-    section: Bölüm
+
+    section:
+        other: Bölüm
+
     subsection:
         one: Alt bölüm
         other: Alt bölümler
 
 article:
-    relatedContent: Alakalı içerikler
-    lastUpdatedOn: Son güncelleme
+    relatedContent:
+        other: Alakalı içerikler
+    lastUpdatedOn:
+        other: Son güncelleme
 
 notFound:
-    title: Bulunamadı
-    subtitle: Aradığınız sayfa mevcut değil.
+    title:
+        other: Bulunamadı
+    subtitle:
+        other: Aradığınız sayfa mevcut değil.
 
 widget:
     archives:
-        title: Arşiv
-        more: Daha fazla
+        title:
+            other: Arşiv
+        more:
+            other: Daha fazla
     tagCloud:
-        title: Etiketler
+        title:
+            other: Etiketler
 
 search:
-    title: Arama
-    placeholder: Birşeyler yazın...
-    resultTitle: "#PAGES_COUNT sayfa (#TIME_SECONDS saniye)"
+    title:
+        other: Arama
+    placeholder:
+        other: Birşeyler yazın...
+    resultTitle:
+        other: "#PAGES_COUNT sayfa (#TIME_SECONDS saniye)"
 
 footer:
-    builtWith: "{{ .Generator }} ile oluşturuldu."
-    designedBy: "{{ .Theme }} teması {{ .DesignedBy }} tarafından tasarlandı"
+    builtWith:
+        other: "{{ .Generator }} ile oluşturuldu."
+    designedBy:
+        other: "{{ .Theme }} teması {{ .DesignedBy }} tarafından tasarlandı"
diff --git a/i18n/uk.yaml b/i18n/uk.yaml
index 2e29e26..3bd4f71 100644
--- a/i18n/uk.yaml
+++ b/i18n/uk.yaml
@@ -1,42 +1,71 @@
-toggleMenu: Показати меню
+toggleMenu:
+    other: Показати меню
 
-darkMode: Темна тема
+darkMode:
+    other: Темна тема
 
 list:
     page:
         one: "{{ .Count }} сторінка"
         few: "{{ .Count }} сторінки"
         other: "{{ .Count }} сторінок"
-    section: Секція
+
+    section:
+        other: Секція
+
     subsection:
         one: Підсекція
         other: Підсекції
 
 article:
-    back: Назад
-    tableOfContents: Зміст
-    relatedContent: Схожі матеріали
-    lastUpdatedOn: Востаннє оновлено
+    back:
+        other: Назад
+
+    tableOfContents:
+        other: Зміст
+
+    relatedContent:
+        other: Схожі матеріали
+
+    lastUpdatedOn:
+        other: Востаннє оновлено
+
     readingTime:
         one: "Час читання: {{ .Count }} хв"
         other: "Час читання: {{ .Count }} хв"
 
 notFound:
-    title: Не знайдено
-    subtitle: Ця сторінка не існує
+    title:
+        other: Не знайдено
+
+    subtitle:
+        other: Ця сторінка не існує
 
 widget:
     archives:
-        title: Архіви
-        more: Більше
+        title:
+            other: Архіви
+
+        more:
+            other: Більше
+
     tagCloud:
-        title: Теґи
+        title:
+            other: Теґи
 
 search:
-    title: Пошук
-    placeholder: Напишіть що-небудь...
-    resultTitle: "#PAGES_COUNT сторінок (#TIME_SECONDS секунд)"
+    title:
+        other: Пошук
+
+    placeholder:
+        other: Напишіть що-небудь...
+
+    resultTitle:
+        other: "#PAGES_COUNT сторінок (#TIME_SECONDS секунд)"
 
 footer:
-    builtWith: Створено з {{ .Generator }}
-    designedBy: Тема {{ .Theme }}, дизайн {{ .DesignedBy }}
+    builtWith:
+        other: Створено з {{ .Generator }}
+
+    designedBy:
+        other: Тема {{ .Theme }}, дизайн {{ .DesignedBy }}
diff --git a/i18n/zh-cn.yaml b/i18n/zh-cn.yaml
index e744d08..9350c2b 100644
--- a/i18n/zh-cn.yaml
+++ b/i18n/zh-cn.yaml
@@ -1,32 +1,60 @@
-toggleMenu: 切换菜单
+toggleMenu:
+    other: 切换菜单
 
-darkMode: 暗色模式
+darkMode:
+    other: 暗色模式
 
 article:
-    back: 返回
-    tableOfContents: 目录
-    relatedContent: 相关文章
-    lastUpdatedOn: 最后更新于
-    readingTime: "阅读时长: {{ .Count }} 分钟"
+    back:
+        other: 返回
+
+    tableOfContents:
+        other: 目录
+
+    relatedContent:
+        other: 相关文章
+
+    lastUpdatedOn:
+        other: 最后更新于
+
+    readingTime:
+        other: "阅读时长: {{ .Count }} 分钟"
 
 notFound:
-    title: 404 错误
-    subtitle: 页面不存在
+    title:
+        other: 404 错误
+    subtitle:
+        other: 页面不存在
 
 widget:
     archives:
-        title: 归档
-        more: 更多
+        title:
+            other: 归档
+
+        more:
+            other: 更多
+
     tagCloud:
-        title: 标签云
+        title:
+            other: 标签云
+
     categoriesCloud:
-        title: 分类
+        title:
+            other: 分类
 
 search:
-    title: 搜索
-    placeholder: 输入关键词...
-    resultTitle: "#PAGES_COUNT 个结果 (用时 #TIME_SECONDS 秒)"
+    title:
+        other: 搜索
+
+    placeholder:
+        other: 输入关键词...
+
+    resultTitle:
+        other: "#PAGES_COUNT 个结果 (用时 #TIME_SECONDS 秒)"
 
 footer:
-    builtWith: Built with {{ .Generator }}
-    designedBy: 主题 {{ .Theme }} 由 {{ .DesignedBy }} 设计
+    builtWith:
+        other: Built with {{ .Generator }}
+
+    designedBy:
+        other: 主题 {{ .Theme }} 由 {{ .DesignedBy }} 设计
diff --git a/i18n/zh-hk.yaml b/i18n/zh-hk.yaml
index 4f701ba..9e3c246 100644
--- a/i18n/zh-hk.yaml
+++ b/i18n/zh-hk.yaml
@@ -1,43 +1,73 @@
-toggleMenu: 切換選單
+toggleMenu:
+    other: 切換選單
 
-darkMode: 深色模式
+darkMode:
+    other: 深色模式
 
 list:
     page:
         one: "第 {{ .Count }} 頁"
         other: "第 {{ .Count }} 頁"
-    section: Section
+
+    section:
+        other: Section
+
     subsection:
         one: Subsection
         other: Subsections
 
 article:
-    back: 返回
-    tableOfContents: 目錄
-    relatedContent: 相關內容
-    lastUpdatedOn: 上次改過於
+    back:
+        other: 返回
+
+    tableOfContents:
+        other: 目錄
+
+    relatedContent:
+        other: 相關內容
+
+    lastUpdatedOn:
+        other: 上次改過於
+
     readingTime:
         one: "需要 {{ .Count }} 分鐘閱讀"
         other: "需要 {{ .Count }} 分鐘閱讀"
 
 notFound:
-    title: Not Found
-    subtitle: 頁面不存在
+    title:
+        other: Not Found
+
+    subtitle:
+        other: 頁面不存在
 
 widget:
     archives:
-        title: Archives
-        more: 更多
+        title:
+            other: Archives
+
+        more:
+            other: 更多
+
     tagCloud:
-        title: Tags
+        title:
+            other: Tags
     categoriesCloud:
-        title: Categories
+        title:
+            other: Categories
 
 search:
-    title: 搜尋
-    placeholder: Type 關鍵字...
-    resultTitle: "#PAGES_COUNT pages (#TIME_SECONDS seconds)"
+    title:
+        other: 搜尋
+
+    placeholder:
+        other: Type 關鍵字...
+
+    resultTitle:
+        other: "#PAGES_COUNT pages (#TIME_SECONDS seconds)"
 
 footer:
-    builtWith: Built with {{ .Generator }}
-    designedBy: 主題 {{ .Theme }} 由 {{ .DesignedBy }} 設計
+    builtWith:
+        other: Built with {{ .Generator }}
+
+    designedBy:
+        other: 主題 {{ .Theme }} 由 {{ .DesignedBy }} 設計
diff --git a/i18n/zh-tw.yaml b/i18n/zh-tw.yaml
index 8c1acee..d9e124e 100644
--- a/i18n/zh-tw.yaml
+++ b/i18n/zh-tw.yaml
@@ -1,26 +1,49 @@
-toggleMenu: 切換選單
+toggleMenu:
+    other: 切換選單
 
-darkMode: 夜晚模式
+darkMode:
+    other: 夜晚模式
 
 article:
-    back: 返回
-    tableOfContents: 目錄
-    relatedContent: 相關文章
-    lastUpdatedOn: 最後更新
-    readingTime: "閱讀時間: {{ .Count }} 分鐘"
+    back:
+        other: 返回
+
+    tableOfContents:
+        other: 目錄
+
+    relatedContent:
+        other: 相關文章
+
+    lastUpdatedOn:
+        other: 最後更新
+
+    readingTime:
+        other: "閱讀時間: {{ .Count }} 分鐘"
 
 notFound:
-    title: 404 錯誤
-    subtitle: 頁面不存在
+    title:
+        other: 404 錯誤
+    subtitle:
+        other: 頁面不存在
 
 widget:
     archives:
-        title: 紀錄
-        more: 更多
+        title:
+            other: 紀錄
+
+        more:
+            other: 更多
+
     tagCloud:
-        title: 標籤雲
+        title:
+            other: 標籤雲
 
 search:
-    title: 搜尋
-    placeholder: 輸入關鍵字...
-    resultTitle: "#PAGES_COUNT 個結果 (用時 #TIME_SECONDS 秒)"
+    title:
+        other: 搜尋
+
+    placeholder:
+        other: 輸入關鍵字...
+
+    resultTitle:
+        other: "#PAGES_COUNT 個結果 (用時 #TIME_SECONDS 秒)"
diff --git a/layouts/_default/_markup/render-codeblock.html b/layouts/_default/_markup/render-codeblock.html
deleted file mode 100644
index 21c5100..0000000
--- a/layouts/_default/_markup/render-codeblock.html
+++ /dev/null
@@ -1,20 +0,0 @@
-{{- $class := .Attributes.class | default ""    -}}
-{{- $lang  := .Attributes.lang  | default .Type -}}
-<div class="codeblock">
-    <header>
-        <span class="codeblock-lang">{{ $lang }}</span>
-        <button 
-            class="codeblock-copy"
-            data-id="codeblock-id-{{ .Ordinal }}"
-            data-copied-text="{{ T `article.codeblock.copied` }}"
-        >
-            {{ T `article.codeblock.copy` }}
-        </button>
-    </header>
-    <code id="codeblock-id-{{ .Ordinal }}" style="display:none;">{{- .Inner -}}</code>
-    {{- if transform.CanHighlight $lang -}}
-    <div class="{{ $class }}">{{- highlight .Inner $lang -}}</div>
-    {{- else -}}
-    <pre><code class="{{ $class }}">{{- .Inner -}}</code></pre>
-    {{- end -}}
-</div>
diff --git a/layouts/_default/_markup/render-image.html b/layouts/_default/_markup/render-image.html
index 5577736..0ed5584 100644
--- a/layouts/_default/_markup/render-image.html
+++ b/layouts/_default/_markup/render-image.html
@@ -17,7 +17,7 @@
 		{{- $Height = $image.Height -}}
 		{{- $galleryImage = true -}}
 
-		{{- if .Page.Site.Params.imageProcessing.content.enabled -}}
+		{{- if (default true .Page.Site.Params.imageProcessing.content.enabled) -}}
 			{{- $small := $image.Resize `480x` -}}
 			{{- $big := $image.Resize `1024x` -}}
 			{{- $Srcset = printf `%s 480w, %s 1024w` $small.RelPermalink $big.RelPermalink -}}
diff --git a/layouts/_default/archives.html b/layouts/_default/archives.html
index 9df633e..5d5243c 100644
--- a/layouts/_default/archives.html
+++ b/layouts/_default/archives.html
@@ -16,8 +16,10 @@
     </header>
 
     {{ $pages := where .Site.RegularPages "Type" "in" .Site.Params.mainSections }}
-    
-    {{ range $pages.GroupByDate "2006" }}
+    {{ $notHidden := where .Site.RegularPages "Params.hidden" "!=" true }}
+    {{ $filtered := ($pages | intersect $notHidden) }}
+
+    {{ range $filtered.GroupByDate "2006" }}
     {{ $id := lower (replace .Key " " "-") }}
     <div class="archives-group" id="{{ $id }}">
         <h2 class="archives-date section-title"><a href="{{ $.RelPermalink }}#{{ $id }}">{{ .Key }}</a></h2>
diff --git a/layouts/_default/list.html b/layouts/_default/list.html
index 4e1e0b5..9bc618d 100644
--- a/layouts/_default/list.html
+++ b/layouts/_default/list.html
@@ -25,7 +25,7 @@
                         {{- $Width := $image.resource.Width -}}
                         {{- $Height := $image.resource.Height -}}
     
-                        {{- if .Page.Site.Params.imageProcessing.cover.enabled -}}
+                        {{- if (default true .Page.Site.Params.imageProcessing.cover.enabled) -}}
                             {{- $thumbnail := $image.resource.Fill "120x120" -}}
                             {{- $Permalink = $thumbnail.RelPermalink -}}
                             {{- $Width = $thumbnail.Width -}}
diff --git a/layouts/_default/rss.xml b/layouts/_default/rss.xml
index 0d3170e..e9f3f1a 100644
--- a/layouts/_default/rss.xml
+++ b/layouts/_default/rss.xml
@@ -6,6 +6,7 @@
 {{- else -}}
 {{- $pages = $pctx.Pages -}}
 {{- end -}}
+{{- $pages := where $pages "Params.hidden" "!=" true -}}
 {{- $limit := .Site.Config.Services.RSS.Limit -}}
 {{- if ge $limit 1 -}}
 {{- $pages = $pages | first $limit -}}
diff --git a/layouts/index.html b/layouts/index.html
index 5c1eaa5..0cd0b88 100644
--- a/layouts/index.html
+++ b/layouts/index.html
@@ -1,6 +1,9 @@
 {{ define "main" }}
     {{ $pages := where .Site.RegularPages "Type" "in" .Site.Params.mainSections }}
-    {{ $pag := .Paginate ($pages) }}
+    {{ $notHidden := where .Site.RegularPages "Params.hidden" "!=" true }}
+    {{ $filtered := ($pages | intersect $notHidden) }}
+    {{ $pag := .Paginate ($filtered) }}
+
     <section class="article-list">
         {{ range $index, $element := $pag.Pages }}
             {{ partial "article-list/default" . }}
diff --git a/layouts/page/search.json b/layouts/page/search.json
index a0f5184..5d4e627 100644
--- a/layouts/page/search.json
+++ b/layouts/page/search.json
@@ -1,13 +1,16 @@
 {{- $pages := where .Site.RegularPages "Type" "in" .Site.Params.mainSections -}}
+{{- $notHidden := where .Site.RegularPages "Params.hidden" "!=" true -}}
+{{- $filtered := ($pages | intersect $notHidden) -}}
+
 {{- $result := slice -}}
 
-{{- range $pages -}}
+{{- range $filtered -}}
     {{- $data := dict "title" .Title "date" .Date "permalink" .Permalink "content" (.Plain) -}}
 
     {{- $image := partialCached "helper/image" (dict "Context" . "Type" "articleList") .RelPermalink "articleList" -}}
     {{- if $image.exists -}}
         {{- $imagePermalink := "" -}}
-        {{- if and $image.resource .Page.Site.Params.imageProcessing.cover.enabled -}}
+        {{- if and $image.resource (default true .Page.Site.Params.imageProcessing.cover.enabled) -}}
             {{- $thumbnail := $image.resource.Fill "120x120" -}}
             {{- $imagePermalink = (absURL $thumbnail.Permalink) -}}
         {{- else -}}
diff --git a/layouts/partials/article-list/compact.html b/layouts/partials/article-list/compact.html
index edd58a0..376512a 100644
--- a/layouts/partials/article-list/compact.html
+++ b/layouts/partials/article-list/compact.html
@@ -19,7 +19,7 @@
                     {{- $Width := $image.resource.Width -}}
                     {{- $Height := $image.resource.Height -}}
 
-                    {{- if .Page.Site.Params.imageProcessing.cover.enabled -}}
+                    {{- if (default true .Page.Site.Params.imageProcessing.cover.enabled) -}}
                         {{- $thumbnail := $image.resource.Fill "120x120" -}}
                         {{- $Permalink = $thumbnail.RelPermalink -}}
                         {{- $Width = $thumbnail.Width -}}
diff --git a/layouts/partials/article/components/header.html b/layouts/partials/article/components/header.html
index 78b41bd..7582ec2 100644
--- a/layouts/partials/article/components/header.html
+++ b/layouts/partials/article/components/header.html
@@ -9,7 +9,7 @@
                     {{- $Height := $image.resource.Height -}}
                     {{- $Srcset := "" -}}
                     
-                    {{- if .Page.Site.Params.imageProcessing.cover.enabled -}}
+                    {{- if (default true .Page.Site.Params.imageProcessing.cover.enabled) -}}
                         {{- $thumbnail := $image.resource.Resize "800x" -}}
                         {{- $thumbnailRetina := $image.resource.Resize "1600x" -}}
                         {{- $Srcset = printf "%s 800w, %s 1600w" $thumbnail.RelPermalink $thumbnailRetina.RelPermalink -}}
diff --git a/layouts/partials/article/components/photoswipe.html b/layouts/partials/article/components/photoswipe.html
index 425825c..c33ff49 100644
--- a/layouts/partials/article/components/photoswipe.html
+++ b/layouts/partials/article/components/photoswipe.html
@@ -1,20 +1,68 @@
-{{- $opts := dict "minify" hugo.IsProduction "format" "esm" -}}
-{{- $galleryScript := resources.Get "ts/gallery.ts" | js.Build $opts -}}
+<!-- Root element of PhotoSwipe. Must have class pswp. -->
+<div class="pswp" tabindex="-1" role="dialog" aria-hidden="true">
 
-<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/photoswipe@5.2.7/dist/photoswipe.css"
-    integrity="sha256-olf9rfn3AG8zR6lkPXkN3PZq63z8tElx7Ela6T4eklo=" crossorigin="anonymous">
+    <!-- Background of PhotoSwipe. 
+         It's a separate element as animating opacity is faster than rgba(). -->
+    <div class="pswp__bg"></div>
 
-<script type="module">
-    import StackGallery from '{{ $galleryScript.RelPermalink }}';
-    import PhotoSwipeLightbox from 'https://cdn.jsdelivr.net/npm/photoswipe@5.2.7/dist/photoswipe-lightbox.esm.min.js';
-    
-    console.log(StackGallery)
-    StackGallery(document.querySelector('.article-content'));
+    <!-- Slides wrapper with overflow:hidden. -->
+    <div class="pswp__scroll-wrap">
 
-    const lightbox = new PhotoSwipeLightbox({
-        gallery: '.article-content',
-        children: '.gallery-image a',
-        pswpModule: () => import('https://cdn.jsdelivr.net/npm/photoswipe@5.2.7/dist/photoswipe.esm.min.js')
-    });
-    lightbox.init();
-</script>
\ No newline at end of file
+        <!-- Container that holds slides. 
+            PhotoSwipe keeps only 3 of them in the DOM to save memory.
+            Don't modify these 3 pswp__item elements, data is added later on. -->
+        <div class="pswp__container">
+            <div class="pswp__item"></div>
+            <div class="pswp__item"></div>
+            <div class="pswp__item"></div>
+        </div>
+
+        <!-- Default (PhotoSwipeUI_Default) interface on top of sliding area. Can be changed. -->
+        <div class="pswp__ui pswp__ui--hidden">
+
+            <div class="pswp__top-bar">
+
+                <!--  Controls are self-explanatory. Order can be changed. -->
+
+                <div class="pswp__counter"></div>
+
+                <button class="pswp__button pswp__button--close" title="Close (Esc)"></button>
+
+                <button class="pswp__button pswp__button--share" title="Share"></button>
+
+                <button class="pswp__button pswp__button--fs" title="Toggle fullscreen"></button>
+
+                <button class="pswp__button pswp__button--zoom" title="Zoom in/out"></button>
+
+                <!-- Preloader demo https://codepen.io/dimsemenov/pen/yyBWoR -->
+                <!-- element will get class pswp__preloader--active when preloader is running -->
+                <div class="pswp__preloader">
+                    <div class="pswp__preloader__icn">
+                        <div class="pswp__preloader__cut">
+                            <div class="pswp__preloader__donut"></div>
+                        </div>
+                    </div>
+                </div>
+            </div>
+
+            <div class="pswp__share-modal pswp__share-modal--hidden pswp__single-tap">
+                <div class="pswp__share-tooltip"></div>
+            </div>
+
+            <button class="pswp__button pswp__button--arrow--left" title="Previous (arrow left)">
+            </button>
+
+            <button class="pswp__button pswp__button--arrow--right" title="Next (arrow right)">
+            </button>
+
+            <div class="pswp__caption">
+                <div class="pswp__caption__center"></div>
+            </div>
+
+        </div>
+
+    </div>
+
+</div>
+
+{{- partial "helper/external" (dict "Context" . "Namespace" "PhotoSwipe") -}}
\ No newline at end of file
diff --git a/layouts/partials/article/components/related-content.html b/layouts/partials/article/components/related-content.html
index 822fc73..aba88e3 100644
--- a/layouts/partials/article/components/related-content.html
+++ b/layouts/partials/article/components/related-content.html
@@ -1,4 +1,4 @@
-{{ $related := .Site.RegularPages.Related . | first 5 }}
+{{ $related := (where (.Site.RegularPages.Related .) "Params.hidden" "!=" true) | first 5 }}
 {{ with $related }}
 <aside class="related-content--wrapper">
     <h2 class="section-title">{{ T "article.relatedContent" }}</h2>
diff --git a/layouts/partials/data/title.html b/layouts/partials/data/title.html
index 938a5da..85a7bc7 100644
--- a/layouts/partials/data/title.html
+++ b/layouts/partials/data/title.html
@@ -6,7 +6,9 @@
 
     <!-- Build paginator -->
     {{ $pages := where .Site.RegularPages "Section" "in" .Site.Params.mainSections }}
-    {{ $pag := .Paginate ($pages) }}
+    {{ $notHidden := where .Site.RegularPages "Params.hidden" "!=" true }}
+    {{ $filtered := ($pages | intersect $notHidden) }}
+    {{ $pag := .Paginate ($filtered) }}
 
     {{ if .Paginator.HasPrev }}
         <!-- Paginated. Append page number to title -->
@@ -18,7 +20,8 @@
     <!-- Taxonomy page -->
 
     <!-- Build paginator -->
-    {{ $pag := .Paginate .Pages }}
+    {{ $notHidden := where .Pages "Params.hidden" "!=" true }}
+    {{ $pag := .Paginate ($notHidden) }}
 
     <!-- {TAXONOMY_TYPE}: {TAXONOMY_TERM} -->
     {{ $title = slice (title .Data.Singular) ": " $title }}
diff --git a/layouts/partials/footer/components/script.html b/layouts/partials/footer/components/script.html
index f25dc83..4cb350c 100644
--- a/layouts/partials/footer/components/script.html
+++ b/layouts/partials/footer/components/script.html
@@ -1,3 +1,5 @@
+{{- partial "helper/external" (dict "Context" . "Namespace" "Vibrant") -}}
+
 {{- $opts := dict "minify" hugo.IsProduction -}}
 {{- $script := resources.Get "ts/main.ts" | js.Build $opts -}}
 
diff --git a/layouts/partials/footer/footer.html b/layouts/partials/footer/footer.html
index 3b2b46f..49caa89 100644
--- a/layouts/partials/footer/footer.html
+++ b/layouts/partials/footer/footer.html
@@ -1,4 +1,4 @@
-{{- $ThemeVersion := "4.0.0-alpha.0" -}}
+{{- $ThemeVersion := "3.16.0" -}}
 <footer class="site-footer">
     <section class="copyright">
         &copy; 
diff --git a/layouts/partials/head/colorScheme.html b/layouts/partials/head/colorScheme.html
index 04d63a5..42f4dd8 100644
--- a/layouts/partials/head/colorScheme.html
+++ b/layouts/partials/head/colorScheme.html
@@ -1,5 +1,5 @@
-{{- $defaultColorScheme := .Site.Params.colorScheme.default -}}
-{{- if not .Site.Params.colorScheme.toggle -}}
+{{- $defaultColorScheme := default "auto" .Site.Params.colorScheme.default -}}
+{{- if not (default false .Site.Params.colorScheme.toggle) -}}
     {{/* If toggle is disabled, force default scheme */}}
     <script>
         (function() {
diff --git a/layouts/partials/head/head.html b/layouts/partials/head/head.html
index 5de6071..be63710 100644
--- a/layouts/partials/head/head.html
+++ b/layouts/partials/head/head.html
@@ -19,12 +19,7 @@
 {{- end -}}
 
 {{ with .Site.Params.favicon }}
-    {{ $favicon := resources.Get . }}
-    {{ if $favicon }}
-        <link rel="shortcut icon" href="{{ $favicon.RelPermalink }}" />
-    {{ else }}
-        {{ errorf "Failed loading favicon from %q" . }}
-    {{ end }}
+    <link rel="shortcut icon" href="{{ . }}" />
 {{ end }}
 
 {{- template "_internal/google_analytics.html" . -}}
diff --git a/layouts/partials/head/opengraph/provider/twitter.html b/layouts/partials/head/opengraph/provider/twitter.html
index a837ba3..03bbf22 100644
--- a/layouts/partials/head/opengraph/provider/twitter.html
+++ b/layouts/partials/head/opengraph/provider/twitter.html
@@ -11,6 +11,6 @@
 
 {{- $image := partialCached "helper/image" (dict "Context" . "Type" "opengraph") .RelPermalink "opengraph" -}}
 {{- if $image.exists -}}
-    <meta name="twitter:card" content="{{ .Site.Params.opengraph.twitter.card }}">
+    <meta name="twitter:card" content="{{ default `summary_large_image` .Site.Params.opengraph.twitter.card }}">
     <meta name="twitter:image" content='{{ absURL $image.permalink }}' />
 {{- end -}}
\ No newline at end of file
diff --git a/layouts/partials/sidebar/left.html b/layouts/partials/sidebar/left.html
index 2dfa1d4..f94e50a 100644
--- a/layouts/partials/sidebar/left.html
+++ b/layouts/partials/sidebar/left.html
@@ -7,7 +7,7 @@
 
     <header>
         {{ with .Site.Params.sidebar.avatar }}
-            {{ if .enabled }}
+            {{ if (default true .enabled) }}
             <figure class="site-avatar">
                 <a href="{{ .Site.BaseURL | relLangURL }}">
                 {{ if not .local }}
@@ -89,7 +89,7 @@
                 </li>
             {{ end }}
             
-            {{ if .Site.Params.colorScheme.toggle }}
+            {{ if (default false .Site.Params.colorScheme.toggle) }}
                 <li id="dark-mode-toggle">
                     {{ partial "helper/icon" "toggle-left" }}
                     {{ partial "helper/icon" "toggle-right" }}
diff --git a/layouts/partials/widget/archives.html b/layouts/partials/widget/archives.html
index e42da27..1f2abc5 100644
--- a/layouts/partials/widget/archives.html
+++ b/layouts/partials/widget/archives.html
@@ -10,7 +10,9 @@
         <h2 class="widget-title section-title">{{ T "widget.archives.title" }}</h2>
 
         {{ $pages := where $context.Site.RegularPages "Type" "in" $context.Site.Params.mainSections }}
-        {{ $archives := $pages.GroupByDate "2006" }}
+        {{ $notHidden := where $context.Site.RegularPages "Params.hidden" "!=" true }}
+        {{ $filtered := ($pages | intersect $notHidden) }}
+        {{ $archives := $filtered.GroupByDate "2006" }}
         
         <div class="widget-archive--list">
             {{ range $index, $item := first (add $limit 1) ($archives) }}
diff --git a/theme.toml b/theme.toml
index ce33cee..a1a3d74 100644
--- a/theme.toml
+++ b/theme.toml
@@ -20,7 +20,7 @@ features = [
     "search",
 ]
 
-min_version = "0.100.0"
+min_version = "0.87.0"
 
 [author]
 name = "Jimmy Cai"

From 196116f20d655e4e3f9b4cb2c78edbefc898b7f5 Mon Sep 17 00:00:00 2001
From: Jimmy Cai <github@jimmycai.com>
Date: Sat, 29 Oct 2022 17:28:47 +0200
Subject: [PATCH 03/26] fix: incorrect menu URL when baseURL is a subpath
 (#713)

---
 layouts/partials/sidebar/left.html | 3 +--
 1 file changed, 1 insertion(+), 2 deletions(-)

diff --git a/layouts/partials/sidebar/left.html b/layouts/partials/sidebar/left.html
index f94e50a..32e5a12 100644
--- a/layouts/partials/sidebar/left.html
+++ b/layouts/partials/sidebar/left.html
@@ -61,9 +61,8 @@
         {{ $currentPage := . }}
         {{ range .Site.Menus.main }}
         {{ $active := or (eq $currentPage.Title .Name) (or ($currentPage.HasMenuCurrent "main" .) ($currentPage.IsMenuCurrent "main" .)) }}
-
         <li {{ if $active }} class='current' {{ end }}>
-            <a href='{{ .URL | relLangURL }}' {{ if eq .Params.newTab true }}target="_blank"{{ end }}>
+            <a href='{{ .URL }}' {{ if eq .Params.newTab true }}target="_blank"{{ end }}>
                 {{ $icon := default .Pre .Params.Icon }}
                 {{ if .Pre }}
                     {{ warnf "Menu item [%s] is using [pre] field to set icon, please use [params.icon] instead.\nMore information: https://docs.stack.jimmycai.com/configuration/custom-menu.html" .URL }}

From ff7a56a7ac8a73047a2bb79f3713a395ad13f2ac Mon Sep 17 00:00:00 2001
From: Anh Nhat Tran <japananh@gmail.com>
Date: Sat, 3 Dec 2022 19:27:55 +0700
Subject: [PATCH 04/26] feat(i18n): add vietnamese translation (#717)

---
 i18n/vi.yaml | 74 ++++++++++++++++++++++++++++++++++++++++++++++++++++
 1 file changed, 74 insertions(+)
 create mode 100644 i18n/vi.yaml

diff --git a/i18n/vi.yaml b/i18n/vi.yaml
new file mode 100644
index 0000000..13dc624
--- /dev/null
+++ b/i18n/vi.yaml
@@ -0,0 +1,74 @@
+toggleMenu:
+  other: Hiển thị Menu
+
+darkMode:
+  other: Chế độ nền tối
+
+list:
+  page:
+    one: "{{ .Count }} trang"
+    other: "{{ .Count }} trang"
+
+  section:
+    other: Section
+
+  subsection:
+    one: Subsection
+    other: Subsections
+
+article:
+  back:
+    other: Trở lại
+
+  tableOfContents:
+    other: Mục lục
+
+  relatedContent:
+    other: Bài viết liên quan
+
+  lastUpdatedOn:
+    other: Cập nhật lần cuối
+
+  readingTime:
+    one: "{{ .Count }} phút đọc"
+    other: "{{ .Count }} phút đọc"
+
+notFound:
+  title:
+    other: Không tìm thấy
+
+  subtitle:
+    other: Trang này không tồn tại
+
+widget:
+  archives:
+    title:
+      other: Lưu trữ
+
+    more:
+      other: Còn nữa
+
+  tagCloud:
+    title:
+      other: Nhãn dán
+
+  categoriesCloud:
+    title:
+      other: Chuỗi bài
+
+search:
+  title:
+    other: Tìm kiếm
+
+  placeholder:
+    other: Nhập từ khoá ...
+
+  resultTitle:
+    other: "#PAGES_COUNT trang (#TIME_SECONDS giây)"
+
+footer:
+  builtWith:
+    other: Built with {{ .Generator }}
+
+  designedBy:
+    other: Theme {{ .Theme }} thiết kế bởi {{ .DesignedBy }}

From 3ff06fe0337df7a037e01e642dd4bde334b152c1 Mon Sep 17 00:00:00 2001
From: rock G <35254251+GGXXLL@users.noreply.github.com>
Date: Tue, 6 Dec 2022 04:21:37 +0800
Subject: [PATCH 05/26] fix: anchor link need decode (#719)

---
 assets/ts/smoothAnchors.ts | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/assets/ts/smoothAnchors.ts b/assets/ts/smoothAnchors.ts
index 46a4a03..16ab6a3 100644
--- a/assets/ts/smoothAnchors.ts
+++ b/assets/ts/smoothAnchors.ts
@@ -21,8 +21,8 @@ function setupSmoothAnchors() {
         aElement.addEventListener("click", clickEvent => {
             clickEvent.preventDefault();
 
-            const targetId = aElement.getAttribute("href").substring(1),
-                target = document.getElementById(targetId) as HTMLElement, 
+            const targetId = decodeURI(aElement.getAttribute("href").substring(1)),
+                target = document.getElementById(targetId) as HTMLElement,
                 offset = target.getBoundingClientRect().top - document.documentElement.getBoundingClientRect().top;
 
             window.history.pushState({}, "", aElement.getAttribute("href"));

From d382ca993d4827b4b5177b3a3b6b1b6d36c88910 Mon Sep 17 00:00:00 2001
From: Parasomnia <22992947+parasomn1a@users.noreply.github.com>
Date: Tue, 6 Dec 2022 23:55:40 +1000
Subject: [PATCH 06/26] fix(comment/utterances): the target origin mismatch
 recipient window's origin (#735)

---
 layouts/partials/comments/provider/utterances.html | 6 ++++++
 1 file changed, 6 insertions(+)

diff --git a/layouts/partials/comments/provider/utterances.html b/layouts/partials/comments/provider/utterances.html
index 97a0a3a..b1e370b 100644
--- a/layouts/partials/comments/provider/utterances.html
+++ b/layouts/partials/comments/provider/utterances.html
@@ -16,6 +16,8 @@
 </style>
 
 <script>
+    let utterancesLoaded = false;
+
     function setUtterancesTheme(theme) {
         let utterances = document.querySelector('.utterances iframe');
         if (utterances) {
@@ -31,10 +33,14 @@
 
     addEventListener('message', event => {
         if (event.origin !== 'https://utteranc.es') return;
+
+        /// Called when Utterances is ready
+        utterancesLoaded = true;
         setUtterancesTheme(document.documentElement.dataset.scheme)
     });
 
     window.addEventListener('onColorSchemeChange', (e) => {
+        if (!utterancesLoaded) return;
         setUtterancesTheme(e.detail)
     })
 </script>

From 4272da7ee402b43fab957cf328e622279168354c Mon Sep 17 00:00:00 2001
From: ttheng3810 <81245678+ttheng3810@users.noreply.github.com>
Date: Fri, 30 Dec 2022 04:18:14 +0800
Subject: [PATCH 07/26] feat(i18n): add footer translation for ZH-TW (#748)

---
 i18n/zh-tw.yaml | 7 +++++++
 1 file changed, 7 insertions(+)

diff --git a/i18n/zh-tw.yaml b/i18n/zh-tw.yaml
index d9e124e..17eb6b2 100644
--- a/i18n/zh-tw.yaml
+++ b/i18n/zh-tw.yaml
@@ -47,3 +47,10 @@ search:
 
     resultTitle:
         other: "#PAGES_COUNT 個結果 (用時 #TIME_SECONDS 秒)"
+
+footer:
+    builtWith:
+        other: 使用 {{ .Generator }} 建立
+
+    designedBy:
+        other: 主題 {{ .Theme }} 由 {{ .DesignedBy }} 設計

From cb42d2041f56e27a1db41f668604551cdd9830b0 Mon Sep 17 00:00:00 2001
From: Nagakawa Yuno <43836984+Furffico@users.noreply.github.com>
Date: Fri, 17 Feb 2023 03:03:32 +0800
Subject: [PATCH 08/26] fix: KaTeX may render contents in gist under certain
 conditions (#755)

add gist to katex's ignoredClasses
---
 layouts/partials/article/components/math.html | 3 ++-
 1 file changed, 2 insertions(+), 1 deletion(-)

diff --git a/layouts/partials/article/components/math.html b/layouts/partials/article/components/math.html
index d05861c..8e62151 100644
--- a/layouts/partials/article/components/math.html
+++ b/layouts/partials/article/components/math.html
@@ -7,6 +7,7 @@
                 { left: "$", right: "$", display: false },
                 { left: "\\(", right: "\\)", display: false },
                 { left: "\\[", right: "\\]", display: true }
-            ]
+            ],
+            ignoredClasses: ["gist"]
         });})
 </script>
\ No newline at end of file

From aae9cf67db8661e86996f8808baf4f71c472d911 Mon Sep 17 00:00:00 2001
From: Jimmy Cai <github@jimmycai.com>
Date: Thu, 16 Feb 2023 20:07:43 +0100
Subject: [PATCH 09/26] fix: typo in README: stater -> starter

closes https://github.com/CaiJimmy/hugo-theme-stack/issues/764
---
 README.md | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/README.md b/README.md
index 121ea55..b071761 100644
--- a/README.md
+++ b/README.md
@@ -12,7 +12,7 @@ Use this template: [CaiJimmy/hugo-theme-stack-starter](https://github.com/CaiJim
 
 ## Demo
 
-* Stater template demo: [demo.stack.jimmycai.com](https://demo.stack.jimmycai.com)
+* Starter template demo: [demo.stack.jimmycai.com](https://demo.stack.jimmycai.com)
 * Dev build: [dev.stack.jimmycai.com](https://dev.stack.jimmycai.com)
 
 ## Documentation

From 1bd4dcd415de785d1ea25a9e5d30621be2a91502 Mon Sep 17 00:00:00 2001
From: Jacob Zhong <zyxin@umich.edu>
Date: Tue, 11 Jul 2023 21:12:58 -0400
Subject: [PATCH 10/26] fix(sidebar): add `padding-bottom` to the right sidebar
 (#765)

Add bottom padding to the right sidebar
---
 assets/scss/partials/sidebar.scss | 1 +
 1 file changed, 1 insertion(+)

diff --git a/assets/scss/partials/sidebar.scss b/assets/scss/partials/sidebar.scss
index 95310ca..a6a77c5 100644
--- a/assets/scss/partials/sidebar.scss
+++ b/assets/scss/partials/sidebar.scss
@@ -79,6 +79,7 @@
 
     @include respond(lg) {
         padding-top: var(--main-top-padding);
+        padding-bottom: var(--main-top-padding);
     }
 }
 

From a88fe3f5a76f23fa9f4f92350121bee898c25b44 Mon Sep 17 00:00:00 2001
From: Weltolk <40228052+Weltolk@users.noreply.github.com>
Date: Wed, 12 Jul 2023 09:20:25 +0800
Subject: [PATCH 11/26] chore: update twikoo version (#783)

---
 layouts/partials/comments/provider/twikoo.html | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/layouts/partials/comments/provider/twikoo.html b/layouts/partials/comments/provider/twikoo.html
index 9ca3652..182500b 100644
--- a/layouts/partials/comments/provider/twikoo.html
+++ b/layouts/partials/comments/provider/twikoo.html
@@ -1,4 +1,4 @@
-<script src="//cdn.jsdelivr.net/npm/twikoo@1.5.11/dist/twikoo.all.min.js"></script>
+<script src="//cdn.jsdelivr.net/npm/twikoo@1.6.11/dist/twikoo.all.min.js"></script>
 <div id="tcomment"></div>
 <style>
     .twikoo {

From 0bc942bb12c95ef5bf4c48096ca9fcdc5e916140 Mon Sep 17 00:00:00 2001
From: Tsung-Yu Chan <59971988+jkcharlie6679@users.noreply.github.com>
Date: Wed, 12 Jul 2023 03:37:39 +0200
Subject: [PATCH 12/26] fix: remark42 comment system won't show (#799)

---
 layouts/partials/comments/provider/remark42.html | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/layouts/partials/comments/provider/remark42.html b/layouts/partials/comments/provider/remark42.html
index fa284eb..18acf1b 100644
--- a/layouts/partials/comments/provider/remark42.html
+++ b/layouts/partials/comments/provider/remark42.html
@@ -13,7 +13,7 @@
         show_email_subscription: {{ default true .show_email_subscription }}
     };
 
-    function(e, n) {
+    !function(e, n) {
         for (var o = 0; o < e.length; o++) {
             var r = n.createElement('script'),
             c = '.js',

From 58559c5b3fc12f46aa71af2ffb1d05c9665a1d06 Mon Sep 17 00:00:00 2001
From: Piotr Halama <skrzynka@halamix2.pl>
Date: Sat, 15 Jul 2023 03:35:09 +0200
Subject: [PATCH 13/26] feat(i18n): add missing plural forms for the Polish
 language (#818)

Add missing plural forms for the Polish language
---
 i18n/pl.yaml | 15 ++++++++++++---
 1 file changed, 12 insertions(+), 3 deletions(-)

diff --git a/i18n/pl.yaml b/i18n/pl.yaml
index e44a140..9f2982f 100644
--- a/i18n/pl.yaml
+++ b/i18n/pl.yaml
@@ -7,6 +7,8 @@ darkMode:
 list:
     page:
         one: "{{ .Count }} strona"
+        few: "{{ .Count }} strony"
+        many: "{{ .Count }} stron"
         other: "{{ .Count }} stron"
 
     section:
@@ -14,7 +16,9 @@ list:
 
     subsection:
         one: Podsekcja
-        other: Podsekcje
+        few: Podsekcje
+        many: Podsekcji
+        other: Podsekcji
 
 article:
     back:
@@ -28,9 +32,11 @@ article:
 
     lastUpdatedOn:
         other: Ostatnio zaktualizowany
-    
+
     readingTime:
         one: "Przeczytasz w {{ .Count }} minutę"
+        few: "Przeczytasz w {{ .Count }} minuty"
+        many: "Przeczytasz w {{ .Count }} minut"
         other: "Przeczytasz w {{ .Count }} minut"
 
 notFound:
@@ -50,7 +56,7 @@ widget:
     tagCloud:
         title:
             other: Tagi
-    
+
     categoriesCloud:
         title:
             other: Kategorie
@@ -63,6 +69,9 @@ search:
         other: Wpisz coś...
 
     resultTitle:
+        one: "#PAGES_COUNT strona (#TIME_SECONDS sekund)"
+        few: "#PAGES_COUNT strony (#TIME_SECONDS sekund)"
+        many: "#PAGES_COUNT stron (#TIME_SECONDS sekund)"
         other: "#PAGES_COUNT stron (#TIME_SECONDS sekund)"
 
 footer:

From 2fb534f9a6dbd2edfafa81034d37ba92eec06473 Mon Sep 17 00:00:00 2001
From: SimbaFs <39305460+simbafs@users.noreply.github.com>
Date: Sat, 15 Jul 2023 10:13:16 +0800
Subject: [PATCH 14/26] feat(i18n): update translations for `zh-tw` (#786)

* sync with latest

* translate zh-tw
---
 i18n/zh-tw.yaml | 17 +++++++++++++++++
 1 file changed, 17 insertions(+)

diff --git a/i18n/zh-tw.yaml b/i18n/zh-tw.yaml
index 17eb6b2..4b71572 100644
--- a/i18n/zh-tw.yaml
+++ b/i18n/zh-tw.yaml
@@ -4,6 +4,18 @@ toggleMenu:
 darkMode:
     other: 夜晚模式
 
+list:
+    page:
+        one: "第 {{ .Count }} 頁"
+        other: "第 {{ .Count }} 頁"
+
+    section:
+        other: 段落
+
+    subsection:
+        one: 小節
+        other: 小節
+
 article:
     back:
         other: 返回
@@ -18,11 +30,13 @@ article:
         other: 最後更新
 
     readingTime:
+        one: "閱讀時間: {{ .Count }} 分鐘"
         other: "閱讀時間: {{ .Count }} 分鐘"
 
 notFound:
     title:
         other: 404 錯誤
+
     subtitle:
         other: 頁面不存在
 
@@ -37,6 +51,9 @@ widget:
     tagCloud:
         title:
             other: 標籤雲
+    categoriesCloud:
+        title:
+            other: 分類
 
 search:
     title:

From 13568d8ff0f789c28c7caaa49e6ef78effc5f47a Mon Sep 17 00:00:00 2001
From: Jimmy Cai <github@jimmycai.com>
Date: Tue, 18 Jul 2023 00:07:02 +0000
Subject: [PATCH 15/26] release: 3.17.0

---
 layouts/partials/footer/footer.html | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/layouts/partials/footer/footer.html b/layouts/partials/footer/footer.html
index 49caa89..c8d30cb 100644
--- a/layouts/partials/footer/footer.html
+++ b/layouts/partials/footer/footer.html
@@ -1,4 +1,4 @@
-{{- $ThemeVersion := "3.16.0" -}}
+{{- $ThemeVersion := "3.17.0" -}}
 <footer class="site-footer">
     <section class="copyright">
         &copy; 

From 51e0ec7f99c659c5730e79f313ff79a07d8aff78 Mon Sep 17 00:00:00 2001
From: Rich <git0@bitservices.io>
Date: Sat, 12 Aug 2023 10:29:56 +0100
Subject: [PATCH 16/26] feat: allow footer copyright to be different to the
 site title (#839)

* Allow copyright to be different to the site title

* Add copyright to exampleSite
---
 exampleSite/config.yaml             | 1 +
 layouts/partials/footer/footer.html | 2 +-
 2 files changed, 2 insertions(+), 1 deletion(-)

diff --git a/exampleSite/config.yaml b/exampleSite/config.yaml
index c1b48dd..78354f2 100644
--- a/exampleSite/config.yaml
+++ b/exampleSite/config.yaml
@@ -3,6 +3,7 @@ languageCode: en-us
 theme: hugo-theme-stack
 paginate: 5
 title: Example Site
+copyright: Example Person
 
 languages:
     en:
diff --git a/layouts/partials/footer/footer.html b/layouts/partials/footer/footer.html
index c8d30cb..a677482 100644
--- a/layouts/partials/footer/footer.html
+++ b/layouts/partials/footer/footer.html
@@ -5,7 +5,7 @@
         {{ if and (.Site.Params.footer.since) (ne .Site.Params.footer.since (int (now.Format "2006"))) }}
             {{ .Site.Params.footer.since }} - 
         {{ end }}
-        {{ now.Format "2006" }} {{ .Site.Title }}
+        {{ now.Format "2006" }} {{ default .Site.Title .Site.Copyright }}
     </section>
     
     <section class="powerby">

From 26d2859f7040670bf5aba1e0aa4be6ed51f8cba7 Mon Sep 17 00:00:00 2001
From: Mehedi Hasan <0xmehedi@tutanota.com>
Date: Sat, 12 Aug 2023 15:57:02 +0600
Subject: [PATCH 17/26] fix: very poor color contrast for default text (#845)

Resolves #754

Co-authored-by: Nick Kocharhook <nick@kocharhook.com>
---
 assets/scss/variables.scss | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/assets/scss/variables.scss b/assets/scss/variables.scss
index afddb80..47b7978 100644
--- a/assets/scss/variables.scss
+++ b/assets/scss/variables.scss
@@ -16,7 +16,7 @@ $defaultTagColors: #fff, #fff, #fff, #fff, #fff;
     --accent-color: #34495e;
     --accent-color-darker: #2c3e50;
     --accent-color-text: #fff;
-    --body-text-color: #bababa;
+    --body-text-color: #707070;
 
     --tag-border-radius: 4px;
 
@@ -56,7 +56,7 @@ $defaultTagColors: #fff, #fff, #fff, #fff, #fff;
 
     --card-text-color-main: #000;
     --card-text-color-secondary: #747474;
-    --card-text-color-tertiary: #bababa;
+    --card-text-color-tertiary: #767676;
     --card-separator-color: rgba(218, 218, 218, 0.5);
 
     --card-border-radius: 10px;

From cabaf06ef2716885fd751ef191018c9da48ecbf9 Mon Sep 17 00:00:00 2001
From: Jimmy Cai <hi@jimmycai.com>
Date: Sat, 12 Aug 2023 12:20:19 +0200
Subject: [PATCH 18/26] fix: custom params on the language top level is
 deprecated (#857)

* fix: custom params on the language top level is deprecated

New with Hugo 0.112.0

closes #853

* ci: upgrade Netlify CI Hugo version to 0.117.0
---
 exampleSite/config.yaml | 9 ++++++---
 netlify.toml            | 2 +-
 2 files changed, 7 insertions(+), 4 deletions(-)

diff --git a/exampleSite/config.yaml b/exampleSite/config.yaml
index 78354f2..80f3bf0 100644
--- a/exampleSite/config.yaml
+++ b/exampleSite/config.yaml
@@ -9,19 +9,22 @@ languages:
     en:
         languageName: English
         title: Example Site
-        description: Example description
         weight: 1
+        params:
+            description: Example description
     zh-cn:
         languageName: 中文
         title: 演示站点
-        description: 演示说明
         weight: 2
+        params:
+            description: 演示说明
     ar:
         languageName: عربي
         languagedirection: rtl
         title: موقع تجريبي
-        description: وصف تجريبي
         weight: 3
+        params:
+            description: وصف تجريبي
 
 # Change it to your Disqus shortname before using
 disqusShortname: hugo-theme-stack
diff --git a/netlify.toml b/netlify.toml
index 90a0360..229f970 100644
--- a/netlify.toml
+++ b/netlify.toml
@@ -2,7 +2,7 @@
     publish = "exampleSite/public"
 
 [build.environment]
-    HUGO_VERSION = "0.100.2"
+    HUGO_VERSION = "0.117.0"
     HUGO_THEME = "repo"
 
 [context.production]

From f7e442cabb7475ae9c8a327efa1441694d1883c1 Mon Sep 17 00:00:00 2001
From: Jimmy Cai <hi@jimmycai.com>
Date: Sat, 12 Aug 2023 13:03:45 +0200
Subject: [PATCH 19/26] fix(search): reset `lastSearch` variable if keywords
 are empty (#858)

closes https://github.com/CaiJimmy/hugo-theme-stack/issues/832
---
 assets/ts/search.tsx | 1 +
 1 file changed, 1 insertion(+)

diff --git a/assets/ts/search.tsx b/assets/ts/search.tsx
index 68db7b3..856b48d 100644
--- a/assets/ts/search.tsx
+++ b/assets/ts/search.tsx
@@ -227,6 +227,7 @@ class Search {
             Search.updateQueryString(keywords, true);
 
             if (keywords === '') {
+                lastSearch = '';
                 return this.clear();
             }
 

From 1668ebc3e4004ffcd06f62fe13253a6b25e4351b Mon Sep 17 00:00:00 2001
From: Jimmy Cai <hi@jimmycai.com>
Date: Tue, 15 Aug 2023 11:40:43 +0200
Subject: [PATCH 20/26] feat: use `.RelPermalink` for search JSON (#859)

Avoids CORS problem when the user inputs `baseurl` incorrectly.
---
 layouts/page/search.html | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/layouts/page/search.html b/layouts/page/search.html
index 7c424a6..fbfb74d 100644
--- a/layouts/page/search.html
+++ b/layouts/page/search.html
@@ -1,11 +1,11 @@
 {{ define "body-class" }}template-search{{ end }}
 {{ define "head" }}
     {{- with .OutputFormats.Get "json" -}} 
-        <link rel="preload" href="{{ .Permalink }}" as="fetch" crossorigin="anonymous">
+        <link rel="preload" href="{{ .RelPermalink }}" as="fetch" crossorigin="anonymous">
     {{- end -}}
 {{ end }}
 {{ define "main" }}
-<form action="{{ .Permalink }}" class="search-form"{{ with .OutputFormats.Get "json" -}} data-json="{{ .Permalink }}"{{- end }}>
+<form action="{{ .RelPermalink }}" class="search-form"{{ with .OutputFormats.Get "json" -}} data-json="{{ .RelPermalink }}"{{- end }}>
     <p>
         <label>{{ T "search.title" }}</label>
         <input name="keyword" placeholder="{{ T `search.placeholder` }}" />

From eefa68666171e3fcf413a00b1e91aebe8e9874e5 Mon Sep 17 00:00:00 2001
From: Jimmy Cai <hi@jimmycai.com>
Date: Tue, 15 Aug 2023 11:47:48 +0200
Subject: [PATCH 21/26] fix: add `word-break: break-word;` to `<a>` and
 `<code>` (#860)

closes https://github.com/CaiJimmy/hugo-theme-stack/issues/746
---
 assets/scss/partials/layout/article.scss | 5 +++++
 1 file changed, 5 insertions(+)

diff --git a/assets/scss/partials/layout/article.scss b/assets/scss/partials/layout/article.scss
index 97c7e77..e030b4d 100644
--- a/assets/scss/partials/layout/article.scss
+++ b/assets/scss/partials/layout/article.scss
@@ -264,6 +264,11 @@
         font-family: var(--code-font-family);
     }
 
+    a,
+    code {
+        word-break: break-word;
+    }
+
     .gallery {
         position: relative;
         display: flex;

From 4e2e90da4c8a03c0bde2baba2e92c12209cdd3ca Mon Sep 17 00:00:00 2001
From: Jimmy Cai <hi@jimmycai.com>
Date: Tue, 15 Aug 2023 12:46:29 +0200
Subject: [PATCH 22/26] fix: page translation links overflow (#861)

closes https://github.com/CaiJimmy/hugo-theme-stack/issues/788
---
 assets/scss/partials/article.scss | 13 +++++++++++--
 1 file changed, 11 insertions(+), 2 deletions(-)

diff --git a/assets/scss/partials/article.scss b/assets/scss/partials/article.scss
index f085ff0..2c3a7af 100644
--- a/assets/scss/partials/article.scss
+++ b/assets/scss/partials/article.scss
@@ -92,16 +92,15 @@
 .article-time,
 .article-translations {
     display: flex;
-    align-items: center;
     color: var(--card-text-color-tertiary);
     gap: 15px;
-    flex-wrap: wrap;
 
     svg {
         vertical-align: middle;
         width: 20px;
         height: 20px;
         stroke-width: 1.33;
+        flex-shrink: 0;
     }
 
     time,
@@ -117,6 +116,16 @@
     }
 }
 
+.article-time {
+    flex-wrap: wrap;
+}
+
+.article-translations {
+    & > div {
+        flex-wrap: wrap;
+    }
+}
+
 .article-category,
 .article-tags {
     display: flex;

From 41c3033d1ac6b9596ce3ae861484e855b619705a Mon Sep 17 00:00:00 2001
From: Jimmy Cai <hi@jimmycai.com>
Date: Tue, 15 Aug 2023 13:15:32 +0200
Subject: [PATCH 23/26] feat(article): add style to `<kbd>` tag (#862)

* fix: set `unsafe` to true for exampleSite

To display `<kbd>` tag correctly

* feat(article): add style to `kbd` tag

* feat: improve `<kbd>` style
---
 assets/scss/partials/layout/article.scss          | 10 ++++++++++
 assets/scss/variables.scss                        |  2 ++
 exampleSite/config.yaml                           |  2 +-
 exampleSite/content/post/markdown-syntax/index.md |  2 +-
 4 files changed, 14 insertions(+), 2 deletions(-)

diff --git a/assets/scss/partials/layout/article.scss b/assets/scss/partials/layout/article.scss
index e030b4d..73757e4 100644
--- a/assets/scss/partials/layout/article.scss
+++ b/assets/scss/partials/layout/article.scss
@@ -423,4 +423,14 @@
         overflow-x: auto;
         overflow-y: hidden;
     }
+
+    kbd {
+        border: 1px solid var(--kbd-border-color);
+        font-weight: bold;
+        font-size: 0.9em;
+        line-height: 1;
+        padding: 2px 4px;
+        border-radius: 4px;
+        display: inline-block;
+    }
 }
diff --git a/assets/scss/variables.scss b/assets/scss/variables.scss
index 47b7978..6709f0c 100644
--- a/assets/scss/variables.scss
+++ b/assets/scss/variables.scss
@@ -123,6 +123,8 @@ $defaultTagColors: #fff, #fff, #fff, #fff, #fff;
     --table-border-color: #dadada;
     --tr-even-background-color: #efefee;
 
+    --kbd-border-color: #dadada;
+
     &[data-scheme="dark"] {
         --code-background-color: #272822;
         --code-text-color: rgba(255, 255, 255, 0.9);
diff --git a/exampleSite/config.yaml b/exampleSite/config.yaml
index 80f3bf0..b723dea 100644
--- a/exampleSite/config.yaml
+++ b/exampleSite/config.yaml
@@ -228,7 +228,7 @@ markup:
     goldmark:
         renderer:
             ## Set to true if you have HTML content inside Markdown
-            unsafe: false
+            unsafe: true
     tableOfContents:
         endLevel: 4
         ordered: true
diff --git a/exampleSite/content/post/markdown-syntax/index.md b/exampleSite/content/post/markdown-syntax/index.md
index 0254cca..c584c4c 100644
--- a/exampleSite/content/post/markdown-syntax/index.md
+++ b/exampleSite/content/post/markdown-syntax/index.md
@@ -159,7 +159,7 @@ H<sub>2</sub>O
 
 X<sup>n</sup> + Y<sup>n</sup> = Z<sup>n</sup>
 
-Press <kbd><kbd>CTRL</kbd>+<kbd>ALT</kbd>+<kbd>Delete</kbd></kbd> to end the session.
+Press <kbd>CTRL</kbd> + <kbd>ALT</kbd> + <kbd>Delete</kbd> to end the session.
 
 Most <mark>salamanders</mark> are nocturnal, and hunt for insects, worms, and other small creatures.
 

From 5edd4afaf383d659d37e2ff8131cb4273c04e62e Mon Sep 17 00:00:00 2001
From: Jimmy Cai <hi@jimmycai.com>
Date: Tue, 15 Aug 2023 13:17:22 +0200
Subject: [PATCH 24/26] release: 3.18.0

---
 layouts/partials/footer/footer.html | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/layouts/partials/footer/footer.html b/layouts/partials/footer/footer.html
index a677482..45bed2c 100644
--- a/layouts/partials/footer/footer.html
+++ b/layouts/partials/footer/footer.html
@@ -1,4 +1,4 @@
-{{- $ThemeVersion := "3.17.0" -}}
+{{- $ThemeVersion := "3.18.0" -}}
 <footer class="site-footer">
     <section class="copyright">
         &copy; 

From 5d9062444164c11b15f98f270a8615bf0f06f1bf Mon Sep 17 00:00:00 2001
From: Brandon Szeto <99768694+brandonszeto@users.noreply.github.com>
Date: Wed, 16 Aug 2023 05:21:23 -0700
Subject: [PATCH 25/26] doc: Inline math example previously not working as
 intended (#834)

Inline math example previously not working as intended
---
 exampleSite/content/post/math-typesetting/index.md | 6 +-----
 1 file changed, 1 insertion(+), 5 deletions(-)

diff --git a/exampleSite/content/post/math-typesetting/index.md b/exampleSite/content/post/math-typesetting/index.md
index 48fdc79..ce8d0bf 100644
--- a/exampleSite/content/post/math-typesetting/index.md
+++ b/exampleSite/content/post/math-typesetting/index.md
@@ -37,11 +37,7 @@ In this example we will be using [KaTeX](https://katex.org/)
 
 ### Examples
 
-{{< math.inline >}}
-<p>
-Inline math: \(\varphi = \dfrac{1+\sqrt5}{2}= 1.6180339887…\)
-</p>
-{{</ math.inline >}}
+Inline math: $\varphi = \dfrac{1+\sqrt5}{2}= 1.6180339887…$
 
 Block math:
 $$

From c6d1d73dd21ff5e1c9c52db358e49857b3e0a6df Mon Sep 17 00:00:00 2001
From: Jimmy Cai <hi@jimmycai.com>
Date: Thu, 17 Aug 2023 11:15:07 +0200
Subject: [PATCH 26/26] chore: update issue report template to include minimal
 reproducible example (#864)

---
 .github/ISSUE_TEMPLATE/bug_report.yml | 26 ++++++++------------------
 1 file changed, 8 insertions(+), 18 deletions(-)

diff --git a/.github/ISSUE_TEMPLATE/bug_report.yml b/.github/ISSUE_TEMPLATE/bug_report.yml
index d1d9a10..07743e1 100644
--- a/.github/ISSUE_TEMPLATE/bug_report.yml
+++ b/.github/ISSUE_TEMPLATE/bug_report.yml
@@ -1,17 +1,15 @@
 name: Bug Report
 description: File a bug report
-title: "[Bug]: "
-labels: ["bug"]
 body:
   - type: markdown
     attributes:
       value: |
-        Thanks for taking the time to fill out this bug report! Please provide as much information as possible and make sure you have checked the [documentation](https://docs.stack.jimmycai.com/).
+        Thanks for taking the time to fill out this bug report! Please provide as much information as possible and make sure you have checked the [documentation](https://stack.jimmycai.com/).
   - type: textarea
     id: what-happened
     attributes:
       label: What happened?
-      description: Also tell us, what did you expect to happen? Please be as detailed as possible, include screenshots and any other information that might help us reproduce the problem.
+      description: Also tell us, what did you expect to happen? Please be as detailed as possible, including screenshots and any other information that might help us reproduce the problem.
       placeholder: Tell us what you see!
     validations:
       required: true
@@ -55,21 +53,13 @@ body:
       label: Relevant log output
       description: Please copy and paste any relevant log output. This will be automatically formatted into code, so no need for backticks.
       render: shell
-  - type: markdown
-    attributes:
-      value: |
-        If the issue is not present on the [demo site](https://demo.stack.jimmycai.com), in order to better understand the problem, please provide the link to the source code of your website (not the generated HTML). 
-        Or link to a minimal reproduction of the problem if there are sensible data.
   - type: input
-    id: bug-url
+    id: minimal-reproduction-url
     attributes:
-      label: Link to the page with bug
-      placeholder: https://demo.stack.jimmycai.com
-      value: https://demo.stack.jimmycai.com
+      label: Link to Minimal Reproducible Example
+      description: | 
+        Use [CaiJimmy/hugo-theme-stack-starter](https://github.com/CaiJimmy/hugo-theme-stack-starter) to create a minimal reproduction of the problem. 
+        A minimal reproduction is required so that others can help debug your issue. If a report is vague (e.g. just a generic error message) and has no reproduction, it may be auto-closed. 
+      placeholder: https://github.com/username/your-repository
     validations:
       required: true
-  - type: input
-    id: source-repo
-    attributes:
-      label: Link to the source repository
-      placeholder: https://github.com/CaiJimmy/hugo-theme-stack