@seafile/sdoc-editor 0.2.16 → 0.2.18

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 (68) hide show
  1. package/dist/api/seafile-api.js +36 -2
  2. package/dist/assets/css/simple-editor.css +0 -32
  3. package/dist/assets/images/revision-avatar.png +0 -0
  4. package/dist/basic-sdk/assets/css/textlink-hovermenu.css +1 -0
  5. package/dist/basic-sdk/comment/components/comment-all-participants/index.css +83 -0
  6. package/dist/basic-sdk/comment/components/comment-all-participants/index.js +56 -0
  7. package/dist/basic-sdk/comment/components/comment-all-participants/participant-avatar.js +35 -0
  8. package/dist/basic-sdk/comment/{comment → components}/comment-editor.js +18 -36
  9. package/dist/basic-sdk/comment/components/comment-input/comment-participant-item.js +47 -0
  10. package/dist/basic-sdk/comment/components/comment-input/index.css +45 -0
  11. package/dist/basic-sdk/comment/components/comment-input/index.js +295 -0
  12. package/dist/basic-sdk/comment/{comment → components}/comment-item-content.js +7 -2
  13. package/dist/basic-sdk/comment/{comment → components}/comment-item-reply.js +6 -1
  14. package/dist/basic-sdk/comment/{comment → components}/comment-item-wrapper.js +3 -1
  15. package/dist/basic-sdk/comment/components/comment-participants-editor/index.css +132 -0
  16. package/dist/basic-sdk/comment/components/comment-participants-editor/index.js +67 -0
  17. package/dist/basic-sdk/comment/components/comment-participants-editor/searched-collaborators.js +53 -0
  18. package/dist/basic-sdk/comment/components/comment-participants-editor/selected-participants.js +39 -0
  19. package/dist/basic-sdk/comment/{comment → components}/global-comment-header.js +5 -6
  20. package/dist/basic-sdk/comment/{comment → components}/global-comment.js +3 -2
  21. package/dist/basic-sdk/comment/{comment → components}/style.css +8 -1
  22. package/dist/basic-sdk/comment/constants/index.js +11 -0
  23. package/dist/basic-sdk/comment/hooks/use-comment-list.js +1 -1
  24. package/dist/basic-sdk/comment/hooks/use-participants.js +90 -0
  25. package/dist/basic-sdk/comment/index.js +3 -2
  26. package/dist/basic-sdk/comment/utils/index.js +206 -0
  27. package/dist/basic-sdk/editor/sdoc-editor.js +3 -2
  28. package/dist/basic-sdk/extension/plugins/link/hover/index.js +3 -3
  29. package/dist/components/doc-info/index.css +53 -0
  30. package/dist/components/doc-info/index.js +11 -2
  31. package/dist/components/modal-portal/index.js +36 -0
  32. package/dist/constants/index.js +4 -1
  33. package/dist/constants/key-codes.js +102 -0
  34. package/dist/constants/transfer-types.js +3 -0
  35. package/dist/context.js +38 -8
  36. package/dist/hooks/index.js +3 -0
  37. package/dist/hooks/use-collaborators.js +44 -0
  38. package/dist/layout/layout.js +10 -27
  39. package/dist/model/index.js +2 -1
  40. package/dist/model/user.js +12 -0
  41. package/dist/pages/simple-editor.js +1 -1
  42. package/dist/utils/get-event-transfer.js +73 -0
  43. package/dist/utils/hotkey.js +25 -0
  44. package/dist/utils/index.js +58 -1
  45. package/package.json +1 -1
  46. package/public/locales/cs/sdoc-editor.json +6 -1
  47. package/public/locales/de/sdoc-editor.json +6 -1
  48. package/public/locales/en/sdoc-editor.json +3 -1
  49. package/public/locales/es/sdoc-editor.json +6 -1
  50. package/public/locales/fr/sdoc-editor.json +6 -1
  51. package/public/locales/it/sdoc-editor.json +6 -1
  52. package/public/locales/ru/sdoc-editor.json +6 -1
  53. package/public/locales/zh_CN/sdoc-editor.json +3 -1
  54. package/public/media/sdoc-editor-font/iconfont.eot +0 -0
  55. package/public/media/sdoc-editor-font/iconfont.svg +4 -0
  56. package/public/media/sdoc-editor-font/iconfont.ttf +0 -0
  57. package/public/media/sdoc-editor-font/iconfont.woff +0 -0
  58. package/public/media/sdoc-editor-font/iconfont.woff2 +0 -0
  59. package/public/media/sdoc-editor-font.css +14 -6
  60. /package/dist/basic-sdk/comment/{comment → components}/comment-delete-shadow.js +0 -0
  61. /package/dist/basic-sdk/comment/{comment → components}/comment-item-resolved-reply.js +0 -0
  62. /package/dist/basic-sdk/comment/{comment → components}/comment-list.css +0 -0
  63. /package/dist/basic-sdk/comment/{comment → components}/comment-list.js +0 -0
  64. /package/dist/basic-sdk/comment/{comment → components}/editor-comment.js +0 -0
  65. /package/dist/basic-sdk/comment/{comment → components}/elements-comment-count/element-comment-count.js +0 -0
  66. /package/dist/basic-sdk/comment/{comment → components}/elements-comment-count/index.css +0 -0
  67. /package/dist/basic-sdk/comment/{comment → components}/elements-comment-count/index.js +0 -0
  68. /package/dist/basic-sdk/comment/{comment → components}/index.js +0 -0
package/dist/context.js CHANGED
@@ -3,12 +3,23 @@ import _createClass from "@babel/runtime/helpers/esm/createClass";
3
3
  import Url from 'url-parse';
4
4
  import SDocServerApi from './api/sdoc-server-api';
5
5
  import SeafileAPI from './api/seafile-api';
6
+ import { User } from './model';
6
7
  var Context = /*#__PURE__*/function () {
7
8
  function Context() {
8
9
  var _this = this;
9
10
  _classCallCheck(this, Context);
10
11
  this.initSettings = function () {
11
12
  _this.settings = window.seafile ? window.seafile : window.seafileConfig;
13
+ var _this$settings = _this.settings,
14
+ name = _this$settings.name,
15
+ username = _this$settings.username,
16
+ avatarURL = _this$settings.avatarURL;
17
+ var userInfo = {
18
+ name: name,
19
+ username: username,
20
+ avatar_url: avatarURL
21
+ };
22
+ _this.user = new User(userInfo);
12
23
  if (_this.settings['isSdocRevision']) {
13
24
  var repoID = _this.getSetting('repoID');
14
25
  var siteRoot = _this.getSetting('siteRoot');
@@ -111,14 +122,7 @@ var Context = /*#__PURE__*/function () {
111
122
  }, {
112
123
  key: "getUserInfo",
113
124
  value: function getUserInfo() {
114
- var name = this.getSetting('name');
115
- var username = this.getSetting('username');
116
- var avatarURL = this.getSetting('avatarURL');
117
- return {
118
- name: name,
119
- username: username,
120
- avatar_url: avatarURL
121
- };
125
+ return this.user;
122
126
  }
123
127
 
124
128
  // comments
@@ -260,6 +264,32 @@ var Context = /*#__PURE__*/function () {
260
264
  var docUuid = this.getSetting('docUuid');
261
265
  return this.api.getCopyMoveProgressView(docUuid, taskId);
262
266
  }
267
+
268
+ // participants
269
+ }, {
270
+ key: "listParticipants",
271
+ value: function listParticipants() {
272
+ var docUuid = this.getSetting('docUuid');
273
+ return this.api.listParticipants(docUuid);
274
+ }
275
+ }, {
276
+ key: "addParticipants",
277
+ value: function addParticipants(emails) {
278
+ var docUuid = this.getSetting('docUuid');
279
+ return this.api.addParticipants(docUuid, emails);
280
+ }
281
+ }, {
282
+ key: "deleteParticipants",
283
+ value: function deleteParticipants(emails) {
284
+ var docUuid = this.getSetting('docUuid');
285
+ return this.api.deleteParticipants(docUuid, emails);
286
+ }
287
+ }, {
288
+ key: "listRelatedUsers",
289
+ value: function listRelatedUsers() {
290
+ var docUuid = this.getSetting('docUuid');
291
+ return this.api.listRelatedUsers(docUuid);
292
+ }
263
293
  }]);
264
294
  return Context;
265
295
  }();
@@ -0,0 +1,3 @@
1
+ import { CollaboratorsProvider, useCollaborators } from './use-collaborators';
2
+ import { useDocument } from './use-document';
3
+ export { CollaboratorsProvider, useCollaborators, useDocument };
@@ -0,0 +1,44 @@
1
+ import _slicedToArray from "@babel/runtime/helpers/esm/slicedToArray";
2
+ import React, { useContext, useEffect, useState } from 'react';
3
+ import context from '../context';
4
+ import { User } from '../model';
5
+ var CollaboratorsContext = React.createContext(null);
6
+ export var CollaboratorsProvider = function CollaboratorsProvider(props) {
7
+ var isSdocRevision = context.getSetting('isSdocRevision');
8
+ var isPublished = context.getSetting('isPublished');
9
+ var _useState = useState([]),
10
+ _useState2 = _slicedToArray(_useState, 2),
11
+ collaborators = _useState2[0],
12
+ setCollaborators = _useState2[1];
13
+ useEffect(function () {
14
+ if (isSdocRevision && isPublished) return;
15
+ context.listRelatedUsers().then(function (res) {
16
+ var collaborators = [];
17
+ res.data.related_users.forEach(function (user) {
18
+ var collaborator = new User(user);
19
+ collaborators.push(collaborator);
20
+ });
21
+ setCollaborators(collaborators);
22
+ }).catch(function (error) {
23
+ // eslint-disable-next-line
24
+ console.log(error);
25
+ });
26
+
27
+ // eslint-disable-next-line react-hooks/exhaustive-deps
28
+ }, []);
29
+ return /*#__PURE__*/React.createElement(CollaboratorsContext.Provider, {
30
+ value: {
31
+ collaborators: collaborators
32
+ }
33
+ }, props.children);
34
+ };
35
+ export var useCollaborators = function useCollaborators() {
36
+ var context = useContext(CollaboratorsContext);
37
+ if (!context) {
38
+ throw new Error('\'CollaboratorsContext\' is null');
39
+ }
40
+ var collaborators = context.collaborators;
41
+ return {
42
+ collaborators: collaborators
43
+ };
44
+ };
@@ -1,30 +1,13 @@
1
1
  import _objectWithoutProperties from "@babel/runtime/helpers/esm/objectWithoutProperties";
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
2
  var _excluded = ["children", "className"];
7
- import React, { Component } from 'react';
3
+ import React from 'react';
8
4
  import classnames from 'classnames';
9
- var Layout = /*#__PURE__*/function (_Component) {
10
- _inherits(Layout, _Component);
11
- var _super = _createSuper(Layout);
12
- function Layout() {
13
- _classCallCheck(this, Layout);
14
- return _super.apply(this, arguments);
15
- }
16
- _createClass(Layout, [{
17
- key: "render",
18
- value: function render() {
19
- var _this$props = this.props,
20
- children = _this$props.children,
21
- className = _this$props.className,
22
- restProps = _objectWithoutProperties(_this$props, _excluded);
23
- return /*#__PURE__*/React.createElement("div", Object.assign({
24
- className: classnames('sdoc-editor-page-wrapper', className)
25
- }, restProps), children);
26
- }
27
- }]);
28
- return Layout;
29
- }(Component);
30
- export { Layout as default };
5
+ var Layout = function Layout(_ref) {
6
+ var children = _ref.children,
7
+ className = _ref.className,
8
+ restProps = _objectWithoutProperties(_ref, _excluded);
9
+ return /*#__PURE__*/React.createElement("div", Object.assign({
10
+ className: classnames('sdoc-editor-page-wrapper', className)
11
+ }, restProps), children);
12
+ };
13
+ export default Layout;
@@ -1,2 +1,3 @@
1
1
  import Revision from './revision';
2
- export { Revision };
2
+ import User from './user';
3
+ export { Revision, User };
@@ -0,0 +1,12 @@
1
+ import _createClass from "@babel/runtime/helpers/esm/createClass";
2
+ import _classCallCheck from "@babel/runtime/helpers/esm/classCallCheck";
3
+ var User = /*#__PURE__*/_createClass(function User(options) {
4
+ _classCallCheck(this, User);
5
+ this.name = options.name || '';
6
+ this.username = options.email || options.username || '';
7
+ this.email = this.username;
8
+ this.contact_email = options.contact_email || '';
9
+ this.avatar_url = options.avatar_url || '';
10
+ this.name_pinyin = options.name_pinyin || '';
11
+ });
12
+ export default User;
@@ -9,7 +9,7 @@ import context from '../context';
9
9
  import ErrorBoundary from './error-boundary';
10
10
  import { SDocEditor } from '../basic-sdk';
11
11
  import { RevisionDiffViewer } from '../basic-sdk/views';
12
- import { useDocument } from '../hooks/use-document';
12
+ import { useDocument } from '../hooks';
13
13
  import { resetWebTitleAndURL } from '../utils';
14
14
  import '../assets/css/simple-editor.css';
15
15
  var SimpleEditor = function SimpleEditor(_ref) {
@@ -0,0 +1,73 @@
1
+ import { TransferTypes } from '../constants';
2
+ var HTML = TransferTypes.HTML,
3
+ TEXT = TransferTypes.TEXT;
4
+ function getEventTransfer(event) {
5
+ var html, text, files;
6
+ if (window.isMobile) {
7
+ if (window.dtableTransfer) {
8
+ text = window.dtableTransfer['TEXT'];
9
+ }
10
+ } else {
11
+ var transfer = event.dataTransfer || event.clipboardData;
12
+ html = getType(transfer, HTML);
13
+ text = getType(transfer, TEXT);
14
+ files = getFiles(transfer);
15
+ }
16
+
17
+ // paste html
18
+ if (html) {
19
+ // eslint-disable-next-line new-parens
20
+ var copiedTableNode = new DOMParser().parseFromString(html, HTML).querySelector('table');
21
+ if (copiedTableNode) return {
22
+ html: html,
23
+ text: text,
24
+ type: 'html'
25
+ };
26
+ return {
27
+ html: html,
28
+ text: text,
29
+ type: 'html'
30
+ };
31
+ }
32
+
33
+ // paste local picture or other files here
34
+ if (files && files.length) return {
35
+ 'files': files,
36
+ type: 'files'
37
+ };
38
+
39
+ // paste text
40
+ return {
41
+ text: text || '',
42
+ type: 'text'
43
+ };
44
+ }
45
+ function getType(transfer, type) {
46
+ if (!transfer.types || !transfer.types.length) {
47
+ // COMPAT: In IE 11, there is no `types` field but `getData('Text')`
48
+ // is supported`. (2017/06/23)
49
+ return type === TEXT ? transfer.getData('Text') || null : null;
50
+ }
51
+ return transfer.getData(type);
52
+ }
53
+ function getFiles(transfer) {
54
+ var files;
55
+ try {
56
+ // Get and normalize files if they exist.
57
+ if (transfer.items && transfer.items.length) {
58
+ files = Array.from(transfer.items).map(function (item) {
59
+ return item.kind === 'file' ? item.getAsFile() : null;
60
+ }).filter(function (exists) {
61
+ return exists;
62
+ });
63
+ } else if (transfer.files && transfer.files.length) {
64
+ files = Array.from(transfer.files);
65
+ }
66
+ } catch (err) {
67
+ if (transfer.files && transfer.files.length) {
68
+ files = Array.from(transfer.files);
69
+ }
70
+ }
71
+ return files;
72
+ }
73
+ export default getEventTransfer;
@@ -0,0 +1,25 @@
1
+ import isHotkey from 'is-hotkey';
2
+ export var isModS = isHotkey('mod+s');
3
+ export var isModZ = isHotkey('mod+z');
4
+ export var isModL = isHotkey('mod+l');
5
+ export var isModF = isHotkey('mod+f');
6
+ export var isModP = isHotkey('mod+p');
7
+ export var isModG = isHotkey('mod+g');
8
+ export var isModDot = isHotkey('mod+.');
9
+ export var isModComma = isHotkey('mod+,');
10
+ export var isModSlash = isHotkey('mod+/');
11
+ export var isModBackslash = isHotkey('mod+\'');
12
+ export var isModSemicolon = isHotkey('mod+;');
13
+ export var isModUp = isHotkey('mod+up');
14
+ export var isModDown = isHotkey('mod+down');
15
+ export var isModLeft = isHotkey('mod+left');
16
+ export var isModRight = isHotkey('mod+right');
17
+ export var isModShiftZ = isHotkey('mod+shift+z');
18
+ export var isModShiftG = isHotkey('mod+shift+g');
19
+ export var isModShiftDot = isHotkey('mod+shift+.');
20
+ export var isModShiftComma = isHotkey('mod+shift+,');
21
+ export var isShiftEnter = isHotkey('shift+enter');
22
+ export var isShiftModEnter = isHotkey('shift+mod+enter');
23
+ export var isOptPageup = isHotkey('opt+pageup');
24
+ export var isOptPagedown = isHotkey('opt+pagedown');
25
+ export var isSpace = isHotkey('space');
@@ -4,6 +4,8 @@ import LocalStorage from './local-storage-utils';
4
4
  import context from '../context';
5
5
  import { REVISION_FIRST_LOAD_KEY, REVISION_FIRST_LOAD_VALUE } from '../constants';
6
6
  import toaster from '../components/toast';
7
+ import getEventTransfer from './get-event-transfer';
8
+ import * as Hotkey from './hotkey';
7
9
  export var getDirPath = function getDirPath(path) {
8
10
  var dir = path.slice(0, path.lastIndexOf('/'));
9
11
  if (dir === '') {
@@ -83,4 +85,59 @@ export var resetWebTitleAndURL = function resetWebTitleAndURL(t) {
83
85
  var newURL = "".concat(url.origin).concat(url.pathname).concat(newParamsString ? '/?' + newParamsString : '');
84
86
  window.history.replaceState(null, null, newURL);
85
87
  };
86
- export { DateUtils, LocalStorage };
88
+ export var getSelectionCoords = function getSelectionCoords() {
89
+ var doc = window.document;
90
+ var sel = doc.selection,
91
+ range,
92
+ rects,
93
+ rect;
94
+ var x = 0,
95
+ y = 0;
96
+ if (sel) {
97
+ if (sel.type !== 'Control') {
98
+ range = sel.createRange();
99
+ range.collapse(true);
100
+ x = range.boundingLeft;
101
+ y = range.boundingTop;
102
+ }
103
+ } else if (window.getSelection) {
104
+ sel = window.getSelection();
105
+ if (sel.rangeCount) {
106
+ range = sel.getRangeAt(0).cloneRange();
107
+ if (range.getClientRects) {
108
+ range.collapse(true);
109
+ rects = range.getClientRects();
110
+ if (rects.length > 0) {
111
+ rect = rects[0];
112
+ }
113
+ // When the cursor is at the beginning of the line, rect is undefined
114
+ if (rect) {
115
+ x = rect.left;
116
+ y = rect.top;
117
+ }
118
+ }
119
+ // Fall back to inserting a temporary element
120
+ if (x === 0 && y === 0 || rect === undefined) {
121
+ var span = doc.createElement('span');
122
+ if (span.getClientRects) {
123
+ // Ensure span has dimensions and position by
124
+ // adding a zero-width space character
125
+ span.appendChild(doc.createTextNode("\u200B"));
126
+ range.insertNode(span);
127
+ rect = span.getClientRects()[0];
128
+ x = rect.left;
129
+ y = rect.top;
130
+ var spanParent = span.parentNode;
131
+ spanParent.removeChild(span);
132
+ // Glue any broken text nodes back together
133
+ spanParent.normalize();
134
+ }
135
+ }
136
+ }
137
+ }
138
+ return {
139
+ x: x,
140
+ y: y
141
+ };
142
+ };
143
+ export { DateUtils, LocalStorage, getEventTransfer, Hotkey };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@seafile/sdoc-editor",
3
- "version": "0.2.16",
3
+ "version": "0.2.18",
4
4
  "private": false,
5
5
  "description": "This is a sdoc editor",
6
6
  "main": "dist/index.js",
@@ -386,5 +386,10 @@
386
386
  "Delete_revision": "Delete revision",
387
387
  "Delete_tip": "Are you sure you want to delete {{content}} ?",
388
388
  "Revision_deleted": "Revision deleted",
389
- "Published": "Zveřejněné"
389
+ "Published": "Zveřejněné",
390
+ "Delete_Successfully": "Delete Successfully",
391
+ "Delete_failed": "Smazání se nezdařilo",
392
+ "Insert_caption": "Insert caption",
393
+ "No_collaborators_available": "No_collaborators_available",
394
+ "Find_a_collaborator": "Find a collaborator"
390
395
  }
@@ -386,5 +386,10 @@
386
386
  "Delete_revision": "Delete revision",
387
387
  "Delete_tip": "Are you sure you want to delete {{content}} ?",
388
388
  "Revision_deleted": "Revision deleted",
389
- "Published": "Veröffentlicht"
389
+ "Published": "Veröffentlicht",
390
+ "Delete_Successfully": "Delete Successfully",
391
+ "Delete_failed": "Löschen fehlgeschlagen",
392
+ "Insert_caption": "Insert caption",
393
+ "No_collaborators_available": "No_collaborators_available",
394
+ "Find_a_collaborator": "Find a collaborator"
390
395
  }
@@ -389,5 +389,7 @@
389
389
  "Published": "Published",
390
390
  "Delete_Successfully": "Delete Successfully",
391
391
  "Delete_failed": "Delete failed",
392
- "Insert_caption": "Insert caption"
392
+ "Insert_caption": "Insert caption",
393
+ "No_collaborators_available": "No_collaborators_available",
394
+ "Find_a_collaborator": "Find a collaborator"
393
395
  }
@@ -386,5 +386,10 @@
386
386
  "Delete_revision": "Delete revision",
387
387
  "Delete_tip": "Are you sure you want to delete {{content}} ?",
388
388
  "Revision_deleted": "Revision deleted",
389
- "Published": "Publicado"
389
+ "Published": "Publicado",
390
+ "Delete_Successfully": "Delete Successfully",
391
+ "Delete_failed": "Eliminar falló",
392
+ "Insert_caption": "Insert caption",
393
+ "No_collaborators_available": "No_collaborators_available",
394
+ "Find_a_collaborator": "Find a collaborator"
390
395
  }
@@ -386,5 +386,10 @@
386
386
  "Delete_revision": "Delete revision",
387
387
  "Delete_tip": "Are you sure you want to delete {{content}} ?",
388
388
  "Revision_deleted": "Revision deleted",
389
- "Published": "Publié"
389
+ "Published": "Publié",
390
+ "Delete_Successfully": "Delete Successfully",
391
+ "Delete_failed": "Échec de la suppression",
392
+ "Insert_caption": "Insert caption",
393
+ "No_collaborators_available": "No_collaborators_available",
394
+ "Find_a_collaborator": "Find a collaborator"
390
395
  }
@@ -386,5 +386,10 @@
386
386
  "Delete_revision": "Delete revision",
387
387
  "Delete_tip": "Are you sure you want to delete {{content}} ?",
388
388
  "Revision_deleted": "Revision deleted",
389
- "Published": "Pubblicato"
389
+ "Published": "Pubblicato",
390
+ "Delete_Successfully": "Delete Successfully",
391
+ "Delete_failed": "Rimozione fallita",
392
+ "Insert_caption": "Insert caption",
393
+ "No_collaborators_available": "No_collaborators_available",
394
+ "Find_a_collaborator": "Find a collaborator"
390
395
  }
@@ -386,5 +386,10 @@
386
386
  "Delete_revision": "Удалить редакцию",
387
387
  "Delete_tip": "Вы уверены, что хотите удалить {{content}} ?",
388
388
  "Revision_deleted": "Версия удалена",
389
- "Published": "Опубликовано"
389
+ "Published": "Опубликовано",
390
+ "Delete_Successfully": "Удалено",
391
+ "Delete_failed": "Не удалось удалить",
392
+ "Insert_caption": "Insert caption",
393
+ "No_collaborators_available": "No_collaborators_available",
394
+ "Find_a_collaborator": "Find a collaborator"
390
395
  }
@@ -389,5 +389,7 @@
389
389
  "Published": "已发布",
390
390
  "Delete_Successfully": "删除成功",
391
391
  "Delete_failed": "删除失败",
392
- "Insert_caption": "添加图片描述"
392
+ "Insert_caption": "插入标题",
393
+ "No_collaborators_available": "没有找到协作人",
394
+ "Find_a_collaborator": "查找协作人"
393
395
  }
@@ -14,6 +14,10 @@
14
14
  />
15
15
  <missing-glyph />
16
16
 
17
+ <glyph glyph-name="sdoc-add" unicode="&#58968;" d="M512-128C227.2-128 0 99.2 0 384S227.2 896 512 896s512-227.2 512-512-227.2-512-512-512z m-51.2 563.2H291.2c-19.2 0-35.2-12.8-35.2-35.2v-35.2c0-19.2 12.8-35.2 35.2-35.2h169.6V160c0-19.2 12.8-35.2 35.2-35.2h35.2c19.2 0 35.2 12.8 35.2 35.2v169.6H736c19.2 0 35.2 12.8 35.2 35.2v35.2c0 19.2-12.8 35.2-35.2 35.2h-169.6V604.8c0 19.2-12.8 35.2-35.2 35.2h-35.2c-19.2 0-35.2-12.8-35.2-35.2v-169.6z" horiz-adv-x="1024" />
18
+
19
+ <glyph glyph-name="sdoc-tag" unicode="&#58969;" d="M521.353986 860.33363l466.979644-466.979644c22.389435-22.389435 35.183398-51.175851 35.183398-83.160758s-12.793963-60.771324-35.183398-83.160759l-323.047562-319.849071c-22.389435-22.389435-51.175851-35.183398-79.962268-35.183398-31.984907 0-60.771324 12.793963-83.160758 35.183398L35.183398 374.163042c-25.587926 25.587926-38.381889 60.771324-31.984907 95.954721l31.984907 291.062655c6.396981 54.374342 47.977361 95.954721 102.351703 102.351703l291.062654 31.984907c31.984907 3.198491 67.168305-9.595472 92.756231-35.183398zM444.590209 767.577399L159.924536 735.592492l-31.984908-281.467182L578.926819-0.060372l316.65058 313.45209L444.590209 767.577399z m12.793963-127.939628c57.572833-57.572833 57.572833-147.130573 0-204.703406-25.587926-25.587926-63.969814-41.580379-102.351703-41.580379-38.381889 0-73.565286 12.793963-102.351703 41.580379-57.572833 57.572833-57.572833 147.130573 0 204.703406 57.572833 57.572833 150.329063 57.572833 204.703406 0z m-102.351703-70.366796c-6.396981 0-15.992454-3.198491-22.389435-9.595472-12.793963-12.793963-12.793963-31.984907 0-44.77887 12.793963-12.793963 31.984907-12.793963 44.77887 0 12.793963 12.793963 12.793963 31.984907 0 44.77887-6.396981 6.396981-12.793963 9.595472-22.389435 9.595472z" horiz-adv-x="1024" />
20
+
17
21
  <glyph glyph-name="sdoc-describe" unicode="&#58967;" d="M992 352H32c-19.2 0-32 12.8-32 32V832c0 19.2 12.8 32 32 32h960c19.2 0 32-12.8 32-32v-448c0-19.2-12.8-32-32-32zM96 448h832V768H96v-320z m-96-224v-96h1024v96H0z m0-224v-96h576v96H0z" horiz-adv-x="1024" />
18
22
 
19
23
  <glyph glyph-name="sdoc-add-comment" unicode="&#58939;" d="M960 896c35.2 0 64-28.8 64-64v-704c0-35.2-28.8-64-64-64h-224l-224-192-224 192H64c-35.2 0-64 28.8-64 64V832C0 867.2 28.8 896 64 896h896z m-32-96H96v-640h227.2l188.8-160 188.8 160H928V800zM288 528h448v-96H288zM464 704h96v-448h-96z" horiz-adv-x="1024" />
@@ -1,11 +1,11 @@
1
1
  @font-face {
2
2
  font-family: "sdocfont"; /* Project id 4097705 */
3
- src: url('./sdoc-editor-font/iconfont.eot?t=1698118988223'); /* IE9 */
4
- src: url('./sdoc-editor-font/iconfont.eot?t=1698118988223#iefix') format('embedded-opentype'), /* IE6-IE8 */
5
- url('./sdoc-editor-font/iconfont.woff2?t=1698118988223') format('woff2'),
6
- url('./sdoc-editor-font/iconfont.woff?t=1698118988223') format('woff'),
7
- url('./sdoc-editor-font/iconfont.ttf?t=1698118988223') format('truetype'),
8
- url('./sdoc-editor-font/iconfont.svg?t=1698118988223#sdocfont') format('svg');
3
+ src: url('./sdoc-editor-font/iconfont.eot?t=1698637167502'); /* IE9 */
4
+ src: url('./sdoc-editor-font/iconfont.eot?t=1698637167502#iefix') format('embedded-opentype'), /* IE6-IE8 */
5
+ url('./sdoc-editor-font/iconfont.woff2?t=1698637167502') format('woff2'),
6
+ url('./sdoc-editor-font/iconfont.woff?t=1698637167502') format('woff'),
7
+ url('./sdoc-editor-font/iconfont.ttf?t=1698637167502') format('truetype'),
8
+ url('./sdoc-editor-font/iconfont.svg?t=1698637167502#sdocfont') format('svg');
9
9
  }
10
10
 
11
11
  .sdocfont {
@@ -16,6 +16,14 @@
16
16
  -moz-osx-font-smoothing: grayscale;
17
17
  }
18
18
 
19
+ .sdoc-add:before {
20
+ content: "\e658";
21
+ }
22
+
23
+ .sdoc-tag:before {
24
+ content: "\e659";
25
+ }
26
+
19
27
  .sdoc-describe:before {
20
28
  content: "\e657";
21
29
  }