mirror of
https://github.com/pds-nest/nest.git
synced 2024-11-22 21:14:18 +00:00
93 lines
2 KiB
JavaScript
93 lines
2 KiB
JavaScript
|
import { IconDefinition, faQuestionCircle } from "@fortawesome/free-solid-svg-icons"
|
||
|
|
||
|
|
||
|
/**
|
||
|
* Condition class for an undefined/unknown condition.
|
||
|
*
|
||
|
* See [the Condition spec](https://gitlab.steffo.eu/nest/g2-progetto/-/wikis/sprint-2/Specifica-delle-Conditions).
|
||
|
*/
|
||
|
export class Condition {
|
||
|
content
|
||
|
type
|
||
|
id
|
||
|
|
||
|
constructor(type, content, id = null) {
|
||
|
this.content = content
|
||
|
this.type = type
|
||
|
this.id = id
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* Get the condition as an object readable by the backend.
|
||
|
*
|
||
|
* @returns {{id, type, content}}
|
||
|
*/
|
||
|
serialize() {
|
||
|
return {
|
||
|
type: this.type,
|
||
|
content: this.content,
|
||
|
id: this.id,
|
||
|
}
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* Display parameters for the badge representing this condition.
|
||
|
*
|
||
|
* @returns {{color: string, icon: IconDefinition, title, content}}
|
||
|
*/
|
||
|
display() {
|
||
|
return {
|
||
|
color: "Grey",
|
||
|
icon: faQuestionCircle,
|
||
|
title: this.id,
|
||
|
content: this.content,
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
|
||
|
|
||
|
/**
|
||
|
* Require a tweet to contain a specific hashtag to be gathered.
|
||
|
*/
|
||
|
export class ConditionHashtag extends Condition {
|
||
|
constructor(hashtag, id = null) {
|
||
|
super(0, hashtag, id)
|
||
|
}
|
||
|
}
|
||
|
|
||
|
|
||
|
/**
|
||
|
* Require a tweet to be posted by a certain user to be gathered.
|
||
|
*/
|
||
|
export class ConditionUser extends Condition {
|
||
|
constructor(user, id = null) {
|
||
|
super(5, user, id)
|
||
|
}
|
||
|
}
|
||
|
|
||
|
|
||
|
/**
|
||
|
* Require a tweet to be posted before or after a certain time to be gathered.
|
||
|
*/
|
||
|
export class ConditionTime extends Condition {
|
||
|
timeRay
|
||
|
|
||
|
constructor(timeRay, id = null) {
|
||
|
super(2, timeRay.toString(), id)
|
||
|
this.timeRay = timeRay
|
||
|
}
|
||
|
}
|
||
|
|
||
|
|
||
|
/**
|
||
|
* Require a tweet to have coordinates associated and to be posted within the {@link MapArea}.
|
||
|
*/
|
||
|
export class ConditionLocation extends Condition {
|
||
|
mapArea
|
||
|
|
||
|
constructor(mapArea, id = null) {
|
||
|
super(3, mapArea.toString(), id)
|
||
|
this.mapArea = mapArea
|
||
|
}
|
||
|
}
|