Work on $share

This commit is contained in:
Zef Hemel
2022-11-24 12:04:00 +01:00
parent c5c6cd3af0
commit 5b1ec14891
20 changed files with 528 additions and 163 deletions
+21 -6
View File
@@ -2,6 +2,10 @@ import { Editor } from "./editor.tsx";
import { parseYamlSettings, safeRun } from "../common/util.ts";
import { Space } from "../common/spaces/space.ts";
import { HttpSpacePrimitives } from "../common/spaces/http_space_primitives.ts";
import { PlugSpacePrimitives } from "../server/hooks/plug_space_primitives.ts";
import { PageNamespaceHook } from "../server/hooks/page_namespace.ts";
import { SilverBulletHooks } from "../common/manifest.ts";
import { System } from "../plugos/system.ts";
safeRun(async () => {
let password: string | undefined = localStorage.getItem("password") ||
@@ -27,7 +31,21 @@ safeRun(async () => {
}
}
}
const serverSpace = new Space(httpPrimitives);
// Instantiate a PlugOS system for the client
const system = new System<SilverBulletHooks>("client");
// Attach the page namespace hook
const namespaceHook = new PageNamespaceHook();
system.addHook(namespaceHook);
const spacePrimitives = new PlugSpacePrimitives(
httpPrimitives,
namespaceHook,
"client",
);
const serverSpace = new Space(spacePrimitives);
serverSpace.watch();
console.log("Booting...");
@@ -36,6 +54,7 @@ safeRun(async () => {
const editor = new Editor(
serverSpace,
system,
document.getElementById("sb-root")!,
"",
settings.indexPage || "index",
@@ -46,10 +65,9 @@ safeRun(async () => {
await editor.init();
});
// if (localStorage.getItem("disable_sw") !== "true") {
if (navigator.serviceWorker) {
navigator.serviceWorker
.register(new URL("service_worker.js", location.href), {
.register(new URL("/service_worker.js", location.href), {
type: "module",
})
.then((r) => {
@@ -60,6 +78,3 @@ if (navigator.serviceWorker) {
"No launching service worker (not present, maybe because not running on localhost or over SSL)",
);
}
// } else {
// console.log("Service worker disabled via disable_sw");
// }
-1
View File
@@ -67,7 +67,6 @@ export function TopBar({
value={pageName}
className="sb-edit-page-name"
onKeyDown={(e) => {
console.log("Key press", e);
e.stopPropagation();
if (e.key === "Enter") {
e.preventDefault();
+37 -34
View File
@@ -131,7 +131,7 @@ export class Editor {
.dispatchEvent("editor:updated")
.catch((e) => console.error("Error dispatching editor:updated event", e));
}, 1000);
private system = new System<SilverBulletHooks>("client");
private system: System<SilverBulletHooks>;
private mdExtensions: MDExt[] = [];
urlPrefix: string;
indexPage: string;
@@ -139,11 +139,13 @@ export class Editor {
constructor(
space: Space,
system: System<SilverBulletHooks>,
parent: Element,
urlPrefix: string,
indexPage: string,
) {
this.space = space;
this.system = system;
this.urlPrefix = urlPrefix;
this.viewState = initialViewState;
this.viewDispatch = () => {};
@@ -223,6 +225,40 @@ export class Editor {
async init() {
this.focus();
const globalModules: any = await (
await fetch(`${this.urlPrefix}/global.plug.json`)
).json();
this.system.on({
sandboxInitialized: async (sandbox) => {
for (
const [modName, code] of Object.entries(
globalModules.dependencies,
)
) {
await sandbox.loadDependency(modName, code as string);
}
},
});
this.space.on({
pageChanged: (meta) => {
if (this.currentPage === meta.name) {
console.log("Page changed on disk, reloading");
this.flashNotification("Page changed on disk, reloading");
this.reloadPage();
}
},
pageListUpdated: (pages) => {
this.viewDispatch({
type: "pages-listed",
pages: pages,
});
},
});
await this.reloadPlugs();
this.pageNavigator.subscribe(async (pageName, pos: number | string) => {
console.log("Now navigating to", pageName);
@@ -266,39 +302,6 @@ export class Editor {
}
});
const globalModules: any = await (
await fetch(`${this.urlPrefix}/global.plug.json`)
).json();
this.system.on({
sandboxInitialized: async (sandbox) => {
for (
const [modName, code] of Object.entries(
globalModules.dependencies,
)
) {
await sandbox.loadDependency(modName, code as string);
}
},
});
this.space.on({
pageChanged: (meta) => {
if (this.currentPage === meta.name) {
console.log("Page changed on disk, reloading");
this.flashNotification("Page changed on disk, reloading");
this.reloadPage();
}
},
pageListUpdated: (pages) => {
this.viewDispatch({
type: "pages-listed",
pages: pages,
});
},
});
await this.reloadPlugs();
await this.dispatchAppEvent("editor:init");
}