dobrograd-13-06-2022/garrysmod/addons/admin-sg/lua/modules/gui/news.lua
Jonny_Bro (Nikita) e4d5311906 first commit
2023-11-16 15:01:19 +05:00

138 lines
No EOL
3.7 KiB
Lua

--[[
© 2017 Thriving Ventures Limited do not share, re-distribute or modify
without permission of its author (gustaf@thrivingventures.com).
]]
local category = {}
category.name = "News"
category.material = "serverguard/menuicons/icon_announcements.png"
local loadingTexture = Material("icon16/arrow_rotate_anticlockwise.png")
local function retrieveNews()
local function resetPanels()
category.panel.loadingPanel:SetVisible(false)
category.panel.newsPanel:SetVisible(false)
category.panel.divider:SetVisible(true)
category.panel.refresh:SetVisible(true)
category.panel.back:SetVisible(false)
end
http.Fetch(SERVERGUARD.ENDPOINT .. "get/news/top",
function(body, length, headers, responseCode)
local returnData = util.JSONToTable(body)
if (returnData != nil && table.Count(returnData) > 0) then
if (!returnData["success"]) then
resetPanels()
return;
end
category.panel.divider:Clear()
for k, v in pairs(returnData["items"]) do
local panel = category.panel.divider:AddRow(v["date"], v["title"])
function panel:DoClick()
category.panel.newsPanel:PopulateArticle(v["title"], v["date"], v["stub"], v["content"])
category.panel.loadingPanel:SetVisible(false)
category.panel.newsPanel:SetVisible(true)
category.panel.divider:SetVisible(false)
category.panel.refresh:SetVisible(false)
category.panel.back:SetVisible(true)
end
end
end
resetPanels()
end,
function(error)
resetPanels()
end
)
end
function category:Create(base)
base.panel = base:Add("tiger.panel")
base.panel:SetTitle("Latest news")
base.panel:Dock(FILL)
base.panel:DockPadding(24, 24, 24, 48)
base.panel.newsPanel = base.panel:Add("tiger.news")
base.panel.newsPanel:Dock(FILL)
base.panel.newsPanel:DockPadding(1, 1, 1, 1)
base.panel.newsPanel:SetVisible(false)
base.panel.loadingPanel = base.panel:Add("tiger.panel")
base.panel.loadingPanel:Dock(FILL)
base.panel.loadingPanel:SetVisible(false)
function base.panel.loadingPanel:Paint(width, height)
if (!self.rotation) then
self.rotation = 0
end
self.rotation = self.rotation + 140 * FrameTime()
if (self.rotation > 360) then
self.rotation = 0
end
draw.MaterialRotated(width / 2 - 8, height / 2 - 8, 16, 16, color_white, loadingTexture, self.rotation)
end
base.panel.divider = base.panel:Add("tiger.divider")
base.panel.divider:Dock(FILL)
base.panel.back = base.panel:Add("tiger.button")
base.panel.back:SetPos(4, 4)
base.panel.back:SetText("Back")
base.panel.back:SizeToContents()
base.panel.back:SetVisible(false)
function base.panel.back:DoClick()
category.panel.loadingPanel:SetVisible(false)
category.panel.newsPanel:SetVisible(false)
category.panel.divider:SetVisible(true)
category.panel.refresh:SetVisible(true)
category.panel.back:SetVisible(false)
end
base.panel.refresh = base.panel:Add("tiger.button")
base.panel.refresh:SetPos(4, 4)
base.panel.refresh:SetText("Refresh")
base.panel.refresh:SizeToContents()
function base.panel.refresh:DoClick()
base.panel.loadingPanel:SetVisible(true)
base.panel.newsPanel:SetVisible(false)
base.panel.divider:SetVisible(false)
base.panel.refresh:SetVisible(false)
base.panel.back:SetVisible(false)
retrieveNews()
end
function base.panel:PerformLayout()
local width, height = self:GetSize()
base.panel.refresh:SetPos(width - (base.panel.refresh:GetWide() + 24), height - (base.panel.refresh:GetTall() + 14))
base.panel.back:SetPos(width - (base.panel.back:GetWide() + 24), height - (base.panel.back:GetTall() + 14))
end
category.panel = base.panel
end
function category:Update(base)
retrieveNews();
end;
serverguard.menu.AddSubCategory("Information", category)