

TMB App is the app that takes you!
All public transport in one app. Find new routes and more transport options. Download it!
Metro network status
Up-to-date information on alterations in the metro network so that you can better plan your journey.
An error occurred while processing the template.
The following has evaluated to null or missing: ==> request.theme [in template "20155#20195#24514" at line 302, column 72] ---- Tip: It's the step after the last dot that caused this error, not those before it. ---- Tip: If the failing expression is known to legally refer to something that's sometimes null or missing, either specify a default value like myOptionalVar!myDefault, or use <#if myOptionalVar??>when-present<#else>when-missing</#if>. (These only cover the last step of the expression; to cover the whole expression, use parenthesis: (myOptionalVar.foo)!myDefault, (myOptionalVar.foo)?? ---- ---- FTL stack trace ("~" means nesting-related): - Failed at: ${request.theme - display.path - them... [in template "20155#20195#24514" at line 302, column 70] ----
1<#assign group = serviceLocator.findService("com.liferay.portal.kernel.service.GroupLocalService").getGroup(groupId)>
2<#assign metroAlertsURL = group.getExpandoBridge().getAttribute("METRO_ALERTS_URL")>
3<#assign api_id = group.getExpandoBridge().getAttribute("API_ID")>
4<#assign api_key = group.getExpandoBridge().getAttribute("API_KEY")>
5
6<#assign images_folder = themeDisplay.getPathThemeImages()>
7<#assign block = 1>
8<#assign layoutLocalService = serviceLocator.findService("com.liferay.portal.kernel.service.LayoutLocalService")>
9
10<#assign portletPreferenceService = serviceLocator.findService("com.liferay.portal.kernel.service.PortletPreferencesLocalService")>
11<#assign portletPreferences = portletPreferenceService.getPortletPreferences(getterUtil.getLong(themeDisplay.getPlid()), themeDisplay.getPortletDisplay().getId())>
12<#assign portletPreferenceValueService = serviceLocator.findService("com.liferay.portal.kernel.service.PortletPreferenceValueLocalService")>
13<#assign preferences1 = portletPreferenceValueService.getPreferences(portletPreferences[0])>
14
15<#assign URLPlid1 = preferences1.getValue("URLPlid1", "")!"">
16<#assign URLPlid2 = preferences1.getValue("URLPlid2", "")!"">
17<#attempt>
18 <#assign URLPlid1Layout = layoutLocalService.getLayout(getterUtil.getLong(URLPlid1))!"">
19 <#assign URLPlid1Friendly = URLPlid1Layout.getFriendlyURL(locale) >
20<#recover>
21 <#assign URLPlid1Layout = "">
22 <#assign URLPlid1Friendly = "">
23</#attempt>
24<#attempt>
25 <#assign URLPlid2Layout = layoutLocalService.getLayout(getterUtil.getLong(URLPlid2))>
26 <#assign URLPlid2Friendly = URLPlid2Layout.getFriendlyURL(locale) >
27<#recover>
28 <#assign URLPlid2Layout = "">
29 <#assign URLPlid2Friendly = "">
30</#attempt>
31<#assign URLDetalleMetro = "/" + locale.getLanguage() + "/barcelona/metro/-/lineametro">
32<#assign metroURL = "-/lineametro">
33
34<div class="alerts-network--container">
35 <div class="network__tabs-container tmb-maps-new">
36 <div class="tabs__menu">
37 <ul class="tabs__items tabs__items-3" role="tablist">
38 <li class="tabs__item is-selected" role="presentation">
39 <a class="tabs__item__label" style="cursor: pointer;" id="network__lines-label-vigents" role="tab" tabindex="0" aria-controls="network__lines-panel-vigents" aria-selected="true" aria-expanded="true">
40 <span class="tabs__item__label__inner">
41 <@liferay.language key="label.lines.vigent"/>
42 </span>
43 </a>
44 </li>
45 <li class="tabs__item" role="presentation">
46 <a class="tabs__item__label" style="cursor: pointer;" id="network__lines-label-proxim" role="tab" tabindex="0" aria-controls="network__lines-panel-proxim">
47 <span class="tabs__item__label__inner">
48 <@liferay.language key="label.lines.proximament"/>
49 </span>
50 </a>
51 </li>
52 </ul>
53 </div>
54 </div>
55 <#-- ---------- Date ---------- ##-->
56 <div class="network__header-container">
57 <div class="network__header-title">
58 <span><@liferay.language key="label.lines.incidences"/></span>
59 </div>
60 <div class="last-update-alt">
61 <p class="last-update__text">
62 <@liferay.language key="xarxa.bus.time"/>
63 <span id="current_date">
64 ...</span>
65 </p>
66 <a href="#" onclick="location.reload();" class="last-update__update button button--update button--update-alt">
67 <@liferay.language key="label.update"/>
68 </a>
69 </div>
70 </div>
71 <div class="accordion accordion--standard accordion--metro status--metro js-accordion" role="tablist">
72 <#attempt>
73 <#assign jObjectLiniesMetro = jsonFactoryUtil.createJSONObject(serviceTool.getLiniesMetro(groupId))>
74 <#assign features = jObjectLiniesMetro.getString("features")>
75 <#recover>
76 <#assign features = "">
77 </#attempt>
78 <#assign jLiniesMetro = jsonFactoryUtil.createJSONArray(features)>
79 <#assign num = jLiniesMetro.length()-1>
80 <#if (jLiniesMetro.length()>0)>
81 <div class="sidebar-body">
82 <div>
83 <div class="grid__row">
84 <!-- Columna dreta -->
85 <div class="primary grid__col-12">
86 <div class="network__lines">
87 <div id="network__lines-panel-vigents" class="network_tab-container-element" aria-labelledby="network__lines-label-vigents" role="tabpanel">
88 <ul id="network__lines-items-vigent" class="network__lines-items">
89 <#foreach i in 0..num>
90 <#assign linie = jsonFactoryUtil.createJSONObject(jLiniesMetro.getString(i))>
91 <#assign properties = jsonFactoryUtil.createJSONObject(linie.getString("properties"))>
92 <#assign suffix = properties.getString("NOM_LINIA")?split("9")>
93 <#assign suffix_10 = properties.getString("NOM_LINIA")?split("10")>
94 <#assign nom_line = properties.getString("NOM_LINIA")>
95 <#if (suffix?size>1) && properties.getString("ORDRE_FAMILIA") == "1">
96 <#assign nom_line = "L9">
97 <#elseif (suffix_10?size>1) && properties.getString("ORDRE_FAMILIA") == "1">
98 <#assign nom_line = "L10">
99 </#if>
100 <li class="network__lines-item estado_metro_linea_${properties.getString("CODI_LINIA")}">
101 <div class="network__lines-item-link" onclick="setSessionStorageParams(`${properties.getString("CODI_LINIA")}`, `${properties.getString("NOM_LINIA")}`, `${properties.getString("ORIGEN_LINIA")}`, `${properties.getString("DESTI_LINIA")}`);showHomeMetroAlert(`${properties.getString('NOM_LINIA')}`,this);return false;">
102 <div class="network__line network__line-${nom_line?lower_case}">
103 <div class="network__line-icon">
104 <#if nom_line == "L9">
105 <span class="line no-tooltip line--metro line--suffixed line--${nom_line?lower_case}">
106 <span class="line__name">
107 ${nom_line}
108 </span>
109 <span class="line__suffix">
110 ${suffix[1]}
111 </span>
112 </span>
113 <#elseif nom_line == "L10">
114 <span class="line no-tooltip line--metro line--suffixed line--${nom_line?lower_case}">
115 <span class="line__name">
116 ${nom_line}
117 </span>
118 <span class="line__suffix">
119 ${suffix_10[1]}
120 </span>
121 </span>
122 <#else>
123 <span class="line no-tooltip line--metro line--${nom_line?lower_case}">
124 ${nom_line}
125 </span>
126 </#if>
127 </div>
128 <div class="network__line-title-wrapper">
129 <h3 class="network__line-title" title="${properties.getString("ORIGEN_LINIA")} / ${properties.getString("DESTI_LINIA")}">${properties.getString("ORIGEN_LINIA")} / ${properties.getString("DESTI_LINIA")}</h3>
130 <div class="network__line-warnings line-status__item__alerts acc-status-linia-${properties.getString("CODI_LINIA")}">
131 <span class="line-status__item__alerts__item">
132 </span>
133 <span class="line-status__item__alerts__item line-status__item__alerts__item--stations">
134 </span>
135 </div>
136 </div>
137 <a href="javascript:initModalRegister();" id="favor_${properties.getString("NOM_LINIA")}" class="favor_${properties.getString("NOM_LINIA")} mega-access__title-star has-tooltip has-tooltip--b" data-size="dialog--medium" data-dismiss="${languageUtil.get(locale, 'label.jotmbe.close')}" data-fragment="edit-favourite-a-fragment">
138 <span class="u-visuallyhidden">
139 ${languageUtil.get(locale, 'label.goingTo.addFavouriteLine')} ${properties.getString("NOM_LINIA")}</span>
140 </a>
141 </div>
142 </div>
143 <div style="display: none;" class="js-accordion__content" id="acc-line-${properties.getString("NOM_LINIA")}-title">
144 <div class="page-header page-header--single-col">
145 <h1 class="title title--1 page-header__title">
146 <#if nom_line == "L9">
147 <span class="line no-tooltip line--suffixed line--${nom_line?lower_case} line--med">
148 <span class="line__name">${nom_line}</span>
149 <span class="line__suffix"> ${suffix[1]}</span>
150 </span>
151 <#elseif nom_line == "L10">
152 <span class="line no-tooltip line--suffixed line--${nom_line?lower_case} line--med">
153 <span class="line__name">${nom_line}</span>
154 <span class="line__suffix">${suffix_10[1]}</span>
155 </span>
156 <#else>
157 <span class="line no-tooltip line--${nom_line?lower_case} line--med">
158 ${properties.getString('NOM_LINIA')}</span>
159 </#if>
160 ${properties.getString('ORIGEN_LINIA')} / ${properties.getString('DESTI_LINIA')}
161 </h1>
162 <hr>
163 </div>
164 <div class="line-status__block acc-block1--${properties.getString('CODI_LINIA')}">
165 <h3 class="line-status__title">${languageUtil.get(locale, 'network.traffic')}</h3>
166 </div>
167 <div class="line-status__block acc-block2--${properties.getString('CODI_LINIA')}">
168 <h3 class="line-status__title">${languageUtil.get(locale, 'network.stations')}</h3>
169 </div>
170 <div class="line-status__block">
171 <ul class="list list--links u-content--right">
172 <li class="list__item">
173 <a class="list__label" href="${URLDetalleMetro}/${properties.getString('NOM_LINIA')}" >${languageUtil.get(locale, 'label.view.line')}</a>
174 </li>
175 </ul>
176 </div>
177 </div>
178 </li>
179 </#foreach>
180 </ul>
181 <div class="network__lines-no-results" style="display:none">
182 <div class="network__lines-no-results-container">
183 <img src="${images_folder}/jotmbe/120px/svg/no_incidents_metro.svg" alt="">
184 <p>
185 <@liferay.language key="xarxa.metro.no-results"/>
186 </p>
187 </div>
188 </div>
189 </div>
190 <div id="network__lines-panel-proxim" class="network_tab-container-element" style="display: none;" aria-labelledby="network__lines-label-proxim" role="tabpanel">
191 <ul id="network__lines-items-prox" class="network__lines-items">
192 <#foreach i in 0..num>
193 <#assign linie = jsonFactoryUtil.createJSONObject(jLiniesMetro.getString(i))>
194 <#assign properties = jsonFactoryUtil.createJSONObject(linie.getString("properties"))>
195 <#assign suffix = properties.getString("NOM_LINIA")?split("9")>
196 <#assign suffix_10 = properties.getString("NOM_LINIA")?split("10")>
197 <#assign nom_line = properties.getString("NOM_LINIA")>
198 <#if (suffix?size>1) && properties.getString("ORDRE_FAMILIA") == "1">
199 <#assign nom_line = "L9">
200 <#elseif (suffix_10?size>1) && properties.getString("ORDRE_FAMILIA") == "1">
201 <#assign nom_line = "L10">
202 </#if>
203 <li class="network__lines-item estado_metro_linea_${properties.getString("CODI_LINIA")}">
204 <div class="network__lines-item-link" onclick="setSessionStorageParams('${properties.getString("CODI_LINIA")}', '${properties.getString("NOM_LINIA")}', '${properties.getString("ORIGEN_LINIA")}', '${properties.getString("DESTI_LINIA")}');showHomeMetroAlert('${properties.getString('NOM_LINIA')}',this);return false;">
205 <div class="network__line network__line-${nom_line?lower_case}">
206 <div class="network__line-icon">
207 <#if nom_line == "L9">
208 <span class="line no-tooltip line--metro line--suffixed line--${nom_line?lower_case}">
209 <span class="line__name">
210 ${nom_line}
211 </span>
212 <span class="line__suffix">
213 ${suffix[1]}
214 </span>
215 </span>
216 <#elseif nom_line == "L10">
217 <span class="line no-tooltip line--metro line--suffixed line--${nom_line?lower_case}">
218 <span class="line__name">
219 ${nom_line}
220 </span>
221 <span class="line__suffix">
222 ${suffix_10[1]}
223 </span>
224 </span>
225 <#else>
226 <span class="line no-tooltip line--metro line--${nom_line?lower_case}">
227 ${nom_line}
228 </span>
229 </#if>
230 </div>
231 <div class="network__line-title-wrapper">
232 <h3 class="network__line-title" title="${properties.getString("ORIGEN_LINIA")} / ${properties.getString("DESTI_LINIA")}">${properties.getString("ORIGEN_LINIA")} / ${properties.getString("DESTI_LINIA")}</h3>
233 <div class="network__line-warnings line-status__item__alerts acc-status-linia-${properties.getString("CODI_LINIA")}">
234 <span class="line-status__item__alerts__item">
235 </span>
236 <span class="line-status__item__alerts__item line-status__item__alerts__item--stations">
237 </span>
238 </div>
239 </div>
240 <a href="javascript:initModalRegister();" id="favor_${properties.getString("NOM_LINIA")}" class="favor_${properties.getString("NOM_LINIA")} mega-access__title-star has-tooltip has-tooltip--b" data-size="dialog--medium" data-dismiss="${languageUtil.get(locale, 'label.jotmbe.close')}" data-fragment="edit-favourite-a-fragment">
241 <span class="u-visuallyhidden">
242 ${languageUtil.get(locale, 'label.goingTo.addFavouriteLine')} ${properties.getString("NOM_LINIA")}</span>
243 </a>
244 </div>
245 </div>
246 <div style="display: none;" class="js-accordion__content" id="acc-line-${properties.getString("NOM_LINIA")}-title">
247 <div class="page-header page-header--single-col">
248 <h1 class="title title--1 page-header__title">
249 <#if nom_line == "L9">
250 <span class="line no-tooltip line--suffixed line--${nom_line?lower_case} line--med">
251 <span class="line__name">${nom_line}</span>
252 <span class="line__suffix"> ${suffix[1]}</span>
253 </span>
254 <#elseif nom_line == "L10">
255 <span class="line no-tooltip line--suffixed line--${nom_line?lower_case} line--med">
256 <span class="line__name">${nom_line}</span>
257 <span class="line__suffix">${suffix_10[1]}</span>
258 </span>
259 <#else>
260 <span class="line no-tooltip line--${nom_line?lower_case} line--med">
261 ${properties.getString('NOM_LINIA')}</span>
262 </#if>
263 ${properties.getString('ORIGEN_LINIA')} / ${properties.getString('DESTI_LINIA')}
264 </h1>
265 <hr>
266 </div>
267 <div class="line-status__block acc-block1--${properties.getString('CODI_LINIA')}">
268 <h3 class="line-status__title">${languageUtil.get(locale, 'network.traffic')}</h3>
269 </div>
270 <div class="line-status__block acc-block2--${properties.getString('CODI_LINIA')}">
271 <h3 class="line-status__title">${languageUtil.get(locale, 'network.stations')}</h3>
272 </div>
273 <div class="line-status__block">
274 <ul class="list list--links u-content--right">
275 <li class="list__item">
276 <a class="list__label" href="${URLDetalleMetro}/${properties.getString('NOM_LINIA')}" >${languageUtil.get(locale, 'label.view.line')}</a>
277 </li>
278 </ul>
279 </div>
280 </div>
281 </li>
282 </#foreach>
283 </ul>
284 <div class="network__lines-no-results" style="display:none">
285 <div class="network__lines-no-results-container">
286 <img src="${images_folder}/jotmbe/120px/svg/no_incidents_metro.svg" alt="">
287 <p>
288 <@liferay.language key="xarxa.metro.no-results"/>
289 </p>
290 </div>
291 </div>
292 </div>
293 </div>
294 </div>
295 </div>
296 </div>
297 </div>
298 <#else>
299 <div class="notification notification--inline notification--warning service-bus-error" role="alert">
300 <div class="notification__container">
301 <div class="notification__text">
302 <img class="notification__icon" src="${request.theme-display.path-theme-images}/basic/24px/svg/alert_yellow_big.svg" alt="">
303 <p>
304 <@liferay.language key="error.metro.api-not-available"/>
305 </p>
306 </div>
307 </div>
308 </div>
309
310 </#if>
311 </div>
312 <#if metroFormLink?has_content && metroFormLink.data?has_content && metroFormLink.link.data?has_content>
313 <div class="primary__cta" style="padding-top: 24px;">
314 <a href="${metroFormLink.link.friendlyUrl}" class="button button--a" style="border-radius: 100px; padding: 14px 32px;">
315 ${metroFormLink.getData()}</a>
316 </div>
317 </#if>
318
319 <!-- Estat de la xarxa -->
320 <div class="dialog">
321 <div id="home-xarxa-linies-detail" class="u-hidden">
322 <div class="dialog__body dialog__body--jotmbe" id="home-xarxa-linies-detail-content">
323 </div>
324 </div>
325 </div>
326</div>
327
328<script type="text/javascript">
329
330 var langJotmbeEditFavouriteLineInfo = "<@liferay.language key="label.jotmbe.modal.edit.line-info"/>";
331 var langJotmbeEditFavouriteLineQuestion = "<@liferay.language key="label.jotmbe.modal.edit.line-question"/>";
332 var langJotmbeDeleteFavouriteLine = "<@liferay.language key="label.goingTo.removeFavouriteLine"/>";
333 var langJotmbeAddFavouriteLine = "<@liferay.language key="label.goingTo.addFavouriteLine"/>";
334 var langJotmbeEditFavouriteStationInfo = "<liferay-ui:message key='label.jotmbe.modal.edit.station-info' />";
335
336 var lineCode_AllLines = "ALL";
337 var type_NoData = "NO_DATA";
338 var type_Traffic = "TRAFFIC";
339 var type_Infrastructure= "INFRASTRUCTURE";
340 var anchor = window.location.hash.substring(1);
341
342 $(document).ready(function() {
343 //try {
344 // var anchorElement = $('#acc-line-' + anchor + '-title');
345 // if (anchorElement.length == 1) {
346 // anchorElement.addClass("is-expanded");
347 // anchorElement.click();
348 // $(document.body).scrollTop(anchorElement.offset().top);
349 // }
350 //} catch(e) {}
351
352 getStatusXarxa();
353
354 // Analytics
355 $(".status--metro .js-accordion__title").click(function() {
356 if ($(this).hasClass("is-expanded")) {
357 var line = $(this).attr("id").split("-");
358 if (line && line[2]) Analytics.Metro.eventStatus(line[2]);
359 }
360 });
361
362 const tabs = document.querySelectorAll('.tabs__item');
363 tabs.forEach(tab => {
364 tab.addEventListener('click', function() {
365 tabs.forEach(t => t.classList.remove('is-selected'));
366 this.classList.add('is-selected');
367 $('.network_tab-container-element').hide();
368 $('#'+$(this).find('.tabs__item__label').attr('aria-controls')).show();
369 });
370 });
371 })
372
373 $(function() {
374 getRouteId();
375 });
376
377 function getStatusXarxa() {
378 //URI status xarxa
379 jQuery.ajax({
380 url: "${metroAlertsURL}?app_id=${api_id}&app_key=${api_key}",
381 type: "GET",
382 dataType: "json",
383 async: true,
384 success: function(data) {
385 setStatusXarxa(data);
386 },
387 error: function(){
388 var notificationTextLinia =
389 '<img src="${images_folder}/basic/12px/svg/circle_grey.svg" alt=""/><@liferay.language key="network.service.no.info"/>';
390
391 $(".line-status__item__alerts").html(
392 '<span class="line-status__item__alerts__item">'+ notificationTextLinia +'</span>'
393 +'<span class="line-status__item__alerts__item line-status__item__alerts__item--stations"></span>');
394 }
395 });
396 }
397
398 function setStatusXarxa(dataStatus) {
399 var svc;
400 var html;
401 //Initialize l?es metro
402 $(".accordion.accordion--standard.accordion--metro.status--metro.js-accordion .network__lines-items").children().each(function() {
403 $(this).find(".line-status__item__alerts__item").html(' ');
404 $(this).find(".line-status__item__alerts__item").first().html('<img src = "${images_folder}/basic/12px/svg/circle_green.svg" alt=""><@liferay.language key="network.service.normal"/>');
405 });
406
407 var mesgCir = "<@liferay.language key="xarxa.altered.traffic"/>";
408 var mesgSta = "<@liferay.language key="xarxa.altered.stations"/>";
409
410 $(".js-accordion__content").each(function() {
411 $(this).children().first().next().find("p").remove();
412 html = $(this).children().first().next().html();
413 $(this).children().first().next().html(html + '<p class="line-status__status"><img src="${images_folder}/basic/12px/svg/circle_green.svg" alt=""> ${languageUtil.get(locale, 'network.service.normal')}</p><p class="status-normal">'+mesgCir+'</p>');
414
415 $(this).children().first().next().next().find("p").remove();
416 html = $(this).children().first().next().next().html();
417 $(this).children().first().next().next().html(html + '<p class="line-status__status"> ${languageUtil.get(locale, 'network.service.normal')}</p><p class="status-normal">'+mesgSta+'</p>');
418
419 });
420
421 //Update status
422 for(var j = 0; j < dataStatus.data.alerts.length; j++) {
423 var altCode = dataStatus.data.alerts[j].effect.code;
424 var entities = dataStatus.data.alerts[j].entities;
425 var publications = dataStatus.data.alerts[j].publications;
426 var title = getAlertTitle(altCode);
427 var circColor = getAlertCircColor(dataStatus.data.alerts[j].effect.status);
428 var statColor = getAlertStatColor(dataStatus.data.alerts[j].effect.status);
429
430 for (var k = 0; k < entities.length; k++) {
431 var isFirstVigent = true;
432 var isFirstProx = true;
433 for (var i = 0; i < publications.length; i++) {
434 var text;
435 var url;
436 //var begin = publications[i].begin_date;
437 //var end = publications[i].end_date;
438 var line_code = entities[k].line_code;
439 var alert = dataStatus.data.alerts[j];
440 var stationName = '';
441
442 var begin = alert.disruption_dates[i].begin_date;
443 var end = alert.disruption_dates[i].end_date;
444 var isActiveBool = isActive(begin, end);
445
446 var beginPublish = publications[i].begin_date;
447 var endPublish = publications[i].end_date;
448 var isPublishedBool = isActive(beginPublish, endPublish);
449
450 if(isActiveBool || isPublishedBool) {
451 var idCurrentElement = "#network__lines-items-prox";
452 var isFirst = isFirstProx;
453 if(isActiveBool) {
454 $("#network__lines-items-vigent .estado_metro_linea_" + line_code).addClass("active-alert");
455 idCurrentElement = "#network__lines-items-vigent";
456 isFirst = isFirstVigent;
457 isFirstVigent = false;
458 } else {
459 $("#network__lines-items-prox .estado_metro_linea_" + line_code).addClass("active-alert-prox");
460 isFirstProx = false;
461 }
462 if( isFirst ) {
463 //new changes
464 if ( alert.effect.type == type_NoData) {
465 if (line_code == lineCode_AllLines) {
466 $(idCurrentElement+" .accordion.accordion--standard.accordion--metro.status--metro.js-accordion .network__lines-items").children().each(function() {
467 $(this).find(".line-status__item__alerts__item").first().html('<img src = "${images_folder}/basic/12px/svg/circle_'+circColor+'.svg" alt="">'+title);
468 });
469
470 $(idCurrentElement+" .js-accordion__content").each(function() {
471 $(this).children().first().next().find("p").remove();
472 var html = $(this).children().first().next().html();
473 $(this).children().first().next().html(html + '<p class="line-status__status"><img src="${images_folder}/basic/12px/svg/circle_'+circColor+'.svg" alt=""> '+title+'</p>');
474 });
475 }
476 }
477 else if( alert.effect.type == type_Traffic) {
478 $(idCurrentElement+" .acc-status-linia-"+line_code).children().first()
479 .html('<img src = "${images_folder}/basic/12px/svg/circle_'+circColor+'.svg" alt="">'+title);
480 $(idCurrentElement+" .acc-block1--"+line_code).find(".status-normal").remove();
481 $(idCurrentElement+" .acc-block1--"+line_code+" .line-status__status").html('<img src="${images_folder}/basic/12px/svg/circle_'+circColor+'.svg" alt="">'+title);
482 }
483 else if( alert.effect.type == type_Infrastructure) {
484 $(idCurrentElement+" .acc-status-linia-"+line_code).children().first().next()
485 .html('<img src="${images_folder}/basic/20px/svg/'+statColor+'.svg" alt="">'+title);
486 $(idCurrentElement+" .acc-block2--"+line_code).find(".status-normal").remove();
487 $(idCurrentElement+" .acc-block2--"+line_code+" .line-status__status").html('<img src="${images_folder}/basic/20px/svg/'+statColor+'.svg" alt="">'+title+'</p>');
488 }
489 }
490 if ("${locale}" == "ca_ES") {
491 text = alert.publications[i].textCa;
492 url = alert.urlCa;
493 } else if ("${locale}" == "es_ES") {
494 text = alert.publications[i].textEs;
495 url = alert.urlEs;
496 } else {
497 text = alert.publications[i].textEn;
498 url = alert.urlEn;
499 }
500
501 text = text.replace(/\r\n?|\n/g, '<br />');
502
503 var a = new Date(alert.disruption_dates[i].begin_date);
504 var date = ('0' + a.getDate()).slice(-2) + "." + ('0' + (a.getMonth() + 1)).slice(-2) + "." + a.getFullYear();
505 if(alert.entities[i].station_name !== undefined && alert.entities[i].station_name !== null){
506 stationName = alert.entities[i].station_name + '. ';
507 }
508 if( alert.effect.type == "TRAFFIC" && $("#alert-"+line_code+"-"+alert.id).length == 0) {
509 $(idCurrentElement+" .acc-block1--"+line_code).append('<div id="alert-'+line_code+'-'+alert.id+'"><h4 class="line-status__subtitle">' + stationName + '<@liferay.language key="label.alert.from.day"/> '+date+'</h4><p class="line-status__content">'+text+'</p></div>');
510 if(url !== undefined) $(idCurrentElement+" .acc-block1--"+line_code).append('<div class="primary__block-extra"><ul class="list list--links-a u-content--right"><li class="list__item"><a href="'+url+'"><@liferay.language key="network.service.alteration.info"/></a></li></ul></div>');
511 } else if( alert.effect.type == "INFRASTRUCTURE" ) {
512 $(idCurrentElement+" .acc-block2--"+line_code).append('<h4 class="line-status__subtitle">' + stationName + '<@liferay.language key="label.alert.from.day"/> '+date+'</h4><p class="line-status__content">'+text+'</p>');
513 if(url !== undefined) $(idCurrentElement+" .acc-block2--"+line_code).append('<div class="primary__block-extra"><ul class="list list--links-a u-content--right"><li class="list__item"><a href="'+url+'"><@liferay.language key="network.service.alteration.info"/></a></li></ul></div>');
514 }
515 }
516 }
517 }
518 }
519
520 //borramos las lineas que no tienen alertas
521 $("#network__lines-items-vigent .network__lines-item").not($(".active-alert")).remove();
522 $("#network__lines-items-prox .network__lines-item").not($(".active-alert-prox")).remove();
523
524 if($("#network__lines-items-vigent .network__lines-item").length == 0) {
525 $("#network__lines-panel-vigents .network__lines-no-results").show();
526 }
527 if($("#network__lines-items-prox .network__lines-item").length == 0) {
528 $("#network__lines-panel-proxim .network__lines-no-results").show();
529 }
530 }
531
532 function showHomeMetroAlert(line,element){
533 var status = $(element).data("status");
534 if(status === "ok"){
535 var url = "${URLDetalleMetro}/" + line;
536 window.location.replace(url);
537 return;
538 }
539 html = $("#acc-line-" + line + "-title").html();
540 $("#home-xarxa-linies-detail-content").html(html);
541 var $dialog = $('#home-xarxa-linies-detail');
542
543 //Analytics
544 Analytics.Metro.eventHome(line);
545
546 TMB.dialog.newModal(langJotmbeClose, "dialog--jotmbe__no-footer dialog--medium dialog--jotmbe__no-icon dialog--jotmbe__with-actions dialog--avis dialog--avis--home", "home-xarxa-linies-detail", "");
547 }
548
549 function defaultDialogFieldsA() {
550 if ($('#edit-favourite-a-fragment').find('#jotmbe__dialog__fav-switch').hasClass('switch--checked')) {
551 $('#edit-favourite-a-fragment').find('.jotmbe__dialog__fav-switch__info-right').click();
552 if ($('#edit-favourite-a-fragment').find('#jotmbe__dialog__fav-switch').hasClass('switch--checked')) {
553 $('#edit-favourite-a-fragment').find('.jotmbe__dialog__fav-switch__info-right').click();
554 }
555 }
556 if (!$('label[for="f__checkbox__4"]').hasClass('checked')) {
557 $('#f__checkbox__4').click();
558 }
559 }
560
561 function getRouteIdSuccess(data) {
562
563 for (var line in data.data.routes) {
564 if(data.data.routes[line].transport=="Metro"){
565
566 $(".favor_" +data.data.routes[line].code).attr( "onclick", "deleteRoute('"+data.data.routes[line].code+"','"+data.data.routes[line].id+"');" );
567 $(".favor_" +data.data.routes[line].code).addClass( "mega-access__title-star--starred" );
568 $(".favor_" +data.data.routes[line].code).data( "fragment", "delete-a-fragment" );
569 $(".favor_" +data.data.routes[line].code+ " .jotmbe__tooltip").text(langJotmbeDeleteFavouriteLine + ' ' + data.data.routes[line].code);
570 $(".favor_" +data.data.routes[line].code+ " .u-visuallyhidden").text(langJotmbeDeleteFavouriteLine + ' ' + data.data.routes[line].code);
571 }
572 }
573 //TMB.dialog.init();
574 }
575
576 function getRouteIdError(){
577 console.error("Error obtain route id");
578 }
579
580 var token = localStorage.getItem("kc_token");
581
582 function getRouteId() {
583
584
585 if (TJS.velocity.getCookie("JoTMBeKCSession")){
586 $(".mega-access__title-star").attr( "data-rel", "dialog" );
587 $(".mega-access__title-star").attr( "onclick", "addRoute(this.id);" );
588 $(".mega-access__title-star").attr("href", "javascript:void(0);");
589 $(".mega-access__title-star").css( "cursor", "pointer" );
590
591 var uuid = localStorage.getItem("uuid");
592
593 favouriteLines(uuid, "GET", null, getRouteIdSuccess, getRouteIdError, token);
594
595 var date = new Date().getTime();
596 }
597 }
598
599 function deleteRouteClickSuccess(favLine){
600 if(favLine.status == "success"){
601 var title = "<@liferay.language key="label.jotmbe.favourites.delete-favourite-lines"/>";
602 var dialog = $('#delete-a-fragment');
603 dialog.find('.dialog__body h2').html(title.replace("--", "\/"));
604
605 //TMB.dialog.close();
606
607 TMB.dialog.newModal("<@liferay.language key="label.jotmbe.close"/>", "dialog dialog--jotmbe dialog--jotmbe__no-footer dialog--jotmbe__confirmacio", "confirm-a-fragment", "");
608 var title = "<@liferay.language key="label.jotmbe.favourites.delete-favourite-lines"/>";
609 var dialog = $('#confirm-a-fragment');
610 dialog.find('.dialog__body h2').html(title.replace("--", "\/"));
611
612 //Analytics
613 Analytics.JT.Favourites.deleteOK();
614
615 $(".favor_" +lineCod).attr( "onclick", "addRoute(this.id);" );
616 $(".favor_" +lineCod).removeClass("mega-access__title-star--starred").addClass( "line-access__title-star" );
617 $(".favor_" +lineCod).data( "fragment", "edit-favourite-a-fragment" );
618 $(".favor_" +lineCod+ " .jotmbe__tooltip").text(langJotmbeAddFavouriteLine + ' ' + lineCod);
619 $(".favor_" +lineCod+ " .u-visuallyhidden").text(langJotmbeAddFavouriteLine + ' ' + lineCod);
620
621 }else if(favLine.status == "fail"){
622 TMB.dialog.newModal("<@liferay.language key="label.jotmbe.close"/>", "dialog--jotmbe dialog--jotmbe__no-footer dialog--jotmbe__no-icon dialog--jotmbe__error", "error-b-fragment", "");
623 var title = "<@liferay.language key="label.alert.error.delete"/>";
624 var dialog = $('#error-b-fragment');
625 dialog.find('.dialog__body h2').html(title.replace("--", "\/"));
626 }
627
628 }
629
630 function deleteRouteClickError(){
631 TMB.dialog.newModal("<@liferay.language key="label.jotmbe.close"/>", "dialog--jotmbe dialog--jotmbe__no-footer dialog--jotmbe__no-icon dialog--jotmbe__error", "error-b-fragment", "");
632 var title = "<@liferay.language key="label.alert.error.delete"/>";
633 var dialog = $('#error-b-fragment');
634 dialog.find('.dialog__body h2').html(title.replace("--", "\/"));
635 }
636
637 var lineCod;
638
639 function deleteRouteClick(lineCode,routeId) {
640 lineCod = lineCode;
641 //Analytics
642 Analytics.JT.Favourites.deleteFav();
643
644 var date = new Date().getTime();
645 //userAPI.js
646
647 var uuid = localStorage.getItem("uuid");
648
649 favouriteLineById(uuid, "DELETE", routeId, "", deleteRouteClickSuccess, deleteRouteClickError, token);
650 }
651
652 function deleteRoute(lineCode,routeId) {
653
654 //Analytics
655 Analytics.JT.Favourites.initDelete2('Accés Línies Metro');
656
657 //console.log($("#line_"+lineCode).text());
658 //console.log(lineCode);
659 //console.log(routeId);
660 lineName = $(".line--"+lineCode.toLowerCase()+" .line__tooltip").text().replace(/\s\s+/g, '');
661 lineName = lineCode;
662 var title = "<@liferay.language key="label.jotmbe.favourites.delete-favourite-title1"/>"+" "+lineName+" "+"<@liferay.language key="label.jotmbe.favourites.delete-favourite-title2"/>";
663 var dialog = $('#delete-a-fragment');
664 dialog.find('.dialog__body h2').html(title.replace("--", "\/"));
665
666 dialog.find('.button--a').attr("onclick","deleteRouteClick('"+lineCode+"','"+routeId+"')");
667
668 }
669
670 function addRouteClickSuccess(data) {
671 if (data.data.route!="") {
672
673 //Analytics
674 Analytics.JT.Favourites.addOK();
675
676 //console.log("RouteId "+data.data.route+" added");
677 $(".favor_" +cod).attr( "onclick", "deleteRoute('"+cod+"','"+data.data.route+"');" );
678 $(".favor_" +cod).addClass( "mega-access__title-star--starred" );
679 $(".favor_" +cod).data('fragment', 'delete-a-fragment');
680
681 $(".favor_" +cod+ " .jotmbe__tooltip").text(langJotmbeDeleteFavouriteLine + ' ' + cod);
682 $(".favor_" +cod+ " .u-visuallyhidden").text(langJotmbeDeleteFavouriteLine + ' ' + cod);
683
684 var dialog = $('#edit-favourite-a-fragment');
685
686 dialog.find('.dialog__body--jotmbe p').text(langJotmbeEditFavouriteLineInfo);
687
688 if (dialog.find('#jotmbe__dialog__fav-switch').hasClass('switch--checked')){
689
690 addRouteFull(data.data.route,cod);
691
692 }else{
693 TMB.dialog.newModal("<@liferay.language key="label.jotmbe.close"/>", "dialog--jotmbe dialog--jotmbe__no-footer dialog--jotmbe__no-icon dialog--jotmbe__confirmacio", "confirm-a-fragment", "");
694 var title = "<@liferay.language key="label.jotmbe.alert.success.line"/>";
695 var dialog = $('#confirm-a-fragment');
696 dialog.find('.dialog__body h2').html(title.replace("--", "\/"));
697 defaultDialogFieldsA();
698 }
699 }else{
700 TMB.dialog.newModal("<@liferay.language key="label.jotmbe.close"/>", "dialog--jotmbe dialog--jotmbe__no-footer dialog--jotmbe__no-icon dialog--jotmbe__error", "error-b-fragment", "");
701 var title = "<@liferay.language key="label.alert.error"/>";
702 var dialog = $('#error-b-fragment');
703 dialog.find('.dialog__body h2').html(title.replace("--", "\/"));
704 //console.log("RouteId"+cod+" added ERROR1");
705 }
706 }
707
708 function addRouteClickError(){
709 TMB.dialog.newModal("<@liferay.language key="label.jotmbe.close"/>", "dialog--jotmbe dialog--jotmbe__no-footer dialog--jotmbe__no-icon dialog--jotmbe__error", "error-b-fragment", "");
710 var title = "<@liferay.language key="label.alert.error"/>";
711 var dialog = $('#error-b-fragment');
712 dialog.find('.dialog__body h2').html(title.replace("--", "\/"));
713 //console.log("RouteId"+code+" added ERROR2");
714 }
715
716 var cod;
717
718 function addRouteClick(code){
719 //console.log(code);
720 cod = code;
721 var date = new Date().getTime();
722 //userAPI.js
723
724 var uuid = localStorage.getItem("uuid");
725 var data = {"transport":"Metro", "code":code, "description":"Metro "+ code};
726 var date = new Date().getTime();
727
728 favouriteLines(uuid, "POST", data, addRouteClickSuccess, addRouteClickError, token);
729 }
730
731 function addRoute(lineId) {
732 //Analytics
733 Analytics.JT.Favourites.addMetro3('Accés Línies Metro');
734
735 defaultDialogFieldsA();
736 var code = lineId.split('_')[1];
737 lineName = $('.line-access__item__text.'+code).text().replace("\/","--");
738
739 var title = "<@liferay.language key="label.jotmbe.favourites.edit-favourite-line-title1"/>" + " " + code + " "+lineName+" "+"<@liferay.language key="label.jotmbe.favourites.edit-favourite-line-title2"/>";
740 var dialog = $('#edit-favourite-a-fragment');
741
742 dialog.find('.dialog__body--jotmbe p').text(langJotmbeEditFavouriteLineInfo);
743 dialog.find('.dialog__body h2').html(title.replace("--", "\/"));
744 dialog.find('#dialog-send-preferences').html(langJotmbeEditFavouriteLineQuestion);
745
746 if (dialog.find('#jotmbe__dialog__fav-switch').hasClass('switch--checked'))
747 dialog.find('.jotmbe__dialog__fav-switch__info-right').click();
748
749 dialog.find('.button--a').attr("onclick","addRouteClick('"+code+"')");
750
751 addClickEvent();
752
753 dialog.find("#form__time-range__add-row").hide();
754
755 if (!dialog.find('#f__checkbox__3-1-1').is(':checked')) {
756 dialog.find('#f__checkbox__3-1-1').click();
757 }
758 }
759
760 function addRouteFullSuccess(favLine) {
761 if(favLine.status == "success") {
762 if(favLine.data.route != "") {
763 TMB.dialog.newModal("<@liferay.language key="label.jotmbe.close"/>", "dialog--jotmbe dialog--jotmbe__no-footer dialog--jotmbe__no-icon dialog--jotmbe__confirmacio", "confirm-a-fragment", "");
764 var title = "<@liferay.language key="label.jotmbe.alert.success.line"/>";
765 var dialog = $('#confirm-a-fragment');
766 dialog.find('.dialog__body h2').html(title.replace("--", "\/"));
767 //console.log("RouteId"+lineCode+" created OK");
768 defaultDialogFieldsA()
769 //TMB.dialog.init();
770 } else {
771 TMB.dialog.newModal("<@liferay.language key="label.jotmbe.close"/>", "dialog--jotmbe dialog--jotmbe__no-footer dialog--jotmbe__no-icon dialog--jotmbe__error", "error-b-fragment", "");
772 var title = "<@liferay.language key="label.alert.error"/>";
773 var dialog = $('#error-b-fragment');
774 dialog.find('.dialog__body h2').html(title.replace("--", "\/"));
775
776 }
777 $dialog.find('.jotmbe__dialog__fav-switch__info-right').click();
778 }
779
780 }
781
782 function addRouteFullError() {
783 TMB.dialog.newModal("<@liferay.language key="label.jotmbe.close"/>", "dialog--jotmbe dialog--jotmbe__no-footer dialog--jotmbe__no-icon dialog--jotmbe__error", "error-b-fragment", "");
784 var title = "<@liferay.language key="label.alert.error"/>";
785 var dialog = $('#error-b-fragment');
786 dialog.find('.dialog__body h2').html(title.replace("--", "\/"));
787 }
788
789
790 function getData(lineCode) {
791
792 var email= $('label[for="f__checkbox__1-1-1"]').hasClass('checked') ? "ENABLED" :"DISABLED";
793 var app= $('label[for="f__checkbox__1-2-1"]').hasClass('checked') ? "ENABLED" :"DISABLED";
794 var unStatus = $('label[for="f__checkbox__2-1-1"]').hasClass('checked') ? "ENABLED":"DISABLED";
795 var unMonday = JSON.parse($('label[for="weekday_0"]').attr('aria-checked')) ? "ENABLED":"DISABLED";
796 var unTuesday = JSON.parse($('label[for="weekday_1"]').attr('aria-checked')) ? "ENABLED":"DISABLED";
797 var unWednesday = JSON.parse($('label[for="weekday_2"]').attr('aria-checked')) ? "ENABLED":"DISABLED";
798 var unThursday = JSON.parse($('label[for="weekday_3"]').attr('aria-checked')) ? "ENABLED":"DISABLED";
799 var unFriday = JSON.parse($('label[for="weekday_4"]').attr('aria-checked')) ? "ENABLED":"DISABLED";
800 var unSaturday = JSON.parse($('label[for="weekday_5"]').attr('aria-checked')) ? "ENABLED":"DISABLED";
801 var unSunday = JSON.parse($('label[for="weekday_6"]').attr('aria-checked')) ? "ENABLED":"DISABLED";
802 var unScheduleType = $('label[for="f__radio__2"]').hasClass('checked') ? "TIME_INTERVAL" : "ALLDAY";
803 var unStartInterval_1 = $('label[for="f__radio__2"]').hasClass('checked') ? $('#f__camp__de1-1').val(): "";
804 var unEndInterval_1 = $('label[for="f__radio__2"]').hasClass('checked') ? $('#f__camp__fins1-1').val(): "";
805 var unStartInterval_2 = ($('label[for="f__radio__2"]').hasClass('checked') && $('.form__time-range__row--2').is(':visible')) ? $('#f__camp__de2-1').val() :"";
806 var unEndInterval_2 = ($('label[for="f__radio__2"]').hasClass('checked') && $('.form__time-range__row--2').is(':visible')) ? $('#f__camp__fins2-1').val():"";
807
808 var dt = {"transport":"Metro",
809 "code":lineCode,
810 "description":"",
811 "transportNotification":{
812 "status":"ENABLED",
813 "channelNotifications":[
814 {
815 "channel":"APP_PUSH",
816 "status":app
817 },
818 {
819 "channel":"EMAIL",
820 "status":email
821 }
822 ],
823 "unplannedNotification":{
824 "status": unStatus,
825 "weekdayStatus":{
826 "monday": unMonday,
827 "tuesday": unTuesday,
828 "wednesday": unWednesday,
829 "thursday": unThursday,
830 "friday": unFriday,
831 "saturday": unSaturday,
832 "sunday": unSunday
833 },
834 "scheduleFrequency":{
835 "scheduleType": unScheduleType
836 }
837 }
838 }
839 };
840
841 if (unStartInterval_1 != ""){
842 dt.transportNotification.unplannedNotification.scheduleFrequency.intervals = [];
843 dt.transportNotification.unplannedNotification.scheduleFrequency.intervals.push({"startInterval": unStartInterval_1, "endInterval": unEndInterval_1});
844 if (unStartInterval_2 != ""){
845 dt.transportNotification.unplannedNotification.scheduleFrequency.intervals.push({"startInterval": unStartInterval_2, "endInterval": unEndInterval_2});
846 }
847 }
848 return dt;
849
850 }
851
852 function addRouteFull(routeId,lineCode) {
853 var dialog = $('#edit-favourite-a-fragment');
854 dialog.find('.dialog__body--jotmbe p').text(langJotmbeEditFavouriteLineInfo);
855 var date = new Date().getTime();
856 //userAPI.js
857
858 var dt = getData(lineCode);
859 var uuid = localStorage.getItem("uuid");
860
861 favouriteLineById(uuid, "PUT", routeId, dt, addRouteFullSuccess, addRouteFullError, token);
862 }
863
864 function setSessionStorageParams(CODI_LINIA, NOM_LINIA, ORIGEN_LINIA, DESTI_LINIA) {
865 sessionStorage["CODI_LINIA"] = CODI_LINIA;
866 sessionStorage["NOM_LINIA"] = NOM_LINIA;
867 sessionStorage["ORIGEN_LINIA"] = ORIGEN_LINIA;
868 sessionStorage["DESTI_LINIA"] = DESTI_LINIA;
869 }
870
871 function getAlertTitle(code) {
872 if(code == "PP1" || code == "NP3") return "<@liferay.language key="network.service.partial"/>";
873 else if(code == "PP2" || code == "PP3" || code == "PP4" || code == "PP6" || code == "PP7" || code == "PP8" ||
874 code == "PP9" || code == "NP4" || code == "NP5" || code == "NP6" || code == "NP7" || code == "NP8") return "<@liferay.language key="network.service.alteration"/>";
875 else if(code == "PP5" || code == "PP10") return "<@liferay.language key="network.service.without.service"/>";
876 else if(code == "PP11" || code == "NP12") return "<@liferay.language key="network.service.service.altered"/>";
877 else if(code == "PP99") return "<@liferay.language key="network.service.no.info"/>";
878 else if(code == "NP1" || code == "NP2" || code == "NP9") return "<@liferay.language key="network.service.stoped"/>";
879 else return <@liferay.language key="xarxa.altered.station"/>;
880 }
881
882 function getAlertCircColor(status) {
883 if( status == "SEVERE" || status == "CRITICAL" ) return "red";
884 else if( status == "WARNING") return "yellow";
885 else if( status == "NO_DATA" ) return "grey";
886 else return "";
887 }
888
889 function getAlertStatColor(status) {
890 if( status == "SEVERE" || status == "CRITICAL" ) return "warning";
891 else if( status == "WARNING") return "warning";
892 else if( status == "NO_DATA" ) return "";
893 else return "";
894 }
895
896 function isActive(start, end) {
897 var date = new Date().getTime();
898 if((start <= date && date <= end) || end==null) return true;
899 else return false;
900 }
901
902 var d = new Date();
903 var minutes = d.getMinutes()+"";
904 if(minutes.length == 1){
905 minutes = "0"+minutes;
906 }
907 $('#current_date').html(d.getHours() + ":" + minutes + " " + d.getDate() + "/" + (d.getMonth()+1) + "/" + d.getFullYear());
908
909</script>
Close
© OpenStreetMap contributors