ojp-sdk
Version:
OJP (Open Journey Planner) Javascript SDK
57 lines (56 loc) • 2.28 kB
JavaScript
export class ServiceBooking {
constructor(bookingArrangements) {
this.bookingArrangements = bookingArrangements;
}
static initWithLegTreeNode(legTreeNode) {
const bookingArrangementsTreeNode = legTreeNode.findChildNamed('Service/BookingArrangements');
if (bookingArrangementsTreeNode === null) {
return null;
}
const bookingArrangementTreeNodes = bookingArrangementsTreeNode.findChildrenNamed('BookingArrangement');
if (bookingArrangementTreeNodes.length === 0) {
console.error('ERROR - no BookingArrangements nodes found');
return null;
}
const bookingArrangements = [];
bookingArrangementTreeNodes.forEach(bookingArrangementTreeNode => {
const agencyCode = bookingArrangementTreeNode.findTextFromChildNamed('BookingAgencyName/Text');
let infoURL = bookingArrangementTreeNode.findTextFromChildNamed('InfoUrl');
if ((agencyCode === null) || (infoURL === null)) {
return;
}
infoURL = infoURL.trim();
if (infoURL.length < 2) {
return;
}
// strip out <>
if (infoURL[0] === '<') {
infoURL = infoURL.substring(1, infoURL.length - 1);
}
var el = document.createElement('textarea');
el.innerHTML = infoURL.trim();
infoURL = el.innerText;
const bookingArrangement = {
agencyCode: agencyCode.trim(),
agencyName: ServiceBooking.computeAgencyName(agencyCode),
infoURL: infoURL,
};
bookingArrangements.push(bookingArrangement);
});
const serviceBooking = new ServiceBooking(bookingArrangements);
return serviceBooking;
}
static computeAgencyName(agencyCode) {
agencyCode = agencyCode.trim();
if (agencyCode.endsWith('_local.ch')) {
return 'local.ch';
}
if (agencyCode.endsWith('_maps.google.ch')) {
return 'maps.google.com';
}
if (agencyCode.endsWith('_openstreetmap.org')) {
return 'openstreetmap.org';
}
return 'n/a catalog: ' + agencyCode;
}
}