Coder Social home page Coder Social logo

raisely / slate-edit-list Goto Github PK

View Code? Open in Web Editor NEW

This project forked from nickpedersen/slate-edit-list

0.0 2.0 0.0 3.35 MB

A Slate plugin to handle keyboard events in lists.

Home Page: https://gitbookio.github.io/slate-edit-list/

License: Apache License 2.0

HTML 0.37% CSS 0.71% JavaScript 98.92%

slate-edit-list's Introduction

slate-edit-list

NPM version Linux Build Status

A Slate plugin to handle keyboard events in lists. List items can contain blocks.

Demo: gitbookio.github.io/slate-edit-list/

Install

npm install slate-edit-list

Features

Natural keybindings:

  • Pressing Enter insert a new list item
  • Pressing Shift+Enter split the block in the list item
  • Pressing Tab increase the depth of the item (creates a sub-list)
  • Pressing Shift+Tab decrease the depth of the item
  • Pressing Delete (OSX) or Backspace at the start, remove the list item (or the list)

Simple validation/normalization (see assumptions about the schema):

  • Lists can contain only list items, and at least one.
  • List items can only be the direct children of a list.
  • List items must always contain blocks.

Useful transforms: see Utilities and Transform.

Simple Usage

import EditList from 'slate-edit-list'

const plugins = [
  EditList()
]

Arguments

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 types

Assumption about the schema

You 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

Utilities and Transform

slate-edit-list exports utilities and transforms:

plugin.utils.isSelectionInList(value: Value, type?: string) => Boolean

Return true if selection is inside a list (and it can be unwrap). Optional param type can be supplied to deduce whether list is of specified type.

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?) => 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.

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.

slate-edit-list's People

Contributors

soreine avatar samypesse avatar quentez avatar zhujinxuan avatar justinweiss avatar yurkaninryan avatar rebulus avatar wootencl avatar oyeanuj avatar chilijung avatar tommoor avatar thomaswhyyou avatar

Watchers

James Cloos avatar  avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.