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