Fehler bei der Verarbeitung der Vorlage.
Java method "as.asac.template.tools.DLToolImpl.getDLFileEntryByPath(String)" threw an exception when invoked on as.asac.template.tools.DLToolImpl object "as.asac.template.tools.DLToolImpl@46fea19c"; see cause exception in the Java stack trace.

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