@seafile/sdoc-editor 0.1.0 → 0.1.2
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/dist/{new-editors/editor.js → editor.js} +38 -17
- package/dist/index.js +2 -36
- package/dist/slate-extension/core/transforms/move-children.js +1 -1
- package/dist/slate-extension/plugins/blockquote/helpers.js +3 -3
- package/dist/slate-extension/plugins/index.js +3 -2
- package/dist/slate-extension/plugins/list/transforms/normalize-list-item.js +2 -2
- package/dist/slate-extension/plugins/list/transforms/toggle-list.js +6 -8
- package/dist/slate-extension/plugins/socket/index.js +6 -0
- package/dist/slate-extension/plugins/socket/plugin.js +23 -0
- package/dist/slate-extension/socket/socket-client.js +94 -0
- package/dist/slate-extension/socket/socket-manager.js +63 -0
- package/dist/slate-extension/toolbar/index.js +1 -1
- package/dist/utils/event-bus.js +39 -0
- package/package.json +5 -25
- package/dist/assets/css/comment-dialog.css +0 -50
- package/dist/assets/css/diff-viewer.css +0 -105
- package/dist/assets/css/formula.css +0 -19
- package/dist/assets/css/history-viewer.css +0 -104
- package/dist/assets/css/image.css +0 -134
- package/dist/assets/css/issue-card.css +0 -43
- package/dist/assets/css/keyboard-shortcuts.css +0 -58
- package/dist/assets/css/link.css +0 -7
- package/dist/assets/css/markdown-editor.css +0 -12
- package/dist/assets/css/markdown-viewer.css +0 -69
- package/dist/assets/css/navbar-imgbutton.css +0 -83
- package/dist/assets/css/outline.css +0 -29
- package/dist/assets/css/table.css +0 -57
- package/dist/assets/css/textlink-hovermenu.css +0 -47
- package/dist/assets/css/topbar.css +0 -350
- package/dist/assets/css/tree-view.css +0 -67
- package/dist/assets/css/user-help.css +0 -84
- package/dist/assets/editor/plain-editor.css +0 -30
- package/dist/assets/editor/seatable-editor.css +0 -77
- package/dist/assets/editor/simple-editor.css +0 -77
- package/dist/components/click-outside.js +0 -46
- package/dist/components/context-menu.js +0 -97
- package/dist/components/dialogs/add-formula-dialog.js +0 -116
- package/dist/components/dialogs/add-image-dialog.js +0 -69
- package/dist/components/dialogs/add-link-dialog.js +0 -133
- package/dist/components/dialogs/comment-dialog.js +0 -97
- package/dist/components/dialogs/shortcut-dialog.js +0 -131
- package/dist/components/error-boundary.js +0 -28
- package/dist/components/load-script/index.js +0 -69
- package/dist/components/loading.js +0 -25
- package/dist/components/markdown-lint.js +0 -72
- package/dist/components/menu/index.js +0 -4
- package/dist/components/menu/item.js +0 -49
- package/dist/components/menu/menu.js +0 -38
- package/dist/components/menu/style.css +0 -42
- package/dist/components/modal-portal.js +0 -38
- package/dist/components/outline/index.js +0 -92
- package/dist/components/outline/outline-item.js +0 -58
- package/dist/components/select/_option.js +0 -44
- package/dist/components/select/field-setting.js +0 -106
- package/dist/components/select/index.js +0 -149
- package/dist/components/select/style.css +0 -144
- package/dist/components/svg-icons/check-mark-icon.js +0 -14
- package/dist/components/svg-icons/column-icon.js +0 -17
- package/dist/components/svg-icons/text-icon.js +0 -34
- package/dist/components/text-link-hover-menu/index.js +0 -123
- package/dist/components/toast/alert.js +0 -138
- package/dist/components/toast/index.js +0 -3
- package/dist/components/toast/toast.js +0 -159
- package/dist/components/toast/toastManager.js +0 -139
- package/dist/components/toast/toaster.js +0 -65
- package/dist/components/toolbar/header-list.js +0 -114
- package/dist/components/toolbar/help-group.js +0 -33
- package/dist/components/toolbar/index.js +0 -4
- package/dist/components/toolbar/insert-image.js +0 -106
- package/dist/components/toolbar/insert-table.js +0 -136
- package/dist/components/toolbar/table-group.js +0 -74
- package/dist/components/toolbar/toolbar.js +0 -317
- package/dist/components/toolbar/widgets/button-group.js +0 -24
- package/dist/components/toolbar/widgets/button-item.js +0 -129
- package/dist/components/toolbar/widgets/drop-list.js +0 -88
- package/dist/components/user-help/index.js +0 -179
- package/dist/config-0.js +0 -15
- package/dist/config.js +0 -16
- package/dist/constants/cell-types.js +0 -29
- package/dist/constants/column.js +0 -4
- package/dist/containers/code-highlight-package.js +0 -14
- package/dist/containers/controller/block-element-controller.js +0 -375
- package/dist/containers/controller/index.js +0 -5
- package/dist/containers/controller/inline-element-controller.js +0 -134
- package/dist/containers/controller/normalize-controller.js +0 -95
- package/dist/containers/controller/shortcut-controller.js +0 -385
- package/dist/containers/controller/void-element-controller.js +0 -9
- package/dist/containers/custom/custom.js +0 -18
- package/dist/containers/custom/get-event-transfer.js +0 -33
- package/dist/containers/custom/getNodesByTypeAtRange.js +0 -57
- package/dist/containers/custom/insertNodes.js +0 -120
- package/dist/containers/custom/is-empty-paragraph.js +0 -9
- package/dist/containers/custom/set-event-transfer.js +0 -30
- package/dist/containers/custom/split-nodes-at-point.js +0 -136
- package/dist/containers/custom/unwrap-node-by-type-at-range.js +0 -70
- package/dist/containers/editor-context.js +0 -85
- package/dist/containers/editor-utils/block-element-utils/blockquote-utils.js +0 -80
- package/dist/containers/editor-utils/block-element-utils/code-utils.js +0 -145
- package/dist/containers/editor-utils/block-element-utils/formula-utils.js +0 -51
- package/dist/containers/editor-utils/block-element-utils/index.js +0 -31
- package/dist/containers/editor-utils/block-element-utils/list-utils.js +0 -395
- package/dist/containers/editor-utils/block-element-utils/table-utils.js +0 -412
- package/dist/containers/editor-utils/clear-format-utils.js +0 -84
- package/dist/containers/editor-utils/common-editor-utils.js +0 -492
- package/dist/containers/editor-utils/inline-element-utils/index.js +0 -95
- package/dist/containers/editor-utils/mark-utils.js +0 -20
- package/dist/containers/editor-utils/range-utils.js +0 -7
- package/dist/containers/editor-utils/selection-utils.js +0 -30
- package/dist/containers/editor-utils/text-utils.js +0 -117
- package/dist/containers/editor-widgets/check-list-item.js +0 -53
- package/dist/containers/editor-widgets/code-block.js +0 -128
- package/dist/containers/editor-widgets/column.js +0 -100
- package/dist/containers/editor-widgets/formula.js +0 -67
- package/dist/containers/editor-widgets/image.js +0 -237
- package/dist/containers/editor-widgets/link.js +0 -9
- package/dist/containers/editor-widgets/table.js +0 -144
- package/dist/containers/element-model/blockquote.js +0 -13
- package/dist/containers/element-model/column.js +0 -19
- package/dist/containers/element-model/image.js +0 -16
- package/dist/containers/element-model/link.js +0 -16
- package/dist/containers/element-model/table.js +0 -57
- package/dist/containers/element-model/text.js +0 -10
- package/dist/containers/render-utils/common-utils.js +0 -80
- package/dist/containers/render-utils/editor-utils.js +0 -133
- package/dist/containers/render-utils/viewer-utils.js +0 -198
- package/dist/containers/viewer-widgets/viewer-formula/index.js +0 -54
- package/dist/containers/viewer-widgets/viewer-image/index.js +0 -70
- package/dist/containers/viewer-widgets/viewer-image/viewer-image.css +0 -3
- package/dist/editors/index.js +0 -78
- package/dist/editors/markdown-editor.js +0 -280
- package/dist/editors/plain-markdown-editor.js +0 -285
- package/dist/editors/seatable-editor.js +0 -210
- package/dist/editors/simple-editor.js +0 -200
- package/dist/utils/deserialize-html.js +0 -260
- package/dist/utils/diff/compare-strings.js +0 -35
- package/dist/utils/diff/diff.js +0 -769
- package/dist/utils/diff/index.js +0 -2
- package/dist/utils/seafile-markdown2html.js +0 -52
- package/dist/utils/slate2markdown/deserialize.js +0 -588
- package/dist/utils/slate2markdown/index.js +0 -3
- package/dist/utils/slate2markdown/serialize.js +0 -366
- package/dist/utils/utils.js +0 -69
- package/dist/viewer/diff-viewer.js +0 -85
- package/dist/viewer/index.js +0 -4
- package/dist/viewer/markdown-viewer.js +0 -121
- package/dist/viewer/seatable-viewer.js +0 -63
- package/dist/viewer/slate-viewer.js +0 -71
- /package/dist/assets/css/{new-editor-toolbar.css → sdoc-editor-toolbar.css} +0 -0
- /package/dist/assets/css/{new-editor.css → sdoc-editor.css} +0 -0
|
@@ -1,237 +0,0 @@
|
|
|
1
|
-
import _toConsumableArray from "@babel/runtime/helpers/esm/toConsumableArray";
|
|
2
|
-
import _classCallCheck from "@babel/runtime/helpers/esm/classCallCheck";
|
|
3
|
-
import _createClass from "@babel/runtime/helpers/esm/createClass";
|
|
4
|
-
import _inherits from "@babel/runtime/helpers/esm/inherits";
|
|
5
|
-
import _createSuper from "@babel/runtime/helpers/esm/createSuper";
|
|
6
|
-
import React from 'react';
|
|
7
|
-
import { withTranslation } from 'react-i18next';
|
|
8
|
-
import Lightbox from '@seafile/react-image-lightbox';
|
|
9
|
-
import { Utils } from '../../utils/utils';
|
|
10
|
-
import InlineElementUtils from '../editor-utils/inline-element-utils';
|
|
11
|
-
import EditorContext from '../editor-context';
|
|
12
|
-
import '@seafile/react-image-lightbox/style.css';
|
|
13
|
-
var Image = /*#__PURE__*/function (_React$Component) {
|
|
14
|
-
_inherits(Image, _React$Component);
|
|
15
|
-
var _super = _createSuper(Image);
|
|
16
|
-
function Image(props) {
|
|
17
|
-
var _this;
|
|
18
|
-
_classCallCheck(this, Image);
|
|
19
|
-
_this = _super.call(this, props);
|
|
20
|
-
_this.startMove = function (e) {
|
|
21
|
-
e.stopPropagation();
|
|
22
|
-
_this.setState({
|
|
23
|
-
isResizing: true
|
|
24
|
-
});
|
|
25
|
-
window.addEventListener('mousemove', _this.handleMove);
|
|
26
|
-
window.addEventListener('mouseup', _this.stopMove);
|
|
27
|
-
};
|
|
28
|
-
_this.stopMove = function (e) {
|
|
29
|
-
e.stopPropagation();
|
|
30
|
-
e.preventDefault();
|
|
31
|
-
window.removeEventListener('mousemove', _this.handleMove);
|
|
32
|
-
var node = _this.props.node;
|
|
33
|
-
_this.inlineElementUtils.adjustImageSize({
|
|
34
|
-
width: _this.state.width,
|
|
35
|
-
src: node.data.src
|
|
36
|
-
});
|
|
37
|
-
_this.setState({
|
|
38
|
-
isResizing: false
|
|
39
|
-
});
|
|
40
|
-
window.removeEventListener('mouseup', _this.stopMove);
|
|
41
|
-
};
|
|
42
|
-
_this.handleMove = function (e) {
|
|
43
|
-
e.stopPropagation();
|
|
44
|
-
e.preventDefault();
|
|
45
|
-
var changeX;
|
|
46
|
-
changeX = e.clientX - _this.refs.resizer.getBoundingClientRect().left - 5;
|
|
47
|
-
var imageWidth = _this.refs.image.width + changeX;
|
|
48
|
-
if (imageWidth >= _this.editor.offsetWidth) {
|
|
49
|
-
return;
|
|
50
|
-
}
|
|
51
|
-
if (imageWidth < 20) {
|
|
52
|
-
return;
|
|
53
|
-
}
|
|
54
|
-
_this.setState({
|
|
55
|
-
width: imageWidth
|
|
56
|
-
});
|
|
57
|
-
};
|
|
58
|
-
_this.setFullScreen = function (event) {
|
|
59
|
-
event.stopPropagation();
|
|
60
|
-
var src = _this.props.node.data.src;
|
|
61
|
-
_this.toggleBigImage(event, src);
|
|
62
|
-
};
|
|
63
|
-
_this.toggleBigImage = function (event, src) {
|
|
64
|
-
event.preventDefault();
|
|
65
|
-
_this.setState({
|
|
66
|
-
isShowBigImage: !_this.state.isShowBigImage
|
|
67
|
-
});
|
|
68
|
-
_this.imgSrc = src;
|
|
69
|
-
};
|
|
70
|
-
_this.renderImagePreviewer = function () {
|
|
71
|
-
return /*#__PURE__*/React.createElement(ImagePreviewer, {
|
|
72
|
-
imageUrl: _this.imgSrc,
|
|
73
|
-
toggleImagePreviewer: _this.toggleBigImage
|
|
74
|
-
});
|
|
75
|
-
};
|
|
76
|
-
_this.state = {
|
|
77
|
-
width: null,
|
|
78
|
-
isResizing: false,
|
|
79
|
-
isShowBigImage: false
|
|
80
|
-
};
|
|
81
|
-
var editor = EditorContext.getEditor();
|
|
82
|
-
_this.inlineElementUtils = new InlineElementUtils(editor);
|
|
83
|
-
return _this;
|
|
84
|
-
}
|
|
85
|
-
_createClass(Image, [{
|
|
86
|
-
key: "componentDidMount",
|
|
87
|
-
value: function componentDidMount() {
|
|
88
|
-
this.editor = document.querySelector('.editor-component');
|
|
89
|
-
}
|
|
90
|
-
}, {
|
|
91
|
-
key: "componentWillUnmount",
|
|
92
|
-
value: function componentWillUnmount() {
|
|
93
|
-
this.refs.resizer = null;
|
|
94
|
-
this.refs.image = null;
|
|
95
|
-
}
|
|
96
|
-
}, {
|
|
97
|
-
key: "render",
|
|
98
|
-
value: function render() {
|
|
99
|
-
var _this$props = this.props,
|
|
100
|
-
attributes = _this$props.attributes,
|
|
101
|
-
node = _this$props.node,
|
|
102
|
-
isSelected = _this$props.isSelected,
|
|
103
|
-
children = _this$props.children;
|
|
104
|
-
var isResizing = this.state.isResizing;
|
|
105
|
-
var data = node.data;
|
|
106
|
-
var src = data.src;
|
|
107
|
-
if (/^\.\.\/*/.test(src) || /^\.\/*/.test(src)) {
|
|
108
|
-
var editor = EditorContext.getEditor();
|
|
109
|
-
var _editor$editorApi = editor.editorApi,
|
|
110
|
-
filePath = _editor$editorApi.filePath,
|
|
111
|
-
serviceUrl = _editor$editorApi.serviceUrl,
|
|
112
|
-
repoID = _editor$editorApi.repoID;
|
|
113
|
-
var originalPath = filePath.slice(0, filePath.lastIndexOf('/')) + '/' + src;
|
|
114
|
-
src = serviceUrl + '/lib/' + repoID + '/file/' + Utils.pathNormalize(originalPath) + '?raw=1';
|
|
115
|
-
}
|
|
116
|
-
var dom = /*#__PURE__*/React.createElement("span", Object.assign({
|
|
117
|
-
className: "seafile-ed-image"
|
|
118
|
-
}, attributes), isSelected || isResizing ? /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement("img", {
|
|
119
|
-
className: "seafile-ed-image-inResizing",
|
|
120
|
-
draggable: false,
|
|
121
|
-
src: src,
|
|
122
|
-
width: this.state.width || data.width,
|
|
123
|
-
alt: ' ',
|
|
124
|
-
ref: "image"
|
|
125
|
-
}), this.state.isResizing ? /*#__PURE__*/React.createElement("span", {
|
|
126
|
-
contentEditable: false,
|
|
127
|
-
className: "image-size"
|
|
128
|
-
}, /*#__PURE__*/React.createElement("span", null, this.props.t('width'), ':', parseInt(this.state.width || this.refs.image.clientWidth)), /*#__PURE__*/React.createElement("span", null, "\xA0\xA0"), /*#__PURE__*/React.createElement("span", null, this.props.t('height'), ':', this.refs.image.clientHeight)) : null, /*#__PURE__*/React.createElement("span", {
|
|
129
|
-
ref: "resizer",
|
|
130
|
-
onMouseDown: this.startMove,
|
|
131
|
-
className: 'image-resizer'
|
|
132
|
-
}), isSelected && /*#__PURE__*/React.createElement("span", {
|
|
133
|
-
contentEditable: false,
|
|
134
|
-
onClick: this.setFullScreen,
|
|
135
|
-
className: "image-full-button"
|
|
136
|
-
}, /*#__PURE__*/React.createElement("i", {
|
|
137
|
-
className: 'iconfont icon-fullscreen'
|
|
138
|
-
}), /*#__PURE__*/React.createElement("span", {
|
|
139
|
-
className: 'image-tooltip'
|
|
140
|
-
}, this.props.t('Full_screen')))) : /*#__PURE__*/React.createElement("img", {
|
|
141
|
-
width: data.width || '',
|
|
142
|
-
draggable: false,
|
|
143
|
-
src: src,
|
|
144
|
-
alt: ' ',
|
|
145
|
-
ref: "image"
|
|
146
|
-
}), children, this.state.isShowBigImage && this.renderImagePreviewer());
|
|
147
|
-
return src ? dom : /*#__PURE__*/React.createElement("span", attributes, "Loading...");
|
|
148
|
-
}
|
|
149
|
-
}]);
|
|
150
|
-
return Image;
|
|
151
|
-
}(React.Component);
|
|
152
|
-
var ImagePreviewer = /*#__PURE__*/function (_React$Component2) {
|
|
153
|
-
_inherits(ImagePreviewer, _React$Component2);
|
|
154
|
-
var _super2 = _createSuper(ImagePreviewer);
|
|
155
|
-
function ImagePreviewer(props) {
|
|
156
|
-
var _this2;
|
|
157
|
-
_classCallCheck(this, ImagePreviewer);
|
|
158
|
-
_this2 = _super2.call(this, props);
|
|
159
|
-
_this2.getImageNodes = function (nodes) {
|
|
160
|
-
var nodeIndex = 0;
|
|
161
|
-
var list = [];
|
|
162
|
-
while (nodes && nodeIndex <= nodes.length - 1) {
|
|
163
|
-
var currentNode = nodes[nodeIndex];
|
|
164
|
-
if (currentNode.type === 'image') {
|
|
165
|
-
currentNode.data.src && list.push(currentNode.data.src);
|
|
166
|
-
} else {
|
|
167
|
-
list.push.apply(list, _toConsumableArray(_this2.getImageNodes(currentNode.children)));
|
|
168
|
-
}
|
|
169
|
-
nodeIndex++;
|
|
170
|
-
}
|
|
171
|
-
return list;
|
|
172
|
-
};
|
|
173
|
-
_this2.moveToPrevImage = function () {
|
|
174
|
-
_this2.setState(function (prevState) {
|
|
175
|
-
return {
|
|
176
|
-
imageIndex: (prevState.imageIndex + _this2.images.length - 1) % _this2.images.length
|
|
177
|
-
};
|
|
178
|
-
});
|
|
179
|
-
};
|
|
180
|
-
_this2.moveToNextImage = function () {
|
|
181
|
-
_this2.setState(function (prevState) {
|
|
182
|
-
return {
|
|
183
|
-
imageIndex: (prevState.imageIndex + 1) % _this2.images.length
|
|
184
|
-
};
|
|
185
|
-
});
|
|
186
|
-
};
|
|
187
|
-
var editor = EditorContext.getEditor();
|
|
188
|
-
_this2.images = _this2.getImageNodes(editor.children);
|
|
189
|
-
_this2.state = {
|
|
190
|
-
imageIndex: _this2.images.findIndex(function (item) {
|
|
191
|
-
return item === props.imageUrl;
|
|
192
|
-
})
|
|
193
|
-
};
|
|
194
|
-
return _this2;
|
|
195
|
-
}
|
|
196
|
-
_createClass(ImagePreviewer, [{
|
|
197
|
-
key: "render",
|
|
198
|
-
value: function render() {
|
|
199
|
-
var imageIndex = this.state.imageIndex;
|
|
200
|
-
var imageItemsLength = this.images.length;
|
|
201
|
-
var mainSrc = this.images[imageIndex];
|
|
202
|
-
var imageTitle = '';
|
|
203
|
-
try {
|
|
204
|
-
imageTitle = mainSrc ? decodeURI(mainSrc.slice(mainSrc.lastIndexOf('/') + 1)) : '';
|
|
205
|
-
} catch (error) {
|
|
206
|
-
// eslint-disable-next-line no-console
|
|
207
|
-
console.log(error);
|
|
208
|
-
}
|
|
209
|
-
var imageTitleEl = /*#__PURE__*/React.createElement("span", {
|
|
210
|
-
className: "d-flex"
|
|
211
|
-
}, /*#__PURE__*/React.createElement("span", {
|
|
212
|
-
className: "text-truncate"
|
|
213
|
-
}, imageTitle), /*#__PURE__*/React.createElement("span", {
|
|
214
|
-
className: "flex-shrink-0"
|
|
215
|
-
}, "(", imageIndex + 1, "/", this.images.length, ")"));
|
|
216
|
-
return /*#__PURE__*/React.createElement(Lightbox, {
|
|
217
|
-
wrapperClassName: "sf-editor-image-previewer",
|
|
218
|
-
imageTitle: imageTitleEl,
|
|
219
|
-
mainSrc: mainSrc,
|
|
220
|
-
toolbarButtons: [],
|
|
221
|
-
nextSrc: this.images[(imageIndex + 1) % imageItemsLength],
|
|
222
|
-
prevSrc: this.images[(imageIndex + imageItemsLength - 1) % imageItemsLength],
|
|
223
|
-
onCloseRequest: this.props.toggleImagePreviewer,
|
|
224
|
-
onMovePrevRequest: this.moveToPrevImage,
|
|
225
|
-
onMoveNextRequest: this.moveToNextImage,
|
|
226
|
-
imagePadding: 70,
|
|
227
|
-
reactModalStyle: {
|
|
228
|
-
overlay: {
|
|
229
|
-
zIndex: 1071
|
|
230
|
-
}
|
|
231
|
-
}
|
|
232
|
-
});
|
|
233
|
-
}
|
|
234
|
-
}]);
|
|
235
|
-
return ImagePreviewer;
|
|
236
|
-
}(React.Component);
|
|
237
|
-
export default withTranslation('seafile-editor')(Image);
|
|
@@ -1,9 +0,0 @@
|
|
|
1
|
-
import React from 'react';
|
|
2
|
-
import { useSelected } from '@seafile/slate-react';
|
|
3
|
-
function Link(props) {
|
|
4
|
-
var className = useSelected() ? 'seafile-ed-hovermenu-mouseclick' : null;
|
|
5
|
-
return /*#__PURE__*/React.createElement("span", Object.assign({}, props.attributes, {
|
|
6
|
-
className: 'virtual-link ' + className
|
|
7
|
-
}), props.children);
|
|
8
|
-
}
|
|
9
|
-
export default Link;
|
|
@@ -1,144 +0,0 @@
|
|
|
1
|
-
import _classCallCheck from "@babel/runtime/helpers/esm/classCallCheck";
|
|
2
|
-
import _createClass from "@babel/runtime/helpers/esm/createClass";
|
|
3
|
-
import _inherits from "@babel/runtime/helpers/esm/inherits";
|
|
4
|
-
import _createSuper from "@babel/runtime/helpers/esm/createSuper";
|
|
5
|
-
import React from 'react';
|
|
6
|
-
import ReactDOM from 'react-dom';
|
|
7
|
-
import '../../assets/css/table.css';
|
|
8
|
-
var TableContainer = /*#__PURE__*/function (_React$PureComponent) {
|
|
9
|
-
_inherits(TableContainer, _React$PureComponent);
|
|
10
|
-
var _super = _createSuper(TableContainer);
|
|
11
|
-
function TableContainer(props) {
|
|
12
|
-
var _this;
|
|
13
|
-
_classCallCheck(this, TableContainer);
|
|
14
|
-
_this = _super.call(this, props);
|
|
15
|
-
_this.clearSelectedCells = function () {
|
|
16
|
-
_this.table.querySelectorAll('.selected-cell').forEach(function (selectedCell) {
|
|
17
|
-
selectedCell.classList.remove('selected-cell', 'selected-cell-left', 'selected-cell-bottom', 'selected-cell-top', 'selected-cell-right');
|
|
18
|
-
});
|
|
19
|
-
};
|
|
20
|
-
_this.selectTable = function (event) {
|
|
21
|
-
_this.startRowIndex = _this.getTableElement(event.target, 'tr').rowIndex;
|
|
22
|
-
_this.startColIndex = _this.getTableElement(event.target, 'td').cellIndex;
|
|
23
|
-
window.document.addEventListener('mousemove', _this.selectCellsInTable);
|
|
24
|
-
window.document.addEventListener('mouseup', _this.onMouseUp);
|
|
25
|
-
};
|
|
26
|
-
_this.getTableElement = function (node, type) {
|
|
27
|
-
if (node.nodeName.toLowerCase() === type) return node;
|
|
28
|
-
var element = node;
|
|
29
|
-
while (element.nodeName.toLowerCase() !== type) {
|
|
30
|
-
element = element.parentNode;
|
|
31
|
-
}
|
|
32
|
-
return element;
|
|
33
|
-
};
|
|
34
|
-
_this.selectCellsInTable = function (event) {
|
|
35
|
-
if (event.target.nodeName === 'TBODY' || !_this.table.contains(event.target)) {
|
|
36
|
-
// if event.target not in the table, clear the mouseMove event
|
|
37
|
-
return;
|
|
38
|
-
}
|
|
39
|
-
_this.endRowIndex = _this.getTableElement(event.target, 'tr').rowIndex;
|
|
40
|
-
_this.endColIndex = _this.getTableElement(event.target, 'td').cellIndex;
|
|
41
|
-
var minRowIndex = Math.min(_this.startRowIndex, _this.endRowIndex),
|
|
42
|
-
maxRowIndex = Math.max(_this.startRowIndex, _this.endRowIndex),
|
|
43
|
-
minColIndex = Math.min(_this.startColIndex, _this.endColIndex),
|
|
44
|
-
maxColIndex = Math.max(_this.startColIndex, _this.endColIndex);
|
|
45
|
-
if (minRowIndex === maxRowIndex && minColIndex === maxColIndex) {
|
|
46
|
-
return;
|
|
47
|
-
}
|
|
48
|
-
|
|
49
|
-
// collapse selection
|
|
50
|
-
window.getSelection().collapseToEnd();
|
|
51
|
-
_this.selectedRowRange = {
|
|
52
|
-
min: minRowIndex,
|
|
53
|
-
max: maxRowIndex
|
|
54
|
-
};
|
|
55
|
-
_this.selectedColRange = {
|
|
56
|
-
min: minColIndex,
|
|
57
|
-
max: maxColIndex
|
|
58
|
-
};
|
|
59
|
-
_this.hasSelectedRangeRendered = false;
|
|
60
|
-
_this.forceUpdate();
|
|
61
|
-
};
|
|
62
|
-
_this.onMouseUp = function () {
|
|
63
|
-
window.document.removeEventListener('mousemove', _this.selectCellsInTable);
|
|
64
|
-
window.document.removeEventListener('mouseup', _this.onMouseUp);
|
|
65
|
-
};
|
|
66
|
-
_this.table = null;
|
|
67
|
-
_this.selectedRowRange = {
|
|
68
|
-
min: -1,
|
|
69
|
-
max: -1
|
|
70
|
-
};
|
|
71
|
-
_this.selectedColRange = {
|
|
72
|
-
min: -1,
|
|
73
|
-
max: -1
|
|
74
|
-
};
|
|
75
|
-
_this.hasSelectedRangeRendered = false;
|
|
76
|
-
return _this;
|
|
77
|
-
}
|
|
78
|
-
_createClass(TableContainer, [{
|
|
79
|
-
key: "componentDidMount",
|
|
80
|
-
value: function componentDidMount() {
|
|
81
|
-
this.table = ReactDOM.findDOMNode(this);
|
|
82
|
-
}
|
|
83
|
-
}, {
|
|
84
|
-
key: "componentDidUpdate",
|
|
85
|
-
value: function componentDidUpdate() {
|
|
86
|
-
var _this$selectedRowRang = this.selectedRowRange,
|
|
87
|
-
minRowIndex = _this$selectedRowRang.min,
|
|
88
|
-
maxRowIndex = _this$selectedRowRang.max;
|
|
89
|
-
var _this$selectedColRang = this.selectedColRange,
|
|
90
|
-
minColIndex = _this$selectedColRang.min,
|
|
91
|
-
maxColIndex = _this$selectedColRang.max;
|
|
92
|
-
if (minColIndex < 0 || minRowIndex < 0) {
|
|
93
|
-
this.clearSelectedCells();
|
|
94
|
-
return;
|
|
95
|
-
}
|
|
96
|
-
if (this.hasSelectedRangeRendered && this.selectedRowRange.min >= 0 && this.selectedColRange.min >= 0) {
|
|
97
|
-
// if selected range is selected and has rendered reset selected range
|
|
98
|
-
this.selectedColRange = {
|
|
99
|
-
min: -1,
|
|
100
|
-
max: -1
|
|
101
|
-
};
|
|
102
|
-
this.selectedColRange = {
|
|
103
|
-
min: -1,
|
|
104
|
-
max: -1
|
|
105
|
-
};
|
|
106
|
-
return;
|
|
107
|
-
}
|
|
108
|
-
|
|
109
|
-
// clear previous selected style before render
|
|
110
|
-
this.clearSelectedCells();
|
|
111
|
-
for (var rowIndex = minRowIndex; rowIndex <= maxRowIndex; rowIndex++) {
|
|
112
|
-
var selectedRow = this.table.querySelectorAll('tr')[rowIndex];
|
|
113
|
-
for (var colIndex = minColIndex; colIndex <= maxColIndex; colIndex++) {
|
|
114
|
-
selectedRow.querySelectorAll('td')[colIndex].classList.add('selected-cell');
|
|
115
|
-
if (rowIndex === minRowIndex) {
|
|
116
|
-
selectedRow.querySelectorAll('td')[colIndex].classList.add('selected-cell-top');
|
|
117
|
-
}
|
|
118
|
-
if (colIndex === minColIndex) {
|
|
119
|
-
selectedRow.querySelectorAll('td')[colIndex].classList.add('selected-cell-left');
|
|
120
|
-
}
|
|
121
|
-
if (colIndex === maxColIndex) {
|
|
122
|
-
selectedRow.querySelectorAll('td')[colIndex].classList.add('selected-cell-right');
|
|
123
|
-
}
|
|
124
|
-
if (rowIndex === maxRowIndex) {
|
|
125
|
-
selectedRow.querySelectorAll('td')[colIndex].classList.add('selected-cell-bottom');
|
|
126
|
-
}
|
|
127
|
-
}
|
|
128
|
-
}
|
|
129
|
-
this.hasSelectedRangeRendered = true;
|
|
130
|
-
}
|
|
131
|
-
}, {
|
|
132
|
-
key: "render",
|
|
133
|
-
value: function render() {
|
|
134
|
-
var _this$props = this.props,
|
|
135
|
-
attributes = _this$props.attributes,
|
|
136
|
-
children = _this$props.children;
|
|
137
|
-
return /*#__PURE__*/React.createElement("table", {
|
|
138
|
-
onMouseDown: this.selectTable
|
|
139
|
-
}, /*#__PURE__*/React.createElement("tbody", attributes, children));
|
|
140
|
-
}
|
|
141
|
-
}]);
|
|
142
|
-
return TableContainer;
|
|
143
|
-
}(React.PureComponent);
|
|
144
|
-
export default TableContainer;
|
|
@@ -1,13 +0,0 @@
|
|
|
1
|
-
import _createClass from "@babel/runtime/helpers/esm/createClass";
|
|
2
|
-
import _classCallCheck from "@babel/runtime/helpers/esm/classCallCheck";
|
|
3
|
-
var Blockquote = /*#__PURE__*/_createClass(function Blockquote(options) {
|
|
4
|
-
_classCallCheck(this, Blockquote);
|
|
5
|
-
this.type = options.type || 'blockquote';
|
|
6
|
-
this.children = options.children || [{
|
|
7
|
-
text: ''
|
|
8
|
-
}];
|
|
9
|
-
});
|
|
10
|
-
var generateBlockquote = function generateBlockquote(options) {
|
|
11
|
-
return Object.assign({}, new Blockquote(options));
|
|
12
|
-
};
|
|
13
|
-
export default generateBlockquote;
|
|
@@ -1,19 +0,0 @@
|
|
|
1
|
-
import _createClass from "@babel/runtime/helpers/esm/createClass";
|
|
2
|
-
import _classCallCheck from "@babel/runtime/helpers/esm/classCallCheck";
|
|
3
|
-
var Column = /*#__PURE__*/_createClass(function Column(options) {
|
|
4
|
-
_classCallCheck(this, Column);
|
|
5
|
-
this.type = options.type || 'column';
|
|
6
|
-
this.data = options.data || {
|
|
7
|
-
key: '',
|
|
8
|
-
name: '',
|
|
9
|
-
bold: false,
|
|
10
|
-
italic: false
|
|
11
|
-
};
|
|
12
|
-
this.children = options.children || [{
|
|
13
|
-
text: ''
|
|
14
|
-
}];
|
|
15
|
-
});
|
|
16
|
-
var generateColumn = function generateColumn(options) {
|
|
17
|
-
return Object.assign({}, new Column(options));
|
|
18
|
-
};
|
|
19
|
-
export default generateColumn;
|
|
@@ -1,16 +0,0 @@
|
|
|
1
|
-
import _createClass from "@babel/runtime/helpers/esm/createClass";
|
|
2
|
-
import _classCallCheck from "@babel/runtime/helpers/esm/classCallCheck";
|
|
3
|
-
var Image = /*#__PURE__*/_createClass(function Image(options) {
|
|
4
|
-
_classCallCheck(this, Image);
|
|
5
|
-
this.type = options.type || 'image';
|
|
6
|
-
this.data = options.data || {
|
|
7
|
-
src: ''
|
|
8
|
-
};
|
|
9
|
-
this.children = options.children || [{
|
|
10
|
-
text: ''
|
|
11
|
-
}];
|
|
12
|
-
});
|
|
13
|
-
var generateImage = function generateImage(options) {
|
|
14
|
-
return Object.assign({}, new Image(options));
|
|
15
|
-
};
|
|
16
|
-
export default generateImage;
|
|
@@ -1,16 +0,0 @@
|
|
|
1
|
-
import _createClass from "@babel/runtime/helpers/esm/createClass";
|
|
2
|
-
import _classCallCheck from "@babel/runtime/helpers/esm/classCallCheck";
|
|
3
|
-
var Link = /*#__PURE__*/_createClass(function Link(options) {
|
|
4
|
-
_classCallCheck(this, Link);
|
|
5
|
-
this.type = options.type || 'link';
|
|
6
|
-
this.children = options.children || [{
|
|
7
|
-
text: ''
|
|
8
|
-
}];
|
|
9
|
-
this.data = options.data || {
|
|
10
|
-
href: ''
|
|
11
|
-
};
|
|
12
|
-
});
|
|
13
|
-
var generateLinkElement = function generateLinkElement(options) {
|
|
14
|
-
return Object.assign({}, new Link(options));
|
|
15
|
-
};
|
|
16
|
-
export default generateLinkElement;
|
|
@@ -1,57 +0,0 @@
|
|
|
1
|
-
import _createClass from "@babel/runtime/helpers/esm/createClass";
|
|
2
|
-
import _classCallCheck from "@babel/runtime/helpers/esm/classCallCheck";
|
|
3
|
-
var Table = /*#__PURE__*/_createClass(function Table() {
|
|
4
|
-
var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
|
|
5
|
-
_classCallCheck(this, Table);
|
|
6
|
-
this.type = options.type || 'table';
|
|
7
|
-
var rowCount = options.rowCount,
|
|
8
|
-
columnCount = options.columnCount;
|
|
9
|
-
var children = options.children;
|
|
10
|
-
if (rowCount) {
|
|
11
|
-
var list = new Array(rowCount).fill('');
|
|
12
|
-
children = list.map(function () {
|
|
13
|
-
return generateTableRow({
|
|
14
|
-
columnCount: columnCount
|
|
15
|
-
});
|
|
16
|
-
});
|
|
17
|
-
}
|
|
18
|
-
this.children = children;
|
|
19
|
-
});
|
|
20
|
-
var TableRow = /*#__PURE__*/_createClass(function TableRow() {
|
|
21
|
-
var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
|
|
22
|
-
_classCallCheck(this, TableRow);
|
|
23
|
-
this.type = options.type || 'table_row';
|
|
24
|
-
var columnCount = options.columnCount;
|
|
25
|
-
var children = options.children;
|
|
26
|
-
if (columnCount) {
|
|
27
|
-
var list = new Array(columnCount).fill('');
|
|
28
|
-
children = list.map(function () {
|
|
29
|
-
return generateTableCell();
|
|
30
|
-
});
|
|
31
|
-
}
|
|
32
|
-
this.children = children;
|
|
33
|
-
});
|
|
34
|
-
var TableCell = /*#__PURE__*/_createClass(function TableCell() {
|
|
35
|
-
var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
|
|
36
|
-
_classCallCheck(this, TableCell);
|
|
37
|
-
this.type = options.type || 'table_cell';
|
|
38
|
-
this.children = options.children || [{
|
|
39
|
-
type: 'paragraph',
|
|
40
|
-
children: [{
|
|
41
|
-
text: ''
|
|
42
|
-
}]
|
|
43
|
-
}];
|
|
44
|
-
this.data = options.data || {
|
|
45
|
-
align: 'left'
|
|
46
|
-
};
|
|
47
|
-
});
|
|
48
|
-
var generateTable = function generateTable(options) {
|
|
49
|
-
return Object.assign({}, new Table(options));
|
|
50
|
-
};
|
|
51
|
-
var generateTableRow = function generateTableRow(options) {
|
|
52
|
-
return Object.assign({}, new TableRow(options));
|
|
53
|
-
};
|
|
54
|
-
var generateTableCell = function generateTableCell(options) {
|
|
55
|
-
return Object.assign({}, new TableCell(options));
|
|
56
|
-
};
|
|
57
|
-
export { generateTable, generateTableRow, generateTableCell };
|
|
@@ -1,10 +0,0 @@
|
|
|
1
|
-
import _createClass from "@babel/runtime/helpers/esm/createClass";
|
|
2
|
-
import _classCallCheck from "@babel/runtime/helpers/esm/classCallCheck";
|
|
3
|
-
var Text = /*#__PURE__*/_createClass(function Text(options) {
|
|
4
|
-
_classCallCheck(this, Text);
|
|
5
|
-
this.text = options.text || '';
|
|
6
|
-
});
|
|
7
|
-
var generateTextElement = function generateTextElement(options) {
|
|
8
|
-
return Object.assign({}, new Text(options));
|
|
9
|
-
};
|
|
10
|
-
export default generateTextElement;
|
|
@@ -1,80 +0,0 @@
|
|
|
1
|
-
import _createForOfIteratorHelper from "@babel/runtime/helpers/esm/createForOfIteratorHelper";
|
|
2
|
-
import _slicedToArray from "@babel/runtime/helpers/esm/slicedToArray";
|
|
3
|
-
import Prism from 'prismjs';
|
|
4
|
-
export var decorationNode = function decorationNode(_ref) {
|
|
5
|
-
var _ref2 = _slicedToArray(_ref, 2),
|
|
6
|
-
node = _ref2[0],
|
|
7
|
-
path = _ref2[1];
|
|
8
|
-
if (node.type !== 'code_block') return [];
|
|
9
|
-
var languageType = node.data.syntax;
|
|
10
|
-
if (languageType === 'none') return [];
|
|
11
|
-
var grammer = Prism.languages[languageType];
|
|
12
|
-
var codeLines = node.children;
|
|
13
|
-
if (!grammer) {
|
|
14
|
-
return [];
|
|
15
|
-
}
|
|
16
|
-
var blockText = codeLines.map(function (codeLine) {
|
|
17
|
-
return codeLine.children[0].text;
|
|
18
|
-
}).join('\n');
|
|
19
|
-
var tokens = Prism.tokenize(blockText, grammer);
|
|
20
|
-
var decorations = [];
|
|
21
|
-
var textLine = 0;
|
|
22
|
-
var offset = 0;
|
|
23
|
-
var _iterator = _createForOfIteratorHelper(tokens),
|
|
24
|
-
_step;
|
|
25
|
-
try {
|
|
26
|
-
for (_iterator.s(); !(_step = _iterator.n()).done;) {
|
|
27
|
-
var token = _step.value;
|
|
28
|
-
if (typeof token === 'string' && token.indexOf('\n') >= 0) {
|
|
29
|
-
//the varialble enterNum is the num of \n in the token
|
|
30
|
-
// get the number of \n buy split the token by '\n'
|
|
31
|
-
var newlineTokens = token.split('\n');
|
|
32
|
-
var enterNum = newlineTokens.length - 1;
|
|
33
|
-
// get the next code_line which the content of is is not ' ' or null;
|
|
34
|
-
textLine += enterNum;
|
|
35
|
-
// get the initial offset of the code_line
|
|
36
|
-
offset = newlineTokens.pop().length;
|
|
37
|
-
continue;
|
|
38
|
-
}
|
|
39
|
-
if (typeof token === 'string') {
|
|
40
|
-
var textPath = path.slice();
|
|
41
|
-
textPath.push(textLine, 0);
|
|
42
|
-
var decoration = {
|
|
43
|
-
anchor: {
|
|
44
|
-
path: textPath,
|
|
45
|
-
offset: offset
|
|
46
|
-
},
|
|
47
|
-
focus: {
|
|
48
|
-
path: textPath,
|
|
49
|
-
offset: offset + token.length
|
|
50
|
-
},
|
|
51
|
-
type: 'text'
|
|
52
|
-
};
|
|
53
|
-
decorations.push(decoration);
|
|
54
|
-
offset += token.length;
|
|
55
|
-
} else if (typeof token.content === 'string') {
|
|
56
|
-
var _textPath = path.slice();
|
|
57
|
-
_textPath.push(textLine, 0);
|
|
58
|
-
var _decoration = {
|
|
59
|
-
anchor: {
|
|
60
|
-
path: _textPath,
|
|
61
|
-
offset: offset
|
|
62
|
-
},
|
|
63
|
-
focus: {
|
|
64
|
-
path: _textPath,
|
|
65
|
-
offset: offset + token.content.length
|
|
66
|
-
},
|
|
67
|
-
decoration: true,
|
|
68
|
-
type: token.type
|
|
69
|
-
};
|
|
70
|
-
decorations.push(_decoration);
|
|
71
|
-
offset += token.content.length;
|
|
72
|
-
}
|
|
73
|
-
}
|
|
74
|
-
} catch (err) {
|
|
75
|
-
_iterator.e(err);
|
|
76
|
-
} finally {
|
|
77
|
-
_iterator.f();
|
|
78
|
-
}
|
|
79
|
-
return decorations;
|
|
80
|
-
};
|