radios-comunitarias-jekyll-theme 0.1.0

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.
Files changed (64) hide show
  1. checksums.yaml +7 -0
  2. data/LICENSE.txt +168 -0
  3. data/README.md +113 -0
  4. data/_data/en.yml +38 -0
  5. data/_data/es.yml +61 -0
  6. data/_data/forms/contacto.yml +40 -0
  7. data/_data/layouts/post.yml +112 -0
  8. data/_data/layouts/radio.yml +165 -0
  9. data/_includes/boolean.html +30 -0
  10. data/_includes/contact.html +19 -0
  11. data/_includes/content.html +1 -0
  12. data/_includes/email.html +1 -0
  13. data/_includes/file.html +35 -0
  14. data/_includes/footer.html +28 -0
  15. data/_includes/form/boolean.html +1 -0
  16. data/_includes/form/content.html +1 -0
  17. data/_includes/form/email.html +1 -0
  18. data/_includes/form/file.html +1 -0
  19. data/_includes/form/hidden.html +1 -0
  20. data/_includes/form/image.html +1 -0
  21. data/_includes/form/input.html +1 -0
  22. data/_includes/form/markdown_content.html +1 -0
  23. data/_includes/form/number.html +1 -0
  24. data/_includes/form/predefined_array.html +1 -0
  25. data/_includes/form/section.html +1 -0
  26. data/_includes/form/separator.html +1 -0
  27. data/_includes/form/string.html +1 -0
  28. data/_includes/form/submit.html +1 -0
  29. data/_includes/form/tel.html +1 -0
  30. data/_includes/form/text.html +1 -0
  31. data/_includes/form/url.html +1 -0
  32. data/_includes/hidden.html +5 -0
  33. data/_includes/image.html +32 -0
  34. data/_includes/input.html +33 -0
  35. data/_includes/logo.html +5 -0
  36. data/_includes/markdown_content.html +1 -0
  37. data/_includes/navbar.html +78 -0
  38. data/_includes/number.html +1 -0
  39. data/_includes/post.html +118 -0
  40. data/_includes/predefined_array.html +39 -0
  41. data/_includes/reproductor.html +20 -0
  42. data/_includes/section.html +1 -0
  43. data/_includes/separator.html +1 -0
  44. data/_includes/share.html +28 -0
  45. data/_includes/share_box.html +13 -0
  46. data/_includes/string.html +3 -0
  47. data/_includes/submit.html +1 -0
  48. data/_includes/tel.html +1 -0
  49. data/_includes/text.html +32 -0
  50. data/_includes/url.html +1 -0
  51. data/_layouts/default.html +40 -0
  52. data/_layouts/home.html +30 -0
  53. data/_layouts/post.html +5 -0
  54. data/_layouts/radio.html +49 -0
  55. data/_sass/accessibility.scss +13 -0
  56. data/_sass/helpers.scss +54 -0
  57. data/_sass/share.html +12 -0
  58. data/_sass/share_box.html +16 -0
  59. data/_sass/share_box.scss +26 -0
  60. data/_sass/toggler.scss +39 -0
  61. data/assets/css/styles.scss +66 -0
  62. data/assets/fonts/forkawesome-webfont.woff2 +0 -0
  63. data/assets/js/script.js +50 -0
  64. 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 %}
@@ -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,5 @@
1
+ {%- assign name = include.field[0] -%}
2
+ {%- assign id = include.field[1].id | default: name -%}
3
+ {%- assign value = include.field[1].value -%}
4
+
5
+ <input type="hidden" value="{{ value }}" name="{{ name }}" id="{{ id }}" />
@@ -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>
@@ -0,0 +1,5 @@
1
+ {%- assign radio = site.posts | find: 'layout', 'radio' -%}
2
+ <img
3
+ loading="lazy"
4
+ src="{{ radio.logo.path | thumbnail: 50 }}"
5
+ alt="{{ radio.logo.description | default: radio.title }}" />
@@ -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>