diff --git a/projects/kiss-vscode/config/KissConfig.hx b/projects/kiss-vscode/config/KissConfig.hx index b39dc422..8bc608a8 100644 --- a/projects/kiss-vscode/config/KissConfig.hx +++ b/projects/kiss-vscode/config/KissConfig.hx @@ -16,12 +16,18 @@ import ktxt2.KTxt2; import re_flex.R; import kiss_tools.KeyShortcutHandler; import JSDomExterns; +import haxe.Constraints; +import js.html.Document; +import js.node.Timers; using haxe.io.Path; using StringTools; typedef Command = (String) -> Void; +typedef QuickWebviewSetup = (Document) -> Void; +typedef QuickWebviewUpdate = (Document, Float, Function) -> Void; + @:expose @:build(kiss.Kiss.buildAll(["KissConfig.kiss", "Config.kiss"])) class KissConfig {} diff --git a/projects/kiss-vscode/config/KissConfig.kiss b/projects/kiss-vscode/config/KissConfig.kiss index 26e73e50..60bdaa26 100644 --- a/projects/kiss-vscode/config/KissConfig.kiss +++ b/projects/kiss-vscode/config/KissConfig.kiss @@ -255,7 +255,19 @@ (function registerConversion [:KTxt2Conversion conversion] (conversions.push conversion))) -(function quickWebview [] - (let [dom (new JSDOM "

Hello world

") +// TODO provide for passing messages between webview and VSCode API +(function :WebviewPanel quickWebview [:String title :QuickWebviewSetup setup :QuickWebviewUpdate update &opt :ViewColumn column :Int fps] + (let [dom (new JSDOM "${title}") document dom.window.document] - document)) \ No newline at end of file + (setup document) + (let [panel (Vscode.window.createWebviewPanel "kissVscodeQuickWebview" title (or column ViewColumn.Beside) (object))] + (set panel.webview.html document.documentElement.innerHTML) + + // TODO setInterval of the update function and allow for stopping it by disposing the panel or calling a close function passed to update + (let [&mut :Function close null + deltaMilli (/ 1000.0 (or fps 30)) + deltaSec (/ deltaMilli 1000) + interval (Timers.setInterval ->{(update document deltaSec close) (set panel.webview.html document.documentElement.innerHTML)}deltaMilli)] + (panel.onDidDispose ->e (Timers.clearInterval interval)) + (set close ->(panel.dispose))) + panel))) \ No newline at end of file diff --git a/projects/kiss-vscode/src/JSDomExterns.hx b/projects/kiss-vscode/src/JSDomExterns.hx index 6febc85e..7c1f80e9 100644 --- a/projects/kiss-vscode/src/JSDomExterns.hx +++ b/projects/kiss-vscode/src/JSDomExterns.hx @@ -4,7 +4,7 @@ typedef JSDOMWindow = { document:Document }; -@:jsRequire("jsdom") +@:jsRequire("jsdom", "JSDOM") extern class JSDOM { function new(html:String); var window:JSDOMWindow;