mirror of
https://github.com/ianstormtaylor/slate.git
synced 2025-08-20 06:01:24 +02:00
refactor plugins example, fixes #2243
This commit is contained in:
14
examples/plugins/collapse-on-escape.js
Normal file
14
examples/plugins/collapse-on-escape.js
Normal file
@@ -0,0 +1,14 @@
|
|||||||
|
export default function CollapseOnEscape(options = {}) {
|
||||||
|
return {
|
||||||
|
onKeyDown(event, change, next) {
|
||||||
|
const { value } = change
|
||||||
|
const { selection } = value
|
||||||
|
|
||||||
|
if (event.key === 'Escape' && selection.isExpanded) {
|
||||||
|
change.moveToEnd()
|
||||||
|
} else {
|
||||||
|
return next()
|
||||||
|
}
|
||||||
|
},
|
||||||
|
}
|
||||||
|
}
|
@@ -2,45 +2,9 @@ import Plain from 'slate-plain-serializer'
|
|||||||
import { Editor } from 'slate-react'
|
import { Editor } from 'slate-react'
|
||||||
|
|
||||||
import React from 'react'
|
import React from 'react'
|
||||||
import CollapseOnEscape from 'slate-collapse-on-escape'
|
import CollapseOnEscape from './collapse-on-escape'
|
||||||
import SoftBreak from 'slate-soft-break'
|
import SoftBreak from './soft-break'
|
||||||
import styled from 'react-emotion'
|
import WordCount from './word-count'
|
||||||
|
|
||||||
/**
|
|
||||||
* A styled word counter component.
|
|
||||||
*
|
|
||||||
* @type {Component}
|
|
||||||
*/
|
|
||||||
|
|
||||||
const WordCounter = styled('span')`
|
|
||||||
margin-top: 10px;
|
|
||||||
padding: 12px;
|
|
||||||
background-color: #ebebeb;
|
|
||||||
display: inline-block;
|
|
||||||
`
|
|
||||||
|
|
||||||
/**
|
|
||||||
* A simple word count plugin.
|
|
||||||
*
|
|
||||||
* @param {Object} options
|
|
||||||
* @return {Object}
|
|
||||||
*/
|
|
||||||
|
|
||||||
function WordCount(options) {
|
|
||||||
return {
|
|
||||||
renderEditor(props, next) {
|
|
||||||
const children = next()
|
|
||||||
return (
|
|
||||||
<div>
|
|
||||||
<div>{children}</div>
|
|
||||||
<WordCounter>
|
|
||||||
Word Count: {props.value.document.text.split(' ').length}
|
|
||||||
</WordCounter>
|
|
||||||
</div>
|
|
||||||
)
|
|
||||||
},
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Plugins.
|
* Plugins.
|
||||||
|
11
examples/plugins/soft-break.js
Normal file
11
examples/plugins/soft-break.js
Normal file
@@ -0,0 +1,11 @@
|
|||||||
|
export default function SoftBreak(options = {}) {
|
||||||
|
return {
|
||||||
|
onKeyDown(event, change, next) {
|
||||||
|
if (event.key === 'Enter') {
|
||||||
|
change.insertText('\n')
|
||||||
|
} else {
|
||||||
|
next()
|
||||||
|
}
|
||||||
|
},
|
||||||
|
}
|
||||||
|
}
|
25
examples/plugins/word-count.js
Normal file
25
examples/plugins/word-count.js
Normal file
@@ -0,0 +1,25 @@
|
|||||||
|
import React from 'react'
|
||||||
|
import styled from 'react-emotion'
|
||||||
|
|
||||||
|
const WordCounter = styled('span')`
|
||||||
|
margin-top: 10px;
|
||||||
|
padding: 12px;
|
||||||
|
background-color: #ebebeb;
|
||||||
|
display: inline-block;
|
||||||
|
`
|
||||||
|
|
||||||
|
export default function WordCount(options) {
|
||||||
|
return {
|
||||||
|
renderEditor(props, next) {
|
||||||
|
const children = next()
|
||||||
|
return (
|
||||||
|
<div>
|
||||||
|
<div>{children}</div>
|
||||||
|
<WordCounter>
|
||||||
|
Word Count: {props.value.document.text.split(' ').length}
|
||||||
|
</WordCounter>
|
||||||
|
</div>
|
||||||
|
)
|
||||||
|
},
|
||||||
|
}
|
||||||
|
}
|
@@ -72,10 +72,6 @@
|
|||||||
"rollup-plugin-replace": "^2.0.0",
|
"rollup-plugin-replace": "^2.0.0",
|
||||||
"rollup-plugin-sourcemaps": "^0.4.2",
|
"rollup-plugin-sourcemaps": "^0.4.2",
|
||||||
"rollup-plugin-uglify": "^3.0.0",
|
"rollup-plugin-uglify": "^3.0.0",
|
||||||
"slate-collapse-on-escape": "^0.6.0",
|
|
||||||
"slate-dev-benchmark": "*",
|
|
||||||
"slate-dev-test-utils": "*",
|
|
||||||
"slate-soft-break": "^0.6.0",
|
|
||||||
"source-map-loader": "^0.2.3",
|
"source-map-loader": "^0.2.3",
|
||||||
"source-map-support": "^0.4.0",
|
"source-map-support": "^0.4.0",
|
||||||
"style-loader": "^0.20.2",
|
"style-loader": "^0.20.2",
|
||||||
@@ -87,6 +83,8 @@
|
|||||||
},
|
},
|
||||||
"peerDependencies": {
|
"peerDependencies": {
|
||||||
"slate": "*",
|
"slate": "*",
|
||||||
|
"slate-dev-benchmark": "*",
|
||||||
|
"slate-dev-test-utils": "*",
|
||||||
"slate-html-serializer": "*",
|
"slate-html-serializer": "*",
|
||||||
"slate-plain-serializer": "*",
|
"slate-plain-serializer": "*",
|
||||||
"slate-react": "*"
|
"slate-react": "*"
|
||||||
|
16
yarn.lock
16
yarn.lock
@@ -7439,20 +7439,10 @@ slash@^1.0.0:
|
|||||||
version "1.0.0"
|
version "1.0.0"
|
||||||
resolved "https://registry.yarnpkg.com/slash/-/slash-1.0.0.tgz#c41f2f6c39fc16d1cd17ad4b5d896114ae470d55"
|
resolved "https://registry.yarnpkg.com/slash/-/slash-1.0.0.tgz#c41f2f6c39fc16d1cd17ad4b5d896114ae470d55"
|
||||||
|
|
||||||
slate-collapse-on-escape@^0.6.0:
|
|
||||||
version "0.6.0"
|
|
||||||
resolved "https://registry.yarnpkg.com/slate-collapse-on-escape/-/slate-collapse-on-escape-0.6.0.tgz#668f2318770608a09a25a95623f5fb4329a277bf"
|
|
||||||
dependencies:
|
|
||||||
to-pascal-case "^1.0.0"
|
|
||||||
|
|
||||||
slate-simulator@^0.4.67:
|
slate-simulator@^0.4.67:
|
||||||
version "0.4.67"
|
version "0.4.67"
|
||||||
resolved "https://registry.yarnpkg.com/slate-simulator/-/slate-simulator-0.4.67.tgz#9313c84736db1e23d6aebacd536f582b6d54723c"
|
resolved "https://registry.yarnpkg.com/slate-simulator/-/slate-simulator-0.4.67.tgz#9313c84736db1e23d6aebacd536f582b6d54723c"
|
||||||
|
|
||||||
slate-soft-break@^0.6.0:
|
|
||||||
version "0.6.0"
|
|
||||||
resolved "https://registry.yarnpkg.com/slate-soft-break/-/slate-soft-break-0.6.0.tgz#1e44815b7ff4ddada055bba14cd0d2d4ef0fd463"
|
|
||||||
|
|
||||||
slice-ansi@1.0.0:
|
slice-ansi@1.0.0:
|
||||||
version "1.0.0"
|
version "1.0.0"
|
||||||
resolved "https://registry.yarnpkg.com/slice-ansi/-/slice-ansi-1.0.0.tgz#044f1a49d8842ff307aad6b505ed178bd950134d"
|
resolved "https://registry.yarnpkg.com/slice-ansi/-/slice-ansi-1.0.0.tgz#044f1a49d8842ff307aad6b505ed178bd950134d"
|
||||||
@@ -8079,12 +8069,6 @@ to-object-path@^0.3.0:
|
|||||||
dependencies:
|
dependencies:
|
||||||
kind-of "^3.0.2"
|
kind-of "^3.0.2"
|
||||||
|
|
||||||
to-pascal-case@^1.0.0:
|
|
||||||
version "1.0.0"
|
|
||||||
resolved "https://registry.yarnpkg.com/to-pascal-case/-/to-pascal-case-1.0.0.tgz#0bbdc8df448886ba01535e543327048d0aa1ce78"
|
|
||||||
dependencies:
|
|
||||||
to-space-case "^1.0.0"
|
|
||||||
|
|
||||||
to-regex-range@^2.1.0:
|
to-regex-range@^2.1.0:
|
||||||
version "2.1.1"
|
version "2.1.1"
|
||||||
resolved "https://registry.yarnpkg.com/to-regex-range/-/to-regex-range-2.1.1.tgz#7c80c17b9dfebe599e27367e0d4dd5590141db38"
|
resolved "https://registry.yarnpkg.com/to-regex-range/-/to-regex-range-2.1.1.tgz#7c80c17b9dfebe599e27367e0d4dd5590141db38"
|
||||||
|
Reference in New Issue
Block a user