mirror of
https://github.com/lifestorm/wnsrc.git
synced 2025-12-17 21:53:46 +03:00
Upload
This commit is contained in:
209
lua/pac3/editor/client/panels/web_browser.lua
Normal file
209
lua/pac3/editor/client/panels/web_browser.lua
Normal file
@@ -0,0 +1,209 @@
|
||||
--[[
|
||||
| This file was obtained through the combined efforts
|
||||
| of Madbluntz & Plymouth Antiquarian Society.
|
||||
|
|
||||
| Credits: lifestorm, Gregory Wayne Rossel JR.,
|
||||
| Maloy, DrPepper10 @ RIP, Atle!
|
||||
|
|
||||
| Visit for more: https://plymouth.thetwilightzone.ru/
|
||||
--]]
|
||||
|
||||
local PANEL = {}
|
||||
|
||||
PANEL.Base = "DFrame"
|
||||
PANEL.ClassName = "web_browser"
|
||||
|
||||
function PANEL:Init()
|
||||
self:SetTitle("Web Browser")
|
||||
self:SetDeleteOnClose(false)
|
||||
self:ShowCloseButton(true)
|
||||
self:SetDraggable(true)
|
||||
self:SetSizable(true)
|
||||
|
||||
local top = vgui.Create("EditablePanel", self)
|
||||
top:Dock(TOP)
|
||||
top:SetTall(24)
|
||||
self.top = top
|
||||
|
||||
local btn = vgui.Create("DButton", top)
|
||||
btn:SetText("Back")
|
||||
btn:SizeToContents()
|
||||
btn:SetWide(btn:GetWide()+8)
|
||||
btn:Dock(LEFT)
|
||||
btn.DoClick = function()
|
||||
self.browser:RunJavascript("history.back();")
|
||||
end
|
||||
|
||||
local btn = vgui.Create("DButton", top)
|
||||
btn:SetText("Forward")
|
||||
btn:SizeToContents()
|
||||
btn:SetWide(btn:GetWide()+8)
|
||||
btn:Dock(LEFT)
|
||||
btn.DoClick = function()
|
||||
self.browser:RunJavascript("history.forward();")
|
||||
end
|
||||
|
||||
local btn = vgui.Create("DButton", top)
|
||||
btn:SetText("Refresh")
|
||||
btn:SizeToContents()
|
||||
btn:SetWide(btn:GetWide() + 8)
|
||||
btn:Dock(LEFT)
|
||||
|
||||
btn.DoClick = function()
|
||||
self.browser:RunJavascript("location.reload(true);")
|
||||
end
|
||||
|
||||
btn.Paint = function(btn,w,h)
|
||||
DButton.Paint(btn,w,h)
|
||||
|
||||
if self.loaded then
|
||||
if self.browser:IsLoading() then
|
||||
self.loaded = false
|
||||
end
|
||||
|
||||
surface.SetDrawColor(100, 240, 50, 200)
|
||||
surface.DrawRect(1, 1, w-2, h-2)
|
||||
end
|
||||
|
||||
if self.browser:IsLoading() then
|
||||
surface.SetDrawColor(240 + math.sin(RealTime()*10)*15, 100, 50, 200)
|
||||
surface.DrawRect(1, 1, w-2, h-2)
|
||||
end
|
||||
end
|
||||
|
||||
local entry = vgui.Create("DTextEntry", top)
|
||||
self.entry = entry
|
||||
entry:Dock(FILL)
|
||||
entry:SetTall( 24)
|
||||
|
||||
entry.OnEnter = function(entry)
|
||||
local val = entry:GetText()
|
||||
local js,txt = val:match("javascript:(.+)")
|
||||
|
||||
if js and txt then
|
||||
self.browser:QueueJavascript(txt)
|
||||
return
|
||||
end
|
||||
|
||||
self:OpenURL(val)
|
||||
end
|
||||
|
||||
local browser = vgui.Create("DHTML", self)
|
||||
self.browser = browser
|
||||
browser:Dock(FILL)
|
||||
browser.Paint = function() end
|
||||
browser.OpeningURL = pac.Message
|
||||
browser.FinishedURL = pac.Message
|
||||
browser:AddFunction("gmod", "LoadedURL", function(url, title)
|
||||
self:LoadedURL(url,title)
|
||||
end)
|
||||
browser:AddFunction("gmod", "dbg", function(...)
|
||||
pac.Message('[Browser] ', ...)
|
||||
end)
|
||||
browser:AddFunction("gmod", "status", function(txt)
|
||||
self:StatusChanged(txt)
|
||||
end)
|
||||
browser.ActionSignal = function(...)
|
||||
pac.Message('[BrowserACT] ', ...)
|
||||
end
|
||||
|
||||
browser.OnKeyCodePressed = function(browser,code)
|
||||
if code == 96 then
|
||||
self.browser:RunJavascript[[location.reload(true);]]
|
||||
return
|
||||
end
|
||||
end
|
||||
|
||||
local status = vgui.Create("DLabel", self)
|
||||
self.status = status
|
||||
status:SetText""
|
||||
status:Dock(BOTTOM)
|
||||
end
|
||||
|
||||
function PANEL:StatusChanged(txt)
|
||||
if self.statustxt ~= txt then
|
||||
self.statustxt = txt
|
||||
self.status:SetText(txt or "")
|
||||
end
|
||||
end
|
||||
|
||||
function PANEL:LoadedURL(url,title)
|
||||
if self.entry:HasFocus() then return end
|
||||
self.entry:SetText(url)
|
||||
self.loaded = true
|
||||
self:SetTitle(title and title ~= "" and title or "Web browser")
|
||||
end
|
||||
|
||||
function PANEL:OpenURL(url)
|
||||
self.browser:OpenURL(url)
|
||||
self.entry:SetText(url)
|
||||
end
|
||||
|
||||
function PANEL:Think(w,h)
|
||||
self.BaseClass.Think(self,w,h)
|
||||
if input.IsKeyDown(KEY_ESCAPE) then
|
||||
self:Close()
|
||||
end
|
||||
|
||||
if not self.wasloading and self.browser:IsLoading() then
|
||||
self.wasloading = true
|
||||
end
|
||||
if self.wasloading and not self.browser:IsLoading() then
|
||||
self.wasloading = false
|
||||
self.browser:QueueJavascript[[gmod.LoadedURL(document.location.href,document.title); gmod.status(""); ]]
|
||||
self.browser:QueueJavascript[[function alert(str) { console.log("Alert: "+str); }]]
|
||||
self.browser:QueueJavascript[[if (!document.body.style.background) { document.body.style.background = 'white'; }; void 0;]]
|
||||
self.browser:QueueJavascript[[
|
||||
function getLink() {
|
||||
gmod.status(this.href || "-");
|
||||
}
|
||||
function clickLink() {
|
||||
if (this.href) {
|
||||
gmod.LoadedURL(this.href,"Loading...");
|
||||
}
|
||||
gmod.status("Loading...");
|
||||
}
|
||||
var links = document.getElementsByTagName("a");
|
||||
for (i = 0; i < links.length; i++) {
|
||||
links[i].addEventListener('mouseover',getLink,false)
|
||||
links[i].addEventListener('click',clickLink,false)
|
||||
}
|
||||
|
||||
]]
|
||||
end
|
||||
|
||||
end
|
||||
|
||||
function PANEL:Show()
|
||||
if not self:IsVisible() then
|
||||
self:SetVisible(true)
|
||||
self:MakePopup()
|
||||
self:SetKeyboardInputEnabled(true)
|
||||
self:SetMouseInputEnabled(true)
|
||||
end
|
||||
|
||||
if ValidPanel(self.browser) then
|
||||
self.browser:RequestFocus()
|
||||
end
|
||||
end
|
||||
|
||||
function PANEL:Close()
|
||||
self:SetVisible(false)
|
||||
end
|
||||
|
||||
pace.wiki_panel = NULL
|
||||
|
||||
function pace.ShowWiki(url)
|
||||
if pace.wiki_panel:IsValid() then
|
||||
pace.wiki_panel:Remove()
|
||||
end
|
||||
|
||||
local pnl = pace.CreatePanel("web_browser")
|
||||
pnl:OpenURL(url or pace.WikiURL)
|
||||
pnl:SetSize(ScrW()*0.9, ScrH()*0.8)
|
||||
pnl:Center()
|
||||
pnl:MakePopup()
|
||||
pace.wiki_panel = pnl
|
||||
end
|
||||
|
||||
pace.RegisterPanel(PANEL)
|
||||
Reference in New Issue
Block a user