am-editor-001/docs/api/editor-block.md

321 lines
6.0 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 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;
```