jekyll-openmoji 0.1.0 → 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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: feafae4d43f234f09fd53145cecb85e01576094cf93bb3c8e4f634b4de847811
4
- data.tar.gz: 41a679eece1e28437f9648577a03dd6d76821832c79985b1588fad0748ecba15
3
+ metadata.gz: 6b5c797f4f403a5d3e24703b151007f2da0bf444004f99890c76b94592a0c7a6
4
+ data.tar.gz: 4241d030fca03cd2497c71cafb5aa17598907451f93670110d80f76b68d926ad
5
5
  SHA512:
6
- metadata.gz: 25bb9d69606825430382082770b89ce397708dbd62fe7f3ea31a80bc9e2f563881f7d7b2cf2d88b0dc662e71db40f94350af892519732dc59f6effd43fa2ac7f
7
- data.tar.gz: a42f69fbbf331761f7dbd8929c8b502500780c2f2cb37999570d0f17b9ca710786ade103b8c982b1ff1a955feb28ac4869f3c98d3ecac57b3420ebfa8583144f
6
+ metadata.gz: a22bc4b22eb6e6eaa24c10b1e0ed74a65ea206fd64d84c0aceaeccf1da02bc1efe78f38751c128c1b74d044ad7936d49e38ed9b831a3f5031d1b3c88989ecd2e
7
+ data.tar.gz: 5695c62086f521489c47e6bf3589e1a751cd4b8892571aab76d676775b6703a17b1522cc7e89fbd5803e394e3c6694736bf2eaf17bcca8690efb5d9c14b04f44
data/.gitignore CHANGED
@@ -46,7 +46,6 @@ build-iPhoneSimulator/
46
46
  ## Documentation cache and generated files:
47
47
  /.yardoc/
48
48
  /_yardoc/
49
- /doc/
50
49
  /rdoc/
51
50
 
52
51
  ## Environment normalization:
@@ -1,6 +1,7 @@
1
1
  # stages of gitlab ci.
2
2
  stages:
3
3
  - test
4
+ - deploy
4
5
  - release
5
6
 
6
7
  # default settings for all ci jobs.
@@ -88,6 +89,8 @@ test ruby 2.4:
88
89
  # run tests.
89
90
  script:
90
91
  - script/test.sh
92
+ except:
93
+ - tags
91
94
 
92
95
  test ruby 2.3:
93
96
  stage: test
@@ -106,6 +109,28 @@ test ruby 2.3:
106
109
  except:
107
110
  - tags
108
111
 
112
+ # release a preview blog for master branch with gitlab pages.
113
+ pages:
114
+ stage: deploy
115
+ script:
116
+ # setup rvm.
117
+ - source ~/.bash_profile
118
+ # use ruby version 2.6.
119
+ - rvm use 2.6
120
+ # go to blog folder.
121
+ - cd doc/blog
122
+ # upgrade bundler to latest version.
123
+ - gem install bundler
124
+ # install dependencies.
125
+ - bundle install --path vendor
126
+ # generate site with jekyll.
127
+ - bundle exec jekyll build --trace --destination ../../public
128
+ artifacts:
129
+ paths:
130
+ - public
131
+ only:
132
+ - master
133
+
109
134
  # deploy gems to rubygems.org whenever a tag is released.
110
135
  release to rubygems:
111
136
  stage: release
@@ -9,6 +9,7 @@ AllCops:
9
9
  TargetRubyVersion: 2.3
10
10
  Exclude:
11
11
  - vendor/**/*
12
+ - doc/**/*
12
13
 
13
14
  Layout/AlignHash:
14
15
  EnforcedHashRocketStyle: table
@@ -18,7 +19,7 @@ Layout/MultilineMethodCallIndentation:
18
19
  IndentationWidth: 2
19
20
 
20
21
  Metrics/AbcSize:
21
- Max: 25
22
+ Max: 30
22
23
 
23
24
  Metrics/BlockLength:
24
25
  Max: 50
@@ -32,6 +33,9 @@ Metrics/MethodLength:
32
33
  Style/HashSyntax:
33
34
  EnforcedStyle: hash_rockets
34
35
 
36
+ Style/MutableConstant:
37
+ Enabled: false
38
+
35
39
  Style/RegexpLiteral:
36
40
  EnforcedStyle: percent_r
37
41
 
data/README.md CHANGED
@@ -61,8 +61,8 @@
61
61
  <a title="Gem Version" href="https://rubygems.org/gems/jekyll-openmoji">
62
62
  <img src="https://img.shields.io/gem/v/jekyll-openmoji?color=red&label=Jekyll%20OpenMoji&logo=rubygems&style=flat-square" alt="Gem Version">
63
63
  </a>
64
- <a title="jsDelivr CDN" href="https://www.jsdelivr.com/package/gh/azadeh=afzar/OpenMoji-Jekyll-Plugin">
65
- <img src="https://data.jsdelivr.com/v1/package/gh/azadeh=afzar/OpenMoji-Jekyll-Plugin/badge" alt="jsDelivr CDN">
64
+ <a title="jsDelivr CDN" href="https://www.jsdelivr.com/package/gh/azadeh-afzar/OpenMoji-Jekyll-Plugin">
65
+ <img src="https://data.jsdelivr.com/v1/package/gh/azadeh-afzar/OpenMoji-Jekyll-Plugin/badge" alt="jsDelivr CDN">
66
66
  </a>
67
67
  </p>
68
68
 
@@ -83,6 +83,10 @@ their license.
83
83
  Use any available emoji package from a CDN or locally served emoji images by adding
84
84
  roughly 5 lines to your website's config file.
85
85
 
86
+ ## Preview
87
+
88
+ see a preview of how OpenMoji emojis looks like with this plugin at this [**page**][preview].
89
+
86
90
  ## Quick start
87
91
 
88
92
  ### 1. Add the following to your site's `Gemfile`
@@ -106,6 +110,11 @@ In any page or post, use emoji as you would normally, e.g.
106
110
  I give this plugin two :+1:!
107
111
  ```
108
112
 
113
+ with this plugin, Jekyll will turn this markdown code `:+1:` into this image:
114
+ <img class="emoji" title="+1" alt="👍" src="https://cdn.jsdelivr.net/gh/azadeh-afzar/OpenMoji-Jekyll-Plugin@latest/images/color/svg/1f44d.svg" width="30em" height="30em" margin="0.5em"> .
115
+
116
+ to see all codes and their emoji images, see preview [**page**][preview].
117
+
109
118
  ### Customizing
110
119
 
111
120
  If you'd like to serve emoji images locally, or use a custom emoji source,
@@ -126,9 +135,9 @@ emoji:
126
135
  # you can also provide an empty string "" if your source doesn't have any asset path.
127
136
  asset: "/color/png"
128
137
 
129
- # final path will be "https://www.emojisource.com/color/svg" and
138
+ # final path will be "https://www.emojisource.com/color/png" and
130
139
  # emoji images will serve from this address.
131
- # in case of no asset value, final path would be "https://www.emojisource.com/color/svg"emoji
140
+ # in case of no asset value, final path would be "https://www.emojisource.com/color/svg/emoji"
132
141
 
133
142
  # MORE CONFIGURATION OPTIONS
134
143
  # all configs below are optional.
@@ -136,8 +145,16 @@ emoji:
136
145
  # default emoji image extension is svg (vector file), but if your emoji source
137
146
  # images are in other formats, you can manually override default extension by using below key
138
147
  # and specify your desired extension (png, jpg, jpeg, bmp, etc).
139
- extension: png
140
-
148
+ extension: "png"
149
+
150
+ # you can also provide default inline css properties for emoji images with img_attrs
151
+ # key, keep in mind that the keys must be valid css properties like padding, margin
152
+ # height, width, etc.
153
+ # below is a the default settings.
154
+ img_attrs:
155
+ class: "emoji"
156
+ height: "20"
157
+ width: "20"
141
158
  ```
142
159
 
143
160
  ## How it works
@@ -175,3 +192,5 @@ Licensed under the [GPLv3](LICENSE).
175
192
  1. All default emojis designed by [OpenMoji](https://openmoji.org) - the open source
176
193
  emoji and icon project. License: CC BY-SA 4.0
177
194
  2. This project is a fork of [Jemoji](https://github.com/jekyll/jemoji). License: MIT
195
+
196
+ [preview]: https://azadeh-afzar.gitlab.io/Web-Development/OpenMoji-Jekyll-Plugin
@@ -0,0 +1,2 @@
1
+ ---
2
+ BUNDLE_PATH: "vendor"
@@ -0,0 +1,24 @@
1
+ ---
2
+ layout: default
3
+ ---
4
+
5
+ <style type="text/css" media="screen">
6
+ .container {
7
+ margin: 10px auto;
8
+ max-width: 600px;
9
+ text-align: center;
10
+ }
11
+ h1 {
12
+ margin: 30px 0;
13
+ font-size: 4em;
14
+ line-height: 1;
15
+ letter-spacing: -1px;
16
+ }
17
+ </style>
18
+
19
+ <div class="container">
20
+ <h1>404</h1>
21
+
22
+ <p><strong>Page not found :(</strong></p>
23
+ <p>The requested page could not be found.</p>
24
+ </div>
@@ -0,0 +1,7 @@
1
+ # frozen_string_literal: true
2
+
3
+ source "https://rubygems.org"
4
+ gem "jekyll", ">= 3.5", "< 5.0"
5
+ gem "jekyll-feed", "~> 0.9"
6
+ gem "jekyll-seo-tag", "~> 2.1"
7
+ gem "jekyll-openmoji", "~> 0.1.0"
@@ -0,0 +1,16 @@
1
+ title: OpenMoji Jekyll Plugin
2
+ email: MahdiBaghbani@protonmail.com
3
+ description: Bring beautiful OpenMoji emojis to your Jekyll websites.
4
+ url: https://azadeh-afzar.gitlab.io
5
+ baseurl: Web-Development/OpenMoji-Jekyll-Plugin
6
+
7
+ minima:
8
+ social_links:
9
+ twitter: baghbani1
10
+ github: MahdiBaghbani
11
+ gitlab: MahdiBaghbani
12
+
13
+ plugins:
14
+ - jekyll-feed
15
+ - jekyll-seo-tag
16
+ - jekyll-openmoji
@@ -0,0 +1,20 @@
1
+ {%- if page.comments != false and jekyll.environment == "production" -%}
2
+
3
+ <div id="disqus_thread"></div>
4
+ <script>
5
+ var disqus_config = function () {
6
+ this.page.url = '{{ page.url | absolute_url }}';
7
+ this.page.identifier = '{{ page.url | absolute_url }}';
8
+ };
9
+
10
+ (function() {
11
+ var d = document, s = d.createElement('script');
12
+
13
+ s.src = 'https://{{ site.disqus.shortname }}.disqus.com/embed.js';
14
+
15
+ s.setAttribute('data-timestamp', +new Date());
16
+ (d.head || d.body).appendChild(s);
17
+ })();
18
+ </script>
19
+ <noscript>Please enable JavaScript to view the <a href="https://disqus.com/?ref_noscript" rel="nofollow">comments powered by Disqus.</a></noscript>
20
+ {%- endif -%}
@@ -0,0 +1,32 @@
1
+ <footer class="site-footer h-card">
2
+ <data class="u-url" href="{{ "/" | relative_url }}"></data>
3
+
4
+ <div class="wrapper">
5
+
6
+ <div class="footer-col-wrapper">
7
+ <div class="footer-col one-half">
8
+ <h2 class="footer-heading">{{ site.title | escape }}</h2>
9
+ <ul class="contact-list">
10
+ <li class="p-name">
11
+ {%- if site.author -%}
12
+ {{ site.author | escape }}
13
+ {%- endif -%}
14
+ </li>
15
+ {%- if site.email -%}
16
+ <li><a class="u-email" href="mailto:{{ site.email }}">{{ site.email }}</a></li>
17
+ {%- endif -%}
18
+ </ul>
19
+ </div>
20
+
21
+ <div class="footer-col one-half">
22
+ <p>{{- site.description | escape -}}</p>
23
+ </div>
24
+
25
+ <div class="social-links">
26
+ {%- include social.html -%}
27
+ </div>
28
+ </div>
29
+
30
+ </div>
31
+
32
+ </footer>
@@ -0,0 +1,9 @@
1
+ <script async src="https://www.googletagmanager.com/gtag/js?id={{ site.google_analytics }}"></script>
2
+ <script>
3
+ window['ga-disable-{{ site.google_analytics }}'] = window.doNotTrack === "1" || navigator.doNotTrack === "1" || navigator.doNotTrack === "yes" || navigator.msDoNotTrack === "1";
4
+ window.dataLayer = window.dataLayer || [];
5
+ function gtag(){dataLayer.push(arguments);}
6
+ gtag('js', new Date());
7
+
8
+ gtag('config', '{{ site.google_analytics }}');
9
+ </script>
@@ -0,0 +1,11 @@
1
+ <head>
2
+ <meta charset="utf-8">
3
+ <meta http-equiv="X-UA-Compatible" content="IE=edge">
4
+ <meta name="viewport" content="width=device-width, initial-scale=1">
5
+ {%- seo -%}
6
+ <link rel="stylesheet" href="{{ "/assets/css/style.css" | relative_url }}">
7
+ {%- feed_meta -%}
8
+ {%- if jekyll.environment == 'production' and site.google_analytics -%}
9
+ {%- include google-analytics.html -%}
10
+ {%- endif -%}
11
+ </head>
@@ -0,0 +1,31 @@
1
+ <header class="site-header">
2
+
3
+ <div class="wrapper">
4
+ {%- assign default_paths = site.pages | map: "path" -%}
5
+ {%- assign page_paths = site.header_pages | default: default_paths -%}
6
+ {%- assign titles_size = site.pages | map: 'title' | join: '' | size -%}
7
+ <a class="site-title" rel="author" href="{{ "/" | relative_url }}">{{ site.title | escape }}</a>
8
+
9
+ {%- if titles_size > 0 -%}
10
+ <nav class="site-nav">
11
+ <input type="checkbox" id="nav-trigger" class="nav-trigger" />
12
+ <label for="nav-trigger">
13
+ <span class="menu-icon">
14
+ <svg viewBox="0 0 18 15" width="18px" height="15px">
15
+ <path d="M18,1.484c0,0.82-0.665,1.484-1.484,1.484H1.484C0.665,2.969,0,2.304,0,1.484l0,0C0,0.665,0.665,0,1.484,0 h15.032C17.335,0,18,0.665,18,1.484L18,1.484z M18,7.516C18,8.335,17.335,9,16.516,9H1.484C0.665,9,0,8.335,0,7.516l0,0 c0-0.82,0.665-1.484,1.484-1.484h15.032C17.335,6.031,18,6.696,18,7.516L18,7.516z M18,13.516C18,14.335,17.335,15,16.516,15H1.484 C0.665,15,0,14.335,0,13.516l0,0c0-0.82,0.665-1.483,1.484-1.483h15.032C17.335,12.031,18,12.695,18,13.516L18,13.516z"/>
16
+ </svg>
17
+ </span>
18
+ </label>
19
+
20
+ <div class="trigger">
21
+ {%- for path in page_paths -%}
22
+ {%- assign my_page = site.pages | where: "path", path | first -%}
23
+ {%- if my_page.title -%}
24
+ <a class="page-link" href="{{ my_page.url | relative_url }}">{{ my_page.title | escape }}</a>
25
+ {%- endif -%}
26
+ {%- endfor -%}
27
+ </div>
28
+ </nav>
29
+ {%- endif -%}
30
+ </div>
31
+ </header>
@@ -0,0 +1,19 @@
1
+ {%- assign social = site.minima.social_links -%}
2
+
3
+ <ul class="social-media-list">
4
+ {%- if social.dribbble -%}<li><a rel="me" href="https://dribbble.com/{{ social.dribbble | cgi_escape | escape }}" title="{{ social.dribbble | escape }}"><svg class="svg-icon grey"><use xlink:href="{{ '/assets/minima-social-icons.svg#dribbble' | relative_url }}"></use></svg></a></li>{%- endif -%}
5
+ {%- if social.facebook -%}<li><a rel="me" href="https://www.facebook.com/{{ social.facebook | cgi_escape | escape }}" title="{{ social.facebook | escape }}"><svg class="svg-icon grey"><use xlink:href="{{ '/assets/minima-social-icons.svg#facebook' | relative_url }}"></use></svg></a></li>{%- endif -%}
6
+ {%- if social.flickr -%}<li><a rel="me" href="https://www.flickr.com/photos/{{ social.flickr | cgi_escape | escape }}" title="{{ social.flickr | escape }}"><svg class="svg-icon grey"><use xlink:href="{{ '/assets/minima-social-icons.svg#flickr' | relative_url }}"></use></svg></a></li>{%- endif -%}
7
+ {%- if social.github -%}<li><a rel="me" href="https://github.com/{{ social.github | cgi_escape | escape }}" title="{{ social.github | escape }}"><svg class="svg-icon grey"><use xlink:href="{{ '/assets/minima-social-icons.svg#github' | relative_url }}"></use></svg></a></li>{%- endif -%}
8
+ {%- if social.instagram -%}<li><a rel="me" href="https://www.instagram.com/{{ social.instagram | cgi_escape | escape }}" title="{{ social.instagram | escape }}"><svg class="svg-icon grey"><use xlink:href="{{ '/assets/minima-social-icons.svg#instagram' | relative_url }}"></use></svg></a></li>{%- endif -%}
9
+ {%- if social.linkedin -%}<li><a rel="me" href="https://www.linkedin.com/in/{{ social.linkedin | cgi_escape | escape }}" title="{{ social.linkedin | escape }}"><svg class="svg-icon grey"><use xlink:href="{{ '/assets/minima-social-icons.svg#linkedin' | relative_url }}"></use></svg></a></li>{%- endif -%}
10
+ {%- if social.pinterest -%}<li><a rel="me" href="https://www.pinterest.com/{{ social.pinterest | cgi_escape | escape }}" title="{{ social.pinterest | escape }}"><svg class="svg-icon grey"><use xlink:href="{{ '/assets/minima-social-icons.svg#pinterest' | relative_url }}"></use></svg></a></li>{%- endif -%}
11
+ {%- for mst in social.mastodon -%}{%- if mst.username and mst.instance -%}<li><a rel="me" href="https://{{ mst.instance | cgi_escape | escape}}/@{{mst.username}}" title="{{ mst.username | escape }}"><svg class="svg-icon grey"><use xlink:href="{{ '/assets/minima-social-icons.svg#mastodon' | relative_url }}"></use></svg></a></li>{%- endif -%}{%- endfor -%}
12
+ {%- if social.twitter -%}<li><a rel="me" href="https://twitter.com/{{ social.twitter | cgi_escape | escape }}" title="{{ social.twitter | escape }}"><svg class="svg-icon grey"><use xlink:href="{{ '/assets/minima-social-icons.svg#twitter' | relative_url }}"></use></svg></a></li>{%- endif -%}
13
+ {%- if social.youtube -%}<li><a rel="me" href="https://www.youtube.com/{{ social.youtube | cgi_escape | escape }}" title="{{ social.youtube | escape }}"><svg class="svg-icon grey"><use xlink:href="{{ '/assets/minima-social-icons.svg#youtube' | relative_url }}"></use></svg></a></li>{%- endif -%}
14
+ {%- if social.youtube_channel -%}<li><a rel="me" href="https://www.youtube.com/channel/{{ social.youtube_channel | cgi_escape | escape }}" title="{{ social.youtube_channel_name | escape | default: 'YouTube' }}"><svg class="svg-icon grey"><use xlink:href="{{ '/assets/minima-social-icons.svg#youtube' | relative_url }}"></use></svg></a></li>{%- endif -%}
15
+ {%- if social.telegram -%}<li><a rel="me" href="https://t.me/{{ social.telegram | cgi_escape | escape }}" title="{{ social.telegram | escape }}"><svg class="svg-icon grey"><use xlink:href="{{ '/assets/minima-social-icons.svg#telegram' | relative_url }}"></use></svg></a></li>{%- endif -%}
16
+ {%- if social.keybase -%}<li><a rel="me" href="https://keybase.io/{{ social.keybase | cgi_escape | escape }}" title="{{ social.keybase | escape }}"><svg class="svg-icon grey"><use xlink:href="{{ '/assets/minima-social-icons.svg#keybase' | relative_url }}"></use></svg></a></li>{%- endif -%}
17
+ {%- if social.microdotblog -%}<li><a rel="me" href="https://micro.blog/{{ social.microdotblog | cgi_escape | escape }}" title="{{ social.microdotblog | escape }}"><svg class="svg-icon grey"><use xlink:href="{{ '/assets/minima-social-icons.svg#microdotblog' | relative_url }}"></use></svg></a></li>{%- endif -%}
18
+ {%- if social.rss -%}<li><a href="{{ 'feed.xml' | relative_url }}" title="{{ social.rss | escape }}"><svg class="svg-icon grey"><use xlink:href="{{ '/assets/minima-social-icons.svg#rss' | relative_url }}"></use></svg></a></li>{%- endif -%}
19
+ </ul>
@@ -0,0 +1,20 @@
1
+ <!DOCTYPE html>
2
+ <html lang="{{ page.lang | default: site.lang | default: "en" }}">
3
+
4
+ {%- include head.html -%}
5
+
6
+ <body>
7
+
8
+ {%- include header.html -%}
9
+
10
+ <main class="page-content" aria-label="Content">
11
+ <div class="wrapper">
12
+ {{ content }}
13
+ </div>
14
+ </main>
15
+
16
+ {%- include footer.html -%}
17
+
18
+ </body>
19
+
20
+ </html>
@@ -0,0 +1,38 @@
1
+ ---
2
+ layout: default
3
+ ---
4
+
5
+ <div class="home">
6
+ {%- if page.title -%}
7
+ <h1 class="page-heading">{{ page.title }}</h1>
8
+ {%- endif -%}
9
+
10
+ {{ content }}
11
+
12
+ {%- if site.posts.size > 0 -%}
13
+ <h2 class="post-list-heading">{{ page.list_title | default: "Posts" }}</h2>
14
+ <ul class="post-list">
15
+ {%- for post in site.posts -%}
16
+ <li>
17
+ {%- assign date_format = site.minima.date_format | default: "%b %-d, %Y" -%}
18
+ <span class="post-meta">{{ post.date | date: date_format }}</span>
19
+ <h3>
20
+ <a class="post-link" href="{{ post.url | relative_url }}">
21
+ {{ post.title | escape }}
22
+ </a>
23
+ </h3>
24
+ {%- if site.show_excerpts -%}
25
+ {{ post.excerpt }}
26
+ {%- endif -%}
27
+ </li>
28
+ {%- endfor -%}
29
+ </ul>
30
+
31
+ <p class="feed-subscribe">
32
+ <a href="{{ 'feed.xml' | relative_url }}">
33
+ <svg class="svg-icon orange"><use xlink:href="{{ 'assets/minima-social-icons.svg#rss' | relative_url }}"></use></svg><span>Subscribe</span>
34
+ </a>
35
+ </p>
36
+ {%- endif -%}
37
+
38
+ </div>
@@ -0,0 +1,14 @@
1
+ ---
2
+ layout: default
3
+ ---
4
+ <article class="post">
5
+
6
+ <header class="post-header">
7
+ <h1 class="post-title">{{ page.title | escape }}</h1>
8
+ </header>
9
+
10
+ <div class="post-content">
11
+ {{ content }}
12
+ </div>
13
+
14
+ </article>
@@ -0,0 +1,27 @@
1
+ ---
2
+ layout: default
3
+ ---
4
+ <article class="post h-entry" itemscope itemtype="http://schema.org/BlogPosting">
5
+
6
+ <header class="post-header">
7
+ <h1 class="post-title p-name" itemprop="name headline">{{ page.title | escape }}</h1>
8
+ <p class="post-meta">
9
+ <time class="dt-published" datetime="{{ page.date | date_to_xmlschema }}" itemprop="datePublished">
10
+ {%- assign date_format = site.minima.date_format | default: "%b %-d, %Y" -%}
11
+ {{ page.date | date: date_format }}
12
+ </time>
13
+ {%- if page.author -%}
14
+ • <span itemprop="author" itemscope itemtype="http://schema.org/Person"><span class="p-author h-card" itemprop="name">{{ page.author | escape }}</span></span>
15
+ {%- endif -%}</p>
16
+ </header>
17
+
18
+ <div class="post-content e-content" itemprop="articleBody">
19
+ {{ content }}
20
+ </div>
21
+
22
+ {%- if site.disqus.shortname -%}
23
+ {%- include disqus_comments.html -%}
24
+ {%- endif -%}
25
+
26
+ <a class="u-url" href="{{ page.url | relative_url }}" hidden></a>
27
+ </article>