@seafile/sdoc-editor 3.0.0 → 3.0.1

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.
@@ -106,7 +106,7 @@
106
106
  .file-preview-panel-body .sdoc-article-container .article.sdoc-editor__article {
107
107
  border: none;
108
108
  box-shadow: none;
109
- padding: 8px;
109
+ padding: 8px 16px;
110
110
  }
111
111
 
112
112
  .file-preview-panel-body .sdoc-article-container .sdoc-table-wrapper {
@@ -159,6 +159,7 @@
159
159
 
160
160
  .sdoc-toggle-view .sdoc-tree-view,
161
161
  .sdoc-toggle-view .sdoc-list-view {
162
+ color: #666666;
162
163
  min-width: 66px;
163
164
  width: fit-content;
164
165
  border-radius: 2px;
@@ -33,6 +33,12 @@
33
33
  flex: 1 1;
34
34
  margin-left: .25rem;
35
35
  overflow: hidden;
36
+ white-space: nowrap;
37
+ text-overflow: ellipsis;
38
+ }
39
+
40
+ .sdoc-file-wrapper:has(.sdoc-file-checked) .sdoc-item-content {
41
+ padding-right: 32px;
36
42
  }
37
43
 
38
44
  .sdoc-item-name {
@@ -76,6 +76,13 @@
76
76
 
77
77
  .sdoc-files-tree .sdoc-file-info .sdoc-file-name {
78
78
  font-size: 14px;
79
+ white-space: nowrap;
80
+ overflow: hidden;
81
+ text-overflow: ellipsis;
82
+ }
83
+
84
+ .sdoc-files-tree .sdoc-file-info:has(.sdoc-file-checked) .sdoc-file-name {
85
+ padding-right: 32px;
79
86
  }
80
87
 
81
88
  .sdoc-files-tree .sdoc-folder-children {
@@ -201,7 +201,7 @@ Object.defineProperty(exports, "HEADER6", {
201
201
  return _elementType.HEADER6;
202
202
  }
203
203
  });
204
- exports.HEADER_TITLE_MAP = exports.HEADERS = void 0;
204
+ exports.HEADER_TITLE_MAP = exports.HEADER_TAG = exports.HEADERS = void 0;
205
205
  Object.defineProperty(exports, "IMAGE", {
206
206
  enumerable: true,
207
207
  get: function get() {
@@ -498,6 +498,14 @@ var _menusConfig = require("./menus-config");
498
498
  var _MOUSE_ENTER_EVENT_DI; // extension plugin
499
499
  // eslint-disable-next-line no-duplicate-imports
500
500
  var HEADERS = exports.HEADERS = [_elementType.HEADER1, _elementType.HEADER2, _elementType.HEADER3, _elementType.HEADER4, _elementType.HEADER5, _elementType.HEADER6];
501
+ var HEADER_TAG = exports.HEADER_TAG = {
502
+ header1: 'H1',
503
+ header2: 'H2',
504
+ header3: 'H3',
505
+ header4: 'H4',
506
+ header5: 'H5',
507
+ header6: 'H6'
508
+ };
501
509
  var HEADER_TITLE_MAP = exports.HEADER_TITLE_MAP = (0, _defineProperty2["default"])((0, _defineProperty2["default"])((0, _defineProperty2["default"])((0, _defineProperty2["default"])((0, _defineProperty2["default"])((0, _defineProperty2["default"])((0, _defineProperty2["default"])((0, _defineProperty2["default"])((0, _defineProperty2["default"])({}, _elementType.TITLE, 'Title'), _elementType.SUBTITLE, 'Subtitle'), _elementType.HEADER1, 'Header_one'), _elementType.HEADER2, 'Header_two'), _elementType.HEADER3, 'Header_three'), _elementType.HEADER4, 'Header_four'), _elementType.HEADER5, 'Header_five'), _elementType.HEADER6, 'Header_six'), _elementType.PARAGRAPH, 'Paragraph');
502
510
  var TRANSPARENT = exports.TRANSPARENT = 'transparent';
503
511
  var CLIPBOARD_FORMAT_KEY = exports.CLIPBOARD_FORMAT_KEY = 'x-slate-fragment';
@@ -110,7 +110,6 @@ var withBlockquote = function withBlockquote(editor) {
110
110
  var elements = (0, _helpers.getFormattedElements)(data.slice(0, lastIndex + 1));
111
111
  var restElements = (0, _helpers.getFormattedRestElements)(data.slice(lastIndex + 1));
112
112
  var path = _slate.Editor.path(newEditor, newEditor.selection);
113
-
114
113
  // Insert elements of quote block
115
114
  if (restElements.length !== 0) {
116
115
  if (_slate.Range.isCollapsed(editor.selection)) {
@@ -119,17 +118,13 @@ var withBlockquote = function withBlockquote(editor) {
119
118
  var parentNodeEntry = _slate.Editor.parent(editor, paragraphEntry[1]);
120
119
  if (parentNodeEntry && parentNodeEntry[0].type === _constants.BLOCKQUOTE) {
121
120
  if (!_slate.Node.string(paragraphEntry[0]).length) {
122
- data.forEach(function (node) {
123
- if (node.type === _constants.BLOCKQUOTE) {
124
- node.type = _constants.PARAGRAPH;
125
- }
126
- });
127
- insertFragment(data);
121
+ insertFragment(restElements);
128
122
  return;
129
123
  }
130
124
  }
131
125
  }
132
126
  }
127
+
133
128
  // Insert text when inserting a single line paragraph
134
129
  if (restElements.length === 1 && restElements[0].type === _constants.PARAGRAPH) {
135
130
  var string = _slate.Node.string(restElements[0]);
@@ -107,7 +107,33 @@
107
107
 
108
108
  .link-block-wrapper .link-block-container {
109
109
  width: 100%;
110
- margin: 5px 0;
110
+ padding: 5px 0;
111
+ }
112
+
113
+ .link-block-wrapper .link-header-block-container {
114
+ width: 100%;
115
+ padding: 5px 0;
116
+ display: flex;
117
+ color: #495057;
118
+ cursor: pointer;
119
+ }
120
+
121
+ .link-block-wrapper .link-header-block-container:hover {
122
+ background-color: rgb(245, 245, 245);
123
+ }
124
+
125
+ .link-block-wrapper .link-header-block-container .heading-prefix {
126
+ margin-right: 6px;
127
+ padding-left: 0.75rem;
128
+ }
129
+
130
+ .link-block-wrapper .link-header-block-container .linked-header-block-item {
131
+ display: block;
132
+ font-size: 15px;
133
+ margin-right: 5px;
134
+ overflow: hidden;
135
+ white-space: nowrap;
136
+ text-overflow: ellipsis;
111
137
  }
112
138
 
113
139
  .link-block-wrapper .link-block-container .linked-block-item {
@@ -117,6 +143,25 @@
117
143
  padding-left: 0.75rem;
118
144
  }
119
145
 
146
+ .selected-linked-block-wrapper .selected-linked-block .linked-header-block-item,
147
+ .selected-linked-block .sdoc-header-1,
148
+ .selected-linked-block .sdoc-header-2,
149
+ .selected-linked-block .sdoc-header-3,
150
+ .selected-linked-block .sdoc-header-4,
151
+ .selected-linked-block .sdoc-header-5,
152
+ .selected-linked-block .sdoc-header-6 {
153
+ color: #495057;
154
+ font-size: 15px !important;
155
+ font-weight: normal;
156
+ overflow: hidden;
157
+ white-space: nowrap;
158
+ text-overflow: ellipsis;
159
+ }
160
+
161
+ .selected-linked-block-wrapper .selected-linked-block .heading-prefix {
162
+ display: none;
163
+ }
164
+
120
165
  .link-block-wrapper .select-block-wrapper blockquote,
121
166
  .link-block-wrapper .link-block-container blockquote {
122
167
  border-left: 4px solid #ddd;
@@ -64,30 +64,34 @@ var AddLinkDialog = function AddLinkDialog(_ref) {
64
64
  _useState10 = (0, _slicedToArray2["default"])(_useState1, 2),
65
65
  selectedBlockId = _useState10[0],
66
66
  setSelectedBlockId = _useState10[1];
67
- var _useState11 = (0, _react.useState)(false),
67
+ var _useState11 = (0, _react.useState)([]),
68
68
  _useState12 = (0, _slicedToArray2["default"])(_useState11, 2),
69
- isOpenSelect = _useState12[0],
70
- setIsOpenSelect = _useState12[1];
69
+ headerList = _useState12[0],
70
+ setheaderList = _useState12[1];
71
71
  var _useState13 = (0, _react.useState)(false),
72
72
  _useState14 = (0, _slicedToArray2["default"])(_useState13, 2),
73
- isOpenSelectHeader = _useState14[0],
74
- setIsOpenSelectHeader = _useState14[1];
73
+ isOpenSelect = _useState14[0],
74
+ setIsOpenSelect = _useState14[1];
75
75
  var _useState15 = (0, _react.useState)(false),
76
76
  _useState16 = (0, _slicedToArray2["default"])(_useState15, 2),
77
- isOpenSelectImageBlock = _useState16[0],
78
- setIsOpenSelectImageBlock = _useState16[1];
77
+ isOpenSelectHeader = _useState16[0],
78
+ setIsOpenSelectHeader = _useState16[1];
79
79
  var _useState17 = (0, _react.useState)(false),
80
80
  _useState18 = (0, _slicedToArray2["default"])(_useState17, 2),
81
- isOpenSelectCodeBlock = _useState18[0],
82
- setIsOpenSelectCodeBlock = _useState18[1];
81
+ isOpenSelectImageBlock = _useState18[0],
82
+ setIsOpenSelectImageBlock = _useState18[1];
83
83
  var _useState19 = (0, _react.useState)(false),
84
84
  _useState20 = (0, _slicedToArray2["default"])(_useState19, 2),
85
- isOpenSelectBlockquote = _useState20[0],
86
- setIsOpenSelectBlockquote = _useState20[1];
87
- var _useState21 = (0, _react.useState)(''),
85
+ isOpenSelectCodeBlock = _useState20[0],
86
+ setIsOpenSelectCodeBlock = _useState20[1];
87
+ var _useState21 = (0, _react.useState)(false),
88
88
  _useState22 = (0, _slicedToArray2["default"])(_useState21, 2),
89
- htmlString = _useState22[0],
90
- setHtmlString = _useState22[1];
89
+ isOpenSelectBlockquote = _useState22[0],
90
+ setIsOpenSelectBlockquote = _useState22[1];
91
+ var _useState23 = (0, _react.useState)(''),
92
+ _useState24 = (0, _slicedToArray2["default"])(_useState23, 2),
93
+ htmlString = _useState24[0],
94
+ setHtmlString = _useState24[1];
91
95
  var submit = (0, _react.useCallback)(function () {
92
96
  setLinkErrorMessage('');
93
97
  setTitleErrorMessage('');
@@ -144,7 +148,7 @@ var AddLinkDialog = function AddLinkDialog(_ref) {
144
148
  }));
145
149
  }, [closeDialog]);
146
150
  var handleOnChangeBlock = function handleOnChangeBlock(e) {
147
- var block = e.target.closest('.linked-block-item');
151
+ var block = e.target.closest('.linked-block-item') || e.currentTarget.querySelector('.linked-header-block-item');
148
152
  if (block) {
149
153
  var clone = block.cloneNode(true);
150
154
  var displayContainer = document.getElementById('selected-block-display');
@@ -173,8 +177,9 @@ var AddLinkDialog = function AddLinkDialog(_ref) {
173
177
  return function () {
174
178
  return clearTimeout(timer);
175
179
  };
176
- }, []);
180
+ }, [linked_id]);
177
181
  (0, _react.useEffect)(function () {
182
+ // Get codeblock,blockquote,image html
178
183
  var genHtml = /*#__PURE__*/function () {
179
184
  var _ref3 = (0, _asyncToGenerator2["default"])(/*#__PURE__*/(0, _regenerator2["default"])().m(function _callee() {
180
185
  var list, mdValue, ids, processor, file;
@@ -207,7 +212,15 @@ var AddLinkDialog = function AddLinkDialog(_ref) {
207
212
  }();
208
213
  genHtml();
209
214
  }, [editor.children]);
210
- var headersHTML = (0, _helpers.parseHtmlString)(htmlString, 'h1,h2,h3,h4,h5,h6');
215
+ (0, _react.useEffect)(function () {
216
+ // Get header node list
217
+ var headerList = editor.children.filter(function (node) {
218
+ return _slate.Element.isElement(node) && !(0, _helpers.isEmptyNode)(node) && _constants.HEADERS.includes(node.type);
219
+ });
220
+ if (headerList.length > 0) {
221
+ setheaderList(headerList);
222
+ }
223
+ }, [editor.children]);
211
224
  var imagesHTML = (0, _helpers.parseHtmlString)(htmlString, 'img');
212
225
  var codeBlockHTML = (0, _helpers.parseHtmlString)(htmlString, 'pre');
213
226
  var blockquoteHTML = (0, _helpers.parseHtmlString)(htmlString, 'blockquote');
@@ -279,7 +292,7 @@ var AddLinkDialog = function AddLinkDialog(_ref) {
279
292
  className: "sdoc-file-icon sdoc-file-icon-toggle sdocfont sdoc-right-slide"
280
293
  })), isOpenSelect && /*#__PURE__*/_react["default"].createElement("div", {
281
294
  className: "link-block-wrapper"
282
- }, headersHTML && /*#__PURE__*/_react["default"].createElement("div", {
295
+ }, headerList.length > 0 && /*#__PURE__*/_react["default"].createElement("div", {
283
296
  className: (0, _classnames["default"])('select-block-wrapper', {
284
297
  'expanded': isOpenSelectHeader
285
298
  }),
@@ -290,14 +303,20 @@ var AddLinkDialog = function AddLinkDialog(_ref) {
290
303
  className: "sdoc-file-icon sdoc-file-icon-toggle sdocfont sdoc-right-slide"
291
304
  }), /*#__PURE__*/_react["default"].createElement("div", {
292
305
  className: "title"
293
- }, t('Header'))), isOpenSelectHeader && /*#__PURE__*/_react["default"].createElement("div", {
294
- className: "link-block-container",
295
- dangerouslySetInnerHTML: {
296
- __html: headersHTML
297
- },
298
- onClick: function onClick(e) {
299
- return handleOnChangeBlock(e);
300
- }
306
+ }, t('Header'))), isOpenSelectHeader && headerList.map(function (header, key) {
307
+ var headerContext = _slate.Node.string(header);
308
+ return /*#__PURE__*/_react["default"].createElement("div", {
309
+ className: "link-header-block-container",
310
+ key: key,
311
+ onClick: function onClick(e) {
312
+ return handleOnChangeBlock(e);
313
+ }
314
+ }, /*#__PURE__*/_react["default"].createElement("div", {
315
+ className: "heading-prefix"
316
+ }, _constants.HEADER_TAG[header.type]), /*#__PURE__*/_react["default"].createElement("div", {
317
+ "data-id": header.id,
318
+ className: "linked-header-block-item"
319
+ }, headerContext));
301
320
  }), imagesHTML && /*#__PURE__*/_react["default"].createElement("div", {
302
321
  className: (0, _classnames["default"])('select-block-wrapper', {
303
322
  'expanded': isOpenSelectImageBlock
@@ -252,7 +252,7 @@ var parseHtmlString = exports.parseHtmlString = function parseHtmlString(htmlStr
252
252
  var parser = new DOMParser();
253
253
  var doc = parser.parseFromString(htmlString, 'text/html');
254
254
  var resultHtml;
255
- if (targetType == 'img') {
255
+ if (targetType === 'img') {
256
256
  resultHtml = (0, _toConsumableArray2["default"])(doc.querySelectorAll('p:has(img)')).map(function (p) {
257
257
  return p.outerHTML;
258
258
  }).join('');
@@ -264,6 +264,7 @@ var parseHtmlString = exports.parseHtmlString = function parseHtmlString(htmlStr
264
264
  return resultHtml;
265
265
  };
266
266
  var isEmptyNode = exports.isEmptyNode = function isEmptyNode(node) {
267
+ if (node.type === _constants.IMAGE_BLOCK) return false;
267
268
  var text = _slate.Node.string(node);
268
269
  return text.trim() === '';
269
270
  };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@seafile/sdoc-editor",
3
- "version": "3.0.0",
3
+ "version": "3.0.1",
4
4
  "main": "dist/index.js",
5
5
  "scripts": {
6
6
  "test": "jest",
@@ -71,5 +71,5 @@
71
71
  "publishConfig": {
72
72
  "access": "public"
73
73
  },
74
- "gitHead": "bb8d81d4df2885fa2558ae327b02d9ebf12ae093"
74
+ "gitHead": "f4690d913506d3dd6108d97248323e1b9b06ee32"
75
75
  }