Si è verificato un errore nell'elaborarazione del modello.
Java method "as.asac.template.tools.DLToolImpl.getDLFileEntryByPath(String)" threw an exception when invoked on as.asac.template.tools.DLToolImpl object "as.asac.template.tools.DLToolImpl@4873d975"; see cause exception in the Java stack trace. ---- FTL stack trace ("~" means nesting-related): - Failed at: #assign dlFileEntryTrack = dlTool.get... [in template "37703#37743#1559015" at line 385, column 153] ----
1<#-- Services -->
2<#assign assetEntryLocalServiceUtil = serviceLocator.findService("com.liferay.asset.kernel.service.AssetEntryLocalService")/>
3<#assign assetLinkLocalService = serviceLocator.findService("com.liferay.asset.kernel.service.AssetLinkLocalService")/>
4<#assign journalArticleResourceServiceUtil = serviceLocator.findService("com.liferay.journal.service.JournalArticleResourceLocalService")/>
5
6<#-- Reserved vbles -->
7<#assign title = .vars['reserved-article-title'].data>
8<#assign articleId=.vars["reserved-article-id"].data />
9<#assign description=.vars["reserved-article-description"].data />
10<#assign smallImageUrl=.vars["reserved-article-small-image-url"].data />
11<#assign date=.vars["reserved-article-display-date"].data />
12<#assign request = .vars['request']>
13
14<#-- Init -->
15<#assign assetEntry = journalTool.getAssetEntryByArticleId(groupId, articleId)>
16<#assign journalArticle = journalTool.getJournalArticleByAssetEntry(assetEntry)>
17<#assign articleURL = themeDisplay.getURLPortal()+themeDisplay.getURLCurrent()>
18<#assign articleSocialBookmarks = themeDisplay.getThemeSetting("article-social-bookmarks")!>
19<#assign layoutSetBannerPath = layoutTool.getLayoutSetBannerPath(groupId, themeDisplay.getLayout().isPrivateLayout())!>
20<#assign articleMainImageThumbnail3 = dlTool.getThumbnail(smallImageUrl, "3", layoutSetBannerPath)! />
21<#assign articleMainImageThumbnail1 = dlTool.getThumbnail(smallImageUrl, "1")! />
22<#assign ddmStructureNameNormalize = "template-${friendlyURLNormalizerTool.normalize(journalArticle.getDDMStructure().getName(localeUtil.getDefault()))}" />
23<#assign baseUrl = themeDisplay.getURLPortal()/>
24
25<#-- Build -->
26<#if Nombre.data?has_content>
27 <#assign title = Nombre.data>
28</#if>
29<#assign address = []>
30<#if Contacto.Zona.data?has_content>
31 <#assign address = address + [Contacto.Zona.data] />
32</#if>
33
34<#-- KML -->
35<#assign dlFileEntryKML = dlTool.getDLFileEntryByPath(TrazadoRuta.getData())!/>
36<#assign document = "" />
37<#assign lookAtLongitude = ""/>
38<#assign lookAtLatitude = ""/>
39<#assign coordinates_all = "" />
40<#if validator.isNotNull(dlFileEntryKML)>
41 <#assign document = saxReaderUtil.read(dlFileEntryKML.getContentStream())/>
42 <#assign rootElement = document.getRootElement()/>
43 <#assign xpath = saxReaderUtil.createXPath("//root:Camera/root:longitude", "root", "http://www.opengis.net/kml/2.2")/>
44 <#assign lookAtLongitude = xpath.selectSingleNode(document)!>
45 <#assign xpath = saxReaderUtil.createXPath("//root:Camera/root:latitude", "root", "http://www.opengis.net/kml/2.2")/>
46 <#assign lookAtLatitude = xpath.selectSingleNode(document)!>
47</#if>
48
49<#if validator.isNotNull(document) && validator.isNull(lookAtLongitude)>
50 <#assign xpath = saxReaderUtil.createXPath("//root:LookAt/root:longitude", "root", "http://www.opengis.net/kml/2.2")/>
51 <#assign lookAtLongitude = xpath.selectSingleNode(document)!>
52</#if>
53
54<#if validator.isNotNull(document) && validator.isNull(lookAtLatitude)>
55 <#assign xpath = saxReaderUtil.createXPath("//root:LookAt/root:latitude", "root", "http://www.opengis.net/kml/2.2")/>
56 <#assign lookAtLatitude = xpath.selectSingleNode(document)!>
57</#if>
58
59<#-- En caso de que no haya ni lookAt ni camera -->
60<#if validator.isNotNull(document) && (validator.isNull(lookAtLongitude) || validator.isNull(lookAtLatitude))>
61 <#assign xpath = saxReaderUtil.createXPath("//root:Placemark/root:LineString/root:coordinates", "root", "http://www.opengis.net/kml/2.2")/>
62 <#assign coordinates_all = xpath.selectSingleNode(document)!>
63 <#assign coordinates_array = coordinates_all.data?split(" ")>
64 <#assign coordinate_middle_pos = getterUtil.getInteger(coordinates_array?size/2)>
65 <#assign coordinate_middle = coordinates_array[coordinate_middle_pos]?split(",")>
66 <#assign lookAtLongitude = coordinate_middle[0]>
67 <#assign lookAtLatitude = coordinate_middle[1]>
68</#if>
69
70<#if validator.isNotNull(document) && validator.isNotNull(coordinates_all) >
71 <#assign xpath = saxReaderUtil.createXPath("//root:Placemark/root:LineString/root:coordinates", "root", "http://www.opengis.net/kml/2.2")/>
72 <#assign coordinates_all = xpath.selectSingleNode(document)!>
73 <#assign coordinates_array = coordinates_all.getData()?split(" ")/>
74 <#assign coordinates_start = coordinates_array[0]?split(",")/>
75</#if>
76
77<#assign tramosAlternativosArray = []/>
78
79<#if Tramos.getSiblings()?size!=0>
80
81 <#list Tramos.getSiblings() as tramo>
82 <#if tramo.TramoAlternativo.getData()=="true">
83 <#assign tramosAlternativosArray = tramosAlternativosArray + ["true"] />
84 <#else>
85 <#assign tramosAlternativosArray = tramosAlternativosArray + [ "false" ] />
86 </#if>
87
88 </#list>
89
90</#if>
91
92<#-- Id de los tramos -->
93<#assign counter = 1>
94<#assign count = 0>
95
96<#-- Obtener el nombre de los tramos -->
97<#assign xpath = saxReaderUtil.createXPath("//root:LineString/ancestor::root:Placemark/root:name", "root", "http://www.opengis.net/kml/2.2")>
98<#assign placemarksName = xpath.selectNodes(document)>
99
100<#assign tipoRuta = stringUtil.lowerCase(TipoRuta.getData())/>
101
102<article class="template ${ddmStructureNameNormalize}" role="article" itemscope itemtype="http://schema.org/TouristicAttraction">
103
104 <header class="article-header-wrapper row no-gutters">
105
106 <div class="article-header-container article-header-container-static">
107 <div class="container">
108 <div class="row no-gutters">
109 <div class="col-md-6">
110 <div class="article-image" style="background-image: url('${articleMainImageThumbnail3}')">
111 <img class="sr-only" src="${articleMainImageThumbnail3}" alt="${languageUtil.format(request,'go-to-x','image')} ${title}" itemprop="image"/>
112 </div>
113 </div>
114 <div class="article-info-wrapper col-md-6">
115 <div class="article-info">
116
117 <h2 class="article-title" itemprop="name">${title}</h2>
118 <div class="article-list-wrapper">
119
120 <ul class="article-list list-unstyled article-list-info">
121 <li class="article-list-item mb-4">
122 <span class="fas fa-map-marker-alt">
123 <span class="hide-accessible">${languageUtil.get(request,"address")}</span>
124 </span>
125 <span class="field-wrapper" itemprop="address">
126 <span class="important">
127 <#assign concejos = []/>
128 <#list Contacto.Concejos.getSiblings() as Item>
129 <#if Item.data?has_content>
130 <#assign concejos = [Item.data] />
131 </#if>
132 </#list>
133 ${stringUtil.merge(concejos)}
134 </span>
135 <span class="text d-block">${stringUtil.merge(address)}</span>
136 </span>
137 </li>
138 </ul>
139
140 <div class="article-info-table article-info-table-fixed">
141 <div class="article-info-table-row">
142 <div class="article-info-table-cell">
143 <div class="article-list-wrapper">
144 <ul class="article-list list-unstyled article-list-info info-route">
145
146 <#if Contacto.Distancia.data?has_content>
147 <li class="article-list-item">
148 <span class="fas fa-ruler-horizontal">
149 <span class="hide-accessible">${languageUtil.get(request,"infoasturias-distancia")}</span>
150 </span>
151 <span class="field-wrapper">
152 <span class="field">${languageUtil.get(request, "infoasturias-distancia")}:</span>
153 <#list Contacto.Distancia.getSiblings() as Item>
154 <span class="text btn btn-primary btn-thin text-capitalize"><span class="font-size-11 text-distance">${Item.data}</span> kms</span><#if Item_has_next> </#if>
155 </#list>
156 </span>
157 </li>
158 </#if>
159
160 <#if Contacto.Dificultad.data?has_content && tipoRuta!="coche">
161 <#assign dificultadMap = {
162 "1": languageUtil.get(request,"infoasturias-dificultad-baja"),
163 "2": languageUtil.get(request,"infoasturias-dificultad-media"),
164 "3": languageUtil.get(request,"infoasturias-dificultad-alta")
165 }
166 />
167 <li class="article-list-item">
168 <span class="fas fa-layer-group">
169 <span class="hide-accessible">${languageUtil.get(request,"infoasturias-dificultad")}</span>
170 </span>
171 <span class="field-wrapper">
172 <span class="field">${languageUtil.get(request, "infoasturias-dificultad")}:</span>
173 <span class="text">
174 <span>${dificultadMap[Contacto.Dificultad.data]}</span>
175 </span>
176 </span>
177 </li>
178 </#if>
179
180 <#if Contacto.Codigo.data?has_content>
181 <li class="article-list-item">
182 <span class="fas fa-info">
183 <span class="hide-accessible">${languageUtil.get(request,"code")}</span>
184 </span>
185 <span class="field-wrapper">
186 <span class="field">${languageUtil.get(request, "code")}:</span>
187 <span class="text">
188 <span>${Contacto.Codigo.data}</span>
189 </span>
190 </span>
191 </li>
192 </#if>
193
194 <#if Contacto.Altitud.data?has_content>
195 <li class="article-list-item">
196 <span class="fas fa-ruler-vertical">
197 <span class="hide-accessible">${languageUtil.get(request,"metadata.Geographic.ALTITUDE")}</span>
198 </span>
199 <span class="field-wrapper">
200 <span class="field">${languageUtil.get(request, "metadata.Geographic.ALTITUDE")}:</span>
201 <span class="text">${Contacto.Altitud.data}</span>
202 </span>
203 </li>
204 </#if>
205
206 <#if Contacto.Desnivel.data?has_content>
207 <li class="article-list-item">
208 <span class="fas fa-chart-line">
209 <span class="hide-accessible">${languageUtil.get(request,"infoasturias-desnivel")}</span>
210 </span>
211 <span class="field-wrapper">
212 <span class="field">${languageUtil.get(request, "infoasturias-desnivel")}:</span>
213 <span class="text">${Contacto.Desnivel.data} m.</span>
214 </span>
215 </li>
216 </#if>
217 </ul>
218 </div>
219 </div>
220 <div class="article-info-table-cell">
221 <div class="article-list-wrapper">
222 <ul class="article-list list-unstyled article-list-info">
223 <#if Contacto.TiempoBTT.data?has_content>
224 <li class="article-list-item">
225 <span class="fas fa-bicycle">
226 <span class="hide-accessible">${languageUtil.get(request,"infoasturias-btt")}</span>
227 </span>
228 <span class="field-wrapper">
229 <span class="field">${languageUtil.get(request, "infoasturias-btt")}:</span>
230 <span class="text">${Contacto.TiempoBTT.data}</span>
231 </span>
232 </li>
233 </#if>
234
235 <#if Contacto.TiempoAPie.data?has_content>
236 <li class="article-list-item">
237 <span class="fas fa-shoe-prints">
238 <span class="hide-accessible">${languageUtil.get(request,"infoasturias-a-pie")}</span>
239 </span>
240 <span class="field-wrapper">
241 <span class="field">${languageUtil.get(request, "infoasturias-a-pie")}:</span>
242 <span class="text">${Contacto.TiempoAPie.data}</span>
243 </span>
244 </li>
245 </#if>
246
247 <#if Contacto.TiempoCoche.data?has_content>
248 <li class="article-list-item">
249 <span class="fas fa-car">
250 <span class="hide-accessible">${languageUtil.get(request,"infoasturias-coches")}</span>
251 </span>
252 <span class="field-wrapper">
253 <span class="field">${languageUtil.get(request, "infoasturias-coches")}:</span>
254 <span class="text">${Contacto.TiempoCoche.data}</span>
255 </span>
256 </li>
257 </#if>
258
259 <#if Contacto.TiempoViasVerdes.data?has_content>
260 <li class="article-list-item">
261 <span class="fas fa-route">
262 <span class="hide-accessible">${languageUtil.get(request,"infoasturias-vias-verdes")}</span>
263 </span>
264 <span class="field-wrapper">
265 <span class="field">${languageUtil.get(request, "infoasturias-vias-verdes")}:</span>
266 <span class="text">${Contacto.TiempoViasVerdes.data}</span>
267 </span>
268 </li>
269 </#if>
270
271 <#if Contacto.TiempoAscension.data?has_content>
272 <li class="article-list-item">
273 <span class="fas fa-hiking">
274 <span class="hide-accessible">${languageUtil.get(request,"infoasturias-ascension")}</span>
275 </span>
276 <span class="field-wrapper">
277 <span class="field">${languageUtil.get(request, "infoasturias-ascension")}:</span>
278 <span class="text">${Contacto.TiempoAscension.data}</span>
279 </span>
280 </li>
281 </#if>
282 </ul>
283 </div>
284 </div>
285 </div>
286 <div class="article-info-table-row">
287 <div class="article-info-table-cell">
288 <div class="article-list-wrapper">
289 <ul class="article-list list-unstyled article-list-info">
290 <#if Contacto.SituacionGeografica.data?has_content>
291 <li class="article-list-item">
292 <span class="fas fa-map-marked-alt">
293 <span class="hide-accessible">${languageUtil.get(request,"infoasturias-situacion-geografica")}</span>
294 </span>
295 <span class="field-wrapper">
296 <span class="field">${languageUtil.get(request, "infoasturias-situacion-geografica")}:</span>
297 <span class="text">${Contacto.SituacionGeografica.data}</span>
298 </span>
299 </li>
300 </#if>
301
302 <#if Contacto.PuntoDePartida.data?has_content>
303 <li class="article-list-item">
304 <span class="fas fa-map-marker">
305 <span class="hide-accessible">${languageUtil.get(request,"infoasturias-punto-de-partida")}</span>
306 </span>
307 <span class="field-wrapper">
308 <span class="field">${languageUtil.get(request, "infoasturias-punto-de-partida")}:</span>
309 <span class="text">${Contacto.PuntoDePartida.data}</span>
310 </span>
311 </li>
312 </#if>
313
314 <#if TipoRuta.data?has_content>
315 <li class="article-list-item hide"><#-- Se oculta por indicación de Noemí 27062022 -->
316 <span class="fas fa-route">
317 <span class="hide-accessible">${languageUtil.get(request,"infoasturias-tipo-de-ruta")}</span>
318 </span>
319 <span class="field-wrapper">
320 <span class="field">${languageUtil.get(request, "infoasturias-tipo-de-ruta")}:</span>
321 <span class="text">${TipoRuta.data}</span>
322 </span>
323 </li>
324 </#if>
325
326 <#if Contacto.TipoDeRecorrido.data?has_content>
327 <li class="article-list-item">
328 <span class="fas fa-route">
329 <span class="hide-accessible">${languageUtil.get(request,"infoasturias-tipo-recorrido")}</span>
330 </span>
331 <span class="field-wrapper">
332 <span class="field">${languageUtil.get(request, "infoasturias-tipo-recorrido")}:</span>
333 <span class="text">${Contacto.TipoDeRecorrido.data}</span>
334 </span>
335 </li>
336 </#if>
337 </ul>
338 </div>
339 </div>
340 <div class="article-info-table-cell">
341 <div class="article-list-wrapper">
342 <ul class="article-list list-unstyled article-list-info">
343 <#if Folletos.Folleto.data?has_content>
344 <#assign dlFileEntry = dlTool.getDLFileEntryByPath(Folletos.Folleto.data) />
345 <#if validator.isNotNull(dlFileEntry)>
346 <#assign downloadURL = "/documents/${groupId}/${dlFileEntry.getUuid()}" />
347 <#assign ext = dlFileEntry.getExtension()/>
348 <li class="article-list-item document document-${ext}">
349 <i class="far fa-file-pdf"></i>
350 <span class="field-wrapper">
351 <span class="field">${languageUtil.get(request, "visuality-issuu")}:</span>
352 <span class="text">
353 <#list Folletos.Folleto.getSiblings() as Item>
354 <#assign dlFileEntry = dlTool.getDLFileEntryByPath(Item.data) />
355 <#if validator.isNotNull(dlFileEntry)>
356 <#assign downloadURL = "/documents/${groupId}/${dlFileEntry.getUuid()}" />
357 <a href="${downloadURL}" title='${dlFileEntry.getTitle()}' class="">${dlFileEntry.getTitle()}</a><#if Item_has_next>, </#if>
358 </#if>
359 </#list>
360 </span>
361 </span>
362 </li>
363 </#if>
364 </#if>
365
366 <#if TrazadoRuta.data?has_content || TrazadoRutaGPX.data?has_content>
367 <li class="article-list-item document">
368 <span class="far fa-file">
369 <span class="hide-accessible">${languageUtil.get(request,"infoasturias-trazado-de-la-ruta")}</span>
370 </span>
371 <span class="field-wrapper">
372 <span class="field">${languageUtil.get(request, "infoasturias-trazado-de-la-ruta")}:</span>
373 <span class="text">
374
375 <#assign tracks = [] />
376 <#if TrazadoRuta.data?has_content>
377 <#assign tracks = tracks + [TrazadoRuta.data] />
378 </#if>
379 <#if TrazadoRutaGPX.data?has_content >
380 <#assign tracks = tracks + [TrazadoRutaGPX.data] />
381 </#if>
382
383 <#if tracks?has_content >
384 <#list tracks as track>
385 <#assign dlFileEntryTrack = dlTool.getDLFileEntryByPath(track) />
386 <#if validator.isNotNull(dlFileEntryTrack)>
387 <#assign downloadURLkml = "/documents/${groupId}/${dlFileEntryTrack.getUuid()}" />
388 <#assign extKML = dlFileEntryTrack.getExtension()/>
389 <a href="${downloadURLkml}" class="${extKML}" title="${languageUtil.get(request,'infoasturias-download')} ${extKML}">${languageUtil.get(request,'infoasturias-download')} ${extKML}</a><#if track?has_next>, </#if>
390 </#if>
391 </#list>
392 </#if>
393
394 </span>
395 </span>
396 </li>
397 </#if>
398 </ul>
399 </div>
400 </div>
401 </div>
402 </div>
403 </div>
404 </div>
405 </div>
406 </div>
407 </div>
408 </div>
409 </header>
410
411 <div class="sheet sheet-lg">
412
413
414 <div class="article-great <#if validator.isNull(Informacion.Resumen.data)>hide</#if>">
415 <div class="route-resume-tracks-box hide">
416 <div class="route-resume-tracks">
417 <div class="route-resume-track-marker route-resume-track-marker-first"><div class="route-point-text"></div><div class="route-km-text">Km 0</div></div>
418 <div class="route-resume-track-marker route-resume-track-marker-last"><div class="route-point-text"></div><div class="route-km-text">Km 0</div></div>
419 </div>
420 </div>
421 <#if Informacion.Resumen.data?has_content>
422 <p>${htmlUtil.extractText(Informacion.Resumen.data)}</p>
423 </#if>
424 </div>
425
426
427
428 <#assign hasTab1 = Contacto.ContactoTexto.data?has_content || Informacion.InformacionTexto.data?has_content>
429 <#assign hasTab2 = Informacion.TextoTramos.data?has_content || validator.isNotNull(Tramos.TramoAlternativo.data) || Tramos.OrigenDestino.data?has_content || Tramos.DistanciaTramo.data?has_content || Tramos.DescripcionTramo.data?has_content>
430 <#assign hasTab3 = Geolocalizacion.Coordenadas.data?has_content || validator.isNotNull(TrazadoRuta.getData())>
431 <#assign hasTab4 = Informacion.Itinerario.data?has_content>
432 <#assign hasTab5 = Detalle.DetalleTexto.data?has_content || Detalle.DetalleImagen.data?has_content>
433 <#assign showFirstTab = true>
434
435 <div class="article-accordion accordion">
436 <#if Visualizador.Slide.getData()?has_content>
437 <div class="slick article-slick article-section <#if Visualizador.Slide.getSiblings()?size==1>hide</#if>">
438 <#list Visualizador.Slide.getSiblings() as Slide>
439 <#if validator.isNotNull(Slide.getData()) || validator.isNotNull(Slide.SlideUrl.getData())>
440 <#assign slideThumbnail3 = dlTool.getThumbnailByJSON(Slide.data, "3")! />
441 <#assign slideThumbnail2 = dlTool.getThumbnailByJSON(Slide.data, "2")! />
442 <#assign slidePath = dlTool.getPathByJSON(Slide.data, themeDisplay.getScopeGroupId())! />
443 <#assign slideUrl = Slide.SlideUrl.data />
444 <#assign dataMap = "" />
445
446 <#if slideUrl?has_content>
447
448 <#assign slideTitle = "${languageUtil.get(request, 'video')} ${Slide?index}" />
449 <#if Slide.SlideTitulo.data?has_content>
450 <#assign slideTitle = Slide.SlideTitulo.data />
451 </#if>
452
453 <#-- Youtube -->
454 <#assign slideUrl = stringUtil.replace(slideUrl, 'watch?v=', 'embed/') />
455 <#assign slideThumbnail2 = stringUtil.replace(slideUrl, 'www', 'img') />
456 <#assign slideThumbnail2 = stringUtil.replace(slideThumbnail2, 'embed', 'vi') />
457 <#assign slideThumbnail2 = '${slideThumbnail2}/mqdefault.jpg' />
458
459 <#-- Vimeo -->
460 <#if slideUrl?contains("vimeo")>
461 <#assign slideUrl = stringUtil.replace(slideUrl, 'http://vimeo.com/', 'https://player.vimeo.com/video/') />
462 <#assign slideVimeoId = stringUtil.extractLast(slideUrl, 'https://player.vimeo.com/video/') />
463 <#if slideVimeoId?has_content>
464 <#assign slideVimeoJsonPath = 'http://vimeo.com/api/v2/video/${slideVimeoId}.json' />
465 <#assign slideVimeoJsonContent = getUrlContent.getContent(slideVimeoJsonPath)! />
466 <#if slideVimeoJsonContent?has_content>
467 <#assign slideVimeoJsonArray = jsonFactoryUtil.createJSONArray(slideVimeoJsonContent) />
468 <#assign slideVimeoJsonItem = slideVimeoJsonArray.get(0) />
469 <#assign slideThumbnail2 = slideVimeoJsonItem.thumbnail_medium />
470 </#if>
471 </#if>
472 </#if>
473
474 <div id="slide-${Slide?index}" class="slide">
475 <a class="card card-simple card-video" href="#" onclick="javascript: event.preventDefault(); showDialogIframe('${slideUrl}', '${slideTitle}', 800, 600, 'videoPopup', 'videoPopupIframe');" title="${slideTitle}">
476 <span class="d-block image-wrapper aspect-ratio-bg-cover aspect-ratio-4-to-3" style="background-image: url('${slideThumbnail2}');">
477 <img class="hide-accessible" alt="${slideTitle}" src="${slideThumbnail2}">
478 </a>
479 </div>
480 <#else>
481 <#assign slideTitle = "${languageUtil.get(request, 'image')} ${Slide?index}" />
482 <#if Slide.SlideTitulo.data?has_content>
483 <#assign slideTitle = Slide.SlideTitulo.data />
484 </#if>
485
486 <div class="slide">
487 <a class="card card-simple lightbox" href="${slidePath}" title="${slideTitle}">
488 <span class="d-block image-wrapper aspect-ratio-bg-cover aspect-ratio-4-to-3" style="background-image: url('${slideThumbnail2}');">
489 <img class="hide-accessible" alt="${slideTitle}" src="${slideThumbnail2}">
490 </a>
491 </div>
492 </#if>
493 </#if>
494 </#list>
495 </div>
496 </#if>
497
498 <#if hasTab1>
499 <div id="tab1" class="article-section accordion-item">
500 <a href="#tabContent1" id="tabHeading" class="d-block border-0 tab <#if !showFirstTab>collapsed</#if>" aria-expanded="${getterUtil.getString(showFirstTab)}" data-toggle="liferay-collapse" aria-controls="tabContent1" role="button"><h3 class="h3 accordion-header">${languageUtil.get(request,'info')}</h3></a>
501 <div id="tabContent1" class="article-section-content article-section-info accordion-collapse collapse <#if showFirstTab>show</#if>" aria-labelledby="tabHeading">
502 <#if Contacto.ContactoTexto.data?has_content>
503 ${Contacto.ContactoTexto.data}
504 </#if>
505 <#if Informacion.InformacionTexto.data?has_content>
506 ${Informacion.InformacionTexto.data}
507 </#if>
508 </div>
509 </div>
510 <#assign showFirstTab = false>
511 </#if>
512
513 <#if hasTab2>
514 <div id="tab2" class="article-section accordion-item">
515 <a href="#tabContent2" id="tabHeading2" class="d-block border-0 tab <#if !showFirstTab>collapsed</#if>" aria-expanded="${getterUtil.getString(showFirstTab)}" data-toggle="liferay-collapse" aria-controls="tabContent2" role="button"><h3 class="h3 accordion-header">${languageUtil.get(request,'infoasturias-recorrido')}</h3></a>
516 <div id="tabContent2" class="article-section-content article-section-color article-section-background accordion-collapse collapse <#if showFirstTab>show</#if>" aria-labelledby="tabHeading2">
517 <#list Informacion.TextoTramos.getSiblings() as Item>
518 <#if validator.isNotNull(Item.data)>
519 <p>${Item.data}</p>
520 </#if>
521 </#list>
522 <#list Tramos.getSiblings() as Item>
523 <h4 id="track-${Item?index+1}" class="h4 mt-5 route-${Item?index+1}">
524 <#if tipoRuta=="coche">${languageUtil.get(request,"day")} ${Item?index+1}:</#if> ${Item.OrigenDestino.data}
525 <span class="route-distance btn btn-link float-right text-capitalize">
526 ${Item.DistanciaTramo.data}
527 </span>
528 </h4>
529
530 <#if getterUtil.getBoolean(Item.TramoAlternativo.getData()) && getterUtil.getBoolean(Item.TramoAlternativo.getData())>
531 <ul class="article-list list-unstyled article-list-info">
532 <li class="article-list-item">
533 <span class="fas fa-route">
534 <span class="hide-accessible">${languageUtil.get(request,"infoasturias-tramo-alternativo")}</span>
535 </span>
536 <span class="field-wrapper">
537 <span class="field">${languageUtil.get(request, "infoasturias-tramo-alternativo")}:</span>
538 </span>
539 </li>
540 </ul>
541 </#if>
542
543 <#if Item.DescripcionTramo.data?has_content>
544 ${Item.DescripcionTramo.data}
545 </#if>
546 </#list>
547 </div>
548 </div>
549 <#assign showFirstTab = false>
550 </#if>
551
552 <#if hasTab3>
553 <#assign showFirstTab = true>
554 <#assign coordenadas=stringUtil.split(Geolocalizacion.Coordenadas.data) />
555 <div id="tab3" class="article-section accordion-item">
556 <a href="#tabContent3" id="tabHeading3" class="d-block border-0 tab <#if !showFirstTab>collapsed</#if>" aria-expanded="${getterUtil.getString(showFirstTab)}" data-toggle="liferay-collapse" aria-controls="tabContent3" role="button"><h3 class="h3 accordion-header">${languageUtil.get(request,'map')}</h3></a>
557 <div id="tabContent3" class="article-section-content accordion-collapse collapse <#if showFirstTab>show</#if>" aria-labelledby="tabHeading3">
558 <script src="/o/turismo-asturias-theme/js/leaflet/leaflet.js"></script>
559 <script type="text/javascript">
560 <#assign xpath = saxReaderUtil.createXPath("//root:StyleMap", "root", "http://www.opengis.net/kml/2.2")/>
561 <#assign style_maps = xpath.selectNodes(document)/>
562
563 var style_mapsJS = {};
564 var line_stylesJS = {};
565
566 <#list style_maps as style_map>
567 <#assign style_map_styleurl_path = "${style_map.getUniquePath()}/*[name()='Pair']/*[name()='styleUrl']"/>
568 <#assign style_map_styleurl_node = style_map.selectSingleNode(style_map_styleurl_path)/>
569 <#assign nodeText = style_map_styleurl_node.getText()/>
570 style_mapsJS['${style_map.selectSingleNode("${style_map.getUniquePath()}/@id").getText()}'] = '${nodeText?substring(1)}';
571 </#list>
572 <#assign xpath = saxReaderUtil.createXPath("//root:Style", "root", "http://www.opengis.net/kml/2.2")/>
573 <#assign line_styles = xpath.selectNodes(document)/>
574
575 <#list line_styles as line_style>
576 <#assign line_style_color_path = "${line_style.getUniquePath()}/*[name()='LineStyle']/*[name()='color']"/>
577 <#assign line_style_color_node = line_style.selectSingleNode(line_style_color_path)!/>
578 <#if validator.isNotNull(line_style_color_node)>
579 line_stylesJS['${line_style.selectSingleNode("${line_style.getUniquePath()}/@id").getText()}'] = {color: '#${line_style_color_node.getText()?substring(6,8)}${line_style_color_node.getText()?substring(4,6)}${line_style_color_node.getText()?substring(2,4)}', opacity: 0x${line_style_color_node.getText()?substring(0,2)}/0xFF};
580 </#if>
581 </#list>
582 </script>
583
584
585 <script type="text/javascript">
586 var route = {};//Ruta
587 var totalDistance = 0;
588 <#list placemarksName as name>
589
590 var nombreTramo = "${name.getText()}";
591 nombreTramo = nombreTramo.replace("Tramo ","");
592 nombreTramo = nombreTramo.replace(/[–]/gi,'-');
593 nombreTramo = nombreTramo.trim();
594
595
596 var tramo = {};//Datos del tramo
597 var coordinatesJS = [];//Coordenadas del tramo
598
599 <#-- Identificador color del Tramo -->
600 <#assign xpath = saxReaderUtil.createXPath("//root:LineString/ancestor::root:Placemark[root:name='${name.getText()}']/root:styleUrl", "root", "http://www.opengis.net/kml/2.2")/>
601 <#assign styleUrl = xpath.selectSingleNode(document)!>
602
603 <#-- Obtener los puntos de ruta para dibujarlos -->
604 <#assign xpath = saxReaderUtil.createXPath("//root:LineString/ancestor::root:Placemark[root:name='${name.getText()}']/root:LineString/root:coordinates", "root", "http://www.opengis.net/kml/2.2")/>
605 <#assign coordinates = xpath.selectSingleNode(document)!>
606 <#-- Hacemos un split para separar las coordenadas -->
607 <#assign arrayCoordinates = coordinates.getText()?split(" ")/>
608 <#assign start=""/>
609 <#assign end=""/>
610 <#list arrayCoordinates as coordinate>
611 <#assign splitCoordinates = coordinate?split(",")/>
612
613
614 <#if splitCoordinates?size gte 2>
615 coordinatesJS.push(new L.LatLng(${splitCoordinates[1]}, ${splitCoordinates[0]}));
616 <#if validator.isNull(start)>
617 <#assign start = "${splitCoordinates[1]} +',' + ${splitCoordinates[0]}">
618 </#if>
619 <#assign end = "${splitCoordinates[1]} +',' + ${splitCoordinates[0]}">
620 </#if>
621
622 </#list>
623 tramo['start'] = ${start};
624 tramo['end'] = ${end};
625
626 var distance = 0;
627 var previousPoint="";
628
629 tramo['name'] = nombreTramo;
630 tramo['lineStyle'] = line_stylesJS[style_mapsJS['${styleUrl.getText()?substring(1)}']];
631 tramo['coordinates'] = coordinatesJS;
632
633 coordinatesJS.forEach(function (latLng) {
634 if (previousPoint) {
635 distance += previousPoint.distanceTo(latLng);
636 }
637 previousPoint = latLng;
638 });
639
640 tramo['distance'] = (distance/1000).toFixed(1)/1;
641 totalDistance +=(distance/1000).toFixed(1)/1;
642
643 <#if tramosAlternativosArray?size!=0>
644 tramo['isAlternative'] = ${tramosAlternativosArray[count]};
645 <#else>
646 tramo['isAlternative'] = false;
647 </#if>
648
649
650 route['${counter}'] = tramo;
651
652 <#assign counter = counter +1/>
653 <#assign count = count +1/>
654
655 </#list>
656 </script>
657 <div class="article-section-content">
658 <div id="article-map-wrapper-${articleId}" class="article-map-wrapper">
659 <div id="article-map-content-${articleId}" style="width: 100%; height: 400px; z-index:1"><!-- MAP --></div>
660 <div class="article-map-form">
661 <div class="name important">${title}</div>
662 <div class="gps"><span class="label">GPS:</span> <span class="value important" itemprop="geo">${lookAtLatitude.getText()}, ${lookAtLongitude.getText()}</span></div>
663 <form action="https://maps.google.es/maps" method="get" target="_blank">
664 <input type="hidden" name="daddr" value="${lookAtLatitude.getText()}, ${lookAtLongitude.getText()}">
665 <label for="saddrText"><span class="label hide-accessible">${languageUtil.get(request,'infoasturias-insert-from')}: </span></label>
666 <label for="saddr"><span class="label">${languageUtil.get(request,'infoasturias-from')}: </span></label>
667 <input class="form-control" type="text" maxlength="40" name="saddrText" id="saddrText" value="" placeholder="${languageUtil.get(request,'infoasturias-insert-from')}">
668 <input class="form-control" type="hidden" name="saddr" id="saddr" value="" placeholder="${languageUtil.get(request,'infoasturias-insert-from')}">
669 <button class="btn btn-text" type="submit">${languageUtil.get(request,'infoasturias-como-llegar')} »</button>
670 </form>
671 </div>
672 </div>
673
674 <script type="text/javascript">
675 AUI().ready('aui-base', function(A){
676 var lookAt = new L.LatLng(${lookAtLatitude.getText()}, ${lookAtLongitude.getText()});//Cámara
677
678 <#if validator.isNotNull (Geolocalizacion.Coordenadas.data)>
679 lookAt = new L.LatLng(${Geolocalizacion.Coordenadas.data});//contenido
680 </#if>
681 const mapContent = new L.Map('article-map-content-${articleId}', { center: lookAt, zoom: 10 });
682 const osm = new L.TileLayer('http://basemap.nationalmap.gov/arcgis/rest/services/USGSTopo/MapServer/tile/{z}/{y}/{x}');
683
684
685 mapContent.addLayer(osm);
686
687 //definir iconos inicio y fin tramo
688 var startMarker;
689 var middleMarker;
690 var endMarker;
691 var colorSeries = ["e9ecef","f5f7f9","fff"];
692 var colorSeriesSelector = 0;
693 var generalDistance =0;
694
695 var endIconTheme = '/o/turismo-asturias-theme/images/icons/routes/Icono_Fin_Ruta_${tipoRuta}_min.png';
696 var endIcon = L.icon({
697 iconUrl: endIconTheme,
698 iconSize: [27, 35],
699 iconAnchor: [13, 35],
700 iconShadow: [0,0],
701 popupAnchor: [0, -30]
702 });
703 var middleIconTheme = '/o/turismo-asturias-theme/images/icons/routes/gmaps-marker-icon-grey.png';
704 var middleIcon = L.icon({
705 iconUrl: middleIconTheme,
706 iconSize: [20, 28],
707 iconAnchor: [10, 28],
708 iconShadow: [0,0],
709 popupAnchor: [0, -30]
710 });
711
712 var startIconTheme = '/o/turismo-asturias-theme/images/icons/routes/Icono_Inicio_Ruta_${tipoRuta}_min.png';
713 var startIcon = L.icon({
714 iconUrl: startIconTheme,
715 iconSize: [27, 35],
716 iconAnchor: [13, 35],
717 iconShadow: [0,0],
718 popupAnchor: [0, -30]
719 });
720
721 for (const ruta in route) {
722 var stretch = route[ruta];
723
724 var name = stretch.name;
725 var nameArray = name.split("-");
726 var coordinates = stretch.coordinates;
727 var distance =''+ stretch.distance;
728 var isStrechAlternative = stretch.isAlternative;
729 var lineStyle = stretch.lineStyle || { color: '#3c3be3', opacity: 1 };
730 var startCoordinates = stretch.start.split(",");
731 var endCoordinates = stretch.end.split(",");
732
733 var track_node = A.Node.create('<div class="route-resume-track ' + (ruta==1?'route-resume-track-first':'') + '"><a class="route-resume-track-link" href="#track-'+(ruta)+'"></a></div>');
734 var track_size = ((distance/totalDistance*100) + '%');
735 track_node.setStyles({width: track_size, backgroundColor: '#' + colorSeries[colorSeriesSelector]});
736 track_node.appendTo(A.one('.route-resume-tracks'));
737
738
739 if(distance)
740 A.one('.template .route-'+ ruta + ' .route-distance').text(distance.replace(".",",") + ' Kms');
741
742 if(!isStrechAlternative)
743 generalDistance = generalDistance + stretch.distance;
744
745 if(Object.keys(route).length == 1){
746 A.one('.route-resume-track-marker-first .route-point-text').text(nameArray[0]);
747 A.one('.route-resume-track-marker-last .route-km-text').text('Km ' + distance.replace(".",","));
748 A.one('.route-resume-track-marker-last .route-point-text').text(nameArray[nameArray.length-1]);
749 startMarker = L.marker([startCoordinates[0],startCoordinates[1]], {icon: startIcon}).bindPopup(nameArray[0]).addTo(mapContent);
750 endMarker = L.marker([endCoordinates[0],endCoordinates[1]], {icon: endIcon}).bindPopup(nameArray.length-1).addTo(mapContent);
751 }
752 else{
753 var track_point =A.Node.create('<div class="route-resume-point"></div>');
754 if(ruta==1){
755 A.one('.route-resume-track-marker-first .route-point-text').text(nameArray[0]);
756 var track_point_text = A.Node.create('<div class="route-point-text">' + nameArray[1] + '</div><div class="route-km-text">Km '+distance+'</div>');
757 startMarker = L.marker([startCoordinates[0],startCoordinates[1]], {icon: startIcon}).bindPopup(nameArray[0]).addTo(mapContent);
758
759 if(ruta == Object.keys(route).length-1 && route[Object.keys(route).length].isAlternative)
760 endMarker = L.marker([endCoordinates[0],endCoordinates[1]], {icon: endIcon}).bindPopup(nameArray.length-1).addTo(mapContent);
761 else
762 middleMarker = L.marker([endCoordinates[0],endCoordinates[1]], {icon: middleIcon}).bindPopup(nameArray.length-1).addTo(mapContent);
763
764 track_point_text.appendTo(track_point);
765 track_point.appendTo(A.one('.route-resume-tracks'));
766 }
767 else if(ruta == Object.keys(route).length){
768 A.one('.route-resume-track-marker-last .route-km-text').text('Km ' + distance.replace(".",","));
769 A.one('.route-resume-track-marker-last .route-point-text').text(nameArray[nameArray.length-1]);
770
771 if(isStrechAlternative){
772 middleMarker = L.marker([endCoordinates[0],endCoordinates[1]], {icon: middleIcon}).bindPopup(nameArray[nameArray.length-1]).addTo(mapContent);
773 var alternativetrack_node = A.Node.create('<li class="article-list-item distance-wrapper"><span class="fas fa-ruler-horizontal"><span class="hide-accessible"> ${languageUtil.get(request, "infoasturias-tramo-alternativo")}</span></span><span class="field-wrapper"><span class="field">${languageUtil.get(request, "infoasturias-tramo-alternativo")}: </span><span class="text btn btn-secondary btn-thin text-lowercase"><span class="font-size-11 text-white text-distance-alternative">'+distance +'</span> kms</span></span></li>');
774 alternativetrack_node.appendTo(A.one('.template .info-route'));
775 }
776 else{
777 endMarker = L.marker([endCoordinates[0],endCoordinates[1]], {icon: endIcon}).bindPopup(nameArray[nameArray.length-1]).addTo(mapContent);
778 }
779 }
780 else{
781 var track_point_text = A.Node.create('<div class="route-point-text">' + nameArray[nameArray.length-1] + '</div><div class="route-km-text">Km '+distance+'</div>');
782 track_point_text.appendTo(track_point);
783 track_point.appendTo(A.one('.route-resume-tracks'));
784 middleMarker = L.marker([startCoordinates[0],startCoordinates[1]], {icon: middleIcon}).bindPopup(nameArray[0]).addTo(mapContent);
785 }
786 }
787
788 var polyline = new L.Polyline(coordinates, {
789 color: '' + lineStyle.color,
790 opacity: lineStyle.opacity
791 });
792 polyline.bindPopup(name).addTo(mapContent);
793
794
795 colorSeriesSelector++;
796 if(colorSeriesSelector == 3)
797 colorSeriesSelector = 0;
798
799 }//fin rutas
800
801 if(generalDistance)
802 A.one('.template .text-distance').text(''+ Math.round(generalDistance * 100) / 100);
803
804 //Contributor
805 L.tileLayer('https://{s}.tile.openstreetmap.org/{z}/{x}/{y}.png', {
806 attribution: '© <a href="https://www.openstreetmap.org/copyright">OpenStreetMap</a> contributors.'
807 }).addTo(mapContent);
808
809 }); //AUI.ready
810 </script>
811 </div>
812 <#if validator.isNotNull(dlFileEntryKML) && tipoRuta!="coche">
813
814 <#assign params = {
815 "displayStyle":"ddmTemplate_435797",
816 "displayStyleGroupId":"${themeDisplay.getCompanyGroupId()}",
817 "portletId": portletTool.getPortletId(request),
818 "articleId":"${articleId}",
819 "dlFileEntryuuId":"${dlFileEntryKML.getUuid()}"
820 }>
821 <#assign portletURL = portletTool.createURL(request, "as_asac_adtvisor_portlet_AdtVisorDialogPortlet", themeDisplay.getPlid(), "RENDER_PHASE", "pop_up", params) />
822 <div class="button-row button-row-center my-3">
823 <button type="button" class="btn btn-primary btn-small text-center text-uppercase" onclick="event.preventDefault(); showDialogIframe('${portletURL}','${languageUtil.get(request,'profile')}', '800px', '','elevationProfile', 'elevationProfileIframe');">
824 ${languageUtil.get(request,'infoasturias-ver-perfil-elevacion')}
825 </button>
826 </div>
827
828 </#if>
829 </div>
830 </div>
831 <#assign showFirstTab = false>
832 </#if>
833
834 <#if hasTab4>
835 <div id="tab4" class="article-section accordion-item hide">
836 <a href="#tabContent4" id="tabHeading4" class=" tab <#if !showFirstTab>collapsed</#if>" aria-expanded="${getterUtil.getString(showFirstTab)}" data-toggle="liferay-collapse" aria-controls="tabContent4" role="button"><h3 class="h3 accordion-header">${languageUtil.get(request,'infoasturias-itinerario')}</h3></a>
837 <div id="tabContent4" class="article-section-content article-section-color article-section-background accordion-collapse collapse <#if showFirstTab>show</#if>" aria-labelledby="tabHeading4">
838 <#list Informacion.Itinerario.getSiblings() as Item>
839 <#if Item.data?has_content>
840 <div class=" itinerario <#if !Item?is_last>pb-5</#if>"><p>${Item.data}</p></div>
841 </#if>
842 </#list>
843 </div>
844 </div>
845 <#assign showFirstTab = false>
846 </#if>
847
848 <#if hasTab5>
849 <div id="tab5" class="article-section accordion-item">
850 <a href="#tabContent5" id="tabHeading5" class="tab <#if !showFirstTab>collapsed</#if>" aria-expanded="${getterUtil.getString(showFirstTab)}" data-toggle="liferay-collapse" aria-controls="tabContent5" role="button"><h3 class="h3 accordion-header">${languageUtil.get(request,'detail')}</h3></a>
851 <div id="tabContent5" class="article-section-content article-section-color article-section-background accordion-collapse collapse <#if showFirstTab>show</#if>" aria-labelledby="tabHeading5">
852 <#assign htmlGallery = journalTool.getHTMLGallery(Detalle.DetalleImagen.getSiblings(), 3, "gallery-thumbs") />
853
854 <#if Detalle.DetalleTexto.data?has_content>
855 ${Detalle.DetalleTexto.data}
856 </#if>
857
858 <#if validator.isNotNull(htmlGallery)>
859 <section class="image-gallery">
860 <h4 class="h4 pb-0">${languageUtil.get(locale, "image-gallery")}</h4>
861 ${htmlGallery}
862 </section>
863 </#if>
864 </div>
865 </div>
866 <#assign showFirstTab = false>
867 </#if>
868 </div>
869 <#if Informacion.Observaciones.data?has_content>
870 <div class="article-border">
871 ${Informacion.Observaciones.data}
872 </div>
873 </#if>
874 </div>
875
876 <#-- Related -->
877 <#assign relatedJournalArticles = assetTool.getRelatedJournalArticlesApproved(assetEntry)/>
878 <#if validator.isNotNull(relatedJournalArticles) && relatedJournalArticles?size gt 0>
879 <div class="article-related portlet-background-grey-container">
880 <div class="container">
881 <h3 class="title-section">${languageUtil.get(request,'related-assets')}</h3>
882 <div class="slick article-related-slick">
883 <#list relatedJournalArticles as currentJournalArticle>
884 <#assign viewURL = journalTool.getDisplayPage(currentJournalArticle, themeDisplay, true)/>
885 <div class="slide">
886 <a class="card background card-background-9-14" href="${viewURL}" title="${languageUtil.format(request, 'go-to-x', currentJournalArticle.getTitle(locale))}">
887 <span class="d-block image-wrapper aspect-ratio-bg-cover" style="background-image: url('${currentJournalArticle.getSmallImageURL()}');">
888 <img class="hide-accessible" src="${currentJournalArticle.getSmallImageURL()}" alt="${currentJournalArticle.getTitle(locale)}">
889 <span class="card-body">
890 <span class="card-title">${currentJournalArticle.getTitle(locale)}</span>
891 </span>
892 </span>
893 </a>
894 </div>
895 </#list>
896 </div>
897 </div>
898 </div>
899 </#if>
900
901 <#-- Nearby -->
902 <#assign classTypeIds = [598853,582814,625593,623117,609431,593783]>
903 <#assign assetsNearJournalArticles = assetNearTool.getNearJournalArticles(themeDisplay.getScopeGroupId(), assetEntry.getEntryId(), 50.0, classTypeIds, 25)! />
904 <#if validator.isNotNull(assetsNearJournalArticles) && assetsNearJournalArticles?size gt 0>
905 <div class="article-nearby portlet-container-margin">
906 <div class="container">
907 <div class="article-nearby-container">
908 <h3 class="title-section">${languageUtil.get(request,'infoasturias-near-here')}</h3>
909 <div class="slick article-nearby-slick">
910 <#list assetsNearJournalArticles as currentJournalArticle>
911 <#assign viewURL = journalTool.getDisplayPage(currentJournalArticle, themeDisplay, true)/>
912 <div class="slide">
913 <a class="card" href="${viewURL}" title="${languageUtil.format(request, 'go-to-x', currentJournalArticle.getTitle(locale))}">
914 <span class="d-block image-wrapper aspect-ratio-bg-cover aspect-ratio-4-to-3" style="background-image: url('${currentJournalArticle.getSmallImageURL()}');">
915 <img class="hide-accessible" src="${currentJournalArticle.getSmallImageURL()}" alt="${currentJournalArticle.getTitle(locale)}">
916 <span class="card-hover">
917 <span class="card-text">${currentJournalArticle.getDescription(locale)}</span>
918 </span>
919 </span>
920 <span class="card-body">
921 <span class="card-title">${currentJournalArticle.getTitle(locale)}</span>
922 <span class="card-subtitle">
923 <span class="d-block">${currentJournalArticle.getVersion()} Kms</span>
924 <span class="d-block">${journalTool.getCategoriesNames(groupId, currentJournalArticle.getArticleId(), locale, ["Concejos"])}</span>
925 </span>
926 </span>
927 </a>
928 </div>
929 </#list>
930 </div>
931 </div>
932 </div>
933 </div>
934 </#if>
935</article>