@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.
- package/dist/assets/css/plugin-editor.css +7 -0
- package/dist/assets/css/simple-editor.css +9 -0
- package/dist/assets/css/simple-viewer.css +6 -0
- package/dist/assets/images/content-replaced.png +0 -0
- package/dist/assets/images/revision-avatar.png +0 -0
- package/dist/assets/images/sdoc-freezed.png +0 -0
- package/dist/components/doc-info/index.css +102 -0
- package/dist/components/doc-info/index.js +122 -0
- package/dist/components/doc-operations/collaborators-operation/collaborators-popover.css +74 -0
- package/dist/components/doc-operations/collaborators-operation/collaborators-popover.js +60 -0
- package/dist/components/doc-operations/collaborators-operation/index.js +104 -0
- package/dist/components/doc-operations/index.js +47 -0
- package/dist/components/doc-operations/more-operations.js +167 -0
- package/dist/components/doc-operations/plugins-operations.js +56 -0
- package/dist/components/doc-operations/presentation-operation/index.js +44 -0
- package/dist/components/doc-operations/revision-operations/changes-count/index.css +34 -0
- package/dist/components/doc-operations/revision-operations/changes-count/index.js +120 -0
- package/dist/components/doc-operations/revision-operations/index.js +256 -0
- package/dist/components/doc-operations/revision-operations/more-revision-operations/index.css +53 -0
- package/dist/components/doc-operations/revision-operations/more-revision-operations/index.js +73 -0
- package/dist/components/doc-operations/revision-operations/publish-revision/index.js +28 -0
- package/dist/components/doc-operations/revision-operations/revisions/index.css +16 -0
- package/dist/components/doc-operations/revision-operations/revisions/index.js +69 -0
- package/dist/components/doc-operations/revision-operations/revisions/revisions-dialog/index.css +126 -0
- package/dist/components/doc-operations/revision-operations/revisions/revisions-dialog/index.js +265 -0
- package/dist/components/doc-operations/revision-operations/revisions/revisions-dialog/revision-operation/index.css +34 -0
- package/dist/components/doc-operations/revision-operations/revisions/revisions-dialog/revision-operation/index.js +69 -0
- package/dist/components/doc-operations/revision-operations/view-changes/index.css +3 -0
- package/dist/components/doc-operations/revision-operations/view-changes/index.js +79 -0
- package/dist/components/doc-operations/share-operation/index.js +29 -0
- package/dist/components/doc-operations/style.css +93 -0
- package/dist/components/draft-dropdown/index.js +83 -0
- package/dist/components/draft-dropdown/style.css +43 -0
- package/dist/components/error-boundary/error-page.css +16 -0
- package/dist/components/error-boundary/error-page.js +49 -0
- package/dist/components/error-boundary/index.js +47 -0
- package/dist/components/modal-header/index.css +18 -0
- package/dist/components/modal-header/index.js +27 -0
- package/dist/components/modal-portal/index.js +41 -0
- package/dist/components/switch/index.css +14 -0
- package/dist/components/switch/index.js +35 -0
- package/dist/components/tip-dialog/index.css +48 -0
- package/dist/components/tip-dialog/index.js +117 -0
- package/dist/components/tip-message/index.js +189 -0
- package/dist/components/tip-message/style.css +15 -0
- package/dist/constants/index.js +46 -0
- package/dist/hooks/index.js +12 -0
- package/dist/hooks/use-document.js +90 -0
- package/dist/index.js +75 -0
- package/dist/layout/content.js +35 -0
- package/dist/layout/header.js +35 -0
- package/dist/layout/index.js +24 -0
- package/dist/layout/layout.css +32 -0
- package/dist/layout/layout.js +65 -0
- package/dist/model/index.js +13 -0
- package/dist/model/revision.js +42 -0
- package/dist/pages/diff-viewer.js +8 -0
- package/dist/pages/published-revision-viewer.js +100 -0
- package/dist/pages/sdoc-wiki-editor.js +57 -0
- package/dist/pages/simple-editor.js +162 -0
- package/dist/pages/simple-viewer.js +120 -0
- package/dist/pages/wiki-viewer.js +23 -0
- package/dist/utils/date-utils.js +92 -0
- package/dist/utils/index.js +48 -0
- package/package.json +48 -0
|
@@ -0,0 +1,167 @@
|
|
|
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 _printJs = _interopRequireDefault(require("@seafile/print-js"));
|
|
14
|
+
var _sdocEditor = require("@seafile/sdoc-editor");
|
|
15
|
+
var _constants = require("../../constants");
|
|
16
|
+
var _switch = _interopRequireDefault(require("../switch"));
|
|
17
|
+
var MoreOperations = function MoreOperations(_ref) {
|
|
18
|
+
var isStarred = _ref.isStarred,
|
|
19
|
+
t = _ref.t;
|
|
20
|
+
var _useState = (0, _react.useState)(false),
|
|
21
|
+
_useState2 = (0, _slicedToArray2["default"])(_useState, 2),
|
|
22
|
+
isDropdownOpen = _useState2[0],
|
|
23
|
+
setIsDropdownOpen = _useState2[1];
|
|
24
|
+
var _useState3 = (0, _react.useState)(_sdocEditor.LocalStorage.getItem(_sdocEditor.FULL_WIDTH_MODE)),
|
|
25
|
+
_useState4 = (0, _slicedToArray2["default"])(_useState3, 2),
|
|
26
|
+
isFullWidthMode = _useState4[0],
|
|
27
|
+
setIsFullWidthMode = _useState4[1];
|
|
28
|
+
var parentFolderURL = _sdocEditor.context.getSetting('parentFolderURL');
|
|
29
|
+
var isPro = _sdocEditor.context.getSetting('isPro');
|
|
30
|
+
var isFreezed = _sdocEditor.context.getSetting('isFreezed');
|
|
31
|
+
var docPerm = _sdocEditor.context.getSetting('docPerm');
|
|
32
|
+
var historyURL = _sdocEditor.context.getSetting('historyURL');
|
|
33
|
+
var isSdocRevision = _sdocEditor.context.getSetting('isSdocRevision');
|
|
34
|
+
var mobileLogin = _sdocEditor.context.getSetting('mobileLogin');
|
|
35
|
+
var cssUrls = _sdocEditor.context.getPrintCss();
|
|
36
|
+
var id = 'sdoc_more_operation';
|
|
37
|
+
(0, _react.useEffect)(function () {
|
|
38
|
+
var eventBus = _sdocEditor.EventBus.getInstance();
|
|
39
|
+
var unSubscribe = eventBus.subscribe(_sdocEditor.INTERNAL_EVENT.ON_PRINT, handlePrint);
|
|
40
|
+
return function () {
|
|
41
|
+
unSubscribe();
|
|
42
|
+
};
|
|
43
|
+
// eslint-disable-next-line react-hooks/exhaustive-deps
|
|
44
|
+
}, []);
|
|
45
|
+
var toggleDropdown = (0, _react.useCallback)(function (event, isDropdownOpen) {
|
|
46
|
+
if (isDropdownOpen) {
|
|
47
|
+
// Clicking the fullscreen menu does not close the collapsed menu
|
|
48
|
+
var el = document.getElementById('sdoc-full-width-mode-wrapper');
|
|
49
|
+
if (el && el.contains(event.target)) return;
|
|
50
|
+
}
|
|
51
|
+
setIsDropdownOpen(!isDropdownOpen);
|
|
52
|
+
}, []);
|
|
53
|
+
var handlePrint = (0, _react.useCallback)(function () {
|
|
54
|
+
(0, _printJs["default"])({
|
|
55
|
+
printable: 'sdoc-editor-print-wrapper',
|
|
56
|
+
type: 'html',
|
|
57
|
+
scanStyles: true,
|
|
58
|
+
targetStyles: ['*'],
|
|
59
|
+
style: '@page { size: auto A4 landscape;margin:20px auto; padding: 0;} .d-print-none{display:none !important;} .article {border: none !important; box-shadow: none !important; } html, body {margin: 0; padding: 0}',
|
|
60
|
+
css: cssUrls
|
|
61
|
+
});
|
|
62
|
+
}, [cssUrls]);
|
|
63
|
+
var onFreezeDocument = (0, _react.useCallback)(function () {
|
|
64
|
+
var eventBus = _sdocEditor.EventBus.getInstance();
|
|
65
|
+
eventBus.dispatch(_constants.EXTERNAL_EVENT.FREEZE_DOCUMENT);
|
|
66
|
+
}, []);
|
|
67
|
+
var unFreeze = (0, _react.useCallback)(function () {
|
|
68
|
+
var eventBus = _sdocEditor.EventBus.getInstance();
|
|
69
|
+
eventBus.dispatch(_constants.EXTERNAL_EVENT.UNFREEZE);
|
|
70
|
+
}, []);
|
|
71
|
+
var handleClickHistory = (0, _react.useCallback)(function (event) {
|
|
72
|
+
if (docPerm !== 'rw' || !historyURL) return;
|
|
73
|
+
if (isSdocRevision) return;
|
|
74
|
+
event.stopPropagation();
|
|
75
|
+
event.nativeEvent.stopImmediatePropagation();
|
|
76
|
+
window.location.href = historyURL;
|
|
77
|
+
}, [docPerm, historyURL, isSdocRevision]);
|
|
78
|
+
var printShortcutTexts = (0, _react.useMemo)(function () {
|
|
79
|
+
var printTexts = (0, _sdocEditor.isMac)() ? ['⌘', 'P'] : ['Ctrl', 'P'];
|
|
80
|
+
return printTexts;
|
|
81
|
+
}, []);
|
|
82
|
+
var onSwitchMode = (0, _react.useCallback)(function () {
|
|
83
|
+
var newMode = !isFullWidthMode;
|
|
84
|
+
_sdocEditor.LocalStorage.setItem(_sdocEditor.FULL_WIDTH_MODE, newMode);
|
|
85
|
+
var eventBus = _sdocEditor.EventBus.getInstance();
|
|
86
|
+
eventBus.dispatch(_sdocEditor.INTERNAL_EVENT.RESIZE_ARTICLE);
|
|
87
|
+
setIsFullWidthMode(newMode);
|
|
88
|
+
}, [isFullWidthMode]);
|
|
89
|
+
var toggleStar = (0, _react.useCallback)(function () {
|
|
90
|
+
var eventBus = _sdocEditor.EventBus.getInstance();
|
|
91
|
+
eventBus.dispatch(_constants.EXTERNAL_EVENT.TOGGLE_STAR);
|
|
92
|
+
}, []);
|
|
93
|
+
var onShareToggle = (0, _react.useCallback)(function () {
|
|
94
|
+
var eventBus = _sdocEditor.EventBus.getInstance();
|
|
95
|
+
eventBus.dispatch(_constants.EXTERNAL_EVENT.SHARE_SDOC);
|
|
96
|
+
}, []);
|
|
97
|
+
var onInternalLinkClick = (0, _react.useCallback)(function () {
|
|
98
|
+
var eventBus = _sdocEditor.EventBus.getInstance();
|
|
99
|
+
if (isSdocRevision) {
|
|
100
|
+
eventBus.dispatch(_constants.EXTERNAL_EVENT.INTERNAL_LINK_CLICK, {
|
|
101
|
+
internalLink: window.location.href
|
|
102
|
+
});
|
|
103
|
+
return;
|
|
104
|
+
}
|
|
105
|
+
eventBus.dispatch(_constants.EXTERNAL_EVENT.INTERNAL_LINK_CLICK);
|
|
106
|
+
}, [isSdocRevision]);
|
|
107
|
+
return /*#__PURE__*/_react["default"].createElement(_reactstrap.Dropdown, {
|
|
108
|
+
className: "sdoc-operator-folder ".concat(mobileLogin ? 'mobile-login' : ''),
|
|
109
|
+
isOpen: isDropdownOpen,
|
|
110
|
+
toggle: function toggle(event) {
|
|
111
|
+
return toggleDropdown(event, isDropdownOpen);
|
|
112
|
+
}
|
|
113
|
+
}, /*#__PURE__*/_react["default"].createElement(_reactstrap.DropdownToggle, {
|
|
114
|
+
id: id,
|
|
115
|
+
className: "op-item",
|
|
116
|
+
tag: "span"
|
|
117
|
+
}, /*#__PURE__*/_react["default"].createElement("i", {
|
|
118
|
+
className: "sdocfont sdoc-more"
|
|
119
|
+
})), /*#__PURE__*/_react["default"].createElement(_sdocEditor.Tooltip, {
|
|
120
|
+
target: id
|
|
121
|
+
}, t('More_operation')), /*#__PURE__*/_react["default"].createElement(_reactstrap.DropdownMenu, {
|
|
122
|
+
className: "sdoc-dropdown-menu",
|
|
123
|
+
end: true
|
|
124
|
+
}, mobileLogin && /*#__PURE__*/_react["default"].createElement(_react["default"].Fragment, null, /*#__PURE__*/_react["default"].createElement(_reactstrap.DropdownItem, {
|
|
125
|
+
className: "sdoc-dropdown-menu-item",
|
|
126
|
+
onClick: toggleStar
|
|
127
|
+
}, /*#__PURE__*/_react["default"].createElement("div", null, isStarred ? t('Collected') : t('Collect'))), /*#__PURE__*/_react["default"].createElement(_reactstrap.DropdownItem, {
|
|
128
|
+
className: "sdoc-dropdown-menu-item",
|
|
129
|
+
onClick: onShareToggle
|
|
130
|
+
}, t('Share_1')), /*#__PURE__*/_react["default"].createElement(_reactstrap.DropdownItem, {
|
|
131
|
+
className: "sdoc-dropdown-menu-item",
|
|
132
|
+
onClick: onInternalLinkClick
|
|
133
|
+
}, t('Internal_link')), /*#__PURE__*/_react["default"].createElement("div", {
|
|
134
|
+
className: "sdoc-operator-folder-divider"
|
|
135
|
+
})), /*#__PURE__*/_react["default"].createElement(_reactstrap.DropdownItem, {
|
|
136
|
+
className: "sdoc-dropdown-menu-item",
|
|
137
|
+
onClick: handlePrint
|
|
138
|
+
}, /*#__PURE__*/_react["default"].createElement("div", {
|
|
139
|
+
className: "sdoc-dropdown-print-container"
|
|
140
|
+
}, /*#__PURE__*/_react["default"].createElement("div", null, t('Print')), /*#__PURE__*/_react["default"].createElement(_sdocEditor.MenuShortcutPrompt, {
|
|
141
|
+
shortcuts: printShortcutTexts
|
|
142
|
+
}))), isPro && isFreezed && /*#__PURE__*/_react["default"].createElement(_reactstrap.DropdownItem, {
|
|
143
|
+
className: "sdoc-dropdown-menu-item",
|
|
144
|
+
onClick: unFreeze
|
|
145
|
+
}, t('Unfreeze')), isPro && !isFreezed && /*#__PURE__*/_react["default"].createElement(_reactstrap.DropdownItem, {
|
|
146
|
+
className: "sdoc-dropdown-menu-item",
|
|
147
|
+
onClick: onFreezeDocument
|
|
148
|
+
}, t('Freeze_document')), /*#__PURE__*/_react["default"].createElement(_reactstrap.DropdownItem, {
|
|
149
|
+
className: "sdoc-dropdown-menu-item",
|
|
150
|
+
onClick: handleClickHistory
|
|
151
|
+
}, t('Document_history')), !_sdocEditor.isMobile && /*#__PURE__*/_react["default"].createElement(_reactstrap.DropdownItem, {
|
|
152
|
+
id: "sdoc-full-width-mode-wrapper",
|
|
153
|
+
className: "sdoc-dropdown-menu-item"
|
|
154
|
+
}, /*#__PURE__*/_react["default"].createElement(_switch["default"], {
|
|
155
|
+
checked: isFullWidthMode,
|
|
156
|
+
placeholder: t('Full_width_mode'),
|
|
157
|
+
className: "sdoc-full-width-mode-wrapper w-100",
|
|
158
|
+
onChange: onSwitchMode
|
|
159
|
+
})), parentFolderURL && /*#__PURE__*/_react["default"].createElement(_react["default"].Fragment, null, /*#__PURE__*/_react["default"].createElement("div", {
|
|
160
|
+
className: "sdoc-operator-folder-divider"
|
|
161
|
+
}), /*#__PURE__*/_react["default"].createElement(_reactstrap.DropdownItem, {
|
|
162
|
+
className: "sdoc-dropdown-menu-item",
|
|
163
|
+
tag: "a",
|
|
164
|
+
href: parentFolderURL
|
|
165
|
+
}, t('Open_parent_folder')))));
|
|
166
|
+
};
|
|
167
|
+
var _default = exports["default"] = (0, _reactI18next.withTranslation)('sdoc-editor')(MoreOperations);
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault")["default"];
|
|
4
|
+
var _interopRequireWildcard = require("@babel/runtime/helpers/interopRequireWildcard")["default"];
|
|
5
|
+
Object.defineProperty(exports, "__esModule", {
|
|
6
|
+
value: true
|
|
7
|
+
});
|
|
8
|
+
exports["default"] = void 0;
|
|
9
|
+
var _react = _interopRequireWildcard(require("react"));
|
|
10
|
+
var _reactI18next = require("react-i18next");
|
|
11
|
+
var _sdocEditor = require("@seafile/sdoc-editor");
|
|
12
|
+
var _classnames = _interopRequireDefault(require("classnames"));
|
|
13
|
+
var PluginsOperations = function PluginsOperations() {
|
|
14
|
+
var _usePlugins = (0, _sdocEditor.usePlugins)(),
|
|
15
|
+
plugins = _usePlugins.plugins,
|
|
16
|
+
updateDisplayPlugin = _usePlugins.updateDisplayPlugin;
|
|
17
|
+
var _useTranslation = (0, _reactI18next.useTranslation)('sdoc-editor'),
|
|
18
|
+
t = _useTranslation.t;
|
|
19
|
+
var iconIdMap = {
|
|
20
|
+
'sdoc-info': 'sdoc_info',
|
|
21
|
+
'sdoc-comment': 'sdoc_comment'
|
|
22
|
+
};
|
|
23
|
+
var _onClick = (0, _react.useCallback)(function (event, pluginName) {
|
|
24
|
+
event.stopPropagation();
|
|
25
|
+
event.nativeEvent && event.nativeEvent.stopImmediatePropagation && event.nativeEvent.stopImmediatePropagation();
|
|
26
|
+
updateDisplayPlugin(pluginName);
|
|
27
|
+
}, [updateDisplayPlugin]);
|
|
28
|
+
if (plugins.length === 0) return null;
|
|
29
|
+
return plugins.filter(function (plugin) {
|
|
30
|
+
return !plugin.position || plugin.position === _sdocEditor.PLUGIN_BTN_POSITION.DEFAULT;
|
|
31
|
+
}).map(function (plugin) {
|
|
32
|
+
var name = plugin.name,
|
|
33
|
+
icon = plugin.icon;
|
|
34
|
+
var iconDom = '';
|
|
35
|
+
if (typeof icon !== 'string') {
|
|
36
|
+
iconDom = icon;
|
|
37
|
+
} else {
|
|
38
|
+
iconDom = /*#__PURE__*/_react["default"].createElement("i", {
|
|
39
|
+
className: (0, _classnames["default"])('sdocfont', icon)
|
|
40
|
+
});
|
|
41
|
+
}
|
|
42
|
+
return /*#__PURE__*/_react["default"].createElement("span", {
|
|
43
|
+
className: "op-item sdoc-plugin-operation-btn-container",
|
|
44
|
+
id: iconIdMap[name],
|
|
45
|
+
onClick: function onClick(e) {
|
|
46
|
+
return _onClick(e, name);
|
|
47
|
+
},
|
|
48
|
+
key: name
|
|
49
|
+
}, iconDom, name === 'sdoc-info' && /*#__PURE__*/_react["default"].createElement(_sdocEditor.Tooltip, {
|
|
50
|
+
target: iconIdMap[name]
|
|
51
|
+
}, t('Property')), name === 'sdoc-comment' && /*#__PURE__*/_react["default"].createElement(_sdocEditor.Tooltip, {
|
|
52
|
+
target: iconIdMap[name]
|
|
53
|
+
}, t('Comment_list')));
|
|
54
|
+
});
|
|
55
|
+
};
|
|
56
|
+
var _default = exports["default"] = PluginsOperations;
|
|
@@ -0,0 +1,44 @@
|
|
|
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"] = void 0;
|
|
8
|
+
var _react = _interopRequireWildcard(require("react"));
|
|
9
|
+
var _reactI18next = require("react-i18next");
|
|
10
|
+
var _sdocEditor = require("@seafile/sdoc-editor");
|
|
11
|
+
var PresentationOperation = function PresentationOperation() {
|
|
12
|
+
var _useTranslation = (0, _reactI18next.useTranslation)('sdoc-editor'),
|
|
13
|
+
t = _useTranslation.t;
|
|
14
|
+
var id = 'sdoc_presentation';
|
|
15
|
+
var _usePlugins = (0, _sdocEditor.usePlugins)(),
|
|
16
|
+
plugins = _usePlugins.plugins,
|
|
17
|
+
closePlugin = _usePlugins.closePlugin;
|
|
18
|
+
var onPresentationToggle = (0, _react.useCallback)(function () {
|
|
19
|
+
// Close plugins before presentation mode
|
|
20
|
+
if (plugins && ['sdoc-info', 'sdoc-comment'].includes(plugins[0].name)) {
|
|
21
|
+
closePlugin && closePlugin();
|
|
22
|
+
}
|
|
23
|
+
var eventBus = _sdocEditor.EventBus.getInstance();
|
|
24
|
+
eventBus.dispatch(_sdocEditor.INTERNAL_EVENT.TOGGLE_PRESENTATION_MODE, {
|
|
25
|
+
isShowFullScreen: true
|
|
26
|
+
});
|
|
27
|
+
var node = document.querySelector('.sdoc-editor-container');
|
|
28
|
+
if (node !== null && node !== void 0 && node.requestFullscreen) {
|
|
29
|
+
node.requestFullscreen()["catch"](function (err) {
|
|
30
|
+
return console.error('Failed to enter fullscreen:', err);
|
|
31
|
+
});
|
|
32
|
+
}
|
|
33
|
+
}, [closePlugin, plugins]);
|
|
34
|
+
return /*#__PURE__*/_react["default"].createElement("span", {
|
|
35
|
+
className: "op-item",
|
|
36
|
+
id: id,
|
|
37
|
+
onClick: onPresentationToggle
|
|
38
|
+
}, /*#__PURE__*/_react["default"].createElement("i", {
|
|
39
|
+
className: "sdocfont sdoc-presentation"
|
|
40
|
+
}), /*#__PURE__*/_react["default"].createElement(_sdocEditor.Tooltip, {
|
|
41
|
+
target: id
|
|
42
|
+
}, t('Presentation')));
|
|
43
|
+
};
|
|
44
|
+
var _default = exports["default"] = PresentationOperation;
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
.sdoc-revision-changes-container {
|
|
2
|
+
height: 32px;
|
|
3
|
+
border: 1px solid #e5e5e5;
|
|
4
|
+
border-radius: 3px;
|
|
5
|
+
}
|
|
6
|
+
|
|
7
|
+
.sdoc-revision-changes-container .sdoc-revision-changes-divider {
|
|
8
|
+
border-right: 1px solid #e5e5e5;
|
|
9
|
+
height: 100%;
|
|
10
|
+
width: 1px;
|
|
11
|
+
}
|
|
12
|
+
|
|
13
|
+
.sdoc-revision-changes-container .sdoc-revision-changes-last,
|
|
14
|
+
.sdoc-revision-changes-container .sdoc-revision-changes-next {
|
|
15
|
+
padding: 0 8px;
|
|
16
|
+
height: 100%;
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
.sdoc-revision-changes-container .sdoc-revision-changes-last .sdocfont,
|
|
20
|
+
.sdoc-revision-changes-container .sdoc-revision-changes-next .sdocfont {
|
|
21
|
+
color: #000;
|
|
22
|
+
opacity: .5;
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
.sdoc-revision-changes-container .sdoc-revision-changes-last:hover,
|
|
26
|
+
.sdoc-revision-changes-container .sdoc-revision-changes-next:hover {
|
|
27
|
+
cursor: pointer;
|
|
28
|
+
background-color: #f5f5f5;
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
.sdoc-revision-changes-container .sdoc-revision-changes-last:hover .sdocfont,
|
|
32
|
+
.sdoc-revision-changes-container .sdoc-revision-changes-next:hover .sdocfont {
|
|
33
|
+
opacity: .75;
|
|
34
|
+
}
|
|
@@ -0,0 +1,120 @@
|
|
|
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 _sdocEditor = require("@seafile/sdoc-editor");
|
|
13
|
+
require("./index.css");
|
|
14
|
+
var ChangesCount = function ChangesCount(_ref) {
|
|
15
|
+
var allChanges = _ref.allChanges;
|
|
16
|
+
var _useTranslation = (0, _reactI18next.useTranslation)('sdoc-editor'),
|
|
17
|
+
t = _useTranslation.t;
|
|
18
|
+
var _useState = (0, _react.useState)(0),
|
|
19
|
+
_useState2 = (0, _slicedToArray2["default"])(_useState, 2),
|
|
20
|
+
currentDiffIndex = _useState2[0],
|
|
21
|
+
setDiffIndex = _useState2[1];
|
|
22
|
+
var _useState3 = (0, _react.useState)([]),
|
|
23
|
+
_useState4 = (0, _slicedToArray2["default"])(_useState3, 2),
|
|
24
|
+
changes = _useState4[0],
|
|
25
|
+
setChanges = _useState4[1];
|
|
26
|
+
var intervalRef = (0, _react.useRef)();
|
|
27
|
+
(0, _react.useEffect)(function () {
|
|
28
|
+
// Article rendering is delayed, so we need to wait for the Article to render before we can get the changes
|
|
29
|
+
new Promise(function (resolve) {
|
|
30
|
+
intervalRef.current = setInterval(function () {
|
|
31
|
+
var article = document.querySelector('.article');
|
|
32
|
+
if (article) {
|
|
33
|
+
clearInterval(intervalRef.current);
|
|
34
|
+
intervalRef.current = null;
|
|
35
|
+
resolve();
|
|
36
|
+
}
|
|
37
|
+
}, 100);
|
|
38
|
+
}).then(function () {
|
|
39
|
+
if (allChanges.changes.length !== 0) {
|
|
40
|
+
var topLevelChanges = (0, _sdocEditor.getTopLevelChanges)(allChanges.changes);
|
|
41
|
+
var _changes = (0, _sdocEditor.getMergedChanges)(topLevelChanges, allChanges.value);
|
|
42
|
+
setChanges(_changes);
|
|
43
|
+
}
|
|
44
|
+
});
|
|
45
|
+
return function () {
|
|
46
|
+
intervalRef.current && clearInterval(intervalRef.current);
|
|
47
|
+
};
|
|
48
|
+
}, [allChanges]);
|
|
49
|
+
var jumpToElement = (0, _react.useCallback)(function (currentDiffIndex) {
|
|
50
|
+
setDiffIndex(currentDiffIndex);
|
|
51
|
+
var change = changes[currentDiffIndex];
|
|
52
|
+
var changeElement = document.querySelectorAll("[data-id=\"".concat(change, "\"]"))[0];
|
|
53
|
+
if (changeElement) {
|
|
54
|
+
var scrollContainer = document.getElementById('sdoc-scroll-container');
|
|
55
|
+
if (scrollContainer) {
|
|
56
|
+
scrollContainer.scrollTop = changeElement.offsetTop - 10;
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
|
|
60
|
+
// eslint-disable-next-line react-hooks/exhaustive-deps
|
|
61
|
+
}, [changes, currentDiffIndex]);
|
|
62
|
+
var lastChange = (0, _react.useCallback)(function () {
|
|
63
|
+
if (currentDiffIndex === 0) {
|
|
64
|
+
jumpToElement(changes.length - 1);
|
|
65
|
+
return;
|
|
66
|
+
}
|
|
67
|
+
jumpToElement(currentDiffIndex - 1);
|
|
68
|
+
|
|
69
|
+
// eslint-disable-next-line react-hooks/exhaustive-deps
|
|
70
|
+
}, [changes, currentDiffIndex]);
|
|
71
|
+
var nextChange = (0, _react.useCallback)(function () {
|
|
72
|
+
if (currentDiffIndex === changes.length - 1) {
|
|
73
|
+
jumpToElement(0);
|
|
74
|
+
return;
|
|
75
|
+
}
|
|
76
|
+
jumpToElement(currentDiffIndex + 1);
|
|
77
|
+
|
|
78
|
+
// eslint-disable-next-line react-hooks/exhaustive-deps
|
|
79
|
+
}, [changes, currentDiffIndex]);
|
|
80
|
+
if (!Array.isArray(changes) || changes.length === 0) {
|
|
81
|
+
return /*#__PURE__*/_react["default"].createElement("div", {
|
|
82
|
+
className: "sdoc-revision-changes-container d-flex align-items-center pl-2 pr-2 ml-4"
|
|
83
|
+
}, t('No_changes'));
|
|
84
|
+
}
|
|
85
|
+
var changesCount = changes.length;
|
|
86
|
+
return /*#__PURE__*/_react["default"].createElement("div", {
|
|
87
|
+
className: "sdoc-revision-changes-container d-flex align-items-center ml-4"
|
|
88
|
+
}, /*#__PURE__*/_react["default"].createElement("div", {
|
|
89
|
+
className: "sdoc-revision-changes-tip d-flex align-items-center justify-content-center pl-2 pr-2"
|
|
90
|
+
}, "".concat(t('Changes'), " ").concat(currentDiffIndex + 1, "/").concat(changesCount)), /*#__PURE__*/_react["default"].createElement("div", {
|
|
91
|
+
className: "sdoc-revision-changes-divider"
|
|
92
|
+
}), /*#__PURE__*/_react["default"].createElement("div", {
|
|
93
|
+
className: "sdoc-revision-changes-last d-flex align-items-center justify-content-center",
|
|
94
|
+
id: "sdoc-revision-changes-last",
|
|
95
|
+
onClick: lastChange
|
|
96
|
+
}, /*#__PURE__*/_react["default"].createElement("i", {
|
|
97
|
+
className: "sdocfont sdoc-next-page",
|
|
98
|
+
style: {
|
|
99
|
+
transform: 'rotate(-90deg)'
|
|
100
|
+
}
|
|
101
|
+
})), /*#__PURE__*/_react["default"].createElement("div", {
|
|
102
|
+
className: "sdoc-revision-changes-divider"
|
|
103
|
+
}), /*#__PURE__*/_react["default"].createElement("div", {
|
|
104
|
+
className: "sdoc-revision-changes-next d-flex align-items-center justify-content-center",
|
|
105
|
+
id: "sdoc-revision-changes-next",
|
|
106
|
+
onClick: nextChange
|
|
107
|
+
}, /*#__PURE__*/_react["default"].createElement("i", {
|
|
108
|
+
className: "sdocfont sdoc-previous-page",
|
|
109
|
+
style: {
|
|
110
|
+
transform: 'rotate(-90deg)'
|
|
111
|
+
}
|
|
112
|
+
})), /*#__PURE__*/_react["default"].createElement(_sdocEditor.Tooltip, {
|
|
113
|
+
placement: "bottom",
|
|
114
|
+
target: "sdoc-revision-changes-last"
|
|
115
|
+
}, t('Last_modification')), /*#__PURE__*/_react["default"].createElement(_sdocEditor.Tooltip, {
|
|
116
|
+
placement: "bottom",
|
|
117
|
+
target: "sdoc-revision-changes-next"
|
|
118
|
+
}, t('Next_modification')));
|
|
119
|
+
};
|
|
120
|
+
var _default = exports["default"] = ChangesCount;
|