Nueva edición de la convocatoria de residencias artísticas AfrOeste

Caption:
News title Nueva edición de la convocatoria de residencias artísticas AfrOeste abierta hasta el 19 de mayo
Date of publication of the news item 19/04/2024 - 11:26
News categories Cultura y desarrollo | Costa Rica | El Salvador | Honduras | República Dominicana | Paraguay | Perú | Guinea Ecuatorial
Summary of the news
Los Centros Culturales de España en el exterior, en alianza con diversas entidades, abren la segunda convocatoria de movilidad y residencias para creadores, creadoras y gestores culturales afrodescendientes y africanos
En esta edición se convocan un total de 14 plazas de residencia en 8 Centros Culturales y otras instituciones de América Latina y África
Madrid, 19 de abril de 2024. En el marco de la Red AfrOeste, los Centros Culturales de España en el exterior, en alianza con diversas entidades culturales afrodescendientes, lanzan por segundo año consecutivo una nueva edición de AfrOeste.
La convocatoria engloba un total de 14 residencias de diversas disciplinas artísticas dirigidas a creadores, creadoras y gestores culturales afrodescendientes y africanos residentes en cualquier país. Deberán ser mayores de edad y contar con una trayectoria demostrable en movimientos artísticos y/o culturales vinculados a la afrodescendencia.
El programa engloba varios espacios de residencia ubicados en 7 países de África y de América Latina y el Caribe, concretamente: Guinea Ecuatorial, República Dominicana, Perú, Paraguay, El Salvador, Honduras y Costa Rica. La disciplina artística, programa, duración, condiciones y cronograma de cada residencia es particular a las entidades que la convocan.
El objetivo de esta iniciativa es fomentar el intercambio artístico y cultural entre creadores afrodescendientes y africanos, así como aumentar las capacidades y cooperación entre las entidades pertenecientes a esta red de intercambio, aprendizaje y divulgación.
El plazo de solicitudes finaliza el 19 de mayo.
Más información y bases de la convocatoria
The following has evaluated to null or missing:
==> String [in template "20096#20122#DETALLE-NOTICIA-V2" at line 325, column 28]
----
Tip: If the failing expression is known to legally refer to something that's sometimes null or missing, either specify a default value like myOptionalVar!myDefault, or use <#if myOptionalVar??>when-present<#else>when-missing</#if>. (These only cover the last step of the expression; to cover the whole expression, use parenthesis: (myOptionalVar.foo)!myDefault, (myOptionalVar.foo)??
----
----
FTL stack trace ("~" means nesting-related):
- Failed at: ${String(m).padStart(2, "0")} [in template "20096#20122#DETALLE-NOTICIA-V2" at line 325, column 26]
----
1<style>
2 .contNoticia h1 {
3 font-weight: 700;
4 font-size: 2.438rem;
5 line-height: 2.938rem;
6 color: var(--brand-color-1);
7 }
8
9 .contNoticia .colIzq {
10 border-right: 1px solid #A09899;
11 padding-right: 3rem;
12 }
13
14 .contNoticia .colDer {
15 padding-left: 3rem;
16 }
17
18 .contNoticia img {
19 margin-bottom: 20px;
20 }
21
22 .contNoticia .pieFoto {
23 margin-bottom: 40px;
24 color: #494546;
25 }
26
27 .contNoticia .contenidoNoticia h2 {
28 font-weight: 600;
29 font-size: 1.25rem;
30 line-height: 1.5rem;
31 color: var(--brand-color-1);
32 text-transform: uppercase;
33 }
34
35 .contNoticia .tituloPeq {
36 font-weight: 600;
37 font-size: 1.5rem;
38 line-height: 1.875rem;
39 color: black;
40 text-transform: uppercase;
41 margin-top: 2.5rem;
42 }
43
44 .contNoticia .tituloPeq:first-child {
45 margin-top: 0;
46 }
47
48 .cat {
49 font-weight: 400;
50 font-size: 1.25rem;
51 line-height: 1.5rem;
52 display: block;
53 margin: 0.625rem 0;
54 text-transform: uppercase;
55 }
56
57 .catTematica {
58 display: inline-block;
59 padding: 0.313rem 0.625rem;
60 background: #F6F2F3;
61 border-radius: 0.625rem;
62 font-weight: 400;
63 font-size: 1.25rem;
64 line-height: 1.5rem;
65 color: #000000;
66 margin: 0.625rem 0;
67 text-transform: uppercase;
68 }
69
70 .botonRRSSDetalle {
71 margin: 0.625rem 0.625rem 0.625rem 0;
72 display: inline-block;
73 }
74
75 .contNoticia a {
76 color: var(--brand-color-1)!important;
77 }
78
79 .imgOds {
80 width: 10rem;
81 margin-bottom: 1rem;
82 }
83
84 .contAudio {
85 height: 6rem;
86 width: 26rem;
87 border: 3px solid #b4b4b4;
88 border-radius: 50px;
89 position: relative;
90 padding: 0 20px;
91 margin-right: auto!important;
92 margin-left: auto!important;
93 margin-top: 40px;
94 }
95
96 .contAudio button {
97 height: 6.1rem;
98 width: 6.1rem;
99 border: none;
100 border-radius: 50%;
101 position: absolute;
102 left: -3px;
103 top: -3px;
104 padding: 0;
105 }
106
107 .contAudio button img {
108 width: 100%;
109 height: 100%;
110 object-fit: cover;
111 }
112
113 .contAudio .tituloAudio {
114 font-weight: 600;
115 margin-bottom: .25rem;
116 }
117
118 .contAudio .auth {
119 margin-bottom: .5rem;
120 display: block;
121 }
122
123 .contAudio #timer {
124 color: #737373;
125 margin-bottom: 0;
126 margin-right: 15px;
127 width: 4rem;
128 }
129
130 input[type='range'] {
131 width: 100%;
132 -webkit-appearance: none;
133 background: transparent;
134 cursor: pointer;
135 --sx: 0%;
136 }
137
138 /***** Chrome, Safari, Opera, and Edge Chromium *****/
139 input[type="range"]::-webkit-slider-runnable-track {
140 background: linear-gradient(var(--brand-color-1), var(--brand-color-1)) 0/var(--sx) 100% no-repeat #e9e9ed;
141 height: 0.5rem;
142 }
143
144 input[type="range"]::-webkit-slider-thumb {
145 -webkit-appearance: none; /* Override default look */
146 appearance: none;
147 margin-top: -4px; /* Centers thumb on the track */
148 background-color: #A09899;
149 height: 1rem;
150 width: 1rem;
151 border-radius: 50%;
152 }
153
154 /******** Firefox ********/
155 input[type="range"]::-moz-range-track {
156 background: #e9e9ed;
157 height: 0.5rem;
158 }
159
160 input[type="range"]::-moz-range-thumb {
161 border: none; /*Removes extra border that FF applies*/
162 border-radius: 50%; /*Removes default border-radius that FF applies*/
163 background-color: #A09899;
164 height: 1rem;
165 width: 1rem;
166 }
167
168 input[type="range"]::-moz-range-progress {
169 background: var(--brand-color-1);
170 height: 0.5rem;
171 }
172
173 @media screen and (max-width: 576px) {
174 .contNoticia .colIzq {
175 border-right: 0;
176 padding-right: 0;
177 }
178
179 .contNoticia .colDer {
180 padding-left: 0;
181 }
182
183 .contAudio {
184 height: 6.2rem;
185 width: 100%;
186 }
187
188 .contAudio button {
189 height: 6.1rem;
190 width: 6.1rem;
191 }
192 }
193</style>
194
195<#assign
196 AssetCategoryLocalService=serviceLocator.findService("com.liferay.asset.kernel.service.AssetCategoryLocalService") />
197<#assign
198 JournalArticleLocalService=serviceLocator.findService("com.liferay.journal.service.JournalArticleLocalService") />
199<#assign
200 journalArticle=JournalArticleLocalService.getArticle(getterUtil.getLong(groupId),.vars['reserved-article-id'].data) />
201<#assign categories=AssetCategoryLocalService.getCategories("com.liferay.journal.model.JournalArticle",
202 journalArticle.getResourcePrimKey()) />
203<#assign AssetEntryLocalService=serviceLocator.findService("com.liferay.asset.kernel.service.AssetEntryLocalService") />
204<#assign assetEntry=AssetEntryLocalService.getEntry("com.liferay.journal.model.JournalArticle",
205 journalArticle.getResourcePrimKey()) />
206
207<div class="contNoticia row m-0">
208 <div class="col-12 col-lg-9 pl-0 colIzq py-3">
209 <#if (title.getData())??>
210 <h1>${title.getData()}</h1>
211 </#if>
212 <#if (resumen.getData())??>
213 <p>${resumen.getData()}</p>
214 </#if>
215 <#if (image.getData())?? && image.getData() != "">
216 <img alt="${image.getAttribute("alt")?replace('"', "'")}" data-fileentryid="${image.getAttribute("fileEntryId")}" src="${image.getData()}" class="w-100" />
217 <p class="pieFoto">${image.getAttribute("alt")}</p>
218 </#if>
219 <#if (content.getData())??>
220 <div class="contenidoNoticia">${content.getData()}</div>
221 </#if>
222 <#if (audio.getData())?? && audio.getData() != "">
223 <#if audio.getData()?contains('mp3') || audio.getData()?contains('ogg')>
224 <audio controls class="mt-3 d-none">
225 <source src="${audio.getData()}" type="audio/${(audio.getData()?contains('mp3'))?then('mpeg', 'ogg')}">
226 Your browser does not support the audio tag.
227 </audio>
228
229 <div class="contAudio row align-items-center">
230 <button id="botonAudio" class="" ><img src="https://www.aecid.es/documents/d/guest/grafica_play-removebg-preview" alt="Play"/></button>
231 <div class="col-3">
232 </div>
233 <div class="col-9 pl-3">
234 <#if (titAudio.getData())??>
235 <p class="tituloAudio">${titAudio.getData()}</p>
236 </#if>
237 <#if (autor.getData())??>
238 <span class="auth">${autor.getData()}</span>
239 </#if>
240 <div class="d-flex">
241 <p id="timer">00:00</p>
242 <input type="range" id="rangeTime" min="0" value="0" />
243 </div>
244 </div>
245 </div>
246 <#else>
247 <a href="${audio.getData()}">
248 ${languageUtil.format(locale, "download-x", "Audio", false)}
249 </a>
250 </#if>
251 </#if>
252 </div>
253 <div class="col-12 col-lg-3 pr-0 py-3 colDer">
254 <#if categories?filter(cat -> cat.getVocabularyId() != 43484)?size gt 0>
255 <h2 class="tituloPeq">Temática</h2>
256 <div class="d-flex flex-wrap">
257 <#list categories?filter(cat -> cat.getVocabularyId() != 43484) as cat>
258 <span class="catTematica">${cat.getName()}</span>
259 </#list>
260 </div>
261 </#if>
262
263 <h2 class="tituloPeq">ODS</h2>
264 <#if (ods.getData())?? && ods.getData() != "">
265 <#assign alt = "Icono de ODS" />
266 <#list ods.getOptionsMap() as v,k>
267 <#if v == ods.getData()>
268 <#assign alt = k />
269 </#if>
270 </#list>
271
272 <img class="imgOds" src="/documents/d/global/s_sdg_icons_inverted_transparent_web-${ods.getData()}" alt="ODS ${alt}" />
273 <#else>
274 <img class="imgOds" src="/documents/d/global/sdg-wheel_web-400x400" alt="Rueda de las ODS" />
275 </#if>
276
277 <#if categories?filter(cat -> cat.getVocabularyId() == 43484)?size gt 0>
278 <h2 class="tituloPeq">Localización</h2>
279 <#list categories?filter(cat -> cat.getVocabularyId() == 43484) as cat>
280 <span class="cat catLoc">${cat.getName()}</span>
281 </#list>
282 </#if>
283
284 <h2 class="tituloPeq">Fecha</h2>
285 <#if journalArticle?has_content>
286 <#if assetEntry.getPublishDate()??>
287 <#assign fechaPubli=assetEntry.getPublishDate()?datetime?string["dd/MM/yyyy - HH:mm"]>
288 <span class="cat">${fechaPubli}</span>
289 </#if>
290 </#if>
291
292 <h2 class="tituloPeq">Compartir</h2>
293 <a target="_blank" href="https://www.facebook.com/sharer/sharer.php?u=${friendlyURL}" target="_blank" rel="noopener" class="botonRRSSDetalle" aria-label="${languageUtil.get(locale, "compartir.en")} Facebook">
294 <svg width="36" height="36" viewBox="0 0 36 36" fill="none" xmlns="http://www.w3.org/2000/svg"><g clip-path="url(#clip0_1_35584)"><path fill-rule="evenodd" clip-rule="evenodd" d="M20.6095 36H12.5774V20.6268H8V13.8902H12.5774C12.5627 12.3356 12.5774 10.781 12.6206 9.22642C12.7294 8.17188 12.9307 7.13549 13.2252 6.11723C14.3773 2.73944 16.7239 0.766828 20.264 0.201128C22.9293 -0.145201 25.5773 -0.0441522 28.2097 0.503411V6.63543C26.7398 6.50933 25.2716 6.52401 23.8051 6.67861C22.1287 7.00248 21.107 7.9957 20.739 9.65825C20.6173 11.0652 20.5741 12.4755 20.6095 13.8902H27.7779C27.359 16.1271 26.9851 18.3726 26.6551 20.6268H20.6095V36Z" fill="#0A66FF"/></g><defs><clipPath id="clip0_1_35584"><rect width="20.2097" height="36" fill="white" transform="translate(8)"/></clipPath></defs></svg>
295 </a>
296 <a target="_blank" href="https://twitter.com/share?ref_src=twsrc%5Etfw" class="botonRRSSDetalle" data-show-count="false" aria-label="${languageUtil.get(locale, "compartir.en")} Twitter/X">
297 <svg width="36" height="36" viewBox="0 0 36 36" fill="none" xmlns="http://www.w3.org/2000/svg"><g clip-path="url(#clip0_1_35585)"><path d="M28.4425 2H33.9607L21.8447 15.7954L36 34.5092H24.8917L16.1946 23.137L6.23792 34.5092H0.71976L13.5555 19.7541L0 2H11.3842L19.2416 12.3885L28.4425 2ZM26.5112 31.2702H29.5701L9.77674 5.11896H6.48984L26.5112 31.2702Z" fill="black"/></g><defs><clipPath id="clip0_1_35585"><rect width="36" height="32.5092" fill="white" transform="translate(0 2)"/></clipPath></defs></svg>
298 </a>
299 </div>
300</div>
301
302<script>
303Liferay.on('allPortletsReady', () => {
304 const audio = document.querySelector('.contNoticia audio');
305 const boton = document.getElementById('botonAudio');
306 const range = document.getElementById('rangeTime');
307 const timer = document.getElementById('timer');
308 const playImg = 'https://www.aecid.es/documents/d/guest/grafica_play-removebg-preview';
309 const pauseImg = 'https://www.aecid.es/documents/d/guest/grafica_pause-removebg-preview';
310
311 if (!audio || !boton || !range || !timer) return;
312
313 let intervalo = null;
314
315 const setRangeStyle = (val) => {
316 const min = Number(range.min) || 0;
317 const max = Number(range.max) || 100;
318 const percent = ((val - min) * 100) / (max - min);
319 range.style.setProperty('--sx', percent + '%');
320 };
321
322 const setTimerFromSeconds = (sec) => {
323 const m = Math.floor(sec / 60);
324 const s = Math.floor(sec % 60);
325 timer.textContent = `${String(m).padStart(2, '0')}:${String(s).padStart(2, '0')}`;
326 };
327
328 audio.addEventListener('loadedmetadata', () => {
329 range.max = Math.floor(audio.duration || 0);
330 setRangeStyle(Number(range.value) || 0);
331 });
332
333 boton.addEventListener('click', () => {
334 if (audio.ended || audio.currentTime >= audio.duration) {
335 audio.currentTime = 0;
336 range.value = 0;
337 setTimerFromSeconds(0);
338 setRangeStyle(0);
339 }
340
341 if (audio.paused) {
342 audio.play();
343 boton.querySelector('img')?.setAttribute('src', pauseImg);
344
345 intervalo = setInterval(() => {
346 const val = Math.floor(audio.currentTime);
347 range.value = val;
348 setTimerFromSeconds(val);
349 setRangeStyle(val);
350 }, 500);
351 } else {
352 audio.pause();
353 boton.querySelector('img')?.setAttribute('src', playImg);
354 clearInterval(intervalo);
355 intervalo = null;
356 }
357 });
358
359 audio.addEventListener('ended', () => {
360 clearInterval(intervalo);
361 intervalo = null;
362 boton.querySelector('img')?.setAttribute('src', playImg);
363 });
364
365 range.addEventListener('input', (e) => {
366 const val = Number(e.target.value) || 0;
367 audio.currentTime = val;
368 setTimerFromSeconds(val);
369 setRangeStyle(val);
370 });
371});
372</script>


