@seafile/sdoc-editor 3.0.207 → 3.0.208
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.
|
@@ -0,0 +1,89 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
var _interopRequireWildcard = require("@babel/runtime/helpers/interopRequireWildcard")["default"];
|
|
4
|
+
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault")["default"];
|
|
5
|
+
Object.defineProperty(exports, "__esModule", {
|
|
6
|
+
value: true
|
|
7
|
+
});
|
|
8
|
+
exports["default"] = void 0;
|
|
9
|
+
var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime/helpers/esm/slicedToArray"));
|
|
10
|
+
var _react = _interopRequireWildcard(require("react"));
|
|
11
|
+
var _reactI18next = require("react-i18next");
|
|
12
|
+
var _reactstrap = require("reactstrap");
|
|
13
|
+
var _helpers = require("./helpers");
|
|
14
|
+
var CreatePageDialog = function CreatePageDialog(_ref) {
|
|
15
|
+
var isOpen = _ref.isOpen,
|
|
16
|
+
initialTitle = _ref.initialTitle,
|
|
17
|
+
editor = _ref.editor,
|
|
18
|
+
element = _ref.element,
|
|
19
|
+
onClose = _ref.onClose;
|
|
20
|
+
var _useTranslation = (0, _reactI18next.useTranslation)('sdoc-editor'),
|
|
21
|
+
t = _useTranslation.t;
|
|
22
|
+
var _useState = (0, _react.useState)(''),
|
|
23
|
+
_useState2 = (0, _slicedToArray2["default"])(_useState, 2),
|
|
24
|
+
title = _useState2[0],
|
|
25
|
+
setTitle = _useState2[1];
|
|
26
|
+
var _useState3 = (0, _react.useState)(''),
|
|
27
|
+
_useState4 = (0, _slicedToArray2["default"])(_useState3, 2),
|
|
28
|
+
error = _useState4[0],
|
|
29
|
+
setError = _useState4[1];
|
|
30
|
+
(0, _react.useEffect)(function () {
|
|
31
|
+
if (!isOpen) return;
|
|
32
|
+
setTitle(initialTitle || '');
|
|
33
|
+
setError('');
|
|
34
|
+
}, [initialTitle, isOpen]);
|
|
35
|
+
var onChange = (0, _react.useCallback)(function (event) {
|
|
36
|
+
setTitle(event.target.value);
|
|
37
|
+
if (error) {
|
|
38
|
+
setError('');
|
|
39
|
+
}
|
|
40
|
+
}, [error]);
|
|
41
|
+
var onCreate = (0, _react.useCallback)(function () {
|
|
42
|
+
var errorMessage = (0, _helpers.validateWikiPageTitle)(title);
|
|
43
|
+
if (errorMessage) {
|
|
44
|
+
setError(errorMessage);
|
|
45
|
+
return;
|
|
46
|
+
}
|
|
47
|
+
onClose();
|
|
48
|
+
(0, _helpers.createWikiPageAndInsertLink)({
|
|
49
|
+
editor: editor,
|
|
50
|
+
element: element,
|
|
51
|
+
title: title
|
|
52
|
+
});
|
|
53
|
+
}, [editor, element, onClose, title]);
|
|
54
|
+
var onKeyDown = (0, _react.useCallback)(function (event) {
|
|
55
|
+
if (event.key === 'Enter') {
|
|
56
|
+
event.preventDefault();
|
|
57
|
+
onCreate();
|
|
58
|
+
}
|
|
59
|
+
}, [onCreate]);
|
|
60
|
+
return /*#__PURE__*/_react["default"].createElement(_reactstrap.Modal, {
|
|
61
|
+
isOpen: isOpen,
|
|
62
|
+
toggle: onClose,
|
|
63
|
+
zIndex: 1071,
|
|
64
|
+
returnFocusAfterClose: false
|
|
65
|
+
}, /*#__PURE__*/_react["default"].createElement(_reactstrap.ModalHeader, {
|
|
66
|
+
toggle: onClose
|
|
67
|
+
}, t('New_page')), /*#__PURE__*/_react["default"].createElement(_reactstrap.ModalBody, null, /*#__PURE__*/_react["default"].createElement("div", {
|
|
68
|
+
className: "form-group mb-0"
|
|
69
|
+
}, /*#__PURE__*/_react["default"].createElement(_reactstrap.Label, {
|
|
70
|
+
"for": "createWikiPageTitle"
|
|
71
|
+
}, t('Page_name')), /*#__PURE__*/_react["default"].createElement(_reactstrap.Input, {
|
|
72
|
+
id: "createWikiPageTitle",
|
|
73
|
+
type: "text",
|
|
74
|
+
value: title,
|
|
75
|
+
autoFocus: true,
|
|
76
|
+
onChange: onChange,
|
|
77
|
+
onKeyDown: onKeyDown
|
|
78
|
+
}), error && /*#__PURE__*/_react["default"].createElement(_reactstrap.Alert, {
|
|
79
|
+
color: "danger",
|
|
80
|
+
className: "mt-2 mb-0"
|
|
81
|
+
}, t(error)))), /*#__PURE__*/_react["default"].createElement(_reactstrap.ModalFooter, null, /*#__PURE__*/_react["default"].createElement(_reactstrap.Button, {
|
|
82
|
+
color: "secondary",
|
|
83
|
+
onClick: onClose
|
|
84
|
+
}, t('Cancel')), /*#__PURE__*/_react["default"].createElement(_reactstrap.Button, {
|
|
85
|
+
color: "primary",
|
|
86
|
+
onClick: onCreate
|
|
87
|
+
}, t('Create'))));
|
|
88
|
+
};
|
|
89
|
+
var _default = exports["default"] = CreatePageDialog;
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault")["default"];
|
|
4
|
+
Object.defineProperty(exports, "__esModule", {
|
|
5
|
+
value: true
|
|
6
|
+
});
|
|
7
|
+
exports.validateWikiPageTitle = exports.invalidTitlePattern = exports.createWikiPageAndInsertLink = void 0;
|
|
8
|
+
var _constants = require("../../../constants");
|
|
9
|
+
var _eventBus = _interopRequireDefault(require("../../../utils/event-bus"));
|
|
10
|
+
var _helpers = require("../../plugins/sdoc-link/helpers");
|
|
11
|
+
var _helpers2 = require("../../plugins/wiki-link/helpers");
|
|
12
|
+
var invalidTitlePattern = exports.invalidTitlePattern = /[\\/:*?"<>|]/;
|
|
13
|
+
var validateWikiPageTitle = exports.validateWikiPageTitle = function validateWikiPageTitle(title) {
|
|
14
|
+
var trimmedTitle = title.trim();
|
|
15
|
+
if (!trimmedTitle) {
|
|
16
|
+
return 'Please_enter_title';
|
|
17
|
+
}
|
|
18
|
+
if (invalidTitlePattern.test(trimmedTitle)) {
|
|
19
|
+
return 'Page_title_contains_invalid_characters';
|
|
20
|
+
}
|
|
21
|
+
return '';
|
|
22
|
+
};
|
|
23
|
+
var createWikiPageAndInsertLink = exports.createWikiPageAndInsertLink = function createWikiPageAndInsertLink(_ref) {
|
|
24
|
+
var editor = _ref.editor,
|
|
25
|
+
element = _ref.element,
|
|
26
|
+
title = _ref.title;
|
|
27
|
+
var createName = title.trim();
|
|
28
|
+
var eventBus = _eventBus["default"].getInstance();
|
|
29
|
+
var unsubscribe = eventBus.subscribe(_constants.INTERNAL_EVENT.WIKI_PAGE_ID_CREATED, function (_ref2) {
|
|
30
|
+
var pageId = _ref2.pageId,
|
|
31
|
+
pageName = _ref2.pageName,
|
|
32
|
+
wikiRepoId = _ref2.wikiRepoId;
|
|
33
|
+
(0, _helpers2.insertWikiPageLink)(editor, pageName, wikiRepoId, pageId);
|
|
34
|
+
unsubscribe();
|
|
35
|
+
});
|
|
36
|
+
(0, _helpers.removeTempInput)(editor, element);
|
|
37
|
+
eventBus.dispatch(_constants.INTERNAL_EVENT.CREATE_WIKI_PAGE, {
|
|
38
|
+
newFileName: createName,
|
|
39
|
+
insertWikiPageLink: _helpers2.insertWikiPageLink,
|
|
40
|
+
editor: editor,
|
|
41
|
+
noShowDialog: true,
|
|
42
|
+
noRedirect: true
|
|
43
|
+
});
|
|
44
|
+
};
|
|
@@ -21,6 +21,7 @@ var _eventBus = _interopRequireDefault(require("../../../utils/event-bus"));
|
|
|
21
21
|
var _localStorageUtils = _interopRequireDefault(require("../../../utils/local-storage-utils"));
|
|
22
22
|
var _helpers = require("../../plugins/sdoc-link/helpers");
|
|
23
23
|
var _helpers2 = require("../../plugins/wiki-link/helpers");
|
|
24
|
+
var _createPageDialog = _interopRequireDefault(require("./create-page-dialog"));
|
|
24
25
|
require("./style.css");
|
|
25
26
|
var WikiFileLinkInsertDialog = function WikiFileLinkInsertDialog(_ref) {
|
|
26
27
|
var editor = _ref.editor,
|
|
@@ -51,6 +52,10 @@ var WikiFileLinkInsertDialog = function WikiFileLinkInsertDialog(_ref) {
|
|
|
51
52
|
_useState0 = (0, _slicedToArray2["default"])(_useState9, 2),
|
|
52
53
|
hiddenMoreMenu = _useState0[0],
|
|
53
54
|
setHiddenMoreMenu = _useState0[1];
|
|
55
|
+
var _useState1 = (0, _react.useState)(false),
|
|
56
|
+
_useState10 = (0, _slicedToArray2["default"])(_useState1, 2),
|
|
57
|
+
isCreateDialogOpen = _useState10[0],
|
|
58
|
+
setIsCreateDialogOpen = _useState10[1];
|
|
54
59
|
var deleteInputAndInsertText = (0, _react.useCallback)(function () {
|
|
55
60
|
for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {
|
|
56
61
|
args[_key] = arguments[_key];
|
|
@@ -93,6 +98,7 @@ var WikiFileLinkInsertDialog = function WikiFileLinkInsertDialog(_ref) {
|
|
|
93
98
|
}, [editor]);
|
|
94
99
|
var onClick = (0, _react.useCallback)(function (e) {
|
|
95
100
|
var _historyFileWrapperRe, _historyFileWrapperRe2;
|
|
101
|
+
if (isCreateDialogOpen) return;
|
|
96
102
|
var isClickInside = (_historyFileWrapperRe = historyFileWrapperRef.current) === null || _historyFileWrapperRe === void 0 ? void 0 : (_historyFileWrapperRe2 = _historyFileWrapperRe.contains) === null || _historyFileWrapperRe2 === void 0 ? void 0 : _historyFileWrapperRe2.call(_historyFileWrapperRe, e.target);
|
|
97
103
|
if (isClickInside) return;
|
|
98
104
|
|
|
@@ -101,7 +107,7 @@ var WikiFileLinkInsertDialog = function WikiFileLinkInsertDialog(_ref) {
|
|
|
101
107
|
if (insertCollectorEl && insertCollectorEl.className === e.target.className) return;
|
|
102
108
|
deleteInputAndInsertText();
|
|
103
109
|
closeDialog();
|
|
104
|
-
}, [closeDialog, deleteInputAndInsertText]);
|
|
110
|
+
}, [closeDialog, deleteInputAndInsertText, isCreateDialogOpen]);
|
|
105
111
|
var onScroll = (0, _lodash["default"])(function () {
|
|
106
112
|
getPosition();
|
|
107
113
|
}, 100);
|
|
@@ -124,6 +130,7 @@ var WikiFileLinkInsertDialog = function WikiFileLinkInsertDialog(_ref) {
|
|
|
124
130
|
// eslint-disable-next-line react-hooks/exhaustive-deps
|
|
125
131
|
}, []);
|
|
126
132
|
var onKeydown = (0, _react.useCallback)(function (e) {
|
|
133
|
+
if (isCreateDialogOpen) return;
|
|
127
134
|
var key = e.key;
|
|
128
135
|
switch (key) {
|
|
129
136
|
case 'Escape':
|
|
@@ -143,7 +150,7 @@ var WikiFileLinkInsertDialog = function WikiFileLinkInsertDialog(_ref) {
|
|
|
143
150
|
default:
|
|
144
151
|
break;
|
|
145
152
|
}
|
|
146
|
-
}, [closeDialog, deleteInputAndInsertText]);
|
|
153
|
+
}, [closeDialog, deleteInputAndInsertText, isCreateDialogOpen]);
|
|
147
154
|
(0, _react.useEffect)(function () {
|
|
148
155
|
var sdocScrollContainer = document.getElementById('sdoc-scroll-container');
|
|
149
156
|
document.addEventListener('click', onClick);
|
|
@@ -213,26 +220,13 @@ var WikiFileLinkInsertDialog = function WikiFileLinkInsertDialog(_ref) {
|
|
|
213
220
|
setFiles(recentFiles);
|
|
214
221
|
setHiddenMoreMenu(true);
|
|
215
222
|
}, []);
|
|
216
|
-
var
|
|
217
|
-
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
(0, _helpers2.insertWikiPageLink)(editor, pageName, wikiRepoId, pageId);
|
|
221
|
-
};
|
|
222
|
-
var onCreateFile = (0, _react.useCallback)(function (e) {
|
|
223
|
+
var closeCreateDialog = (0, _react.useCallback)(function () {
|
|
224
|
+
setIsCreateDialogOpen(false);
|
|
225
|
+
}, []);
|
|
226
|
+
var onOpenCreateDialog = (0, _react.useCallback)(function (e) {
|
|
223
227
|
e.stopPropagation();
|
|
224
|
-
(
|
|
225
|
-
|
|
226
|
-
var unsubscribe = eventBus.subscribe(_constants.INTERNAL_EVENT.WIKI_PAGE_ID_CREATED, function (payload) {
|
|
227
|
-
createWikiLink(payload);
|
|
228
|
-
unsubscribe();
|
|
229
|
-
});
|
|
230
|
-
var createName = newFileName.trim() || t('New_page');
|
|
231
|
-
eventBus.dispatch(_constants.INTERNAL_EVENT.CREATE_WIKI_PAGE, {
|
|
232
|
-
newFileName: createName
|
|
233
|
-
});
|
|
234
|
-
// eslint-disable-next-line react-hooks/exhaustive-deps
|
|
235
|
-
}, [editor, element, newFileName, t]);
|
|
228
|
+
setIsCreateDialogOpen(true);
|
|
229
|
+
}, []);
|
|
236
230
|
var createFileTipDefault = (0, _react.useMemo)(function () {
|
|
237
231
|
return 'New_page';
|
|
238
232
|
}, []);
|
|
@@ -279,13 +273,19 @@ var WikiFileLinkInsertDialog = function WikiFileLinkInsertDialog(_ref) {
|
|
|
279
273
|
onClick: onShowMoreWiki
|
|
280
274
|
}, "...", t('More'))), /*#__PURE__*/_react["default"].createElement("div", {
|
|
281
275
|
className: "sdoc-history-files-add",
|
|
282
|
-
onClick:
|
|
276
|
+
onClick: onOpenCreateDialog
|
|
283
277
|
}, /*#__PURE__*/_react["default"].createElement("i", {
|
|
284
278
|
className: "sdocfont sdoc-append"
|
|
285
279
|
}), /*#__PURE__*/_react["default"].createElement("span", {
|
|
286
280
|
className: "new-file-name"
|
|
287
281
|
}, newFileName ? t('Create_file_name_sdoc', {
|
|
288
282
|
file_name_sdoc: createFileName
|
|
289
|
-
}) : t(createFileTipDefault)))
|
|
283
|
+
}) : t(createFileTipDefault))), /*#__PURE__*/_react["default"].createElement(_createPageDialog["default"], {
|
|
284
|
+
isOpen: isCreateDialogOpen,
|
|
285
|
+
initialTitle: newFileName.trim(),
|
|
286
|
+
editor: editor,
|
|
287
|
+
element: element,
|
|
288
|
+
onClose: closeCreateDialog
|
|
289
|
+
}));
|
|
290
290
|
};
|
|
291
291
|
var _default = exports["default"] = WikiFileLinkInsertDialog;
|
|
@@ -1,9 +1,11 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
|
|
3
|
+
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault")["default"];
|
|
3
4
|
Object.defineProperty(exports, "__esModule", {
|
|
4
5
|
value: true
|
|
5
6
|
});
|
|
6
7
|
exports.isMobile = exports.isMac = exports.isEnglish = exports.getMaximumCapacity = exports.getLocalStorageFiles = exports.getErrorMsg = void 0;
|
|
8
|
+
var _context = _interopRequireDefault(require("../context"));
|
|
7
9
|
var isEnglish = exports.isEnglish = function isEnglish(str) {
|
|
8
10
|
var pattern = new RegExp('[A-Za-z]+');
|
|
9
11
|
if (pattern.test(str)) {
|
|
@@ -29,7 +31,7 @@ var getMaximumCapacity = exports.getMaximumCapacity = function getMaximumCapacit
|
|
|
29
31
|
return newFiles;
|
|
30
32
|
};
|
|
31
33
|
var getLocalStorageFiles = exports.getLocalStorageFiles = function getLocalStorageFiles(files) {
|
|
32
|
-
var wikiRepoId =
|
|
34
|
+
var wikiRepoId = _context["default"].getSetting('wikiId');
|
|
33
35
|
var newFiles = [];
|
|
34
36
|
files.forEach(function (item) {
|
|
35
37
|
if ((item === null || item === void 0 ? void 0 : item.wikiRepoId) === wikiRepoId) {
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@seafile/sdoc-editor",
|
|
3
|
-
"version": "3.0.
|
|
3
|
+
"version": "3.0.208",
|
|
4
4
|
"main": "dist/index.js",
|
|
5
5
|
"scripts": {
|
|
6
6
|
"test": "jest",
|
|
@@ -72,5 +72,5 @@
|
|
|
72
72
|
"publishConfig": {
|
|
73
73
|
"access": "public"
|
|
74
74
|
},
|
|
75
|
-
"gitHead": "
|
|
75
|
+
"gitHead": "d8dfa2dbd360ce3d37de0f2f57e46e3c5d1d820c"
|
|
76
76
|
}
|