suneditor 3.0.0-alpha.2 → 3.0.0-alpha.20

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 (306) hide show
  1. package/.eslintrc.json +4 -3
  2. package/CONTRIBUTING.md +4 -2
  3. package/README.md +19 -11
  4. package/README_V3_TEMP.md +705 -0
  5. package/dist/suneditor.min.css +1 -0
  6. package/dist/suneditor.min.js +1 -0
  7. package/example.md +587 -0
  8. package/package.json +15 -9
  9. package/src/assets/icons/_default.js +166 -131
  10. package/src/assets/{suneditor-content.css → suneditor-contents.css} +182 -45
  11. package/src/assets/suneditor.css +1195 -556
  12. package/src/assets/variables.css +138 -0
  13. package/src/core/base/eventHandlers/handler_toolbar.js +35 -14
  14. package/src/core/base/eventHandlers/handler_ww_clipboard.js +29 -4
  15. package/src/core/base/eventHandlers/handler_ww_dragDrop.js +59 -15
  16. package/src/core/base/eventHandlers/handler_ww_key_input.js +426 -212
  17. package/src/core/base/eventHandlers/handler_ww_mouse.js +108 -32
  18. package/src/core/base/eventManager.js +540 -209
  19. package/src/core/base/events.js +616 -320
  20. package/src/core/base/history.js +93 -39
  21. package/src/core/class/char.js +29 -13
  22. package/src/core/class/component.js +332 -145
  23. package/src/core/class/format.js +671 -509
  24. package/src/core/class/html.js +504 -290
  25. package/src/core/class/menu.js +114 -47
  26. package/src/core/class/nodeTransform.js +111 -66
  27. package/src/core/class/offset.js +409 -105
  28. package/src/core/class/selection.js +220 -108
  29. package/src/core/class/shortcuts.js +68 -8
  30. package/src/core/class/toolbar.js +106 -116
  31. package/src/core/class/ui.js +330 -0
  32. package/src/core/class/viewer.js +178 -74
  33. package/src/core/editor.js +489 -384
  34. package/src/core/section/actives.js +118 -22
  35. package/src/core/section/constructor.js +504 -170
  36. package/src/core/section/context.js +28 -23
  37. package/src/core/section/documentType.js +561 -0
  38. package/src/editorInjector/_classes.js +19 -5
  39. package/src/editorInjector/_core.js +71 -7
  40. package/src/editorInjector/index.js +63 -1
  41. package/src/helper/converter.js +137 -19
  42. package/src/helper/dom/domCheck.js +294 -0
  43. package/src/helper/dom/domQuery.js +609 -0
  44. package/src/helper/dom/domUtils.js +533 -0
  45. package/src/helper/dom/index.js +12 -0
  46. package/src/helper/env.js +42 -19
  47. package/src/helper/index.js +7 -4
  48. package/src/helper/keyCodeMap.js +183 -0
  49. package/src/helper/numbers.js +8 -8
  50. package/src/helper/unicode.js +5 -5
  51. package/src/langs/ckb.js +69 -3
  52. package/src/langs/cs.js +67 -1
  53. package/src/langs/da.js +68 -2
  54. package/src/langs/de.js +68 -3
  55. package/src/langs/en.js +29 -1
  56. package/src/langs/es.js +68 -3
  57. package/src/langs/fa.js +70 -2
  58. package/src/langs/fr.js +68 -2
  59. package/src/langs/he.js +68 -3
  60. package/src/langs/hu.js +226 -0
  61. package/src/langs/index.js +3 -2
  62. package/src/langs/it.js +65 -0
  63. package/src/langs/ja.js +68 -3
  64. package/src/langs/ko.js +66 -1
  65. package/src/langs/lv.js +68 -3
  66. package/src/langs/nl.js +68 -3
  67. package/src/langs/pl.js +68 -3
  68. package/src/langs/pt_br.js +65 -0
  69. package/src/langs/ro.js +69 -4
  70. package/src/langs/ru.js +68 -3
  71. package/src/langs/se.js +68 -3
  72. package/src/langs/tr.js +68 -0
  73. package/src/langs/ua.js +68 -3
  74. package/src/langs/ur.js +71 -6
  75. package/src/langs/zh_cn.js +69 -4
  76. package/src/modules/ApiManager.js +77 -54
  77. package/src/modules/Browser.js +667 -0
  78. package/src/modules/ColorPicker.js +162 -102
  79. package/src/modules/Controller.js +233 -136
  80. package/src/modules/Figure.js +913 -489
  81. package/src/modules/FileManager.js +141 -72
  82. package/src/modules/HueSlider.js +113 -61
  83. package/src/modules/Modal.js +292 -113
  84. package/src/modules/ModalAnchorEditor.js +380 -230
  85. package/src/modules/SelectMenu.js +270 -168
  86. package/src/modules/_DragHandle.js +2 -1
  87. package/src/modules/index.js +3 -3
  88. package/src/plugins/browser/audioGallery.js +83 -0
  89. package/src/plugins/browser/fileBrowser.js +103 -0
  90. package/src/plugins/browser/fileGallery.js +83 -0
  91. package/src/plugins/browser/imageGallery.js +81 -0
  92. package/src/plugins/browser/videoGallery.js +103 -0
  93. package/src/plugins/command/blockquote.js +40 -27
  94. package/src/plugins/command/exportPDF.js +134 -0
  95. package/src/plugins/command/fileUpload.js +226 -158
  96. package/src/plugins/command/list_bulleted.js +93 -47
  97. package/src/plugins/command/list_numbered.js +93 -47
  98. package/src/plugins/dropdown/align.js +66 -54
  99. package/src/plugins/dropdown/backgroundColor.js +76 -45
  100. package/src/plugins/dropdown/font.js +71 -47
  101. package/src/plugins/dropdown/fontColor.js +78 -46
  102. package/src/plugins/dropdown/formatBlock.js +74 -33
  103. package/src/plugins/dropdown/hr.js +102 -51
  104. package/src/plugins/dropdown/layout.js +37 -26
  105. package/src/plugins/dropdown/lineHeight.js +54 -38
  106. package/src/plugins/dropdown/list.js +60 -45
  107. package/src/plugins/dropdown/paragraphStyle.js +51 -30
  108. package/src/plugins/dropdown/table.js +1269 -777
  109. package/src/plugins/dropdown/template.js +38 -26
  110. package/src/plugins/dropdown/textStyle.js +43 -31
  111. package/src/plugins/field/mention.js +144 -82
  112. package/src/plugins/index.js +32 -6
  113. package/src/plugins/input/fontSize.js +161 -108
  114. package/src/plugins/input/pageNavigator.js +70 -0
  115. package/src/plugins/modal/audio.js +341 -169
  116. package/src/plugins/modal/drawing.js +530 -0
  117. package/src/plugins/modal/embed.js +886 -0
  118. package/src/plugins/modal/image.js +673 -358
  119. package/src/plugins/modal/link.js +100 -71
  120. package/src/plugins/modal/math.js +384 -168
  121. package/src/plugins/modal/video.js +693 -336
  122. package/src/plugins/popup/anchor.js +222 -0
  123. package/src/suneditor.js +54 -12
  124. package/src/themes/dark.css +85 -0
  125. package/src/typedef.js +86 -0
  126. package/types/assets/icons/_default.d.ts +152 -0
  127. package/types/core/base/eventHandlers/handler_toolbar.d.ts +41 -0
  128. package/types/core/base/eventHandlers/handler_ww_clipboard.d.ts +40 -0
  129. package/types/core/base/eventHandlers/handler_ww_dragDrop.d.ts +35 -0
  130. package/types/core/base/eventHandlers/handler_ww_key_input.d.ts +45 -0
  131. package/types/core/base/eventHandlers/handler_ww_mouse.d.ts +39 -0
  132. package/types/core/base/eventManager.d.ts +377 -0
  133. package/types/core/base/events.d.ts +297 -0
  134. package/types/core/base/history.d.ts +81 -0
  135. package/types/core/class/char.d.ts +60 -0
  136. package/types/core/class/component.d.ts +259 -0
  137. package/types/core/class/format.d.ts +615 -0
  138. package/types/core/class/html.d.ts +377 -0
  139. package/types/core/class/menu.d.ts +118 -0
  140. package/types/core/class/nodeTransform.d.ts +93 -0
  141. package/types/core/class/offset.d.ts +512 -0
  142. package/types/core/class/selection.d.ts +188 -0
  143. package/types/core/class/shortcuts.d.ts +142 -0
  144. package/types/core/class/toolbar.d.ts +189 -0
  145. package/types/core/class/ui.d.ts +144 -0
  146. package/types/core/class/viewer.d.ts +140 -0
  147. package/types/core/editor.d.ts +606 -0
  148. package/types/core/section/actives.d.ts +46 -0
  149. package/types/core/section/constructor.d.ts +748 -0
  150. package/types/core/section/context.d.ts +45 -0
  151. package/types/core/section/documentType.d.ts +178 -0
  152. package/types/editorInjector/_classes.d.ts +41 -0
  153. package/types/editorInjector/_core.d.ts +92 -0
  154. package/types/editorInjector/index.d.ts +71 -0
  155. package/types/helper/converter.d.ts +150 -0
  156. package/types/helper/dom/domCheck.d.ts +182 -0
  157. package/types/helper/dom/domQuery.d.ts +214 -0
  158. package/types/helper/dom/domUtils.d.ts +211 -0
  159. package/types/helper/dom/index.d.ts +9 -0
  160. package/types/helper/env.d.ts +149 -0
  161. package/types/helper/index.d.ts +163 -0
  162. package/types/helper/keyCodeMap.d.ts +110 -0
  163. package/types/helper/numbers.d.ts +43 -0
  164. package/types/helper/unicode.d.ts +28 -0
  165. package/types/index.d.ts +0 -0
  166. package/{typings/Lang.d.ts → types/langs/_Lang.d.ts} +170 -103
  167. package/types/langs/ckb.d.ts +384 -0
  168. package/types/langs/cs.d.ts +384 -0
  169. package/types/langs/da.d.ts +384 -0
  170. package/types/langs/de.d.ts +384 -0
  171. package/types/langs/en.d.ts +384 -0
  172. package/types/langs/es.d.ts +384 -0
  173. package/types/langs/fa.d.ts +384 -0
  174. package/types/langs/fr.d.ts +384 -0
  175. package/types/langs/he.d.ts +384 -0
  176. package/types/langs/hu.d.ts +384 -0
  177. package/types/langs/index.d.ts +48 -0
  178. package/types/langs/it.d.ts +384 -0
  179. package/types/langs/ja.d.ts +384 -0
  180. package/types/langs/ko.d.ts +384 -0
  181. package/types/langs/lv.d.ts +384 -0
  182. package/types/langs/nl.d.ts +384 -0
  183. package/types/langs/pl.d.ts +384 -0
  184. package/types/langs/pt_br.d.ts +384 -0
  185. package/types/langs/ro.d.ts +384 -0
  186. package/types/langs/ru.d.ts +384 -0
  187. package/types/langs/se.d.ts +384 -0
  188. package/types/langs/tr.d.ts +384 -0
  189. package/types/langs/ua.d.ts +384 -0
  190. package/types/langs/ur.d.ts +384 -0
  191. package/types/langs/zh_cn.d.ts +384 -0
  192. package/types/modules/ApiManager.d.ts +125 -0
  193. package/types/modules/Browser.d.ts +326 -0
  194. package/types/modules/ColorPicker.d.ts +131 -0
  195. package/types/modules/Controller.d.ts +231 -0
  196. package/types/modules/Figure.d.ts +504 -0
  197. package/types/modules/FileManager.d.ts +202 -0
  198. package/types/modules/HueSlider.d.ts +136 -0
  199. package/types/modules/Modal.d.ts +117 -0
  200. package/types/modules/ModalAnchorEditor.d.ts +236 -0
  201. package/types/modules/SelectMenu.d.ts +194 -0
  202. package/types/modules/_DragHandle.d.ts +7 -0
  203. package/types/modules/index.d.ts +26 -0
  204. package/types/plugins/browser/audioGallery.d.ts +55 -0
  205. package/types/plugins/browser/fileBrowser.d.ts +64 -0
  206. package/types/plugins/browser/fileGallery.d.ts +55 -0
  207. package/types/plugins/browser/imageGallery.d.ts +51 -0
  208. package/types/plugins/browser/videoGallery.d.ts +57 -0
  209. package/types/plugins/command/blockquote.d.ts +28 -0
  210. package/types/plugins/command/exportPDF.d.ts +46 -0
  211. package/types/plugins/command/fileUpload.d.ts +156 -0
  212. package/types/plugins/command/list_bulleted.d.ts +56 -0
  213. package/types/plugins/command/list_numbered.d.ts +56 -0
  214. package/types/plugins/dropdown/align.d.ts +60 -0
  215. package/types/plugins/dropdown/backgroundColor.d.ts +63 -0
  216. package/types/plugins/dropdown/font.d.ts +54 -0
  217. package/types/plugins/dropdown/fontColor.d.ts +63 -0
  218. package/types/plugins/dropdown/formatBlock.d.ts +58 -0
  219. package/types/plugins/dropdown/hr.d.ts +81 -0
  220. package/types/plugins/dropdown/layout.d.ts +40 -0
  221. package/types/plugins/dropdown/lineHeight.d.ts +50 -0
  222. package/types/plugins/dropdown/list.d.ts +39 -0
  223. package/types/plugins/dropdown/paragraphStyle.d.ts +54 -0
  224. package/types/plugins/dropdown/table.d.ts +579 -0
  225. package/types/plugins/dropdown/template.d.ts +40 -0
  226. package/types/plugins/dropdown/textStyle.d.ts +41 -0
  227. package/types/plugins/field/mention.d.ts +102 -0
  228. package/types/plugins/index.d.ts +107 -0
  229. package/types/plugins/input/fontSize.d.ts +170 -0
  230. package/types/plugins/input/pageNavigator.d.ts +28 -0
  231. package/types/plugins/modal/audio.d.ts +269 -0
  232. package/types/plugins/modal/drawing.d.ts +246 -0
  233. package/types/plugins/modal/embed.d.ts +387 -0
  234. package/types/plugins/modal/image.d.ts +451 -0
  235. package/types/plugins/modal/link.d.ts +128 -0
  236. package/types/plugins/modal/math.d.ts +193 -0
  237. package/types/plugins/modal/video.d.ts +485 -0
  238. package/types/plugins/popup/anchor.d.ts +56 -0
  239. package/types/suneditor.d.ts +51 -0
  240. package/types/typedef-global.d.ts +144 -0
  241. package/src/core/class/notice.js +0 -42
  242. package/src/helper/domUtils.js +0 -1177
  243. package/src/modules/FileBrowser.js +0 -271
  244. package/src/plugins/command/exportPdf.js +0 -168
  245. package/src/plugins/fileBrowser/imageGallery.js +0 -81
  246. package/src/themes/test.css +0 -61
  247. package/typings/CommandPlugin.d.ts +0 -8
  248. package/typings/DialogPlugin.d.ts +0 -20
  249. package/typings/FileBrowserPlugin.d.ts +0 -30
  250. package/typings/Module.d.ts +0 -15
  251. package/typings/Plugin.d.ts +0 -42
  252. package/typings/SubmenuPlugin.d.ts +0 -8
  253. package/typings/_classes.d.ts +0 -17
  254. package/typings/_colorPicker.d.ts +0 -60
  255. package/typings/_core.d.ts +0 -55
  256. package/typings/align.d.ts +0 -5
  257. package/typings/audio.d.ts +0 -5
  258. package/typings/backgroundColor.d.ts +0 -5
  259. package/typings/blockquote.d.ts +0 -5
  260. package/typings/char.d.ts +0 -39
  261. package/typings/component.d.ts +0 -38
  262. package/typings/context.d.ts +0 -39
  263. package/typings/converter.d.ts +0 -33
  264. package/typings/dialog.d.ts +0 -28
  265. package/typings/domUtils.d.ts +0 -361
  266. package/typings/editor.d.ts +0 -7
  267. package/typings/editor.ts +0 -542
  268. package/typings/env.d.ts +0 -70
  269. package/typings/eventManager.d.ts +0 -37
  270. package/typings/events.d.ts +0 -262
  271. package/typings/fileBrowser.d.ts +0 -42
  272. package/typings/fileManager.d.ts +0 -67
  273. package/typings/font.d.ts +0 -5
  274. package/typings/fontColor.d.ts +0 -5
  275. package/typings/fontSize.d.ts +0 -5
  276. package/typings/format.d.ts +0 -191
  277. package/typings/formatBlock.d.ts +0 -5
  278. package/typings/history.d.ts +0 -48
  279. package/typings/horizontalRule.d.ts +0 -5
  280. package/typings/image.d.ts +0 -5
  281. package/typings/imageGallery.d.ts +0 -5
  282. package/typings/index.d.ts +0 -21
  283. package/typings/index.modules.d.ts +0 -11
  284. package/typings/index.plugins.d.ts +0 -58
  285. package/typings/lineHeight.d.ts +0 -5
  286. package/typings/link.d.ts +0 -5
  287. package/typings/list.d.ts +0 -5
  288. package/typings/math.d.ts +0 -5
  289. package/typings/mediaContainer.d.ts +0 -25
  290. package/typings/mention.d.ts +0 -5
  291. package/typings/node.d.ts +0 -57
  292. package/typings/notice.d.ts +0 -16
  293. package/typings/numbers.d.ts +0 -29
  294. package/typings/offset.d.ts +0 -24
  295. package/typings/options.d.ts +0 -589
  296. package/typings/paragraphStyle.d.ts +0 -5
  297. package/typings/resizing.d.ts +0 -141
  298. package/typings/selection.d.ts +0 -94
  299. package/typings/shortcuts.d.ts +0 -13
  300. package/typings/suneditor.d.ts +0 -9
  301. package/typings/table.d.ts +0 -5
  302. package/typings/template.d.ts +0 -5
  303. package/typings/textStyle.d.ts +0 -5
  304. package/typings/toolbar.d.ts +0 -32
  305. package/typings/unicode.d.ts +0 -25
  306. package/typings/video.d.ts +0 -5
@@ -0,0 +1,330 @@
1
+ /**
2
+ * @fileoverview UI class
3
+ */
4
+
5
+ import CoreInjector from '../../editorInjector/_core';
6
+ import Modal from '../../modules/Modal';
7
+ import { dom, converter } from '../../helper';
8
+
9
+ /**
10
+ * @typedef {Omit<UI & Partial<__se__EditorInjector>, 'ui'>} UIThis
11
+ */
12
+
13
+ /**
14
+ * @constructor
15
+ * @this {UIThis}
16
+ * @description The UI class is a class that handles operations related to the user interface of SunEditor.
17
+ * - This class sets the editor's style, theme, editor mode, etc., and controls the state of various UI elements.
18
+ * @param {__se__EditorCore} editor - The root editor instance
19
+ */
20
+ function UI(editor) {
21
+ CoreInjector.call(this, editor);
22
+
23
+ // members
24
+ const noticeModal = CreateNoticeHTML(editor);
25
+ this.noticeModal = new Modal(this, noticeModal);
26
+ this.noticeMessage = noticeModal.querySelector('span');
27
+ this._backWrapper = /** @type {HTMLElement} */ (this.carrierWrapper.querySelector('.se-back-wrapper'));
28
+ this._controllerOnBtnDisabled = false;
29
+ }
30
+
31
+ UI.prototype = {
32
+ /**
33
+ * @this {UIThis}
34
+ * @description Set "options.get('editorStyle')" style.
35
+ * - Define the style of the edit area
36
+ * - It can also be defined with the "setOptions" method, but the "setEditorStyle" method does not render the editor again.
37
+ * @param {string} style Style string
38
+ * @param {__se__FrameContext|null} fc Frame context
39
+ */
40
+ setEditorStyle(style, fc) {
41
+ fc = fc || this.editor.frameContext;
42
+ const fo = fc.get('options');
43
+
44
+ const newStyles = converter._setDefaultOptionStyle(fo, style);
45
+ fo.set('_defaultStyles', newStyles);
46
+
47
+ // top area
48
+ fc.get('topArea').style.cssText = newStyles.top;
49
+
50
+ // code view
51
+ const code = fc.get('code');
52
+ code.style.cssText = fo.get('_defaultStyles').frame;
53
+ code.style.display = 'none';
54
+
55
+ // wysiwyg frame
56
+ if (!fo.get('iframe')) {
57
+ fc.get('wysiwygFrame').style.cssText = newStyles.frame + newStyles.editor;
58
+ } else {
59
+ fc.get('wysiwygFrame').style.cssText = newStyles.frame;
60
+ fc.get('wysiwyg').style.cssText = newStyles.editor;
61
+ }
62
+ },
63
+
64
+ /**
65
+ * @this {UIThis}
66
+ * @description Set the theme to the editor
67
+ * @param {string} theme Theme name
68
+ */
69
+ setTheme(theme) {
70
+ if (typeof theme !== 'string') return;
71
+ const o = this.options;
72
+ const prevTheme = o.get('_themeClass').trim();
73
+ o.set('theme', theme || '');
74
+ o.set('_themeClass', theme ? ` se-theme-${theme}` : '');
75
+ theme = o.get('_themeClass').trim();
76
+
77
+ const applyTheme = (target) => {
78
+ if (!target) return;
79
+ if (prevTheme) dom.utils.removeClass(target, prevTheme);
80
+ if (theme) dom.utils.addClass(target, theme);
81
+ };
82
+
83
+ applyTheme(this.carrierWrapper);
84
+ this.editor.applyFrameRoots((e) => {
85
+ applyTheme(e.get('topArea'));
86
+ applyTheme(e.get('wysiwyg'));
87
+ });
88
+
89
+ applyTheme(this.context.get('statusbar._wrapper'));
90
+ applyTheme(this.context.get('toolbar._wrapper'));
91
+ },
92
+
93
+ /**
94
+ * @this {UIThis}
95
+ * @description Switch to or off "ReadOnly" mode.
96
+ * @param {boolean} value "readOnly" boolean value.
97
+ * @param {string|undefined} rootKey Root key
98
+ */
99
+ readOnly(value, rootKey) {
100
+ const fc = rootKey ? this.frameRoots.get(rootKey) : this.editor.frameContext;
101
+
102
+ fc.set('isReadOnly', !!value);
103
+ dom.utils.setDisabled(this.editor._controllerOnDisabledButtons, !!value);
104
+
105
+ if (value) {
106
+ this._offCurrentController();
107
+ this._offCurrentModal();
108
+
109
+ if (this.toolbar?.currentMoreLayerActiveButton?.disabled) this.toolbar._moreLayerOff();
110
+ if (this.subToolbar?.currentMoreLayerActiveButton?.disabled) this.subToolbar._moreLayerOff();
111
+ if (this.menu?.currentDropdownActiveButton?.disabled) this.menu.dropdownOff();
112
+ if (this.menu?.currentContainerActiveButton?.disabled) this.menu.containerOff();
113
+
114
+ fc.get('code').setAttribute('readOnly', 'true');
115
+ dom.utils.addClass(fc.get('wysiwyg'), 'se-read-only');
116
+ } else {
117
+ fc.get('code').removeAttribute('readOnly');
118
+ dom.utils.removeClass(fc.get('wysiwyg'), 'se-read-only');
119
+ }
120
+
121
+ if (this.options.get('hasCodeMirror')) {
122
+ this.viewer._codeMirrorEditor('readonly', !!value, rootKey);
123
+ }
124
+ },
125
+
126
+ /**
127
+ * @this {UIThis}
128
+ * @description Disable the suneditor
129
+ * @param {string|undefined} rootKey Root key
130
+ */
131
+ disable(rootKey) {
132
+ const fc = rootKey ? this.frameRoots.get(rootKey) : this.editor.frameContext;
133
+
134
+ this.toolbar.disable();
135
+ this._offCurrentController();
136
+ this._offCurrentModal();
137
+
138
+ fc.get('wysiwyg').setAttribute('contenteditable', false);
139
+ fc.set('isDisabled', true);
140
+
141
+ if (this.options.get('hasCodeMirror')) {
142
+ this.viewer._codeMirrorEditor('readonly', true, rootKey);
143
+ } else {
144
+ fc.get('code').disabled = true;
145
+ }
146
+ },
147
+
148
+ /**
149
+ * @this {UIThis}
150
+ * @description Enable the suneditor
151
+ * @param {string|undefined} rootKey Root key
152
+ */
153
+ enable(rootKey) {
154
+ const fc = rootKey ? this.frameRoots.get(rootKey) : this.editor.frameContext;
155
+
156
+ this.toolbar.enable();
157
+ fc.get('wysiwyg').setAttribute('contenteditable', true);
158
+ fc.set('isDisabled', false);
159
+
160
+ if (this.options.get('hasCodeMirror')) {
161
+ this.viewer._codeMirrorEditor('readonly', false, rootKey);
162
+ } else {
163
+ fc.get('code').disabled = false;
164
+ }
165
+ },
166
+
167
+ /**
168
+ * @this {UIThis}
169
+ * @description Show the suneditor
170
+ * @param {string|undefined} rootKey Root key
171
+ */
172
+ show(rootKey) {
173
+ const fc = rootKey ? this.frameRoots.get(rootKey) : this.editor.frameContext;
174
+ const topAreaStyle = fc.get('topArea').style;
175
+ if (topAreaStyle.display === 'none') topAreaStyle.display = 'block';
176
+ },
177
+
178
+ /**
179
+ * @this {UIThis}
180
+ * @description Hide the suneditor
181
+ * @param {string|undefined} rootKey Root key
182
+ */
183
+ hide(rootKey) {
184
+ const fc = rootKey ? this.frameRoots.get(rootKey) : this.editor.frameContext;
185
+ fc.get('topArea').style.display = 'none';
186
+ },
187
+
188
+ /**
189
+ * @this {UIThis}
190
+ * @description Show loading box
191
+ * @param {string=} rootKey Root key
192
+ */
193
+ showLoading(rootKey) {
194
+ (rootKey ? this.frameRoots.get(rootKey).get('container') : this.carrierWrapper).querySelector('.se-loading-box').style.display = 'block';
195
+ },
196
+
197
+ /**
198
+ * @this {UIThis}
199
+ * @description Hide loading box
200
+ * @param {string=} rootKey Root key
201
+ */
202
+ hideLoading(rootKey) {
203
+ (rootKey ? this.frameRoots.get(rootKey).get('container') : this.carrierWrapper).querySelector('.se-loading-box').style.display = 'none';
204
+ },
205
+
206
+ /**
207
+ * @this {UIThis}
208
+ * @description This method disables or enables the toolbar buttons when the controller is activated or deactivated.
209
+ * - When the controller is activated, the toolbar buttons are disabled; when the controller is deactivated, the buttons are enabled.
210
+ * @param {boolean} active If `true`, the toolbar buttons will be disabled. If `false`, the toolbar buttons will be enabled.
211
+ */
212
+ setControllerOnDisabledButtons(active) {
213
+ if (active && !this._controllerOnBtnDisabled) {
214
+ dom.utils.setDisabled(this.editor._controllerOnDisabledButtons, true);
215
+ this._controllerOnBtnDisabled = true;
216
+ } else if (!active && this._controllerOnBtnDisabled) {
217
+ dom.utils.setDisabled(this.editor._controllerOnDisabledButtons, false);
218
+ this._controllerOnBtnDisabled = false;
219
+ }
220
+ },
221
+
222
+ /**
223
+ * @this {UIThis}
224
+ * @description Activate the transparent background "div" so that other elements are not affected during resizing.
225
+ * @param {string} cursor cursor css property
226
+ */
227
+ enableBackWrapper(cursor) {
228
+ this._backWrapper.style.cursor = cursor;
229
+ this._backWrapper.style.display = 'block';
230
+ },
231
+
232
+ /**
233
+ * @this {UIThis}
234
+ * @description Disabled background "div"
235
+ */
236
+ disableBackWrapper() {
237
+ this._backWrapper.style.display = 'none';
238
+ this._backWrapper.style.cursor = 'default';
239
+ },
240
+
241
+ /**
242
+ * @this {UIThis}
243
+ * @description Open the notice panel
244
+ * @param {string} text Notice message
245
+ */
246
+ noticeOpen(text) {
247
+ this.noticeMessage.textContent = text;
248
+ this.noticeModal.open();
249
+ },
250
+
251
+ /**
252
+ * @this {UIThis}
253
+ * @description Close the notice panel
254
+ */
255
+ noticeClose() {
256
+ this.noticeModal.close();
257
+ },
258
+
259
+ /**
260
+ * @private
261
+ * @this {UIThis}
262
+ * @description visible controllers
263
+ * @param {boolean} value hidden/show
264
+ * @param {?boolean=} lineBreakShow Line break hidden/show (default: Follows the value "value".)
265
+ */
266
+ _visibleControllers(value, lineBreakShow) {
267
+ const visible = value ? '' : 'hidden';
268
+ const breakerVisible = lineBreakShow ?? visible ? '' : 'hidden';
269
+
270
+ const cont = this.editor.opendControllers;
271
+ for (let i = 0, c; i < cont.length; i++) {
272
+ c = cont[i];
273
+ if (c.form) c.form.style.visibility = visible;
274
+ }
275
+
276
+ this.editor._lineBreaker_t.style.visibility = breakerVisible;
277
+ this.editor._lineBreaker_b.style.visibility = breakerVisible;
278
+ },
279
+
280
+ /**
281
+ * @private
282
+ * @this {UIThis}
283
+ * @description Off current controllers
284
+ */
285
+ _offCurrentController() {
286
+ this.component.__deselect();
287
+ },
288
+
289
+ /**
290
+ * @private
291
+ * @this {UIThis}
292
+ * @description Off controllers
293
+ */
294
+ __offControllers() {
295
+ const cont = this.editor.opendControllers;
296
+ const fixedCont = [];
297
+ for (let i = 0, c; i < cont.length; i++) {
298
+ c = cont[i];
299
+ if (c.fixed) {
300
+ fixedCont.push(c);
301
+ continue;
302
+ }
303
+ if (typeof c.inst.close === 'function') c.inst.close();
304
+ if (c.form) c.form.style.display = 'none';
305
+ }
306
+ this.editor.opendControllers = fixedCont;
307
+ this.editor.currentControllerName = '';
308
+ this.editor._preventBlur = false;
309
+ },
310
+
311
+ /**
312
+ * @private
313
+ * @this {UIThis}
314
+ * @description Off current modal
315
+ */
316
+ _offCurrentModal() {
317
+ if (this.editor.opendModal) {
318
+ this.editor.opendModal.close();
319
+ }
320
+ },
321
+
322
+ constructor: UI
323
+ };
324
+
325
+ function CreateNoticeHTML({ lang, icons }) {
326
+ const html = '<div><button class="close" data-command="close" title="' + lang.close + '">' + icons.cancel + '</button></div><div><span></span></div>';
327
+ return dom.utils.createElement('DIV', { class: 'se-notice' }, html);
328
+ }
329
+
330
+ export default UI;