rawfeed 0.1.1 → 0.1.2
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/README.md +3 -7
- data/_data/resume.yml +34 -0
- data/_includes/layout/data.liquid +1 -0
- data/_includes/toc +1 -1
- data/_includes/video +2 -3
- data/_layouts/blog.html +7 -2
- data/_layouts/page.html +31 -0
- data/_layouts/post.html +25 -8
- data/_layouts/resume.html +43 -0
- data/_layouts/tag_posts.html +3 -2
- data/_sass/base/_reset.scss +33 -4
- data/_sass/components/_markdown.scss +5 -1
- data/_sass/layouts/_blog.scss +1 -1
- data/_sass/layouts/_page.scss +12 -0
- data/_sass/layouts/_post.scss +17 -23
- data/_sass/layouts/_resume.scss +32 -1
- data/assets/json/blog_search.json +2 -2
- data/assets/json/datelang.json +290 -0
- data/lib/rawfeed/datelang.rb +101 -0
- data/lib/rawfeed/draft.rb +1 -1
- data/lib/rawfeed/page.rb +2 -1
- data/lib/rawfeed/reading_time.rb +17 -0
- data/lib/rawfeed/version.rb +1 -1
- data/lib/rawfeed.rb +5 -0
- metadata +4 -1
    
        checksums.yaml
    CHANGED
    
    | @@ -1,7 +1,7 @@ | |
| 1 1 | 
             
            ---
         | 
| 2 2 | 
             
            SHA256:
         | 
| 3 | 
            -
              metadata.gz:  | 
| 4 | 
            -
              data.tar.gz:  | 
| 3 | 
            +
              metadata.gz: 8592ae30b0051b09cbb61aef70b5d6af2ebc46b5b3b2dba0e21c17b6c1aac881
         | 
| 4 | 
            +
              data.tar.gz: 1d1f85c4ded6ed5742be960c4a84c55c7cdf3a5138a80179b18b2a0745a96258
         | 
| 5 5 | 
             
            SHA512:
         | 
| 6 | 
            -
              metadata.gz:  | 
| 7 | 
            -
              data.tar.gz:  | 
| 6 | 
            +
              metadata.gz: 1ce3dd3f7a45c1fcd1b9825f52df2ed0c5d3eb0300dd9d868fa6420bf3ccdcf107f3deca58261d73e7b045baf810cbd67934fcd6da700730152bd9a253559199
         | 
| 7 | 
            +
              data.tar.gz: 4051a9375c9f6c885d6f1645cf398e478778ee00d13622ca1de5bd789b176efcc16c9d06a796d321f5510af06b93b6bbb95158598482f4c4567324ed45e8d771
         | 
    
        data/README.md
    CHANGED
    
    | @@ -3,6 +3,8 @@ | |
| 3 3 | 
             
              <br>
         | 
| 4 4 | 
             
              <small>Rawfeed — A raw Jekyll theme for minimalists</small>
         | 
| 5 5 | 
             
              <br>
         | 
| 6 | 
            +
              <a href="https://badge.fury.io/rb/rawfeed"><img src="https://badge.fury.io/rb/rawfeed.svg" alt="Gem Version" height="18"></a>
         | 
| 7 | 
            +
              <br>
         | 
| 6 8 | 
             
              <a href="https://williamcanin.github.io/rawfeed" target="_blank">Theme Preview</a>
         | 
| 7 9 | 
             
            </p>
         | 
| 8 10 |  | 
| @@ -58,13 +60,7 @@ iwr -useb https://raw.githubusercontent.com/williamcanin/rawfeed/refs/heads/main | |
| 58 60 |  | 
| 59 61 | 
             
            # Usage
         | 
| 60 62 |  | 
| 61 | 
            -
            ** | 
| 62 | 
            -
             | 
| 63 | 
            -
            ```shell
         | 
| 64 | 
            -
            npm install
         | 
| 65 | 
            -
            ```
         | 
| 66 | 
            -
             | 
| 67 | 
            -
            **(2)** - For **rawfeed** manipulation commands, use:
         | 
| 63 | 
            +
            After installation, run the command below to see the **rawfeed** command menu:
         | 
| 68 64 |  | 
| 69 65 | 
             
            ```shell
         | 
| 70 66 | 
             
            npm run help
         | 
    
        data/_data/resume.yml
    CHANGED
    
    | @@ -141,6 +141,31 @@ body: | |
| 141 141 | 
             
                      - I collaborated with engineering teams to deploy **Keras** and **Matlab** models in production
         | 
| 142 142 | 
             
                      environments, impacting **millions of platform** users.
         | 
| 143 143 |  | 
| 144 | 
            +
              # section: [Certificates]
         | 
| 145 | 
            +
              # Full links will only appear in print mode. Online and PDF modes are clickable.
         | 
| 146 | 
            +
              certificates:
         | 
| 147 | 
            +
                enable: true
         | 
| 148 | 
            +
                caption: Certificates
         | 
| 149 | 
            +
                section:
         | 
| 150 | 
            +
                  - course: LPIC-2
         | 
| 151 | 
            +
                    certificate: https://github.com/williamcanin/rawfeed
         | 
| 152 | 
            +
                    period:
         | 
| 153 | 
            +
                      year: 2020
         | 
| 154 | 
            +
                      hours: 20 hours
         | 
| 155 | 
            +
                    company:
         | 
| 156 | 
            +
                      name: Linux Professional Institute
         | 
| 157 | 
            +
                      site: https://www.lpi.org
         | 
| 158 | 
            +
             | 
| 159 | 
            +
                  - course: LPIC-1
         | 
| 160 | 
            +
                    certificate: https://github.com/williamcanin/rawfeed
         | 
| 161 | 
            +
                    period:
         | 
| 162 | 
            +
                      year: 2018
         | 
| 163 | 
            +
                      hours: 19 hours
         | 
| 164 | 
            +
                    company:
         | 
| 165 | 
            +
                      caption:
         | 
| 166 | 
            +
                      name: Linux Professional Institute
         | 
| 167 | 
            +
                      site: https://www.lpi.org
         | 
| 168 | 
            +
             | 
| 144 169 | 
             
              # section: [Publications]
         | 
| 145 170 | 
             
              # Full links will only appear in print mode. Online and PDF modes are clickable.
         | 
| 146 171 | 
             
              publications:
         | 
| @@ -182,3 +207,12 @@ body: | |
| 182 207 | 
             
                    details: |
         | 
| 183 208 | 
             
                      - I led a class of **Computer Engineering** students in the modern **AI course**.
         | 
| 184 209 | 
             
                      It was over **170 hours** of classes.
         | 
| 210 | 
            +
             | 
| 211 | 
            +
              # section: [Markdown]
         | 
| 212 | 
            +
              # Here you can put text in markdown formatting
         | 
| 213 | 
            +
              markdown:
         | 
| 214 | 
            +
                enable: true
         | 
| 215 | 
            +
                caption: Notes
         | 
| 216 | 
            +
                content: |
         | 
| 217 | 
            +
                  - I led a class of **Computer Engineering** students in the modern **AI course**.
         | 
| 218 | 
            +
                  It was over **170 hours** of classes.
         | 
    
        data/_includes/toc
    CHANGED
    
    | @@ -21,7 +21,7 @@ | |
| 21 21 | 
             
              }
         | 
| 22 22 |  | 
| 23 23 | 
             
              function buildTOC(tocEl) {
         | 
| 24 | 
            -
                const selector = tocEl.dataset.tocSelector || '.post-content';
         | 
| 24 | 
            +
                const selector = tocEl.dataset.tocSelector || '.post-content' || '.page-content';
         | 
| 25 25 | 
             
                const maxLevel = parseInt(tocEl.dataset.tocMaxLevel || '3', 10);
         | 
| 26 26 | 
             
                const offset = parseInt(tocEl.dataset.tocScrollOffset || '20', 10);
         | 
| 27 27 | 
             
                const root = document.querySelector(selector);
         | 
    
        data/_includes/video
    CHANGED
    
    | @@ -1,7 +1,6 @@ | |
| 1 | 
            -
            {% assign video_id = include.url | split: "v=" | last | split: "&" | first %}
         | 
| 2 1 | 
             
            <div class="video-wrapper">
         | 
| 3 | 
            -
              <iframe src=" | 
| 4 | 
            -
                frameborder="0" allowfullscreen>
         | 
| 2 | 
            +
              <iframe src="{{ include.url }}" title="{{ include.title | default: 'Video' }}"
         | 
| 3 | 
            +
                frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" referrerpolicy="strict-origin-when-cross-origin" allowfullscreen>
         | 
| 5 4 | 
             
              </iframe>
         | 
| 6 5 | 
             
              <noscript>
         | 
| 7 6 | 
             
                <p>The video is not available for embedding. Watch it on <a href="{{ include.url }}" target="_blank">YouTube</a>.
         | 
    
        data/_layouts/blog.html
    CHANGED
    
    | @@ -2,6 +2,8 @@ | |
| 2 2 | 
             
            layout: default
         | 
| 3 3 | 
             
            ---
         | 
| 4 4 |  | 
| 5 | 
            +
            {%- include layout/data.liquid -%}
         | 
| 6 | 
            +
             | 
| 5 7 | 
             
            {%- if page.pagination.enabled == true and site.pagination.enabled == true -%}
         | 
| 6 8 | 
             
              {%- assign count_posts = paginator.total_posts -%}
         | 
| 7 9 | 
             
            {%- else -%}
         | 
| @@ -28,8 +30,11 @@ layout: default | |
| 28 30 |  | 
| 29 31 | 
             
                    {%- for post in posts -%}
         | 
| 30 32 | 
             
                    <li class="blog-list__item">
         | 
| 31 | 
            -
                      {%-  | 
| 32 | 
            -
             | 
| 33 | 
            +
                      {%- if site.datelang -%}
         | 
| 34 | 
            +
                        <span class="blog-list__meta">{% datelang post.date format:date_format %}</span> » 
         | 
| 35 | 
            +
                      {%- else -%}
         | 
| 36 | 
            +
                        <span class="blog-list__meta">{{ post.date | date: "%b %-d, %Y" }}</span> » 
         | 
| 37 | 
            +
                      {%- endif -%}
         | 
| 33 38 | 
             
                      <a class="blog-list__link" href="{{ post.url | relative_url }}">
         | 
| 34 39 | 
             
                        {{ post.title | escape }}
         | 
| 35 40 | 
             
                      </a>
         | 
    
        data/_layouts/page.html
    CHANGED
    
    | @@ -2,8 +2,39 @@ | |
| 2 2 | 
             
            layout: default
         | 
| 3 3 | 
             
            ---
         | 
| 4 4 |  | 
| 5 | 
            +
            {%- include layout/data.liquid -%}
         | 
| 6 | 
            +
             | 
| 5 7 | 
             
            <div class="container page">
         | 
| 8 | 
            +
              {%- if page.date or page.reading_time -%}
         | 
| 9 | 
            +
                <div class="row">
         | 
| 10 | 
            +
                  {%- if page.date -%}
         | 
| 11 | 
            +
                  <time class="dt-published" datetime="{{ page.date | date_to_xmlschema }}" itemprop="datePublished">
         | 
| 12 | 
            +
                    {%- if site.datelang -%}
         | 
| 13 | 
            +
                      {% datelang page.date format:date_format %}
         | 
| 14 | 
            +
                    {%- else -%}
         | 
| 15 | 
            +
                      {{ page.date | date: "%b %-d, %Y" }}
         | 
| 16 | 
            +
                    {%- endif -%}
         | 
| 17 | 
            +
                  </time>
         | 
| 18 | 
            +
                  {%- endif -%}
         | 
| 19 | 
            +
                  {%- if page.reading_time -%}
         | 
| 20 | 
            +
                    <div class="page-reading_time">
         | 
| 21 | 
            +
                      <p>[ {{ page.content | reading_time }} ]</p>
         | 
| 22 | 
            +
                    </div>
         | 
| 23 | 
            +
                  {%- endif -%}
         | 
| 24 | 
            +
                </div>
         | 
| 25 | 
            +
              {%- endif -%}
         | 
| 26 | 
            +
             | 
| 6 27 | 
             
              <div class="row">
         | 
| 7 28 | 
             
                <div class="page-content">{{ content }}</div>
         | 
| 8 29 | 
             
              </div>
         | 
| 30 | 
            +
             | 
| 31 | 
            +
              {%- if page.update_date -%}
         | 
| 32 | 
            +
                <div class="row page-modified">
         | 
| 33 | 
            +
                  <time class="dt-modified" datetime="{{ page.date | date_to_xmlschema }}" itemprop="dateModified">
         | 
| 34 | 
            +
                    <strong>{{ site.text.page.updated_on | default: "Page updated on" }}:</strong> {% datelang page.update_date format:date_format %}
         | 
| 35 | 
            +
                  </time>
         | 
| 36 | 
            +
                </div>
         | 
| 37 | 
            +
              {%- endif -%}
         | 
| 9 38 | 
             
            </div>
         | 
| 39 | 
            +
             | 
| 40 | 
            +
            <script src="{{ '/assets/js/toc.js' | relative_url }}"></script>
         | 
    
        data/_layouts/post.html
    CHANGED
    
    | @@ -2,6 +2,8 @@ | |
| 2 2 | 
             
            layout: default
         | 
| 3 3 | 
             
            ---
         | 
| 4 4 |  | 
| 5 | 
            +
            {%- include layout/data.liquid -%}
         | 
| 6 | 
            +
             | 
| 5 7 | 
             
            <article class="container post" itemscope itemtype="http://schema.org/BlogPosting">
         | 
| 6 8 | 
             
              <div class="row">
         | 
| 7 9 |  | 
| @@ -11,7 +13,11 @@ layout: default | |
| 11 13 | 
             
                  <div class="row post-meta">
         | 
| 12 14 | 
             
                    <div class="col-sm d-flex justify-content-start">
         | 
| 13 15 | 
             
                      <time class="dt-published" datetime="{{ page.date | date_to_xmlschema }}" itemprop="datePublished">
         | 
| 14 | 
            -
                      { | 
| 16 | 
            +
                      {%- if site.datelang -%}
         | 
| 17 | 
            +
                        {% datelang page.date format:date_format %}
         | 
| 18 | 
            +
                      {%- else -%}
         | 
| 19 | 
            +
                        {{ page.date | date: "%b %-d, %Y" }}
         | 
| 20 | 
            +
                      {%- endif -%}
         | 
| 15 21 | 
             
                      </time>
         | 
| 16 22 | 
             
                    </div>
         | 
| 17 23 | 
             
                    <div class="col-sm d-flex justify-content-end">
         | 
| @@ -23,6 +29,11 @@ layout: default | |
| 23 29 | 
             
                      </span>
         | 
| 24 30 | 
             
                      {%- endif -%}
         | 
| 25 31 | 
             
                    </div>
         | 
| 32 | 
            +
                    {%- if site.reading_time.enable -%}
         | 
| 33 | 
            +
                    <div class="post-reading_time">
         | 
| 34 | 
            +
                      [ {{ page.content | reading_time }} ]
         | 
| 35 | 
            +
                    </div>
         | 
| 36 | 
            +
                    {%- endif -%}
         | 
| 26 37 | 
             
                  </div>
         | 
| 27 38 |  | 
| 28 39 | 
             
                </header>
         | 
| @@ -33,11 +44,14 @@ layout: default | |
| 33 44 |  | 
| 34 45 | 
             
                {%- if page.update_date -%}
         | 
| 35 46 | 
             
                <div class="row post-modified">
         | 
| 36 | 
            -
                  < | 
| 37 | 
            -
                    < | 
| 38 | 
            -
             | 
| 39 | 
            -
             | 
| 40 | 
            -
             | 
| 47 | 
            +
                  <time class="dt-modified" datetime="{{ page.date | date_to_xmlschema }}" itemprop="dateModified">
         | 
| 48 | 
            +
                    <strong>{{ site.text.post.updated_on | default: "Post updated on" }}:</strong> 
         | 
| 49 | 
            +
                    {%- if site.datelang -%}
         | 
| 50 | 
            +
                      {% datelang page.update_date format:date_format %}
         | 
| 51 | 
            +
                    {%- else -%}
         | 
| 52 | 
            +
                      {{ page.date | date: "%b %-d, %Y" }}
         | 
| 53 | 
            +
                    {%- endif -%}
         | 
| 54 | 
            +
                  </time>
         | 
| 41 55 | 
             
                </div>
         | 
| 42 56 | 
             
                {%- endif -%}
         | 
| 43 57 |  | 
| @@ -85,8 +99,11 @@ layout: default | |
| 85 99 | 
             
                    <ul class="related-posts-list">
         | 
| 86 100 | 
             
                      {%- for post in related_posts limit:5 -%}
         | 
| 87 101 | 
             
                        <li class="related-posts-list__item">
         | 
| 88 | 
            -
                          {%-  | 
| 89 | 
            -
             | 
| 102 | 
            +
                          {%- if site.datelang -%}
         | 
| 103 | 
            +
                            <span class="related-posts-list__meta">{% datelang post.date format:date_format %}</span> » 
         | 
| 104 | 
            +
                          {%- else -%}
         | 
| 105 | 
            +
                            <span class="related-posts-list__meta">{{ post.date | date: "%b %-d, %Y" }}</span> » 
         | 
| 106 | 
            +
                          {%- endif -%}
         | 
| 90 107 | 
             
                          <a class="related-posts-list__link" href="{{ post.url | relative_url }}">{{ post.title }}</a>
         | 
| 91 108 | 
             
                          {%- if post.draft -%}
         | 
| 92 109 | 
             
                            <span class="draft-badge">[ this is a draft ]</span>
         | 
    
        data/_layouts/resume.html
    CHANGED
    
    | @@ -139,6 +139,43 @@ | |
| 139 139 | 
             
                            {%- endfor -%}
         | 
| 140 140 | 
             
                          </section>
         | 
| 141 141 | 
             
                          {%- endif -%}
         | 
| 142 | 
            +
                          {%- if resume.body.certificates.enable -%}
         | 
| 143 | 
            +
                          <section class="row section certificate">
         | 
| 144 | 
            +
                            <h2 class="section-title">{{ resume.body.certificates.caption }}</h2>
         | 
| 145 | 
            +
                            {%- for cert in resume.body.certificates.section -%}
         | 
| 146 | 
            +
                              <div class="section-item">
         | 
| 147 | 
            +
                                <div class="row">
         | 
| 148 | 
            +
                                  <div class="title"><span class="marker">• </span>
         | 
| 149 | 
            +
                                  {%- if cert.certificate -%}
         | 
| 150 | 
            +
                                    <a href="{{ cert.certificate }}" target="_blank">{{ cert.course }}
         | 
| 151 | 
            +
                                      <small>{{ cert.certificate }}</small>
         | 
| 152 | 
            +
                                    </a>
         | 
| 153 | 
            +
                                  {%- else -%}
         | 
| 154 | 
            +
                                    <span>{{ cert.course }}</span>
         | 
| 155 | 
            +
                                  {%- endif -%}
         | 
| 156 | 
            +
                                  </div>
         | 
| 157 | 
            +
                                </div>
         | 
| 158 | 
            +
                                  <div class="row">
         | 
| 159 | 
            +
                                    <div class="period">
         | 
| 160 | 
            +
                                      - 
         | 
| 161 | 
            +
                                      {%- if cert.period.year-%} <span class="time">{{ cert.period.year }}</span>{%- endif-%}
         | 
| 162 | 
            +
                                      {%- if cert.period.hours-%} — <span class="hours">{{ cert.period.hours }}</span>{%- endif-%}
         | 
| 163 | 
            +
                                    </div>
         | 
| 164 | 
            +
                                  </div>
         | 
| 165 | 
            +
                                <div class="row">
         | 
| 166 | 
            +
                                  <div class="company">
         | 
| 167 | 
            +
                                    {%- if cert.company.site -%}
         | 
| 168 | 
            +
                                      -  <a href="{{ cert.company.site }}" target="_blank">{{ cert.company.name }}
         | 
| 169 | 
            +
                                      </a>
         | 
| 170 | 
            +
                                    {%- else -%}
         | 
| 171 | 
            +
                                      - <span>{{ cert.company.name }}</span>
         | 
| 172 | 
            +
                                    {%- endif -%}
         | 
| 173 | 
            +
                                  </div>
         | 
| 174 | 
            +
                                </div>
         | 
| 175 | 
            +
                              </div>
         | 
| 176 | 
            +
                            {%- endfor -%}
         | 
| 177 | 
            +
                          </section>
         | 
| 178 | 
            +
                          {%- endif -%}
         | 
| 142 179 | 
             
                          {%- if resume.body.publications.enable -%}
         | 
| 143 180 | 
             
                          <section class="row section publications">
         | 
| 144 181 | 
             
                            <h2 class="section-title">{{ resume.body.publications.caption }}</h2>
         | 
| @@ -213,6 +250,12 @@ | |
| 213 250 | 
             
                            {%- endfor -%}
         | 
| 214 251 | 
             
                          </section>
         | 
| 215 252 | 
             
                          {%- endif -%}
         | 
| 253 | 
            +
                          {%- if resume.body.markdown.enable -%}
         | 
| 254 | 
            +
                          <section class="row section markdown">
         | 
| 255 | 
            +
                            <h2 class="section-title">{{ resume.body.markdown.caption }}</h2>
         | 
| 256 | 
            +
                            <div class="section-content">{{ resume.body.markdown.content | markdownify }}</div>
         | 
| 257 | 
            +
                          </section>
         | 
| 258 | 
            +
                          {%- endif -%}
         | 
| 216 259 | 
             
                        </div>
         | 
| 217 260 | 
             
                      </div>
         | 
| 218 261 | 
             
                    </div>
         | 
    
        data/_layouts/tag_posts.html
    CHANGED
    
    | @@ -2,6 +2,8 @@ | |
| 2 2 | 
             
            layout: default
         | 
| 3 3 | 
             
            ---
         | 
| 4 4 |  | 
| 5 | 
            +
            {%- include layout/data.liquid -%}
         | 
| 6 | 
            +
             | 
| 5 7 | 
             
            <div class="container tag-posts">
         | 
| 6 8 | 
             
              <div class="row">
         | 
| 7 9 | 
             
                <h1 class="tag-posts-title"><span>[ {{ site.text.tags_posts.title }}: </span>{{ page.title }}<span> ]</span></h1>
         | 
| @@ -9,8 +11,7 @@ layout: default | |
| 9 11 | 
             
                <ul class="row tag-posts-list">
         | 
| 10 12 | 
             
                  {%- for post in page.posts -%}
         | 
| 11 13 | 
             
                    <li class="tag-posts-list__item">
         | 
| 12 | 
            -
                      { | 
| 13 | 
            -
                      <span class="tag-posts-list__meta">{{ post.date | date: date_format }}</span> » 
         | 
| 14 | 
            +
                      <span class="tag-posts-list__meta">{% datelang post.date format:date_format %}</span> » 
         | 
| 14 15 | 
             
                      <a class="tag-posts-list__link" href="{{ post.url | relative_url }}">{{ post.title }}</a>
         | 
| 15 16 | 
             
                      {%- if post.draft -%}
         | 
| 16 17 | 
             
                        <span class="draft-badge">[ this is a draft ]</span>
         | 
    
        data/_sass/base/_reset.scss
    CHANGED
    
    | @@ -1,10 +1,39 @@ | |
| 1 | 
            -
            *{
         | 
| 2 | 
            -
             | 
| 3 | 
            -
             | 
| 4 | 
            -
             | 
| 1 | 
            +
            * {
         | 
| 2 | 
            +
             | 
| 3 | 
            +
              input,
         | 
| 4 | 
            +
              a,
         | 
| 5 | 
            +
              button {
         | 
| 6 | 
            +
             | 
| 7 | 
            +
                &:focus,
         | 
| 8 | 
            +
                &:hover,
         | 
| 9 | 
            +
                &:active {
         | 
| 10 | 
            +
                  outline: 0 !important;
         | 
| 5 11 | 
             
                }
         | 
| 6 12 | 
             
              }
         | 
| 13 | 
            +
             | 
| 7 14 | 
             
              li {
         | 
| 8 15 | 
             
                list-style: none;
         | 
| 9 16 | 
             
              }
         | 
| 17 | 
            +
             | 
| 18 | 
            +
              /* reset table values in <pre> */
         | 
| 19 | 
            +
              pre {
         | 
| 20 | 
            +
                code {
         | 
| 21 | 
            +
             | 
| 22 | 
            +
                  table,
         | 
| 23 | 
            +
                  tbody {
         | 
| 24 | 
            +
                    all: unset !important;
         | 
| 25 | 
            +
                  }
         | 
| 26 | 
            +
             | 
| 27 | 
            +
                  table {
         | 
| 28 | 
            +
                    tbody {
         | 
| 29 | 
            +
             | 
| 30 | 
            +
                      td,
         | 
| 31 | 
            +
                      tr {
         | 
| 32 | 
            +
                        border: none !important;
         | 
| 33 | 
            +
                        background-color: transparent !important;
         | 
| 34 | 
            +
                      }
         | 
| 35 | 
            +
                    }
         | 
| 36 | 
            +
                  }
         | 
| 37 | 
            +
                }
         | 
| 38 | 
            +
              }
         | 
| 10 39 | 
             
            }
         | 
| @@ -41,12 +41,16 @@ | |
| 41 41 | 
             
                background-color: var(--blockquote-bg-color);
         | 
| 42 42 | 
             
              }
         | 
| 43 43 |  | 
| 44 | 
            +
              li {
         | 
| 45 | 
            +
                list-style: disc !important;
         | 
| 46 | 
            +
              }
         | 
| 47 | 
            +
             | 
| 44 48 | 
             
              .task-list {
         | 
| 45 49 | 
             
                margin-left: 0;
         | 
| 46 50 | 
             
                padding-left: 18px;
         | 
| 47 51 |  | 
| 48 52 | 
             
                &-item {
         | 
| 49 | 
            -
                  list-style-type: none;
         | 
| 53 | 
            +
                  list-style-type: none !important;
         | 
| 50 54 |  | 
| 51 55 | 
             
                  &-checkbox {
         | 
| 52 56 | 
             
                    position: relative;
         | 
    
        data/_sass/layouts/_blog.scss
    CHANGED
    
    
    
        data/_sass/layouts/_page.scss
    CHANGED
    
    | @@ -2,4 +2,16 @@ | |
| 2 2 |  | 
| 3 3 | 
             
            .page {
         | 
| 4 4 | 
             
              @extend %markdown;
         | 
| 5 | 
            +
             | 
| 6 | 
            +
              .dt-published,
         | 
| 7 | 
            +
              .dt-modified {
         | 
| 8 | 
            +
                font-weight: normal !important;
         | 
| 9 | 
            +
                font-family: "SUSE Mono", sans-serif;
         | 
| 10 | 
            +
                color: var(--text-muted-color);
         | 
| 11 | 
            +
              }
         | 
| 12 | 
            +
             | 
| 13 | 
            +
              &-reading_time {
         | 
| 14 | 
            +
                margin-top: 15px;
         | 
| 15 | 
            +
                color: var(--text-muted-color);
         | 
| 16 | 
            +
              }
         | 
| 5 17 | 
             
            }
         | 
    
        data/_sass/layouts/_post.scss
    CHANGED
    
    | @@ -14,7 +14,19 @@ | |
| 14 14 | 
             
                list-style: disc;
         | 
| 15 15 | 
             
              }
         | 
| 16 16 |  | 
| 17 | 
            +
              .comments {
         | 
| 18 | 
            +
                &-title {
         | 
| 19 | 
            +
                  font-size: 1rem !important;
         | 
| 20 | 
            +
                }
         | 
| 21 | 
            +
              }
         | 
| 22 | 
            +
             | 
| 23 | 
            +
              &-reading_time {
         | 
| 24 | 
            +
                color: var(--text-muted-color);
         | 
| 25 | 
            +
                margin: 12px 0px;
         | 
| 26 | 
            +
              }
         | 
| 27 | 
            +
             | 
| 17 28 | 
             
              &-title {
         | 
| 29 | 
            +
                margin-top: 0px !important;
         | 
| 18 30 | 
             
                font-size: 1.3rem !important;
         | 
| 19 31 | 
             
                font-weight: bold;
         | 
| 20 32 | 
             
                margin-bottom: 40px !important;
         | 
| @@ -46,6 +58,10 @@ | |
| 46 58 | 
             
              .related-posts {
         | 
| 47 59 | 
             
                margin-bottom: 80px;
         | 
| 48 60 |  | 
| 61 | 
            +
                li {
         | 
| 62 | 
            +
                  list-style: none !important;
         | 
| 63 | 
            +
                }
         | 
| 64 | 
            +
             | 
| 49 65 | 
             
                &-title {
         | 
| 50 66 | 
             
                  font-size: 1.05rem;
         | 
| 51 67 | 
             
                  font-weight: bold;
         | 
| @@ -65,7 +81,7 @@ | |
| 65 81 |  | 
| 66 82 | 
             
                  &__meta {
         | 
| 67 83 | 
             
                    display: inline-block;
         | 
| 68 | 
            -
                    min-width:  | 
| 84 | 
            +
                    min-width: 115px !important;
         | 
| 69 85 | 
             
                    font-family: "SUSE Mono", sans-serif;
         | 
| 70 86 | 
             
                    font-optical-sizing: auto;
         | 
| 71 87 | 
             
                    font-style: normal;
         | 
| @@ -80,28 +96,6 @@ | |
| 80 96 | 
             
                }
         | 
| 81 97 | 
             
              }
         | 
| 82 98 |  | 
| 83 | 
            -
              /* reset table values in <pre> */
         | 
| 84 | 
            -
              pre {
         | 
| 85 | 
            -
                code {
         | 
| 86 | 
            -
             | 
| 87 | 
            -
                  table,
         | 
| 88 | 
            -
                  tbody {
         | 
| 89 | 
            -
                    all: unset !important;
         | 
| 90 | 
            -
                  }
         | 
| 91 | 
            -
             | 
| 92 | 
            -
                  table {
         | 
| 93 | 
            -
                    tbody {
         | 
| 94 | 
            -
             | 
| 95 | 
            -
                      td,
         | 
| 96 | 
            -
                      tr {
         | 
| 97 | 
            -
                        border: none !important;
         | 
| 98 | 
            -
                        background-color: transparent !important;
         | 
| 99 | 
            -
                      }
         | 
| 100 | 
            -
                    }
         | 
| 101 | 
            -
                  }
         | 
| 102 | 
            -
                }
         | 
| 103 | 
            -
              }
         | 
| 104 | 
            -
             | 
| 105 99 | 
             
              &-end {
         | 
| 106 100 | 
             
                margin: 40px 0px;
         | 
| 107 101 | 
             
                font-size: 1.2rem;
         | 
    
        data/_sass/layouts/_resume.scss
    CHANGED
    
    | @@ -169,7 +169,8 @@ | |
| 169 169 | 
             
                }
         | 
| 170 170 | 
             
              }
         | 
| 171 171 |  | 
| 172 | 
            -
              .time | 
| 172 | 
            +
              .time,
         | 
| 173 | 
            +
              .hours {
         | 
| 173 174 | 
             
                font-size: 9.5pt;
         | 
| 174 175 | 
             
                color: var(--resume-text-muted-color);
         | 
| 175 176 | 
             
              }
         | 
| @@ -252,6 +253,26 @@ | |
| 252 253 |  | 
| 253 254 | 
             
                  }
         | 
| 254 255 |  | 
| 256 | 
            +
                  .certificate {
         | 
| 257 | 
            +
                    margin-bottom: 12px;
         | 
| 258 | 
            +
             | 
| 259 | 
            +
                    .company {
         | 
| 260 | 
            +
                      margin-left: 12px;
         | 
| 261 | 
            +
             | 
| 262 | 
            +
                      .caption {
         | 
| 263 | 
            +
                        font-weight: bold;
         | 
| 264 | 
            +
                      }
         | 
| 265 | 
            +
                    }
         | 
| 266 | 
            +
             | 
| 267 | 
            +
                    .period {
         | 
| 268 | 
            +
                      margin-left: 12px;
         | 
| 269 | 
            +
             | 
| 270 | 
            +
                      .caption {
         | 
| 271 | 
            +
                        font-weight: bold;
         | 
| 272 | 
            +
                      }
         | 
| 273 | 
            +
                    }
         | 
| 274 | 
            +
                  }
         | 
| 275 | 
            +
             | 
| 255 276 | 
             
                  .publications {
         | 
| 256 277 | 
             
                    .section-item {
         | 
| 257 278 | 
             
                      .row {
         | 
| @@ -297,6 +318,16 @@ | |
| 297 318 | 
             
                      margin-top: 12px;
         | 
| 298 319 | 
             
                    }
         | 
| 299 320 | 
             
                  }
         | 
| 321 | 
            +
             | 
| 322 | 
            +
                  .markdown {
         | 
| 323 | 
            +
                    margin-bottom: 12px;
         | 
| 324 | 
            +
             | 
| 325 | 
            +
                    .section-content {
         | 
| 326 | 
            +
                      ul {
         | 
| 327 | 
            +
                        padding: 0 !important;
         | 
| 328 | 
            +
                      }
         | 
| 329 | 
            +
                    }
         | 
| 330 | 
            +
                  }
         | 
| 300 331 | 
             
                }
         | 
| 301 332 |  | 
| 302 333 | 
             
                a {
         | 
| @@ -2,7 +2,7 @@ | |
| 2 2 | 
             
            layout: none
         | 
| 3 3 | 
             
            ---
         | 
| 4 4 |  | 
| 5 | 
            -
            {%- assign date_format = | 
| 5 | 
            +
            {%- assign date_format = site.datelang.format -%}
         | 
| 6 6 |  | 
| 7 7 | 
             
            [
         | 
| 8 8 | 
             
              {% for post in site.posts %}
         | 
| @@ -10,7 +10,7 @@ layout: none | |
| 10 10 | 
             
                  "title"    : "{{ post.title | escape }}",
         | 
| 11 11 | 
             
                  "tags"     : "{{ post.tags | join: ', ' }}",
         | 
| 12 12 | 
             
                  "url"      : "{{ site.baseurl }}{{ post.url }}",
         | 
| 13 | 
            -
                  "date"     : "{ | 
| 13 | 
            +
                  "date"     : "{% datelang post.date format:date_format %}"
         | 
| 14 14 | 
             
                } {% unless forloop.last %},{% endunless %}
         | 
| 15 15 | 
             
              {% endfor %}
         | 
| 16 16 | 
             
            ]
         | 
| @@ -0,0 +1,290 @@ | |
| 1 | 
            +
            {
         | 
| 2 | 
            +
              "en_US": {
         | 
| 3 | 
            +
                "months_full": [
         | 
| 4 | 
            +
                  "",
         | 
| 5 | 
            +
                  "January",
         | 
| 6 | 
            +
                  "February",
         | 
| 7 | 
            +
                  "March",
         | 
| 8 | 
            +
                  "April",
         | 
| 9 | 
            +
                  "May",
         | 
| 10 | 
            +
                  "June",
         | 
| 11 | 
            +
                  "July",
         | 
| 12 | 
            +
                  "August",
         | 
| 13 | 
            +
                  "September",
         | 
| 14 | 
            +
                  "October",
         | 
| 15 | 
            +
                  "November",
         | 
| 16 | 
            +
                  "December"
         | 
| 17 | 
            +
                ],
         | 
| 18 | 
            +
                "months_short": [
         | 
| 19 | 
            +
                  "",
         | 
| 20 | 
            +
                  "Jan",
         | 
| 21 | 
            +
                  "Feb",
         | 
| 22 | 
            +
                  "Mar",
         | 
| 23 | 
            +
                  "Apr",
         | 
| 24 | 
            +
                  "May",
         | 
| 25 | 
            +
                  "Jun",
         | 
| 26 | 
            +
                  "Jul",
         | 
| 27 | 
            +
                  "Aug",
         | 
| 28 | 
            +
                  "Sep",
         | 
| 29 | 
            +
                  "Oct",
         | 
| 30 | 
            +
                  "Nov",
         | 
| 31 | 
            +
                  "Dec"
         | 
| 32 | 
            +
                ]
         | 
| 33 | 
            +
              },
         | 
| 34 | 
            +
              "pt_PT": {
         | 
| 35 | 
            +
                "months_full": [
         | 
| 36 | 
            +
                  "",
         | 
| 37 | 
            +
                  "Janeiro",
         | 
| 38 | 
            +
                  "Fevereiro",
         | 
| 39 | 
            +
                  "Março",
         | 
| 40 | 
            +
                  "Abril",
         | 
| 41 | 
            +
                  "Maio",
         | 
| 42 | 
            +
                  "Junho",
         | 
| 43 | 
            +
                  "Julho",
         | 
| 44 | 
            +
                  "Agosto",
         | 
| 45 | 
            +
                  "Setembro",
         | 
| 46 | 
            +
                  "Outubro",
         | 
| 47 | 
            +
                  "Novembro",
         | 
| 48 | 
            +
                  "Dezembro"
         | 
| 49 | 
            +
                ],
         | 
| 50 | 
            +
                "months_short": [
         | 
| 51 | 
            +
                  "",
         | 
| 52 | 
            +
                  "Jan",
         | 
| 53 | 
            +
                  "Fev",
         | 
| 54 | 
            +
                  "Mar",
         | 
| 55 | 
            +
                  "Abr",
         | 
| 56 | 
            +
                  "Mai",
         | 
| 57 | 
            +
                  "Jun",
         | 
| 58 | 
            +
                  "Jul",
         | 
| 59 | 
            +
                  "Ago",
         | 
| 60 | 
            +
                  "Set",
         | 
| 61 | 
            +
                  "Out",
         | 
| 62 | 
            +
                  "Nov",
         | 
| 63 | 
            +
                  "Dez"
         | 
| 64 | 
            +
                ]
         | 
| 65 | 
            +
              },
         | 
| 66 | 
            +
              "es_ES": {
         | 
| 67 | 
            +
                "months_full": [
         | 
| 68 | 
            +
                  "",
         | 
| 69 | 
            +
                  "Enero",
         | 
| 70 | 
            +
                  "Febrero",
         | 
| 71 | 
            +
                  "Marzo",
         | 
| 72 | 
            +
                  "Abril",
         | 
| 73 | 
            +
                  "Mayo",
         | 
| 74 | 
            +
                  "Junio",
         | 
| 75 | 
            +
                  "Julio",
         | 
| 76 | 
            +
                  "Augusto",
         | 
| 77 | 
            +
                  "Setiembre",
         | 
| 78 | 
            +
                  "Octubre",
         | 
| 79 | 
            +
                  "Noviembre",
         | 
| 80 | 
            +
                  "Diciembre"
         | 
| 81 | 
            +
                ],
         | 
| 82 | 
            +
                "months_short": [
         | 
| 83 | 
            +
                  "",
         | 
| 84 | 
            +
                  "Ene",
         | 
| 85 | 
            +
                  "Feb",
         | 
| 86 | 
            +
                  "Mar",
         | 
| 87 | 
            +
                  "Abr",
         | 
| 88 | 
            +
                  "May",
         | 
| 89 | 
            +
                  "Jun",
         | 
| 90 | 
            +
                  "Jul",
         | 
| 91 | 
            +
                  "Aug",
         | 
| 92 | 
            +
                  "Set",
         | 
| 93 | 
            +
                  "Oct",
         | 
| 94 | 
            +
                  "Nov",
         | 
| 95 | 
            +
                  "Dic"
         | 
| 96 | 
            +
                ]
         | 
| 97 | 
            +
              },
         | 
| 98 | 
            +
              "fr_FR": {
         | 
| 99 | 
            +
                "months_full": [
         | 
| 100 | 
            +
                  "",
         | 
| 101 | 
            +
                  "Janvier",
         | 
| 102 | 
            +
                  "Février",
         | 
| 103 | 
            +
                  "Mars",
         | 
| 104 | 
            +
                  "Avril",
         | 
| 105 | 
            +
                  "Mai",
         | 
| 106 | 
            +
                  "Juin",
         | 
| 107 | 
            +
                  "Juillet",
         | 
| 108 | 
            +
                  "Août",
         | 
| 109 | 
            +
                  "Septembre",
         | 
| 110 | 
            +
                  "Octobre",
         | 
| 111 | 
            +
                  "Novembre",
         | 
| 112 | 
            +
                  "Décembre"
         | 
| 113 | 
            +
                ],
         | 
| 114 | 
            +
                "months_short": [
         | 
| 115 | 
            +
                  "",
         | 
| 116 | 
            +
                  "Jan",
         | 
| 117 | 
            +
                  "Fév",
         | 
| 118 | 
            +
                  "Mar",
         | 
| 119 | 
            +
                  "Avr",
         | 
| 120 | 
            +
                  "Mai",
         | 
| 121 | 
            +
                  "Juin",
         | 
| 122 | 
            +
                  "Juil",
         | 
| 123 | 
            +
                  "Aoû",
         | 
| 124 | 
            +
                  "Sep",
         | 
| 125 | 
            +
                  "Oct",
         | 
| 126 | 
            +
                  "Nov",
         | 
| 127 | 
            +
                  "Déc"
         | 
| 128 | 
            +
                ]
         | 
| 129 | 
            +
              },
         | 
| 130 | 
            +
              "it_IT": {
         | 
| 131 | 
            +
                "months_full": [
         | 
| 132 | 
            +
                  "",
         | 
| 133 | 
            +
                  "Gennaio",
         | 
| 134 | 
            +
                  "Febbraio",
         | 
| 135 | 
            +
                  "Marzo",
         | 
| 136 | 
            +
                  "Aprile",
         | 
| 137 | 
            +
                  "Maggio",
         | 
| 138 | 
            +
                  "Giugno",
         | 
| 139 | 
            +
                  "Luglio",
         | 
| 140 | 
            +
                  "Agosto",
         | 
| 141 | 
            +
                  "Settembre",
         | 
| 142 | 
            +
                  "Ottobre",
         | 
| 143 | 
            +
                  "Novembre",
         | 
| 144 | 
            +
                  "Dicembre"
         | 
| 145 | 
            +
                ],
         | 
| 146 | 
            +
                "months_short": [
         | 
| 147 | 
            +
                  "",
         | 
| 148 | 
            +
                  "Gen",
         | 
| 149 | 
            +
                  "Feb",
         | 
| 150 | 
            +
                  "Mar",
         | 
| 151 | 
            +
                  "Apr",
         | 
| 152 | 
            +
                  "Mag",
         | 
| 153 | 
            +
                  "Giu",
         | 
| 154 | 
            +
                  "LuG",
         | 
| 155 | 
            +
                  "Ago",
         | 
| 156 | 
            +
                  "Set",
         | 
| 157 | 
            +
                  "Ott",
         | 
| 158 | 
            +
                  "Nov",
         | 
| 159 | 
            +
                  "Dic"
         | 
| 160 | 
            +
                ]
         | 
| 161 | 
            +
              },
         | 
| 162 | 
            +
              "de_DE": {
         | 
| 163 | 
            +
                "months_full": [
         | 
| 164 | 
            +
                  "",
         | 
| 165 | 
            +
                  "Januar",
         | 
| 166 | 
            +
                  "Februar",
         | 
| 167 | 
            +
                  "März",
         | 
| 168 | 
            +
                  "April",
         | 
| 169 | 
            +
                  "Mai",
         | 
| 170 | 
            +
                  "Juni",
         | 
| 171 | 
            +
                  "Juli",
         | 
| 172 | 
            +
                  "August",
         | 
| 173 | 
            +
                  "September",
         | 
| 174 | 
            +
                  "Oktober",
         | 
| 175 | 
            +
                  "November",
         | 
| 176 | 
            +
                  "Dezember"
         | 
| 177 | 
            +
                ],
         | 
| 178 | 
            +
                "months_short": [
         | 
| 179 | 
            +
                  "",
         | 
| 180 | 
            +
                  "Jan",
         | 
| 181 | 
            +
                  "Feb",
         | 
| 182 | 
            +
                  "Mär",
         | 
| 183 | 
            +
                  "Apr",
         | 
| 184 | 
            +
                  "Mai",
         | 
| 185 | 
            +
                  "Jun",
         | 
| 186 | 
            +
                  "Jul",
         | 
| 187 | 
            +
                  "Aug",
         | 
| 188 | 
            +
                  "Sep",
         | 
| 189 | 
            +
                  "Okt",
         | 
| 190 | 
            +
                  "Nov",
         | 
| 191 | 
            +
                  "Dez"
         | 
| 192 | 
            +
                ]
         | 
| 193 | 
            +
              },
         | 
| 194 | 
            +
              "ru_RU": {
         | 
| 195 | 
            +
                "months_full": [
         | 
| 196 | 
            +
                  "",
         | 
| 197 | 
            +
                  "январь",
         | 
| 198 | 
            +
                  "февраль",
         | 
| 199 | 
            +
                  "март",
         | 
| 200 | 
            +
                  "апрель",
         | 
| 201 | 
            +
                  "май",
         | 
| 202 | 
            +
                  "июнь",
         | 
| 203 | 
            +
                  "июль",
         | 
| 204 | 
            +
                  "август",
         | 
| 205 | 
            +
                  "сентябрь",
         | 
| 206 | 
            +
                  "октябрь",
         | 
| 207 | 
            +
                  "ноябрь",
         | 
| 208 | 
            +
                  "декабрь"
         | 
| 209 | 
            +
                ],
         | 
| 210 | 
            +
                "months_short": [
         | 
| 211 | 
            +
                  "",
         | 
| 212 | 
            +
                  "янв.",
         | 
| 213 | 
            +
                  "февр.",
         | 
| 214 | 
            +
                  "март",
         | 
| 215 | 
            +
                  "апр.",
         | 
| 216 | 
            +
                  "май",
         | 
| 217 | 
            +
                  "июн.",
         | 
| 218 | 
            +
                  "июл.",
         | 
| 219 | 
            +
                  "авг.",
         | 
| 220 | 
            +
                  "сент.",
         | 
| 221 | 
            +
                  "окт.",
         | 
| 222 | 
            +
                  "нояб.",
         | 
| 223 | 
            +
                  "дек."
         | 
| 224 | 
            +
                ]
         | 
| 225 | 
            +
              },
         | 
| 226 | 
            +
              "jp_JP": {
         | 
| 227 | 
            +
                "months_full": [
         | 
| 228 | 
            +
                  "",
         | 
| 229 | 
            +
                  "一月",
         | 
| 230 | 
            +
                  "二月",
         | 
| 231 | 
            +
                  "三月",
         | 
| 232 | 
            +
                  "四月",
         | 
| 233 | 
            +
                  "五月",
         | 
| 234 | 
            +
                  "六月",
         | 
| 235 | 
            +
                  "七月",
         | 
| 236 | 
            +
                  "八月",
         | 
| 237 | 
            +
                  "九月",
         | 
| 238 | 
            +
                  "十月",
         | 
| 239 | 
            +
                  "十一月",
         | 
| 240 | 
            +
                  "十二月"
         | 
| 241 | 
            +
                ],
         | 
| 242 | 
            +
                "months_short": [
         | 
| 243 | 
            +
                  "",
         | 
| 244 | 
            +
                  "1月",
         | 
| 245 | 
            +
                  "2月",
         | 
| 246 | 
            +
                  "3月",
         | 
| 247 | 
            +
                  "4月",
         | 
| 248 | 
            +
                  "5月",
         | 
| 249 | 
            +
                  "6月",
         | 
| 250 | 
            +
                  "7月",
         | 
| 251 | 
            +
                  "8月",
         | 
| 252 | 
            +
                  "9月",
         | 
| 253 | 
            +
                  "10月",
         | 
| 254 | 
            +
                  "11月",
         | 
| 255 | 
            +
                  "12月"
         | 
| 256 | 
            +
                ]
         | 
| 257 | 
            +
              },
         | 
| 258 | 
            +
              "ch_CH": {
         | 
| 259 | 
            +
                "months_full": [
         | 
| 260 | 
            +
                  "",
         | 
| 261 | 
            +
                  "一月",
         | 
| 262 | 
            +
                  "二月",
         | 
| 263 | 
            +
                  "三月",
         | 
| 264 | 
            +
                  "四月",
         | 
| 265 | 
            +
                  "五月",
         | 
| 266 | 
            +
                  "六月",
         | 
| 267 | 
            +
                  "七月",
         | 
| 268 | 
            +
                  "八月",
         | 
| 269 | 
            +
                  "九月",
         | 
| 270 | 
            +
                  "十月",
         | 
| 271 | 
            +
                  "十一月",
         | 
| 272 | 
            +
                  "十二月"
         | 
| 273 | 
            +
                ],
         | 
| 274 | 
            +
                "months_short": [
         | 
| 275 | 
            +
                  "",
         | 
| 276 | 
            +
                  "一月",
         | 
| 277 | 
            +
                  "二月",
         | 
| 278 | 
            +
                  "三月",
         | 
| 279 | 
            +
                  "四月",
         | 
| 280 | 
            +
                  "五月",
         | 
| 281 | 
            +
                  "六月",
         | 
| 282 | 
            +
                  "七月",
         | 
| 283 | 
            +
                  "八月",
         | 
| 284 | 
            +
                  "九月",
         | 
| 285 | 
            +
                  "十月",
         | 
| 286 | 
            +
                  "十一月",
         | 
| 287 | 
            +
                  "十二月"
         | 
| 288 | 
            +
                ]
         | 
| 289 | 
            +
              }
         | 
| 290 | 
            +
            }
         | 
| @@ -0,0 +1,101 @@ | |
| 1 | 
            +
            # frozen_string_literal: true
         | 
| 2 | 
            +
            require "json"
         | 
| 3 | 
            +
            require "date"
         | 
| 4 | 
            +
            require "jekyll"
         | 
| 5 | 
            +
             | 
| 6 | 
            +
            module Rawfeed
         | 
| 7 | 
            +
              module Datelang
         | 
| 8 | 
            +
                class Main < Liquid::Tag
         | 
| 9 | 
            +
                  def initialize(tag_name, text, tokens)
         | 
| 10 | 
            +
                    super
         | 
| 11 | 
            +
                    @markup = text.strip
         | 
| 12 | 
            +
                  end
         | 
| 13 | 
            +
             | 
| 14 | 
            +
                  def render(context)
         | 
| 15 | 
            +
                    site = context.registers[:site]
         | 
| 16 | 
            +
                    page = context.registers[:page] || {}
         | 
| 17 | 
            +
                    config = site.config
         | 
| 18 | 
            +
             | 
| 19 | 
            +
                    locale = config.dig("datelang", "lang") || "en_US"
         | 
| 20 | 
            +
             | 
| 21 | 
            +
                    json_path = File.join(site.source, "assets", "json", "datelang.json")
         | 
| 22 | 
            +
                    json_path = File.expand_path("../../assets/json/datelang.json", __dir__) unless File.exist?(json_path)
         | 
| 23 | 
            +
             | 
| 24 | 
            +
                    return "[datelang error: datelang.json not found]" unless File.exist?(json_path)
         | 
| 25 | 
            +
             | 
| 26 | 
            +
                    translations = JSON.parse(File.read(json_path))
         | 
| 27 | 
            +
                    data = translations[locale] || translations["en_US"]
         | 
| 28 | 
            +
             | 
| 29 | 
            +
                    args = parse_args(@markup, context)
         | 
| 30 | 
            +
                    date_input = args[:date] || page["date"] || page[:date]
         | 
| 31 | 
            +
                    format = args[:format] || "%b %-d, %Y"
         | 
| 32 | 
            +
             | 
| 33 | 
            +
                    return "[datelang: no date]" unless date_input && date_input.to_s.strip != ""
         | 
| 34 | 
            +
             | 
| 35 | 
            +
                    date = parse_date(date_input)
         | 
| 36 | 
            +
                    return "[datelang: invalid date '#{date_input}']" unless date
         | 
| 37 | 
            +
             | 
| 38 | 
            +
                    formatted = date.strftime(format)
         | 
| 39 | 
            +
                    replace_months(formatted, data)
         | 
| 40 | 
            +
                  end
         | 
| 41 | 
            +
             | 
| 42 | 
            +
                  private
         | 
| 43 | 
            +
             | 
| 44 | 
            +
                  def parse_args(text, context)
         | 
| 45 | 
            +
                    args = {}
         | 
| 46 | 
            +
             | 
| 47 | 
            +
                    # captures tokens respecting quoted strings
         | 
| 48 | 
            +
                    tokens = text.scan(/"[^"]*"|\S+/).map { |t| t.strip }
         | 
| 49 | 
            +
             | 
| 50 | 
            +
                    tokens.each do |tok|
         | 
| 51 | 
            +
                      if tok.include?(':')
         | 
| 52 | 
            +
                        key, raw_val = tok.split(':', 2)
         | 
| 53 | 
            +
                        # value in quotes -> literal
         | 
| 54 | 
            +
                        if raw_val.start_with?('"') && raw_val.end_with?('"')
         | 
| 55 | 
            +
                          val = raw_val[1..-2]
         | 
| 56 | 
            +
                        else
         | 
| 57 | 
            +
                          # unquoted value -> can be a Liquid variable (e.g., site.date.format)
         | 
| 58 | 
            +
                          # we render "{{ value }}" in the context to get its actual content
         | 
| 59 | 
            +
                          val = Liquid::Template.parse("{{ #{raw_val} }}").render(context).strip
         | 
| 60 | 
            +
                        end
         | 
| 61 | 
            +
                        args[key.to_sym] = val
         | 
| 62 | 
            +
                      else
         | 
| 63 | 
            +
                        # standalone token (e.g: page.date)
         | 
| 64 | 
            +
                        rendered = Liquid::Template.parse("{{ #{tok} }}").render(context).strip
         | 
| 65 | 
            +
                        args[:date] = rendered unless rendered.empty?
         | 
| 66 | 
            +
                      end
         | 
| 67 | 
            +
                    end
         | 
| 68 | 
            +
             | 
| 69 | 
            +
                    args
         | 
| 70 | 
            +
                  end
         | 
| 71 | 
            +
             | 
| 72 | 
            +
                  def parse_date(input)
         | 
| 73 | 
            +
                    case input
         | 
| 74 | 
            +
                    when Date then input
         | 
| 75 | 
            +
                    when Time then input.to_date
         | 
| 76 | 
            +
                    else
         | 
| 77 | 
            +
                      # if it is string like "2025-10-13 12:34:00 -0300" etc, Date.parse works
         | 
| 78 | 
            +
                      begin
         | 
| 79 | 
            +
                        Date.parse(input.to_s)
         | 
| 80 | 
            +
                      rescue ArgumentError
         | 
| 81 | 
            +
                        nil
         | 
| 82 | 
            +
                      end
         | 
| 83 | 
            +
                    end
         | 
| 84 | 
            +
                  end
         | 
| 85 | 
            +
             | 
| 86 | 
            +
                  def replace_months(str, data)
         | 
| 87 | 
            +
                    data["months_full"].each_with_index do |m, i|
         | 
| 88 | 
            +
                      next if i.zero?
         | 
| 89 | 
            +
                      str = str.gsub(Date::MONTHNAMES[i], m)
         | 
| 90 | 
            +
                    end
         | 
| 91 | 
            +
                    data["months_short"].each_with_index do |m, i|
         | 
| 92 | 
            +
                      next if i.zero?
         | 
| 93 | 
            +
                      str = str.gsub(Date::ABBR_MONTHNAMES[i], m)
         | 
| 94 | 
            +
                    end
         | 
| 95 | 
            +
                    str
         | 
| 96 | 
            +
                  end
         | 
| 97 | 
            +
                end
         | 
| 98 | 
            +
              end
         | 
| 99 | 
            +
            end
         | 
| 100 | 
            +
             | 
| 101 | 
            +
            Liquid::Template.register_tag("datelang", Rawfeed::Datelang::Main)
         | 
    
        data/lib/rawfeed/draft.rb
    CHANGED
    
    | @@ -16,7 +16,7 @@ module Rawfeed | |
| 16 16 | 
             
                    file.puts("title: \"#{array[0]}\"")
         | 
| 17 17 | 
             
                    file.puts("description: \"Description of your post\"")
         | 
| 18 18 | 
             
                    file.puts("author: \"Your Name\"")
         | 
| 19 | 
            -
                    file.puts("date: #{array[2]}")
         | 
| 19 | 
            +
                    file.puts("date: #{array[2]} -0300")
         | 
| 20 20 | 
             
                    file.puts("update_date: ")
         | 
| 21 21 | 
             
                    file.puts("comments: false")
         | 
| 22 22 | 
             
                    file.puts("tags: [tag1, tag2]")
         | 
    
        data/lib/rawfeed/page.rb
    CHANGED
    
    | @@ -17,8 +17,9 @@ module Rawfeed | |
| 17 17 | 
             
                    file.puts("order: #number")
         | 
| 18 18 | 
             
                    file.puts("title: \"#{array[0]}\"")
         | 
| 19 19 | 
             
                    file.puts("author: \"Your Name\"")
         | 
| 20 | 
            -
                    file.puts("date: #{array[2]}")
         | 
| 20 | 
            +
                    file.puts("date: #{array[2]} -0300")
         | 
| 21 21 | 
             
                    file.puts("update_date: ")
         | 
| 22 | 
            +
                    file.puts("reading_time: true")
         | 
| 22 23 | 
             
                    file.puts("published: false")
         | 
| 23 24 | 
             
                    file.puts("permalink: /#{permalink}/")
         | 
| 24 25 | 
             
                    file.puts("---")
         | 
| @@ -0,0 +1,17 @@ | |
| 1 | 
            +
            require "jekyll"
         | 
| 2 | 
            +
             | 
| 3 | 
            +
            module Rawfeed
         | 
| 4 | 
            +
              module ReadingTimeFilter
         | 
| 5 | 
            +
                def reading_time(input)
         | 
| 6 | 
            +
                  site_config = Jekyll.sites.first.config rescue {}
         | 
| 7 | 
            +
                  words_per_minute = site_config&.dig("reading_time", "words_per_minute") || 180
         | 
| 8 | 
            +
                  message = site_config&.dig("reading_time", "message") || ["Read this post in", "Read this post in less than"]
         | 
| 9 | 
            +
                  minutes_text = site_config&.dig("reading_time", "minutes_label") || ["minute", "minutes"]
         | 
| 10 | 
            +
                  words = input.split.size;
         | 
| 11 | 
            +
                  minutes = ( words / words_per_minute ).floor
         | 
| 12 | 
            +
                  minutes_label = minutes == 1 ? "#{minutes_text[0]}" : "#{minutes_text[1]}"
         | 
| 13 | 
            +
                  minutes > 0 ? "#{message[0]} #{minutes} #{minutes_label}" : "#{message[1]} 1 #{minutes_text[0]}"
         | 
| 14 | 
            +
                end
         | 
| 15 | 
            +
              end
         | 
| 16 | 
            +
            end
         | 
| 17 | 
            +
            Liquid::Template.register_filter(Rawfeed::ReadingTimeFilter)
         | 
    
        data/lib/rawfeed/version.rb
    CHANGED
    
    
    
        data/lib/rawfeed.rb
    CHANGED
    
    | @@ -1,6 +1,11 @@ | |
| 1 | 
            +
            # frozen_string_literal: true
         | 
| 2 | 
            +
            # author: William C. Canin
         | 
| 3 | 
            +
             | 
| 1 4 | 
             
            require_relative "rawfeed/version"
         | 
| 2 5 | 
             
            require_relative "rawfeed/draft"
         | 
| 3 6 | 
             
            require_relative "rawfeed/post"
         | 
| 4 7 | 
             
            require_relative "rawfeed/page"
         | 
| 5 8 | 
             
            require_relative "rawfeed/resume"
         | 
| 6 9 | 
             
            require_relative "rawfeed/layout"
         | 
| 10 | 
            +
            require "rawfeed/datelang"
         | 
| 11 | 
            +
            require "rawfeed/reading_time"
         | 
    
        metadata
    CHANGED
    
    | @@ -1,7 +1,7 @@ | |
| 1 1 | 
             
            --- !ruby/object:Gem::Specification
         | 
| 2 2 | 
             
            name: rawfeed
         | 
| 3 3 | 
             
            version: !ruby/object:Gem::Version
         | 
| 4 | 
            -
              version: 0.1. | 
| 4 | 
            +
              version: 0.1.2
         | 
| 5 5 | 
             
            platform: ruby
         | 
| 6 6 | 
             
            authors:
         | 
| 7 7 | 
             
            - William C. Canin
         | 
| @@ -209,6 +209,7 @@ files: | |
| 209 209 | 
             
            - assets/js/terminal.js
         | 
| 210 210 | 
             
            - assets/js/toc.js
         | 
| 211 211 | 
             
            - assets/json/blog_search.json
         | 
| 212 | 
            +
            - assets/json/datelang.json
         | 
| 212 213 | 
             
            - assets/vendor/bootstrap/css/bootstrap-grid.css
         | 
| 213 214 | 
             
            - assets/vendor/bootstrap/css/bootstrap-grid.css.map
         | 
| 214 215 | 
             
            - assets/vendor/bootstrap/css/bootstrap-grid.min.css
         | 
| @@ -256,11 +257,13 @@ files: | |
| 256 257 | 
             
            - assets/vendor/simple-jekyll-search.js
         | 
| 257 258 | 
             
            - assets/vendor/simple-jekyll-search.min.js
         | 
| 258 259 | 
             
            - lib/rawfeed.rb
         | 
| 260 | 
            +
            - lib/rawfeed/datelang.rb
         | 
| 259 261 | 
             
            - lib/rawfeed/draft.rb
         | 
| 260 262 | 
             
            - lib/rawfeed/installer.rb
         | 
| 261 263 | 
             
            - lib/rawfeed/layout.rb
         | 
| 262 264 | 
             
            - lib/rawfeed/page.rb
         | 
| 263 265 | 
             
            - lib/rawfeed/post.rb
         | 
| 266 | 
            +
            - lib/rawfeed/reading_time.rb
         | 
| 264 267 | 
             
            - lib/rawfeed/resume.rb
         | 
| 265 268 | 
             
            - lib/rawfeed/utils.rb
         | 
| 266 269 | 
             
            - lib/rawfeed/version.rb
         |