import he from 'he'; import {GoogleEvent, GoogleLocation, StringDictionary} from './interfaces'; const regexes = { space: /\s+/g, facebook: /(?:(?:http|https):\/\/)?(?:www.)?facebook.com\/(?:events\/)?(?:[0-9]*\/)/ }; export default class Event { link: string; title: string; status: string; start: Date; created: Date; end: Date; calendarName: string; color: string; rawLocation: GoogleLocation | string; locationReplacers: StringDictionary; rawDescription: string; map: string; private _location: string; private _facebookEvent: string; private _description: string; constructor(event: GoogleEvent, calendarName: string, color: string, { locationReplacers, mapsLink }: { locationReplacers: StringDictionary, mapsLink: string }) { this.created = new Date(event.created); this.link = event.htmlLink; this.title = event.summary; this.status = event.status; this.start = new Date(event.start.dateTime); this.end = new Date(event.end.dateTime); this.calendarName = calendarName; this.color = color; this.rawLocation = event.location || ''; this.locationReplacers = locationReplacers; this.rawDescription = he.decode(event.description || ''); this.map = mapsLink ? mapsLink + this.rawLocation.replace(regexes.space, '+') : ''; } get location(): string { if (this._location) return this._location; let location; let l = this.rawLocation.split(',').shift(); if (this.locationReplacers[l]) location = this.locationReplacers[l]; else location = l; return this._location = location; } get facebookEvent(): string { if (this._facebookEvent) return this._facebookEvent; let facebookEvent = ''; if (regexes.facebook.test(this.rawDescription)) facebookEvent = this.rawDescription.match(regexes.facebook)[0]; return this._facebookEvent = facebookEvent; } get description(): string { if (this._description) return this._description; let description = this.rawDescription; let start = description.indexOf('') + 3; description = description.slice(0, start) + description.slice(end); start = description.indexOf('