mobilistache/src/model/event.js
2025-07-09 10:31:47 +02:00

128 lines
2.6 KiB
JavaScript

/**
* 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);
}
}