rawfeed 0.0.1 → 0.1.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/LICENSE.txt +21 -0
- data/README.md +153 -1
- data/_data/resume.yml +184 -0
- data/_includes/alert +3 -0
- data/_includes/chart +34 -0
- data/_includes/details +57 -0
- data/_includes/enddetails +2 -0
- data/_includes/endtabs +2 -0
- data/_includes/image +61 -0
- data/_includes/layout/blog_search.html +18 -0
- data/_includes/layout/data.liquid +8 -0
- data/_includes/layout/disqus.html +30 -0
- data/_includes/layout/footer.html +34 -0
- data/_includes/layout/giscus.html +21 -0
- data/_includes/layout/google_analytics.html +11 -0
- data/_includes/layout/head.html +59 -0
- data/_includes/layout/header.html +143 -0
- data/_includes/layout/maintenance.html +30 -0
- data/_includes/layout/paginator.html +35 -0
- data/_includes/socials +22 -0
- data/_includes/tabs +94 -0
- data/_includes/toc +160 -0
- data/_includes/video +10 -0
- data/_layouts/blog.html +46 -0
- data/_layouts/contact.html +285 -0
- data/_layouts/default.html +351 -0
- data/_layouts/error.html +15 -0
- data/_layouts/home.html +58 -0
- data/_layouts/page.html +9 -0
- data/_layouts/post.html +103 -0
- data/_layouts/resume.html +239 -0
- data/_layouts/tag.html +22 -0
- data/_layouts/tag_posts.html +27 -0
- data/_sass/base/_index.scss +63 -0
- data/_sass/base/_reset.scss +10 -0
- data/_sass/base/_typography.scss +0 -0
- data/_sass/components/_badges.scss +24 -0
- data/_sass/components/_button.scss +17 -0
- data/_sass/components/_forms.scss +42 -0
- data/_sass/components/_gifs.scss +5 -0
- data/_sass/components/_index.scss +5 -0
- data/_sass/components/_markdown.scss +454 -0
- data/_sass/includes/_footer.scss +45 -0
- data/_sass/includes/_header.scss +240 -0
- data/_sass/includes/_highlight.scss +87 -0
- data/_sass/includes/_index.scss +9 -0
- data/_sass/includes/_maintenance.scss +16 -0
- data/_sass/includes/_paginator.scss +22 -0
- data/_sass/includes/_rouge-dark.scss +81 -0
- data/_sass/includes/_rouge-light.scss +121 -0
- data/_sass/includes/_terminal.scss +208 -0
- data/_sass/layouts/_blog.scss +96 -0
- data/_sass/layouts/_contact.scss +55 -0
- data/_sass/layouts/_default.scss +14 -0
- data/_sass/layouts/_error.scss +18 -0
- data/_sass/layouts/_home.scss +19 -0
- data/_sass/layouts/_index.scss +10 -0
- data/_sass/layouts/_page.scss +5 -0
- data/_sass/layouts/_post.scss +109 -0
- data/_sass/layouts/_resume.scss +330 -0
- data/_sass/layouts/_tag-posts.scss +48 -0
- data/_sass/layouts/_tag.scss +22 -0
- data/_sass/main.scss +128 -0
- data/_sass/theme/_dark.scss +79 -0
- data/_sass/theme/_index.scss +13 -0
- data/_sass/theme/_light.scss +56 -0
- data/assets/css/style.scss +5 -0
- data/assets/images/avatar_back.png +0 -0
- data/assets/images/avatar_dark.png +0 -0
- data/assets/images/avatar_light.png +0 -0
- data/assets/images/favicon.png +0 -0
- data/assets/js/avatar.js +50 -0
- data/assets/js/default.js +148 -0
- data/assets/js/terminal.js +18 -0
- data/assets/js/toc.js +22 -0
- data/assets/json/blog_search.json +16 -0
- data/assets/vendor/bootstrap/css/bootstrap-grid.css +4124 -0
- data/assets/vendor/bootstrap/css/bootstrap-grid.css.map +1 -0
- data/assets/vendor/bootstrap/css/bootstrap-grid.min.css +7 -0
- data/assets/vendor/bootstrap/css/bootstrap-grid.min.css.map +1 -0
- data/assets/vendor/bootstrap/css/bootstrap-grid.rtl.css +4123 -0
- data/assets/vendor/bootstrap/css/bootstrap-grid.rtl.css.map +1 -0
- data/assets/vendor/bootstrap/css/bootstrap-grid.rtl.min.css +7 -0
- data/assets/vendor/bootstrap/css/bootstrap-grid.rtl.min.css.map +1 -0
- data/assets/vendor/bootstrap/css/bootstrap-reboot.css +488 -0
- data/assets/vendor/bootstrap/css/bootstrap-reboot.css.map +1 -0
- data/assets/vendor/bootstrap/css/bootstrap-reboot.min.css +7 -0
- data/assets/vendor/bootstrap/css/bootstrap-reboot.min.css.map +1 -0
- data/assets/vendor/bootstrap/css/bootstrap-reboot.rtl.css +485 -0
- data/assets/vendor/bootstrap/css/bootstrap-reboot.rtl.css.map +1 -0
- data/assets/vendor/bootstrap/css/bootstrap-reboot.rtl.min.css +7 -0
- data/assets/vendor/bootstrap/css/bootstrap-reboot.rtl.min.css.map +1 -0
- data/assets/vendor/bootstrap/css/bootstrap-utilities.css +4266 -0
- data/assets/vendor/bootstrap/css/bootstrap-utilities.css.map +1 -0
- data/assets/vendor/bootstrap/css/bootstrap-utilities.min.css +7 -0
- data/assets/vendor/bootstrap/css/bootstrap-utilities.min.css.map +1 -0
- data/assets/vendor/bootstrap/css/bootstrap-utilities.rtl.css +4257 -0
- data/assets/vendor/bootstrap/css/bootstrap-utilities.rtl.css.map +1 -0
- data/assets/vendor/bootstrap/css/bootstrap-utilities.rtl.min.css +7 -0
- data/assets/vendor/bootstrap/css/bootstrap-utilities.rtl.min.css.map +1 -0
- data/assets/vendor/bootstrap/css/bootstrap.css +10878 -0
- data/assets/vendor/bootstrap/css/bootstrap.css.map +1 -0
- data/assets/vendor/bootstrap/css/bootstrap.min.css +7 -0
- data/assets/vendor/bootstrap/css/bootstrap.min.css.map +1 -0
- data/assets/vendor/bootstrap/css/bootstrap.rtl.css +10842 -0
- data/assets/vendor/bootstrap/css/bootstrap.rtl.css.map +1 -0
- data/assets/vendor/bootstrap/css/bootstrap.rtl.min.css +7 -0
- data/assets/vendor/bootstrap/css/bootstrap.rtl.min.css.map +1 -0
- data/assets/vendor/bootstrap/js/bootstrap.bundle.js +7075 -0
- data/assets/vendor/bootstrap/js/bootstrap.bundle.js.map +1 -0
- data/assets/vendor/bootstrap/js/bootstrap.bundle.min.js +7 -0
- data/assets/vendor/bootstrap/js/bootstrap.bundle.min.js.map +1 -0
- data/assets/vendor/bootstrap/js/bootstrap.esm.js +5202 -0
- data/assets/vendor/bootstrap/js/bootstrap.esm.js.map +1 -0
- data/assets/vendor/bootstrap/js/bootstrap.esm.min.js +7 -0
- data/assets/vendor/bootstrap/js/bootstrap.esm.min.js.map +1 -0
- data/assets/vendor/bootstrap/js/bootstrap.js +5249 -0
- data/assets/vendor/bootstrap/js/bootstrap.js.map +1 -0
- data/assets/vendor/bootstrap/js/bootstrap.min.js +7 -0
- data/assets/vendor/bootstrap/js/bootstrap.min.js.map +1 -0
- data/assets/vendor/simple-jekyll-search.js +433 -0
- data/assets/vendor/simple-jekyll-search.min.js +6 -0
- data/lib/rawfeed/draft.rb +31 -0
- data/lib/rawfeed/installer.rb +37 -0
- data/lib/rawfeed/layout.rb +138 -0
- data/lib/rawfeed/page.rb +33 -0
- data/lib/rawfeed/post.rb +60 -0
- data/lib/rawfeed/resume.rb +59 -0
- data/lib/rawfeed/utils.rb +74 -0
- data/lib/rawfeed/version.rb +1 -1
- data/lib/rawfeed.rb +5 -7
- metadata +144 -2
| @@ -0,0 +1,59 @@ | |
| 1 | 
            +
            {%- include layout/data.liquid -%}
         | 
| 2 | 
            +
             | 
| 3 | 
            +
            <head>
         | 
| 4 | 
            +
              <meta name="viewport" content="width=device-width, initial-scale=1">
         | 
| 5 | 
            +
              <meta charset="utf-8">
         | 
| 6 | 
            +
              {%- if page.url == "/" -%}
         | 
| 7 | 
            +
                <title>{{ site.title | default: theme_name }} | {{ site.baseurl | prepend: site.url }}</title>
         | 
| 8 | 
            +
              {%- else -%}
         | 
| 9 | 
            +
                <title>{{ page.title }} | {{ site.title | default: theme_name }}</title>
         | 
| 10 | 
            +
              {%- endif -%}
         | 
| 11 | 
            +
             | 
| 12 | 
            +
              {% comment %} favicon {% endcomment %}
         | 
| 13 | 
            +
              <link rel="icon" type="image/png" href="{{ '/assets/images/favicon.png' | relative_url }}">
         | 
| 14 | 
            +
              <link rel="apple-touch-icon" href="{{ '/assets/images/favicon.png' | relative_url }}">
         | 
| 15 | 
            +
             | 
| 16 | 
            +
              {% comment %} SEO (jekyll-seo-tag) {% endcomment %}
         | 
| 17 | 
            +
              {%- seo -%}
         | 
| 18 | 
            +
              <meta property="og:locale:alternate" content="en_US">
         | 
| 19 | 
            +
             | 
| 20 | 
            +
              {%- if site.google.site_verification != "" -%}
         | 
| 21 | 
            +
                <!-- Google Site Verification -->
         | 
| 22 | 
            +
                <meta name="google-site-verification" content="{{ site.google.site_verification }}">
         | 
| 23 | 
            +
                <!-- Google Site Verification -->
         | 
| 24 | 
            +
              {%- endif -%}
         | 
| 25 | 
            +
             | 
| 26 | 
            +
              {% comment %} Fonts {% endcomment %}
         | 
| 27 | 
            +
              {%- comment -%}
         | 
| 28 | 
            +
              TODO: version: 0.2.0: place fonts used in the project instead of using Google Fonts.
         | 
| 29 | 
            +
              {%- endcomment -%}
         | 
| 30 | 
            +
              <link rel="preconnect" href="https://fonts.googleapis.com">
         | 
| 31 | 
            +
              <link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
         | 
| 32 | 
            +
              <link href="https://fonts.googleapis.com/css2?family=SUSE+Mono:ital,wght@0,100..800;1,100..800&display=swap" rel="stylesheet">
         | 
| 33 | 
            +
              <link rel="stylesheet" href="https://fonts.googleapis.com/css?family=Inconsolata:400,700&display=swap">
         | 
| 34 | 
            +
              <link href="https://fonts.googleapis.com/css2?family=Special+Elite&display=swap" rel="stylesheet">
         | 
| 35 | 
            +
              <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.5.1/css/all.min.css"/>
         | 
| 36 | 
            +
             | 
| 37 | 
            +
              {% comment %} bootstrap {% endcomment %}
         | 
| 38 | 
            +
              <link rel="stylesheet" href="{{ '/assets/vendor/bootstrap/css/bootstrap.min.css' | relative_url }}">
         | 
| 39 | 
            +
             | 
| 40 | 
            +
              {% comment %} fixes FOUC/flicker in firefox {% endcomment %}
         | 
| 41 | 
            +
              <script>
         | 
| 42 | 
            +
                (function() {
         | 
| 43 | 
            +
                  const savedTheme = localStorage.getItem('theme') || 'light';
         | 
| 44 | 
            +
                  document.documentElement.setAttribute('data-theme', savedTheme);
         | 
| 45 | 
            +
                })();
         | 
| 46 | 
            +
              </script>
         | 
| 47 | 
            +
             | 
| 48 | 
            +
              {% comment %} load theme {% endcomment %}
         | 
| 49 | 
            +
              <link rel="stylesheet" href="{{ '/assets/css/style.css' | relative_url }}">
         | 
| 50 | 
            +
             | 
| 51 | 
            +
              {% comment %} feed {% endcomment %}
         | 
| 52 | 
            +
              <link rel="alternate" type="application/atom+xml" title="{{ site.title }}" href="{{ '/feed.xml' | relative_url }}">
         | 
| 53 | 
            +
             | 
| 54 | 
            +
              {%- if jekyll.environment == 'production' and site.google.analytics.enable == true and site.google.analytics.id != "" -%}
         | 
| 55 | 
            +
                <!-- Google Analytics -->
         | 
| 56 | 
            +
                {%- include google_analytics.html -%}
         | 
| 57 | 
            +
                <!-- Google Analytics -->
         | 
| 58 | 
            +
              {%- endif -%}
         | 
| 59 | 
            +
            </head>
         | 
| @@ -0,0 +1,143 @@ | |
| 1 | 
            +
            {%- include layout/data.liquid -%}
         | 
| 2 | 
            +
             | 
| 3 | 
            +
            {%- assign index = site.pages | where: "path", "index.md" | first -%}
         | 
| 4 | 
            +
             | 
| 5 | 
            +
            {%- for item in site.defaults -%}
         | 
| 6 | 
            +
              {%- if item.scope.path == "_posts" -%}
         | 
| 7 | 
            +
                {%- assign blog_page = item.values.published -%}
         | 
| 8 | 
            +
              {%- endif -%}
         | 
| 9 | 
            +
            {%- endfor -%}
         | 
| 10 | 
            +
             | 
| 11 | 
            +
            <div class="modal fade" id="avatarModal" tabindex="-1" aria-hidden="true">
         | 
| 12 | 
            +
              <div class="modal-dialog modal-dialog-centered">
         | 
| 13 | 
            +
                <div class="modal-content bg-transparent border-0 shadow-none">
         | 
| 14 | 
            +
                  <div class="modal-body d-flex justify-content-center">
         | 
| 15 | 
            +
                    <img id="modalAvatar" class="avatar-img" src="" alt="">
         | 
| 16 | 
            +
                  </div>
         | 
| 17 | 
            +
                </div>
         | 
| 18 | 
            +
              </div>
         | 
| 19 | 
            +
            </div>
         | 
| 20 | 
            +
             | 
| 21 | 
            +
            <header class="container header">
         | 
| 22 | 
            +
              <div class="header-wrapper">
         | 
| 23 | 
            +
                <div class="row ">
         | 
| 24 | 
            +
                  <div class="col-sm-2 d-flex flex-column justify-content-end">
         | 
| 25 | 
            +
                    <div class="container">
         | 
| 26 | 
            +
                      <div class="row">
         | 
| 27 | 
            +
                        {%- if index.layout == "blog" -%}
         | 
| 28 | 
            +
                          <span>[ <a class="{% if page.url == "/" or page.url == "/index.html" %}menu-active{% endif %}" href="{{home_url}}">{{ site.text.menu.blog | default: "blog" | downcase }}</a> ]</span>
         | 
| 29 | 
            +
                        {%- else -%}
         | 
| 30 | 
            +
                          <span>[ <a class="{% if page.url == "/" or page.url == "/index.html" %}menu-active{% endif %}" href="{{home_url}}">{{ site.text.menu.home | default: "home" | downcase }}</a> ]</span>
         | 
| 31 | 
            +
                        {%- endif -%}
         | 
| 32 | 
            +
                      </div>
         | 
| 33 | 
            +
                    </div>
         | 
| 34 | 
            +
                  </div>
         | 
| 35 | 
            +
                  <div class="col-sm-8 d-flex flex-column justify-content-end">
         | 
| 36 | 
            +
                    <div class="container">
         | 
| 37 | 
            +
                    <div class="row">
         | 
| 38 | 
            +
                      <span class="title">{{ site.title | default: theme_name }}</span>
         | 
| 39 | 
            +
                    </div>
         | 
| 40 | 
            +
                    <div class="row">
         | 
| 41 | 
            +
                      <small class="description">
         | 
| 42 | 
            +
                        {{ site.description | default: "A raw Jekyll theme for minimalists" }}
         | 
| 43 | 
            +
                      </small>
         | 
| 44 | 
            +
                    </div>
         | 
| 45 | 
            +
                    </div>
         | 
| 46 | 
            +
                  </div>
         | 
| 47 | 
            +
                  <div class="col-sm-2 d-flex justify-content-end avatar">
         | 
| 48 | 
            +
                    {%- assign images_ = site.static_files | map: "path" -%}
         | 
| 49 | 
            +
                    {%- assign avatar_path_light = "/assets/images/" | append: site.avatar.image.front.light -%}
         | 
| 50 | 
            +
                    {%- assign avatar_path_dark = "/assets/images/" | append: site.avatar.image.front.dark -%}
         | 
| 51 | 
            +
                    {%- assign avatar_path_back = "/assets/images/" | append: site.avatar.image.back -%}
         | 
| 52 | 
            +
             | 
| 53 | 
            +
                    {%- if images_ contains avatar_path_light and images_ contains avatar_path_dark and images_ contains avatar_path_back -%}
         | 
| 54 | 
            +
                      <div class="avatar-wrapper">
         | 
| 55 | 
            +
             | 
| 56 | 
            +
                        <div class="avatar-flipper light-theme {% if site.avatar.open %}avatar-flipper__open-true{% endif %}{% if site.avatar.flip %} can-flip{% endif %}">
         | 
| 57 | 
            +
                          <div class="avatar-card">
         | 
| 58 | 
            +
                            <div class="avatar-front">
         | 
| 59 | 
            +
                              <img id="avatarImgLight" class="avatar-img" src="{{ avatar_path_light | relative_url }}" alt="{{ site.title }}" width="70">
         | 
| 60 | 
            +
                            </div>
         | 
| 61 | 
            +
                            <div class="avatar-back">
         | 
| 62 | 
            +
                              <img class="avatar-img" src="{{ avatar_path_back | relative_url }}" alt="{{ site.title }} - Verso" width="70">
         | 
| 63 | 
            +
                            </div>
         | 
| 64 | 
            +
                          </div>
         | 
| 65 | 
            +
                        </div>
         | 
| 66 | 
            +
             | 
| 67 | 
            +
                        <div class="avatar-flipper dark-theme {% if site.avatar.open %} avatar-flipper__open-true{% endif %}{% if site.avatar.flip %} can-flip{% endif %}">
         | 
| 68 | 
            +
                          <div class="avatar-card">
         | 
| 69 | 
            +
                            <div class="avatar-front">
         | 
| 70 | 
            +
                              <img id="avatarImgDark" class="avatar-img" src="{{ avatar_path_dark | relative_url }}" alt="{{ site.title }}" width="70">
         | 
| 71 | 
            +
                            </div>
         | 
| 72 | 
            +
                            <div class="avatar-back">
         | 
| 73 | 
            +
                              <img class="avatar-img" src="{{ avatar_path_back | relative_url }}" alt="{{ site.title }} - Verso" width="70">
         | 
| 74 | 
            +
                            </div>
         | 
| 75 | 
            +
                          </div>
         | 
| 76 | 
            +
                        </div>
         | 
| 77 | 
            +
             | 
| 78 | 
            +
                      </div>
         | 
| 79 | 
            +
                    {%- endif -%}
         | 
| 80 | 
            +
                  </div>
         | 
| 81 | 
            +
                </div>
         | 
| 82 | 
            +
             | 
| 83 | 
            +
                <div class="menu-separator"></div>
         | 
| 84 | 
            +
             | 
| 85 | 
            +
                <div class="row">
         | 
| 86 | 
            +
                  <div class="col-sm d-flex justify-content-center column-bottom">
         | 
| 87 | 
            +
                  {%- if index.layout == "blog" -%}
         | 
| 88 | 
            +
                    <span class="blog-menu">menu »
         | 
| 89 | 
            +
                       {%- if site.blog.search.enable -%}<a id="blog-search__btn" class="blog-menu__link" href="{{search_url}}">{{ site.text.menu.search | default: "search" }}</a><strong> . </strong>{%- endif -%}<a class="blog-menu__link{% if page.url == "/blog/tags/" or page.url == "/blog/tags/index.html" %} menu-active{% endif %}" href="{{tags_url}}">{{ site.text.menu.tags | default: "tags" }}</a><strong> . </strong>
         | 
| 90 | 
            +
                    </span>
         | 
| 91 | 
            +
                    {% assign sorted_pages = site.pages | sort: 'order' %}
         | 
| 92 | 
            +
                      {%- for item in sorted_pages -%}
         | 
| 93 | 
            +
                        {%- if item.path contains '_pages/' and item.published != false -%}
         | 
| 94 | 
            +
                          {%- unless item.url contains "/tags/" or item.url contains "404.html" -%}
         | 
| 95 | 
            +
                            <a class="{% if page.url == item.url %}menu-active{% endif %}" href="{{ item.url | relative_url }}">{{ item.title | downcase }}</a><strong> . </strong>
         | 
| 96 | 
            +
                          {%- endunless -%}
         | 
| 97 | 
            +
                        {%- endif -%}
         | 
| 98 | 
            +
                      {%- endfor -%}
         | 
| 99 | 
            +
                      <a class="blog-menu__link" href="{{feed_url}}">{{ site.text.menu.feed | default: "feed" }}</a><strong> . </strong>
         | 
| 100 | 
            +
                  {%- else index.layout == "home" -%}
         | 
| 101 | 
            +
                    {%- if page.url contains "/blog/" -%}
         | 
| 102 | 
            +
                      <span class="blog-menu">{{ site.text.menu.blog }} »
         | 
| 103 | 
            +
                        <a class="blog-menu__link{% if page.url == "/blog/" or page.url == "/blog/index.html" or page.url contains "/blog/page/" %} menu-active{% endif %}" href="{{blog_url}}">posts</a><strong> . </strong>{%- if site.blog.search.enable -%}<a id="blog-search__btn" class="blog-menu__link" href="{{search_url}}">{{ site.text.menu.search | default: "search" }}</a><strong> . </strong>{%- endif -%}<a class="blog-menu__link{% if page.url == "/blog/tags/" or page.url == "/blog/tags/index.html" %} menu-active{% endif %}" href="{{tags_url}}">{{ site.text.menu.tags | default: "tags" }}</a><strong> . </strong><a class="blog-menu__link" href="{{feed_url}}">{{ site.text.menu.feed | default: "feed" }}</a><strong> . </strong>
         | 
| 104 | 
            +
                      </span>
         | 
| 105 | 
            +
                    {%- else -%}
         | 
| 106 | 
            +
                      {%- assign published_pages = site.pages | where_exp:"p","p.path contains '_pages/' and p.published" -%}
         | 
| 107 | 
            +
                      {%- if published_pages.size > 0 -%}
         | 
| 108 | 
            +
                        <span class="blog-menu">menu »</span> 
         | 
| 109 | 
            +
                      {%- endif -%}
         | 
| 110 | 
            +
                      {%- if site.pagination.enabled == true -%}
         | 
| 111 | 
            +
                        {%- if blog_page -%}
         | 
| 112 | 
            +
                          <a href="{{blog_url}}">{{ site.text.menu.blog }}</a><strong> . </strong>
         | 
| 113 | 
            +
                        {%- endif -%}
         | 
| 114 | 
            +
                        {% assign sorted_pages = site.pages | sort: 'order' %}
         | 
| 115 | 
            +
                        {%- for item in sorted_pages -%}
         | 
| 116 | 
            +
                          {%- if item.path contains '_pages/' -%}
         | 
| 117 | 
            +
                            {%- unless item.url contains "blog" or item.url contains "404.html" -%}
         | 
| 118 | 
            +
                              <a class="{% if page.url == item.url %}menu-active{% endif %}" href="{{ item.url | relative_url }}">{{ item.title | downcase }}</a><strong> . </strong>
         | 
| 119 | 
            +
                            {%- endunless -%}
         | 
| 120 | 
            +
                          {%- endif -%}
         | 
| 121 | 
            +
                        {%- endfor -%}
         | 
| 122 | 
            +
                      {%- else -%}
         | 
| 123 | 
            +
                        {% assign sorted_pages = site.pages | sort: 'order' %}
         | 
| 124 | 
            +
                        {%- for item in sorted_pages -%}
         | 
| 125 | 
            +
                          {%- if item.path contains '_pages/' and item.published != false -%}
         | 
| 126 | 
            +
                            {%- unless item.url contains "/tags/" or item.url contains "404.html" -%}
         | 
| 127 | 
            +
                              <a class="{% if page.url == item.url %}menu-active{% endif %}" href="{{ item.url | relative_url }}">{{ item.title | downcase }}</a><strong> . </strong>
         | 
| 128 | 
            +
                            {%- endunless -%}
         | 
| 129 | 
            +
                          {%- endif -%}
         | 
| 130 | 
            +
                        {%- endfor -%}
         | 
| 131 | 
            +
                      {%- endif -%}
         | 
| 132 | 
            +
                    {%- endif -%}
         | 
| 133 | 
            +
                  {%- endif -%}
         | 
| 134 | 
            +
                  </div>
         | 
| 135 | 
            +
                </div>
         | 
| 136 | 
            +
             | 
| 137 | 
            +
                <div class="row justify-content-end">
         | 
| 138 | 
            +
                  <div class="col-sm-2 d-flex justify-content-end">
         | 
| 139 | 
            +
                    <span id="toggle-theme"><i class="fa-solid fa-moon"></i></span>
         | 
| 140 | 
            +
                  </div>
         | 
| 141 | 
            +
                </div>
         | 
| 142 | 
            +
              </div>
         | 
| 143 | 
            +
            </header>
         | 
| @@ -0,0 +1,30 @@ | |
| 1 | 
            +
            {% include layout/data.liquid %}
         | 
| 2 | 
            +
             | 
| 3 | 
            +
            <!DOCTYPE html>
         | 
| 4 | 
            +
            <html lang="{{ site.lang | default: 'en-US' }}">
         | 
| 5 | 
            +
              {%- include head.html -%}
         | 
| 6 | 
            +
              <body>
         | 
| 7 | 
            +
                <div class="mt-4 maintenance">
         | 
| 8 | 
            +
                  <div class="container">
         | 
| 9 | 
            +
                    {%- if site.maintenance.gif != "" -%}
         | 
| 10 | 
            +
                    <div class="row">
         | 
| 11 | 
            +
                      <div class="col-sm text-center">
         | 
| 12 | 
            +
                        {%- if site.maintenance.gif == "local" -%}
         | 
| 13 | 
            +
                          <img class="maintenance-gif" src="{{ '/assets/gifs/under_maintenance.gif' | relative_url }}" alt="under maintenance">
         | 
| 14 | 
            +
                        {%- else -%}
         | 
| 15 | 
            +
                          <img class="maintenance-gif" src="{{ site.maintenance.gif }}" alt="under maintenance">
         | 
| 16 | 
            +
                        {%- endif -%}
         | 
| 17 | 
            +
                      </div>
         | 
| 18 | 
            +
                    </div>
         | 
| 19 | 
            +
                    {%- endif -%}
         | 
| 20 | 
            +
                    <div class="row mt-5 text-center">
         | 
| 21 | 
            +
                      <h1 class="maintenance-title">[ {{ site.maintenance.title }} ]</h1>
         | 
| 22 | 
            +
                    </div>
         | 
| 23 | 
            +
                    <div class="row text-center">
         | 
| 24 | 
            +
                      <h3 class="maintenance-subtitle">{{ site.maintenance.subtitle }}</h3>
         | 
| 25 | 
            +
                    </div>
         | 
| 26 | 
            +
                  </div>
         | 
| 27 | 
            +
                </div>
         | 
| 28 | 
            +
                {%- include footer.html -%}
         | 
| 29 | 
            +
              </body>
         | 
| 30 | 
            +
            </html>
         | 
| @@ -0,0 +1,35 @@ | |
| 1 | 
            +
            {%- if page.pagination.enabled == true and site.pagination.enabled == true -%}
         | 
| 2 | 
            +
              {%- assign total_page = paginator.total_pages -%}
         | 
| 3 | 
            +
              {%- if total_page > 1 -%}
         | 
| 4 | 
            +
                <nav>
         | 
| 5 | 
            +
                  <ul class="pagination justify-content-center blog-pagination">
         | 
| 6 | 
            +
                    {%- if paginator.previous_page -%}
         | 
| 7 | 
            +
                    <li class="page-item">
         | 
| 8 | 
            +
                      <a class="page-link blog-pagination__newer" href="{{ paginator.previous_page_path | prepend: site.baseurl | prepend: site.url }}">
         | 
| 9 | 
            +
                        ← {{ site.text.post.pagination.newer_text }}
         | 
| 10 | 
            +
                      </a>
         | 
| 11 | 
            +
                    </li>
         | 
| 12 | 
            +
                    {%- endif -%}
         | 
| 13 | 
            +
             | 
| 14 | 
            +
                    {%- if total_page > 1 -%}
         | 
| 15 | 
            +
                      <li class="page-item">
         | 
| 16 | 
            +
                        <span class="page-link blog-pagination__counter">
         | 
| 17 | 
            +
                          [ {{ site.text.post.pagination.counter[0] }}
         | 
| 18 | 
            +
                          {{ paginator.page }}
         | 
| 19 | 
            +
                          {{ site.text.post.pagination.counter[1] }}
         | 
| 20 | 
            +
                          {{ total_page }} ]
         | 
| 21 | 
            +
                        </span>
         | 
| 22 | 
            +
                      </li>
         | 
| 23 | 
            +
                    {%- endif -%}
         | 
| 24 | 
            +
             | 
| 25 | 
            +
                    {%- if paginator.next_page -%}
         | 
| 26 | 
            +
                    <li class="page-item">
         | 
| 27 | 
            +
                      <a class="page-link blog-pagination__older" href="{{ paginator.next_page_path | prepend: site.baseurl | prepend: site.url }}">
         | 
| 28 | 
            +
                        {{ site.text.post.pagination.older_text }} →
         | 
| 29 | 
            +
                      </a>
         | 
| 30 | 
            +
                    </li>
         | 
| 31 | 
            +
                    {%- endif -%}
         | 
| 32 | 
            +
                  </ul>
         | 
| 33 | 
            +
                </nav>
         | 
| 34 | 
            +
              {%- endif -%}
         | 
| 35 | 
            +
            {%- endif -%}
         | 
    
        data/_includes/socials
    ADDED
    
    | @@ -0,0 +1,22 @@ | |
| 1 | 
            +
            <div class="container socials">
         | 
| 2 | 
            +
              <div class="row">
         | 
| 3 | 
            +
             | 
| 4 | 
            +
                {%- assign pos = "justify-content-center" -%}
         | 
| 5 | 
            +
             | 
| 6 | 
            +
                {%- if include.pos == "left" -%}
         | 
| 7 | 
            +
                  {%- assign pos = "justify-content-start" -%}
         | 
| 8 | 
            +
                {%- elsif include.pos == "right" -%}
         | 
| 9 | 
            +
                  {%- assign pos = "justify-content-end" -%}
         | 
| 10 | 
            +
                {%- endif -%}
         | 
| 11 | 
            +
             | 
| 12 | 
            +
                <div class="col-sm d-flex {{pos}}"><strong>. </strong>
         | 
| 13 | 
            +
                  {% assign links = site.socials.links %}
         | 
| 14 | 
            +
                  {% for item in links %}
         | 
| 15 | 
            +
                    <a class="socials-link" title="{{ item.title }}" href="{{ item.url }}" target="_blank">
         | 
| 16 | 
            +
                      {{ item.title }}
         | 
| 17 | 
            +
                    </a><strong> . </strong>
         | 
| 18 | 
            +
                  {% endfor %}
         | 
| 19 | 
            +
                </div>
         | 
| 20 | 
            +
             | 
| 21 | 
            +
              </div>
         | 
| 22 | 
            +
            </div>
         | 
    
        data/_includes/tabs
    ADDED
    
    | @@ -0,0 +1,94 @@ | |
| 1 | 
            +
            <div class="tabs-start" aria-hidden="true"></div>
         | 
| 2 | 
            +
             | 
| 3 | 
            +
            <script>
         | 
| 4 | 
            +
              (function () {
         | 
| 5 | 
            +
                if (window.__simple_tabs_installed) return;
         | 
| 6 | 
            +
                window.__simple_tabs_installed = true;
         | 
| 7 | 
            +
             | 
| 8 | 
            +
                function processTabs() {
         | 
| 9 | 
            +
                  var starts = Array.from(document.querySelectorAll('.tabs-start'));
         | 
| 10 | 
            +
                  starts.forEach(function (start) {
         | 
| 11 | 
            +
                    var end = start.nextSibling;
         | 
| 12 | 
            +
                    while (end && !(end.nodeType === 1 && end.classList && end.classList.contains('tabs-end'))) {
         | 
| 13 | 
            +
                      end = end.nextSibling;
         | 
| 14 | 
            +
                    }
         | 
| 15 | 
            +
                    if (!end) return;
         | 
| 16 | 
            +
             | 
| 17 | 
            +
                    var node = start.nextSibling;
         | 
| 18 | 
            +
                    var tabs = [];
         | 
| 19 | 
            +
                    var currentTab = null;
         | 
| 20 | 
            +
                    while (node && node !== end) {
         | 
| 21 | 
            +
                      var next = node.nextSibling;
         | 
| 22 | 
            +
                      if (node.nodeType === Node.TEXT_NODE && !node.textContent.trim()) {
         | 
| 23 | 
            +
                        node = next; continue;
         | 
| 24 | 
            +
                      }
         | 
| 25 | 
            +
                      var text = (node.textContent || '').trim();
         | 
| 26 | 
            +
                      var m = text.match(/^\s*tab\d*\s*:\s*(.+)$/i);
         | 
| 27 | 
            +
                      if (m) {
         | 
| 28 | 
            +
                        currentTab = { title: m[1].trim(), nodes: [] };
         | 
| 29 | 
            +
                        tabs.push(currentTab);
         | 
| 30 | 
            +
                        if (node.parentNode) node.parentNode.removeChild(node);
         | 
| 31 | 
            +
                      } else if (currentTab) {
         | 
| 32 | 
            +
                        currentTab.nodes.push(node);
         | 
| 33 | 
            +
                      } else {
         | 
| 34 | 
            +
                      }
         | 
| 35 | 
            +
                      node = next;
         | 
| 36 | 
            +
                    }
         | 
| 37 | 
            +
             | 
| 38 | 
            +
                    if (tabs.length === 0) {
         | 
| 39 | 
            +
                      return;
         | 
| 40 | 
            +
                    }
         | 
| 41 | 
            +
             | 
| 42 | 
            +
                    var wrap = document.createElement('div');
         | 
| 43 | 
            +
                    wrap.className = 'tabs-wrap';
         | 
| 44 | 
            +
             | 
| 45 | 
            +
                    var nav = document.createElement('div');
         | 
| 46 | 
            +
                    nav.className = 'tabs-nav';
         | 
| 47 | 
            +
             | 
| 48 | 
            +
                    var panels = document.createElement('div');
         | 
| 49 | 
            +
                    panels.className = 'tabs-panels';
         | 
| 50 | 
            +
             | 
| 51 | 
            +
                    tabs.forEach(function (tab, i) {
         | 
| 52 | 
            +
                      var btn = document.createElement('button');
         | 
| 53 | 
            +
                      btn.type = 'button';
         | 
| 54 | 
            +
                      btn.className = 'tab-btn' + (i === 0 ? ' active' : '');
         | 
| 55 | 
            +
                      btn.setAttribute('data-idx', i);
         | 
| 56 | 
            +
                      btn.textContent = tab.title;
         | 
| 57 | 
            +
                      btn.addEventListener('click', function () {
         | 
| 58 | 
            +
                        var idx = +this.getAttribute('data-idx');
         | 
| 59 | 
            +
                        wrap.querySelectorAll('.tab-btn').forEach(function (b) {
         | 
| 60 | 
            +
                          b.classList.toggle('active', +b.getAttribute('data-idx') === idx);
         | 
| 61 | 
            +
                        });
         | 
| 62 | 
            +
                        wrap.querySelectorAll('.tab-panel').forEach(function (p, pi) {
         | 
| 63 | 
            +
                          p.classList.toggle('active', pi === idx);
         | 
| 64 | 
            +
                        });
         | 
| 65 | 
            +
                      });
         | 
| 66 | 
            +
                      nav.appendChild(btn);
         | 
| 67 | 
            +
             | 
| 68 | 
            +
                      var panel = document.createElement('div');
         | 
| 69 | 
            +
                      panel.className = 'tab-panel' + (i === 0 ? ' active' : '');
         | 
| 70 | 
            +
                      tab.nodes.forEach(function (n) {
         | 
| 71 | 
            +
                        panel.appendChild(n.cloneNode(true));
         | 
| 72 | 
            +
                      });
         | 
| 73 | 
            +
                      panels.appendChild(panel);
         | 
| 74 | 
            +
                    });
         | 
| 75 | 
            +
             | 
| 76 | 
            +
                    wrap.appendChild(nav);
         | 
| 77 | 
            +
                    wrap.appendChild(panels);
         | 
| 78 | 
            +
             | 
| 79 | 
            +
                    start.parentNode.insertBefore(wrap, start);
         | 
| 80 | 
            +
             | 
| 81 | 
            +
                    var cur = start;
         | 
| 82 | 
            +
                    while (cur) {
         | 
| 83 | 
            +
                      var nx = cur.nextSibling;
         | 
| 84 | 
            +
                      if (cur.parentNode) cur.parentNode.removeChild(cur);
         | 
| 85 | 
            +
                      if (cur === end) break;
         | 
| 86 | 
            +
                      cur = nx;
         | 
| 87 | 
            +
                    }
         | 
| 88 | 
            +
                  });
         | 
| 89 | 
            +
                }
         | 
| 90 | 
            +
             | 
| 91 | 
            +
                if (document.readyState === 'loading') document.addEventListener('DOMContentLoaded', processTabs);
         | 
| 92 | 
            +
                else processTabs();
         | 
| 93 | 
            +
              })();
         | 
| 94 | 
            +
            </script>
         | 
    
        data/_includes/toc
    ADDED
    
    | @@ -0,0 +1,160 @@ | |
| 1 | 
            +
            <nav class="toc" id="toc" data-toc-selector="{{ include.selector | default: '.post-content' }}"
         | 
| 2 | 
            +
              data-toc-max-level="{{ include.max_level | default: 3 }}"
         | 
| 3 | 
            +
              data-toc-scroll-offset="{{ include.scroll_offset | default: 20 }}">
         | 
| 4 | 
            +
              <div class="toc-head">
         | 
| 5 | 
            +
                <h2>{{ include.title | default: "TOC" }}</h2>
         | 
| 6 | 
            +
                <button class="toc-toggle" aria-expanded="true" type="button">{{ include.btn_hidden }}</button>
         | 
| 7 | 
            +
              </div>
         | 
| 8 | 
            +
              <div class="toc-list-wrapper">
         | 
| 9 | 
            +
                <ul class="toc-list" role="list"></ul>
         | 
| 10 | 
            +
                <p class="toc-empty" style="display:none">No titles found.</p>
         | 
| 11 | 
            +
              </div>
         | 
| 12 | 
            +
            </nav>
         | 
| 13 | 
            +
             | 
| 14 | 
            +
            <script>
         | 
| 15 | 
            +
            (function () {
         | 
| 16 | 
            +
              function slugify(text) {
         | 
| 17 | 
            +
                if (!text) return '';
         | 
| 18 | 
            +
                return text.toString().toLowerCase().trim()
         | 
| 19 | 
            +
                  .normalize('NFKD').replace(/[\u0300-\u036f]/g, '')
         | 
| 20 | 
            +
                  .replace(/[^\w\s-]/g, '').replace(/\s+/g, '-').replace(/--+/g, '-');
         | 
| 21 | 
            +
              }
         | 
| 22 | 
            +
             | 
| 23 | 
            +
              function buildTOC(tocEl) {
         | 
| 24 | 
            +
                const selector = tocEl.dataset.tocSelector || '.post-content';
         | 
| 25 | 
            +
                const maxLevel = parseInt(tocEl.dataset.tocMaxLevel || '3', 10);
         | 
| 26 | 
            +
                const offset = parseInt(tocEl.dataset.tocScrollOffset || '20', 10);
         | 
| 27 | 
            +
                const root = document.querySelector(selector);
         | 
| 28 | 
            +
             | 
| 29 | 
            +
                if (!root) {
         | 
| 30 | 
            +
                  tocEl.querySelector('.toc-empty').textContent = `Content not found (${selector})`;
         | 
| 31 | 
            +
                  tocEl.querySelector('.toc-empty').style.display = 'block';
         | 
| 32 | 
            +
                  return;
         | 
| 33 | 
            +
                }
         | 
| 34 | 
            +
             | 
| 35 | 
            +
                const headings = Array.from(root.querySelectorAll(Array(maxLevel).fill(0).map((_, i) => `h${i + 1}`).join(',')))
         | 
| 36 | 
            +
                  .filter(h => !tocEl.contains(h))
         | 
| 37 | 
            +
                  .filter(h => parseInt(h.tagName.substring(1)) <= maxLevel);
         | 
| 38 | 
            +
             | 
| 39 | 
            +
                if (headings.length === 0) {
         | 
| 40 | 
            +
                  tocEl.querySelector('.toc-empty').style.display = 'block';
         | 
| 41 | 
            +
                  return;
         | 
| 42 | 
            +
                }
         | 
| 43 | 
            +
             | 
| 44 | 
            +
                const tocRoot = tocEl.querySelector('.toc-list');
         | 
| 45 | 
            +
                tocRoot.innerHTML = '';
         | 
| 46 | 
            +
             | 
| 47 | 
            +
                const idCounts = {};
         | 
| 48 | 
            +
                headings.forEach(h => {
         | 
| 49 | 
            +
                  if (!h.id) {
         | 
| 50 | 
            +
                    let id = slugify(h.textContent);
         | 
| 51 | 
            +
                    if (!id) id = 'section';
         | 
| 52 | 
            +
                    if (idCounts[id]) { idCounts[id] += 1; id = id + '-' + idCounts[id]; }
         | 
| 53 | 
            +
                    else idCounts[id] = 1;
         | 
| 54 | 
            +
                    h.id = id;
         | 
| 55 | 
            +
                  }
         | 
| 56 | 
            +
                });
         | 
| 57 | 
            +
             | 
| 58 | 
            +
                // Build hierarchical tree
         | 
| 59 | 
            +
                const stack = [{ level: 0, ul: tocRoot }];
         | 
| 60 | 
            +
                headings.forEach((h, i) => {
         | 
| 61 | 
            +
                  const level = parseInt(h.tagName.substring(1));
         | 
| 62 | 
            +
                  const li = document.createElement('li');
         | 
| 63 | 
            +
                  const a = document.createElement('a');
         | 
| 64 | 
            +
                  a.href = '#' + h.id;
         | 
| 65 | 
            +
                  a.textContent = h.textContent.trim();
         | 
| 66 | 
            +
                  a.addEventListener('click', e => {
         | 
| 67 | 
            +
                    e.preventDefault();
         | 
| 68 | 
            +
                    window.scrollTo({ top: h.getBoundingClientRect().top + window.scrollY - offset, behavior: 'smooth' });
         | 
| 69 | 
            +
                    history.replaceState(null, '', '#' + h.id);
         | 
| 70 | 
            +
             | 
| 71 | 
            +
                    // // Clicking on the TOC menu closes the TOC
         | 
| 72 | 
            +
                    // const wrapper = tocEl.querySelector('.toc-list-wrapper');
         | 
| 73 | 
            +
                    // const toggle = tocEl.querySelector('.toc-toggle');
         | 
| 74 | 
            +
                    // wrapper.style.display = 'none';
         | 
| 75 | 
            +
                    // toggle.setAttribute('aria-expanded', 'false');
         | 
| 76 | 
            +
                    // toggle.textContent = '{ { include.btn_show } }';
         | 
| 77 | 
            +
                  });
         | 
| 78 | 
            +
                  li.appendChild(a);
         | 
| 79 | 
            +
             | 
| 80 | 
            +
                  while (stack.length > 1 && level <= stack[stack.length - 1].level) stack.pop();
         | 
| 81 | 
            +
                  const parent = stack[stack.length - 1].ul;
         | 
| 82 | 
            +
                  parent.appendChild(li);
         | 
| 83 | 
            +
             | 
| 84 | 
            +
                  const next = headings[i + 1];
         | 
| 85 | 
            +
                  if (next) {
         | 
| 86 | 
            +
                    const nextLevel = parseInt(next.tagName.substring(1));
         | 
| 87 | 
            +
                    if (nextLevel > level) {
         | 
| 88 | 
            +
                      const newUl = document.createElement('ul');
         | 
| 89 | 
            +
                      li.appendChild(newUl);
         | 
| 90 | 
            +
                      stack.push({ level, ul: newUl });
         | 
| 91 | 
            +
                    }
         | 
| 92 | 
            +
                  }
         | 
| 93 | 
            +
                });
         | 
| 94 | 
            +
             | 
| 95 | 
            +
                // Active Highlight
         | 
| 96 | 
            +
                const links = tocRoot.querySelectorAll('a');
         | 
| 97 | 
            +
                function onScroll() {
         | 
| 98 | 
            +
                  const fromTop = window.scrollY + offset + 1;
         | 
| 99 | 
            +
                  let current = headings[0];
         | 
| 100 | 
            +
                  for (let i = 0; i < headings.length; i++) {
         | 
| 101 | 
            +
                    if (headings[i].offsetTop <= fromTop) current = headings[i];
         | 
| 102 | 
            +
                  }
         | 
| 103 | 
            +
                  links.forEach(l => l.classList.toggle('active', l.getAttribute('href') === '#' + current.id));
         | 
| 104 | 
            +
                }
         | 
| 105 | 
            +
                window.addEventListener('scroll', onScroll, { passive: true });
         | 
| 106 | 
            +
                onScroll();
         | 
| 107 | 
            +
              }
         | 
| 108 | 
            +
             | 
| 109 | 
            +
              document.addEventListener('DOMContentLoaded', function () {
         | 
| 110 | 
            +
                document.querySelectorAll('.toc').forEach(toc => {
         | 
| 111 | 
            +
                  buildTOC(toc);
         | 
| 112 | 
            +
                  const toggle = toc.querySelector('.toc-toggle');
         | 
| 113 | 
            +
                  const wrapper = toc.querySelector('.toc-list-wrapper');
         | 
| 114 | 
            +
             | 
| 115 | 
            +
                  wrapper.style.display = 'none';
         | 
| 116 | 
            +
                  toggle.setAttribute('aria-expanded', 'false');
         | 
| 117 | 
            +
                  toggle.textContent = '{{ include.btn_show }}';
         | 
| 118 | 
            +
             | 
| 119 | 
            +
                  toggle.addEventListener('click', () => {
         | 
| 120 | 
            +
                    const expanded = toggle.getAttribute('aria-expanded') === 'true';
         | 
| 121 | 
            +
                    wrapper.style.display = expanded ? 'none' : 'block';
         | 
| 122 | 
            +
                    toggle.setAttribute('aria-expanded', (!expanded).toString());
         | 
| 123 | 
            +
                    toggle.textContent = expanded ? '{{ include.btn_show }}' : '{{ include.btn_hidden }}';
         | 
| 124 | 
            +
                  });
         | 
| 125 | 
            +
             | 
| 126 | 
            +
                  const tocTop = toc.offsetTop;
         | 
| 127 | 
            +
             | 
| 128 | 
            +
                  function handleScrollFix() {
         | 
| 129 | 
            +
                    const scrollTop = window.scrollY || document.documentElement.scrollTop;
         | 
| 130 | 
            +
             | 
| 131 | 
            +
                    // Fixes pinning behavior in Chrome
         | 
| 132 | 
            +
                    if (scrollTop >= tocTop) {
         | 
| 133 | 
            +
                      toc.classList.add('fixed');
         | 
| 134 | 
            +
                      toc.style.position = 'fixed';
         | 
| 135 | 
            +
                      toc.style.top = '0';
         | 
| 136 | 
            +
                      toc.style.zIndex = '9999';
         | 
| 137 | 
            +
                      // toc.style.width = toc.offsetWidth + 'px';
         | 
| 138 | 
            +
                    } else {
         | 
| 139 | 
            +
                      toc.classList.remove('fixed');
         | 
| 140 | 
            +
                      toc.style.position = '';
         | 
| 141 | 
            +
                      toc.style.top = '';
         | 
| 142 | 
            +
                      toc.style.width = '';
         | 
| 143 | 
            +
                    }
         | 
| 144 | 
            +
             | 
| 145 | 
            +
                    // // Automatically closes the TOC if it is open and scrolled to it.
         | 
| 146 | 
            +
                    // const rect = toc.getBoundingClientRect();
         | 
| 147 | 
            +
                    // if (rect.top <= 0 && toggle.getAttribute('aria-expanded') === 'true') {
         | 
| 148 | 
            +
                    //   wrapper.style.display = 'none';
         | 
| 149 | 
            +
                    //   toggle.setAttribute('aria-expanded', 'false');
         | 
| 150 | 
            +
                    //   toggle.textContent = '{ { include.btn_show } }';
         | 
| 151 | 
            +
                    // }
         | 
| 152 | 
            +
                  }
         | 
| 153 | 
            +
             | 
| 154 | 
            +
                  window.addEventListener('scroll', handleScrollFix, { passive: true });
         | 
| 155 | 
            +
                  window.addEventListener('resize', handleScrollFix);
         | 
| 156 | 
            +
                  handleScrollFix();
         | 
| 157 | 
            +
                });
         | 
| 158 | 
            +
              });
         | 
| 159 | 
            +
            })();
         | 
| 160 | 
            +
            </script>
         | 
    
        data/_includes/video
    ADDED
    
    | @@ -0,0 +1,10 @@ | |
| 1 | 
            +
            {% assign video_id = include.url | split: "v=" | last | split: "&" | first %}
         | 
| 2 | 
            +
            <div class="video-wrapper">
         | 
| 3 | 
            +
              <iframe src="https://www.youtube.com/embed/{{ video_id }}" title="{{ include.title | default: 'Video' }}"
         | 
| 4 | 
            +
                frameborder="0" allowfullscreen>
         | 
| 5 | 
            +
              </iframe>
         | 
| 6 | 
            +
              <noscript>
         | 
| 7 | 
            +
                <p>The video is not available for embedding. Watch it on <a href="{{ include.url }}" target="_blank">YouTube</a>.
         | 
| 8 | 
            +
                </p>
         | 
| 9 | 
            +
              </noscript>
         | 
| 10 | 
            +
            </div>
         | 
    
        data/_layouts/blog.html
    ADDED
    
    | @@ -0,0 +1,46 @@ | |
| 1 | 
            +
            ---
         | 
| 2 | 
            +
            layout: default
         | 
| 3 | 
            +
            ---
         | 
| 4 | 
            +
             | 
| 5 | 
            +
            {%- if page.pagination.enabled == true and site.pagination.enabled == true -%}
         | 
| 6 | 
            +
              {%- assign count_posts = paginator.total_posts -%}
         | 
| 7 | 
            +
            {%- else -%}
         | 
| 8 | 
            +
              {%- for _ in site.posts -%}
         | 
| 9 | 
            +
                {%- capture count_posts -%} {{ count_posts | plus: 1 }} {%- endcapture -%}
         | 
| 10 | 
            +
              {%- endfor -%}
         | 
| 11 | 
            +
            {%- endif -%}
         | 
| 12 | 
            +
             | 
| 13 | 
            +
            <div class="container blog">
         | 
| 14 | 
            +
              {%- include layout/blog_search.html -%}
         | 
| 15 | 
            +
             | 
| 16 | 
            +
              <div id="posts" class="row">
         | 
| 17 | 
            +
                {%- if page.title -%}
         | 
| 18 | 
            +
                  <h2 class="blog-subtitle">[ {{ site.text.blog.subtitle | default: "posts" }}:  {{ count_posts }} ]</h2>
         | 
| 19 | 
            +
                {%- endif -%}
         | 
| 20 | 
            +
             | 
| 21 | 
            +
                {%- if site.posts.size > 0 -%}
         | 
| 22 | 
            +
                  <ul class="row blog-list">
         | 
| 23 | 
            +
                    {%- if page.pagination.enabled == true and site.pagination.enabled == true -%}
         | 
| 24 | 
            +
                      {%- assign posts = paginator.posts -%}
         | 
| 25 | 
            +
                    {%- else -%}
         | 
| 26 | 
            +
                      {% assign posts = site.posts %}
         | 
| 27 | 
            +
                    {%- endif -%}
         | 
| 28 | 
            +
             | 
| 29 | 
            +
                    {%- for post in posts -%}
         | 
| 30 | 
            +
                    <li class="blog-list__item">
         | 
| 31 | 
            +
                      {%- assign date_format =  "%b %-d,%Y" -%}
         | 
| 32 | 
            +
                      <span class="blog-list__meta">{{ post.date | date: date_format }}</span> » 
         | 
| 33 | 
            +
                      <a class="blog-list__link" href="{{ post.url | relative_url }}">
         | 
| 34 | 
            +
                        {{ post.title | escape }}
         | 
| 35 | 
            +
                      </a>
         | 
| 36 | 
            +
                      {%- if post.draft -%}
         | 
| 37 | 
            +
                        <span class="draft-badge">[ this is a draft ]</span>
         | 
| 38 | 
            +
                      {%- endif -%}
         | 
| 39 | 
            +
                    </li>
         | 
| 40 | 
            +
                    {%- endfor -%}
         | 
| 41 | 
            +
                  </ul>
         | 
| 42 | 
            +
                {%- endif -%}
         | 
| 43 | 
            +
             | 
| 44 | 
            +
                {%- include layout/paginator.html -%}
         | 
| 45 | 
            +
              </div>
         | 
| 46 | 
            +
            </div>
         |