Se ha producido un error al procesar la plantilla.
The following has evaluated to null or missing:
==> dlTool.getDLFileEntryByPath(Descargas.Archivo.data)  [in template "37703#37743#1558463" at line 242, column 104]

----
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: #assign dlFileEntry = dlTool.getDLFil...  [in template "37703#37743#1558463" at line 242, column 81]
----
1<#-- Services --> 
2<#assign assetEntryLocalServiceUtil = serviceLocator.findService("com.liferay.asset.kernel.service.AssetEntryLocalService")/> 
3<#assign assetLinkLocalService = serviceLocator.findService("com.liferay.asset.kernel.service.AssetLinkLocalService")/> 
4<#assign journalArticleResourceServiceUtil = serviceLocator.findService("com.liferay.journal.service.JournalArticleResourceLocalService")/> 
5<#assign assetCategoryLocalService = serviceLocator.findService("com.liferay.asset.kernel.service.AssetCategoryLocalService") /> 
6<#assign assetVocabularyLocalService = serviceLocator.findService("com.liferay.asset.kernel.service.AssetVocabularyLocalService") /> 
7 
8<#-- Reserved vbles --> 
9<#assign title = .vars['reserved-article-title'].data> 
10<#assign articleId=.vars["reserved-article-id"].data /> 
11<#assign description=.vars["reserved-article-description"].data /> 
12<#assign smallImageUrl=.vars["reserved-article-small-image-url"].data /> 
13<#assign date=.vars["reserved-article-display-date"].data /> 
14<#assign request = .vars['request']> 
15 
16<#-- Init --> 
17<#assign assetEntry = journalTool.getAssetEntryByArticleId(groupId, articleId)> 
18<#assign journalArticle = journalTool.getJournalArticleByAssetEntry(assetEntry)> 
19<#assign articleURL = themeDisplay.getURLPortal()+themeDisplay.getURLCurrent()> 
20<#assign articleSocialBookmarks = themeDisplay.getThemeSetting("article-social-bookmarks")!> 
21<#assign layoutSetBannerPath = layoutTool.getLayoutSetBannerPath(groupId, themeDisplay.getLayout().isPrivateLayout())!> 
22<#assign articleMainImageThumbnail3 = dlTool.getThumbnail(smallImageUrl, "3", layoutSetBannerPath)! /> 
23<#assign articleMainImageThumbnail1 = dlTool.getThumbnail(smallImageUrl, "1")! /> 
24 
25<#assign ddmStructureNameNormalize = "template-${friendlyURLNormalizerTool.normalize(journalArticle.getDDMStructure().getName(localeUtil.getDefault()))}" /> 
26 
27<#function sanitizeURL url> 
28	<#if !url?has_content> 
29		<#return "" /> 
30	</#if> 
31	<#assign urlTrimmed = url?trim /> 
32	<#if urlTrimmed?starts_with("javascript:") || urlTrimmed?starts_with("data:") || urlTrimmed?starts_with("vbscript:")> 
33		<#return "" /> 
34	</#if> 
35	<#return htmlUtil.escapeHREF(urlTrimmed) /> 
36</#function> 
37 
38<#function isExternalURL url> 
39	<#if !url?has_content> 
40		<#return false /> 
41	</#if> 
42	<#assign portalURLlc = themeDisplay.getPortalURL()?lower_case /> 
43	<#assign urlLC = url?lower_case /> 
44	<#assign isHttp = urlLC?starts_with("http://") || urlLC?starts_with("https://") /> 
45	<#assign isInternal = (url?starts_with("/")) || (isHttp && urlLC?starts_with(portalURLlc)) /> 
46	<#return isHttp && !isInternal /> 
47</#function> 
48 
49<#-- Build --> 
50<#if Nombre.data?has_content> 
51	<#assign title = Nombre.data> 
52</#if> 
53<#assign altImgDestacada = title /> 
54<#if AltImagenDestacada ??> 
55	<#if validator.isNotNull(AltImagenDestacada.getData())> 
56		<#assign altImgDestacada = AltImagenDestacada.getData() /> 
57	</#if> 
58</#if> 
59<#assign articleMainImageThumbnail3Safe = sanitizeURL(articleMainImageThumbnail3) /> 
60<#assign articleMainImageThumbnail1Safe = sanitizeURL(articleMainImageThumbnail1) /> 
61 
62<#-- Validaciones de TAB --> 
63<#assign limitacionPeso = (AsturiasMascotas.LimitacionPeso.data)!"" /> 
64<#assign NumeroMaximoPersona = (AsturiasMascotas.NumeroMaximoPersona.data)!"" /> 
65<#assign NumeroMaximoInterior = (AsturiasMascotas.NumeroMaximoInterior.data)!"" /> 
66<#assign AccesoInterior = (AsturiasMascotas.AccesoInterior.data)!"" /> 
67<#assign admitePPP = (AsturiasMascotas.AdmitePPP.data)!"" /> 
68<#assign AccesoTerraza = (AsturiasMascotas.AccesoTerraza.data)!"" /> 
69<#assign otrasMascotas = (AsturiasMascotas.OtrasMascotas.data)!"" /> 
70<#assign otrosAnimales = (AsturiasMascotas.OtrosAnimales.data)!"" /> 
71<#assign detalleNormas = (AsturiasMascotas.DetalleNormas.data)!"" /> 
72 
73<#assign hasIconos = limitacionPeso?has_content || NumeroMaximoPersona?has_content || NumeroMaximoInterior?has_content || AccesoInterior?has_content /> 
74<#assign hasNormas = admitePPP?has_content || AccesoTerraza?has_content || otrasMascotas?has_content || detalleNormas?has_content /> 
75 
76<article class="template ${ddmStructureNameNormalize}" role="article"> 
77	<header class="article-header-wrapper row no-gutters"> 
78		<div class="article-header-container article-header-container-static"> 
79			<div class="container"> 
80				<div class="row no-gutters"> 
81					<div class="col-md-6"> 
82						<div class="article-image" style="background-image: url('${sanitizeURL(articleMainImageThumbnail3Safe)}')" role="img" aria-label="${altImgDestacada}"> 
83							<img class="hide-accessible" src="${sanitizeURL(articleMainImageThumbnail3Safe)}" alt=""/> 
84						</div> 
85					</div> 
86					<div class="article-info-wrapper col-md-6"> 
87						<div class="article-info"> 
88							<h2 class="article-title" >${title}</h2> 
89							<div class="article-list-wrapper">					 
90								<ul class="article-list list-unstyled article-list-info"> 
91									<li class="article-list-item mb-4"> 
92										<span class="fas fa-map-marker-alt" aria-hidden="true"></span> 
93										<span class="hide-accessible">${languageUtil.get(request,"location")}</span> 
94										<span class="field-wrapper"> 
95											<#if Contacto.Concejo?? && Contacto.Concejo.data?has_content> 
96												<span class="important">${Contacto.Concejo.data}</span> 
97											</#if> 
98											<#if Contacto.Zona?? && Contacto.Zona.data?has_content> 
99												<span class="text d-block">${Contacto.Zona.data}</span> 
100											</#if> 
101										</span> 
102									</li> 
103									<#if Contacto.Direccion?? && Contacto.Direccion.data?has_content || Contacto.CP?? && Contacto.CP.data?has_content || Contacto.Localidad?? && Contacto.Localidad.data?has_content> 
104										<li class="article-list-item"> 
105											<span class="far fa-address-card" aria-hidden="true"></span> 
106											<span class="hide-accessible">${languageUtil.get(request,"address")}</span> 
107											<span class="field-wrapper"> 
108												<span class="field">${languageUtil.get(request, "address")}:</span> 
109												<span class="text">${(Contacto.Direccion.data)!}</span><span aria-hidden="true"> ■ </span> 
110												<span class="text">${(Contacto.CP.data)!} - ${(Contacto.Localidad.data)!}</span> 
111											</span> 
112										</li> 
113									</#if> 
114									 
115									<#if Contacto.Telefono?? && Contacto.Telefono.data?has_content>									 
116										<li class="article-list-item"> 
117											<span class="fas fa-phone-alt" aria-hidden="true"></span> 
118											<span class="hide-accessible">${languageUtil.get(request, "phone")}</span> 
119											<span class="field-wrapper"> 
120												<span class="field">${languageUtil.get(request, "phone")}:</span> 
121												<#list Contacto.Telefono.getSiblings() as telephone> 
122													<#if telephone.data?has_content> 
123														<#assign rawTelefono = telephone.data?trim /> 
124														<#assign cleanTelefono = rawTelefono?replace("\\(.*?\\)", "", "r") /> 
125														<#assign numberTelefono = cleanTelefono?replace("[^0-9]", "", "r") /> 
126														<#assign numberLength = numberTelefono?length /> 
127														<#if numberLength == 9> 
128															<#assign hrefNumber = "+34${numberTelefono}" /> 
129														<#else> 
130															<#assign hrefNumber = numberTelefono /> 
131														</#if> 
132														<span class="text"> 
133															<a href="tel:${htmlUtil.escapeHREF(hrefNumber)}" aria-label="${languageUtil.format(request, 'call', rawTelefono)}"> 
134																${rawTelefono} 
135															</a> 
136															<#if !telephone?is_last><span aria-hidden="true"> | </span></#if> 
137														</span> 
138													</#if> 
139												</#list> 
140											</span> 
141										</li> 
142									</#if> 
143 
144									<#if Contacto.Email?? && Contacto.Email.data?has_content> 
145										<li class="article-list-item"> 
146											<span class="far fa-envelope" aria-hidden="true"></span> 
147											<span class="hide-accessible">${languageUtil.get(request,"email")}</span> 
148											<span class="field-wrapper"> 
149												<span class="field">${languageUtil.get(request, "email")}:</span> 
150												<span class="text"> 
151													<#list Contacto.Email.getSiblings() as Item> 
152														<#if Item.data?trim?has_content> 
153															<#assign emailAddress = Item.data?trim /> 
154															<a href="mailto:${htmlUtil.escapeHREF(emailAddress)}" aria-label="${languageUtil.format(request,'email-to', emailAddress)}"> 
155																${emailAddress} 
156															</a> 
157															<#if Item_has_next>, </#if> 
158														</#if> 
159													</#list> 
160												</span> 
161											</span> 
162										</li> 
163									</#if> 
164 
165									<#if Contacto.Web?? && Contacto.Web.getSiblings()?has_content> 
166										<#assign hasValidURL = false /> 
167										<#list Contacto.Web.getSiblings() as web> 
168											<#if web.data?trim?has_content> 
169												<#assign linkURL = web.data?trim /> 
170												<#if !linkURL?starts_with("javascript:") && !linkURL?starts_with("data:") && !linkURL?starts_with("vbscript:")> 
171													<#assign hasValidURL = true /> 
172													<#break> 
173												</#if> 
174											</#if> 
175										</#list> 
176										<#if hasValidURL> 
177											<li class="article-list-item web"> 
178												<span class="fas fa-link" aria-hidden="true"></span> 
179												<span class="field-wrapper d-inline-flex flex-wrap align-items-center gap-2"> 
180													<span class="field mr-1">${languageUtil.get(request, "site")}:</span> 
181													<#assign webCount = 0 /> 
182													<#list Contacto.Web.getSiblings() as web> 
183														<#if web.data?trim?has_content> 
184															<#assign linkURL = web.data?trim /> 
185															<#if !linkURL?starts_with("javascript:") && !linkURL?starts_with("data:") && !linkURL?starts_with("vbscript:")> 
186																<#assign webCount = webCount + 1 /> 
187															</#if> 
188														</#if> 
189													</#list> 
190													<#assign validIndex = 0 /> 
191													<#list Contacto.Web.getSiblings() as web> 
192														<#if web.data?trim?has_content> 
193															<#assign linkURL = web.data?trim /> 
194															<#if !linkURL?starts_with("javascript:") && !linkURL?starts_with("data:") && !linkURL?starts_with("vbscript:")> 
195																<#if !stringUtil.startsWith(linkURL, "http://") && !stringUtil.startsWith(linkURL, "https://")> 
196																	<#assign linkURL = "https://${linkURL}" /> 
197																</#if> 
198																<#assign validIndex = validIndex + 1 /> 
199																<#assign linkNumber = validIndex /> 
200																<a href="${htmlUtil.escapeHREF(linkURL)}" target="_blank" rel="noopener noreferrer" aria-label="${languageUtil.get(request, 'site')} ${linkNumber} - ${htmlUtil.escape(title)} (${languageUtil.get(request, 'opens-new-window')})" class="text d-inline-flex align-items-center gap-1 text-nowrap"> 
201																	<#if webCount gt 1> 
202																		${languageUtil.get(request, "visit")} ${linkNumber} 
203																	<#else> 
204																		${languageUtil.get(request, "visit")} 
205																	</#if> 
206																	<span class="fas fa-external-link-alt ml-1 font-size-08" aria-hidden="true"></span> 
207																</a> 
208																<#if validIndex lt webCount> 
209																	<span class="mx-2 text-muted">|</span> 
210																</#if> 
211															</#if> 
212														</#if> 
213													</#list> 
214												</span> 
215											</li> 
216										</#if> 
217									</#if>	 
218									 
219									<#if Informacion.Horario?? && Informacion.Horario.data?has_content || Informacion.Tarifas?? && Informacion.Tarifas.data?has_content> 
220										<li class="article-list-item web"> 
221											<span class="fas fa-clock" aria-hidden="true"></span> 
222											<span class="field-wrapper"> 
223												<span class="field">${languageUtil.get(request, "infoasturias-horarios-y-tarifas")}:</span> 
224												<span class="text"> 
225													<a href="#tabContent2" class="internal-tab-link" data-tab-heading="tabHeading2" data-tab-content="tabContent2" aria-label="${languageUtil.get(request, 'infoasturias-horarios-y-tarifas')}"> 
226														${languageUtil.get(request, "view")} 
227														<span class="fas fa-caret-right ml-1 font-size-08" aria-hidden="true"></span> 
228													</a> 
229												</span> 
230											</span> 
231										</li> 
232									</#if> 
233									<#if Informacion.Visit?? && Informacion.Visit.data?has_content> 
234										<li class="article-list-item web"> 
235											<span class="fas fa-door-open" aria-hidden="true"></span> 
236											<span class="field-wrapper"> 
237												<span class="field">${Informacion.Visit.data}</span> 
238											</span> 
239										</li> 
240									</#if>		 
241									<#if Descargas?? || Descargas.Archivo?? && Descargas.Archivo.data?has_content> 
242										<#assign dlFileEntry = dlTool.getDLFileEntryByPath(Descargas.Archivo.data) /> 
243										<#if (dlFileEntry)!?has_content> 
244											<#assign ext = dlFileEntry.getExtension()! /> 
245											<li class="article-list-item document document-${htmlUtil.escape(ext)}"> 
246												<span class="fas fa-file" aria-hidden="true"></span> 
247												<span class="hide-accessible">${languageUtil.get(request,"related-documents")}</span> 
248												<span class="field-wrapper"> 
249													<span class="field">${languageUtil.get(request, "related-documents")}:</span> 
250													<span class="text"> 
251														<#list Descargas.Archivo.getSiblings() as Item> 
252															<#if Item.data?has_content> 
253																<#assign dlFileEntry = dlTool.getDLFileEntryByPath(Item.data) /> 
254																<#if validator.isNotNull(dlFileEntry)> 
255																	<#assign downloadURL = sanitizeURL("/documents/${groupId}/${dlFileEntry.getUuid()}") /> 
256																	<#assign fileSize = dlFileEntry.getSize() /> 
257																	<#assign fileSizeKB = (fileSize / 1024)?round /> 
258																	<#assign fileExt = dlFileEntry.getExtension()?upper_case /> 
259																	<#if Item.ArchivoTitulo.data?has_content> 
260																		<#assign fileName = Item.ArchivoTitulo.data /> 
261																	<#else> 
262																		<#assign fileName = dlFileEntry.getTitle() /> 
263																	</#if> 
264																	<#assign downloadLabel = languageUtil.get(request, 'download') /> 
265																	<#assign formatLabel = languageUtil.get(request, 'format') /> 
266																	<#assign sizeLabel = languageUtil.get(request, 'size') /> 
267																	<#assign kbLabel = languageUtil.get(request, 'kb') /> 
268																	<#assign ariaLabelText = "${downloadLabel} ${fileName}, ${formatLabel} ${fileExt}, ${sizeLabel} ${fileSizeKB} ${kbLabel}" /> 
269																	<a href="${downloadURL}" download aria-label="${ariaLabelText}"> 
270																		${fileName} 
271																		<span class="file-info" aria-hidden="true"> 
272																			(${fileExt}, ${fileSizeKB} KB) 
273																		</span> 
274																		<span class="fas fa-download ml-1" aria-hidden="true"></span> 
275																	</a> 
276																	<#if Item_has_next>, </#if> 
277																</#if> 
278															</#if> 
279														</#list> 
280													</span> 
281												</span>		 
282											</li> 
283										</#if> 
284									</#if> 
285								</ul> 
286							</div> 
287							<#if (RedesSociales.Facebook.data)!?has_content || (RedesSociales.Twitter.data)!?has_content || (RedesSociales.Instagram.data)!?has_content || (RedesSociales.Youtube.data)!?has_content || (RedesSociales.TikTok.data)!?has_content || (RedesSociales.Pinterest.data)!?has_content || (RedesSociales.Rss.data)!?has_content || (RedesSociales.OtrosCanales.NombreCanal.data)!?has_content> 
288								<div class="article-socials-wrapper mt-4"> 
289									<div class="socials-wrapper"> 
290									<div class="socials"> 
291										<ul class="list-inline items socials"> 
292											<#if RedesSociales.Facebook.data?has_content> 
293												<#assign linkURLRaw = RedesSociales.Facebook.data?trim /> 
294												<#if !linkURLRaw?starts_with("http://") && !linkURLRaw?starts_with("https://")> 
295													<#assign linkURLRaw = "https://${linkURLRaw}" /> 
296												</#if> 
297												<#assign linkURL = sanitizeURL(linkURLRaw) /> 
298												<#if linkURL?has_content> 
299													<li class="list-inline-item item facebook"> 
300														<a href="${linkURL}" target="_blank" rel="noopener noreferrer" aria-label="${languageUtil.format(request,'go-to-x','Facebook')} ${languageUtil.get(request,'opens-new-window')}"> 
301														  <span class="fab fa-facebook-f" aria-hidden="true"></span> 
302														  <span class="hide-accessible">${languageUtil.format(request,'go-to-x','Facebook')}</span> 
303														</a> 
304													</li> 
305												</#if> 
306											</#if> 
307											<#if RedesSociales.Twitter.data?has_content> 
308												<#assign linkURLRaw = RedesSociales.Twitter.data?trim /> 
309												<#if !linkURLRaw?starts_with("http://") && !linkURLRaw?starts_with("https://")> 
310													<#assign linkURLRaw = "https://${linkURLRaw}" /> 
311												</#if> 
312												<#assign linkURL = sanitizeURL(linkURLRaw) /> 
313												<#if linkURL?has_content> 
314													<li class="list-inline-item item twitter"> 
315														<a href="${linkURL}" target="_blank" rel="noopener noreferrer" aria-label="${languageUtil.format(request,'go-to-x','X (Twitter)')} ${languageUtil.get(request,'opens-new-window')}"> 
316															<span class="fa-brands fa-x-twitter" aria-hidden="true"></span> 
317															<span class="hide-accessible">${languageUtil.format(request,'go-to-x','X (Twitter)')}</span> 
318														</a> 
319													</li> 
320												</#if> 
321											</#if> 
322											<#if RedesSociales.Instagram.data?has_content> 
323												<#assign linkURLRaw = RedesSociales.Instagram.data?trim /> 
324												<#if !linkURLRaw?starts_with("http://") && !linkURLRaw?starts_with("https://")> 
325													<#assign linkURLRaw = "https://${linkURLRaw}" /> 
326												</#if> 
327												<#assign linkURL = sanitizeURL(linkURLRaw) /> 
328												<#if linkURL?has_content> 
329													<li class="list-inline-item item instagram"> 
330														<a href="${linkURL}" target="_blank" rel="noopener noreferrer" aria-label="${languageUtil.format(request,'go-to-x','Instagram')} ${languageUtil.get(request,'opens-new-window')}"> 
331															<span class="fab fa-instagram" aria-hidden="true"></span> 
332															<span class="hide-accessible">${languageUtil.format(request,'go-to-x','Instagram')}</span> 
333														</a> 
334													</li> 
335												</#if> 
336											</#if> 
337											<#if RedesSociales.Youtube.data?has_content> 
338												<#assign linkURLRaw = RedesSociales.Youtube.data?trim /> 
339												<#if !linkURLRaw?starts_with("http://") && !linkURLRaw?starts_with("https://")> 
340													<#assign linkURLRaw = "https://${linkURLRaw}" /> 
341												</#if> 
342												<#assign linkURL = sanitizeURL(linkURLRaw) /> 
343												<#if linkURL?has_content> 
344													<li class="list-inline-item item youtube"> 
345														<a href="${linkURL}" target="_blank" rel="noopener noreferrer" aria-label="${languageUtil.format(request,'go-to-x','YouTube')} ${languageUtil.get(request,'opens-new-window')}"> 
346															<span class="fab fa-youtube" aria-hidden="true"></span> 
347															<span class="hide-accessible">${languageUtil.format(request,'go-to-x','YouTube')}</span> 
348														</a> 
349													</li> 
350												</#if> 
351											</#if> 
352											<#if (RedesSociales.Tiktok.data)!?has_content> 
353												<#assign linkURLRaw = RedesSociales.Tiktok.data?trim /> 
354												<#if !linkURLRaw?starts_with("http://") && !linkURLRaw?starts_with("https://")> 
355													<#assign linkURLRaw = "https://${linkURLRaw}" /> 
356												</#if> 
357												<#assign linkURL = sanitizeURL(linkURLRaw) /> 
358												<#if linkURL?has_content> 
359													<li class="list-inline-item item tiktok"> 
360														<a href="${linkURL}" target="_blank" rel="noopener noreferrer" aria-label="${languageUtil.format(request,'go-to-x','TikTok')} ${languageUtil.get(request,'opens-new-window')}"> 
361															<span class="fab fa-tiktok" aria-hidden="true"></span> 
362															<span class="hide-accessible">${languageUtil.format(request,'go-to-x','TikTok')}</span> 
363														</a> 
364													</li> 
365												</#if> 
366											</#if> 
367											<#if RedesSociales.Pinterest.data?has_content> 
368												<#assign linkURLRaw = RedesSociales.Pinterest.data?trim /> 
369												<#if !linkURLRaw?starts_with("http://") && !linkURLRaw?starts_with("https://")> 
370													<#assign linkURLRaw = "https://${linkURLRaw}" /> 
371												</#if> 
372												<#assign linkURL = sanitizeURL(linkURLRaw) /> 
373												<#if linkURL?has_content> 
374													<li class="list-inline-item item pinterest"> 
375														<a href="${linkURL}" target="_blank" rel="noopener noreferrer" aria-label="${languageUtil.format(request,'go-to-x','Pinterest')} ${languageUtil.get(request,'opens-new-window')}"> 
376															<span class="fab fa-pinterest-p" aria-hidden="true"></span> 
377															<span class="hide-accessible">${languageUtil.format(request,'go-to-x','Pinterest')}</span> 
378														</a> 
379													</li> 
380												</#if> 
381											</#if> 
382											<#if RedesSociales.Rss.data?has_content> 
383												<#assign linkURLRaw = RedesSociales.Rss.data?trim /> 
384												<#if !linkURLRaw?starts_with("http://") && !linkURLRaw?starts_with("https://")> 
385													<#assign linkURLRaw = "https://${linkURLRaw}" /> 
386												</#if> 
387												<#assign linkURL = sanitizeURL(linkURLRaw) /> 
388												<#if linkURL?has_content> 
389													<li class="list-inline-item item rss"> 
390														<a href="${linkURL}" target="_blank" rel="noopener noreferrer" aria-label="${languageUtil.format(request,'go-to-x','RSS')} ${languageUtil.get(request,'opens-new-window')}"> 
391															<span class="fas fa-rss" aria-hidden="true"></span> 
392															<span class="hide-accessible">${languageUtil.format(request,'go-to-x','RSS')}</span> 
393														</a> 
394													</li> 
395												</#if> 
396											</#if> 
397											<#if RedesSociales.OtrosCanales.NombreCanal??> 
398												<#list RedesSociales.OtrosCanales.NombreCanal.getSiblings() as Canal> 
399													<#if Canal.CanalUrl.data?trim?has_content && Canal.data?trim?has_content> 
400														<#assign linkURLRaw = Canal.CanalUrl.data?trim /> 
401														<#assign canalName = Canal.data?trim /> 
402														<#if !linkURLRaw?starts_with("http://") && !linkURLRaw?starts_with("https://")> 
403															<#assign linkURLRaw = "https://${linkURLRaw}" /> 
404														</#if> 
405														<#assign linkURL = sanitizeURL(linkURLRaw) /> 
406														<#if linkURL?has_content> 
407															<li class="list-inline-item item other-channel"> 
408																<a href="${linkURL}" target="_blank" rel="noopener noreferrer" aria-label="${languageUtil.format(request,'go-to-x', canalName)} ${languageUtil.get(request,'opens-new-window')}"> 
409																	<span class="fas fa-share-alt" aria-hidden="true"></span> 
410																	<span class="hide-accessible">${languageUtil.format(request,'go-to-x', canalName)}</span> 
411																</a> 
412															</li> 
413														</#if> 
414													</#if> 
415												</#list> 
416											</#if> 
417											</ul> 
418										</div> 
419									</div> 
420								</div> 
421							</#if>							 
422						</div> 
423					</div> 
424				</div> 
425			</div> 
426		</div>  
427	</header> 
428	 
429	<div class="sheet sheet-lg"> 
430		<div class="article-section">		 
431			<#if (Informacion.Titulo.data)!?has_content> 
432				<div class="article-great"> 
433					${Informacion.Titulo.data} 
434				</div>	 
435			</#if> 
436			<#if Contenido?? && Contenido.getSiblings()?has_content> 
437				<#list Contenido.getSiblings() as Item> 
438					<#-- Extraer datos con protección --> 
439					<#assign tituloData = (Item.ContenidoTitulo.data)!"" /> 
440					<#assign textoData = (Item.ContenidoTexto.data)!"" /> 
441					<#assign imagenData = (Item.ContenidoTexto.ContentImagen.data)!"" /> 
442					<#if tituloData?has_content || textoData?has_content || imagenData?has_content> 
443						<#assign tipoHeading = (Item.ContenidoTitulo.headingTipo.data)!"" /> 
444						<#assign cIndex = Item?index + 1 /> 
445						<section class="article-section-content" aria-label="${languageUtil.get(request, 'content-section')} ${cIndex}"> 
446							<#if themeDisplay.isSignedIn()> 
447								<aside class="portlet-msg-info infoparrafo" role="note" aria-label="${languageUtil.get(request, 'only-administrators-can-use-this-portlet')}"> 
448									<p class="text-center mb-0"> 
449										<span class="fas fa-file-signature font-size-10 mr-2" aria-hidden="true"></span> 
450										<#assign cIndex = Item?index + 1 /> 
451										<strong class="important mr-5">Contenido<#if Item?index gt 0> ${cIndex}</#if></strong> 
452										<span class="d-inline font-size-09 mt-2"> 
453											<span class="fas fa-info-circle mr-1" aria-hidden="true"></span> 
454											Información visible únicamente para usuarios logueados 
455										</span> 
456									</p> 
457								</aside> 
458							</#if> 
459							<#if tituloData?has_content> 
460								<#if tipoHeading == "h2"> 
461									<h2 class="h3 text-center mt-6 mb-5"> 
462										${tituloData} 
463									</h2> 
464								<#elseif tipoHeading == "h3"> 
465									<h3 class="h3 font-weight-semi-bold mt-6 mb-4"> 
466										${tituloData} 
467									</h3> 
468								<#elseif tipoHeading == "h4"> 
469									<h4 class="h4 font-weight-semi-bold mt-6 mb-4"> 
470										${tituloData} 
471									</h4> 
472								<#else> 
473									<div class="h4 font-weight-normal mt-6 mb-4"> 
474										${tituloData} 
475									</div> 
476								</#if> 
477							</#if> 
478							<div class="article-section-info"> 
479								<#if Item.ContenidoTexto?? && Item.ContenidoTexto.getSiblings()?has_content> 
480									<#list Item.ContenidoTexto.getSiblings() as secc> 
481										<#assign seccionTexto = (secc.data)!"" /> 
482										<#if seccionTexto?has_content> 
483											${seccionTexto} 
484										</#if> 
485										<#assign imagenPath = (secc.ContentImagen.data)!"" /> 
486										<#if imagenPath?has_content> 
487											<#assign imagenURL = sanitizeURL(dlTool.getThumbnail(imagenPath, '3')) /> 
488											<#if imagenURL?has_content> 
489												<#assign imgAlt = (secc.ContentImagen.AltImage.data)!"" /> 
490												<#assign imgTitle = (secc.ContentImagen.TitleImage.data)!"" /> 
491												<#assign imgPie = (secc.ContentImagen.PieImage.data)!"" /> 
492												<#assign altText = imgAlt /> 
493												<#if !altText?has_content && imgTitle?has_content> 
494													<#assign altText = imgTitle /> 
495												</#if> 
496												<#if !altText?has_content && imgPie?has_content> 
497													<#assign altText = htmlUtil.extractText(imgPie)?trim /> 
498												</#if> 
499												<#if !altText?has_content> 
500													<#assign altText = "${languageUtil.get(request, 'image')} ${cIndex}" /> 
501												</#if> 
502												<div class="article-section-image-wrapper"> 
503													<div class="article-section-image"> 
504														<img src="${imagenURL}" class="rounded" alt="${htmlUtil.escape(altText)}" <#if imgTitle?has_content>title="${htmlUtil.escape(imgTitle)}"</#if> loading="lazy" /> 
505														<#if imgPie?has_content> 
506															<div class="article-section-image-footer"> 
507																${imgPie} 
508															</div> 
509														</#if> 
510													</div> 
511												</div> 
512											</#if> 
513										</#if> 
514									</#list> 
515								</#if> 
516							</div> 
517						</section> 
518					</#if> 
519				</#list> 
520			</#if> 
521		</div> 
522		 
523		<#assign hasTab1 = (Informacion.Texto?? && Informacion.Texto.data?has_content) /> 
524		<#assign hasTab2 = (Informacion.Horario?? && Informacion.Horario.data?has_content) || (Informacion.Tarifas?? && Informacion.Tarifas.data?has_content) /> 
525		<#assign hasTab3 = Reservas?? && ((Reservas.CompraEntradas?? && Reservas.CompraEntradas.data?has_content) || (Reservas.ReservasPhone?? && Reservas.ReservasPhone.data?has_content) || (Reservas.ReservasEmail?? && Reservas.ReservasEmail.data?has_content) || (Reservas.ReservasWhatsapp?? && Reservas.ReservasWhatsapp.data?has_content)) /> 
526		<#assign hasTab4 = (AsturiasMascotas?? && AsturiasMascotas.LimitacionPeso?? && AsturiasMascotas.LimitacionPeso.data?has_content) /> 
527		<#assign hasTab5 = Geolocalizacion.Coordenadas.data?has_content> 
528		<#assign showFirstTab = true> 
529		<div class="article-accordion accordion"> 
530			<#if Visualizador.Slide.getData()?has_content> 
531				<h3 class="h3">${languageUtil.get(locale,"model.resource.com.liferay.portlet.imagegallery")}</h3>			 
532				<div class="slick article-slick article-section <#if Visualizador.Slide.getSiblings()?size==1>hide</#if>"> 
533					<#list Visualizador.Slide.getSiblings() as Slide> 
534						<#if validator.isNotNull(Slide.getData()) || validator.isNotNull(Slide.SlideUrl.getData())> 
535							<#assign slideThumbnail3 = dlTool.getThumbnailByJSON(Slide.data, "3")! /> 
536							<#assign slideThumbnail2Raw = dlTool.getThumbnailByJSON(Slide.data, "2")! /> 
537							<#assign slidePathRaw = dlTool.getPathByJSON(Slide.data, themeDisplay.getScopeGroupId())! /> 
538							<#assign slideUrlRaw = Slide.SlideUrl.data /> 
539							<#if slideUrlRaw?has_content> 
540								<#assign slideTitleRaw = "${languageUtil.get(request, 'video')} ${Slide?index}" /> 
541								<#if Slide.SlideTitulo.data?has_content> 
542									<#assign slideTitleRaw = Slide.SlideTitulo.data />   
543								</#if> 
544								<#assign slideUrl = stringUtil.replace(slideUrlRaw, 'watch?v=', 'embed/') /> 
545								<#assign slideThumbnail2Raw = stringUtil.replace(slideUrl, 'www', 'img') /> 
546								<#assign slideThumbnail2Raw = stringUtil.replace(slideThumbnail2Raw, 'embed', 'vi') /> 
547								<#assign slideThumbnail2Raw = '${slideThumbnail2Raw}/mqdefault.jpg' /> 
548								<#if slideUrl?contains("vimeo")> 
549									<#assign slideUrl = stringUtil.replace(slideUrl, 'http://vimeo.com/', 'https://player.vimeo.com/video/') /> 
550									<#assign slideVimeoId = stringUtil.extractLast(slideUrl, 'https://player.vimeo.com/video/') /> 
551									<#if slideVimeoId?has_content> 
552										<#assign slideVimeoJsonPath = 'http://vimeo.com/api/v2/video/${slideVimeoId}.json' /> 
553										<#assign slideVimeoJsonContent = getUrlContent.getContent(slideVimeoJsonPath)! /> 
554										<#if slideVimeoJsonContent?has_content> 
555											<#assign slideVimeoJsonArray = jsonFactoryUtil.createJSONArray(slideVimeoJsonContent) /> 
556											<#assign slideVimeoJsonItem = slideVimeoJsonArray.get(0) /> 
557											<#assign slideThumbnail2Raw = slideVimeoJsonItem.thumbnail_medium /> 
558										</#if> 
559									</#if> 
560								</#if> 
561								<#assign slideUrlSafe = sanitizeURL(slideUrl) /> 
562								<#assign slideThumbnail2Safe = sanitizeURL(slideThumbnail2Raw) /> 
563								<#assign slideTitle = htmlUtil.escape(slideTitleRaw) /> 
564								<#if slideUrlSafe?has_content && slideThumbnail2Safe?has_content> 
565									<div id="slide-${Slide?index}" class="slide"> 
566										<a class="card card-simple card-video" href="#" role="button" tabindex="0" onclick="event.preventDefault(); showDialogIframe('${slideUrlSafe}', '${slideTitle}', 800, 600, 'videoPopup', 'videoPopupIframe'); return false;" aria-label="${languageUtil.format(request, 'open-video-x', slideTitle)}"> 
567											<span class="d-block image-wrapper aspect-ratio-bg-cover aspect-ratio-4-to-3" style="background-image: url('${slideThumbnail2Safe}')" role="img" aria-label="${slideTitle}"> 
568												<img class="hide-accessible" src="${slideThumbnail2Safe}" alt="" /> 
569											</span> 
570										</a> 
571									</div> 
572								</#if> 
573							<#else> 
574								<#assign slideTitleRaw = "${languageUtil.get(request, 'image')} ${Slide?index}" /> 
575								<#if Slide.SlideTitulo.data?has_content> 
576									<#assign slideTitleRaw = Slide.SlideTitulo.data />   
577								</#if> 
578								 
579								<#assign slideAltRaw = slideTitleRaw />									 
580								<#if Slide.ImagenAlt??>							 
581									<#if Slide.ImagenAlt.data?has_content> 
582										<#assign slideAltRaw = Slide.ImagenAlt.data />   
583									</#if> 
584								</#if> 
585								<#assign slidePath = sanitizeURL(slidePathRaw) /> 
586								<#assign slideThumbnail2Safe = sanitizeURL(slideThumbnail2Raw) /> 
587								<#assign slideTitle = htmlUtil.escape(slideTitleRaw) /> 
588								<#assign slideAlt = htmlUtil.escape(slideAltRaw) /> 
589								<#if slidePath?has_content && slideThumbnail2Safe?has_content> 
590								  <div class="slide"> 
591									<a class="card card-simple lightbox" href="${slidePath}" title="${slideTitle}" aria-label="${languageUtil.format(request, 'view-image-x', slideTitle)}"> 
592										<span class="d-block image-wrapper aspect-ratio-bg-cover aspect-ratio-4-to-3" style="background-image: url('${slideThumbnail2Safe}')" role="img" aria-label="${slideAlt}"> 
593											<img class="hide-accessible" src="${slideThumbnail2Safe}" alt="" /> 
594										</span> 
595									</a> 
596								  </div> 
597								</#if> 
598							</#if> 
599						</#if> 
600					</#list> 
601				</div> 
602			</#if> 
603		 
604			<#if hasTab1> 
605				<div id="tab1" class="article-section accordion-item"> 
606					<a href="#tabContent1" id="tabHeading1" class="tab <#if !showFirstTab>collapsed</#if>" role="button" tabindex="0" aria-expanded="${showFirstTab?c}" aria-controls="tabContent1" data-toggle="liferay-collapse"> 
607						<h3 class="h3 accordion-header">${languageUtil.get(request,'info')}</h3> 
608					</a> 
609					<div id="tabContent1" class="article-section-content article-section-info accordion-collapse collapse <#if showFirstTab>show</#if>" role="region" aria-labelledby="tabHeading1"> 
610						<#if (Informacion.Texto.data)!?has_content> 
611							${Informacion.Texto.data} 
612						</#if> 
613						<#if (Informacion.FechaDeConstruccion.data)!?has_content> 
614							<span class="field">${languageUtil.get(request, "infoasturias-fecha-de-construccion")}:</span> 
615							<span class="text">${Informacion.FechaDeConstruccion.data}</span> 
616						</#if> 
617					</div> 
618				</div> 
619				<#assign showFirstTab = false> 
620			</#if> 
621 
622			<#if hasTab2> 
623				<div id="tab2" class="article-section accordion-item"> 
624					<a href="#tabContent2" id="tabHeading2" class="tab <#if !showFirstTab>collapsed</#if>" role="button" tabindex="0" aria-expanded="${showFirstTab?c}" aria-controls="tabContent2" data-toggle="liferay-collapse"> 
625						<h3 class="h3 accordion-header">${languageUtil.get(request,'infoasturias-horarios-y-tarifas')}</h3> 
626					</a> 
627					<div id="tabContent2" class="article-section-content article-section-color article-section-background accordion-collapse collapse <#if showFirstTab>show</#if>" role="region" aria-labelledby="tabHeading2"> 
628						<#if Informacion.Horario.data?has_content> 
629							<div class="mb-1 font-weight-semi-bold text-success"><span class="far fa-clock mr-2 text-success"></span>${languageUtil.get(request,'infoasturias-horario')}:</div> 
630							<div class="mb-4">${Informacion.Horario.data}</div> 
631						</#if> 
632						<#if Informacion.Tarifas.data?has_content> 
633							<div class="mb-1 font-weight-semi-bold text-success"><span class="fas fa-coins mr-2 text-success"></span>${languageUtil.get(request,'infoasturias-tarifas')}:</div>						 
634							<div>${Informacion.Tarifas.data}</div> 
635						</#if> 
636						<#if Informacion.Horario.data?has_content || Informacion.Tarifas.data?has_content> 
637							<#assign hasWeb = Contacto.Web.data?trim?has_content /> 
638							<#assign hasTelefono = Contacto.Telefono.data?trim?has_content /> 
639							<#if hasWeb || hasTelefono> 
640								<div class="mt-4 font-size-09 font-italic"> 
641									<#if hasWeb> 
642										${languageUtil.get(request, 'infoasturias-horarios-web')}									   
643										<#assign siteURLRaw = Contacto.Web.data?trim /> 
644										<#if !siteURLRaw?starts_with("http://") && !siteURLRaw?starts_with("https://")> 
645											<#assign siteURLRaw = "https://${siteURLRaw}" /> 
646										</#if> 
647										<#assign siteURL = sanitizeURL(siteURLRaw) /> 
648										<#if siteURL?has_content> 
649											<#assign isExternal = isExternalURL(siteURL) /> 
650											<a href="${siteURL}" <#if isExternal>target="_blank" rel="noopener noreferrer"</#if> aria-label="${languageUtil.get(request, 'site')} - ${title} <#if isExternal>${languageUtil.get(request, 'opens-new-window')}</#if>"> 
651												${languageUtil.get(request,'visit')} 
652												<#if isExternal> 
653													<span class="fas fa-external-link-alt ml-1 font-size-08" aria-hidden="true"></span> 
654												</#if> 
655											</a> 
656										</#if> 
657									<#elseif hasTelefono> 
658										${languageUtil.get(request, 'infoasturias-horarios-telefono')} 
659										<#list Contacto.Telefono.getSiblings() as telephone> 
660											<#assign rawTelefono = telephone.data /> 
661											<#assign cleanTelefono = rawTelefono?replace("\\(.*?\\)", "", "r") /> 
662											<#assign numberTelefono = cleanTelefono?replace("[^0-9]", "", "r") /> 
663											<#assign numberLength = numberTelefono?length /> 
664											<#if numberLength == 9> 
665											  <#assign hrefNumber = "+34${numberTelefono}" /> 
666											<#else> 
667											  <#assign hrefNumber = numberTelefono /> 
668											</#if> 
669											<span class="text"> 
670												<a href="tel:${hrefNumber}">${rawTelefono}</a> 
671												<#if !telephone?is_last>|</#if> 
672											</span> 
673										</#list>										 
674									</#if> 
675								</div> 
676							</#if> 
677						</#if> 
678					</div> 
679				</div> 
680				<#assign showFirstTab = false> 
681			</#if> 
682 
683			<#if hasTab3> 
684				<#if (Reservas.CompraEntradas?? && Reservas.CompraEntradas.data?has_content) || (Reservas.ReservasPhone?? && Reservas.ReservasPhone.data?has_content) || (Reservas.ReservasEmail?? && Reservas.ReservasEmail.data?has_content) || (Reservas.ReservasWhatsapp?? && Reservas.ReservasWhatsapp.data?has_content)> 
685					<div id="tab3" class="article-section accordion-item"> 
686						<a href="#tabContent3" id="tabHeading3" class="tab <#if !showFirstTab>collapsed</#if>" role="button" tabindex="0" aria-expanded="${showFirstTab?c}" aria-controls="tabContent3" data-toggle="liferay-collapse"> 
687							<h3 class="h3 accordion-header">${languageUtil.get(request,'booking-action')}</h3> 
688						</a> 
689						<div id="tabContent3" class="article-section-content article-section-color article-section-background accordion-collapse collapse <#if showFirstTab>show</#if>" aria-labelledby="tabHeading3" role="region"> 
690							<#if Reservas.CompraEntradas.data?has_content> 
691								<#assign compraURL = sanitizeURL(Reservas.CompraEntradas.data?trim) /> 
692								<#if compraURL?has_content> 
693									<div class="text-center"> 
694										<a class="btn btn-primary mb-3" href="${compraURL}" target="_blank" rel="noopener noreferrer" aria-label="${languageUtil.get(request,'infoasturias-compra-entradas')} ${languageUtil.get(request,'opens-new-window')}"> 
695											<span class="fas fa-ticket-alt mr-2" aria-hidden="true"></span> 
696											${languageUtil.get(request,'infoasturias-compra-entradas')} 
697										</a> 
698									</div> 
699								</#if> 
700							</#if> 
701							<#if Reservas.ReservasPhone.data?has_content> 
702								<#assign rawTelefono = Reservas.ReservasPhone.data?trim /> 
703								<#assign cleanTelefono = rawTelefono?replace("\\(.*?\\)", "", "r") /> 
704								<#assign numberTelefono = cleanTelefono?replace("[^0-9]", "", "r") /> 
705								<#assign numberLength = numberTelefono?length /> 
706								<#if numberLength == 9> 
707									<#assign hrefNumber = "+34${numberTelefono}" /> 
708								<#else> 
709									<#assign hrefNumber = numberTelefono /> 
710								</#if> 
711								<div class="text-center"> 
712									<a class="btn btn-primary mb-3" href="tel:${htmlUtil.escapeHREF(hrefNumber)}" aria-label="${languageUtil.format(request,'call', rawTelefono)}"> 
713										<span class="fas fa-phone-alt mr-2" aria-hidden="true"></span> 
714										${languageUtil.get(request,'infoasturias-telefono')} 
715									</a> 
716								</div> 
717							</#if> 
718							<#if Reservas.ReservasEmail.data?has_content> 
719								<#assign emailAddress = Reservas.ReservasEmail.data?trim /> 
720								<div class="text-center"> 
721									<a class="btn btn-primary mb-3" href="mailto:${htmlUtil.escapeHREF(emailAddress)}" aria-label="${languageUtil.format(request,'email-to', emailAddress)}"> 
722										<span class="fas fa-envelope mr-2" aria-hidden="true"></span> 
723										${languageUtil.get(request,'infoasturias-email')} 
724									</a> 
725								</div> 
726							</#if> 
727							<#if Reservas.ReservasWhatsapp.data?has_content> 
728								<#assign rawWhatsapp = Reservas.ReservasWhatsapp.data?trim /> 
729								<#assign cleanWhatsapp = rawWhatsapp?replace("[^0-9]", "", "r") /> 
730								<#if cleanWhatsapp?has_content> 
731									<#assign whatsappURL = "https://wa.me/34${cleanWhatsapp}" /> 
732									<#assign whatsappURLSafe = sanitizeURL(whatsappURL) /> 
733									<#if whatsappURLSafe?has_content> 
734										<div class="text-center"> 
735											<a class="btn btn-primary mb-3" href="${whatsappURLSafe}" target="_blank" rel="noopener noreferrer" aria-label="${languageUtil.format(request,'go-to-x', rawWhatsapp)} ${languageUtil.get(request,'opens-new-window')}"> 
736											  <span class="fab fa-whatsapp mr-2" aria-hidden="true"></span> 
737											  Whatsapp 
738											</a> 
739										</div> 
740									</#if> 
741								</#if> 
742							</#if> 
743						</div> 
744					</div> 
745				</#if> 
746				<#assign showFirstTab = false /> 
747			</#if> 
748 
749			<#if hasTab4> 
750				<div id="tab4" class="article-section accordion-item"> 
751					<a href="#tabContent4" id="tabHeading4" class="tab <#if !showFirstTab>collapsed</#if>" role="button" tabindex="0" aria-expanded="${showFirstTab?c}" aria-controls="tabContent4" data-toggle="liferay-collapse"> 
752						<h3 class="h3 accordion-header">${languageUtil.get(request,'infoasturias-info-mascotas')}</h3> 
753					</a> 
754					<div id="tabContent4" class="article-section-content article-section-color article-section-background accordion-collapse collapse <#if showFirstTab>show</#if>" aria-labelledby="tabHeading4" role="region"> 
755						<#if hasIconos> 
756							<div class="list-iconos mb-3 d-flex flex-wrap justify-content-center"> 
757								<#if limitacionPeso?has_content> 
758									<div class="col-xl-2 col-sm-6 col-12 text-center mb-4 icono"> 
759										<#assign imgArray = assetCategoryTool.getImagesByVocabularyCategoryName(groupId, "Mascotas", "Limitación de tamaño") /> 
760										<#if imgArray?has_content && imgArray[0]?has_content> 
761											<div> 
762												<img src="${imgArray[0]}" alt="${languageUtil.get(request,'infoasturias-mascotas-peso')}" loading="lazy"> 
763												<span class="value">${limitacionPeso}</span> 
764											</div> 
765											<span class="text-value">${languageUtil.get(request,'infoasturias-mascotas-peso')}</span> 
766										</#if> 
767									</div> 
768								</#if> 
769								<#if NumeroMaximoPersona?has_content> 
770									<div class="col-xl-2 col-sm-6 col-12 text-center mb-4 icono"> 
771										<#assign imgArray = assetCategoryTool.getImagesByVocabularyCategoryName(groupId, "Mascotas", "Número máximo de perros por persona") /> 
772										<#if imgArray?has_content && imgArray[0]?has_content> 
773											<div> 
774												<img src="${imgArray[0]}" alt="${languageUtil.get(request,'infoasturias-mascotas-maximo-persona')}" loading="lazy"> 
775												<span class="value-icono">${NumeroMaximoPersona}</span> 
776											</div> 
777											<span class="text-value">${languageUtil.get(request,'infoasturias-mascotas-maximo-persona')}</span> 
778										</#if> 
779									</div> 
780								</#if> 
781								<#if NumeroMaximoPersona?has_content> 
782									<div class="col-xl-2 col-sm-6 col-12 text-center mb-4 icono"> 
783										<#assign imgArray = assetCategoryTool.getImagesByVocabularyCategoryName(groupId, "Mascotas", "Cupo máximo de perros en el interior") /> 
784										<#if imgArray?has_content && imgArray[0]?has_content> 
785											<div> 
786												<img src="${imgArray[0]}" alt="${languageUtil.get(request,'infoasturias-mascotas-maximo-persona')}" loading="lazy"> 
787												<span class="value-icono">${NumeroMaximoPersona}</span> 
788											</div> 
789											<span class="text-value">${languageUtil.get(request,'infoasturias-maximo-interior')}</span> 
790										</#if> 
791									</div> 
792								</#if> 
793								<#if AccesoInterior?has_content> 
794									<div class="col-xl-2 col-sm-6 col-12 text-center mb-4 icono"> 
795										<#if AccesoInterior == "Si"> 
796											<#assign imgArray = assetCategoryTool.getImagesByVocabularyCategoryName(groupId, "Mascotas", "Accesso al interior") /> 
797											<#if imgArray?has_content && imgArray[0]?has_content> 
798												<div><img src="${imgArray[0]}" alt="${languageUtil.get(request,'infoasturias-mascotas-material')}" loading="lazy"></div> 
799												<span class="text-value">${languageUtil.get(request,'infoasturias-mascotas-interior')}</span> 
800											</#if> 
801										<#else> 
802											<#assign imgArray = assetCategoryTool.getImagesByVocabularyCategoryName(groupId, "Mascotas", "Sin acceso interior") /> 
803											<#if imgArray?has_content && imgArray[0]?has_content> 
804												<div><img src="${imgArray[0]}" alt="${languageUtil.get(request,'infoasturias-mascotas-no-material')}" loading="lazy"></div> 
805												<span class="text-value">${languageUtil.get(request,'infoasturias-mascotas-no-interior')}</span> 
806											</#if> 
807										</#if> 
808									</div> 
809								</#if> 
810							</div> 
811						</#if> 
812						<#if hasNormas> 
813							<div class="article-info-table mb-2"> 
814								<div class="normas-mascotas"> 
815									<h4 class="mb-4 text-success text-center article-info-border"> 
816										${languageUtil.get(request,'infoasturias-normas-mascotas')} 
817									</h4> 
818									<ul class="list-unstyled" role="list"> 
819										<#if admitePPP?has_content> 
820											<li class="d-flex align-items-start mb-2"> 
821												<span class="fas fa-paw text-success mr-2 mt-1 flex-shrink-0" aria-hidden="true"></span> 
822												<span class="text-rule"> 
823													<#if admitePPP == "Si"> 
824														${languageUtil.get(request,'infoasturias-mascotas-ppp')}. 
825													<#else> 
826														${languageUtil.get(request,'infoasturias-mascotas-no-ppp')}. 
827													</#if> 
828												</span> 
829											</li> 
830										</#if> 
831										<#if AccesoTerraza?has_content> 
832											<li class="d-flex align-items-start mb-2"> 
833												<span class="fas fa-paw text-success mr-2 mt-1 flex-shrink-0" aria-hidden="true"></span> 
834												<span class="text-rule"> 
835													<#if AccesoTerraza == "Si"> 
836														${languageUtil.get(request,'infoasturias-mascotas-terraza')}. 
837													<#else> 
838														${languageUtil.get(request,'infoasturias-mascotas-no-terraza')}. 
839													</#if> 
840												</span> 
841											</li> 
842										</#if>										 
843										<#if otrasMascotas?has_content> 
844											<li class="d-flex align-items-start mb-2"> 
845												<span class="fas fa-paw text-success mr-2 mt-1 flex-shrink-0" aria-hidden="true"></span> 
846												<span class="text-rule"> 
847													<#if otrasMascotas == "Si"> 
848														${languageUtil.get(request,'infoasturias-otras-mascotas')}: 
849														<#if otrosAnimales?has_content> 
850															<strong>${otrosAnimales}</strong> 
851														</#if> 
852													<#else> 
853														${languageUtil.get(request,'infoasturias-no-otras-mascotas')}. 
854													</#if> 
855												</span> 
856											</li> 
857										</#if> 
858										<#if detalleNormas?has_content> 
859											<#assign normasParagraphs = detalleNormas?split('</p>') /> 
860											<#list normasParagraphs as parrafo> 
861												<#if parrafo?trim?has_content> 
862													<#assign cleanParrafo = parrafo?replace('<p>', '')?replace('<p[^>]*>', '', 'r')?trim /> 
863													<#if cleanParrafo?has_content> 
864														<li class="d-flex align-items-start mb-2"> 
865															<span class="fas fa-paw text-success mr-2 mt-1 flex-shrink-0" aria-hidden="true"></span> 
866															<span class="text-rule">${cleanParrafo}</span> 
867														</li> 
868													</#if> 
869												</#if> 
870											</#list> 
871										</#if>									 
872									</ul> 
873								</div> 
874							</div> 
875						</#if> 
876					</div> 
877					<#assign showFirstTab = false> 
878				</div> 
879			</#if>			 
880			<#if hasTab5> 
881				<#assign coordenadas=stringUtil.split(Geolocalizacion.Coordenadas.data) /> 
882				<div id="tab5" class="article-section article-section-map accordion-item"> 
883					<a href="#tabContent5" id="tabHeading5" class="tab <#if !showFirstTab>collapsed</#if>" role="button" tabindex="0" aria-expanded="${showFirstTab?c}" aria-controls="tabContent5" data-toggle="liferay-collapse"> 
884						<h3 class="h3 accordion-header">${languageUtil.get(request,'infoasturias-how-to-get')}</h3> 
885					</a> 
886					<div id="tabContent5" class="article-section-content accordion-collapse collapse <#if showFirstTab>show</#if>" aria-labelledby="tabHeading5" role="region"> 
887						<div id="article-map-wrapper-${articleId}" class="article-map-wrapper">  
888							<div id="article-map-content-${articleId}" style="width: 100%; height: 500px; z-index:1" role="application" aria-label="${languageUtil.format(request,'infoasturias-mapa-de', title)}"><!-- MAP --></div> 
889							<div class="hide-accessible" aria-live="polite"> 
890								<p>${languageUtil.get(request,'first-name')}: ${title}</p> 
891								<p>GPS: ${Geolocalizacion.Coordenadas.data}</p> 
892								<#if (Contacto.Direccion.data)?has_content || ((Contacto.CP.data)?has_content) || ((Contacto.Localidad.data)?has_content)> 
893									<p>${languageUtil.get(request,'address')}: ${((Contacto.Direccion.data)!)?js_string} ■ ${((Contacto.CP.data)!)} - ${((Contacto.Localidad.data)!)?js_string}</p> 
894								</#if> 
895							</div>								 
896							<div class="article-map-form">  
897								<div class="name important">${title}</div> 
898								<div class="gps"><span class="label">GPS:</span> <span class="value important">${Geolocalizacion.Coordenadas.data}</span></div> 
899								<form action="https://maps.google.es/maps" method="get" target="_blank"> 
900									<input type="hidden" name="daddr" value="${coordenadas[0]},${coordenadas[1]}"> 
901									<label for="saddrText"><span class="label hide-accessible">${languageUtil.get(request,'infoasturias-insert-from')}: </span></label> 
902									<label for="saddr"><span class="label">${languageUtil.get(request,'infoasturias-from')}: </span></label> 
903									<input class="form-control" type="text" maxlength="40" name="saddrText" id="saddrText" value="" placeholder="${languageUtil.get(request,'infoasturias-insert-from')}"> 
904									<input class="form-control" type="hidden" name="saddr" id="saddr" value="" placeholder="${languageUtil.get(request,'infoasturias-insert-from')}"> 
905									<button class="btn btn-text" type="submit">${languageUtil.get(request,'infoasturias-como-llegar')} &raquo;</button> 
906								</form> 
907							</div> 
908						</div> 
909						<script src="/o/turismo-asturias-theme/js/leaflet/leaflet.js"></script> 
910						<script type="text/javascript"> 
911							AUI().ready('aui-base', function(A){ 
912								var lat = ${coordenadas[0]}, 
913									lng = ${coordenadas[1]}, 
914									zoom = 16; 
915								mapContent = new L.map('article-map-content-${articleId}', {center: [lat, lng], zoom: 16}); 
916 
917								//Marker 
918								var defaultIconTheme = '/o/turismo-asturias-theme/css/images/icons/mark-box.png'; 
919								var defaultIcon = L.icon({ 
920									iconUrl: defaultIconTheme, 
921									iconSize:     [36, 53], 
922									iconAnchor:   [18, 53], 
923									iconShadow:   [0,0], 
924									popupAnchor:  [0, -30] 
925								}); 
926								var marker = L.marker([lat, lng], {icon: defaultIcon}).addTo(mapContent); 
927								 
928								var contentString = '<div class="row">'; 
929								contentString += '<div class="col-12">'; 
930								contentString += '<div class="h4">${htmlUtil.escape(title)}</div>'; 
931								contentString += '</div>'; 
932								contentString += '</div>'; 
933								 
934								contentString += '<div class="row">'; 
935								contentString += '<div class="col-12">'; 
936								<#if validator.isNotNull(articleMainImageThumbnail1Safe)> 
937									contentString += '<img class="pull-right mb-2 ml-2" src="${articleMainImageThumbnail1Safe}" alt="$title"/>'; 
938								</#if> 
939								contentString += '<dl class="mb-0">'; 
940								<#if (Contacto.Direccion.data)?has_content || ((Contacto.CP.data)?has_content) || ((Contacto.Localidad.data)?has_content)> 
941									contentString += '<dt class="important">${languageUtil.get(request,"address")}</dt>'; 
942									contentString += '<dd>${((Contacto.Direccion.data)!)?js_string}<br>${((Contacto.CP.data)!)} - ${((Contacto.Localidad.data)!)?js_string}</dd>'; 
943								</#if> 
944								<#if Contacto.Telefono.data?has_content> 
945									contentString += '<dt class="important">${languageUtil.get(request,'phone')}</dt>'; 
946									contentString += '<dd>${Contacto.Telefono.data}</dd>'; 
947								</#if> 
948								<#if Contacto.Email.getData()?has_content> 
949									contentString += '<dt class="important">${languageUtil.get(request,'email')}</dt>'; 
950									<#list Contacto.Email.getSiblings() as Item> 
951										contentString += '<dd><a href="mailto:${Item.data}" title="${languageUtil.format(request,'go-to-x', 'email')}">${Item.data}</a></dd>'; 
952									</#list> 
953								</#if> 
954								<#if Contacto.Web.data?has_content> 
955									<#assign linkURL = Contacto.Web.data/> 
956									<#if !stringUtil.startsWith(linkURL, "http")> 
957										<#assign linkURL = "https://${Contacto.Web.data}"/> 
958									</#if> 
959									contentString += '<dt class="important">${languageUtil.get(request,'site')}</dt>'; 
960									contentString += '<dd><a href="${linkURL}" title="${languageUtil.format(request,'go-to-x', 'site')}">${Contacto.Web.data}</a></dd>'; 
961								</#if> 
962								contentString += '</dl>'; 
963								contentString += '</div>'; 
964								contentString += '</div>'; 
965								<#if validator.isNotNull(description)> 
966									contentString += '<div class="row"><div class="col-12">${description}</div></div>'; 
967								</#if> 
968								marker.bindPopup(contentString); 
969 
970								//Contributor 
971								L.tileLayer('https://{s}.tile.openstreetmap.org/{z}/{x}/{y}.png', { 
972									attribution: '&copy; <a href="https://www.openstreetmap.org/copyright">OpenStreetMap</a> contributors.' 
973								}).addTo(mapContent); 
974								 
975							}); //AUI.ready 
976						</script> 
977					</div> 
978				</div> 
979				<#assign showFirstTab = false> 
980			</#if>		 
981		</div> 
982		<#if (Informacion.Observaciones.data)!?has_content || (Contacto.MasInformacion.data)!?has_content> 
983			<div class="article-border"> 
984				<#if (Informacion.Observaciones.data)!?has_content> 
985					<div class="observations mb-3"> 
986						${Informacion.Observaciones.data} 
987					</div> 
988				</#if> 
989				<#if (Contacto.MasInformacion.data)!?has_content> 
990					<div class="more-info"> 
991						<#list Contacto.MasInformacion.getSiblings() as Item> 
992							<#if Item.data?trim?has_content> 
993								<#assign itemData = Item.data?trim /> 
994								<#if itemData?matches("^https?://.*") || itemData?starts_with("//")> 
995									<#assign itemURL = itemData /> 
996									<#if itemURL?starts_with("//")> 
997										<#assign itemURL = "https:${itemURL}" /> 
998									</#if> 
999									<#assign itemURLSafe = sanitizeURL(itemURL) /> 
1000									<#if itemURLSafe?has_content> 
1001										<#assign isExternal = isExternalURL(itemURLSafe) /> 
1002										<div class="mb-2"> 
1003											<a class="link" href="${itemURLSafe}" <#if isExternal>target="_blank" rel="noopener noreferrer"</#if> aria-label="${languageUtil.format(request,'visit-link-x', itemData)} <#if isExternal>${languageUtil.get(request,'opens-new-window')}</#if>"> 
1004												${itemData} 
1005												<#if isExternal> 
1006													<span class="fas fa-external-link-alt ml-1" aria-hidden="true"></span> 
1007												</#if> 
1008											</a> 
1009										</div> 
1010									</#if> 
1011								<#else> 
1012									<div class="mb-2"> 
1013										<span>${itemData}</span> 
1014									</div> 
1015								</#if> 
1016							</#if> 
1017						</#list> 
1018					</div> 
1019				</#if> 
1020			</div> 
1021		</#if> 
1022	</div>	 
1023			 
1024	<#-- Related Articles --> 
1025	<#assign relatedJournalArticles = assetTool.getRelatedJournalArticlesApproved(assetEntry) /> 
1026	<#if validator.isNotNull(relatedJournalArticles) && relatedJournalArticles?size gt 0> 
1027		<div class="article-related portlet-background-grey-container"> 
1028			<div class="container"> 
1029				<h3 class="title-section">${languageUtil.get(request,'related-assets')}</h3> 
1030				<div class="slick article-related-slick"> 
1031					<#list relatedJournalArticles as currentJournalArticle> 
1032						<#assign viewURLRaw = journalTool.getDisplayPage(currentJournalArticle, themeDisplay, true) /> 
1033						<#assign viewURL = sanitizeURL(viewURLRaw) /> 
1034						<#assign articleTitle = currentJournalArticle.getTitle(locale) /> 
1035						<#assign smallImageURLRaw = currentJournalArticle.getSmallImageURL() /> 
1036						<#assign smallImageURL = sanitizeURL(smallImageURLRaw) /> 
1037						<#if viewURL?has_content && smallImageURL?has_content && articleTitle?has_content> 
1038							<div class="slide"> 
1039								<a class="card background card-background-9-14" href="${viewURL}" aria-label="${languageUtil.format(request, 'go-to-x', articleTitle)}"> 
1040									<span class="d-block image-wrapper aspect-ratio-bg-cover" style="background-image: url('${smallImageURL}')" role="img" aria-label="${articleTitle}"> 
1041										<img class="hide-accessible" src="${smallImageURL}" alt="" /> 
1042										<span class="card-body"> 
1043											<span class="card-title">${articleTitle}</span> 
1044										</span> 
1045									</span> 
1046								</a> 
1047							</div> 
1048						</#if> 
1049					</#list> 
1050				</div> 
1051			</div> 
1052		</div> 
1053	</#if> 
1054	 
1055	<#-- Nearby Articles --> 
1056	<#assign classTypeIds = [] /> 
1057	<#assign assetsNearJournalArticles = assetNearTool.getNearJournalArticles(themeDisplay.getScopeGroupId(), assetEntry.getEntryId(), 50.0, classTypeIds, 25)! /> 
1058	<#if validator.isNotNull(assetsNearJournalArticles) && assetsNearJournalArticles?size gt 0> 
1059		<div class="article-nearby portlet-container-margin"> 
1060			<div class="container"> 
1061				<div class="article-nearby-container"> 
1062					<h3 class="title-section">${languageUtil.get(request,'infoasturias-near-here')}</h3> 
1063					<div class="slick article-nearby-slick"> 
1064						<#list assetsNearJournalArticles as currentJournalArticle> 
1065							<#assign viewURLRaw = journalTool.getDisplayPage(currentJournalArticle, themeDisplay, true) /> 
1066							<#assign viewURL = sanitizeURL(viewURLRaw) /> 
1067							<#assign articleTitle = currentJournalArticle.getTitle(locale) /> 
1068							<#assign articleDescription = currentJournalArticle.getDescription(locale) /> 
1069							<#assign smallImageURLRaw = currentJournalArticle.getSmallImageURL() /> 
1070							<#assign smallImageURL = sanitizeURL(smallImageURLRaw) /> 
1071							<#assign distanceKm = currentJournalArticle.getVersion() /> 
1072							<#assign categoriesNamesRaw = journalTool.getCategoriesNames(groupId, currentJournalArticle.getArticleId(), locale, ["Concejos"]) /> 
1073							<#assign categoriesNames = htmlUtil.escape(categoriesNamesRaw) /> 
1074							 
1075							<#if viewURL?has_content && smallImageURL?has_content && articleTitle?has_content> 
1076								<div class="slide"> 
1077									<a class="card" href="${viewURL}" aria-label="${languageUtil.format(request, 'go-to-x', articleTitle)}"> 
1078										<span class="d-block image-wrapper aspect-ratio-bg-cover aspect-ratio-4-to-3" style="background-image: url('${smallImageURL}')" role="img" aria-label="${articleTitle}"> 
1079											<img class="hide-accessible" src="${smallImageURL}" alt="" />					 
1080											<#if articleDescription?has_content> 
1081												<span class="card-hover"> 
1082													<span class="card-text">${articleDescription}</span> 
1083												</span> 
1084											</#if> 
1085										</span> 
1086										<span class="card-body"> 
1087											<span class="card-title">${articleTitle}</span> 
1088											<span class="card-subtitle"> 
1089												<span class="d-block"> 
1090													<span class="sr-only">${languageUtil.get(request, 'distance')}: </span> 
1091													${distanceKm} ${languageUtil.get(request, 'km')} 
1092												</span> 
1093												<#if categoriesNames?has_content> 
1094													<span class="d-block">${categoriesNames}</span> 
1095												</#if> 
1096											</span> 
1097										</span> 
1098									</a> 
1099								</div> 
1100							</#if> 
1101						</#list> 
1102					</div> 
1103				</div> 
1104			</div> 
1105		</div> 
1106	</#if> 
1107</article> 
1108<#assign vocabCultura = assetVocabularyLocalService.fetchGroupVocabulary(groupId, "Cultura")! /> 
1109<#assign schemaTypes = ["CivicStructure", "TouristAttraction"] /> 
1110<#if vocabCultura?has_content> 
1111    <#assign categoriasCultura = assetCategoryLocalService.getVocabularyCategories(vocabCultura.getVocabularyId(), -1, -1, null) /> 
1112    <#assign categoriaPadre = "" /> 
1113    <#list categoriasCultura as cat> 
1114        <#if cat.getName() == "Museos y espacios culturales"> 
1115            <#assign categoriaPadre = cat /> 
1116            <#break> 
1117        </#if> 
1118    </#list> 
1119    <#if categoriaPadre?has_content> 
1120        <#assign categoriasArticulo = assetCategoryLocalService.getCategories("com.liferay.journal.model.JournalArticle", journalArticle.resourcePrimKey ) /> 
1121        <#list categoriasArticulo as cat> 
1122            <#if cat.getVocabularyId() == vocabCultura.getVocabularyId() && cat.getParentCategoryId() == categoriaPadre.getCategoryId()> 
1123                <#assign nombreCategoria = cat.getName() /> 
1124                <#if nombreCategoria == "Museos" || nombreCategoria == "Colecciones Museográficas"> 
1125                    <#assign schemaTypes = ["Museum", "LocalBusiness", "TouristAttraction"] /> 
1126                    <#break> 
1127                <#elseif nombreCategoria == "Castros y espacios arqueológicos"> 
1128                    <#assign schemaTypes = ["ArchaeologicalSite", "LocalBusiness", "TouristAttraction"] /> 
1129                    <#break> 
1130                <#elseif nombreCategoria == "Conjuntos etnográficos"> 
1131                    <#assign schemaTypes = ["LandmarksOrHistoricalBuildings", "LocalBusiness", "TouristAttraction"] /> 
1132                    <#break> 
1133                <#elseif nombreCategoria == "Centros de interpretación"> 
1134                    <#assign schemaTypes = ["VisitorCenter", "LocalBusiness", "TouristAttraction"] /> 
1135                    <#break> 
1136                <#elseif nombreCategoria == "Otros espacios culturales"> 
1137                    <#assign schemaTypes = ["CivicStructure", "LocalBusiness", "TouristAttraction"] /> 
1138                    <#break> 
1139                </#if> 
1140            </#if> 
1141        </#list> 
1142    </#if> 
1143</#if> 
1144<script type="application/ld+json"> 
1145
1146	"@context": "https://schema.org", 
1147	"@type": [ 
1148	  <#list schemaTypes as t>"${t}"<#if t_has_next>,</#if></#list> 
1149	], 
1150	"@id": "${articleURL}", 
1151	"name": "${title}", 
1152	"url": "${articleURL}" 
1153	<#if articleMainImageThumbnail3Safe?has_content> 
1154		,"image": [ 
1155			"${themeDisplay.getPortalURL()}${articleMainImageThumbnail3Safe}" 
1156			<#if Visualizador.Slide.getData()?has_content> 
1157				<#list Visualizador.Slide.getSiblings() as Slide> 
1158					<#if validator.isNotNull(Slide.getData()) && !Slide.SlideUrl.getData()?has_content> 
1159						<#assign slidePathRaw = dlTool.getPathByJSON(Slide.data, themeDisplay.getScopeGroupId())! /> 
1160						<#assign slidePath = sanitizeURL(slidePathRaw) /> 
1161						<#if slidePath?has_content> 
1162							,"${themeDisplay.getPortalURL()}${slidePath}" 
1163						</#if> 
1164					</#if> 
1165				</#list> 
1166			</#if> 
1167
1168	</#if> 
1169	<#if (Informacion.Texto.data)!?has_content> 
1170		<#assign cleanDesc = htmlUtil.extractText(Informacion.Texto.data)?trim /> 
1171		<#if cleanDesc?has_content> 
1172			,"description": "${cleanDesc}" 
1173		</#if> 
1174	</#if> 
1175	<#if (Contacto.Direccion.data)!?has_content || (Contacto.CP.data)!?has_content> 
1176		,"address": { 
1177			"@type": "PostalAddress" 
1178			<#if (Contacto.Direccion.data)!?has_content> 
1179				,"streetAddress": "${(Contacto.Direccion.data)!}" 
1180			</#if> 
1181			<#if (Contacto.CP.data)!?has_content> 
1182				,"postalCode": "${(Contacto.CP.data)!}" 
1183			</#if> 
1184			<#if (Contacto.Localidad.data)!?has_content> 
1185				,"addressLocality": "${(Contacto.Localidad.data)!}" 
1186			</#if> 
1187			<#if (Contacto.Concejo.data)!?has_content> 
1188				,"addressRegion": "${(Contacto.Concejo.data)!}" 
1189			</#if> 
1190			,"addressCountry": "ES" 
1191
1192	</#if> 
1193	<#if (Geolocalizacion.Coordenadas.data)!?has_content> 
1194		<#assign coordenadas = stringUtil.split(Geolocalizacion.Coordenadas.data) /> 
1195		,"geo": { 
1196			"@type": "GeoCoordinates", 
1197			"latitude": "${coordenadas[0]}", 
1198			"longitude": "${coordenadas[1]}" 
1199
1200	</#if> 
1201	<#if (Contacto.Telefono.data)!?has_content> 
1202		,"telephone": [ 
1203			<#assign phoneList = [] /> 
1204			<#list Contacto.Telefono.getSiblings() as telephone> 
1205				<#if telephone.data?has_content> 
1206					<#assign rawTelefono = telephone.data?trim /> 
1207					<#assign cleanTelefono = rawTelefono?replace("\\(.*?\\)", "", "r") /> 
1208					<#assign numberTelefono = cleanTelefono?replace("[^0-9]", "", "r") /> 
1209					<#if numberTelefono?length == 9> 
1210						<#assign phoneList = phoneList + ["+34${numberTelefono}"] /> 
1211					<#elseif numberTelefono?has_content> 
1212						<#assign phoneList = phoneList + [numberTelefono] /> 
1213					</#if> 
1214				</#if> 
1215			</#list> 
1216			<#if phoneList?has_content> 
1217				<#list phoneList as phone> 
1218					"${phone}"<#if phone_has_next>,</#if> 
1219				</#list> 
1220			</#if> 
1221
1222	</#if> 
1223	<#if (Contacto.Email.getData())!?has_content> 
1224		,"email": [ 
1225			<#assign emailList = [] /> 
1226			<#list Contacto.Email.getSiblings() as Item> 
1227				<#if Item.data?trim?has_content> 
1228					<#assign emailList = emailList + [Item.data?trim] /> 
1229				</#if> 
1230			</#list> 
1231			<#if emailList?has_content> 
1232				<#list emailList as email> 
1233					"${email}"<#if email_has_next>,</#if> 
1234				</#list> 
1235			</#if> 
1236
1237	</#if> 
1238	<#if (Informacion.Horario.data)!?has_content> 
1239		<#assign cleanHorario = htmlUtil.extractText(Informacion.Horario.data)?trim /> 
1240		<#if cleanHorario?has_content> 
1241			,"openingHoursSpecification": { 
1242				"@type": "OpeningHoursSpecification", 
1243				"description": "${cleanHorario}" 
1244
1245		</#if> 
1246	</#if> 
1247
1248</script> 
1249<script type="text/javascript"> 
1250	(function() { 
1251		'use strict'; 
1252		setTimeout(function() { 
1253			var links = document.querySelectorAll('.internal-tab-link'); 
1254			links.forEach(function(link) { 
1255				link.addEventListener('click', function(e) { 
1256					e.preventDefault(); 
1257					 
1258					var tabHeadingId = this.getAttribute('data-tab-heading'); 
1259					var tabContentId = this.getAttribute('data-tab-content'); 
1260					var tabControl = document.getElementById(tabHeadingId); 
1261					var tabContent = document.getElementById(tabContentId); 
1262					 
1263					if (!tabControl || !tabContent) return; 
1264					 
1265					var isExpanded = tabControl.getAttribute('aria-expanded') === 'true'; 
1266					if (!isExpanded) { 
1267						tabControl.click(); 
1268						setTimeout(function() { 
1269							scrollToElement(tabControl); 
1270						}, 350); 
1271					} else { 
1272						scrollToElement(tabControl); 
1273
1274				}); 
1275			}); 
1276		}, 500); 
1277	   
1278		function scrollToElement(element) { 
1279			var elementPosition = element.getBoundingClientRect().top; 
1280			var offsetPosition = elementPosition + window.pageYOffset - 140; 
1281			window.scrollTo({ 
1282				top: offsetPosition, 
1283				behavior: 'smooth' 
1284			}); 
1285			setTimeout(function() { 
1286				element.focus(); 
1287			}, 400); 
1288
1289	})(); 
1290</script>