radios-comunitarias-jekyll-theme 0.1.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +7 -0
- data/LICENSE.txt +168 -0
- data/README.md +113 -0
- data/_data/en.yml +38 -0
- data/_data/es.yml +61 -0
- data/_data/forms/contacto.yml +40 -0
- data/_data/layouts/post.yml +112 -0
- data/_data/layouts/radio.yml +165 -0
- data/_includes/boolean.html +30 -0
- data/_includes/contact.html +19 -0
- data/_includes/content.html +1 -0
- data/_includes/email.html +1 -0
- data/_includes/file.html +35 -0
- data/_includes/footer.html +28 -0
- data/_includes/form/boolean.html +1 -0
- data/_includes/form/content.html +1 -0
- data/_includes/form/email.html +1 -0
- data/_includes/form/file.html +1 -0
- data/_includes/form/hidden.html +1 -0
- data/_includes/form/image.html +1 -0
- data/_includes/form/input.html +1 -0
- data/_includes/form/markdown_content.html +1 -0
- data/_includes/form/number.html +1 -0
- data/_includes/form/predefined_array.html +1 -0
- data/_includes/form/section.html +1 -0
- data/_includes/form/separator.html +1 -0
- data/_includes/form/string.html +1 -0
- data/_includes/form/submit.html +1 -0
- data/_includes/form/tel.html +1 -0
- data/_includes/form/text.html +1 -0
- data/_includes/form/url.html +1 -0
- data/_includes/hidden.html +5 -0
- data/_includes/image.html +32 -0
- data/_includes/input.html +33 -0
- data/_includes/logo.html +5 -0
- data/_includes/markdown_content.html +1 -0
- data/_includes/navbar.html +78 -0
- data/_includes/number.html +1 -0
- data/_includes/post.html +118 -0
- data/_includes/predefined_array.html +39 -0
- data/_includes/reproductor.html +20 -0
- data/_includes/section.html +1 -0
- data/_includes/separator.html +1 -0
- data/_includes/share.html +28 -0
- data/_includes/share_box.html +13 -0
- data/_includes/string.html +3 -0
- data/_includes/submit.html +1 -0
- data/_includes/tel.html +1 -0
- data/_includes/text.html +32 -0
- data/_includes/url.html +1 -0
- data/_layouts/default.html +40 -0
- data/_layouts/home.html +30 -0
- data/_layouts/post.html +5 -0
- data/_layouts/radio.html +49 -0
- data/_sass/accessibility.scss +13 -0
- data/_sass/helpers.scss +54 -0
- data/_sass/share.html +12 -0
- data/_sass/share_box.html +16 -0
- data/_sass/share_box.scss +26 -0
- data/_sass/toggler.scss +39 -0
- data/assets/css/styles.scss +66 -0
- data/assets/fonts/forkawesome-webfont.woff2 +0 -0
- data/assets/js/script.js +50 -0
- metadata +279 -0
@@ -0,0 +1,165 @@
|
|
1
|
+
---
|
2
|
+
title:
|
3
|
+
type: 'string'
|
4
|
+
required: true
|
5
|
+
label:
|
6
|
+
es: 'Nombre de la radio'
|
7
|
+
en: "Radio's name"
|
8
|
+
help:
|
9
|
+
es: ''
|
10
|
+
en: ''
|
11
|
+
description:
|
12
|
+
type: 'text'
|
13
|
+
required: true
|
14
|
+
label:
|
15
|
+
es: 'Descripción corta de la radio'
|
16
|
+
en: "Radio's short description"
|
17
|
+
help:
|
18
|
+
es: ''
|
19
|
+
en: ''
|
20
|
+
logo:
|
21
|
+
type: 'image'
|
22
|
+
path:
|
23
|
+
label:
|
24
|
+
es: 'Logo'
|
25
|
+
en: 'Logo'
|
26
|
+
help:
|
27
|
+
es: ''
|
28
|
+
en: ''
|
29
|
+
description:
|
30
|
+
label:
|
31
|
+
es: 'Descripción del logo'
|
32
|
+
en: 'Logo description'
|
33
|
+
help:
|
34
|
+
es: Describe el logo para usuaries no videntes y buscadores
|
35
|
+
en: |
|
36
|
+
Describe the logo for blind or partially sighted users and
|
37
|
+
search engines
|
38
|
+
content:
|
39
|
+
type: 'markdown_content'
|
40
|
+
label:
|
41
|
+
es: 'Presentación de la radio'
|
42
|
+
en: 'Radio presentation'
|
43
|
+
help:
|
44
|
+
es: 'Historia, trasfondo, principios políticos, etc.'
|
45
|
+
en: 'History, context, political principles, etc.'
|
46
|
+
streams:
|
47
|
+
type: 'array'
|
48
|
+
label:
|
49
|
+
es: 'Direcciones de la transmisión'
|
50
|
+
en: 'Transmission addresses'
|
51
|
+
help:
|
52
|
+
es: 'Las direcciones de la transmisión de Icecast, pueden ser varias para tener opciones o tener varios formatos para soportar distintos navegadores (ogg para todos, mp3 para Safari).'
|
53
|
+
en: 'Icecast addresses, could be several for backup or have different formats (ogg for all browsers, mp3 for Safari).'
|
54
|
+
fediverse:
|
55
|
+
type: 'url'
|
56
|
+
label:
|
57
|
+
es: 'Fediverso'
|
58
|
+
en: 'Fediverse'
|
59
|
+
help:
|
60
|
+
es: 'Dirección completa al perfil'
|
61
|
+
en: 'Full address to the profile'
|
62
|
+
facebook:
|
63
|
+
type: 'url'
|
64
|
+
label:
|
65
|
+
es: 'Facebook'
|
66
|
+
en: 'Facebook'
|
67
|
+
help:
|
68
|
+
es: 'Dirección completa al perfil'
|
69
|
+
en: 'Full address to the profile'
|
70
|
+
instagram:
|
71
|
+
type: 'url'
|
72
|
+
label:
|
73
|
+
es: 'Instagram'
|
74
|
+
en: 'Instagram'
|
75
|
+
help:
|
76
|
+
es: 'Dirección completa al perfil'
|
77
|
+
en: 'Full address to the profile'
|
78
|
+
twitter:
|
79
|
+
type: 'url'
|
80
|
+
label:
|
81
|
+
es: 'Twitter'
|
82
|
+
en: 'Twitter'
|
83
|
+
help:
|
84
|
+
es: 'Dirección completa al perfil'
|
85
|
+
en: 'Full address to the profile'
|
86
|
+
youtube:
|
87
|
+
type: 'url'
|
88
|
+
label:
|
89
|
+
es: 'Youtube'
|
90
|
+
en: 'Youtube'
|
91
|
+
help:
|
92
|
+
es: 'Dirección completa al perfil'
|
93
|
+
en: 'Full address to the profile'
|
94
|
+
internet_archive:
|
95
|
+
type: 'url'
|
96
|
+
label:
|
97
|
+
es: 'Internet Archive'
|
98
|
+
en: 'Internet Archive'
|
99
|
+
help:
|
100
|
+
es: 'Dirección completa al archivo de la radio'
|
101
|
+
en: "Full address to the radio's archive"
|
102
|
+
email:
|
103
|
+
type: 'email'
|
104
|
+
label:
|
105
|
+
es: 'Correo electrónico'
|
106
|
+
en: 'E-mail'
|
107
|
+
help:
|
108
|
+
es: ''
|
109
|
+
en: ''
|
110
|
+
background_color:
|
111
|
+
type: 'color'
|
112
|
+
label:
|
113
|
+
es: 'Color de fondo del sitio'
|
114
|
+
en: ''
|
115
|
+
help:
|
116
|
+
es: 'Si tenés dudas seleccionando colores, te recomendamos contactar a le diseñadore [librenauta](https://copiona.com/), o elegir colores con [criterio de accesibilidad](https://randoma11y.com/).'
|
117
|
+
en: "If you're in doubt while selecting colors, we invite you to contact the designer [librenauta](https://copiona.com/) or pick color using [accessibility criteria](https://randoma11y.com/)."
|
118
|
+
foreground_color:
|
119
|
+
type: 'color'
|
120
|
+
label:
|
121
|
+
es: 'Color del texto del sitio'
|
122
|
+
en: ''
|
123
|
+
help:
|
124
|
+
es: ''
|
125
|
+
en: ''
|
126
|
+
navbar_background_color:
|
127
|
+
type: 'color'
|
128
|
+
label:
|
129
|
+
es: 'Color de fondo del reproductor de la radio y de los vínculos en el sitio'
|
130
|
+
en: ''
|
131
|
+
help:
|
132
|
+
es: ''
|
133
|
+
en: ''
|
134
|
+
navbar_foreground_color:
|
135
|
+
type: 'color'
|
136
|
+
label:
|
137
|
+
es: 'Color del texto del reproductor de la radio'
|
138
|
+
en: ''
|
139
|
+
help:
|
140
|
+
es: ''
|
141
|
+
en: ''
|
142
|
+
social_foreground_color:
|
143
|
+
type: 'color'
|
144
|
+
label:
|
145
|
+
es: 'Color de los botones de redes sociales'
|
146
|
+
en: ''
|
147
|
+
help:
|
148
|
+
es: ''
|
149
|
+
en: ''
|
150
|
+
draft:
|
151
|
+
type: 'boolean'
|
152
|
+
label:
|
153
|
+
es: 'Borrador'
|
154
|
+
en: 'Draft'
|
155
|
+
help:
|
156
|
+
es: 'Este artículo aun no está listo para publicar'
|
157
|
+
en: "This post isn't ready to be published yet"
|
158
|
+
order:
|
159
|
+
type: 'order'
|
160
|
+
label:
|
161
|
+
es: 'Orden'
|
162
|
+
en: 'Order'
|
163
|
+
help:
|
164
|
+
es: 'La posición del artículo en la lista de artículos'
|
165
|
+
en: 'The post position in the posts list'
|
@@ -0,0 +1,30 @@
|
|
1
|
+
{%- assign name = include.field[0] -%}
|
2
|
+
{%- assign id = include.field[1].id | default: name -%}
|
3
|
+
{%- assign label = include.field[1].label[site.locale] -%}
|
4
|
+
{%- assign help = include.field[1].help[site.locale] -%}
|
5
|
+
{%- assign autocomplete = include.field[1].autocomplete -%}
|
6
|
+
|
7
|
+
<div class="form-check text-left">
|
8
|
+
<input
|
9
|
+
{% if help %}
|
10
|
+
aria-describedby="help-{{ id }}"
|
11
|
+
{% endif %}
|
12
|
+
{% if include.field[1].required %}
|
13
|
+
required
|
14
|
+
{% endif %}
|
15
|
+
type="checkbox"
|
16
|
+
name="{{ name }}"
|
17
|
+
id="{{ id }}"
|
18
|
+
{% if autocomplete %}
|
19
|
+
autocomplete="{{ autocomplete }}"
|
20
|
+
{% endif %}
|
21
|
+
class="form-check-input" />
|
22
|
+
|
23
|
+
<label class="form-check-label" for="{{ id }}">{{ label }}</label>
|
24
|
+
|
25
|
+
{%- if help -%}
|
26
|
+
<small id="help-{{ id }}" class="form-text">
|
27
|
+
{{ help }}
|
28
|
+
</small>
|
29
|
+
{%- endif -%}
|
30
|
+
</div>
|
@@ -0,0 +1,19 @@
|
|
1
|
+
{% comment %}
|
2
|
+
Esta imagen obtiene una cookie desde la API de Sutty para autorizar el
|
3
|
+
envío del formulario.
|
4
|
+
{% endcomment %}
|
5
|
+
<img class="d-none" src="https://api.sutty.nl/v1/sites/{{ site.hostname }}/contact/cookie.png" />
|
6
|
+
|
7
|
+
{% comment %}
|
8
|
+
El formulario se envía a la API. La definición del formulario se
|
9
|
+
encuentra en _data/forms/contacto.yml
|
10
|
+
{% endcomment %}
|
11
|
+
<form action="https://api.sutty.nl/v1/sites/{{ site.hostname }}/contact/contacto"
|
12
|
+
method="post">
|
13
|
+
{%- for field in include.form -%}
|
14
|
+
{% assign template = field[1].type | append: '.html' %}
|
15
|
+
<div class="col{{ field[1].col | default: 12 | prepend: '-' }}">
|
16
|
+
{% include {{ template }} field=field %}
|
17
|
+
</div>
|
18
|
+
{%- endfor -%}
|
19
|
+
</form>
|
@@ -0,0 +1 @@
|
|
1
|
+
{% include text.html field=field %}
|
@@ -0,0 +1 @@
|
|
1
|
+
{% include input.html field=field %}
|
data/_includes/file.html
ADDED
@@ -0,0 +1,35 @@
|
|
1
|
+
{%- assign name = include.field[0] -%}
|
2
|
+
{%- assign id = include.field[1].id | default: name -%}
|
3
|
+
{%- assign label = include.field[1]['path'].label[site.locale] -%}
|
4
|
+
{%- assign help = include.field[1]['path'].help[site.locale] -%}
|
5
|
+
{%- assign accept = include.field[1].accept -%}
|
6
|
+
|
7
|
+
<label>{{ label }}</label>
|
8
|
+
|
9
|
+
<div class="custom-file">
|
10
|
+
<input
|
11
|
+
{% if help %}
|
12
|
+
aria-describedby="help-{{ id }}"
|
13
|
+
{% endif %}
|
14
|
+
{% if include.field[1].required %}
|
15
|
+
required
|
16
|
+
{% endif %}
|
17
|
+
type="{{ include.field[1].type }}"
|
18
|
+
name="{{ name }}[path]"
|
19
|
+
id="{{ id }}_path"
|
20
|
+
{% if accept %}
|
21
|
+
accept="{{ accept }}"
|
22
|
+
{% endif %}
|
23
|
+
class="custom-file-input" />
|
24
|
+
|
25
|
+
<label for="{{ id }}_path" class="custom-file-label">
|
26
|
+
{{ label }}
|
27
|
+
{% if include.field[1].required %}*{% endif %}
|
28
|
+
</label>
|
29
|
+
|
30
|
+
{%- if help -%}
|
31
|
+
<small id="help-{{ id }}" class="form-text">
|
32
|
+
{{ help }}
|
33
|
+
</small>
|
34
|
+
{%- endif -%}
|
35
|
+
</div>
|
@@ -0,0 +1,28 @@
|
|
1
|
+
{%- assign radio = site.posts | find: 'layout', 'radio' -%}
|
2
|
+
|
3
|
+
<footer>
|
4
|
+
{% comment %}
|
5
|
+
Acá sale una mejora adhoc de la referencia
|
6
|
+
{% endcomment %}
|
7
|
+
<div class="container text-center text-md-left">
|
8
|
+
<p class="m-0 font-weight-bold">
|
9
|
+
<a href="{{ radio.url }}">
|
10
|
+
{{ radio.title }}
|
11
|
+
</a>
|
12
|
+
</p>
|
13
|
+
|
14
|
+
{%- for social in site.i18n.menu.items -%}
|
15
|
+
{%- unless radio[social.type] -%}{% continue %}{%- endunless -%}
|
16
|
+
<a
|
17
|
+
rel="me"
|
18
|
+
target="_blank" href="{{ radio[social.type] }}">
|
19
|
+
<i class="fa fa-fw fa-x2 fa-{{ social.icon }}"></i>
|
20
|
+
<span class="sr-only">{{ social.text }}</span>
|
21
|
+
</a>
|
22
|
+
{%- endfor -%}
|
23
|
+
</div>
|
24
|
+
|
25
|
+
<div class="text-center">
|
26
|
+
{{ site.i18n.footer.credits | markdownify }}
|
27
|
+
</div>
|
28
|
+
</footer>
|
@@ -0,0 +1 @@
|
|
1
|
+
../boolean.html
|
@@ -0,0 +1 @@
|
|
1
|
+
../content.html
|
@@ -0,0 +1 @@
|
|
1
|
+
../email.html
|
@@ -0,0 +1 @@
|
|
1
|
+
../file.html
|
@@ -0,0 +1 @@
|
|
1
|
+
../hidden.html
|
@@ -0,0 +1 @@
|
|
1
|
+
../image.html
|
@@ -0,0 +1 @@
|
|
1
|
+
../input.html
|
@@ -0,0 +1 @@
|
|
1
|
+
../markdown_content.html
|
@@ -0,0 +1 @@
|
|
1
|
+
../number.html
|
@@ -0,0 +1 @@
|
|
1
|
+
../predefined_array.html
|
@@ -0,0 +1 @@
|
|
1
|
+
../section.html
|
@@ -0,0 +1 @@
|
|
1
|
+
../separator.html
|
@@ -0,0 +1 @@
|
|
1
|
+
../string.html
|
@@ -0,0 +1 @@
|
|
1
|
+
../submit.html
|
@@ -0,0 +1 @@
|
|
1
|
+
../tel.html
|
@@ -0,0 +1 @@
|
|
1
|
+
../text.html
|
@@ -0,0 +1 @@
|
|
1
|
+
../url.html
|
@@ -0,0 +1,32 @@
|
|
1
|
+
{%- assign name = include.field[0] -%}
|
2
|
+
{%- assign id = include.field[1].id | default: name -%}
|
3
|
+
{%- assign label = include.field[1]['path'].label[site.locale] -%}
|
4
|
+
{%- assign help = include.field[1]['path'].help[site.locale] -%}
|
5
|
+
|
6
|
+
<label>{{ label }}</label>
|
7
|
+
|
8
|
+
<div class="custom-file">
|
9
|
+
<input
|
10
|
+
{% if help %}
|
11
|
+
aria-describedby="help-{{ id }}"
|
12
|
+
{% endif %}
|
13
|
+
{% if include.field[1].required %}
|
14
|
+
required
|
15
|
+
{% endif %}
|
16
|
+
type="{{ include.field[1].type }}"
|
17
|
+
name="{{ name }}[path]"
|
18
|
+
id="{{ id }}_path"
|
19
|
+
accept="image/*"
|
20
|
+
class="custom-file-input" />
|
21
|
+
|
22
|
+
<label for="{{ id }}_path" class="custom-file-label">
|
23
|
+
{{ label }}
|
24
|
+
{% if include.field[1].required %}*{% endif %}
|
25
|
+
</label>
|
26
|
+
|
27
|
+
{%- if help -%}
|
28
|
+
<small id="help-{{ id }}" class="form-text">
|
29
|
+
{{ help }}
|
30
|
+
</small>
|
31
|
+
{%- endif -%}
|
32
|
+
</div>
|
@@ -0,0 +1,33 @@
|
|
1
|
+
{%- assign name = include.field[0] -%}
|
2
|
+
{%- assign id = include.field[1].id | default: name -%}
|
3
|
+
{%- assign label = include.field[1].label[site.locale] -%}
|
4
|
+
{%- assign help = include.field[1].help[site.locale] -%}
|
5
|
+
{%- assign autocomplete = include.field[1].autocomplete -%}
|
6
|
+
|
7
|
+
<div class="form-group">
|
8
|
+
<label for="{{ id }}">
|
9
|
+
{{ label }}
|
10
|
+
{% if include.field[1].required %}*{% endif %}
|
11
|
+
</label>
|
12
|
+
|
13
|
+
<input
|
14
|
+
{% if help %}
|
15
|
+
aria-describedby="help-{{ id }}"
|
16
|
+
{% endif %}
|
17
|
+
{% if include.field[1].required %}
|
18
|
+
required
|
19
|
+
{% endif %}
|
20
|
+
type="{{ include.field[1].type }}"
|
21
|
+
name="{{ name }}"
|
22
|
+
id="{{ id }}"
|
23
|
+
{% if autocomplete %}
|
24
|
+
autocomplete="{{ autocomplete }}"
|
25
|
+
{% endif %}
|
26
|
+
class="form-control" />
|
27
|
+
|
28
|
+
{%- if help -%}
|
29
|
+
<small id="help-{{ id }}" class="form-text">
|
30
|
+
{{ help }}
|
31
|
+
</small>
|
32
|
+
{%- endif -%}
|
33
|
+
</div>
|
data/_includes/logo.html
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
{% include text.html field=field %}
|
@@ -0,0 +1,78 @@
|
|
1
|
+
{%- assign radio = site.posts | find: 'layout', 'radio' -%}
|
2
|
+
|
3
|
+
{% comment %}
|
4
|
+
La posición sticky permite que la barra ocupe el alto adecuado en el
|
5
|
+
sitio y se "despegue" cuando estamos escroleando hacia abajo.
|
6
|
+
Funciona bien pero si escroleamos rápido se detecta el microsegundo
|
7
|
+
donde el navegador tardó en decidir qué hacía con la barra y se ve una
|
8
|
+
franja del fondo.
|
9
|
+
|
10
|
+
Si usamos fixed tenemos que incorporar el alto de la barra como margen
|
11
|
+
superior del sitio para que no se coma la parte de arriba.
|
12
|
+
|
13
|
+
TODO: Incorporar el hack para que no se coma el destino de la
|
14
|
+
navegación interna al saltar a un elemento (un título por ejemplo).
|
15
|
+
|
16
|
+
Evitamos que turbolinks descargue este elemento, o sea que se mantenga
|
17
|
+
entre navegaciones internas. Necesita un ID para funcionar.
|
18
|
+
{% endcomment %}
|
19
|
+
<nav
|
20
|
+
data-turbolinks-permanent
|
21
|
+
id="navbar"
|
22
|
+
class="navbar sticky-top navbar-expand-lg navbar-theme d-print-block row no-gutters justify-content-center pl-0 pr-0"
|
23
|
+
role="navigation"
|
24
|
+
aria-label="{{ site.i18n.menu.title }}">
|
25
|
+
|
26
|
+
{% comment %}
|
27
|
+
Para que la barra se alinee con el contenido, tenemos que darle el
|
28
|
+
mismo ancho.
|
29
|
+
{% endcomment %}
|
30
|
+
<div class="col-10">
|
31
|
+
<div class="row no-gutters align-items-center">
|
32
|
+
{% comment %}
|
33
|
+
La columna del logo tiene el mismo ancho que la imagen principal
|
34
|
+
de un artículo.
|
35
|
+
{% endcomment %}
|
36
|
+
<a class="navbar-brand col col-md-3 flex-grow-0" href="">
|
37
|
+
{% include_cached logo.html %}
|
38
|
+
|
39
|
+
{% comment %}
|
40
|
+
XXX: En pantallas pequeñas el nombre de la radio ocupa mucho espacio
|
41
|
+
{% endcomment %}
|
42
|
+
<span class="d-none d-md-inline">
|
43
|
+
{{ radio.title }}
|
44
|
+
</span>
|
45
|
+
</a>
|
46
|
+
|
47
|
+
{% comment %}
|
48
|
+
El reproductor crece cuando la pantalla es chica y abarca todo el
|
49
|
+
espacio disponible.
|
50
|
+
|
51
|
+
Tiene el mismo ancho que el ancho de un artículo.
|
52
|
+
{% endcomment %}
|
53
|
+
<div class="col col-md-6 flex-grow-1 d-flex align-items-center">
|
54
|
+
{% include_cached reproductor.html %}
|
55
|
+
</div>
|
56
|
+
|
57
|
+
{% comment %}
|
58
|
+
La lista de botones de redes sociales no se muestra en celulares.
|
59
|
+
|
60
|
+
Los botones ocupan el espacio sobrante, a la derecha de la imagen.
|
61
|
+
{% endcomment %}
|
62
|
+
<ul class="navbar-nav d-print-none col d-none d-lg-flex">
|
63
|
+
{%- for social in site.i18n.menu.items -%}
|
64
|
+
{%- unless radio[social.type] -%}{% continue %}{%- endunless -%}
|
65
|
+
<li class="nav-item">
|
66
|
+
<a
|
67
|
+
rel="me"
|
68
|
+
class="nav-link social-theme"
|
69
|
+
target="_blank" href="{{ radio[social.type] }}">
|
70
|
+
<i class="fa fa-fw fa-x2 fa-{{ social.icon }}"></i>
|
71
|
+
<span class="sr-only">{{ social.text }}</span>
|
72
|
+
</a>
|
73
|
+
</li>
|
74
|
+
{%- endfor -%}
|
75
|
+
</ul>
|
76
|
+
</div>
|
77
|
+
</div>
|
78
|
+
</nav>
|