@seafile/sdoc-editor 0.1.20 → 0.1.21-test

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.
@@ -22,6 +22,7 @@
22
22
  font-size: 16px;
23
23
  border-bottom: 1px solid #ededed;
24
24
  color: #212529;
25
+ background: #fff;
25
26
  }
26
27
 
27
28
  .collaborators-popover .popover-container .content-list {
@@ -1,9 +1,9 @@
1
1
  .display-outline-icon {
2
- font-size: 18px;
2
+ font-size: 14px;
3
3
  color: #888;
4
4
  cursor: pointer;
5
- width: 36px;
6
- height: 36px;
5
+ width: 28px;
6
+ height: 28px;
7
7
  background: #fff;
8
8
  border-radius: 0 50% 50% 0;
9
9
  box-shadow: 0 0 6px rgba(0,0,0, 0.12);
@@ -2,7 +2,7 @@ import _defineProperty from "@babel/runtime/helpers/esm/defineProperty";
2
2
  var _MENUS_CONFIG_MAP, _HEADER_TITLE_MAP;
3
3
  // extension plugin
4
4
  export var BLOCKQUOTE = 'blockquote';
5
- export var BOLD = 'blod';
5
+ export var BOLD = 'bold';
6
6
  export var ITALIC = 'italic';
7
7
  export var HEADER = 'header';
8
8
  export var HEADER1 = 'header1';
@@ -29,6 +29,7 @@ export var TABLE_ROW = 'table-row';
29
29
  export var FORMULA = 'formula';
30
30
  export var COLUMN = 'column';
31
31
  export var TEXTSTYLE = 'text-style';
32
+ export var BOLD_ITALIC = 'bold-italic';
32
33
 
33
34
  // menus config
34
35
  export var MENUS_CONFIG_MAP = (_MENUS_CONFIG_MAP = {}, _defineProperty(_MENUS_CONFIG_MAP, BLOCKQUOTE, {
@@ -1,3 +1,4 @@
1
+ import MarkDownPlugin from './markdown';
1
2
  import HeaderPlugin from './header';
2
3
  import LinkPlugin from './link';
3
4
  import BlockquotePlugin from './blockquote';
@@ -5,6 +6,6 @@ import ListPlugin from './list';
5
6
  import CheckListPlugin from './check-list';
6
7
  import TextPlugin from './text-style';
7
8
  import CodeBlockPlugin from './code-block';
8
- var Plugins = [HeaderPlugin, LinkPlugin, BlockquotePlugin, ListPlugin, CheckListPlugin, TextPlugin, CodeBlockPlugin];
9
+ var Plugins = [MarkDownPlugin, HeaderPlugin, LinkPlugin, BlockquotePlugin, ListPlugin, CheckListPlugin, TextPlugin, CodeBlockPlugin];
9
10
  export default Plugins;
10
- export { HeaderPlugin, LinkPlugin, BlockquotePlugin, ListPlugin, CheckListPlugin, TextPlugin, CodeBlockPlugin };
11
+ export { MarkDownPlugin, HeaderPlugin, LinkPlugin, BlockquotePlugin, ListPlugin, CheckListPlugin, TextPlugin, CodeBlockPlugin };
@@ -0,0 +1,5 @@
1
+ import withMarkDown from './plugin';
2
+ var MarkDownPlugin = {
3
+ editorPlugin: withMarkDown
4
+ };
5
+ export default MarkDownPlugin;
@@ -0,0 +1,165 @@
1
+ import _objectSpread from "@babel/runtime/helpers/esm/objectSpread2";
2
+ import { Editor, Transforms, Range } from '@seafile/slate';
3
+ import { toggleList } from '../list/transforms';
4
+ import { getSelectedNodeByType } from '../../core';
5
+ import { HEADER1, HEADER2, HEADER3, HEADER4, HEADER5, HEADER6, UNORDERED_LIST, BLOCKQUOTE, BOLD, ITALIC, BOLD_ITALIC } from '../../constants';
6
+ var KEY_TO_TYPE_FOR_SPACE = {
7
+ // Title shortcut
8
+ '#': HEADER1,
9
+ '##': HEADER2,
10
+ '###': HEADER3,
11
+ '####': HEADER4,
12
+ '#####': HEADER5,
13
+ '######': HEADER6,
14
+ // List shortcut
15
+ '*': UNORDERED_LIST,
16
+ '-': UNORDERED_LIST,
17
+ // Reference shortcut key
18
+ '>': BLOCKQUOTE
19
+ };
20
+ var KEY_TO_INLINE_TYPE_FOR_SPACE = {
21
+ // Inline shortcut keys
22
+ '**': BOLD,
23
+ '*': ITALIC,
24
+ '***': BOLD_ITALIC
25
+ };
26
+ var getBeforeText = function getBeforeText(editor) {
27
+ var selection = editor.selection;
28
+ if (selection == null) return {
29
+ beforeText: '',
30
+ range: null
31
+ };
32
+ var anchor = selection.anchor;
33
+ // Find the block element above the current text
34
+ var block = Editor.above(editor, {
35
+ match: function match(n) {
36
+ return Editor.isBlock(editor, n);
37
+ }
38
+ });
39
+ if (block == null) return {
40
+ beforeText: '',
41
+ range: null
42
+ };
43
+ var blockPath = block[1];
44
+ var blockStart = Editor.start(editor, blockPath); // The starting position of the block element
45
+ var range = {
46
+ anchor: anchor,
47
+ focus: blockStart
48
+ };
49
+ var beforeText = Editor.string(editor, range) || '';
50
+ return {
51
+ beforeText: beforeText,
52
+ range: range
53
+ };
54
+ };
55
+ var withMarkDown = function withMarkDown(editor) {
56
+ var insertText = editor.insertText;
57
+ var newEditor = editor;
58
+
59
+ // When entering a space, convert markdown
60
+ newEditor.insertText = function (text) {
61
+ var selection = editor.selection;
62
+ if (selection == null) return insertText(text);
63
+ if (Range.isExpanded(selection)) return insertText(text);
64
+ if (getSelectedNodeByType(editor, 'paragraph') == null) return insertText(text); // It must be in paragraph
65
+ if (text !== ' ') return insertText(text); // The value must be an input space
66
+
67
+ // Gets the text before the space
68
+ var _getBeforeText = getBeforeText(editor),
69
+ beforeText = _getBeforeText.beforeText,
70
+ range = _getBeforeText.range;
71
+ if (!beforeText || !range) return insertText(text);
72
+
73
+ // Based on the keyword, find the type of element you want to convert
74
+ var type = KEY_TO_TYPE_FOR_SPACE[beforeText.trim()];
75
+ var boldType = KEY_TO_INLINE_TYPE_FOR_SPACE[beforeText.slice(-2)];
76
+ var italicType = KEY_TO_INLINE_TYPE_FOR_SPACE[beforeText.slice(-1)];
77
+ var italicAndBoldType = KEY_TO_INLINE_TYPE_FOR_SPACE[beforeText.slice(-3)];
78
+ if (!type && !boldType && !italicType && !italicAndBoldType) return insertText(text);
79
+ if (italicAndBoldType === BOLD_ITALIC) {
80
+ var restStr = beforeText === null || beforeText === void 0 ? void 0 : beforeText.slice(0, beforeText.length - 3);
81
+ var startOffset = restStr === null || restStr === void 0 ? void 0 : restStr.lastIndexOf('***');
82
+ var endOffset = (beforeText === null || beforeText === void 0 ? void 0 : beforeText.lastIndexOf('***')) + 3;
83
+ if (startOffset !== -3) {
84
+ Transforms.delete(editor, {
85
+ at: {
86
+ anchor: {
87
+ path: range.focus.path,
88
+ offset: startOffset
89
+ },
90
+ focus: _objectSpread({}, selection.focus)
91
+ },
92
+ voids: true
93
+ });
94
+ var newText = beforeText.slice(startOffset + 3, endOffset - 3);
95
+ Editor.addMark(editor, 'BOLD', true);
96
+ Editor.addMark(editor, 'ITALIC', true);
97
+ return insertText(newText);
98
+ }
99
+ }
100
+ if (boldType === BOLD) {
101
+ var _restStr = beforeText.slice(0, beforeText.length - 2);
102
+ var _startOffset = _restStr.lastIndexOf('**');
103
+ var _endOffset = beforeText.lastIndexOf('**') + 2;
104
+ if (_startOffset === -1) {
105
+ return insertText(text);
106
+ }
107
+ Transforms.delete(editor, {
108
+ at: {
109
+ anchor: {
110
+ path: range.focus.path,
111
+ offset: _startOffset
112
+ },
113
+ focus: _objectSpread({}, selection.focus)
114
+ },
115
+ voids: true
116
+ });
117
+ var newType = boldType.toUpperCase();
118
+ var _newText = beforeText.slice(_startOffset + 2, _endOffset - 2);
119
+ Editor.addMark(editor, newType, true);
120
+ return insertText(_newText);
121
+ }
122
+ if (italicType === ITALIC) {
123
+ var _restStr2 = beforeText === null || beforeText === void 0 ? void 0 : beforeText.slice(0, beforeText.length - 1);
124
+ var _startOffset2 = _restStr2 === null || _restStr2 === void 0 ? void 0 : _restStr2.lastIndexOf('*');
125
+ var _endOffset2 = (beforeText === null || beforeText === void 0 ? void 0 : beforeText.lastIndexOf('*')) + 1;
126
+ if (_startOffset2 !== -1) {
127
+ Transforms.delete(editor, {
128
+ at: {
129
+ anchor: {
130
+ path: range.focus.path,
131
+ offset: _startOffset2
132
+ },
133
+ focus: _objectSpread({}, selection.focus)
134
+ },
135
+ voids: true
136
+ });
137
+ var _newType = italicType.toUpperCase();
138
+ var _newText2 = beforeText.slice(_startOffset2 + 1, _endOffset2 - 1);
139
+ Editor.addMark(editor, _newType, true);
140
+ return insertText(_newText2);
141
+ }
142
+ }
143
+
144
+ // Delete element
145
+ Transforms.select(editor, range);
146
+ Transforms.delete(editor);
147
+ if (type === UNORDERED_LIST) {
148
+ toggleList(editor, type);
149
+ return;
150
+ }
151
+ if (type === BLOCKQUOTE) {
152
+ Transforms.setNodes(editor, {
153
+ type: type
154
+ }, {
155
+ mode: 'highest'
156
+ });
157
+ return;
158
+ }
159
+ Transforms.setNodes(editor, {
160
+ type: type
161
+ });
162
+ };
163
+ return newEditor;
164
+ };
165
+ export default withMarkDown;
@@ -3,32 +3,49 @@ import _createClass from "@babel/runtime/helpers/esm/createClass";
3
3
  import _inherits from "@babel/runtime/helpers/esm/inherits";
4
4
  import _createSuper from "@babel/runtime/helpers/esm/createSuper";
5
5
  import React, { Fragment } from 'react';
6
+ import { Dropdown, DropdownToggle, DropdownMenu, DropdownItem } from 'reactstrap';
6
7
  import CollaboratorsOperation from './collaborators-operation';
7
8
  import context from '../../context';
9
+ import { withTranslation } from 'react-i18next';
8
10
  import './style.css';
9
11
  var DocOperations = /*#__PURE__*/function (_React$Component) {
10
12
  _inherits(DocOperations, _React$Component);
11
13
  var _super = _createSuper(DocOperations);
12
- function DocOperations() {
14
+ function DocOperations(props) {
13
15
  var _this;
14
16
  _classCallCheck(this, DocOperations);
15
- for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {
16
- args[_key] = arguments[_key];
17
- }
18
- _this = _super.call.apply(_super, [this].concat(args));
17
+ _this = _super.call(this, props);
18
+ _this.toggleDropdown = function () {
19
+ _this.setState({
20
+ isDropdownOpen: !_this.state.isDropdownOpen
21
+ });
22
+ };
19
23
  _this.toggleHistory = function (event) {
20
24
  event.stopPropagation();
21
25
  event.nativeEvent.stopImmediatePropagation();
22
26
  var historyURL = context.getSetting('historyURL');
23
27
  window.location.href = historyURL;
24
28
  };
29
+ _this.state = {
30
+ isDropdownOpen: false
31
+ };
25
32
  return _this;
26
33
  }
27
34
  _createClass(DocOperations, [{
28
35
  key: "render",
29
36
  value: function render() {
37
+ var t = this.props.t;
38
+ var isDropdownOpen = this.state.isDropdownOpen;
30
39
  var docPerm = context.getSetting('docPerm');
31
40
  var historyURL = context.getSetting('historyURL');
41
+ var parentFolderURL = context.getSetting('parentFolderURL');
42
+ var dropdownItems = [];
43
+ if (parentFolderURL) {
44
+ dropdownItems.push({
45
+ text: t('Open_parent_folder'),
46
+ URL: parentFolderURL
47
+ });
48
+ }
32
49
  return /*#__PURE__*/React.createElement(Fragment, null, /*#__PURE__*/React.createElement("div", {
33
50
  className: "doc-ops"
34
51
  }, /*#__PURE__*/React.createElement("span", {
@@ -40,13 +57,25 @@ var DocOperations = /*#__PURE__*/function (_React$Component) {
40
57
  onClick: this.toggleHistory
41
58
  }, /*#__PURE__*/React.createElement("i", {
42
59
  className: "iconfont icon-history"
43
- })), /*#__PURE__*/React.createElement(CollaboratorsOperation, null), /*#__PURE__*/React.createElement("span", {
44
- className: "op-item"
60
+ })), /*#__PURE__*/React.createElement(CollaboratorsOperation, null), dropdownItems.length > 0 && /*#__PURE__*/React.createElement(Dropdown, {
61
+ isOpen: isDropdownOpen,
62
+ toggle: this.toggleDropdown
63
+ }, /*#__PURE__*/React.createElement(DropdownToggle, {
64
+ className: "op-item",
65
+ tag: "span"
45
66
  }, /*#__PURE__*/React.createElement("i", {
46
67
  className: "iconfont icon-menu"
47
- }))));
68
+ })), /*#__PURE__*/React.createElement(DropdownMenu, {
69
+ right: true
70
+ }, dropdownItems.map(function (item, index) {
71
+ return /*#__PURE__*/React.createElement(DropdownItem, {
72
+ tag: "a",
73
+ href: item.URL,
74
+ key: index
75
+ }, item.text);
76
+ })))));
48
77
  }
49
78
  }]);
50
79
  return DocOperations;
51
80
  }(React.Component);
52
- export default DocOperations;
81
+ export default withTranslation('sdoc-editor')(DocOperations);
package/dist/config.js ADDED
@@ -0,0 +1,16 @@
1
+ var serverConfig = {
2
+ //serviceUrl: "http://127.0.0.1:8000",
3
+ serviceUrl: "http://192.168.1.100:8000",
4
+ username: "lj@11.com",
5
+ password: "11",
6
+ repoID: "79d1fa93-4b5f-4d6c-8fb5-ad3958e1fa47",
7
+ userInfo: {
8
+ username: 'lj@11.com',
9
+ name: 'lj-',
10
+ contact_email: 'lj@11.com'
11
+ },
12
+ filePath: '/xxx.md',
13
+ fileName: 'xxx.md',
14
+ dirPath: '/'
15
+ };
16
+ export { serverConfig };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@seafile/sdoc-editor",
3
- "version": "0.1.20",
3
+ "version": "0.1.21-test",
4
4
  "private": false,
5
5
  "description": "This is a sdoc editor",
6
6
  "main": "dist/index.js",
@@ -235,5 +235,6 @@
235
235
  "Server_is_disconnected_Reconnecting": "Server is disconnected. Reconnecting...",
236
236
  "Server_is_reconnected": "Server is reconnected.",
237
237
  "Outline": "Outline",
238
- "Headings_you_add_to_the_document_will_appear_here": "Headings you add to the document will appear here"
238
+ "Headings_you_add_to_the_document_will_appear_here": "Headings you add to the document will appear here",
239
+ "Open_parent_folder": "Open parent folder"
239
240
  }