Horta-Guinardó
Descubre el distrito de Horta-Guinardó a través de su agua
Formado por colinas y con más de 171.932 habitantes, Horta-Guinardó es el tercer distrito en extensión. Su carácter residencial hace que el comercio de proximidad sea la actividad principal.
El Hospital de la Santa Creu i Sant Pau tiene su origen en el Hospital de la Santa Creu del 1401, que se tuvo que trasladar del centro a este distrito.
El agua en cifras
Cifras correspondientes a 2022
Horta-Guinardó en directo
Memoria del Agua
Descubre datos históricos y otras curiosidades del agua de Horta-Guinardó.
DATOS HISTÓRICOS
El antiguo municipio de Horta creció fuertemente a partir del siglo XVIII por la proximidad de fuentes de agua provenientes de Collserola y que permitieron la creación de varios lavaderos.
CURIOSIDADES
La Casa de les Altures es la actual sede del distrito, y fue construida en 1890 por Aigües de Barcelona como vivienda anexa a unas instalaciones que servían para bombear agua.
Se ha producido un error al procesar la plantilla.
Syntax error in template "20099#20135#2451330" in line 406, column 17: Encountered "/", but was expecting one of: <STRING_LITERAL> <RAW_STRING> <ID>
1<#assign
2 articlesStructureKey = "1892944"
3 articlesStatus = 0
4 articlesGroupId = 20126
5/>
6
7<style>
8 .ag-hr {
9 width: 100%!important;
10 height: unset!important;
11 margin-top: unset!important;
12 margin-bottom: unset!important;
13 border-bottom: .75px solid #757575!important;
14 }
15
16 .ag-bab-events-title {
17 font-family: "Raleway Bold";
18 font-size: 22px;
19 color: #194F6D;
20 }
21
22 .ag-bab-events-subtitle {
23 font-family: Raleway;
24 font-size: 20px;
25 color: #194F6D;
26 }
27
28 .ag-content-container-event-image {
29 background-size: cover;
30 padding-bottom: 56.25%;
31 }
32
33 .ag-content-container-event-image-overflow {
34 width: 50%;
35 height: 37%;
36 float: left;
37 z-index: 10;
38 background-color: #FFF;
39 padding: 5px;
40 color: #000;
41 font-weight: bold;
42 }
43
44 .ag-content-container-event-image-overflow {
45 width: 265px!important;
46 height: 85px!important;
47 }
48
49 div.ag-city-container,
50 div.ag-address-container {
51 height: 20px;
52 }
53
54 div.ag-content-container-event-image-overflow span.ag-city,
55 div.ag-content-container-event-image-overflow span.ag-address,
56 div.ag-content-container-event-image-overflow span.ag-date {
57 font-size: 0.7rem;
58 color: #00205a;
59
60 /* truncate */
61 white-space: nowrap;
62 overflow: hidden;
63 text-overflow: ellipsis;
64 }
65
66 .ag-content-container-event-image-overflow span.ag-city {
67 font-family: "Raleway Light"!important;
68 font-size: 14px!important;
69 color: #00205A!important;
70 text-decoration: none!important;
71 }
72
73 .ag-content-container-event-image-overflow span.ag-address,
74 .ag-content-container-event-image-overflow span.ag-date {
75 font-family: "Raleway Medium"!important;
76 font-style: italic!important;
77 font-size: 16px!important;
78 color: #00205A!important;
79 text-decoration: none!important;
80 }
81
82 .ag-content-container-event-image-overflow span.ag-address {
83 padding-right: 5px!important;
84 max-width: 230px!important;
85 width: unset!important;
86 }
87
88 div.ag-content-container-event-image-overflow span.ag-city, div.ag-content-container-event-image-overflow span.ag-date {
89 max-width: 230px!important;
90 width: unset!important;
91 padding-right: 3px;
92 }
93
94 .ag-list-event-title-container {
95 margin-top: 15px;
96 }
97
98 .ag-list-event-moreinfo-container {
99 margin-top: 10px;
100 }
101
102 .ag-list-event-title {
103 font-family: "Raleway Bold";
104 font-size: 18px;
105 color: #194F6D;
106 }
107
108 a.ag-list-event-moreinfo {
109 font-family: "Raleway bold";
110 font-size: 14px;
111 color: #009FE3;
112 }
113
114 .ag-icon-pin {
115 width: 12px;
116 margin-top: -18px;
117 }
118
119 .ag-list-icon-share,
120 .ag-list-icon-share-fullwidth {
121 width: 15px;
122 }
123
124 .ag-list-event-share-container {
125 text-align:right;
126 }
127
128 .ag-social-share-options,
129 .ag-social-share-options-fullwidth {
130 border: 1px solid #e7e7ed;
131 font-size: 0.875rem;
132 position: absolute;
133 width: 240px;
134 right: 0;
135 background-color: #FFF;
136 border-radius: 0.25rem;
137 box-shadow: 0 1px 10px -3px rgba(0, 0, 0, 0.3);
138 z-index: 999;
139 }
140
141 .ag-social-share-options-fullwidth {
142 bottom: -115px;
143 }
144
145 .ag-social-share-options ul {
146 padding-left: 0;
147 list-style: none;
148 margin-top: 0;
149 margin-bottom: 0;
150 }
151
152 .journal-content-article li:before {
153 background-image: none!important;
154 }
155
156 .ag-social-share-options ul li a {
157 font-family: "Raleway Medium";
158 text-align: center;
159 overflow: hidden;
160 position: relative;
161 white-space: normal;
162 display: block;
163 width: 100%;
164 padding: 0.5rem 1.25rem;
165 clear: both;
166 font-weight: 400;
167 color: #6B6C7E;
168 background-color: transparent;
169 border: 0;
170 }
171
172 .slick-slide img {
173 display: unset;
174 }
175
176 div#ag-bab-slider .slick-list {
177 overflow: unset!important;
178 overflow-y: initial!important;
179 overflow-x: clip!important;
180 }
181
182 div#ag-bab-slider ul.slick-dots {
183 position: relative;
184 bottom: 0;
185 }
186
187 @media screen and (max-width: 667px) {
188 div.container {
189 max-width: 100%;
190 overflow-x: clip;
191 }
192 }
193
194 .ag-truncate-multiline-2 {
195 display: -webkit-box;
196 -webkit-line-clamp: 2;
197 -webkit-box-orient: vertical;
198 overflow: hidden;
199 }
200</style>
201
202
203
204<#if serviceLocator?? >
205 <#assign
206 selectedLanguageId = themeDisplay.getLanguageId()
207
208 journalArticleLocalService = serviceLocator.findService("com.liferay.journal.service.JournalArticleLocalService")
209 articles = journalArticleLocalService.getStructureArticles(articlesGroupId, articlesStructureKey)
210
211 jsonFactoryUtil = serviceLocator.findService("com.liferay.portal.kernel.json.JSONFactoryUtil")
212 portletFileRepositoryUtil = serviceLocator.findService("com.liferay.portal.kernel.portletfilerepository.PortletFileRepositoryUtil")
213
214 articlesIds = []
215 articlesBarcelona = []
216 />
217
218 <#list articles as article >
219 <#if !article.isInTrash() && !article.isDraft() >
220 <#assign
221 articleId = article.getArticleId()
222 />
223
224 <#if articleId != "" && !article.isInTrash() && !article.isDraft() && !articlesIds?seq_contains(articleId) >
225 <#assign articlesIds = articlesIds + [ articleId ] />
226 </#if>
227
228 <#assign
229 articleLastVersionNum = journalArticleLocalService.getLatestVersion(articlesGroupId, articleId, articlesStatus)
230 articleLastVersion = journalArticleLocalService.getArticle(articlesGroupId, articleId, articleLastVersionNum)
231 document = saxReaderUtil.read(articleLastVersion.getContent())
232 eventCity = document.valueOf("//dynamic-element[@name='city']/dynamic-content/text()")
233 eventDistrict = document.valueOf("//dynamic-element[@name='district']/dynamic-content/text()")
234 />
235
236 <#if eventCity?? && eventCity == "2" >
237 <#if articleId != "" && !article.isInTrash() && !article.isDraft() && !articlesBarcelona?seq_contains(articleId) >
238 <#assign articlesBarcelona = articlesBarcelona + [ articleId ] />
239 </#if>
240 </#if>
241 </#if>
242 </#list>
243
244 <#-- We get the Json for all the articles -->
245 <#assign
246 eventsJson = "["
247 eventsBarcelonaJson = "["
248 />
249
250 <#list articlesIds as articleId >
251 <#assign
252 lastVersion = journalArticleLocalService.getLatestVersion(articlesGroupId, articleId, articlesStatus)
253 article = journalArticleLocalService.getArticle(articlesGroupId, articleId, lastVersion)
254 articleLastVersionNum = journalArticleLocalService.getLatestVersion(articlesGroupId, articleId, articlesStatus)
255 articleLastVersion = journalArticleLocalService.getArticle(articlesGroupId, articleId, articleLastVersionNum)
256
257 document = saxReaderUtil.read(articleLastVersion.getContent())
258 eventTitleCat = document.valueOf("//dynamic-element[@name='title']/dynamic-content[@language-id='ca_ES']/text()")
259 eventTitleEsp = document.valueOf("//dynamic-element[@name='title']/dynamic-content[@language-id='es_ES']/text()")
260 eventTitleCatSanitized = eventTitleCat?replace("(\n)+", " ",'r')
261 eventTitleCatSanitized = eventTitleCatSanitized?replace('<[^>]+>','','r')
262 eventTitleCatSanitized = eventTitleCatSanitized?js_string
263 eventTitleEspSanitized = eventTitleEsp?replace("(\n)+", " ",'r')
264 eventTitleEspSanitized = eventTitleEspSanitized?replace('<[^>]+>','','r')
265 eventTitleEspSanitized = eventTitleEspSanitized?js_string
266 eventContent = document.valueOf("//dynamic-element[@name='content']/dynamic-content[@language-id='${selectedLanguageId}']/text()")
267 eventContentSanitized = eventContent?replace("(\n)+", " ",'r')
268 eventContentSanitized = eventContentSanitized?replace('<[^>]+>','','r')
269 eventContentSanitized = eventContentSanitized?js_string
270 eventDates = document.selectNodes( "//dynamic-element[@name='date_begin']")
271 eventDateBegin = document.valueOf("//dynamic-element[@name='date_begin']/dynamic-content/text()")
272 eventDateEnd = document.valueOf("//dynamic-element[@name='date_end']/dynamic-content/text()")
273 eventAddressCat = document.valueOf("//dynamic-element[@name='address']/dynamic-content[@language-id='ca_ES']/text()")
274 eventAddressEsp = document.valueOf("//dynamic-element[@name='address']/dynamic-content[@language-id='es_ES']/text()")
275 eventAddressCatSanitized = eventAddressCat?replace("(\n)+", " ",'r')
276 eventAddressCatSanitized = eventAddressCatSanitized?replace('<[^>]+>','','r')
277 eventAddressCatSanitized = eventAddressCatSanitized?js_string
278 eventAddressEspSanitized = eventAddressEsp?replace("(\n)+", " ",'r')
279 eventAddressEspSanitized = eventAddressEspSanitized?replace('<[^>]+>','','r')
280 eventAddressEspSanitized = eventAddressEspSanitized?js_string
281 eventCityFinal = 0
282 eventCities = document.selectNodes( "//dynamic-element[@name='city']")
283 eventCity = document.valueOf("//dynamic-element[@name='city']/dynamic-content/text()")
284 eventDistrictFinal = 0
285 eventDistricts = document.selectNodes( "//dynamic-element[@name='district']")
286 eventDistrict = document.valueOf("//dynamic-element[@name='district']/dynamic-content/text()")
287
288 eventSliderImgs = document.valueOf("//dynamic-element[@name='slider_image']")
289 eventSliderImgsCount = eventSliderImgs?split("fileEntryId")?size - 1
290
291 eventListImgs = document.valueOf("//dynamic-element[@name='list_image']")
292 eventListImgsCount = eventListImgs?split("fileEntryId")?size - 1
293
294 eventDatesJson = "["
295 eventCitiesJson = "["
296 eventDistrictsJson = "["
297 />
298
299 <#list eventDates as eventDate>
300 <#if eventDate.valueOf( "dynamic-content")??>
301 <#assign
302 eventDateBegin = eventDate.valueOf( "dynamic-content")?trim
303 eventDateEnd = eventDate.valueOf("dynamic-element[@name='date_end']/dynamic-content/text()")?trim
304 eventDateJson = '{
305 "dateBegin": "${eventDateBegin}",
306 "dateEnd": "${eventDateEnd}"
307 }'
308 />
309
310 <#if eventDate?has_next >
311 <#assign eventDateJson = eventDateJson + ',' >
312 </#if>
313
314 <#assign eventDatesJson = eventDatesJson + eventDateJson >
315 </#if>
316 </#list>
317
318 <#list eventCities as eventCity>
319 <#if eventCity.valueOf("dynamic-content")??>
320
321 <#assign
322 eventCityValue = eventCity.valueOf("dynamic-content")?trim
323 />
324
325 <#assign eventCitiesJson = eventCitiesJson + eventCityValue >
326
327 <#if eventCity?has_next >
328 <#assign eventCitiesJson = eventCitiesJson + ',' >
329 </#if>
330 </#if>
331 </#list>
332
333 <#list eventDistricts as eventDistrict>
334 <#if eventDistrict.valueOf("dynamic-content")??>
335
336 <#assign
337 eventDistrictValue = eventDistrict.valueOf("dynamic-content")?trim
338 />
339
340 <#assign eventDistrictsJson = eventDistrictsJson + eventDistrictValue >
341
342 <#if eventDistrict?has_next >
343 <#assign eventDistrictsJson = eventDistrictsJson + ',' >
344 </#if>
345 </#if>
346 </#list>
347
348 <#assign
349 eventDatesJson = eventDatesJson + "]"
350 eventCitiesJson = eventCitiesJson + "]"
351 eventDistrictsJson = eventDistrictsJson + "]"
352 />
353
354 <#if eventSliderImgsCount == 2 > <#-- We get the image in the right language -->
355 <#assign
356 eventSliderImg = document.valueOf("//dynamic-element[@name='slider_image']/dynamic-content[@language-id='${selectedLanguageId}']/text()")
357 />
358 <#elseif eventSliderImgsCount == 1> <#-- We get the unlocalized image -->
359 <#assign
360 eventSliderImg = document.valueOf("//dynamic-element[@name='slider_image']/dynamic-content/text()")
361 />
362 </#if>
363
364 <#assign
365 jsonObjectSliderImg = jsonFactoryUtil.createJSONObject(eventSliderImg)
366 fileEntryIdSliderImg = jsonObjectSliderImg.getLong("fileEntryId")
367 fileEntrySliderImg = ""
368 eventSliderImgPath = ""
369 eventListImg = ""
370 />
371
372 <#if eventListImgsCount == 2 > <#-- We get the image in the right language -->
373 <#assign
374 eventListImg = document.valueOf("//dynamic-element[@name='list_image']/dynamic-content[@language-id='${selectedLanguageId}']/text()")
375 />
376 <#elseif eventListImgsCount == 1> <#-- We get the unlocalized image -->
377 <#assign
378 eventListImg = document.valueOf("//dynamic-element[@name='list_image']/dynamic-content/text()")
379 />
380 </#if>
381
382 <#assign
383 jsonObjectListImg = jsonFactoryUtil.createJSONObject(eventListImg)
384 fileEntryIdListImg = jsonObjectListImg.getLong("fileEntryId")
385 fileEntryListImg = ""
386 eventListImgPath = ""
387 />
388
389 <#if eventCity != "" >
390 <#assign eventCityFinal = eventCity >
391 </#if>
392
393 <#if eventDistrict != "" >
394 <#assign eventDistrictFinal = eventDistrict >
395 </#if>
396
397 <#if fileEntryIdSliderImg != 0 >
398 <#assign
399 fileEntrySliderImg = portletFileRepositoryUtil.getPortletFileEntry(fileEntryIdSliderImg)
400 eventSliderImgPath = portletFileRepositoryUtil.getPortletFileEntryURL(themeDisplay, fileEntrySliderImg.getLatestFileVersion(true).getFileEntry(), "", true)
401 >
402 </#if>
403
404 <#if fileEntryIdListImg != 0 >
405 <#assign
406 //fileEntryListImg = portletFileRepositoryUtil.getPortletFileEntry(fileEntryIdListImg)
407 //eventListImgPath = portletFileRepositoryUtil.getPortletFileEntryURL(themeDisplay, fileEntryListImg.getLatestFileVersion(true).getFileEntry(), "", true)
408 >
409 </#if>
410
411 <#assign
412 eventTitle = '{
413 "ca_ES": "${eventTitleCatSanitized}",
414 "es_ES": "${eventTitleEspSanitized}"
415 }'
416
417 eventAddress = '{
418 "ca_ES": "${eventAddressCatSanitized}",
419 "es_ES": "${eventAddressEspSanitized}"
420 }'
421 />
422
423 <#assign eventJson = '{
424 "id": ${articleId},
425 "title": ${eventTitle},
426 "content": "${eventContentSanitized}",
427 "dateBegin": "${eventDateBegin}",
428 "dateEnd": "${eventDateEnd}",
429 "dates": ${eventDatesJson},
430 "address": ${eventAddress},
431 "city": ${eventCityFinal},
432 "cities": ${eventCitiesJson},
433 "district": ${eventDistrictFinal},
434 "districts": ${eventDistrictsJson},
435 "sliderImgPath": "${eventSliderImgPath}",
436 "listImgPath": "${eventListImgPath}"
437 }' >
438
439 <#assign eventsJson = eventsJson + eventJson >
440
441 <#if eventCity == "2" >
442 <#assign eventsBarcelonaJson = eventsBarcelonaJson + eventJson >
443 <#assign eventsBarcelonaJson = eventsBarcelonaJson + ',' >
444 </#if>
445
446 <#if articleId?has_next >
447 <#assign eventsJson = eventsJson + ',' >
448 </#if>
449
450 </#list>
451
452 <#assign
453 eventsJson = eventsJson + "]"
454 eventsBarcelonaJson = eventsBarcelonaJson + "]"
455 />
456</#if>
457
458
459<div class="container" id="ag-bab-slider-info">
460 <div class="row mb-4">
461 <div class="col-12">
462 <hr class="bab-hr">
463 </div>
464 </div>
465 <div class="row">
466 <div class="col-12">
467 <span class="ag-bab-events-title" id="ag-bab-events-title">
468 </span>
469 <span class="ag-bab-events-subtitle" id="ag-bab-events-subtitle">
470 </span>
471 </div>
472 </div>
473</div>
474
475<div class="ag-bab-slider mt-4" id="ag-bab-slider">
476</div>
477
478<div style="margin-bottom: 100px">
479</div>
480
481<script>
482 function getCityNameByID(cityID) {
483 var cityName = "";
484
485 switch (cityID) {
486 case 1:
487 cityName = "Badalona";
488 break;
489
490 case 2:
491 cityName = "Barcelona";
492 break;
493
494 case 3:
495 cityName = "Begues";
496 break;
497
498 case 4:
499 cityName = "Castelldefels";
500 break;
501
502 case 5:
503 cityName = "Cerdanyola del Vallès";
504 break;
505
506 case 6:
507 cityName = "Cornellà de Llobregat";
508 break;
509
510 case 7:
511 cityName = "El Papiol";
512 break;
513
514 case 8:
515 cityName = "Esplugues de Llobregat";
516 break;
517
518 case 9:
519 cityName = "Gavà";
520 break;
521
522 case 10:
523 cityName = "L’Hospitalet de Llobregat";
524 break;
525
526 case 11:
527 cityName = "Montcada i Reixac";
528 break;
529
530 case 12:
531 cityName = "Montgat";
532 break;
533
534 case 13:
535 cityName = "Pallejà";
536 break;
537
538 case 14:
539 cityName = "Sant Adrià de Besòs";
540 break;
541
542 case 15:
543 cityName = "Sant Boi de Llobregat";
544 break;
545
546 case 16:
547 cityName = "Sant Climent de Llobregat";
548 break;
549
550 case 17:
551 cityName = "Sant Feliu de Llobregat";
552 break;
553
554 case 18:
555 cityName = "Sant Joan Despí";
556 break;
557
558 case 19:
559 cityName = "Sant Just Desvern";
560 break;
561
562 case 20:
563 cityName = "Santa Coloma de Cervelló";
564 break;
565
566 case 21:
567 cityName = "Santa Coloma de Gramenet";
568 break;
569
570 case 22:
571 cityName = "Torrelles de Llobregat";
572 break;
573
574 case 23:
575 cityName = "Viladecans";
576 break;
577 }
578
579 return cityName;
580 }
581
582 function getDistrictNameByID(districtID) {
583 var districtName = "";
584
585 switch (districtID) {
586 case 1:
587 districtName = "Ciutat Vella";
588 break;
589
590 case 2:
591 districtName = "Eixample";
592 break;
593
594 case 3:
595 districtName = "Gràcia";
596 break;
597
598 case 4:
599 districtName = "Horta - Guinardó";
600 break;
601
602 case 5:
603 districtName = "Les Corts";
604 break;
605
606 case 6:
607 districtName = "Nou Barris";
608 break;
609
610 case 7:
611 districtName = "Sant Andreu";
612 break;
613
614 case 8:
615 districtName = "Sant Martí";
616 break;
617
618 case 9:
619 districtName = "Sants - Montjuïc";
620 break;
621
622 case 10:
623 districtName = "Sarrià - Sant Gervasi";
624 break;
625 }
626
627 return districtName;
628 }
629
630 function initSlider(events, showDots) {
631 $(function () {
632 $("#ag-bab-slider").slick({
633 dots: showDots,
634 arrows: false,
635 focusOnSelect: true,
636 autoplay: true,
637 autoplaySpeed: 5000,
638 adaptiveHeight: true
639 });
640 });
641 }
642
643 function getSliderEvents() {
644 var sliderEvents = [];
645
646 if (eventsByPlace.length > 0) { // If there are events for the current place
647 sliderEvents = eventsByPlace;
648 } else if (eventsBarcelona.length > 0) { // If there aren't events for the current place but there are for Barcelona
649 sliderEvents = eventsBarcelona;
650 }
651
652 return sliderEvents;
653 }
654
655 function getSliderEventsHTML() {
656 var sliderEventsHTML = "";
657
658 for (var counter = 0; counter < sliderEvents.length; counter++) {
659 sliderEventsHTML += getSliderEventHTML(sliderEvents[counter]);
660 }
661
662 return sliderEventsHTML;
663 }
664
665 function getEventsByPlace(placeType, placeID) {
666 var eventsByPlace = [];
667
668 for (var counter = 0; counter < allEvents.length; counter++) {
669 var event = allEvents[counter];
670
671 if (showOnlyFutureEvents && eventIsOver(event)) {
672 continue;
673 }
674
675 if (placeType === "city" && event.hasOwnProperty("cities") && Array.isArray(event.cities) && event.cities.includes(placeID)) {
676 eventsByPlace.push(event);
677 } else if (placeType === "district" && event.hasOwnProperty("districts") && Array.isArray(event.districts) && event.districts.includes(placeID)) {
678 eventsByPlace.push(event);
679 }
680 }
681
682 return eventsByPlace;
683 }
684
685 function getEventsBarcelona() {
686 var eventsBarcelona = [];
687
688 for (var counter = 0; counter < allEvents.length; counter++) {
689 var event = allEvents[counter];
690
691 if (showOnlyFutureEvents && eventIsOver(event)) {
692 continue;
693 }
694
695 if ((event.hasOwnProperty("cities") && Array.isArray(event.cities) && event.cities.includes(2)) ||
696 (event.hasOwnProperty("districts") && Array.isArray(event.districts) && event.districts.length > 0) ) {
697 eventsBarcelona.push(event);
698 }
699 }
700
701 return eventsBarcelona;
702 }
703
704 function eventIsOver(event) {
705 var eventIsOver = false;
706 var currentDate = new Date();
707
708 if (!event.hasOwnProperty("dates") || event.dates.length === 0) {
709 return eventIsOver;
710 }
711
712 // If event has only one date
713 if (event.dates.length === 1) {
714 if (dateHasEnd(event.dates[0])) {
715 var dateBegin = Date.parse(event.dates[0].dateBegin);
716 var dateEnd = Date.parse(event.dates[0].dateEnd);
717
718 var dateToCompare = dateBegin;
719 if (dateBegin < dateEnd) {
720 dateToCompare = dateEnd;
721 }
722
723 if (dateToCompare < currentDate) {
724 eventIsOver = true;
725 }
726 }
727 }
728
729 // If event has more than one date
730 if (event.dates.length > 1) {
731 if (!eventHasAtLeastOneCurrentOrFutureDate(event)) {
732 eventIsOver = true;
733 }
734 }
735
736 return eventIsOver;
737 }
738
739 function eventHasAtLeastOneCurrentOrFutureDate(event) {
740 var eventHasAtLeastOneCurrentOrFutureDate = false;
741 var currentDate = getCurrentDateParsed();
742
743 for (var counter = 0; counter < event.dates.length; counter++) {
744 var dateBegin = Date.parse(event.dates[counter].dateBegin);
745 var dateToCompare = dateBegin;
746
747 // If current date has only a date begin
748 if (!dateHasEnd(event.dates[counter])) {
749 // If the date begin is equals or greather than the current date
750 if (dateToCompare >= currentDate) {
751 eventHasAtLeastOneCurrentOrFutureDate = true;
752 return eventHasAtLeastOneCurrentOrFutureDate;
753 }
754 }
755
756 if (dateHasEnd(event.dates[counter])) { // If current date has a date end
757 var dateEnd = Date.parse(event.dates[counter].dateEnd);
758
759 if (dateBegin < dateEnd) {
760 dateToCompare = dateEnd;
761 }
762
763 if (dateToCompare >= currentDate) {
764 eventHasAtLeastOneCurrentOrFutureDate = true;
765 return eventHasAtLeastOneCurrentOrFutureDate;
766 }
767 }
768 }
769
770 return eventHasAtLeastOneCurrentOrFutureDate;
771 }
772
773 function getCurrentDateParsed() {
774 var currentDate = new Date();
775 var currentDateYear = currentDate.getFullYear();
776 var currentDateMonth = "" + (currentDate.getMonth() + 1);
777 var currentDateDay = "" + currentDate.getDate();
778 var currentDateString = currentDateYear + "-" + currentDateMonth + "-" + currentDateDay;
779 var currentDateParsed = Date.parse(currentDateString);
780
781 return currentDateParsed;
782 }
783
784 function dateHasEnd(date) {
785 var dateHasEnd = false;
786
787 if (date.hasOwnProperty("dateEnd") && date.dateEnd.length === 10) {
788 dateHasEnd = true;
789 }
790
791 return dateHasEnd;
792 }
793
794 function setSliderEventsHTML(sliderEventsHTML) {
795 $("#ag-bab-slider").html(sliderEventsHTML);
796 }
797
798 function getSliderEventHTML(article) {
799 var sliderEventHTML = sliderComponent;
800
801 sliderEventHTML = sliderEventHTML.replace(/{{id}}/gi, article.id);
802
803 var articleTitle = getSliderEventTitle(article);
804
805 sliderEventHTML = sliderEventHTML.replace(/{{title}}/gi, articleTitle);
806
807 var articleAddress = "";
808 var articleAddressContainer = "";
809
810 if (article.hasOwnProperty("address") && article.address.hasOwnProperty("ca_ES") && article.address.hasOwnProperty("es_ES")) {
811 if (article.address.es_ES !== "" && currentLang === "es_ES") {
812 articleAddress = article.address.es_ES;
813 } else if (article.address.ca_ES !== "" && currentLang === "ca_ES") {
814 articleAddress = article.address.ca_ES;
815 } else if (article.address.ca_ES === "" && article.address.es_ES === "") {
816 articleAddressContainer = "style='display: none'";
817 }
818 }
819
820 var articleListImgPath = getListImgPathByEvent(article);
821 sliderEventHTML = sliderEventHTML.replace(/{{address}}/gi, articleAddress);
822 sliderEventHTML = sliderEventHTML.replace(/{{addressContainer}}/gi, articleAddressContainer);
823 //sliderEventHTML = sliderEventHTML.replace(/{{cityName}}/gi, article.cityName);
824 sliderEventHTML = sliderEventHTML.replace(/{{cityName}}/gi, getCityNameByID(article.city));
825 var date = getDateByEvent(article);
826 sliderEventHTML = sliderEventHTML.replace(/{{date}}/gi, date);
827 sliderEventHTML = sliderEventHTML.replace(/{{image}}/gi, "'" + articleListImgPath + "'");
828 var moreInfoText = getTranslatedString("Més informació");
829 sliderEventHTML = sliderEventHTML.replace(/{{moreInfoText}}/gi, moreInfoText);
830
831 return sliderEventHTML;
832 }
833
834 function getSliderEventTitle(article) {
835 var articleTitle = "";
836 var articleTitleCat = "";
837 var articleTitleEsp = "";
838 if (article.hasOwnProperty("title") && article.title.hasOwnProperty("ca_ES") && article.title.hasOwnProperty("es_ES")) {
839 if (article.title.ca_ES !== "") {
840 articleTitleCat = article.title.ca_ES;
841 }
842
843 if (article.title.es_ES !== "") {
844 articleTitleEsp = article.title.es_ES;
845 }
846
847 if (articleTitleCat !== "" && currentLang === "ca_ES") {
848 articleTitle = articleTitleCat;
849 } else if (articleTitleEsp !== "") {
850 articleTitle = articleTitleEsp;
851 }
852
853 if (articleTitleEsp !== "" && currentLang === "es_ES") {
854 articleTitle = articleTitleEsp;
855 } else if (articleTitleCat !== "") {
856 articleTitle = articleTitleCat;
857 }
858 }
859
860 return articleTitle;
861 }
862
863
864 function setInfoMessage() {
865 var eventsInfoContainerSelector = "#ag-bab-slider-info";
866 var eventsInfoTitleSelector = "#ag-bab-events-title";
867 var eventsInfoSubtitleSelector = "#ag-bab-events-subtitle";
868
869 var eventsInfoTitle = "";
870 var eventsInfoSubtitle = "";
871
872 if (currentPlaceType === "city") {
873 eventsInfoTitle = getTranslatedString("Pròxims esdeveniments prop del teu municipi");
874 } else if (currentPlaceType === "district") {
875 eventsInfoTitle = getTranslatedString("Pròxims esdeveniments prop del teu barri");
876 }
877
878 var showInfoMessage = false;
879 if (eventsByPlace.length === 0 && eventsBarcelona.length === 0) { // If there aren't events for the place nor Barcelona
880 if (currentPlaceType === "city") {
881 eventsInfoSubtitle = getTranslatedString("Actualment, en aquest municipi no hi ha esdeveniments programats.");
882 } else if (currentPlaceType === "district") {
883 eventsInfoSubtitle = getTranslatedString("Actualment, en aquest barri no hi ha esdeveniments programats.");
884 }
885
886 showInfoMessage = true;
887 } else if (eventsByPlace.length === 0 && eventsBarcelona.length > 0) { // If there aren't events for the place but there are for Barcelona
888 eventsInfoSubtitle = getTranslatedString("No hi ha esdeveniments propers. A continuació t’indiquem els pròxims esdeveniments de Barcelona per si et poden interessar.");
889 showInfoMessage = true;
890 }
891
892 $(eventsInfoTitleSelector).html(eventsInfoTitle);
893 $(eventsInfoSubtitleSelector).html(eventsInfoSubtitle);
894
895 if (showInfoMessage) {
896 $(eventsInfoContainerSelector).show();
897 }
898 }
899
900 function getDateByEvent(event) {
901 var dateByEvent = "";
902
903 if (event.hasOwnProperty("dates") && Array.isArray(event.dates) && event.dates.length > 0) {
904 if (event.dates[0].hasOwnProperty("dateBegin") && event.dates[0].dateBegin.length === 10) {
905 dateByEvent = getFormattedDate(event.dates[0].dateBegin);
906 }
907
908 if (event.dates.length > 1) {
909 dateByEvent = getTranslatedString("Diverses dates");
910 }
911
912 if (event.dates.length === 1 && event.dates[0].hasOwnProperty("dateBegin") && event.dates[0].dateBegin.length === 10 && event.dates[0].hasOwnProperty("dateEnd") && event.dates[0].dateEnd.length === 10) {
913 var dateBegin = Date.parse(event.dates[0].dateBegin);
914 var dateEnd = Date.parse(event.dates[0].dateEnd);
915
916 if (dateBegin < dateEnd) {
917 dateByEvent = getFormattedDate(event.dates[0].dateBegin) + " - " + getFormattedDate(event.dates[0].dateEnd);
918 }
919 }
920 }
921
922 return dateByEvent;
923 }
924
925 function getListImgPathByEvent(event) {
926 var listImgPath = "";
927
928 var listImagePath = "";
929 var sliderFirstImagePath = "";
930
931 if (event.hasOwnProperty("listImgPath") && event.listImgPath !== "") {
932 listImagePath = event.listImgPath;
933 }
934
935 if (event.hasOwnProperty("sliderImgPath") && event.sliderImgPath !== "") {
936 sliderFirstImagePath = event.sliderImgPath;
937 }
938
939 if (sliderFirstImagePath !== "") {
940 listImgPath = sliderFirstImagePath;
941 }
942
943 if (listImagePath !== "") {
944 listImgPath = listImagePath;
945 }
946
947 return listImgPath;
948 }
949
950 function getTranslatedString(str) {
951 var translatedString = str;
952
953 if (currentLang === "es_ES") {
954 switch(str.toLowerCase()) {
955 case "més informació":
956 translatedString = "Más información";
957 break;
958
959 case "pròxims esdeveniments prop del teu municipi":
960 translatedString = "Próximos eventos cerca de tu municipio";
961 break;
962
963 case "pròxims esdeveniments prop del teu barri":
964 translatedString = "Próximos eventos cerca de tu barrio";
965 break;
966
967 case "actualment, en aquest barri no hi ha esdeveniments programats.":
968 translatedString = "Actualmente, en este barrio no hay eventos programados.";
969 break;
970
971 case "no hi ha esdeveniments propers. a continuació t’indiquem els pròxims esdeveniments de barcelona per si et poden interessar.":
972 translatedString = "No hay eventos próximos. A continuación te indicamos los próximos eventos de Barcelona por si te pueden interesar.";
973 break;
974
975 case "actualment, en aquest municipi no hi ha esdeveniments programats.":
976 translatedString = "Actualmente, en este municipio no hay eventos programados.";
977 break;
978
979 case "diverses dates":
980 translatedString = "Varias fechas";
981 break;
982
983 }
984 }
985
986 return translatedString;
987 }
988
989 function getPlaceIDFromURL() {
990 var placeIDFromURL = 0;
991
992 var currentURL = getCurrentURL();
993
994 if (currentURL.includes("badalona")) { // Cities
995 placeIDFromURL = 1;
996 } else if (currentURL.includes("begues")) {
997 placeIDFromURL = 3;
998 } else if (currentURL.includes("castelldefels")) {
999 placeIDFromURL = 4;
1000 } else if (currentURL.includes("cerdanyola")) {
1001 placeIDFromURL = 5;
1002 } else if (currentURL.includes("cornella")) {
1003 placeIDFromURL = 6;
1004 } else if (currentURL.includes("papiol")) {
1005 placeIDFromURL = 7;
1006 } else if (currentURL.includes("esplugues")) {
1007 placeIDFromURL = 8;
1008 } else if (currentURL.includes("gava")) {
1009 placeIDFromURL = 9;
1010 } else if (currentURL.includes("hospitalet")) {
1011 placeIDFromURL = 10;
1012 } else if (currentURL.includes("montcada")) {
1013 placeIDFromURL = 11;
1014 } else if (currentURL.includes("montgat")) {
1015 placeIDFromURL = 12;
1016 } else if (currentURL.includes("palleja")) {
1017 placeIDFromURL = 13;
1018 } else if (currentURL.includes("besos")) {
1019 placeIDFromURL = 14;
1020 } else if (currentURL.includes("sant-boi")) {
1021 placeIDFromURL = 15;
1022 } else if (currentURL.includes("climent")) {
1023 placeIDFromURL = 16;
1024 } else if (currentURL.includes("sant-feliu-de-llobregat")) {
1025 placeIDFromURL = 17;
1026 } else if (currentURL.includes("despi")) {
1027 placeIDFromURL = 18;
1028 } else if (currentURL.includes("desvern")) {
1029 placeIDFromURL = 19;
1030 } else if (currentURL.includes("cervello")) {
1031 placeIDFromURL = 20;
1032 } else if (currentURL.includes("gramenet")) {
1033 placeIDFromURL = 21;
1034 } else if (currentURL.includes("torrelles")) {
1035 placeIDFromURL = 22;
1036 } else if (currentURL.includes("viladecans")) {
1037 placeIDFromURL = 23;
1038 } else if (currentURL.includes("ciutat-vella")) { // Districts
1039 placeIDFromURL = 1;
1040 } else if (currentURL.includes("eixample")) {
1041 placeIDFromURL = 2;
1042 } else if (currentURL.includes("gracia")) {
1043 placeIDFromURL = 3;
1044 } else if (currentURL.includes("guinardo")) {
1045 placeIDFromURL = 4;
1046 } else if (currentURL.includes("corts")) {
1047 placeIDFromURL = 5;
1048 } else if (currentURL.includes("barris")) {
1049 placeIDFromURL = 6;
1050 } else if (currentURL.includes("andreu")) {
1051 placeIDFromURL = 7;
1052 } else if (currentURL.includes("marti")) {
1053 placeIDFromURL = 8;
1054 } else if (currentURL.includes("montjuic")) {
1055 placeIDFromURL = 9;
1056 } else if (currentURL.includes("gervasi")) {
1057 placeIDFromURL = 10;
1058 }
1059
1060 return placeIDFromURL;
1061 }
1062
1063 function getCurrentURL() {
1064 var currentURL = window.location.pathname;
1065 currentURL = currentURL.toString().toLowerCase();
1066
1067 return currentURL;
1068 }
1069
1070 function getCurrentPlaceType() {
1071 var currentPlaceType = "";
1072
1073 if (isCurrentPlaceACity()) {
1074 currentPlaceType = "city";
1075 } else if (isCurrentPlaceADistrict()) {
1076 currentPlaceType = "district";
1077 }
1078
1079 return currentPlaceType;
1080 }
1081
1082 function isCurrentPlaceACity() {
1083 var isCurrentPlaceACity = false;
1084
1085 var currentURL = getCurrentURL();
1086
1087 if (
1088 currentURL.includes("badalona") ||
1089 currentURL.includes("begues") ||
1090 currentURL.includes("castelldefels") ||
1091 currentURL.includes("cerdanyola") ||
1092 currentURL.includes("cornella") ||
1093 currentURL.includes("papiol") ||
1094 currentURL.includes("esplugues") ||
1095 currentURL.includes("gava") ||
1096 currentURL.includes("hospitalet") ||
1097 currentURL.includes("montcada") ||
1098 currentURL.includes("montgat") ||
1099 currentURL.includes("palleja") ||
1100 currentURL.includes("besos") ||
1101 currentURL.includes("sant-boi") ||
1102 currentURL.includes("climent") ||
1103 currentURL.includes("sant-feliu-de-llobregat") ||
1104 currentURL.includes("despi") ||
1105 currentURL.includes("desvern") ||
1106 currentURL.includes("cervello") ||
1107 currentURL.includes("gramenet") ||
1108 currentURL.includes("torrelles") ||
1109 currentURL.includes("viladecans")
1110 ) {
1111 isCurrentPlaceACity = true;
1112 }
1113
1114 return isCurrentPlaceACity;
1115 }
1116
1117 function isCurrentPlaceADistrict() {
1118 var isCurrentPlaceADistrict = false;
1119
1120 var currentURL = getCurrentURL();
1121
1122 if (
1123 currentURL.includes("ciutat-vella") ||
1124 currentURL.includes("eixample") ||
1125 currentURL.includes("gracia") ||
1126 currentURL.includes("guinardo") ||
1127 currentURL.includes("corts") ||
1128 currentURL.includes("barris") ||
1129 currentURL.includes("andreu") ||
1130 currentURL.includes("marti") ||
1131 currentURL.includes("montjuic") ||
1132 currentURL.includes("gervasi")
1133 ) {
1134 isCurrentPlaceADistrict = true;
1135 }
1136
1137 return isCurrentPlaceADistrict;
1138 }
1139
1140 function getFormattedDate(date) {
1141 var formattedDate = date;
1142 var dateSeparator = "/";
1143
1144 var dateArray = date.split("-");
1145
1146 if ( dateArray.length !== 3 ||
1147 (dateArray[0].length !== 4 || dateArray[1].length !== 2 || dateArray[2].length !== 2) ) {
1148 return date;
1149 }
1150
1151 var year = dateArray[0].toString();
1152 var month = dateArray[1].toString();
1153 var day = dateArray[2].toString();
1154
1155 if (year.length === 4 && month.length === 2 && month.length === 2) {
1156 formattedDate = day + dateSeparator + month + dateSeparator + year;
1157 }
1158
1159 return formattedDate;
1160 }
1161
1162 function toggleShareVisibility(elementID) {
1163 var elementSelector = "#" + elementID;
1164 var sliderContainerSelector = "div.slick-list";
1165 var sliderDotsContainerSelector = "ul.slick-dots";
1166 $("div.ag-social-share-options").not(elementSelector).hide();
1167
1168 if( $(elementSelector).is(":visible") ) {
1169 $(elementSelector).hide();
1170 $(sliderDotsContainerSelector).show();
1171 } else {
1172 $(elementSelector).show();
1173 $(sliderDotsContainerSelector).hide();
1174 }
1175 }
1176
1177 function shareLink(socialNetwork, articleId, linkElement) {
1178 var shareURL = "";
1179 var linkURL = portalURL + getEventURL(articleId);
1180 var articleTitle = "";
1181
1182 if (linkURL === "") {
1183 return;
1184 }
1185
1186 if ($(linkElement).attr("data-event-title") !== "") {
1187 articleTitle = encodeURIComponent( $(linkElement).attr("data-event-title") );
1188 }
1189
1190 switch (socialNetwork) {
1191 case "twitter":
1192 shareURL = "https://twitter.com/intent/tweet?text=" + articleTitle + "&tw_p=tweetbutton&url=" + linkURL;
1193 break;
1194
1195 case "facebook":
1196 shareURL = "https://www.facebook.com/sharer/sharer.php?u=" + linkURL;
1197 break;
1198
1199 case "linkedin":
1200 shareURL = "http://www.linkedin.com/shareArticle?&title=" + articleTitle + "&mini=true&url=" + linkURL + "&summary=";
1201 break;
1202 }
1203
1204 var w = window.open(shareURL, "popupWindow", "width=600, height=400, scrollbars=yes");
1205 $("#" + "ag-social-share-" + articleId).hide();
1206 }
1207
1208 function goToDetail(eventId) {
1209 var eventURL = getEventURL(eventId);
1210 window.location.href = eventURL;
1211 }
1212
1213 function getEventURL(eventId) {
1214 //var eventURL = "/c/portal/layout?p_l_id=878081&p_p_id=" + portletId + "&_" + portletId + "_jspPage=%2Fdetail.jsp&_" + portletId + "_eventId=" + eventId; // Local
1215 //var eventURL = "/c/portal/layout?p_l_id=2302529&p_p_id=" + portletId + "&_" + portletId + "_jspPage=%2Fdetail.jsp&_" + portletId + "_eventId=" + eventId; // Int
1216 var eventURL = "/c/portal/layout?p_l_id=1892927&p_p_id=" + portletId + "&_" + portletId + "_jspPage=%2Fdetail.jsp&_" + portletId + "_eventId=" + eventId; // Pro
1217
1218 if (currentLang === "/es") {
1219 eventURL = "/es" + eventURL;
1220 }
1221
1222 eventURL = portalURL + eventURL;
1223
1224 return eventURL;
1225 }
1226
1227 function getPortletURLByEventId(eventId) {
1228 var portletURL = new Liferay.PortletURL();
1229 portletURL.setPortletId(portletId);
1230 portletURL.setParameter("jspPage", "/detail.jsp");
1231 portletURL.setParameter("eventId", eventId);
1232
1233 return portletURL;
1234 }
1235
1236 var sliderComponent = `<div>
1237 <div class="container">
1238 <div class="row">
1239 <div class="col-12 ag-content-container-event">
1240 <div class="row">
1241 <div class="col-12">
1242 <div class="ag-content-container-event-image" style="background-image: url({{image}});">
1243 <div class="ag-content-container-event-image-overflow">
1244 <div class="ag-city-container">
1245 <span class="ag-city">{{cityName}}</span>
1246 </div>
1247 <div class="ag-address-container" {{addressContainer}}>
1248 <span class="ag-address" title="{{address}}">{{address}}</span> <img src="/o/com.aguas.barcelona.cms.agenda/img/icon_pin.png" alt="" class="ag-icon-pin" />
1249 </div>
1250 <div class="ag-city-container">
1251 <span class="ag-date" title="{{date}}">{{date}}</span>
1252 </div>
1253 </div>
1254 </div>
1255 </div>
1256 </div>
1257 <div class="row">
1258 <div class="col-12">
1259 <div class="container ag-list-event-title-container">
1260 <div class="row">
1261 <div class="col-10 px-0">
1262 <a class="ag-list-event-link" href="javascript:void(0)" onclick="goToDetail({{id}})">
1263 <span class="ag-list-event-title ag-truncate-multiline-2" title="{{title}}">{{title}}</span>
1264 </a>
1265 </div>
1266 <div class="col-2 px-0 ag-list-event-share-container">
1267 <a href="javascript:void(0)" onclick="toggleShareVisibility('ag-social-share-{{id}}')">
1268 <img src="/o/com.aguas.barcelona.cms.agenda/img/icon_share.png" name="ag-list-icon-share" class="ag-list-icon-share" alt="Compartir" />
1269 </a>
1270 <div class="ag-social-share-options" ref="menu" name="ag-social-share-options" id="ag-social-share-{{id}}" style="display: none">
1271 <ul>
1272 <li tabindex="-1">
1273 <a data-event-title="{{title}}" href="javascript:void(0)" onclick="shareLink('twitter', {{id}}, this)">Twitter</a>
1274 </li>
1275 <li tabindex="-1">
1276 <a data-event-title="{{title}}" href="javascript:void(0)" onclick="shareLink('facebook', {{id}}, this)">Facebook</a>
1277 </li>
1278 <li tabindex="-1">
1279 <a data-event-title="{{title}}" href="javascript:void(0)" onclick="shareLink('linkedin', {{id}}, this)">LinkedIn</a>
1280 </li>
1281 </ul>
1282 </div>
1283 </div>
1284 </div>
1285 </div>
1286 </div>
1287 </div>
1288 <div class="row">
1289 <div class="col-12">
1290 <div class="container ag-list-event-moreinfo-container">
1291 <div class="row">
1292 <div class="col-12 px-0">
1293 <a class="ag-list-event-moreinfo" href="javascript:void(0)" onclick="goToDetail({{id}})">
1294 {{moreInfoText}} >
1295 </a>
1296 </div>
1297 </div>
1298 </div>
1299 </div>
1300 </div>
1301 </div>
1302 </div>
1303 </div>
1304 </div>`;
1305
1306 var currentLang = "${themeDisplay.getLocale()}";
1307 var allEvents = ${eventsJson};
1308 var portalURL = "${themeDisplay.getPortalURL()}";
1309 var portletId = "Agenda_AgendaPortlet_INSTANCE_cdpH0rc7P06U"; // Local
1310 //var portletId = "Agenda_AgendaPortlet_INSTANCE_9eLO5qF4XrHY"; // Int
1311 //var portletId = "Agenda_AgendaPortlet_INSTANCE_CNuoJ5Qv27eN"; // Pro
1312
1313 var showOnlyFutureEvents = true;
1314 var currentPlaceType = getCurrentPlaceType();
1315 var eventsByPlace = getEventsByPlace(getCurrentPlaceType(), getPlaceIDFromURL());
1316 var eventsBarcelona = getEventsBarcelona();
1317
1318 var sliderEvents = getSliderEvents();
1319 var sliderEventsHTML = getSliderEventsHTML();
1320 setSliderEventsHTML(sliderEventsHTML);
1321 setInfoMessage();
1322
1323 var showDots = false;
1324 if (sliderEvents.length > 1) {
1325 showDots = true;
1326 }
1327
1328 initSlider(sliderEvents, showDots);
1329</script>