From 4cbe8e6eddd878093aaabef4858c9b109d5670c9 Mon Sep 17 00:00:00 2001 From: Jeremy Gooch Date: Sun, 20 Nov 2022 12:15:38 -0600 Subject: [PATCH 1/2] Adds the custom boolean variable `org-roam-ui-readonly-mode` for controlling editing abilities from org-roam-ui (specifically deleting nodes) --- components/contextmenu.tsx | 4 +++- org-roam-ui.el | 8 ++++++++ pages/index.tsx | 2 ++ 3 files changed, 13 insertions(+), 1 deletion(-) diff --git a/components/contextmenu.tsx b/components/contextmenu.tsx index 560df0fa..7314d53c 100644 --- a/components/contextmenu.tsx +++ b/components/contextmenu.tsx @@ -54,6 +54,7 @@ export default interface ContextMenuProps { target: OrgRoamNode | string | null nodeType?: string coordinates: { [direction: string]: number | undefined } + readonlyMode: boolean handleLocal: (node: OrgRoamNode, add: string) => void menuClose: () => void scope: { nodeIds: string[] } @@ -71,6 +72,7 @@ export const ContextMenu = (props: ContextMenuProps) => { target, nodeType, coordinates, + readonlyMode, handleLocal, menuClose, scope, @@ -183,7 +185,7 @@ export const ContextMenu = (props: ContextMenuProps) => { > Preview - {target?.level === 0 && ( + {!readonlyMode && target?.level === 0 && ( } diff --git a/org-roam-ui.el b/org-roam-ui.el index e13349b2..5fb80917 100644 --- a/org-roam-ui.el +++ b/org-roam-ui.el @@ -131,6 +131,12 @@ Defaults to #'browse-url." :group 'org-roam-ui :type 'function) +(defcustom org-roam-ui-readonly-mode nil + "If true, 'org-roam-ui' will open in readonly mode, which currently +disables the ability to permanently delete nodes" + :group 'org-roam-ui + :type 'boolean) + ;;Hooks (defcustom org-roam-ui-before-open-node-functions nil @@ -601,6 +607,8 @@ from all other links." ("useInheritance" . ,use-inheritance) ("roamDir" . ,org-roam-directory) + ("readonlyMode" . + ,org-roam-ui-readonly-mode) ("katexMacros" . ,org-roam-ui-latex-macros)))))))) (defun org-roam-ui-sql-to-alist (column-names rows) diff --git a/pages/index.tsx b/pages/index.tsx index 8770283f..09cd46eb 100644 --- a/pages/index.tsx +++ b/pages/index.tsx @@ -85,6 +85,7 @@ export interface EmacsVariables { katexMacros?: { [key: string]: string } attachDir?: string useInheritance?: boolean + readonlyMode?: boolean subDirs: string[] } export type Tags = string[] @@ -710,6 +711,7 @@ export function GraphPage() { target={contextMenuTarget} background={false} coordinates={contextPos} + readonlyMode={emacsVariables.readonlyMode || false} handleLocal={handleLocal} menuClose={contextMenu.onClose.bind(contextMenu)} webSocket={WebSocketRef.current} From 9715328be5b9b50c7598749fdc66a47bc711a24f Mon Sep 17 00:00:00 2001 From: Jeremy Gooch Date: Sun, 20 Nov 2022 13:16:10 -0600 Subject: [PATCH 2/2] Protecting create and delete node functions via readonly variable. Also puts the create node button behind the boolean. --- components/contextmenu.tsx | 2 +- org-roam-ui.el | 25 +++++++++++++------------ 2 files changed, 14 insertions(+), 13 deletions(-) diff --git a/components/contextmenu.tsx b/components/contextmenu.tsx index 7314d53c..a6e73cf8 100644 --- a/components/contextmenu.tsx +++ b/components/contextmenu.tsx @@ -134,7 +134,7 @@ export const ContextMenu = (props: ContextMenuProps) => { > Open in Emacs - ) : ( + ) : !readonlyMode && ( } onClick={() => createNodeInEmacs(target, webSocket)}> Create node diff --git a/org-roam-ui.el b/org-roam-ui.el index 5fb80917..297997c4 100644 --- a/org-roam-ui.el +++ b/org-roam-ui.el @@ -132,8 +132,7 @@ Defaults to #'browse-url." :type 'function) (defcustom org-roam-ui-readonly-mode nil - "If true, 'org-roam-ui' will open in readonly mode, which currently -disables the ability to permanently delete nodes" + "If true, 'org-roam-ui' will open in readonly mode." :group 'org-roam-ui :type 'boolean) @@ -261,20 +260,22 @@ Takes _WS and FRAME as arguments." "Delete a node when receiving DATA from the websocket. TODO: Be able to delete individual nodes." - (progn - (message "Deleted %s" (alist-get 'file data)) - (delete-file (alist-get 'file data)) - (org-roam-db-sync) - (org-roam-ui--send-graphdata))) + (if (not org-roam-ui-readonly-mode) + (progn + (message "Deleted %s" (alist-get 'file data)) + (delete-file (alist-get 'file data)) + (org-roam-db-sync) + (org-roam-ui--send-graphdata)))) (defun org-roam-ui--on-msg-create-node (data) "Create a node when receiving DATA from the websocket." - (progn - (if (and (fboundp #'orb-edit-note) (alist-get 'ROAM_REFS data)) + (if (not org-roam-ui-readonly-mode) + (progn + (if (and (fboundp #'orb-edit-note) (alist-get 'ROAM_REFS data)) (orb-edit-note (alist-get 'id data))) - (org-roam-capture- - :node (org-roam-node-create :title (alist-get 'title data)) - :props '(:finalize find-file)))) + (org-roam-capture- + :node (org-roam-node-create :title (alist-get 'title data)) + :props '(:finalize find-file))))) (defun org-roam-ui--ws-on-close (_websocket) "What to do when _WEBSOCKET to org-roam-ui is closed."