@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.
Files changed (191) hide show
  1. package/lib/draft-js/block-renderer/background-image-block.js +123 -0
  2. package/lib/draft-js/block-renderer/background-video-block.js +133 -0
  3. package/lib/draft-js/block-renderer/color-box-block.js +92 -0
  4. package/lib/draft-js/block-renderer/divider-block.js +24 -0
  5. package/lib/draft-js/block-renderer/embedded-code-block.js +63 -0
  6. package/lib/draft-js/block-renderer/image-block.js +47 -0
  7. package/lib/draft-js/block-renderer/info-box-block.js +89 -0
  8. package/lib/draft-js/block-renderer/media-block.js +65 -0
  9. package/lib/draft-js/block-renderer/related-post-block.js +51 -0
  10. package/lib/draft-js/block-renderer/side-index-block.js +103 -0
  11. package/lib/draft-js/block-renderer/slideshow-block.js +71 -0
  12. package/lib/draft-js/block-renderer/table-block.js +408 -0
  13. package/lib/draft-js/buttons/annotation.js +117 -0
  14. package/lib/draft-js/buttons/background-color.js +123 -0
  15. package/lib/draft-js/buttons/background-image.js +222 -0
  16. package/lib/draft-js/buttons/background-video.js +222 -0
  17. package/lib/draft-js/buttons/color-box.js +172 -0
  18. package/lib/draft-js/buttons/divider.js +63 -0
  19. package/lib/draft-js/buttons/embedded-code.js +134 -0
  20. package/lib/draft-js/buttons/enlarge.js +24 -0
  21. package/lib/draft-js/buttons/font-color.js +116 -0
  22. package/lib/draft-js/buttons/image.js +68 -0
  23. package/lib/draft-js/buttons/info-box.js +147 -0
  24. package/lib/draft-js/buttons/link.js +107 -0
  25. package/lib/draft-js/buttons/media.js +121 -0
  26. package/lib/draft-js/buttons/related-post.js +71 -0
  27. package/lib/draft-js/buttons/selector/align-selector.js +71 -0
  28. package/lib/draft-js/buttons/selector/image-selector.js +428 -0
  29. package/lib/draft-js/buttons/selector/pagination.js +82 -0
  30. package/lib/draft-js/buttons/selector/post-selector.js +317 -0
  31. package/lib/draft-js/buttons/selector/search-box.js +46 -0
  32. package/lib/draft-js/buttons/selector/video-selector.js +284 -0
  33. package/lib/draft-js/buttons/side-index.js +200 -0
  34. package/lib/draft-js/buttons/slideshow.js +71 -0
  35. package/lib/draft-js/buttons/table.js +67 -0
  36. package/lib/draft-js/buttons/text-align.js +88 -0
  37. package/lib/draft-js/editor/basic-editor.js +366 -0
  38. package/lib/draft-js/editor/block-renderer-fn.js +117 -0
  39. package/lib/draft-js/editor/entity-decorator.js +16 -0
  40. package/lib/draft-js/editor/modifier.js +68 -0
  41. package/lib/draft-js/entity-decorator/annotation-decorator.js +86 -0
  42. package/lib/draft-js/entity-decorator/link-decorator.js +39 -0
  43. package/lib/website/mirrormedia/custom/block-renderer/background-image-block.js +138 -0
  44. package/lib/website/mirrormedia/custom/block-renderer/background-video-block.js +148 -0
  45. package/lib/website/mirrormedia/custom/block-renderer/color-box-block.js +106 -0
  46. package/lib/website/mirrormedia/custom/block-renderer/divider-block.js +24 -0
  47. package/lib/website/mirrormedia/custom/block-renderer/embedded-code-block.js +63 -0
  48. package/lib/website/mirrormedia/custom/block-renderer/image-block.js +47 -0
  49. package/lib/website/mirrormedia/custom/block-renderer/info-box-block.js +103 -0
  50. package/lib/website/mirrormedia/custom/block-renderer/media-block.js +65 -0
  51. package/lib/website/mirrormedia/custom/block-renderer/related-post-block.js +51 -0
  52. package/lib/website/mirrormedia/custom/block-renderer/side-index-block.js +119 -0
  53. package/lib/website/mirrormedia/custom/block-renderer/slideshow-block.js +71 -0
  54. package/lib/website/mirrormedia/custom/block-renderer/table-block.js +455 -0
  55. package/lib/website/mirrormedia/custom/entity-decorator/annotation-decorator.js +86 -0
  56. package/lib/website/mirrormedia/custom/entity-decorator/link-decorator.js +39 -0
  57. package/lib/website/mirrormedia/custom/selector/align-selector.js +71 -0
  58. package/lib/website/mirrormedia/custom/selector/image-selector.js +427 -0
  59. package/lib/website/mirrormedia/custom/selector/pagination.js +82 -0
  60. package/lib/website/mirrormedia/custom/selector/post-selector.js +318 -0
  61. package/lib/website/mirrormedia/custom/selector/search-box.js +46 -0
  62. package/lib/website/mirrormedia/custom/selector/video-selector.js +282 -0
  63. package/lib/website/mirrormedia/draft-editor/block-renderer-fn.js +117 -0
  64. package/lib/website/mirrormedia/draft-editor/entity-decorator.js +16 -0
  65. package/lib/website/mirrormedia/draft-editor/index.js +799 -0
  66. package/lib/website/mirrormedia/draft-renderer/block-renderer-fn.js +117 -0
  67. package/lib/website/mirrormedia/draft-renderer/entity-decorator.js +16 -0
  68. package/lib/website/mirrormedia/draft-renderer/index.js +160 -0
  69. package/lib/website/readr/custom/block-renderer/background-image-block.js +138 -0
  70. package/lib/website/readr/custom/block-renderer/background-video-block.js +148 -0
  71. package/lib/website/readr/custom/block-renderer/color-box-block.js +106 -0
  72. package/lib/website/readr/custom/block-renderer/divider-block.js +24 -0
  73. package/lib/website/readr/custom/block-renderer/embedded-code-block.js +63 -0
  74. package/lib/website/readr/custom/block-renderer/image-block.js +47 -0
  75. package/lib/website/readr/custom/block-renderer/info-box-block.js +103 -0
  76. package/lib/website/readr/custom/block-renderer/media-block.js +65 -0
  77. package/lib/website/readr/custom/block-renderer/related-post-block.js +51 -0
  78. package/lib/website/readr/custom/block-renderer/side-index-block.js +119 -0
  79. package/lib/website/readr/custom/block-renderer/slideshow-block.js +71 -0
  80. package/lib/website/readr/custom/block-renderer/table-block.js +455 -0
  81. package/lib/website/readr/custom/entity-decorator/annotation-decorator.js +86 -0
  82. package/lib/website/readr/custom/entity-decorator/link-decorator.js +39 -0
  83. package/lib/website/readr/custom/selector/align-selector.js +71 -0
  84. package/lib/website/readr/custom/selector/image-selector.js +427 -0
  85. package/lib/website/readr/custom/selector/pagination.js +82 -0
  86. package/lib/website/readr/custom/selector/post-selector.js +318 -0
  87. package/lib/website/readr/custom/selector/search-box.js +46 -0
  88. package/lib/website/readr/custom/selector/video-selector.js +282 -0
  89. package/lib/website/readr/draft-editor/block-renderer-fn.js +117 -0
  90. package/lib/website/readr/draft-editor/entity-decorator.js +16 -0
  91. package/lib/website/readr/draft-editor/index.js +799 -0
  92. package/lib/website/readr/draft-renderer/block-renderer-fn.js +117 -0
  93. package/lib/website/readr/draft-renderer/entity-decorator.js +16 -0
  94. package/lib/website/readr/draft-renderer/index.js +160 -0
  95. package/package.json +1 -1
  96. package/lib/draft-js/block-renderer/background-image-block.tsx +0 -113
  97. package/lib/draft-js/block-renderer/background-video-block.tsx +0 -120
  98. package/lib/draft-js/block-renderer/color-box-block.tsx +0 -85
  99. package/lib/draft-js/block-renderer/divider-block.tsx +0 -12
  100. package/lib/draft-js/block-renderer/embedded-code-block.tsx +0 -65
  101. package/lib/draft-js/block-renderer/image-block.tsx +0 -41
  102. package/lib/draft-js/block-renderer/info-box-block.tsx +0 -85
  103. package/lib/draft-js/block-renderer/media-block.tsx +0 -36
  104. package/lib/draft-js/block-renderer/related-post-block.tsx +0 -47
  105. package/lib/draft-js/block-renderer/side-index-block.tsx +0 -113
  106. package/lib/draft-js/block-renderer/slideshow-block.tsx +0 -62
  107. package/lib/draft-js/block-renderer/table-block.tsx +0 -488
  108. package/lib/draft-js/buttons/annotation.tsx +0 -113
  109. package/lib/draft-js/buttons/background-color.tsx +0 -125
  110. package/lib/draft-js/buttons/background-image.tsx +0 -276
  111. package/lib/draft-js/buttons/background-video.tsx +0 -275
  112. package/lib/draft-js/buttons/color-box.tsx +0 -207
  113. package/lib/draft-js/buttons/divider.tsx +0 -56
  114. package/lib/draft-js/buttons/embedded-code.tsx +0 -126
  115. package/lib/draft-js/buttons/enlarge.tsx +0 -11
  116. package/lib/draft-js/buttons/font-color.tsx +0 -113
  117. package/lib/draft-js/buttons/image.tsx +0 -71
  118. package/lib/draft-js/buttons/info-box.tsx +0 -170
  119. package/lib/draft-js/buttons/link.tsx +0 -103
  120. package/lib/draft-js/buttons/media.tsx +0 -120
  121. package/lib/draft-js/buttons/related-post.tsx +0 -81
  122. package/lib/draft-js/buttons/selector/align-selector.tsx +0 -65
  123. package/lib/draft-js/buttons/selector/image-selector.tsx +0 -485
  124. package/lib/draft-js/buttons/selector/pagination.tsx +0 -83
  125. package/lib/draft-js/buttons/selector/post-selector.tsx +0 -367
  126. package/lib/draft-js/buttons/selector/search-box.tsx +0 -39
  127. package/lib/draft-js/buttons/selector/video-selector.tsx +0 -312
  128. package/lib/draft-js/buttons/side-index.tsx +0 -257
  129. package/lib/draft-js/buttons/slideshow.tsx +0 -81
  130. package/lib/draft-js/buttons/table.tsx +0 -63
  131. package/lib/draft-js/buttons/text-align.tsx +0 -88
  132. package/lib/draft-js/editor/basic-editor.tsx +0 -384
  133. package/lib/draft-js/editor/block-redender-fn.tsx +0 -77
  134. package/lib/draft-js/editor/entity-decorator.tsx +0 -7
  135. package/lib/draft-js/editor/modifier.tsx +0 -71
  136. package/lib/draft-js/entity-decorator/annotation-decorator.tsx +0 -81
  137. package/lib/draft-js/entity-decorator/link-decorator.tsx +0 -27
  138. package/lib/website/mirrormedia/custom/block-renderer/background-image-block.tsx +0 -128
  139. package/lib/website/mirrormedia/custom/block-renderer/background-video-block.tsx +0 -135
  140. package/lib/website/mirrormedia/custom/block-renderer/color-box-block.tsx +0 -98
  141. package/lib/website/mirrormedia/custom/block-renderer/divider-block.tsx +0 -12
  142. package/lib/website/mirrormedia/custom/block-renderer/embedded-code-block.tsx +0 -65
  143. package/lib/website/mirrormedia/custom/block-renderer/image-block.tsx +0 -41
  144. package/lib/website/mirrormedia/custom/block-renderer/info-box-block.tsx +0 -98
  145. package/lib/website/mirrormedia/custom/block-renderer/media-block.tsx +0 -36
  146. package/lib/website/mirrormedia/custom/block-renderer/related-post-block.tsx +0 -47
  147. package/lib/website/mirrormedia/custom/block-renderer/side-index-block.tsx +0 -125
  148. package/lib/website/mirrormedia/custom/block-renderer/slideshow-block.tsx +0 -62
  149. package/lib/website/mirrormedia/custom/block-renderer/table-block.tsx +0 -537
  150. package/lib/website/mirrormedia/custom/entity-decorator/annotation-decorator.tsx +0 -81
  151. package/lib/website/mirrormedia/custom/entity-decorator/link-decorator.tsx +0 -27
  152. package/lib/website/mirrormedia/custom/selector/align-selector.tsx +0 -65
  153. package/lib/website/mirrormedia/custom/selector/image-selector.tsx +0 -485
  154. package/lib/website/mirrormedia/custom/selector/pagination.tsx +0 -83
  155. package/lib/website/mirrormedia/custom/selector/post-selector.tsx +0 -367
  156. package/lib/website/mirrormedia/custom/selector/search-box.tsx +0 -39
  157. package/lib/website/mirrormedia/custom/selector/video-selector.tsx +0 -310
  158. package/lib/website/mirrormedia/draft-editor/block-redender-fn.tsx +0 -77
  159. package/lib/website/mirrormedia/draft-editor/entity-decorator.tsx +0 -7
  160. package/lib/website/mirrormedia/draft-editor/index.tsx +0 -909
  161. package/lib/website/mirrormedia/draft-renderer/block-redender-fn.tsx +0 -77
  162. package/lib/website/mirrormedia/draft-renderer/entity-decorator.tsx +0 -7
  163. package/lib/website/mirrormedia/draft-renderer/index-deprecated.tsx +0 -43
  164. package/lib/website/mirrormedia/draft-renderer/index.tsx +0 -150
  165. package/lib/website/readr/custom/block-renderer/background-image-block.tsx +0 -128
  166. package/lib/website/readr/custom/block-renderer/background-video-block.tsx +0 -135
  167. package/lib/website/readr/custom/block-renderer/color-box-block.tsx +0 -98
  168. package/lib/website/readr/custom/block-renderer/divider-block.tsx +0 -12
  169. package/lib/website/readr/custom/block-renderer/embedded-code-block.tsx +0 -65
  170. package/lib/website/readr/custom/block-renderer/image-block.tsx +0 -41
  171. package/lib/website/readr/custom/block-renderer/info-box-block.tsx +0 -98
  172. package/lib/website/readr/custom/block-renderer/media-block.tsx +0 -36
  173. package/lib/website/readr/custom/block-renderer/related-post-block.tsx +0 -47
  174. package/lib/website/readr/custom/block-renderer/side-index-block.tsx +0 -125
  175. package/lib/website/readr/custom/block-renderer/slideshow-block.tsx +0 -62
  176. package/lib/website/readr/custom/block-renderer/table-block.tsx +0 -537
  177. package/lib/website/readr/custom/entity-decorator/annotation-decorator.tsx +0 -81
  178. package/lib/website/readr/custom/entity-decorator/link-decorator.tsx +0 -27
  179. package/lib/website/readr/custom/selector/align-selector.tsx +0 -65
  180. package/lib/website/readr/custom/selector/image-selector.tsx +0 -485
  181. package/lib/website/readr/custom/selector/pagination.tsx +0 -83
  182. package/lib/website/readr/custom/selector/post-selector.tsx +0 -367
  183. package/lib/website/readr/custom/selector/search-box.tsx +0 -39
  184. package/lib/website/readr/custom/selector/video-selector.tsx +0 -310
  185. package/lib/website/readr/draft-editor/block-redender-fn.tsx +0 -77
  186. package/lib/website/readr/draft-editor/entity-decorator.tsx +0 -7
  187. package/lib/website/readr/draft-editor/index.tsx +0 -909
  188. package/lib/website/readr/draft-renderer/block-redender-fn.tsx +0 -77
  189. package/lib/website/readr/draft-renderer/entity-decorator.tsx +0 -7
  190. package/lib/website/readr/draft-renderer/index-deprecated.tsx +0 -43
  191. package/lib/website/readr/draft-renderer/index.tsx +0 -150
@@ -1,207 +0,0 @@
1
- import React, { useState, useEffect } from 'react'
2
- import decorators from '../editor/entity-decorator'
3
- import {
4
- AtomicBlockUtils,
5
- EditorState,
6
- RawDraftContentState,
7
- convertToRaw,
8
- convertFromRaw,
9
- } from 'draft-js'
10
- import { BasicEditor } from '../editor/basic-editor'
11
- import { Drawer, DrawerController } from '@keystone-ui/modals'
12
- import { TextInput } from '@keystone-ui/fields'
13
- import draftConverter from '../editor/draft-converter'
14
- import styled from 'styled-components'
15
-
16
- const Label = styled.label`
17
- display: block;
18
- font-weight: 600;
19
- margin: 10px 0;
20
- `
21
-
22
- const ColorHexInput = styled(TextInput)`
23
- margin-bottom: 10px;
24
- `
25
-
26
- type ColorBoxInputType = {
27
- color?: string
28
- rawContentStateForColorBoxEditor?: RawDraftContentState
29
- isOpen: boolean
30
- onChange: ({
31
- color,
32
- rawContentState,
33
- }: {
34
- color: string
35
- rawContentState: RawDraftContentState
36
- }) => void
37
- onCancel: () => void
38
- }
39
-
40
- export function ColorBoxInput(props: ColorBoxInputType) {
41
- const {
42
- isOpen,
43
- onChange,
44
- onCancel,
45
- color,
46
- rawContentStateForColorBoxEditor,
47
- } = props
48
- const rawContentState = rawContentStateForColorBoxEditor || {
49
- blocks: [],
50
- entityMap: {},
51
- }
52
- const initialInputValue = {
53
- color: color || '',
54
- // create an `editorState` from raw content state object
55
- editorStateOfBasicEditor: EditorState.createWithContent(
56
- convertFromRaw(rawContentState),
57
- decorators
58
- ),
59
- }
60
-
61
- const [inputValue, setInputValue] = useState(initialInputValue)
62
-
63
- const clearInputValue = () => {
64
- setInputValue({
65
- color: '',
66
- editorStateOfBasicEditor: EditorState.createWithContent(
67
- convertFromRaw({
68
- blocks: [],
69
- entityMap: {},
70
- }),
71
- decorators
72
- ),
73
- })
74
- }
75
-
76
- useEffect(() => {
77
- if (isOpen) {
78
- setInputValue(initialInputValue)
79
- }
80
- }, [isOpen])
81
-
82
- return (
83
- <DrawerController isOpen={isOpen}>
84
- <Drawer
85
- title={`Insert Color Box`}
86
- actions={{
87
- cancel: {
88
- label: 'Cancel',
89
- action: () => {
90
- clearInputValue()
91
- onCancel()
92
- },
93
- },
94
- confirm: {
95
- label: 'Confirm',
96
- action: () => {
97
- onChange({
98
- color: inputValue.color,
99
- // convert `contentState` of the `editorState` into raw content state object
100
- rawContentState: convertToRaw(
101
- inputValue.editorStateOfBasicEditor.getCurrentContent()
102
- ),
103
- })
104
- clearInputValue()
105
- },
106
- },
107
- }}
108
- >
109
- <Label>Hex Color Code (#ffffff)</Label>
110
- <ColorHexInput
111
- onChange={(e) =>
112
- setInputValue({
113
- color: e.target.value,
114
- editorStateOfBasicEditor: inputValue.editorStateOfBasicEditor,
115
- })
116
- }
117
- type="text"
118
- placeholder="Color"
119
- value={inputValue.color}
120
- />
121
- <Label>內文</Label>
122
- <BasicEditor
123
- editorState={inputValue.editorStateOfBasicEditor}
124
- onChange={(editorStateOfBasicEditor) => {
125
- setInputValue({
126
- color: inputValue.color,
127
- editorStateOfBasicEditor,
128
- })
129
- }}
130
- />
131
- </Drawer>
132
- </DrawerController>
133
- )
134
- }
135
-
136
- type ColorBoxButtonProps = {
137
- className: string
138
- editorState: EditorState
139
- onChange: ({ editorState }: { editorState: EditorState }) => void
140
- }
141
-
142
- export function ColorBoxButton(props: ColorBoxButtonProps) {
143
- const [toShowInput, setToShowInput] = useState(false)
144
- const { className, editorState, onChange: onEditorStateChange } = props
145
-
146
- const onChange = ({ color, rawContentState }) => {
147
- const contentState = editorState.getCurrentContent()
148
-
149
- // create an ColorBox entity
150
- const contentStateWithEntity = contentState.createEntity(
151
- 'COLORBOX',
152
- 'IMMUTABLE',
153
- {
154
- color,
155
- rawContentState,
156
- body: draftConverter.convertToHtml(rawContentState),
157
- }
158
- )
159
- const entityKey = contentStateWithEntity.getLastCreatedEntityKey()
160
- const newEditorState = EditorState.set(editorState, {
161
- currentContent: contentStateWithEntity,
162
- })
163
-
164
- //The third parameter here is a space string, not an empty string
165
- //If you set an empty string, you will get an error: Unknown DraftEntity key: null
166
- onEditorStateChange(
167
- AtomicBlockUtils.insertAtomicBlock(newEditorState, entityKey, ' ')
168
- )
169
- setToShowInput(false)
170
- }
171
-
172
- return (
173
- <React.Fragment>
174
- <ColorBoxInput
175
- onChange={onChange}
176
- onCancel={() => {
177
- setToShowInput(false)
178
- }}
179
- isOpen={toShowInput}
180
- />
181
- <div
182
- className={className}
183
- onClick={() => {
184
- setToShowInput(true)
185
- }}
186
- >
187
- <svg
188
- width="16"
189
- height="16"
190
- viewBox="0 0 16 16"
191
- fill="none"
192
- xmlns="http://www.w3.org/2000/svg"
193
- >
194
- <path
195
- d="M14 0H2C0.895431 0 0 0.895431 0 2V14C0 15.1046 0.895431 16 2 16H14C15.1046 16 16 15.1046 16 14V2C16 0.895431 15.1046 0 14 0Z"
196
- fill="#6b7280"
197
- />
198
- <path
199
- d="M12.3867 2.66667H3.61332C3.36225 2.66667 3.12146 2.76641 2.94393 2.94394C2.76639 3.12148 2.66666 3.36227 2.66666 3.61334V5.51112C2.68312 5.75156 2.79025 5.97678 2.96639 6.14127C3.14253 6.30576 3.37454 6.39725 3.61555 6.39725C3.85655 6.39725 4.08856 6.30576 4.2647 6.14127C4.44084 5.97678 4.54797 5.75156 4.56443 5.51112V4.56445H6.94221V11.4356H5.99555C5.86547 11.4267 5.73496 11.4446 5.61211 11.4882C5.48926 11.5319 5.3767 11.6003 5.28141 11.6893C5.18612 11.7783 5.11015 11.8859 5.0582 12.0055C5.00626 12.1251 4.97946 12.2541 4.97946 12.3844C4.97946 12.5148 5.00626 12.6438 5.0582 12.7634C5.11015 12.883 5.18612 12.9906 5.28141 13.0796C5.3767 13.1686 5.48926 13.237 5.61211 13.2807C5.73496 13.3243 5.86547 13.3422 5.99555 13.3333H9.78666C10.0271 13.3169 10.2523 13.2097 10.4168 13.0336C10.5813 12.8575 10.6728 12.6255 10.6728 12.3844C10.6728 12.1434 10.5813 11.9114 10.4168 11.7353C10.2523 11.5592 10.0271 11.452 9.78666 11.4356H8.83999V4.56445H11.4355V5.51112C11.452 5.75156 11.5591 5.97678 11.7353 6.14127C11.9114 6.30576 12.1434 6.39725 12.3844 6.39725C12.6254 6.39725 12.8575 6.30576 13.0336 6.14127C13.2097 5.97678 13.3169 5.75156 13.3333 5.51112V3.61334C13.3333 3.36227 13.2336 3.12148 13.0561 2.94394C12.8785 2.76641 12.6377 2.66667 12.3867 2.66667Z"
200
- fill="white"
201
- />
202
- </svg>
203
- <span> ColorBox</span>
204
- </div>
205
- </React.Fragment>
206
- )
207
- }
@@ -1,56 +0,0 @@
1
- import React from 'react'
2
- import { AtomicBlockUtils, EditorState } from 'draft-js'
3
- import styled from 'styled-components'
4
-
5
- const IconWrapper = styled.span`
6
- display: inline-block;
7
- position: relative;
8
- top: 2px;
9
- `
10
-
11
- export function DividerButton(props) {
12
- const { editorState, onChange, className } = props
13
-
14
- const onClick = () => {
15
- const contentState = editorState.getCurrentContent()
16
- const contentStateWithEntity = contentState.createEntity(
17
- 'DIVIDER',
18
- 'IMMUTABLE',
19
- {}
20
- )
21
- const entityKey = contentStateWithEntity.getLastCreatedEntityKey()
22
- const newEditorState = EditorState.set(editorState, {
23
- currentContent: contentStateWithEntity,
24
- })
25
-
26
- // The third parameter here is a space string, not an empty string
27
- // If you set an empty string, you will get an error: Unknown DraftEntity key: null
28
- onChange(AtomicBlockUtils.insertAtomicBlock(newEditorState, entityKey, ' '))
29
- }
30
-
31
- return (
32
- <React.Fragment>
33
- <div onClick={onClick} className={className}>
34
- <IconWrapper>
35
- <svg
36
- xmlns="http://www.w3.org/2000/svg"
37
- height="16"
38
- viewBox="0 0 16 16"
39
- width="16"
40
- >
41
- <g fill="none" fillRule="evenodd">
42
- <path d="M0 0h16v16H0z" />
43
- <path
44
- d="M15 10.501a0.5 0.5 0 0 1 0.496 0.442l0.004 0.059v2.031a2.468 2.468 0 0 1 -2.361 2.466l-0.107 0.003H2.967a2.467 2.467 0 0 1 -2.465 -2.36L0.5 13.032v-2.03a0.5 0.5 0 0 1 0.997 -0.058l0.004 0.059v2.03a1.468 1.468 0 0 0 1.381 1.464l0.086 0.003h10.065a1.468 1.468 0 0 0 1.466 -1.382l0.003 -0.086v-2.031a0.5 0.5 0 0 1 0.5 -0.5zM15.5 7.5a0.5 0.5 0 0 1 0 1H0.5a0.5 0.5 0 0 1 0 -1zM13.029 0.5a2.471 2.471 0 0 1 2.469 2.364l0.003 0.107v2.031a0.5 0.5 0 0 1 -0.997 0.058L14.5 5.003V2.971a1.471 1.471 0 0 0 -1.385 -1.468L13.029 1.5H2.97a1.47 1.47 0 0 0 -1.467 1.383L1.5 2.97V5a0.5 0.5 0 0 1 -0.997 0.058L0.5 5V2.97a2.47 2.47 0 0 1 2.362 -2.467L2.97 0.5z"
45
- fill="#6b7280"
46
- fillRule="nonzero"
47
- stroke="#6b7280"
48
- strokeWidth="0.5"
49
- />
50
- </g>
51
- </svg>
52
- </IconWrapper>
53
- </div>
54
- </React.Fragment>
55
- )
56
- }
@@ -1,126 +0,0 @@
1
- import React, { useState } from 'react'
2
- import styled from 'styled-components'
3
- import { AtomicBlockUtils, EditorState } from 'draft-js'
4
- import { Drawer, DrawerController } from '@keystone-ui/modals'
5
- import { TextInput, TextArea } from '@keystone-ui/fields'
6
-
7
- export const Block = styled.div`
8
- position: relative;
9
- /* styles for image link */
10
- img.img-responsive {
11
- margin: 0 auto;
12
- max-width: 100%;
13
- height: auto;
14
- display: block;
15
- }
16
- `
17
-
18
- export const Caption = styled.div`
19
- line-height: 1.43;
20
- letter-spacing: 0.4px;
21
- font-size: 14px;
22
- color: #808080;
23
- padding: 15px 15px 0 15px;
24
- `
25
-
26
- export function EmbeddedCodeButton(props) {
27
- const { editorState, onChange, className } = props
28
-
29
- const [toShowInput, setToShowInput] = useState(false)
30
- const [inputValue, setInputValue] = useState({
31
- caption: '',
32
- embeddedCode: '',
33
- })
34
-
35
- const promptForInput = () => {
36
- setToShowInput(true)
37
- setInputValue({
38
- caption: '',
39
- embeddedCode: '',
40
- })
41
- }
42
-
43
- const confirmInput = () => {
44
- const contentState = editorState.getCurrentContent()
45
- const contentStateWithEntity = contentState.createEntity(
46
- 'EMBEDDEDCODE',
47
- 'IMMUTABLE',
48
- inputValue
49
- )
50
- const entityKey = contentStateWithEntity.getLastCreatedEntityKey()
51
- const newEditorState = EditorState.set(editorState, {
52
- currentContent: contentStateWithEntity,
53
- })
54
-
55
- // The third parameter here is a space string, not an empty string
56
- // If you set an empty string, you will get an error: Unknown DraftEntity key: null
57
- onChange(AtomicBlockUtils.insertAtomicBlock(newEditorState, entityKey, ' '))
58
-
59
- setToShowInput(false)
60
- setInputValue({
61
- caption: '',
62
- embeddedCode: '',
63
- })
64
- }
65
-
66
- const input = (
67
- <DrawerController isOpen={toShowInput}>
68
- <Drawer
69
- title={`Insert Embedded Code`}
70
- //isOpen={toShowInput}
71
- actions={{
72
- cancel: {
73
- label: 'Cancel',
74
- action: () => {
75
- setToShowInput(false)
76
- },
77
- },
78
- confirm: {
79
- label: 'Confirm',
80
- action: confirmInput,
81
- },
82
- }}
83
- >
84
- <TextInput
85
- onChange={(e) =>
86
- setInputValue({
87
- caption: e.target.value,
88
- embeddedCode: inputValue.embeddedCode,
89
- })
90
- }
91
- type="text"
92
- placeholder="Caption"
93
- value={inputValue.caption}
94
- style={{ marginBottom: '10px', marginTop: '30px' }}
95
- />
96
- <TextArea
97
- onChange={(e) =>
98
- setInputValue({
99
- caption: inputValue.caption,
100
- embeddedCode: e.target.value,
101
- })
102
- }
103
- placeholder="Embedded Code"
104
- type="text"
105
- value={inputValue.embeddedCode}
106
- style={{ marginBottom: '30px' }}
107
- />
108
- </Drawer>
109
- </DrawerController>
110
- )
111
-
112
- return (
113
- <React.Fragment>
114
- {input}
115
- <div
116
- onClick={() => {
117
- promptForInput()
118
- }}
119
- className={className}
120
- >
121
- <i className="far"></i>
122
- <span>Embed</span>
123
- </div>
124
- </React.Fragment>
125
- )
126
- }
@@ -1,11 +0,0 @@
1
- import React from 'react'
2
-
3
- export function EnlargeButton(props) {
4
- const { onToggle, isEnlarged, className } = props
5
-
6
- return (
7
- <div className={className} onClick={onToggle}>
8
- <i className={isEnlarged ? 'fas fa-compress' : 'fas fa-expand'}></i>
9
- </div>
10
- )
11
- }
@@ -1,113 +0,0 @@
1
- import React, { useState } from 'react'
2
- import { AlertDialog } from '@keystone-ui/modals'
3
- import { EditorState } from 'draft-js'
4
- import { TextInput } from '@keystone-ui/fields'
5
- import styled from 'styled-components'
6
- import { Modifier } from '../editor/modifier'
7
-
8
- const ColorHexInput = styled(TextInput)`
9
- font-family: Georgia, serif;
10
- margin-right: 10px;
11
- padding: 10px;
12
- `
13
-
14
- export const CUSTOM_STYLE_PREFIX_FONT_COLOR = 'FONT_COLOR_'
15
-
16
- export function FontColorButton(props) {
17
- const { isActive, editorState, onChange } = props
18
-
19
- const [toShowColorInput, setToShowColorInput] = useState(false)
20
- const [colorValue, setColorValue] = useState('')
21
-
22
- const promptForColor = (e) => {
23
- e.preventDefault()
24
- const selection = editorState.getSelection()
25
- if (!selection.isCollapsed()) {
26
- setToShowColorInput(true)
27
- }
28
- }
29
-
30
- const confirmColor = () => {
31
- const selection = editorState.getSelection()
32
- const contentState = editorState.getCurrentContent()
33
- let newContentState = Modifier.removeInlineStyleByPrefix(
34
- contentState,
35
- selection,
36
- CUSTOM_STYLE_PREFIX_FONT_COLOR
37
- )
38
- if (colorValue) {
39
- newContentState = Modifier.applyInlineStyle(
40
- newContentState,
41
- selection,
42
- CUSTOM_STYLE_PREFIX_FONT_COLOR + colorValue
43
- )
44
- }
45
- onChange(
46
- EditorState.push(editorState, newContentState, 'change-inline-style')
47
- )
48
-
49
- setToShowColorInput(false)
50
- setColorValue('')
51
- }
52
-
53
- const onColorInputKeyDown = (e) => {
54
- if (e.which === 13) {
55
- e.preventDefault()
56
- confirmColor()
57
- }
58
- }
59
-
60
- const removeColor = () => {
61
- const selection = editorState.getSelection()
62
-
63
- if (!selection.isCollapsed()) {
64
- const contentState = editorState.getCurrentContent()
65
- const newContentState = Modifier.removeInlineStyleByPrefix(
66
- contentState,
67
- selection,
68
- CUSTOM_STYLE_PREFIX_FONT_COLOR
69
- )
70
- onChange(
71
- EditorState.push(editorState, newContentState, 'change-inline-style')
72
- )
73
- }
74
- setToShowColorInput(false)
75
- setColorValue('')
76
- }
77
-
78
- const colorInput = (
79
- <AlertDialog
80
- title="Hex Color Code (#ffffff)"
81
- isOpen={toShowColorInput}
82
- actions={{
83
- cancel: {
84
- label: 'Cancel',
85
- action: removeColor,
86
- },
87
- confirm: {
88
- label: 'Confirm',
89
- action: confirmColor,
90
- },
91
- }}
92
- >
93
- <ColorHexInput
94
- onChange={(e) => setColorValue(e.target.value)}
95
- type="text"
96
- value={colorValue}
97
- onKeyDown={onColorInputKeyDown}
98
- />
99
- </AlertDialog>
100
- )
101
-
102
- return (
103
- <React.Fragment>
104
- {colorInput}
105
- <div
106
- className={props.className}
107
- onMouseDown={isActive ? removeColor : promptForColor}
108
- >
109
- <i className="fas fa-palette"></i>
110
- </div>
111
- </React.Fragment>
112
- )
113
- }
@@ -1,71 +0,0 @@
1
- import React, { useState } from 'react'
2
- import { AtomicBlockUtils, EditorState } from 'draft-js'
3
-
4
- import { ImageSelector as DefaultImageSelector } from './selector/image-selector'
5
-
6
- export function ImageButton(props: {
7
- editorState: EditorState
8
- onChange: (param: EditorState) => void
9
- className?: string
10
- ImageSelector: typeof DefaultImageSelector
11
- }) {
12
- const {
13
- editorState,
14
- onChange,
15
- className,
16
- ImageSelector = DefaultImageSelector,
17
- } = props
18
-
19
- const [toShowImageSelector, setToShowImageSelector] = useState(false)
20
-
21
- const promptForImageSelector = () => {
22
- setToShowImageSelector(true)
23
- }
24
-
25
- const onImageSelectorChange = (selectedImagesWithMeta, align) => {
26
- const selected = selectedImagesWithMeta?.[0]
27
- if (!selected) {
28
- setToShowImageSelector(false)
29
- return
30
- }
31
-
32
- const contentState = editorState.getCurrentContent()
33
- const contentStateWithEntity = contentState.createEntity(
34
- 'image',
35
- 'IMMUTABLE',
36
- {
37
- ...selected?.image,
38
- desc: selected?.desc,
39
- url: selected?.url,
40
- alignment: align,
41
- }
42
- )
43
- const entityKey = contentStateWithEntity.getLastCreatedEntityKey()
44
- const newEditorState = EditorState.set(editorState, {
45
- currentContent: contentStateWithEntity,
46
- })
47
-
48
- // The third parameter here is a space string, not an empty string
49
- // If you set an empty string, you will get an error: Unknown DraftEntity key: null
50
- onChange(AtomicBlockUtils.insertAtomicBlock(newEditorState, entityKey, ' '))
51
- setToShowImageSelector(false)
52
- }
53
-
54
- return (
55
- <React.Fragment>
56
- {toShowImageSelector && (
57
- <ImageSelector
58
- onChange={onImageSelectorChange}
59
- enableCaption={true}
60
- enableUrl={true}
61
- enableAlignment={true}
62
- />
63
- )}
64
-
65
- <div className={className} onClick={promptForImageSelector}>
66
- <i className="far fa-image"></i>
67
- <span> Image</span>
68
- </div>
69
- </React.Fragment>
70
- )
71
- }