suneditor 2.46.2 → 3.0.0-alpha.2

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 (289) hide show
  1. package/.eslintignore +7 -0
  2. package/.eslintrc.json +64 -0
  3. package/CONTRIBUTING.md +36 -0
  4. package/LICENSE.txt +1 -1
  5. package/README.md +11 -1560
  6. package/package.json +94 -70
  7. package/src/assets/icons/_default.js +194 -0
  8. package/src/assets/suneditor-content.css +642 -0
  9. package/src/assets/suneditor.css +3378 -0
  10. package/src/core/base/eventHandlers/handler_toolbar.js +114 -0
  11. package/src/core/base/eventHandlers/handler_ww_clipboard.js +31 -0
  12. package/src/core/base/eventHandlers/handler_ww_dragDrop.js +69 -0
  13. package/src/core/base/eventHandlers/handler_ww_key_input.js +978 -0
  14. package/src/core/base/eventHandlers/handler_ww_mouse.js +118 -0
  15. package/src/core/base/eventManager.js +1129 -0
  16. package/src/core/base/events.js +320 -0
  17. package/src/core/base/history.js +301 -0
  18. package/src/core/class/char.js +146 -0
  19. package/src/core/class/component.js +624 -0
  20. package/src/core/class/format.js +3255 -0
  21. package/src/core/class/html.js +1621 -0
  22. package/src/core/class/menu.js +260 -0
  23. package/src/core/class/nodeTransform.js +379 -0
  24. package/src/core/class/notice.js +42 -0
  25. package/src/core/class/offset.js +578 -0
  26. package/src/core/class/selection.js +508 -0
  27. package/src/core/class/shortcuts.js +38 -0
  28. package/src/core/class/toolbar.js +440 -0
  29. package/src/core/class/viewer.js +646 -0
  30. package/src/core/editor.js +1588 -0
  31. package/src/core/section/actives.js +107 -0
  32. package/src/core/section/constructor.js +1237 -0
  33. package/src/core/section/context.js +97 -0
  34. package/src/editorInjector/_classes.js +22 -0
  35. package/src/editorInjector/_core.js +28 -0
  36. package/src/editorInjector/index.js +13 -0
  37. package/src/helper/converter.js +313 -0
  38. package/src/helper/domUtils.js +1177 -0
  39. package/src/helper/env.js +250 -0
  40. package/src/helper/index.js +19 -0
  41. package/src/helper/numbers.js +68 -0
  42. package/src/helper/unicode.js +43 -0
  43. package/src/langs/ckb.js +161 -0
  44. package/src/langs/cs.js +161 -0
  45. package/src/langs/da.js +161 -0
  46. package/src/langs/de.js +162 -0
  47. package/src/langs/en.js +199 -0
  48. package/src/langs/es.js +162 -0
  49. package/src/langs/fa.js +159 -0
  50. package/src/langs/fr.js +161 -0
  51. package/src/langs/he.js +162 -0
  52. package/src/{lang → langs}/index.js +0 -2
  53. package/src/langs/it.js +162 -0
  54. package/src/langs/ja.js +162 -0
  55. package/src/langs/ko.js +162 -0
  56. package/src/langs/lv.js +162 -0
  57. package/src/langs/nl.js +162 -0
  58. package/src/langs/pl.js +162 -0
  59. package/src/langs/pt_br.js +162 -0
  60. package/src/langs/ro.js +162 -0
  61. package/src/langs/ru.js +162 -0
  62. package/src/langs/se.js +162 -0
  63. package/src/langs/tr.js +159 -0
  64. package/src/langs/ua.js +162 -0
  65. package/src/langs/ur.js +162 -0
  66. package/src/langs/zh_cn.js +162 -0
  67. package/src/modules/ApiManager.js +168 -0
  68. package/src/modules/ColorPicker.js +302 -0
  69. package/src/modules/Controller.js +315 -0
  70. package/src/modules/Figure.js +1174 -0
  71. package/src/modules/FileBrowser.js +271 -0
  72. package/src/modules/FileManager.js +290 -0
  73. package/src/modules/HueSlider.js +513 -0
  74. package/src/modules/Modal.js +177 -0
  75. package/src/modules/ModalAnchorEditor.js +494 -0
  76. package/src/modules/SelectMenu.js +447 -0
  77. package/src/modules/_DragHandle.js +16 -0
  78. package/src/modules/index.js +14 -0
  79. package/src/plugins/command/blockquote.js +47 -47
  80. package/src/plugins/command/exportPdf.js +168 -0
  81. package/src/plugins/command/fileUpload.js +389 -0
  82. package/src/plugins/command/list_bulleted.js +112 -0
  83. package/src/plugins/command/list_numbered.js +115 -0
  84. package/src/plugins/dropdown/align.js +143 -0
  85. package/src/plugins/dropdown/backgroundColor.js +73 -0
  86. package/src/plugins/dropdown/font.js +113 -0
  87. package/src/plugins/dropdown/fontColor.js +73 -0
  88. package/src/plugins/dropdown/formatBlock.js +141 -0
  89. package/src/plugins/dropdown/hr.js +111 -0
  90. package/src/plugins/dropdown/layout.js +72 -0
  91. package/src/plugins/dropdown/lineHeight.js +114 -0
  92. package/src/plugins/dropdown/list.js +107 -0
  93. package/src/plugins/dropdown/paragraphStyle.js +117 -0
  94. package/src/plugins/dropdown/table.js +2810 -0
  95. package/src/plugins/dropdown/template.js +71 -0
  96. package/src/plugins/dropdown/textStyle.js +137 -0
  97. package/src/plugins/field/mention.js +172 -0
  98. package/src/plugins/fileBrowser/imageGallery.js +76 -59
  99. package/src/plugins/index.js +86 -24
  100. package/src/plugins/input/fontSize.js +357 -0
  101. package/src/plugins/modal/audio.js +492 -0
  102. package/src/plugins/modal/image.js +1062 -0
  103. package/src/plugins/modal/link.js +211 -0
  104. package/src/plugins/modal/math.js +347 -0
  105. package/src/plugins/modal/video.js +870 -0
  106. package/src/suneditor.js +62 -67
  107. package/src/themes/test.css +61 -0
  108. package/typings/CommandPlugin.d.ts +8 -0
  109. package/typings/DialogPlugin.d.ts +20 -0
  110. package/typings/FileBrowserPlugin.d.ts +30 -0
  111. package/typings/Lang.d.ts +124 -0
  112. package/typings/Module.d.ts +15 -0
  113. package/typings/Plugin.d.ts +42 -0
  114. package/typings/SubmenuPlugin.d.ts +8 -0
  115. package/typings/_classes.d.ts +17 -0
  116. package/typings/_colorPicker.d.ts +60 -0
  117. package/typings/_core.d.ts +55 -0
  118. package/typings/align.d.ts +5 -0
  119. package/{src/plugins/dialog → typings}/audio.d.ts +1 -1
  120. package/typings/backgroundColor.d.ts +5 -0
  121. package/{src/plugins/command → typings}/blockquote.d.ts +1 -1
  122. package/typings/char.d.ts +39 -0
  123. package/typings/component.d.ts +38 -0
  124. package/typings/context.d.ts +39 -0
  125. package/typings/converter.d.ts +33 -0
  126. package/typings/dialog.d.ts +28 -0
  127. package/typings/domUtils.d.ts +361 -0
  128. package/typings/editor.d.ts +7 -0
  129. package/typings/editor.ts +542 -0
  130. package/typings/env.d.ts +70 -0
  131. package/typings/eventManager.d.ts +37 -0
  132. package/typings/events.d.ts +262 -0
  133. package/typings/fileBrowser.d.ts +42 -0
  134. package/typings/fileManager.d.ts +67 -0
  135. package/typings/font.d.ts +5 -0
  136. package/typings/fontColor.d.ts +5 -0
  137. package/typings/fontSize.d.ts +5 -0
  138. package/typings/format.d.ts +191 -0
  139. package/typings/formatBlock.d.ts +5 -0
  140. package/typings/history.d.ts +48 -0
  141. package/typings/horizontalRule.d.ts +5 -0
  142. package/{src/plugins/dialog → typings}/image.d.ts +1 -1
  143. package/{src/plugins/fileBrowser → typings}/imageGallery.d.ts +1 -1
  144. package/typings/index.d.ts +21 -0
  145. package/{src/plugins/modules/index.d.ts → typings/index.modules.d.ts} +3 -3
  146. package/typings/index.plugins.d.ts +58 -0
  147. package/typings/lineHeight.d.ts +5 -0
  148. package/{src/plugins/dialog → typings}/link.d.ts +1 -1
  149. package/typings/list.d.ts +5 -0
  150. package/{src/plugins/dialog → typings}/math.d.ts +1 -1
  151. package/typings/mediaContainer.d.ts +25 -0
  152. package/typings/node.d.ts +57 -0
  153. package/typings/notice.d.ts +16 -0
  154. package/typings/numbers.d.ts +29 -0
  155. package/typings/offset.d.ts +24 -0
  156. package/typings/options.d.ts +589 -0
  157. package/typings/paragraphStyle.d.ts +5 -0
  158. package/typings/resizing.d.ts +141 -0
  159. package/typings/selection.d.ts +94 -0
  160. package/typings/shortcuts.d.ts +13 -0
  161. package/typings/suneditor.d.ts +9 -0
  162. package/typings/table.d.ts +5 -0
  163. package/typings/template.d.ts +5 -0
  164. package/typings/textStyle.d.ts +5 -0
  165. package/typings/toolbar.d.ts +32 -0
  166. package/typings/unicode.d.ts +25 -0
  167. package/{src/plugins/dialog → typings}/video.d.ts +1 -1
  168. package/dist/css/suneditor.min.css +0 -1
  169. package/dist/suneditor.min.js +0 -2
  170. package/src/assets/css/suneditor-contents.css +0 -562
  171. package/src/assets/css/suneditor.css +0 -566
  172. package/src/assets/defaultIcons.js +0 -103
  173. package/src/lang/Lang.d.ts +0 -144
  174. package/src/lang/ckb.d.ts +0 -5
  175. package/src/lang/ckb.js +0 -188
  176. package/src/lang/cs.d.ts +0 -5
  177. package/src/lang/cs.js +0 -188
  178. package/src/lang/da.d.ts +0 -5
  179. package/src/lang/da.js +0 -191
  180. package/src/lang/de.d.ts +0 -5
  181. package/src/lang/de.js +0 -188
  182. package/src/lang/en.d.ts +0 -5
  183. package/src/lang/en.js +0 -188
  184. package/src/lang/es.d.ts +0 -5
  185. package/src/lang/es.js +0 -188
  186. package/src/lang/fa.d.ts +0 -5
  187. package/src/lang/fa.js +0 -188
  188. package/src/lang/fr.d.ts +0 -5
  189. package/src/lang/fr.js +0 -188
  190. package/src/lang/he.d.ts +0 -5
  191. package/src/lang/he.js +0 -188
  192. package/src/lang/index.d.ts +0 -23
  193. package/src/lang/it.d.ts +0 -5
  194. package/src/lang/it.js +0 -188
  195. package/src/lang/ja.d.ts +0 -5
  196. package/src/lang/ja.js +0 -188
  197. package/src/lang/ko.d.ts +0 -5
  198. package/src/lang/ko.js +0 -188
  199. package/src/lang/lv.d.ts +0 -5
  200. package/src/lang/lv.js +0 -188
  201. package/src/lang/nl.d.ts +0 -5
  202. package/src/lang/nl.js +0 -188
  203. package/src/lang/pl.d.ts +0 -5
  204. package/src/lang/pl.js +0 -188
  205. package/src/lang/pt_br.d.ts +0 -5
  206. package/src/lang/pt_br.js +0 -189
  207. package/src/lang/ro.d.ts +0 -5
  208. package/src/lang/ro.js +0 -188
  209. package/src/lang/ru.d.ts +0 -5
  210. package/src/lang/ru.js +0 -188
  211. package/src/lang/se.d.ts +0 -5
  212. package/src/lang/se.js +0 -191
  213. package/src/lang/tr.d.ts +0 -5
  214. package/src/lang/tr.js +0 -191
  215. package/src/lang/ua.d.ts +0 -5
  216. package/src/lang/ua.js +0 -188
  217. package/src/lang/ur.d.ts +0 -5
  218. package/src/lang/ur.js +0 -188
  219. package/src/lang/zh_cn.d.ts +0 -5
  220. package/src/lang/zh_cn.js +0 -187
  221. package/src/lib/constructor.js +0 -954
  222. package/src/lib/context.d.ts +0 -42
  223. package/src/lib/context.js +0 -71
  224. package/src/lib/core.d.ts +0 -1135
  225. package/src/lib/core.js +0 -9395
  226. package/src/lib/history.d.ts +0 -48
  227. package/src/lib/history.js +0 -219
  228. package/src/lib/util.d.ts +0 -678
  229. package/src/lib/util.js +0 -2131
  230. package/src/options.d.ts +0 -608
  231. package/src/plugins/CommandPlugin.d.ts +0 -8
  232. package/src/plugins/DialogPlugin.d.ts +0 -20
  233. package/src/plugins/FileBrowserPlugin.d.ts +0 -30
  234. package/src/plugins/Module.d.ts +0 -15
  235. package/src/plugins/Plugin.d.ts +0 -42
  236. package/src/plugins/SubmenuPlugin.d.ts +0 -8
  237. package/src/plugins/dialog/audio.js +0 -559
  238. package/src/plugins/dialog/image.js +0 -1126
  239. package/src/plugins/dialog/link.js +0 -223
  240. package/src/plugins/dialog/math.js +0 -295
  241. package/src/plugins/dialog/mention.js +0 -242
  242. package/src/plugins/dialog/video.js +0 -979
  243. package/src/plugins/index.d.ts +0 -79
  244. package/src/plugins/modules/_anchor.js +0 -461
  245. package/src/plugins/modules/_colorPicker.d.ts +0 -60
  246. package/src/plugins/modules/_colorPicker.js +0 -201
  247. package/src/plugins/modules/_notice.d.ts +0 -21
  248. package/src/plugins/modules/_notice.js +0 -72
  249. package/src/plugins/modules/_selectMenu.js +0 -119
  250. package/src/plugins/modules/component.d.ts +0 -25
  251. package/src/plugins/modules/component.js +0 -81
  252. package/src/plugins/modules/dialog.d.ts +0 -28
  253. package/src/plugins/modules/dialog.js +0 -175
  254. package/src/plugins/modules/fileBrowser.d.ts +0 -42
  255. package/src/plugins/modules/fileBrowser.js +0 -374
  256. package/src/plugins/modules/fileManager.d.ts +0 -67
  257. package/src/plugins/modules/fileManager.js +0 -326
  258. package/src/plugins/modules/index.js +0 -9
  259. package/src/plugins/modules/resizing.d.ts +0 -154
  260. package/src/plugins/modules/resizing.js +0 -903
  261. package/src/plugins/submenu/align.d.ts +0 -5
  262. package/src/plugins/submenu/align.js +0 -160
  263. package/src/plugins/submenu/font.d.ts +0 -5
  264. package/src/plugins/submenu/font.js +0 -123
  265. package/src/plugins/submenu/fontColor.d.ts +0 -5
  266. package/src/plugins/submenu/fontColor.js +0 -101
  267. package/src/plugins/submenu/fontSize.d.ts +0 -5
  268. package/src/plugins/submenu/fontSize.js +0 -112
  269. package/src/plugins/submenu/formatBlock.d.ts +0 -5
  270. package/src/plugins/submenu/formatBlock.js +0 -273
  271. package/src/plugins/submenu/hiliteColor.d.ts +0 -5
  272. package/src/plugins/submenu/hiliteColor.js +0 -102
  273. package/src/plugins/submenu/horizontalRule.d.ts +0 -5
  274. package/src/plugins/submenu/horizontalRule.js +0 -98
  275. package/src/plugins/submenu/lineHeight.d.ts +0 -5
  276. package/src/plugins/submenu/lineHeight.js +0 -104
  277. package/src/plugins/submenu/list.d.ts +0 -5
  278. package/src/plugins/submenu/list.js +0 -456
  279. package/src/plugins/submenu/paragraphStyle.d.ts +0 -5
  280. package/src/plugins/submenu/paragraphStyle.js +0 -135
  281. package/src/plugins/submenu/table.d.ts +0 -5
  282. package/src/plugins/submenu/table.js +0 -1431
  283. package/src/plugins/submenu/template.d.ts +0 -5
  284. package/src/plugins/submenu/template.js +0 -72
  285. package/src/plugins/submenu/textStyle.d.ts +0 -5
  286. package/src/plugins/submenu/textStyle.js +0 -167
  287. package/src/suneditor.d.ts +0 -9
  288. package/src/suneditor_build.js +0 -18
  289. /package/{src/plugins/dialog → typings}/mention.d.ts +0 -0
@@ -1,456 +0,0 @@
1
- /*
2
- * wysiwyg web editor
3
- *
4
- * suneditor.js
5
- * Copyright 2017 JiHong Lee.
6
- * MIT license.
7
- */
8
- 'use strict';
9
-
10
- export default {
11
- name: 'list',
12
- display: 'submenu',
13
- add: function (core, targetElement) {
14
- const context = core.context;
15
- context.list = {
16
- targetButton: targetElement,
17
- _list: null,
18
- currentList: '',
19
- icons: {
20
- bullets: core.icons.list_bullets,
21
- number: core.icons.list_number
22
- }
23
- };
24
-
25
- /** set submenu */
26
- let listDiv = this.setSubmenu(core);
27
- let listUl = listDiv.querySelector('ul');
28
-
29
- /** add event listeners */
30
- listUl.addEventListener('click', this.pickup.bind(core));
31
- context.list._list = listUl.querySelectorAll('li button');
32
-
33
- /** append target button menu */
34
- core.initMenuTarget(this.name, targetElement, listDiv);
35
-
36
- /** empty memory */
37
- listDiv = null, listUl = null;
38
- },
39
-
40
- setSubmenu: function (core) {
41
- const lang = core.lang;
42
- const listDiv = core.util.createElement('DIV');
43
-
44
- listDiv.className = 'se-submenu se-list-layer';
45
- listDiv.innerHTML = '' +
46
- '<div class="se-list-inner">' +
47
- '<ul class="se-list-basic">' +
48
- '<li><button type="button" class="se-btn-list se-tooltip" data-command="OL" title="' + lang.toolbar.orderList + '" aria-label="' + lang.toolbar.orderList + '">' +
49
- core.icons.list_number +
50
- '</button></li>' +
51
- '<li><button type="button" class="se-btn-list se-tooltip" data-command="UL" title="' + lang.toolbar.unorderList + '" aria-label="' + lang.toolbar.unorderList + '">' +
52
- core.icons.list_bullets +
53
- '</button></li>' +
54
- '</ul>' +
55
- '</div>';
56
-
57
- return listDiv;
58
- },
59
-
60
- /**
61
- * @Override core
62
- */
63
- active: function (element) {
64
- const button = this.context.list.targetButton;
65
- const icon = button.firstElementChild;
66
- const util = this.util;
67
-
68
- if (util.isList(element)) {
69
- const nodeName = element.nodeName;
70
- button.setAttribute('data-focus', nodeName);
71
- util.addClass(button, 'active');
72
- if (/UL/i.test(nodeName)) {
73
- util.changeElement(icon, this.context.list.icons.bullets);
74
- } else {
75
- util.changeElement(icon, this.context.list.icons.number);
76
- }
77
-
78
- return true;
79
- } else {
80
- button.removeAttribute('data-focus');
81
- util.changeElement(icon, this.context.list.icons.number);
82
- util.removeClass(button, 'active');
83
- }
84
-
85
- return false;
86
- },
87
-
88
- /**
89
- * @Override submenu
90
- */
91
- on: function () {
92
- const listContext = this.context.list;
93
- const list = listContext._list;
94
- const currentList = listContext.targetButton.getAttribute('data-focus') || '';
95
-
96
- if (currentList !== listContext.currentList) {
97
- for (let i = 0, len = list.length; i < len; i++) {
98
- if (currentList === list[i].getAttribute('data-command')) {
99
- this.util.addClass(list[i], 'active');
100
- } else {
101
- this.util.removeClass(list[i], 'active');
102
- }
103
- }
104
-
105
- listContext.currentList = currentList;
106
- }
107
- },
108
-
109
- editList: function (command, selectedCells, detach) {
110
- let range = this.getRange();
111
- let selectedFormats = !selectedCells ? this.getSelectedElementsAndComponents(false) : selectedCells;
112
-
113
- if (selectedFormats.length === 0) {
114
- if (selectedCells) return;
115
- range = this.getRange_addLine(range, null);
116
- selectedFormats = this.getSelectedElementsAndComponents(false);
117
- if (selectedFormats.length === 0) return;
118
- }
119
-
120
- const util = this.util;
121
- util.sortByDepth(selectedFormats, true);
122
-
123
- // merge
124
- let firstSel = selectedFormats[0];
125
- let lastSel = selectedFormats[selectedFormats.length - 1];
126
- let topEl = (util.isListCell(firstSel) || util.isComponent(firstSel)) && !firstSel.previousElementSibling ? firstSel.parentNode.previousElementSibling : firstSel.previousElementSibling;
127
- let bottomEl = (util.isListCell(lastSel) || util.isComponent(lastSel)) && !lastSel.nextElementSibling ? lastSel.parentNode.nextElementSibling : lastSel.nextElementSibling;
128
-
129
- const isCollapsed = range.collapsed;
130
- const originRange = {
131
- sc: range.startContainer,
132
- so: (range.startContainer === range.endContainer && util.onlyZeroWidthSpace(range.startContainer) && range.startOffset === 0 && range.endOffset === 1) ? range.endOffset : range.startOffset,
133
- ec: range.endContainer,
134
- eo: range.endOffset
135
- };
136
- let afterRange = null;
137
- let isRemove = true;
138
-
139
- for (let i = 0, len = selectedFormats.length; i < len; i++) {
140
- if (!util.isList(util.getRangeFormatElement(selectedFormats[i], function (current) {
141
- return this.getRangeFormatElement(current) && current !== selectedFormats[i];
142
- }.bind(util)))) {
143
- isRemove = false;
144
- break;
145
- }
146
- }
147
-
148
- if (isRemove && (!topEl || (firstSel.tagName !== topEl.tagName || command !== topEl.tagName.toUpperCase())) && (!bottomEl || (lastSel.tagName !== bottomEl.tagName || command !== bottomEl.tagName.toUpperCase()))) {
149
- if (detach) {
150
- for (let i = 0, len = selectedFormats.length; i < len; i++) {
151
- for (let j = i - 1; j >= 0; j--) {
152
- if (selectedFormats[j].contains(selectedFormats[i])) {
153
- selectedFormats.splice(i, 1);
154
- i--; len--;
155
- break;
156
- }
157
- }
158
- }
159
- }
160
-
161
- const currentFormat = util.getRangeFormatElement(firstSel);
162
- const cancel = currentFormat && currentFormat.tagName === command;
163
- let rangeArr, tempList;
164
- const passComponent = function (current) {
165
- return !this.isComponent(current);
166
- }.bind(util);
167
-
168
- if (!cancel) tempList = util.createElement(command);
169
-
170
- for (let i = 0, len = selectedFormats.length, r, o; i < len; i++) {
171
- o = util.getRangeFormatElement(selectedFormats[i], passComponent);
172
- if (!o || !util.isList(o)) continue;
173
-
174
- if (!r) {
175
- r = o;
176
- rangeArr = {r: r, f: [util.getParentElement(selectedFormats[i], 'LI')]};
177
- } else {
178
- if (r !== o) {
179
- if (detach && util.isListCell(o.parentNode)) {
180
- this.plugins.list._detachNested.call(this, rangeArr.f);
181
- } else {
182
- afterRange = this.detachRangeFormatElement(rangeArr.f[0].parentNode, rangeArr.f, tempList, false, true);
183
- }
184
-
185
- o = selectedFormats[i].parentNode;
186
- if (!cancel) tempList = util.createElement(command);
187
-
188
- r = o;
189
- rangeArr = {r: r, f: [util.getParentElement(selectedFormats[i], 'LI')]};
190
- } else {
191
- rangeArr.f.push(util.getParentElement(selectedFormats[i], 'LI'));
192
- }
193
- }
194
-
195
- if (i === len - 1) {
196
- if (detach && util.isListCell(o.parentNode)) {
197
- this.plugins.list._detachNested.call(this, rangeArr.f);
198
- } else {
199
- afterRange = this.detachRangeFormatElement(rangeArr.f[0].parentNode, rangeArr.f, tempList, false, true);
200
- }
201
- }
202
- }
203
- } else {
204
- const topElParent = topEl ? topEl.parentNode : topEl;
205
- const bottomElParent = bottomEl ? bottomEl.parentNode : bottomEl;
206
- topEl = topElParent && !util.isWysiwygDiv(topElParent) && topElParent.nodeName === command ? topElParent : topEl;
207
- bottomEl = bottomElParent && !util.isWysiwygDiv(bottomElParent) && bottomElParent.nodeName === command ? bottomElParent : bottomEl;
208
-
209
- const mergeTop = topEl && topEl.tagName === command;
210
- const mergeBottom = bottomEl && bottomEl.tagName === command;
211
-
212
- let list = mergeTop ? topEl : util.createElement(command);
213
- let firstList = null;
214
- let lastList = null;
215
- let topNumber = null;
216
- let bottomNumber = null;
217
-
218
- const passComponent = function (current) {
219
- return !this.isComponent(current) && !this.isList(current);
220
- }.bind(util);
221
-
222
- for (let i = 0, len = selectedFormats.length, newCell, fTag, isCell, next, originParent, nextParent, parentTag, siblingTag, rangeTag; i < len; i++) {
223
- fTag = selectedFormats[i];
224
- if (fTag.childNodes.length === 0 && !util._isIgnoreNodeChange(fTag)) {
225
- util.removeItem(fTag);
226
- continue;
227
- }
228
- next = selectedFormats[i + 1];
229
- originParent = fTag.parentNode;
230
- nextParent = next ? next.parentNode : null;
231
- isCell = util.isListCell(fTag);
232
- rangeTag = util.isRangeFormatElement(originParent) ? originParent : null;
233
- parentTag = isCell && !util.isWysiwygDiv(originParent) ? originParent.parentNode : originParent;
234
- siblingTag = isCell && !util.isWysiwygDiv(originParent) ? (!next || util.isListCell(parentTag)) ? originParent : originParent.nextSibling : fTag.nextSibling;
235
-
236
- newCell = util.createElement('LI');
237
- util.copyFormatAttributes(newCell, fTag);
238
-
239
- if (i === 0 && originRange.sc === fTag) {
240
- originRange.sc = newCell;
241
- }
242
- if (i === len - 1 && originRange.ec === fTag) {
243
- originRange.ec = newCell;
244
- }
245
-
246
- if (util.isComponent(fTag)) {
247
- const isHR = /^HR$/i.test(fTag.nodeName);
248
- if (!isHR) newCell.innerHTML = '<br>';
249
- newCell.innerHTML += fTag.outerHTML;
250
- if (isHR) newCell.innerHTML += '<br>';
251
- } else {
252
- const fChildren = fTag.childNodes;
253
- while (fChildren[0]) {
254
- newCell.appendChild(fChildren[0]);
255
- }
256
- }
257
- list.appendChild(newCell);
258
-
259
- if (!next) lastList = list;
260
- if (!next || parentTag !== nextParent || util.isRangeFormatElement(siblingTag)) {
261
- if (!firstList) firstList = list;
262
- if ((!mergeTop || !next || parentTag !== nextParent) && !(next && util.isList(nextParent) && nextParent === originParent)) {
263
- if (list.parentNode !== parentTag) parentTag.insertBefore(list, siblingTag);
264
- }
265
- }
266
-
267
- util.removeItem(fTag);
268
- if (mergeTop && topNumber === null) topNumber = list.children.length - 1;
269
- if (next && (util.getRangeFormatElement(nextParent, passComponent) !== util.getRangeFormatElement(originParent, passComponent) || (util.isList(nextParent) && util.isList(originParent) && util.getElementDepth(nextParent) !== util.getElementDepth(originParent)))) {
270
- list = util.createElement(command);
271
- }
272
-
273
- if (rangeTag && rangeTag.children.length === 0) util.removeItem(rangeTag);
274
- }
275
-
276
- if (topNumber) {
277
- firstList = firstList.children[topNumber];
278
- }
279
-
280
- if (mergeBottom) {
281
- bottomNumber = list.children.length - 1;
282
- list.innerHTML += bottomEl.innerHTML;
283
- lastList = list.children[bottomNumber];
284
- util.removeItem(bottomEl);
285
- }
286
- }
287
-
288
- this.effectNode = null;
289
- return !isCollapsed ? originRange : afterRange;
290
- },
291
-
292
- _detachNested: function (cells) {
293
- const first = cells[0];
294
- const last = cells[cells.length - 1];
295
- const next = last.nextElementSibling;
296
- const originList = first.parentNode;
297
- const sibling = originList.parentNode.nextElementSibling;
298
- const parentNode = originList.parentNode.parentNode;
299
-
300
- for (let c = 0, cLen = cells.length; c < cLen; c++) {
301
- parentNode.insertBefore(cells[c], sibling);
302
- }
303
-
304
- if (next && originList.children.length > 0) {
305
- const newList = originList.cloneNode(false);
306
- const children = originList.childNodes;
307
- const index = this.util.getPositionIndex(next);
308
- while (children[index]) {
309
- newList.appendChild(children[index]);
310
- }
311
- last.appendChild(newList);
312
- }
313
-
314
- if (originList.children.length === 0) this.util.removeItem(originList);
315
- this.util.mergeSameTags(parentNode);
316
-
317
- const edge = this.util.getEdgeChildNodes(first, last);
318
-
319
- return {
320
- cc: first.parentNode,
321
- sc: edge.sc,
322
- ec: edge.ec
323
- };
324
- },
325
-
326
- editInsideList: function (remove, selectedCells) {
327
- selectedCells = !selectedCells ? this.getSelectedElements().filter(function (el) { return this.isListCell(el); }.bind(this.util)) : selectedCells;
328
- const cellsLen = selectedCells.length;
329
- if (cellsLen === 0 || (!remove && (!this.util.isListCell(selectedCells[0].previousElementSibling) && !this.util.isListCell(selectedCells[cellsLen - 1].nextElementSibling)))) {
330
- return {
331
- sc: selectedCells[0],
332
- so: 0,
333
- ec: selectedCells[cellsLen - 1],
334
- eo: 1
335
- };
336
- }
337
-
338
- let originList = selectedCells[0].parentNode;
339
- let lastCell = selectedCells[cellsLen - 1];
340
- let range = null;
341
-
342
- if (remove) {
343
- if (originList !== lastCell.parentNode && this.util.isList(lastCell.parentNode.parentNode) && lastCell.nextElementSibling) {
344
- lastCell = lastCell.nextElementSibling;
345
- while (lastCell) {
346
- selectedCells.push(lastCell);
347
- lastCell = lastCell.nextElementSibling;
348
- }
349
- }
350
- range = this.plugins.list.editList.call(this, originList.nodeName.toUpperCase(), selectedCells, true);
351
- } else {
352
- let innerList = this.util.createElement(originList.nodeName);
353
- let prev = selectedCells[0].previousElementSibling;
354
- let next = lastCell.nextElementSibling;
355
- const nodePath = { s: null, e: null, sl: originList, el: originList };
356
-
357
- for (let i = 0, len = cellsLen, c; i < len; i++) {
358
- c = selectedCells[i];
359
- if (c.parentNode !== originList) {
360
- this.plugins.list._insiedList.call(this, originList, innerList, prev, next, nodePath);
361
- originList = c.parentNode;
362
- innerList = this.util.createElement(originList.nodeName);
363
- }
364
-
365
- prev = c.previousElementSibling;
366
- next = c.nextElementSibling;
367
- innerList.appendChild(c);
368
- }
369
-
370
- this.plugins.list._insiedList.call(this, originList, innerList, prev, next, nodePath);
371
-
372
- const sc = this.util.getNodeFromPath(nodePath.s, nodePath.sl);
373
- const ec = this.util.getNodeFromPath(nodePath.e, nodePath.el);
374
- range = {
375
- sc: sc,
376
- so: 0,
377
- ec: ec,
378
- eo: ec.textContent.length
379
- };
380
- }
381
-
382
- return range;
383
- },
384
-
385
- _insiedList: function (originList, innerList, prev, next, nodePath) {
386
- let insertPrev = false;
387
-
388
- if (prev && innerList.tagName === prev.tagName) {
389
- const children = innerList.children;
390
- while (children[0]) {
391
- prev.appendChild(children[0]);
392
- }
393
-
394
- innerList = prev;
395
- insertPrev = true;
396
- }
397
-
398
- if (next && innerList.tagName === next.tagName) {
399
- const children = next.children;
400
- while (children[0]) {
401
- innerList.appendChild(children[0]);
402
- }
403
-
404
- const temp = next.nextElementSibling;
405
- next.parentNode.removeChild(next);
406
- next = temp;
407
- }
408
-
409
- if (!insertPrev) {
410
- if (this.util.isListCell(prev)) {
411
- originList = prev;
412
- next = null;
413
- }
414
-
415
- originList.insertBefore(innerList, next);
416
-
417
- if (!nodePath.s) {
418
- nodePath.s = this.util.getNodePath(innerList.firstElementChild.firstChild, originList, null);
419
- nodePath.sl = originList;
420
- }
421
-
422
- const slPath = originList.contains(nodePath.sl) ? this.util.getNodePath(nodePath.sl, originList) : null;
423
- nodePath.e = this.util.getNodePath(innerList.lastElementChild.firstChild, originList, null);
424
- nodePath.el = originList;
425
-
426
- this.util.mergeSameTags(originList, [nodePath.s, nodePath.e, slPath], false);
427
- this.util.mergeNestedTags(originList);
428
- if (slPath) nodePath.sl = this.util.getNodeFromPath(slPath, originList);
429
- }
430
-
431
- return innerList;
432
- },
433
-
434
- pickup: function (e) {
435
- e.preventDefault();
436
- e.stopPropagation();
437
-
438
- let target = e.target;
439
- let command = '';
440
-
441
- while (!command && !/^UL$/i.test(target.tagName)) {
442
- command = target.getAttribute('data-command');
443
- target = target.parentNode;
444
- }
445
-
446
- if (!command) return;
447
-
448
- const range = this.plugins.list.editList.call(this, command, null, false);
449
- if (range) this.setRange(range.sc, range.so, range.ec, range.eo);
450
-
451
- this.submenuOff();
452
-
453
- // history stack
454
- this.history.push(false);
455
- }
456
- };
@@ -1,5 +0,0 @@
1
- import { SubmenuPlugin } from '../SubmenuPlugin';
2
-
3
- declare const paragraphStyle: SubmenuPlugin;
4
-
5
- export default paragraphStyle;
@@ -1,135 +0,0 @@
1
- /*
2
- * wysiwyg web editor
3
- *
4
- * suneditor.js
5
- * Copyright 2017 JiHong Lee.
6
- * MIT license.
7
- */
8
- 'use strict';
9
-
10
- export default {
11
- name: 'paragraphStyle',
12
- display: 'submenu',
13
- add: function (core, targetElement) {
14
- const context = core.context;
15
- context.paragraphStyle = {
16
- _classList: null
17
- };
18
-
19
- /** set submenu */
20
- let listDiv = this.setSubmenu(core);
21
-
22
- /** add event listeners */
23
- listDiv.querySelector('ul').addEventListener('click', this.pickUp.bind(core));
24
-
25
- context.paragraphStyle._classList = listDiv.querySelectorAll('li button');
26
-
27
- /** append target button menu */
28
- core.initMenuTarget(this.name, targetElement, listDiv);
29
-
30
- /** empty memory */
31
- listDiv = null;
32
- },
33
-
34
- setSubmenu: function (core) {
35
- const option = core.options;
36
- const listDiv = core.util.createElement('DIV');
37
- listDiv.className = 'se-submenu se-list-layer se-list-format';
38
-
39
- const menuLang = core.lang.menu;
40
- const defaultList = {
41
- spaced: {
42
- name: menuLang.spaced,
43
- class: '__se__p-spaced',
44
- _class: ''
45
- },
46
- bordered: {
47
- name: menuLang.bordered,
48
- class: '__se__p-bordered',
49
- _class: ''
50
- },
51
- neon: {
52
- name: menuLang.neon,
53
- class: '__se__p-neon',
54
- _class: ''
55
- }
56
- };
57
- const paragraphStyles = !option.paragraphStyles || option.paragraphStyles.length === 0 ? ['spaced', 'bordered', 'neon'] : option.paragraphStyles;
58
-
59
- let list = '<div class="se-list-inner"><ul class="se-list-basic">';
60
- for (let i = 0, len = paragraphStyles.length, p, name, attrs, _class; i < len; i++) {
61
- p = paragraphStyles[i];
62
-
63
- if (typeof p === 'string') {
64
- const defaultStyle = defaultList[p.toLowerCase()];
65
- if (!defaultStyle) continue;
66
- p = defaultStyle;
67
- }
68
-
69
- name = p.name;
70
- attrs = p.class ? ' class="' + p.class + '"' : '';
71
- _class = p._class;
72
-
73
- list += '<li>' +
74
- '<button type="button" class="se-btn-list' + (_class ? ' ' + _class: '') + '" data-value="' + p.class + '" title="' + name + '" aria-label="' + name + '">' +
75
- '<div' + attrs + '>' + name + '</div>' +
76
- '</button></li>';
77
- }
78
- list += '</ul></div>';
79
-
80
- listDiv.innerHTML = list;
81
-
82
- return listDiv;
83
- },
84
-
85
- /**
86
- * @Override submenu
87
- */
88
- on: function () {
89
- const paragraphContext = this.context.paragraphStyle;
90
- const paragraphList = paragraphContext._classList;
91
- const currentFormat = this.util.getFormatElement(this.getSelectionNode());
92
-
93
- for (let i = 0, len = paragraphList.length; i < len; i++) {
94
- if (this.util.hasClass(currentFormat, paragraphList[i].getAttribute('data-value'))) {
95
- this.util.addClass(paragraphList[i], 'active');
96
- } else {
97
- this.util.removeClass(paragraphList[i], 'active');
98
- }
99
- }
100
- },
101
-
102
- pickUp: function (e) {
103
- e.preventDefault();
104
- e.stopPropagation();
105
-
106
- let target = e.target;
107
- let value = null;
108
-
109
- while (!/^UL$/i.test(target.tagName)) {
110
- value = target.getAttribute('data-value');
111
- if (value) break;
112
- target = target.parentNode;
113
- }
114
-
115
- if (!value) return;
116
-
117
- let selectedFormsts = this.getSelectedElements();
118
- if (selectedFormsts.length === 0) {
119
- this.getRange_addLine(this.getRange(), null);
120
- selectedFormsts = this.getSelectedElements();
121
- if (selectedFormsts.length === 0) return;
122
- }
123
-
124
- // change format class
125
- const toggleClass = this.util.hasClass(target, 'active') ? this.util.removeClass.bind(this.util) : this.util.addClass.bind(this.util);
126
- for (let i = 0, len = selectedFormsts.length; i < len; i++) {
127
- toggleClass(selectedFormsts[i], value);
128
- }
129
-
130
- this.submenuOff();
131
-
132
- // history stack
133
- this.history.push(false);
134
- }
135
- };
@@ -1,5 +0,0 @@
1
- import { SubmenuPlugin } from '../SubmenuPlugin';
2
-
3
- declare const table: SubmenuPlugin;
4
-
5
- export default table;