Read-only mode

This commit is contained in:
Zef Hemel
2022-09-16 14:26:47 +02:00
parent a598b32ce1
commit b35c60ee60
8 changed files with 62 additions and 5 deletions
@@ -133,3 +133,7 @@ export function prompt(
): Promise<string | undefined> {
return syscall("editor.prompt", message, defaultValue);
}
export function enableReadOnlyMode(enabled: boolean) {
return syscall("editor.enableReadOnlyMode", enabled);
}
+1 -1
View File
@@ -6,7 +6,7 @@ import {
renderToText,
replaceNodesMatching,
} from "@silverbulletmd/common/tree";
import type { FileMeta, PageMeta } from "@silverbulletmd/common/types";
import type { FileMeta } from "@silverbulletmd/common/types";
import { parseMarkdown } from "@silverbulletmd/plugos-silverbullet-syscall/markdown";
const pagePrefix = "💭 ";
+10
View File
@@ -46,6 +46,16 @@ functions:
path: "./page.ts:deletePage"
command:
name: "Page: Delete"
editorLoad:
path: "./editor.ts:editorLoad"
events:
- plugs:loaded
toggleReadOnlyode:
path: "./editor.ts:toggleReadOnlyMode"
command:
name: "Editor: Toggle Read Only Mode"
# Backlinks
indexLinks:
path: "./page.ts:indexLinks"
+16
View File
@@ -0,0 +1,16 @@
import * as clientStore from "@silverbulletmd/plugos-silverbullet-syscall/clientStore";
import { enableReadOnlyMode } from "@silverbulletmd/plugos-silverbullet-syscall/editor";
export async function editorLoad() {
let readOnlyMode = await clientStore.get("readOnlyMode");
if (readOnlyMode) {
await enableReadOnlyMode(true);
}
}
export async function toggleReadOnlyMode() {
let readOnlyMode = await clientStore.get("readOnlyMode");
readOnlyMode = !readOnlyMode;
await enableReadOnlyMode(readOnlyMode);
await clientStore.set("readOnlyMode", readOnlyMode);
}
+13 -1
View File
@@ -658,7 +658,10 @@ export class Editor {
contentDOM.spellcheck = true;
contentDOM.setAttribute("autocorrect", "on");
contentDOM.setAttribute("autocapitalize", "on");
contentDOM.setAttribute("contenteditable", readOnly ? "false" : "true");
contentDOM.setAttribute(
"contenteditable",
readOnly || this.viewState.forcedROMode ? "false" : "true"
);
if (isMobileSafari() && readOnly) {
console.log("Safari read only hack");
@@ -720,6 +723,15 @@ export class Editor {
}
}, [viewState.currentPage]);
useEffect(() => {
if (editor.editorView) {
editor.tweakEditorDOM(
editor.editorView.contentDOM,
viewState.perm === "ro"
);
}
}, [viewState.forcedROMode]);
return (
<>
{viewState.showPageNavigator && (
+5
View File
@@ -163,6 +163,11 @@ export default function reducer(
filterBoxOptions: [],
filterBoxHelpText: "",
};
case "set-editor-ro":
return {
...state,
forcedROMode: action.enabled,
};
}
return state;
}
+6
View File
@@ -192,5 +192,11 @@ export function editorSyscalls(editor: Editor): SysCallMapping {
): string | null => {
return prompt(message, defaultValue);
},
"editor.enableReadOnlyMode": (ctx, enabled: boolean) => {
editor.viewDispatch({
type: "set-editor-ro",
enabled,
});
},
};
}
+7 -3
View File
@@ -8,10 +8,12 @@ export type Notification = {
date: Date;
};
type EditorMode = "ro" | "rw";
export type AppViewState = {
currentPage?: string;
perm: "ro" | "rw";
perm: EditorMode;
forcedROMode: boolean;
isLoading: boolean;
showPageNavigator: boolean;
showCommandPalette: boolean;
@@ -40,6 +42,7 @@ export type AppViewState = {
export const initialViewState: AppViewState = {
perm: "rw",
forcedROMode: false,
isLoading: false,
showPageNavigator: false,
showCommandPalette: false,
@@ -93,4 +96,5 @@ export type Action =
label: string;
onSelect: (option: FilterOption | undefined) => void;
}
| { type: "hide-filterbox" };
| { type: "hide-filterbox" }
| { type: "set-editor-ro"; enabled: boolean };