1
0
mirror of https://github.com/ianstormtaylor/slate.git synced 2025-06-02 09:25:16 +02:00
slate/docs/api/locations/range.md
Doug Reeder 7d9d25e179
Adds clarification & examples to demystify Transforms. (#4653)
* Adds clarification & examples to demystify Transforms.

* Fleshes out documentation of NodeOptions for Transforms

* Update docs/concepts/04-transforms.md

Co-authored-by: Dylan Schiemann <dylan@dojotoolkit.org>

* Uses 'API' in the title of all API documents

Co-authored-by: Dylan Schiemann <dylan@dojotoolkit.org>
2021-11-16 02:20:43 -07:00

2.8 KiB

Range API

Range objects are a set of points that refer to a specific span of a Slate document. They can define a span inside a single node or they can span across multiple nodes. The editor's selection is stored as a range.

interface Range {
  anchor: Point
  focus: Point
}

Static methods

Retrieval methods

Range.edges(range: Range, options?) => [Point, Point]

Get the start and end points of a range, in the order in which they appear in the document.

Options: {reverse?: boolean}

Range.end(range: Range) => Point

Get the end point of a range according to the order in which it appears in the document.

Range.intersection(range: Range, another: Range) => Range | null

Get the intersection of one range with another. If the two ranges do not overlap, return null.

Range.points(range: Range) => Generator<PointEntry>

Iterate through the two point entries in a Range. First it will yield a PointEntry representing the anchor, then it will yield a PointEntry representing the focus.

Range.start(range: Range) => Point

Get the start point of a range according to the order in which it appears in the document.

Check methods

Check some attribute of a Range. Always returns a boolean.

Range.equals(range: Range, another: Range) => boolean

Check if a range is exactly equal to another.

Range.includes(range: Range, target: Path | Point | Range) => boolean

Check if a range includes a path, a point, or part of another range.

For clarity the definition of includes can mean partially includes. Another way to describe this is if one Range intersectns the other Range.

Range.isBackward(range: Range) => boolean

Check if a range is backward, meaning that its anchor point appears after its focus point in the document.

Range.isCollapsed(range: Range) => boolean

Check if a range is collapsed, meaning that both its anchor and focus points refer to the exact same position in the document.

Range.isExpanded(range: Range) => boolean

Check if a range is expanded. This is the opposite of Range.isCollapsed and is provided for legibility.

Range.isForward(range: Range) => boolean

Check if a range is forward. This is the opposite of Range.isBackward and is provided for legibility.

Range.isRange(value: any) => value is Range

Check if a value implements the Range interface.

Transform methods

Range.transform(range: Range, op: Operation, options) => Range | null

Transform a range by an op.

Options: {affinity: 'forward' | 'backward' | 'outward' | 'inward' | null}