321 lines
6.0 KiB
Markdown
321 lines
6.0 KiB
Markdown
# BlockModel
|
||
|
||
Edit related operations of block-level nodes
|
||
|
||
Type: `BlockModelInterface`
|
||
|
||
## Use
|
||
|
||
```ts
|
||
new Engine(...).block
|
||
```
|
||
|
||
## Constructor
|
||
|
||
```ts
|
||
new (editor: EditorInterface): BlockModelInterface
|
||
```
|
||
|
||
## Method
|
||
|
||
### `init`
|
||
|
||
initialization
|
||
|
||
```ts
|
||
/**
|
||
* Initialization
|
||
*/
|
||
init(): void;
|
||
```
|
||
|
||
### `findPlugin`
|
||
|
||
Find the block plugin instance according to the node
|
||
|
||
```ts
|
||
/**
|
||
* Find the block plugin instance according to the node
|
||
* @param node node
|
||
*/
|
||
findPlugin(node: NodeInterface): BlockInterface | undefined;
|
||
```
|
||
|
||
### `findTop`
|
||
|
||
Find the first-level node of the Block node. For example, div -> H2 returns H2 node
|
||
|
||
```ts
|
||
/**
|
||
* Find the first level node of the Block node. For example, div -> H2 returns H2 node
|
||
* @param parentNode parent node
|
||
* @param childNode child node
|
||
*/
|
||
findTop(parentNode: NodeInterface, childNode: NodeInterface): NodeInterface;
|
||
```
|
||
|
||
### `closest`
|
||
|
||
Get the nearest block node, can not find the return node
|
||
|
||
```ts
|
||
/**
|
||
* Get the nearest block node, the return node cannot be found
|
||
* @param node node
|
||
*/
|
||
closest(node: NodeInterface): NodeInterface;
|
||
```
|
||
|
||
### `wrap`
|
||
|
||
Wrap a block node at the cursor position
|
||
|
||
```ts
|
||
/**
|
||
* Wrap a block node at the cursor position
|
||
* @param block node
|
||
* @param range cursor
|
||
*/
|
||
wrap(block: NodeInterface | Node | string, range?: RangeInterface): void;
|
||
```
|
||
|
||
### `unwrap`
|
||
|
||
Remove the package of the block node where the cursor is located
|
||
|
||
```ts
|
||
/**
|
||
* Remove the package of the block node where the cursor is located
|
||
* @param block node
|
||
* @param range cursor
|
||
*/
|
||
unwrap(block: NodeInterface | Node | string, range?: RangeInterface): void;
|
||
```
|
||
|
||
### `getSiblings`
|
||
|
||
Get the node's sibling node set relative to the cursor start position and end position
|
||
|
||
```ts
|
||
/**
|
||
* Get the node's sibling node set relative to the cursor start position and end position
|
||
* @param range cursor
|
||
* @param block node
|
||
*/
|
||
getSiblings(
|
||
range: RangeInterface,
|
||
block: NodeInterface,
|
||
): Array<{ node: NodeInterface; position:'left' |'center' |'right' }>;
|
||
```
|
||
|
||
### `split`
|
||
|
||
Split the block node selected by the current cursor
|
||
|
||
```ts
|
||
/**
|
||
* Split the block node selected by the current cursor
|
||
* @param range cursor
|
||
*/
|
||
split(range?: RangeInterface): void;
|
||
```
|
||
|
||
### `insert`
|
||
|
||
Insert a block node at the current cursor position
|
||
|
||
```ts
|
||
/**
|
||
* Insert a block node at the current cursor position
|
||
* @param block node
|
||
* @param range cursor
|
||
* @param splitNode split node, the default is the block node at the beginning of the cursor
|
||
*/
|
||
insert(
|
||
block: NodeInterface | Node | string,
|
||
range?: RangeInterface,
|
||
splitNode?: (node: NodeInterface) => NodeInterface,
|
||
): void;
|
||
```
|
||
|
||
### `setBlocks`
|
||
|
||
Set all block nodes where the current cursor is located as new nodes or set new attributes
|
||
|
||
```ts
|
||
/**
|
||
* Set all block nodes where the current cursor is located as new nodes or set new attributes
|
||
* @param block The node or node attribute that needs to be set
|
||
* @param range cursor
|
||
*/
|
||
setBlocks(
|
||
block: string | {[k: string]: any },
|
||
range?: RangeInterface,
|
||
): void;
|
||
```
|
||
|
||
### `merge`
|
||
|
||
Merge blocks adjacent to the current cursor position
|
||
|
||
```ts
|
||
/**
|
||
* Combine blocks adjacent to the current cursor position
|
||
* @param range cursor
|
||
*/
|
||
merge(range?: RangeInterface): void;
|
||
```
|
||
|
||
### `findBlocks`
|
||
|
||
Find all blocks that have an effect on the range
|
||
|
||
```ts
|
||
/**
|
||
* Find all blocks that have an effect on the range
|
||
* @param range
|
||
*/
|
||
findBlocks(range: RangeInterface): Array<NodeInterface>;
|
||
```
|
||
|
||
### `isFirstOffset`
|
||
|
||
Determine whether the {Edge}Offset of the range is at the beginning of the Block
|
||
|
||
```ts
|
||
/**
|
||
* Determine whether the {Edge}Offset of the range is at the beginning of the Block
|
||
* @param range cursor
|
||
* @param edge start | end
|
||
*/
|
||
isFirstOffset(range: RangeInterface, edge:'start' |'end'): boolean;
|
||
```
|
||
|
||
### `isLastOffset`
|
||
|
||
Determine whether the {Edge}Offset of the range is at the last position of the Block
|
||
|
||
```ts
|
||
/**
|
||
* Determine whether the {Edge}Offset of the range is at the last position of the Block
|
||
* @param range cursor
|
||
* @param edge start | end
|
||
*/
|
||
isLastOffset(range: RangeInterface, edge:'start' |'end'): boolean;
|
||
```
|
||
|
||
### `getBlocks`
|
||
|
||
Get all blocks in the range
|
||
|
||
```ts
|
||
/**
|
||
* Get all blocks in the range
|
||
* @param range cursors
|
||
*/
|
||
getBlocks(range: RangeInterface): Array<NodeInterface>;
|
||
```
|
||
|
||
### `getLeftText`
|
||
|
||
Get the left text of Block
|
||
|
||
```ts
|
||
/**
|
||
* Get the left text of Block
|
||
* @param block node
|
||
*/
|
||
getLeftText(block: NodeInterface | Node): string;
|
||
```
|
||
|
||
### `removeLeftText`
|
||
|
||
Delete the left text of Block
|
||
|
||
```ts
|
||
/**
|
||
* Delete the text on the left side of Block
|
||
* @param block node
|
||
*/
|
||
removeLeftText(block: NodeInterface | Node): void;
|
||
```
|
||
|
||
### `getBlockByRange`
|
||
|
||
Generate the node on the left or right side of the cursor and place it in the same container as the parent node
|
||
|
||
```ts
|
||
/**
|
||
* Generate the node on the left or right side of the cursor and place it in the same container as the parent node
|
||
* isLeft = true: left
|
||
* isLeft = false: the right side
|
||
* @param {block,range,isLeft,clone,keepID} node, cursor, left or right, whether to copy, whether to keep id
|
||
*
|
||
*/
|
||
getBlockByRange({
|
||
block,
|
||
range,
|
||
isLeft,
|
||
clone,
|
||
keepID,
|
||
}: {
|
||
block: NodeInterface | Node;
|
||
range: RangeInterface;
|
||
isLeft: boolean;
|
||
clone?: boolean;
|
||
keepID?: boolean;
|
||
}): NodeInterface;
|
||
```
|
||
|
||
### `normal`
|
||
|
||
Sort block-level nodes into standard editor values
|
||
|
||
```ts
|
||
/**
|
||
* Sorting block-level nodes
|
||
* @param node node
|
||
* @param root root node
|
||
*/
|
||
normal(node: NodeInterface, root: NodeInterface): void;
|
||
```
|
||
|
||
### `brToBlock`
|
||
|
||
br change line to paragraph
|
||
|
||
```ts
|
||
/**
|
||
* br change lines to paragraphs
|
||
* @param block node
|
||
*/
|
||
brToBlock(block: NodeInterface): void;
|
||
```
|
||
|
||
### `insertEmptyBlock`
|
||
|
||
Insert an empty block node
|
||
|
||
```ts
|
||
/**
|
||
* Insert an empty block node
|
||
* @param range cursor position
|
||
* @param block node
|
||
* @returns
|
||
*/
|
||
insertEmptyBlock(range: RangeInterface, block: NodeInterface): void;
|
||
```
|
||
|
||
### `insertOrSplit`
|
||
|
||
Insert or split node at cursor position
|
||
|
||
```ts
|
||
/**
|
||
* Insert or split a node at the cursor position
|
||
* @param range cursor position
|
||
* @param block node
|
||
*/
|
||
insertOrSplit(range: RangeInterface, block: NodeInterface): void;
|
||
```
|