2019-12-05 11:36:44 -05:00
import React , { useState , useMemo } from 'react'
Next (#3093)
* remove some key usage from core, refactor Operations.apply
* undeprecate some methods
* convert more key usage to paths
* update deprecations
* convert selection commands to use all paths
* refactor word boundary selection logic
* convert many at-range commands to use paths
* convert wrapBlock and wrapInline to not use keys
* cleanup
* remove chainability from editor
* simplify commands, queries and middleware
* convert deleteAtRange
* remove key usage from schema, deprecate *ByKey methods
* migrate *ByKey tests, remove index from *ByPath signatures
* rename at-current-range tests
* deprecate mode key usage, migrate more tests away from keys
* deprecate range and point methods which rely on keys to work
* refactor insertBlock, without fixing warnings
* add pathRef/pointRef, fix insertBlock/Inline deprecations, work on insertFragment
* refactor insertFragment
* get rich-text example rendering
* fix lint
* refactor query files, fix more tests
* remove unused queries, refactor others
* deprecate splitDescendantsByPath
* merge master
* add typescript, convert slate, slate-hyperscript, slate-plain-serializer
* add Point, Path, Range, Annotation tests
* add Annotation, Change, Element, Fragment, Mark, Range, Selection, Value interfaces tests
* add Operation and Text tests
* add Node tests
* get operations and normalization tests working for slate
* get *AtPath command tests passing
* rename *AtPath command tests
* rename
* get *AtPoint tests working
* rename
* rename
* add value queries tests
* add element, mark and path queries tests
* convert most on-selection tests
* convert on-selection commands
* rename
* get addMarks and delete commands working
* rename
* rename
* rename
* refactor value.positions(), work on delete tests
* progress on delete tests
* more delete work
* finish delete tests
* start converting to at-based commands
* restructure query tests
* restructure operations tests
* more work converting to multi-purpose commands
* lots of progress on converting to at-based commands
* add unwrapNodes
* remove setValue
* more progress
* refactor node commands to use consistent matching logic
* cleanup, get non-fragment commands passing
* remove annotations and isAtomic
* rename surround/pluck to cover/uncover
* add location concept, change at-path to from-path for iterables
* refactor batches
* add location-based queries
* refactor hanging logic
* more location query work
* renaming
* use getMatch more
* add split to wrap/unwrap
* flip levels/ancestors ordering
* switch splitNodes to use levels
* change split to always:false by default
* fix tests
* add more queries tests
* fixing more delete logic
* add more splitNodes tests
* get rest of delete tests passing
* fix location-based logic in some commands
* cleanup
* get previous packages tests passing again
* add slate-history package
* start slate-schema work
* start of react working
* rendering fixes
* get rich and plain text examples working
* get image example working with hooks and dropping
* refactor onDrop to be internal
* inline more event handlers
* refactor lots of event-related logic
* change rendering to use render props
* delete unused stuff
* cleanup dom utils
* remove unused deps
* remove unnecessary packages, add placeholder
* remove slate-react-placeholder package
* remove unused dep
* remove unnecessary tests, fix readonly example
* convert checklists example
* switch to next from webpack
* get link example working
* convert more examples
* preserve keys, memoized leafs/texts, fix node lookup
* fix to always useLayoutEffect for ordering
* fix annotations to be maps, memoize elements
* remove Change interface
* remove String interface
* rename Node.entries to Node.nodes
* remove unnecessary value queries
* default to selection when iterating, cleanup
* remove unused files
* update scroll into view logic
* fix undoing, remove constructor types
* dont sync selection while composing
* add workflows
* remove unused deps
* convert mentions example
* tweaks
* convert remaining examples
* rename h to jsx, update schema
* fix schema tests
* fix slate-schema logic and tests
* really fix slate-schema and forced-layout example
* get start of insertFragment tests working
* remove Fragment interface
* remove debugger
* get all non-skipped tests passing
* cleanup deps
* run prettier
* configure eslint for typescript
* more eslint fixes...
* more passing
* update some docs
* fix examples
* port windows undo hotkey change
* fix deps, add basic firefox support
* add event overriding, update walkthroughs
* add commands, remove classes, cleanup examples
* cleanup rollup config
* update tests
* rename queries tests
* update other tests
* update walkthroughs
* cleanup interface exports
* cleanup, change mark transforms to require location
* undo mark transform change
* more
* fix tests
* fix example
* update walkthroughs
* update docs
* update docs
* remove annotations
* remove value, move selection and children to editor
* add migrating doc
* fix lint
* fix tests
* fix DOM types aliasing
* add next export
* update deps, fix prod build
* fix prod build
* update scripts
* update docs and changelogs
* update workflow and pull request template
2019-11-27 20:54:42 -05:00
import isUrl from 'is-url'
import { Slate , Editable , withReact , useSlate } from 'slate-react'
2019-12-11 10:04:34 -08:00
import { Editor , Range , createEditor } from 'slate'
Next (#3093)
* remove some key usage from core, refactor Operations.apply
* undeprecate some methods
* convert more key usage to paths
* update deprecations
* convert selection commands to use all paths
* refactor word boundary selection logic
* convert many at-range commands to use paths
* convert wrapBlock and wrapInline to not use keys
* cleanup
* remove chainability from editor
* simplify commands, queries and middleware
* convert deleteAtRange
* remove key usage from schema, deprecate *ByKey methods
* migrate *ByKey tests, remove index from *ByPath signatures
* rename at-current-range tests
* deprecate mode key usage, migrate more tests away from keys
* deprecate range and point methods which rely on keys to work
* refactor insertBlock, without fixing warnings
* add pathRef/pointRef, fix insertBlock/Inline deprecations, work on insertFragment
* refactor insertFragment
* get rich-text example rendering
* fix lint
* refactor query files, fix more tests
* remove unused queries, refactor others
* deprecate splitDescendantsByPath
* merge master
* add typescript, convert slate, slate-hyperscript, slate-plain-serializer
* add Point, Path, Range, Annotation tests
* add Annotation, Change, Element, Fragment, Mark, Range, Selection, Value interfaces tests
* add Operation and Text tests
* add Node tests
* get operations and normalization tests working for slate
* get *AtPath command tests passing
* rename *AtPath command tests
* rename
* get *AtPoint tests working
* rename
* rename
* add value queries tests
* add element, mark and path queries tests
* convert most on-selection tests
* convert on-selection commands
* rename
* get addMarks and delete commands working
* rename
* rename
* rename
* refactor value.positions(), work on delete tests
* progress on delete tests
* more delete work
* finish delete tests
* start converting to at-based commands
* restructure query tests
* restructure operations tests
* more work converting to multi-purpose commands
* lots of progress on converting to at-based commands
* add unwrapNodes
* remove setValue
* more progress
* refactor node commands to use consistent matching logic
* cleanup, get non-fragment commands passing
* remove annotations and isAtomic
* rename surround/pluck to cover/uncover
* add location concept, change at-path to from-path for iterables
* refactor batches
* add location-based queries
* refactor hanging logic
* more location query work
* renaming
* use getMatch more
* add split to wrap/unwrap
* flip levels/ancestors ordering
* switch splitNodes to use levels
* change split to always:false by default
* fix tests
* add more queries tests
* fixing more delete logic
* add more splitNodes tests
* get rest of delete tests passing
* fix location-based logic in some commands
* cleanup
* get previous packages tests passing again
* add slate-history package
* start slate-schema work
* start of react working
* rendering fixes
* get rich and plain text examples working
* get image example working with hooks and dropping
* refactor onDrop to be internal
* inline more event handlers
* refactor lots of event-related logic
* change rendering to use render props
* delete unused stuff
* cleanup dom utils
* remove unused deps
* remove unnecessary packages, add placeholder
* remove slate-react-placeholder package
* remove unused dep
* remove unnecessary tests, fix readonly example
* convert checklists example
* switch to next from webpack
* get link example working
* convert more examples
* preserve keys, memoized leafs/texts, fix node lookup
* fix to always useLayoutEffect for ordering
* fix annotations to be maps, memoize elements
* remove Change interface
* remove String interface
* rename Node.entries to Node.nodes
* remove unnecessary value queries
* default to selection when iterating, cleanup
* remove unused files
* update scroll into view logic
* fix undoing, remove constructor types
* dont sync selection while composing
* add workflows
* remove unused deps
* convert mentions example
* tweaks
* convert remaining examples
* rename h to jsx, update schema
* fix schema tests
* fix slate-schema logic and tests
* really fix slate-schema and forced-layout example
* get start of insertFragment tests working
* remove Fragment interface
* remove debugger
* get all non-skipped tests passing
* cleanup deps
* run prettier
* configure eslint for typescript
* more eslint fixes...
* more passing
* update some docs
* fix examples
* port windows undo hotkey change
* fix deps, add basic firefox support
* add event overriding, update walkthroughs
* add commands, remove classes, cleanup examples
* cleanup rollup config
* update tests
* rename queries tests
* update other tests
* update walkthroughs
* cleanup interface exports
* cleanup, change mark transforms to require location
* undo mark transform change
* more
* fix tests
* fix example
* update walkthroughs
* update docs
* update docs
* remove annotations
* remove value, move selection and children to editor
* add migrating doc
* fix lint
* fix tests
* fix DOM types aliasing
* add next export
* update deps, fix prod build
* fix prod build
* update scripts
* update docs and changelogs
* update workflow and pull request template
2019-11-27 20:54:42 -05:00
import { withHistory } from 'slate-history'
import { Button , Icon , Toolbar } from '../components'
const LinkExample = ( ) => {
2019-12-05 11:36:44 -05:00
const [ value , setValue ] = useState ( initialValue )
const [ selection , setSelection ] = useState ( null )
Next (#3093)
* remove some key usage from core, refactor Operations.apply
* undeprecate some methods
* convert more key usage to paths
* update deprecations
* convert selection commands to use all paths
* refactor word boundary selection logic
* convert many at-range commands to use paths
* convert wrapBlock and wrapInline to not use keys
* cleanup
* remove chainability from editor
* simplify commands, queries and middleware
* convert deleteAtRange
* remove key usage from schema, deprecate *ByKey methods
* migrate *ByKey tests, remove index from *ByPath signatures
* rename at-current-range tests
* deprecate mode key usage, migrate more tests away from keys
* deprecate range and point methods which rely on keys to work
* refactor insertBlock, without fixing warnings
* add pathRef/pointRef, fix insertBlock/Inline deprecations, work on insertFragment
* refactor insertFragment
* get rich-text example rendering
* fix lint
* refactor query files, fix more tests
* remove unused queries, refactor others
* deprecate splitDescendantsByPath
* merge master
* add typescript, convert slate, slate-hyperscript, slate-plain-serializer
* add Point, Path, Range, Annotation tests
* add Annotation, Change, Element, Fragment, Mark, Range, Selection, Value interfaces tests
* add Operation and Text tests
* add Node tests
* get operations and normalization tests working for slate
* get *AtPath command tests passing
* rename *AtPath command tests
* rename
* get *AtPoint tests working
* rename
* rename
* add value queries tests
* add element, mark and path queries tests
* convert most on-selection tests
* convert on-selection commands
* rename
* get addMarks and delete commands working
* rename
* rename
* rename
* refactor value.positions(), work on delete tests
* progress on delete tests
* more delete work
* finish delete tests
* start converting to at-based commands
* restructure query tests
* restructure operations tests
* more work converting to multi-purpose commands
* lots of progress on converting to at-based commands
* add unwrapNodes
* remove setValue
* more progress
* refactor node commands to use consistent matching logic
* cleanup, get non-fragment commands passing
* remove annotations and isAtomic
* rename surround/pluck to cover/uncover
* add location concept, change at-path to from-path for iterables
* refactor batches
* add location-based queries
* refactor hanging logic
* more location query work
* renaming
* use getMatch more
* add split to wrap/unwrap
* flip levels/ancestors ordering
* switch splitNodes to use levels
* change split to always:false by default
* fix tests
* add more queries tests
* fixing more delete logic
* add more splitNodes tests
* get rest of delete tests passing
* fix location-based logic in some commands
* cleanup
* get previous packages tests passing again
* add slate-history package
* start slate-schema work
* start of react working
* rendering fixes
* get rich and plain text examples working
* get image example working with hooks and dropping
* refactor onDrop to be internal
* inline more event handlers
* refactor lots of event-related logic
* change rendering to use render props
* delete unused stuff
* cleanup dom utils
* remove unused deps
* remove unnecessary packages, add placeholder
* remove slate-react-placeholder package
* remove unused dep
* remove unnecessary tests, fix readonly example
* convert checklists example
* switch to next from webpack
* get link example working
* convert more examples
* preserve keys, memoized leafs/texts, fix node lookup
* fix to always useLayoutEffect for ordering
* fix annotations to be maps, memoize elements
* remove Change interface
* remove String interface
* rename Node.entries to Node.nodes
* remove unnecessary value queries
* default to selection when iterating, cleanup
* remove unused files
* update scroll into view logic
* fix undoing, remove constructor types
* dont sync selection while composing
* add workflows
* remove unused deps
* convert mentions example
* tweaks
* convert remaining examples
* rename h to jsx, update schema
* fix schema tests
* fix slate-schema logic and tests
* really fix slate-schema and forced-layout example
* get start of insertFragment tests working
* remove Fragment interface
* remove debugger
* get all non-skipped tests passing
* cleanup deps
* run prettier
* configure eslint for typescript
* more eslint fixes...
* more passing
* update some docs
* fix examples
* port windows undo hotkey change
* fix deps, add basic firefox support
* add event overriding, update walkthroughs
* add commands, remove classes, cleanup examples
* cleanup rollup config
* update tests
* rename queries tests
* update other tests
* update walkthroughs
* cleanup interface exports
* cleanup, change mark transforms to require location
* undo mark transform change
* more
* fix tests
* fix example
* update walkthroughs
* update docs
* update docs
* remove annotations
* remove value, move selection and children to editor
* add migrating doc
* fix lint
* fix tests
* fix DOM types aliasing
* add next export
* update deps, fix prod build
* fix prod build
* update scripts
* update docs and changelogs
* update workflow and pull request template
2019-11-27 20:54:42 -05:00
const editor = useMemo (
( ) => withLinks ( withHistory ( withReact ( createEditor ( ) ) ) ) ,
[ ]
)
2019-12-05 11:36:44 -05:00
Next (#3093)
* remove some key usage from core, refactor Operations.apply
* undeprecate some methods
* convert more key usage to paths
* update deprecations
* convert selection commands to use all paths
* refactor word boundary selection logic
* convert many at-range commands to use paths
* convert wrapBlock and wrapInline to not use keys
* cleanup
* remove chainability from editor
* simplify commands, queries and middleware
* convert deleteAtRange
* remove key usage from schema, deprecate *ByKey methods
* migrate *ByKey tests, remove index from *ByPath signatures
* rename at-current-range tests
* deprecate mode key usage, migrate more tests away from keys
* deprecate range and point methods which rely on keys to work
* refactor insertBlock, without fixing warnings
* add pathRef/pointRef, fix insertBlock/Inline deprecations, work on insertFragment
* refactor insertFragment
* get rich-text example rendering
* fix lint
* refactor query files, fix more tests
* remove unused queries, refactor others
* deprecate splitDescendantsByPath
* merge master
* add typescript, convert slate, slate-hyperscript, slate-plain-serializer
* add Point, Path, Range, Annotation tests
* add Annotation, Change, Element, Fragment, Mark, Range, Selection, Value interfaces tests
* add Operation and Text tests
* add Node tests
* get operations and normalization tests working for slate
* get *AtPath command tests passing
* rename *AtPath command tests
* rename
* get *AtPoint tests working
* rename
* rename
* add value queries tests
* add element, mark and path queries tests
* convert most on-selection tests
* convert on-selection commands
* rename
* get addMarks and delete commands working
* rename
* rename
* rename
* refactor value.positions(), work on delete tests
* progress on delete tests
* more delete work
* finish delete tests
* start converting to at-based commands
* restructure query tests
* restructure operations tests
* more work converting to multi-purpose commands
* lots of progress on converting to at-based commands
* add unwrapNodes
* remove setValue
* more progress
* refactor node commands to use consistent matching logic
* cleanup, get non-fragment commands passing
* remove annotations and isAtomic
* rename surround/pluck to cover/uncover
* add location concept, change at-path to from-path for iterables
* refactor batches
* add location-based queries
* refactor hanging logic
* more location query work
* renaming
* use getMatch more
* add split to wrap/unwrap
* flip levels/ancestors ordering
* switch splitNodes to use levels
* change split to always:false by default
* fix tests
* add more queries tests
* fixing more delete logic
* add more splitNodes tests
* get rest of delete tests passing
* fix location-based logic in some commands
* cleanup
* get previous packages tests passing again
* add slate-history package
* start slate-schema work
* start of react working
* rendering fixes
* get rich and plain text examples working
* get image example working with hooks and dropping
* refactor onDrop to be internal
* inline more event handlers
* refactor lots of event-related logic
* change rendering to use render props
* delete unused stuff
* cleanup dom utils
* remove unused deps
* remove unnecessary packages, add placeholder
* remove slate-react-placeholder package
* remove unused dep
* remove unnecessary tests, fix readonly example
* convert checklists example
* switch to next from webpack
* get link example working
* convert more examples
* preserve keys, memoized leafs/texts, fix node lookup
* fix to always useLayoutEffect for ordering
* fix annotations to be maps, memoize elements
* remove Change interface
* remove String interface
* rename Node.entries to Node.nodes
* remove unnecessary value queries
* default to selection when iterating, cleanup
* remove unused files
* update scroll into view logic
* fix undoing, remove constructor types
* dont sync selection while composing
* add workflows
* remove unused deps
* convert mentions example
* tweaks
* convert remaining examples
* rename h to jsx, update schema
* fix schema tests
* fix slate-schema logic and tests
* really fix slate-schema and forced-layout example
* get start of insertFragment tests working
* remove Fragment interface
* remove debugger
* get all non-skipped tests passing
* cleanup deps
* run prettier
* configure eslint for typescript
* more eslint fixes...
* more passing
* update some docs
* fix examples
* port windows undo hotkey change
* fix deps, add basic firefox support
* add event overriding, update walkthroughs
* add commands, remove classes, cleanup examples
* cleanup rollup config
* update tests
* rename queries tests
* update other tests
* update walkthroughs
* cleanup interface exports
* cleanup, change mark transforms to require location
* undo mark transform change
* more
* fix tests
* fix example
* update walkthroughs
* update docs
* update docs
* remove annotations
* remove value, move selection and children to editor
* add migrating doc
* fix lint
* fix tests
* fix DOM types aliasing
* add next export
* update deps, fix prod build
* fix prod build
* update scripts
* update docs and changelogs
* update workflow and pull request template
2019-11-27 20:54:42 -05:00
return (
2019-12-05 11:36:44 -05:00
< Slate
editor = { editor }
value = { value }
selection = { selection }
onChange = { ( value , selection ) => {
setValue ( value )
setSelection ( selection )
} }
>
Next (#3093)
* remove some key usage from core, refactor Operations.apply
* undeprecate some methods
* convert more key usage to paths
* update deprecations
* convert selection commands to use all paths
* refactor word boundary selection logic
* convert many at-range commands to use paths
* convert wrapBlock and wrapInline to not use keys
* cleanup
* remove chainability from editor
* simplify commands, queries and middleware
* convert deleteAtRange
* remove key usage from schema, deprecate *ByKey methods
* migrate *ByKey tests, remove index from *ByPath signatures
* rename at-current-range tests
* deprecate mode key usage, migrate more tests away from keys
* deprecate range and point methods which rely on keys to work
* refactor insertBlock, without fixing warnings
* add pathRef/pointRef, fix insertBlock/Inline deprecations, work on insertFragment
* refactor insertFragment
* get rich-text example rendering
* fix lint
* refactor query files, fix more tests
* remove unused queries, refactor others
* deprecate splitDescendantsByPath
* merge master
* add typescript, convert slate, slate-hyperscript, slate-plain-serializer
* add Point, Path, Range, Annotation tests
* add Annotation, Change, Element, Fragment, Mark, Range, Selection, Value interfaces tests
* add Operation and Text tests
* add Node tests
* get operations and normalization tests working for slate
* get *AtPath command tests passing
* rename *AtPath command tests
* rename
* get *AtPoint tests working
* rename
* rename
* add value queries tests
* add element, mark and path queries tests
* convert most on-selection tests
* convert on-selection commands
* rename
* get addMarks and delete commands working
* rename
* rename
* rename
* refactor value.positions(), work on delete tests
* progress on delete tests
* more delete work
* finish delete tests
* start converting to at-based commands
* restructure query tests
* restructure operations tests
* more work converting to multi-purpose commands
* lots of progress on converting to at-based commands
* add unwrapNodes
* remove setValue
* more progress
* refactor node commands to use consistent matching logic
* cleanup, get non-fragment commands passing
* remove annotations and isAtomic
* rename surround/pluck to cover/uncover
* add location concept, change at-path to from-path for iterables
* refactor batches
* add location-based queries
* refactor hanging logic
* more location query work
* renaming
* use getMatch more
* add split to wrap/unwrap
* flip levels/ancestors ordering
* switch splitNodes to use levels
* change split to always:false by default
* fix tests
* add more queries tests
* fixing more delete logic
* add more splitNodes tests
* get rest of delete tests passing
* fix location-based logic in some commands
* cleanup
* get previous packages tests passing again
* add slate-history package
* start slate-schema work
* start of react working
* rendering fixes
* get rich and plain text examples working
* get image example working with hooks and dropping
* refactor onDrop to be internal
* inline more event handlers
* refactor lots of event-related logic
* change rendering to use render props
* delete unused stuff
* cleanup dom utils
* remove unused deps
* remove unnecessary packages, add placeholder
* remove slate-react-placeholder package
* remove unused dep
* remove unnecessary tests, fix readonly example
* convert checklists example
* switch to next from webpack
* get link example working
* convert more examples
* preserve keys, memoized leafs/texts, fix node lookup
* fix to always useLayoutEffect for ordering
* fix annotations to be maps, memoize elements
* remove Change interface
* remove String interface
* rename Node.entries to Node.nodes
* remove unnecessary value queries
* default to selection when iterating, cleanup
* remove unused files
* update scroll into view logic
* fix undoing, remove constructor types
* dont sync selection while composing
* add workflows
* remove unused deps
* convert mentions example
* tweaks
* convert remaining examples
* rename h to jsx, update schema
* fix schema tests
* fix slate-schema logic and tests
* really fix slate-schema and forced-layout example
* get start of insertFragment tests working
* remove Fragment interface
* remove debugger
* get all non-skipped tests passing
* cleanup deps
* run prettier
* configure eslint for typescript
* more eslint fixes...
* more passing
* update some docs
* fix examples
* port windows undo hotkey change
* fix deps, add basic firefox support
* add event overriding, update walkthroughs
* add commands, remove classes, cleanup examples
* cleanup rollup config
* update tests
* rename queries tests
* update other tests
* update walkthroughs
* cleanup interface exports
* cleanup, change mark transforms to require location
* undo mark transform change
* more
* fix tests
* fix example
* update walkthroughs
* update docs
* update docs
* remove annotations
* remove value, move selection and children to editor
* add migrating doc
* fix lint
* fix tests
* fix DOM types aliasing
* add next export
* update deps, fix prod build
* fix prod build
* update scripts
* update docs and changelogs
* update workflow and pull request template
2019-11-27 20:54:42 -05:00
< Toolbar >
< LinkButton / >
< / T o o l b a r >
< Editable
renderElement = { props => < Element { ... props } / > }
placeholder = "Enter some text..."
/ >
< / S l a t e >
)
}
const withLinks = editor => {
const { exec , isInline } = editor
editor . isInline = element => {
return element . type === 'link' ? true : isInline ( element )
}
editor . exec = command => {
if ( command . type === 'insert_link' ) {
const { url } = command
if ( editor . selection ) {
wrapLink ( editor , url )
}
return
}
let text
if ( command . type === 'insert_data' ) {
text = command . data . getData ( 'text/plain' )
} else if ( command . type === 'insert_text' ) {
text = command . text
}
if ( text && isUrl ( text ) ) {
2019-12-02 02:18:21 +01:00
wrapLink ( editor , text )
Next (#3093)
* remove some key usage from core, refactor Operations.apply
* undeprecate some methods
* convert more key usage to paths
* update deprecations
* convert selection commands to use all paths
* refactor word boundary selection logic
* convert many at-range commands to use paths
* convert wrapBlock and wrapInline to not use keys
* cleanup
* remove chainability from editor
* simplify commands, queries and middleware
* convert deleteAtRange
* remove key usage from schema, deprecate *ByKey methods
* migrate *ByKey tests, remove index from *ByPath signatures
* rename at-current-range tests
* deprecate mode key usage, migrate more tests away from keys
* deprecate range and point methods which rely on keys to work
* refactor insertBlock, without fixing warnings
* add pathRef/pointRef, fix insertBlock/Inline deprecations, work on insertFragment
* refactor insertFragment
* get rich-text example rendering
* fix lint
* refactor query files, fix more tests
* remove unused queries, refactor others
* deprecate splitDescendantsByPath
* merge master
* add typescript, convert slate, slate-hyperscript, slate-plain-serializer
* add Point, Path, Range, Annotation tests
* add Annotation, Change, Element, Fragment, Mark, Range, Selection, Value interfaces tests
* add Operation and Text tests
* add Node tests
* get operations and normalization tests working for slate
* get *AtPath command tests passing
* rename *AtPath command tests
* rename
* get *AtPoint tests working
* rename
* rename
* add value queries tests
* add element, mark and path queries tests
* convert most on-selection tests
* convert on-selection commands
* rename
* get addMarks and delete commands working
* rename
* rename
* rename
* refactor value.positions(), work on delete tests
* progress on delete tests
* more delete work
* finish delete tests
* start converting to at-based commands
* restructure query tests
* restructure operations tests
* more work converting to multi-purpose commands
* lots of progress on converting to at-based commands
* add unwrapNodes
* remove setValue
* more progress
* refactor node commands to use consistent matching logic
* cleanup, get non-fragment commands passing
* remove annotations and isAtomic
* rename surround/pluck to cover/uncover
* add location concept, change at-path to from-path for iterables
* refactor batches
* add location-based queries
* refactor hanging logic
* more location query work
* renaming
* use getMatch more
* add split to wrap/unwrap
* flip levels/ancestors ordering
* switch splitNodes to use levels
* change split to always:false by default
* fix tests
* add more queries tests
* fixing more delete logic
* add more splitNodes tests
* get rest of delete tests passing
* fix location-based logic in some commands
* cleanup
* get previous packages tests passing again
* add slate-history package
* start slate-schema work
* start of react working
* rendering fixes
* get rich and plain text examples working
* get image example working with hooks and dropping
* refactor onDrop to be internal
* inline more event handlers
* refactor lots of event-related logic
* change rendering to use render props
* delete unused stuff
* cleanup dom utils
* remove unused deps
* remove unnecessary packages, add placeholder
* remove slate-react-placeholder package
* remove unused dep
* remove unnecessary tests, fix readonly example
* convert checklists example
* switch to next from webpack
* get link example working
* convert more examples
* preserve keys, memoized leafs/texts, fix node lookup
* fix to always useLayoutEffect for ordering
* fix annotations to be maps, memoize elements
* remove Change interface
* remove String interface
* rename Node.entries to Node.nodes
* remove unnecessary value queries
* default to selection when iterating, cleanup
* remove unused files
* update scroll into view logic
* fix undoing, remove constructor types
* dont sync selection while composing
* add workflows
* remove unused deps
* convert mentions example
* tweaks
* convert remaining examples
* rename h to jsx, update schema
* fix schema tests
* fix slate-schema logic and tests
* really fix slate-schema and forced-layout example
* get start of insertFragment tests working
* remove Fragment interface
* remove debugger
* get all non-skipped tests passing
* cleanup deps
* run prettier
* configure eslint for typescript
* more eslint fixes...
* more passing
* update some docs
* fix examples
* port windows undo hotkey change
* fix deps, add basic firefox support
* add event overriding, update walkthroughs
* add commands, remove classes, cleanup examples
* cleanup rollup config
* update tests
* rename queries tests
* update other tests
* update walkthroughs
* cleanup interface exports
* cleanup, change mark transforms to require location
* undo mark transform change
* more
* fix tests
* fix example
* update walkthroughs
* update docs
* update docs
* remove annotations
* remove value, move selection and children to editor
* add migrating doc
* fix lint
* fix tests
* fix DOM types aliasing
* add next export
* update deps, fix prod build
* fix prod build
* update scripts
* update docs and changelogs
* update workflow and pull request template
2019-11-27 20:54:42 -05:00
} else {
exec ( command )
}
}
return editor
}
const isLinkActive = editor => {
2019-11-29 23:15:08 -05:00
const [ link ] = Editor . nodes ( editor , { match : { type : 'link' } } )
return ! ! link
Next (#3093)
* remove some key usage from core, refactor Operations.apply
* undeprecate some methods
* convert more key usage to paths
* update deprecations
* convert selection commands to use all paths
* refactor word boundary selection logic
* convert many at-range commands to use paths
* convert wrapBlock and wrapInline to not use keys
* cleanup
* remove chainability from editor
* simplify commands, queries and middleware
* convert deleteAtRange
* remove key usage from schema, deprecate *ByKey methods
* migrate *ByKey tests, remove index from *ByPath signatures
* rename at-current-range tests
* deprecate mode key usage, migrate more tests away from keys
* deprecate range and point methods which rely on keys to work
* refactor insertBlock, without fixing warnings
* add pathRef/pointRef, fix insertBlock/Inline deprecations, work on insertFragment
* refactor insertFragment
* get rich-text example rendering
* fix lint
* refactor query files, fix more tests
* remove unused queries, refactor others
* deprecate splitDescendantsByPath
* merge master
* add typescript, convert slate, slate-hyperscript, slate-plain-serializer
* add Point, Path, Range, Annotation tests
* add Annotation, Change, Element, Fragment, Mark, Range, Selection, Value interfaces tests
* add Operation and Text tests
* add Node tests
* get operations and normalization tests working for slate
* get *AtPath command tests passing
* rename *AtPath command tests
* rename
* get *AtPoint tests working
* rename
* rename
* add value queries tests
* add element, mark and path queries tests
* convert most on-selection tests
* convert on-selection commands
* rename
* get addMarks and delete commands working
* rename
* rename
* rename
* refactor value.positions(), work on delete tests
* progress on delete tests
* more delete work
* finish delete tests
* start converting to at-based commands
* restructure query tests
* restructure operations tests
* more work converting to multi-purpose commands
* lots of progress on converting to at-based commands
* add unwrapNodes
* remove setValue
* more progress
* refactor node commands to use consistent matching logic
* cleanup, get non-fragment commands passing
* remove annotations and isAtomic
* rename surround/pluck to cover/uncover
* add location concept, change at-path to from-path for iterables
* refactor batches
* add location-based queries
* refactor hanging logic
* more location query work
* renaming
* use getMatch more
* add split to wrap/unwrap
* flip levels/ancestors ordering
* switch splitNodes to use levels
* change split to always:false by default
* fix tests
* add more queries tests
* fixing more delete logic
* add more splitNodes tests
* get rest of delete tests passing
* fix location-based logic in some commands
* cleanup
* get previous packages tests passing again
* add slate-history package
* start slate-schema work
* start of react working
* rendering fixes
* get rich and plain text examples working
* get image example working with hooks and dropping
* refactor onDrop to be internal
* inline more event handlers
* refactor lots of event-related logic
* change rendering to use render props
* delete unused stuff
* cleanup dom utils
* remove unused deps
* remove unnecessary packages, add placeholder
* remove slate-react-placeholder package
* remove unused dep
* remove unnecessary tests, fix readonly example
* convert checklists example
* switch to next from webpack
* get link example working
* convert more examples
* preserve keys, memoized leafs/texts, fix node lookup
* fix to always useLayoutEffect for ordering
* fix annotations to be maps, memoize elements
* remove Change interface
* remove String interface
* rename Node.entries to Node.nodes
* remove unnecessary value queries
* default to selection when iterating, cleanup
* remove unused files
* update scroll into view logic
* fix undoing, remove constructor types
* dont sync selection while composing
* add workflows
* remove unused deps
* convert mentions example
* tweaks
* convert remaining examples
* rename h to jsx, update schema
* fix schema tests
* fix slate-schema logic and tests
* really fix slate-schema and forced-layout example
* get start of insertFragment tests working
* remove Fragment interface
* remove debugger
* get all non-skipped tests passing
* cleanup deps
* run prettier
* configure eslint for typescript
* more eslint fixes...
* more passing
* update some docs
* fix examples
* port windows undo hotkey change
* fix deps, add basic firefox support
* add event overriding, update walkthroughs
* add commands, remove classes, cleanup examples
* cleanup rollup config
* update tests
* rename queries tests
* update other tests
* update walkthroughs
* cleanup interface exports
* cleanup, change mark transforms to require location
* undo mark transform change
* more
* fix tests
* fix example
* update walkthroughs
* update docs
* update docs
* remove annotations
* remove value, move selection and children to editor
* add migrating doc
* fix lint
* fix tests
* fix DOM types aliasing
* add next export
* update deps, fix prod build
* fix prod build
* update scripts
* update docs and changelogs
* update workflow and pull request template
2019-11-27 20:54:42 -05:00
}
const unwrapLink = editor => {
Editor . unwrapNodes ( editor , { match : { type : 'link' } } )
}
const wrapLink = ( editor , url ) => {
if ( isLinkActive ( editor ) ) {
unwrapLink ( editor )
}
2019-12-11 10:04:34 -08:00
const { selection } = editor
2019-12-11 23:18:38 +01:00
const isCollapsed = selection && Range . isCollapsed ( selection )
2019-12-11 10:04:34 -08:00
const link = {
type : 'link' ,
url ,
children : isCollapsed ? [ { text : url } ] : [ ] ,
}
if ( isCollapsed ) {
Editor . insertNodes ( editor , link )
} else {
Editor . wrapNodes ( editor , link , { split : true } )
Editor . collapse ( editor , { edge : 'end' } )
}
Next (#3093)
* remove some key usage from core, refactor Operations.apply
* undeprecate some methods
* convert more key usage to paths
* update deprecations
* convert selection commands to use all paths
* refactor word boundary selection logic
* convert many at-range commands to use paths
* convert wrapBlock and wrapInline to not use keys
* cleanup
* remove chainability from editor
* simplify commands, queries and middleware
* convert deleteAtRange
* remove key usage from schema, deprecate *ByKey methods
* migrate *ByKey tests, remove index from *ByPath signatures
* rename at-current-range tests
* deprecate mode key usage, migrate more tests away from keys
* deprecate range and point methods which rely on keys to work
* refactor insertBlock, without fixing warnings
* add pathRef/pointRef, fix insertBlock/Inline deprecations, work on insertFragment
* refactor insertFragment
* get rich-text example rendering
* fix lint
* refactor query files, fix more tests
* remove unused queries, refactor others
* deprecate splitDescendantsByPath
* merge master
* add typescript, convert slate, slate-hyperscript, slate-plain-serializer
* add Point, Path, Range, Annotation tests
* add Annotation, Change, Element, Fragment, Mark, Range, Selection, Value interfaces tests
* add Operation and Text tests
* add Node tests
* get operations and normalization tests working for slate
* get *AtPath command tests passing
* rename *AtPath command tests
* rename
* get *AtPoint tests working
* rename
* rename
* add value queries tests
* add element, mark and path queries tests
* convert most on-selection tests
* convert on-selection commands
* rename
* get addMarks and delete commands working
* rename
* rename
* rename
* refactor value.positions(), work on delete tests
* progress on delete tests
* more delete work
* finish delete tests
* start converting to at-based commands
* restructure query tests
* restructure operations tests
* more work converting to multi-purpose commands
* lots of progress on converting to at-based commands
* add unwrapNodes
* remove setValue
* more progress
* refactor node commands to use consistent matching logic
* cleanup, get non-fragment commands passing
* remove annotations and isAtomic
* rename surround/pluck to cover/uncover
* add location concept, change at-path to from-path for iterables
* refactor batches
* add location-based queries
* refactor hanging logic
* more location query work
* renaming
* use getMatch more
* add split to wrap/unwrap
* flip levels/ancestors ordering
* switch splitNodes to use levels
* change split to always:false by default
* fix tests
* add more queries tests
* fixing more delete logic
* add more splitNodes tests
* get rest of delete tests passing
* fix location-based logic in some commands
* cleanup
* get previous packages tests passing again
* add slate-history package
* start slate-schema work
* start of react working
* rendering fixes
* get rich and plain text examples working
* get image example working with hooks and dropping
* refactor onDrop to be internal
* inline more event handlers
* refactor lots of event-related logic
* change rendering to use render props
* delete unused stuff
* cleanup dom utils
* remove unused deps
* remove unnecessary packages, add placeholder
* remove slate-react-placeholder package
* remove unused dep
* remove unnecessary tests, fix readonly example
* convert checklists example
* switch to next from webpack
* get link example working
* convert more examples
* preserve keys, memoized leafs/texts, fix node lookup
* fix to always useLayoutEffect for ordering
* fix annotations to be maps, memoize elements
* remove Change interface
* remove String interface
* rename Node.entries to Node.nodes
* remove unnecessary value queries
* default to selection when iterating, cleanup
* remove unused files
* update scroll into view logic
* fix undoing, remove constructor types
* dont sync selection while composing
* add workflows
* remove unused deps
* convert mentions example
* tweaks
* convert remaining examples
* rename h to jsx, update schema
* fix schema tests
* fix slate-schema logic and tests
* really fix slate-schema and forced-layout example
* get start of insertFragment tests working
* remove Fragment interface
* remove debugger
* get all non-skipped tests passing
* cleanup deps
* run prettier
* configure eslint for typescript
* more eslint fixes...
* more passing
* update some docs
* fix examples
* port windows undo hotkey change
* fix deps, add basic firefox support
* add event overriding, update walkthroughs
* add commands, remove classes, cleanup examples
* cleanup rollup config
* update tests
* rename queries tests
* update other tests
* update walkthroughs
* cleanup interface exports
* cleanup, change mark transforms to require location
* undo mark transform change
* more
* fix tests
* fix example
* update walkthroughs
* update docs
* update docs
* remove annotations
* remove value, move selection and children to editor
* add migrating doc
* fix lint
* fix tests
* fix DOM types aliasing
* add next export
* update deps, fix prod build
* fix prod build
* update scripts
* update docs and changelogs
* update workflow and pull request template
2019-11-27 20:54:42 -05:00
}
const Element = ( { attributes , children , element } ) => {
switch ( element . type ) {
case 'link' :
return (
2019-12-05 11:21:15 -05:00
< a { ... attributes } href = { element . url } >
Next (#3093)
* remove some key usage from core, refactor Operations.apply
* undeprecate some methods
* convert more key usage to paths
* update deprecations
* convert selection commands to use all paths
* refactor word boundary selection logic
* convert many at-range commands to use paths
* convert wrapBlock and wrapInline to not use keys
* cleanup
* remove chainability from editor
* simplify commands, queries and middleware
* convert deleteAtRange
* remove key usage from schema, deprecate *ByKey methods
* migrate *ByKey tests, remove index from *ByPath signatures
* rename at-current-range tests
* deprecate mode key usage, migrate more tests away from keys
* deprecate range and point methods which rely on keys to work
* refactor insertBlock, without fixing warnings
* add pathRef/pointRef, fix insertBlock/Inline deprecations, work on insertFragment
* refactor insertFragment
* get rich-text example rendering
* fix lint
* refactor query files, fix more tests
* remove unused queries, refactor others
* deprecate splitDescendantsByPath
* merge master
* add typescript, convert slate, slate-hyperscript, slate-plain-serializer
* add Point, Path, Range, Annotation tests
* add Annotation, Change, Element, Fragment, Mark, Range, Selection, Value interfaces tests
* add Operation and Text tests
* add Node tests
* get operations and normalization tests working for slate
* get *AtPath command tests passing
* rename *AtPath command tests
* rename
* get *AtPoint tests working
* rename
* rename
* add value queries tests
* add element, mark and path queries tests
* convert most on-selection tests
* convert on-selection commands
* rename
* get addMarks and delete commands working
* rename
* rename
* rename
* refactor value.positions(), work on delete tests
* progress on delete tests
* more delete work
* finish delete tests
* start converting to at-based commands
* restructure query tests
* restructure operations tests
* more work converting to multi-purpose commands
* lots of progress on converting to at-based commands
* add unwrapNodes
* remove setValue
* more progress
* refactor node commands to use consistent matching logic
* cleanup, get non-fragment commands passing
* remove annotations and isAtomic
* rename surround/pluck to cover/uncover
* add location concept, change at-path to from-path for iterables
* refactor batches
* add location-based queries
* refactor hanging logic
* more location query work
* renaming
* use getMatch more
* add split to wrap/unwrap
* flip levels/ancestors ordering
* switch splitNodes to use levels
* change split to always:false by default
* fix tests
* add more queries tests
* fixing more delete logic
* add more splitNodes tests
* get rest of delete tests passing
* fix location-based logic in some commands
* cleanup
* get previous packages tests passing again
* add slate-history package
* start slate-schema work
* start of react working
* rendering fixes
* get rich and plain text examples working
* get image example working with hooks and dropping
* refactor onDrop to be internal
* inline more event handlers
* refactor lots of event-related logic
* change rendering to use render props
* delete unused stuff
* cleanup dom utils
* remove unused deps
* remove unnecessary packages, add placeholder
* remove slate-react-placeholder package
* remove unused dep
* remove unnecessary tests, fix readonly example
* convert checklists example
* switch to next from webpack
* get link example working
* convert more examples
* preserve keys, memoized leafs/texts, fix node lookup
* fix to always useLayoutEffect for ordering
* fix annotations to be maps, memoize elements
* remove Change interface
* remove String interface
* rename Node.entries to Node.nodes
* remove unnecessary value queries
* default to selection when iterating, cleanup
* remove unused files
* update scroll into view logic
* fix undoing, remove constructor types
* dont sync selection while composing
* add workflows
* remove unused deps
* convert mentions example
* tweaks
* convert remaining examples
* rename h to jsx, update schema
* fix schema tests
* fix slate-schema logic and tests
* really fix slate-schema and forced-layout example
* get start of insertFragment tests working
* remove Fragment interface
* remove debugger
* get all non-skipped tests passing
* cleanup deps
* run prettier
* configure eslint for typescript
* more eslint fixes...
* more passing
* update some docs
* fix examples
* port windows undo hotkey change
* fix deps, add basic firefox support
* add event overriding, update walkthroughs
* add commands, remove classes, cleanup examples
* cleanup rollup config
* update tests
* rename queries tests
* update other tests
* update walkthroughs
* cleanup interface exports
* cleanup, change mark transforms to require location
* undo mark transform change
* more
* fix tests
* fix example
* update walkthroughs
* update docs
* update docs
* remove annotations
* remove value, move selection and children to editor
* add migrating doc
* fix lint
* fix tests
* fix DOM types aliasing
* add next export
* update deps, fix prod build
* fix prod build
* update scripts
* update docs and changelogs
* update workflow and pull request template
2019-11-27 20:54:42 -05:00
{ children }
< / a >
)
default :
return < p { ... attributes } > { children } < / p >
}
}
const LinkButton = ( ) => {
const editor = useSlate ( )
return (
< Button
active = { isLinkActive ( editor ) }
onMouseDown = { event => {
event . preventDefault ( )
const url = window . prompt ( 'Enter the URL of the link:' )
if ( ! url ) return
editor . exec ( { type : 'insert_link' , url } )
} }
>
< Icon > link < / I c o n >
< / B u t t o n >
)
}
const initialValue = [
{
children : [
{
text : 'In addition to block nodes, you can create inline nodes, like ' ,
} ,
{
type : 'link' ,
url : 'https://en.wikipedia.org/wiki/Hypertext' ,
2019-12-05 11:21:15 -05:00
children : [ { text : 'hyperlinks' } ] ,
Next (#3093)
* remove some key usage from core, refactor Operations.apply
* undeprecate some methods
* convert more key usage to paths
* update deprecations
* convert selection commands to use all paths
* refactor word boundary selection logic
* convert many at-range commands to use paths
* convert wrapBlock and wrapInline to not use keys
* cleanup
* remove chainability from editor
* simplify commands, queries and middleware
* convert deleteAtRange
* remove key usage from schema, deprecate *ByKey methods
* migrate *ByKey tests, remove index from *ByPath signatures
* rename at-current-range tests
* deprecate mode key usage, migrate more tests away from keys
* deprecate range and point methods which rely on keys to work
* refactor insertBlock, without fixing warnings
* add pathRef/pointRef, fix insertBlock/Inline deprecations, work on insertFragment
* refactor insertFragment
* get rich-text example rendering
* fix lint
* refactor query files, fix more tests
* remove unused queries, refactor others
* deprecate splitDescendantsByPath
* merge master
* add typescript, convert slate, slate-hyperscript, slate-plain-serializer
* add Point, Path, Range, Annotation tests
* add Annotation, Change, Element, Fragment, Mark, Range, Selection, Value interfaces tests
* add Operation and Text tests
* add Node tests
* get operations and normalization tests working for slate
* get *AtPath command tests passing
* rename *AtPath command tests
* rename
* get *AtPoint tests working
* rename
* rename
* add value queries tests
* add element, mark and path queries tests
* convert most on-selection tests
* convert on-selection commands
* rename
* get addMarks and delete commands working
* rename
* rename
* rename
* refactor value.positions(), work on delete tests
* progress on delete tests
* more delete work
* finish delete tests
* start converting to at-based commands
* restructure query tests
* restructure operations tests
* more work converting to multi-purpose commands
* lots of progress on converting to at-based commands
* add unwrapNodes
* remove setValue
* more progress
* refactor node commands to use consistent matching logic
* cleanup, get non-fragment commands passing
* remove annotations and isAtomic
* rename surround/pluck to cover/uncover
* add location concept, change at-path to from-path for iterables
* refactor batches
* add location-based queries
* refactor hanging logic
* more location query work
* renaming
* use getMatch more
* add split to wrap/unwrap
* flip levels/ancestors ordering
* switch splitNodes to use levels
* change split to always:false by default
* fix tests
* add more queries tests
* fixing more delete logic
* add more splitNodes tests
* get rest of delete tests passing
* fix location-based logic in some commands
* cleanup
* get previous packages tests passing again
* add slate-history package
* start slate-schema work
* start of react working
* rendering fixes
* get rich and plain text examples working
* get image example working with hooks and dropping
* refactor onDrop to be internal
* inline more event handlers
* refactor lots of event-related logic
* change rendering to use render props
* delete unused stuff
* cleanup dom utils
* remove unused deps
* remove unnecessary packages, add placeholder
* remove slate-react-placeholder package
* remove unused dep
* remove unnecessary tests, fix readonly example
* convert checklists example
* switch to next from webpack
* get link example working
* convert more examples
* preserve keys, memoized leafs/texts, fix node lookup
* fix to always useLayoutEffect for ordering
* fix annotations to be maps, memoize elements
* remove Change interface
* remove String interface
* rename Node.entries to Node.nodes
* remove unnecessary value queries
* default to selection when iterating, cleanup
* remove unused files
* update scroll into view logic
* fix undoing, remove constructor types
* dont sync selection while composing
* add workflows
* remove unused deps
* convert mentions example
* tweaks
* convert remaining examples
* rename h to jsx, update schema
* fix schema tests
* fix slate-schema logic and tests
* really fix slate-schema and forced-layout example
* get start of insertFragment tests working
* remove Fragment interface
* remove debugger
* get all non-skipped tests passing
* cleanup deps
* run prettier
* configure eslint for typescript
* more eslint fixes...
* more passing
* update some docs
* fix examples
* port windows undo hotkey change
* fix deps, add basic firefox support
* add event overriding, update walkthroughs
* add commands, remove classes, cleanup examples
* cleanup rollup config
* update tests
* rename queries tests
* update other tests
* update walkthroughs
* cleanup interface exports
* cleanup, change mark transforms to require location
* undo mark transform change
* more
* fix tests
* fix example
* update walkthroughs
* update docs
* update docs
* remove annotations
* remove value, move selection and children to editor
* add migrating doc
* fix lint
* fix tests
* fix DOM types aliasing
* add next export
* update deps, fix prod build
* fix prod build
* update scripts
* update docs and changelogs
* update workflow and pull request template
2019-11-27 20:54:42 -05:00
} ,
{
text : '!' ,
} ,
] ,
} ,
{
children : [
{
text :
'This example shows hyperlinks in action. It features two ways to add links. You can either add a link via the toolbar icon above, or if you want in on a little secret, copy a URL to your keyboard and paste it while a range of text is selected.' ,
} ,
] ,
} ,
]
export default LinkExample