recursero-jekyll-theme 0.1.3 → 0.3.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (60) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +69 -18
  3. data/_config.yml +77 -0
  4. data/_data/assets.json +6 -0
  5. data/_data/en.yml +61 -15
  6. data/_data/es.yml +64 -15
  7. data/_data/forms/contacto.yml +2 -2
  8. data/_data/layouts/about.yml +141 -71
  9. data/_data/layouts/category.yml +77 -69
  10. data/_data/layouts/code_of_conduct.yml +60 -0
  11. data/_data/layouts/license.yml +60 -0
  12. data/_data/layouts/menu.yml +80 -0
  13. data/_data/layouts/page.yml +76 -88
  14. data/_data/layouts/place.yml +123 -126
  15. data/_data/layouts/post.yml +76 -88
  16. data/_data/layouts/privacy_policy.yml +60 -0
  17. data/_data/layouts/theme.yml +295 -0
  18. data/_includes/contact.html +8 -5
  19. data/_includes/floating_alert.html +6 -0
  20. data/_includes/footer.html +23 -0
  21. data/_includes/item.html +38 -0
  22. data/_includes/menu.html +23 -0
  23. data/_includes/onboarding.html +37 -0
  24. data/_includes/pack.html +1 -0
  25. data/_includes/password.html +1 -0
  26. data/_includes/picture.html +23 -0
  27. data/_includes/preload_font.html +1 -0
  28. data/_includes/search.html +4 -3
  29. data/_includes/share.html +3 -2
  30. data/_includes/submit.html +5 -1
  31. data/_layouts/about.html +1 -1
  32. data/_layouts/code_of_conduct.html +45 -0
  33. data/_layouts/default.html +34 -2
  34. data/_layouts/license.html +45 -0
  35. data/_layouts/page.html +1 -1
  36. data/_layouts/place.html +1 -1
  37. data/_layouts/post.html +2 -2
  38. data/_layouts/privacy_policy.html +45 -0
  39. data/_sass/accessibility.scss +48 -7
  40. data/_sass/editor.scss +17 -0
  41. data/_sass/embed.scss +8 -0
  42. data/_sass/floating_alert.scss +48 -0
  43. data/_sass/fonts.scss +0 -0
  44. data/_sass/helpers.scss +327 -31
  45. data/_sass/menu.scss +36 -0
  46. data/_sass/snap.scss +60 -0
  47. data/_sass/toggler.scss +34 -11
  48. data/assets/css/styles.scss +61 -8
  49. data/assets/data/manifest.js +29 -0
  50. data/assets/fonts/forkawesome-webfont.woff2 +0 -0
  51. data/assets/js/pack.4ced2556b94e5c09e5bc.js +3 -0
  52. data/assets/js/pack.4ced2556b94e5c09e5bc.js.map +3 -0
  53. data/assets/templates/alert.html +7 -0
  54. data/assets/templates/results.html +15 -7
  55. metadata +82 -46
  56. data/_includes/navbar.html +0 -53
  57. data/_sass/share.html +0 -12
  58. data/_sass/share_box.html +0 -16
  59. data/assets/js/pack.js +0 -90
  60. data/assets/js/pack.js.map +0 -1
@@ -0,0 +1,295 @@
1
+ ---
2
+ title:
3
+ type: "string"
4
+ required: true
5
+ label:
6
+ en: "Title"
7
+ es: "Título"
8
+ help:
9
+ en: "The name you want to give to this customization"
10
+ es: "El nombre que quieras darle a esta personalización"
11
+ font_family_sans_serif:
12
+ type: "predefined_value"
13
+ label:
14
+ en: "Select a typography for the site"
15
+ es: "Selecciona una tipografía para el sitio"
16
+ help:
17
+ en: "If you'd like us to add support for a typography, please send us an e-mail"
18
+ es: "Si quieres que agreguemos una tipografía, por favor envíanos un e-mail"
19
+ default:
20
+ en: ""
21
+ es: ""
22
+ values:
23
+ en:
24
+ "": "Default"
25
+ Roboto: "Roboto"
26
+ Saira: "Saira"
27
+ es:
28
+ "": "Default"
29
+ Roboto: "Roboto"
30
+ Saira: "Saira"
31
+ font_family_monospace:
32
+ type: "predefined_value"
33
+ label:
34
+ en: "Select a monospace typography for the site"
35
+ es: "Selecciona una tipografía monospace para el sitio"
36
+ help:
37
+ en: ""
38
+ es: ""
39
+ default:
40
+ en: ""
41
+ es: ""
42
+ values:
43
+ en:
44
+ "": "Default"
45
+ Roboto Mono: "Roboto Mono"
46
+ Liberation Mono: "Liberation Mono"
47
+ es:
48
+ "": "Default"
49
+ Roboto Mono: "Roboto Mono"
50
+ Liberation Mono: "Liberation Mono"
51
+ headings_font_family:
52
+ type: "predefined_value"
53
+ label:
54
+ en: "Select a typography for headings"
55
+ es: "Selecciona una tipografía para los títulos del sitio"
56
+ help:
57
+ en: "If you'd us to add support for a typography, please send us an e-mail"
58
+ es: "Si quieres que agreguemos una tipografía, por favor envíanos un e-mail"
59
+ default:
60
+ en: ""
61
+ es: ""
62
+ values:
63
+ en:
64
+ "": "Default"
65
+ Roboto: "Roboto"
66
+ Saira: "Saira"
67
+ es:
68
+ "": "Default"
69
+ Roboto: "Roboto"
70
+ Saira: "Saira"
71
+ enable_rounded:
72
+ type: "boolean"
73
+ label:
74
+ en: "Rounded corners"
75
+ es: "Esquinas redondeadas"
76
+ help:
77
+ en: "For buttons, form inputs, etc."
78
+ es: "De los botones, campos de formularios, etc."
79
+ default:
80
+ es: false
81
+ en: false
82
+ enable_shadows:
83
+ type: "boolean"
84
+ label:
85
+ en: "Shadows"
86
+ es: "Sombras"
87
+ help:
88
+ en: "Shadows behind elements"
89
+ es: "Sombras en los elementos"
90
+ default:
91
+ es: false
92
+ en: false
93
+ body_bg:
94
+ type: "color"
95
+ label:
96
+ en: "Background color"
97
+ es: "Color de fondo"
98
+ help:
99
+ en: "Site's background color"
100
+ es: "Color de fondo del sitio"
101
+ default:
102
+ es: "#FFFFFF"
103
+ en: "#FFFFFF"
104
+ body_color:
105
+ type: "color"
106
+ label:
107
+ en: "Text color"
108
+ es: "Color del texto"
109
+ help:
110
+ en: ""
111
+ es: ""
112
+ default:
113
+ es: "#212529"
114
+ en: "#212529"
115
+ primary:
116
+ type: "color"
117
+ label:
118
+ en: "Primary color"
119
+ es: "Color principal"
120
+ help:
121
+ en: "Highlights certain elements"
122
+ es: "Resalta algunos elementos"
123
+ default:
124
+ es: "#f206f9"
125
+ en: "#f206f9"
126
+ secondary:
127
+ type: "color"
128
+ label:
129
+ en: "Secondary color"
130
+ es: "Color secundario"
131
+ help:
132
+ en: "Highlights certain elements"
133
+ es: "Resalta algunos elementos"
134
+ default:
135
+ es: "#13fefe"
136
+ en: "#13fefe"
137
+ link_color:
138
+ type: "color"
139
+ label:
140
+ en: "Link color"
141
+ es: "Color de los vínculos"
142
+ help:
143
+ en: ""
144
+ es: ""
145
+ default:
146
+ es: "#007bff"
147
+ en: "#007bff"
148
+ link_hover_color:
149
+ type: "color"
150
+ label:
151
+ en: "Link color when selected"
152
+ es: "Color de los vínculos al seleccionarlos"
153
+ help:
154
+ en: ""
155
+ es: ""
156
+ default:
157
+ es: "#0056b3"
158
+ en: "#0056b3"
159
+ h1_font_size:
160
+ type: "string"
161
+ label:
162
+ en: "Height for first level headings"
163
+ es: "Altura de los títulos de primer nivel"
164
+ help:
165
+ en: ""
166
+ es: ""
167
+ default:
168
+ es: "2.5rem"
169
+ en: "2.5rem"
170
+ h2_font_size:
171
+ type: "string"
172
+ label:
173
+ en: "Height for second level headings"
174
+ es: "Altura de los títulos de segundo nivel"
175
+ help:
176
+ en: ""
177
+ es: ""
178
+ default:
179
+ es: "2rem"
180
+ en: "2rem"
181
+ h3_font_size:
182
+ type: "string"
183
+ label:
184
+ en: "Height for third level headings"
185
+ es: "Altura de los títulos de tercer nivel"
186
+ help:
187
+ en: ""
188
+ es: ""
189
+ default:
190
+ es: "1.75rem"
191
+ en: "1.75rem"
192
+ h4_font_size:
193
+ type: "string"
194
+ label:
195
+ en: "Height for fourth level headings"
196
+ es: "Altura de los títulos de cuarto nivel"
197
+ help:
198
+ en: ""
199
+ es: ""
200
+ default:
201
+ es: "1.5rem"
202
+ en: "1.5rem"
203
+ h5_font_size:
204
+ type: "string"
205
+ label:
206
+ en: "Height for fifth level headings"
207
+ es: "Altura de los títulos de quinto nivel"
208
+ help:
209
+ en: ""
210
+ es: ""
211
+ default:
212
+ es: "1.25rem"
213
+ en: "1.25rem"
214
+ h6_font_size:
215
+ type: "string"
216
+ label:
217
+ en: "Height for sixth level headings"
218
+ es: "Altura de los títulos de sexto nivel"
219
+ help:
220
+ en: ""
221
+ es: ""
222
+ default:
223
+ es: "1rem"
224
+ en: "1rem"
225
+ mark_bg:
226
+ type: "color"
227
+ label:
228
+ en: "Highlight color"
229
+ es: "Color de resaltado"
230
+ help:
231
+ en: "Default color for highlighted text"
232
+ es: "Color por defecto para el texto resaltado"
233
+ default:
234
+ es: "#fcf8e3"
235
+ en: "#fcf8e3"
236
+ navbar_light_color:
237
+ type: "color"
238
+ label:
239
+ en: "Navigation bar item color"
240
+ es: "Color de ítem en la barra de navegación"
241
+ help:
242
+ en: "Text and icons"
243
+ es: "Texto e íconos"
244
+ default:
245
+ es: "#ced4da"
246
+ en: "#ced4da"
247
+ navbar_light_hover_color:
248
+ type: "color"
249
+ label:
250
+ en: "Navigation bar item color when selected"
251
+ es: "Color de ítem seleccionado en la barra de navegación"
252
+ help:
253
+ en: "Text and icons"
254
+ es: "Texto e íconos"
255
+ default:
256
+ es: "#6c757d"
257
+ en: "#6c757d"
258
+ navbar_light_active_color:
259
+ type: "color"
260
+ label:
261
+ en: "Navigation bar item color when active"
262
+ es: "Color de ítem activo en la barra de navegación"
263
+ help:
264
+ en: "Text and icons"
265
+ es: "Texto e íconos"
266
+ default:
267
+ es: "#212529"
268
+ en: "#212529"
269
+ testing:
270
+ type: "boolean"
271
+ label:
272
+ en: "Testing"
273
+ es: "Testeo"
274
+ help:
275
+ en: "When activated, shows screen information for testing"
276
+ es: "Al activar se muestra información de la pantalla para testing"
277
+ default:
278
+ es: false
279
+ en: false
280
+ draft:
281
+ type: "boolean"
282
+ label:
283
+ es: "Borrador"
284
+ en: "Draft"
285
+ help:
286
+ es: "Al activar \"Borrador\" este contenido se mantendrá disponible en el panel, pero no se publica en el sitio como los demás contenidos al tocar \"Publicar todos los cambios\""
287
+ en: "By activating \"Draft\", this content will remain available on the dashboard, but will not be published on the site when you tap \"Publish all changes\" (other content which does not have this option selected will)."
288
+ order:
289
+ type: "order"
290
+ label:
291
+ es: "Orden"
292
+ en: "Order"
293
+ help:
294
+ es: "La posición del artículo en la lista de artículos"
295
+ en: "Position in list of posts"
@@ -1,15 +1,18 @@
1
1
  {% comment %}
2
- Esta imagen obtiene una cookie desde la API de Sutty para autorizar el
3
- envío del formulario.
2
+ Esta imagen obtiene una cookie desde la API de Sutty para autorizar el
3
+ envío del formulario.
4
4
  {% endcomment %}
5
- <img class="d-none" src="https://api.sutty.nl/v1/sites/{{ site.hostname }}/contact/cookie.png" />
5
+ <img class="d-none invisible" src="https://api.sutty.nl/v1/sites/{{ site.hostname }}/contact/cookie.png" />
6
6
 
7
7
  {% comment %}
8
8
  El formulario se envía a la API. La definición del formulario se
9
9
  encuentra en _data/forms/contacto.yml
10
10
  {% endcomment %}
11
- <form action="https://api.sutty.nl/v1/sites/{{ site.hostname }}/contact/contacto"
12
- method="post">
11
+ <form
12
+ data-controller="contact"
13
+ data-delay="60"
14
+ action="https://api.sutty.nl/v1/sites/{{ site.hostname }}/contact/{{ include.name }}"
15
+ method="post">
13
16
  {%- for field in include.form -%}
14
17
  {% assign template = field[1].type | append: '.html' %}
15
18
  <div class="col{{ field[1].col | default: 12 | prepend: '-' }}">
@@ -0,0 +1,6 @@
1
+ <div
2
+ data-controller="floating-alert"
3
+ class="floating-alert floating-alert-bottom floating-alert-default"
4
+ role="status" aria-live="polite" aria-atomic="true">
5
+ <div data-target="toast.content" class="floating-alert-content white background-black-t4"></div>
6
+ </div>
@@ -1,4 +1,8 @@
1
1
  {%- assign about = site.posts | find: 'layout', 'about' -%}
2
+ {%- assign license = site.posts | find: "layout", "license" -%}
3
+ {%- assign code_of_conduct = site.posts | find: "layout", "code_of_conduct" -%}
4
+ {%- assign privacy_policy = site.posts | find: "layout", "privacy_policy" -%}
5
+
2
6
  <footer class="d-flex align-items-center justify-content-center mt-5 pt-3 pb-3 background-gray-dark">
3
7
  {%- if about.email -%}
4
8
  <a class="gray" href="mailto:{{ about.email }}" rel="me" title="{{ site.title }}">{{ about.email }}</a>
@@ -11,4 +15,23 @@
11
15
  <span class="sr-only">{{ n.name }}</span>
12
16
  </a>
13
17
  {%- endfor -%}
18
+
19
+ <ul class="list-unstyled">
20
+ {% if license %}
21
+ <li>
22
+ <a href="{{ license.url }}" rel="license">{{ license.title }}</a>
23
+ </li>
24
+ {% endif %}
25
+
26
+ {% if code_of_conduct %}
27
+ <li>
28
+ <a href="{{ code_of_conduct.url }}" rel="code-of-conduct">{{ code_of_conduct.title }}</a>
29
+ </li>
30
+ {% endif %}
31
+
32
+ {% if privacy_policy %}
33
+ <li>
34
+ <a href="{{ privacy_policy.url }}" rel="privacy-policy">{{ privacy_policy.title }}</a>
35
+ </li>
36
+ {% endif %}
14
37
  </footer>
@@ -0,0 +1,38 @@
1
+ {%- comment -%}
2
+ El ítem tiene un dropdown si tiene sub ítems o si tiene categorías.
3
+ {%- endcomment -%}
4
+ {%- assign dropdown = include.item.items | present -%}
5
+ {%- unless dropdown -%}
6
+ {%- assign dropdown = include.item.categories | present -%}
7
+ {%- endunless -%}
8
+
9
+ <div class="nav-item w-100 w-lg-auto {{ dropdown | value_if: 'dropdown d-flex flex-wrap' }}">
10
+ {%- comment -%}
11
+ La URL del item puede ser:
12
+ * El artículo vinculado
13
+ * El vínculo escrito manualmente
14
+ * La primera categoría de la lista
15
+ * La dirección propia (en el caso de categorías)
16
+ {%- endcomment -%}
17
+ <a
18
+ href="{{ include.item.post.url | default: include.item.link | default: include.item.categories[0].url | default: include.item.url }}"
19
+ class="nav-link flex-grow-1 flex-grow-lg-0">
20
+ {{ include.item.title }}
21
+ </a>
22
+
23
+ {%- if dropdown -%}
24
+ <button class="dropdown-toggle border-0 background-white w-5 w-lg-auto pl-lg-3"></button>
25
+ <div class="dropdown-menu w-100 w-lg-auto flex-grow-1 flex-grow-lg-0">
26
+ {% for item in include.item.items %}
27
+ {%- include_cached item.html item=item -%}
28
+ {% endfor %}
29
+
30
+ {%- comment -%}
31
+ Esto necesita `replace` en sutty-archives
32
+ {%- endcomment -%}
33
+ {%- for item in include.item.categories offset: 1 -%}
34
+ {%- include_cached item.html item=item -%}
35
+ {%- endfor -%}
36
+ </div>
37
+ {%- endif -%}
38
+ </div>
@@ -0,0 +1,23 @@
1
+ {%- comment -%}
2
+ Empezamos con los ítems que no dependen de otros e implementamos
3
+ recursivamente.
4
+ {%- endcomment -%}
5
+ {%- assign items = site.posts | where: 'layout', 'menu' | where: 'item', nil -%}
6
+
7
+ <nav class="navbar navbar-expand-lg navbar-light">
8
+ <button class="navbar-toggler"
9
+ type="button"
10
+ data-toggle="collapse"
11
+ data-target="#menu"
12
+ aria-label="{{ site.i18n.menu.title }}">
13
+ <span class="navbar-toggler-icon"></span>
14
+ </button>
15
+
16
+ <div class="collapse navbar-collapse" id="menu">
17
+ <div class="navbar-nav w-100 d-flex align-items-start justify-content-center">
18
+ {% for item in items %}
19
+ {%- include_cached item.html item=item -%}
20
+ {% endfor %}
21
+ </div>
22
+ </div>
23
+ </nav>
@@ -0,0 +1,37 @@
1
+ {% comment %}
2
+ La barra de notificaciones, donde le pedimos a les usuaries que vayan
3
+ haciendo varias cosas. Quizás debería llamarse onboarding.
4
+
5
+ Primero tenemos que poder salir del navegador interno de Facebook,
6
+ Instagram, Telegram, etc.
7
+ {% endcomment %}
8
+
9
+ <aside
10
+ data-sw="{{ jekyll.production | ternary: site.data.assets['sw.js'], 'sw.js' }}"
11
+ data-controller="onboarding"
12
+ class="w-100 background-primary"
13
+ role="status"
14
+ aria-live="polite"
15
+ aria-atomic="true">
16
+ <div data-onboarding-target="internalBrowser" hidden>
17
+ <div class="h-20vh d-flex align-items-center">
18
+ {% comment %}
19
+ Con esta URL le decimos a Android y posible iOS que queremos abrir
20
+ este link en un navegador externo.
21
+
22
+ https://stackoverflow.com/a/58342222
23
+ {% endcomment %}
24
+ <a href="intent:{{ site.url }}#Intent;end" class="btn btn-block btn-primary">
25
+ {{ site.i18n.onboarding.internal_browser }}
26
+ </a>
27
+ </div>
28
+ </div>
29
+
30
+ <div data-onboarding-target="browser" hidden>
31
+ <div class="h-20vh d-flex align-items-center">
32
+ <button data-action="onboarding#install" class="btn btn-block btn-primary">
33
+ {{ site.i18n.onboarding.browser }}
34
+ </button>
35
+ </div>
36
+ </div>
37
+ </aside>
@@ -0,0 +1 @@
1
+ <script defer src="{{ jekyll.production | ternary: site.data.assets['assets/js/pack.js'], 'assets/js/pack.js' }}"></script>
@@ -0,0 +1 @@
1
+ {% include input.html field=include.field form=include.form %}
@@ -0,0 +1,23 @@
1
+ {% comment %}
2
+ Imágenes responsive. Esto logra que solo se carguen las versiones de
3
+ las imágenes con el ancho máximo de la pantalla.
4
+
5
+ TODO: Las imágenes en md y superior nunca llegan al ancho máximo así
6
+ que tienen una resolución de más.
7
+ {% endcomment %}
8
+ {%- assign image = include.image.path | default: 'public/placeholder.png' %}
9
+ {%- assign height = include.height | default: site.i18n.post.height -%}
10
+ {%- assign width = include.width | default: '100' -%}
11
+
12
+ <picture>
13
+ {% for size in site.images.sizes %}
14
+ <source srcset="{{ image | thumbnail: size }}" media="(max-width: {{ size }}px)" />
15
+ {% endfor %}
16
+
17
+ <img
18
+ class="u-photo w-{{ width }} {{ include.cover | equals: false | value_unless: 'fit-cover' }} h-{{ height }} {{ include.extra }}"
19
+ loading="lazy"
20
+ itemprop="image"
21
+ src="{{ image | thumbnail: 1140 }}"
22
+ alt="{{ include.image.description | include.default_description }}" />
23
+ </picture>
@@ -0,0 +1 @@
1
+ <link rel="preload" as="font" type="font/woff2" crossorigin href="{{ include.font }}?{{ site.time | date: '%s' }}" />
@@ -1,15 +1,16 @@
1
1
  {%- comment -%}
2
2
  Encabezado con buscador
3
3
  {%- endcomment -%}
4
+ {%- assign param = include.param | default: 'search' -%}
4
5
  <section id="{{ site.i18n.search.id }}">
5
6
  <div class="jumbotron">
6
- <form method="get" class="search" action="{{ site.i18n.search.url }}" data-controller="search">
7
+ <form method="get" class="search" action="{{ site.i18n.search.url }}" data-controller="search" data-action="search#search">
7
8
  <div class="form-group">
8
- <label for="search" class="sr-only">{{ site.i18n.search.placeholder }}</label>
9
+ <label for="{{ param }}_q" class="sr-only">{{ site.i18n.search.placeholder }}</label>
9
10
  <input
10
11
  type="search"
11
12
  required
12
- id="q"
13
+ id="{{ param }}_q"
13
14
  name="q"
14
15
  placeholder="{{ site.i18n.search.placeholder }}"
15
16
  class="form-control form-control-lg m-0"
data/_includes/share.html CHANGED
@@ -5,6 +5,7 @@
5
5
  {% endunless %}
6
6
  {% assign title = include.title | default: '' | cgi_escape %}
7
7
  {% assign description = include.description | default: '' | cgi_escape %}
8
+ {% assign tags = include.tags | join: ',' | default: '' | cgi_escape %}
8
9
 
9
10
  <a
10
11
  {% if include.share.url == '%url' %}
@@ -12,10 +13,10 @@
12
13
  {% else %}
13
14
  target="_blank"
14
15
  {% endif %}
15
- rel="nofollow"
16
+ rel="noopener nofollow"
16
17
  title="{{ include.share.title }}"
17
18
  class="d-flex flex-column align-items-center p-3"
18
- href="{{ include.share.url | replace: '%url', url | replace: '%title', title | replace: '%description', description }}">
19
+ href="{{ include.share.url | replace: '%url', url | replace: '%title', title | replace: '%description', description | replace: '%tags', tags }}">
19
20
  <i class="fa fa-fw fa-2x fa-{{ include.share.icon }}"></i>
20
21
  <span>{{ include.share.title }}</span>
21
22
  </a>
@@ -1 +1,5 @@
1
- <input type="submit" class="btn btn-success" value="{{ include.field[1].label[site.locale] }}" />
1
+ <input
2
+ data-target="contact.submit"
3
+ type="submit"
4
+ class="btn btn-success"
5
+ value="{{ include.field[1].label[site.locale] }}" />
data/_layouts/about.html CHANGED
@@ -22,7 +22,7 @@ layout: default
22
22
 
23
23
  <p>
24
24
  <time class="dt-published" datetime="{{ page.date | date_to_xmlschema }}" itemprop="datePublished">
25
- {%- assign date_format = site.i18n.date | default: "%b %-d, %Y" -%}
25
+ {%- assign date_format = site.i18n.date.format | default: "%b %-d, %Y" -%}
26
26
  {{ page.date | date: date_format }}
27
27
  </time>
28
28
  {%- for author in page.author -%}
@@ -0,0 +1,45 @@
1
+ ---
2
+ layout: default
3
+ ---
4
+
5
+ {% assign date_format = site.i18n.date.format | default: "%b %-d, %Y" %}
6
+
7
+ <article class="h-entry" itemscope itemtype="http://schema.org/Article">
8
+ <header>
9
+ <h1 class="p-name" itemprop="name headline">{{ page.title | default: '' | escape }}</h1>
10
+
11
+ {%- if page.description -%}
12
+ <p class="lead p-summary" itemprop="description">{{ page.description | default: '' | escape }}</p>
13
+ {%- endif -%}
14
+
15
+ <p>
16
+ {{ site.i18n.published_at }}
17
+
18
+ <time class="dt-published" datetime="{{ page.date | date_to_xmlschema }}" itemprop="datePublished">
19
+ {{ page.date | date_local: date_format }}
20
+ </time>
21
+
22
+ {% if page.last_modified_at %}
23
+ {{ site.i18n.last_modified_at }}
24
+
25
+ <time class="dt-published" datetime="{{ page.last_modified_at | date_to_xmlschema }}" itemprop="datePublished">
26
+ {{ page.last_modified_at | date_local: date_format }}
27
+ </time>
28
+ {% endif %}
29
+ </p>
30
+ </header>
31
+
32
+ <div class="e-content" itemprop="articleBody">
33
+ {{ content }}
34
+ </div>
35
+
36
+ <footer>
37
+ <a class="u-url" itemprop="url" href="{{ page.url }}" hidden>
38
+ {{ site.url }}{{ page.url }}
39
+ </a>
40
+
41
+ {%- if page.uuid -%}
42
+ <span hidden itemprop="identifier">{{ page.uuid }}</span>
43
+ {%- endif -%}
44
+ </footer>
45
+ </article>
@@ -9,14 +9,46 @@
9
9
  <meta name="color-scheme" content="light"/>
10
10
  <meta name="referrer" content="strict-origin-when-cross-origin"/>
11
11
 
12
+ {% comment %}
13
+ No tenemos forma de hashear SASS aún, por lo que renovamos la caché
14
+ aplicando la hora de compilación del sitio. Es importante que los
15
+ CSS se renueven cuando se regenera el sitio, porque pueden contener
16
+ variables dinámicas (como personalización de colores y tipografía) o
17
+ minificarse distinto dependiendo del contenido.
18
+ {% endcomment %}
12
19
  <link href="assets/css/styles.css" rel="stylesheet">
13
- <script defer type="text/javascript" src="assets/js/pack.js"></script>
20
+
21
+ {% comment %}
22
+ Webpack. La configuración se pasa por variables de entorno, en
23
+ desarrollo hay que evitar el archivo .env (copiarlo de .env.example
24
+ si no existe.
25
+ {% endcomment %}
26
+ <link rel="preload" as="script" type="text/javascript" href="env.js" />
27
+ <script type="text/javascript" src="env.js"></script>
28
+ {% include_cached pack.html %}
29
+
30
+ {% comment %}
31
+ Agregar otras tipografías. Esto hace que las tipografías se carguen
32
+ lo más rápido posible y minimizar el tiempo en que se ven las del
33
+ navegador. En Firefox todavía no está soportado.
34
+
35
+ Fork Awesome lleva la hora de generación para poder renovarlo si
36
+ agregamos íconos nuevos, de lo contrario puede quedar cacheado para
37
+ siempre y les visitantes van a ver íconos rotos.
38
+ {% endcomment %}
39
+ {% include_cached preload_font.html font='assets/fonts/forkawesome-webfont.woff2' %}
40
+
41
+ <link rel="icon" type="image/svg+xml" href="public/favicon.svg">
42
+ <link rel="alternate icon" href="public/favicon.ico">
43
+ <link rel="mask-icon" href="public/favicon.svg" color="white">
44
+ <link rel="manifest" href="manifest.json">
14
45
 
15
46
  {% seo %}
16
47
  {% feed_meta %}
17
48
  </head>
18
49
  <body class="d-flex flex-column justify-content-between d-print-block min-vh-100">
19
- {% include navbar.html %}
50
+ {%- include_cached onboarding.html -%}
51
+ {%- include_cached menu.html active_cache_key=page.layout %}
20
52
  {% include_cached search.html %}
21
53
 
22
54
  <main class="flex-grow-1 container-fluid d-flex flex-column justify-content-start">