global $
global g_wx
----------------------------------------
--
----------------------------------------
on startMovie
$.import("json")
-- window settings
_movie.stage.title = "WebView Bind Demo"
_movie.stage.titlebarOptions.visible = TRUE
_movie.stage.rect = rect(0, 0, 400, 300)
_movie.stage.bgcolor = rgb("#121212")
_movie.stage.resizable = 1
_movie.centerStage = 1
_movie.stage.visible = 1
g_wx = xtra("WebView").new()
g_wx.useDarkMode(TRUE)
g_wx.webviewCreate(TRUE)
g_wx.webviewSetAutoSize()
g_wx.webviewSetHtml("<html><head><meta name='color-scheme' content='dark'></head><body style='margin:20px''>" &\
"<p>" &\
" <label for='inp'>Lingo expression:</label>" &\
" <input id='inp' value='23 * 7 - 42' style='width: 100%'>" &\
"</p>" &\
"<p>" &\
" <label for='res'>Result:</label>" &\
" <input id='res' style='width: 100%'>" &\
"</p>" &\
"<p><button id='btn'>Evaluate in Lingo - value(...)</button></p>" &\
"<hr>" &\
"<p>" &\
" <label for='cmd'>Lingo command:</label>" &\
" <input id='cmd' value='alert(_movie.path)' style='width: 100%'>" &\
"</p>" &\
"<p><button id='btn2'>Execute by Lingo - do(...)</button></p>" &\
"<script>" &\
"document.getElementById('btn').addEventListener('click', async () => {" &\
" document.getElementById('res').value = await __lingo_eval__(document.getElementById('inp').value);" &\
"});" &\
"document.getElementById('btn2').addEventListener('click', async () => {" &\
" __lingo_do__(document.getElementById('cmd').value);" &\
"});" &\
"</script></body></html>")
g_wx.webviewJSBind("__lingo_eval__")
g_wx.webviewJSBind("__lingo_do__")
-- This demonstrates how to replace the default browser context menu with a custom menu
g_wx.webviewJSBind("__show_menu__")
g_wx.webviewJSEval("document.addEventListener('contextmenu', (e) => {e.preventDefault();__show_menu__();})")
end
----------------------------------------
-- This is required when running the movie in Director, i.e. in the authoring IDE
----------------------------------------
--on stopMovie
-- if not voidP(g_wx) then
-- g_wx.forget()
-- g_wx = VOID
-- end if
--end
----------------------------------------
--
----------------------------------------
on __show_menu__
hMenu = g_wx.createPopupMenu()
g_wx.insertMenuItem(hMenu, -1, "Show Message Window", 1)
g_wx.insertSeparator(hMenu, -1)
g_wx.insertMenuItem(hMenu, -1, "Quit", 2)
cmdID = g_wx.showPopupMenu(hMenu)
g_wx.destroyMenu(hMenu)
case cmdID of
1: _player.debugPlaybackEnabled = 1
2: _player.quit()
end case
end
----------------------------------------
--
----------------------------------------
on __lingo_eval__ (args)
expression = value(args)[1]
res = value(expression)
-- This only works if result is a number
-- return string(res)
-- This also works if result is something else, e.g. a string
return $.json.encode(res)
end
----------------------------------------
--
----------------------------------------
on __lingo_do__ (args)
cmd = value(args)[1]
do(cmd)
end