mirror of
https://github.com/heyman/heynote.git
synced 2024-11-25 09:23:17 +01:00
Add select all command that first selects the current note, and then the whole document (if executed with a whole note selected)
This commit is contained in:
parent
4307bf6d0f
commit
0f072b8699
@ -1,4 +1,6 @@
|
||||
import { EditorView } from "@codemirror/view"
|
||||
import { selectAll as defaultSelectAll } from "@codemirror/commands"
|
||||
import { blockState } from "./note-block"
|
||||
|
||||
|
||||
export const insertNewNote = ({ state, dispatch }) => {
|
||||
@ -16,3 +18,22 @@ export const insertNewNote = ({ state, dispatch }) => {
|
||||
return true;
|
||||
}
|
||||
|
||||
|
||||
export const selectAll = ({ state, dispatch }) => {
|
||||
// find which block the cursor is in
|
||||
const range = state.selection.asSingle().ranges[0]
|
||||
const block = state.facet(blockState).find(block => block.content.from <= range.from && block.content.to >= range.from)
|
||||
|
||||
// check if all the text of the note is already selected, in which case we want to select all the text of the whole document
|
||||
if (range.from === block.content.from && range.to === block.content.to) {
|
||||
return defaultSelectAll({state, dispatch})
|
||||
}
|
||||
|
||||
dispatch(state.update({
|
||||
selection: {anchor: block.content.from, head: block.content.to},
|
||||
userEvent: "select"
|
||||
}))
|
||||
|
||||
return true
|
||||
}
|
||||
|
||||
|
@ -39,7 +39,7 @@ function getBlocks(state) {
|
||||
return blocks
|
||||
}
|
||||
|
||||
const blockState = StateField.define({
|
||||
export const blockState = StateField.define({
|
||||
create(state) {
|
||||
return getBlocks(state);
|
||||
},
|
||||
|
@ -7,7 +7,7 @@ import { nord } from "./theme/nord.mjs"
|
||||
import { customSetup } from "./setup.js"
|
||||
import { heynoteLang } from "./lang-heynote/heynote.js"
|
||||
import { noteBlockExtension } from "./block/note-block.js"
|
||||
import { insertNewNote } from "./block/commands.js";
|
||||
import { insertNewNote, selectAll } from "./block/commands.js";
|
||||
|
||||
|
||||
export class HeynoteEditor {
|
||||
@ -43,6 +43,11 @@ export class HeynoteEditor {
|
||||
preventDefault: true,
|
||||
run: insertNewNote,
|
||||
},
|
||||
{
|
||||
key: "Mod-a",
|
||||
preventDefault: true,
|
||||
run: selectAll,
|
||||
},
|
||||
]),
|
||||
|
||||
customSetup,
|
||||
|
Loading…
Reference in New Issue
Block a user