128 lines
2.6 KiB
JavaScript
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);
|
|
}
|
|
}
|