├── Gemfile ├── .github ├── FUNDING.yml ├── ISSUE_TEMPLATE │ ├── documentation.md │ ├── support.md │ ├── feature_request.md │ └── bug_report.md ├── PULL_REQUEST_TEMPLATE.md ├── stale.yml └── CONTRIBUTING.md ├── _sass ├── minimal-mistakes │ ├── vendor │ │ ├── susy │ │ │ ├── _su.scss │ │ │ ├── _susy.scss │ │ │ ├── plugins │ │ │ │ ├── _svg-grid.scss │ │ │ │ └── svg-grid │ │ │ │ │ ├── _prefix.scss │ │ │ │ │ ├── _svg-unprefix.scss │ │ │ │ │ ├── _svg-settings.scss │ │ │ │ │ ├── _svg-grid-math.scss │ │ │ │ │ ├── _svg-api.scss │ │ │ │ │ └── _svg-utilities.scss │ │ │ ├── _susy-prefix.scss │ │ │ └── susy │ │ │ │ ├── _unprefix.scss │ │ │ │ ├── _utilities.scss │ │ │ │ └── _parse.scss │ │ ├── breakpoint │ │ │ ├── _no-query.scss │ │ │ ├── parsers │ │ │ │ ├── single │ │ │ │ │ └── _default.scss │ │ │ │ ├── double │ │ │ │ │ ├── _default.scss │ │ │ │ │ ├── _double-string.scss │ │ │ │ │ └── _default-pair.scss │ │ │ │ ├── triple │ │ │ │ │ └── _default.scss │ │ │ │ ├── _single.scss │ │ │ │ ├── _triple.scss │ │ │ │ ├── _resolution.scss │ │ │ │ ├── _double.scss │ │ │ │ ├── resolution │ │ │ │ │ └── _resolution.scss │ │ │ │ └── _query.scss │ │ │ ├── _settings.scss │ │ │ ├── _legacy-settings.scss │ │ │ ├── _breakpoint.scss │ │ │ ├── _respond-to.scss │ │ │ ├── _context.scss │ │ │ └── _helpers.scss │ │ └── magnific-popup │ │ │ └── _settings.scss │ ├── skins │ │ ├── _default.scss │ │ ├── _mint.scss │ │ ├── _air.scss │ │ ├── _dirt.scss │ │ ├── _dark.scss │ │ ├── _aqua.scss │ │ ├── _contrast.scss │ │ ├── _sunrise.scss │ │ ├── _neon.scss │ │ └── _plum.scss │ ├── _animations.scss │ ├── _tables.scss │ ├── _footer.scss │ ├── _masthead.scss │ ├── _buttons.scss │ ├── _notices.scss │ ├── _mixins.scss │ ├── _search.scss │ ├── _reset.scss │ └── _print.scss └── minimal-mistakes.scss ├── _includes ├── footer │ └── custom.html ├── analytics-providers │ ├── custom.html │ ├── google-universal.html │ ├── google-gtag.html │ └── google.html ├── comments-providers │ ├── custom.html │ ├── custom_scripts.html │ ├── facebook.html │ ├── scripts.html │ ├── utterances.html │ ├── disqus.html │ ├── discourse.html │ ├── staticman.html │ └── staticman_v2.html ├── head │ └── custom.html ├── posts-tag.html ├── posts-category.html ├── page__hero_video.html ├── page__taxonomy.html ├── browser-upgrade.html ├── author-profile-custom-links.html ├── toc ├── figure ├── search │ ├── lunr-search-scripts.html │ ├── google-search-scripts.html │ ├── search_form.html │ └── algolia-search-scripts.html ├── analytics.html ├── skip-links.html ├── page__date.html ├── documents-collection.html ├── read-time.html ├── sidebar.html ├── post_pagination.html ├── video ├── scripts.html ├── nav_list ├── gallery ├── head.html ├── comment.html ├── footer.html ├── tag-list.html ├── group-by-array ├── category-list.html ├── archive-single.html ├── feature_row ├── social-share.html ├── breadcrumbs.html ├── masthead.html ├── page__hero.html ├── paginator.html └── toc.html ├── assets ├── images │ ├── myself.jpg │ ├── inv-unsplash.jpg │ ├── nlp-unsplash.jpg │ └── recsys-unsplash.jpg ├── css │ └── main.scss └── js │ ├── lunr │ ├── lunr-store.js │ └── lunr-en.js │ ├── plugins │ ├── jquery.greedy-navigation.js │ └── jquery.fitvids.js │ └── _main.js ├── _layouts ├── category.html ├── tag.html ├── collection.html ├── home.html ├── archive.html ├── archive-taxonomy.html ├── posts.html ├── splash.html ├── default.html ├── tags.html ├── categories.html ├── search.html ├── single.html └── compress.html ├── .travis.yml ├── _data └── navigation.yml ├── .gitignore ├── _pages ├── projects.md ├── prj_recsys_framework.md ├── prj_email_classification.md ├── prj_rotation_investment.md └── profile.md ├── banner.js ├── LICENSE ├── package.json ├── Rakefile └── staticman.yml /Gemfile: -------------------------------------------------------------------------------- 1 | source "https://rubygems.org" 2 | gemspec -------------------------------------------------------------------------------- /.github/FUNDING.yml: -------------------------------------------------------------------------------- 1 | custom: https://www.paypal.me/mmistakes 2 | -------------------------------------------------------------------------------- /_sass/minimal-mistakes/vendor/susy/_su.scss: -------------------------------------------------------------------------------- 1 | // Su 2 | // == 3 | 4 | @import 'susy/su'; 5 | -------------------------------------------------------------------------------- /_includes/footer/custom.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | -------------------------------------------------------------------------------- /assets/images/myself.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/abhimishra91/abhimishra91.github.io/master/assets/images/myself.jpg -------------------------------------------------------------------------------- /_includes/analytics-providers/custom.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | -------------------------------------------------------------------------------- /_includes/comments-providers/custom.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | -------------------------------------------------------------------------------- /_includes/comments-providers/custom_scripts.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | -------------------------------------------------------------------------------- /assets/images/inv-unsplash.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/abhimishra91/abhimishra91.github.io/master/assets/images/inv-unsplash.jpg -------------------------------------------------------------------------------- /assets/images/nlp-unsplash.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/abhimishra91/abhimishra91.github.io/master/assets/images/nlp-unsplash.jpg -------------------------------------------------------------------------------- /assets/images/recsys-unsplash.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/abhimishra91/abhimishra91.github.io/master/assets/images/recsys-unsplash.jpg -------------------------------------------------------------------------------- /_sass/minimal-mistakes/vendor/susy/_susy.scss: -------------------------------------------------------------------------------- 1 | // Susy (Un-Prefixed) 2 | // ================== 3 | 4 | @import 'susy-prefix'; 5 | @import 'susy/unprefix'; 6 | -------------------------------------------------------------------------------- /_includes/head/custom.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /_sass/minimal-mistakes/vendor/susy/plugins/_svg-grid.scss: -------------------------------------------------------------------------------- 1 | // SVG Grid Background 2 | // =================== 3 | 4 | @import 'svg-grid/prefix'; 5 | @import 'svg-grid/svg-unprefix'; 6 | -------------------------------------------------------------------------------- /_includes/posts-tag.html: -------------------------------------------------------------------------------- 1 | {%- for post in site.tags[include.taxonomy] -%} 2 | {%- unless post.hidden -%} 3 | {% include archive-single.html %} 4 | {%- endunless -%} 5 | {%- endfor -%} 6 | -------------------------------------------------------------------------------- /_includes/posts-category.html: -------------------------------------------------------------------------------- 1 | {%- for post in site.categories[include.taxonomy] -%} 2 | {%- unless post.hidden -%} 3 | {% include archive-single.html %} 4 | {%- endunless -%} 5 | {%- endfor -%} 6 | -------------------------------------------------------------------------------- /_sass/minimal-mistakes/vendor/susy/plugins/svg-grid/_prefix.scss: -------------------------------------------------------------------------------- 1 | // Prefixed SVG Plugin 2 | // =================== 3 | 4 | @import 'svg-settings'; 5 | @import 'svg-utilities'; 6 | @import 'svg-grid-math'; 7 | @import 'svg-api'; 8 | -------------------------------------------------------------------------------- /_includes/page__hero_video.html: -------------------------------------------------------------------------------- 1 | {% capture video_id %}{{ page.header.video.id }}{% endcapture %} 2 | {% capture video_provider %}{{ page.header.video.provider }}{% endcapture %} 3 | 4 | {% include video id=video_id provider=video_provider %} 5 | -------------------------------------------------------------------------------- /_layouts/category.html: -------------------------------------------------------------------------------- 1 | --- 2 | layout: archive 3 | --- 4 | 5 | {{ content }} 6 | 7 |
8 | {% include posts-category.html taxonomy=page.taxonomy type=page.entries_layout %} 9 |
10 | -------------------------------------------------------------------------------- /_includes/page__taxonomy.html: -------------------------------------------------------------------------------- 1 | {% if site.tag_archive.type and page.tags[0] %} 2 | {% include tag-list.html %} 3 | {% endif %} 4 | 5 | {% if site.category_archive.type and page.categories[0] %} 6 | {% include category-list.html %} 7 | {% endif %} -------------------------------------------------------------------------------- /_layouts/tag.html: -------------------------------------------------------------------------------- 1 | --- 2 | layout: archive 3 | --- 4 | 5 | {{ content }} 6 | 7 |
8 | {% include posts-tag.html taxonomy=page.taxonomy type=page.entries_layout %} 9 |
10 | -------------------------------------------------------------------------------- /_sass/minimal-mistakes/skins/_default.scss: -------------------------------------------------------------------------------- 1 | /* ========================================================================== 2 | Default skin 3 | ========================================================================== */ 4 | 5 | // Intentionally left blank 6 | -------------------------------------------------------------------------------- /_includes/browser-upgrade.html: -------------------------------------------------------------------------------- 1 | 4 | -------------------------------------------------------------------------------- /assets/css/main.scss: -------------------------------------------------------------------------------- 1 | --- 2 | # Only the main Sass file needs front matter (the dashes are enough) 3 | --- 4 | 5 | @charset "utf-8"; 6 | 7 | @import "minimal-mistakes/skins/{{ site.minimal_mistakes_skin | default: 'default' }}"; // skin 8 | @import "minimal-mistakes"; // main partials -------------------------------------------------------------------------------- /_includes/author-profile-custom-links.html: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /_layouts/collection.html: -------------------------------------------------------------------------------- 1 | --- 2 | layout: archive 3 | --- 4 | 5 | {{ content }} 6 | 7 |
8 | {% include documents-collection.html collection=page.collection sort_by=page.sort_by sort_order=page.sort_order type=page.entries_layout %} 9 |
10 | -------------------------------------------------------------------------------- /.travis.yml: -------------------------------------------------------------------------------- 1 | language: ruby 2 | cache: bundler 3 | gemfile: docs/Gemfile 4 | script: 5 | - bundle exec jekyll algolia --source docs --destination docs/_site --config docs/_config.yml 6 | branches: 7 | only: 8 | # Change this to gh-pages if you're deploying using the gh-pages branch 9 | - master 10 | rvm: 11 | - 2.4 -------------------------------------------------------------------------------- /_data/navigation.yml: -------------------------------------------------------------------------------- 1 | # main links 2 | main: 3 | - title: "Profile" 4 | url: /index.html/ 5 | - title: "Projects" 6 | url: /projects/ 7 | # - title: "Sample Posts" 8 | # url: /year-archive/ 9 | # - title: "Sample Collections" 10 | # url: /collection-archive/ 11 | # - title: "Sitemap" 12 | # url: /sitemap/ -------------------------------------------------------------------------------- /_includes/toc: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /_includes/figure: -------------------------------------------------------------------------------- 1 |
2 | {% if include.alt %}{{ include.alt }}{% endif %} 4 | {% if include.caption %} 5 |
6 | {{ include.caption | markdownify | remove: "

" | remove: "

" }} 7 |
8 | {% endif %} 9 |
10 | -------------------------------------------------------------------------------- /_sass/minimal-mistakes/vendor/susy/_susy-prefix.scss: -------------------------------------------------------------------------------- 1 | // Susy (Prefixed) 2 | // =============== 3 | 4 | $susy-version: 3; 5 | 6 | @import 'susy/utilities'; 7 | @import 'susy/su-validate'; 8 | @import 'susy/su-math'; 9 | @import 'susy/settings'; 10 | @import 'susy/normalize'; 11 | @import 'susy/parse'; 12 | @import 'susy/syntax-helpers'; 13 | @import 'susy/api'; 14 | -------------------------------------------------------------------------------- /_includes/analytics-providers/google-universal.html: -------------------------------------------------------------------------------- 1 | 7 | 8 | -------------------------------------------------------------------------------- /.github/ISSUE_TEMPLATE/documentation.md: -------------------------------------------------------------------------------- 1 | --- 2 | name: "Documentation" 3 | about: "Found a typo or something that needs clarification?" 4 | --- 5 | 6 | 7 | 8 | ## Motivation 9 | 10 | 11 | 12 | 13 | 14 | ## Suggestion 15 | 16 | -------------------------------------------------------------------------------- /_sass/minimal-mistakes/vendor/breakpoint/_no-query.scss: -------------------------------------------------------------------------------- 1 | @function breakpoint-no-query($query) { 2 | @if type-of($query) == 'list' { 3 | $keyword: nth($query, 1); 4 | 5 | @if type-of($keyword) == 'string' and ($keyword == 'no-query' or $keyword == 'no query' or $keyword == 'fallback') { 6 | @return nth($query, 2); 7 | } 8 | @else { 9 | @return false; 10 | } 11 | } 12 | @else { 13 | @return false; 14 | } 15 | } 16 | -------------------------------------------------------------------------------- /_sass/minimal-mistakes/_animations.scss: -------------------------------------------------------------------------------- 1 | /* ========================================================================== 2 | ANIMATIONS 3 | ========================================================================== */ 4 | 5 | @-webkit-keyframes intro { 6 | 0% { 7 | opacity: 0; 8 | } 9 | 100% { 10 | opacity: 1; 11 | } 12 | } 13 | 14 | @keyframes intro { 15 | 0% { 16 | opacity: 0; 17 | } 18 | 100% { 19 | opacity: 1; 20 | } 21 | } -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | # Vim 2 | *~ 3 | *.sw[p_] 4 | 5 | # Sublime Text 6 | *.sublime-project 7 | *.sublime-workspace 8 | 9 | # Ruby Gem 10 | *.gem 11 | .bundle 12 | Gemfile.lock 13 | **/vendor/bundle 14 | 15 | # Node.js and NPM 16 | node_modules 17 | npm-debug.log* 18 | package-lock.json 19 | codekit-config.json 20 | 21 | # macOS 22 | .DS_Store 23 | 24 | # Jekyll generated files 25 | .jekyll-cache 26 | .jekyll-metadata 27 | .sass-cache 28 | _asset_bundler_cache 29 | _site 30 | -------------------------------------------------------------------------------- /_layouts/home.html: -------------------------------------------------------------------------------- 1 | --- 2 | layout: archive 3 | --- 4 | 5 | {{ content }} 6 | 7 |

{{ site.data.ui-text[site.locale].recent_posts | default: "Recent Posts" }}

8 | 9 | {% if paginator %} 10 | {% assign posts = paginator.posts %} 11 | {% else %} 12 | {% assign posts = site.posts %} 13 | {% endif %} 14 | 15 | {% for post in posts %} 16 | {% include archive-single.html %} 17 | {% endfor %} 18 | 19 | {% include paginator.html %} 20 | -------------------------------------------------------------------------------- /_sass/minimal-mistakes/vendor/susy/plugins/svg-grid/_svg-unprefix.scss: -------------------------------------------------------------------------------- 1 | // Unprefix Susy SVG Grid 2 | // ====================== 3 | 4 | 5 | 6 | // SVG Grid 7 | // -------- 8 | /// Un-prefixed alias for `susy-svg-grid` 9 | /// 10 | /// @group plugin_svg-grid 11 | /// @alias susy-svg-grid 12 | @function svg-grid( 13 | $grid: $susy, 14 | $colors: susy-get('svg-grid-colors'), 15 | $offset: null 16 | ) { 17 | @return susy-svg-grid($grid, $colors, $offset); 18 | } 19 | -------------------------------------------------------------------------------- /_includes/comments-providers/facebook.html: -------------------------------------------------------------------------------- 1 |
2 | -------------------------------------------------------------------------------- /_includes/search/lunr-search-scripts.html: -------------------------------------------------------------------------------- 1 | {% assign lang = site.locale | slice: 0,2 | default: "en" %} 2 | {% case lang %} 3 | {% when "gr" %} 4 | {% assign lang = "gr" %} 5 | {% else %} 6 | {% assign lang = "en" %} 7 | {% endcase %} 8 | 9 | 10 | -------------------------------------------------------------------------------- /_pages/projects.md: -------------------------------------------------------------------------------- 1 | --- 2 | permalink: /projects/ 3 | title: "Projects" 4 | layout: single 5 | author_profile: true 6 | comments: true 7 | --- 8 | 9 | This page contains links to the projects that have done over the course of my professional carrer. 10 | 11 | My Projects are as follows: 12 | 13 | 1. [Email Classification with Deep Learning](/prj_email/) 14 | 15 | 2. [Rotation Investment Stratergy with Machine Learning](/prj_investment/) 16 | 17 | 3. [Recommender System Framework](/prj_recsys/) 18 | -------------------------------------------------------------------------------- /_sass/minimal-mistakes/vendor/breakpoint/parsers/single/_default.scss: -------------------------------------------------------------------------------- 1 | @function breakpoint-parse-default($feature) { 2 | $default: breakpoint-get('default feature'); 3 | 4 | // Set Context 5 | $context-setter: private-breakpoint-set-context($default, $feature); 6 | 7 | @if (breakpoint-get('to ems') == true) and (type-of($feature) == 'number') { 8 | @return '#{$default}: #{breakpoint-to-base-em($feature)}'; 9 | } 10 | @else { 11 | @return '#{$default}: #{$feature}'; 12 | } 13 | } 14 | -------------------------------------------------------------------------------- /_includes/analytics-providers/google-gtag.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 10 | -------------------------------------------------------------------------------- /_sass/minimal-mistakes/vendor/susy/plugins/svg-grid/_svg-settings.scss: -------------------------------------------------------------------------------- 1 | // SVG Settings 2 | // ============ 3 | 4 | 5 | // Susy SVG Defaults 6 | // ================= 7 | /// This plugin adds the `svg-grid-colors` property 8 | /// and default value to `$_susy-defaults` — 9 | /// you can override that value in `$susy` 10 | /// or any other grid settings map. 11 | /// @group plugin_svg-grid 12 | $_susy-defaults: map-merge(( 13 | 'svg-grid-colors': hsla(120, 50%, 50%, 0.5) hsla(120, 50%, 75%, 0.5), 14 | ), $_susy-defaults); 15 | -------------------------------------------------------------------------------- /_includes/analytics.html: -------------------------------------------------------------------------------- 1 | {% if jekyll.environment == 'production' and site.analytics.provider and page.analytics != false %} 2 | 3 | {% case site.analytics.provider %} 4 | {% when "google" %} 5 | {% include /analytics-providers/google.html %} 6 | {% when "google-universal" %} 7 | {% include /analytics-providers/google-universal.html %} 8 | {% when "google-gtag" %} 9 | {% include /analytics-providers/google-gtag.html %} 10 | {% when "custom" %} 11 | {% include /analytics-providers/custom.html %} 12 | {% endcase %} 13 | 14 | {% endif %} -------------------------------------------------------------------------------- /_pages/prj_recsys_framework.md: -------------------------------------------------------------------------------- 1 | --- 2 | permalink: /prj_recsys/ 3 | title: "Recommendation System Framework" 4 | header: 5 | overlay_image: /assets/images/recsys-unsplash.jpg 6 | caption: "Photo credit: [**Unsplash**](https://unsplash.com)" 7 | excerpt: An End to End Scalable Recommendation System Framework. 8 | layout: single 9 | author_profile: true 10 | comments: true 11 | read_time: true 12 | share: true 13 | related: true 14 | tags: 15 | - Project 16 | - RecSys 17 | - Framework 18 | - MLOps 19 | - Distributed Compute 20 | - Spark 21 | - Ray 22 | --- -------------------------------------------------------------------------------- /_pages/prj_email_classification.md: -------------------------------------------------------------------------------- 1 | --- 2 | permalink: /prj_email/ 3 | title: "Email Classification with Deep Learning" 4 | header: 5 | overlay_image: /assets/images/nlp-unsplash.jpg 6 | caption: "Photo credit: [**Unsplash**](https://unsplash.com)" 7 | excerpt: Leveraging Deep Learning to classify emails into different categories and serving the solution as a web service. 8 | layout: single 9 | author_profile: true 10 | comments: true 11 | read_time: true 12 | share: true 13 | related: true 14 | tags: 15 | - Project 16 | - NLP 17 | - Transformers 18 | - Deep Learning 19 | --- -------------------------------------------------------------------------------- /_sass/minimal-mistakes/vendor/breakpoint/parsers/double/_default.scss: -------------------------------------------------------------------------------- 1 | @function breakpoint-parse-double-default($first, $second) { 2 | $feature: ''; 3 | $value: ''; 4 | 5 | @if type-of($first) == 'string' { 6 | $feature: $first; 7 | $value: $second; 8 | } 9 | @else { 10 | $feature: $second; 11 | $value: $first; 12 | } 13 | 14 | // Set Context 15 | $context-setter: private-breakpoint-set-context($feature, $value); 16 | 17 | @if (breakpoint-get('to ems') == true) { 18 | $value: breakpoint-to-base-em($value); 19 | } 20 | 21 | @return '(#{$feature}: #{$value})' 22 | } 23 | -------------------------------------------------------------------------------- /_includes/skip-links.html: -------------------------------------------------------------------------------- 1 | 9 | -------------------------------------------------------------------------------- /_pages/prj_rotation_investment.md: -------------------------------------------------------------------------------- 1 | --- 2 | permalink: /prj_investment/ 3 | title: "Rotation Investment Stratergy with Machine Learning" 4 | header: 5 | overlay_image: /assets/images/inv-unsplash.jpg 6 | caption: "Photo credit: [**Unsplash**](https://unsplash.com)" 7 | excerpt: Alternative Data and Gradient Boosting Model to develop a robust Investment Stratergy. 8 | layout: single 9 | author_profile: true 10 | comments: true 11 | read_time: true 12 | share: true 13 | related: true 14 | tags: 15 | - Project 16 | - Alternative Data 17 | - Gradient Boosting 18 | - Machine Learning 19 | - Investment 20 | --- -------------------------------------------------------------------------------- /_includes/page__date.html: -------------------------------------------------------------------------------- 1 | {% if page.last_modified_at %} 2 |

{{ site.data.ui-text[site.locale].date_label | default: "Updated:" }}

3 | {% elsif page.date %} 4 |

{{ site.data.ui-text[site.locale].date_label | default: "Updated:" }}

5 | {% endif %} 6 | -------------------------------------------------------------------------------- /.github/PULL_REQUEST_TEMPLATE.md: -------------------------------------------------------------------------------- 1 | 7 | 8 | 11 | 12 | 13 | 14 | 15 | 16 | ## Summary 17 | 18 | 21 | 22 | ## Context 23 | 24 | -------------------------------------------------------------------------------- /_includes/analytics-providers/google.html: -------------------------------------------------------------------------------- 1 | 15 | -------------------------------------------------------------------------------- /_sass/minimal-mistakes/vendor/breakpoint/parsers/triple/_default.scss: -------------------------------------------------------------------------------- 1 | @function breakpoint-parse-triple-default($feature, $first, $second) { 2 | 3 | // Sort into min and max 4 | $min: min($first, $second); 5 | $max: max($first, $second); 6 | 7 | // Set Context 8 | $context-setter: private-breakpoint-set-context(min-#{$feature}, $min); 9 | $context-setter: private-breakpoint-set-context(max-#{$feature}, $max); 10 | 11 | // Make them EMs if need be 12 | @if (breakpoint-get('to ems') == true) { 13 | $min: breakpoint-to-base-em($min); 14 | $max: breakpoint-to-base-em($max); 15 | } 16 | 17 | @return '(min-#{$feature}: #{$min}) and (max-#{$feature}: #{$max})'; 18 | } 19 | -------------------------------------------------------------------------------- /banner.js: -------------------------------------------------------------------------------- 1 | const fs = require("fs"); 2 | const pkg = require("./package.json"); 3 | const filename = "assets/js/main.min.js"; 4 | const script = fs.readFileSync(filename); 5 | const padStart = str => ("0" + str).slice(-2); 6 | const dateObj = new Date(); 7 | const date = `${dateObj.getFullYear()}-${padStart( 8 | dateObj.getMonth() + 1 9 | )}-${padStart(dateObj.getDate())}`; 10 | const banner = `/*! 11 | * Minimal Mistakes Jekyll Theme ${pkg.version} by ${pkg.author} 12 | * Copyright 2013-${dateObj.getFullYear()} Michael Rose - mademistakes.com | @mmistakes 13 | * Licensed under ${pkg.license} 14 | */ 15 | `; 16 | 17 | if (script.slice(0, 3) != "/**") { 18 | fs.writeFileSync(filename, banner + script); 19 | } 20 | -------------------------------------------------------------------------------- /_sass/minimal-mistakes/vendor/breakpoint/parsers/double/_double-string.scss: -------------------------------------------------------------------------------- 1 | @function breakpoint-parse-double-string($first, $second) { 2 | $feature: ''; 3 | $value: ''; 4 | 5 | // Test to see which is the feature and which is the value 6 | @if (breakpoint-string-value($first) == true) { 7 | $feature: $first; 8 | $value: $second; 9 | } 10 | @else if (breakpoint-string-value($second) == true) { 11 | $feature: $second; 12 | $value: $first; 13 | } 14 | @else { 15 | @warn "Neither #{$first} nor #{$second} is a valid media query name."; 16 | } 17 | 18 | // Set Context 19 | $context-setter: private-breakpoint-set-context($feature, $value); 20 | 21 | @return '(#{$feature}: #{$value})'; 22 | } -------------------------------------------------------------------------------- /_includes/documents-collection.html: -------------------------------------------------------------------------------- 1 | {% assign entries = site[include.collection] %} 2 | 3 | {% if include.sort_by == 'title' %} 4 | {% if include.sort_order == 'reverse' %} 5 | {% assign entries = entries | sort: 'title' | reverse %} 6 | {% else %} 7 | {% assign entries = entries | sort: 'title' %} 8 | {% endif %} 9 | {% elsif include.sort_by == 'date' %} 10 | {% if include.sort_order == 'reverse' %} 11 | {% assign entries = entries | sort: 'date' | reverse %} 12 | {% else %} 13 | {% assign entries = entries | sort: 'date' %} 14 | {% endif %} 15 | {% endif %} 16 | 17 | {%- for post in entries -%} 18 | {%- unless post.hidden -%} 19 | {% include archive-single.html %} 20 | {%- endunless -%} 21 | {%- endfor -%} 22 | -------------------------------------------------------------------------------- /_includes/comments-providers/scripts.html: -------------------------------------------------------------------------------- 1 | {% if site.comments.provider and page.comments %} 2 | {% case site.comments.provider %} 3 | {% when "disqus" %} 4 | {% include /comments-providers/disqus.html %} 5 | {% when "discourse" %} 6 | {% include /comments-providers/discourse.html %} 7 | {% when "facebook" %} 8 | {% include /comments-providers/facebook.html %} 9 | {% when "staticman" %} 10 | {% include /comments-providers/staticman.html %} 11 | {% when "staticman_v2" %} 12 | {% include /comments-providers/staticman_v2.html %} 13 | {% when "utterances" %} 14 | {% include /comments-providers/utterances.html %} 15 | {% when "custom" %} 16 | {% include /comments-providers/custom_scripts.html %} 17 | {% endcase %} 18 | {% endif %} -------------------------------------------------------------------------------- /_sass/minimal-mistakes/vendor/breakpoint/parsers/double/_default-pair.scss: -------------------------------------------------------------------------------- 1 | @function breakpoint-parse-default-pair($first, $second) { 2 | $default: breakpoint-get('default pair'); 3 | $min: ''; 4 | $max: ''; 5 | 6 | // Sort into min and max 7 | $min: min($first, $second); 8 | $max: max($first, $second); 9 | 10 | // Set Context 11 | $context-setter: private-breakpoint-set-context(min-#{$default}, $min); 12 | $context-setter: private-breakpoint-set-context(max-#{$default}, $max); 13 | 14 | // Make them EMs if need be 15 | @if (breakpoint-get('to ems') == true) { 16 | $min: breakpoint-to-base-em($min); 17 | $max: breakpoint-to-base-em($max); 18 | } 19 | 20 | @return '(min-#{$default}: #{$min}) and (max-#{$default}: #{$max})'; 21 | } 22 | -------------------------------------------------------------------------------- /_includes/comments-providers/utterances.html: -------------------------------------------------------------------------------- 1 | 21 | -------------------------------------------------------------------------------- /_layouts/archive.html: -------------------------------------------------------------------------------- 1 | --- 2 | layout: default 3 | --- 4 | 5 | {% if page.header.overlay_color or page.header.overlay_image or page.header.image %} 6 | {% include page__hero.html %} 7 | {% elsif page.header.video.id and page.header.video.provider %} 8 | {% include page__hero_video.html %} 9 | {% endif %} 10 | 11 | {% if page.url != "/" and site.breadcrumbs %} 12 | {% unless paginator %} 13 | {% include breadcrumbs.html %} 14 | {% endunless %} 15 | {% endif %} 16 | 17 |
18 | {% include sidebar.html %} 19 | 20 |
21 | {% unless page.header.overlay_color or page.header.overlay_image %} 22 |

{{ page.title }}

23 | {% endunless %} 24 | {{ content }} 25 |
26 |
-------------------------------------------------------------------------------- /_includes/read-time.html: -------------------------------------------------------------------------------- 1 | {% assign words_per_minute = page.words_per_minute | default: site.words_per_minute | default: 200 %} 2 | 3 | {% if post.read_time %} 4 | {% assign words = post.content | strip_html | number_of_words %} 5 | {% elsif page.read_time %} 6 | {% assign words = page.content | strip_html | number_of_words %} 7 | {% endif %} 8 | 9 | {% if words < words_per_minute %} 10 | {{ site.data.ui-text[site.locale].less_than | default: "less than" }} 1 {{ site.data.ui-text[site.locale].minute_read | default: "minute read" }} 11 | {% elsif words == words_per_minute %} 12 | 1 {{ site.data.ui-text[site.locale].minute_read | default: "minute read" }} 13 | {% else %} 14 | {{ words | divided_by:words_per_minute }} {{ site.data.ui-text[site.locale].minute_read | default: "minute read" }} 15 | {% endif %} 16 | -------------------------------------------------------------------------------- /.github/ISSUE_TEMPLATE/support.md: -------------------------------------------------------------------------------- 1 | --- 2 | name: "Question" 3 | about: "Having trouble working with the theme?" 4 | --- 5 | 6 | 22 | 23 | -------------------------------------------------------------------------------- /_includes/sidebar.html: -------------------------------------------------------------------------------- 1 | {% if page.author_profile or layout.author_profile or page.sidebar %} 2 | 19 | {% endif %} 20 | -------------------------------------------------------------------------------- /_sass/minimal-mistakes/skins/_mint.scss: -------------------------------------------------------------------------------- 1 | /* ========================================================================== 2 | Mint skin 3 | ========================================================================== */ 4 | 5 | /* Colors */ 6 | $background-color: #f3f6f6 !default; 7 | $text-color: #40514e !default; 8 | $muted-text-color: #40514e !default; 9 | $primary-color: #11999e !default; 10 | $border-color: mix(#fff, #40514e, 75%) !default; 11 | $footer-background-color: #30e3ca !default; 12 | $link-color: #11999e !default; 13 | $masthead-link-color: $text-color !default; 14 | $masthead-link-color-hover: $text-color !default; 15 | $navicon-link-color-hover: mix(#fff, $text-color, 80%) !default; 16 | 17 | .page__footer { 18 | color: #fff !important; // override 19 | } 20 | 21 | .page__footer-follow .social-icons .svg-inline--fa { 22 | color: inherit; 23 | } 24 | -------------------------------------------------------------------------------- /_includes/comments-providers/disqus.html: -------------------------------------------------------------------------------- 1 | {% if site.comments.disqus.shortname %} 2 | 14 | 15 | {% endif %} 16 | -------------------------------------------------------------------------------- /_sass/minimal-mistakes/skins/_air.scss: -------------------------------------------------------------------------------- 1 | /* ========================================================================== 2 | Air skin 3 | ========================================================================== */ 4 | 5 | /* Colors */ 6 | $background-color: #eeeeee !default; 7 | $text-color: #222831 !default; 8 | $muted-text-color: #393e46 !default; 9 | $primary-color: #0092ca !default; 10 | $border-color: mix(#fff, #393e46, 75%) !default; 11 | $footer-background-color: $primary-color !default; 12 | $link-color: #393e46 !default; 13 | $masthead-link-color: $text-color !default; 14 | $masthead-link-color-hover: $text-color !default; 15 | $navicon-link-color-hover: mix(#fff, $text-color, 80%) !default; 16 | 17 | .page__footer { 18 | color: #fff !important; // override 19 | } 20 | 21 | .page__footer-follow .social-icons .svg-inline--fa { 22 | color: inherit; 23 | } 24 | -------------------------------------------------------------------------------- /_sass/minimal-mistakes/vendor/breakpoint/parsers/_single.scss: -------------------------------------------------------------------------------- 1 | ////////////////////////////// 2 | // Import Pieces 3 | ////////////////////////////// 4 | @import "single/default"; 5 | 6 | @function breakpoint-parse-single($feature, $empty-media, $first) { 7 | $parsed: ''; 8 | $leader: ''; 9 | // If we're forcing 10 | @if not ($empty-media) or not ($first) { 11 | $leader: 'and '; 12 | } 13 | 14 | // If it's a single feature that can stand alone, we let it 15 | @if (breakpoint-single-string($feature)) { 16 | $parsed: $feature; 17 | // Set Context 18 | $context-setter: private-breakpoint-set-context($feature, $feature); 19 | } 20 | // If it's not a stand alone feature, we pass it off to the default handler. 21 | @else { 22 | $parsed: breakpoint-parse-default($feature); 23 | } 24 | 25 | @return $leader + '(' + $parsed + ')'; 26 | } 27 | -------------------------------------------------------------------------------- /_sass/minimal-mistakes/_tables.scss: -------------------------------------------------------------------------------- 1 | /* ========================================================================== 2 | TABLES 3 | ========================================================================== */ 4 | 5 | table { 6 | display: block; 7 | margin-bottom: 1em; 8 | width: 100%; 9 | font-family: $global-font-family; 10 | font-size: $type-size-6; 11 | border-collapse: collapse; 12 | overflow-x: auto; 13 | 14 | & + table { 15 | margin-top: 1em; 16 | } 17 | } 18 | 19 | thead { 20 | background-color: $border-color; 21 | border-bottom: 2px solid mix(#000, $border-color, 25%); 22 | } 23 | 24 | th { 25 | padding: 0.5em; 26 | font-weight: bold; 27 | text-align: left; 28 | } 29 | 30 | td { 31 | padding: 0.5em; 32 | border-bottom: 1px solid mix(#000, $border-color, 25%); 33 | } 34 | 35 | tr, 36 | td, 37 | th { 38 | vertical-align: middle; 39 | } -------------------------------------------------------------------------------- /.github/ISSUE_TEMPLATE/feature_request.md: -------------------------------------------------------------------------------- 1 | --- 2 | name: "Enhancement / Feature Request" 3 | about: "What would make this theme better?" 4 | --- 5 | 6 | 10 | 11 | ## Summary 12 | 13 | 16 | 17 | ## Motivation 18 | 19 | 27 | 28 | ## Drawbacks 29 | 30 | -------------------------------------------------------------------------------- /_layouts/archive-taxonomy.html: -------------------------------------------------------------------------------- 1 | --- 2 | layout: default 3 | author_profile: false 4 | --- 5 | 6 | {% if page.header.overlay_color or page.header.overlay_image or page.header.image %} 7 | {% include page__hero.html %} 8 | {% elsif page.header.video.id and page.header.video.provider %} 9 | {% include page__hero_video.html %} 10 | {% endif %} 11 | 12 | {% if page.url != "/" and site.breadcrumbs %} 13 | {% unless paginator %} 14 | {% include breadcrumbs.html %} 15 | {% endunless %} 16 | {% endif %} 17 | 18 |
19 | {% include sidebar.html %} 20 | 21 |
22 | {% unless page.header.overlay_color or page.header.overlay_image %} 23 |

{{ page.title }}

24 | {% endunless %} 25 | {% for post in page.posts %} 26 | {% include archive-single.html %} 27 | {% endfor %} 28 |
29 |
30 | -------------------------------------------------------------------------------- /_includes/comments-providers/discourse.html: -------------------------------------------------------------------------------- 1 | {% if site.comments.discourse.server %} 2 | {% capture canonical %}{% if site.permalink contains '.html' %}{{ page.url | absolute_url }}{% else %}{{ page.url | absolute_url | remove:'index.html' | strip_slash }}{% endif %}{% endcapture %} 3 | 12 | 13 | {% endif %} 14 | -------------------------------------------------------------------------------- /_includes/post_pagination.html: -------------------------------------------------------------------------------- 1 | {% if page.previous or page.next %} 2 | 14 | {% endif %} -------------------------------------------------------------------------------- /_sass/minimal-mistakes/vendor/breakpoint/parsers/_triple.scss: -------------------------------------------------------------------------------- 1 | ////////////////////////////// 2 | // Import Pieces 3 | ////////////////////////////// 4 | @import "triple/default"; 5 | 6 | @function breakpoint-parse-triple($feature, $empty-media, $first) { 7 | $parsed: ''; 8 | $leader: ''; 9 | 10 | // If we're forcing 11 | @if not ($empty-media) or not ($first) { 12 | $leader: 'and '; 13 | } 14 | 15 | // separate the string features from the value numbers 16 | $string: null; 17 | $numbers: null; 18 | @each $val in $feature { 19 | @if type-of($val) == string { 20 | $string: $val; 21 | } 22 | @else { 23 | @if type-of($numbers) == 'null' { 24 | $numbers: $val; 25 | } 26 | @else { 27 | $numbers: append($numbers, $val); 28 | } 29 | } 30 | } 31 | 32 | $parsed: breakpoint-parse-triple-default($string, nth($numbers, 1), nth($numbers, 2)); 33 | 34 | @return $leader + $parsed; 35 | 36 | } 37 | -------------------------------------------------------------------------------- /_sass/minimal-mistakes/vendor/breakpoint/parsers/_resolution.scss: -------------------------------------------------------------------------------- 1 | @import "resolution/resolution"; 2 | 3 | @function breakpoint-build-resolution($query-print, $query-resolution, $empty-media, $first) { 4 | $leader: ''; 5 | // If we're forcing 6 | @if not ($empty-media) or not ($first) { 7 | $leader: 'and '; 8 | } 9 | 10 | @if breakpoint-get('transform resolutions') and $query-resolution { 11 | $resolutions: breakpoint-make-resolutions($query-resolution); 12 | $length: length($resolutions); 13 | $query-holder: ''; 14 | 15 | @for $i from 1 through $length { 16 | $query: '#{$query-print} #{$leader}#{nth($resolutions, $i)}'; 17 | @if $i == 1 { 18 | $query-holder: $query; 19 | } 20 | @else { 21 | $query-holder: '#{$query-holder}, #{$query}'; 22 | } 23 | } 24 | 25 | @return $query-holder; 26 | } 27 | @else { 28 | // Return with attached resolution 29 | @return $query-print; 30 | } 31 | } 32 | -------------------------------------------------------------------------------- /_includes/video: -------------------------------------------------------------------------------- 1 | {% capture video_id %}{{ include.id }}{% endcapture %} 2 | {% capture video_provider %}{{ include.provider }}{% endcapture %} 3 | 4 | 5 |
6 | {% if video_provider == "vimeo" %} 7 | 8 | {% elsif video_provider == "youtube" %} 9 | 10 | {% elsif video_provider == "google-drive" %} 11 | 12 | {% elsif video_provider == "bilibili" %} 13 | 14 | {% endif %} 15 |
16 | -------------------------------------------------------------------------------- /_includes/search/google-search-scripts.html: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /_includes/scripts.html: -------------------------------------------------------------------------------- 1 | {% if site.footer_scripts %} 2 | {% for script in site.footer_scripts %} 3 | 4 | {% endfor %} 5 | {% else %} 6 | 7 | {% endif %} 8 | 9 | {% if site.search == true or page.layout == "search" %} 10 | {%- assign search_provider = site.search_provider | default: "lunr" -%} 11 | {%- case search_provider -%} 12 | {%- when "lunr" -%} 13 | {% include_cached search/lunr-search-scripts.html %} 14 | {%- when "google" -%} 15 | {% include_cached search/google-search-scripts.html %} 16 | {%- when "algolia" -%} 17 | {% include_cached search/algolia-search-scripts.html %} 18 | {%- endcase -%} 19 | {% endif %} 20 | 21 | {% include analytics.html %} 22 | {% include /comments-providers/scripts.html %} 23 | 24 | {% if site.after_footer_scripts %} 25 | {% for script in site.after_footer_scripts %} 26 | 27 | {% endfor %} 28 | {% endif %} 29 | -------------------------------------------------------------------------------- /_layouts/posts.html: -------------------------------------------------------------------------------- 1 | --- 2 | layout: archive 3 | --- 4 | 5 | {{ content }} 6 | 7 | 17 | 18 | {% assign postsByYear = site.posts | group_by_exp: 'post', 'post.date | date: "%Y"' %} 19 | {% for year in postsByYear %} 20 |
21 |

{{ year.name }}

22 |
23 | {% for post in year.items %} 24 | {% include archive-single.html type=page.entries_layout %} 25 | {% endfor %} 26 |
27 | {{ site.data.ui-text[site.locale].back_to_top | default: 'Back to Top' }} ↑ 28 |
29 | {% endfor %} 30 | -------------------------------------------------------------------------------- /_layouts/splash.html: -------------------------------------------------------------------------------- 1 | --- 2 | layout: default 3 | --- 4 | 5 | {% if page.header.overlay_color or page.header.overlay_image or page.header.image %} 6 | {% include page__hero.html %} 7 | {% elsif page.header.video.id and page.header.video.provider %} 8 | {% include page__hero_video.html %} 9 | {% endif %} 10 | 11 |
12 |
13 | {% if page.title %}{% endif %} 14 | {% if page.excerpt %}{% endif %} 15 | {% if page.date %}{% endif %} 16 | {% if page.last_modified_at %}{% endif %} 17 | 18 |
19 | {{ content }} 20 |
21 |
22 |
23 | -------------------------------------------------------------------------------- /_includes/nav_list: -------------------------------------------------------------------------------- 1 | {% assign navigation = site.data.navigation[include.nav] %} 2 | 3 | 27 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | The MIT License (MIT) 2 | 3 | Copyright (c) 2013-2020 Michael Rose and contributors 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 | -------------------------------------------------------------------------------- /_sass/minimal-mistakes/vendor/susy/susy/_unprefix.scss: -------------------------------------------------------------------------------- 1 | // Unprefix Susy 2 | // ============= 3 | 4 | 5 | // Span 6 | // ---- 7 | /// Un-prefixed alias for `susy-span` 8 | /// (available by default) 9 | /// 10 | /// @group api 11 | /// @alias susy-span 12 | /// 13 | /// @param {list} $span 14 | /// @param {map} $config [()] 15 | @function span( 16 | $span, 17 | $config: () 18 | ) { 19 | @return susy-span($span, $config); 20 | } 21 | 22 | 23 | // Gutter 24 | // ------ 25 | /// Un-prefixed alias for `susy-gutter` 26 | /// (available by default) 27 | /// 28 | /// @group api 29 | /// @alias susy-gutter 30 | /// 31 | /// @param {integer | list} $context [null] - 32 | /// @param {map} $config [()] 33 | @function gutter( 34 | $context: susy-get('columns'), 35 | $config: () 36 | ) { 37 | @return susy-gutter($context, $config); 38 | } 39 | 40 | 41 | // Slice 42 | // ----- 43 | /// Un-prefixed alias for `susy-slice` 44 | /// (available by default) 45 | /// 46 | /// @group api 47 | /// @alias susy-slice 48 | /// 49 | /// @param {list} $span 50 | /// @param {map} $config [()] 51 | @function slice( 52 | $span, 53 | $config: () 54 | ) { 55 | @return susy-slice($span, $config); 56 | } 57 | -------------------------------------------------------------------------------- /_includes/gallery: -------------------------------------------------------------------------------- 1 | {% if include.id %} 2 | {% assign gallery = page[include.id] %} 3 | {% else %} 4 | {% assign gallery = page.gallery %} 5 | {% endif %} 6 | 7 | {% if include.layout %} 8 | {% assign gallery_layout = include.layout %} 9 | {% else %} 10 | {% if gallery.size == 2 %} 11 | {% assign gallery_layout = 'half' %} 12 | {% elsif gallery.size >= 3 %} 13 | {% assign gallery_layout = 'third' %} 14 | {% else %} 15 | {% assign gallery_layout = '' %} 16 | {% endif %} 17 | {% endif %} 18 | 19 | 36 | -------------------------------------------------------------------------------- /_sass/minimal-mistakes/skins/_dirt.scss: -------------------------------------------------------------------------------- 1 | /* ========================================================================== 2 | Dirt skin 3 | ========================================================================== */ 4 | 5 | /* Colors */ 6 | $background-color: #f3f3f3 !default; 7 | $text-color: #343434 !default; 8 | $muted-text-color: #8e8b82 !default; 9 | $primary-color: #343434 !default; 10 | $border-color: #e9dcbe !default; 11 | $footer-background-color: #e9dcbe !default; 12 | $link-color: #343434 !default; 13 | $masthead-link-color: $text-color !default; 14 | $masthead-link-color-hover: $text-color !default; 15 | $navicon-link-color-hover: mix(#fff, $text-color, 80%) !default; 16 | 17 | /* dirt syntax highlighting (base16) */ 18 | $base00: #231e18 !default; 19 | $base01: #302b25 !default; 20 | $base02: #48413a !default; 21 | $base03: #9d8b70 !default; 22 | $base04: #b4a490 !default; 23 | $base05: #cabcb1 !default; 24 | $base06: #d7c8bc !default; 25 | $base07: #e4d4c8 !default; 26 | $base08: #d35c5c !default; 27 | $base09: #ca7f32 !default; 28 | $base0a: #e0ac16 !default; 29 | $base0b: #b7ba53 !default; 30 | $base0c: #6eb958 !default; 31 | $base0d: #88a4d3 !default; 32 | $base0e: #bb90e2 !default; 33 | $base0f: #b49368 !default; 34 | -------------------------------------------------------------------------------- /.github/stale.yml: -------------------------------------------------------------------------------- 1 | # Number of days of inactivity before an issue becomes stale 2 | daysUntilStale: 30 3 | # Number of days of inactivity before a stale issue is closed 4 | daysUntilClose: 7 5 | # Issues with these labels will never be considered stale 6 | exemptLabels: 7 | - "Status: Accepted" 8 | - "Status: Under Consideration" 9 | # Label to use when marking an issue as stale 10 | staleLabel: "Status: Stale" 11 | # Comment to post when marking an issue as stale. Set to `false` to disable 12 | markComment: | 13 | This issue has been automatically marked as stale because it has not had recent activity. 14 | 15 | If this is a **bug** and you can still reproduce this error on the `master` branch, please reply with any additional information you have about it in order to keep the issue open. 16 | 17 | If this is a feature request, please consider whether it can be accomplished in another way. If it cannot, please elaborate on why it is core to this project and why you feel more than 80% of users would find this beneficial. 18 | 19 | This issue will automatically be closed in 7 days if no further activity occurs. Thank you for all your contributions. 20 | # Comment to post when closing a stale issue. Set to `false` to disable 21 | closeComment: false 22 | -------------------------------------------------------------------------------- /_includes/head.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | {% include seo.html %} 4 | 5 | 6 | 7 | 8 | 9 | 10 | 13 | 14 | 15 | 16 | 17 | 18 | 32 | 33 | {% if site.head_scripts %} 34 | {% for script in site.head_scripts %} 35 | 36 | {% endfor %} 37 | {% endif %} 38 | -------------------------------------------------------------------------------- /_sass/minimal-mistakes/vendor/breakpoint/parsers/_double.scss: -------------------------------------------------------------------------------- 1 | ////////////////////////////// 2 | // Import Pieces 3 | ////////////////////////////// 4 | @import "double/default-pair"; 5 | @import "double/double-string"; 6 | @import "double/default"; 7 | 8 | @function breakpoint-parse-double($feature, $empty-media, $first) { 9 | $parsed: ''; 10 | $leader: ''; 11 | // If we're forcing 12 | @if not ($empty-media) or not ($first) { 13 | $leader: 'and '; 14 | } 15 | 16 | $first: nth($feature, 1); 17 | $second: nth($feature, 2); 18 | 19 | // If we've got two numbers, we know we need to use the default pair because there are no media queries that has a media feature that is a number 20 | @if type-of($first) == 'number' and type-of($second) == 'number' { 21 | $parsed: breakpoint-parse-default-pair($first, $second); 22 | } 23 | // If they are both strings, we send it through the string parser 24 | @else if type-of($first) == 'string' and type-of($second) == 'string' { 25 | $parsed: breakpoint-parse-double-string($first, $second); 26 | } 27 | // If it's a string/number pair, we parse it as a normal double 28 | @else { 29 | $parsed: breakpoint-parse-double-default($first, $second); 30 | } 31 | 32 | @return $leader + $parsed; 33 | } 34 | -------------------------------------------------------------------------------- /_includes/comment.html: -------------------------------------------------------------------------------- 1 |
2 |
3 | {{ include.name }} 4 |
5 |
6 | 13 |

14 | {% if include.date %} 15 | {% if include.index %}{% endif %} 18 | {% endif %} 19 |

20 |
{{ include.message | markdownify }}
21 |
22 |
23 | -------------------------------------------------------------------------------- /_includes/footer.html: -------------------------------------------------------------------------------- 1 | 18 | 19 | 20 | -------------------------------------------------------------------------------- /.github/CONTRIBUTING.md: -------------------------------------------------------------------------------- 1 | # Contributing 2 | 3 | Having trouble working with the theme? Found a typo in the documentation? 4 | Interested in adding a feature or [fixing a bug](https://github.com/mmistakes/minimal-mistakes/issues)? 5 | Then by all means [submit an issue](https://github.com/mmistakes/minimal-mistakes/issues/new) 6 | or [pull request](https://help.github.com/articles/using-pull-requests/). 7 | If this is your first pull request, it may be helpful to read up on the 8 | [GitHub Flow](https://guides.github.com/introduction/flow/) first. 9 | 10 | Minimal Mistakes has been designed as a base for you to customize and fit your 11 | site's unique needs. Please keep this in mind when requesting features and/or 12 | submitting pull requests. If it's not something that most people will use, I 13 | probably won't consider it. When in doubt ask. 14 | 15 | This goes for author sidebar links and "share button" additions -- I have no 16 | intention of merging in every possibly option, the essentials are there to get 17 | you started :smile:. 18 | 19 | ## Pull Requests 20 | 21 | When submitting a pull request: 22 | 23 | 1. Clone the repo. 24 | 2. Create a branch off of `master` and give it a meaningful name (e.g. 25 | `my-awesome-new-feature`) and describe the feature or fix. 26 | 3. Open a pull request on GitHub. 27 | -------------------------------------------------------------------------------- /_sass/minimal-mistakes/skins/_dark.scss: -------------------------------------------------------------------------------- 1 | /* ========================================================================== 2 | Dark skin 3 | ========================================================================== */ 4 | 5 | /* Colors */ 6 | $background-color: #252a34 !default; 7 | $text-color: #eaeaea !default; 8 | $primary-color: #00adb5 !default; 9 | $border-color: mix(#fff, $background-color, 20%) !default; 10 | $code-background-color: mix(#000, $background-color, 15%) !default; 11 | $code-background-color-dark: mix(#000, $background-color, 20%) !default; 12 | $form-background-color: mix(#000, $background-color, 15%) !default; 13 | $footer-background-color: mix(#000, $background-color, 30%) !default; 14 | $link-color: mix($primary-color, $text-color, 40%) !default; 15 | $link-color-hover: mix(#fff, $link-color, 25%) !default; 16 | $link-color-visited: mix(#000, $link-color, 25%) !default; 17 | $masthead-link-color: $text-color !default; 18 | $masthead-link-color-hover: mix(#000, $text-color, 20%) !default; 19 | $navicon-link-color-hover: mix(#000, $background-color, 30%) !default; 20 | 21 | .author__urls.social-icons .svg-inline--fa, 22 | .page__footer-follow .social-icons .svg-inline--fa { 23 | color: inherit; 24 | } 25 | 26 | .ais-search-box .ais-search-box--input { 27 | background-color: $form-background-color; 28 | } -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "minimal-mistakes", 3 | "version": "4.19.3", 4 | "description": "Minimal Mistakes 2 column Jekyll theme.", 5 | "repository": { 6 | "type": "git", 7 | "url": "git://github.com/mmistakes/minimal-mistakes.git" 8 | }, 9 | "keywords": [ 10 | "jekyll", 11 | "theme", 12 | "minimal" 13 | ], 14 | "author": "Michael Rose", 15 | "license": "MIT", 16 | "bugs": { 17 | "url": "https://github.com/mmistakes/minimal-mistakes/issues" 18 | }, 19 | "homepage": "https://mmistakes.github.io/minimal-mistakes/", 20 | "engines": { 21 | "node": ">= 0.10.0" 22 | }, 23 | "devDependencies": { 24 | "npm-run-all": "^4.1.5", 25 | "onchange": "^6.1.0", 26 | "uglify-js": "^3.8.0" 27 | }, 28 | "scripts": { 29 | "uglify": "uglifyjs assets/js/vendor/jquery/jquery-3.4.1.js assets/js/plugins/jquery.fitvids.js assets/js/plugins/jquery.greedy-navigation.js assets/js/plugins/jquery.magnific-popup.js assets/js/plugins/jquery.ba-throttle-debounce.js assets/js/plugins/smooth-scroll.js assets/js/plugins/gumshoe.js assets/js/_main.js -c -m -o assets/js/main.min.js", 30 | "add-banner": "node banner.js", 31 | "watch:js": "onchange \"assets/js/**/*.js\" -e \"assets/js/main.min.js\" -- npm run build:js", 32 | "build:js": "npm run uglify && npm run add-banner" 33 | } 34 | } 35 | -------------------------------------------------------------------------------- /_includes/tag-list.html: -------------------------------------------------------------------------------- 1 | {% case site.tag_archive.type %} 2 | {% when "liquid" %} 3 | {% assign path_type = "#" %} 4 | {% when "jekyll-archives" %} 5 | {% assign path_type = nil %} 6 | {% endcase %} 7 | 8 | {% if site.tag_archive.path %} 9 | {% comment %} 10 | 11 | 12 | {% endcomment %} 13 | {% capture page_tags %}{% for tag in page.tags %}{{ tag | downcase }}|{{ tag }}{% unless forloop.last %},{% endunless %}{% endfor %}{% endcapture %} 14 | {% assign tag_hashes = page_tags | split: ',' | sort %} 15 | 16 |

17 | {{ site.data.ui-text[site.locale].tags_label | default: "Tags:" }} 18 | 19 | {% for hash in tag_hashes %} 20 | {% assign keyValue = hash | split: '|' %} 21 | {% capture tag_word %}{{ keyValue[1] | strip_newlines }}{% endcapture %} 22 | {% unless forloop.last %}, {% endunless %} 23 | {% endfor %} 24 | 25 |

26 | {% endif %} -------------------------------------------------------------------------------- /_includes/group-by-array: -------------------------------------------------------------------------------- 1 | 7 | 8 | 9 | {% assign __empty_array = '' | split: ',' %} 10 | {% assign group_names = __empty_array %} 11 | {% assign group_items = __empty_array %} 12 | 13 | 14 | {% assign __names = include.collection | map: include.field %} 15 | 16 | 17 | {% assign __names = __names | join: ',' | join: ',' | split: ',' %} 18 | 19 | 20 | {% assign __names = __names | sort %} 21 | {% for name in __names %} 22 | 23 | 24 | {% unless name == previous %} 25 | 26 | 27 | {% assign group_names = group_names | push: name %} 28 | {% endunless %} 29 | 30 | {% assign previous = name %} 31 | {% endfor %} 32 | 33 | 34 | 35 | {% for name in group_names %} 36 | 37 | 38 | {% assign __item = __empty_array %} 39 | {% for __element in include.collection %} 40 | {% if __element[include.field] contains name %} 41 | {% assign __item = __item | push: __element %} 42 | {% endif %} 43 | {% endfor %} 44 | 45 | 46 | {% assign group_items = group_items | push: __item %} 47 | {% endfor %} -------------------------------------------------------------------------------- /_layouts/default.html: -------------------------------------------------------------------------------- 1 | --- 2 | --- 3 | 4 | 5 | 11 | 12 | 13 | {% include head.html %} 14 | {% include head/custom.html %} 15 | 16 | 17 | 18 | {% include_cached skip-links.html %} 19 | {% include_cached browser-upgrade.html %} 20 | {% include_cached masthead.html %} 21 | 22 |
23 | {{ content }} 24 |
25 | 26 | {% if site.search == true %} 27 |
28 | {% include_cached search/search_form.html %} 29 |
30 | {% endif %} 31 | 32 | 38 | 39 | {% include scripts.html %} 40 | 41 | 42 | 43 | -------------------------------------------------------------------------------- /_layouts/tags.html: -------------------------------------------------------------------------------- 1 | --- 2 | layout: archive 3 | --- 4 | 5 | {{ content }} 6 | 7 | {% assign tags_max = 0 %} 8 | {% for tag in site.tags %} 9 | {% if tag[1].size > tags_max %} 10 | {% assign tags_max = tag[1].size %} 11 | {% endif %} 12 | {% endfor %} 13 | 14 | 27 | 28 | {% for i in (1..tags_max) reversed %} 29 | {% for tag in site.tags %} 30 | {% if tag[1].size == i %} 31 |
32 |

{{ tag[0] }}

33 |
34 | {% for post in tag.last %} 35 | {% include archive-single.html type=page.entries_layout %} 36 | {% endfor %} 37 |
38 | {{ site.data.ui-text[site.locale].back_to_top | default: 'Back to Top' }} ↑ 39 |
40 | {% endif %} 41 | {% endfor %} 42 | {% endfor %} 43 | -------------------------------------------------------------------------------- /_sass/minimal-mistakes.scss: -------------------------------------------------------------------------------- 1 | /*! 2 | * Minimal Mistakes Jekyll Theme 4.19.3 by Michael Rose 3 | * Copyright 2013-2019 Michael Rose - mademistakes.com | @mmistakes 4 | * Licensed under MIT (https://github.com/mmistakes/minimal-mistakes/blob/master/LICENSE) 5 | */ 6 | 7 | /* Variables */ 8 | @import "minimal-mistakes/variables"; 9 | 10 | /* Mixins and functions */ 11 | @import "minimal-mistakes/vendor/breakpoint/breakpoint"; 12 | @include breakpoint-set("to ems", true); 13 | @import "minimal-mistakes/vendor/magnific-popup/magnific-popup"; // Magnific Popup 14 | @import "minimal-mistakes/vendor/susy/susy"; 15 | @import "minimal-mistakes/mixins"; 16 | 17 | /* Core CSS */ 18 | @import "minimal-mistakes/reset"; 19 | @import "minimal-mistakes/base"; 20 | @import "minimal-mistakes/forms"; 21 | @import "minimal-mistakes/tables"; 22 | @import "minimal-mistakes/animations"; 23 | 24 | /* Components */ 25 | @import "minimal-mistakes/buttons"; 26 | @import "minimal-mistakes/notices"; 27 | @import "minimal-mistakes/masthead"; 28 | @import "minimal-mistakes/navigation"; 29 | @import "minimal-mistakes/footer"; 30 | @import "minimal-mistakes/search"; 31 | @import "minimal-mistakes/syntax"; 32 | 33 | /* Utility classes */ 34 | @import "minimal-mistakes/utilities"; 35 | 36 | /* Layout specific */ 37 | @import "minimal-mistakes/page"; 38 | @import "minimal-mistakes/archive"; 39 | @import "minimal-mistakes/sidebar"; 40 | @import "minimal-mistakes/print"; 41 | -------------------------------------------------------------------------------- /_includes/category-list.html: -------------------------------------------------------------------------------- 1 | {% case site.category_archive.type %} 2 | {% when "liquid" %} 3 | {% assign path_type = "#" %} 4 | {% when "jekyll-archives" %} 5 | {% assign path_type = nil %} 6 | {% endcase %} 7 | 8 | {% if site.category_archive.path %} 9 | {% comment %} 10 | 11 | 12 | {% endcomment %} 13 | {% capture page_categories %}{% for category in page.categories %}{{ category | downcase }}|{{ category }}{% unless forloop.last %},{% endunless %}{% endfor %}{% endcapture %} 14 | {% assign category_hashes = page_categories | split: ',' | sort %} 15 | 16 |

17 | {{ site.data.ui-text[site.locale].categories_label | default: "Categories:" }} 18 | 19 | {% for hash in category_hashes %} 20 | {% assign keyValue = hash | split: '|' %} 21 | {% capture category_word %}{{ keyValue[1] | strip_newlines }}{% endcapture %} 22 | {% unless forloop.last %}, {% endunless %} 23 | {% endfor %} 24 | 25 |

26 | {% endif %} -------------------------------------------------------------------------------- /_includes/search/search_form.html: -------------------------------------------------------------------------------- 1 |
2 | {%- assign search_provider = site.search_provider | default: "lunr" -%} 3 | {%- case search_provider -%} 4 | {%- when "lunr" -%} 5 |
6 | 9 | 10 |
11 |
12 | {%- when "google" -%} 13 |
14 | 17 | 18 |
19 |
20 | 21 |
22 | {%- when "algolia" -%} 23 | 24 |
25 | {%- endcase -%} 26 |
27 | -------------------------------------------------------------------------------- /_sass/minimal-mistakes/skins/_aqua.scss: -------------------------------------------------------------------------------- 1 | /* ========================================================================== 2 | Aqua skin 3 | ========================================================================== */ 4 | 5 | /* Colors */ 6 | $gray : #1976d2 !default; 7 | $dark-gray : mix(#000, $gray, 40%) !default; 8 | $darker-gray : mix(#000, $gray, 60%) !default; 9 | $light-gray : mix(#fff, $gray, 50%) !default; 10 | $lighter-gray : mix(#fff, $gray, 90%) !default; 11 | 12 | $body-color : #fff !default; 13 | $background-color : #f0fff0 !default; 14 | $code-background-color : $lighter-gray !default; 15 | $code-background-color-dark : $light-gray !default; 16 | $text-color : $dark-gray !default; 17 | $border-color : $lighter-gray !default; 18 | 19 | $primary-color : $gray !default; 20 | $success-color : #27ae60 !default; 21 | $warning-color : #e67e22 !default; 22 | $danger-color : #c0392b !default; 23 | $info-color : #03a9f4 !default; 24 | 25 | /* links */ 26 | $link-color : $info-color !default; 27 | $link-color-hover : mix(#000, $link-color, 25%) !default; 28 | $link-color-visited : mix(#fff, $link-color, 25%) !default; 29 | $masthead-link-color : $primary-color !default; 30 | $masthead-link-color-hover : mix(#000, $primary-color, 25%) !default; -------------------------------------------------------------------------------- /_layouts/categories.html: -------------------------------------------------------------------------------- 1 | --- 2 | layout: archive 3 | --- 4 | 5 | {{ content }} 6 | 7 | {% assign categories_max = 0 %} 8 | {% for category in site.categories %} 9 | {% if category[1].size > categories_max %} 10 | {% assign categories_max = category[1].size %} 11 | {% endif %} 12 | {% endfor %} 13 | 14 | 27 | 28 | {% for i in (1..categories_max) reversed %} 29 | {% for category in site.categories %} 30 | {% if category[1].size == i %} 31 |
32 |

{{ category[0] }}

33 |
34 | {% for post in category.last %} 35 | {% include archive-single.html type=page.entries_layout %} 36 | {% endfor %} 37 |
38 | {{ site.data.ui-text[site.locale].back_to_top | default: 'Back to Top' }} ↑ 39 |
40 | {% endif %} 41 | {% endfor %} 42 | {% endfor %} 43 | -------------------------------------------------------------------------------- /_includes/archive-single.html: -------------------------------------------------------------------------------- 1 | {% if post.header.teaser %} 2 | {% capture teaser %}{{ post.header.teaser }}{% endcapture %} 3 | {% else %} 4 | {% assign teaser = site.teaser %} 5 | {% endif %} 6 | 7 | {% if post.id %} 8 | {% assign title = post.title | markdownify | remove: "

" | remove: "

" %} 9 | {% else %} 10 | {% assign title = post.title %} 11 | {% endif %} 12 | 13 |
14 |
15 | {% if include.type == "grid" and teaser %} 16 |
17 | 18 |
19 | {% endif %} 20 |

21 | {% if post.link %} 22 | {{ title }} Permalink 23 | {% else %} 24 | {{ title }} 25 | {% endif %} 26 |

27 | {% if post.read_time %} 28 |

{% include read-time.html %}

29 | {% endif %} 30 | {% if post.excerpt %}

{{ post.excerpt | markdownify | strip_html | truncate: 160 }}

{% endif %} 31 |
32 |
33 | -------------------------------------------------------------------------------- /_includes/feature_row: -------------------------------------------------------------------------------- 1 | {% if include.id %} 2 | {% assign feature_row = page[include.id] %} 3 | {% else %} 4 | {% assign feature_row = page.feature_row %} 5 | {% endif %} 6 | 7 |
8 | 9 | {% for f in feature_row %} 10 |
11 |
12 | {% if f.image_path %} 13 |
14 | {% if f.alt %}{{ f.alt }}{% endif %} 16 | {% if f.image_caption %} 17 | {{ f.image_caption | markdownify | remove: "

" | remove: "

" }}
18 | {% endif %} 19 |
20 | {% endif %} 21 | 22 |
23 | {% if f.title %} 24 |

{{ f.title }}

25 | {% endif %} 26 | 27 | {% if f.excerpt %} 28 |
29 | {{ f.excerpt | markdownify }} 30 |
31 | {% endif %} 32 | 33 | {% if f.url %} 34 |

{{ f.btn_label | default: site.data.ui-text[site.locale].more_label | default: "Learn More" }}

35 | {% endif %} 36 |
37 |
38 |
39 | {% endfor %} 40 | 41 |
42 | -------------------------------------------------------------------------------- /_sass/minimal-mistakes/skins/_contrast.scss: -------------------------------------------------------------------------------- 1 | /* ========================================================================== 2 | Contrast skin 3 | ========================================================================== */ 4 | 5 | /* Colors */ 6 | $text-color: #000 !default; 7 | $muted-text-color: $text-color !default; 8 | $primary-color: #ff0000 !default; 9 | $border-color: mix(#fff, $text-color, 75%) !default; 10 | $footer-background-color: #000 !default; 11 | $link-color: #0000ff !default; 12 | $masthead-link-color: $text-color !default; 13 | $masthead-link-color-hover: $text-color !default; 14 | $navicon-link-color-hover: mix(#fff, $text-color, 80%) !default; 15 | 16 | /* contrast syntax highlighting (base16) */ 17 | $base00: #000000 !default; 18 | $base01: #242422 !default; 19 | $base02: #484844 !default; 20 | $base03: #6c6c66 !default; 21 | $base04: #918f88 !default; 22 | $base05: #b5b3aa !default; 23 | $base06: #d9d7cc !default; 24 | $base07: #fdfbee !default; 25 | $base08: #ff6c60 !default; 26 | $base09: #e9c062 !default; 27 | $base0a: #ffffb6 !default; 28 | $base0b: #a8ff60 !default; 29 | $base0c: #c6c5fe !default; 30 | $base0d: #96cbfe !default; 31 | $base0e: #ff73fd !default; 32 | $base0f: #b18a3d !default; 33 | 34 | .page__content { 35 | .notice, 36 | .notice--primary, 37 | .notice--info, 38 | .notice--warning, 39 | .notice--success, 40 | .notice--danger { 41 | color: $text-color; 42 | } 43 | } 44 | 45 | .page__footer { 46 | color: #fff !important; // override 47 | } 48 | 49 | .page__footer-follow .social-icons .svg-inline--fa { 50 | color: inherit; 51 | } 52 | -------------------------------------------------------------------------------- /_includes/social-share.html: -------------------------------------------------------------------------------- 1 |
2 | {% if site.data.ui-text[site.locale].share_on_label %} 3 |

{{ site.data.ui-text[site.locale].share_on_label | default: "Share on" }}

4 | {% endif %} 5 | 6 | Twitter 7 | 8 | Facebook 9 | 10 | LinkedIn 11 |
12 | -------------------------------------------------------------------------------- /_layouts/search.html: -------------------------------------------------------------------------------- 1 | --- 2 | layout: default 3 | --- 4 | 5 | {% if page.header.overlay_color or page.header.overlay_image or page.header.image %} 6 | {% include page__hero.html %} 7 | {% endif %} 8 | 9 | {% if page.url != "/" and site.breadcrumbs %} 10 | {% unless paginator %} 11 | {% include breadcrumbs.html %} 12 | {% endunless %} 13 | {% endif %} 14 | 15 |
16 | {% include sidebar.html %} 17 | 18 |
19 | {% unless page.header.overlay_color or page.header.overlay_image %} 20 |

{{ page.title }}

21 | {% endunless %} 22 | 23 | {{ content }} 24 | 25 | {%- assign search_provider = site.search_provider | default: "lunr" -%} 26 | {%- case search_provider -%} 27 | {%- when "lunr" -%} 28 | 29 |
30 | {%- when "google" -%} 31 |
32 | 33 |
34 |
35 | 36 |
37 | {%- when "algolia" -%} 38 | 39 |
40 | {%- endcase -%} 41 |
42 |
43 | -------------------------------------------------------------------------------- /_sass/minimal-mistakes/vendor/susy/plugins/svg-grid/_svg-grid-math.scss: -------------------------------------------------------------------------------- 1 | // SVG Grid Math 2 | // ============= 3 | 4 | 5 | 6 | // SVG Column Position 7 | // ------------------- 8 | /// Determine the proper horizontal position 9 | /// for a column rectangle 10 | /// 11 | /// @access private 12 | /// 13 | /// @param {Integer} $column - 14 | /// 1-indexed column location on the grid 15 | /// @param {Map} $grid - 16 | /// Normalized settings map representing the current grid 17 | /// 18 | /// @return {Length} - 19 | /// Horizontal position of svg column rectangle, 20 | /// as distance from the grid edge 21 | @function _susy-svg-column-position( 22 | $column, 23 | $grid 24 | ) { 25 | $x: $column - 1; 26 | 27 | @if ($x > 0) { 28 | $x: susy-span(first $x wide, $grid); 29 | } 30 | 31 | @return $x; 32 | } 33 | 34 | 35 | 36 | // SVG Offset 37 | // ---------- 38 | /// Determine if a grid image needs to be offset, 39 | /// to account for edge gutters. 40 | /// 41 | /// @access private 42 | /// 43 | /// @param {Map} $grid - 44 | /// Normalized settings map representing the current grid 45 | /// 46 | /// @return {Length | null} - 47 | /// Expected distance from container edge to first column, 48 | /// based on spread values and gutter-widths 49 | @function _susy-svg-offset( 50 | $grid 51 | ) { 52 | $columns: su-valid-columns(map-get($grid, 'columns')); 53 | $gutters: su-valid-gutters(map-get($grid, 'gutters')); 54 | $container: su-valid-spread(map-get($grid, 'container-spread')) + 1; 55 | 56 | @if ($container == 0) { 57 | @return null; 58 | } 59 | 60 | $gutter: su-call('su-gutter', $grid); 61 | 62 | @if (type-of($gutter) == 'string') { 63 | @return 'calc(#{$container} * #{$gutter} / 2)'; 64 | } 65 | 66 | @return $container * $gutter / 2; 67 | } 68 | -------------------------------------------------------------------------------- /_sass/minimal-mistakes/skins/_sunrise.scss: -------------------------------------------------------------------------------- 1 | /* ========================================================================== 2 | Sunrise skin 3 | ========================================================================== */ 4 | 5 | /* Colors */ 6 | $dark-gray: #0e2431 !default; 7 | $background-color: #e8d5b7 !default; 8 | $text-color: #000 !default; 9 | $muted-text-color: $dark-gray !default; 10 | $primary-color: #fc3a52 !default; 11 | $border-color: mix(#000, $background-color, 20%) !default; 12 | $code-background-color: mix(#fff, $background-color, 20%) !default; 13 | $code-background-color-dark: mix(#000, $background-color, 10%) !default; 14 | $form-background-color: mix(#fff, $background-color, 15%) !default; 15 | $footer-background-color: #f9b248 !default; 16 | $link-color: mix(#000, $primary-color, 10%) !default; 17 | $link-color-hover: mix(#fff, $link-color, 25%) !default; 18 | $link-color-visited: mix(#000, $link-color, 25%) !default; 19 | $masthead-link-color: $text-color !default; 20 | $masthead-link-color-hover: mix(#000, $text-color, 20%) !default; 21 | $navicon-link-color-hover: mix(#000, $background-color, 30%) !default; 22 | 23 | /* sunrise syntax highlighting (base16) */ 24 | $base00: #1d1f21 !default; 25 | $base01: #282a2e !default; 26 | $base02: #373b41 !default; 27 | $base03: #969896 !default; 28 | $base04: #b4b7b4 !default; 29 | $base05: #c5c8c6 !default; 30 | $base06: #e0e0e0 !default; 31 | $base07: #ffffff !default; 32 | $base08: #cc6666 !default; 33 | $base09: #de935f !default; 34 | $base0a: #f0c674 !default; 35 | $base0b: #b5bd68 !default; 36 | $base0c: #8abeb7 !default; 37 | $base0d: #81a2be !default; 38 | $base0e: #b294bb !default; 39 | $base0f: #a3685a !default; 40 | 41 | .author__urls.social-icons .fa, 42 | .page__footer-follow .social-icons .svg-inline--fa { 43 | color: inherit; 44 | } 45 | -------------------------------------------------------------------------------- /_sass/minimal-mistakes/_footer.scss: -------------------------------------------------------------------------------- 1 | /* ========================================================================== 2 | FOOTER 3 | ========================================================================== */ 4 | 5 | .page__footer { 6 | @include clearfix; 7 | float: left; 8 | margin-left: 0; 9 | margin-right: 0; 10 | width: 100%; 11 | clear: both; 12 | margin-top: 3em; 13 | color: $muted-text-color; 14 | -webkit-animation: $intro-transition; 15 | animation: $intro-transition; 16 | -webkit-animation-delay: 0.45s; 17 | animation-delay: 0.45s; 18 | background-color: $footer-background-color; 19 | 20 | footer { 21 | @include clearfix; 22 | margin-left: auto; 23 | margin-right: auto; 24 | margin-top: 2em; 25 | max-width: 100%; 26 | padding: 0 1em 2em; 27 | 28 | @include breakpoint($x-large) { 29 | max-width: $x-large; 30 | } 31 | } 32 | 33 | a { 34 | color: inherit; 35 | text-decoration: none; 36 | 37 | &:hover { 38 | text-decoration: underline; 39 | } 40 | } 41 | 42 | .fas, 43 | .fab, 44 | .far, 45 | .fal { 46 | color: $muted-text-color; 47 | } 48 | } 49 | 50 | .page__footer-copyright { 51 | font-family: $global-font-family; 52 | font-size: $type-size-7; 53 | } 54 | 55 | .page__footer-follow { 56 | ul { 57 | margin: 0; 58 | padding: 0; 59 | list-style-type: none; 60 | } 61 | 62 | li { 63 | display: inline-block; 64 | padding-top: 5px; 65 | padding-bottom: 5px; 66 | font-family: $sans-serif-narrow; 67 | font-size: $type-size-6; 68 | text-transform: uppercase; 69 | } 70 | 71 | li + li:before { 72 | content: ""; 73 | padding-right: 5px; 74 | } 75 | 76 | a { 77 | padding-right: 10px; 78 | font-weight: bold; 79 | } 80 | 81 | .social-icons { 82 | a { 83 | white-space: nowrap; 84 | } 85 | } 86 | } 87 | -------------------------------------------------------------------------------- /_includes/breadcrumbs.html: -------------------------------------------------------------------------------- 1 | {% case site.category_archive.type %} 2 | {% when "liquid" %} 3 | {% assign path_type = "#" %} 4 | {% when "jekyll-archives" %} 5 | {% assign path_type = nil %} 6 | {% endcase %} 7 | 8 | {% if page.collection != 'posts' %} 9 | {% assign path_type = nil %} 10 | {% assign crumb_path = '/' %} 11 | {% else %} 12 | {% assign crumb_path = site.category_archive.path %} 13 | {% endif %} 14 | 15 | 40 | -------------------------------------------------------------------------------- /assets/js/lunr/lunr-store.js: -------------------------------------------------------------------------------- 1 | --- 2 | layout: null 3 | --- 4 | 5 | var store = [ 6 | {%- for c in site.collections -%} 7 | {%- if forloop.last -%} 8 | {%- assign l = true -%} 9 | {%- endif -%} 10 | {%- assign docs = c.docs | where_exp:'doc','doc.search != false' -%} 11 | {%- for doc in docs -%} 12 | {%- if doc.header.teaser -%} 13 | {%- capture teaser -%}{{ doc.header.teaser }}{%- endcapture -%} 14 | {%- else -%} 15 | {%- assign teaser = site.teaser -%} 16 | {%- endif -%} 17 | { 18 | "title": {{ doc.title | jsonify }}, 19 | "excerpt": 20 | {%- if site.search_full_content == true -%} 21 | {{ doc.content | newline_to_br | 22 | replace:"
", " " | 23 | replace:"

", " " | 24 | replace:"", " " | 25 | replace:"", " " | 26 | replace:"", " " | 27 | replace:"", " " | 28 | replace:"", " " | 29 | replace:"", " "| 30 | strip_html | strip_newlines | jsonify }}, 31 | {%- else -%} 32 | {{ doc.content | newline_to_br | 33 | replace:"
", " " | 34 | replace:"

", " " | 35 | replace:"", " " | 36 | replace:"", " " | 37 | replace:"", " " | 38 | replace:"", " " | 39 | replace:"", " " | 40 | replace:"", " "| 41 | strip_html | strip_newlines | truncatewords: 50 | jsonify }}, 42 | {%- endif -%} 43 | "categories": {{ doc.categories | jsonify }}, 44 | "tags": {{ doc.tags | jsonify }}, 45 | "url": {{ doc.url | absolute_url | jsonify }}, 46 | "teaser": {{ teaser | absolute_url | jsonify }} 47 | }{%- unless forloop.last and l -%},{%- endunless -%} 48 | {%- endfor -%} 49 | {%- endfor -%}] 50 | -------------------------------------------------------------------------------- /_sass/minimal-mistakes/vendor/breakpoint/parsers/resolution/_resolution.scss: -------------------------------------------------------------------------------- 1 | @function breakpoint-make-resolutions($resolution) { 2 | $length: length($resolution); 3 | 4 | $output: (); 5 | 6 | @if $length == 2 { 7 | $feature: ''; 8 | $value: ''; 9 | 10 | // Find which is number 11 | @if type-of(nth($resolution, 1)) == 'number' { 12 | $value: nth($resolution, 1); 13 | } 14 | @else { 15 | $value: nth($resolution, 2); 16 | } 17 | 18 | // Determine min/max/standard 19 | @if index($resolution, 'min-resolution') { 20 | $feature: 'min-'; 21 | } 22 | @else if index($resolution, 'max-resolution') { 23 | $feature: 'max-'; 24 | } 25 | 26 | $standard: '(#{$feature}resolution: #{$value})'; 27 | 28 | // If we're not dealing with dppx, 29 | @if unit($value) != 'dppx' { 30 | $base: 96dpi; 31 | @if unit($value) == 'dpcm' { 32 | $base: 243.84dpcm; 33 | } 34 | // Write out feature tests 35 | $webkit: ''; 36 | $moz: ''; 37 | $webkit: '(-webkit-#{$feature}device-pixel-ratio: #{$value / $base})'; 38 | $moz: '(#{$feature}-moz-device-pixel-ratio: #{$value / $base})'; 39 | // Append to output 40 | $output: append($output, $standard, space); 41 | $output: append($output, $webkit, space); 42 | $output: append($output, $moz, space); 43 | } 44 | @else { 45 | $webkit: ''; 46 | $moz: ''; 47 | $webkit: '(-webkit-#{$feature}device-pixel-ratio: #{$value / 1dppx})'; 48 | $moz: '(#{$feature}-moz-device-pixel-ratio: #{$value / 1dppx})'; 49 | $fallback: '(#{$feature}resolution: #{$value / 1dppx * 96dpi})'; 50 | // Append to output 51 | $output: append($output, $standard, space); 52 | $output: append($output, $webkit, space); 53 | $output: append($output, $moz, space); 54 | $output: append($output, $fallback, space); 55 | } 56 | 57 | } 58 | 59 | @return $output; 60 | } 61 | -------------------------------------------------------------------------------- /_includes/search/algolia-search-scripts.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 55 | -------------------------------------------------------------------------------- /_sass/minimal-mistakes/_masthead.scss: -------------------------------------------------------------------------------- 1 | /* ========================================================================== 2 | MASTHEAD 3 | ========================================================================== */ 4 | 5 | .masthead { 6 | position: relative; 7 | border-bottom: 1px solid $border-color; 8 | -webkit-animation: $intro-transition; 9 | animation: $intro-transition; 10 | -webkit-animation-delay: 0.15s; 11 | animation-delay: 0.15s; 12 | z-index: 20; 13 | 14 | &__inner-wrap { 15 | @include clearfix; 16 | margin-left: auto; 17 | margin-right: auto; 18 | padding: 1em; 19 | max-width: 100%; 20 | display: -webkit-box; 21 | display: -ms-flexbox; 22 | display: flex; 23 | -webkit-box-pack: justify; 24 | -ms-flex-pack: justify; 25 | justify-content: space-between; 26 | font-family: $sans-serif-narrow; 27 | 28 | @include breakpoint($x-large) { 29 | max-width: $max-width; 30 | } 31 | 32 | nav { 33 | z-index: 10; 34 | } 35 | 36 | a { 37 | text-decoration: none; 38 | } 39 | } 40 | } 41 | 42 | .site-logo img { 43 | max-height: 2rem; 44 | } 45 | 46 | .site-title { 47 | display: -webkit-box; 48 | display: -ms-flexbox; 49 | display: flex; 50 | -ms-flex-item-align: center; 51 | align-self: center; 52 | font-weight: bold; 53 | // z-index: 20; 54 | } 55 | 56 | .site-subtitle { 57 | display: block; 58 | font-size: $type-size-8; 59 | } 60 | 61 | .masthead__menu { 62 | float: left; 63 | margin-left: 0; 64 | margin-right: 0; 65 | width: 100%; 66 | clear: both; 67 | 68 | .site-nav { 69 | margin-left: 0; 70 | 71 | @include breakpoint($small) { 72 | float: right; 73 | } 74 | } 75 | 76 | ul { 77 | margin: 0; 78 | padding: 0; 79 | clear: both; 80 | list-style-type: none; 81 | } 82 | } 83 | 84 | .masthead__menu-item { 85 | display: block; 86 | list-style-type: none; 87 | white-space: nowrap; 88 | 89 | &--lg { 90 | padding-right: 2em; 91 | font-weight: 700; 92 | } 93 | } 94 | -------------------------------------------------------------------------------- /_includes/comments-providers/staticman.html: -------------------------------------------------------------------------------- 1 | {% if site.repository and site.staticman.branch %} 2 | 40 | {% endif %} 41 | -------------------------------------------------------------------------------- /_sass/minimal-mistakes/skins/_neon.scss: -------------------------------------------------------------------------------- 1 | /* ========================================================================== 2 | Neon skin 3 | ========================================================================== */ 4 | 5 | /* Colors */ 6 | $background-color: #141010 !default; 7 | $text-color: #fff6fb !default; 8 | $primary-color: #f21368 !default; 9 | $border-color: mix(#fff, $background-color, 20%) !default; 10 | $code-background-color: mix(#000, $background-color, 15%) !default; 11 | $code-background-color-dark: mix(#000, $background-color, 20%) !default; 12 | $form-background-color: mix(#000, $background-color, 15%) !default; 13 | $footer-background-color: mix($primary-color, #000, 10%) !default; 14 | $link-color: $primary-color !default; 15 | $link-color-hover: mix(#fff, $link-color, 25%) !default; 16 | $link-color-visited: mix(#000, $link-color, 25%) !default; 17 | $masthead-link-color: $text-color !default; 18 | $masthead-link-color-hover: mix(#000, $text-color, 20%) !default; 19 | $navicon-link-color-hover: mix(#000, $background-color, 30%) !default; 20 | 21 | /* neon syntax highlighting (base16) */ 22 | $base00: #ffffff !default; 23 | $base01: #e0e0e0 !default; 24 | $base02: #d0d0d0 !default; 25 | $base03: #b0b0b0 !default; 26 | $base04: #000000 !default; 27 | $base05: #101010 !default; 28 | $base06: #151515 !default; 29 | $base07: #202020 !default; 30 | $base08: #ff0086 !default; 31 | $base09: #fd8900 !default; 32 | $base0a: #aba800 !default; 33 | $base0b: #00c918 !default; 34 | $base0c: #1faaaa !default; 35 | $base0d: #3777e6 !default; 36 | $base0e: #ad00a1 !default; 37 | $base0f: #cc6633 !default; 38 | 39 | .author__urls.social-icons .svg-inline--fa, 40 | .page__footer-follow .social-icons .svg-inline--fa { 41 | color: inherit; 42 | } 43 | 44 | /* next/previous buttons */ 45 | .pagination--pager { 46 | color: $text-color; 47 | background-color: $primary-color; 48 | border-color: transparent; 49 | 50 | &:visited { 51 | color: $text-color; 52 | } 53 | } 54 | 55 | .ais-search-box .ais-search-box--input { 56 | background-color: $form-background-color; 57 | } -------------------------------------------------------------------------------- /_includes/comments-providers/staticman_v2.html: -------------------------------------------------------------------------------- 1 | {% if site.repository and site.comments.staticman.branch %} 2 | 40 | {% endif %} 41 | -------------------------------------------------------------------------------- /_includes/masthead.html: -------------------------------------------------------------------------------- 1 | {% capture logo_path %}{{ site.logo }}{% endcapture %} 2 | 3 |
4 |
5 |
6 | 35 |
36 |
37 |
38 | -------------------------------------------------------------------------------- /_sass/minimal-mistakes/skins/_plum.scss: -------------------------------------------------------------------------------- 1 | /* ========================================================================== 2 | Plum skin 3 | ========================================================================== */ 4 | 5 | /* Colors */ 6 | $background-color: #521477 !default; 7 | $text-color: #fffd86 !default; 8 | $primary-color: #c327ab !default; 9 | $border-color: mix(#fff, $background-color, 20%) !default; 10 | $code-background-color: mix(#000, $background-color, 15%) !default; 11 | $code-background-color-dark: mix(#000, $background-color, 20%) !default; 12 | $form-background-color: mix(#000, $background-color, 15%) !default; 13 | $footer-background-color: mix(#000, $background-color, 25%) !default; 14 | $link-color: $primary-color !default; 15 | $link-color-hover: mix(#fff, $link-color, 25%) !default; 16 | $link-color-visited: mix(#000, $link-color, 25%) !default; 17 | $masthead-link-color: $text-color !default; 18 | $masthead-link-color-hover: mix(#000, $text-color, 20%) !default; 19 | $navicon-link-color-hover: mix(#000, $background-color, 30%) !default; 20 | 21 | /* plum syntax highlighting (base16) */ 22 | $base00: #ffffff !default; 23 | $base01: #e0e0e0 !default; 24 | $base02: #d0d0d0 !default; 25 | $base03: #b0b0b0 !default; 26 | $base04: #000000 !default; 27 | $base05: #101010 !default; 28 | $base06: #151515 !default; 29 | $base07: #202020 !default; 30 | $base08: #ff0086 !default; 31 | $base09: #fd8900 !default; 32 | $base0a: #aba800 !default; 33 | $base0b: #00c918 !default; 34 | $base0c: #1faaaa !default; 35 | $base0d: #3777e6 !default; 36 | $base0e: #ad00a1 !default; 37 | $base0f: #cc6633 !default; 38 | 39 | .author__urls.social-icons .svg-inline--fa, 40 | .page__footer-follow .social-icons .svg-inline--fa { 41 | color: inherit; 42 | } 43 | 44 | .page__content { 45 | a, 46 | a:visited { 47 | color: inherit; 48 | } 49 | } 50 | 51 | /* next/previous buttons */ 52 | .pagination--pager { 53 | color: $text-color; 54 | background-color: $primary-color; 55 | border-color: transparent; 56 | 57 | &:visited { 58 | color: $text-color; 59 | } 60 | } 61 | 62 | .ais-search-box .ais-search-box--input { 63 | background-color: $form-background-color; 64 | } -------------------------------------------------------------------------------- /_sass/minimal-mistakes/vendor/breakpoint/_settings.scss: -------------------------------------------------------------------------------- 1 | ////////////////////////////// 2 | // Has Setting 3 | ////////////////////////////// 4 | @function breakpoint-has($setting) { 5 | @if map-has-key($breakpoint, $setting) { 6 | @return true; 7 | } 8 | @else { 9 | @return false; 10 | } 11 | } 12 | 13 | ////////////////////////////// 14 | // Get Settings 15 | ////////////////////////////// 16 | @function breakpoint-get($setting) { 17 | @if breakpoint-has($setting) { 18 | @return map-get($breakpoint, $setting); 19 | } 20 | @else { 21 | @return map-get($Breakpoint-Settings, $setting); 22 | } 23 | } 24 | 25 | ////////////////////////////// 26 | // Set Settings 27 | ////////////////////////////// 28 | @function breakpoint-set($setting, $value) { 29 | @if (str-index($setting, '-') or str-index($setting, '_')) and str-index($setting, ' ') == null { 30 | @warn "Words in Breakpoint settings should be separated by spaces, not dashes or underscores. Please replace dashes and underscores between words with spaces. Settings will not work as expected until changed."; 31 | } 32 | $breakpoint: map-merge($breakpoint, ($setting: $value)) !global; 33 | @return true; 34 | } 35 | 36 | @mixin breakpoint-change($setting, $value) { 37 | $breakpoint-change: breakpoint-set($setting, $value); 38 | } 39 | 40 | @mixin breakpoint-set($setting, $value) { 41 | @include breakpoint-change($setting, $value); 42 | } 43 | 44 | @mixin bkpt-change($setting, $value) { 45 | @include breakpoint-change($setting, $value); 46 | } 47 | @mixin bkpt-set($setting, $value) { 48 | @include breakpoint-change($setting, $value); 49 | } 50 | 51 | ////////////////////////////// 52 | // Remove Setting 53 | ////////////////////////////// 54 | @function breakpoint-reset($settings...) { 55 | @if length($settings) == 1 { 56 | $settings: nth($settings, 1); 57 | } 58 | 59 | @each $setting in $settings { 60 | $breakpoint: map-remove($breakpoint, $setting) !global; 61 | } 62 | @return true; 63 | } 64 | 65 | @mixin breakpoint-reset($settings...) { 66 | $breakpoint-reset: breakpoint-reset($settings); 67 | } 68 | 69 | @mixin bkpt-reset($settings...) { 70 | $breakpoint-reset: breakpoint-reset($settings); 71 | } -------------------------------------------------------------------------------- /Rakefile: -------------------------------------------------------------------------------- 1 | require "bundler/gem_tasks" 2 | require "jekyll" 3 | require "listen" 4 | 5 | def listen_ignore_paths(base, options) 6 | [ 7 | /_config\.ya?ml/, 8 | /_site/, 9 | /\.jekyll-metadata/ 10 | ] 11 | end 12 | 13 | def listen_handler(base, options) 14 | site = Jekyll::Site.new(options) 15 | Jekyll::Command.process_site(site) 16 | proc do |modified, added, removed| 17 | t = Time.now 18 | c = modified + added + removed 19 | n = c.length 20 | relative_paths = c.map{ |p| Pathname.new(p).relative_path_from(base).to_s } 21 | print Jekyll.logger.message("Regenerating:", "#{relative_paths.join(", ")} changed... ") 22 | begin 23 | Jekyll::Command.process_site(site) 24 | puts "regenerated in #{Time.now - t} seconds." 25 | rescue => e 26 | puts "error:" 27 | Jekyll.logger.warn "Error:", e.message 28 | Jekyll.logger.warn "Error:", "Run jekyll build --trace for more information." 29 | end 30 | end 31 | end 32 | 33 | task :preview do 34 | base = Pathname.new('.').expand_path 35 | options = { 36 | "source" => base.join('test').to_s, 37 | "destination" => base.join('test/_site').to_s, 38 | "force_polling" => false, 39 | "serving" => true, 40 | "theme" => "minimal-mistakes-jekyll" 41 | } 42 | 43 | options = Jekyll.configuration(options) 44 | 45 | ENV["LISTEN_GEM_DEBUGGING"] = "1" 46 | listener = Listen.to( 47 | base.join("_data"), 48 | base.join("_includes"), 49 | base.join("_layouts"), 50 | base.join("_sass"), 51 | base.join("assets"), 52 | options["source"], 53 | :ignore => listen_ignore_paths(base, options), 54 | :force_polling => options['force_polling'], 55 | &(listen_handler(base, options)) 56 | ) 57 | 58 | begin 59 | listener.start 60 | Jekyll.logger.info "Auto-regeneration:", "enabled for '#{options["source"]}'" 61 | 62 | unless options['serving'] 63 | trap("INT") do 64 | listener.stop 65 | puts " Halting auto-regeneration." 66 | exit 0 67 | end 68 | 69 | loop { sleep 1000 } 70 | end 71 | rescue ThreadError 72 | # You pressed Ctrl-C, oh my! 73 | end 74 | 75 | Jekyll::Commands::Serve.process(options) 76 | end 77 | -------------------------------------------------------------------------------- /assets/js/plugins/jquery.greedy-navigation.js: -------------------------------------------------------------------------------- 1 | /* 2 | GreedyNav.js - http://lukejacksonn.com/actuate 3 | Licensed under the MIT license - http://opensource.org/licenses/MIT 4 | Copyright (c) 2015 Luke Jackson 5 | */ 6 | 7 | $(function() { 8 | 9 | var $btn = $("nav.greedy-nav .greedy-nav__toggle"); 10 | var $vlinks = $("nav.greedy-nav .visible-links"); 11 | var $hlinks = $("nav.greedy-nav .hidden-links"); 12 | 13 | var numOfItems = 0; 14 | var totalSpace = 0; 15 | var closingTime = 1000; 16 | var breakWidths = []; 17 | 18 | // Get initial state 19 | $vlinks.children().outerWidth(function(i, w) { 20 | totalSpace += w; 21 | numOfItems += 1; 22 | breakWidths.push(totalSpace); 23 | }); 24 | 25 | var availableSpace, numOfVisibleItems, requiredSpace, timer; 26 | 27 | function check() { 28 | 29 | // Get instant state 30 | availableSpace = $vlinks.width() - 10; 31 | numOfVisibleItems = $vlinks.children().length; 32 | requiredSpace = breakWidths[numOfVisibleItems - 1]; 33 | 34 | // There is not enought space 35 | if (requiredSpace > availableSpace) { 36 | $vlinks.children().last().prependTo($hlinks); 37 | numOfVisibleItems -= 1; 38 | check(); 39 | // There is more than enough space 40 | } else if (availableSpace > breakWidths[numOfVisibleItems]) { 41 | $hlinks.children().first().appendTo($vlinks); 42 | numOfVisibleItems += 1; 43 | check(); 44 | } 45 | // Update the button accordingly 46 | $btn.attr("count", numOfItems - numOfVisibleItems); 47 | if (numOfVisibleItems === numOfItems) { 48 | $btn.addClass('hidden'); 49 | } else $btn.removeClass('hidden'); 50 | } 51 | 52 | // Window listeners 53 | $(window).resize(function() { 54 | check(); 55 | }); 56 | 57 | $btn.on('click', function() { 58 | $hlinks.toggleClass('hidden'); 59 | clearTimeout(timer); 60 | }); 61 | 62 | $hlinks.on('mouseleave', function() { 63 | // Mouse has left, start the timer 64 | timer = setTimeout(function() { 65 | $hlinks.addClass('hidden'); 66 | }, closingTime); 67 | }).on('mouseenter', function() { 68 | // Mouse is back, cancel the timer 69 | clearTimeout(timer); 70 | }) 71 | 72 | check(); 73 | 74 | }); -------------------------------------------------------------------------------- /_sass/minimal-mistakes/_buttons.scss: -------------------------------------------------------------------------------- 1 | /* ========================================================================== 2 | BUTTONS 3 | ========================================================================== */ 4 | 5 | /* 6 | Default button 7 | ========================================================================== */ 8 | 9 | .btn { 10 | /* default */ 11 | display: inline-block; 12 | margin-bottom: 0.25em; 13 | padding: 0.5em 1em; 14 | font-family: $sans-serif; 15 | font-size: $type-size-6; 16 | font-weight: bold; 17 | text-align: center; 18 | text-decoration: none; 19 | border-width: 0; 20 | border-radius: $border-radius; 21 | cursor: pointer; 22 | 23 | .icon { 24 | margin-right: 0.5em; 25 | } 26 | 27 | .icon + .hidden { 28 | margin-left: -0.5em; /* override for hidden text*/ 29 | } 30 | 31 | /* button colors */ 32 | $buttoncolors: 33 | (primary, $primary-color), 34 | (inverse, #fff), 35 | (light-outline, transparent), 36 | (success, $success-color), 37 | (warning, $warning-color), 38 | (danger, $danger-color), 39 | (info, $info-color), 40 | (facebook, $facebook-color), 41 | (twitter, $twitter-color), 42 | (linkedin, $linkedin-color); 43 | 44 | @each $buttoncolor, $color in $buttoncolors { 45 | &--#{$buttoncolor} { 46 | @include yiq-contrasted($color); 47 | @if ($buttoncolor == inverse) { 48 | border: 1px solid $border-color; 49 | } 50 | @if ($buttoncolor == light-outline) { 51 | border: 1px solid #fff; 52 | } 53 | 54 | &:visited { 55 | @include yiq-contrasted($color); 56 | } 57 | 58 | &:hover { 59 | @include yiq-contrasted(mix(#000, $color, 20%)); 60 | } 61 | } 62 | } 63 | 64 | /* fills width of parent container */ 65 | &--block { 66 | display: block; 67 | width: 100%; 68 | 69 | + .btn--block { 70 | margin-top: 0.25em; 71 | } 72 | } 73 | 74 | /* disabled */ 75 | &--disabled { 76 | pointer-events: none; 77 | cursor: not-allowed; 78 | filter: alpha(opacity=65); 79 | box-shadow: none; 80 | opacity: 0.65; 81 | } 82 | 83 | /* extra large button */ 84 | &--x-large { 85 | font-size: $type-size-4; 86 | } 87 | 88 | /* large button */ 89 | &--large { 90 | font-size: $type-size-5; 91 | } 92 | 93 | /* small button */ 94 | &--small { 95 | font-size: $type-size-7; 96 | } 97 | } -------------------------------------------------------------------------------- /_sass/minimal-mistakes/_notices.scss: -------------------------------------------------------------------------------- 1 | /* ========================================================================== 2 | NOTICE TEXT BLOCKS 3 | ========================================================================== */ 4 | 5 | /** 6 | * Default Kramdown usage (no indents!): 7 | *
8 | * #### Headline for the Notice 9 | * Text for the notice 10 | *
11 | */ 12 | 13 | @mixin notice($notice-color) { 14 | margin: 2em 0 !important; /* override*/ 15 | padding: 1em; 16 | color: $dark-gray; 17 | font-family: $global-font-family; 18 | font-size: $type-size-6 !important; 19 | text-indent: initial; /* override*/ 20 | background-color: mix(#fff, $notice-color, 90%); 21 | border-radius: $border-radius; 22 | box-shadow: 0 1px 1px rgba($notice-color, 0.25); 23 | 24 | h4 { 25 | margin-top: 0 !important; /* override*/ 26 | margin-bottom: 0.75em; 27 | } 28 | 29 | @at-root .page__content #{&} h4 { 30 | /* using at-root to override .page-content h4 font size*/ 31 | margin-bottom: 0; 32 | font-size: 1em; 33 | } 34 | 35 | p { 36 | &:last-child { 37 | margin-bottom: 0 !important; /* override*/ 38 | } 39 | } 40 | 41 | h4 + p { 42 | /* remove space above paragraphs that appear directly after notice headline*/ 43 | margin-top: 0; 44 | padding-top: 0; 45 | } 46 | 47 | a { 48 | color: $notice-color; 49 | 50 | &:hover { 51 | color: mix(#000, $notice-color, 40%); 52 | } 53 | } 54 | 55 | code { 56 | background-color: mix(#fff, $notice-color, 95%) 57 | } 58 | 59 | pre code { 60 | background-color: inherit; 61 | } 62 | 63 | ul { 64 | &:last-child { 65 | margin-bottom: 0; /* override*/ 66 | } 67 | } 68 | } 69 | 70 | /* Default notice */ 71 | 72 | .notice { 73 | @include notice($light-gray); 74 | } 75 | 76 | /* Primary notice */ 77 | 78 | .notice--primary { 79 | @include notice($primary-color); 80 | } 81 | 82 | /* Info notice */ 83 | 84 | .notice--info { 85 | @include notice($info-color); 86 | } 87 | 88 | /* Warning notice */ 89 | 90 | .notice--warning { 91 | @include notice($warning-color); 92 | } 93 | 94 | /* Success notice */ 95 | 96 | .notice--success { 97 | @include notice($success-color); 98 | } 99 | 100 | /* Danger notice */ 101 | 102 | .notice--danger { 103 | @include notice($danger-color); 104 | } 105 | -------------------------------------------------------------------------------- /_sass/minimal-mistakes/_mixins.scss: -------------------------------------------------------------------------------- 1 | /* ========================================================================== 2 | MIXINS 3 | ========================================================================== */ 4 | 5 | %tab-focus { 6 | /* Default*/ 7 | outline: thin dotted $focus-color; 8 | /* Webkit*/ 9 | outline: 5px auto $focus-color; 10 | outline-offset: -2px; 11 | } 12 | 13 | /* 14 | em function 15 | ========================================================================== */ 16 | 17 | @function em($target, $context: $doc-font-size) { 18 | @return ($target / $context) * 1em; 19 | } 20 | 21 | 22 | /* 23 | Bourbon clearfix 24 | ========================================================================== */ 25 | 26 | /* 27 | * Provides an easy way to include a clearfix for containing floats. 28 | * link http://cssmojo.com/latest_new_clearfix_so_far/ 29 | * 30 | * example scss - Usage 31 | * 32 | * .element { 33 | * @include clearfix; 34 | * } 35 | * 36 | * example css - CSS Output 37 | * 38 | * .element::after { 39 | * clear: both; 40 | * content: ""; 41 | * display: table; 42 | * } 43 | */ 44 | 45 | @mixin clearfix { 46 | clear: both; 47 | 48 | &::after { 49 | clear: both; 50 | content: ""; 51 | display: table; 52 | } 53 | } 54 | 55 | /* 56 | Compass YIQ Color Contrast 57 | https://github.com/easy-designs/yiq-color-contrast 58 | ========================================================================== */ 59 | 60 | @function yiq-is-light( 61 | $color, 62 | $threshold: $yiq-contrasted-threshold 63 | ) { 64 | $red: red($color); 65 | $green: green($color); 66 | $blue: blue($color); 67 | 68 | $yiq: (($red*299)+($green*587)+($blue*114))/1000; 69 | 70 | @if $yiq-debug { @debug $yiq, $threshold; } 71 | 72 | @return if($yiq >= $threshold, true, false); 73 | } 74 | 75 | @function yiq-contrast-color( 76 | $color, 77 | $dark: $yiq-contrasted-dark-default, 78 | $light: $yiq-contrasted-light-default, 79 | $threshold: $yiq-contrasted-threshold 80 | ) { 81 | @return if(yiq-is-light($color, $threshold), $yiq-contrasted-dark-default, $yiq-contrasted-light-default); 82 | } 83 | 84 | @mixin yiq-contrasted( 85 | $background-color, 86 | $dark: $yiq-contrasted-dark-default, 87 | $light: $yiq-contrasted-light-default, 88 | $threshold: $yiq-contrasted-threshold 89 | ) { 90 | background-color: $background-color; 91 | color: yiq-contrast-color($background-color, $dark, $light, $threshold); 92 | } -------------------------------------------------------------------------------- /.github/ISSUE_TEMPLATE/bug_report.md: -------------------------------------------------------------------------------- 1 | --- 2 | name: "Bug Report" 3 | about: "Is something not working as expected?" 4 | --- 5 | 6 | 19 | 20 | ## Environment 21 | 22 | 31 | 32 | - Minimal Mistakes version: 33 | - Ruby gem or remote theme version: 34 | - Jekyll version: 35 | - Git repository URL: 36 | - GitHub Pages hosted (if yes provide URL to site): 37 | - Operating system: 38 | 39 | ## Expected behavior 40 | 41 | 45 | 46 | ## Steps to reproduce the behavior 47 | 48 | 62 | 63 | ## Other 64 | 65 | 69 | -------------------------------------------------------------------------------- /assets/js/lunr/lunr-en.js: -------------------------------------------------------------------------------- 1 | --- 2 | layout: null 3 | --- 4 | 5 | var idx = lunr(function () { 6 | this.field('title') 7 | this.field('excerpt') 8 | this.field('categories') 9 | this.field('tags') 10 | this.ref('id') 11 | 12 | this.pipeline.remove(lunr.trimmer) 13 | 14 | for (var item in store) { 15 | this.add({ 16 | title: store[item].title, 17 | excerpt: store[item].excerpt, 18 | categories: store[item].categories, 19 | tags: store[item].tags, 20 | id: item 21 | }) 22 | } 23 | }); 24 | 25 | $(document).ready(function() { 26 | $('input#search').on('keyup', function () { 27 | var resultdiv = $('#results'); 28 | var query = $(this).val().toLowerCase(); 29 | var result = 30 | idx.query(function (q) { 31 | query.split(lunr.tokenizer.separator).forEach(function (term) { 32 | q.term(term, { boost: 100 }) 33 | if(query.lastIndexOf(" ") != query.length-1){ 34 | q.term(term, { usePipeline: false, wildcard: lunr.Query.wildcard.TRAILING, boost: 10 }) 35 | } 36 | if (term != ""){ 37 | q.term(term, { usePipeline: false, editDistance: 1, boost: 1 }) 38 | } 39 | }) 40 | }); 41 | resultdiv.empty(); 42 | resultdiv.prepend('

'+result.length+' {{ site.data.ui-text[site.locale].results_found | default: "Result(s) found" }}

'); 43 | for (var item in result) { 44 | var ref = result[item].ref; 45 | if(store[ref].teaser){ 46 | var searchitem = 47 | '
'+ 48 | '
'+ 49 | '

'+ 50 | ''+store[ref].title+''+ 51 | '

'+ 52 | '
'+ 53 | ''+ 54 | '
'+ 55 | '

'+store[ref].excerpt.split(" ").splice(0,20).join(" ")+'...

'+ 56 | '
'+ 57 | '
'; 58 | } 59 | else{ 60 | var searchitem = 61 | '
'+ 62 | '
'+ 63 | '

'+ 64 | ''+store[ref].title+''+ 65 | '

'+ 66 | '

'+store[ref].excerpt.split(" ").splice(0,20).join(" ")+'...

'+ 67 | '
'+ 68 | '
'; 69 | } 70 | resultdiv.append(searchitem); 71 | } 72 | }); 73 | }); 74 | -------------------------------------------------------------------------------- /_sass/minimal-mistakes/vendor/breakpoint/_legacy-settings.scss: -------------------------------------------------------------------------------- 1 | @mixin legacy-settings-warning { 2 | $legacyVars: ( 3 | 'default-media': 'default media', 4 | 'default-feature': 'default feature', 5 | 'force-media-all': 'force all media type', 6 | 'to-ems': 'to ems', 7 | 'resolutions': 'transform resolutions', 8 | 'no-queries': 'no queries', 9 | 'no-query-fallbacks': 'no query fallbacks', 10 | 'base-font-size': 'base font size', 11 | 'legacy-syntax': 'legacy syntax' 12 | ); 13 | 14 | @each $legacy, $new in $legacyVars { 15 | @if global-variable-exists('breakpoint-' + $legacy) { 16 | @warn "In order to avoid variable namspace collisions, we have updated the way to change settings for Breakpoint. Please change all instances of `$breakpoint-#{$legacy}: {{setting}}` to `@include breakpoint-set('#{$new}', {{setting}})`. Variable settings, as well as this warning will be deprecated in a future release." 17 | } 18 | }; 19 | 20 | ////////////////////////////// 21 | // Hand correct each setting 22 | ////////////////////////////// 23 | @if global-variable-exists('breakpoint-default-media') and $breakpoint-default-media != breakpoint-get('default media') { 24 | @include breakpoint-set('default media', $breakpoint-default-media); 25 | } 26 | @if global-variable-exists('breakpoint-default-feature') and $breakpoint-default-feature != breakpoint-get('default feature') { 27 | @include breakpoint-set('default feature', $breakpoint-default-feature); 28 | } 29 | @if global-variable-exists('breakpoint-force-media-all') and $breakpoint-force-media-all != breakpoint-get('force all media type') { 30 | @include breakpoint-set('force all media type', $breakpoint-force-media-all); 31 | } 32 | @if global-variable-exists('breakpoint-to-ems') and $breakpoint-to-ems != breakpoint-get('to ems') { 33 | @include breakpoint-set('to ems', $breakpoint-to-ems); 34 | } 35 | @if global-variable-exists('breakpoint-resolutions') and $breakpoint-resolutions != breakpoint-get('transform resolutions') { 36 | @include breakpoint-set('transform resolutions', $breakpoint-resolutions); 37 | } 38 | @if global-variable-exists('breakpoint-no-queries') and $breakpoint-no-queries != breakpoint-get('no queries') { 39 | @include breakpoint-set('no queries', $breakpoint-no-queries); 40 | } 41 | @if global-variable-exists('breakpoint-no-query-fallbacks') and $breakpoint-no-query-fallbacks != breakpoint-get('no query fallbacks') { 42 | @include breakpoint-set('no query fallbacks', $breakpoint-no-query-fallbacks); 43 | } 44 | @if global-variable-exists('breakpoint-base-font-size') and $breakpoint-base-font-size != breakpoint-get('base font size') { 45 | @include breakpoint-set('base font size', $breakpoint-base-font-size); 46 | } 47 | @if global-variable-exists('breakpoint-legacy-syntax') and $breakpoint-legacy-syntax != breakpoint-get('legacy syntax') { 48 | @include breakpoint-set('legacy syntax', $breakpoint-legacy-syntax); 49 | } 50 | } -------------------------------------------------------------------------------- /_sass/minimal-mistakes/_search.scss: -------------------------------------------------------------------------------- 1 | /* ========================================================================== 2 | SEARCH 3 | ========================================================================== */ 4 | 5 | .layout--search { 6 | .archive__item-teaser { 7 | margin-bottom: 0.25em; 8 | } 9 | } 10 | 11 | .search__toggle { 12 | margin-left: 1rem; 13 | margin-right: 1rem; 14 | height: $nav-toggle-height; 15 | border: 0; 16 | outline: none; 17 | color: $primary-color; 18 | background-color: transparent; 19 | cursor: pointer; 20 | -webkit-transition: 0.2s; 21 | transition: 0.2s; 22 | 23 | &:hover { 24 | color: mix(#000, $primary-color, 25%); 25 | } 26 | } 27 | 28 | .search-icon { 29 | width: 100%; 30 | height: 100%; 31 | } 32 | 33 | .search-content { 34 | display: none; 35 | visibility: hidden; 36 | padding-top: 1em; 37 | padding-bottom: 1em; 38 | 39 | &__inner-wrap { 40 | width: 100%; 41 | margin-left: auto; 42 | margin-right: auto; 43 | padding-left: 1em; 44 | padding-right: 1em; 45 | -webkit-animation: $intro-transition; 46 | animation: $intro-transition; 47 | -webkit-animation-delay: 0.15s; 48 | animation-delay: 0.15s; 49 | 50 | @include breakpoint($x-large) { 51 | max-width: $max-width; 52 | } 53 | 54 | } 55 | 56 | &__form { 57 | background-color: transparent; 58 | } 59 | 60 | .search-input { 61 | display: block; 62 | margin-bottom: 0; 63 | padding: 0; 64 | border: none; 65 | outline: none; 66 | box-shadow: none; 67 | background-color: transparent; 68 | font-size: $type-size-3; 69 | 70 | @include breakpoint($large) { 71 | font-size: $type-size-2; 72 | } 73 | 74 | @include breakpoint($x-large) { 75 | font-size: $type-size-1; 76 | } 77 | } 78 | 79 | &.is--visible { 80 | display: block; 81 | visibility: visible; 82 | 83 | &::after { 84 | content: ""; 85 | display: block; 86 | } 87 | } 88 | 89 | .results__found { 90 | margin-top: 0.5em; 91 | font-size: $type-size-6; 92 | } 93 | 94 | .archive__item { 95 | margin-bottom: 2em; 96 | 97 | @include breakpoint($large) { 98 | width: 75%; 99 | } 100 | 101 | @include breakpoint($x-large) { 102 | width: 50%; 103 | } 104 | } 105 | 106 | .archive__item-title { 107 | margin-top: 0; 108 | } 109 | 110 | .archive__item-excerpt { 111 | margin-bottom: 0; 112 | } 113 | } 114 | 115 | /* Algolia search */ 116 | 117 | .ais-search-box { 118 | max-width: 100% !important; 119 | margin-bottom: 2em; 120 | } 121 | 122 | .archive__item-title .ais-Highlight { 123 | color: $primary-color; 124 | font-style: normal; 125 | text-decoration: underline; 126 | } 127 | 128 | .archive__item-excerpt .ais-Highlight { 129 | color: $primary-color; 130 | font-style: normal; 131 | font-weight: bold; 132 | } 133 | -------------------------------------------------------------------------------- /_sass/minimal-mistakes/vendor/magnific-popup/_settings.scss: -------------------------------------------------------------------------------- 1 | //////////////////////// 2 | // Settings // 3 | //////////////////////// 4 | 5 | // overlay 6 | $mfp-overlay-color: #000; // Color of overlay screen 7 | $mfp-overlay-opacity: 0.8; // Opacity of overlay screen 8 | $mfp-shadow: 0 0 8px rgba(0, 0, 0, 0.6); // Shadow on image or iframe 9 | 10 | // spacing 11 | $mfp-popup-padding-left: 8px; // Padding from left and from right side 12 | $mfp-popup-padding-left-mobile: 6px; // Same as above, but is applied when width of window is less than 800px 13 | 14 | $mfp-z-index-base: 1040; // Base z-index of popup 15 | 16 | // controls 17 | $mfp-include-arrows: true; // Include styles for nav arrows 18 | $mfp-controls-opacity: 1; // Opacity of controls 19 | $mfp-controls-color: #fff; // Color of controls 20 | $mfp-controls-border-color: #fff; // Border color of controls 21 | $mfp-inner-close-icon-color: #fff; // Color of close button when inside 22 | $mfp-controls-text-color: #ccc; // Color of preloader and "1 of X" indicator 23 | $mfp-controls-text-color-hover: #fff; // Hover color of preloader and "1 of X" indicator 24 | $mfp-IE7support: true; // Very basic IE7 support 25 | 26 | // Iframe-type options 27 | $mfp-include-iframe-type: true; // Enable Iframe-type popups 28 | $mfp-iframe-padding-top: 40px; // Iframe padding top 29 | $mfp-iframe-background: #000; // Background color of iframes 30 | $mfp-iframe-max-width: 900px; // Maximum width of iframes 31 | $mfp-iframe-ratio: 9/16; // Ratio of iframe (9/16 = widescreen, 3/4 = standard, etc.) 32 | 33 | // Image-type options 34 | $mfp-include-image-type: true; // Enable Image-type popups 35 | $mfp-image-background: #444 !default; 36 | $mfp-image-padding-top: 40px; // Image padding top 37 | $mfp-image-padding-bottom: 40px; // Image padding bottom 38 | $mfp-include-mobile-layout-for-image: true; // Removes paddings from top and bottom 39 | 40 | // Image caption options 41 | $mfp-caption-title-color: #f3f3f3; // Caption title color 42 | $mfp-caption-subtitle-color: #bdbdbd; // Caption subtitle color 43 | .mfp-counter { font-family: $serif; } // Caption font family 44 | 45 | // A11y 46 | $mfp-use-visuallyhidden: false; -------------------------------------------------------------------------------- /_includes/page__hero.html: -------------------------------------------------------------------------------- 1 | {% capture overlay_img_path %}{{ page.header.overlay_image | relative_url }}{% endcapture %} 2 | 3 | {% if page.header.overlay_filter contains "rgba" %} 4 | {% capture overlay_filter %}{{ page.header.overlay_filter }}{% endcapture %} 5 | {% elsif page.header.overlay_filter %} 6 | {% capture overlay_filter %}rgba(0, 0, 0, {{ page.header.overlay_filter }}){% endcapture %} 7 | {% endif %} 8 | 9 | {% if page.header.image_description %} 10 | {% assign image_description = page.header.image_description %} 11 | {% else %} 12 | {% assign image_description = page.title %} 13 | {% endif %} 14 | 15 | {% assign image_description = image_description | markdownify | strip_html | strip_newlines | escape_once %} 16 | 17 |
20 | {% if page.header.overlay_color or page.header.overlay_image %} 21 |
22 |

23 | {% if paginator and site.paginate_show_page_num %} 24 | {{ site.title }}{% unless paginator.page == 1 %} {{ site.data.ui-text[site.locale].page | default: "Page" }} {{ paginator.page }}{% endunless %} 25 | {% else %} 26 | {{ page.title | default: site.title | markdownify | remove: "

" | remove: "

" }} 27 | {% endif %} 28 |

29 | {% if page.tagline %} 30 |

{{ page.tagline | markdownify | remove: "

" | remove: "

" }}

31 | {% elsif page.header.show_overlay_excerpt != false and page.excerpt %} 32 |

{{ page.excerpt | markdownify | remove: "

" | remove: "

" }}

33 | {% endif %} 34 | {% if page.read_time %} 35 |

{% include read-time.html %}

36 | {% endif %} 37 | {% if page.header.cta_url %} 38 |

{{ page.header.cta_label | default: site.data.ui-text[site.locale].more_label | default: "Learn More" }}

39 | {% endif %} 40 | {% if page.header.actions %} 41 |

42 | {% for action in page.header.actions %} 43 | {{ action.label | default: site.data.ui-text[site.locale].more_label | default: "Learn More" }} 44 | {% endfor %} 45 | {% endif %} 46 |

47 | {% else %} 48 | {{ image_description }} 49 | {% endif %} 50 | {% if page.header.caption %} 51 | {{ page.header.caption | markdownify | remove: "

" | remove: "

" }}
52 | {% endif %} 53 |
54 | -------------------------------------------------------------------------------- /_sass/minimal-mistakes/vendor/breakpoint/_breakpoint.scss: -------------------------------------------------------------------------------- 1 | ////////////////////////////// 2 | // Default Variables 3 | ////////////////////////////// 4 | $Breakpoint-Settings: ( 5 | 'default media': all, 6 | 'default feature': min-width, 7 | 'default pair': width, 8 | 9 | 'force all media type': false, 10 | 'to ems': false, 11 | 'transform resolutions': true, 12 | 13 | 'no queries': false, 14 | 'no query fallbacks': false, 15 | 16 | 'base font size': 16px, 17 | 18 | 'legacy syntax': false 19 | ); 20 | 21 | $breakpoint: () !default; 22 | 23 | ////////////////////////////// 24 | // Imports 25 | ////////////////////////////// 26 | @import "settings"; 27 | @import "context"; 28 | @import "helpers"; 29 | @import "parsers"; 30 | @import "no-query"; 31 | 32 | @import "respond-to"; 33 | 34 | @import "legacy-settings"; 35 | 36 | ////////////////////////////// 37 | // Breakpoint Mixin 38 | ////////////////////////////// 39 | 40 | @mixin breakpoint($query, $no-query: false) { 41 | @include legacy-settings-warning; 42 | 43 | // Reset contexts 44 | @include private-breakpoint-reset-contexts(); 45 | 46 | $breakpoint: breakpoint($query, false); 47 | 48 | $query-string: map-get($breakpoint, 'query'); 49 | $query-fallback: map-get($breakpoint, 'fallback'); 50 | 51 | $private-breakpoint-context-holder: map-get($breakpoint, 'context holder') !global; 52 | $private-breakpoint-query-count: map-get($breakpoint, 'query count') !global; 53 | 54 | // Allow for an as-needed override or usage of no query fallback. 55 | @if $no-query != false { 56 | $query-fallback: $no-query; 57 | } 58 | 59 | @if $query-fallback != false { 60 | $context-setter: private-breakpoint-set-context('no-query', $query-fallback); 61 | } 62 | 63 | // Print Out Query String 64 | @if not breakpoint-get('no queries') { 65 | @media #{$query-string} { 66 | @content; 67 | } 68 | } 69 | 70 | @if breakpoint-get('no query fallbacks') != false or breakpoint-get('no queries') == true { 71 | 72 | $type: type-of(breakpoint-get('no query fallbacks')); 73 | $print: false; 74 | 75 | @if ($type == 'bool') { 76 | $print: true; 77 | } 78 | @else if ($type == 'string') { 79 | @if $query-fallback == breakpoint-get('no query fallbacks') { 80 | $print: true; 81 | } 82 | } 83 | @else if ($type == 'list') { 84 | @each $wrapper in breakpoint-get('no query fallbacks') { 85 | @if $query-fallback == $wrapper { 86 | $print: true; 87 | } 88 | } 89 | } 90 | 91 | // Write Fallback 92 | @if ($query-fallback != false) and ($print == true) { 93 | $type-fallback: type-of($query-fallback); 94 | 95 | @if ($type-fallback != 'bool') { 96 | #{$query-fallback} & { 97 | @content; 98 | } 99 | } 100 | @else { 101 | @content; 102 | } 103 | } 104 | } 105 | 106 | @include private-breakpoint-reset-contexts(); 107 | } 108 | 109 | 110 | @mixin mq($query, $no-query: false) { 111 | @include breakpoint($query, $no-query) { 112 | @content; 113 | } 114 | } 115 | -------------------------------------------------------------------------------- /_sass/minimal-mistakes/vendor/breakpoint/_respond-to.scss: -------------------------------------------------------------------------------- 1 | //////////////////////// 2 | // Default the Breakpoints variable 3 | //////////////////////// 4 | $breakpoints: () !default; 5 | $BREAKPOINTS: () !default; 6 | 7 | //////////////////////// 8 | // Respond-to API Mixin 9 | //////////////////////// 10 | @mixin respond-to($context, $no-query: false) { 11 | @if length($breakpoints) > 0 and length($BREAKPOINTS) == 0 { 12 | @warn "In order to avoid variable namespace collisions, we have updated the way to add breakpoints for respond-to. Please change all instances of `$breakpoints: add-breakpoint()` to `@include add-breakpoint()`. The `add-breakpoint()` function will be deprecated in a future release."; 13 | $BREAKPOINTS: $breakpoints !global; 14 | $breakpoints: () !global; 15 | } 16 | 17 | @if type-of($BREAKPOINTS) != 'map' { 18 | // Just in case someone writes gibberish to the $breakpoints variable. 19 | @warn "Your breakpoints aren't a map! `respond-to` expects a map. Please check the value of $BREAKPOINTS variable."; 20 | @content; 21 | } 22 | @else if map-has-key($BREAKPOINTS, $context) { 23 | @include breakpoint(map-get($BREAKPOINTS, $context), $no-query) { 24 | @content; 25 | } 26 | } 27 | @else if not map-has-key($BREAKPOINTS, $context) { 28 | @warn "`#{$context}` isn't a defined breakpoint! Please add it using `$breakpoints: add-breakpoint(`#{$context}`, $value);`"; 29 | @content; 30 | } 31 | @else { 32 | @warn "You haven't created any breakpoints yet! Make some already! `@include add-breakpoint($name, $bkpt)`"; 33 | @content; 34 | } 35 | } 36 | 37 | ////////////////////////////// 38 | // Add Breakpoint to Breakpoints 39 | // TODO: Remove function in next release 40 | ////////////////////////////// 41 | @function add-breakpoint($name, $bkpt, $overwrite: false) { 42 | $output: ($name: $bkpt); 43 | 44 | @if length($breakpoints) == 0 { 45 | @return $output; 46 | } 47 | @else { 48 | @if map-has-key($breakpoints, $name) and $overwrite != true { 49 | @warn "You already have a breakpoint named `#{$name}`, please choose another breakpoint name, or pass in `$overwrite: true` to overwrite the previous breakpoint."; 50 | @return $breakpoints; 51 | } 52 | @else if not map-has-key($breakpoints, $name) or $overwrite == true { 53 | @return map-merge($breakpoints, $output); 54 | } 55 | } 56 | } 57 | 58 | @mixin add-breakpoint($name, $bkpt, $overwrite: false) { 59 | $output: ($name: $bkpt); 60 | 61 | @if length($BREAKPOINTS) == 0 { 62 | $BREAKPOINTS: $output !global; 63 | } 64 | @else { 65 | @if map-has-key($BREAKPOINTS, $name) and $overwrite != true { 66 | @warn "You already have a breakpoint named `#{$name}`, please choose another breakpoint name, or pass in `$overwrite: true` to overwrite the previous breakpoint."; 67 | $BREAKPOINTS: $BREAKPOINTS !global; 68 | } 69 | @else if not map-has-key($BREAKPOINTS, $name) or $overwrite == true { 70 | $BREAKPOINTS: map-merge($BREAKPOINTS, $output) !global; 71 | } 72 | } 73 | } 74 | 75 | @function get-breakpoint($name: false) { 76 | @if $name == false { 77 | @return $BREAKPOINTS; 78 | } 79 | @else { 80 | @return map-get($BREAKPOINTS, $name); 81 | } 82 | } 83 | -------------------------------------------------------------------------------- /_pages/profile.md: -------------------------------------------------------------------------------- 1 | --- 2 | permalink: /index.html/ 3 | title: "Hi there, I am Abhishek (Abby)" 4 | layout: single 5 | author_profile: true 6 | comments: true 7 | --- 8 | ### I am Senior Data Scientist based out of Singapore with a passion for problem solving and leveraging technology to add Buisness value. 👋 9 | #### Outside coding i enjoy Reading Manga and Cooking. 10 | #### Learning and working on Projects to keep myself updated with the latest in domain of Machine Learning and Natural Language Processing. 11 | 12 | As part of my current role as a Senior Data Scientist i spend time working with Data at peta-byte scale to identify patterns, generate predictions, recommendations and next best actions to enhance cusotmer experince and enhance the business value of our services offered to clients. 13 | 14 | My prior role gave me experince to identify and execute on opportunities to streamline business processes and enhancing core products by leveraging on new technologies and innovation such as Machine Learning, Cloud Native and RPA. 15 | 16 | Prior experience as a Project Manager and Client Relationship Manager for trade processing projects. 17 | 18 | Some Quick Bytes: 19 | - 👷 Sr Data Scientist 20 | * Product Recommendation framework for Millions of Customers. **_Peta-Byte Data_**, **_Distributed Compute: Spark, Ray_**, **_Transformers_** 21 | * Fraud Detection and Anti Phishing Solution for real time transaction screening and validation. **_Stream Processing_**, **_Deep Learning_** 22 | * Investment Strategy developed using Alternative Data and Machine Learning 23 | - 🔭 In my free time I’m currently working on ...NLP Projects such as: 24 | * [Transformer Tutorials](https://github.com/abhimishra91/transformers-tutorials): Notebooks to fine tune Transformers 25 | * [Project Insight](https://github.com/abhimishra91/insight): **NLP as a Service** 26 | - 🌱 I’m currently improving on ...C, Python: FastAI, Pytorch, TensorFlow, Streamlit, FastAPI, Transformers 27 | - 👯 I’m looking to collaborate on ... 28 | * [Transformer Tutorials](https://github.com/abhimishra91/transformers-tutorials) 29 | * [Project Insight](https://github.com/abhimishra91/insight) or any such project. 30 | - 👍 I’m certified as ... 31 | * AWS Solutions Architect Associate 32 | * PRINCE2 Practioner 33 | - 💬 Ask me about ...Anything 34 | - 😄 Pronouns: ... He/Him 35 | - ⚡ Fun fact: ... Big Time Manga Reader and Enjoy Cooking new dishes. 36 | 37 | ### Skills 38 | #### Language and Packages 39 |

python pytorch tensorflow

40 | 41 | #### Deployment 42 |

aws docker

43 | 44 | [![My github stats](https://github-readme-stats.vercel.app/api?username=abhimishra91&show_icons=true)](https://github.com/anuraghazra/github-readme-stats) 45 | -------------------------------------------------------------------------------- /assets/js/plugins/jquery.fitvids.js: -------------------------------------------------------------------------------- 1 | /*jshint browser:true */ 2 | /*! 3 | * FitVids 1.1 4 | * 5 | * Copyright 2013, Chris Coyier - http://css-tricks.com + Dave Rupert - http://daverupert.com 6 | * Credit to Thierry Koblentz - http://www.alistapart.com/articles/creating-intrinsic-ratios-for-video/ 7 | * Released under the WTFPL license - http://sam.zoy.org/wtfpl/ 8 | * 9 | */ 10 | 11 | ;(function( $ ){ 12 | 13 | 'use strict'; 14 | 15 | $.fn.fitVids = function( options ) { 16 | var settings = { 17 | customSelector: null, 18 | ignore: null 19 | }; 20 | 21 | if(!document.getElementById('fit-vids-style')) { 22 | // appendStyles: https://github.com/toddmotto/fluidvids/blob/master/dist/fluidvids.js 23 | var head = document.head || document.getElementsByTagName('head')[0]; 24 | var css = '.fluid-width-video-wrapper{width:100%;position:relative;padding:0;}.fluid-width-video-wrapper iframe,.fluid-width-video-wrapper object,.fluid-width-video-wrapper embed {position:absolute;top:0;left:0;width:100%;height:100%;}'; 25 | var div = document.createElement("div"); 26 | div.innerHTML = '

x

'; 27 | head.appendChild(div.childNodes[1]); 28 | } 29 | 30 | if ( options ) { 31 | $.extend( settings, options ); 32 | } 33 | 34 | return this.each(function(){ 35 | var selectors = [ 36 | 'iframe[src*="player.vimeo.com"]', 37 | 'iframe[src*="youtube.com"]', 38 | 'iframe[src*="youtube-nocookie.com"]', 39 | 'iframe[src*="kickstarter.com"][src*="video.html"]', 40 | 'object', 41 | 'embed' 42 | ]; 43 | 44 | if (settings.customSelector) { 45 | selectors.push(settings.customSelector); 46 | } 47 | 48 | var ignoreList = '.fitvidsignore'; 49 | 50 | if(settings.ignore) { 51 | ignoreList = ignoreList + ', ' + settings.ignore; 52 | } 53 | 54 | var $allVideos = $(this).find(selectors.join(',')); 55 | $allVideos = $allVideos.not('object object'); // SwfObj conflict patch 56 | $allVideos = $allVideos.not(ignoreList); // Disable FitVids on this video. 57 | 58 | $allVideos.each(function(count){ 59 | var $this = $(this); 60 | if($this.parents(ignoreList).length > 0) { 61 | return; // Disable FitVids on this video. 62 | } 63 | if (this.tagName.toLowerCase() === 'embed' && $this.parent('object').length || $this.parent('.fluid-width-video-wrapper').length) { return; } 64 | if ((!$this.css('height') && !$this.css('width')) && (isNaN($this.attr('height')) || isNaN($this.attr('width')))) 65 | { 66 | $this.attr('height', 9); 67 | $this.attr('width', 16); 68 | } 69 | var height = ( this.tagName.toLowerCase() === 'object' || ($this.attr('height') && !isNaN(parseInt($this.attr('height'), 10))) ) ? parseInt($this.attr('height'), 10) : $this.height(), 70 | width = !isNaN(parseInt($this.attr('width'), 10)) ? parseInt($this.attr('width'), 10) : $this.width(), 71 | aspectRatio = height / width; 72 | if(!$this.attr('id')){ 73 | var videoID = 'fitvid' + count; 74 | $this.attr('id', videoID); 75 | } 76 | $this.wrap('
').parent('.fluid-width-video-wrapper').css('padding-top', (aspectRatio * 100)+'%'); 77 | $this.removeAttr('height').removeAttr('width'); 78 | }); 79 | }); 80 | }; 81 | // Works with either jQuery or Zepto 82 | })( window.jQuery || window.Zepto ); -------------------------------------------------------------------------------- /_sass/minimal-mistakes/vendor/breakpoint/_context.scss: -------------------------------------------------------------------------------- 1 | ////////////////////////////// 2 | // Private Breakpoint Variables 3 | ////////////////////////////// 4 | $private-breakpoint-context-holder: (); 5 | $private-breakpoint-query-count: 0 !default; 6 | 7 | ////////////////////////////// 8 | // Breakpoint Has Context 9 | // Returns whether or not you are inside a Breakpoint query 10 | ////////////////////////////// 11 | @function breakpoint-has-context() { 12 | @if length($private-breakpoint-query-count) { 13 | @return true; 14 | } 15 | @else { 16 | @return false; 17 | } 18 | } 19 | 20 | ////////////////////////////// 21 | // Breakpoint Get Context 22 | // $feature: Input feature to get it's current MQ context. Returns false if no context 23 | ////////////////////////////// 24 | @function breakpoint-get-context($feature) { 25 | @if map-has-key($private-breakpoint-context-holder, $feature) { 26 | $get: map-get($private-breakpoint-context-holder, $feature); 27 | // Special handling of no-query from get side so /false/ prepends aren't returned 28 | @if $feature == 'no-query' { 29 | @if type-of($get) == 'list' and length($get) > 1 and nth($get, 1) == false { 30 | $get: nth($get, length($get)); 31 | } 32 | } 33 | @return $get; 34 | } 35 | @else { 36 | @if breakpoint-has-context() and $feature == 'media' { 37 | @return breakpoint-get('default media'); 38 | } 39 | @else { 40 | @return false; 41 | } 42 | } 43 | } 44 | 45 | ////////////////////////////// 46 | // Private function to set context 47 | ////////////////////////////// 48 | @function private-breakpoint-set-context($feature, $value) { 49 | @if $value == 'monochrome' { 50 | $feature: 'monochrome'; 51 | } 52 | 53 | $current: map-get($private-breakpoint-context-holder, $feature); 54 | @if $current and length($current) == $private-breakpoint-query-count { 55 | @warn "You have already queried against `#{$feature}`. Unexpected things may happen if you query against the same feature more than once in the same `and` query. Breakpoint is overwriting the current context with `#{$value}`"; 56 | } 57 | 58 | @if not map-has-key($private-breakpoint-context-holder, $feature) { 59 | $v-holder: (); 60 | @for $i from 1 to $private-breakpoint-query-count { 61 | @if $feature == 'media' { 62 | $v-holder: append($v-holder, breakpoint-get('default media')); 63 | } 64 | @else { 65 | $v-holder: append($v-holder, false); 66 | } 67 | } 68 | $v-holder: append($v-holder, $value); 69 | $private-breakpoint-context-holder: map-merge($private-breakpoint-context-holder, ($feature: $v-holder)) !global; 70 | } 71 | @else { 72 | $v-holder: map-get($private-breakpoint-context-holder, $feature); 73 | $length: length($v-holder); 74 | @for $i from $length to $private-breakpoint-query-count - 1 { 75 | @if $feature == 'media' { 76 | $v-holder: append($v-holder, breakpoint-get('default media')); 77 | } 78 | @else { 79 | $v-holder: append($v-holder, false); 80 | } 81 | } 82 | $v-holder: append($v-holder, $value); 83 | $private-breakpoint-context-holder: map-merge($private-breakpoint-context-holder, ($feature: $v-holder)) !global; 84 | } 85 | 86 | @return true; 87 | } 88 | 89 | ////////////////////////////// 90 | // Private function to reset context 91 | ////////////////////////////// 92 | @mixin private-breakpoint-reset-contexts { 93 | $private-breakpoint-context-holder: () !global; 94 | $private-breakpoint-query-count: 0 !global; 95 | } -------------------------------------------------------------------------------- /_includes/paginator.html: -------------------------------------------------------------------------------- 1 | {% if paginator.total_pages > 1 %} 2 | 69 | {% endif %} 70 | -------------------------------------------------------------------------------- /_sass/minimal-mistakes/vendor/susy/plugins/svg-grid/_svg-api.scss: -------------------------------------------------------------------------------- 1 | /// Plugin: SVG Grid Image 2 | /// ====================== 3 | /// @group plugin_svg-grid 4 | /// @see susy-svg-grid 5 | 6 | 7 | 8 | /// ## Overview 9 | /// If you want to generate svg-backgrounds 10 | /// for help visualizing and debugging your grids, 11 | /// import the SVG Grid Plugin. 12 | /// 13 | /// The plugin adds `svg-grid-colors` setting 14 | /// to your global defaults, 15 | /// which you can override in `$susy`. 16 | /// It also provides you with a new function, 17 | /// `susy-svg-grid()`, 18 | /// which will return inline svg for use in 19 | /// backgrounds or generated content. 20 | /// 21 | /// This function come with an unprefixed alias by default, 22 | /// using the `svg-grid` import. 23 | /// If you only only want prefixed versions of the API, 24 | /// import the `svg-grid/prefix` partial instead. 25 | /// 26 | /// @group plugin_svg-grid 27 | /// 28 | /// @example scss - importing the plugin 29 | /// // The full path to import Susy will depend on your setup… 30 | /// 31 | /// // unprefixed 32 | /// @import 'plugins/svg-grid'; 33 | /// 34 | /// // prefixed 35 | /// @import 'plugins/svg-grid/prefix'; 36 | /// 37 | /// @example scss - generating background grids 38 | /// .grid { 39 | /// background: susy-svg-grid() no-repeat scroll; 40 | /// } 41 | 42 | 43 | 44 | // SVG Grid 45 | // -------- 46 | /// Return inline svg-data in to display the grid. 47 | /// 48 | /// @group plugin_svg-grid 49 | /// 50 | /// @param {Map | List} $grid [$susy] - 51 | /// Map or shorthand defining the current grid 52 | /// @param {Color | List | null} $colors [null] - 53 | /// Column color, or list of colors for column-gradient, 54 | /// used to override the global `svg-grid-colors` setting 55 | /// @param {Length | null} $offset [null] - 56 | /// Manually override the default grid-image offset, 57 | /// to account for grid edges 58 | /// 59 | /// @return {String} - 60 | /// CSS inline-data SVG string, in `url()` format, 61 | /// for use in image or content properties 62 | /// @example scss 63 | /// .grid { 64 | /// background: susy-svg-grid() no-repeat scroll; 65 | /// } 66 | @function susy-svg-grid( 67 | $grid: $susy, 68 | $colors: null, 69 | $offset: null 70 | ) { 71 | // Grid parsing & normalizing 72 | $grid: susy-compile($grid, $context-only: true); 73 | 74 | // Color and gradient handling 75 | $gradient: ''; 76 | 77 | @if (not $colors) { 78 | $colors: susy-get('svg-grid-colors'); 79 | } 80 | 81 | @if length($colors) > 1 { 82 | $gradient: _susy-svg-gradient($colors); 83 | $colors: 'url(%23susy-svg-gradient)'; 84 | } @else { 85 | $colors: _susy-svg-color($colors); 86 | } 87 | 88 | // Get a default image-width 89 | $span: ( 90 | 'span': map-get($grid, 'columns'), 91 | 'spread': map-get($grid, 'container-spread'), 92 | ); 93 | $span: map-merge($grid, $span); 94 | $image-width: su-call('su-span', $span); 95 | $image-width: if((type-of($image-width) == 'number'), $image-width, 100%); 96 | 97 | // SVG construction 98 | $columns: map-get($grid, 'columns'); 99 | $offset: $offset or _susy-svg-offset($grid); 100 | 101 | $attrs: 'fill="#{$colors}" width="#{$image-width}"'; 102 | $svg: 'data:image/svg+xml,'; 103 | $svg: $svg + '%3Csvg xmlns="http://www.w3.org/2000/svg" #{$attrs} %3E'; 104 | $svg: $svg + $gradient; 105 | 106 | @for $column from 1 through length($columns) { 107 | $width: susy-span(1 narrow at $column, $grid); 108 | $x: _susy-svg-column-position($column, $grid); 109 | 110 | $svg: $svg + _susy-svg-rect($x, $width, $offset); 111 | } 112 | 113 | @return url('#{$svg}%3C/svg%3E'); 114 | } 115 | -------------------------------------------------------------------------------- /_sass/minimal-mistakes/vendor/susy/plugins/svg-grid/_svg-utilities.scss: -------------------------------------------------------------------------------- 1 | // SVG Utilities 2 | // ============= 3 | 4 | 5 | 6 | // SVG Validate Units 7 | // ------------------ 8 | /// Make sure a length is supported in svg 9 | /// 10 | /// @access private 11 | /// 12 | /// @param {Length} $length - 13 | /// The length to validate 14 | /// @param {String} $name [null] - 15 | /// Optional name of length origin, 16 | /// for error reporting 17 | /// 18 | /// @return {Length} - 19 | /// An svg-validated length, or comparable valid length 20 | @function _susy-svg-validate-units( 21 | $length, 22 | $name: null 23 | ) { 24 | $_svg-units: ('em', 'ex', 'px', 'pt', 'pc', 'cm', 'mm', 'in', '%'); 25 | $string: type-of($length) == 'string'; 26 | 27 | @if ($length == 0) or ($string) or index($_svg-units, unit($length)) { 28 | @return $length; 29 | } 30 | 31 | @return _susy-error( 32 | '`#{unit($length)}` #{$name} units are not supported in SVG', 33 | '_susy-svg-validate-units'); 34 | } 35 | 36 | 37 | 38 | // SVG Rect 39 | // -------- 40 | /// Build a single svg rectangle 41 | /// 42 | /// @access private 43 | /// 44 | /// @param {Length} $x - 45 | /// Horizontal position for the rectangle 46 | /// @param {Length} $width - 47 | /// Width of the rectangle 48 | /// @param {Length} $offset [null] - 49 | /// Offset the rectangle, to account for edge gutters 50 | /// 51 | /// @return {String} - 52 | /// Escaped string representing one svg rectangle 53 | @function _susy-svg-rect( 54 | $x, 55 | $width, 56 | $offset: null 57 | ) { 58 | $x: _susy-svg-validate-units($x); 59 | $width: _susy-svg-validate-units($width); 60 | $offset: if($offset == 0, null, $offset); 61 | 62 | @if (type-of($offset) == 'number') and (type-of($x) == 'number') { 63 | @if comparable($x, $offset) { 64 | $x: $x + $offset; 65 | } @else { 66 | $x: 'calc(#{$x} + #{$offset})'; 67 | } 68 | } @else if $offset and ($x != 0) { 69 | $x: 'calc(#{$x} + #{$offset})'; 70 | } @else if $offset { 71 | $x: $offset; 72 | } 73 | 74 | @return '%3Crect x="#{$x}" width="#{$width}" height="100%"/%3E'; 75 | } 76 | 77 | 78 | 79 | // SVG Color 80 | // --------- 81 | /// Stringify colors, and escape hex symbol 82 | /// 83 | /// @access private 84 | /// 85 | /// @param {Color} $color - 86 | /// Color to stringify and escape 87 | /// 88 | /// @return {String} - 89 | /// Escaped string value of color 90 | @function _susy-svg-color( 91 | $color 92 | ) { 93 | $color: inspect($color); // convert to string 94 | 95 | @if (str-index($color, '#') == 1) { 96 | $color: '%23' + str-slice($color, 2); 97 | } 98 | 99 | @return $color; 100 | } 101 | 102 | 103 | 104 | // SVG Gradient 105 | // ------------ 106 | /// Create a multi-color svg gradient 107 | /// 108 | /// @access private 109 | /// 110 | /// @param {List} $colors - 111 | /// List of colors to be equally spaced from `0%` to `100%` 112 | /// in each column rectangle 113 | /// 114 | /// @return {String} - 115 | /// Escaped string representing one svg gradient 116 | /// (`id="susy-svg-gradient"`) 117 | @function _susy-svg-gradient( 118 | $colors 119 | ) { 120 | $gradient: '%3Cdefs%3E%3ClinearGradient spreadMethod="pad"'; 121 | $gradient: '#{$gradient} id="susy-svg-gradient"'; 122 | $gradient: '#{$gradient} x1="0%" y1="0%" x2="100%" y2="0%"%3E'; 123 | 124 | @for $i from 1 through length($colors) { 125 | $color: _susy-svg-color(nth($colors, $i)); 126 | $offset: percentage(($i - 1) / (length($colors) - 1)); 127 | $stop: '%3Cstop offset="#{$offset}" style="stop-color:#{$color};" /%3E'; 128 | 129 | $gradient: $gradient + $stop; 130 | } 131 | 132 | @return $gradient + '%3C/linearGradient%3E%3C/defs%3E'; 133 | } 134 | -------------------------------------------------------------------------------- /staticman.yml: -------------------------------------------------------------------------------- 1 | # Name of the property. You can have multiple properties with completely 2 | # different config blocks for different sections of your site. 3 | # For example, you can have one property to handle comment submission and 4 | # another one to handle posts. 5 | # To encrypt strings use the following endpoint: 6 | # https://api.staticman.net/v2/encrypt/{TEXT TO BE ENCRYPTED} 7 | 8 | comments: 9 | # (*) REQUIRED 10 | # 11 | # Names of the fields the form is allowed to submit. If a field that is 12 | # not here is part of the request, an error will be thrown. 13 | allowedFields: ["name", "email", "url", "message"] 14 | 15 | # (*) REQUIRED WHEN USING NOTIFICATIONS 16 | # 17 | # When allowedOrigins is defined, only requests sent from one of the domains 18 | # listed will be accepted. The origin is sent as part as the `options` object 19 | # (e.g. {% endif %} 22 | {% if page.excerpt %}{% endif %} 23 | {% if page.date %}{% endif %} 24 | {% if page.last_modified_at %}{% endif %} 25 | 26 |
27 | {% unless page.header.overlay_color or page.header.overlay_image %} 28 |
29 | {% if page.title %}

{{ page.title | markdownify | remove: "

" | remove: "

" }}

{% endif %} 30 | {% if page.read_time %} 31 |

{% include read-time.html %}

32 | {% endif %} 33 |
34 | {% if page.share %}{% include social-share.html %}{% endif %} 35 | {% endunless %} 36 | 37 |
38 | {% if page.toc %} 39 | 45 | {% endif %} 46 | {{ content }} 47 | {% if page.link %}
{{ site.data.ui-text[site.locale].ext_link_label | default: "Direct Link" }}
{% endif %} 48 |
49 | 50 | 57 | 58 | 59 | {% include post_pagination.html %} 60 |
61 | 62 | {% if jekyll.environment == 'production' and site.comments.provider and page.comments %} 63 | {% include comments.html %} 64 | {% endif %} 65 | 66 | 67 | {% comment %}{% endcomment %} 68 | {% if page.id and page.related and site.related_posts.size > 0 %} 69 | 77 | {% comment %}{% endcomment %} 78 | {% elsif page.id and page.related %} 79 | 90 | {% endif %} 91 | 92 | -------------------------------------------------------------------------------- /_layouts/compress.html: -------------------------------------------------------------------------------- 1 | --- 2 | # Jekyll layout that compresses HTML 3 | # v3.1.0 4 | # http://jch.penibelst.de/ 5 | # © 2014–2015 Anatol Broder 6 | # MIT License 7 | --- 8 | 9 | {% capture _LINE_FEED %} 10 | {% endcapture %}{% if site.compress_html.ignore.envs contains jekyll.environment or site.compress_html.ignore.envs == "all" %}{{ content }}{% else %}{% capture _content %}{{ content }}{% endcapture %}{% assign _profile = site.compress_html.profile %}{% if site.compress_html.endings == "all" %}{% assign _endings = "html head body li dt dd optgroup option colgroup caption thead tbody tfoot tr td th" | split: " " %}{% else %}{% assign _endings = site.compress_html.endings %}{% endif %}{% for _element in _endings %}{% capture _end %}{% endcapture %}{% assign _content = _content | remove: _end %}{% endfor %}{% if _profile and _endings %}{% assign _profile_endings = _content | size | plus: 1 %}{% endif %}{% for _element in site.compress_html.startings %}{% capture _start %}<{{ _element }}>{% endcapture %}{% assign _content = _content | remove: _start %}{% endfor %}{% if _profile and site.compress_html.startings %}{% assign _profile_startings = _content | size | plus: 1 %}{% endif %}{% if site.compress_html.comments == "all" %}{% assign _comments = "" | split: " " %}{% else %}{% assign _comments = site.compress_html.comments %}{% endif %}{% if _comments.size == 2 %}{% capture _comment_befores %}.{{ _content }}{% endcapture %}{% assign _comment_befores = _comment_befores | split: _comments.first %}{% for _comment_before in _comment_befores %}{% if forloop.first %}{% continue %}{% endif %}{% capture _comment_outside %}{% if _carry %}{{ _comments.first }}{% endif %}{{ _comment_before }}{% endcapture %}{% capture _comment %}{% unless _carry %}{{ _comments.first }}{% endunless %}{{ _comment_outside | split: _comments.last | first }}{% if _comment_outside contains _comments.last %}{{ _comments.last }}{% assign _carry = false %}{% else %}{% assign _carry = true %}{% endif %}{% endcapture %}{% assign _content = _content | remove_first: _comment %}{% endfor %}{% if _profile %}{% assign _profile_comments = _content | size | plus: 1 %}{% endif %}{% endif %}{% assign _pre_befores = _content | split: "" %}{% assign _pres_after = "" %}{% if _pres.size != 0 %}{% if site.compress_html.blanklines %}{% assign _lines = _pres.last | split: _LINE_FEED %}{% capture _pres_after %}{% for _line in _lines %}{% assign _trimmed = _line | split: " " | join: " " %}{% if _trimmed != empty or forloop.last %}{% unless forloop.first %}{{ _LINE_FEED }}{% endunless %}{{ _line }}{% endif %}{% endfor %}{% endcapture %}{% else %}{% assign _pres_after = _pres.last | split: " " | join: " " %}{% endif %}{% endif %}{% capture _content %}{{ _content }}{% if _pre_before contains "" %}{% endif %}{% unless _pre_before contains "" and _pres.size == 1 %}{{ _pres_after }}{% endunless %}{% endcapture %}{% endfor %}{% if _profile %}{% assign _profile_collapse = _content | size | plus: 1 %}{% endif %}{% if site.compress_html.clippings == "all" %}{% assign _clippings = "html head title base link meta style body article section nav aside h1 h2 h3 h4 h5 h6 hgroup header footer address p hr blockquote ol ul li dl dt dd figure figcaption main div table caption colgroup col tbody thead tfoot tr td th" | split: " " %}{% else %}{% assign _clippings = site.compress_html.clippings %}{% endif %}{% for _element in _clippings %}{% assign _edges = " ;; ;" | replace: "e", _element | split: ";" %}{% assign _content = _content | replace: _edges[0], _edges[1] | replace: _edges[2], _edges[3] | replace: _edges[4], _edges[5] %}{% endfor %}{% if _profile and _clippings %}{% assign _profile_clippings = _content | size | plus: 1 %}{% endif %}{{ _content }}{% if _profile %}
Step Bytes
raw {{ content | size }}{% if _profile_endings %}
endings {{ _profile_endings }}{% endif %}{% if _profile_startings %}
startings {{ _profile_startings }}{% endif %}{% if _profile_comments %}
comments {{ _profile_comments }}{% endif %}{% if _profile_collapse %}
collapse {{ _profile_collapse }}{% endif %}{% if _profile_clippings %}
clippings {{ _profile_clippings }}{% endif %}
{% endif %}{% endif %} 11 | -------------------------------------------------------------------------------- /_sass/minimal-mistakes/_reset.scss: -------------------------------------------------------------------------------- 1 | /* ========================================================================== 2 | STYLE RESETS 3 | ========================================================================== */ 4 | 5 | * { box-sizing: border-box; } 6 | 7 | html { 8 | /* apply a natural box layout model to all elements */ 9 | box-sizing: border-box; 10 | background-color: $background-color; 11 | font-size: 16px; 12 | 13 | @include breakpoint($medium) { 14 | font-size: 18px; 15 | } 16 | 17 | @include breakpoint($large) { 18 | font-size: 20px; 19 | } 20 | 21 | @include breakpoint($x-large) { 22 | font-size: 22px; 23 | } 24 | 25 | -webkit-text-size-adjust: 100%; 26 | -ms-text-size-adjust: 100%; 27 | } 28 | 29 | /* Remove margin */ 30 | 31 | body { margin: 0; } 32 | 33 | /* Selected elements */ 34 | 35 | ::-moz-selection { 36 | color: #fff; 37 | background: #000; 38 | } 39 | 40 | ::selection { 41 | color: #fff; 42 | background: #000; 43 | } 44 | 45 | /* Display HTML5 elements in IE6-9 and FF3 */ 46 | 47 | article, 48 | aside, 49 | details, 50 | figcaption, 51 | figure, 52 | footer, 53 | header, 54 | hgroup, 55 | main, 56 | nav, 57 | section { 58 | display: block; 59 | } 60 | 61 | /* Display block in IE6-9 and FF3 */ 62 | 63 | audio, 64 | canvas, 65 | video { 66 | display: inline-block; 67 | *display: inline; 68 | *zoom: 1; 69 | } 70 | 71 | /* Prevents modern browsers from displaying 'audio' without controls */ 72 | 73 | audio:not([controls]) { 74 | display: none; 75 | } 76 | 77 | a { 78 | color: $link-color; 79 | } 80 | 81 | /* Apply focus state */ 82 | 83 | a:focus { 84 | @extend %tab-focus; 85 | } 86 | 87 | /* Remove outline from links */ 88 | 89 | a:hover, 90 | a:active { 91 | outline: 0; 92 | } 93 | 94 | /* Prevent sub and sup affecting line-height in all browsers */ 95 | 96 | sub, 97 | sup { 98 | position: relative; 99 | font-size: 75%; 100 | line-height: 0; 101 | vertical-align: baseline; 102 | } 103 | 104 | sup { 105 | top: -0.5em; 106 | } 107 | 108 | sub { 109 | bottom: -0.25em; 110 | } 111 | 112 | /* img border in anchor's and image quality */ 113 | 114 | img { 115 | /* Responsive images (ensure images don't scale beyond their parents) */ 116 | max-width: 100%; /* part 1: Set a maximum relative to the parent*/ 117 | width: auto\9; /* IE7-8 need help adjusting responsive images*/ 118 | height: auto; /* part 2: Scale the height according to the width, otherwise you get stretching*/ 119 | 120 | vertical-align: middle; 121 | border: 0; 122 | -ms-interpolation-mode: bicubic; 123 | } 124 | 125 | /* Prevent max-width from affecting Google Maps */ 126 | 127 | #map_canvas img, 128 | .google-maps img { 129 | max-width: none; 130 | } 131 | 132 | /* Consistent form font size in all browsers, margin changes, misc */ 133 | 134 | button, 135 | input, 136 | select, 137 | textarea { 138 | margin: 0; 139 | font-size: 100%; 140 | vertical-align: middle; 141 | } 142 | 143 | button, 144 | input { 145 | *overflow: visible; /* inner spacing ie IE6/7*/ 146 | line-height: normal; /* FF3/4 have !important on line-height in UA stylesheet*/ 147 | } 148 | 149 | button::-moz-focus-inner, 150 | input::-moz-focus-inner { /* inner padding and border oddities in FF3/4*/ 151 | padding: 0; 152 | border: 0; 153 | } 154 | 155 | button, 156 | html input[type="button"], // avoid the WebKit bug in Android 4.0.* where (2) destroys native `audio` and `video` controls 157 | input[type="reset"], 158 | input[type="submit"] { 159 | -webkit-appearance: button; /* corrects inability to style clickable `input` types in iOS*/ 160 | cursor: pointer; /* improves usability and consistency of cursor style between image-type `input` and others*/ 161 | } 162 | 163 | label, 164 | select, 165 | button, 166 | input[type="button"], 167 | input[type="reset"], 168 | input[type="submit"], 169 | input[type="radio"], 170 | input[type="checkbox"] { 171 | cursor: pointer; /* improves usability and consistency of cursor style between image-type `input` and others*/ 172 | } 173 | 174 | input[type="search"] { /* Appearance in Safari/Chrome*/ 175 | box-sizing: border-box; 176 | -webkit-appearance: textfield; 177 | } 178 | 179 | input[type="search"]::-webkit-search-decoration, 180 | input[type="search"]::-webkit-search-cancel-button { 181 | -webkit-appearance: none; /* inner-padding issues in Chrome OSX, Safari 5*/ 182 | } 183 | 184 | textarea { 185 | overflow: auto; /* remove vertical scrollbar in IE6-9*/ 186 | vertical-align: top; /* readability and alignment cross-browser*/ 187 | } -------------------------------------------------------------------------------- /_sass/minimal-mistakes/vendor/susy/susy/_utilities.scss: -------------------------------------------------------------------------------- 1 | // Sass Utilities 2 | // ============== 3 | // - Susy Error Output Override [variable] 4 | // - Susy Error [function] 5 | 6 | 7 | 8 | // Susy Error Output Override 9 | // -------------------------- 10 | /// Turn off error output for testing 11 | /// @group x-utility 12 | /// @access private 13 | $_susy-error-output-override: false !default; 14 | 15 | 16 | 17 | // Susy Error 18 | // ---------- 19 | /// Optionally return error messages without failing, 20 | /// as a way to test error cases 21 | /// 22 | /// @group x-utility 23 | /// @access private 24 | /// 25 | /// @param {string} $message - 26 | /// A useful error message, explaining the problem 27 | /// @param {string} $source - 28 | /// The original source of the error for debugging 29 | /// @param {bool} $override [$_susy-error-output-override] - 30 | /// Optionally return the error rather than failing 31 | /// @return {string} - 32 | /// Combined error with source and message 33 | /// @throws When `$override == true` 34 | @function _susy-error( 35 | $message, 36 | $source, 37 | $override: $_susy-error-output-override 38 | ) { 39 | @if $override { 40 | @return 'ERROR [#{$source}] #{$message}'; 41 | } 42 | 43 | @error '[#{$source}] #{$message}'; 44 | } 45 | 46 | 47 | // Su Is Comparable 48 | // ---------------- 49 | /// Check that the units in a grid are comparable 50 | /// 51 | /// @group x-validation 52 | /// @access private 53 | /// 54 | /// @param {numbers} $lengths… - 55 | /// Arglist of all the number values to compare 56 | /// (columns, gutters, span, etc) 57 | /// 58 | /// @return {'fluid' | 'static' | false} - 59 | /// The type of span (fluid or static) when units match, 60 | /// or `false` for mismatched units 61 | @function _su-is-comparable( 62 | $lengths... 63 | ) { 64 | $first: nth($lengths, 1); 65 | 66 | @if (length($lengths) == 1) { 67 | @return if(unitless($first), 'fluid', 'static'); 68 | } 69 | 70 | @for $i from 2 through length($lengths) { 71 | $comp: nth($lengths, $i); 72 | 73 | $fail: not comparable($first, $comp); 74 | $fail: $fail or (unitless($first) and not unitless($comp)); 75 | $fail: $fail or (unitless($comp) and not unitless($first)); 76 | 77 | @if $fail { 78 | @return false; 79 | } 80 | } 81 | 82 | @return if(unitless($first), 'fluid', 'static'); 83 | } 84 | 85 | 86 | // Su Map Add Units 87 | // ---------------- 88 | /// The calc features use a map of units and values 89 | /// to compile the proper algorythm. 90 | /// This function adds a new value to any comparable existing unit/value, 91 | /// or adds a new unit/value pair to the map 92 | /// 93 | /// @group x-utility 94 | /// @access private 95 | /// 96 | /// @param {map} $map - 97 | /// A map of unit/value pairs, e.g. ('px': 120px) 98 | /// @param {length} $value - 99 | /// A new length to be added to the map 100 | /// @return {map} - 101 | /// The updated map, with new value added 102 | /// 103 | /// @example scss - 104 | /// $map: (0px: 120px); 105 | /// $map: _su-map-add-units($map, 1in); // add a comparable unit 106 | /// $map: _su-map-add-units($map, 3vw); // add a new unit 107 | /// 108 | /// @each $units, $value in $map { 109 | /// /* #{$units}: #{$value} */ 110 | /// } 111 | @function _su-map-add-units( 112 | $map, 113 | $value 114 | ) { 115 | $unit: $value * 0; 116 | $has: map-get($map, $unit) or 0; 117 | 118 | @if ($has == 0) { 119 | @each $try, $could in $map { 120 | $match: comparable($try, $value); 121 | $unit: if($match, $try, $unit); 122 | $has: if($match, $could, $has); 123 | } 124 | } 125 | 126 | @return map-merge($map, ($unit: $has + $value)); 127 | } 128 | 129 | 130 | // Susy Flatten 131 | // ------------ 132 | /// Flatten a multidimensional list 133 | /// 134 | /// @group x-utility 135 | /// @access private 136 | /// 137 | /// @param {list} $list - 138 | /// The list to be flattened 139 | /// @return {list} - 140 | /// The flattened list 141 | /// 142 | /// @example scss - 143 | /// $list: 120px (30em 30em) 120px; 144 | /// /* #{_susy-flatten($list)} */ 145 | @function _susy-flatten( 146 | $list 147 | ) { 148 | $flat: (); 149 | 150 | // Don't iterate over maps 151 | @if (type-of($list) == 'map') { 152 | @return $list; 153 | } 154 | 155 | // Iterate over lists (or single items) 156 | @each $item in $list { 157 | @if (type-of($item) == 'list') { 158 | $item: _susy-flatten($item); 159 | $flat: join($flat, $item); 160 | } @else { 161 | $flat: append($flat, $item); 162 | } 163 | } 164 | 165 | // Return flattened list 166 | @return $flat; 167 | } 168 | -------------------------------------------------------------------------------- /assets/js/_main.js: -------------------------------------------------------------------------------- 1 | /* ========================================================================== 2 | jQuery plugin settings and other scripts 3 | ========================================================================== */ 4 | 5 | $(document).ready(function() { 6 | // FitVids init 7 | $("#main").fitVids(); 8 | 9 | // Sticky sidebar 10 | var stickySideBar = function() { 11 | var show = 12 | $(".author__urls-wrapper button").length === 0 13 | ? $(window).width() > 1024 // width should match $large Sass variable 14 | : !$(".author__urls-wrapper button").is(":visible"); 15 | if (show) { 16 | // fix 17 | $(".sidebar").addClass("sticky"); 18 | } else { 19 | // unfix 20 | $(".sidebar").removeClass("sticky"); 21 | } 22 | }; 23 | 24 | stickySideBar(); 25 | 26 | $(window).resize(function() { 27 | stickySideBar(); 28 | }); 29 | 30 | // Follow menu drop down 31 | $(".author__urls-wrapper button").on("click", function() { 32 | $(".author__urls").toggleClass("is--visible"); 33 | $(".author__urls-wrapper button").toggleClass("open"); 34 | }); 35 | 36 | // Close search screen with Esc key 37 | $(document).keyup(function(e) { 38 | if (e.keyCode === 27) { 39 | if ($(".initial-content").hasClass("is--hidden")) { 40 | $(".search-content").toggleClass("is--visible"); 41 | $(".initial-content").toggleClass("is--hidden"); 42 | } 43 | } 44 | }); 45 | 46 | // Search toggle 47 | $(".search__toggle").on("click", function() { 48 | $(".search-content").toggleClass("is--visible"); 49 | $(".initial-content").toggleClass("is--hidden"); 50 | // set focus on input 51 | setTimeout(function() { 52 | $(".search-content input").focus(); 53 | }, 400); 54 | }); 55 | 56 | // Smooth scrolling 57 | var scroll = new SmoothScroll('a[href*="#"]', { 58 | offset: 20, 59 | speed: 400, 60 | speedAsDuration: true, 61 | durationMax: 500 62 | }); 63 | 64 | // Gumshoe scroll spy init 65 | if($("nav.toc").length > 0) { 66 | var spy = new Gumshoe("nav.toc a", { 67 | // Active classes 68 | navClass: "active", // applied to the nav list item 69 | contentClass: "active", // applied to the content 70 | 71 | // Nested navigation 72 | nested: false, // if true, add classes to parents of active link 73 | nestedClass: "active", // applied to the parent items 74 | 75 | // Offset & reflow 76 | offset: 20, // how far from the top of the page to activate a content area 77 | reflow: true, // if true, listen for reflows 78 | 79 | // Event support 80 | events: true // if true, emit custom events 81 | }); 82 | } 83 | 84 | // add lightbox class to all image links 85 | $( 86 | "a[href$='.jpg'],a[href$='.jpeg'],a[href$='.JPG'],a[href$='.png'],a[href$='.gif']" 87 | ).addClass("image-popup"); 88 | 89 | // Magnific-Popup options 90 | $(".image-popup").magnificPopup({ 91 | // disableOn: function() { 92 | // if( $(window).width() < 500 ) { 93 | // return false; 94 | // } 95 | // return true; 96 | // }, 97 | type: "image", 98 | tLoading: "Loading image #%curr%...", 99 | gallery: { 100 | enabled: true, 101 | navigateByImgClick: true, 102 | preload: [0, 1] // Will preload 0 - before current, and 1 after the current image 103 | }, 104 | image: { 105 | tError: 'Image #%curr% could not be loaded.' 106 | }, 107 | removalDelay: 500, // Delay in milliseconds before popup is removed 108 | // Class that is added to body when popup is open. 109 | // make it unique to apply your CSS animations just to this exact popup 110 | mainClass: "mfp-zoom-in", 111 | callbacks: { 112 | beforeOpen: function() { 113 | // just a hack that adds mfp-anim class to markup 114 | this.st.image.markup = this.st.image.markup.replace( 115 | "mfp-figure", 116 | "mfp-figure mfp-with-anim" 117 | ); 118 | } 119 | }, 120 | closeOnContentClick: true, 121 | midClick: true // allow opening popup on middle mouse click. Always set it to true if you don't provide alternative source. 122 | }); 123 | 124 | // Add anchors for headings 125 | $('.page__content').find('h1, h2, h3, h4, h5, h6').each(function() { 126 | var id = $(this).attr('id'); 127 | if (id) { 128 | var anchor = document.createElement("a"); 129 | anchor.className = 'header-link'; 130 | anchor.href = '#' + id; 131 | anchor.innerHTML = 'Permalink'; 132 | anchor.title = "Permalink"; 133 | $(this).append(anchor); 134 | } 135 | }); 136 | }); 137 | -------------------------------------------------------------------------------- /_sass/minimal-mistakes/_print.scss: -------------------------------------------------------------------------------- 1 | /* ========================================================================== 2 | PRINT STYLES 3 | ========================================================================== */ 4 | 5 | @media print { 6 | 7 | [hidden] { 8 | display: none; 9 | } 10 | 11 | * { 12 | -moz-box-sizing: border-box; 13 | -webkit-box-sizing: border-box; 14 | box-sizing: border-box; 15 | } 16 | 17 | html { 18 | margin: 0; 19 | padding: 0; 20 | min-height: auto !important; 21 | font-size: 16px; 22 | } 23 | 24 | body { 25 | margin: 0 auto; 26 | background: #fff !important; 27 | color: #000 !important; 28 | font-size: 1rem; 29 | line-height: 1.5; 30 | -moz-osx-font-smoothing: grayscale; 31 | -webkit-font-smoothing: antialiased; 32 | text-rendering: optimizeLegibility; 33 | } 34 | 35 | h1, 36 | h2, 37 | h3, 38 | h4, 39 | h5, 40 | h6 { 41 | color: #000; 42 | line-height: 1.2; 43 | margin-bottom: 0.75rem; 44 | margin-top: 0; 45 | } 46 | 47 | h1 { 48 | font-size: 2.5rem; 49 | } 50 | 51 | h2 { 52 | font-size: 2rem; 53 | } 54 | 55 | h3 { 56 | font-size: 1.75rem; 57 | } 58 | 59 | h4 { 60 | font-size: 1.5rem; 61 | } 62 | 63 | h5 { 64 | font-size: 1.25rem; 65 | } 66 | 67 | h6 { 68 | font-size: 1rem; 69 | } 70 | 71 | a, 72 | a:visited { 73 | color: #000; 74 | text-decoration: underline; 75 | word-wrap: break-word; 76 | } 77 | 78 | table { 79 | border-collapse: collapse; 80 | } 81 | 82 | thead { 83 | display: table-header-group; 84 | } 85 | 86 | table, 87 | th, 88 | td { 89 | border-bottom: 1px solid #000; 90 | } 91 | 92 | td, 93 | th { 94 | padding: 8px 16px; 95 | } 96 | 97 | img { 98 | border: 0; 99 | display: block; 100 | max-width: 100% !important; 101 | vertical-align: middle; 102 | } 103 | 104 | hr { 105 | border: 0; 106 | border-bottom: 2px solid #bbb; 107 | height: 0; 108 | margin: 2.25rem 0; 109 | padding: 0; 110 | } 111 | 112 | dt { 113 | font-weight: bold; 114 | } 115 | 116 | dd { 117 | margin: 0; 118 | margin-bottom: 0.75rem; 119 | } 120 | 121 | abbr[title], 122 | acronym[title] { 123 | border: 0; 124 | text-decoration: none; 125 | } 126 | 127 | table, 128 | blockquote, 129 | pre, 130 | code, 131 | figure, 132 | li, 133 | hr, 134 | ul, 135 | ol, 136 | a, 137 | tr { 138 | page-break-inside: avoid; 139 | } 140 | 141 | h2, 142 | h3, 143 | h4, 144 | p, 145 | a { 146 | orphans: 3; 147 | widows: 3; 148 | } 149 | 150 | h1, 151 | h2, 152 | h3, 153 | h4, 154 | h5, 155 | h6 { 156 | page-break-after: avoid; 157 | page-break-inside: avoid; 158 | } 159 | 160 | h1 + p, 161 | h2 + p, 162 | h3 + p { 163 | page-break-before: avoid; 164 | } 165 | 166 | img { 167 | page-break-after: auto; 168 | page-break-before: auto; 169 | page-break-inside: avoid; 170 | } 171 | 172 | pre { 173 | white-space: pre-wrap !important; 174 | word-wrap: break-word; 175 | } 176 | 177 | a[href^='http://']:after, 178 | a[href^='https://']:after, 179 | a[href^='ftp://']:after { 180 | content: " (" attr(href) ")"; 181 | font-size: 80%; 182 | } 183 | 184 | abbr[title]:after, 185 | acronym[title]:after { 186 | content: " (" attr(title) ")"; 187 | } 188 | 189 | #main { 190 | max-width: 100%; 191 | } 192 | 193 | .page { 194 | margin: 0; 195 | padding: 0; 196 | width: 100%; 197 | } 198 | 199 | .page-break, 200 | .page-break-before { 201 | page-break-before: always; 202 | } 203 | 204 | .page-break-after { 205 | page-break-after: always; 206 | } 207 | 208 | .no-print { 209 | display: none; 210 | } 211 | 212 | a.no-reformat:after { 213 | content: ''; 214 | } 215 | 216 | abbr[title].no-reformat:after, 217 | acronym[title].no-reformat:after { 218 | content: ''; 219 | } 220 | 221 | .page__hero-caption { 222 | color: #000 !important; 223 | background: #fff !important; 224 | opacity: 1; 225 | 226 | a { 227 | color: #000 !important; 228 | } 229 | } 230 | 231 | /* 232 | Hide the following elements on print 233 | ========================================================================== */ 234 | 235 | .masthead, 236 | .toc, 237 | .page__share, 238 | .page__related, 239 | .pagination, 240 | .ads, 241 | .page__footer, 242 | .page__comments-form, 243 | .author__avatar, 244 | .author__content, 245 | .author__urls-wrapper, 246 | .nav__list, 247 | .sidebar, 248 | .adsbygoogle { 249 | display: none !important; 250 | height: 1px !important; 251 | } 252 | } -------------------------------------------------------------------------------- /_includes/toc.html: -------------------------------------------------------------------------------- 1 | {% capture tocWorkspace %} 2 | {% comment %} 3 | Version 1.0.8 4 | https://github.com/allejo/jekyll-toc 5 | 6 | "...like all things liquid - where there's a will, and ~36 hours to spare, there's usually a/some way" ~jaybe 7 | 8 | Usage: 9 | {% include toc.html html=content sanitize=true class="inline_toc" id="my_toc" h_min=2 h_max=3 %} 10 | 11 | Parameters: 12 | * html (string) - the HTML of compiled markdown generated by kramdown in Jekyll 13 | 14 | Optional Parameters: 15 | * sanitize (bool) : false - when set to true, the headers will be stripped of any HTML in the TOC 16 | * class (string) : '' - a CSS class assigned to the TOC 17 | * id (string) : '' - an ID to assigned to the TOC 18 | * h_min (int) : 1 - the minimum TOC header level to use; any header lower than this value will be ignored 19 | * h_max (int) : 6 - the maximum TOC header level to use; any header greater than this value will be ignored 20 | * ordered (bool) : false - when set to true, an ordered list will be outputted instead of an unordered list 21 | * item_class (string) : '' - add custom class(es) for each list item; has support for '%level%' placeholder, which is the current heading level 22 | * baseurl (string) : '' - add a base url to the TOC links for when your TOC is on another page than the actual content 23 | * anchor_class (string) : '' - add custom class(es) for each anchor element 24 | 25 | Output: 26 | An ordered or unordered list representing the table of contents of a markdown block. This snippet will only 27 | generate the table of contents and will NOT output the markdown given to it 28 | {% endcomment %} 29 | 30 | {% capture my_toc %}{% endcapture %} 31 | {% assign orderedList = include.ordered | default: false %} 32 | {% assign minHeader = include.h_min | default: 1 %} 33 | {% assign maxHeader = include.h_max | default: 6 %} 34 | {% assign nodes = include.html | split: ' maxHeader %} 47 | {% continue %} 48 | {% endif %} 49 | 50 | {% if firstHeader %} 51 | {% assign firstHeader = false %} 52 | {% assign minHeader = headerLevel %} 53 | {% endif %} 54 | 55 | {% assign indentAmount = headerLevel | minus: minHeader %} 56 | {% assign _workspace = node | split: '' | first }}>{% endcapture %} 71 | {% assign header = _workspace[0] | replace: _hAttrToStrip, '' %} 72 | 73 | {% assign space = '' %} 74 | {% for i in (1..indentAmount) %} 75 | {% assign space = space | prepend: ' ' %} 76 | {% endfor %} 77 | 78 | {% unless include.item_class == blank %} 79 | {% capture listItemClass %}{:.{{ include.item_class | replace: '%level%', headerLevel }}}{% endcapture %} 80 | {% endunless %} 81 | 82 | {% capture heading_body %}{% if include.sanitize %}{{ header | strip_html }}{% else %}{{ header }}{% endif %}{% endcapture %} 83 | {% capture my_toc %}{{ my_toc }} 84 | {{ space }}{{ listModifier }} {{ listItemClass }} [{{ heading_body | replace: "|", "\|" }}]({% if include.baseurl %}{{ include.baseurl }}{% endif %}#{{ html_id }}){% if include.anchor_class %}{:.{{ include.anchor_class }}}{% endif %}{% endcapture %} 85 | {% endfor %} 86 | 87 | {% if include.class %} 88 | {% capture my_toc %}{:.{{ include.class }}} 89 | {{ my_toc | lstrip }}{% endcapture %} 90 | {% endif %} 91 | 92 | {% if include.id %} 93 | {% capture my_toc %}{: #{{ include.id }}} 94 | {{ my_toc | lstrip }}{% endcapture %} 95 | {% endif %} 96 | {% endcapture %}{% assign tocWorkspace = '' %}{{ my_toc | markdownify | strip }} 97 | -------------------------------------------------------------------------------- /_sass/minimal-mistakes/vendor/breakpoint/_helpers.scss: -------------------------------------------------------------------------------- 1 | ////////////////////////////// 2 | // Converts the input value to Base EMs 3 | ////////////////////////////// 4 | @function breakpoint-to-base-em($value) { 5 | $value-unit: unit($value); 6 | 7 | // Will convert relative EMs into root EMs. 8 | @if breakpoint-get('base font size') and type-of(breakpoint-get('base font size')) == 'number' and $value-unit == 'em' { 9 | $base-unit: unit(breakpoint-get('base font size')); 10 | 11 | @if $base-unit == 'px' or $base-unit == '%' or $base-unit == 'em' or $base-unit == 'pt' { 12 | @return base-conversion($value) / base-conversion(breakpoint-get('base font size')) * 1em; 13 | } 14 | @else { 15 | @warn '#{breakpoint-get(\'base font size\')} is not set in valid units for font size!'; 16 | @return false; 17 | } 18 | } 19 | @else { 20 | @return base-conversion($value); 21 | } 22 | } 23 | 24 | @function base-conversion($value) { 25 | $unit: unit($value); 26 | 27 | @if $unit == 'px' { 28 | @return $value / 16px * 1em; 29 | } 30 | @else if $unit == '%' { 31 | @return $value / 100% * 1em; 32 | } 33 | @else if $unit == 'em' { 34 | @return $value; 35 | } 36 | @else if $unit == 'pt' { 37 | @return $value / 12pt * 1em; 38 | } 39 | @else { 40 | @return $value; 41 | // @warn 'Everything is terrible! What have you done?!'; 42 | } 43 | } 44 | 45 | ////////////////////////////// 46 | // Returns whether the feature can have a min/max pair 47 | ////////////////////////////// 48 | $breakpoint-min-max-features: 'color', 49 | 'color-index', 50 | 'aspect-ratio', 51 | 'device-aspect-ratio', 52 | 'device-height', 53 | 'device-width', 54 | 'height', 55 | 'monochrome', 56 | 'resolution', 57 | 'width'; 58 | 59 | @function breakpoint-min-max($feature) { 60 | @each $item in $breakpoint-min-max-features { 61 | @if $feature == $item { 62 | @return true; 63 | } 64 | } 65 | @return false; 66 | } 67 | 68 | ////////////////////////////// 69 | // Returns whether the feature can have a string value 70 | ////////////////////////////// 71 | $breakpoint-string-features: 'orientation', 72 | 'scan', 73 | 'color', 74 | 'aspect-ratio', 75 | 'device-aspect-ratio', 76 | 'pointer', 77 | 'luminosity'; 78 | 79 | @function breakpoint-string-value($feature) { 80 | @each $item in $breakpoint-string-features { 81 | @if breakpoint-min-max($item) { 82 | @if $feature == 'min-#{$item}' or $feature == 'max-#{$item}' { 83 | @return true; 84 | } 85 | } 86 | @else if $feature == $item { 87 | @return true; 88 | } 89 | } 90 | @return false; 91 | } 92 | 93 | ////////////////////////////// 94 | // Returns whether the feature is a media type 95 | ////////////////////////////// 96 | $breakpoint-media-types: 'all', 97 | 'braille', 98 | 'embossed', 99 | 'handheld', 100 | 'print', 101 | 'projection', 102 | 'screen', 103 | 'speech', 104 | 'tty', 105 | 'tv'; 106 | 107 | @function breakpoint-is-media($feature) { 108 | @each $media in $breakpoint-media-types { 109 | @if ($feature == $media) or ($feature == 'not #{$media}') or ($feature == 'only #{$media}') { 110 | @return true; 111 | } 112 | } 113 | 114 | @return false; 115 | } 116 | 117 | ////////////////////////////// 118 | // Returns whether the feature can stand alone 119 | ////////////////////////////// 120 | $breakpoint-single-string-features: 'color', 121 | 'color-index', 122 | 'grid', 123 | 'monochrome'; 124 | 125 | @function breakpoint-single-string($feature) { 126 | @each $item in $breakpoint-single-string-features { 127 | @if $feature == $item { 128 | @return true; 129 | } 130 | } 131 | @return false; 132 | } 133 | 134 | ////////////////////////////// 135 | // Returns whether the feature 136 | ////////////////////////////// 137 | @function breakpoint-is-resolution($feature) { 138 | $resolutions: 'device-pixel-ratio', 'dpr'; 139 | 140 | @if breakpoint-get('transform resolutions') { 141 | $resolutions: append($resolutions, 'resolution'); 142 | } 143 | 144 | @each $reso in $resolutions { 145 | @if index($feature, $reso) or index($feature, 'min-#{$reso}') or index($feature, 'max-#{$reso}') { 146 | @return true; 147 | } 148 | } 149 | 150 | @return false; 151 | } 152 | -------------------------------------------------------------------------------- /_sass/minimal-mistakes/vendor/susy/susy/_parse.scss: -------------------------------------------------------------------------------- 1 | /// Shorthand Syntax Parser 2 | /// ======================= 3 | /// The syntax parser converts [shorthand syntax][short] 4 | /// into a map of settings that can be compared/merged with 5 | /// other config maps and global setting. 6 | /// 7 | /// [short]: b-api.html 8 | /// 9 | /// @group x-parser 10 | 11 | 12 | 13 | // Parse 14 | // ----- 15 | /// The `parse` function provides all the syntax-sugar in Susy, 16 | /// converting user shorthand 17 | /// into a usable map of keys and values 18 | /// that can be normalized and passed to Su. 19 | /// 20 | /// @group x-parser 21 | /// @see $susy 22 | /// 23 | /// @param {list} $shorthand - 24 | /// Shorthand expression to define the width of the span, 25 | /// optionally containing: 26 | /// - a count, length, or column-list span; 27 | /// - `at $n`, `first`, or `last` location on asymmetrical grids; 28 | /// - `narrow`, `wide`, or `wider` for optionally spreading 29 | /// across adjacent gutters; 30 | /// - `of $n ` for available grid columns 31 | /// and spread of the container 32 | /// (span counts like `of 6` are only valid 33 | /// in the context of symmetrical grids); 34 | /// - and `set-gutters $n` to override global gutter settings 35 | /// @param {bool} $context-only [false] - 36 | /// Allow the parser to ignore span and span-spread values, 37 | /// only parsing context and container-spread. 38 | /// This makes it possible to accept spanless values, 39 | /// like the `gutters()` syntax. 40 | /// When parsing context-only, 41 | /// the `of` indicator is optional. 42 | /// 43 | /// @return {map} - 44 | /// Map of span and grid settings 45 | /// parsed from shorthand input – 46 | /// including all the properties available globally – 47 | /// `columns`, `gutters`, `spread`, `container-spread` – 48 | /// along with the span-specific properties 49 | /// `span`, and `location`. 50 | /// 51 | /// @throw 52 | /// when a shorthand value is not recognized 53 | @function susy-parse( 54 | $shorthand, 55 | $context-only: false 56 | ) { 57 | $parse-error: 'Unknown shorthand property:'; 58 | $options: ( 59 | 'first': 'location', 60 | 'last': 'location', 61 | 'alpha': 'location', 62 | 'omega': 'location', 63 | 'narrow': 'spread', 64 | 'wide': 'spread', 65 | 'wider': 'spread', 66 | ); 67 | 68 | $return: (); 69 | $span: null; 70 | $columns: null; 71 | 72 | $of: null; 73 | $next: false; 74 | 75 | // Allow context-only shorthand, without span 76 | @if ($context-only) and (not index($shorthand, 'of')) { 77 | @if su-valid-columns($shorthand, 'fail-silent') { 78 | $shorthand: 'of' $shorthand; 79 | } @else { 80 | $shorthand: join('of', $shorthand); 81 | } 82 | } 83 | 84 | // loop through the shorthand list 85 | @for $i from 1 through length($shorthand) { 86 | $item: nth($shorthand, $i); 87 | $type: type-of($item); 88 | $error: false; 89 | $details: '[#{$type}] `#{$item}`'; 90 | 91 | // if we know what's supposed to be coming next… 92 | @if $next { 93 | 94 | // Add to the return map 95 | $return: map-merge($return, ($next: $item)); 96 | 97 | // Reset next to `false` 98 | $next: false; 99 | 100 | } @else { // If we don't know what's supposed to be coming… 101 | 102 | // Keywords… 103 | @if ($type == 'string') { 104 | // Check the map for keywords… 105 | @if map-has-key($options, $item) { 106 | $setting: map-get($options, $item); 107 | 108 | // Spread could be on the span or the container… 109 | @if ($setting == 'spread') and ($of) { 110 | $return: map-merge($return, ('container-spread': $item)); 111 | } @else { 112 | $return: map-merge($return, ($setting: $item)); 113 | } 114 | 115 | } @else if ($item == 'all') { 116 | // `All` is a span shortcut 117 | $span: 'all'; 118 | } @else if ($item == 'at') { 119 | // Some keywords setup what's next… 120 | $next: 'location'; 121 | } @else if ($item == 'set-gutters') { 122 | $next: 'gutters'; 123 | } @else if ($item == 'of') { 124 | $of: true; 125 | } @else { 126 | $error: true; 127 | } 128 | 129 | } @else if ($type == 'number') or ($type == 'list') { // Numbers & lists… 130 | 131 | @if not ($span or $of) { 132 | // We don't have a span, and we're not expecting context… 133 | $span: $item; 134 | } @else if ($of) and (not $columns) { 135 | // We are expecting context… 136 | $columns: $item; 137 | } @else { 138 | $error: true; 139 | } 140 | 141 | } @else { 142 | $error: true; 143 | } 144 | } 145 | 146 | @if $error { 147 | @return _susy-error('#{$parse-error} #{$details}', 'susy-parse'); 148 | } 149 | } 150 | 151 | // If we have span, merge it in 152 | @if $span { 153 | $return: map-merge($return, ('span': $span)); 154 | } 155 | 156 | // If we have columns, merge them in 157 | @if $columns { 158 | $return: map-merge($return, ('columns': $columns)); 159 | } 160 | 161 | // Return the map of settings… 162 | @return $return; 163 | } 164 | --------------------------------------------------------------------------------