├── index.html ├── assets ├── css │ ├── main.scss │ └── bootstrap-iso.less ├── favicon.ico ├── img │ ├── lineart.png │ ├── triangle.png │ ├── screenshot.png │ ├── portfolio │ │ ├── toh.png │ │ ├── ttt.png │ │ ├── cabin.png │ │ ├── cake.png │ │ ├── game.png │ │ ├── ninja.png │ │ ├── safe.png │ │ ├── circus.png │ │ ├── github.png │ │ ├── submarine.png │ │ └── jekyllblog2.png │ ├── mermaid-example.png │ ├── pexels │ │ ├── travel.jpeg │ │ ├── book-glass.jpeg │ │ ├── computer.jpeg │ │ └── search-map.jpeg │ ├── feature-img │ │ ├── story.jpeg │ │ ├── circuit.jpeg │ │ └── desk-messy.jpeg │ ├── header │ │ ├── triangular.jpeg │ │ ├── triangular-medium.jpeg │ │ └── triangular-small.jpeg │ ├── thumbnails │ │ └── feature-img │ │ │ ├── story.jpeg │ │ │ ├── circuit.jpeg │ │ │ └── desk-messy.jpeg │ └── triangle.svg ├── fonts │ ├── Pacifico │ │ ├── Pacifico.eot │ │ ├── Pacifico.ttf │ │ ├── Pacifico.woff │ │ ├── Pacifico.woff2 │ │ └── original-pacifico-regular.ttf │ ├── katex │ │ ├── KaTeX_Main-Bold.ttf │ │ ├── KaTeX_AMS-Regular.ttf │ │ ├── KaTeX_Main-Bold.woff │ │ ├── KaTeX_Main-Bold.woff2 │ │ ├── KaTeX_Main-Italic.ttf │ │ ├── KaTeX_Math-Italic.ttf │ │ ├── KaTeX_AMS-Regular.woff │ │ ├── KaTeX_AMS-Regular.woff2 │ │ ├── KaTeX_Fraktur-Bold.ttf │ │ ├── KaTeX_Fraktur-Bold.woff │ │ ├── KaTeX_Fraktur-Bold.woff2 │ │ ├── KaTeX_Main-Italic.woff │ │ ├── KaTeX_Main-Italic.woff2 │ │ ├── KaTeX_Main-Regular.ttf │ │ ├── KaTeX_Main-Regular.woff │ │ ├── KaTeX_Main-Regular.woff2 │ │ ├── KaTeX_Math-Italic.woff │ │ ├── KaTeX_Math-Italic.woff2 │ │ ├── KaTeX_SansSerif-Bold.ttf │ │ ├── KaTeX_Script-Regular.ttf │ │ ├── KaTeX_Size1-Regular.ttf │ │ ├── KaTeX_Size1-Regular.woff │ │ ├── KaTeX_Size2-Regular.ttf │ │ ├── KaTeX_Size2-Regular.woff │ │ ├── KaTeX_Size3-Regular.ttf │ │ ├── KaTeX_Size3-Regular.woff │ │ ├── KaTeX_Size4-Regular.ttf │ │ ├── KaTeX_Size4-Regular.woff │ │ ├── KaTeX_Caligraphic-Bold.ttf │ │ ├── KaTeX_Fraktur-Regular.ttf │ │ ├── KaTeX_Fraktur-Regular.woff │ │ ├── KaTeX_Main-BoldItalic.ttf │ │ ├── KaTeX_Main-BoldItalic.woff │ │ ├── KaTeX_Math-BoldItalic.ttf │ │ ├── KaTeX_Math-BoldItalic.woff │ │ ├── KaTeX_SansSerif-Bold.woff │ │ ├── KaTeX_SansSerif-Bold.woff2 │ │ ├── KaTeX_SansSerif-Italic.ttf │ │ ├── KaTeX_Script-Regular.woff │ │ ├── KaTeX_Script-Regular.woff2 │ │ ├── KaTeX_Size1-Regular.woff2 │ │ ├── KaTeX_Size2-Regular.woff2 │ │ ├── KaTeX_Size3-Regular.woff2 │ │ ├── KaTeX_Size4-Regular.woff2 │ │ ├── KaTeX_Caligraphic-Bold.woff │ │ ├── KaTeX_Caligraphic-Bold.woff2 │ │ ├── KaTeX_Caligraphic-Regular.ttf │ │ ├── KaTeX_Fraktur-Regular.woff2 │ │ ├── KaTeX_Main-BoldItalic.woff2 │ │ ├── KaTeX_Math-BoldItalic.woff2 │ │ ├── KaTeX_SansSerif-Italic.woff │ │ ├── KaTeX_SansSerif-Italic.woff2 │ │ ├── KaTeX_SansSerif-Regular.ttf │ │ ├── KaTeX_SansSerif-Regular.woff │ │ ├── KaTeX_SansSerif-Regular.woff2 │ │ ├── KaTeX_Typewriter-Regular.ttf │ │ ├── KaTeX_Typewriter-Regular.woff │ │ ├── KaTeX_Caligraphic-Regular.woff │ │ ├── KaTeX_Caligraphic-Regular.woff2 │ │ └── KaTeX_Typewriter-Regular.woff2 │ ├── font-awesome │ │ ├── fa-brands-400.ttf │ │ ├── fa-solid-900.ttf │ │ ├── fa-brands-400.woff2 │ │ ├── fa-regular-400.ttf │ │ ├── fa-solid-900.woff2 │ │ ├── fa-regular-400.woff2 │ │ ├── fa-v4compatibility.ttf │ │ └── fa-v4compatibility.woff2 │ └── source-sans-pro │ │ ├── source-sans-pro-bold.woff2 │ │ ├── source-sans-pro-italic.woff2 │ │ ├── source-sans-pro-regular.woff2 │ │ └── source-sans-pro-bold-italic.woff2 ├── data │ └── search.liquid ├── Dockerfile ├── js │ ├── partials │ │ ├── masonry_init.js │ │ ├── navbar.js │ │ ├── cookie_consent_init.js │ │ └── dark-mode.js │ ├── comments-lazy-load.min.js │ ├── main.min.js │ └── vendor │ │ └── katex.auto-render.min.js └── package.json ├── .github ├── workflows │ ├── ruby-2.7.4 │ │ └── Gemfile │ ├── labeler.yml │ ├── build.yml │ ├── release-drafter.yml │ ├── docker-build.yml │ ├── gem-github-page.yml │ ├── gem-build.yml │ ├── publish-build.yml │ ├── vendor-testing.yml │ └── e2e-tests.yml ├── labeler.yml ├── dependabot.yaml ├── hooks │ ├── README.md │ └── pre-commit ├── PULL_REQUEST_TEMPLATE.md ├── Docs.md ├── release-drafter.yml ├── ISSUE_TEMPLATE │ ├── bug_report.md │ └── feature_request.md ├── stale.yml ├── tests │ ├── jest.config.js │ ├── package.json │ ├── e2e │ │ └── helpers.js │ ├── unit │ │ └── fixtures │ │ │ └── comment-containers.js │ └── playwright.config.js ├── config.yml ├── scripts │ ├── validate-jekyll-search.sh │ ├── validate-masonry.sh │ ├── validate-imagesloaded.sh │ ├── validate-vendor.sh │ ├── validate-mermaid.sh │ └── validate-katex.sh └── .travis.yml ├── pages ├── tags.md ├── categories.md ├── archive.md ├── 404.md ├── search.md ├── portfolio.md ├── gallery.md └── about.md ├── _sass ├── external │ ├── font-awesome │ │ ├── _fixed-width.scss │ │ ├── _sizing.scss │ │ ├── v4-shims.scss │ │ ├── _screen-reader.scss │ │ ├── _icons.scss │ │ ├── _list.scss │ │ ├── fontawesome.scss │ │ ├── _rotated-flipped.scss │ │ ├── _stacked.scss │ │ ├── _bordered-pulled.scss │ │ ├── solid.scss │ │ ├── regular.scss │ │ ├── brands.scss │ │ ├── _core.scss │ │ ├── _functions.scss │ │ └── _mixins.scss │ ├── _katex.scss │ ├── _font-awesome.scss │ ├── _pacifico.scss │ └── _source-sans-pro.scss ├── layouts │ ├── _page.scss │ ├── _tags.scss │ ├── _search.scss │ ├── _blog.scss │ └── _categories.scss ├── includes │ ├── _post_nav.scss │ ├── _footer.scss │ ├── _aligner.scss │ ├── _share_buttons.scss │ ├── _gallery.scss │ ├── _blog_nav.scss │ ├── _portfolio.scss │ └── _navbar.scss ├── type-on-strap.scss └── base │ └── _utility.scss ├── _includes ├── citation.html ├── social │ ├── disqus.liquid │ ├── cusdis.liquid │ ├── utterances.liquid │ ├── icons.liquid │ └── giscus.liquid ├── default │ ├── tags_list.liquid │ ├── category_list.liquid │ ├── footer.liquid │ ├── navbar.liquid │ └── search_json.liquid ├── blog │ ├── post_nav.liquid │ ├── post_info.liquid │ ├── blog.liquid │ ├── blog_nav.liquid │ └── post_footer.liquid ├── portfolio.html ├── aligner.html └── gallery.html ├── _data ├── biblio.yml ├── menu.yml ├── social.yml ├── authors.yml ├── icons.yml ├── language.yml ├── comments.yml └── icons_builder.yml ├── _posts ├── 2013-10-18-blogging-with-title.md ├── 2014-11-27-whats-your-title.md ├── 2019-05-18-color-post.md ├── 2021-04-27-dark-mode.md ├── 2018-10-29-feature-images.md ├── 2014-11-28-markdown-and-html.md ├── 2014-08-08-Markup-Syntax-Highlighting.md └── 2019-06-30-sample-post.md ├── Gemfile ├── _layouts ├── default.html ├── search.liquid ├── home.liquid ├── custom.liquid ├── archive.liquid ├── page.liquid ├── post.liquid └── tags.liquid ├── .gitignore ├── _portfolio ├── jekyllblog.md ├── ninja.md ├── circus.md ├── gitlecture.md ├── hanoi.md ├── tictactoe.md ├── submarine.md ├── cake.md └── safe.md ├── LICENSE ├── type-on-strap.gemspec ├── .gitpod.yml └── _config.yml /index.html: -------------------------------------------------------------------------------- 1 | --- 2 | layout: home 3 | --- 4 | -------------------------------------------------------------------------------- /assets/css/main.scss: -------------------------------------------------------------------------------- 1 | --- 2 | --- 3 | 4 | @import "type-on-strap"; 5 | -------------------------------------------------------------------------------- /.github/workflows/ruby-2.7.4/Gemfile: -------------------------------------------------------------------------------- 1 | source 'https://rubygems.org' 2 | gem 'github-pages' 3 | -------------------------------------------------------------------------------- /assets/favicon.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sylhare/Type-on-Strap/HEAD/assets/favicon.ico -------------------------------------------------------------------------------- /assets/img/lineart.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sylhare/Type-on-Strap/HEAD/assets/img/lineart.png -------------------------------------------------------------------------------- /assets/img/triangle.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sylhare/Type-on-Strap/HEAD/assets/img/triangle.png -------------------------------------------------------------------------------- /assets/img/screenshot.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sylhare/Type-on-Strap/HEAD/assets/img/screenshot.png -------------------------------------------------------------------------------- /assets/img/portfolio/toh.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sylhare/Type-on-Strap/HEAD/assets/img/portfolio/toh.png -------------------------------------------------------------------------------- /assets/img/portfolio/ttt.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sylhare/Type-on-Strap/HEAD/assets/img/portfolio/ttt.png -------------------------------------------------------------------------------- /assets/img/mermaid-example.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sylhare/Type-on-Strap/HEAD/assets/img/mermaid-example.png -------------------------------------------------------------------------------- /assets/img/pexels/travel.jpeg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sylhare/Type-on-Strap/HEAD/assets/img/pexels/travel.jpeg -------------------------------------------------------------------------------- /assets/img/portfolio/cabin.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sylhare/Type-on-Strap/HEAD/assets/img/portfolio/cabin.png -------------------------------------------------------------------------------- /assets/img/portfolio/cake.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sylhare/Type-on-Strap/HEAD/assets/img/portfolio/cake.png -------------------------------------------------------------------------------- /assets/img/portfolio/game.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sylhare/Type-on-Strap/HEAD/assets/img/portfolio/game.png -------------------------------------------------------------------------------- /assets/img/portfolio/ninja.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sylhare/Type-on-Strap/HEAD/assets/img/portfolio/ninja.png -------------------------------------------------------------------------------- /assets/img/portfolio/safe.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sylhare/Type-on-Strap/HEAD/assets/img/portfolio/safe.png -------------------------------------------------------------------------------- /assets/img/feature-img/story.jpeg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sylhare/Type-on-Strap/HEAD/assets/img/feature-img/story.jpeg -------------------------------------------------------------------------------- /assets/img/header/triangular.jpeg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sylhare/Type-on-Strap/HEAD/assets/img/header/triangular.jpeg -------------------------------------------------------------------------------- /assets/img/pexels/book-glass.jpeg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sylhare/Type-on-Strap/HEAD/assets/img/pexels/book-glass.jpeg -------------------------------------------------------------------------------- /assets/img/pexels/computer.jpeg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sylhare/Type-on-Strap/HEAD/assets/img/pexels/computer.jpeg -------------------------------------------------------------------------------- /assets/img/pexels/search-map.jpeg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sylhare/Type-on-Strap/HEAD/assets/img/pexels/search-map.jpeg -------------------------------------------------------------------------------- /assets/img/portfolio/circus.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sylhare/Type-on-Strap/HEAD/assets/img/portfolio/circus.png -------------------------------------------------------------------------------- /assets/img/portfolio/github.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sylhare/Type-on-Strap/HEAD/assets/img/portfolio/github.png -------------------------------------------------------------------------------- /assets/fonts/Pacifico/Pacifico.eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sylhare/Type-on-Strap/HEAD/assets/fonts/Pacifico/Pacifico.eot -------------------------------------------------------------------------------- /assets/fonts/Pacifico/Pacifico.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sylhare/Type-on-Strap/HEAD/assets/fonts/Pacifico/Pacifico.ttf -------------------------------------------------------------------------------- /assets/fonts/Pacifico/Pacifico.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sylhare/Type-on-Strap/HEAD/assets/fonts/Pacifico/Pacifico.woff -------------------------------------------------------------------------------- /assets/img/feature-img/circuit.jpeg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sylhare/Type-on-Strap/HEAD/assets/img/feature-img/circuit.jpeg -------------------------------------------------------------------------------- /assets/img/portfolio/submarine.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sylhare/Type-on-Strap/HEAD/assets/img/portfolio/submarine.png -------------------------------------------------------------------------------- /pages/tags.md: -------------------------------------------------------------------------------- 1 | --- 2 | layout: tags 3 | title: Tags 4 | permalink: /tags/ 5 | icon: "fa-tags" 6 | position: 5 7 | --- 8 | 9 | -------------------------------------------------------------------------------- /assets/fonts/Pacifico/Pacifico.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sylhare/Type-on-Strap/HEAD/assets/fonts/Pacifico/Pacifico.woff2 -------------------------------------------------------------------------------- /assets/fonts/katex/KaTeX_Main-Bold.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sylhare/Type-on-Strap/HEAD/assets/fonts/katex/KaTeX_Main-Bold.ttf -------------------------------------------------------------------------------- /assets/img/feature-img/desk-messy.jpeg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sylhare/Type-on-Strap/HEAD/assets/img/feature-img/desk-messy.jpeg -------------------------------------------------------------------------------- /assets/img/portfolio/jekyllblog2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sylhare/Type-on-Strap/HEAD/assets/img/portfolio/jekyllblog2.png -------------------------------------------------------------------------------- /assets/fonts/katex/KaTeX_AMS-Regular.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sylhare/Type-on-Strap/HEAD/assets/fonts/katex/KaTeX_AMS-Regular.ttf -------------------------------------------------------------------------------- /assets/fonts/katex/KaTeX_Main-Bold.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sylhare/Type-on-Strap/HEAD/assets/fonts/katex/KaTeX_Main-Bold.woff -------------------------------------------------------------------------------- /assets/fonts/katex/KaTeX_Main-Bold.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sylhare/Type-on-Strap/HEAD/assets/fonts/katex/KaTeX_Main-Bold.woff2 -------------------------------------------------------------------------------- /assets/fonts/katex/KaTeX_Main-Italic.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sylhare/Type-on-Strap/HEAD/assets/fonts/katex/KaTeX_Main-Italic.ttf -------------------------------------------------------------------------------- /assets/fonts/katex/KaTeX_Math-Italic.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sylhare/Type-on-Strap/HEAD/assets/fonts/katex/KaTeX_Math-Italic.ttf -------------------------------------------------------------------------------- /assets/img/header/triangular-medium.jpeg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sylhare/Type-on-Strap/HEAD/assets/img/header/triangular-medium.jpeg -------------------------------------------------------------------------------- /assets/img/header/triangular-small.jpeg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sylhare/Type-on-Strap/HEAD/assets/img/header/triangular-small.jpeg -------------------------------------------------------------------------------- /assets/fonts/font-awesome/fa-brands-400.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sylhare/Type-on-Strap/HEAD/assets/fonts/font-awesome/fa-brands-400.ttf -------------------------------------------------------------------------------- /assets/fonts/font-awesome/fa-solid-900.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sylhare/Type-on-Strap/HEAD/assets/fonts/font-awesome/fa-solid-900.ttf -------------------------------------------------------------------------------- /assets/fonts/katex/KaTeX_AMS-Regular.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sylhare/Type-on-Strap/HEAD/assets/fonts/katex/KaTeX_AMS-Regular.woff -------------------------------------------------------------------------------- /assets/fonts/katex/KaTeX_AMS-Regular.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sylhare/Type-on-Strap/HEAD/assets/fonts/katex/KaTeX_AMS-Regular.woff2 -------------------------------------------------------------------------------- /assets/fonts/katex/KaTeX_Fraktur-Bold.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sylhare/Type-on-Strap/HEAD/assets/fonts/katex/KaTeX_Fraktur-Bold.ttf -------------------------------------------------------------------------------- /assets/fonts/katex/KaTeX_Fraktur-Bold.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sylhare/Type-on-Strap/HEAD/assets/fonts/katex/KaTeX_Fraktur-Bold.woff -------------------------------------------------------------------------------- /assets/fonts/katex/KaTeX_Fraktur-Bold.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sylhare/Type-on-Strap/HEAD/assets/fonts/katex/KaTeX_Fraktur-Bold.woff2 -------------------------------------------------------------------------------- /assets/fonts/katex/KaTeX_Main-Italic.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sylhare/Type-on-Strap/HEAD/assets/fonts/katex/KaTeX_Main-Italic.woff -------------------------------------------------------------------------------- /assets/fonts/katex/KaTeX_Main-Italic.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sylhare/Type-on-Strap/HEAD/assets/fonts/katex/KaTeX_Main-Italic.woff2 -------------------------------------------------------------------------------- /assets/fonts/katex/KaTeX_Main-Regular.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sylhare/Type-on-Strap/HEAD/assets/fonts/katex/KaTeX_Main-Regular.ttf -------------------------------------------------------------------------------- /assets/fonts/katex/KaTeX_Main-Regular.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sylhare/Type-on-Strap/HEAD/assets/fonts/katex/KaTeX_Main-Regular.woff -------------------------------------------------------------------------------- /assets/fonts/katex/KaTeX_Main-Regular.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sylhare/Type-on-Strap/HEAD/assets/fonts/katex/KaTeX_Main-Regular.woff2 -------------------------------------------------------------------------------- /assets/fonts/katex/KaTeX_Math-Italic.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sylhare/Type-on-Strap/HEAD/assets/fonts/katex/KaTeX_Math-Italic.woff -------------------------------------------------------------------------------- /assets/fonts/katex/KaTeX_Math-Italic.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sylhare/Type-on-Strap/HEAD/assets/fonts/katex/KaTeX_Math-Italic.woff2 -------------------------------------------------------------------------------- /assets/fonts/katex/KaTeX_SansSerif-Bold.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sylhare/Type-on-Strap/HEAD/assets/fonts/katex/KaTeX_SansSerif-Bold.ttf -------------------------------------------------------------------------------- /assets/fonts/katex/KaTeX_Script-Regular.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sylhare/Type-on-Strap/HEAD/assets/fonts/katex/KaTeX_Script-Regular.ttf -------------------------------------------------------------------------------- /assets/fonts/katex/KaTeX_Size1-Regular.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sylhare/Type-on-Strap/HEAD/assets/fonts/katex/KaTeX_Size1-Regular.ttf -------------------------------------------------------------------------------- /assets/fonts/katex/KaTeX_Size1-Regular.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sylhare/Type-on-Strap/HEAD/assets/fonts/katex/KaTeX_Size1-Regular.woff -------------------------------------------------------------------------------- /assets/fonts/katex/KaTeX_Size2-Regular.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sylhare/Type-on-Strap/HEAD/assets/fonts/katex/KaTeX_Size2-Regular.ttf -------------------------------------------------------------------------------- /assets/fonts/katex/KaTeX_Size2-Regular.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sylhare/Type-on-Strap/HEAD/assets/fonts/katex/KaTeX_Size2-Regular.woff -------------------------------------------------------------------------------- /assets/fonts/katex/KaTeX_Size3-Regular.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sylhare/Type-on-Strap/HEAD/assets/fonts/katex/KaTeX_Size3-Regular.ttf -------------------------------------------------------------------------------- /assets/fonts/katex/KaTeX_Size3-Regular.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sylhare/Type-on-Strap/HEAD/assets/fonts/katex/KaTeX_Size3-Regular.woff -------------------------------------------------------------------------------- /assets/fonts/katex/KaTeX_Size4-Regular.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sylhare/Type-on-Strap/HEAD/assets/fonts/katex/KaTeX_Size4-Regular.ttf -------------------------------------------------------------------------------- /assets/fonts/katex/KaTeX_Size4-Regular.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sylhare/Type-on-Strap/HEAD/assets/fonts/katex/KaTeX_Size4-Regular.woff -------------------------------------------------------------------------------- /assets/fonts/font-awesome/fa-brands-400.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sylhare/Type-on-Strap/HEAD/assets/fonts/font-awesome/fa-brands-400.woff2 -------------------------------------------------------------------------------- /assets/fonts/font-awesome/fa-regular-400.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sylhare/Type-on-Strap/HEAD/assets/fonts/font-awesome/fa-regular-400.ttf -------------------------------------------------------------------------------- /assets/fonts/font-awesome/fa-solid-900.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sylhare/Type-on-Strap/HEAD/assets/fonts/font-awesome/fa-solid-900.woff2 -------------------------------------------------------------------------------- /assets/fonts/katex/KaTeX_Caligraphic-Bold.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sylhare/Type-on-Strap/HEAD/assets/fonts/katex/KaTeX_Caligraphic-Bold.ttf -------------------------------------------------------------------------------- /assets/fonts/katex/KaTeX_Fraktur-Regular.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sylhare/Type-on-Strap/HEAD/assets/fonts/katex/KaTeX_Fraktur-Regular.ttf -------------------------------------------------------------------------------- /assets/fonts/katex/KaTeX_Fraktur-Regular.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sylhare/Type-on-Strap/HEAD/assets/fonts/katex/KaTeX_Fraktur-Regular.woff -------------------------------------------------------------------------------- /assets/fonts/katex/KaTeX_Main-BoldItalic.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sylhare/Type-on-Strap/HEAD/assets/fonts/katex/KaTeX_Main-BoldItalic.ttf -------------------------------------------------------------------------------- /assets/fonts/katex/KaTeX_Main-BoldItalic.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sylhare/Type-on-Strap/HEAD/assets/fonts/katex/KaTeX_Main-BoldItalic.woff -------------------------------------------------------------------------------- /assets/fonts/katex/KaTeX_Math-BoldItalic.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sylhare/Type-on-Strap/HEAD/assets/fonts/katex/KaTeX_Math-BoldItalic.ttf -------------------------------------------------------------------------------- /assets/fonts/katex/KaTeX_Math-BoldItalic.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sylhare/Type-on-Strap/HEAD/assets/fonts/katex/KaTeX_Math-BoldItalic.woff -------------------------------------------------------------------------------- /assets/fonts/katex/KaTeX_SansSerif-Bold.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sylhare/Type-on-Strap/HEAD/assets/fonts/katex/KaTeX_SansSerif-Bold.woff -------------------------------------------------------------------------------- /assets/fonts/katex/KaTeX_SansSerif-Bold.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sylhare/Type-on-Strap/HEAD/assets/fonts/katex/KaTeX_SansSerif-Bold.woff2 -------------------------------------------------------------------------------- /assets/fonts/katex/KaTeX_SansSerif-Italic.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sylhare/Type-on-Strap/HEAD/assets/fonts/katex/KaTeX_SansSerif-Italic.ttf -------------------------------------------------------------------------------- /assets/fonts/katex/KaTeX_Script-Regular.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sylhare/Type-on-Strap/HEAD/assets/fonts/katex/KaTeX_Script-Regular.woff -------------------------------------------------------------------------------- /assets/fonts/katex/KaTeX_Script-Regular.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sylhare/Type-on-Strap/HEAD/assets/fonts/katex/KaTeX_Script-Regular.woff2 -------------------------------------------------------------------------------- /assets/fonts/katex/KaTeX_Size1-Regular.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sylhare/Type-on-Strap/HEAD/assets/fonts/katex/KaTeX_Size1-Regular.woff2 -------------------------------------------------------------------------------- /assets/fonts/katex/KaTeX_Size2-Regular.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sylhare/Type-on-Strap/HEAD/assets/fonts/katex/KaTeX_Size2-Regular.woff2 -------------------------------------------------------------------------------- /assets/fonts/katex/KaTeX_Size3-Regular.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sylhare/Type-on-Strap/HEAD/assets/fonts/katex/KaTeX_Size3-Regular.woff2 -------------------------------------------------------------------------------- /assets/fonts/katex/KaTeX_Size4-Regular.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sylhare/Type-on-Strap/HEAD/assets/fonts/katex/KaTeX_Size4-Regular.woff2 -------------------------------------------------------------------------------- /assets/img/thumbnails/feature-img/story.jpeg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sylhare/Type-on-Strap/HEAD/assets/img/thumbnails/feature-img/story.jpeg -------------------------------------------------------------------------------- /assets/fonts/font-awesome/fa-regular-400.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sylhare/Type-on-Strap/HEAD/assets/fonts/font-awesome/fa-regular-400.woff2 -------------------------------------------------------------------------------- /assets/fonts/font-awesome/fa-v4compatibility.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sylhare/Type-on-Strap/HEAD/assets/fonts/font-awesome/fa-v4compatibility.ttf -------------------------------------------------------------------------------- /assets/fonts/katex/KaTeX_Caligraphic-Bold.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sylhare/Type-on-Strap/HEAD/assets/fonts/katex/KaTeX_Caligraphic-Bold.woff -------------------------------------------------------------------------------- /assets/fonts/katex/KaTeX_Caligraphic-Bold.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sylhare/Type-on-Strap/HEAD/assets/fonts/katex/KaTeX_Caligraphic-Bold.woff2 -------------------------------------------------------------------------------- /assets/fonts/katex/KaTeX_Caligraphic-Regular.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sylhare/Type-on-Strap/HEAD/assets/fonts/katex/KaTeX_Caligraphic-Regular.ttf -------------------------------------------------------------------------------- /assets/fonts/katex/KaTeX_Fraktur-Regular.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sylhare/Type-on-Strap/HEAD/assets/fonts/katex/KaTeX_Fraktur-Regular.woff2 -------------------------------------------------------------------------------- /assets/fonts/katex/KaTeX_Main-BoldItalic.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sylhare/Type-on-Strap/HEAD/assets/fonts/katex/KaTeX_Main-BoldItalic.woff2 -------------------------------------------------------------------------------- /assets/fonts/katex/KaTeX_Math-BoldItalic.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sylhare/Type-on-Strap/HEAD/assets/fonts/katex/KaTeX_Math-BoldItalic.woff2 -------------------------------------------------------------------------------- /assets/fonts/katex/KaTeX_SansSerif-Italic.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sylhare/Type-on-Strap/HEAD/assets/fonts/katex/KaTeX_SansSerif-Italic.woff -------------------------------------------------------------------------------- /assets/fonts/katex/KaTeX_SansSerif-Italic.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sylhare/Type-on-Strap/HEAD/assets/fonts/katex/KaTeX_SansSerif-Italic.woff2 -------------------------------------------------------------------------------- /assets/fonts/katex/KaTeX_SansSerif-Regular.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sylhare/Type-on-Strap/HEAD/assets/fonts/katex/KaTeX_SansSerif-Regular.ttf -------------------------------------------------------------------------------- /assets/fonts/katex/KaTeX_SansSerif-Regular.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sylhare/Type-on-Strap/HEAD/assets/fonts/katex/KaTeX_SansSerif-Regular.woff -------------------------------------------------------------------------------- /assets/fonts/katex/KaTeX_SansSerif-Regular.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sylhare/Type-on-Strap/HEAD/assets/fonts/katex/KaTeX_SansSerif-Regular.woff2 -------------------------------------------------------------------------------- /assets/fonts/katex/KaTeX_Typewriter-Regular.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sylhare/Type-on-Strap/HEAD/assets/fonts/katex/KaTeX_Typewriter-Regular.ttf -------------------------------------------------------------------------------- /assets/fonts/katex/KaTeX_Typewriter-Regular.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sylhare/Type-on-Strap/HEAD/assets/fonts/katex/KaTeX_Typewriter-Regular.woff -------------------------------------------------------------------------------- /assets/img/thumbnails/feature-img/circuit.jpeg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sylhare/Type-on-Strap/HEAD/assets/img/thumbnails/feature-img/circuit.jpeg -------------------------------------------------------------------------------- /assets/fonts/font-awesome/fa-v4compatibility.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sylhare/Type-on-Strap/HEAD/assets/fonts/font-awesome/fa-v4compatibility.woff2 -------------------------------------------------------------------------------- /assets/fonts/katex/KaTeX_Caligraphic-Regular.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sylhare/Type-on-Strap/HEAD/assets/fonts/katex/KaTeX_Caligraphic-Regular.woff -------------------------------------------------------------------------------- /assets/fonts/katex/KaTeX_Caligraphic-Regular.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sylhare/Type-on-Strap/HEAD/assets/fonts/katex/KaTeX_Caligraphic-Regular.woff2 -------------------------------------------------------------------------------- /assets/fonts/katex/KaTeX_Typewriter-Regular.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sylhare/Type-on-Strap/HEAD/assets/fonts/katex/KaTeX_Typewriter-Regular.woff2 -------------------------------------------------------------------------------- /assets/img/thumbnails/feature-img/desk-messy.jpeg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sylhare/Type-on-Strap/HEAD/assets/img/thumbnails/feature-img/desk-messy.jpeg -------------------------------------------------------------------------------- /assets/fonts/Pacifico/original-pacifico-regular.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sylhare/Type-on-Strap/HEAD/assets/fonts/Pacifico/original-pacifico-regular.ttf -------------------------------------------------------------------------------- /assets/fonts/source-sans-pro/source-sans-pro-bold.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sylhare/Type-on-Strap/HEAD/assets/fonts/source-sans-pro/source-sans-pro-bold.woff2 -------------------------------------------------------------------------------- /pages/categories.md: -------------------------------------------------------------------------------- 1 | --- 2 | layout: categories 3 | title: Categories 4 | permalink: /categories/ 5 | hide: true 6 | excluded: true 7 | showCounts: false 8 | --- 9 | -------------------------------------------------------------------------------- /assets/fonts/source-sans-pro/source-sans-pro-italic.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sylhare/Type-on-Strap/HEAD/assets/fonts/source-sans-pro/source-sans-pro-italic.woff2 -------------------------------------------------------------------------------- /assets/fonts/source-sans-pro/source-sans-pro-regular.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sylhare/Type-on-Strap/HEAD/assets/fonts/source-sans-pro/source-sans-pro-regular.woff2 -------------------------------------------------------------------------------- /assets/fonts/source-sans-pro/source-sans-pro-bold-italic.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sylhare/Type-on-Strap/HEAD/assets/fonts/source-sans-pro/source-sans-pro-bold-italic.woff2 -------------------------------------------------------------------------------- /pages/archive.md: -------------------------------------------------------------------------------- 1 | --- 2 | layout: archive 3 | title: "Blog Archive" 4 | permalink: /archive/ 5 | hide: true 6 | excluded: true 7 | icon: "fa-archive" 8 | position: 6 9 | --- 10 | -------------------------------------------------------------------------------- /_sass/external/font-awesome/_fixed-width.scss: -------------------------------------------------------------------------------- 1 | // fixed-width icons 2 | // ------------------------- 3 | 4 | .#{$fa-css-prefix}-fw { 5 | text-align: center; 6 | width: $fa-fw-width; 7 | } 8 | -------------------------------------------------------------------------------- /_includes/citation.html: -------------------------------------------------------------------------------- 1 | {%- assign citation = site.data.biblio | where:"key", include.key | first -%} 2 | {{citation.authors}}, {{citation.title}} -------------------------------------------------------------------------------- /pages/404.md: -------------------------------------------------------------------------------- 1 | --- 2 | layout: page 3 | title: "404 Page not found" 4 | permalink: /404.html 5 | hide: true 6 | excluded: true 7 | --- 8 | 9 | Sorry, the requested page wasn't found on the server. 10 | -------------------------------------------------------------------------------- /.github/labeler.yml: -------------------------------------------------------------------------------- 1 | question: 2 | - '(\?|How|What|Why|When|Where|Who)' 3 | 4 | bug: 5 | - '(bug|issue|problem|broken|error|fail|does not work|not working)' 6 | 7 | enhancement: 8 | - '(enhancement|feature)' 9 | -------------------------------------------------------------------------------- /_data/biblio.yml: -------------------------------------------------------------------------------- 1 | - authors: John Smith 2 | title: A Title About Citations 3 | key: ref1 4 | 5 | - authors: Michael's Rose 6 | title: "[Minimal Mistakes](https://mmistakes.github.io/minimal-mistakes/markup-syntax-highlighting)" 7 | key: highlight 8 | -------------------------------------------------------------------------------- /pages/search.md: -------------------------------------------------------------------------------- 1 | --- 2 | layout: search 3 | title: Search 4 | permalink: /search/ 5 | subtitle: "What are you looking for?" 6 | feature-img: "assets/img/pexels/search-map.jpeg" 7 | icon: "fa-search" 8 | excluded: true 9 | position: 5 10 | --- 11 | -------------------------------------------------------------------------------- /.github/dependabot.yaml: -------------------------------------------------------------------------------- 1 | --- 2 | version: 2 3 | updates: 4 | - package-ecosystem: "github-actions" 5 | directory: "/.github" 6 | schedule: 7 | interval: "monthly" 8 | groups: 9 | actions: 10 | patterns: 11 | - "*" 12 | -------------------------------------------------------------------------------- /pages/portfolio.md: -------------------------------------------------------------------------------- 1 | --- 2 | layout: page 3 | title : Portfolio 4 | permalink: /portfolio/ 5 | subtitle: "Projects I am working on" 6 | feature-img: "assets/img/pexels/computer.jpeg" 7 | position: 4 8 | tags: [Page] 9 | --- 10 | 11 | {% include portfolio.html %} 12 | -------------------------------------------------------------------------------- /_posts/2013-10-18-blogging-with-title.md: -------------------------------------------------------------------------------- 1 | --- 2 | layout: post 3 | title: > 4 | Blogging with title 5 | tags: [Test, Image] 6 | categories: Tutorial 7 | --- 8 | 9 | # I am a BIG title 10 | 11 | This is a very tiny tiny post with less than 250 letters. 12 | 13 | 14 | -------------------------------------------------------------------------------- /_data/menu.yml: -------------------------------------------------------------------------------- 1 | # To add links to the navigation bar. 2 | - example: 3 | title: Example 4 | url: https://example.com 5 | hide: true 6 | position: 2 7 | - type-on-strap: 8 | title: "Type on Strap" 9 | url: https://github.com/sylhare/Type-on-Strap 10 | position: 1 11 | -------------------------------------------------------------------------------- /Gemfile: -------------------------------------------------------------------------------- 1 | source "https://rubygems.org" 2 | 3 | # Should be included in Jekyll but depending on the version Jekyll and Ruby version, it may not be included 4 | gem 'webrick' 5 | gem 'kramdown-parser-gfm' 6 | 7 | # For github pages compatibility 8 | # gem 'github-pages', group: :jekyll_plugins 9 | gemspec -------------------------------------------------------------------------------- /_sass/layouts/_page.scss: -------------------------------------------------------------------------------- 1 | .title-padder { 2 | padding: $title-padding; 3 | } 4 | 5 | h1.title { 6 | @extend .subtle-txt-shadow; 7 | padding: 0.5em 0; 8 | } 9 | 10 | 11 | .subtitle { 12 | font-weight: normal; 13 | margin-top: 5px; 14 | text-shadow: 1px 1px 2px var(--text-shadow); 15 | } 16 | -------------------------------------------------------------------------------- /.github/hooks/README.md: -------------------------------------------------------------------------------- 1 | # Git hooks 2 | 3 | Git hooks are provided in `hooks/`. The pre-commit hook, when enabled, will check for non-staged assets before commit and abort if found any. 4 | 5 | ## Setup 6 | 7 | `ln lib/hooks/pre-commit .git/hooks/pre-commit` 8 | 9 | ## Bypass 10 | 11 | `git commit -n` 12 | -------------------------------------------------------------------------------- /assets/css/bootstrap-iso.less: -------------------------------------------------------------------------------- 1 | /* 2 | To create an isolated version of Bootstrap 3 | Use Gulp (npm install) in order to compile it: 4 | 5 | gulp isolate-bootstrap-css 6 | 7 | */ 8 | 9 | .bootstrap-iso { 10 | @import (less) 'vendor/bootstrap.css'; 11 | /*@import (less) 'vendor/bootstrap-theme.css'; //optional */ 12 | } -------------------------------------------------------------------------------- /assets/data/search.liquid: -------------------------------------------------------------------------------- 1 | --- 2 | --- 3 | {% comment %} 4 | The json is created in search_json.liquid and included here to be compressed 5 | {% endcomment %} 6 | {% capture _search %}{% include default/search_json.liquid %}{% endcapture %} 7 | {% assign emptyField = '{ },' %} 8 | {{ _search | split: " " | join: " " | remove: emptyField }} 9 | -------------------------------------------------------------------------------- /.github/PULL_REQUEST_TEMPLATE.md: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | ### Description 5 | 6 | 7 | ### Screenshot 8 | 9 | -------------------------------------------------------------------------------- /_data/social.yml: -------------------------------------------------------------------------------- 1 | # RSS specific 2 | rss: true # Icons on the footer 3 | feed: 4 | path: feed.xml # RSS feed path 5 | 6 | # For the share button options at the bottom of the articles 7 | share: 8 | email: true 9 | facebook: true 10 | linkedin: true 11 | pinterest: true 12 | pocket: 13 | reddit: true 14 | tumblr: true 15 | twitter: true 16 | wordpress: 17 | -------------------------------------------------------------------------------- /_sass/external/font-awesome/_sizing.scss: -------------------------------------------------------------------------------- 1 | // sizing icons 2 | // ------------------------- 3 | 4 | // literal magnification scale 5 | @for $i from 1 through 10 { 6 | .#{$fa-css-prefix}-#{$i}x { 7 | font-size: $i * 1em; 8 | } 9 | } 10 | 11 | // step-based scale (with alignment) 12 | @each $size, $value in $fa-sizes { 13 | .#{$fa-css-prefix}-#{$size} { 14 | @include fa-size($value); 15 | } 16 | } 17 | -------------------------------------------------------------------------------- /_sass/external/font-awesome/v4-shims.scss: -------------------------------------------------------------------------------- 1 | /*! 2 | * Font Awesome Free 6.7.1 by @fontawesome - https://fontawesome.com 3 | * License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) 4 | * Copyright 2024 Fonticons, Inc. 5 | */ 6 | // V4 shims compile (Web Fonts-based) 7 | // ------------------------- 8 | 9 | @import 'functions'; 10 | @import 'variables'; 11 | @import 'shims'; 12 | -------------------------------------------------------------------------------- /_sass/external/font-awesome/_screen-reader.scss: -------------------------------------------------------------------------------- 1 | // screen-reader utilities 2 | // ------------------------- 3 | 4 | // only display content to screen readers 5 | .sr-only, 6 | .#{$fa-css-prefix}-sr-only { 7 | @include fa-sr-only; 8 | } 9 | 10 | // use in conjunction with .sr-only to only display content when it's focused 11 | .sr-only-focusable, 12 | .#{$fa-css-prefix}-sr-only-focusable { 13 | @include fa-sr-only-focusable; 14 | } 15 | -------------------------------------------------------------------------------- /.github/workflows/labeler.yml: -------------------------------------------------------------------------------- 1 | name: "Issue Labeler" 2 | on: 3 | issues: 4 | types: [opened, edited] 5 | 6 | permissions: 7 | issues: write 8 | contents: read 9 | 10 | jobs: 11 | triage: 12 | runs-on: ubuntu-latest 13 | steps: 14 | - uses: github/issue-labeler@v3.4 15 | with: 16 | repo-token: ${{ github.token }} 17 | configuration-path: .github/labeler.yml 18 | enable-versioned-regex: 0 19 | -------------------------------------------------------------------------------- /_sass/external/_katex.scss: -------------------------------------------------------------------------------- 1 | /*! 2 | * KaTeX v0.16.25 3 | * Plus added customizations for the theme 4 | */ 5 | 6 | @import "katex/katex"; 7 | 8 | .katex-display { 9 | @media screen and (max-width: $sm-break) { 10 | overflow-x: auto; 11 | } 12 | & { 13 | padding-bottom: 3px; 14 | padding-top: 1px; 15 | width: auto; 16 | height: auto; 17 | } 18 | } 19 | 20 | .math-display { 21 | display: inline-block; 22 | width: 100%; 23 | } 24 | 25 | 26 | -------------------------------------------------------------------------------- /assets/Dockerfile: -------------------------------------------------------------------------------- 1 | FROM sylhare/jekyll:latest 2 | LABEL maintainer="sylhare" 3 | LABEL image="sylhare/type-on-strap" 4 | 5 | # Create Type-on-strap Gemfile 6 | RUN echo "source \"https://rubygems.org\"" >> Gemfile 7 | RUN echo "gem 'type-on-strap', '>= 2.4.11', '< 3.0'" >> Gemfile 8 | RUN echo "Adding the Gemfile" 9 | RUN cat Gemfile 10 | 11 | # Install the theme 12 | RUN bundle update 13 | RUN bundle install 14 | 15 | # Make it accessible from outside 16 | EXPOSE 4000 17 | 18 | -------------------------------------------------------------------------------- /.github/workflows/build.yml: -------------------------------------------------------------------------------- 1 | name: CI 2 | 3 | on: 4 | workflow_run: 5 | workflows: ["Build"] 6 | types: 7 | - completed 8 | 9 | 10 | jobs: 11 | build: 12 | runs-on: ubuntu-latest 13 | 14 | steps: 15 | - name: Fail if previous workflow failed 16 | run: exit 1 17 | if: ${{ github.event.workflow_run.conclusion != 'success' }} 18 | 19 | - uses: actions/checkout@v4 20 | - name: Hello world 21 | run: echo "Build passed! 🎉" -------------------------------------------------------------------------------- /_sass/external/_font-awesome.scss: -------------------------------------------------------------------------------- 1 | /*! 2 | * Type-on-strap Font Awesome kit v6.7.1 3 | * Find the version and license of the included Font Awesome here: _sass/external/font-awesome/fontawesome.scss 4 | */ 5 | $fa-inverse: var(--background); 6 | $fa-font-path: "../fonts/font-awesome" !default; 7 | 8 | @import 'font-awesome/fontawesome'; 9 | @import 'font-awesome/brands'; 10 | @import 'font-awesome/regular'; 11 | @import 'font-awesome/solid'; 12 | @import 'font-awesome/v4-shims'; 13 | -------------------------------------------------------------------------------- /_sass/external/font-awesome/_icons.scss: -------------------------------------------------------------------------------- 1 | // specific icon class definition 2 | // ------------------------- 3 | 4 | /* Font Awesome uses the Unicode Private Use Area (PUA) to ensure screen 5 | readers do not read off random characters that represent icons */ 6 | 7 | @each $name, $icon in $fa-icons { 8 | .#{$fa-css-prefix}-#{$name} { 9 | #{$fa-icon-property}: unquote("\"#{ $icon }\""); 10 | #{$fa-duotone-icon-property}: unquote("\"#{$icon}#{$icon}\""); 11 | } 12 | } 13 | 14 | -------------------------------------------------------------------------------- /pages/gallery.md: -------------------------------------------------------------------------------- 1 | --- 2 | layout: page 3 | title: Gallery 4 | subtitle: From the pexels folder 5 | permalink: /gallery/ 6 | gallery_path: "assets/img/pexels" 7 | excluded: true 8 | position: 3 9 | tags: [Page] 10 | --- 11 | 12 | This is a photo gallery made from the static files in the `assets/img/pexels` folder. 13 | I wanted to automatically create a simple gallery from a folder without having to create a markdown page as you would for the portfolio. 14 | 15 | 16 | {% include gallery.html gallery_path=page.gallery_path %} 17 | -------------------------------------------------------------------------------- /.github/Docs.md: -------------------------------------------------------------------------------- 1 | # GitHub folder 2 | 3 | > You don't need that folder for your GitHub page 4 | 5 | You can delete this folder or add your own workflows in it. 6 | 7 | ## Structure 8 | 9 | - [hooks](./hooks): custom git hooks for gulp task 10 | - [workflows](./workflows): Workflows of this repository for the GitHub actions 11 | - [config.yml](./config.yml): Config file for "request-info" bot 12 | - [release-drafter.yml](./release-drafter.yml): Config file for "release-drafter" bot 13 | - [stale.yml](./stale.yml): Config file for "stale" bot 14 | -------------------------------------------------------------------------------- /.github/workflows/release-drafter.yml: -------------------------------------------------------------------------------- 1 | name: Release Drafter 2 | 3 | on: 4 | push: 5 | branches: 6 | - master 7 | - main 8 | pull_request: 9 | types: [opened, reopened, synchronize] 10 | 11 | permissions: 12 | contents: read 13 | 14 | jobs: 15 | update_release_draft: 16 | permissions: 17 | contents: write 18 | pull-requests: write 19 | runs-on: ubuntu-latest 20 | steps: 21 | - uses: release-drafter/release-drafter@v6 22 | env: 23 | GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} 24 | 25 | -------------------------------------------------------------------------------- /_sass/external/font-awesome/_list.scss: -------------------------------------------------------------------------------- 1 | // icons in a list 2 | // ------------------------- 3 | 4 | .#{$fa-css-prefix}-ul { 5 | list-style-type: none; 6 | margin-left: var(--#{$fa-css-prefix}-li-margin, #{$fa-li-margin}); 7 | padding-left: 0; 8 | 9 | > li { position: relative; } 10 | } 11 | 12 | .#{$fa-css-prefix}-li { 13 | left: calc(-1 * var(--#{$fa-css-prefix}-li-width, #{$fa-li-width})); 14 | position: absolute; 15 | text-align: center; 16 | width: var(--#{$fa-css-prefix}-li-width, #{$fa-li-width}); 17 | line-height: inherit; 18 | } 19 | -------------------------------------------------------------------------------- /_includes/social/disqus.liquid: -------------------------------------------------------------------------------- 1 |
5 | 6 |
7 | 8 | -------------------------------------------------------------------------------- /_sass/includes/_post_nav.scss: -------------------------------------------------------------------------------- 1 | #post-nav { 2 | width: 100%; 3 | display: inline-block; 4 | @extend %padding-nav; 5 | 6 | a { 7 | width: 100%; 8 | padding: 0; 9 | margin: 0; 10 | } 11 | 12 | p { 13 | @extend .meta; 14 | } 15 | 16 | #previous-post { 17 | float: left; 18 | width: 50%; 19 | } 20 | 21 | #next-post { 22 | float: right; 23 | text-align: right; 24 | width: 50%; 25 | } 26 | 27 | @media screen and (max-width: $sm-break) { 28 | a, p { 29 | font-size: 0.8em; 30 | } 31 | } 32 | } 33 | 34 | -------------------------------------------------------------------------------- /_sass/includes/_footer.scss: -------------------------------------------------------------------------------- 1 | .site-footer { 2 | @extend %padding-post; 3 | z-index: -1; 4 | display: inline-block; 5 | text-align: center; 6 | width: 100%; 7 | color: var(--meta); 8 | font-size: 0.9em; 9 | 10 | .footer-icons { 11 | ul { 12 | list-style: none; 13 | margin: 0; 14 | 15 | li { 16 | display: inline; 17 | } 18 | 19 | a { 20 | color: var(--link); 21 | } 22 | 23 | a:hover { 24 | .fa-circle { 25 | filter: brightness(0.85); 26 | } 27 | } 28 | } 29 | } 30 | } 31 | -------------------------------------------------------------------------------- /pages/about.md: -------------------------------------------------------------------------------- 1 | --- 2 | layout: page 3 | title: About 4 | permalink: /about/ 5 | feature-img: "assets/img/pexels/travel.jpeg" 6 | tags: [Page] 7 | --- 8 | 9 | Type on Strap is based on Type Theme, a free and open-source theme for [Jekyll](http://jekyllrb.com/), licensed under the MIT License. 10 | 11 | Head over to the [theme's documentation](https://github.com/sylhare/Type-on-Strap) for much more information about Type on Strap or to install this theme on your own Jekyll site. 12 | 13 | This file is an example of a page in Jekyll, that automatically shows up in the header navigation, you can delete or modify this file freely. 14 | 15 | -------------------------------------------------------------------------------- /.github/release-drafter.yml: -------------------------------------------------------------------------------- 1 | name-template: 'v$RESOLVED_VERSION' 2 | tag-template: 'v$RESOLVED_VERSION' 3 | version-resolver: 4 | major: 5 | labels: 6 | - 'breaking' 7 | - 'major' 8 | minor: 9 | labels: 10 | - 'feature' 11 | - 'enhancement' 12 | default: patch 13 | categories: 14 | - title: '🚀 Features' 15 | labels: 16 | - 'feature' 17 | - 'enhancement' 18 | - title: '🐛 Bug Fixes' 19 | labels: 20 | - 'fix' 21 | - 'bug' 22 | - title: '🧰 Maintenance' 23 | labels: 24 | - 'devops' 25 | - 'custom' 26 | - 'dependencies' 27 | template: | 28 | ## What's new: 29 | 30 | $CHANGES 31 | -------------------------------------------------------------------------------- /_sass/includes/_aligner.scss: -------------------------------------------------------------------------------- 1 | /* --- Aligner --- */ 2 | 3 | .row { 4 | display: flex; 5 | flex-wrap: wrap; 6 | flex-direction: row; 7 | align-items: center; 8 | justify-content: center; 9 | padding: 0.9% 0 1.5% 0; 10 | } 11 | 12 | .caption-style { 13 | order: 1; 14 | flex: 1 1 100%; 15 | display: block; 16 | font-style: italic; 17 | font-size: 0.8em; 18 | text-align: center; 19 | color: var(--meta); 20 | font-weight: 200; 21 | padding-bottom: 5px; 22 | padding-top: 5px; 23 | } 24 | 25 | .column { 26 | flex: 1 0; 27 | 28 | img { 29 | min-width: 250px; 30 | } 31 | .single { 32 | width: 100%; 33 | display: block; 34 | } 35 | } -------------------------------------------------------------------------------- /assets/js/partials/masonry_init.js: -------------------------------------------------------------------------------- 1 | /* @preserve Masonry Init */ 2 | try { 3 | var elem = document.querySelector('.grid'); 4 | var msnry = new Masonry(elem, { 5 | itemSelector: '.grid-item', 6 | columnWidth: '.grid-sizer', 7 | gutter: '.gutter-sizer', 8 | percentPosition: true 9 | }); 10 | 11 | // layout Masonry after each image loads 12 | var imgLoad = imagesLoaded(elem); 13 | imgLoad.on('progress', function (instance, image) { 14 | msnry.layout(); 15 | }); 16 | } catch (err) { 17 | if (err instanceof ReferenceError) { 18 | // Do nothing, Masonry is defined only in the gallery page 19 | } else { 20 | throw err; 21 | } 22 | } 23 | -------------------------------------------------------------------------------- /_data/authors.yml: -------------------------------------------------------------------------------- 1 | rohanchandra: # author-id 2 | name: "Rohan Chandra" 3 | avatar: "https://avatars2.githubusercontent.com/u/816965?s=460&v=4" 4 | url: "https://github.com/rohanchandra" 5 | sylhare: 6 | name: Sylhare 7 | avatar: "https://avatars3.githubusercontent.com/u/20642750?s=460&v=4" 8 | url: "https://github.com/sylhare" 9 | mmistakes: 10 | name: "Michael Rose" 11 | avatar: "https://avatars3.githubusercontent.com/u/1376749?s=460&v=4" 12 | url: "https://github.com/mmistakes" 13 | mhagnumdw: 14 | name: Mhagnumdw 15 | avatar: "https://avatars2.githubusercontent.com/u/17688846?s=460&v=4" 16 | url: 17 | unknown: 18 | name: Unknown 19 | avatar: 20 | url: 21 | -------------------------------------------------------------------------------- /.github/ISSUE_TEMPLATE/bug_report.md: -------------------------------------------------------------------------------- 1 | --- 2 | name: Bug report 3 | about: Create a report to help us improve 4 | title: '' 5 | labels: bug 6 | assignees: 'sylhare' 7 | 8 | --- 9 | 10 | **Describe the bug** 11 | A clear and concise description of what the bug is. 12 | 13 | **To Reproduce** 14 | Steps to reproduce the behavior: 15 | 1. Go to '...' 16 | 2. Click on '....' 17 | 3. Scroll down to '....' 18 | 4. See error 19 | 20 | **Expected behavior** 21 | A clear and concise description of what you expected to happen. 22 | 23 | **Screenshots** 24 | If applicable, add screenshots to help explain your problem. 25 | 26 | **Additional context** 27 | Add any other context about the problem here. 28 | -------------------------------------------------------------------------------- /_sass/external/font-awesome/fontawesome.scss: -------------------------------------------------------------------------------- 1 | /*! 2 | * Font Awesome Free 6.7.1 by @fontawesome - https://fontawesome.com 3 | * License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) 4 | * Copyright 2024 Fonticons, Inc. 5 | */ 6 | // Font Awesome core compile (Web Fonts-based) 7 | // ------------------------- 8 | 9 | @import 'functions'; 10 | @import 'variables'; 11 | @import 'mixins'; 12 | @import 'core'; 13 | @import 'sizing'; 14 | @import 'fixed-width'; 15 | @import 'list'; 16 | @import 'bordered-pulled'; 17 | @import 'animated'; 18 | @import 'rotated-flipped'; 19 | @import 'stacked'; 20 | @import 'icons'; 21 | @import 'screen-reader'; 22 | -------------------------------------------------------------------------------- /.github/ISSUE_TEMPLATE/feature_request.md: -------------------------------------------------------------------------------- 1 | --- 2 | name: Feature request 3 | about: Suggest an idea for this project 4 | title: '' 5 | labels: enhancement 6 | assignees: '' 7 | 8 | --- 9 | 10 | **Is your feature request related to a problem? Please describe.** 11 | A clear and concise description of what the problem is. Ex. I'm always frustrated when [...] 12 | 13 | **Describe the solution you'd like** 14 | A clear and concise description of what you want to happen. 15 | 16 | **Describe alternatives you've considered** 17 | A clear and concise description of any alternative solutions or features you've considered. 18 | 19 | **Additional context** 20 | Add any other context or screenshots about the feature request here. 21 | -------------------------------------------------------------------------------- /_layouts/default.html: -------------------------------------------------------------------------------- 1 | 2 | 7 | 8 | {% capture _head %}{% include default/head.liquid %}{% endcapture %} 9 | {{ _head | split: " " | join: " "}} 10 | 11 | {% capture _navbar %}{% include default/navbar.liquid %}{% endcapture %} 12 | {{ _navbar | split: " " | join: " "}} 13 |
14 | {{ content }} 15 |
16 | {% capture _footer %}{% include default/footer.liquid %}{% endcapture %} 17 | {{ _footer | split: " " | join: " "}} 18 | 19 | 20 | -------------------------------------------------------------------------------- /_includes/default/tags_list.liquid: -------------------------------------------------------------------------------- 1 | {% assign tags = include.tags | split:'|' | sort | uniq %} 2 | 3 | {% if tags.size > 0 %} 4 |
5 | 18 |
19 | {% else %} 20 |
21 | {% endif %} 22 | -------------------------------------------------------------------------------- /_includes/blog/post_nav.liquid: -------------------------------------------------------------------------------- 1 |
2 | {% if page.next.url %} 3 | 9 | {% endif %} 10 | 11 | {% if page.previous.url %} 12 | 18 | {% endif %} 19 |
20 | -------------------------------------------------------------------------------- /_sass/external/font-awesome/_rotated-flipped.scss: -------------------------------------------------------------------------------- 1 | // rotating + flipping icons 2 | // ------------------------- 3 | 4 | .#{$fa-css-prefix}-rotate-90 { 5 | transform: rotate(90deg); 6 | } 7 | 8 | .#{$fa-css-prefix}-rotate-180 { 9 | transform: rotate(180deg); 10 | } 11 | 12 | .#{$fa-css-prefix}-rotate-270 { 13 | transform: rotate(270deg); 14 | } 15 | 16 | .#{$fa-css-prefix}-flip-horizontal { 17 | transform: scale(-1, 1); 18 | } 19 | 20 | .#{$fa-css-prefix}-flip-vertical { 21 | transform: scale(1, -1); 22 | } 23 | 24 | .#{$fa-css-prefix}-flip-both, 25 | .#{$fa-css-prefix}-flip-horizontal.#{$fa-css-prefix}-flip-vertical { 26 | transform: scale(-1, -1); 27 | } 28 | 29 | .#{$fa-css-prefix}-rotate-by { 30 | transform: rotate(var(--#{$fa-css-prefix}-rotate-angle, 0)); 31 | } 32 | -------------------------------------------------------------------------------- /_sass/includes/_share_buttons.scss: -------------------------------------------------------------------------------- 1 | ul.share-buttons { 2 | list-style: none; 3 | padding: 1.5% 0 0.75% 0; 4 | margin: 0; 5 | text-align: center; 6 | 7 | li.meta { 8 | display: inline; 9 | margin-right: 0.5em; 10 | vertical-align: super; 11 | } 12 | 13 | li { 14 | display: inline; 15 | 16 | a:hover { 17 | text-decoration: none; 18 | } 19 | } 20 | 21 | .sr-only { 22 | position: absolute; 23 | clip: rect(1px 1px 1px 1px); 24 | clip: rect(1px, 1px, 1px, 1px); 25 | padding: 0; 26 | border: 0; 27 | height: 1px; 28 | width: 1px; 29 | overflow: hidden; 30 | } 31 | 32 | .fa-stack { 33 | vertical-align: top; 34 | width: 1.75em; 35 | 36 | .fab { 37 | font-size: 30px; 38 | } 39 | } 40 | } 41 | -------------------------------------------------------------------------------- /.github/stale.yml: -------------------------------------------------------------------------------- 1 | # Number of days of inactivity before an issue becomes stale 2 | daysUntilStale: 15 3 | 4 | # Number of days of inactivity before a stale issue is closed 5 | daysUntilClose: 7 6 | 7 | # Issues with these labels will never be considered stale 8 | exemptLabels: 9 | - pinned 10 | - security 11 | 12 | # Label to use when marking an issue as stale 13 | staleLabel: wontfix 14 | 15 | # Comment to post when marking an issue as stale. Set to `false` to disable 16 | markComment: > 17 | This issue has been automatically marked as stale because it has not had 18 | recent activity. It will be closed if no further activity occurs. Thank you 19 | for your contributions. 20 | 21 | # Comment to post when closing a stale issue. Set to `false` to disable 22 | closeComment: false 23 | -------------------------------------------------------------------------------- /_includes/portfolio.html: -------------------------------------------------------------------------------- 1 | 2 |
3 | {% for item in site.portfolio %} 4 |
5 | 6 |
7 |
8 | 9 |
10 |
11 | 12 |
13 |
14 | {% endfor %} 15 |
16 | -------------------------------------------------------------------------------- /_includes/default/category_list.liquid: -------------------------------------------------------------------------------- 1 | {% assign categories = include.categories | split:'|' | sort | uniq %} 2 | 3 | {% if categories.size > 0 %} 4 |
5 | 18 |
19 | {% else %} 20 |
21 | {% endif %} 22 | 23 | -------------------------------------------------------------------------------- /_includes/default/footer.liquid: -------------------------------------------------------------------------------- 1 | 17 | 18 | 19 | -------------------------------------------------------------------------------- /_sass/external/_pacifico.scss: -------------------------------------------------------------------------------- 1 | /*! 2 | * Font: SIL OFL 1.1, CSS: MIT License 3 | */ 4 | 5 | $pacifico-font-path: "../../assets/fonts/Pacifico" !default; 6 | 7 | @font-face { 8 | font-family: 'Pacifico'; 9 | src: url('#{$pacifico-font-path}/Pacifico.eot'); /* IE9 Compat Modes */ 10 | src: url('#{$pacifico-font-path}/Pacifico.eot?#iefix') format('embedded-opentype'), 11 | url('#{$pacifico-font-path}/Pacifico.woff2') format('woff2'), 12 | url('#{$pacifico-font-path}/Pacifico.woff') format('woff'),/* Modern Browsers */ 13 | url('#{$pacifico-font-path}/Pacifico.ttf') format('truetype'),/* Safari, Android, iOS */ 14 | url('#{$pacifico-font-path}/Pacifico.svg#Pacifico') format('svg');/* Legacy iOS */ 15 | font-weight: normal; 16 | font-style: normal; 17 | } 18 | -------------------------------------------------------------------------------- /.github/tests/jest.config.js: -------------------------------------------------------------------------------- 1 | /** 2 | * Jest configuration for Type-on-Strap theme unit tests 3 | * @see https://jestjs.io/docs/configuration 4 | */ 5 | module.exports = { 6 | testEnvironment: 'jsdom', 7 | testMatch: [ 8 | '**/unit/**/*.test.js', 9 | ], 10 | testPathIgnorePatterns: [ 11 | '/node_modules/', 12 | '/_site/', 13 | '/e2e/', 14 | '/playwright-report/', 15 | '/test-results/', 16 | ], 17 | collectCoverageFrom: [ 18 | 'unit/**/*.js', 19 | '!unit/**/*.test.js', 20 | '!**/node_modules/**', 21 | ], 22 | coverageDirectory: 'coverage', 23 | coverageReporters: ['text', 'lcov', 'html'], 24 | setupFiles: [], 25 | roots: ['/unit'], 26 | clearMocks: true, 27 | resetMocks: true, 28 | restoreMocks: true, 29 | verbose: true, 30 | }; 31 | 32 | -------------------------------------------------------------------------------- /_sass/external/font-awesome/_stacked.scss: -------------------------------------------------------------------------------- 1 | // stacking icons 2 | // ------------------------- 3 | 4 | .#{$fa-css-prefix}-stack { 5 | display: inline-block; 6 | height: 2em; 7 | line-height: 2em; 8 | position: relative; 9 | vertical-align: $fa-stack-vertical-align; 10 | width: $fa-stack-width; 11 | } 12 | 13 | .#{$fa-css-prefix}-stack-1x, 14 | .#{$fa-css-prefix}-stack-2x { 15 | left: 0; 16 | position: absolute; 17 | text-align: center; 18 | width: 100%; 19 | z-index: var(--#{$fa-css-prefix}-stack-z-index, #{$fa-stack-z-index}); 20 | } 21 | 22 | .#{$fa-css-prefix}-stack-1x { 23 | line-height: inherit; 24 | } 25 | 26 | .#{$fa-css-prefix}-stack-2x { 27 | font-size: 2em; 28 | } 29 | 30 | .#{$fa-css-prefix}-inverse { 31 | color: var(--#{$fa-css-prefix}-inverse, #{$fa-inverse}); 32 | } 33 | -------------------------------------------------------------------------------- /_includes/aligner.html: -------------------------------------------------------------------------------- 1 | {% assign images = include.images | split: ',' %} 2 | 3 | {% if include.column == "auto" %} 4 | {% assign column = 100.0 | divided_by: images.size %} 5 | {% elsif include.column > 0 %} 6 | {% assign column = 100.0 | divided_by: include.column %} 7 | {% endif %} 8 | 9 | 10 |
11 | {% for image in images %} 12 |
13 | {{ image | prepend: '/' | split: '/' | last }} 16 |
17 | {% endfor %} 18 | {% if include.caption %} 19 | {% endif %} 20 |
{{ include.caption }}
21 |
22 | 23 | 24 | {% assign column = false %} 25 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | # Idea 2 | .idea/* 3 | 4 | # Mac OS 5 | .DS_Store 6 | 7 | # Byte-compiled / optimized / DLL files 8 | *.manifest 9 | *.spec 10 | 11 | # Jekyll dev or build 12 | _site/* 13 | _development_tool/* 14 | .sass-cache/* 15 | *.css.map 16 | *.scssc 17 | .bundle/* 18 | /vendor/ 19 | .jekyll-cache/* 20 | */.jekyll-cache/* 21 | 22 | # Theme Gem 23 | Gemfile.lock 24 | *.gem 25 | .gems 26 | jekyll-theme-type-on-strap.gemspec 27 | 28 | # Node.js 29 | **/node_modules/* 30 | **/package-lock.json 31 | 32 | # Testing 33 | .github/tests/node_modules/ 34 | .github/tests/playwright-report/ 35 | .github/tests/test-results/ 36 | .github/tests/_site/ 37 | .github/tests/.jekyll-cache/ 38 | .github/tests/playwright/.cache/ 39 | .github/tests/coverage/ 40 | 41 | # Misc 42 | *-test.md 43 | *copy.md 44 | test/* 45 | /type-on-strap*/* 46 | test-results/* 47 | -------------------------------------------------------------------------------- /_sass/external/font-awesome/_bordered-pulled.scss: -------------------------------------------------------------------------------- 1 | // bordered + pulled icons 2 | // ------------------------- 3 | 4 | .#{$fa-css-prefix}-border { 5 | border-color: var(--#{$fa-css-prefix}-border-color, #{$fa-border-color}); 6 | border-radius: var(--#{$fa-css-prefix}-border-radius, #{$fa-border-radius}); 7 | border-style: var(--#{$fa-css-prefix}-border-style, #{$fa-border-style}); 8 | border-width: var(--#{$fa-css-prefix}-border-width, #{$fa-border-width}); 9 | padding: var(--#{$fa-css-prefix}-border-padding, #{$fa-border-padding}); 10 | } 11 | 12 | .#{$fa-css-prefix}-pull-left { 13 | float: left; 14 | margin-right: var(--#{$fa-css-prefix}-pull-margin, #{$fa-pull-margin}); 15 | } 16 | 17 | .#{$fa-css-prefix}-pull-right { 18 | float: right; 19 | margin-left: var(--#{$fa-css-prefix}-pull-margin, #{$fa-pull-margin}); 20 | } 21 | -------------------------------------------------------------------------------- /_sass/includes/_gallery.scss: -------------------------------------------------------------------------------- 1 | /* ---- grid ---- */ 2 | 3 | .grid { 4 | padding-bottom: 6%; 5 | padding-top: 1%; 6 | 7 | 8 | /* clear fix */ 9 | &:after { 10 | content: ''; 11 | display: block; 12 | clear: both; 13 | } 14 | } 15 | 16 | /* ---- .grid-item within masonry ---- */ 17 | 18 | .grid-sizer, 19 | .grid-item { 20 | /* state column width */ 21 | width: 32.6%; 22 | } 23 | 24 | .grid-item { 25 | float: left; 26 | border-radius: 5px; 27 | 28 | img { 29 | /* for image formatting in the masonry */ 30 | display: block; 31 | max-width: 100%; 32 | min-height: 30%; 33 | } 34 | } 35 | 36 | /* --- Masonry gutter size --- */ 37 | 38 | .gutter-sizer { 39 | width: 1%; 40 | } 41 | 42 | .grid-item:first-of-type { 43 | margin-bottom: 1%; 44 | } 45 | 46 | .grid-item { 47 | margin-bottom: 1%; 48 | } 49 | -------------------------------------------------------------------------------- /_includes/gallery.html: -------------------------------------------------------------------------------- 1 | 8 | 9 |
10 |
11 |
12 | {% for image in site.static_files %} 13 | {% if image.path contains include.gallery_path %} 14 | {% unless image.path contains '.md' %} 15 | 16 | {% endunless %} 17 | {% endif %} 18 | {% endfor %} 19 |
20 | 21 | 22 | 23 | -------------------------------------------------------------------------------- /_includes/social/cusdis.liquid: -------------------------------------------------------------------------------- 1 |
13 | 14 | -------------------------------------------------------------------------------- /_sass/external/font-awesome/solid.scss: -------------------------------------------------------------------------------- 1 | /*! 2 | * Font Awesome Free 6.7.1 by @fontawesome - https://fontawesome.com 3 | * License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) 4 | * Copyright 2024 Fonticons, Inc. 5 | */ 6 | @import 'functions'; 7 | @import 'variables'; 8 | 9 | :root, :host { 10 | --#{$fa-css-prefix}-style-family-classic: '#{ $fa-style-family }'; 11 | --#{$fa-css-prefix}-font-solid: normal 900 1em/1 '#{ $fa-style-family }'; 12 | } 13 | 14 | 15 | @font-face { 16 | font-family: 'Font Awesome 6 Free'; 17 | font-style: normal; 18 | font-weight: 900; 19 | font-display: $fa-font-display; 20 | src: url('#{$fa-font-path}/fa-solid-900.woff2') format('woff2'), 21 | url('#{$fa-font-path}/fa-solid-900.ttf') format('truetype'); 22 | } 23 | 24 | .fas, 25 | .#{$fa-css-prefix}-solid { 26 | font-weight: 900; 27 | } 28 | -------------------------------------------------------------------------------- /assets/js/partials/navbar.js: -------------------------------------------------------------------------------- 1 | /* @preserve Navbar */ 2 | document.addEventListener("DOMContentLoaded", function (event) { 3 | 4 | /* 5 | * Display the menu items on smaller screens 6 | */ 7 | const pull = document.getElementById('pull'); 8 | const menu = document.querySelector('nav ul'); 9 | 10 | ['click', 'touch'].forEach(function (e) { 11 | pull?.addEventListener(e, function () { 12 | menu.classList.toggle('hide') 13 | }, false); 14 | }); 15 | 16 | /* 17 | * Make the header images move on scroll 18 | */ 19 | window.addEventListener('scroll', function () { 20 | const offset = -(window.scrollY || window.pageYOffset || document.body.scrollTop) / 3; 21 | const main = document.getElementById('main'); 22 | if (main) { 23 | main.style.backgroundPosition = '100% ' + (offset - 50) + 'px' + ', 0%, center top'; 24 | } 25 | }); 26 | }); 27 | -------------------------------------------------------------------------------- /_sass/external/font-awesome/regular.scss: -------------------------------------------------------------------------------- 1 | /*! 2 | * Font Awesome Free 6.7.1 by @fontawesome - https://fontawesome.com 3 | * License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) 4 | * Copyright 2024 Fonticons, Inc. 5 | */ 6 | @import 'functions'; 7 | @import 'variables'; 8 | 9 | :root, :host { 10 | --#{$fa-css-prefix}-style-family-classic: '#{ $fa-style-family }'; 11 | --#{$fa-css-prefix}-font-regular: normal 400 1em/1 '#{ $fa-style-family }'; 12 | } 13 | 14 | 15 | @font-face { 16 | font-family: 'Font Awesome 6 Free'; 17 | font-style: normal; 18 | font-weight: 400; 19 | font-display: $fa-font-display; 20 | src: url('#{$fa-font-path}/fa-regular-400.woff2') format('woff2'), 21 | url('#{$fa-font-path}/fa-regular-400.ttf') format('truetype'); 22 | } 23 | 24 | .far, 25 | .#{$fa-css-prefix}-regular { 26 | font-weight: 400; 27 | } 28 | -------------------------------------------------------------------------------- /_data/icons.yml: -------------------------------------------------------------------------------- 1 | # For the Icons on the footer of the website 2 | # For the Share buttons at the end of the articles, use the "social.yml" 3 | behance: 4 | bitbucket: 5 | calendly: 6 | dribbble: 7 | facebook: 8 | flickr: 9 | github: sylhare 10 | gitlab: 11 | google-scholar: # e.g. "WXAAOb0AAAAJ" 12 | instagram: 13 | hacker-news: 14 | keybase: 15 | linkedin: 16 | mail: # e.g. "sam@mail.com" 17 | map: # e.g. "34.0886/-118.3191" 18 | mastodon: # e.g. "fostodon.org/@sam" 19 | matrix: # e.g. "@sam:matrix.org" 20 | medium: 21 | patreon: 22 | phone: # e.g. "+11111111111" 23 | pinterest: 24 | reddit: 25 | soundcloud: 26 | sms: # e.g. "+11111111111" 27 | stack-exchange: # e.g. "123456789" 28 | stack-overflow: # e.g. "123456789" 29 | steam: 30 | telegram: 31 | tumblr: 32 | twitch: 33 | twitter: 34 | vimeo: 35 | vk: 36 | wordpress: 37 | youtube: # e.g. "UCqECaJ8Gagnn7YCbPEzWH6g" 38 | -------------------------------------------------------------------------------- /_data/language.yml: -------------------------------------------------------------------------------- 1 | # Localization strings 2 | str_follow_on: "Follow on" 3 | str_rss_follow: "Follow RSS feed" 4 | str_share_on: "Share on" 5 | str_add_to: "Add to" 6 | str_email: "Email" 7 | str_tweet: "Tweet" 8 | str_pin_it: "Pin it" 9 | str_next_post: "Next post" 10 | str_previous_post: "Previous post" 11 | str_next_page: "Next" 12 | str_previous_page: "Prev" 13 | str_javascript_required_disqus: "Please enable JavaScript to view comments." 14 | str_no_result_found: "No result found" 15 | str_cookie_approve: "Approve" 16 | str_cookie_disclaimer: "We would like to use third party cookies and scripts to improve the functionality of this website." 17 | str_months: [January, February, March, April, May, June, July, August, September, October, November, December] 18 | str_dark: 'Dark' 19 | str_light: 'Light' 20 | str_date_format: '%B %-d, %Y' 21 | str_last_modified: 'Last modified on' 22 | 23 | # Localization settings 24 | cusdis_lang: # zh-cn, es, tr, pt-BR 25 | -------------------------------------------------------------------------------- /_sass/includes/_blog_nav.scss: -------------------------------------------------------------------------------- 1 | /* --- Pagination --- */ 2 | .pagination { 3 | @extend %padding-nav; 4 | display: inline-block; 5 | text-align: center; 6 | //margin-bottom: 2em; 7 | width: 100%; 8 | clear: both; 9 | 10 | &:before { 11 | content: ''; 12 | display: inline-block; 13 | height: 100%; 14 | vertical-align: middle; 15 | } 16 | 17 | .page_number { 18 | display: inline-block; 19 | vertical-align: sub; 20 | 21 | @media (max-width: $x-sm-break) { 22 | display: none; 23 | } 24 | } 25 | 26 | .button { 27 | margin: 0; 28 | display: inline-block; 29 | 30 | .fa { 31 | &.fa-chevron-right, &.fa-chevron-left { 32 | font-size: initial; 33 | } 34 | } 35 | 36 | i .fa-chevron-left .fa-chevron-right { 37 | vertical-align: inherit; 38 | } 39 | } 40 | 41 | .previous { 42 | float: left; 43 | } 44 | 45 | .next { 46 | float: right; 47 | } 48 | } 49 | -------------------------------------------------------------------------------- /_includes/social/utterances.liquid: -------------------------------------------------------------------------------- 1 |
8 | 9 | -------------------------------------------------------------------------------- /_sass/external/font-awesome/brands.scss: -------------------------------------------------------------------------------- 1 | /*! 2 | * Font Awesome Free 6.7.1 by @fontawesome - https://fontawesome.com 3 | * License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) 4 | * Copyright 2024 Fonticons, Inc. 5 | */ 6 | @import 'functions'; 7 | @import 'variables'; 8 | 9 | :root, :host { 10 | --#{$fa-css-prefix}-style-family-brands: 'Font Awesome 6 Brands'; 11 | --#{$fa-css-prefix}-font-brands: normal 400 1em/1 'Font Awesome 6 Brands'; 12 | } 13 | 14 | @font-face { 15 | font-family: 'Font Awesome 6 Brands'; 16 | font-style: normal; 17 | font-weight: 400; 18 | font-display: $fa-font-display; 19 | src: url('#{$fa-font-path}/fa-brands-400.woff2') format('woff2'), 20 | url('#{$fa-font-path}/fa-brands-400.ttf') format('truetype'); 21 | } 22 | 23 | .fab, 24 | .#{$fa-css-prefix}-brands { 25 | font-weight: 400; 26 | } 27 | 28 | @each $name, $icon in $fa-brand-icons { 29 | .#{$fa-css-prefix}-#{$name} { #{$fa-icon-property}: unquote("\"#{ $icon }\""); } 30 | } 31 | -------------------------------------------------------------------------------- /.github/hooks/pre-commit: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | # OPTIONAL 3 | # Called by "git commit" with no arguments. 4 | # The hook should run gulp to optimize assets. 5 | # Will exit with non-zero status if it wants to stop the commit. 6 | 7 | : << 'END' # Ancillary code to ensure environment before running gulp 8 | # If it's on the right directory, proceed. Else, try to fix it. If fail, abort commit. 9 | if [ ${PWD##*/} != "assets" ] ; then 10 | cd assets || exit 1 11 | fi 12 | 13 | # If gulp is installed and gulpfile.js is present, then proceed. Else, abort commit. 14 | if ! [ -f "gulpfile.js" ] || ! command -v gulp; then 15 | printf "gulpfile.js not found or gulp-cli not installed! Run npm i to install it.\n" 16 | exit 1 17 | fi 18 | END 19 | 20 | # If there are non-staged assets, abort commit. 21 | if git status --porcelain | grep -E '^(\?\?|AM|\nM).*assets/.*$' >/dev/null; then 22 | printf "There are non-staged assets, be sure to run gulp before committing changes!\n" 23 | exit 1 24 | fi 25 | 26 | # Proceed with the commit. 27 | exit 0 28 | 29 | -------------------------------------------------------------------------------- /_layouts/search.liquid: -------------------------------------------------------------------------------- 1 | --- 2 | layout: page 3 | --- 4 | 5 | 6 | 7 |
8 |
9 | 10 | 11 |
12 | 24 |
25 | -------------------------------------------------------------------------------- /_portfolio/jekyllblog.md: -------------------------------------------------------------------------------- 1 | --- 2 | layout: post 3 | title: Jekyll 4 | feature-img: "assets/img/portfolio/cabin.png" 5 | img: "assets/img/portfolio/cabin.png" 6 | date: 2017-05-26 7 | --- 8 | 9 | Sed ut perspiciatis unde omnis iste natus error sit voluptatem accusantium doloremque laudantium, totam rem aperiam, 10 | eaque ipsa quae ab illo inventore veritatis et quasi architecto beatae vitae dicta sunt explicabo. 11 | Nemo enim ipsam voluptatem quia voluptas sit aspernatur aut odit aut fugit, 12 | sed quia consequuntur magni dolores eos qui ratione voluptatem sequi nesciunt. 13 | Neque porro quisquam est, qui dolorem ipsum quia dolor sit amet, consectetur, 14 | adipisci velit, sed quia non numquam eius modi tempora incidunt ut labore et dolore magnam aliquam quaerat voluptatem. 15 | Ut enim ad minima veniam, quis nostrum exercitationem ullam corporis suscipit laboriosam, nisi ut aliquid ex ea commodi consequatur? 16 | Quis autem vel eum iure reprehenderit qui in ea voluptate velit esse quam nihil molestiae consequatur, 17 | vel illum qui dolorem eum fugiat quo voluptas nulla pariatur? 18 | 19 | -------------------------------------------------------------------------------- /_portfolio/ninja.md: -------------------------------------------------------------------------------- 1 | --- 2 | layout: post 3 | title: Ninja 4 | img: "assets/img/portfolio/ninja.png" 5 | date: April, 08 2014 6 | tags: [Lorem] 7 | --- 8 | 9 | ![image]({{ page.img | relative_url }}) 10 | 11 | Sed ut perspiciatis unde omnis iste natus error sit voluptatem accusantium doloremque laudantium, totam rem aperiam, 12 | eaque ipsa quae ab illo inventore veritatis et quasi architecto beatae vitae dicta sunt explicabo. 13 | Nemo enim ipsam voluptatem quia voluptas sit aspernatur aut odit aut fugit, 14 | sed quia consequuntur magni dolores eos qui ratione voluptatem sequi nesciunt. 15 | Neque porro quisquam est, qui dolorem ipsum quia dolor sit amet, consectetur, 16 | adipisci velit, sed quia non numquam eius modi tempora incidunt ut labore et dolore magnam aliquam quaerat voluptatem. 17 | Ut enim ad minima veniam, quis nostrum exercitationem ullam corporis suscipit laboriosam, nisi ut aliquid ex ea commodi consequatur? 18 | Quis autem vel eum iure reprehenderit qui in ea voluptate velit esse quam nihil molestiae consequatur, 19 | vel illum qui dolorem eum fugiat quo voluptas nulla pariatur? 20 | 21 | -------------------------------------------------------------------------------- /assets/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "type-on-strap-helper", 3 | "version": "2.4.13", 4 | "description": "Gulp file to manage the Type on Strap jekyll theme", 5 | "main": "gulpfile.js", 6 | "scripts": { 7 | "test": "echo \"Error: no test specified\" && exit 0", 8 | "update": "ncu dev -u", 9 | "fix": "npm audit fix" 10 | }, 11 | "repository": { 12 | "type": "git", 13 | "url": "git+https://github.com/sylhare/Type-on-Strap.git" 14 | }, 15 | "keywords": [ 16 | "jekyll" 17 | ], 18 | "author": "sylhare", 19 | "license": "MIT", 20 | "bugs": { 21 | "url": "https://github.com/Sylhare/Type-on-Strap/issues" 22 | }, 23 | "homepage": "https://github.com/sylhare/Type-on-Strap#readme", 24 | "engines": { 25 | "node": ">=14.0.0" 26 | }, 27 | "devDependencies": { 28 | "gulp": "^4.0.2", 29 | "gulp-clean-css": "^4.3.0", 30 | "gulp-concat": "^2.6.1", 31 | "gulp-imagemin": "^8.0.0", 32 | "gulp-less": "^5.0.0", 33 | "gulp-replace": "^1.1.4", 34 | "gulp-responsive": "^3.0.1", 35 | "gulp-uglify-es": "^3.0.0", 36 | "gulp-webp": "^4.0.1" 37 | } 38 | } 39 | -------------------------------------------------------------------------------- /_portfolio/circus.md: -------------------------------------------------------------------------------- 1 | --- 2 | layout: post 3 | title: Circus 4 | img: "assets/img/portfolio/circus.png" 5 | date: September 2014 6 | tags: [Ipsum] 7 | --- 8 | 9 | ![image]({{ page.img | relative_url }}) 10 | 11 | Sed ut perspiciatis unde omnis iste natus error sit voluptatem accusantium doloremque laudantium, totam rem aperiam, 12 | eaque ipsa quae ab illo inventore veritatis et quasi architecto beatae vitae dicta sunt explicabo. 13 | Nemo enim ipsam voluptatem quia voluptas sit aspernatur aut odit aut fugit, 14 | sed quia consequuntur magni dolores eos qui ratione voluptatem sequi nesciunt. 15 | Neque porro quisquam est, qui dolorem ipsum quia dolor sit amet, consectetur, 16 | adipisci velit, sed quia non numquam eius modi tempora incidunt ut labore et dolore magnam aliquam quaerat voluptatem. 17 | Ut enim ad minima veniam, quis nostrum exercitationem ullam corporis suscipit laboriosam, nisi ut aliquid ex ea commodi consequatur? 18 | Quis autem vel eum iure reprehenderit qui in ea voluptate velit esse quam nihil molestiae consequatur, 19 | vel illum qui dolorem eum fugiat quo voluptas nulla pariatur? 20 | 21 | -------------------------------------------------------------------------------- /_portfolio/gitlecture.md: -------------------------------------------------------------------------------- 1 | --- 2 | layout: post 3 | title: Github 4 | img: "assets/img/portfolio/github.png" 5 | date: 20-10-2017 6 | tags: [Lorem] 7 | --- 8 | 9 | ![image]({{ page.img | relative_url }}) 10 | 11 | Sed ut perspiciatis unde omnis iste natus error sit voluptatem accusantium doloremque laudantium, totam rem aperiam, 12 | eaque ipsa quae ab illo inventore veritatis et quasi architecto beatae vitae dicta sunt explicabo. 13 | Nemo enim ipsam voluptatem quia voluptas sit aspernatur aut odit aut fugit, 14 | sed quia consequuntur magni dolores eos qui ratione voluptatem sequi nesciunt. 15 | Neque porro quisquam est, qui dolorem ipsum quia dolor sit amet, consectetur, 16 | adipisci velit, sed quia non numquam eius modi tempora incidunt ut labore et dolore magnam aliquam quaerat voluptatem. 17 | Ut enim ad minima veniam, quis nostrum exercitationem ullam corporis suscipit laboriosam, nisi ut aliquid ex ea commodi consequatur? 18 | Quis autem vel eum iure reprehenderit qui in ea voluptate velit esse quam nihil molestiae consequatur, 19 | vel illum qui dolorem eum fugiat quo voluptas nulla pariatur? 20 | 21 | -------------------------------------------------------------------------------- /_posts/2014-11-27-whats-your-title.md: -------------------------------------------------------------------------------- 1 | --- 2 | layout: post 3 | title: What's your title 4 | hide_title: true 5 | feature-img: assets/img/feature-img/story.jpeg 6 | author: mhagnumdw 7 | tags: [Test, Image] 8 | categories: Demo 9 | --- 10 | 11 | This is an example of a post which includes a feature image that has a 12 | text, where you don't want to redisplay the title. 13 | Mind your image size in order for the text to be displayed where you want it to. 14 | The only limit is your imagination. 15 | 16 | Here is how the yaml looks inside the post: 17 | 18 | ```yml 19 | title: What's your title 20 | hide_title: true 21 | feature-img: assets/img/feature-img/story.jpeg 22 | author: mhagnumdw 23 | tags: [Test, Lorem] 24 | ``` 25 | 26 | You may wonder, why is there a title when you are not actually displaying it.
27 | Well that's due to some jekyll limitation: 28 | 29 | > You **can't** set the **title** to an **empty string** 30 | 31 | The title is used elsewhere than inside the post, for example in the blog page that list this post. 32 | An empty title would break those pages and possibly prevents jekyll to render your blog. 33 | -------------------------------------------------------------------------------- /_portfolio/hanoi.md: -------------------------------------------------------------------------------- 1 | --- 2 | layout: post 3 | title: Tower of Hanoi 4 | img: "assets/img/portfolio/toh.png" 5 | date: September 2014 6 | --- 7 | 8 | The tower of Hanoi... 9 | 10 | ![image]({{ page.img | relative_url }}) 11 | 12 | Sed ut perspiciatis unde omnis iste natus error sit voluptatem accusantium doloremque laudantium, totam rem aperiam, 13 | eaque ipsa quae ab illo inventore veritatis et quasi architecto beatae vitae dicta sunt explicabo. 14 | Nemo enim ipsam voluptatem quia voluptas sit aspernatur aut odit aut fugit, 15 | sed quia consequuntur magni dolores eos qui ratione voluptatem sequi nesciunt. 16 | Neque porro quisquam est, qui dolorem ipsum quia dolor sit amet, consectetur, 17 | adipisci velit, sed quia non numquam eius modi tempora incidunt ut labore et dolore magnam aliquam quaerat voluptatem. 18 | Ut enim ad minima veniam, quis nostrum exercitationem ullam corporis suscipit laboriosam, nisi ut aliquid ex ea commodi consequatur? 19 | Quis autem vel eum iure reprehenderit qui in ea voluptate velit esse quam nihil molestiae consequatur, 20 | vel illum qui dolorem eum fugiat quo voluptas nulla pariatur? 21 | 22 | -------------------------------------------------------------------------------- /_layouts/home.liquid: -------------------------------------------------------------------------------- 1 | --- 2 | layout: default 3 | --- 4 |
5 | 23 |
24 |

{{ site.header_text | default: "Change header_text in _config.yml"}}

25 |
26 | {% capture _blog %}{% include blog/blog.liquid %}{% endcapture %} 27 | {{ _blog | split: " " | join: " "}} 28 |
29 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | The MIT License (MIT) 2 | 3 | Copyright (c) 2016-2025 Sylhare 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | -------------------------------------------------------------------------------- /.github/workflows/docker-build.yml: -------------------------------------------------------------------------------- 1 | name: Build 2 | 3 | on: 4 | push: 5 | branches: [ master ] 6 | pull_request: 7 | branches: [ master ] 8 | 9 | jobs: 10 | image: 11 | 12 | runs-on: ubuntu-latest 13 | strategy: 14 | matrix: 15 | # The jekyll/builder was replaced by the action jekyll-build-pages 16 | docker-image: [ 'sylhare/jekyll' ] 17 | 18 | steps: 19 | - uses: actions/checkout@v4 20 | - name: Build 21 | uses: actions/jekyll-build-pages@v1 22 | with: 23 | destination: "./output" 24 | - name: Build with Docker 25 | continue-on-error: true 26 | run: | 27 | cd assets && docker build . 28 | - name: Build the site in the container 29 | run: | 30 | docker run \ 31 | -v ${{ github.workspace }}:/srv/jekyll -v ${{ github.workspace }}/_site:/srv/jekyll/_site \ 32 | ${{ matrix.docker-image }}:latest /bin/bash -c "chmod -R 777 /srv/jekyll && jekyll build --future" 33 | - name: Pull docker images 34 | continue-on-error: true 35 | run: | 36 | docker pull sylhare/type-on-strap 37 | docker pull sylhare/jekyll -------------------------------------------------------------------------------- /_sass/includes/_portfolio.scss: -------------------------------------------------------------------------------- 1 | .portfolio-link { 2 | display: block; 3 | position: relative; 4 | margin: 0 auto; 5 | max-width: 400px; 6 | 7 | .caption { 8 | margin: 0; 9 | position: absolute; 10 | width: 100%; 11 | height: 100%; 12 | text-align: center; 13 | opacity: 0; 14 | -webkit-transition: all ease .5s; 15 | -moz-transition: all ease .5s; 16 | transition: all ease .5s; 17 | 18 | &::before { 19 | content: ' '; 20 | display: inline-block; 21 | vertical-align: middle; 22 | height: 100%; 23 | } 24 | 25 | &:hover { 26 | opacity: 1; 27 | } 28 | 29 | .caption-content { 30 | font-size: 15px; 31 | color: white; 32 | text-shadow: -1px 0 #ddd, 0 1px #ddd, 1px 0 #ddd, 0 -1px #ddd; 33 | display: inline-block; 34 | vertical-align: middle; 35 | 36 | @media screen and (max-width: $sm-break) { 37 | font-size: 7px; 38 | } 39 | } 40 | } 41 | } 42 | 43 | .portfolio-grid { 44 | display: flex; 45 | flex-wrap: wrap; 46 | justify-content: space-around; 47 | 48 | } 49 | 50 | .portfolio-cell { 51 | flex: 0 0 32%; 52 | margin-bottom: 10px; 53 | } 54 | -------------------------------------------------------------------------------- /_portfolio/tictactoe.md: -------------------------------------------------------------------------------- 1 | --- 2 | layout: post 3 | title: Tic tac toe 4 | feature-img: "assets/img/portfolio/ttt.png" 5 | img: "assets/img/portfolio/ttt.png" 6 | date: September 2014 7 | --- 8 | 9 | Sed ut perspiciatis unde omnis iste natus error sit voluptatem accusantium doloremque laudantium, 10 | totam rem aperiam, eaque ipsa quae ab illo inventore veritatis et quasi architecto beatae vitae dicta sunt explicabo. 11 | Nemo enim ipsam voluptatem quia voluptas sit aspernatur aut odit aut fugit, 12 | sed quia consequuntur magni dolores eos qui ratione voluptatem sequi nesciunt. 13 | Neque porro quisquam est, qui dolorem ipsum quia dolor sit amet, consectetur, adipisci velit, 14 | sed quia non numquam eius modi tempora incidunt ut labore et dolore magnam aliquam quaerat voluptatem. 15 | Ut enim ad minima veniam, quis nostrum exercitationem ullam corporis suscipit laboriosam, nisi ut aliquid ex ea commodi consequatur? 16 | Quis autem vel eum iure reprehenderit qui in ea voluptate velit esse quam nihil molestiae consequatur, 17 | vel illum qui dolorem eum fugiat quo voluptas nulla pariatur? 18 | 19 | Use this area of the page to describe your project. 20 | The icon above is part of a free icon set by Flat Icons. 21 | 22 | -------------------------------------------------------------------------------- /_posts/2019-05-18-color-post.md: -------------------------------------------------------------------------------- 1 | --- 2 | layout: post 3 | title: Color Post 4 | tags: [Test, Color] 5 | color: brown 6 | author: sylhare 7 | categories: Example 8 | last_modified: "01-02-2023" 9 | excerpt_separator: 10 | --- 11 | 12 | # What a colorful post! 13 | 14 | This is an idea that came from [xukimseven/HardCandy-Jekyll](https://github.com/xukimseven/HardCandy-Jekyll) 15 | looking at this cheerful and colorful theme, I wanted to enable something similar for Type-on-Strap. 16 | 17 | You can go fork and star _HardCandy-Jekyll_ too! 😉 18 | 19 | 20 | 21 | ## How does it work? 22 | 23 | Basically you need to add just one thing, the color: 24 | 25 | ```yml 26 | --- 27 | layout: post 28 | title: Color Post 29 | color: brown 30 | --- 31 | ``` 32 | 33 | It can either be a html color like `brown` (which look like red to me). Or with the rgb: 34 | 35 | ```yml 36 | --- 37 | layout: post 38 | title: Color Post 39 | color: rgb(165,42,42) 40 | --- 41 | ``` 42 | 43 | The background used is `lineart.png` from [xukimseven](https://github.com/xukimseven) you can edit it in the config file. 44 | If you want another one, put it in `/assets/img` as well. 45 | 46 | > ⚠️ It's a bit hacking the css in the `post.html` 47 | -------------------------------------------------------------------------------- /.github/config.yml: -------------------------------------------------------------------------------- 1 | # Configuration for request-info 2 | # https://github.com/behaviorbot/request-info 3 | 4 | # *OPTIONAL* Comment to reply with 5 | requestInfoReplyComment: > 6 | We would appreciate it if you could provide us with more info about this issue/pr! 7 | 8 | # *OPTIONAL* default titles to check against for lack of descriptiveness (MUST BE ALL LOWERCASE) 9 | requestInfoDefaultTitles: 10 | - update [readme.md](README.md) 11 | - updates 12 | 13 | # *OPTIONAL* Label to be added to Issues and Pull Requests with insufficient information given 14 | requestInfoLabelToAdd: need-more-info 15 | 16 | # *OPTIONAL* Require Pull Requests to contain more information than what is provided in the PR template (Will fail if the pull request's body is equal to the provided template) 17 | checkPullRequestTemplate: true 18 | 19 | # *OPTIONAL* Only warn about insufficient information on these events type (Keys must be lowercase. Valid values are 'issue' and 'pullRequest') 20 | requestInfoOn: 21 | pullRequest: true 22 | issue: true 23 | 24 | # *OPTIONAL* Add a list of people whose Issues/PRs will not be commented on (keys must be GitHub usernames) 25 | requestInfoUserstoExclude: 26 | - sylhare 27 | - # the other users you wanna add here 28 | -------------------------------------------------------------------------------- /_portfolio/submarine.md: -------------------------------------------------------------------------------- 1 | --- 2 | layout: post 3 | title: Lorem Ipsum 4 | feature-img: "assets/img/portfolio/submarine.png" 5 | img: "assets/img/portfolio/submarine.png" 6 | date: 2017-09-03 7 | --- 8 | 9 | Sed ut perspiciatis unde omnis iste natus error sit voluptatem accusantium doloremque laudantium, 10 | totam rem aperiam, eaque ipsa quae ab illo inventore veritatis et quasi architecto beatae vitae dicta sunt explicabo. 11 | Nemo enim ipsam voluptatem quia voluptas sit aspernatur aut odit aut fugit, 12 | sed quia consequuntur magni dolores eos qui ratione voluptatem sequi nesciunt. 13 | Neque porro quisquam est, qui dolorem ipsum quia dolor sit amet, consectetur, adipisci velit, 14 | sed quia non numquam eius modi tempora incidunt ut labore et dolore magnam aliquam quaerat voluptatem. 15 | Ut enim ad minima veniam, quis nostrum exercitationem ullam corporis suscipit laboriosam, nisi ut aliquid ex ea commodi consequatur? 16 | Quis autem vel eum iure reprehenderit qui in ea voluptate velit esse quam nihil molestiae consequatur, 17 | vel illum qui dolorem eum fugiat quo voluptas nulla pariatur? 18 | 19 | Use this area of the page to describe your project. 20 | The icon above is part of a free icon set by Flat Icons. 21 | -------------------------------------------------------------------------------- /_portfolio/cake.md: -------------------------------------------------------------------------------- 1 | --- 2 | layout: post 3 | title: Cake 4 | feature-img: "assets/img/portfolio/cake.png" 5 | img: "assets/img/portfolio/cake.png" 6 | date: 27 September 2015 7 | tags: [Lorem, Ipsum] 8 | --- 9 | 10 | Sed ut perspiciatis unde omnis iste natus error sit voluptatem accusantium doloremque laudantium, 11 | totam rem aperiam, eaque ipsa quae ab illo inventore veritatis et quasi architecto beatae vitae dicta sunt explicabo. 12 | Nemo enim ipsam voluptatem quia voluptas sit aspernatur aut odit aut fugit, 13 | sed quia consequuntur magni dolores eos qui ratione voluptatem sequi nesciunt. 14 | Neque porro quisquam est, qui dolorem ipsum quia dolor sit amet, consectetur, adipisci velit, 15 | sed quia non numquam eius modi tempora incidunt ut labore et dolore magnam aliquam quaerat voluptatem. 16 | Ut enim ad minima veniam, quis nostrum exercitationem ullam corporis suscipit laboriosam, nisi ut aliquid ex ea commodi consequatur? 17 | Quis autem vel eum iure reprehenderit qui in ea voluptate velit esse quam nihil molestiae consequatur, 18 | vel illum qui dolorem eum fugiat quo voluptas nulla pariatur? 19 | 20 | Use this area of the page to describe your project. 21 | The icon above is part of a free icon set by Flat Icons. 22 | -------------------------------------------------------------------------------- /_portfolio/safe.md: -------------------------------------------------------------------------------- 1 | --- 2 | layout: post 3 | title: Creative 4 | feature-img: "assets/img/portfolio/safe.png" 5 | img: "assets/img/portfolio/safe.png" 6 | date: August, 16 2014 7 | tags: [Ipsum] 8 | --- 9 | 10 | 11 | Sed ut perspiciatis unde omnis iste natus error sit voluptatem accusantium doloremque laudantium, 12 | totam rem aperiam, eaque ipsa quae ab illo inventore veritatis et quasi architecto beatae vitae dicta sunt explicabo. 13 | Nemo enim ipsam voluptatem quia voluptas sit aspernatur aut odit aut fugit, 14 | sed quia consequuntur magni dolores eos qui ratione voluptatem sequi nesciunt. 15 | Neque porro quisquam est, qui dolorem ipsum quia dolor sit amet, consectetur, adipisci velit, 16 | sed quia non numquam eius modi tempora incidunt ut labore et dolore magnam aliquam quaerat voluptatem. 17 | Ut enim ad minima veniam, quis nostrum exercitationem ullam corporis suscipit laboriosam, nisi ut aliquid ex ea commodi consequatur? 18 | Quis autem vel eum iure reprehenderit qui in ea voluptate velit esse quam nihil molestiae consequatur, 19 | vel illum qui dolorem eum fugiat quo voluptas nulla pariatur? 20 | 21 | Use this area of the page to describe your project. 22 | The icon above is part of a free icon set by Flat Icons. 23 | -------------------------------------------------------------------------------- /_sass/external/font-awesome/_core.scss: -------------------------------------------------------------------------------- 1 | // base icon class definition 2 | // ------------------------- 3 | 4 | .#{$fa-css-prefix} { 5 | font-family: var(--#{$fa-css-prefix}-style-family, '#{$fa-style-family}'); 6 | font-weight: var(--#{$fa-css-prefix}-style, #{$fa-style}); 7 | } 8 | 9 | .fas, 10 | .far, 11 | .fab, 12 | .#{$fa-css-prefix}-solid, 13 | .#{$fa-css-prefix}-regular, 14 | .#{$fa-css-prefix}-brands, 15 | .#{$fa-css-prefix} { 16 | -moz-osx-font-smoothing: grayscale; 17 | -webkit-font-smoothing: antialiased; 18 | display: var(--#{$fa-css-prefix}-display, #{$fa-display}); 19 | font-style: normal; 20 | font-variant: normal; 21 | line-height: 1; 22 | text-rendering: auto; 23 | } 24 | 25 | .fas::before, 26 | .far::before, 27 | .fab::before, 28 | .#{$fa-css-prefix}-solid::before, 29 | .#{$fa-css-prefix}-regular::before, 30 | .#{$fa-css-prefix}-brands::before, 31 | .fa::before { 32 | content: var(#{$fa-icon-property}); 33 | } 34 | 35 | .#{$fa-css-prefix}-classic, 36 | .fas, 37 | .#{$fa-css-prefix}-solid, 38 | .far, 39 | .#{$fa-css-prefix}-regular { 40 | font-family: 'Font Awesome 6 Free'; 41 | } 42 | .#{$fa-css-prefix}-brands, 43 | .fab { 44 | font-family: 'Font Awesome 6 Brands'; 45 | } 46 | 47 | %fa-icon { 48 | @include fa-icon; 49 | } 50 | -------------------------------------------------------------------------------- /.github/tests/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "type-on-strap-tests", 3 | "version": "1.0.0", 4 | "description": "Test suite for Type-on-Strap Jekyll theme", 5 | "private": true, 6 | "scripts": { 7 | "test": "npm run test:unit && npm run test:e2e", 8 | "test:unit": "jest", 9 | "test:unit:watch": "jest --watch", 10 | "test:unit:coverage": "jest --coverage", 11 | "test:e2e": "playwright test", 12 | "test:e2e:headed": "playwright test --headed", 13 | "test:e2e:debug": "playwright test --debug", 14 | "test:e2e:ui": "playwright test --ui", 15 | "test:e2e:report": "playwright show-report", 16 | "test:data": "node scripts/validate-data.js", 17 | "playwright:install": "playwright install --with-deps", 18 | "server": "npx http-server ../../_site -p 4000 -c-1" 19 | }, 20 | "keywords": [ 21 | "test", 22 | "jekyll", 23 | "theme", 24 | "e2e", 25 | "playwright" 26 | ], 27 | "author": "", 28 | "license": "MIT", 29 | "devDependencies": { 30 | "@playwright/test": "^1.48.0", 31 | "@types/jest": "^29.5.12", 32 | "@types/node": "^20.14.10", 33 | "http-server": "^14.1.1", 34 | "jest": "^29.7.0", 35 | "jest-environment-jsdom": "^29.7.0", 36 | "js-yaml": "^4.1.0" 37 | } 38 | } 39 | 40 | -------------------------------------------------------------------------------- /.github/workflows/gem-github-page.yml: -------------------------------------------------------------------------------- 1 | name: Type-on-strap CI (GitHub Pages) 2 | 3 | on: 4 | pull_request: 5 | branches: [ master ] 6 | 7 | jobs: 8 | ruby: 9 | 10 | runs-on: ubuntu-latest 11 | strategy: 12 | matrix: 13 | ruby: [ '2.7.4', '3.2', '3.4' ] 14 | 15 | steps: 16 | - uses: actions/checkout@v4 17 | - name: Set up Ruby 18 | # To automatically get bug fixes and new Ruby versions for ruby/setup-ruby, 19 | # change this to (see https://github.com/ruby/setup-ruby#versioning): 20 | uses: ruby/setup-ruby@v1 21 | with: 22 | ruby-version: ${{ matrix.ruby }} 23 | bundler-cache: true # runs 'bundle install' and caches installed gems automatically 24 | - name: Install github-pages gem 2.7.4 25 | continue-on-error: true 26 | run: bundle install 27 | working-directory: ./.github/workflows/ruby-2.7.4 28 | if: matrix.ruby == '2.7.4' 29 | - name: Install github-pages gem 30 | run: | 31 | gem install github-pages 32 | gem update --system 33 | if: matrix.ruby != '2.7.4' 34 | - name: Install 35 | run: bundle install 36 | - name: Build jekyll site 37 | run: bundle exec jekyll build 38 | - name: Start Jekyll site 39 | run: timeout 10s bundle exec jekyll serve 40 | continue-on-error: true 41 | -------------------------------------------------------------------------------- /_layouts/custom.liquid: -------------------------------------------------------------------------------- 1 | --- 2 | layout: default 3 | --- 4 | 5 |
6 |
7 | {% unless page.hide_title %} 8 |

{{ page.title }}

9 | {% endunless %} 10 | {% if page.is_post %} 11 | {% include blog/post_info.liquid author=page.author date=page.date %} 12 | {% endif %} 13 |
14 |
{{ content }}
15 | 16 |
17 | 18 | {% if include.is_post %} {% include social/share_buttons.html %} {% endif %} 19 | 20 | 21 | {% capture tag_list %}{{ page.tags | join: "|"}}{% endcapture %} 22 | {% include default/tags_list.liquid tags=tag_list %} 23 |
24 | 25 |
26 | 27 | 28 | {% if site.post_navigation %} 29 | {% include blog/post_nav.liquid %} 30 | {% endif %} 31 | 32 | 33 | {% if site.cusdis_app_id %}{% include social/cusdis.liquid %}{% endif %} 34 | 35 | 36 | {% if site.disqus_shortname or site.theme_settings.disqus_shortname %} 37 | {% include social/disqus.liquid %}{% endif %} 38 | -------------------------------------------------------------------------------- /_layouts/archive.liquid: -------------------------------------------------------------------------------- 1 | --- 2 | layout: page 3 | --- 4 | 5 |
6 |
7 | {% assign postsByYear = site.posts | group_by_exp:"post", "post.date | date: '%Y'" %} 8 | 17 | {% for year in postsByYear %} 18 |
19 |

{{ year.name }} ({{year.items.size}})

20 | 30 |
31 | {% endfor %} 32 |
33 |
-------------------------------------------------------------------------------- /_sass/layouts/_tags.scss: -------------------------------------------------------------------------------- 1 | .tag-category-container { 2 | display: flex; 3 | flex-wrap: wrap; 4 | justify-content: center; 5 | align-items: flex-start; 6 | gap: 1em; 7 | width: 100%; 8 | padding-bottom: $padding-x-small; 9 | } 10 | 11 | .tag-list, 12 | .category-list { 13 | flex: 0 1 auto; 14 | padding-bottom: 0; 15 | 16 | a.button { 17 | margin: 0.1em; 18 | padding: 0.2em 0.4em; 19 | font-size: 0.9em; 20 | } 21 | 22 | p { 23 | margin: 0; 24 | padding: 0 0.2em 0 0; 25 | } 26 | 27 | ul { 28 | text-align: center; 29 | list-style: none; 30 | 31 | li, div { 32 | display: inline; 33 | } 34 | 35 | div.meta { 36 | margin-right: 0.5em; 37 | } 38 | } 39 | } 40 | 41 | .tag-anchor { 42 | margin-top: $padding-x-small; 43 | 44 | a { 45 | color: var(--link); 46 | 47 | &:hover { 48 | text-decoration: none; 49 | } 50 | } 51 | } 52 | 53 | .tag-posts { 54 | display: inline-block; 55 | width: 100%; 56 | 57 | .tag-title { 58 | margin-top: 0; 59 | margin-bottom: 0; 60 | 61 | a { 62 | margin-left: $padding-x-small; 63 | } 64 | 65 | .post-info { 66 | float: right; 67 | } 68 | } 69 | 70 | .meta { 71 | display: inline; 72 | float: right; 73 | font-size: 0.8em; 74 | line-height: normal; 75 | } 76 | 77 | @media screen and (max-width: $sm-break) { 78 | .meta { 79 | display: none; 80 | } 81 | } 82 | } 83 | -------------------------------------------------------------------------------- /.github/tests/e2e/helpers.js: -------------------------------------------------------------------------------- 1 | const { test } = require('@playwright/test'); 2 | 3 | /** 4 | * Helper to open mobile menu - forces menu visibility for mobile tests 5 | */ 6 | async function openMobileMenu(page) { 7 | await page.waitForLoadState('domcontentloaded'); 8 | await page.waitForTimeout(300); 9 | 10 | const menu = page.locator('nav ul'); 11 | await menu.evaluate(el => { 12 | el.classList.remove('hide'); 13 | el.style.opacity = '1'; 14 | el.style.fontSize = ''; 15 | }); 16 | 17 | await page.waitForTimeout(200); 18 | } 19 | 20 | /** 21 | * Helper function to check if theme toggle is available on the page. 22 | * @param {import('@playwright/test').Page} page - Playwright page object 23 | * @returns {Promise} True if theme toggle exists 24 | */ 25 | async function hasThemeToggle(page) { 26 | const themeToggle = page.locator('#theme-toggle'); 27 | return await themeToggle.count() > 0; 28 | } 29 | 30 | /** 31 | * Helper function to check if gallery has images and skip test if not 32 | */ 33 | async function checkGalleryHasImages(page) { 34 | const images = page.locator('.gallery img, .gallery-item img, img[class*="gallery"]'); 35 | const count = await images.count(); 36 | if (count === 0) { 37 | test.skip(true, 'Gallery has no images configured'); 38 | } 39 | return { images, count }; 40 | } 41 | 42 | module.exports = { 43 | openMobileMenu, 44 | hasThemeToggle, 45 | checkGalleryHasImages, 46 | }; 47 | 48 | -------------------------------------------------------------------------------- /_includes/blog/post_info.liquid: -------------------------------------------------------------------------------- 1 | {% assign author = site.data.authors[include.author] %} 2 | {% assign date = include.date | default: "today" | date: site.data.language.str_date_format | default: '%B %-d, %Y' %} 3 | 4 | 27 | -------------------------------------------------------------------------------- /_layouts/page.liquid: -------------------------------------------------------------------------------- 1 | --- 2 | layout: default 3 | --- 4 |
5 |
6 |
7 | {% if page.hide_title %} 8 |
9 | {% else %} 10 |

{{ page.title }}

11 | {% if page.subtitle %} 12 |

{{ page.subtitle }}

13 | {% endif %} 14 | {% endif %} 15 |
16 |
17 |
18 | {% if page.bootstrap %} 19 |
20 | {% endif %} 21 | {{ content }} 22 | {% if page.bootstrap %} 23 |
24 | {% endif %} 25 |
26 | 27 |
28 | 29 | {% capture category_list %}{{ page.categories | join: "|" }}{% endcapture %} 30 | {% include default/category_list.liquid categories=category_list %} 31 | 32 | 33 | {% capture tag_list %}{{ page.tags | join: "|" }}{% endcapture %} 34 | {% include default/tags_list.liquid tags=tag_list %} 35 |
36 |
37 | -------------------------------------------------------------------------------- /_includes/social/icons.liquid: -------------------------------------------------------------------------------- 1 | {% if site.data.social.rss or site.theme_settings.rss %} 2 |
  • 3 | 6 | 7 | 8 | 9 | 10 | 11 |
  • 12 | {% endif %} 13 | 14 | {% for footer in site.data.icons %} 15 | {% unless footer[1] == nil %} 16 | {% assign brand = footer[0] %} 17 | {% assign id = footer[1] %} 18 | {% assign data = site.data.icons_builder[brand] %} 19 | {% if data.icon == nil %} 20 | {% assign icon = "fab fa-" | append: brand %} 21 | {% else %} 22 | {% assign icon = data.icon %} 23 | {% endif %} 24 |
  • 25 | 29 | 30 | 31 | 32 | 33 | 34 |
  • 35 | {% endunless %} 36 | {% endfor %} 37 | -------------------------------------------------------------------------------- /type-on-strap.gemspec: -------------------------------------------------------------------------------- 1 | # coding: utf-8 2 | 3 | Gem::Specification.new do |spec| 4 | spec.name = "type-on-strap" 5 | spec.version = "2.4.13" 6 | spec.authors = ["Sylhare", "Rohan Chandra"] 7 | spec.email = ["sylhare@outlook.com", "hellorohan@outlook.com"] 8 | 9 | spec.summary = "A simple and responsive jekyll theme template" 10 | spec.description = %q{A simple and responsive jekyll theme template based on type-theme. Great for blogs, easy to customize and responsive.} 11 | spec.homepage = "https://github.com/sylhare/Type-on-Strap" 12 | spec.license = "MIT" 13 | 14 | spec.rdoc_options = ["--charset=UTF-8"] 15 | spec.extra_rdoc_files = %w(README.md LICENSE) 16 | spec.metadata["plugin_type"] = "theme" 17 | 18 | spec.files = Dir["**/*"].select do |f| 19 | f.match(%r!^(assets/(js|css|fonts|data)/|_(includes|layouts|sass)/|_data/(icons_builder.yml|language.yml)|(LICENSE|README.md))!i) 20 | end 21 | 22 | spec.post_install_message = <<~MSG 23 | Thanks for using Type on strap v2+! 24 | MSG 25 | 26 | spec.required_ruby_version = ">= 2.7.2", "< 4.0" 27 | 28 | spec.add_runtime_dependency "jekyll", ">= 3.8", "< 5.0" 29 | spec.add_runtime_dependency "jekyll-feed", ">= 0.15.1", "<= 0.17" 30 | spec.add_runtime_dependency "jekyll-paginate", "~> 1.1.0" 31 | spec.add_runtime_dependency "jekyll-seo-tag", ">= 2.7.1", "<= 2.8" 32 | end 33 | -------------------------------------------------------------------------------- /_layouts/post.liquid: -------------------------------------------------------------------------------- 1 | --- 2 | layout: default 3 | --- 4 |
    5 |
    6 |
    7 | {% if page.hide_title %} 8 |
    9 | {% else %} 10 |

    {{ page.title }}

    11 | {% include blog/post_info.liquid author=page.author date=page.date last_modified=page.last_modified %} 12 | {% endif %} 13 |
    14 |
    15 | 16 |
    17 | {% if page.bootstrap %}
    {% endif %} 18 | {{ content }} 19 | {% if page.bootstrap %}
    {% endif %} 20 |
    21 | 22 | 23 | {% include social/share_buttons.liquid %} 24 | 25 | 26 |
    27 | 28 | {% capture category_list %}{{ page.categories | join: "|" }}{% endcapture %} 29 | {% include default/category_list.liquid categories=category_list %} 30 | 31 | 32 | {% capture tag_list %}{{ page.tags | join: "|" }}{% endcapture %} 33 | {% include default/tags_list.liquid tags=tag_list %} 34 |
    35 | 36 |
    37 | 38 | {% include blog/post_footer.liquid color=page.color img=page.feature-img %} 39 | -------------------------------------------------------------------------------- /.github/scripts/validate-jekyll-search.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | # Validate Simple-Jekyll-Search (sylhare fork) 3 | 4 | set -e 5 | 6 | # Get the script directory and project root 7 | SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" 8 | PROJECT_ROOT="$(cd "$SCRIPT_DIR/../.." && pwd)" 9 | cd "$PROJECT_ROOT" 10 | 11 | # Colors for output 12 | GREEN='\033[0;32m' 13 | YELLOW='\033[1;33m' 14 | RED='\033[0;31m' 15 | NC='\033[0m' 16 | 17 | echo "==================================================" 18 | echo "Simple-Jekyll-Search Validation (v1.15.1)" 19 | echo "==================================================" 20 | echo "" 21 | 22 | echo "Note: Using sylhare's fork at https://github.com/sylhare/Simple-Jekyll-Search" 23 | echo "" 24 | 25 | if [ ! -f "assets/js/vendor/simple-jekyll-search.min.js" ]; then 26 | echo -e "${RED}❌ Local file not found${NC}" 27 | exit 1 28 | fi 29 | 30 | echo -n "Current version: " 31 | VERSION=$(head -3 assets/js/vendor/simple-jekyll-search.min.js | grep -o 'v[0-9]*\.[0-9]*\.[0-9]*' | head -1) || true 32 | 33 | if [ -n "$VERSION" ]; then 34 | echo "$VERSION" 35 | if [ "$VERSION" = "v1.15.1" ]; then 36 | echo -e "${GREEN}✅ Using expected version (v1.15.1)${NC}" 37 | else 38 | echo -e "${YELLOW}⚠️ Version mismatch - expected v1.15.1, found ${VERSION}${NC}" 39 | fi 40 | else 41 | echo "Unable to detect version" 42 | echo -e "${YELLOW}⚠️ Cannot verify version from file header${NC}" 43 | fi 44 | 45 | echo "" 46 | echo -e "${GREEN}✅ Simple-Jekyll-Search check complete${NC}" 47 | exit 0 48 | 49 | -------------------------------------------------------------------------------- /_sass/layouts/_search.scss: -------------------------------------------------------------------------------- 1 | .search-bar { 2 | display: block; 3 | width: 100%; 4 | height: 46px; 5 | padding: 6px 12px; 6 | font-size: 18px; 7 | line-height: 1.43; 8 | color: var(--text); 9 | background: var(--background) none; 10 | border: 1px solid #ccc; 11 | border-radius: 4px; 12 | -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075); 13 | box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075); 14 | -webkit-transition: border-color ease-in-out 0.15s, -webkit-box-shadow ease-in-out 0.15s; 15 | -o-transition: border-color ease-in-out 0.15s, box-shadow ease-in-out 0.15s; 16 | transition: border-color ease-in-out 0.15s, box-shadow ease-in-out 0.15s; 17 | 18 | &:focus, 19 | &:hover { 20 | border-color: var(--link); 21 | outline: 0; 22 | -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 8px var(--link); 23 | box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 8px var(--link); 24 | filter: opacity(0.6); 25 | } 26 | 27 | &::-moz-placeholder { 28 | color: var(--meta); 29 | opacity: 0.7; 30 | } 31 | 32 | &:-ms-input-placeholder, 33 | &::-webkit-input-placeholder { 34 | color: var(--meta); 35 | opacity: 0.7; 36 | } 37 | 38 | input { 39 | &[type=text] { 40 | height: 46px; 41 | padding: 10px 16px; 42 | font-size: 18px; 43 | line-height: 1.33; 44 | border-radius: 6px; 45 | } 46 | } 47 | } 48 | 49 | .search-title a { 50 | h3 { 51 | margin: 0; 52 | color: var(--link); 53 | } 54 | 55 | &:hover { 56 | text-decoration: none; 57 | } 58 | } 59 | -------------------------------------------------------------------------------- /_includes/blog/blog.liquid: -------------------------------------------------------------------------------- 1 |
    2 | {% unless paginator.posts %} 3 |

    There are no blog posts

    4 | {% endunless %} 5 | {% for post in paginator.posts %} 6 | 34 | {% endfor %} 35 |
    36 | 37 | {% include blog/blog_nav.liquid %} 38 | -------------------------------------------------------------------------------- /.github/.travis.yml: -------------------------------------------------------------------------------- 1 | language: ruby 2 | rvm: 3 | # - 2.4.0 4 | # - 2.5.5 5 | - 2.6.3 6 | 7 | env: 8 | global: 9 | - NOKOGIRI_USE_SYSTEM_LIBRARIES=true 10 | 11 | notifications: 12 | email: false 13 | 14 | before_install: 15 | # - gem update --system 16 | - gem install bundler 17 | 18 | script: 19 | - bundle install 20 | - bundle exec jekyll build 21 | 22 | after_script: 23 | - gem install type-on-strap 24 | - gem install jekyll-theme-type-on-strap 25 | - docker pull sylhare/type-on-strap 26 | 27 | branches: 28 | only: 29 | - master 30 | - /^v.*$/ 31 | 32 | jobs: 33 | include: 34 | - stage: gem release 35 | rvm: 2.6.3 36 | script: echo "Deploying to rubygems.org ..." 37 | deploy: 38 | provider: rubygems 39 | gem: type-on-strap 40 | api_key: 41 | secure: DNJmBojaNJU0VFS2RE3Gy5CBnll1GXm7wtvxVMDfAqFNbCQdq2LR/v3LDNNm/ZEPMQfgdvlom8s5Pm26nnxbWFAAFcLTBD/cyJffvudgiCo3ONLkpm/PsVJiTyNbzZyb/XPE879S+LVtdKGlhLFSBaqUKfrhyRHT1W9LWrrjZMTQngUZCPlJmw6AsLvqT2x1CcBvVD2Q6tN8bOwq2blsDUtI6449ey1qWfgaERvM8KvF76aB32YQ7t8986NMkfHRDXPlgxm64pCc4kduBqAk9UHP5JAJzO4c3zEhX5Mb6Hc1CoxdgF3WSpmiN6HVVMaSC1byL4evocR+Enh5Gjc0VxEmIjCESpyheQG7YkkaadC7Lrvb18/qoSj0iDeB386k11XMiRN1dxu1CehPOkyQh5V5UEbZrm/9W9U/eQGgG1YoqicShcfxLDGeWRK4moLW8a8pvvBs+dduZyCWUgaC08S1u+HwvO8TpWcslr9/J05sRV4PAjk+u66+FVdILn0YWsbOKTezY/APTDfHnn/NQGZWXI4W5PMtf+KfPjL9kU0ouhqGpElGxrg2Hlw8kaPY3QrYLviVC7/DvWNWPGt9hmvcneuEg16zJTMoeNzckK5AUimyzvvjpVPVBh30T1YpZtcg+gFgesTHjyo/piFxEFX4ttYKoxvLMABONbniXcE= 42 | on: 43 | tags: true 44 | repo: sylhare/Type-on-Strap 45 | -------------------------------------------------------------------------------- /_includes/social/giscus.liquid: -------------------------------------------------------------------------------- 1 |
    17 | 18 | -------------------------------------------------------------------------------- /.gitpod.yml: -------------------------------------------------------------------------------- 1 | # Documentation: https://www.gitpod.io/docs/references/gitpod-yml 2 | image: gitpod/workspace-full 3 | 4 | # Task(s) 5 | tasks: 6 | - before: | 7 | gem install bundle 8 | bundle config set --local path 'vendor/bundle' 9 | init: | 10 | bundle update 11 | bundle install 12 | - name: Run type on strap 13 | init: bundle install 14 | command: bundle exec jekyll serve 15 | 16 | # In case the user is trying to make a pull request, he needs GitLens, which by default is not installed. This code will help us install it. 17 | vscode: 18 | extensions: 19 | - eamodio.gitlens 20 | 21 | # Ports configuration, since Gitpod needs to open Type on Strap on a new tab when the server loads up. 22 | ports: 23 | - port: 4000 24 | onOpen: open-browser 25 | 26 | # For opening workspaces faster than ever, prebuilds are suggested 27 | github: 28 | prebuilds: 29 | # enable for the master/default branch (defaults to true) 30 | master: true 31 | # enable for all branches in this repo (defaults to false) 32 | branches: false 33 | # enable for pull requests coming from this repo (defaults to true) 34 | pullRequests: true 35 | # enable for pull requests coming from forks (defaults to false) 36 | pullRequestsFromForks: true 37 | # add a "Review in Gitpod" button as a comment to pull requests (defaults to true) 38 | addComment: false 39 | # add a "Review in Gitpod" button to pull requests (defaults to false) 40 | addBadge: true 41 | # add a label once the prebuild is ready to pull requests (defaults to false) 42 | addLabel: prebuilt 43 | -------------------------------------------------------------------------------- /.github/workflows/gem-build.yml: -------------------------------------------------------------------------------- 1 | name: Type-on-strap CI 2 | 3 | on: 4 | pull_request: 5 | branches: [ master ] 6 | 7 | jobs: 8 | ruby: 9 | 10 | runs-on: ubuntu-latest 11 | strategy: 12 | matrix: 13 | ruby: [ '3.2', '3.3', '3.4' ] 14 | 15 | steps: 16 | - uses: actions/checkout@v4 17 | - name: Set up Ruby 18 | # To automatically get bug fixes and new Ruby versions for ruby/setup-ruby, 19 | # change this to (see https://github.com/ruby/setup-ruby#versioning): 20 | uses: ruby/setup-ruby@v1 21 | with: 22 | ruby-version: ${{ matrix.ruby }} 23 | bundler-cache: true # runs 'bundle install' and caches installed gems automatically 24 | - name: Install 25 | run: bundle install 26 | - name: Build jekyll site 27 | run: bundle exec jekyll build 28 | - name: Start Jekyll site 29 | run: timeout 10s bundle exec jekyll serve 30 | continue-on-error: true 31 | - name: Build the gem 32 | continue-on-error: true 33 | run: | 34 | gem build *.gemspec 35 | echo `find . -name "*.gem" | tail -1 | awk -F"[/]" '{print $2}'` 36 | - name: Install theme gems 37 | run: | 38 | gem cleanup type-on-strap 39 | gem install type-on-strap --source "https://rubygems.org" 40 | gem install jekyll-theme-type-on-strap --source "https://rubygems.org" 41 | - name: GPR 42 | run: | 43 | gem cleanup type-on-strap 44 | gem install type-on-strap --version "2.4.11" --source "https://rubygems.pkg.github.com/sylhare" 45 | -------------------------------------------------------------------------------- /_sass/type-on-strap.scss: -------------------------------------------------------------------------------- 1 | /* TYPE_ON_STRAP Main style sheet */ 2 | 3 | /* Variables */ 4 | // All the options to customize your theme in one file 5 | @import 'base/variables'; 6 | 7 | /* External */ 8 | // CSS from external sources 9 | @import 'external/reset'; 10 | @import 'external/font-awesome'; 11 | @import 'external/pacifico'; 12 | @import 'external/katex'; 13 | @import 'external/source-sans-pro'; 14 | 15 | /* Base */ 16 | // For general CSS in the theme 17 | @import 'base/global'; 18 | @import 'base/highlight'; 19 | @import 'base/utility'; 20 | 21 | /* Includes */ 22 | // Linked with the html in the _includes folder 23 | @import 'includes/post_nav'; 24 | @import 'includes/footer'; 25 | @import 'includes/navbar'; 26 | @import 'includes/share_buttons'; 27 | @import 'includes/blog_nav'; 28 | @import 'includes/gallery'; 29 | @import 'includes/portfolio'; 30 | @import 'includes/aligner'; 31 | 32 | /* Posts */ 33 | // Linked with the html in the _layouts folder 34 | @import 'layouts/posts'; 35 | @import 'layouts/categories'; 36 | @import 'layouts/blog'; 37 | @import 'layouts/page'; 38 | @import 'layouts/tags'; 39 | @import 'layouts/search'; 40 | 41 | /** 42 | 43 | CUSTOM STYLING 44 | 45 | In the case you want to add your own style on top of the type-on-strap one. 46 | You can add a custom scss file using: 47 | 48 | @import 'custom'; 49 | 50 | Put it right after this comment for your changes to be applied over the default style. 51 | (Once it processed into the assets/css/main.css by Jekyll at run time) 52 | 53 | Then create your _custom.scss right next to type-on-strap.scss and add in it all 54 | of the unique scss that your blog needs. 55 | 56 | */ 57 | -------------------------------------------------------------------------------- /.github/workflows/publish-build.yml: -------------------------------------------------------------------------------- 1 | name: Publish build 2 | 3 | on: 4 | workflow_dispatch: 5 | push: 6 | tags: 7 | - v* 8 | 9 | jobs: 10 | build: 11 | if: ${{ github.ref == 'refs/heads/master' }} 12 | name: Build 13 | runs-on: ubuntu-latest 14 | permissions: 15 | contents: read 16 | packages: write 17 | 18 | steps: 19 | - uses: actions/checkout@v4 20 | - name: Set up Ruby 3.4 21 | uses: ruby/setup-ruby@v1 22 | with: 23 | ruby-version: 3.4.0 24 | - name: Install 25 | run: bundle install 26 | - name: Build the gem 27 | run: | 28 | gem build *.gemspec 29 | echo `find . -name "*.gem" | tail -1 | awk -F"[/]" '{print $2}'` 30 | - name: Publish to GPR 31 | continue-on-error: true 32 | run: | 33 | echo ${{ github.repository_owner }} 34 | mkdir -p $HOME/.gem 35 | touch $HOME/.gem/credentials 36 | chmod 0600 $HOME/.gem/credentials 37 | printf -- "---\n:github: ${GEM_HOST_API_KEY}\n" > $HOME/.gem/credentials 38 | gem push --KEY github --host https://rubygems.pkg.github.com/${OWNER} *.gem 39 | env: 40 | GEM_HOST_API_KEY: "Bearer ${{secrets.GITHUB_TOKEN}}" 41 | OWNER: ${{ github.repository_owner }} 42 | 43 | - name: Publish to RubyGems 44 | run: | 45 | mkdir -p $HOME/.gem 46 | touch $HOME/.gem/credentials 47 | chmod 0600 $HOME/.gem/credentials 48 | printf -- "---\n:rubygems_api_key: ${GEM_HOST_API_KEY}\n" > $HOME/.gem/credentials 49 | wc -l $HOME/.gem/credentials 50 | gem push *.gem 51 | env: 52 | GEM_HOST_API_KEY: "${{secrets.RUBYGEMS_AUTH_TOKEN}}" 53 | -------------------------------------------------------------------------------- /.github/scripts/validate-masonry.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | # Validate Masonry against CDN source 3 | 4 | set -e 5 | 6 | # Get the script directory and project root 7 | SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" 8 | PROJECT_ROOT="$(cd "$SCRIPT_DIR/../.." && pwd)" 9 | cd "$PROJECT_ROOT" 10 | 11 | # Version configuration 12 | MASONRY_VERSION="4.2.2" 13 | 14 | # Colors for output 15 | GREEN='\033[0;32m' 16 | RED='\033[0;31m' 17 | NC='\033[0m' 18 | 19 | echo "==================================================" 20 | echo "Masonry Validation (v${MASONRY_VERSION})" 21 | echo "==================================================" 22 | echo "" 23 | 24 | # Function to validate a file 25 | validate_file() { 26 | local name=$1 27 | local local_file=$2 28 | local cdn_url=$3 29 | 30 | echo "Validating ${name}..." 31 | 32 | if [ ! -f "$local_file" ]; then 33 | echo -e "${RED}❌ Local file not found: ${local_file}${NC}" 34 | return 1 35 | fi 36 | 37 | LOCAL_SHA=$(shasum -a 256 "$local_file" | awk '{print $1}') 38 | CDN_SHA=$(curl -sL "$cdn_url" | shasum -a 256 | awk '{print $1}') 39 | 40 | echo " Local SHA256: $LOCAL_SHA" 41 | echo " CDN SHA256: $CDN_SHA" 42 | 43 | if [ "$LOCAL_SHA" = "$CDN_SHA" ]; then 44 | echo -e " ${GREEN}✅ Files match!${NC}" 45 | return 0 46 | else 47 | echo -e " ${RED}❌ Files DO NOT match!${NC}" 48 | return 1 49 | fi 50 | } 51 | 52 | if validate_file "Masonry" \ 53 | "assets/js/vendor/masonry.pkgd.min.js" \ 54 | "https://unpkg.com/masonry-layout@${MASONRY_VERSION}/dist/masonry.pkgd.min.js"; then 55 | 56 | echo "" 57 | echo -e "${GREEN}✅ Masonry validation passed!${NC}" 58 | exit 0 59 | else 60 | echo "" 61 | echo -e "${RED}❌ Masonry validation failed!${NC}" 62 | exit 1 63 | fi 64 | 65 | -------------------------------------------------------------------------------- /assets/js/comments-lazy-load.min.js: -------------------------------------------------------------------------------- 1 | !function(){"use strict";function t(t,e){const s=document.getElementById(t);if(!s||"true"!==s.getAttribute("data-lazy-load"))return;let n=!1;function c(){n||(n=!0,e(s))}if("IntersectionObserver"in window){const t=new IntersectionObserver((function(e){e.forEach((function(e){e.isIntersecting&&(c(),t.unobserve(s))}))}),{rootMargin:"400px"});t.observe(s)}else"complete"===document.readyState?c():window.addEventListener("load",c)}t("cusdis_thread",(function(t){const e=t.getAttribute("data-lang");if(e){const t=document.createElement("script");t.src="https://cusdis.com/js/widget/lang/"+e+".js",t.async=!0,document.body.appendChild(t)}const s=document.createElement("script");s.src="https://cusdis.com/js/cusdis.es.js",s.async=!0,document.body.appendChild(s)})),t("disqus_thread",(function(t){const e=t.getAttribute("data-shortname");if(!e)return void console.error("Disqus shortname not provided");window.disqus_shortname=e;const s=document.createElement("script");s.type="text/javascript",s.async=!0,s.src="//"+e+".disqus.com/embed.js",(document.getElementsByTagName("head")[0]||document.getElementsByTagName("body")[0]).appendChild(s)})),t("giscus_thread",(function(t){const e=document.createElement("script");e.src="https://giscus.app/client.js",e.async=!0,e.crossOrigin="anonymous";const s=t.attributes;for(let t=0;t value !== undefined && value !== null) 7 | .map(([key, value]) => `${key}="${value}"`) 8 | .join(' '); 9 | } 10 | 11 | function cusdisContainer({ lazyLoad = 'true', lang } = {}) { 12 | const attrs = buildAttributes({ 13 | id: 'cusdis_thread', 14 | 'data-lazy-load': lazyLoad, 15 | 'data-lang': lang, 16 | }); 17 | return `
    `; 18 | } 19 | 20 | function disqusContainer({ lazyLoad = 'true', shortname } = {}) { 21 | const attrs = buildAttributes({ 22 | id: 'disqus_thread', 23 | 'data-lazy-load': lazyLoad, 24 | 'data-shortname': shortname, 25 | }); 26 | return `
    `; 27 | } 28 | 29 | function giscusContainer({ lazyLoad = 'true', repo, repoId, category, mapping, theme } = {}) { 30 | const attrs = buildAttributes({ 31 | id: 'giscus_thread', 32 | 'data-lazy-load': lazyLoad, 33 | 'data-repo': repo, 34 | 'data-repo-id': repoId, 35 | 'data-category': category, 36 | 'data-mapping': mapping, 37 | 'data-theme': theme, 38 | }); 39 | return `
    `; 40 | } 41 | 42 | function utterancesContainer({ lazyLoad = 'true', repo, issueTerm, theme, label } = {}) { 43 | const attrs = buildAttributes({ 44 | id: 'utterances_thread', 45 | 'data-lazy-load': lazyLoad, 46 | 'data-repo': repo, 47 | 'data-issue-term': issueTerm, 48 | 'data-theme': theme, 49 | 'data-label': label, 50 | }); 51 | return `
    `; 52 | } 53 | 54 | module.exports = { 55 | cusdisContainer, 56 | disqusContainer, 57 | giscusContainer, 58 | utterancesContainer, 59 | }; 60 | 61 | -------------------------------------------------------------------------------- /.github/scripts/validate-vendor.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | # Local runner - validates all vendor dependencies at once 3 | # Use this for quick local testing 4 | 5 | set -e 6 | 7 | # Get the script directory and project root 8 | SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" 9 | PROJECT_ROOT="$(cd "$SCRIPT_DIR/../.." && pwd)" 10 | cd "$PROJECT_ROOT" 11 | 12 | # Colors 13 | GREEN='\033[0;32m' 14 | RED='\033[0;31m' 15 | YELLOW='\033[1;33m' 16 | BLUE='\033[0;34m' 17 | NC='\033[0m' 18 | 19 | echo "" 20 | echo -e "${BLUE}==========================================" 21 | echo "Vendor Dependencies Validation" 22 | echo "==========================================${NC}" 23 | echo "" 24 | 25 | FAILED=0 26 | PASSED=0 27 | 28 | # Make all scripts executable 29 | chmod +x .github/scripts/validate-*.sh 30 | 31 | # Run each validation 32 | run_validation() { 33 | local script=$1 34 | local name=$2 35 | 36 | echo -e "${YELLOW}▶ ${name}${NC}" 37 | if "$script" 2>&1 | sed 's/^/ /'; then 38 | ((PASSED++)) 39 | else 40 | ((FAILED++)) 41 | fi 42 | echo "" 43 | } 44 | 45 | run_validation ".github/scripts/validate-katex.sh" "KaTeX" 46 | run_validation ".github/scripts/validate-mermaid.sh" "Mermaid" 47 | run_validation ".github/scripts/validate-masonry.sh" "Masonry" 48 | run_validation ".github/scripts/validate-imagesloaded.sh" "imagesLoaded" 49 | run_validation ".github/scripts/validate-jekyll-search.sh" "Simple-Jekyll-Search" 50 | 51 | echo "==========================================" 52 | echo "Summary" 53 | echo "==========================================" 54 | echo -e "${GREEN}Passed: ${PASSED}${NC}" 55 | echo -e "${RED}Failed: ${FAILED}${NC}" 56 | echo "" 57 | 58 | if [ $FAILED -eq 0 ]; then 59 | echo -e "${GREEN}✅ All vendor dependencies validated successfully!${NC}" 60 | exit 0 61 | else 62 | echo -e "${RED}❌ ${FAILED} validation(s) failed. Please re-download the failed files.${NC}" 63 | exit 1 64 | fi 65 | 66 | -------------------------------------------------------------------------------- /_includes/default/navbar.liquid: -------------------------------------------------------------------------------- 1 | 48 | -------------------------------------------------------------------------------- /.github/scripts/validate-mermaid.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | # Validate Mermaid against CDN source 3 | 4 | set -e 5 | 6 | # Get the script directory and project root 7 | SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" 8 | PROJECT_ROOT="$(cd "$SCRIPT_DIR/../.." && pwd)" 9 | cd "$PROJECT_ROOT" 10 | 11 | # Version configuration 12 | MERMAID_VERSION="11.12.0" 13 | 14 | # Colors for output 15 | GREEN='\033[0;32m' 16 | RED='\033[0;31m' 17 | NC='\033[0m' 18 | 19 | echo "==================================================" 20 | echo "Mermaid Validation (v${MERMAID_VERSION})" 21 | echo "==================================================" 22 | echo "" 23 | 24 | # Function to validate a file 25 | validate_file() { 26 | local name=$1 27 | local local_file=$2 28 | local cdn_url=$3 29 | 30 | echo "Validating ${name}..." 31 | 32 | if [ ! -f "$local_file" ]; then 33 | echo -e "${RED}❌ Local file not found: ${local_file}${NC}" 34 | return 1 35 | fi 36 | 37 | LOCAL_SHA=$(shasum -a 256 "$local_file" | awk '{print $1}') 38 | CDN_SHA=$(curl -sL "$cdn_url" | shasum -a 256 | awk '{print $1}') 39 | 40 | echo " Local SHA256: $LOCAL_SHA" 41 | echo " CDN SHA256: $CDN_SHA" 42 | 43 | if [ "$LOCAL_SHA" = "$CDN_SHA" ]; then 44 | echo -e " ${GREEN}✅ Files match!${NC}" 45 | return 0 46 | else 47 | echo -e " ${RED}❌ Files DO NOT match!${NC}" 48 | return 1 49 | fi 50 | } 51 | 52 | if validate_file "Mermaid" \ 53 | "assets/js/vendor/mermaid.min.js" \ 54 | "https://cdn.jsdelivr.net/npm/mermaid@${MERMAID_VERSION}/dist/mermaid.min.js"; then 55 | 56 | echo "" 57 | echo "Version in file:" 58 | grep -o 'version:"[0-9]*\.[0-9]*\.[0-9]*"' assets/js/vendor/mermaid.min.js | head -1 || echo " Not found" 59 | echo "" 60 | 61 | echo -e "${GREEN}✅ Mermaid validation passed!${NC}" 62 | exit 0 63 | else 64 | echo "" 65 | echo -e "${RED}❌ Mermaid validation failed!${NC}" 66 | exit 1 67 | fi 68 | 69 | -------------------------------------------------------------------------------- /_includes/blog/blog_nav.liquid: -------------------------------------------------------------------------------- 1 | {% if paginator.total_pages > 1 %} 2 | 43 | {% endif %} 44 | -------------------------------------------------------------------------------- /.github/tests/playwright.config.js: -------------------------------------------------------------------------------- 1 | const { defineConfig, devices } = require('@playwright/test'); 2 | 3 | /** 4 | * Playwright configuration for Type-on-Strap theme e2e tests 5 | * @see https://playwright.dev/docs/test-configuration 6 | */ 7 | module.exports = defineConfig({ 8 | testDir: './e2e', 9 | timeout: 30 * 1000, // Maximum time one test can run 10 | fullyParallel: true, 11 | forbidOnly: !!process.env.CI, 12 | retries: process.env.CI ? 2 : 0, 13 | workers: process.env.CI ? 1 : undefined, 14 | reporter: [ 15 | ['html', { outputFolder: 'playwright-report' }], 16 | ['list'], 17 | ], 18 | use: { 19 | // Base URL for tests 20 | // Note: Site is served from _site/ root, but links contain /Type-on-Strap/ prefix 21 | baseURL: process.env.BASE_URL || 'http://localhost:4000', 22 | trace: 'on-first-retry', 23 | screenshot: 'only-on-failure', 24 | video: 'retain-on-failure', 25 | }, 26 | projects: [ 27 | { 28 | name: 'chromium', 29 | use: { ...devices['Desktop Chrome'] }, 30 | grep: /@desktop/, 31 | grepInvert: /@mobile/, 32 | }, 33 | { 34 | name: 'firefox', 35 | use: { ...devices['Desktop Firefox'] }, 36 | grep: /@desktop/, 37 | grepInvert: /@mobile/, 38 | }, 39 | { 40 | name: 'webkit', 41 | use: { ...devices['Desktop Safari'] }, 42 | grep: /@desktop/, 43 | grepInvert: /@mobile/, 44 | }, 45 | // Mobile tests 46 | { 47 | name: 'mobile-chrome', 48 | use: { ...devices['Pixel 5'] }, 49 | grep: /@mobile/, 50 | grepInvert: /@desktop/, 51 | }, 52 | { 53 | name: 'mobile-safari', 54 | use: { ...devices['iPhone 12'] }, 55 | grep: /@mobile/, 56 | grepInvert: /@desktop/, 57 | }, 58 | ], 59 | webServer: { 60 | command: 'cd ../.. && bundle exec jekyll build --baseurl "" --quiet && cd .github/tests && npm run server', 61 | url: 'http://localhost:4000', 62 | reuseExistingServer: !process.env.CI, 63 | timeout: 120 * 1000, 64 | }, 65 | }); 66 | 67 | -------------------------------------------------------------------------------- /_data/comments.yml: -------------------------------------------------------------------------------- 1 | # Comments configuration 2 | # Configure different comment systems here 3 | 4 | # Disqus configuration 5 | disqus: 6 | shortname: # Your Disqus shortname 7 | 8 | # Cusdis configuration 9 | cusdis: 10 | app_id: # Your Cusdis app ID 11 | lang: # Language code (e.g., zh-cn, es, tr, pt-BR) 12 | 13 | # Utterances configuration 14 | utterances: 15 | repo: # Your public comments repository (e.g. owner/repo) 16 | issue-term: # Issue term (e.g. "comment" - considers issues with this word in the title as comments) 17 | theme: # OPTIONAL: Take the `color_theme` by default, or set a custom one like github-dark-orange 18 | label: # OPTIONAL: Adds an issue label in the issue 19 | 20 | # Giscus configuration 21 | giscus: 22 | repo: # Your public comments repository (e.g. owner/repo) 23 | repo-id: # Your repo id, go to https://giscus.app to check it 24 | category: # Category to search discussions. When removed, discussions will be searched in all categories 25 | category-id: # Your category id, go to https://giscus.app to check it 26 | mapping: # Discussion mapping (e.g. pathname, url, title, og:title) 27 | term: # OPTIONAL: Some mappings require specific term, go to https://giscus.app to check it 28 | strict: 0 # OPTIONAL: Avoid mismatches on similar titles (0 or 1) 29 | reactions-enabled: 1 # OPTIONAL: Enable reactions (0 or 1) 30 | emit-metadata: 0 # OPTIONAL: Emit discussion metadata (0 or 1) 31 | input-position: bottom # OPTIONAL: Place the comment box (top or bottom) 32 | theme: # OPTIONAL: Take the `color_theme` by default, or set a custom one like dark_dimmed 33 | lang: en # OPTIONAL: Choose the language. "en" is used by default 34 | loading: # OPTIONAL: Loading behavior (lazy or eager) -------------------------------------------------------------------------------- /assets/js/partials/cookie_consent_init.js: -------------------------------------------------------------------------------- 1 | /* @preserve Cookie Consent Init */ 2 | /* 3 | * This script is used to display a cookie consent banner. 4 | * The variables isCookieConsent, cookieName, analyticsName are defined in head.liquid from the _config.yml 5 | * The variables cookieNotice and cookieNoticeAccept are defined in head.liquid from the _data/translations.yml 6 | */ 7 | function createCookie(name, value, days) { 8 | var expires = ""; 9 | if (days) { 10 | var date = new Date(); 11 | date.setTime(date.getTime() + (days * 24 * 60 * 60 * 1000)); 12 | expires = "; expires=" + date.toUTCString(); 13 | } 14 | document.cookie = `${name}=${value}${expires}; path=/`; 15 | } 16 | 17 | function readCookie(name) { 18 | var nameEQ = name + "="; 19 | var ca = document.cookie.split(';'); 20 | for (var i = 0; i < ca.length; i++) { 21 | var c = ca[i]; 22 | while (c.charAt(0) === ' ') c = c.substring(1, c.length); 23 | if (c.indexOf(nameEQ) === 0) return c.substring(nameEQ.length, c.length); 24 | } 25 | return null; 26 | } 27 | 28 | function addCookieConsentListener() { 29 | document.getElementById('cookie-notice-accept').addEventListener("click", function () { 30 | createCookie(cookieName, 'true', 31); 31 | document.getElementById('cookie-notice').style.display = 'none'; 32 | location.reload(); 33 | }); 34 | } 35 | 36 | function googleAnalytics() { 37 | if (analyticsName.toLowerCase() !== '') { 38 | // Google tag manager 39 | window.dataLayer = window.dataLayer || []; 40 | function gtag() { dataLayer.push(arguments); } 41 | gtag('js', new Date()); 42 | gtag('config', analyticsName, { 'anonymize_ip': true }); 43 | if (analyticsNameGA4) { 44 | gtag('config', analyticsNameGA4, { 'anonymize_ip': true }); 45 | } 46 | } 47 | } 48 | 49 | if (isCookieConsent.toLowerCase() === 'true') { 50 | addCookieConsentListener(); 51 | if (readCookie(cookieName) === 'true') { 52 | googleAnalytics(); 53 | } else { 54 | document.getElementById('cookie-notice').style.display = 'block'; 55 | } 56 | } else { 57 | googleAnalytics(); 58 | } 59 | 60 | 61 | -------------------------------------------------------------------------------- /_data/icons_builder.yml: -------------------------------------------------------------------------------- 1 | # Default data to build the footer icons 2 | # DO NOT MODIFY, use the "icons.yml" instead. 3 | behance: 4 | pre: "https://www.behance.net/" 5 | bitbucket: 6 | pre: "https://bitbucket.org/" 7 | calendly: 8 | pre: "https://calendly.com/" 9 | icon: "far fa-calendar-plus" 10 | dribbble: 11 | pre: "https://www.dribbble.com/" 12 | facebook: 13 | pre: "https://www.facebook.com/" 14 | flickr: 15 | pre: "https://flickr.com/photos/" 16 | github: 17 | pre: "https://github.com/" 18 | gitlab: 19 | pre: "https://gitlab.com/" 20 | google-scholar: 21 | pre: "https://scholar.google.com/citations?hl=en&user=" 22 | icon: "fas fa-user-graduate" 23 | instagram: 24 | pre: "https://instagram.com/" 25 | hacker-news: 26 | pre: "https://news.ycombinator.com/user?id=" 27 | keybase: 28 | pre: "https://keybase.io/" 29 | linkedin: 30 | pre: "https://www.linkedin.com/in/" 31 | mail: 32 | pre: "mailto:" 33 | icon: "fas fa-envelope" 34 | map: 35 | pre: "https://www.openstreetmap.org/#map=15/" 36 | icon: "fas fa-map-marked" 37 | mastodon: 38 | pre: "https://" 39 | matrix: 40 | pre: "https://matrix.to/#/" 41 | icon: "fab fa-connectdevelop" 42 | medium: 43 | pre: "https://medium.com/@" 44 | patreon: 45 | pre: "https://www.patreon.com/" 46 | phone: 47 | pre: "tel:" 48 | icon: "fas fa-phone" 49 | pinterest: 50 | pre: "https://www.pinterest.com/" 51 | reddit: 52 | pre: "https://www.reddit.com/user/" 53 | soundcloud: 54 | pre: "https://soundcloud.com/" 55 | sms: 56 | pre: "sms:" 57 | pos: "?body=Hi" 58 | icon: "fas fa-sms" 59 | stack-exchange: 60 | pre: "https://stackexchange.com/users/" 61 | stack-overflow: 62 | pre: "https://stackoverflow.com/users/" 63 | steam: 64 | pre: "https://steamcommunity.com/id/" 65 | telegram: 66 | pre: "https://t.me/" 67 | tumblr: 68 | pre: "https://" 69 | pos: ".tumblr.com/" 70 | twitch: 71 | pre: "https://twitch.tv/" 72 | twitter: 73 | pre: "https://twitter.com/" 74 | vimeo: 75 | pre: "https://vimeo.com/" 76 | vk: 77 | pre: "https://vk.com/" 78 | wordpress: 79 | pre: "https://" 80 | pos: ".wordpress.com/" 81 | youtube: 82 | pre: "https://www.youtube.com/channel/" 83 | -------------------------------------------------------------------------------- /assets/js/partials/dark-mode.js: -------------------------------------------------------------------------------- 1 | /* @preserve Dark mode Init */ 2 | /* 3 | * There are two colour palettes on CSS for the data-theme: 'light' and 'dark'. 4 | * Initially the script checks if a theme is set in session storage and 5 | * alternatively listens to a MediaQuery callback looking for "prefers-color-scheme: dark". 6 | * 7 | * The variables darkBtn and lightBtn are defined in head.liquid from the _data/translations.yml 8 | * The isAutoTheme is defined in head.liquid from the _config.yml 9 | */ 10 | 11 | const themeButton = { 12 | 'light': ` ${darkBtn}`, 13 | 'dark': ` ${lightBtn}` 14 | }; 15 | 16 | function currentTheme(){ 17 | return localStorage.getItem('theme'); 18 | } 19 | 20 | function setMode(theme) { 21 | document.documentElement.setAttribute('data-theme', theme); 22 | localStorage.setItem('theme', theme); 23 | const toggle = document.getElementById('theme-toggle'); 24 | if (toggle) { 25 | toggle.innerHTML = themeButton[theme]; 26 | } 27 | } 28 | 29 | function themeToggle() { 30 | let sessionPrefers = currentTheme(); 31 | if (sessionPrefers === 'light') { 32 | setMode('dark'); 33 | } else { 34 | setMode('light'); 35 | } 36 | } 37 | 38 | function bootstrapTheme() { 39 | if (isAutoTheme) { 40 | if (!currentTheme()) { 41 | // Load browser's preference 42 | let browserPrefersDark = window.matchMedia('(prefers-color-scheme: dark)'); 43 | if (browserPrefersDark.matches) localStorage.setItem('theme', 'dark'); 44 | browserPrefersDark.addEventListener('change', () => { 45 | if (browserPrefersDark.matches) localStorage.setItem('theme', 'dark'); 46 | }); 47 | } 48 | // Load theme 49 | let sessionPrefers = currentTheme(); 50 | setMode(sessionPrefers ? sessionPrefers : 'light'); 51 | } 52 | } 53 | 54 | // Init 55 | (function () { 56 | bootstrapTheme(); 57 | })() 58 | -------------------------------------------------------------------------------- /_sass/external/_source-sans-pro.scss: -------------------------------------------------------------------------------- 1 | /*! 2 | * Copyright 2010, 2012 Adobe Systems Incorporated (http://www.adobe.com/) 3 | * (Font: SIL OFL 1.1, CSS: MIT License) 4 | */ 5 | 6 | $ssp-font-path: "../../assets/fonts/source-sans-pro" !default; 7 | /* latin */ 8 | @font-face { 9 | font-family: 'Source Sans Pro'; 10 | font-style: italic; 11 | font-display: auto; 12 | font-weight: 400; 13 | src: local("Source Sans Pro Italic"), local("SourceSansPro-Italic"), url('#{$ssp-font-path}/source-sans-pro-italic.woff2') format("woff2"); 14 | unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+2000-206F, U+2074, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD; 15 | } 16 | 17 | /* latin */ 18 | @font-face { 19 | font-family: 'Source Sans Pro'; 20 | font-style: italic; 21 | font-display: auto; 22 | font-weight: 700; 23 | src: local("Source Sans Pro Bold Italic"), local("SourceSansPro-BoldItalic"), url('#{$ssp-font-path}/source-sans-pro-bold-italic.woff2') format("woff2"); 24 | unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+2000-206F, U+2074, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD; 25 | } 26 | 27 | /* latin */ 28 | @font-face { 29 | font-family: 'Source Sans Pro'; 30 | font-style: normal; 31 | font-display: auto; 32 | font-weight: 400; 33 | src: local("Source Sans Pro Regular"), local("SourceSansPro-Regular"), url('#{$ssp-font-path}/source-sans-pro-regular.woff2') format("woff2"); 34 | unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+2000-206F, U+2074, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD; 35 | } 36 | 37 | /* latin */ 38 | @font-face { 39 | font-family: 'Source Sans Pro'; 40 | font-style: normal; 41 | font-display: auto; 42 | font-weight: 700; 43 | src: local("Source Sans Pro Bold"), local("SourceSansPro-Bold"), url('#{$ssp-font-path}/source-sans-pro-bold.woff2') format("woff2"); 44 | unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+2000-206F, U+2074, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD; 45 | } 46 | -------------------------------------------------------------------------------- /_posts/2021-04-27-dark-mode.md: -------------------------------------------------------------------------------- 1 | --- 2 | layout: post 3 | title: Dark Mode 4 | tags: [Katex, Mermaid, Markdown] 5 | categories: Demo 6 | --- 7 | 8 | More colors with less light. Click the **half-moon** most top-right button to turn the lights ON/OFF. 9 | Here is a bit of everything, so you can check how the theme look, have fun! 👌 10 | 11 | 12 | # Headers 13 | ## Level 2 14 | ### Level 3 15 | #### Level 4 16 | ##### Level 5 17 | ###### Level 6 18 | 19 | # [Headers with links](http://localhost) 20 | ## [Level 2](http://localhost) 21 | ### [Level 3](http://localhost) 22 | #### [Level 4](http://localhost) 23 | ##### [Level 5](http://localhost) 24 | ###### [Level 6](http://localhost) 25 | 26 | ## Code highlight 27 | Mode specific code highlighting themes. [Kramdown](https://kramdown.gettalong.org/) which is responsible for the color highlighting may be more limited than your IDE. 28 | 29 | ```python 30 | #!/usr/bin/env python 31 | """ 32 | Test file for syntax 33 | """ 34 | # TODO: Use dark mode 35 | from sys import os 36 | 37 | def foo(bar): 38 | try: 39 | print(bar) 40 | except NameError: 41 | print("Variable bar is not defined") 42 | 43 | 44 | class Bar(object): 45 | def __init__(self): 46 | foo(1) 47 | self.octal = '\04' 48 | self.text = """Example \t\n""" 49 | 50 | def __exit__(self, *args): 51 | print('exit\u1111\xFF') 52 | pass 53 | 54 | @staticmethod 55 | def example(): 56 | assert (1.0 and 2L) or True 57 | return { "example": [(1,), (r'raw', u'unicode')]} 58 | ``` 59 | 60 | ## Tables 61 | 62 | | hex | dec | oct | 63 | | - | - | - | 64 | | 0 | 0 | 0 | 65 | | 5 | 5 | 5 | 66 | | A | 10 | 12 | 67 | | F | 16 | 20 | 68 | | F5 | 21 | 25 | 69 | 70 | ## KaTeX 71 | 72 | Some KaTeX diagrams to check in dark mode: 73 | 74 | $$ 75 | \begin{CD} 76 | A @>a>> B \\ 77 | @VbVV @AAcA \\ 78 | C @= D 79 | \end{CD} 80 | $$ 81 | 82 | $$\utilde{AB}$$ 83 | 84 | ## Mermaid 85 | 86 |
    87 | flowchart TB 88 | c1-->a2 89 | subgraph one 90 | a1-->a2 91 | end 92 | subgraph two 93 | b1-->b2 94 | end 95 | subgraph three 96 | c1-->c2 97 | end 98 |
    99 | -------------------------------------------------------------------------------- /.github/scripts/validate-katex.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | # Validate KaTeX against CDN source 3 | 4 | set -e 5 | 6 | # Get the script directory and project root 7 | SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" 8 | PROJECT_ROOT="$(cd "$SCRIPT_DIR/../.." && pwd)" 9 | cd "$PROJECT_ROOT" 10 | 11 | # Version configuration 12 | KATEX_VERSION="0.16.25" 13 | 14 | # Colors for output 15 | GREEN='\033[0;32m' 16 | RED='\033[0;31m' 17 | NC='\033[0m' 18 | 19 | echo "==================================================" 20 | echo "KaTeX Validation (v${KATEX_VERSION})" 21 | echo "==================================================" 22 | echo "" 23 | 24 | # Function to validate a file 25 | validate_file() { 26 | local name=$1 27 | local local_file=$2 28 | local cdn_url=$3 29 | 30 | echo "Validating ${name}..." 31 | 32 | if [ ! -f "$local_file" ]; then 33 | echo -e "${RED}❌ Local file not found: ${local_file}${NC}" 34 | return 1 35 | fi 36 | 37 | LOCAL_SHA=$(shasum -a 256 "$local_file" | awk '{print $1}') 38 | CDN_SHA=$(curl -sL "$cdn_url" | shasum -a 256 | awk '{print $1}') 39 | 40 | echo " Local SHA256: $LOCAL_SHA" 41 | echo " CDN SHA256: $CDN_SHA" 42 | 43 | if [ "$LOCAL_SHA" = "$CDN_SHA" ]; then 44 | echo -e " ${GREEN}✅ Files match!${NC}" 45 | return 0 46 | else 47 | echo -e " ${RED}❌ Files DO NOT match!${NC}" 48 | return 1 49 | fi 50 | } 51 | 52 | FAILED=0 53 | 54 | if ! validate_file "KaTeX main library" \ 55 | "assets/js/vendor/katex.min.js" \ 56 | "https://cdn.jsdelivr.net/npm/katex@${KATEX_VERSION}/dist/katex.min.js"; then 57 | ((FAILED++)) 58 | fi 59 | echo "" 60 | 61 | if ! validate_file "KaTeX auto-render" \ 62 | "assets/js/vendor/katex.auto-render.min.js" \ 63 | "https://cdn.jsdelivr.net/npm/katex@${KATEX_VERSION}/dist/contrib/auto-render.min.js"; then 64 | ((FAILED++)) 65 | fi 66 | echo "" 67 | 68 | echo "Version in file:" 69 | head -20 assets/js/vendor/katex.min.js | grep -o 'version:"[^"]*"' | head -1 || echo " Not found" 70 | echo "" 71 | 72 | if [ $FAILED -eq 0 ]; then 73 | echo -e "${GREEN}✅ KaTeX validation passed!${NC}" 74 | exit 0 75 | else 76 | echo -e "${RED}❌ KaTeX validation failed!${NC}" 77 | exit 1 78 | fi 79 | 80 | -------------------------------------------------------------------------------- /_sass/base/_utility.scss: -------------------------------------------------------------------------------- 1 | // Mix-ins 2 | %padding-nav { 3 | padding: $padding-small $padding-x-large; 4 | @media (max-width: $xl-break) { 5 | padding: $padding-small ($padding-large * 2); 6 | } 7 | @media (max-width: $l-break) { 8 | padding: $padding-small $padding-large; 9 | } 10 | @media (max-width: $m-break) { 11 | padding: $padding-small $padding-medium; 12 | } 13 | @media (max-width: $sm-break) { 14 | padding: $padding-small $padding-x-small; 15 | } 16 | } 17 | 18 | %padding-post { 19 | padding: $padding-x-small $padding-x-large; 20 | @media (max-width: $xl-break) { 21 | padding: $padding-x-small ($padding-large * 2); 22 | } 23 | @media (max-width: $l-break) { 24 | padding: $padding-x-small $padding-large; 25 | } 26 | @media (max-width: $m-break) { 27 | padding: $padding-x-small $padding-medium; 28 | } 29 | @media (max-width: $sm-break) { 30 | padding: $padding-x-small $padding-small; 31 | } 32 | } 33 | 34 | %padding-header { 35 | padding: $padding-medium $padding-large; 36 | @media (min-width: $xl-break) { 37 | padding: $padding-large $padding-large; 38 | } 39 | @media (max-width: $sm-break) { 40 | padding: $padding-large; 41 | } 42 | } 43 | 44 | .txt-shadow { 45 | text-shadow: 0.07em 0.10em 0.15em var(--text-shadow); 46 | } 47 | 48 | .subtle-txt-shadow { 49 | text-shadow: 1px 1px 2px var(--text-shadow); 50 | } 51 | 52 | // Buttons 53 | .button { 54 | border-radius: 0.3em; 55 | border: 1px solid; 56 | display: inline-block; 57 | margin: 1em 0; 58 | padding: 0.5em 0.75em; 59 | } 60 | 61 | a.button { 62 | @extend .button-link; 63 | } 64 | 65 | .button-link { 66 | &:hover { 67 | background: var(--link); 68 | border: 1px solid var(--link); 69 | color: var(--background); 70 | text-decoration: none; 71 | filter: none; 72 | } 73 | } 74 | 75 | .body-link { 76 | &:hover { 77 | text-decoration: underline; 78 | filter: brightness(0.85); 79 | } 80 | } 81 | 82 | .post-link { 83 | &:hover { 84 | text-decoration: none; 85 | color: var(--link); 86 | } 87 | } 88 | 89 | // States 90 | .disabled { 91 | opacity: 0.7; 92 | } 93 | 94 | // Custom 95 | .text-center { 96 | text-align: center; 97 | } 98 | 99 | .right { 100 | float: right; 101 | } 102 | -------------------------------------------------------------------------------- /_sass/external/font-awesome/_functions.scss: -------------------------------------------------------------------------------- 1 | // functions 2 | // -------------------------- 3 | 4 | // fa-content: convenience function used to set content property 5 | @function fa-content($fa-var) { 6 | @return unquote("\"#{ $fa-var }\""); 7 | } 8 | 9 | // fa-divide: Originally obtained from the Bootstrap https://github.com/twbs/bootstrap 10 | // 11 | // Licensed under: The MIT License (MIT) 12 | // 13 | // Copyright (c) 2011-2021 Twitter, Inc. 14 | // Copyright (c) 2011-2021 The Bootstrap Authors 15 | // 16 | // Permission is hereby granted, free of charge, to any person obtaining a copy 17 | // of this software and associated documentation files (the "Software"), to deal 18 | // in the Software without restriction, including without limitation the rights 19 | // to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 20 | // copies of the Software, and to permit persons to whom the Software is 21 | // furnished to do so, subject to the following conditions: 22 | // 23 | // The above copyright notice and this permission notice shall be included in 24 | // all copies or substantial portions of the Software. 25 | // 26 | // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 27 | // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 28 | // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 29 | // AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 30 | // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 31 | // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN 32 | // THE SOFTWARE. 33 | 34 | @function fa-divide($dividend, $divisor, $precision: 10) { 35 | $sign: if($dividend > 0 and $divisor > 0, 1, -1); 36 | $dividend: abs($dividend); 37 | $divisor: abs($divisor); 38 | $quotient: 0; 39 | $remainder: $dividend; 40 | @if $dividend == 0 { 41 | @return 0; 42 | } 43 | @if $divisor == 0 { 44 | @error "Cannot divide by 0"; 45 | } 46 | @if $divisor == 1 { 47 | @return $dividend; 48 | } 49 | @while $remainder >= $divisor { 50 | $quotient: $quotient + 1; 51 | $remainder: $remainder - $divisor; 52 | } 53 | @if $remainder > 0 and $precision > 0 { 54 | $remainder: fa-divide($remainder * 10, $divisor, $precision - 1) * .1; 55 | } 56 | @return ($quotient + $remainder) * $sign; 57 | } 58 | -------------------------------------------------------------------------------- /_sass/external/font-awesome/_mixins.scss: -------------------------------------------------------------------------------- 1 | // mixins 2 | // -------------------------- 3 | 4 | // base rendering for an icon 5 | @mixin fa-icon { 6 | -webkit-font-smoothing: antialiased; 7 | -moz-osx-font-smoothing: grayscale; 8 | display: inline-block; 9 | font-style: normal; 10 | font-variant: normal; 11 | font-weight: normal; 12 | line-height: 1; 13 | } 14 | 15 | // sets relative font-sizing and alignment (in _sizing) 16 | @mixin fa-size ($font-size) { 17 | font-size: fa-divide($font-size, $fa-size-scale-base) * 1em; // converts step in sizing scale into an em-based value that's relative to the scale's base 18 | line-height: fa-divide(1, $font-size) * 1em; // sets the line-height of the icon back to that of it's parent 19 | vertical-align: (fa-divide(6, $font-size) - fa-divide(3, 8)) * 1em; // vertically centers the icon taking into account the surrounding text's descender 20 | } 21 | 22 | // only display content to screen readers 23 | // see: https://www.a11yproject.com/posts/2013-01-11-how-to-hide-content/ 24 | // see: https://hugogiraudel.com/2016/10/13/css-hide-and-seek/ 25 | @mixin fa-sr-only() { 26 | position: absolute; 27 | width: 1px; 28 | height: 1px; 29 | padding: 0; 30 | margin: -1px; 31 | overflow: hidden; 32 | clip: rect(0, 0, 0, 0); 33 | white-space: nowrap; 34 | border-width: 0; 35 | } 36 | 37 | // use in conjunction with .sr-only to only display content when it's focused 38 | @mixin fa-sr-only-focusable() { 39 | &:not(:focus) { 40 | @include fa-sr-only(); 41 | } 42 | } 43 | 44 | // sets a specific icon family to use alongside style + icon mixins 45 | @mixin fa-family-classic() { 46 | @extend .fa-classic; 47 | } 48 | 49 | // convenience mixins for declaring pseudo-elements by CSS variable, 50 | // including all style-specific font properties 51 | @mixin fa-icon-solid($fa-var) { 52 | @extend .fa-solid; 53 | 54 | & { #{$fa-icon-property}: unquote("\"#{ $fa-var }\""); #{$fa-duotone-icon-property}: unquote("\"#{ $fa-var }#{ $fa-var }\""); } 55 | } 56 | @mixin fa-icon-regular($fa-var) { 57 | @extend .fa-regular; 58 | 59 | & { #{$fa-icon-property}: unquote("\"#{ $fa-var }\""); #{$fa-duotone-icon-property}: unquote("\"#{ $fa-var }#{ $fa-var }\""); } 60 | } 61 | @mixin fa-icon-brands($fa-var) { 62 | @extend .fa-brands; 63 | 64 | & { #{$fa-icon-property}: unquote("\"#{ $fa-var }\""); #{$fa-duotone-icon-property}: unquote("\"#{ $fa-var }#{ $fa-var }\""); } 65 | } 66 | -------------------------------------------------------------------------------- /_config.yml: -------------------------------------------------------------------------------- 1 | # SITE CONFIGURATION 2 | baseurl: "/Type-on-Strap" 3 | url: "https://sylhare.github.io" 4 | 5 | # THEME-SPECIFIC CONFIGURATION 6 | title: Type on Strap # site's title 7 | description: "A website with blog posts and pages" # used by search engines 8 | avatar: assets/img/triangle.png # Empty for no avatar in navbar 9 | favicon: assets/favicon.ico # Icon displayed in the tab 10 | 11 | # Header and footer text 12 | header_text: Change header_text in _config.yml # Change Blog header text 13 | header_feature_image: assets/img/header/triangular.jpeg 14 | header_feature_image_responsive: true 15 | footer_text: > 16 | Powered by Jekyll with Type on Strap 17 | 18 | # Blog 19 | excerpt: true # Or "truncate" (first 250 characters), "false" to disable 20 | post_navigation: true 21 | color_image: /assets/img/lineart.png # A bit transparent for color posts. 22 | 23 | # Features 24 | # More in the _data folder for comments, share buttons, author and language 25 | # For layout customization, go to the "_sass > base" folder, and check "_variables.scss" 26 | katex: true # Enable if using math markup 27 | mermaid: default # Enable mermaid-js for diagrams, use theme: base, forest, dark, default, neutral 28 | google_analytics: # Measurement ID, e.g. "G-00000" 29 | cookie_consent: false # To respect the usage of cookies 30 | color_theme: auto # auto, dark or light 31 | 32 | # PAGINATION 33 | paginate: 5 34 | paginate_path: "/blog/page:num" 35 | 36 | # PORTFOLIO 37 | collections: 38 | portfolio: 39 | output: true 40 | permalink: /:collection/:name 41 | 42 | # BUILD SETTINGS 43 | sass: 44 | style: compressed 45 | quiet_deps: true 46 | plugins: [jekyll-paginate, jekyll-seo-tag, jekyll-feed] 47 | exclude: [".jekyll-cache", ".jekyll-metadata", ".idea", "vendor/*", "assets/node_modules/*", ".github/*"] 48 | 49 | # theme: type-on-strap # if using the theme as a jekyll theme gem 50 | remote_theme: sylhare/Type-on-Strap # If using as a remote_theme in github 51 | -------------------------------------------------------------------------------- /_sass/layouts/_blog.scss: -------------------------------------------------------------------------------- 1 | /* --- Header text feature --- */ 2 | .call-out { 3 | @extend %padding-header; 4 | display: inline-block; 5 | width: 100%; 6 | height: 100%; 7 | font-size: 1.2em; 8 | text-align: center; 9 | color: var(--header-text); 10 | background: no-repeat var(--header-background); 11 | backdrop-filter: brightness(0.5); 12 | background-size: cover; 13 | 14 | h1 { 15 | font-family: $font-family-logo; 16 | @extend .subtle-txt-shadow; 17 | } 18 | 19 | /* --- Responsive --- */ 20 | @media screen and (max-width: $m-break) { 21 | background-size: 170% auto; 22 | } 23 | 24 | @media screen and (max-width: 450px) { 25 | background-size: 200% auto; 26 | } 27 | 28 | @media screen and (max-width: 400px) { 29 | background-size: 250% auto; 30 | } 31 | 32 | @media screen and (max-width: 380px) { 33 | background-size: 280% auto; 34 | } 35 | 36 | p:last-child { 37 | margin-bottom: 0; 38 | } 39 | } 40 | 41 | #main { 42 | background-position: 100% -50px, 0 center, center top; 43 | } 44 | 45 | /* --- Post listing --- */ 46 | .posts { 47 | .post-teaser { 48 | @extend %padding-post; 49 | width: 100%; 50 | margin-bottom: 0; 51 | display: inline-block; 52 | background-size: cover; 53 | border-bottom: 1px solid rgba(0, 0, 0, 0.1); 54 | 55 | p a { 56 | @extend .body-link; 57 | } 58 | 59 | .post-img { 60 | vertical-align: middle; 61 | border-radius: 10px; 62 | overflow: hidden; 63 | 64 | @media (min-width: $break) { 65 | height: 250px; 66 | } 67 | 68 | //Smaller screen 69 | @media screen and (max-width: $break) { 70 | height: 150px; 71 | } 72 | 73 | img { 74 | width: 100%; 75 | padding: 0; 76 | vertical-align: middle; 77 | } 78 | 79 | } 80 | 81 | .post-img img { 82 | -moz-transition-timing-function: ease-out; 83 | -webkit-transition-timing-function: ease-out; 84 | transition-timing-function: ease-out; 85 | 86 | -moz-transition: all 2s; 87 | -webkit-transition: all 2s; 88 | transition: all 2s; 89 | 90 | &:hover { 91 | -moz-transform: scale(1.1); 92 | -webkit-transform: scale(1.1); 93 | transform: scale(1.1); 94 | } 95 | } 96 | } 97 | 98 | .excerpt { 99 | margin-top: 1em; 100 | } 101 | } 102 | -------------------------------------------------------------------------------- /_includes/default/search_json.liquid: -------------------------------------------------------------------------------- 1 | {% assign dateFormat = site.data.language.str_date_format | default: '%B %-d, %Y' %} 2 | [ 3 | {% for post in site.posts %} 4 | { 5 | {% unless post.excluded %} 6 | "title" : "{{ post.title | strip_newlines | escape }}", 7 | "category" : "{{ post.category }}", 8 | "tags" : "{{ post.tags | join: ', ' | prepend: " " }}", 9 | "url" : "{{ post.url | relative_url }}", 10 | "date" : "{{ post.date | date: dateFormat }}", 11 | "excerpt" : {{ post.content | strip_html | strip_newlines | strip | escape | truncate: '250' | escape | jsonify }}, 12 | "content" : {{ post.content | strip_html | strip_newlines | strip | escape | jsonify }} 13 | {% endunless %} 14 | }{% unless forloop.last %},{% endunless %} 15 | {% endfor %} 16 | {% if site.pages.size > 0 %},{% endif %} 17 | {% for page in site.pages %} 18 | { 19 | {% unless page.excluded or page.title == nil %} 20 | "title" : "{{ page.title | strip_newlines | escape }}", 21 | "category" : "{{ page.category }}", 22 | "tags" : "{{ page.tags | join: ', ' | prepend: " " }}", 23 | "url" : "{{ page.url | relative_url }}", 24 | "date" : "{{ page.date | date: dateFormat | default: "N/A" }}", 25 | "excerpt" : {{ page.content | strip_html | strip_newlines | strip | escape | truncate: '250' | escape | jsonify }}, 26 | "content" : {{ page.content | strip_html | strip_newlines | strip | escape | jsonify }} 27 | {% endunless %} 28 | }{% unless forloop.last %},{% endunless %} 29 | {% endfor %} 30 | {% for collection in site.collections %} 31 | {% unless collection.label == 'posts' or site[collection.label].size == 0 %} 32 | {% for page in site[collection.label] %} 33 | ,{ 34 | {% if page.excluded or page.title != nil %} 35 | "title" : "{{ page.title | strip_newlines | escape }}", 36 | "category" : "{{ page.category }}", 37 | "tags" : "{{ page.tags | join: ', ' | prepend: " " }}", 38 | "url" : "{{ page.url | relative_url }}", 39 | "date" : "{{ page.date | date: dateFormat | default: "N/A" }}", 40 | "excerpt" : {{ page.content | strip_html | strip_newlines | strip | escape | truncate: '250' | jsonify }}, 41 | "content" : {{ page.content | strip_html | strip_newlines | strip | escape | jsonify }} 42 | {% endif %} 43 | } 44 | {% endfor %} 45 | {% endunless %} 46 | {% endfor %} 47 | ] 48 | -------------------------------------------------------------------------------- /_posts/2018-10-29-feature-images.md: -------------------------------------------------------------------------------- 1 | --- 2 | layout: post 3 | title: Feature images 4 | feature-img: "assets/img/feature-img/desk-messy.jpeg" 5 | thumbnail: "assets/img/thumbnails/feature-img/desk-messy.jpeg" 6 | last_modified: "2025-05-30" 7 | tags: [Test, Image] 8 | categories: Example 9 | --- 10 | 11 | Hopefully you will find enough information about how to set images in your blog here. 12 | This is an example of a post which includes a feature image specified in the front matter of the post. 13 | The feature image spans the full-width of the page, and is shown with the title on permalink pages: 14 | 15 | ```yaml 16 | feature-img: "assets/img/feature-img/desk-messy.jpeg" 17 | thumbnail: "assets/img/thumbnails/feature-img/desk-messy.jpeg" 18 | ``` 19 | 20 | You can also use a thumbnail, a smaller version of the same image to improve loading of the page. 21 | The thumbnail will also be used when you share your article on other platform (linkedin, whatsapp, facebook, ...). 22 | 23 | > - And now it is working 24 | 25 | You can also add images aligned in your post using the `aligner` include. 26 | Make sure to separate all of the image path from in a string separated with `,`. 27 | It by default look into `assets/img/` so give the path from there, example: 28 | 29 | {% highlight ruby %} 30 | {% raw %} 31 | {% include aligner.html images="pexels/book-glass.jpeg,triangle.png" caption="A caption under the images" %} 32 | {% endraw %} 33 | {% endhighlight %} 34 | 35 | {% include aligner.html images="pexels/book-glass.jpeg,feature-img/desk-messy.jpeg" caption="A caption under the images" %} 36 | 37 | 38 | Here you have two images side by side, but you can set more and set the amount per columns 39 | (by specifying the number of columns or let it be automatic using `"auto"`): 40 | 41 | {% highlight ruby %} 42 | {% raw %} 43 | {% include aligner.html images="portfolio/cabin.png,portfolio/cake.png,portfolio/circus.png" column=3 %} 44 | {% endraw %} 45 | {% endhighlight %} 46 | 47 | {% include aligner.html images="portfolio/cabin.png,portfolio/cake.png,portfolio/circus.png" column=3 %} 48 | 49 | it also works with only one images, it is made to display it smaller than normally. 50 | However you can just use the Markdown way of doing it to get the image normal sized and centered. 51 | 52 | {% highlight ruby %} 53 | {% raw %} 54 | # Markdown way 55 | ![Travel]({{ "/assets/img/pexels/computer.jpeg" | relative_url}}) 56 | # Aligner with only one image 57 | {% include aligner.html images="pexels/computer.jpeg" %} 58 | {% endraw %} 59 | {% endhighlight %} 60 | 61 | {% include aligner.html images="pexels/computer.jpeg" %} 62 | -------------------------------------------------------------------------------- /_posts/2014-11-28-markdown-and-html.md: -------------------------------------------------------------------------------- 1 | --- 2 | layout: post 3 | title: Markdown and HTML 4 | tags: [Katex, Markdown] 5 | author: rohanchandra 6 | categories: Syntax 7 | --- 8 | 9 | Jekyll supports the use of [Markdown](http://daringfireball.net/projects/markdown/syntax) with inline HTML tags which makes it easier to quickly write posts with Jekyll, without having to worry too much about text formatting. A sample of the formatting follows. 10 | 11 | ## Table of content 12 | 13 | 14 | * TOC 15 | {:toc} 16 | * 17 | You need to put this at the beginning of the page where you want the table of content to be displayed 18 | 19 | ```html 20 | * TOC 21 | {:toc} 22 | ``` 23 | 24 | It will then render the markdown and html titles (lines that begins with `#` or using the `

    ` tages) 25 | 26 | 27 | ## Title 28 | 29 | ### Subtitle 30 | 31 | Tables have also been extended from Markdown: 32 | 33 | | First Header | Second Header | 34 | |--------------|---------------| 35 | | Content Cell | Content Cell | 36 | | Content Cell | Content Cell | 37 | 38 | Here's an example of an image, which is included using Markdown: 39 | 40 | ![Image of a glass on a book]({{ "/assets/img/pexels/book-glass.jpeg" | relative_url }}) 41 | 42 | This is another example of list: 43 | 44 | - list of things 45 | 1. Sub list 46 | 2. of Other things 47 | 3. with numbers 48 | - And many more 49 | - Sub sub list 50 | - can go on ... 51 | - and on ... 52 | - and on ! 53 | - That's it. 54 | 55 | ### Other subtitle 56 | 57 | Highlighting for code in Jekyll is done using Base16 or Rouge. This theme makes use of Rouge by default. 58 | 59 | {% highlight js %} 60 | // count to ten 61 | for (var i = 1; i <= 10; i++) { 62 | console.log(i); 63 | } 64 | 65 | // count to twenty 66 | var j = 0; 67 | while (j < 20) { 68 | j++; 69 | console.log(j); 70 | } 71 | {% endhighlight %} 72 | 73 | ### Math 74 | 75 | Type on Strap uses KaTeX to display maths. Equations such as $$S_n = a \times \frac{1-r^n}{1-r}$$ can be displayed inline. 76 | 77 | Alternatively, they can be shown on a new line: 78 | 79 | $$ f(x) = \int \frac{2x^2+4x+6}{x-2} $$ 80 | 81 | And in your markdown file: 82 | 83 | ```markdown 84 | $$ f(x) = \int \frac{2x^2+4x+6}{x-2} $$ 85 | ``` 86 | 87 | 88 | ### Expandable content 89 | 90 | Click on the expandable content to display it: 91 | 92 |
    93 | Click here! 94 | Now you see me 95 |
    96 | 97 | And in your markdown file: 98 | 99 | ```html 100 |
    101 | Click here! 102 | Now you see me 103 |
    104 | ``` 105 | -------------------------------------------------------------------------------- /assets/js/main.min.js: -------------------------------------------------------------------------------- 1 | /* @preserve Cookie Consent Init */ 2 | function createCookie(e,t,n){var o="";if(n){var a=new Date;a.setTime(a.getTime()+24*n*60*60*1e3),o="; expires="+a.toUTCString()}document.cookie=`${e}=${t}${o}; path=/`}function readCookie(e){for(var t=e+"=",n=document.cookie.split(";"),o=0;o