Turismo activo
Si buscas una forma original de complementar tu evento corporativo, Asturias te ofrece un sinfín de experiencias en plena naturaleza. Desde emocionantes actividades como rutas a caballo, descensos en canoa o aventuras acuáticas como el paddle surf. Además, con estas empresas especializadas en turismo activo convertirás tu evento o viaje de incentivos en una experiencia única y llena de adrenalina.
Atrás Asturfly
Se ha producido un error al procesar la plantilla.
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>