@mirrormedia/lilith-draft-editor 1.1.0-alpha.2 → 1.1.0-alpha.21
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/buttons/image.js +3 -3
- package/lib/draft-js/buttons/selector/audio-selector.js +0 -1
- package/lib/draft-js/buttons/selector/image-selector.js +12 -10
- package/lib/draft-js/buttons/youtube.js +147 -0
- package/lib/website/mirrormedia/block-renderer/image-block.js +108 -0
- package/lib/website/mirrormedia/block-renderer-fn.js +10 -3
- package/lib/website/mirrormedia/draft-editor.js +23 -5
- package/lib/website/mirrormedia/entity-decorator.js +8 -1
- package/lib/website/mirrormedia/selector/audio-selector.js +0 -1
- package/lib/website/mirrormedia/selector/image-selector.js +20 -10
- package/lib/website/mirrormedia/theme/index.js +28 -0
- package/lib/website/readr/block-renderer/background-image-block.js +53 -5
- package/lib/website/readr/block-renderer/background-video-block.js +63 -5
- package/lib/website/readr/block-renderer/image-block.js +106 -0
- package/lib/website/readr/block-renderer-fn.js +8 -2
- package/lib/website/readr/draft-editor.js +6 -2
- package/lib/website/readr/selector/audio-selector.js +0 -13
- package/lib/website/readr/selector/image-selector.js +12 -10
- package/lib/website/readr/selector/post-selector.js +2 -9
- package/lib/website/readr/theme/index.js +39 -0
- package/package.json +8 -8
|
@@ -37,9 +37,9 @@ function ImageButton(props) {
|
|
|
37
37
|
}
|
|
38
38
|
|
|
39
39
|
const contentState = editorState.getCurrentContent();
|
|
40
|
-
const contentStateWithEntity = contentState.createEntity('image', 'IMMUTABLE', { ...
|
|
41
|
-
desc: selected
|
|
42
|
-
url: selected
|
|
40
|
+
const contentStateWithEntity = contentState.createEntity('image', 'IMMUTABLE', { ...selected.image,
|
|
41
|
+
desc: selected.desc,
|
|
42
|
+
url: selected.url,
|
|
43
43
|
alignment: align
|
|
44
44
|
});
|
|
45
45
|
const entityKey = contentStateWithEntity.getLastCreatedEntityKey();
|
|
@@ -94,7 +94,6 @@ function AudioGrid(props) {
|
|
|
94
94
|
onSelect,
|
|
95
95
|
isSelected
|
|
96
96
|
} = props;
|
|
97
|
-
console.log('audio', audio);
|
|
98
97
|
return /*#__PURE__*/_react.default.createElement(AudioGridWrapper, {
|
|
99
98
|
key: audio === null || audio === void 0 ? void 0 : audio.id,
|
|
100
99
|
onClick: () => onSelect(audio)
|
|
@@ -240,6 +240,16 @@ const imagesQuery = (0, _apollo.gql)`
|
|
|
240
240
|
`;
|
|
241
241
|
|
|
242
242
|
function ImageSelector(props) {
|
|
243
|
+
const {
|
|
244
|
+
enableMultiSelect = false,
|
|
245
|
+
enableCaption = false,
|
|
246
|
+
enableUrl = false,
|
|
247
|
+
enableAlignment = false,
|
|
248
|
+
enableDelay = false,
|
|
249
|
+
onChange,
|
|
250
|
+
initialSelected = [],
|
|
251
|
+
initialAlign
|
|
252
|
+
} = props;
|
|
243
253
|
const [queryImages, {
|
|
244
254
|
loading,
|
|
245
255
|
error,
|
|
@@ -253,9 +263,9 @@ function ImageSelector(props) {
|
|
|
253
263
|
const [currentPage, setCurrentPage] = (0, _react.useState)(0); // page starts with 1, 0 is used to detect initialization
|
|
254
264
|
|
|
255
265
|
const [searchText, setSearchText] = (0, _react.useState)('');
|
|
256
|
-
const [selected, setSelected] = (0, _react.useState)(
|
|
266
|
+
const [selected, setSelected] = (0, _react.useState)(initialSelected);
|
|
257
267
|
const [delay, setDelay] = (0, _react.useState)('5');
|
|
258
|
-
const [align, setAlign] = (0, _react.useState)(
|
|
268
|
+
const [align, setAlign] = (0, _react.useState)(initialAlign);
|
|
259
269
|
const contentWrapperRef = (0, _react.useRef)();
|
|
260
270
|
const pageSize = 6;
|
|
261
271
|
const options = [{
|
|
@@ -271,14 +281,6 @@ function ImageSelector(props) {
|
|
|
271
281
|
label: 'right',
|
|
272
282
|
isDisabled: false
|
|
273
283
|
}];
|
|
274
|
-
const {
|
|
275
|
-
enableMultiSelect = false,
|
|
276
|
-
enableCaption = false,
|
|
277
|
-
enableUrl = false,
|
|
278
|
-
enableAlignment = false,
|
|
279
|
-
enableDelay = false,
|
|
280
|
-
onChange
|
|
281
|
-
} = props;
|
|
282
284
|
|
|
283
285
|
const onSave = () => {
|
|
284
286
|
let adjustedDelay = +delay;
|
|
@@ -0,0 +1,147 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.YoutubeButton = YoutubeButton;
|
|
7
|
+
exports.YoutubeInput = YoutubeInput;
|
|
8
|
+
|
|
9
|
+
var _react = _interopRequireWildcard(require("react"));
|
|
10
|
+
|
|
11
|
+
var _draftJs = require("draft-js");
|
|
12
|
+
|
|
13
|
+
var _modals = require("@keystone-ui/modals");
|
|
14
|
+
|
|
15
|
+
var _fields = require("@keystone-ui/fields");
|
|
16
|
+
|
|
17
|
+
var _styledComponents = _interopRequireDefault(require("styled-components"));
|
|
18
|
+
|
|
19
|
+
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
|
20
|
+
|
|
21
|
+
function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function (nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); }
|
|
22
|
+
|
|
23
|
+
function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || typeof obj !== "object" && typeof obj !== "function") { return { default: obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj.default = obj; if (cache) { cache.set(obj, newObj); } return newObj; }
|
|
24
|
+
|
|
25
|
+
const Label = _styledComponents.default.label`
|
|
26
|
+
display: block;
|
|
27
|
+
font-weight: 600;
|
|
28
|
+
margin: 10px 0;
|
|
29
|
+
`;
|
|
30
|
+
|
|
31
|
+
function YoutubeInput(props) {
|
|
32
|
+
const {
|
|
33
|
+
isOpen,
|
|
34
|
+
onChange,
|
|
35
|
+
onCancel
|
|
36
|
+
} = props;
|
|
37
|
+
const initialInputValue = {
|
|
38
|
+
description: '',
|
|
39
|
+
youtubeId: ''
|
|
40
|
+
};
|
|
41
|
+
const [inputValue, setInputValue] = (0, _react.useState)(initialInputValue);
|
|
42
|
+
|
|
43
|
+
const clearInputValue = () => {
|
|
44
|
+
setInputValue(initialInputValue);
|
|
45
|
+
};
|
|
46
|
+
|
|
47
|
+
return /*#__PURE__*/_react.default.createElement(_modals.DrawerController, {
|
|
48
|
+
isOpen: isOpen
|
|
49
|
+
}, /*#__PURE__*/_react.default.createElement(_modals.Drawer, {
|
|
50
|
+
title: `Insert Youtube video`,
|
|
51
|
+
actions: {
|
|
52
|
+
cancel: {
|
|
53
|
+
label: 'Cancel',
|
|
54
|
+
action: () => {
|
|
55
|
+
clearInputValue();
|
|
56
|
+
onCancel();
|
|
57
|
+
}
|
|
58
|
+
},
|
|
59
|
+
confirm: {
|
|
60
|
+
label: 'Confirm',
|
|
61
|
+
action: () => {
|
|
62
|
+
onChange({
|
|
63
|
+
description: inputValue.description,
|
|
64
|
+
youtubeId: inputValue.youtubeId
|
|
65
|
+
});
|
|
66
|
+
clearInputValue();
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
}, /*#__PURE__*/_react.default.createElement(Label, {
|
|
71
|
+
htmlFor: "description"
|
|
72
|
+
}, "Youtube Description"), /*#__PURE__*/_react.default.createElement(_fields.TextInput, {
|
|
73
|
+
onChange: e => setInputValue({
|
|
74
|
+
description: e.target.value,
|
|
75
|
+
youtubeId: inputValue.youtubeId
|
|
76
|
+
}),
|
|
77
|
+
type: "text",
|
|
78
|
+
placeholder: "description",
|
|
79
|
+
id: "description",
|
|
80
|
+
value: inputValue.description
|
|
81
|
+
}), /*#__PURE__*/_react.default.createElement(Label, {
|
|
82
|
+
htmlFor: "youtubeId"
|
|
83
|
+
}, "Youtube Videi Id"), /*#__PURE__*/_react.default.createElement(_fields.TextInput, {
|
|
84
|
+
onChange: e => setInputValue({
|
|
85
|
+
description: inputValue.description,
|
|
86
|
+
youtubeId: e.target.value
|
|
87
|
+
}),
|
|
88
|
+
type: "text",
|
|
89
|
+
placeholder: "youtubeId",
|
|
90
|
+
id: "youtubeId",
|
|
91
|
+
value: inputValue.youtubeId
|
|
92
|
+
})));
|
|
93
|
+
}
|
|
94
|
+
|
|
95
|
+
function YoutubeButton(props) {
|
|
96
|
+
const [toShowInput, setToShowInput] = (0, _react.useState)(false);
|
|
97
|
+
const {
|
|
98
|
+
className,
|
|
99
|
+
editorState,
|
|
100
|
+
onChange: onEditorStateChange
|
|
101
|
+
} = props;
|
|
102
|
+
|
|
103
|
+
const onChange = ({
|
|
104
|
+
description,
|
|
105
|
+
youtubeId
|
|
106
|
+
}) => {
|
|
107
|
+
const contentState = editorState.getCurrentContent(); // create an InfoBox entity
|
|
108
|
+
|
|
109
|
+
const contentStateWithEntity = contentState.createEntity('YOUTUBE', 'IMMUTABLE', {
|
|
110
|
+
description,
|
|
111
|
+
youtubeId
|
|
112
|
+
});
|
|
113
|
+
const entityKey = contentStateWithEntity.getLastCreatedEntityKey();
|
|
114
|
+
|
|
115
|
+
const newEditorState = _draftJs.EditorState.set(editorState, {
|
|
116
|
+
currentContent: contentStateWithEntity
|
|
117
|
+
}); //The third parameter here is a space string, not an empty string
|
|
118
|
+
//If you set an empty string, you will get an error: Unknown DraftEntity key: null
|
|
119
|
+
|
|
120
|
+
|
|
121
|
+
onEditorStateChange(_draftJs.AtomicBlockUtils.insertAtomicBlock(newEditorState, entityKey, ' '));
|
|
122
|
+
setToShowInput(false);
|
|
123
|
+
};
|
|
124
|
+
|
|
125
|
+
return /*#__PURE__*/_react.default.createElement(_react.default.Fragment, null, /*#__PURE__*/_react.default.createElement(YoutubeInput, {
|
|
126
|
+
onChange: onChange,
|
|
127
|
+
onCancel: () => {
|
|
128
|
+
setToShowInput(false);
|
|
129
|
+
},
|
|
130
|
+
isOpen: toShowInput
|
|
131
|
+
}), /*#__PURE__*/_react.default.createElement("div", {
|
|
132
|
+
className: className,
|
|
133
|
+
onClick: () => {
|
|
134
|
+
setToShowInput(true);
|
|
135
|
+
}
|
|
136
|
+
}, /*#__PURE__*/_react.default.createElement("svg", {
|
|
137
|
+
height: "16px",
|
|
138
|
+
width: "14px",
|
|
139
|
+
version: "1.1",
|
|
140
|
+
id: "Layer_1",
|
|
141
|
+
xmlns: "http://www.w3.org/2000/svg",
|
|
142
|
+
viewBox: "0 0 461.001 461.001"
|
|
143
|
+
}, /*#__PURE__*/_react.default.createElement("path", {
|
|
144
|
+
fill: "#6b7280",
|
|
145
|
+
d: "M365.257,67.393H95.744C42.866,67.393,0,110.259,0,163.137v134.728 c0,52.878,42.866,95.744,95.744,95.744h269.513c52.878,0,95.744-42.866,95.744-95.744V163.137 C461.001,110.259,418.135,67.393,365.257,67.393z M300.506,237.056l-126.06,60.123c-3.359,1.602-7.239-0.847-7.239-4.568V168.607 c0-3.774,3.982-6.22,7.348-4.514l126.06,63.881C304.363,229.873,304.298,235.248,300.506,237.056z"
|
|
146
|
+
})), /*#__PURE__*/_react.default.createElement("span", null, "Youtube")));
|
|
147
|
+
}
|
|
@@ -0,0 +1,108 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.ImageEditorBlock = ImageEditorBlock;
|
|
7
|
+
|
|
8
|
+
var _react = _interopRequireWildcard(require("react"));
|
|
9
|
+
|
|
10
|
+
var _styledComponents = _interopRequireDefault(require("styled-components"));
|
|
11
|
+
|
|
12
|
+
var _mirrormedia = _interopRequireDefault(require("@mirrormedia/lilith-draft-renderer/lib/website/mirrormedia"));
|
|
13
|
+
|
|
14
|
+
var _imageSelector = require("../selector/image-selector");
|
|
15
|
+
|
|
16
|
+
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
|
17
|
+
|
|
18
|
+
function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function (nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); }
|
|
19
|
+
|
|
20
|
+
function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || typeof obj !== "object" && typeof obj !== "function") { return { default: obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj.default = obj; if (cache) { cache.set(obj, newObj); } return newObj; }
|
|
21
|
+
|
|
22
|
+
const {
|
|
23
|
+
ImageBlock
|
|
24
|
+
} = _mirrormedia.default.blockRenderers;
|
|
25
|
+
const ImageBlockWrapper = _styledComponents.default.div`
|
|
26
|
+
img {
|
|
27
|
+
min-width: 300px;
|
|
28
|
+
max-width: 600px;
|
|
29
|
+
}
|
|
30
|
+
`;
|
|
31
|
+
const ImageEditButton = _styledComponents.default.span`
|
|
32
|
+
cursor: pointer;
|
|
33
|
+
background-color: white;
|
|
34
|
+
padding: 6px;
|
|
35
|
+
border-radius: 6px;
|
|
36
|
+
`;
|
|
37
|
+
|
|
38
|
+
function ImageEditorBlock(props) {
|
|
39
|
+
const [toShowImageSelector, setToShowImageSelector] = (0, _react.useState)(false);
|
|
40
|
+
const {
|
|
41
|
+
block,
|
|
42
|
+
blockProps,
|
|
43
|
+
contentState
|
|
44
|
+
} = props;
|
|
45
|
+
const {
|
|
46
|
+
onEditStart,
|
|
47
|
+
onEditFinish
|
|
48
|
+
} = blockProps;
|
|
49
|
+
const entityKey = block.getEntityAt(0);
|
|
50
|
+
const entity = contentState.getEntity(entityKey);
|
|
51
|
+
const {
|
|
52
|
+
id,
|
|
53
|
+
name,
|
|
54
|
+
imageFile,
|
|
55
|
+
resized,
|
|
56
|
+
resizedWebp,
|
|
57
|
+
desc,
|
|
58
|
+
url,
|
|
59
|
+
alignment
|
|
60
|
+
} = entity.getData();
|
|
61
|
+
const imageWithMeta = {
|
|
62
|
+
image: {
|
|
63
|
+
id,
|
|
64
|
+
name,
|
|
65
|
+
imageFile,
|
|
66
|
+
resized,
|
|
67
|
+
resizedWebp
|
|
68
|
+
},
|
|
69
|
+
desc,
|
|
70
|
+
url
|
|
71
|
+
};
|
|
72
|
+
|
|
73
|
+
const onImageSelectorChange = (params, align) => {
|
|
74
|
+
if (params.length === 0) {
|
|
75
|
+
onEditFinish({});
|
|
76
|
+
} else {
|
|
77
|
+
const imageEntity = params[0];
|
|
78
|
+
onEditFinish({
|
|
79
|
+
entityKey,
|
|
80
|
+
entityData: { ...imageEntity.image,
|
|
81
|
+
desc: imageEntity.desc,
|
|
82
|
+
url: imageEntity.url,
|
|
83
|
+
alignment: align
|
|
84
|
+
}
|
|
85
|
+
});
|
|
86
|
+
}
|
|
87
|
+
|
|
88
|
+
setToShowImageSelector(false);
|
|
89
|
+
};
|
|
90
|
+
|
|
91
|
+
return /*#__PURE__*/_react.default.createElement(_react.default.Fragment, null, toShowImageSelector && /*#__PURE__*/_react.default.createElement(_imageSelector.ImageSelector, {
|
|
92
|
+
onChange: onImageSelectorChange,
|
|
93
|
+
enableCaption: true,
|
|
94
|
+
enableUrl: true,
|
|
95
|
+
enableAlignment: true,
|
|
96
|
+
initialAlign: alignment,
|
|
97
|
+
initialSelected: [imageWithMeta]
|
|
98
|
+
}), /*#__PURE__*/_react.default.createElement(ImageBlockWrapper, null, /*#__PURE__*/_react.default.createElement(ImageBlock, props)), /*#__PURE__*/_react.default.createElement(ImageEditButton, {
|
|
99
|
+
onClick: () => {
|
|
100
|
+
// call `onEditStart` prop as we are trying to update the BGImage entity
|
|
101
|
+
onEditStart(); // open `BGImageInput`
|
|
102
|
+
|
|
103
|
+
setToShowImageSelector(true);
|
|
104
|
+
}
|
|
105
|
+
}, /*#__PURE__*/_react.default.createElement("i", {
|
|
106
|
+
className: "fa-solid fa-pen"
|
|
107
|
+
}), /*#__PURE__*/_react.default.createElement("span", null, "Modify")));
|
|
108
|
+
}
|
|
@@ -21,17 +21,19 @@ var _embeddedCodeBlock = require("./block-renderer/embedded-code-block");
|
|
|
21
21
|
|
|
22
22
|
var _slideshowBlock = require("./block-renderer/slideshow-block");
|
|
23
23
|
|
|
24
|
+
var _imageBlock = require("./block-renderer/image-block");
|
|
25
|
+
|
|
24
26
|
var _mirrormedia = _interopRequireDefault(require("@mirrormedia/lilith-draft-renderer/lib/website/mirrormedia"));
|
|
25
27
|
|
|
26
28
|
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
|
27
29
|
|
|
28
30
|
const {
|
|
29
31
|
MediaBlock,
|
|
30
|
-
ImageBlock,
|
|
31
32
|
DividerBlock,
|
|
32
33
|
RelatedPostBlock,
|
|
33
34
|
VideoBlock,
|
|
34
|
-
AudioBlock
|
|
35
|
+
AudioBlock,
|
|
36
|
+
YoutubeBlock
|
|
35
37
|
} = _mirrormedia.default.blockRenderers;
|
|
36
38
|
|
|
37
39
|
const AtomicBlock = props => {
|
|
@@ -48,7 +50,7 @@ const AtomicBlock = props => {
|
|
|
48
50
|
|
|
49
51
|
case 'image':
|
|
50
52
|
{
|
|
51
|
-
return
|
|
53
|
+
return (0, _imageBlock.ImageEditorBlock)(props);
|
|
52
54
|
}
|
|
53
55
|
|
|
54
56
|
case 'slideshow':
|
|
@@ -115,6 +117,11 @@ const AtomicBlock = props => {
|
|
|
115
117
|
{
|
|
116
118
|
return AudioBlock(entity);
|
|
117
119
|
}
|
|
120
|
+
|
|
121
|
+
case 'YOUTUBE':
|
|
122
|
+
{
|
|
123
|
+
return YoutubeBlock(entity);
|
|
124
|
+
}
|
|
118
125
|
}
|
|
119
126
|
|
|
120
127
|
return null;
|
|
@@ -9,6 +9,8 @@ var _react = _interopRequireDefault(require("react"));
|
|
|
9
9
|
|
|
10
10
|
var _styledComponents = _interopRequireWildcard(require("styled-components"));
|
|
11
11
|
|
|
12
|
+
var _theme = _interopRequireDefault(require("./theme"));
|
|
13
|
+
|
|
12
14
|
var _draftJs = require("draft-js");
|
|
13
15
|
|
|
14
16
|
var _blockRendererFn = require("./block-renderer-fn");
|
|
@@ -53,6 +55,8 @@ var _video = require("../../draft-js/buttons/video");
|
|
|
53
55
|
|
|
54
56
|
var _audio = require("../../draft-js/buttons/audio");
|
|
55
57
|
|
|
58
|
+
var _youtube = require("../../draft-js/buttons/youtube");
|
|
59
|
+
|
|
56
60
|
var _const = require("../../draft-js/const");
|
|
57
61
|
|
|
58
62
|
var _imageSelector = require("./selector/image-selector");
|
|
@@ -103,10 +107,11 @@ const buttonNames = {
|
|
|
103
107
|
relatedPost: 'related-post',
|
|
104
108
|
sideIndex: 'side-index',
|
|
105
109
|
video: 'video',
|
|
106
|
-
audio: 'audio'
|
|
110
|
+
audio: 'audio',
|
|
111
|
+
youtube: 'youtube'
|
|
107
112
|
};
|
|
108
113
|
exports.buttonNames = buttonNames;
|
|
109
|
-
const disabledButtonsOnBasicEditor = [buttonNames.annotation, buttonNames.divider, buttonNames.embed, buttonNames.image, buttonNames.infoBox, buttonNames.slideshow, buttonNames.table, buttonNames.textAlign, buttonNames.colorBox, buttonNames.backgroundColor, buttonNames.backgroundImage, buttonNames.backgroundVideo, buttonNames.relatedPost, buttonNames.sideIndex, buttonNames.video, buttonNames.audio];
|
|
114
|
+
const disabledButtonsOnBasicEditor = [buttonNames.annotation, buttonNames.divider, buttonNames.embed, buttonNames.image, buttonNames.infoBox, buttonNames.slideshow, buttonNames.table, buttonNames.textAlign, buttonNames.colorBox, buttonNames.backgroundColor, buttonNames.backgroundImage, buttonNames.backgroundVideo, buttonNames.relatedPost, buttonNames.sideIndex, buttonNames.video, buttonNames.audio, buttonNames.youtube];
|
|
110
115
|
const buttonStyle = (0, _styledComponents.css)`
|
|
111
116
|
border-radius: 6px;
|
|
112
117
|
text-align: center;
|
|
@@ -248,6 +253,7 @@ const CustomAlignCenterButton = createButtonWithoutProps(_textAlign.AlignCenterB
|
|
|
248
253
|
const CustomAlignLeftButton = createButtonWithoutProps(_textAlign.AlignLeftButton, true);
|
|
249
254
|
const CustomVideoButton = createButtonWithoutProps(_video.VideoButton);
|
|
250
255
|
const CustomAudioButton = createButtonWithoutProps(_audio.AudioButton);
|
|
256
|
+
const CustomYoutubeButton = createButtonWithoutProps(_youtube.YoutubeButton);
|
|
251
257
|
const DraftEditorWrapper = _styledComponents.default.div`
|
|
252
258
|
/* Rich-editor default setting (.RichEditor-root)*/
|
|
253
259
|
background: #fff;
|
|
@@ -265,11 +271,16 @@ const DraftEditorWrapper = _styledComponents.default.div`
|
|
|
265
271
|
background: rgb(255, 255, 255);
|
|
266
272
|
border-radius: 6px;
|
|
267
273
|
padding: 0 1rem 1rem;
|
|
268
|
-
|
|
274
|
+
font-size: 18px;
|
|
275
|
+
line-height: 2;
|
|
269
276
|
/* Draft built-in buttons' style */
|
|
270
277
|
.public-DraftStyleDefault-header-two {
|
|
278
|
+
font-size: 36px;
|
|
279
|
+
line-height: 1.5;
|
|
271
280
|
}
|
|
272
281
|
.public-DraftStyleDefault-header-three {
|
|
282
|
+
font-size: 30px;
|
|
283
|
+
line-height: 1.5;
|
|
273
284
|
}
|
|
274
285
|
.public-DraftStyleDefault-header-four {
|
|
275
286
|
}
|
|
@@ -632,7 +643,9 @@ class RichTextEditor extends _react.default.Component {
|
|
|
632
643
|
}));
|
|
633
644
|
};
|
|
634
645
|
|
|
635
|
-
return /*#__PURE__*/_react.default.createElement(
|
|
646
|
+
return /*#__PURE__*/_react.default.createElement(_styledComponents.ThemeProvider, {
|
|
647
|
+
theme: _theme.default
|
|
648
|
+
}, /*#__PURE__*/_react.default.createElement(DraftEditorContainer, {
|
|
636
649
|
isEnlarged: isEnlarged
|
|
637
650
|
}, /*#__PURE__*/_react.default.createElement(DraftEditorWrapper, null, /*#__PURE__*/_react.default.createElement("link", {
|
|
638
651
|
href: "https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.0.0/css/all.min.css",
|
|
@@ -699,6 +712,11 @@ class RichTextEditor extends _react.default.Component {
|
|
|
699
712
|
onChange: this.onChange,
|
|
700
713
|
readOnly: this.state.readOnly,
|
|
701
714
|
VideoSelector: _videoSelector.VideoSelector
|
|
715
|
+
})), /*#__PURE__*/_react.default.createElement(ButtonGroup, null, /*#__PURE__*/_react.default.createElement(CustomYoutubeButton, {
|
|
716
|
+
isDisabled: disabledButtons.includes(buttonNames.youtube),
|
|
717
|
+
editorState: editorState,
|
|
718
|
+
onChange: this.onChange,
|
|
719
|
+
readOnly: this.state.readOnly
|
|
702
720
|
})), /*#__PURE__*/_react.default.createElement(ButtonGroup, null, /*#__PURE__*/_react.default.createElement(CustomAudioButton, {
|
|
703
721
|
isDisabled: disabledButtons.includes(buttonNames.audio),
|
|
704
722
|
editorState: editorState,
|
|
@@ -801,7 +819,7 @@ class RichTextEditor extends _react.default.Component {
|
|
|
801
819
|
ref: "editor",
|
|
802
820
|
spellCheck: true,
|
|
803
821
|
readOnly: readOnly
|
|
804
|
-
}))));
|
|
822
|
+
})))));
|
|
805
823
|
}
|
|
806
824
|
|
|
807
825
|
}
|
|
@@ -11,10 +11,17 @@ var _mirrormedia = _interopRequireDefault(require("@mirrormedia/lilith-draft-ren
|
|
|
11
11
|
|
|
12
12
|
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
|
13
13
|
|
|
14
|
+
//Because `annotationDecorator` and `linkDecorator` is generated by different `contentLayout`,
|
|
15
|
+
//so it is needed to generate decorators by using function `decoratorsGenerator`.
|
|
14
16
|
const {
|
|
15
17
|
annotationDecorator,
|
|
16
18
|
linkDecorator
|
|
17
19
|
} = _mirrormedia.default.entityDecorators;
|
|
18
|
-
|
|
20
|
+
|
|
21
|
+
const decoratorsGenerator = (contentLayout = 'normal') => {
|
|
22
|
+
return new _draftJs.CompositeDecorator([annotationDecorator(contentLayout), linkDecorator(contentLayout)]);
|
|
23
|
+
};
|
|
24
|
+
|
|
25
|
+
const decorators = decoratorsGenerator('normal');
|
|
19
26
|
var _default = decorators;
|
|
20
27
|
exports.default = _default;
|
|
@@ -94,7 +94,6 @@ function AudioGrid(props) {
|
|
|
94
94
|
onSelect,
|
|
95
95
|
isSelected
|
|
96
96
|
} = props;
|
|
97
|
-
console.log('audio', audio);
|
|
98
97
|
return /*#__PURE__*/_react.default.createElement(AudioGridWrapper, {
|
|
99
98
|
key: audio === null || audio === void 0 ? void 0 : audio.id,
|
|
100
99
|
onClick: () => onSelect(audio)
|
|
@@ -50,6 +50,14 @@ const imagesQuery = (0, _apollo.gql)`
|
|
|
50
50
|
w1600
|
|
51
51
|
w2400
|
|
52
52
|
}
|
|
53
|
+
resizedWebp {
|
|
54
|
+
original
|
|
55
|
+
w480
|
|
56
|
+
w800
|
|
57
|
+
w1200
|
|
58
|
+
w1600
|
|
59
|
+
w2400
|
|
60
|
+
}
|
|
53
61
|
}
|
|
54
62
|
}
|
|
55
63
|
`;
|
|
@@ -242,6 +250,16 @@ function DelayInput(props) {
|
|
|
242
250
|
}
|
|
243
251
|
|
|
244
252
|
function ImageSelector(props) {
|
|
253
|
+
const {
|
|
254
|
+
enableMultiSelect = false,
|
|
255
|
+
enableCaption = false,
|
|
256
|
+
enableUrl = false,
|
|
257
|
+
enableAlignment = false,
|
|
258
|
+
enableDelay = false,
|
|
259
|
+
onChange,
|
|
260
|
+
initialSelected = [],
|
|
261
|
+
initialAlign
|
|
262
|
+
} = props;
|
|
245
263
|
const [queryImages, {
|
|
246
264
|
loading,
|
|
247
265
|
error,
|
|
@@ -255,9 +273,9 @@ function ImageSelector(props) {
|
|
|
255
273
|
const [currentPage, setCurrentPage] = (0, _react.useState)(0); // page starts with 1, 0 is used to detect initialization
|
|
256
274
|
|
|
257
275
|
const [searchText, setSearchText] = (0, _react.useState)('');
|
|
258
|
-
const [selected, setSelected] = (0, _react.useState)(
|
|
276
|
+
const [selected, setSelected] = (0, _react.useState)(initialSelected);
|
|
259
277
|
const [delay, setDelay] = (0, _react.useState)('5');
|
|
260
|
-
const [align, setAlign] = (0, _react.useState)(
|
|
278
|
+
const [align, setAlign] = (0, _react.useState)(initialAlign);
|
|
261
279
|
const contentWrapperRef = (0, _react.useRef)();
|
|
262
280
|
const pageSize = 6;
|
|
263
281
|
const options = [{
|
|
@@ -273,14 +291,6 @@ function ImageSelector(props) {
|
|
|
273
291
|
label: 'right',
|
|
274
292
|
isDisabled: false
|
|
275
293
|
}];
|
|
276
|
-
const {
|
|
277
|
-
enableMultiSelect = false,
|
|
278
|
-
enableCaption = false,
|
|
279
|
-
enableUrl = false,
|
|
280
|
-
enableAlignment = false,
|
|
281
|
-
enableDelay = false,
|
|
282
|
-
onChange
|
|
283
|
-
} = props;
|
|
284
294
|
|
|
285
295
|
const onSave = () => {
|
|
286
296
|
let adjustedDelay = +delay;
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.theme = exports.mediaSize = exports.default = void 0;
|
|
7
|
+
const mediaSize = {
|
|
8
|
+
xs: 0,
|
|
9
|
+
sm: 576,
|
|
10
|
+
md: 768,
|
|
11
|
+
lg: 960,
|
|
12
|
+
xl: 1200,
|
|
13
|
+
xxl: 1400
|
|
14
|
+
};
|
|
15
|
+
exports.mediaSize = mediaSize;
|
|
16
|
+
const theme = {
|
|
17
|
+
breakpoint: {
|
|
18
|
+
xs: `@media (min-width: ${mediaSize.xs}px)`,
|
|
19
|
+
sm: `@media (min-width: ${mediaSize.sm}px)`,
|
|
20
|
+
md: `@media (min-width: ${mediaSize.md}px)`,
|
|
21
|
+
lg: `@media (min-width: ${mediaSize.lg}px)`,
|
|
22
|
+
xl: `@media (min-width: ${mediaSize.xl}px)`,
|
|
23
|
+
xxl: `@media (min-width: ${mediaSize.xxl}px)`
|
|
24
|
+
}
|
|
25
|
+
};
|
|
26
|
+
exports.theme = theme;
|
|
27
|
+
var _default = theme;
|
|
28
|
+
exports.default = _default;
|
|
@@ -3,6 +3,7 @@
|
|
|
3
3
|
Object.defineProperty(exports, "__esModule", {
|
|
4
4
|
value: true
|
|
5
5
|
});
|
|
6
|
+
exports.BGImageBlock = BGImageBlock;
|
|
6
7
|
exports.BGImageEditorBlock = BGImageEditorBlock;
|
|
7
8
|
|
|
8
9
|
var _react = _interopRequireWildcard(require("react"));
|
|
@@ -13,17 +14,64 @@ var _draftConverter = _interopRequireDefault(require("../../../draft-js/draft-co
|
|
|
13
14
|
|
|
14
15
|
var _backgroundImage = require("../../../draft-js/buttons/background-image");
|
|
15
16
|
|
|
16
|
-
var _readr = _interopRequireDefault(require("@mirrormedia/lilith-draft-renderer/lib/website/readr"));
|
|
17
|
-
|
|
18
17
|
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
|
19
18
|
|
|
20
19
|
function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function (nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); }
|
|
21
20
|
|
|
22
21
|
function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || typeof obj !== "object" && typeof obj !== "function") { return { default: obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj.default = obj; if (cache) { cache.set(obj, newObj); } return newObj; }
|
|
23
22
|
|
|
24
|
-
const
|
|
25
|
-
|
|
26
|
-
|
|
23
|
+
const BGImageRenderWrapper = _styledComponents.default.div`
|
|
24
|
+
padding: 30px;
|
|
25
|
+
position: relative;
|
|
26
|
+
width: 100%;
|
|
27
|
+
height: 100%;
|
|
28
|
+
background-image: url(${({
|
|
29
|
+
image
|
|
30
|
+
}) => image});
|
|
31
|
+
background-size: cover;
|
|
32
|
+
background-position: center center;
|
|
33
|
+
${({
|
|
34
|
+
textBlockAlign
|
|
35
|
+
}) => {
|
|
36
|
+
if (textBlockAlign === 'left') {
|
|
37
|
+
return `padding-right: 50%;`;
|
|
38
|
+
} else if (textBlockAlign === 'right') {
|
|
39
|
+
return `padding-left: 50%;`;
|
|
40
|
+
} else if (textBlockAlign === 'bottom') {
|
|
41
|
+
return `padding-top: 50%;`;
|
|
42
|
+
}
|
|
43
|
+
}}
|
|
44
|
+
`;
|
|
45
|
+
const BGImageRenderBody = _styledComponents.default.div`
|
|
46
|
+
background: rgba(0, 0, 0, 0.5);
|
|
47
|
+
padding: 4px 20px;
|
|
48
|
+
margin-bottom: 10px;
|
|
49
|
+
`;
|
|
50
|
+
|
|
51
|
+
function BGImageBlock(props) {
|
|
52
|
+
var _image$imageFile, _image$resized, _image$resized2;
|
|
53
|
+
|
|
54
|
+
const {
|
|
55
|
+
block,
|
|
56
|
+
contentState
|
|
57
|
+
} = props;
|
|
58
|
+
const entityKey = block.getEntityAt(0);
|
|
59
|
+
const entity = contentState.getEntity(entityKey);
|
|
60
|
+
const {
|
|
61
|
+
textBlockAlign,
|
|
62
|
+
image,
|
|
63
|
+
body
|
|
64
|
+
} = entity.getData();
|
|
65
|
+
return /*#__PURE__*/_react.default.createElement(_react.default.Fragment, null, /*#__PURE__*/_react.default.createElement(BGImageRenderWrapper, {
|
|
66
|
+
image: (image === null || image === void 0 ? void 0 : (_image$imageFile = image.imageFile) === null || _image$imageFile === void 0 ? void 0 : _image$imageFile.url) || (image === null || image === void 0 ? void 0 : (_image$resized = image.resized) === null || _image$resized === void 0 ? void 0 : _image$resized.w800) || (image === null || image === void 0 ? void 0 : (_image$resized2 = image.resized) === null || _image$resized2 === void 0 ? void 0 : _image$resized2.original),
|
|
67
|
+
textBlockAlign: textBlockAlign
|
|
68
|
+
}, /*#__PURE__*/_react.default.createElement(BGImageRenderBody, {
|
|
69
|
+
dangerouslySetInnerHTML: {
|
|
70
|
+
__html: body
|
|
71
|
+
}
|
|
72
|
+
})));
|
|
73
|
+
}
|
|
74
|
+
|
|
27
75
|
const BGImageRenderButton = _styledComponents.default.span`
|
|
28
76
|
cursor: pointer;
|
|
29
77
|
background-color: white;
|
|
@@ -3,6 +3,7 @@
|
|
|
3
3
|
Object.defineProperty(exports, "__esModule", {
|
|
4
4
|
value: true
|
|
5
5
|
});
|
|
6
|
+
exports.BGVideoBlock = BGVideoBlock;
|
|
6
7
|
exports.BGVideoEditorBlock = BGVideoEditorBlock;
|
|
7
8
|
|
|
8
9
|
var _react = _interopRequireWildcard(require("react"));
|
|
@@ -13,17 +14,74 @@ var _draftConverter = _interopRequireDefault(require("../../../draft-js/draft-co
|
|
|
13
14
|
|
|
14
15
|
var _backgroundVideo = require("../../../draft-js/buttons/background-video");
|
|
15
16
|
|
|
16
|
-
var _readr = _interopRequireDefault(require("@mirrormedia/lilith-draft-renderer/lib/website/readr"));
|
|
17
|
-
|
|
18
17
|
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
|
19
18
|
|
|
20
19
|
function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function (nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); }
|
|
21
20
|
|
|
22
21
|
function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || typeof obj !== "object" && typeof obj !== "function") { return { default: obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj.default = obj; if (cache) { cache.set(obj, newObj); } return newObj; }
|
|
23
22
|
|
|
24
|
-
const
|
|
25
|
-
|
|
26
|
-
|
|
23
|
+
const BGVideoRenderWrapper = _styledComponents.default.div`
|
|
24
|
+
position: relative;
|
|
25
|
+
padding: 30px;
|
|
26
|
+
width: 100%;
|
|
27
|
+
${({
|
|
28
|
+
textBlockAlign
|
|
29
|
+
}) => {
|
|
30
|
+
if (textBlockAlign === 'left') {
|
|
31
|
+
return `padding-right: 50%;`;
|
|
32
|
+
} else if (textBlockAlign === 'right') {
|
|
33
|
+
return `padding-left: 50%;`;
|
|
34
|
+
} else if (textBlockAlign === 'bottom') {
|
|
35
|
+
return `padding-top: 50%;`;
|
|
36
|
+
}
|
|
37
|
+
}}
|
|
38
|
+
`;
|
|
39
|
+
const BGVideoRednerVideo = _styledComponents.default.video`
|
|
40
|
+
position: absolute;
|
|
41
|
+
width: 100%;
|
|
42
|
+
height: 100%;
|
|
43
|
+
top: 0;
|
|
44
|
+
left: 0;
|
|
45
|
+
z-index: -1;
|
|
46
|
+
background-color: black;
|
|
47
|
+
`;
|
|
48
|
+
const BGVideoRenderBody = _styledComponents.default.div`
|
|
49
|
+
background: rgba(0, 0, 0, 0.5);
|
|
50
|
+
padding: 4px 20px;
|
|
51
|
+
margin-bottom: 10px;
|
|
52
|
+
`;
|
|
53
|
+
|
|
54
|
+
function BGVideoBlock(props) {
|
|
55
|
+
var _video$file;
|
|
56
|
+
|
|
57
|
+
const {
|
|
58
|
+
block,
|
|
59
|
+
contentState
|
|
60
|
+
} = props;
|
|
61
|
+
const entityKey = block.getEntityAt(0);
|
|
62
|
+
const entity = contentState.getEntity(entityKey);
|
|
63
|
+
const {
|
|
64
|
+
textBlockAlign,
|
|
65
|
+
video,
|
|
66
|
+
body
|
|
67
|
+
} = entity.getData();
|
|
68
|
+
return /*#__PURE__*/_react.default.createElement(_react.default.Fragment, null, /*#__PURE__*/_react.default.createElement(BGVideoRenderWrapper, {
|
|
69
|
+
textBlockAlign: textBlockAlign
|
|
70
|
+
}, /*#__PURE__*/_react.default.createElement(BGVideoRednerVideo, {
|
|
71
|
+
muted: true,
|
|
72
|
+
autoPlay: true,
|
|
73
|
+
loop: true
|
|
74
|
+
}, /*#__PURE__*/_react.default.createElement("source", {
|
|
75
|
+
src: video === null || video === void 0 ? void 0 : video.url
|
|
76
|
+
}), /*#__PURE__*/_react.default.createElement("source", {
|
|
77
|
+
src: video === null || video === void 0 ? void 0 : (_video$file = video.file) === null || _video$file === void 0 ? void 0 : _video$file.url
|
|
78
|
+
})), /*#__PURE__*/_react.default.createElement(BGVideoRenderBody, {
|
|
79
|
+
dangerouslySetInnerHTML: {
|
|
80
|
+
__html: body
|
|
81
|
+
}
|
|
82
|
+
})));
|
|
83
|
+
}
|
|
84
|
+
|
|
27
85
|
const BGVideoRenderButton = _styledComponents.default.span`
|
|
28
86
|
cursor: pointer;
|
|
29
87
|
background-color: white;
|
|
@@ -0,0 +1,106 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.ImageEditorBlock = ImageEditorBlock;
|
|
7
|
+
|
|
8
|
+
var _react = _interopRequireWildcard(require("react"));
|
|
9
|
+
|
|
10
|
+
var _styledComponents = _interopRequireDefault(require("styled-components"));
|
|
11
|
+
|
|
12
|
+
var _readr = _interopRequireDefault(require("@mirrormedia/lilith-draft-renderer/lib/website/readr"));
|
|
13
|
+
|
|
14
|
+
var _imageSelector = require("../selector/image-selector");
|
|
15
|
+
|
|
16
|
+
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
|
17
|
+
|
|
18
|
+
function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function (nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); }
|
|
19
|
+
|
|
20
|
+
function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || typeof obj !== "object" && typeof obj !== "function") { return { default: obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj.default = obj; if (cache) { cache.set(obj, newObj); } return newObj; }
|
|
21
|
+
|
|
22
|
+
const {
|
|
23
|
+
ImageBlock
|
|
24
|
+
} = _readr.default.blockRenderers;
|
|
25
|
+
const ImageBlockWrapper = _styledComponents.default.div`
|
|
26
|
+
img {
|
|
27
|
+
min-width: 300px;
|
|
28
|
+
max-width: 600px;
|
|
29
|
+
}
|
|
30
|
+
`;
|
|
31
|
+
const ImageEditButton = _styledComponents.default.span`
|
|
32
|
+
cursor: pointer;
|
|
33
|
+
background-color: white;
|
|
34
|
+
padding: 6px;
|
|
35
|
+
border-radius: 6px;
|
|
36
|
+
`;
|
|
37
|
+
|
|
38
|
+
function ImageEditorBlock(props) {
|
|
39
|
+
const [toShowImageSelector, setToShowImageSelector] = (0, _react.useState)(false);
|
|
40
|
+
const {
|
|
41
|
+
block,
|
|
42
|
+
blockProps,
|
|
43
|
+
contentState
|
|
44
|
+
} = props;
|
|
45
|
+
const {
|
|
46
|
+
onEditStart,
|
|
47
|
+
onEditFinish
|
|
48
|
+
} = blockProps;
|
|
49
|
+
const entityKey = block.getEntityAt(0);
|
|
50
|
+
const entity = contentState.getEntity(entityKey);
|
|
51
|
+
const {
|
|
52
|
+
id,
|
|
53
|
+
name,
|
|
54
|
+
imageFile,
|
|
55
|
+
resized,
|
|
56
|
+
desc,
|
|
57
|
+
url,
|
|
58
|
+
alignment
|
|
59
|
+
} = entity.getData();
|
|
60
|
+
const imageWithMeta = {
|
|
61
|
+
image: {
|
|
62
|
+
id,
|
|
63
|
+
name,
|
|
64
|
+
imageFile,
|
|
65
|
+
resized
|
|
66
|
+
},
|
|
67
|
+
desc,
|
|
68
|
+
url
|
|
69
|
+
};
|
|
70
|
+
|
|
71
|
+
const onImageSelectorChange = (params, align) => {
|
|
72
|
+
if (params.length === 0) {
|
|
73
|
+
onEditFinish({});
|
|
74
|
+
} else {
|
|
75
|
+
const imageEntity = params[0];
|
|
76
|
+
onEditFinish({
|
|
77
|
+
entityKey,
|
|
78
|
+
entityData: { ...imageEntity.image,
|
|
79
|
+
desc: imageEntity.desc,
|
|
80
|
+
url: imageEntity.url,
|
|
81
|
+
alignment: align
|
|
82
|
+
}
|
|
83
|
+
});
|
|
84
|
+
}
|
|
85
|
+
|
|
86
|
+
setToShowImageSelector(false);
|
|
87
|
+
};
|
|
88
|
+
|
|
89
|
+
return /*#__PURE__*/_react.default.createElement(_react.default.Fragment, null, toShowImageSelector && /*#__PURE__*/_react.default.createElement(_imageSelector.ImageSelector, {
|
|
90
|
+
onChange: onImageSelectorChange,
|
|
91
|
+
enableCaption: true,
|
|
92
|
+
enableUrl: true,
|
|
93
|
+
enableAlignment: true,
|
|
94
|
+
initialAlign: alignment,
|
|
95
|
+
initialSelected: [imageWithMeta]
|
|
96
|
+
}), /*#__PURE__*/_react.default.createElement(ImageBlockWrapper, null, /*#__PURE__*/_react.default.createElement(ImageBlock, props)), /*#__PURE__*/_react.default.createElement(ImageEditButton, {
|
|
97
|
+
onClick: () => {
|
|
98
|
+
// call `onEditStart` prop as we are trying to update the BGImage entity
|
|
99
|
+
onEditStart(); // open `BGImageInput`
|
|
100
|
+
|
|
101
|
+
setToShowImageSelector(true);
|
|
102
|
+
}
|
|
103
|
+
}, /*#__PURE__*/_react.default.createElement("i", {
|
|
104
|
+
className: "fa-solid fa-pen"
|
|
105
|
+
}), /*#__PURE__*/_react.default.createElement("span", null, "Modify")));
|
|
106
|
+
}
|
|
@@ -17,6 +17,8 @@ var _backgroundVideoBlock = require("./block-renderer/background-video-block");
|
|
|
17
17
|
|
|
18
18
|
var _sideIndexBlock = require("./block-renderer/side-index-block");
|
|
19
19
|
|
|
20
|
+
var _imageBlock = require("./block-renderer/image-block");
|
|
21
|
+
|
|
20
22
|
var _readr = _interopRequireDefault(require("@mirrormedia/lilith-draft-renderer/lib/website/readr"));
|
|
21
23
|
|
|
22
24
|
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
|
@@ -24,7 +26,6 @@ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { de
|
|
|
24
26
|
const {
|
|
25
27
|
EmbeddedCodeBlock,
|
|
26
28
|
MediaBlock,
|
|
27
|
-
ImageBlock,
|
|
28
29
|
SlideshowBlock,
|
|
29
30
|
SlideshowBlockV2,
|
|
30
31
|
DividerBlock,
|
|
@@ -47,7 +48,7 @@ const AtomicBlock = props => {
|
|
|
47
48
|
|
|
48
49
|
case 'image':
|
|
49
50
|
{
|
|
50
|
-
return
|
|
51
|
+
return (0, _imageBlock.ImageEditorBlock)(props);
|
|
51
52
|
}
|
|
52
53
|
|
|
53
54
|
case 'slideshow':
|
|
@@ -109,6 +110,11 @@ const AtomicBlock = props => {
|
|
|
109
110
|
{
|
|
110
111
|
return VideoBlock(entity);
|
|
111
112
|
}
|
|
113
|
+
|
|
114
|
+
case 'AUDIO':
|
|
115
|
+
{
|
|
116
|
+
return AudioBlock(entity);
|
|
117
|
+
}
|
|
112
118
|
}
|
|
113
119
|
|
|
114
120
|
return null;
|
|
@@ -9,6 +9,8 @@ var _react = _interopRequireDefault(require("react"));
|
|
|
9
9
|
|
|
10
10
|
var _styledComponents = _interopRequireWildcard(require("styled-components"));
|
|
11
11
|
|
|
12
|
+
var _theme = _interopRequireDefault(require("./theme"));
|
|
13
|
+
|
|
12
14
|
var _draftJs = require("draft-js");
|
|
13
15
|
|
|
14
16
|
var _blockRendererFn = require("./block-renderer-fn");
|
|
@@ -632,7 +634,9 @@ class RichTextEditor extends _react.default.Component {
|
|
|
632
634
|
}));
|
|
633
635
|
};
|
|
634
636
|
|
|
635
|
-
return /*#__PURE__*/_react.default.createElement(
|
|
637
|
+
return /*#__PURE__*/_react.default.createElement(_styledComponents.ThemeProvider, {
|
|
638
|
+
theme: _theme.default
|
|
639
|
+
}, /*#__PURE__*/_react.default.createElement(DraftEditorContainer, {
|
|
636
640
|
isEnlarged: isEnlarged
|
|
637
641
|
}, /*#__PURE__*/_react.default.createElement(DraftEditorWrapper, null, /*#__PURE__*/_react.default.createElement("link", {
|
|
638
642
|
href: "https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.0.0/css/all.min.css",
|
|
@@ -801,7 +805,7 @@ class RichTextEditor extends _react.default.Component {
|
|
|
801
805
|
ref: "editor",
|
|
802
806
|
spellCheck: true,
|
|
803
807
|
readOnly: readOnly
|
|
804
|
-
}))));
|
|
808
|
+
})))));
|
|
805
809
|
}
|
|
806
810
|
|
|
807
811
|
}
|
|
@@ -94,7 +94,6 @@ function AudioGrid(props) {
|
|
|
94
94
|
onSelect,
|
|
95
95
|
isSelected
|
|
96
96
|
} = props;
|
|
97
|
-
console.log('audio', audio);
|
|
98
97
|
return /*#__PURE__*/_react.default.createElement(AudioGridWrapper, {
|
|
99
98
|
key: audio === null || audio === void 0 ? void 0 : audio.id,
|
|
100
99
|
onClick: () => onSelect(audio)
|
|
@@ -155,18 +154,6 @@ const AudiosQuery = (0, _apollo.gql)`
|
|
|
155
154
|
file {
|
|
156
155
|
url
|
|
157
156
|
}
|
|
158
|
-
heroImage {
|
|
159
|
-
imageFile {
|
|
160
|
-
url
|
|
161
|
-
}
|
|
162
|
-
resized {
|
|
163
|
-
w480
|
|
164
|
-
w800
|
|
165
|
-
w1200
|
|
166
|
-
w1600
|
|
167
|
-
w2400
|
|
168
|
-
}
|
|
169
|
-
}
|
|
170
157
|
}
|
|
171
158
|
}
|
|
172
159
|
`;
|
|
@@ -242,6 +242,16 @@ function DelayInput(props) {
|
|
|
242
242
|
}
|
|
243
243
|
|
|
244
244
|
function ImageSelector(props) {
|
|
245
|
+
const {
|
|
246
|
+
enableMultiSelect = false,
|
|
247
|
+
enableCaption = false,
|
|
248
|
+
enableUrl = false,
|
|
249
|
+
enableAlignment = false,
|
|
250
|
+
enableDelay = false,
|
|
251
|
+
onChange,
|
|
252
|
+
initialSelected = [],
|
|
253
|
+
initialAlign
|
|
254
|
+
} = props;
|
|
245
255
|
const [queryImages, {
|
|
246
256
|
loading,
|
|
247
257
|
error,
|
|
@@ -255,9 +265,9 @@ function ImageSelector(props) {
|
|
|
255
265
|
const [currentPage, setCurrentPage] = (0, _react.useState)(0); // page starts with 1, 0 is used to detect initialization
|
|
256
266
|
|
|
257
267
|
const [searchText, setSearchText] = (0, _react.useState)('');
|
|
258
|
-
const [selected, setSelected] = (0, _react.useState)(
|
|
268
|
+
const [selected, setSelected] = (0, _react.useState)(initialSelected);
|
|
259
269
|
const [delay, setDelay] = (0, _react.useState)('5');
|
|
260
|
-
const [align, setAlign] = (0, _react.useState)(
|
|
270
|
+
const [align, setAlign] = (0, _react.useState)(initialAlign);
|
|
261
271
|
const contentWrapperRef = (0, _react.useRef)();
|
|
262
272
|
const pageSize = 6;
|
|
263
273
|
const options = [{
|
|
@@ -273,14 +283,6 @@ function ImageSelector(props) {
|
|
|
273
283
|
label: 'right',
|
|
274
284
|
isDisabled: false
|
|
275
285
|
}];
|
|
276
|
-
const {
|
|
277
|
-
enableMultiSelect = false,
|
|
278
|
-
enableCaption = false,
|
|
279
|
-
enableUrl = false,
|
|
280
|
-
enableAlignment = false,
|
|
281
|
-
enableDelay = false,
|
|
282
|
-
onChange
|
|
283
|
-
} = props;
|
|
284
286
|
|
|
285
287
|
const onSave = () => {
|
|
286
288
|
let adjustedDelay = +delay;
|
|
@@ -206,8 +206,7 @@ function PostSelector(props) {
|
|
|
206
206
|
const {
|
|
207
207
|
onChange,
|
|
208
208
|
enableMultiSelect = false,
|
|
209
|
-
minSelectCount = 1
|
|
210
|
-
maxSelectCount = 3
|
|
209
|
+
minSelectCount = 1
|
|
211
210
|
} = props;
|
|
212
211
|
|
|
213
212
|
const onSave = () => {
|
|
@@ -242,15 +241,9 @@ function PostSelector(props) {
|
|
|
242
241
|
|
|
243
242
|
|
|
244
243
|
if (enableMultiSelect) {
|
|
245
|
-
|
|
244
|
+
return selected.concat([{
|
|
246
245
|
post: postEntity
|
|
247
246
|
}]);
|
|
248
|
-
|
|
249
|
-
if (maxSelectCount && newSelected.length >= maxSelectCount) {
|
|
250
|
-
newSelected = newSelected.slice(-maxSelectCount);
|
|
251
|
-
}
|
|
252
|
-
|
|
253
|
-
return newSelected;
|
|
254
247
|
} // single select
|
|
255
248
|
|
|
256
249
|
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.theme = exports.mediaSize = exports.default = void 0;
|
|
7
|
+
const mediaSize = {
|
|
8
|
+
xs: 0,
|
|
9
|
+
sm: 576,
|
|
10
|
+
md: 768,
|
|
11
|
+
lg: 960,
|
|
12
|
+
xl: 1200,
|
|
13
|
+
xxl: 1400
|
|
14
|
+
};
|
|
15
|
+
exports.mediaSize = mediaSize;
|
|
16
|
+
const theme = {
|
|
17
|
+
breakpoint: {
|
|
18
|
+
xs: `@media (min-width: ${mediaSize.xs}px)`,
|
|
19
|
+
sm: `@media (min-width: ${mediaSize.sm}px)`,
|
|
20
|
+
md: `@media (min-width: ${mediaSize.md}px)`,
|
|
21
|
+
lg: `@media (min-width: ${mediaSize.lg}px)`,
|
|
22
|
+
xl: `@media (min-width: ${mediaSize.xl}px)`,
|
|
23
|
+
xxl: `@media (min-width: ${mediaSize.xxl}px)`
|
|
24
|
+
},
|
|
25
|
+
fontSize: {
|
|
26
|
+
xs: 'font-size: 14px;',
|
|
27
|
+
sm: 'font-size: 16px;',
|
|
28
|
+
md: 'font-size: 18px;',
|
|
29
|
+
lg: 'font-size: 24px;',
|
|
30
|
+
xl: 'font-size: 28px;'
|
|
31
|
+
},
|
|
32
|
+
margin: {
|
|
33
|
+
default: 'margin: 32px auto;',
|
|
34
|
+
narrow: 'margin: 16px auto;'
|
|
35
|
+
}
|
|
36
|
+
};
|
|
37
|
+
exports.theme = theme;
|
|
38
|
+
var _default = theme;
|
|
39
|
+
exports.default = _default;
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@mirrormedia/lilith-draft-editor",
|
|
3
|
-
"version": "1.1.0-alpha.
|
|
3
|
+
"version": "1.1.0-alpha.21",
|
|
4
4
|
"description": "",
|
|
5
5
|
"main": "lib/index.js",
|
|
6
6
|
"scripts": {
|
|
@@ -23,16 +23,16 @@
|
|
|
23
23
|
"license": "MIT",
|
|
24
24
|
"dependencies": {
|
|
25
25
|
"draft-js": "^0.11.7",
|
|
26
|
-
"@mirrormedia/lilith-draft-renderer": "1.
|
|
26
|
+
"@mirrormedia/lilith-draft-renderer": "1.3.0-alpha.3"
|
|
27
27
|
},
|
|
28
28
|
"peerDependencies": {
|
|
29
|
-
"react": "18.
|
|
30
|
-
"react-dom": "18.
|
|
29
|
+
"react": "18.2.0",
|
|
30
|
+
"react-dom": "18.2.0",
|
|
31
31
|
"styled-components": "5.3.5",
|
|
32
|
-
"@keystone-6/core": "
|
|
33
|
-
"@keystone-ui/button": "^
|
|
34
|
-
"@keystone-ui/fields": "^
|
|
35
|
-
"@keystone-ui/modals": "^
|
|
32
|
+
"@keystone-6/core": "5.2.0",
|
|
33
|
+
"@keystone-ui/button": "^7.0.2",
|
|
34
|
+
"@keystone-ui/fields": "^7.2.0",
|
|
35
|
+
"@keystone-ui/modals": "^6.0.3"
|
|
36
36
|
},
|
|
37
37
|
"files": [
|
|
38
38
|
"lib"
|