Skip to content

Commit

Permalink
feat: add 'all' option to focus command, fix #2181
Browse files Browse the repository at this point in the history
  • Loading branch information
Philipp Kühn authored and Philipp Kühn committed Nov 22, 2021
1 parent cd14731 commit 3c571c9
Show file tree
Hide file tree
Showing 4 changed files with 15 additions and 4 deletions.
5 changes: 4 additions & 1 deletion docs/api/commands/focus.md
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@ When a user clicks on a button outside the editor, the browser sets the focus to
See also: [setTextSelection](/api/commands/set-text-selection), [blur](/api/commands/blur)

## Parameters
`position: 'start' | 'end' | number | boolean | null (false)`
`position: 'start' | 'end' | 'all' | number | boolean | null (false)`

By default, it’s restoring the cursor position (and text selection). Pass a position to move the cursor too.

Expand All @@ -21,6 +21,9 @@ editor.commands.focus('start')
// Set the cursor to the last position
editor.commands.focus('end')

// Selects the whole document
editor.commands.focus('all')

// Set the cursor to position 10
editor.commands.focus(10)
```
1 change: 1 addition & 0 deletions docs/api/editor.md
Original file line number Diff line number Diff line change
Expand Up @@ -241,6 +241,7 @@ With `autofocus` you can force the cursor to jump in the editor on initializatio
| --------- | ------------------------------------------------------ |
| `'start'` | Sets the focus to the beginning of the document. |
| `'end'` | Sets the focus to the end of the document. |
| `'all'` | Selects the whole document. |
| `Number` | Sets the focus to a specific position in the document. |
| `true` | Enables autofocus. |
| `false` | Disables autofocus. |
Expand Down
11 changes: 9 additions & 2 deletions packages/core/src/commands/focus.ts
Original file line number Diff line number Diff line change
Expand Up @@ -16,15 +16,22 @@ function resolveSelection(state: EditorState, position: FocusPosition = null) {
}
}

if (position === 'end') {
const { size } = state.doc.content
const { size } = state.doc.content

if (position === 'end') {
return {
from: size,
to: size,
}
}

if (position === 'all') {
return {
from: 0,
to: size,
}
}

return {
from: position,
to: position,
Expand Down
2 changes: 1 addition & 1 deletion packages/core/src/types.ts
Original file line number Diff line number Diff line change
Expand Up @@ -212,7 +212,7 @@ export type ChainedCommands = {

export type CanCommands = SingleCommands & { chain: () => ChainedCommands }

export type FocusPosition = 'start' | 'end' | number | boolean | null
export type FocusPosition = 'start' | 'end' | 'all' | number | boolean | null

export type Range = {
from: number,
Expand Down

0 comments on commit 3c571c9

Please sign in to comment.