diff --git a/plug-api/silverbullet-syscall/code_widget.ts b/plug-api/silverbullet-syscall/code_widget.ts index 87f83826..38f39866 100644 --- a/plug-api/silverbullet-syscall/code_widget.ts +++ b/plug-api/silverbullet-syscall/code_widget.ts @@ -8,3 +8,8 @@ export function render( ): Promise { return syscall("codeWidget.render", lang, body, pageName); } + +// Refresh all code widgets on the page that support it +export function refreshAll() { + return syscall("codeWidget.refreshAll"); +} diff --git a/plugs/directive/directive.plug.yaml b/plugs/directive/directive.plug.yaml index 0b99a7ac..7e73fb53 100644 --- a/plugs/directive/directive.plug.yaml +++ b/plugs/directive/directive.plug.yaml @@ -6,7 +6,6 @@ functions: path: ./command.ts:updateDirectivesOnPageCommand command: name: "Directives: Update" - key: "Alt-q" events: - editor:pageLoaded updateDirectivesInSpace: diff --git a/plugs/query/query.plug.yaml b/plugs/query/query.plug.yaml index e36f15bc..7d7d31fa 100644 --- a/plugs/query/query.plug.yaml +++ b/plugs/query/query.plug.yaml @@ -18,6 +18,12 @@ functions: events: - editor:complete + refreshAllWidgets: + path: widget.ts:refreshAll + command: + name: "Live Queries and Templates: Refresh All" + key: "Alt-q" + # Slash commands insertQuery: redirect: template.insertTemplateText diff --git a/plugs/query/widget.ts b/plugs/query/widget.ts new file mode 100644 index 00000000..2c9565d9 --- /dev/null +++ b/plugs/query/widget.ts @@ -0,0 +1,5 @@ +import { codeWidget } from "$sb/syscalls.ts"; + +export function refreshAll() { + codeWidget.refreshAll(); +} diff --git a/web/client_system.ts b/web/client_system.ts index 9f0918ee..4b1545b7 100644 --- a/web/client_system.ts +++ b/web/client_system.ts @@ -37,6 +37,7 @@ import { MessageQueue } from "../plugos/lib/mq.ts"; import { languageSyscalls } from "../common/syscalls/language.ts"; import { handlebarsSyscalls } from "../common/syscalls/handlebars.ts"; import { codeWidgetSyscalls } from "./syscalls/code_widget.ts"; +import { clientCodeWidgetSyscalls } from "./syscalls/client_code_widget.ts"; export class ClientSystem { commandHook: CommandHook; @@ -144,6 +145,7 @@ export class ClientSystem { yamlSyscalls(), handlebarsSyscalls(), codeWidgetSyscalls(this.codeWidgetHook), + clientCodeWidgetSyscalls(), languageSyscalls(), this.client.syncMode // In sync mode handle locally diff --git a/web/components/widget_sandbox_iframe.ts b/web/components/widget_sandbox_iframe.ts index 7ff70bf0..2844891e 100644 --- a/web/components/widget_sandbox_iframe.ts +++ b/web/components/widget_sandbox_iframe.ts @@ -77,13 +77,29 @@ function claimIFrame(): PreloadedIFrame { } } // Nothing available in the pool, let's spin up a new one and add it to the pool - console.log("Yeah this shouldn't happen"); + console.warn("Had to create a new iframe on the fly, this shouldn't happen"); const newPreloadedIFrame = prepareSandboxIFrame(); newPreloadedIFrame.used = true; iframePool.add(newPreloadedIFrame); return newPreloadedIFrame; } +export function broadcastReload() { + for (const preloadedIframe of iframePool) { + if (preloadedIframe.used) { + // Send a message to the global object, which the iframe is listening to + globalThis.dispatchEvent( + new MessageEvent("message", { + source: preloadedIframe.iframe.contentWindow, + data: { + type: "reload", + }, + }), + ); + } + } +} + export function mountIFrame( preloadedIFrame: PreloadedIFrame, client: Client, diff --git a/web/syscalls/client_code_widget.ts b/web/syscalls/client_code_widget.ts new file mode 100644 index 00000000..44689e54 --- /dev/null +++ b/web/syscalls/client_code_widget.ts @@ -0,0 +1,11 @@ +import { CodeWidgetContent } from "$sb/types.ts"; +import { SysCallMapping } from "../../plugos/system.ts"; +import { broadcastReload } from "../components/widget_sandbox_iframe.ts"; + +export function clientCodeWidgetSyscalls(): SysCallMapping { + return { + "codeWidget.refreshAll": () => { + broadcastReload(); + }, + }; +} diff --git a/website/CHANGELOG.md b/website/CHANGELOG.md index 08b758fa..1e870ba6 100644 --- a/website/CHANGELOG.md +++ b/website/CHANGELOG.md @@ -1,6 +1,11 @@ An attempt at documenting the changes/new features introduced in each release. +--- +## Next +* The `Alt-q` command is now bound to the new {[Live Queries and Templates: Refresh All]} command refreshing all [[Live Queries]] and [[Live Templates]] on the page. This is to get y’all prepared to move away from directives. + + --- ## 0.5.5 * Bugfix: on some filesystems that don't report file creation time (like some NASes), SilverBullet crash. This should now be fixed.