From 274789e733c46e7e20fc1dc918a7251b0206b3d2 Mon Sep 17 00:00:00 2001 From: Sébastien Dailly Date: Mon, 15 Feb 2021 23:03:21 +0100 Subject: Working key handler --- editor/prosemirror/bindings.ml | 9 ++++++--- editor/prosemirror/prosemirror.ml | 18 ++++++++++++++---- editor/prosemirror/prosemirror.mli | 15 +++++++++++---- 3 files changed, 31 insertions(+), 11 deletions(-) (limited to 'editor/prosemirror') diff --git a/editor/prosemirror/bindings.ml b/editor/prosemirror/bindings.ml index f6d4223..cb5a47c 100755 --- a/editor/prosemirror/bindings.ml +++ b/editor/prosemirror/bindings.ml @@ -365,6 +365,9 @@ module Transform = struct method replaceRangeWith: int -> int -> Model.node t -> 'this t meth + method setBlockType: + int -> int -> Model.node_type t -> < .. > t -> 'this t meth + end end @@ -650,13 +653,13 @@ module Example = struct Model.schema t prop method menuBar: - bool opt prop + bool t opt prop method floatingMenu: - bool opt prop + bool t opt prop method history: - bool opt prop + bool t opt prop end end diff --git a/editor/prosemirror/prosemirror.ml b/editor/prosemirror/prosemirror.ml index e97fa9b..e2758c7 100755 --- a/editor/prosemirror/prosemirror.ml +++ b/editor/prosemirror/prosemirror.ml @@ -112,6 +112,10 @@ module State = struct include Bindings.State + type dispatch = (transaction Js.t -> unit) + + type command = editor_state Js.t -> dispatch Js.opt -> bool Js.t + let configuration_prop : unit -> configuration_prop Js_of_ocaml.Js.t = fun () -> Js_of_ocaml.Js.Unsafe.obj [||] @@ -176,6 +180,7 @@ module State = struct let state = Jv.get t "state" in Jv.call (Jv.get state "TextSelection") "create" Jv.Id.[|to_jv doc; Jv.of_int number|] |> Jv.Id.of_jv + end (* Editor view *) @@ -249,13 +254,13 @@ module History = struct |> Jv.Id.of_jv let undo - : t -> State.editor_state Js.t -> (State.transaction -> unit) -> bool + : t -> State.command = fun t state fn -> Jv.call (Jv.get t "history") "undo" [|Jv.Id.to_jv state; Jv.repr fn|] |> Jv.Id.of_jv let redo - : t -> State.editor_state Js.t -> (State.transaction -> unit) -> bool + : t -> State.command = fun t state fn -> Jv.call (Jv.get t "history") "redo" [|Jv.Id.to_jv state; Jv.repr fn|] |> Jv.Id.of_jv @@ -264,7 +269,7 @@ end module Keymap = struct let keymap - : t -> (string * (State.editor_state Js.t -> (State.transaction Js.t -> unit) -> bool)) array -> State.plugin Js.t + : t -> (string * State.command) array -> State.plugin Js.t = fun t props -> let props = Jv.obj @@ Array.map (fun (id, f) -> (id, Jv.repr f)) props in Jv.call (Jv.get t "keymap") "keymap" [|props|] @@ -275,11 +280,16 @@ end module Commands = struct let baseKeymap - : t -> (string * (State.editor_state Js.t -> (State.transaction -> unit) -> bool)) array + : t -> (string * State.command) array = fun t -> Jv.get (Jv.get t "commands") "baseKeymap" |> Jv.Id.of_jv + let set_block_type + : t -> Model.node_type Js.t -> < .. > Js.t -> State.command + = fun t node props -> + Jv.call (Jv.get t "commands") "setBlockType" Jv.Id.[| to_jv node ; to_jv props |] + |> Jv.Id.of_jv end (* Example Setup *) diff --git a/editor/prosemirror/prosemirror.mli b/editor/prosemirror/prosemirror.mli index a4c5d35..7a723d3 100755 --- a/editor/prosemirror/prosemirror.mli +++ b/editor/prosemirror/prosemirror.mli @@ -100,6 +100,10 @@ and State : sig val create_text_selection : t -> Model.node Js.t -> int -> text_selection Js.t + type dispatch = (transaction Js.t -> unit) + + type command = editor_state Js.t -> dispatch Js.opt -> bool Js.t + end (* Editor view *) @@ -146,23 +150,26 @@ module History : sig : t -> history_prop Js.t -> State.plugin Js.t val undo - : t -> State.editor_state Js.t -> (State.transaction -> unit) -> bool + : t -> State.command val redo - : t -> State.editor_state Js.t -> (State.transaction -> unit) -> bool + : t -> State.command end module Keymap : sig val keymap - : t -> (string * (State.editor_state Js.t -> (State.transaction Js.t -> unit) -> bool)) array -> State.plugin Js.t + : t -> (string * State.command) array -> State.plugin Js.t end module Commands : sig val baseKeymap - : t -> (string * (State.editor_state Js.t -> (State.transaction -> unit) -> bool)) array + : t -> (string * State.command) array + + val set_block_type + : t -> Model.node_type Js.t -> < .. > Js.t -> State.command end -- cgit v1.2.3