mirror of
https://github.com/lifestorm/wnsrc.git
synced 2025-12-16 13:23:46 +03:00
195 lines
3.5 KiB
Lua
195 lines
3.5 KiB
Lua
--[[
|
|
| 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 = {}
|
|
|
|
AccessorFunc( PANEL, "m_bScrollbars", "Scrollbars", FORCE_BOOL )
|
|
AccessorFunc( PANEL, "m_bAllowLua", "AllowLua", FORCE_BOOL )
|
|
|
|
function PANEL:Init()
|
|
|
|
self:SetScrollbars( true )
|
|
self:SetAllowLua( false )
|
|
|
|
self.JS = {}
|
|
self.Callbacks = {}
|
|
|
|
--
|
|
-- Implement a console.log - because awesomium doesn't provide it for us anymore.
|
|
--
|
|
self:AddFunction( "console", "log", function( param ) self:ConsoleMessage( param ) end )
|
|
|
|
end
|
|
|
|
function PANEL:Think()
|
|
|
|
if ( self.JS && !self:IsLoading() ) then
|
|
|
|
for k, v in pairs( self.JS ) do
|
|
|
|
self:RunJavascript( v )
|
|
|
|
end
|
|
|
|
self.JS = nil
|
|
|
|
end
|
|
|
|
end
|
|
|
|
function PANEL:Paint()
|
|
|
|
if ( self:IsLoading() ) then
|
|
return true
|
|
end
|
|
|
|
end
|
|
|
|
function PANEL:QueueJavascript( js )
|
|
|
|
--
|
|
-- Can skip using the queue if there's nothing else in it
|
|
--
|
|
if ( !self.JS && !self:IsLoading() ) then
|
|
return self:RunJavascript( js )
|
|
end
|
|
|
|
self.JS = self.JS or {}
|
|
|
|
table.insert( self.JS, js )
|
|
self:Think()
|
|
|
|
end
|
|
|
|
function PANEL:Call( js )
|
|
self:QueueJavascript( js )
|
|
end
|
|
|
|
function PANEL:ConsoleMessage( msg, file, line )
|
|
|
|
if ( !isstring( msg ) ) then msg = "*js variable*" end
|
|
|
|
--
|
|
-- Handle error messages
|
|
--
|
|
if ( isstring( file ) && isnumber( line ) ) then
|
|
|
|
if ( #file > 64 ) then
|
|
file = string.sub( file, 1, 64 ) .. "..."
|
|
end
|
|
|
|
MsgC( Color( 255, 160, 255 ), "[HTML] " )
|
|
MsgC( Color( 255, 255, 255 ), file, ":", line, ": ", msg, "\n" )
|
|
return
|
|
|
|
end
|
|
|
|
--
|
|
-- Handle Lua execution
|
|
--
|
|
if ( self.m_bAllowLua && msg:StartsWith( "RUNLUA:" ) ) then
|
|
|
|
local strLua = msg:sub( 8 )
|
|
|
|
SELF = self
|
|
RunString( strLua )
|
|
SELF = nil
|
|
return
|
|
|
|
end
|
|
|
|
--
|
|
-- Plain ol' console.log
|
|
--
|
|
MsgC( Color( 255, 160, 255 ), "[HTML] " )
|
|
MsgC( Color( 255, 255, 255 ), msg, "\n" )
|
|
|
|
end
|
|
|
|
--
|
|
-- Called by the engine when a callback function is called
|
|
--
|
|
function PANEL:OnCallback( obj, func, args )
|
|
|
|
--
|
|
-- Use AddFunction to add functions to this.
|
|
--
|
|
local f = self.Callbacks[ obj .. "." .. func ]
|
|
|
|
if ( f ) then
|
|
return f( unpack( args ) )
|
|
end
|
|
|
|
end
|
|
|
|
--
|
|
-- Add a function to Javascript
|
|
--
|
|
function PANEL:AddFunction( obj, funcname, func )
|
|
|
|
--
|
|
-- Create the `object` if it doesn't exist
|
|
--
|
|
if ( !self.Callbacks[ obj ] ) then
|
|
self:NewObject( obj )
|
|
self.Callbacks[ obj ] = true
|
|
end
|
|
|
|
--
|
|
-- This creates the function in javascript (which redirects to c++ which calls OnCallback here)
|
|
--
|
|
self:NewObjectCallback( obj, funcname )
|
|
|
|
--
|
|
-- Store the function so OnCallback can find it and call it
|
|
--
|
|
self.Callbacks[ obj .. "." .. funcname ] = func
|
|
|
|
end
|
|
|
|
--
|
|
-- Called when this panel begins loading a page
|
|
--
|
|
function PANEL:OnBeginLoadingDocument( url )
|
|
end
|
|
|
|
--
|
|
-- Called when this panel successfully loads a page
|
|
--
|
|
function PANEL:OnFinishLoadingDocument( url )
|
|
end
|
|
|
|
--
|
|
-- Called when this panel's DOM has been set up. You can run JavaScript in here
|
|
--
|
|
function PANEL:OnDocumentReady( url )
|
|
end
|
|
|
|
--
|
|
-- Called when a this panel tries to open a child (such as a popup or new tab)
|
|
--
|
|
function PANEL:OnChildViewCreated( sourceURL, targetURL, isPopup )
|
|
end
|
|
|
|
--
|
|
-- Called when the title of the loaded document has changed
|
|
--
|
|
function PANEL:OnChangeTitle( title )
|
|
end
|
|
|
|
--
|
|
-- Called when the target URL of the frame has changed, this happens when you hover over a link
|
|
--
|
|
function PANEL:OnChangeTargetURL( url )
|
|
end
|
|
|
|
derma.DefineControl( "DHTML", "A shape", PANEL, "Awesomium" )
|