@mirrormedia/lilith-draft-editor 1.0.0-beta → 1.0.0-beta2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/lib/draft-js/block-renderer/background-image-block.js +123 -0
- package/lib/draft-js/block-renderer/background-video-block.js +133 -0
- package/lib/draft-js/block-renderer/color-box-block.js +92 -0
- package/lib/draft-js/block-renderer/divider-block.js +24 -0
- package/lib/draft-js/block-renderer/embedded-code-block.js +63 -0
- package/lib/draft-js/block-renderer/image-block.js +47 -0
- package/lib/draft-js/block-renderer/info-box-block.js +89 -0
- package/lib/draft-js/block-renderer/media-block.js +65 -0
- package/lib/draft-js/block-renderer/related-post-block.js +51 -0
- package/lib/draft-js/block-renderer/side-index-block.js +103 -0
- package/lib/draft-js/block-renderer/slideshow-block.js +71 -0
- package/lib/draft-js/block-renderer/table-block.js +408 -0
- package/lib/draft-js/buttons/annotation.js +117 -0
- package/lib/draft-js/buttons/background-color.js +123 -0
- package/lib/draft-js/buttons/background-image.js +222 -0
- package/lib/draft-js/buttons/background-video.js +222 -0
- package/lib/draft-js/buttons/color-box.js +172 -0
- package/lib/draft-js/buttons/divider.js +63 -0
- package/lib/draft-js/buttons/embedded-code.js +134 -0
- package/lib/draft-js/buttons/enlarge.js +24 -0
- package/lib/draft-js/buttons/font-color.js +116 -0
- package/lib/draft-js/buttons/image.js +68 -0
- package/lib/draft-js/buttons/info-box.js +147 -0
- package/lib/draft-js/buttons/link.js +107 -0
- package/lib/draft-js/buttons/media.js +121 -0
- package/lib/draft-js/buttons/related-post.js +71 -0
- package/lib/draft-js/buttons/selector/align-selector.js +71 -0
- package/lib/draft-js/buttons/selector/image-selector.js +428 -0
- package/lib/draft-js/buttons/selector/pagination.js +82 -0
- package/lib/draft-js/buttons/selector/post-selector.js +317 -0
- package/lib/draft-js/buttons/selector/search-box.js +46 -0
- package/lib/draft-js/buttons/selector/video-selector.js +284 -0
- package/lib/draft-js/buttons/side-index.js +200 -0
- package/lib/draft-js/buttons/slideshow.js +71 -0
- package/lib/draft-js/buttons/table.js +67 -0
- package/lib/draft-js/buttons/text-align.js +88 -0
- package/lib/draft-js/editor/basic-editor.js +366 -0
- package/lib/draft-js/editor/block-renderer-fn.js +117 -0
- package/lib/draft-js/editor/entity-decorator.js +16 -0
- package/lib/draft-js/editor/modifier.js +68 -0
- package/lib/draft-js/entity-decorator/annotation-decorator.js +86 -0
- package/lib/draft-js/entity-decorator/link-decorator.js +39 -0
- package/lib/website/mirrormedia/custom/block-renderer/background-image-block.js +138 -0
- package/lib/website/mirrormedia/custom/block-renderer/background-video-block.js +148 -0
- package/lib/website/mirrormedia/custom/block-renderer/color-box-block.js +106 -0
- package/lib/website/mirrormedia/custom/block-renderer/divider-block.js +24 -0
- package/lib/website/mirrormedia/custom/block-renderer/embedded-code-block.js +63 -0
- package/lib/website/mirrormedia/custom/block-renderer/image-block.js +47 -0
- package/lib/website/mirrormedia/custom/block-renderer/info-box-block.js +103 -0
- package/lib/website/mirrormedia/custom/block-renderer/media-block.js +65 -0
- package/lib/website/mirrormedia/custom/block-renderer/related-post-block.js +51 -0
- package/lib/website/mirrormedia/custom/block-renderer/side-index-block.js +119 -0
- package/lib/website/mirrormedia/custom/block-renderer/slideshow-block.js +71 -0
- package/lib/website/mirrormedia/custom/block-renderer/table-block.js +455 -0
- package/lib/website/mirrormedia/custom/entity-decorator/annotation-decorator.js +86 -0
- package/lib/website/mirrormedia/custom/entity-decorator/link-decorator.js +39 -0
- package/lib/website/mirrormedia/custom/selector/align-selector.js +71 -0
- package/lib/website/mirrormedia/custom/selector/image-selector.js +427 -0
- package/lib/website/mirrormedia/custom/selector/pagination.js +82 -0
- package/lib/website/mirrormedia/custom/selector/post-selector.js +318 -0
- package/lib/website/mirrormedia/custom/selector/search-box.js +46 -0
- package/lib/website/mirrormedia/custom/selector/video-selector.js +282 -0
- package/lib/website/mirrormedia/draft-editor/block-renderer-fn.js +117 -0
- package/lib/website/mirrormedia/draft-editor/entity-decorator.js +16 -0
- package/lib/website/mirrormedia/draft-editor/index.js +799 -0
- package/lib/website/mirrormedia/draft-renderer/block-renderer-fn.js +117 -0
- package/lib/website/mirrormedia/draft-renderer/entity-decorator.js +16 -0
- package/lib/website/mirrormedia/draft-renderer/index.js +160 -0
- package/lib/website/readr/custom/block-renderer/background-image-block.js +138 -0
- package/lib/website/readr/custom/block-renderer/background-video-block.js +148 -0
- package/lib/website/readr/custom/block-renderer/color-box-block.js +106 -0
- package/lib/website/readr/custom/block-renderer/divider-block.js +24 -0
- package/lib/website/readr/custom/block-renderer/embedded-code-block.js +63 -0
- package/lib/website/readr/custom/block-renderer/image-block.js +47 -0
- package/lib/website/readr/custom/block-renderer/info-box-block.js +103 -0
- package/lib/website/readr/custom/block-renderer/media-block.js +65 -0
- package/lib/website/readr/custom/block-renderer/related-post-block.js +51 -0
- package/lib/website/readr/custom/block-renderer/side-index-block.js +119 -0
- package/lib/website/readr/custom/block-renderer/slideshow-block.js +71 -0
- package/lib/website/readr/custom/block-renderer/table-block.js +455 -0
- package/lib/website/readr/custom/entity-decorator/annotation-decorator.js +86 -0
- package/lib/website/readr/custom/entity-decorator/link-decorator.js +39 -0
- package/lib/website/readr/custom/selector/align-selector.js +71 -0
- package/lib/website/readr/custom/selector/image-selector.js +427 -0
- package/lib/website/readr/custom/selector/pagination.js +82 -0
- package/lib/website/readr/custom/selector/post-selector.js +318 -0
- package/lib/website/readr/custom/selector/search-box.js +46 -0
- package/lib/website/readr/custom/selector/video-selector.js +282 -0
- package/lib/website/readr/draft-editor/block-renderer-fn.js +117 -0
- package/lib/website/readr/draft-editor/entity-decorator.js +16 -0
- package/lib/website/readr/draft-editor/index.js +799 -0
- package/lib/website/readr/draft-renderer/block-renderer-fn.js +117 -0
- package/lib/website/readr/draft-renderer/entity-decorator.js +16 -0
- package/lib/website/readr/draft-renderer/index.js +160 -0
- package/package.json +1 -1
- package/lib/draft-js/block-renderer/background-image-block.tsx +0 -113
- package/lib/draft-js/block-renderer/background-video-block.tsx +0 -120
- package/lib/draft-js/block-renderer/color-box-block.tsx +0 -85
- package/lib/draft-js/block-renderer/divider-block.tsx +0 -12
- package/lib/draft-js/block-renderer/embedded-code-block.tsx +0 -65
- package/lib/draft-js/block-renderer/image-block.tsx +0 -41
- package/lib/draft-js/block-renderer/info-box-block.tsx +0 -85
- package/lib/draft-js/block-renderer/media-block.tsx +0 -36
- package/lib/draft-js/block-renderer/related-post-block.tsx +0 -47
- package/lib/draft-js/block-renderer/side-index-block.tsx +0 -113
- package/lib/draft-js/block-renderer/slideshow-block.tsx +0 -62
- package/lib/draft-js/block-renderer/table-block.tsx +0 -488
- package/lib/draft-js/buttons/annotation.tsx +0 -113
- package/lib/draft-js/buttons/background-color.tsx +0 -125
- package/lib/draft-js/buttons/background-image.tsx +0 -276
- package/lib/draft-js/buttons/background-video.tsx +0 -275
- package/lib/draft-js/buttons/color-box.tsx +0 -207
- package/lib/draft-js/buttons/divider.tsx +0 -56
- package/lib/draft-js/buttons/embedded-code.tsx +0 -126
- package/lib/draft-js/buttons/enlarge.tsx +0 -11
- package/lib/draft-js/buttons/font-color.tsx +0 -113
- package/lib/draft-js/buttons/image.tsx +0 -71
- package/lib/draft-js/buttons/info-box.tsx +0 -170
- package/lib/draft-js/buttons/link.tsx +0 -103
- package/lib/draft-js/buttons/media.tsx +0 -120
- package/lib/draft-js/buttons/related-post.tsx +0 -81
- package/lib/draft-js/buttons/selector/align-selector.tsx +0 -65
- package/lib/draft-js/buttons/selector/image-selector.tsx +0 -485
- package/lib/draft-js/buttons/selector/pagination.tsx +0 -83
- package/lib/draft-js/buttons/selector/post-selector.tsx +0 -367
- package/lib/draft-js/buttons/selector/search-box.tsx +0 -39
- package/lib/draft-js/buttons/selector/video-selector.tsx +0 -312
- package/lib/draft-js/buttons/side-index.tsx +0 -257
- package/lib/draft-js/buttons/slideshow.tsx +0 -81
- package/lib/draft-js/buttons/table.tsx +0 -63
- package/lib/draft-js/buttons/text-align.tsx +0 -88
- package/lib/draft-js/editor/basic-editor.tsx +0 -384
- package/lib/draft-js/editor/block-redender-fn.tsx +0 -77
- package/lib/draft-js/editor/entity-decorator.tsx +0 -7
- package/lib/draft-js/editor/modifier.tsx +0 -71
- package/lib/draft-js/entity-decorator/annotation-decorator.tsx +0 -81
- package/lib/draft-js/entity-decorator/link-decorator.tsx +0 -27
- package/lib/website/mirrormedia/custom/block-renderer/background-image-block.tsx +0 -128
- package/lib/website/mirrormedia/custom/block-renderer/background-video-block.tsx +0 -135
- package/lib/website/mirrormedia/custom/block-renderer/color-box-block.tsx +0 -98
- package/lib/website/mirrormedia/custom/block-renderer/divider-block.tsx +0 -12
- package/lib/website/mirrormedia/custom/block-renderer/embedded-code-block.tsx +0 -65
- package/lib/website/mirrormedia/custom/block-renderer/image-block.tsx +0 -41
- package/lib/website/mirrormedia/custom/block-renderer/info-box-block.tsx +0 -98
- package/lib/website/mirrormedia/custom/block-renderer/media-block.tsx +0 -36
- package/lib/website/mirrormedia/custom/block-renderer/related-post-block.tsx +0 -47
- package/lib/website/mirrormedia/custom/block-renderer/side-index-block.tsx +0 -125
- package/lib/website/mirrormedia/custom/block-renderer/slideshow-block.tsx +0 -62
- package/lib/website/mirrormedia/custom/block-renderer/table-block.tsx +0 -537
- package/lib/website/mirrormedia/custom/entity-decorator/annotation-decorator.tsx +0 -81
- package/lib/website/mirrormedia/custom/entity-decorator/link-decorator.tsx +0 -27
- package/lib/website/mirrormedia/custom/selector/align-selector.tsx +0 -65
- package/lib/website/mirrormedia/custom/selector/image-selector.tsx +0 -485
- package/lib/website/mirrormedia/custom/selector/pagination.tsx +0 -83
- package/lib/website/mirrormedia/custom/selector/post-selector.tsx +0 -367
- package/lib/website/mirrormedia/custom/selector/search-box.tsx +0 -39
- package/lib/website/mirrormedia/custom/selector/video-selector.tsx +0 -310
- package/lib/website/mirrormedia/draft-editor/block-redender-fn.tsx +0 -77
- package/lib/website/mirrormedia/draft-editor/entity-decorator.tsx +0 -7
- package/lib/website/mirrormedia/draft-editor/index.tsx +0 -909
- package/lib/website/mirrormedia/draft-renderer/block-redender-fn.tsx +0 -77
- package/lib/website/mirrormedia/draft-renderer/entity-decorator.tsx +0 -7
- package/lib/website/mirrormedia/draft-renderer/index-deprecated.tsx +0 -43
- package/lib/website/mirrormedia/draft-renderer/index.tsx +0 -150
- package/lib/website/readr/custom/block-renderer/background-image-block.tsx +0 -128
- package/lib/website/readr/custom/block-renderer/background-video-block.tsx +0 -135
- package/lib/website/readr/custom/block-renderer/color-box-block.tsx +0 -98
- package/lib/website/readr/custom/block-renderer/divider-block.tsx +0 -12
- package/lib/website/readr/custom/block-renderer/embedded-code-block.tsx +0 -65
- package/lib/website/readr/custom/block-renderer/image-block.tsx +0 -41
- package/lib/website/readr/custom/block-renderer/info-box-block.tsx +0 -98
- package/lib/website/readr/custom/block-renderer/media-block.tsx +0 -36
- package/lib/website/readr/custom/block-renderer/related-post-block.tsx +0 -47
- package/lib/website/readr/custom/block-renderer/side-index-block.tsx +0 -125
- package/lib/website/readr/custom/block-renderer/slideshow-block.tsx +0 -62
- package/lib/website/readr/custom/block-renderer/table-block.tsx +0 -537
- package/lib/website/readr/custom/entity-decorator/annotation-decorator.tsx +0 -81
- package/lib/website/readr/custom/entity-decorator/link-decorator.tsx +0 -27
- package/lib/website/readr/custom/selector/align-selector.tsx +0 -65
- package/lib/website/readr/custom/selector/image-selector.tsx +0 -485
- package/lib/website/readr/custom/selector/pagination.tsx +0 -83
- package/lib/website/readr/custom/selector/post-selector.tsx +0 -367
- package/lib/website/readr/custom/selector/search-box.tsx +0 -39
- package/lib/website/readr/custom/selector/video-selector.tsx +0 -310
- package/lib/website/readr/draft-editor/block-redender-fn.tsx +0 -77
- package/lib/website/readr/draft-editor/entity-decorator.tsx +0 -7
- package/lib/website/readr/draft-editor/index.tsx +0 -909
- package/lib/website/readr/draft-renderer/block-redender-fn.tsx +0 -77
- package/lib/website/readr/draft-renderer/entity-decorator.tsx +0 -7
- package/lib/website/readr/draft-renderer/index-deprecated.tsx +0 -43
- package/lib/website/readr/draft-renderer/index.tsx +0 -150
|
@@ -1,257 +0,0 @@
|
|
|
1
|
-
import React, { useState, useEffect } from 'react'
|
|
2
|
-
import { AtomicBlockUtils, EditorState } from 'draft-js'
|
|
3
|
-
import { Drawer, DrawerController } from '@keystone-ui/modals'
|
|
4
|
-
import { Button } from '@keystone-ui/button'
|
|
5
|
-
import styled from 'styled-components'
|
|
6
|
-
import {
|
|
7
|
-
ImageSelector,
|
|
8
|
-
ImageEntityWithMeta,
|
|
9
|
-
ImageEntity,
|
|
10
|
-
} from './selector/image-selector'
|
|
11
|
-
import { TextInput } from '@keystone-ui/fields'
|
|
12
|
-
|
|
13
|
-
const Label = styled.label`
|
|
14
|
-
display: block;
|
|
15
|
-
font-weight: 600;
|
|
16
|
-
margin: 10px 0;
|
|
17
|
-
`
|
|
18
|
-
|
|
19
|
-
const ImageInputText = styled.span`
|
|
20
|
-
display: inline-block;
|
|
21
|
-
margin-right: 10px;
|
|
22
|
-
`
|
|
23
|
-
|
|
24
|
-
type SideIndexEntityData = {
|
|
25
|
-
h2Text?: string
|
|
26
|
-
sideIndexText?: string
|
|
27
|
-
sideIndexUrl?: string
|
|
28
|
-
sideIndexImage?: ImageEntity
|
|
29
|
-
}
|
|
30
|
-
|
|
31
|
-
export type SideIndexInputOnChange = (inputValue: SideIndexEntityData) => void
|
|
32
|
-
|
|
33
|
-
type SideIndexInputProps = SideIndexEntityData & {
|
|
34
|
-
isOpen: boolean
|
|
35
|
-
onChange: SideIndexInputOnChange
|
|
36
|
-
onCancel: () => void
|
|
37
|
-
}
|
|
38
|
-
|
|
39
|
-
export function SideIndexInput(props: SideIndexInputProps) {
|
|
40
|
-
const {
|
|
41
|
-
isOpen,
|
|
42
|
-
onChange,
|
|
43
|
-
onCancel,
|
|
44
|
-
h2Text,
|
|
45
|
-
sideIndexText,
|
|
46
|
-
sideIndexUrl,
|
|
47
|
-
sideIndexImage,
|
|
48
|
-
} = props
|
|
49
|
-
|
|
50
|
-
const initialInputValue: SideIndexEntityData = {
|
|
51
|
-
h2Text: h2Text || '',
|
|
52
|
-
sideIndexText: sideIndexText || '',
|
|
53
|
-
sideIndexUrl: sideIndexUrl || '',
|
|
54
|
-
sideIndexImage: sideIndexImage || undefined,
|
|
55
|
-
}
|
|
56
|
-
|
|
57
|
-
const [inputValue, setInputValue] = useState(initialInputValue)
|
|
58
|
-
const [toShowImageSelector, setToShowImageSelector] = useState(false)
|
|
59
|
-
|
|
60
|
-
const onImageSelectorChange = (
|
|
61
|
-
selectedImagesWithMeta: ImageEntityWithMeta[]
|
|
62
|
-
) => {
|
|
63
|
-
const image = selectedImagesWithMeta?.[0]?.image
|
|
64
|
-
if (!image) {
|
|
65
|
-
setToShowImageSelector(false)
|
|
66
|
-
return
|
|
67
|
-
}
|
|
68
|
-
|
|
69
|
-
setInputValue((oldInputValue) => ({
|
|
70
|
-
...oldInputValue,
|
|
71
|
-
sideIndexImage: image,
|
|
72
|
-
}))
|
|
73
|
-
setToShowImageSelector(false)
|
|
74
|
-
}
|
|
75
|
-
|
|
76
|
-
useEffect(() => {
|
|
77
|
-
if (isOpen) {
|
|
78
|
-
setInputValue(initialInputValue)
|
|
79
|
-
}
|
|
80
|
-
}, [isOpen])
|
|
81
|
-
|
|
82
|
-
return (
|
|
83
|
-
<>
|
|
84
|
-
{toShowImageSelector && (
|
|
85
|
-
<ImageSelector onChange={onImageSelectorChange} />
|
|
86
|
-
)}
|
|
87
|
-
<DrawerController isOpen={isOpen}>
|
|
88
|
-
<Drawer
|
|
89
|
-
title={`Insert Side Index`}
|
|
90
|
-
actions={{
|
|
91
|
-
cancel: {
|
|
92
|
-
label: 'Cancel',
|
|
93
|
-
action: () => {
|
|
94
|
-
onCancel()
|
|
95
|
-
},
|
|
96
|
-
},
|
|
97
|
-
confirm: {
|
|
98
|
-
label: 'Confirm',
|
|
99
|
-
action: () => {
|
|
100
|
-
onChange({
|
|
101
|
-
...inputValue,
|
|
102
|
-
})
|
|
103
|
-
},
|
|
104
|
-
},
|
|
105
|
-
}}
|
|
106
|
-
>
|
|
107
|
-
<Label>文內標題 (若填入外部連結則不會產生文章內h2)</Label>
|
|
108
|
-
<TextInput
|
|
109
|
-
onChange={(e) =>
|
|
110
|
-
setInputValue((oldInputValue) => ({
|
|
111
|
-
...oldInputValue,
|
|
112
|
-
h2Text: e.target.value,
|
|
113
|
-
}))
|
|
114
|
-
}
|
|
115
|
-
type="text"
|
|
116
|
-
placeholder="h2 text"
|
|
117
|
-
value={inputValue.h2Text}
|
|
118
|
-
/>
|
|
119
|
-
<Label>側欄標題 (Optional, 若未設定會直接用文內標題)</Label>
|
|
120
|
-
<TextInput
|
|
121
|
-
onChange={(e) =>
|
|
122
|
-
setInputValue((oldInputValue) => ({
|
|
123
|
-
...oldInputValue,
|
|
124
|
-
sideIndexText: e.target.value,
|
|
125
|
-
}))
|
|
126
|
-
}
|
|
127
|
-
type="text"
|
|
128
|
-
placeholder="sideindex text"
|
|
129
|
-
value={inputValue.sideIndexText}
|
|
130
|
-
/>
|
|
131
|
-
<Label>側欄 Url (Optional, 外部連結才需使用)</Label>
|
|
132
|
-
<TextInput
|
|
133
|
-
onChange={(e) =>
|
|
134
|
-
setInputValue((oldInputValue) => ({
|
|
135
|
-
...oldInputValue,
|
|
136
|
-
sideIndexUrl: e.target.value,
|
|
137
|
-
}))
|
|
138
|
-
}
|
|
139
|
-
type="url"
|
|
140
|
-
placeholder="sideindex url (optional)"
|
|
141
|
-
value={inputValue.sideIndexUrl}
|
|
142
|
-
/>
|
|
143
|
-
<Label>側欄圖片 (Optional)</Label>
|
|
144
|
-
<div>
|
|
145
|
-
<ImageInputText>
|
|
146
|
-
{inputValue.sideIndexImage?.name
|
|
147
|
-
? inputValue.sideIndexImage.name
|
|
148
|
-
: '尚未選取圖片'}
|
|
149
|
-
</ImageInputText>
|
|
150
|
-
<Button
|
|
151
|
-
type="button"
|
|
152
|
-
onClick={() => setToShowImageSelector(true)}
|
|
153
|
-
tone="passive"
|
|
154
|
-
>
|
|
155
|
-
添加圖片
|
|
156
|
-
</Button>
|
|
157
|
-
</div>
|
|
158
|
-
</Drawer>
|
|
159
|
-
</DrawerController>
|
|
160
|
-
</>
|
|
161
|
-
)
|
|
162
|
-
}
|
|
163
|
-
|
|
164
|
-
type SideIndexButtonProps = {
|
|
165
|
-
className: string
|
|
166
|
-
editorState: EditorState
|
|
167
|
-
onChange: ({ editorState }: { editorState: EditorState }) => void
|
|
168
|
-
}
|
|
169
|
-
|
|
170
|
-
export function SideIndexButton(props: SideIndexButtonProps) {
|
|
171
|
-
const [toShowInput, setToShowInput] = useState(false)
|
|
172
|
-
const { className, editorState, onChange: onEditorStateChange } = props
|
|
173
|
-
|
|
174
|
-
const onChange: SideIndexInputOnChange = ({
|
|
175
|
-
h2Text,
|
|
176
|
-
sideIndexText,
|
|
177
|
-
sideIndexUrl,
|
|
178
|
-
sideIndexImage,
|
|
179
|
-
}) => {
|
|
180
|
-
const contentState = editorState.getCurrentContent()
|
|
181
|
-
|
|
182
|
-
// create an SideIndex entity
|
|
183
|
-
const contentStateWithEntity = contentState.createEntity(
|
|
184
|
-
'SIDEINDEX',
|
|
185
|
-
'IMMUTABLE',
|
|
186
|
-
{
|
|
187
|
-
h2Text,
|
|
188
|
-
sideIndexText,
|
|
189
|
-
sideIndexUrl,
|
|
190
|
-
sideIndexImage,
|
|
191
|
-
}
|
|
192
|
-
)
|
|
193
|
-
const entityKey = contentStateWithEntity.getLastCreatedEntityKey()
|
|
194
|
-
const newEditorState = EditorState.set(editorState, {
|
|
195
|
-
currentContent: contentStateWithEntity,
|
|
196
|
-
})
|
|
197
|
-
|
|
198
|
-
//The third parameter here is a space string, not an empty string
|
|
199
|
-
//If you set an empty string, you will get an error: Unknown DraftEntity key: null
|
|
200
|
-
onEditorStateChange(
|
|
201
|
-
AtomicBlockUtils.insertAtomicBlock(newEditorState, entityKey, ' ')
|
|
202
|
-
)
|
|
203
|
-
setToShowInput(false)
|
|
204
|
-
}
|
|
205
|
-
|
|
206
|
-
return (
|
|
207
|
-
<React.Fragment>
|
|
208
|
-
<SideIndexInput
|
|
209
|
-
onChange={onChange}
|
|
210
|
-
onCancel={() => {
|
|
211
|
-
setToShowInput(false)
|
|
212
|
-
}}
|
|
213
|
-
isOpen={toShowInput}
|
|
214
|
-
/>
|
|
215
|
-
<div
|
|
216
|
-
className={className}
|
|
217
|
-
onClick={() => {
|
|
218
|
-
setToShowInput(true)
|
|
219
|
-
}}
|
|
220
|
-
>
|
|
221
|
-
<svg
|
|
222
|
-
width="16"
|
|
223
|
-
height="16"
|
|
224
|
-
viewBox="0 0 16 16"
|
|
225
|
-
fill="none"
|
|
226
|
-
xmlns="http://www.w3.org/2000/svg"
|
|
227
|
-
>
|
|
228
|
-
<path
|
|
229
|
-
d="M13.4626 0.211456H4.15859C3.93427 0.211456 3.71913 0.300569 3.56051 0.45919C3.40189 0.617811 3.31278 0.832947 3.31278 1.05727C3.31278 1.2816 3.40189 1.49673 3.56051 1.65535C3.71913 1.81397 3.93427 1.90309 4.15859 1.90309H13.4626C13.6866 1.90401 13.9012 1.99342 14.0596 2.15184C14.218 2.31027 14.3074 2.52486 14.3084 2.7489V13.4626C14.3074 13.6866 14.218 13.9012 14.0596 14.0596C13.9012 14.218 13.6866 14.3074 13.4626 14.3084H2.7489C2.52486 14.3074 2.31027 14.218 2.15184 14.0596C1.99342 13.9012 1.90401 13.6866 1.90309 13.4626V11.3093C1.90309 11.0849 1.81397 10.8698 1.65535 10.7112C1.49673 10.5526 1.2816 10.4634 1.05727 10.4634C0.832947 10.4634 0.617811 10.5526 0.45919 10.7112C0.300569 10.8698 0.211456 11.0849 0.211456 11.3093V13.4626C0.212389 14.1352 0.480025 14.7801 0.955687 15.2558C1.43135 15.7314 2.07622 15.9991 2.7489 16H13.4626C14.1352 15.9991 14.7801 15.7314 15.2558 15.2558C15.7314 14.7801 15.9991 14.1352 16 13.4626V2.7489C15.9991 2.07622 15.7314 1.43135 15.2558 0.955687C14.7801 0.480025 14.1352 0.212389 13.4626 0.211456Z"
|
|
230
|
-
fill="#6b7280"
|
|
231
|
-
/>
|
|
232
|
-
<path
|
|
233
|
-
d="M1.05727 2.11454C1.64118 2.11454 2.11454 1.64118 2.11454 1.05727C2.11454 0.473355 1.64118 0 1.05727 0C0.473355 0 0 0.473355 0 1.05727C0 1.64118 0.473355 2.11454 1.05727 2.11454Z"
|
|
234
|
-
fill="#6b7280"
|
|
235
|
-
/>
|
|
236
|
-
<path
|
|
237
|
-
d="M4.15859 5.48017H12.0529C12.2772 5.48017 12.4923 5.39106 12.6509 5.23244C12.8096 5.07382 12.8987 4.85868 12.8987 4.63436C12.8987 4.41003 12.8096 4.1949 12.6509 4.03628C12.4923 3.87766 12.2772 3.78854 12.0529 3.78854H4.15859C3.93427 3.78854 3.71913 3.87766 3.56051 4.03628C3.40189 4.1949 3.31277 4.41003 3.31277 4.63436C3.31277 4.85868 3.40189 5.07382 3.56051 5.23244C3.71913 5.39106 3.93427 5.48017 4.15859 5.48017Z"
|
|
238
|
-
fill="#6b7280"
|
|
239
|
-
/>
|
|
240
|
-
<path
|
|
241
|
-
d="M1.05727 5.69162C1.64118 5.69162 2.11454 5.21827 2.11454 4.63436C2.11454 4.05044 1.64118 3.57709 1.05727 3.57709C0.473355 3.57709 0 4.05044 0 4.63436C0 5.21827 0.473355 5.69162 1.05727 5.69162Z"
|
|
242
|
-
fill="#6b7280"
|
|
243
|
-
/>
|
|
244
|
-
<path
|
|
245
|
-
d="M4.15859 9.05726H12.0529C12.2772 9.05726 12.4923 8.96815 12.6509 8.80953C12.8096 8.65091 12.8987 8.43577 12.8987 8.21145C12.8987 7.98712 12.8096 7.77199 12.6509 7.61336C12.4923 7.45474 12.2772 7.36563 12.0529 7.36563H4.15859C3.93427 7.36563 3.71913 7.45474 3.56051 7.61336C3.40189 7.77199 3.31277 7.98712 3.31277 8.21145C3.31277 8.43577 3.40189 8.65091 3.56051 8.80953C3.71913 8.96815 3.93427 9.05726 4.15859 9.05726Z"
|
|
246
|
-
fill="#6b7280"
|
|
247
|
-
/>
|
|
248
|
-
<path
|
|
249
|
-
d="M1.05727 9.26873C1.64118 9.26873 2.11454 8.79537 2.11454 8.21146C2.11454 7.62755 1.64118 7.15419 1.05727 7.15419C0.473355 7.15419 0 7.62755 0 8.21146C0 8.79537 0.473355 9.26873 1.05727 9.26873Z"
|
|
250
|
-
fill="#6b7280"
|
|
251
|
-
/>
|
|
252
|
-
</svg>
|
|
253
|
-
<span>SideIndex</span>
|
|
254
|
-
</div>
|
|
255
|
-
</React.Fragment>
|
|
256
|
-
)
|
|
257
|
-
}
|
|
@@ -1,81 +0,0 @@
|
|
|
1
|
-
import React, { useState } from 'react'
|
|
2
|
-
import {
|
|
3
|
-
ImageSelector as DefaultImageSelector,
|
|
4
|
-
ImageEntityWithMeta,
|
|
5
|
-
} from './selector/image-selector'
|
|
6
|
-
import { AtomicBlockUtils, EditorState } from 'draft-js'
|
|
7
|
-
|
|
8
|
-
export function SlideshowButton(props: {
|
|
9
|
-
editorState: EditorState
|
|
10
|
-
onChange: (param: EditorState) => void
|
|
11
|
-
className?: string
|
|
12
|
-
ImageSelector: typeof DefaultImageSelector
|
|
13
|
-
}) {
|
|
14
|
-
const {
|
|
15
|
-
editorState,
|
|
16
|
-
onChange,
|
|
17
|
-
className,
|
|
18
|
-
ImageSelector = DefaultImageSelector,
|
|
19
|
-
} = props
|
|
20
|
-
|
|
21
|
-
const [toShowImageSelector, setToShowImageSelector] = useState(false)
|
|
22
|
-
|
|
23
|
-
const promptForImageSelector = () => {
|
|
24
|
-
setToShowImageSelector(true)
|
|
25
|
-
}
|
|
26
|
-
|
|
27
|
-
const onImageSelectorChange = (
|
|
28
|
-
selected: ImageEntityWithMeta[],
|
|
29
|
-
align?: string,
|
|
30
|
-
delay?: number
|
|
31
|
-
) => {
|
|
32
|
-
if (selected.length === 0) {
|
|
33
|
-
setToShowImageSelector(false)
|
|
34
|
-
return
|
|
35
|
-
}
|
|
36
|
-
|
|
37
|
-
const contentState = editorState.getCurrentContent()
|
|
38
|
-
|
|
39
|
-
// since 202206, only slideshow-v2 will be created
|
|
40
|
-
const contentStateWithEntity = contentState.createEntity(
|
|
41
|
-
'slideshow-v2',
|
|
42
|
-
'IMMUTABLE',
|
|
43
|
-
{
|
|
44
|
-
alignment: align,
|
|
45
|
-
delay,
|
|
46
|
-
images: selected.map((ele) => {
|
|
47
|
-
return {
|
|
48
|
-
...ele?.image,
|
|
49
|
-
desc: ele?.desc,
|
|
50
|
-
}
|
|
51
|
-
}),
|
|
52
|
-
}
|
|
53
|
-
)
|
|
54
|
-
const entityKey = contentStateWithEntity.getLastCreatedEntityKey()
|
|
55
|
-
const newEditorState = EditorState.set(editorState, {
|
|
56
|
-
currentContent: contentStateWithEntity,
|
|
57
|
-
})
|
|
58
|
-
|
|
59
|
-
// The third parameter here is a space string, not an empty string
|
|
60
|
-
// If you set an empty string, you will get an error: Unknown DraftEntity key: null
|
|
61
|
-
onChange(AtomicBlockUtils.insertAtomicBlock(newEditorState, entityKey, ' '))
|
|
62
|
-
setToShowImageSelector(false)
|
|
63
|
-
}
|
|
64
|
-
|
|
65
|
-
return (
|
|
66
|
-
<React.Fragment>
|
|
67
|
-
{toShowImageSelector && (
|
|
68
|
-
<ImageSelector
|
|
69
|
-
onChange={onImageSelectorChange}
|
|
70
|
-
enableCaption={true}
|
|
71
|
-
enableDelay={true}
|
|
72
|
-
enableMultiSelect={true}
|
|
73
|
-
/>
|
|
74
|
-
)}
|
|
75
|
-
<div className={className} onClick={promptForImageSelector}>
|
|
76
|
-
<i className="far fa-images"></i>
|
|
77
|
-
<span> Slideshow</span>
|
|
78
|
-
</div>
|
|
79
|
-
</React.Fragment>
|
|
80
|
-
)
|
|
81
|
-
}
|
|
@@ -1,63 +0,0 @@
|
|
|
1
|
-
import React from 'react'
|
|
2
|
-
import { AtomicBlockUtils, EditorState, RawDraftContentState } from 'draft-js'
|
|
3
|
-
|
|
4
|
-
export function TableButton(props) {
|
|
5
|
-
const { editorState, onChange, className } = props
|
|
6
|
-
|
|
7
|
-
const onClick = () => {
|
|
8
|
-
const rawDarftContentState: RawDraftContentState = {
|
|
9
|
-
blocks: [],
|
|
10
|
-
entityMap: {},
|
|
11
|
-
}
|
|
12
|
-
const contentState = editorState.getCurrentContent()
|
|
13
|
-
const contentStateWithEntity = contentState.createEntity(
|
|
14
|
-
'TABLE',
|
|
15
|
-
'IMMUTABLE',
|
|
16
|
-
{
|
|
17
|
-
// `tableStyles` is to used to store custom React CSS inline styles.
|
|
18
|
-
// Therefore, please make sure the style name needs to be camelCase.
|
|
19
|
-
tableStyles: {
|
|
20
|
-
// We can customize the inline styles of each row.
|
|
21
|
-
rows: [
|
|
22
|
-
// thead has different background color.
|
|
23
|
-
{ backgroundColor: '#f2f2f2' },
|
|
24
|
-
{},
|
|
25
|
-
{},
|
|
26
|
-
],
|
|
27
|
-
|
|
28
|
-
// TODO: add column styles and cell styles if needed
|
|
29
|
-
columns: [],
|
|
30
|
-
cells: [],
|
|
31
|
-
},
|
|
32
|
-
// We use two dimensions array to store the data.
|
|
33
|
-
// The items of the array represent the rows,
|
|
34
|
-
// and each item is also an array, which represents the columns.
|
|
35
|
-
// Take the following array as example.
|
|
36
|
-
// It is a
|
|
37
|
-
// row: 3
|
|
38
|
-
// column: 2
|
|
39
|
-
// sheet data stored in a 2 dimensions arrary.
|
|
40
|
-
tableData: [
|
|
41
|
-
[rawDarftContentState, rawDarftContentState],
|
|
42
|
-
[rawDarftContentState, rawDarftContentState],
|
|
43
|
-
[rawDarftContentState, rawDarftContentState],
|
|
44
|
-
],
|
|
45
|
-
}
|
|
46
|
-
)
|
|
47
|
-
const entityKey = contentStateWithEntity.getLastCreatedEntityKey()
|
|
48
|
-
const newEditorState = EditorState.set(editorState, {
|
|
49
|
-
currentContent: contentStateWithEntity,
|
|
50
|
-
})
|
|
51
|
-
|
|
52
|
-
// The third parameter here is a space string, not an empty string
|
|
53
|
-
// If you set an empty string, you will get an error: Unknown DraftEntity key: null
|
|
54
|
-
onChange(AtomicBlockUtils.insertAtomicBlock(newEditorState, entityKey, ' '))
|
|
55
|
-
}
|
|
56
|
-
|
|
57
|
-
return (
|
|
58
|
-
<div onClick={onClick} className={className}>
|
|
59
|
-
<i className="fa fa-table"></i>
|
|
60
|
-
<span>Table</span>
|
|
61
|
-
</div>
|
|
62
|
-
)
|
|
63
|
-
}
|
|
@@ -1,88 +0,0 @@
|
|
|
1
|
-
import React from 'react'
|
|
2
|
-
import { EditorState } from 'draft-js'
|
|
3
|
-
import { Modifier } from '../editor/modifier'
|
|
4
|
-
|
|
5
|
-
const toggleSelectionTextAlign = (editorState, textAlign) => {
|
|
6
|
-
return setSelectionBlockData(editorState, {
|
|
7
|
-
textAlign:
|
|
8
|
-
getSelectionBlockData(editorState, 'textAlign') !== textAlign
|
|
9
|
-
? textAlign
|
|
10
|
-
: undefined,
|
|
11
|
-
})
|
|
12
|
-
}
|
|
13
|
-
|
|
14
|
-
const setSelectionBlockData = (editorState, blockData) => {
|
|
15
|
-
return Modifier.setBlockData(
|
|
16
|
-
editorState.getCurrentContent(),
|
|
17
|
-
editorState.getSelection(),
|
|
18
|
-
blockData
|
|
19
|
-
)
|
|
20
|
-
}
|
|
21
|
-
|
|
22
|
-
export const getSelectionBlockData = (editorState, name) => {
|
|
23
|
-
const block = editorState
|
|
24
|
-
.getCurrentContent()
|
|
25
|
-
.getBlockForKey(editorState.getSelection().getAnchorKey())
|
|
26
|
-
const blockData = block.getData()
|
|
27
|
-
return blockData.get(name)
|
|
28
|
-
}
|
|
29
|
-
|
|
30
|
-
export function AlignCenterButton(props) {
|
|
31
|
-
const { isActive, editorState, onChange } = props
|
|
32
|
-
|
|
33
|
-
const toggleTextAlign = () => {
|
|
34
|
-
const newContentState = toggleSelectionTextAlign(editorState, 'center')
|
|
35
|
-
onChange(
|
|
36
|
-
EditorState.push(editorState, newContentState, 'change-block-style')
|
|
37
|
-
)
|
|
38
|
-
}
|
|
39
|
-
|
|
40
|
-
return (
|
|
41
|
-
<React.Fragment>
|
|
42
|
-
<div className={props.className} onMouseDown={toggleTextAlign}>
|
|
43
|
-
<svg
|
|
44
|
-
width="16"
|
|
45
|
-
height="16"
|
|
46
|
-
viewBox="0 0 16 16"
|
|
47
|
-
fill="none"
|
|
48
|
-
xmlns="http://www.w3.org/2000/svg"
|
|
49
|
-
>
|
|
50
|
-
<path
|
|
51
|
-
d="M11.4286 2.28571H4.57143C3.93929 2.28571 3.42857 1.77393 3.42857 1.14286C3.42857 0.511786 3.93929 0 4.57143 0H11.4286C12.0607 0 12.5714 0.511786 12.5714 1.14286C12.5714 1.77393 12.0607 2.28571 11.4286 2.28571ZM14.8571 6.85714H1.14286C0.511786 6.85714 0 6.34643 0 5.71429C0 5.08214 0.511786 4.57143 1.14286 4.57143H14.8571C15.4893 4.57143 16 5.08214 16 5.71429C16 6.34643 15.4893 6.85714 14.8571 6.85714ZM0 14.8571C0 14.225 0.511786 13.7143 1.14286 13.7143H14.8571C15.4893 13.7143 16 14.225 16 14.8571C16 15.4893 15.4893 16 14.8571 16H1.14286C0.511786 16 0 15.4893 0 14.8571ZM11.4286 11.4286H4.57143C3.93929 11.4286 3.42857 10.9179 3.42857 10.2857C3.42857 9.65357 3.93929 9.14286 4.57143 9.14286H11.4286C12.0607 9.14286 12.5714 9.65357 12.5714 10.2857C12.5714 10.9179 12.0607 11.4286 11.4286 11.4286Z"
|
|
52
|
-
fill={isActive ? '#ED8B00' : '#6b7280'}
|
|
53
|
-
/>
|
|
54
|
-
</svg>
|
|
55
|
-
</div>
|
|
56
|
-
</React.Fragment>
|
|
57
|
-
)
|
|
58
|
-
}
|
|
59
|
-
|
|
60
|
-
export function AlignLeftButton(props) {
|
|
61
|
-
const { isActive, editorState, onChange } = props
|
|
62
|
-
|
|
63
|
-
const toggleTextAlign = () => {
|
|
64
|
-
const newContentState = toggleSelectionTextAlign(editorState, 'left')
|
|
65
|
-
onChange(
|
|
66
|
-
EditorState.push(editorState, newContentState, 'change-block-style')
|
|
67
|
-
)
|
|
68
|
-
}
|
|
69
|
-
|
|
70
|
-
return (
|
|
71
|
-
<React.Fragment>
|
|
72
|
-
<div className={props.className} onMouseDown={toggleTextAlign}>
|
|
73
|
-
<svg
|
|
74
|
-
width="16"
|
|
75
|
-
height="16"
|
|
76
|
-
viewBox="0 0 16 16"
|
|
77
|
-
fill="none"
|
|
78
|
-
xmlns="http://www.w3.org/2000/svg"
|
|
79
|
-
>
|
|
80
|
-
<path
|
|
81
|
-
d="M9.14286 2.28571H1.14286C0.511786 2.28571 0 1.77393 0 1.14286C0 0.511786 0.511786 0 1.14286 0H9.14286C9.775 0 10.2857 0.511786 10.2857 1.14286C10.2857 1.77393 9.775 2.28571 9.14286 2.28571ZM9.14286 11.4286H1.14286C0.511786 11.4286 0 10.9179 0 10.2857C0 9.65357 0.511786 9.14286 1.14286 9.14286H9.14286C9.775 9.14286 10.2857 9.65357 10.2857 10.2857C10.2857 10.9179 9.775 11.4286 9.14286 11.4286ZM0 5.71429C0 5.08214 0.511786 4.57143 1.14286 4.57143H14.8571C15.4893 4.57143 16 5.08214 16 5.71429C16 6.34643 15.4893 6.85714 14.8571 6.85714H1.14286C0.511786 6.85714 0 6.34643 0 5.71429ZM14.8571 16H1.14286C0.511786 16 0 15.4893 0 14.8571C0 14.225 0.511786 13.7143 1.14286 13.7143H14.8571C15.4893 13.7143 16 14.225 16 14.8571C16 15.4893 15.4893 16 14.8571 16Z"
|
|
82
|
-
fill={isActive ? '#ED8B00' : '#6b7280'}
|
|
83
|
-
/>
|
|
84
|
-
</svg>
|
|
85
|
-
</div>
|
|
86
|
-
</React.Fragment>
|
|
87
|
-
)
|
|
88
|
-
}
|