@tommoor/slate-edit-list
Advanced tools
Weekly downloads
Readme
A Slate plugin to handle keyboard events in lists. List items can contain blocks.
Demo: gitbookio.github.io/slate-edit-list/
npm install slate-edit-list
Natural keybindings:
Simple validation/normalization (see assumptions about the schema):
Useful transforms: see Utilities and Transform.
import EditList from 'slate-edit-list'
const plugins = [
EditList()
]
This plugin accepts options to redefine the following block types:
types: string = ["ol_list", "ul_list"]
— the array of possible types for list containers. First value will be used as default.typeItem: string = "list_item"
— type for list items.typeDefault: string = "paragraph"
— type for default block in list items.canMerge: (Node, Node) => boolean
— controls which list can be merged automatically (for example when they are adjacent). Defaults to merging list with identical typesYou can use this plugins with custom list block types (using plugin arguments). But your lists structure should still conform to a few rules. These rules are implemented as schema.
Here is what a minimal list would look like:
nodes:
- kind: block
type: ul_list # Default type for bulleted lists container
nodes:
- kind: block
type: list_item # List containers can only contain list items
nodes:
# List items contain blocks. They cannot be the direct container of text.
- kind: block
type: paragraph # Default type of blocks in a list item
nodes:
- kind: text
text: Hello World
And here is an example of a multi-level list:
nodes:
- kind: block
type: ol_list
nodes:
- kind: block
type: list_item
nodes:
- kind: block
type: paragraph
nodes:
- kind: text
text: Item 1
- kind: block
type: ol_list
nodes:
- kind: block
type: list_item
nodes:
- kind: block
type: paragraph
nodes:
- kind: text
text: Item 1.1
- kind: block
type: list_item
nodes:
- kind: block
type: paragraph
nodes:
- kind: text
text: Item 1.2
slate-edit-list
exports utilities and transforms:
plugin.utils.isSelectionInList(value: Value) => Boolean
Return true if selection is inside a list (and it can be unwrap).
plugin.utils.isList(node: Node) => Boolean
Return true if the node is one of the list type.
plugin.utils.getItemDepth(value: Value, block: Block?) => Number
Returns the depth of the current item (or the depth of the given block) in a list. 0 means not in a list.
plugin.utils.getCurrentItem(value: Value, block: Block?) => Block || Void
Returns the current item at selection (or at the given block).
plugin.utils.getCurrentList(value: Value, block: Block?) => Block || Void
Returns the current list at selection (or at the given block).
plugin.utils.getItemsAtRange(value: Value, range: Selection?) => List<Node>
Return the list of items at the given range. The returned items are the highest list of of successive items that cover the given range.
The returned list is empty if no such list can be found.
plugin.changes.increaseItemDepth(change: Change) => Transform
Increase the depth of the current item.
plugin.changes.decreaseItemDepth(change: Change) => Transform
Decrease the depth of the current item.
plugin.changes.wrapInList(change: Change, type: String?, data: Object|Data?, itemType:Object|string?) => Transform
Wrap the current blocks in list items of a list container of the given type. You can pass optional data for the created list container and override for the list item node.
plugin.changes.unwrapList(change: Change) => Transform
Unwrap all items at range from their list.
plugin.changes.splitListItem(change: Change) => Transform
Split current block into a new list item.
FAQs
A Slate plugin to handle keyboard events in lists.
The npm package @tommoor/slate-edit-list receives a total of 866 weekly downloads. As such, @tommoor/slate-edit-list popularity was classified as not popular.
We found that @tommoor/slate-edit-list demonstrated a not healthy version release cadence and project activity because the last version was released a year ago. It has 1 open source maintainer collaborating on the project.
Did you know?
Socket installs a Github app to automatically flag issues on every pull request and report the health of your dependencies. Find out what is inside your node modules and prevent malicious activity before you update the dependencies.