///
///
import SoopyTextElement from "../../../guimanager/GuiElement/SoopyTextElement";
import Feature from "../../featureClass/class";
import GuiPage from "../soopyGui/GuiPage";
import BoxWithLoading from "../../../guimanager/GuiElement/BoxWithLoading";
import BoxWithTextAndDescription from "../../../guimanager/GuiElement/BoxWithTextAndDescription";
import SoopyGuiElement from "../../../guimanager/GuiElement/SoopyGuiElement";
import PasswordInput from "../../../guimanager/GuiElement/PasswordInput";
import SoopyKeyPressEvent from "../../../guimanager/EventListener/SoopyKeyPressEvent";
import { numberWithCommas } from "../../utils/numberUtils";
import { firstLetterWordCapital } from "../../utils/stringUtils";
import SoopyBoxElement from "../../../guimanager/GuiElement/SoopyBoxElement";
import SoopyMarkdownElement from "../../../guimanager/GuiElement/SoopyMarkdownElement";
import SoopyMouseClickEvent from "../../../guimanager/EventListener/SoopyMouseClickEvent";
import ButtonWithArrow from "../../../guimanager/GuiElement/ButtonWithArrow";
import Dropdown from "../../../guimanager/GuiElement/Dropdown";
import SoopyContentChangeEvent from "../../../guimanager/EventListener/SoopyContentChangeEvent";
import { fetch } from "../../utils/networkUtils";
class SuggestionGui extends Feature {
constructor() {
super()
}
onEnable(){
this.initVariables()
this.GuiPage = new SuggestionPage()
}
initVariables(){
this.GuiPage = undefined
}
onDisable(){
this.initVariables()
}
}
class SuggestionPage extends GuiPage {
constructor(){
super(7)
this.name = "Suggestions"
this.pages = [this.newPage()]
this.password = ""
if(Player.getUUID().toString().replace(/-/g,"") === "dc8c39647b294e03ae9ed13ebd65dd29"){
let elm = new PasswordInput().setPlaceholder("Suggestions").setLocation(0.125, 0.05, 0.3, 0.1)
this.pages[0].addChild(elm)
elm.addEvent(new SoopyKeyPressEvent().setHandler((key, keyId)=>{
if(elm.text.selected && keyId === 28){
this.password = elm.text.text
elm.setText("")
elm.text.selected = false
}
}))
}else{
this.pages[0].addChild(new SoopyTextElement().setText("§0Suggestions").setMaxTextScale(3).setLocation(0.125, 0.05, 0.3, 0.1))
}
let button = new ButtonWithArrow().setText("§0Suggest feature (Opens in browser)").setLocation(0.45, 0.05, 0.5, 0.1)
this.pages[0].addChild(button)
button.addEvent(new SoopyMouseClickEvent().setHandler(()=>{
java.awt.Desktop.getDesktop().browse(
new java.net.URI("https://soopymc.my.to/soopyv2suggestion?uuid=" + Player.getUUID().toString().replace(/-/g,"") )
);
}))
this.suggestionElements = {}
this.suggestionsArea = new SoopyGuiElement().setLocation(0.05, 0.2, 0.9, 0.8).setScrollable(true)
this.pages[0].addChild(this.suggestionsArea)
fetch("http://soopymc.my.to/api/soopyv2/suggestionTags.json").json(data=>{
this.tags = data
})
this.finaliseLoading()
}
loadSuggestionPage(){
fetch("http://soopymc.my.to/api/soopyv2/suggestion/new").json(data=>{
this.suggestionElements = {}
this.suggestionsArea.clearChildren()
let i = 0
data.suggestions.forEach((suggestion) => {
if(suggestion.status === "pending_review" || suggestion.status === "closed"){
if(suggestion.uuid !== Player.getUUID().toString().replace(/-/g, "") && Player.getUUID().toString().replace(/-/g, "") !== "dc8c39647b294e03ae9ed13ebd65dd29")return
}
let box = new SoopyBoxElement().setLocation(0, 0.225 * i, 1, 0.2).setLore(["Click for more information + vote buttons"])
this.suggestionsArea.addChild(box)
let title = new SoopyTextElement().setText("§0" + suggestion.title + " §7(" + this.tags.suggestionTags[suggestion.tag] + ")").setMaxTextScale(2).setLocation(0, 0, 0.8,1)
box.addChild(title)
let popularity = new SoopyTextElement().setText("§0Opinion: " + numberWithCommas(suggestion.likes-suggestion.dislikes)).setMaxTextScale(2).setLocation(0.85,0,0.1,1)
box.addChild(popularity)
this.suggestionElements[suggestion._id] = {
title: title,
popularity: popularity
}
box.addEvent(new SoopyMouseClickEvent().setHandler(()=>{
this.loadSuggestion(suggestion._id)
}))
i++
});
})
}
loadSuggestion(id){
fetch("http://soopymc.my.to/api/soopyv2/suggestion/" + id + "/user/" + Player.getUUID().toString().replace(/-/g,"")).json(data=>{
let sideBarElm = new SoopyGuiElement().setLocation(0,0,1,1).setScrollable(true)
if(!data.success){
sideBarElm.addChild(new SoopyTextElement().setText("§cError loading suggestion").setMaxTextScale(3).setLocation(0.5,0.5,0.5,0.5))
this.openSidebarPage(sideBarElm)
return
}
this.suggestionElements[id].title.setText("§0" + data.suggestion.title + " §7(" + this.tags.suggestionTags[data.suggestion.tag] + ")")
this.suggestionElements[id].popularity.setText("§0Opinion: " + numberWithCommas(data.suggestion.likes-data.suggestion.dislikes))
let title = new SoopyTextElement().setText("§0" + data.suggestion.title + " §7(" + this.tags.suggestionTags[data.suggestion.tag] + ")").setMaxTextScale(2).setLocation(0.05, 0.05, 0.9,0.1)
sideBarElm.addChild(title)
if(Player.getUUID().toString().replace(/-/g, "") !== "dc8c39647b294e03ae9ed13ebd65dd29"){
let suggestor = new SoopyTextElement().setText("§7Suggested by " + data.suggestion.username + " | Status: " + this.tags.statusTags[data.suggestion.status]).setMaxTextScale(1).setLocation(0.05, 0.15, 0.9,0.05)
sideBarElm.addChild(suggestor)
}else{
let suggestor = new SoopyTextElement().setText("§7Suggested by " + data.suggestion.username + " | Status: ").setMaxTextScale(1).setLocation(0.05, 0.15, 0.6,0.05)
sideBarElm.addChild(suggestor)
let drop = new Dropdown().setLocation(0.65, 0.13, 0.3, 0.09).setOptions({...this.tags.statusTags,"delete": "Delete"}).setSelectedOption(data.suggestion.status)
sideBarElm.addChild(drop)
drop.addEvent(new SoopyContentChangeEvent().setHandler((newVal)=>{
if(newVal === "delete"){
fetch("http://soopymc.my.to/api/soopyv2/suggestion/" + id + "/delete/" + this.password).async()
this.loadSuggestionPage()
this.closeSidebarPage()
return
}
fetch("http://soopymc.my.to/api/soopyv2/suggestion/" + id + "/status/" + newVal+ "/" + this.password).async()
this.loadSuggestion(id)
}))
}
let likesText = new SoopyTextElement().setText("§0Dislikes: " + numberWithCommas(data.suggestion.dislikes) + " Likes: " + numberWithCommas(data.suggestion.likes)).setMaxTextScale(1).setLocation(0.35, 0.225, 0.3,0.1)
sideBarElm.addChild(likesText)
if(!data.suggestion.hasDisliked){
let dislikeButton = new ButtonWithArrow().setDirectionRight(false).setText("§cDislike").setLocation(0.05, 0.225, 0.275,0.1)
sideBarElm.addChild(dislikeButton)
dislikeButton.addEvent(new SoopyMouseClickEvent().setHandler(()=>{
this.voteSuggestion(id, "dislike")
}))
}else{
let dislikeButton = new ButtonWithArrow().setDirectionRight(false).setText("§cUndislike").setLocation(0.05, 0.225, 0.275,0.1)
sideBarElm.addChild(dislikeButton)
dislikeButton.addEvent(new SoopyMouseClickEvent().setHandler(()=>{
this.voteSuggestion(id, "clear")
}))
}
if(!data.suggestion.hasLiked){
let likeButton = new ButtonWithArrow().setText("§aLike").setLocation(0.675, 0.225, 0.275,0.1)
sideBarElm.addChild(likeButton)
likeButton.addEvent(new SoopyMouseClickEvent().setHandler(()=>{
this.voteSuggestion(id, "like")
}))
}else{
let likeButton = new ButtonWithArrow().setText("§aUnlike").setLocation(0.675, 0.225, 0.275,0.1)
sideBarElm.addChild(likeButton)
likeButton.addEvent(new SoopyMouseClickEvent().setHandler(()=>{
this.voteSuggestion(id, "clear")
}))
}
let description = new SoopyMarkdownElement().setText(data.suggestion.description).setLocation(0.05, 0.325, 0.9,0.6)
sideBarElm.addChild(description)
this.openSidebarPage(sideBarElm)
})
}
voteSuggestion(id, type){
fetch("http://soopymc.my.to/api/soopyv2/suggestion/" + id + "/vote/" + (type) + "/" + Player.getUUID().toString().replace(/-/g,"")).async()
this.loadSuggestion(id)
}
onOpen(){
this.loadSuggestionPage()
}
}
module.exports = {
class: new SuggestionGui()
}