Si è verificato un errore nell'elaborarazione del modello.
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@402d71de"; 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')} »</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: '© <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>