mirror of
https://github.com/ueberdosis/tiptap.git
synced 2024-11-27 23:15:15 +08:00
refactoring
This commit is contained in:
parent
07b2ea94be
commit
1c468b4542
@ -16,10 +16,10 @@ yarn add @tiptap/extension-focus
|
||||
```
|
||||
|
||||
## Settings
|
||||
| Option | Type | Default | Description |
|
||||
| --------- | --------- | ------------- | ------------------------------------------------------ |
|
||||
| className | `String` | `'has-focus'` | The class that is applied to the focused element. |
|
||||
| nested | `Boolean` | `false` | When enabled nested elements get the focus class, too. |
|
||||
| Option | Type | Default | Description |
|
||||
| --------- | -------- | ------------- | ---------------------------------------------------------------------------- |
|
||||
| className | `String` | `'has-focus'` | The class that is applied to the focused element. |
|
||||
| mode | `String` | `'all'` | Apply the class to `'all'`, the `'shallowest'` or the `'deepest'` node only. |
|
||||
|
||||
## Source code
|
||||
[packages/extension-focus/](https://github.com/ueberdosis/tiptap-next/blob/main/packages/extension-focus/)
|
||||
|
@ -4,9 +4,7 @@ import { DecorationSet, Decoration } from 'prosemirror-view'
|
||||
|
||||
export interface FocusOptions {
|
||||
className: string,
|
||||
start: 'deep' | 'shallow',
|
||||
exact: boolean,
|
||||
// levels: 'all' | number,
|
||||
mode: 'all' | 'deepest' | 'shallowest',
|
||||
}
|
||||
|
||||
export const FocusClasses = Extension.create({
|
||||
@ -14,9 +12,7 @@ export const FocusClasses = Extension.create({
|
||||
|
||||
defaultOptions: <FocusOptions>{
|
||||
className: 'has-focus',
|
||||
start: 'deep',
|
||||
exact: false,
|
||||
// levels: 'all',
|
||||
mode: 'all',
|
||||
},
|
||||
|
||||
addProseMirrorPlugins() {
|
||||
@ -35,7 +31,7 @@ export const FocusClasses = Extension.create({
|
||||
|
||||
// Maximum Levels
|
||||
let maxLevels = 0
|
||||
if (this.options.start === 'deep') {
|
||||
if (this.options.mode === 'deepest') {
|
||||
doc.descendants((node, pos) => {
|
||||
if (node.isText) {
|
||||
return
|
||||
@ -64,19 +60,11 @@ export const FocusClasses = Extension.create({
|
||||
|
||||
currentLevel += 1
|
||||
|
||||
// const outOfScope = typeof this.options.levels === 'number'
|
||||
// && (
|
||||
// (this.options.start === 'deep' && maxLevels - currentLevel > this.options.levels)
|
||||
// || (this.options.start === 'shallow' && currentLevel > this.options.levels)
|
||||
// )
|
||||
const outOfScope = this.options.exact
|
||||
&& (
|
||||
(this.options.start === 'deep' && maxLevels - currentLevel !== 0)
|
||||
|| (this.options.start === 'shallow' && currentLevel > 1)
|
||||
)
|
||||
const outOfScope = (this.options.mode === 'deepest' && maxLevels - currentLevel > 0)
|
||||
|| (this.options.mode === 'shallowest' && currentLevel > 1)
|
||||
|
||||
if (outOfScope) {
|
||||
return this.options.start === 'deep'
|
||||
return this.options.mode === 'deepest'
|
||||
}
|
||||
|
||||
decorations.push(Decoration.node(pos, pos + node.nodeSize, {
|
||||
|
Loading…
Reference in New Issue
Block a user