/** * La konzceptado de eventoj. * Vidi mobilizon/lib/graphql/event.ts pri la datumoj. */ class Event { /** * La plata datumoj el la servilo. */ data; constructor(host) { this.host = host; this.data = {}; } /** * Konstrui evento per datumoj elde servilo. * @param host La servilo kie la evento estas registra. * @param content La datumoj elde la servilo. * @return {Object} La evento. */ static fromData(host, content) { if (typeof content === "string") { content = JSON.parse(content); } var event = new Event(host); event.data = content; return event; } /** * Ricevi la URL pri la rubando de la evento. * @return {String} La URL pri la rubando de la evento, aŭ null. */ getPictureUrl() { return this.data.picture?.url; } /** * Ricevi la komenca dato de la evento. * @return {Date} La komenka dato pri la evento, aŭ null. */ getBeginDate() { if (this.data.beginsOn) { return new Date(this.data.beginsOn); } return null; } /** * Ricevi la fina dato de la evento. * @return {Date} La fina dato pri la evento, aŭ null. */ getEndDate() { if (this.data.endsOn) { return new Date(this.data.endsOn); } return null; } /** * Ricevi la kompleta adreso de la evento. * @return {String} La kompleta adreso. */ getPhysicalAddressString() { if (this.data.physicalAddress) { var addr = this.data.physicalAddress.description; if (this.data.physicalAddress.locality) { return addr += ", " + this.data.physicalAddress.locality; } return addr; } return null; } getTags() { var tags = []; this.data.tags?.forEach(t => { tags.push({slug: t.slug, title: t.title}); }); return tags; } getDescription(cutAtChar = 0) { let desc = this.data?.description; if (desc == null) { return null; } if (cutAtChar <= 0) { return desc; } else { let wordCut = 0; let i = 0; while (i < Math.min(desc.length, cutAtChar)) { if (desc.charAt(i) == " " || desc.charAt(i) == "\n") { wordCut = i; } i++; if (i == desc.length) { wordCut = i; } } if (wordCut < desc.length) { return desc.substring(0, wordCut) + "…"; } else { return desc; } } } getTicketUri() { if (this.data.metadata) { var ticket = this.data.metadata.find(m => m.key === "mz:ticket:external_uri"); if (ticket) { return ticket.value; } } return null; } /** * Recivi la URL de la evento en la originala servilo. * @return {String} La URL de la evento en la originala servilo. */ getOnInstanceUrl() { return "https://" + encodeURIComponent(this.host) + "/events/" + encodeURIComponent(this.data.uuid); } }