From 90f510b12123b021ea2b905cdac1e99971ad8d1c Mon Sep 17 00:00:00 2001 From: Soopyboo32 <49228220+Soopyboo32@users.noreply.github.com> Date: Mon, 3 Jan 2022 17:22:36 +0800 Subject: Add suggestion gui --- features/suggestionsGui/index.js | 224 +++++++++++++++++++++++++++++++++++++++ 1 file changed, 224 insertions(+) create mode 100644 features/suggestionsGui/index.js (limited to 'features/suggestionsGui/index.js') diff --git a/features/suggestionsGui/index.js b/features/suggestionsGui/index.js new file mode 100644 index 0000000..f74f8c0 --- /dev/null +++ b/features/suggestionsGui/index.js @@ -0,0 +1,224 @@ +/// +/// +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"; + +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){ + new Thread(()=>{ + this.password = elm.text.text + elm.setText("") + elm.text.selected = false + }).start() + } + })) + }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) + + + this.tags = JSON.parse(FileLib.getUrlContent("http://soopymc.my.to/api/soopyv2/suggestionTags.json")) + + this.finaliseLoading() + } + + loadSuggestionPage(){ + + let data = JSON.parse(FileLib.getUrlContent("http://soopymc.my.to/api/soopyv2/suggestion/new")) + + 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(()=>{ + new Thread(()=>{ + this.loadSuggestion(suggestion._id) + }).start() + })) + + i++ + }); + } + + loadSuggestion(id){ + let data = JSON.parse(FileLib.getUrlContent("http://soopymc.my.to/api/soopyv2/suggestion/" + id + "/user/" + Player.getUUID().toString().replace(/-/g,""))) + + 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)=>{ + new Thread(()=>{ + if(newVal === "delete"){ + FileLib.getUrlContent("http://soopymc.my.to/api/soopyv2/suggestion/" + id + "/delete/" + this.password) + + this.loadSuggestionPage() + this.closeSidebarPage() + return + } + FileLib.getUrlContent("http://soopymc.my.to/api/soopyv2/suggestion/" + id + "/status/" + newVal+ "/" + this.password) + + this.loadSuggestion(id) + }).start() + })) + } + + 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){ + new Thread(()=>{ + FileLib.getUrlContent("http://soopymc.my.to/api/soopyv2/suggestion/" + id + "/vote/" + (type) + "/" + Player.getUUID().toString().replace(/-/g,"")) + + this.loadSuggestion(id) + }).start() + } + + onOpen(){ + new Thread(()=>{ + this.loadSuggestionPage() + }).start() + } +} + +module.exports = { + class: new SuggestionGui() +} \ No newline at end of file -- cgit