Sant Andreu
Descobreix el districte de Sant Andreu a través de la seva aigua
Aquest districte de més de 149.695 habitants no sembla Barcelona, ja que els seus carrers continuen conservant la fisonomia del 1897, any en què es va annexionar.
Els segadors que s’esmenten en l’himne de Catalunya són els pagesos que venien a fer la sega als camps que envoltaven Sant Andreu al segle XVII.
L'aigua en xifres
Xifres corresponents a 2022
Sant Andreu en directe
Memòria de l’Aigua
Descobreix dades històriques i altres curiositats de l’aigua de Sant Andreu.
DADES HISTÒRIQUES
La Fabra i Coats és una fàbrica que ha marcat la societat de Sant Andreu, ja molts dels seus habitants en van viure directament o indirectament. Els seus orígens es remunten al 1839, quan es va iniciar una transformació de l’agricultura cap al sector industrial.
CURIOSITATS
A Sant Andreu es localitza la Central Besòs d’Aigües de Barcelona, una planta de captació i bombament d’aigua que avui utilitza l’osmosi inversa per tractar aigua del subsol del Besòs.
S'ha produït un error mentre es processava 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>