@seafile/seafile-sdoc-editor 2.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (65) hide show
  1. package/dist/assets/css/plugin-editor.css +7 -0
  2. package/dist/assets/css/simple-editor.css +9 -0
  3. package/dist/assets/css/simple-viewer.css +6 -0
  4. package/dist/assets/images/content-replaced.png +0 -0
  5. package/dist/assets/images/revision-avatar.png +0 -0
  6. package/dist/assets/images/sdoc-freezed.png +0 -0
  7. package/dist/components/doc-info/index.css +102 -0
  8. package/dist/components/doc-info/index.js +122 -0
  9. package/dist/components/doc-operations/collaborators-operation/collaborators-popover.css +74 -0
  10. package/dist/components/doc-operations/collaborators-operation/collaborators-popover.js +60 -0
  11. package/dist/components/doc-operations/collaborators-operation/index.js +104 -0
  12. package/dist/components/doc-operations/index.js +47 -0
  13. package/dist/components/doc-operations/more-operations.js +167 -0
  14. package/dist/components/doc-operations/plugins-operations.js +56 -0
  15. package/dist/components/doc-operations/presentation-operation/index.js +44 -0
  16. package/dist/components/doc-operations/revision-operations/changes-count/index.css +34 -0
  17. package/dist/components/doc-operations/revision-operations/changes-count/index.js +120 -0
  18. package/dist/components/doc-operations/revision-operations/index.js +256 -0
  19. package/dist/components/doc-operations/revision-operations/more-revision-operations/index.css +53 -0
  20. package/dist/components/doc-operations/revision-operations/more-revision-operations/index.js +73 -0
  21. package/dist/components/doc-operations/revision-operations/publish-revision/index.js +28 -0
  22. package/dist/components/doc-operations/revision-operations/revisions/index.css +16 -0
  23. package/dist/components/doc-operations/revision-operations/revisions/index.js +69 -0
  24. package/dist/components/doc-operations/revision-operations/revisions/revisions-dialog/index.css +126 -0
  25. package/dist/components/doc-operations/revision-operations/revisions/revisions-dialog/index.js +265 -0
  26. package/dist/components/doc-operations/revision-operations/revisions/revisions-dialog/revision-operation/index.css +34 -0
  27. package/dist/components/doc-operations/revision-operations/revisions/revisions-dialog/revision-operation/index.js +69 -0
  28. package/dist/components/doc-operations/revision-operations/view-changes/index.css +3 -0
  29. package/dist/components/doc-operations/revision-operations/view-changes/index.js +79 -0
  30. package/dist/components/doc-operations/share-operation/index.js +29 -0
  31. package/dist/components/doc-operations/style.css +93 -0
  32. package/dist/components/draft-dropdown/index.js +83 -0
  33. package/dist/components/draft-dropdown/style.css +43 -0
  34. package/dist/components/error-boundary/error-page.css +16 -0
  35. package/dist/components/error-boundary/error-page.js +49 -0
  36. package/dist/components/error-boundary/index.js +47 -0
  37. package/dist/components/modal-header/index.css +18 -0
  38. package/dist/components/modal-header/index.js +27 -0
  39. package/dist/components/modal-portal/index.js +41 -0
  40. package/dist/components/switch/index.css +14 -0
  41. package/dist/components/switch/index.js +35 -0
  42. package/dist/components/tip-dialog/index.css +48 -0
  43. package/dist/components/tip-dialog/index.js +117 -0
  44. package/dist/components/tip-message/index.js +189 -0
  45. package/dist/components/tip-message/style.css +15 -0
  46. package/dist/constants/index.js +46 -0
  47. package/dist/hooks/index.js +12 -0
  48. package/dist/hooks/use-document.js +90 -0
  49. package/dist/index.js +75 -0
  50. package/dist/layout/content.js +35 -0
  51. package/dist/layout/header.js +35 -0
  52. package/dist/layout/index.js +24 -0
  53. package/dist/layout/layout.css +32 -0
  54. package/dist/layout/layout.js +65 -0
  55. package/dist/model/index.js +13 -0
  56. package/dist/model/revision.js +42 -0
  57. package/dist/pages/diff-viewer.js +8 -0
  58. package/dist/pages/published-revision-viewer.js +100 -0
  59. package/dist/pages/sdoc-wiki-editor.js +57 -0
  60. package/dist/pages/simple-editor.js +162 -0
  61. package/dist/pages/simple-viewer.js +120 -0
  62. package/dist/pages/wiki-viewer.js +23 -0
  63. package/dist/utils/date-utils.js +92 -0
  64. package/dist/utils/index.js +48 -0
  65. package/package.json +48 -0
@@ -0,0 +1,265 @@
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 _toConsumableArray2 = _interopRequireDefault(require("@babel/runtime/helpers/esm/toConsumableArray"));
10
+ var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime/helpers/esm/slicedToArray"));
11
+ var _react = _interopRequireWildcard(require("react"));
12
+ var _reactI18next = require("react-i18next");
13
+ var _reactstrap = require("reactstrap");
14
+ var _sdocEditor = require("@seafile/sdoc-editor");
15
+ var _classnames = _interopRequireDefault(require("classnames"));
16
+ var _constants = require("../../../../../constants");
17
+ var _model = require("../../../../../model");
18
+ var _utils = require("../../../../../utils");
19
+ var _modalHeader = _interopRequireDefault(require("../../../../modal-header"));
20
+ var _tipDialog = _interopRequireDefault(require("../../../../tip-dialog"));
21
+ var _revisionOperation = _interopRequireDefault(require("./revision-operation"));
22
+ require("./index.css");
23
+ var RevisionsDialog = function RevisionsDialog(_ref) {
24
+ var _revisionListRef$curr;
25
+ var updateRevisionsCount = _ref.updateRevisionsCount,
26
+ toggle = _ref.toggle;
27
+ var revisionListRef = (0, _react.useRef)(null);
28
+ var _useTranslation = (0, _reactI18next.useTranslation)('sdoc-editor'),
29
+ t = _useTranslation.t;
30
+ var _useState = (0, _react.useState)(true),
31
+ _useState2 = (0, _slicedToArray2["default"])(_useState, 2),
32
+ isLoading = _useState2[0],
33
+ setLoading = _useState2[1];
34
+ var _useState3 = (0, _react.useState)([]),
35
+ _useState4 = (0, _slicedToArray2["default"])(_useState3, 2),
36
+ revisions = _useState4[0],
37
+ setRevisions = _useState4[1];
38
+ var _useState5 = (0, _react.useState)(1),
39
+ _useState6 = (0, _slicedToArray2["default"])(_useState5, 2),
40
+ page = _useState6[0],
41
+ setPage = _useState6[1];
42
+ var _useState7 = (0, _react.useState)(''),
43
+ _useState8 = (0, _slicedToArray2["default"])(_useState7, 2),
44
+ errorMessage = _useState8[0],
45
+ setErrorMessage = _useState8[1];
46
+ var _useState9 = (0, _react.useState)(true),
47
+ _useState0 = (0, _slicedToArray2["default"])(_useState9, 2),
48
+ hasMore = _useState0[0],
49
+ setHasMore = _useState0[1];
50
+ var perPage = 25;
51
+ var repoID = _sdocEditor.context.getSetting('repoID');
52
+ var siteRoot = _sdocEditor.context.getSetting('siteRoot');
53
+ var _useState1 = (0, _react.useState)(''),
54
+ _useState10 = (0, _slicedToArray2["default"])(_useState1, 2),
55
+ activeRevisionId = _useState10[0],
56
+ setActiveRevision = _useState10[1];
57
+ var _useState11 = (0, _react.useState)(''),
58
+ _useState12 = (0, _slicedToArray2["default"])(_useState11, 2),
59
+ operatingRevisionId = _useState12[0],
60
+ setOperatingRevision = _useState12[1];
61
+ var _useState13 = (0, _react.useState)(false),
62
+ _useState14 = (0, _slicedToArray2["default"])(_useState13, 2),
63
+ showDeleteTipDialog = _useState14[0],
64
+ setShowDeleteTipDialog = _useState14[1];
65
+
66
+ // did mount
67
+ (0, _react.useEffect)(function () {
68
+ listRevisions();
69
+
70
+ // eslint-disable-next-line react-hooks/exhaustive-deps
71
+ }, []);
72
+ var listRevisions = (0, _react.useCallback)(function () {
73
+ _sdocEditor.context.getSdocRevisions(page, perPage).then(function (res) {
74
+ var addedRevisions = res.data.revisions.map(function (revision) {
75
+ return new _model.Revision(revision);
76
+ });
77
+ setLoading(false);
78
+ updateRevisionsCount(res.data.count);
79
+ var newRevisions = [].concat((0, _toConsumableArray2["default"])(revisions), (0, _toConsumableArray2["default"])(addedRevisions));
80
+ setRevisions(newRevisions);
81
+ if (newRevisions.length < res.data.count) {
82
+ setPage(page + 1);
83
+ } else {
84
+ setHasMore(false);
85
+ }
86
+ })["catch"](function (error) {
87
+ var errorMessage = (0, _utils.getErrorMsg)(error);
88
+ if (page === 1) {
89
+ setErrorMessage(errorMessage);
90
+ } else {
91
+ _sdocEditor.toaster.danger(t(errorMessage));
92
+ }
93
+ setLoading(false);
94
+ });
95
+
96
+ // eslint-disable-next-line react-hooks/exhaustive-deps
97
+ }, [revisions, page, perPage]);
98
+ var openRevision = (0, _react.useCallback)(function (event, revisionId) {
99
+ event.stopPropagation();
100
+ event.nativeEvent && event.nativeEvent.stopImmediatePropagation && event.nativeEvent.stopImmediatePropagation();
101
+ if (event.target.className.includes('sdoc-revision-operation-toggle')) return;
102
+ var url = "".concat(siteRoot, "lib/").concat(repoID, "/revisions/").concat(revisionId, "/");
103
+ window.open(url, '_blank');
104
+
105
+ // eslint-disable-next-line react-hooks/exhaustive-deps
106
+ }, []);
107
+ var onScroll = (0, _react.useCallback)(function (event) {
108
+ var _event$target = event.target,
109
+ scrollTop = _event$target.scrollTop,
110
+ clientHeight = _event$target.clientHeight;
111
+ var _ref2 = revisionListRef.current || {
112
+ clientHeight: 0
113
+ },
114
+ revisionListHeight = _ref2.clientHeight;
115
+ if (isLoading) return;
116
+ if (!hasMore) return;
117
+ if (scrollTop + clientHeight + 1 >= revisionListHeight) {
118
+ setLoading(true);
119
+ listRevisions();
120
+ }
121
+
122
+ // eslint-disable-next-line react-hooks/exhaustive-deps
123
+ }, [(_revisionListRef$curr = revisionListRef.current) === null || _revisionListRef$curr === void 0 ? void 0 : _revisionListRef$curr.clientHeight, isLoading, hasMore]);
124
+ var onDeleteOtherRevision = (0, _react.useCallback)(function () {
125
+ setShowDeleteTipDialog(true);
126
+ }, []);
127
+ var closeDeleteTipDialog = (0, _react.useCallback)(function () {
128
+ setOperatingRevision('');
129
+ setShowDeleteTipDialog(false);
130
+ }, []);
131
+ var deleteOtherRevision = (0, _react.useCallback)(function () {
132
+ var revisionIndex = revisions.findIndex(function (revision) {
133
+ return revision.id === operatingRevisionId;
134
+ });
135
+ if (revisionIndex === -1) {
136
+ closeDeleteTipDialog();
137
+ return;
138
+ }
139
+ var revision = revisions[revisionIndex];
140
+ _sdocEditor.context.deleteSdocOtherRevision(revision.id).then(function (res) {
141
+ var newRevisions = revisions.slice(0);
142
+ newRevisions.splice(revisionIndex, 1);
143
+ updateRevisionsCount(newRevisions.length);
144
+ setRevisions(newRevisions);
145
+ closeDeleteTipDialog();
146
+ _sdocEditor.toaster.success(t('Revision_deleted'));
147
+ })["catch"](function (error) {
148
+ var errorMessage = (0, _utils.getErrorMsg)(error);
149
+ _sdocEditor.toaster.danger(t(errorMessage));
150
+ });
151
+
152
+ // eslint-disable-next-line react-hooks/exhaustive-deps
153
+ }, [operatingRevisionId, revisions, closeDeleteTipDialog]);
154
+ var renderContent = (0, _react.useCallback)(function () {
155
+ if (page === 1 && isLoading) {
156
+ return /*#__PURE__*/_react["default"].createElement("div", {
157
+ className: "sdoc-revisions-container loading"
158
+ }, /*#__PURE__*/_react["default"].createElement(_sdocEditor.FileLoading, null));
159
+ }
160
+ if (page === 1 && errorMessage) {
161
+ return /*#__PURE__*/_react["default"].createElement("div", {
162
+ className: "sdoc-revisions-container error"
163
+ }, t(errorMessage));
164
+ }
165
+ return /*#__PURE__*/_react["default"].createElement("div", {
166
+ className: "sdoc-revisions-container"
167
+ }, /*#__PURE__*/_react["default"].createElement("div", {
168
+ className: "sdoc-revisions-header"
169
+ }, /*#__PURE__*/_react["default"].createElement("div", {
170
+ className: "sdoc-revision-name-header",
171
+ style: {
172
+ width: '40%'
173
+ }
174
+ }, t('ID')), /*#__PURE__*/_react["default"].createElement("div", {
175
+ className: "sdoc-revision-user-header",
176
+ style: {
177
+ width: '25%'
178
+ }
179
+ }, t('Creator')), /*#__PURE__*/_react["default"].createElement("div", {
180
+ className: "sdoc-revision-time-header",
181
+ style: {
182
+ width: '30%'
183
+ }
184
+ }, t('Created_time')), /*#__PURE__*/_react["default"].createElement("div", {
185
+ className: "sdoc-revision-time-header",
186
+ style: {
187
+ width: '5%'
188
+ }
189
+ })), /*#__PURE__*/_react["default"].createElement("div", {
190
+ className: "sdoc-revisions-content",
191
+ onScroll: onScroll
192
+ }, /*#__PURE__*/_react["default"].createElement("div", {
193
+ className: "sdoc-revisions-list",
194
+ ref: revisionListRef
195
+ }, revisions.map(function (revision) {
196
+ var revisionId = revision.id;
197
+ var isOperating = operatingRevisionId === revisionId;
198
+ var isActive = activeRevisionId === revisionId;
199
+ return /*#__PURE__*/_react["default"].createElement("div", {
200
+ key: revision.id,
201
+ className: (0, _classnames["default"])('sdoc-revision', {
202
+ 'operating': isOperating
203
+ }),
204
+ onClick: function onClick(event) {
205
+ return openRevision(event, revisionId);
206
+ },
207
+ onMouseEnter: function onMouseEnter() {
208
+ return setActiveRevision(revisionId);
209
+ },
210
+ onMouseLeave: function onMouseLeave() {
211
+ return setActiveRevision('');
212
+ }
213
+ }, /*#__PURE__*/_react["default"].createElement("div", {
214
+ className: "sdoc-revision-name",
215
+ style: {
216
+ width: '40%'
217
+ }
218
+ }, /*#__PURE__*/_react["default"].createElement("div", {
219
+ className: "sdoc-revision-name-content"
220
+ }, t('Revision') + ' ' + revisionId)), /*#__PURE__*/_react["default"].createElement("div", {
221
+ className: "sdoc-revision-user",
222
+ style: {
223
+ width: '25%'
224
+ }
225
+ }, revision.nickname), /*#__PURE__*/_react["default"].createElement("div", {
226
+ className: "sdoc-revision-time",
227
+ style: {
228
+ width: '30%'
229
+ }
230
+ }, revision.createdTime), /*#__PURE__*/_react["default"].createElement("div", {
231
+ className: "sdoc-revision-operations",
232
+ style: {
233
+ width: '5%'
234
+ }
235
+ }, /*#__PURE__*/_react["default"].createElement(_revisionOperation["default"], {
236
+ isActive: isActive,
237
+ isOperating: isOperating,
238
+ revision: revision,
239
+ updateOperatingRevision: setOperatingRevision,
240
+ onDeleteOtherRevision: onDeleteOtherRevision
241
+ })));
242
+ }), isLoading && /*#__PURE__*/_react["default"].createElement("div", {
243
+ className: "sdoc-revision loading"
244
+ }, /*#__PURE__*/_react["default"].createElement(_sdocEditor.FileLoading, null)))));
245
+
246
+ // eslint-disable-next-line react-hooks/exhaustive-deps
247
+ }, [page, revisions, isLoading, errorMessage, activeRevisionId, operatingRevisionId]);
248
+ return /*#__PURE__*/_react["default"].createElement(_react["default"].Fragment, null, /*#__PURE__*/_react["default"].createElement(_reactstrap.Modal, {
249
+ isOpen: true,
250
+ toggle: toggle,
251
+ className: "revisions-dialog"
252
+ }, /*#__PURE__*/_react["default"].createElement(_modalHeader["default"], {
253
+ toggle: toggle
254
+ }, t('Revision')), /*#__PURE__*/_react["default"].createElement(_reactstrap.ModalBody, {
255
+ className: "revisions-body"
256
+ }, renderContent())), showDeleteTipDialog && /*#__PURE__*/_react["default"].createElement(_tipDialog["default"], {
257
+ tipType: _constants.TIP_TYPE.DELETE_REVISION,
258
+ onSubmit: deleteOtherRevision,
259
+ onClose: closeDeleteTipDialog,
260
+ zIndex: 1071
261
+ }, t(_constants.TIP_CONTENT[_constants.TIP_TYPE.DELETE_REVISION], {
262
+ content: "".concat(t('revision'), " ").concat(operatingRevisionId)
263
+ })));
264
+ };
265
+ var _default = exports["default"] = RevisionsDialog;
@@ -0,0 +1,34 @@
1
+ .sdoc-revision-operation-toggle-container {
2
+ height: 24px;
3
+ width: 24px;
4
+ display: flex;
5
+ align-items: center;
6
+ justify-content: center;
7
+ border-radius: 2px;
8
+ }
9
+
10
+ .sdoc-revision-operation-toggle-container:hover {
11
+ background-color: #E5E5E5;
12
+ cursor: pointer;
13
+ }
14
+
15
+ .sdoc-revision-operation-toggle {
16
+ display: none;
17
+ font-size: 16px;
18
+ color: #999;
19
+ }
20
+
21
+ .revisions-body .sdoc-revision:hover .sdoc-revision-operation-toggle,
22
+ .revisions-dialog .revisions-body .sdoc-revision.operating .sdoc-revision-operation-toggle {
23
+ display: inline-block;
24
+ }
25
+
26
+ .sdoc-revision-operation-toggle:hover {
27
+ cursor: pointer;
28
+ color: #333;
29
+ }
30
+
31
+ .sdoc-revision-menu-popover .popover {
32
+ margin-top: 0;
33
+ }
34
+
@@ -0,0 +1,69 @@
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 _reactstrap = require("reactstrap");
12
+ var _sdocEditor = require("@seafile/sdoc-editor");
13
+ require("./index.css");
14
+ var RevisionOperation = function RevisionOperation(_ref) {
15
+ var isActive = _ref.isActive,
16
+ isOperating = _ref.isOperating,
17
+ revision = _ref.revision,
18
+ updateOperatingRevision = _ref.updateOperatingRevision,
19
+ onDeleteOtherRevision = _ref.onDeleteOtherRevision;
20
+ var targetId = "sdoc-revision-".concat(revision.id);
21
+ var popoverRef = (0, _react.useRef)(null);
22
+ var _useState = (0, _react.useState)(false),
23
+ _useState2 = (0, _slicedToArray2["default"])(_useState, 2),
24
+ isPopoverShow = _useState2[0],
25
+ setPopoverShow = _useState2[1];
26
+ var toggle = (0, _react.useCallback)(function () {
27
+ popoverRef.current.toggle();
28
+ var nextPopoverShow = !isPopoverShow;
29
+ setPopoverShow(nextPopoverShow);
30
+ updateOperatingRevision(nextPopoverShow ? revision.id : '');
31
+ }, [isPopoverShow, updateOperatingRevision, revision]);
32
+ var deleteRevision = (0, _react.useCallback)(function (event) {
33
+ event.stopPropagation();
34
+ event.nativeEvent && event.nativeEvent.stopImmediatePropagation && event.nativeEvent.stopImmediatePropagation();
35
+ onDeleteOtherRevision();
36
+ popoverRef.current.toggle();
37
+ }, [onDeleteOtherRevision]);
38
+ if (!isActive && !isOperating) return null;
39
+ return /*#__PURE__*/_react["default"].createElement("div", {
40
+ className: "sdoc-revision-operation-toggle-container"
41
+ }, /*#__PURE__*/_react["default"].createElement("i", {
42
+ className: "sdocfont sdoc-more sdoc-revision-operation-toggle",
43
+ id: targetId
44
+ }), /*#__PURE__*/_react["default"].createElement(_reactstrap.UncontrolledPopover, {
45
+ target: targetId,
46
+ className: "sdoc-menu-popover sdoc-dropdown-menu sdoc-revision-menu-popover",
47
+ trigger: "legacy",
48
+ placement: "bottom-start",
49
+ hideArrow: true,
50
+ toggle: toggle,
51
+ fade: false,
52
+ modifiers: [{
53
+ name: 'preventOverflow',
54
+ options: {
55
+ boundariesElement: document.body
56
+ }
57
+ }],
58
+ ref: popoverRef
59
+ }, /*#__PURE__*/_react["default"].createElement("div", {
60
+ className: "sdoc-dropdown-menu-container"
61
+ }, /*#__PURE__*/_react["default"].createElement(_sdocEditor.DropdownMenuItem, {
62
+ onClick: deleteRevision,
63
+ menuConfig: {
64
+ iconClass: 'sdocfont sdoc-delete',
65
+ text: 'Delete'
66
+ }
67
+ }))));
68
+ };
69
+ var _default = exports["default"] = RevisionOperation;
@@ -0,0 +1,3 @@
1
+ .sdoc-toggle-revision-changes .custom-switch {
2
+ padding-left: 0;
3
+ }
@@ -0,0 +1,79 @@
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"] = exports.REVISION_DIFF_VALUE = exports.REVISION_DIFF_KEY = void 0;
9
+ var _createForOfIteratorHelper2 = _interopRequireDefault(require("@babel/runtime/helpers/esm/createForOfIteratorHelper"));
10
+ var _react = _interopRequireWildcard(require("react"));
11
+ var _reactI18next = require("react-i18next");
12
+ var _sdocEditor = require("@seafile/sdoc-editor");
13
+ var _switch = _interopRequireDefault(require("../../../switch"));
14
+ require("./index.css");
15
+ var REVISION_DIFF_KEY = exports.REVISION_DIFF_KEY = 'diff';
16
+ var REVISION_DIFF_VALUE = exports.REVISION_DIFF_VALUE = '1';
17
+ var ViewChanges = function ViewChanges(_ref) {
18
+ var isShowChanges = _ref.isShowChanges,
19
+ propsOnViewChangesToggle = _ref.onViewChangesToggle;
20
+ var _useTranslation = (0, _reactI18next.useTranslation)('sdoc-editor'),
21
+ t = _useTranslation.t;
22
+ (0, _react.useEffect)(function () {
23
+ var url = new URL(window.location.href);
24
+ var searchParams = new URLSearchParams(url.search);
25
+ if (!searchParams.has(REVISION_DIFF_KEY)) return;
26
+ var firstLoadValue = searchParams.get(REVISION_DIFF_KEY);
27
+ if (firstLoadValue === REVISION_DIFF_VALUE) {
28
+ propsOnViewChangesToggle(true);
29
+ }
30
+ // eslint-disable-next-line react-hooks/exhaustive-deps
31
+ }, []);
32
+ var onViewChangesToggle = (0, _react.useCallback)(function () {
33
+ var nextIsShowChanges = !isShowChanges;
34
+ var url = new URL(window.location.href);
35
+ var searchParams = new URLSearchParams(url.search);
36
+ var newParamsString = '';
37
+ var _iterator = (0, _createForOfIteratorHelper2["default"])(searchParams.entries()),
38
+ _step;
39
+ try {
40
+ for (_iterator.s(); !(_step = _iterator.n()).done;) {
41
+ var item = _step.value;
42
+ if (item[0] !== REVISION_DIFF_KEY) {
43
+ if (newParamsString) {
44
+ newParamsString = newParamsString + "&".concat(item[0], "=").concat(item[1]);
45
+ } else {
46
+ newParamsString = "".concat(item[0], "=").concat(item[1]);
47
+ }
48
+ }
49
+ }
50
+ } catch (err) {
51
+ _iterator.e(err);
52
+ } finally {
53
+ _iterator.f();
54
+ }
55
+ if (!searchParams.has(REVISION_DIFF_KEY) && nextIsShowChanges) {
56
+ if (newParamsString) {
57
+ newParamsString = newParamsString + "&".concat(REVISION_DIFF_KEY, "=").concat(REVISION_DIFF_VALUE);
58
+ } else {
59
+ newParamsString = "".concat(REVISION_DIFF_KEY, "=").concat(REVISION_DIFF_VALUE);
60
+ }
61
+ }
62
+ var validPathName = url.pathname.endsWith('/') ? url.pathname : url.pathname + '/';
63
+ var newURL = "".concat(url.origin).concat(validPathName).concat(newParamsString ? '?' + newParamsString : '');
64
+ window.history.replaceState(null, null, newURL);
65
+ propsOnViewChangesToggle(nextIsShowChanges);
66
+ // eslint-disable-next-line react-hooks/exhaustive-deps
67
+ }, [isShowChanges, propsOnViewChangesToggle]);
68
+ return /*#__PURE__*/_react["default"].createElement(_react["default"].Fragment, null, /*#__PURE__*/_react["default"].createElement("div", {
69
+ id: "sdoc-toggle-revision-changes-container",
70
+ className: "h-100 ml-4 d-flex align-items-center "
71
+ }, /*#__PURE__*/_react["default"].createElement(_switch["default"], {
72
+ checked: isShowChanges,
73
+ onChange: onViewChangesToggle,
74
+ className: "sdoc-toggle-revision-changes d-flex align-items-center"
75
+ })), /*#__PURE__*/_react["default"].createElement(_sdocEditor.Tooltip, {
76
+ target: "sdoc-toggle-revision-changes-container"
77
+ }, t('View_changes')));
78
+ };
79
+ var _default = exports["default"] = ViewChanges;
@@ -0,0 +1,29 @@
1
+ "use strict";
2
+
3
+ var _interopRequireWildcard = require("@babel/runtime/helpers/interopRequireWildcard")["default"];
4
+ Object.defineProperty(exports, "__esModule", {
5
+ value: true
6
+ });
7
+ exports["default"] = ShareOperation;
8
+ var _react = _interopRequireWildcard(require("react"));
9
+ var _reactI18next = require("react-i18next");
10
+ var _sdocEditor = require("@seafile/sdoc-editor");
11
+ var _constants = require("../../../constants");
12
+ function ShareOperation() {
13
+ var _useTranslation = (0, _reactI18next.useTranslation)('sdoc-editor'),
14
+ t = _useTranslation.t;
15
+ var id = 'sdoc-share';
16
+ var onShareToggle = (0, _react.useCallback)(function () {
17
+ var eventBus = _sdocEditor.EventBus.getInstance();
18
+ eventBus.dispatch(_constants.EXTERNAL_EVENT.SHARE_SDOC);
19
+ }, []);
20
+ return /*#__PURE__*/_react["default"].createElement("span", {
21
+ className: "op-item",
22
+ id: id,
23
+ onClick: onShareToggle
24
+ }, /*#__PURE__*/_react["default"].createElement("i", {
25
+ className: "sdocfont sdoc-share"
26
+ }), /*#__PURE__*/_react["default"].createElement(_sdocEditor.Tooltip, {
27
+ target: id
28
+ }, t('Share')));
29
+ }
@@ -0,0 +1,93 @@
1
+ .doc-ops {
2
+ display: flex;
3
+ align-items: center;
4
+ }
5
+
6
+ .doc-ops .op-item {
7
+ margin-left: 10px;
8
+ display: flex;
9
+ align-items: center;
10
+ justify-content: center;
11
+ position: relative;
12
+ cursor: pointer;
13
+ width: 28px;
14
+ height: 28px;
15
+ border-radius: 3px;
16
+ }
17
+
18
+ .doc-ops .collaborators-op-item {
19
+ width: 40px;
20
+ }
21
+
22
+ .doc-ops .op-item .sdocfont {
23
+ font-size: 16px;
24
+ color: #666;
25
+ cursor: pointer;
26
+ }
27
+
28
+ .doc-ops .op-item:hover {
29
+ background-color: #EFEFEF;
30
+ cursor: pointer;
31
+ }
32
+
33
+ .doc-ops .popover-wrapper {
34
+ width: 300px;
35
+ }
36
+
37
+ .sdoc-dropdown-print-container {
38
+ display: flex;
39
+ justify-content: space-between;
40
+ align-items: center;
41
+ width: 100%;
42
+ }
43
+
44
+ .sdoc-operator-folder .sdoc-dropdown-menu {
45
+ padding: 8px 0;
46
+ }
47
+
48
+ .sdoc-operator-folder .sdoc-dropdown-menu .sdoc-dropdown-menu-item {
49
+ padding: 4px 16px;
50
+ }
51
+
52
+ .sdoc-operator-folder .sdoc-dropdown-menu .sdoc-operator-folder-divider {
53
+ margin: 8px 0;
54
+ border-top: 1px solid #e6e9ed;
55
+ height: 1px;
56
+ width: 100%;
57
+ }
58
+
59
+ .sdoc-operator-folder .sdoc-dropdown-menu .sdoc-dropdown-menu-item .sdoc-full-width-mode-wrapper .custom-switch {
60
+ padding-left: 0px;
61
+ width: 100%;
62
+ justify-content: space-between;
63
+ cursor: pointer;
64
+ }
65
+
66
+ .sdoc-operator-folder .sdoc-dropdown-menu .sdoc-dropdown-menu-item .sdoc-full-width-mode-wrapper .custom-switch .custom-switch-description {
67
+ margin-left: 0px;
68
+ color: unset;
69
+ }
70
+
71
+ .sdoc-operator-folder .sdoc-dropdown-menu .sdoc-dropdown-menu-item .sdoc-full-width-mode-wrapper .custom-switch .custom-switch-indicator {
72
+ width: 22px;
73
+ height: 12px;
74
+ border-radius: 6px;
75
+ }
76
+
77
+ .sdoc-operator-folder .sdoc-dropdown-menu .sdoc-dropdown-menu-item .sdoc-full-width-mode-wrapper .custom-switch .custom-switch-indicator:before {
78
+ height: 8px;
79
+ width: 8px;
80
+ }
81
+
82
+ .sdoc-operator-folder .sdoc-dropdown-menu .sdoc-dropdown-menu-item .sdoc-full-width-mode-wrapper .custom-switch .custom-switch-input:checked ~ .custom-switch-indicator:before {
83
+ left: 12px;
84
+ }
85
+
86
+ .sdoc-operator-folder .sdoc-dropdown-menu .sdoc-dropdown-menu-item .sdoc-full-width-mode-wrapper .custom-switch .custom-switch-input:checked~.custom-switch-indicator {
87
+ background: #ff8000;
88
+ }
89
+
90
+ .sdoc-operator-folder .sdoc-dropdown-menu .sdoc-dropdown-menu-item .sdoc-full-width-mode-wrapper .custom-switch .custom-switch-input:focus~.custom-switch-indicator {
91
+ box-shadow: 0 0 0 2px rgba(255, 128, 0, .25);
92
+ border-color: #ff8000;
93
+ }
@@ -0,0 +1,83 @@
1
+ "use strict";
2
+
3
+ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault")["default"];
4
+ Object.defineProperty(exports, "__esModule", {
5
+ value: true
6
+ });
7
+ exports["default"] = void 0;
8
+ var _classCallCheck2 = _interopRequireDefault(require("@babel/runtime/helpers/esm/classCallCheck"));
9
+ var _createClass2 = _interopRequireDefault(require("@babel/runtime/helpers/esm/createClass"));
10
+ var _callSuper2 = _interopRequireDefault(require("@babel/runtime/helpers/esm/callSuper"));
11
+ var _inherits2 = _interopRequireDefault(require("@babel/runtime/helpers/esm/inherits"));
12
+ var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/esm/defineProperty"));
13
+ var _react = _interopRequireDefault(require("react"));
14
+ var _reactI18next = require("react-i18next");
15
+ var _sdocEditor = require("@seafile/sdoc-editor");
16
+ var _constants = require("../../constants");
17
+ require("./style.css");
18
+ var DraftDropdownMenu = /*#__PURE__*/function (_React$Component) {
19
+ function DraftDropdownMenu(props) {
20
+ var _this;
21
+ (0, _classCallCheck2["default"])(this, DraftDropdownMenu);
22
+ _this = (0, _callSuper2["default"])(this, DraftDropdownMenu, [props]);
23
+ (0, _defineProperty2["default"])(_this, "registerEventHandler", function () {
24
+ document.addEventListener('click', _this.onHideDraftDropdownMenu);
25
+ });
26
+ (0, _defineProperty2["default"])(_this, "unregisterEventHandler", function () {
27
+ document.removeEventListener('click', _this.onHideDraftDropdownMenu);
28
+ });
29
+ (0, _defineProperty2["default"])(_this, "onHideDraftDropdownMenu", function () {
30
+ _this.setState({
31
+ isDropdownMenuOpen: false
32
+ }, function () {
33
+ _this.unregisterEventHandler();
34
+ });
35
+ });
36
+ (0, _defineProperty2["default"])(_this, "onToggleClick", function (event) {
37
+ event.stopPropagation();
38
+ event.nativeEvent.stopImmediatePropagation();
39
+ var isDropdownMenuOpen = !_this.state.isDropdownMenuOpen;
40
+ if (isDropdownMenuOpen) {
41
+ _this.setState({
42
+ isDropdownMenuOpen: isDropdownMenuOpen
43
+ }, function () {
44
+ _this.registerEventHandler();
45
+ });
46
+ } else {
47
+ _this.setState({
48
+ isDropdownMenuOpen: isDropdownMenuOpen
49
+ }, function () {
50
+ _this.unregisterEventHandler();
51
+ });
52
+ }
53
+ });
54
+ (0, _defineProperty2["default"])(_this, "unmark", function () {
55
+ var eventBus = _sdocEditor.EventBus.getInstance();
56
+ eventBus.dispatch(_constants.EXTERNAL_EVENT.UNMARK_AS_DRAFT);
57
+ });
58
+ _this.state = {
59
+ isDropdownMenuOpen: false
60
+ };
61
+ return _this;
62
+ }
63
+ (0, _inherits2["default"])(DraftDropdownMenu, _React$Component);
64
+ return (0, _createClass2["default"])(DraftDropdownMenu, [{
65
+ key: "render",
66
+ value: function render() {
67
+ var isDropdownMenuOpen = this.state.isDropdownMenuOpen;
68
+ var t = this.props.t;
69
+ return /*#__PURE__*/_react["default"].createElement("div", {
70
+ className: "sdoc-draft-menu"
71
+ }, /*#__PURE__*/_react["default"].createElement("span", {
72
+ className: "draft-toggle sdoc-draft-identifier",
73
+ onClick: this.onToggleClick
74
+ }, t('Draft')), isDropdownMenuOpen && /*#__PURE__*/_react["default"].createElement("ul", {
75
+ className: "draft-popover list-unstyled m-0"
76
+ }, /*#__PURE__*/_react["default"].createElement("li", {
77
+ className: "draft-menu-item",
78
+ onClick: this.unmark
79
+ }, t('Unmark_as_draft'))));
80
+ }
81
+ }]);
82
+ }(_react["default"].Component);
83
+ var _default = exports["default"] = (0, _reactI18next.withTranslation)('sdoc-editor')(DraftDropdownMenu);