@seafile/seafile-editor 0.4.8 → 1.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 (441) hide show
  1. package/.babelrc +5 -0
  2. package/.eslintignore +19 -0
  3. package/.eslintrc.json +52 -0
  4. package/.github/workflows/nodejs.yml +25 -0
  5. package/.vscode/settings.json +5 -0
  6. package/config/config.common.js +157 -0
  7. package/config/config.dev.js +53 -0
  8. package/config/jest/cssTransform.js +16 -0
  9. package/config/jest/fileTransform.js +40 -0
  10. package/config/utils/theme.css.js +103 -0
  11. package/config.js +61 -0
  12. package/dev-server.js +145 -0
  13. package/jest.config.js +16 -0
  14. package/package.json +81 -131
  15. package/public/locales/en/seafile-editor.json +145 -148
  16. package/public/locales/zh-CN/seafile-editor.json +123 -135
  17. package/public/media/seafile-ui.css +6 -11166
  18. package/scripts/ejs.js +16 -0
  19. package/site/_i18n/index.js +35 -0
  20. package/site/api/index.js +212 -0
  21. package/site/app.js +21 -0
  22. package/site/assets/css/app.css +47 -0
  23. package/site/assets/css/seafile-editor.css +33 -0
  24. package/site/commons/loading/index.js +14 -0
  25. package/site/commons/loading/style.css +49 -0
  26. package/site/commons/switch/index.css +14 -0
  27. package/site/commons/switch/index.js +37 -0
  28. package/site/commons/toast/alert.js +106 -0
  29. package/site/commons/toast/index.js +5 -0
  30. package/site/commons/toast/toast.js +195 -0
  31. package/site/commons/toast/toastManager.js +138 -0
  32. package/site/commons/toast/toaster.js +64 -0
  33. package/site/index.html +23 -0
  34. package/site/index.js +21 -0
  35. package/site/pages/home.js +21 -0
  36. package/site/pages/plain-markdown-view.js +6 -0
  37. package/site/pages/rich-seafile-editor.js +72 -0
  38. package/site/pages/seafile-editor.js +39 -0
  39. package/site/pages/seafile-viewer.js +45 -0
  40. package/site/pages/simple-editor.js +44 -0
  41. package/site/pages/wiki-viewer.js +7 -0
  42. package/site/setting.js +36 -0
  43. package/site/setting.local.dist.js +23 -0
  44. package/src/assets/css/slate-editor.css +57 -0
  45. package/src/constants/event-types.js +11 -0
  46. package/src/constants/hot-keys.js +47 -0
  47. package/src/containers/article-info/index.js +49 -0
  48. package/src/containers/article-info/style.css +52 -0
  49. package/src/containers/custom/get-event-transfer.js +28 -0
  50. package/{dist → src}/containers/custom/set-event-transfer.js +13 -11
  51. package/src/containers/hotkeys-helper/classify-hotkeys.js +30 -0
  52. package/src/containers/hotkeys-helper/index.js +43 -0
  53. package/{dist/assets/css/user-help.css → src/containers/hotkeys-helper/style.css} +37 -29
  54. package/src/containers/loading/index.js +14 -0
  55. package/src/containers/loading/style.css +49 -0
  56. package/src/containers/outline/index.js +75 -0
  57. package/src/containers/outline/outline-item.js +28 -0
  58. package/src/containers/outline/style.css +45 -0
  59. package/src/editors/plain-markdown-editor/code-mirror.css +8 -0
  60. package/src/editors/plain-markdown-editor/code-mirror.js +73 -0
  61. package/src/editors/plain-markdown-editor/index.js +136 -0
  62. package/{dist/assets/editor/plain-editor.css → src/editors/plain-markdown-editor/style.css} +12 -4
  63. package/src/editors/simple-slate-editor /index.js +71 -0
  64. package/src/editors/simple-slate-editor /with-props-editor.js +15 -0
  65. package/src/editors/slate-editor/editor-help/index.js +46 -0
  66. package/src/editors/slate-editor/editor-help/style.css +15 -0
  67. package/src/editors/slate-editor/index.js +77 -0
  68. package/src/editors/slate-editor/with-props-editor.js +15 -0
  69. package/src/editors/slate-viewer/index.js +35 -0
  70. package/src/editors/slate-viewer/style.css +40 -0
  71. package/src/extension/commons/element-popover/index.js +52 -0
  72. package/src/extension/commons/index.js +10 -0
  73. package/src/extension/commons/menu/index.js +9 -0
  74. package/src/extension/commons/menu/menu-drop-down.js +110 -0
  75. package/src/extension/commons/menu/menu-group.js +20 -0
  76. package/src/extension/commons/menu/menu-item.js +60 -0
  77. package/src/extension/commons/menu/menu.css +120 -0
  78. package/src/extension/commons/tooltip/index.css +21 -0
  79. package/src/extension/commons/tooltip/index.js +26 -0
  80. package/src/extension/constants/element-types.js +23 -0
  81. package/src/extension/constants/index.js +37 -0
  82. package/src/extension/constants/keyboard.js +29 -0
  83. package/src/extension/constants/menus-config.js +149 -0
  84. package/src/extension/core/index.js +3 -0
  85. package/src/extension/core/queries/index.js +410 -0
  86. package/src/extension/core/transforms/focus-editor.js +12 -0
  87. package/src/extension/core/transforms/index.js +4 -0
  88. package/src/extension/core/transforms/move-children.js +23 -0
  89. package/src/extension/core/transforms/remove-node-children.js +8 -0
  90. package/src/extension/core/transforms/replace-node-children.js +14 -0
  91. package/src/extension/core/utils/index.js +76 -0
  92. package/src/extension/editor.js +14 -0
  93. package/src/extension/index.js +15 -0
  94. package/src/extension/plugins/blockquote/helpers.js +65 -0
  95. package/src/extension/plugins/blockquote/index.js +13 -0
  96. package/src/extension/plugins/blockquote/menu/index.js +31 -0
  97. package/src/extension/plugins/blockquote/plugin.js +64 -0
  98. package/src/extension/plugins/blockquote/render-elem.js +9 -0
  99. package/src/extension/plugins/check-list/helper.js +34 -0
  100. package/src/extension/plugins/check-list/index.js +14 -0
  101. package/src/extension/plugins/check-list/menu/index.js +44 -0
  102. package/src/extension/plugins/check-list/plugin.js +46 -0
  103. package/src/extension/plugins/check-list/render-elem.js +23 -0
  104. package/src/extension/plugins/clear-format/helpers.js +48 -0
  105. package/src/extension/plugins/clear-format/menu/index.js +39 -0
  106. package/src/extension/plugins/code-block/helpers.js +107 -0
  107. package/src/extension/plugins/code-block/index.js +14 -0
  108. package/src/extension/plugins/code-block/menu/index.js +40 -0
  109. package/src/extension/plugins/code-block/plugin.js +210 -0
  110. package/src/extension/plugins/code-block/render-elem/constant.js +17 -0
  111. package/src/extension/plugins/code-block/render-elem/index.js +55 -0
  112. package/src/extension/plugins/code-block/render-elem/language-selector.js +38 -0
  113. package/src/extension/plugins/code-block/render-elem/style.css +27 -0
  114. package/src/extension/plugins/formula/formula.css +22 -0
  115. package/src/extension/plugins/formula/helper.js +68 -0
  116. package/src/extension/plugins/formula/index.js +14 -0
  117. package/src/extension/plugins/formula/menu/formula-modal.js +73 -0
  118. package/src/extension/plugins/formula/menu/index.js +63 -0
  119. package/src/extension/plugins/formula/plugin.js +18 -0
  120. package/src/extension/plugins/formula/render-elem.js +40 -0
  121. package/src/extension/plugins/header/helper.js +47 -0
  122. package/src/extension/plugins/header/index.js +14 -0
  123. package/src/extension/plugins/header/menu/index.js +114 -0
  124. package/src/extension/plugins/header/menu/style.css +115 -0
  125. package/src/extension/plugins/header/plugin.js +134 -0
  126. package/src/extension/plugins/header/render-elem.js +31 -0
  127. package/src/extension/plugins/image/helper.js +50 -0
  128. package/src/extension/plugins/image/index.js +14 -0
  129. package/src/extension/plugins/image/menu/image-menu-dialog.js +68 -0
  130. package/src/extension/plugins/image/menu/image-menu-popover.js +76 -0
  131. package/src/extension/plugins/image/menu/index.js +61 -0
  132. package/src/extension/plugins/image/menu/style.css +36 -0
  133. package/src/extension/plugins/image/plugin.js +23 -0
  134. package/src/extension/plugins/image/render-element/image-previewer.js +71 -0
  135. package/src/extension/plugins/image/render-element/index.js +94 -0
  136. package/src/extension/plugins/image/render-element/style.css +60 -0
  137. package/src/extension/plugins/index.js +47 -0
  138. package/src/extension/plugins/link/helper.js +161 -0
  139. package/src/extension/plugins/link/index.js +14 -0
  140. package/src/extension/plugins/link/menu/index.js +82 -0
  141. package/src/extension/plugins/link/menu/link-modal.js +135 -0
  142. package/src/extension/plugins/link/plugin.js +85 -0
  143. package/src/extension/plugins/link/render-elem/index.js +69 -0
  144. package/src/extension/plugins/link/render-elem/link-popover.js +79 -0
  145. package/src/extension/plugins/link/render-elem/style.css +60 -0
  146. package/src/extension/plugins/list/constant.js +3 -0
  147. package/src/extension/plugins/list/helpers.js +53 -0
  148. package/src/extension/plugins/list/index.js +14 -0
  149. package/src/extension/plugins/list/menu/index.js +48 -0
  150. package/src/extension/plugins/list/plugin/index.js +48 -0
  151. package/src/extension/plugins/list/plugin/insert-break-list.js +25 -0
  152. package/src/extension/plugins/list/plugin/insert-fragment-list.js +162 -0
  153. package/src/extension/plugins/list/plugin/normalize-list.js +64 -0
  154. package/src/extension/plugins/list/plugin/on-tab-handle.js +34 -0
  155. package/src/extension/plugins/list/queries/index.js +39 -0
  156. package/src/extension/plugins/list/render-elem/index.js +26 -0
  157. package/src/extension/plugins/list/render-elem/style.css +6 -0
  158. package/src/extension/plugins/list/transforms/index.js +23 -0
  159. package/src/extension/plugins/list/transforms/insert-list-item.js +65 -0
  160. package/src/extension/plugins/list/transforms/move-list-item-down.js +40 -0
  161. package/src/extension/plugins/list/transforms/move-list-item-up.js +105 -0
  162. package/src/extension/plugins/list/transforms/move-list-items-to-list.js +58 -0
  163. package/src/extension/plugins/list/transforms/move-list-items.js +76 -0
  164. package/src/extension/plugins/list/transforms/normalize-list-item.js +92 -0
  165. package/src/extension/plugins/list/transforms/normalize-nested-list.js +31 -0
  166. package/src/extension/plugins/list/transforms/remove-first-list-item.js +11 -0
  167. package/src/extension/plugins/list/transforms/transforms-to-list.js +91 -0
  168. package/src/extension/plugins/list/transforms/unwrap-list.js +44 -0
  169. package/src/extension/plugins/node-id/constants.js +18 -0
  170. package/src/extension/plugins/node-id/helpers.js +61 -0
  171. package/src/extension/plugins/node-id/index.js +7 -0
  172. package/src/extension/plugins/node-id/with-node-id.js +37 -0
  173. package/src/extension/plugins/paragraph/helper.js +9 -0
  174. package/src/extension/plugins/paragraph/index.js +12 -0
  175. package/src/extension/plugins/paragraph/plugin.js +40 -0
  176. package/src/extension/plugins/paragraph/render-elem.js +11 -0
  177. package/src/extension/plugins/table/constant.js +3 -0
  178. package/src/extension/plugins/table/helper.js +175 -0
  179. package/src/extension/plugins/table/index.js +15 -0
  180. package/src/extension/plugins/table/menu/index.js +69 -0
  181. package/src/extension/plugins/table/menu/style.css +32 -0
  182. package/src/extension/plugins/table/menu/table-operator.js +101 -0
  183. package/src/extension/plugins/table/menu/table-size-selector.js +71 -0
  184. package/src/extension/plugins/table/model.js +69 -0
  185. package/src/extension/plugins/table/plugin.js +159 -0
  186. package/src/extension/plugins/table/render-elem/context-menu.js +78 -0
  187. package/src/extension/plugins/table/render-elem/index.js +157 -0
  188. package/src/extension/plugins/table/render-elem/style.css +94 -0
  189. package/src/extension/plugins/table/table-operations.js +162 -0
  190. package/src/extension/plugins/text-style/helpers.js +38 -0
  191. package/src/extension/plugins/text-style/index.js +12 -0
  192. package/src/extension/plugins/text-style/menu/index.js +41 -0
  193. package/src/extension/plugins/text-style/plugin.js +37 -0
  194. package/src/extension/plugins/text-style/render-elem.js +45 -0
  195. package/src/extension/render/render-element.js +82 -0
  196. package/src/extension/render/render-leaf.js +16 -0
  197. package/src/extension/toolbar/header-toolbar/index.js +129 -0
  198. package/src/extension/toolbar/header-toolbar/style.css +41 -0
  199. package/src/extension/toolbar/index.js +5 -0
  200. package/src/extension/toolbar/user-help/shortcut-dialog.js +144 -0
  201. package/src/hooks/use-mathjax.js +44 -0
  202. package/src/hooks/use-scroll-context.js +14 -0
  203. package/src/hooks/use-selection-update.js +14 -0
  204. package/src/index.js +22 -0
  205. package/src/pages/markdown-editor.js +53 -0
  206. package/src/pages/markdown-view.js +36 -0
  207. package/src/pages/rich-markdown-editor.js +95 -0
  208. package/src/pages/simple-editor.js +52 -0
  209. package/src/slate-convert/html-to-slate/constants.js +54 -0
  210. package/src/slate-convert/html-to-slate/helper.js +22 -0
  211. package/src/slate-convert/html-to-slate/index.js +144 -0
  212. package/src/slate-convert/html-to-slate/rules/blockquote.js +16 -0
  213. package/src/slate-convert/html-to-slate/rules/check-list.js +22 -0
  214. package/src/slate-convert/html-to-slate/rules/code-block.js +91 -0
  215. package/src/slate-convert/html-to-slate/rules/header.js +18 -0
  216. package/src/slate-convert/html-to-slate/rules/image.js +18 -0
  217. package/src/slate-convert/html-to-slate/rules/index.js +23 -0
  218. package/src/slate-convert/html-to-slate/rules/link.js +24 -0
  219. package/src/slate-convert/html-to-slate/rules/list.js +52 -0
  220. package/src/slate-convert/html-to-slate/rules/paragraph.js +16 -0
  221. package/src/slate-convert/html-to-slate/rules/table.js +37 -0
  222. package/src/slate-convert/html-to-slate/rules/text.js +63 -0
  223. package/src/slate-convert/index.js +11 -0
  224. package/src/slate-convert/md-to-html/index.js +44 -0
  225. package/src/slate-convert/md-to-html/sanitize-schema.js +41 -0
  226. package/src/slate-convert/md-to-slate/index.js +42 -0
  227. package/src/slate-convert/md-to-slate/transform.js +336 -0
  228. package/src/slate-convert/slate-to-md/index.js +44 -0
  229. package/src/slate-convert/slate-to-md/transform.js +248 -0
  230. package/src/utils/common.js +30 -0
  231. package/src/utils/deserialize-html.js +174 -0
  232. package/src/utils/dom-utils.js +45 -0
  233. package/src/utils/event-bus.js +37 -0
  234. package/src/utils/event-handler.js +36 -0
  235. package/src/utils/object-utils.js +51 -0
  236. package/tests/core/constants/index.js +54 -0
  237. package/tests/core/index.js +11 -0
  238. package/tests/core/jsx/index.js +9 -0
  239. package/tests/core/stub-editor/index.js +26 -0
  240. package/tests/core/utils.js +58 -0
  241. package/tests/extension/plugins/list/insert-block.test.js +40 -0
  242. package/tests/extension/plugins/list/insert-fragment-list.test.js +392 -0
  243. package/tests/extension/plugins/list/toggle-list.test.js +160 -0
  244. package/tests/extension/plugins/text/text.test.js +29 -0
  245. package/tests/extension/plugins/text-style/toggle-text-style.test.js +148 -0
  246. package/tests/slate-convert/html-to-slate/blockquote.test.js +107 -0
  247. package/tests/slate-convert/html-to-slate/code-block.test.js +32 -0
  248. package/tests/slate-convert/html-to-slate/header.test.js +56 -0
  249. package/tests/slate-convert/html-to-slate/link.test.js +77 -0
  250. package/tests/slate-convert/html-to-slate/list.test.js +190 -0
  251. package/tests/slate-convert/html-to-slate/paragraph.test.js +40 -0
  252. package/tests/slate-convert/html-to-slate/text.test.js +131 -0
  253. package/tests/slate-convert/md-to-html/blockquote.test.js +110 -0
  254. package/tests/slate-convert/md-to-html/check-list.test.js +19 -0
  255. package/tests/slate-convert/md-to-html/code-block.test.js +19 -0
  256. package/tests/slate-convert/md-to-html/header.test.js +20 -0
  257. package/tests/slate-convert/md-to-html/image.test.js +17 -0
  258. package/tests/slate-convert/md-to-html/image_reference.test.js +17 -0
  259. package/tests/slate-convert/md-to-html/link.test.js +15 -0
  260. package/tests/slate-convert/md-to-html/link_reference.test.js +15 -0
  261. package/tests/slate-convert/md-to-html/list-ordered.test.js +22 -0
  262. package/tests/slate-convert/md-to-html/list-unordered.test.js +22 -0
  263. package/tests/slate-convert/md-to-html/paragraph.test.js +15 -0
  264. package/tests/slate-convert/md-to-html/table.test.js +29 -0
  265. package/tests/slate-convert/md-to-html/text_base.test.js +14 -0
  266. package/tests/slate-convert/md-to-html/text_bold.test.js +14 -0
  267. package/tests/slate-convert/md-to-html/text_bold_italic.test.js +15 -0
  268. package/tests/slate-convert/md-to-html/text_code.test.js +14 -0
  269. package/tests/slate-convert/md-to-html/text_code_bold.test.js +14 -0
  270. package/tests/slate-convert/md-to-html/text_code_bold_italic.test.js +14 -0
  271. package/tests/slate-convert/md-to-html/text_code_italic.test.js +14 -0
  272. package/tests/slate-convert/md-to-html/text_italic.test.js +14 -0
  273. package/tests/slate-convert/md-to-slate/blockquote.test.js +200 -0
  274. package/tests/slate-convert/md-to-slate/check-list.test.js +34 -0
  275. package/tests/slate-convert/md-to-slate/code-block.test.js +32 -0
  276. package/tests/slate-convert/md-to-slate/header.test.js +49 -0
  277. package/tests/slate-convert/md-to-slate/image.test.js +31 -0
  278. package/tests/slate-convert/md-to-slate/link.test.js +30 -0
  279. package/tests/slate-convert/md-to-slate/list-ordered.test.js +42 -0
  280. package/tests/slate-convert/md-to-slate/list-unordered.test.js +42 -0
  281. package/tests/slate-convert/md-to-slate/paragraph.test.js +19 -0
  282. package/tests/slate-convert/md-to-slate/table.test.js +34 -0
  283. package/tests/slate-convert/md-to-slate/text_base.test.js +19 -0
  284. package/tests/slate-convert/md-to-slate/text_bold.test.js +22 -0
  285. package/tests/slate-convert/md-to-slate/text_bold_italic.test.js +23 -0
  286. package/tests/slate-convert/md-to-slate/text_code.test.js +22 -0
  287. package/tests/slate-convert/md-to-slate/text_code_bold.test.js +23 -0
  288. package/tests/slate-convert/md-to-slate/text_code_bold_italic.test.js +24 -0
  289. package/tests/slate-convert/md-to-slate/text_code_italic.test.js +23 -0
  290. package/tests/slate-convert/md-to-slate/text_italic.test.js +22 -0
  291. package/tests/slate-convert/slate-to-md/blockquote.test.js +416 -0
  292. package/tests/slate-convert/slate-to-md/check-list.test.js +96 -0
  293. package/tests/slate-convert/slate-to-md/code-block.test.js +35 -0
  294. package/tests/slate-convert/slate-to-md/formula.test.js +26 -0
  295. package/tests/slate-convert/slate-to-md/header.test.js +109 -0
  296. package/tests/slate-convert/slate-to-md/image.test.js +98 -0
  297. package/tests/slate-convert/slate-to-md/link.test.js +52 -0
  298. package/tests/slate-convert/slate-to-md/list-ordered.test.js +87 -0
  299. package/tests/slate-convert/slate-to-md/list-unordered.test.js +81 -0
  300. package/tests/slate-convert/slate-to-md/paragraph.test.js +28 -0
  301. package/tests/slate-convert/slate-to-md/table.test.js +56 -0
  302. package/tests/slate-convert/slate-to-md/text_base.test.js +28 -0
  303. package/tests/slate-convert/slate-to-md/text_bold.test.js +36 -0
  304. package/tests/slate-convert/slate-to-md/text_bold_italic.test.js +42 -0
  305. package/tests/slate-convert/slate-to-md/text_code.test.js +31 -0
  306. package/tests/slate-convert/slate-to-md/text_code_bold.test.js +37 -0
  307. package/tests/slate-convert/slate-to-md/text_code_bold_italic.test.js +43 -0
  308. package/tests/slate-convert/slate-to-md/text_code_italic.test.js +37 -0
  309. package/tests/slate-convert/slate-to-md/text_italic.test.js +36 -0
  310. package/README.md +0 -52
  311. package/TODO.md +0 -55
  312. package/dist/assets/css/diff-viewer.css +0 -105
  313. package/dist/assets/css/formula.css +0 -19
  314. package/dist/assets/css/history-viewer.css +0 -104
  315. package/dist/assets/css/image.css +0 -134
  316. package/dist/assets/css/link.css +0 -7
  317. package/dist/assets/css/markdown-editor.css +0 -12
  318. package/dist/assets/css/markdown-viewer.css +0 -69
  319. package/dist/assets/css/navbar-imgbutton.css +0 -83
  320. package/dist/assets/css/outline.css +0 -29
  321. package/dist/assets/css/table.css +0 -57
  322. package/dist/assets/css/textlink-hovermenu.css +0 -47
  323. package/dist/assets/css/topbar.css +0 -350
  324. package/dist/assets/css/tree-view.css +0 -67
  325. package/dist/assets/editor/seatable-editor.css +0 -77
  326. package/dist/assets/editor/simple-editor.css +0 -77
  327. package/dist/components/click-outside.js +0 -46
  328. package/dist/components/context-menu.js +0 -97
  329. package/dist/components/dialogs/add-formula-dialog.js +0 -116
  330. package/dist/components/dialogs/add-image-dialog.js +0 -69
  331. package/dist/components/dialogs/add-link-dialog.js +0 -133
  332. package/dist/components/dialogs/shortcut-dialog.js +0 -131
  333. package/dist/components/error-boundary.js +0 -28
  334. package/dist/components/load-script/index.js +0 -69
  335. package/dist/components/loading.js +0 -25
  336. package/dist/components/menu/index.js +0 -4
  337. package/dist/components/menu/item.js +0 -49
  338. package/dist/components/menu/menu.js +0 -38
  339. package/dist/components/menu/style.css +0 -42
  340. package/dist/components/modal-portal.js +0 -38
  341. package/dist/components/outline/index.js +0 -92
  342. package/dist/components/outline/outline-item.js +0 -58
  343. package/dist/components/select/_option.js +0 -44
  344. package/dist/components/select/field-setting.js +0 -106
  345. package/dist/components/select/index.js +0 -149
  346. package/dist/components/select/style.css +0 -144
  347. package/dist/components/svg-icons/check-mark-icon.js +0 -14
  348. package/dist/components/svg-icons/column-icon.js +0 -17
  349. package/dist/components/svg-icons/text-icon.js +0 -34
  350. package/dist/components/text-link-hover-menu/index.js +0 -123
  351. package/dist/components/toast/alert.js +0 -138
  352. package/dist/components/toast/index.js +0 -3
  353. package/dist/components/toast/toast.js +0 -159
  354. package/dist/components/toast/toastManager.js +0 -139
  355. package/dist/components/toast/toaster.js +0 -65
  356. package/dist/components/toolbar/header-list.js +0 -114
  357. package/dist/components/toolbar/help-group.js +0 -33
  358. package/dist/components/toolbar/index.js +0 -4
  359. package/dist/components/toolbar/insert-image.js +0 -106
  360. package/dist/components/toolbar/insert-table.js +0 -136
  361. package/dist/components/toolbar/table-group.js +0 -74
  362. package/dist/components/toolbar/toolbar.js +0 -317
  363. package/dist/components/toolbar/widgets/button-group.js +0 -24
  364. package/dist/components/toolbar/widgets/button-item.js +0 -129
  365. package/dist/components/toolbar/widgets/drop-list.js +0 -88
  366. package/dist/components/user-help/index.js +0 -179
  367. package/dist/config.js +0 -15
  368. package/dist/constants/cell-types.js +0 -29
  369. package/dist/constants/column.js +0 -4
  370. package/dist/containers/code-highlight-package.js +0 -14
  371. package/dist/containers/controller/block-element-controller.js +0 -375
  372. package/dist/containers/controller/index.js +0 -5
  373. package/dist/containers/controller/inline-element-controller.js +0 -134
  374. package/dist/containers/controller/normalize-controller.js +0 -95
  375. package/dist/containers/controller/shortcut-controller.js +0 -385
  376. package/dist/containers/controller/void-element-controller.js +0 -9
  377. package/dist/containers/custom/custom.js +0 -18
  378. package/dist/containers/custom/get-event-transfer.js +0 -33
  379. package/dist/containers/custom/getNodesByTypeAtRange.js +0 -57
  380. package/dist/containers/custom/insertNodes.js +0 -120
  381. package/dist/containers/custom/is-empty-paragraph.js +0 -9
  382. package/dist/containers/custom/split-nodes-at-point.js +0 -136
  383. package/dist/containers/custom/unwrap-node-by-type-at-range.js +0 -70
  384. package/dist/containers/editor-context.js +0 -85
  385. package/dist/containers/editor-utils/block-element-utils/blockquote-utils.js +0 -80
  386. package/dist/containers/editor-utils/block-element-utils/code-utils.js +0 -145
  387. package/dist/containers/editor-utils/block-element-utils/formula-utils.js +0 -51
  388. package/dist/containers/editor-utils/block-element-utils/index.js +0 -31
  389. package/dist/containers/editor-utils/block-element-utils/list-utils.js +0 -395
  390. package/dist/containers/editor-utils/block-element-utils/table-utils.js +0 -412
  391. package/dist/containers/editor-utils/clear-format-utils.js +0 -84
  392. package/dist/containers/editor-utils/common-editor-utils.js +0 -492
  393. package/dist/containers/editor-utils/inline-element-utils/index.js +0 -95
  394. package/dist/containers/editor-utils/mark-utils.js +0 -20
  395. package/dist/containers/editor-utils/range-utils.js +0 -7
  396. package/dist/containers/editor-utils/selection-utils.js +0 -30
  397. package/dist/containers/editor-utils/text-utils.js +0 -117
  398. package/dist/containers/editor-widgets/check-list-item.js +0 -53
  399. package/dist/containers/editor-widgets/code-block.js +0 -128
  400. package/dist/containers/editor-widgets/column.js +0 -100
  401. package/dist/containers/editor-widgets/formula.js +0 -67
  402. package/dist/containers/editor-widgets/image.js +0 -237
  403. package/dist/containers/editor-widgets/link.js +0 -9
  404. package/dist/containers/editor-widgets/table.js +0 -144
  405. package/dist/containers/element-model/blockquote.js +0 -13
  406. package/dist/containers/element-model/column.js +0 -19
  407. package/dist/containers/element-model/image.js +0 -16
  408. package/dist/containers/element-model/link.js +0 -16
  409. package/dist/containers/element-model/table.js +0 -57
  410. package/dist/containers/element-model/text.js +0 -10
  411. package/dist/containers/render-utils/common-utils.js +0 -80
  412. package/dist/containers/render-utils/editor-utils.js +0 -133
  413. package/dist/containers/render-utils/viewer-utils.js +0 -198
  414. package/dist/containers/viewer-widgets/viewer-formula/index.js +0 -54
  415. package/dist/containers/viewer-widgets/viewer-image/index.js +0 -70
  416. package/dist/containers/viewer-widgets/viewer-image/viewer-image.css +0 -3
  417. package/dist/editors/index.js +0 -78
  418. package/dist/editors/markdown-editor.js +0 -206
  419. package/dist/editors/plain-markdown-editor.js +0 -285
  420. package/dist/editors/seatable-editor.js +0 -210
  421. package/dist/editors/simple-editor.js +0 -200
  422. package/dist/index.js +0 -11
  423. package/dist/setting.local.js +0 -14
  424. package/dist/utils/deserialize-html.js +0 -260
  425. package/dist/utils/diff/compare-strings.js +0 -35
  426. package/dist/utils/diff/diff.js +0 -769
  427. package/dist/utils/diff/index.js +0 -2
  428. package/dist/utils/seafile-markdown2html.js +0 -52
  429. package/dist/utils/slate2markdown/deserialize.js +0 -588
  430. package/dist/utils/slate2markdown/index.js +0 -3
  431. package/dist/utils/slate2markdown/serialize.js +0 -366
  432. package/dist/utils/utils.js +0 -68
  433. package/dist/viewer/diff-viewer.js +0 -85
  434. package/dist/viewer/index.js +0 -4
  435. package/dist/viewer/markdown-viewer.js +0 -121
  436. package/dist/viewer/seatable-viewer.js +0 -63
  437. package/dist/viewer/slate-viewer.js +0 -71
  438. package/public/index.html +0 -45
  439. package/public/manifest.json +0 -15
  440. package/public/media/seafile-logo.png +0 -0
  441. /package/{dist/assets/css/keyboard-shortcuts.css → src/extension/toolbar/user-help/style.css} +0 -0
@@ -0,0 +1,248 @@
1
+ const generateDefaultText = () => {
2
+ return {
3
+ type: 'text',
4
+ value: '',
5
+ };
6
+ };
7
+
8
+ const transformTextNode = (textNode) => {
9
+ let mdNode = { type: 'text', value: textNode.text };
10
+
11
+ // code = true, override text type
12
+ if (textNode['code']) {
13
+ mdNode = { ...mdNode, type: 'inlineCode' };
14
+ }
15
+
16
+ // blob = true, add strong parent
17
+ if (textNode['bold']) {
18
+ mdNode = { type: 'strong', children: [mdNode] };
19
+ }
20
+
21
+ // italic = true, add emphasis parent
22
+ if (textNode['italic']) {
23
+ mdNode = { type: 'emphasis', children: [mdNode] };
24
+ }
25
+
26
+ return mdNode;
27
+ };
28
+
29
+ const transformInlineChildren = (result, item) => {
30
+ // image
31
+ if (item.type && item.type === 'image') {
32
+ const { data } = item;
33
+ let image = {
34
+ type: 'image',
35
+ url: data.src,
36
+ alt: data.alt || null,
37
+ title: data.title || null,
38
+ };
39
+ if (data.height || data.width) {
40
+ image = {
41
+ type: 'html',
42
+ value: `<img src="${data.src}" alt="${data.alt}" title="${data.title}" width="${data.width}" height="${data.height}" />`
43
+ };
44
+ }
45
+ result.push(image);
46
+ return result;
47
+ }
48
+
49
+ // link
50
+ if (item.type && item.type === 'link') {
51
+ const link = {
52
+ type: 'link',
53
+ url: item.url,
54
+ title: item.title || null,
55
+ children: [transformTextNode(item.children[0])],
56
+ };
57
+ result.push(link);
58
+ return result;
59
+ }
60
+
61
+ // text
62
+ const nodes = transformTextNode(item);
63
+ result.push(nodes);
64
+ return result;
65
+ };
66
+
67
+ const transformNodeWithInlineChildren = (node) => {
68
+ const { children } = node;
69
+ const defaultChildren = [generateDefaultText()];
70
+ if (!children || !Array.isArray(children) || children.length === 0) {
71
+ return defaultChildren;
72
+ }
73
+ const result = [];
74
+ children.forEach(item => transformInlineChildren(result, item));
75
+ return result.flat();
76
+ };
77
+
78
+ const transformHeader = (node) => {
79
+ const level = node.type.replace('header', '');
80
+ return {
81
+ type: 'heading',
82
+ depth: parseInt(level),
83
+ children: transformNodeWithInlineChildren(node)
84
+ };
85
+ };
86
+
87
+ const transformParagraph = (node) => {
88
+ return {
89
+ type: 'paragraph',
90
+ children: transformNodeWithInlineChildren(node)
91
+ };
92
+ };
93
+
94
+ const transformBlockquote = (node) => {
95
+ const { children } = node;
96
+ return {
97
+ type: 'blockquote',
98
+ children: children.map(child => {
99
+ const handler = elementHandlers[child.type];
100
+ return handler(child);
101
+ }).flat(), // flat
102
+ };
103
+ };
104
+
105
+ const transformCheckList = (node) => {
106
+ return {
107
+ type: 'list',
108
+ ordered: false,
109
+ start: null,
110
+ spread: false,
111
+ children: [
112
+ {
113
+ type: 'listItem',
114
+ spread: false,
115
+ checked: node.checked,
116
+ children: [
117
+ transformParagraph(node),
118
+ ]
119
+ }
120
+ ],
121
+ };
122
+ };
123
+
124
+ const transformListContent = (node) => {
125
+ return transformParagraph(node);
126
+ };
127
+
128
+ const transformListItem = (node) => {
129
+ let loose = false;
130
+ const { children } = node;
131
+ // eslint-disable-next-line array-callback-return
132
+ const newChildren = children.map(child => {
133
+ if (child.type === 'paragraph') {
134
+ return transformListContent(child);
135
+ }
136
+ if (child.type === 'unordered_list' || child.type === 'ordered_list') {
137
+ return transformList(child);
138
+ }
139
+ });
140
+ if (newChildren.length === 1) {
141
+ loose = false;
142
+ } else if (newChildren.length === 2 && newChildren[1].type === 'list') {
143
+ loose = true;
144
+ } else {
145
+ loose = true;
146
+ }
147
+
148
+ return {
149
+ type: 'listItem',
150
+ loose: loose,
151
+ checked: null,
152
+ children: newChildren
153
+ };
154
+ };
155
+
156
+ const transformList = (node) => {
157
+ const { children } = node;
158
+ const newChildren = children.map(child => transformListItem(child));
159
+ let loose = false;
160
+ for (let node of newChildren) {
161
+ if (node.loose === true) {
162
+ loose = true;
163
+ break;
164
+ }
165
+ }
166
+ return {
167
+ type: 'list',
168
+ ordered: node.type === 'ordered_list', // ordered_list | unordered_list
169
+ start: 1,
170
+ loose: loose,
171
+ children: newChildren,
172
+ };
173
+ };
174
+
175
+ const transformTableCell = (cell) => {
176
+ return {
177
+ type: 'tableCell',
178
+ children: transformNodeWithInlineChildren(cell),
179
+ };
180
+ };
181
+
182
+ const transformTableRow = (row) => {
183
+ const { children: cells } = row;
184
+ return {
185
+ type: 'tableRow',
186
+ children: cells.map(cell => transformTableCell(cell)),
187
+ };
188
+ };
189
+
190
+ const transformTable = (node) => {
191
+ const { children: rows } = node;
192
+ const align = rows.map(row => {
193
+ const { children: cells } = row;
194
+ return cells[0]?.align || null;
195
+ });
196
+ return {
197
+ type: 'table',
198
+ align: align,
199
+ children: rows.map(row => transformTableRow(row)),
200
+ };
201
+ };
202
+
203
+ const transformCodeLine = (node) => {
204
+ const text = node.children[0]?.text || '';
205
+ return text;
206
+ };
207
+
208
+ const transformCodeBlock = (node) => {
209
+ const { children } = node;
210
+ return {
211
+ type: 'code',
212
+ lang: node.lang ? node.lang : null,
213
+ value: children.map(child => transformCodeLine(child)).join('\n'),
214
+ };
215
+ };
216
+
217
+ const transformFormula = (node) => {
218
+ const data = node.data;
219
+ return {
220
+ type: 'math',
221
+ value: data.formula,
222
+ };
223
+ };
224
+
225
+ const elementHandlers = {
226
+ 'paragraph': transformParagraph,
227
+ 'header1': transformHeader,
228
+ 'header2': transformHeader,
229
+ 'header3': transformHeader,
230
+ 'header4': transformHeader,
231
+ 'header5': transformHeader,
232
+ 'header6': transformHeader,
233
+ 'blockquote': transformBlockquote,
234
+ 'table': transformTable,
235
+ 'check_list_item': transformCheckList,
236
+ 'ordered_list': transformList,
237
+ 'unordered_list': transformList,
238
+ 'code_block': transformCodeBlock,
239
+ 'formula': transformFormula,
240
+ };
241
+
242
+ export const formatSlateToMd = (children) => {
243
+ const validChildren = children.filter(child => elementHandlers[child.type]);
244
+ return validChildren.map(child => {
245
+ const handler = elementHandlers[child.type];
246
+ return handler(child);
247
+ }).flat();
248
+ };
@@ -0,0 +1,30 @@
1
+ import checkIsUrl from 'is-url';
2
+
3
+ export const isMac = () => {
4
+ const platform = navigator.platform;
5
+ return (platform === 'Mac68K') || (platform === 'MacPPC') || (platform === 'Macintosh') || (platform === 'MacIntel');
6
+ };
7
+
8
+ export const IMAGE_TYPES = [
9
+ 'png',
10
+ 'jpg',
11
+ 'gif',
12
+ ];
13
+
14
+ export const isImage = (url) => {
15
+ if (!url) return false;
16
+
17
+ if (!isUrl(url)) return false;
18
+
19
+ const suffix = url.split('.')[1]; // http://xx/mm/*.png
20
+ if (!suffix) return false;
21
+
22
+ return IMAGE_TYPES.includes(suffix.toLowerCase());
23
+ };
24
+
25
+ export const isUrl = (url) => {
26
+ if (!url) return false;
27
+ if (!url.startsWith('http')) return false;
28
+ if (!checkIsUrl(url)) return false;
29
+ return true;
30
+ };
@@ -0,0 +1,174 @@
1
+ import { jsx } from 'slate-hyperscript';
2
+ import {
3
+ BLOCKQUOTE,
4
+ HEADER1,
5
+ HEADER2,
6
+ HEADER3,
7
+ HEADER4,
8
+ HEADER5,
9
+ HEADER6,
10
+ IMAGE,
11
+ LINK,
12
+ LIST_ITEM,
13
+ ORDERED_LIST,
14
+ PARAGRAPH,
15
+ TABLE,
16
+ UNORDERED_LIST,
17
+ } from '../extension/constants/element-types';
18
+ import { generateTableCell, generateTableRow } from '../extension/plugins/table/model';
19
+ import { generateElement } from '../extension/core';
20
+
21
+ const ELEMENT_TAGS = {
22
+ A: el => ({ type: LINK, data: { href: el.getAttribute('href') } }),
23
+ BLOCKQUOTE: () => ({ type: BLOCKQUOTE }),
24
+ H1: () => ({ type: HEADER1 }),
25
+ H2: () => ({ type: HEADER2 }),
26
+ H3: () => ({ type: HEADER3 }),
27
+ H4: () => ({ type: HEADER4 }),
28
+ H5: () => ({ type: HEADER5 }),
29
+ H6: () => ({ type: HEADER6 }),
30
+ IMG: el => ({ type: IMAGE, children: [{ text: '' }], data: { src: el.getAttribute('src') } }),
31
+ LI: () => ({ type: LIST_ITEM, data: {} }),
32
+ OL: () => ({ type: ORDERED_LIST }),
33
+ P: () => ({ type: PARAGRAPH }),
34
+ UL: () => ({ type: UNORDERED_LIST }),
35
+ TABLE: () => ({ type: TABLE }),
36
+ BR: () => ({ text: '' })
37
+ };
38
+
39
+ const HEADER_LIST = ['H1', 'H2', 'H3', 'H4', 'H5', 'H6'];
40
+
41
+ const TEXT_TAGS = {
42
+ CODE: () => ({ CODE: true }),
43
+ DEL: () => ({ DELETE: true }),
44
+ EM: () => ({ ITALIC: true }),
45
+ I: () => ({ ITALIC: true }),
46
+ STRONG: () => ({ BOLD: true }),
47
+ INS: () => ({ INS: true })
48
+ };
49
+
50
+ const parseTable = (el) => {
51
+
52
+ if (el.parentNode.nodeName !== 'BODY') {
53
+ return null;
54
+ }
55
+
56
+ let tableWidth = 0;
57
+ Array.from(el.rows[0].childNodes).forEach((cell, index) => {
58
+ if (cell.nodeName === 'TD' || cell.nodeName === 'TH') {
59
+ tableWidth += (Number(cell.getAttribute('colspan')) || 1);
60
+ }
61
+ });
62
+
63
+ let rowList = [];
64
+ for (let rowIndex = 0; rowIndex < el.rows.length; rowIndex++) {
65
+ let cells = el.rows[rowIndex].cells;
66
+ const cellsList = [];
67
+ for (let columnIndex = 0; columnIndex < cells.length; columnIndex++) {
68
+ const cell = cells[columnIndex];
69
+ cellsList.push(generateTableCell({ childrenOrText: [generateElement(PARAGRAPH, { childrenOrText: cell.textContent })] }));
70
+ }
71
+ if (cellsList.length < tableWidth) {
72
+ let count = tableWidth - cellsList.length;
73
+ for (let i = 0; i < count; i++) {
74
+ cellsList.push(generateTableCell({ childrenOrText: [generateElement(PARAGRAPH)] }));
75
+ }
76
+ }
77
+ rowList.push(generateTableRow({ childrenOrText: cellsList }));
78
+ }
79
+
80
+ return rowList;
81
+ };
82
+
83
+ const deserializeHtml = el => {
84
+ if (el.nodeType === 3) {
85
+ // remove \n character
86
+ if (el.textContent === '\n' || el.textContent === '\r') {
87
+ return null;
88
+ }
89
+ if (el.parentElement.nodeName === 'BODY') {
90
+ let text = el.textContent.replace(/(\n|\r\n)/g, '');
91
+ if (text.length === 0) return null;
92
+ return { type: PARAGRAPH, children: [{ text }] };
93
+ }
94
+ return el.textContent;
95
+ } else if (el.nodeType !== 1) {
96
+ return null;
97
+ }
98
+
99
+ const { nodeName } = el;
100
+ let parent = el;
101
+
102
+ let children = Array.from(parent.childNodes)
103
+ .map(deserializeHtml)
104
+ .flat();
105
+
106
+ // deserialize task list
107
+ if (nodeName === 'LI') {
108
+ if (el.className && el.className.indexOf('task-list-item') >= 0) {
109
+ return jsx('element', { data: { checked: false }, type: 'list_item' }, children);
110
+ }
111
+ }
112
+
113
+ if (
114
+ nodeName === 'PRE' &&
115
+ el.childNodes[0] &&
116
+ el.childNodes[0].nodeName === 'CODE'
117
+ ) {
118
+ // deserialize code block
119
+ const code = el.childNodes[0];
120
+ const codeChildren = [];
121
+ code.childNodes.forEach((codeLine, index) => {
122
+ if (codeLine.innerText) {
123
+ codeChildren.push({
124
+ type: 'code_line',
125
+ children: [{ text: codeLine.innerText }]
126
+ });
127
+ }
128
+ });
129
+
130
+ return {
131
+ data: { syntax: null },
132
+ children: codeChildren,
133
+ type: 'code_block'
134
+ };
135
+ }
136
+
137
+ if (el.nodeName === 'BODY') {
138
+ return jsx('fragment', {}, children);
139
+ }
140
+
141
+ if (ELEMENT_TAGS[nodeName]) {
142
+ const attrs = ELEMENT_TAGS[nodeName](el);
143
+ if (nodeName === 'IMG') {
144
+ return jsx('element', attrs, [{ text: '' }]);
145
+ }
146
+
147
+ // modify BR into an empty text node
148
+ if (nodeName === 'BR') {
149
+ return '';
150
+ }
151
+
152
+ if (nodeName === 'TABLE') {
153
+ return jsx('element', attrs, parseTable(el));
154
+ }
155
+
156
+ if (nodeName === 'A' || HEADER_LIST.includes(nodeName)) {
157
+ return jsx('element', attrs, [{ text: el.textContent }]);
158
+ }
159
+
160
+ return jsx('element', attrs, children);
161
+ }
162
+
163
+ if (TEXT_TAGS[nodeName]) {
164
+ const attrs = TEXT_TAGS[nodeName](el);
165
+ return children.map(child => jsx('text', attrs, child));
166
+ }
167
+ return children;
168
+ };
169
+
170
+
171
+ export const htmlDeserializer = (html) => {
172
+ const parsed = new DOMParser().parseFromString(html, 'text/html');
173
+ return deserializeHtml(parsed.body);
174
+ };
@@ -0,0 +1,45 @@
1
+ export const getDomHeight = (dom) => {
2
+ const styles = window.getComputedStyle(dom);
3
+ const rect = dom.getBoundingClientRect();
4
+ const marginTop = styles['marginTop'];
5
+ // margin-bottom overlaps margin-top
6
+ // const marginBottom = styles['marginBottom'];
7
+ const { height } = rect;
8
+
9
+ return height + parseInt(marginTop);
10
+ };
11
+
12
+ export const getDomMarginTop = (dom) => {
13
+ const styles = window.getComputedStyle(dom);
14
+ const marginTop = styles['marginTop'];
15
+ return parseInt(marginTop);
16
+ };
17
+
18
+ export const getSelectionRange = () => {
19
+ if (window.getSelection) {
20
+ const sel = window.getSelection();
21
+ if (sel.getRangeAt && sel.rangeCount) {
22
+ return sel.getRangeAt(0);
23
+ }
24
+ } else if (document.selection && document.selection.createRange) {
25
+ return document.selection.createRange();
26
+ }
27
+
28
+ return null;
29
+ };
30
+
31
+ export const getCursorPosition = (isScrollUp = true) => {
32
+ let x = 0, y = 0;
33
+ let range = getSelectionRange();
34
+ if (range) {
35
+ const rect = range.getBoundingClientRect();
36
+ const headerHeight = 100;
37
+ x = rect.x || 0;
38
+ if (isScrollUp) {
39
+ y = rect.y - headerHeight;
40
+ } else {
41
+ y = rect.y - headerHeight + rect.height;
42
+ }
43
+ }
44
+ return { x: x, y: y };
45
+ };
@@ -0,0 +1,37 @@
1
+ class EventBus {
2
+ constructor() {
3
+ this.instance = null;
4
+ this.subscribers = {};
5
+ }
6
+
7
+ static getInstance() {
8
+ if (this.instance) return this.instance;
9
+ this.instance = new EventBus();
10
+ return this.instance;
11
+ }
12
+
13
+ subscribe(type, handler) {
14
+ if (!this.subscribers[type]) {
15
+ this.subscribers[type] = [];
16
+ }
17
+
18
+ const handlers = this.subscribers[type];
19
+ handlers.push(handler);
20
+
21
+ return () => {
22
+ const index = handlers.indexOf(handler);
23
+ if (index > -1) {
24
+ handlers.splice(index, 1);
25
+ }
26
+ };
27
+ }
28
+
29
+ dispatch(type, ...data) {
30
+ const handlers = this.subscribers[type];
31
+ if (Array.isArray(handlers)) {
32
+ handlers.forEach(handler => handler(...data));
33
+ }
34
+ }
35
+ }
36
+
37
+ export default EventBus;
@@ -0,0 +1,36 @@
1
+ import isHotkey from 'is-hotkey';
2
+
3
+ class EventProxy {
4
+
5
+ constructor(editor) {
6
+ this.editor = editor;
7
+ }
8
+
9
+ onKeyDown = (event) => {
10
+ const editor = this.editor;
11
+ if (editor.onHotKeyDown) {
12
+ const isHandled = editor.onHotKeyDown(event);
13
+ if (isHandled) return;
14
+ }
15
+
16
+ // Disable the default 'save page'
17
+ if (isHotkey('mod+s', event)) {
18
+ event.preventDefault();
19
+ }
20
+
21
+ // Disable default 'tab' behavior
22
+ if (isHotkey('tab', event)) {
23
+ event.preventDefault();
24
+ }
25
+ };
26
+
27
+ onCopy = (event) => {
28
+ const editor = this.editor;
29
+ if (editor.onCopy) {
30
+ const isHandled = editor.onCopy(event);
31
+ if (isHandled) return;
32
+ }
33
+ };
34
+ }
35
+
36
+ export default EventProxy;
@@ -0,0 +1,51 @@
1
+ class ObjectUtils {
2
+
3
+ static getDataType(data){
4
+ let type = typeof data;
5
+ if (type !== 'object') {
6
+ return type;
7
+ }
8
+ return Object.prototype.toString.call(data).replace(/^\[object (\S+)\]$/, '$1');
9
+ }
10
+
11
+ static isObject = (data) => {
12
+ return this.getDataType(data) === 'Object';
13
+ };
14
+
15
+ static iterable(data){
16
+ return ['Object', 'Array'].includes(this.getDataType(data));
17
+ }
18
+
19
+ static isObjectChanged(source, comparison, notIncludeKeys) {
20
+ if (!this.iterable(source)) {
21
+ throw new Error(`source should be a Object or Array , but got ${this.getDataType(source)}`);
22
+ }
23
+ if (this.getDataType(source) !== this.getDataType(comparison)) {
24
+ return true;
25
+ }
26
+ const sourceKeys = Object.keys(source);
27
+ const comparisonKeys = Object.keys({ ...source, ...comparison }).filter(key => !notIncludeKeys.includes(key));
28
+ if (sourceKeys.length !== comparisonKeys.length) {
29
+ return true;
30
+ }
31
+ return comparisonKeys.some(key => {
32
+ if (this.iterable(source[key])) {
33
+ return this.isObjectChanged(source[key], comparison[key], notIncludeKeys);
34
+ } else {
35
+ return source[key] !== comparison[key];
36
+ }
37
+ });
38
+ }
39
+
40
+ static isSameObject(source, comparison, notIncludeKeys = []) {
41
+ if (!source || !comparison) return false;
42
+ return !this.isObjectChanged(source, comparison, notIncludeKeys);
43
+ }
44
+
45
+ static hasProperty = (obj, prop) => {
46
+ if (!obj) return false;
47
+ return Object.prototype.hasOwnProperty.call(obj, prop);
48
+ };
49
+ }
50
+
51
+ export default ObjectUtils;
@@ -0,0 +1,54 @@
1
+ // extension plugin
2
+ export const BLOCKQUOTE = 'blockquote';
3
+ export const HEADER = 'header';
4
+ export const HEADER1 = 'header1';
5
+ export const HEADER2 = 'header2';
6
+ export const HEADER3 = 'header3';
7
+ export const HEADER4 = 'header4';
8
+ export const HEADER5 = 'header5';
9
+ export const HEADER6 = 'header6';
10
+ export const ORDERED_LIST = 'ordered_list';
11
+ export const UNORDERED_LIST = 'unordered_list';
12
+ export const LIST_ITEM = 'list_item';
13
+ export const LIST_LIC = 'list_lic'; // placeholder
14
+ export const CHECK_LIST_ITEM = 'check_list_item';
15
+ export const PARAGRAPH = 'paragraph';
16
+ export const CODE_BLOCK = 'code_block';
17
+ export const CODE_LINE = 'code_line';
18
+ export const TABLE = 'table';
19
+ export const TABLE_CELL = 'table_cell';
20
+ export const TABLE_ROW = 'table_row';
21
+ export const TABLE_TH = 'table_th';
22
+ export const TABLE_TD = 'table_td';
23
+ export const TABLE_TR = 'table_tr';
24
+ export const LINK = 'link';
25
+ export const IMAGE = 'image';
26
+ export const FORMULA = 'formula';
27
+ export const COLUMN = 'column';
28
+
29
+ export const voidChildren = [{ text: '' }];
30
+
31
+ export const ELEMENTS = {
32
+ ha: { type: LINK },
33
+ hblockquote: { type: BLOCKQUOTE },
34
+ hcodeblock: { type: CODE_BLOCK },
35
+ hcodeline: { type: CODE_LINE },
36
+ hdefault: { type: PARAGRAPH },
37
+ hh1: { type: HEADER1 },
38
+ hh2: { type: HEADER2 },
39
+ hh3: { type: HEADER3 },
40
+ hh4: { type: HEADER4 },
41
+ hh5: { type: HEADER5 },
42
+ hh6: { type: HEADER6 },
43
+ himg: { type: IMAGE, children: voidChildren },
44
+ hli: { type: LIST_ITEM },
45
+ hlic: { type: LIST_LIC },
46
+ hol: { type: ORDERED_LIST },
47
+ hp: { type: PARAGRAPH },
48
+ htable: { type: TABLE },
49
+ htd: { type: TABLE_TD },
50
+ hth: { type: TABLE_TH },
51
+ htodoli: { type: CHECK_LIST_ITEM },
52
+ htr: { type: TABLE_TR },
53
+ hul: { type: UNORDERED_LIST }
54
+ };
@@ -0,0 +1,11 @@
1
+ import { jsx } from './jsx';
2
+ import StubEditor from './stub-editor';
3
+ import { createSdocEditor, formatChildren, formatChildren2 } from './utils';
4
+
5
+ export {
6
+ jsx,
7
+ StubEditor,
8
+ createSdocEditor,
9
+ formatChildren,
10
+ formatChildren2
11
+ };
@@ -0,0 +1,9 @@
1
+ import { createHyperscript, createText as createTestText } from 'slate-hyperscript';
2
+ import { ELEMENTS } from '../constants';
3
+
4
+ export const jsx = createHyperscript({
5
+ elements: ELEMENTS,
6
+ creators: {
7
+ htext: createTestText
8
+ }
9
+ });