jodit-pro 4.13.15 → 4.13.17

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 (325) hide show
  1. package/es2015/jodit.css +2 -2
  2. package/es2015/jodit.fat.min.css +1 -1
  3. package/es2015/jodit.fat.min.js +3 -3
  4. package/es2015/jodit.js +192 -20
  5. package/es2015/jodit.min.css +1 -1
  6. package/es2015/jodit.min.js +3 -3
  7. package/es2015/plugins/ai-assistant-pro/ai-assistant-pro.css +1 -1
  8. package/es2015/plugins/ai-assistant-pro/ai-assistant-pro.js +1 -1
  9. package/es2015/plugins/ai-assistant-pro/ai-assistant-pro.min.js +1 -1
  10. package/es2015/plugins/autocomplete/autocomplete.css +1 -1
  11. package/es2015/plugins/autocomplete/autocomplete.js +1 -1
  12. package/es2015/plugins/autocomplete/autocomplete.min.js +1 -1
  13. package/es2015/plugins/backup/backup.css +1 -1
  14. package/es2015/plugins/backup/backup.js +1 -1
  15. package/es2015/plugins/backup/backup.min.js +1 -1
  16. package/es2015/plugins/button-generator/button-generator.css +1 -1
  17. package/es2015/plugins/button-generator/button-generator.js +1 -1
  18. package/es2015/plugins/button-generator/button-generator.min.js +1 -1
  19. package/es2015/plugins/change-case/change-case.js +1 -1
  20. package/es2015/plugins/change-case/change-case.min.js +1 -1
  21. package/es2015/plugins/color-picker/color-picker.css +1 -1
  22. package/es2015/plugins/color-picker/color-picker.js +1 -1
  23. package/es2015/plugins/color-picker/color-picker.min.js +1 -1
  24. package/es2015/plugins/emoji/emoji.css +1 -1
  25. package/es2015/plugins/emoji/emoji.js +1 -1
  26. package/es2015/plugins/emoji/emoji.min.js +1 -1
  27. package/es2015/plugins/export-docs/export-docs.js +1 -1
  28. package/es2015/plugins/export-docs/export-docs.min.js +1 -1
  29. package/es2015/plugins/finder/finder.css +1 -1
  30. package/es2015/plugins/finder/finder.js +1 -1
  31. package/es2015/plugins/finder/finder.min.js +1 -1
  32. package/es2015/plugins/google-maps/google-maps.css +1 -1
  33. package/es2015/plugins/google-maps/google-maps.js +1 -1
  34. package/es2015/plugins/google-maps/google-maps.min.js +1 -1
  35. package/es2015/plugins/google-search/google-search.js +1 -1
  36. package/es2015/plugins/google-search/google-search.min.js +1 -1
  37. package/es2015/plugins/highlight-signature/highlight-signature.js +1 -1
  38. package/es2015/plugins/highlight-signature/highlight-signature.min.js +1 -1
  39. package/es2015/plugins/iframe-editor/iframe-editor.css +1 -1
  40. package/es2015/plugins/iframe-editor/iframe-editor.js +1 -1
  41. package/es2015/plugins/iframe-editor/iframe-editor.min.js +1 -1
  42. package/es2015/plugins/image-editor-pro/image-editor-pro.css +1 -1
  43. package/es2015/plugins/image-editor-pro/image-editor-pro.js +1 -1
  44. package/es2015/plugins/image-editor-pro/image-editor-pro.min.js +1 -1
  45. package/es2015/plugins/keyboard/keyboard.css +1 -1
  46. package/es2015/plugins/keyboard/keyboard.js +1 -1
  47. package/es2015/plugins/keyboard/keyboard.min.js +1 -1
  48. package/es2015/plugins/mobile-view/mobile-view.js +1 -1
  49. package/es2015/plugins/mobile-view/mobile-view.min.js +1 -1
  50. package/es2015/plugins/page-break/page-break.js +1 -1
  51. package/es2015/plugins/page-break/page-break.min.js +1 -1
  52. package/es2015/plugins/paste-code/paste-code.css +1 -1
  53. package/es2015/plugins/paste-code/paste-code.js +1 -1
  54. package/es2015/plugins/paste-code/paste-code.min.js +1 -1
  55. package/es2015/plugins/paste-from-word/paste-from-word.js +1 -1
  56. package/es2015/plugins/paste-from-word/paste-from-word.min.js +1 -1
  57. package/es2015/plugins/show-blocks/show-blocks.js +1 -1
  58. package/es2015/plugins/show-blocks/show-blocks.min.js +1 -1
  59. package/es2015/plugins/style/style.css +1 -1
  60. package/es2015/plugins/style/style.js +1 -1
  61. package/es2015/plugins/style/style.min.js +1 -1
  62. package/es2015/plugins/templates/templates.css +1 -1
  63. package/es2015/plugins/templates/templates.js +1 -1
  64. package/es2015/plugins/templates/templates.min.js +1 -1
  65. package/es2015/plugins/todo-list/todo-list.css +1 -1
  66. package/es2015/plugins/todo-list/todo-list.js +1 -1
  67. package/es2015/plugins/todo-list/todo-list.min.js +1 -1
  68. package/es2015/plugins/translate/translate.css +1 -1
  69. package/es2015/plugins/translate/translate.js +1 -1
  70. package/es2015/plugins/translate/translate.min.js +1 -1
  71. package/es2015/plugins/tune-block/tune-block.css +1 -1
  72. package/es2015/plugins/tune-block/tune-block.js +1 -1
  73. package/es2015/plugins/tune-block/tune-block.min.js +1 -1
  74. package/es2018/jodit.fat.min.css +1 -1
  75. package/es2018/jodit.fat.min.js +18 -18
  76. package/es2018/jodit.min.css +1 -1
  77. package/es2018/jodit.min.js +3 -3
  78. package/es2018/plugins/ai-assistant-pro/ai-assistant-pro.min.js +1 -1
  79. package/es2018/plugins/autocomplete/autocomplete.min.js +1 -1
  80. package/es2018/plugins/backup/backup.min.js +1 -1
  81. package/es2018/plugins/button-generator/button-generator.min.js +1 -1
  82. package/es2018/plugins/change-case/change-case.min.js +1 -1
  83. package/es2018/plugins/color-picker/color-picker.min.js +1 -1
  84. package/es2018/plugins/emoji/emoji.min.js +1 -1
  85. package/es2018/plugins/export-docs/export-docs.min.js +1 -1
  86. package/es2018/plugins/finder/finder.min.js +1 -1
  87. package/es2018/plugins/google-maps/google-maps.min.js +1 -1
  88. package/es2018/plugins/google-search/google-search.min.js +1 -1
  89. package/es2018/plugins/highlight-signature/highlight-signature.min.js +1 -1
  90. package/es2018/plugins/iframe-editor/iframe-editor.min.js +1 -1
  91. package/es2018/plugins/image-editor-pro/image-editor-pro.min.js +1 -1
  92. package/es2018/plugins/keyboard/keyboard.min.js +1 -1
  93. package/es2018/plugins/mobile-view/mobile-view.min.js +1 -1
  94. package/es2018/plugins/page-break/page-break.min.js +1 -1
  95. package/es2018/plugins/paste-code/paste-code.min.js +1 -1
  96. package/es2018/plugins/paste-from-word/paste-from-word.min.js +1 -1
  97. package/es2018/plugins/show-blocks/show-blocks.min.js +1 -1
  98. package/es2018/plugins/style/style.min.js +1 -1
  99. package/es2018/plugins/templates/templates.min.js +1 -1
  100. package/es2018/plugins/todo-list/todo-list.min.js +1 -1
  101. package/es2018/plugins/translate/translate.min.js +1 -1
  102. package/es2018/plugins/tune-block/tune-block.min.js +1 -1
  103. package/es2021/jodit.css +2 -2
  104. package/es2021/jodit.fat.min.css +1 -1
  105. package/es2021/jodit.fat.min.js +5 -5
  106. package/es2021/jodit.js +192 -20
  107. package/es2021/jodit.min.css +1 -1
  108. package/es2021/jodit.min.js +5 -5
  109. package/es2021/plugins/ai-assistant-pro/ai-assistant-pro.css +1 -1
  110. package/es2021/plugins/ai-assistant-pro/ai-assistant-pro.js +1 -1
  111. package/es2021/plugins/ai-assistant-pro/ai-assistant-pro.min.js +1 -1
  112. package/es2021/plugins/autocomplete/autocomplete.css +1 -1
  113. package/es2021/plugins/autocomplete/autocomplete.js +1 -1
  114. package/es2021/plugins/autocomplete/autocomplete.min.js +1 -1
  115. package/es2021/plugins/backup/backup.css +1 -1
  116. package/es2021/plugins/backup/backup.js +1 -1
  117. package/es2021/plugins/backup/backup.min.js +1 -1
  118. package/es2021/plugins/button-generator/button-generator.css +1 -1
  119. package/es2021/plugins/button-generator/button-generator.js +1 -1
  120. package/es2021/plugins/button-generator/button-generator.min.js +1 -1
  121. package/es2021/plugins/change-case/change-case.js +1 -1
  122. package/es2021/plugins/change-case/change-case.min.js +1 -1
  123. package/es2021/plugins/color-picker/color-picker.css +1 -1
  124. package/es2021/plugins/color-picker/color-picker.js +1 -1
  125. package/es2021/plugins/color-picker/color-picker.min.js +1 -1
  126. package/es2021/plugins/emoji/emoji.css +1 -1
  127. package/es2021/plugins/emoji/emoji.js +1 -1
  128. package/es2021/plugins/emoji/emoji.min.js +1 -1
  129. package/es2021/plugins/export-docs/export-docs.js +1 -1
  130. package/es2021/plugins/export-docs/export-docs.min.js +1 -1
  131. package/es2021/plugins/finder/finder.css +1 -1
  132. package/es2021/plugins/finder/finder.js +1 -1
  133. package/es2021/plugins/finder/finder.min.js +1 -1
  134. package/es2021/plugins/google-maps/google-maps.css +1 -1
  135. package/es2021/plugins/google-maps/google-maps.js +1 -1
  136. package/es2021/plugins/google-maps/google-maps.min.js +1 -1
  137. package/es2021/plugins/google-search/google-search.js +1 -1
  138. package/es2021/plugins/google-search/google-search.min.js +1 -1
  139. package/es2021/plugins/highlight-signature/highlight-signature.js +1 -1
  140. package/es2021/plugins/highlight-signature/highlight-signature.min.js +1 -1
  141. package/es2021/plugins/iframe-editor/iframe-editor.css +1 -1
  142. package/es2021/plugins/iframe-editor/iframe-editor.js +1 -1
  143. package/es2021/plugins/iframe-editor/iframe-editor.min.js +1 -1
  144. package/es2021/plugins/image-editor-pro/image-editor-pro.css +1 -1
  145. package/es2021/plugins/image-editor-pro/image-editor-pro.js +1 -1
  146. package/es2021/plugins/image-editor-pro/image-editor-pro.min.js +1 -1
  147. package/es2021/plugins/keyboard/keyboard.css +1 -1
  148. package/es2021/plugins/keyboard/keyboard.js +1 -1
  149. package/es2021/plugins/keyboard/keyboard.min.js +1 -1
  150. package/es2021/plugins/mobile-view/mobile-view.js +1 -1
  151. package/es2021/plugins/mobile-view/mobile-view.min.js +1 -1
  152. package/es2021/plugins/page-break/page-break.js +1 -1
  153. package/es2021/plugins/page-break/page-break.min.js +1 -1
  154. package/es2021/plugins/paste-code/paste-code.css +1 -1
  155. package/es2021/plugins/paste-code/paste-code.js +1 -1
  156. package/es2021/plugins/paste-code/paste-code.min.js +1 -1
  157. package/es2021/plugins/paste-from-word/paste-from-word.js +1 -1
  158. package/es2021/plugins/paste-from-word/paste-from-word.min.js +1 -1
  159. package/es2021/plugins/show-blocks/show-blocks.js +1 -1
  160. package/es2021/plugins/show-blocks/show-blocks.min.js +1 -1
  161. package/es2021/plugins/style/style.css +1 -1
  162. package/es2021/plugins/style/style.js +1 -1
  163. package/es2021/plugins/style/style.min.js +1 -1
  164. package/es2021/plugins/templates/templates.css +1 -1
  165. package/es2021/plugins/templates/templates.js +1 -1
  166. package/es2021/plugins/templates/templates.min.js +1 -1
  167. package/es2021/plugins/todo-list/todo-list.css +1 -1
  168. package/es2021/plugins/todo-list/todo-list.js +1 -1
  169. package/es2021/plugins/todo-list/todo-list.min.js +1 -1
  170. package/es2021/plugins/translate/translate.css +1 -1
  171. package/es2021/plugins/translate/translate.js +1 -1
  172. package/es2021/plugins/translate/translate.min.js +1 -1
  173. package/es2021/plugins/tune-block/tune-block.css +1 -1
  174. package/es2021/plugins/tune-block/tune-block.js +1 -1
  175. package/es2021/plugins/tune-block/tune-block.min.js +1 -1
  176. package/es2021.en/jodit.css +2 -2
  177. package/es2021.en/jodit.fat.min.css +1 -1
  178. package/es2021.en/jodit.fat.min.js +5 -5
  179. package/es2021.en/jodit.js +192 -20
  180. package/es2021.en/jodit.min.css +1 -1
  181. package/es2021.en/jodit.min.js +5 -5
  182. package/es2021.en/plugins/ai-assistant-pro/ai-assistant-pro.css +1 -1
  183. package/es2021.en/plugins/ai-assistant-pro/ai-assistant-pro.js +1 -1
  184. package/es2021.en/plugins/ai-assistant-pro/ai-assistant-pro.min.js +1 -1
  185. package/es2021.en/plugins/autocomplete/autocomplete.css +1 -1
  186. package/es2021.en/plugins/autocomplete/autocomplete.js +1 -1
  187. package/es2021.en/plugins/autocomplete/autocomplete.min.js +1 -1
  188. package/es2021.en/plugins/backup/backup.css +1 -1
  189. package/es2021.en/plugins/backup/backup.js +1 -1
  190. package/es2021.en/plugins/backup/backup.min.js +1 -1
  191. package/es2021.en/plugins/button-generator/button-generator.css +1 -1
  192. package/es2021.en/plugins/button-generator/button-generator.js +1 -1
  193. package/es2021.en/plugins/button-generator/button-generator.min.js +1 -1
  194. package/es2021.en/plugins/change-case/change-case.js +1 -1
  195. package/es2021.en/plugins/change-case/change-case.min.js +1 -1
  196. package/es2021.en/plugins/color-picker/color-picker.css +1 -1
  197. package/es2021.en/plugins/color-picker/color-picker.js +1 -1
  198. package/es2021.en/plugins/color-picker/color-picker.min.js +1 -1
  199. package/es2021.en/plugins/emoji/emoji.css +1 -1
  200. package/es2021.en/plugins/emoji/emoji.js +1 -1
  201. package/es2021.en/plugins/emoji/emoji.min.js +1 -1
  202. package/es2021.en/plugins/export-docs/export-docs.js +1 -1
  203. package/es2021.en/plugins/export-docs/export-docs.min.js +1 -1
  204. package/es2021.en/plugins/finder/finder.css +1 -1
  205. package/es2021.en/plugins/finder/finder.js +1 -1
  206. package/es2021.en/plugins/finder/finder.min.js +1 -1
  207. package/es2021.en/plugins/google-maps/google-maps.css +1 -1
  208. package/es2021.en/plugins/google-maps/google-maps.js +1 -1
  209. package/es2021.en/plugins/google-maps/google-maps.min.js +1 -1
  210. package/es2021.en/plugins/google-search/google-search.js +1 -1
  211. package/es2021.en/plugins/google-search/google-search.min.js +1 -1
  212. package/es2021.en/plugins/highlight-signature/highlight-signature.js +1 -1
  213. package/es2021.en/plugins/highlight-signature/highlight-signature.min.js +1 -1
  214. package/es2021.en/plugins/iframe-editor/iframe-editor.css +1 -1
  215. package/es2021.en/plugins/iframe-editor/iframe-editor.js +1 -1
  216. package/es2021.en/plugins/iframe-editor/iframe-editor.min.js +1 -1
  217. package/es2021.en/plugins/image-editor-pro/image-editor-pro.css +1 -1
  218. package/es2021.en/plugins/image-editor-pro/image-editor-pro.js +1 -1
  219. package/es2021.en/plugins/image-editor-pro/image-editor-pro.min.js +1 -1
  220. package/es2021.en/plugins/keyboard/keyboard.css +1 -1
  221. package/es2021.en/plugins/keyboard/keyboard.js +1 -1
  222. package/es2021.en/plugins/keyboard/keyboard.min.js +1 -1
  223. package/es2021.en/plugins/mobile-view/mobile-view.js +1 -1
  224. package/es2021.en/plugins/mobile-view/mobile-view.min.js +1 -1
  225. package/es2021.en/plugins/page-break/page-break.js +1 -1
  226. package/es2021.en/plugins/page-break/page-break.min.js +1 -1
  227. package/es2021.en/plugins/paste-code/paste-code.css +1 -1
  228. package/es2021.en/plugins/paste-code/paste-code.js +1 -1
  229. package/es2021.en/plugins/paste-code/paste-code.min.js +1 -1
  230. package/es2021.en/plugins/paste-from-word/paste-from-word.js +1 -1
  231. package/es2021.en/plugins/paste-from-word/paste-from-word.min.js +1 -1
  232. package/es2021.en/plugins/show-blocks/show-blocks.js +1 -1
  233. package/es2021.en/plugins/show-blocks/show-blocks.min.js +1 -1
  234. package/es2021.en/plugins/style/style.css +1 -1
  235. package/es2021.en/plugins/style/style.js +1 -1
  236. package/es2021.en/plugins/style/style.min.js +1 -1
  237. package/es2021.en/plugins/templates/templates.css +1 -1
  238. package/es2021.en/plugins/templates/templates.js +1 -1
  239. package/es2021.en/plugins/templates/templates.min.js +1 -1
  240. package/es2021.en/plugins/todo-list/todo-list.css +1 -1
  241. package/es2021.en/plugins/todo-list/todo-list.js +1 -1
  242. package/es2021.en/plugins/todo-list/todo-list.min.js +1 -1
  243. package/es2021.en/plugins/translate/translate.css +1 -1
  244. package/es2021.en/plugins/translate/translate.js +1 -1
  245. package/es2021.en/plugins/translate/translate.min.js +1 -1
  246. package/es2021.en/plugins/tune-block/tune-block.css +1 -1
  247. package/es2021.en/plugins/tune-block/tune-block.js +1 -1
  248. package/es2021.en/plugins/tune-block/tune-block.min.js +1 -1
  249. package/es5/jodit.css +3 -3
  250. package/es5/jodit.fat.min.css +1 -1
  251. package/es5/jodit.fat.min.js +2 -2
  252. package/es5/jodit.js +228 -20
  253. package/es5/jodit.min.css +3 -3
  254. package/es5/jodit.min.js +2 -2
  255. package/es5/plugins/ai-assistant-pro/ai-assistant-pro.css +1 -1
  256. package/es5/plugins/ai-assistant-pro/ai-assistant-pro.js +1 -1
  257. package/es5/plugins/ai-assistant-pro/ai-assistant-pro.min.js +1 -1
  258. package/es5/plugins/autocomplete/autocomplete.css +1 -1
  259. package/es5/plugins/autocomplete/autocomplete.js +1 -1
  260. package/es5/plugins/autocomplete/autocomplete.min.js +1 -1
  261. package/es5/plugins/backup/backup.css +1 -1
  262. package/es5/plugins/backup/backup.js +1 -1
  263. package/es5/plugins/backup/backup.min.js +1 -1
  264. package/es5/plugins/button-generator/button-generator.css +1 -1
  265. package/es5/plugins/button-generator/button-generator.js +1 -1
  266. package/es5/plugins/button-generator/button-generator.min.js +1 -1
  267. package/es5/plugins/change-case/change-case.js +1 -1
  268. package/es5/plugins/change-case/change-case.min.js +1 -1
  269. package/es5/plugins/color-picker/color-picker.css +1 -1
  270. package/es5/plugins/color-picker/color-picker.js +1 -1
  271. package/es5/plugins/color-picker/color-picker.min.js +1 -1
  272. package/es5/plugins/emoji/emoji.css +1 -1
  273. package/es5/plugins/emoji/emoji.js +1 -1
  274. package/es5/plugins/emoji/emoji.min.js +1 -1
  275. package/es5/plugins/export-docs/export-docs.js +1 -1
  276. package/es5/plugins/export-docs/export-docs.min.js +1 -1
  277. package/es5/plugins/finder/finder.css +1 -1
  278. package/es5/plugins/finder/finder.js +1 -1
  279. package/es5/plugins/finder/finder.min.js +1 -1
  280. package/es5/plugins/google-maps/google-maps.css +1 -1
  281. package/es5/plugins/google-maps/google-maps.js +1 -1
  282. package/es5/plugins/google-maps/google-maps.min.js +1 -1
  283. package/es5/plugins/google-search/google-search.js +1 -1
  284. package/es5/plugins/google-search/google-search.min.js +1 -1
  285. package/es5/plugins/highlight-signature/highlight-signature.js +1 -1
  286. package/es5/plugins/highlight-signature/highlight-signature.min.js +1 -1
  287. package/es5/plugins/iframe-editor/iframe-editor.css +1 -1
  288. package/es5/plugins/iframe-editor/iframe-editor.js +1 -1
  289. package/es5/plugins/iframe-editor/iframe-editor.min.js +1 -1
  290. package/es5/plugins/image-editor-pro/image-editor-pro.css +1 -1
  291. package/es5/plugins/image-editor-pro/image-editor-pro.js +1 -1
  292. package/es5/plugins/image-editor-pro/image-editor-pro.min.js +1 -1
  293. package/es5/plugins/keyboard/keyboard.css +1 -1
  294. package/es5/plugins/keyboard/keyboard.js +1 -1
  295. package/es5/plugins/keyboard/keyboard.min.js +1 -1
  296. package/es5/plugins/mobile-view/mobile-view.js +1 -1
  297. package/es5/plugins/mobile-view/mobile-view.min.js +1 -1
  298. package/es5/plugins/page-break/page-break.js +1 -1
  299. package/es5/plugins/page-break/page-break.min.js +1 -1
  300. package/es5/plugins/paste-code/paste-code.css +1 -1
  301. package/es5/plugins/paste-code/paste-code.js +1 -1
  302. package/es5/plugins/paste-code/paste-code.min.js +1 -1
  303. package/es5/plugins/paste-from-word/paste-from-word.js +1 -1
  304. package/es5/plugins/paste-from-word/paste-from-word.min.js +1 -1
  305. package/es5/plugins/show-blocks/show-blocks.js +1 -1
  306. package/es5/plugins/show-blocks/show-blocks.min.js +1 -1
  307. package/es5/plugins/style/style.css +1 -1
  308. package/es5/plugins/style/style.js +1 -1
  309. package/es5/plugins/style/style.min.js +1 -1
  310. package/es5/plugins/templates/templates.css +1 -1
  311. package/es5/plugins/templates/templates.js +1 -1
  312. package/es5/plugins/templates/templates.min.js +1 -1
  313. package/es5/plugins/todo-list/todo-list.css +1 -1
  314. package/es5/plugins/todo-list/todo-list.js +1 -1
  315. package/es5/plugins/todo-list/todo-list.min.js +1 -1
  316. package/es5/plugins/translate/translate.css +1 -1
  317. package/es5/plugins/translate/translate.js +1 -1
  318. package/es5/plugins/translate/translate.min.js +1 -1
  319. package/es5/plugins/tune-block/tune-block.css +1 -1
  320. package/es5/plugins/tune-block/tune-block.js +1 -1
  321. package/es5/plugins/tune-block/tune-block.min.js +1 -1
  322. package/es5/polyfills.fat.min.js +1 -1
  323. package/es5/polyfills.js +1 -1
  324. package/es5/polyfills.min.js +1 -1
  325. package/package.json +1 -1
package/es2015/jodit.js CHANGED
@@ -1,7 +1,7 @@
1
1
  /*!
2
2
  * jodit-pro - PRO Version of Jodit Editor
3
3
  * Author: Chupurnov Valerii <chupurnov@gmail.com>
4
- * Version: v4.13.15
4
+ * Version: v4.13.17
5
5
  * Url: https://xdsoft.net/jodit/pro/
6
6
  * License(s): SEE LICENSE IN LICENSE.md
7
7
  */
@@ -375,6 +375,26 @@ let ConfigPrototype = {};
375
375
  /**
376
376
  * if set true, then the current mode is saved in a cookie, and is restored after a reload of the page
377
377
  */ this.saveModeInStorage = false;
378
+ /**
379
+ * Configure the provider that backs {@link IViewBased.asyncStorage}.
380
+ *
381
+ * By default the editor's `asyncStorage` uses persistent `IndexedDB` (with an
382
+ * in-memory fallback when it is unavailable). Set `defaultProvider` to override it:
383
+ * - `'local'` — persist in `localStorage`;
384
+ * - `'memory'` — keep everything in memory (nothing survives a reload);
385
+ * - a custom {@link IAsyncStorage} implementation — plug in your own backend.
386
+ *
387
+ * ```javascript
388
+ * Jodit.make('#editor', {
389
+ * asyncStorage: { defaultProvider: 'local' }
390
+ * });
391
+ *
392
+ * // or a fully custom backend
393
+ * Jodit.make('#editor', {
394
+ * asyncStorage: { defaultProvider: myAsyncStorage }
395
+ * });
396
+ * ```
397
+ */ this.asyncStorage = {};
378
398
  /**
379
399
  * Class name that can be appended to the editable area
380
400
  *
@@ -1818,7 +1838,7 @@ __webpack_require__.r(__webpack_exports__);
1818
1838
  * ```
1819
1839
  * @packageDocumentation
1820
1840
  * @module constants
1821
- */ const APP_VERSION = "4.13.15";
1841
+ */ const APP_VERSION = "4.13.17";
1822
1842
  // prettier-ignore
1823
1843
  const ES = "es2015";
1824
1844
  const IS_ES_MODERN = true;
@@ -11299,6 +11319,131 @@ class Selection {
11299
11319
  }
11300
11320
  return '';
11301
11321
  }
11322
+ /**
11323
+ * Splits the boundaries of the current selection and wraps every
11324
+ * contiguous run of selected inline content (grouped by block) into a
11325
+ * `<font>` element, returning those wrappers in document order.
11326
+ *
11327
+ * This is a pure-DOM replacement for the old
11328
+ * `nativeExecCommand('fontsize', false, '7')` trick which relied on the
11329
+ * browser to split the selection into `<font size="7">` fragments.
11330
+ */ __wrapSelectionFragments() {
11331
+ const range = this.range;
11332
+ this.__splitSelectionBoundaries(range);
11333
+ let root = range.commonAncestorContainer;
11334
+ if (_dom_dom_js__WEBPACK_IMPORTED_MODULE_2__.Dom.isText(root)) {
11335
+ root = root.parentNode;
11336
+ }
11337
+ if (!root) {
11338
+ return [];
11339
+ }
11340
+ return this.__wrapSelectionRuns(this.__collectContainedNodes(root, range));
11341
+ }
11342
+ /**
11343
+ * Splits the text nodes at both ends of the range so that its boundaries
11344
+ * always fall between nodes. Afterwards every node inside the range is
11345
+ * fully (not partially) selected.
11346
+ */ __splitSelectionBoundaries(range) {
11347
+ var _a, _b, _c, _d, _e, _f, _g, _h;
11348
+ let { startContainer, endContainer } = range;
11349
+ let { startOffset, endOffset } = range;
11350
+ if (_dom_dom_js__WEBPACK_IMPORTED_MODULE_2__.Dom.isText(endContainer) && endOffset > 0 && endOffset < ((_b = (_a = endContainer.nodeValue) === null || _a === void 0 ? void 0 : _a.length) !== null && _b !== void 0 ? _b : 0)) {
11351
+ endContainer.splitText(endOffset);
11352
+ endOffset = (_d = (_c = endContainer.nodeValue) === null || _c === void 0 ? void 0 : _c.length) !== null && _d !== void 0 ? _d : endOffset;
11353
+ }
11354
+ if (_dom_dom_js__WEBPACK_IMPORTED_MODULE_2__.Dom.isText(startContainer) && startOffset > 0 && startOffset < ((_f = (_e = startContainer.nodeValue) === null || _e === void 0 ? void 0 : _e.length) !== null && _f !== void 0 ? _f : 0)) {
11355
+ const middle = startContainer.splitText(startOffset);
11356
+ // Selection located inside a single text node - the tail we just
11357
+ // cut off is the actual selected fragment.
11358
+ if (startContainer === endContainer) {
11359
+ endContainer = middle;
11360
+ endOffset = (_h = (_g = middle.nodeValue) === null || _g === void 0 ? void 0 : _g.length) !== null && _h !== void 0 ? _h : 0;
11361
+ }
11362
+ startContainer = middle;
11363
+ startOffset = 0;
11364
+ }
11365
+ range.setStart(startContainer, startOffset);
11366
+ range.setEnd(endContainer, endOffset);
11367
+ // Normalize text-edge boundaries (e.g. `(text, 0)` or `(text, length)`)
11368
+ // to the element level so that containment checks based on
11369
+ // `selectNode()` treat a fully selected text node as contained.
11370
+ this.__normalizeRangeBoundary(range, true);
11371
+ this.__normalizeRangeBoundary(range, false);
11372
+ }
11373
+ __normalizeRangeBoundary(range, atStart) {
11374
+ var _a, _b;
11375
+ const container = atStart ? range.startContainer : range.endContainer;
11376
+ if (!_dom_dom_js__WEBPACK_IMPORTED_MODULE_2__.Dom.isText(container)) {
11377
+ return;
11378
+ }
11379
+ const offset = atStart ? range.startOffset : range.endOffset;
11380
+ const length = (_b = (_a = container.nodeValue) === null || _a === void 0 ? void 0 : _a.length) !== null && _b !== void 0 ? _b : 0;
11381
+ if (offset === 0) {
11382
+ atStart ? range.setStartBefore(container) : range.setEndBefore(container);
11383
+ } else if (offset >= length) {
11384
+ atStart ? range.setStartAfter(container) : range.setEndAfter(container);
11385
+ }
11386
+ }
11387
+ /**
11388
+ * Collects the highest-level nodes that are completely inside the range,
11389
+ * descending into nodes that are only partially selected.
11390
+ */ __collectContainedNodes(root, range) {
11391
+ const result = [];
11392
+ (0,_helpers_index_js__WEBPACK_IMPORTED_MODULE_3__.toArray)(root.childNodes).forEach((child)=>{
11393
+ if (this.__isFullyContained(range, child)) {
11394
+ result.push(child);
11395
+ } else if (child.childNodes.length && range.intersectsNode(child)) {
11396
+ result.push(...this.__collectContainedNodes(child, range));
11397
+ }
11398
+ });
11399
+ return result;
11400
+ }
11401
+ __isFullyContained(range, node) {
11402
+ const nodeRange = this.createRange();
11403
+ nodeRange.selectNode(node);
11404
+ return range.compareBoundaryPoints(Range.START_TO_START, nodeRange) <= 0 && range.compareBoundaryPoints(Range.END_TO_END, nodeRange) >= 0;
11405
+ }
11406
+ /**
11407
+ * Wraps every contiguous run of selected inline siblings into a `<font>`
11408
+ * element. Block-level nodes are never wrapped themselves - their inline
11409
+ * content is wrapped instead, keeping every `<font>` inside a single block.
11410
+ */ __wrapSelectionRuns(nodes) {
11411
+ const fonts = [];
11412
+ let run = [];
11413
+ const flush = ()=>{
11414
+ if (run.length) {
11415
+ fonts.push(this.__wrapRunInFont(run));
11416
+ run = [];
11417
+ }
11418
+ };
11419
+ nodes.forEach((node)=>{
11420
+ if (_dom_dom_js__WEBPACK_IMPORTED_MODULE_2__.Dom.isElement(node) && this.__isOrContainsBlock(node)) {
11421
+ flush();
11422
+ fonts.push(...this.__wrapSelectionRuns((0,_helpers_index_js__WEBPACK_IMPORTED_MODULE_3__.toArray)(node.childNodes)));
11423
+ } else {
11424
+ if (run.length && run[run.length - 1].parentNode !== node.parentNode) {
11425
+ flush();
11426
+ }
11427
+ run.push(node);
11428
+ }
11429
+ });
11430
+ flush();
11431
+ return fonts;
11432
+ }
11433
+ __isOrContainsBlock(node) {
11434
+ if (_dom_dom_js__WEBPACK_IMPORTED_MODULE_2__.Dom.isBlock(node)) {
11435
+ return true;
11436
+ }
11437
+ return (0,_helpers_index_js__WEBPACK_IMPORTED_MODULE_3__.toArray)(node.childNodes).some((child)=>this.__isOrContainsBlock(child));
11438
+ }
11439
+ __wrapRunInFont(run) {
11440
+ var _a;
11441
+ const font = this.j.createInside.element('font');
11442
+ const [first] = run;
11443
+ (_a = first.parentNode) === null || _a === void 0 ? void 0 : _a.insertBefore(font, first);
11444
+ run.forEach((node)=>font.appendChild(node));
11445
+ return font;
11446
+ }
11302
11447
  /**
11303
11448
  * Wrap all selected fragments inside Tag or apply some callback
11304
11449
  */ *wrapInTagGen(fakes) {
@@ -11312,20 +11457,7 @@ class Selection {
11312
11457
  _dom_dom_js__WEBPACK_IMPORTED_MODULE_2__.Dom.unwrap(font);
11313
11458
  return;
11314
11459
  }
11315
- // fix issue https://github.com/xdan/jodit/issues/65
11316
- (0,_helpers_index_js__WEBPACK_IMPORTED_MODULE_3__.$$)('*[style*=font-size]', this.area).forEach((elm)=>{
11317
- (0,_helpers_index_js__WEBPACK_IMPORTED_MODULE_3__.attr)(elm, 'data-font-size', elm.style.fontSize.toString());
11318
- elm.style.removeProperty('font-size');
11319
- });
11320
- this.j.nativeExecCommand('fontsize', false, '7');
11321
- (0,_helpers_index_js__WEBPACK_IMPORTED_MODULE_3__.$$)('*[data-font-size]', this.area).forEach((elm)=>{
11322
- const fontSize = (0,_helpers_index_js__WEBPACK_IMPORTED_MODULE_3__.attr)(elm, 'data-font-size');
11323
- if (fontSize) {
11324
- elm.style.fontSize = fontSize;
11325
- (0,_helpers_index_js__WEBPACK_IMPORTED_MODULE_3__.attr)(elm, 'data-font-size', null);
11326
- }
11327
- });
11328
- const elms = (0,_helpers_index_js__WEBPACK_IMPORTED_MODULE_3__.$$)('font[size="7"]', this.area);
11460
+ const elms = this.__wrapSelectionFragments();
11329
11461
  for (const font of elms){
11330
11462
  const { firstChild, lastChild } = font;
11331
11463
  if (firstChild && firstChild === lastChild && (0,_helpers_checker_index_js__WEBPACK_IMPORTED_MODULE_4__.isMarker)(firstChild)) {
@@ -13071,9 +13203,23 @@ class AsyncStorage {
13071
13203
  }
13072
13204
  }).call(this);
13073
13205
  }
13074
- static makeStorage(persistentOrStrategy = false, suffix) {
13206
+ static makeStorage(persistentOrStrategy = false, suffix, options) {
13075
13207
  let provider = undefined;
13076
13208
  let storage = null;
13209
+ // An explicit `defaultProvider` overrides the strategy-based selection
13210
+ // below and decides which provider backs the storage.
13211
+ const defaultProvider = options === null || options === void 0 ? void 0 : options.defaultProvider;
13212
+ if (defaultProvider != null) {
13213
+ if (defaultProvider === 'local') {
13214
+ provider = (0,_engines_local_storage_provider_js__WEBPACK_IMPORTED_MODULE_2__.canUsePersistentStorage)('localStorage') ? new _engines_local_storage_provider_js__WEBPACK_IMPORTED_MODULE_2__.LocalStorageProvider(_storage_js__WEBPACK_IMPORTED_MODULE_4__.StorageKey + (suffix || '')) : new _engines_memory_storage_provider_js__WEBPACK_IMPORTED_MODULE_3__.MemoryStorageProvider();
13215
+ } else if (defaultProvider === 'memory') {
13216
+ provider = new _engines_memory_storage_provider_js__WEBPACK_IMPORTED_MODULE_3__.MemoryStorageProvider();
13217
+ } else {
13218
+ // A custom IAsyncStorage implementation, used as-is.
13219
+ provider = defaultProvider;
13220
+ }
13221
+ return new AsyncStorage(Promise.resolve(provider), suffix);
13222
+ }
13077
13223
  if (persistentOrStrategy === 'localStorage' || persistentOrStrategy === 'sessionStorage') {
13078
13224
  if ((0,_engines_local_storage_provider_js__WEBPACK_IMPORTED_MODULE_2__.canUsePersistentStorage)(persistentOrStrategy)) {
13079
13225
  provider = new _engines_local_storage_provider_js__WEBPACK_IMPORTED_MODULE_2__.LocalStorageProvider(_storage_js__WEBPACK_IMPORTED_MODULE_4__.StorageKey + (suffix || ''), persistentOrStrategy);
@@ -13396,7 +13542,12 @@ function clearUseIndexedDBCache() {
13396
13542
  }
13397
13543
  delete(key) {
13398
13544
  try {
13399
- this.storage.removeItem(this.rootKey);
13545
+ const buffer = this.storage.getItem(this.rootKey);
13546
+ if (buffer) {
13547
+ const json = JSON.parse(buffer);
13548
+ delete json[key];
13549
+ this.storage.setItem(this.rootKey, JSON.stringify(json));
13550
+ }
13400
13551
  } catch (_a) {}
13401
13552
  return this;
13402
13553
  }
@@ -16871,9 +17022,23 @@ class ViewWithToolbar extends _view_js__WEBPACK_IMPORTED_MODULE_9__.View {
16871
17022
  if (!this.o.fullsize && ((0,_helpers_checker_is_string_js__WEBPACK_IMPORTED_MODULE_5__.isString)(this.o.toolbar) || _dom_dom_js__WEBPACK_IMPORTED_MODULE_3__.Dom.isHTMLElement(this.o.toolbar))) {
16872
17023
  return (0,_helpers_utils_selector_js__WEBPACK_IMPORTED_MODULE_6__.resolveElement)(this.o.toolbar, this.o.shadowRoot || this.od);
16873
17024
  }
16874
- this.o.toolbar && _dom_dom_js__WEBPACK_IMPORTED_MODULE_3__.Dom.appendChildFirst(this.container, this.__defaultToolbarContainer);
17025
+ this.o.toolbar && this.__appendToolbarBox();
16875
17026
  return this.__defaultToolbarContainer;
16876
17027
  }
17028
+ /**
17029
+ * Keep the toolbar box as the first child of the container, except that
17030
+ * children flagged with `data-jodit-above-toolbar` (e.g. the `above`
17031
+ * workplace slot used for presence bars and banners) stay above it.
17032
+ */ __appendToolbarBox() {
17033
+ const box = this.__defaultToolbarContainer;
17034
+ let anchor = this.container.firstElementChild;
17035
+ while(anchor && anchor !== box && anchor.hasAttribute('data-jodit-above-toolbar')){
17036
+ anchor = anchor.nextElementSibling;
17037
+ }
17038
+ if (anchor !== box) {
17039
+ this.container.insertBefore(box, anchor);
17040
+ }
17041
+ }
16877
17042
  /**
16878
17043
  * Change panel container
16879
17044
  */ setPanel(element) {
@@ -17075,7 +17240,7 @@ let View = View_1 = class View extends _component_component_js__WEBPACK_IMPORTED
17075
17240
  /**
17076
17241
  * Container for persistent set/get value
17077
17242
  */ get asyncStorage() {
17078
- return _storage_async_storage_js__WEBPACK_IMPORTED_MODULE_12__.AsyncStorage.makeStorage(true, this.id);
17243
+ return _storage_async_storage_js__WEBPACK_IMPORTED_MODULE_12__.AsyncStorage.makeStorage(true, this.id, this.o.asyncStorage);
17079
17244
  }
17080
17245
  /**
17081
17246
  * Short alias for `create`
@@ -18269,6 +18434,12 @@ let Jodit = Jodit_1 = class Jodit extends _modules_index_js__WEBPACK_IMPORTED_MO
18269
18434
  element.style.display = 'none';
18270
18435
  }
18271
18436
  const SLOT = 'workplace-slot';
18437
+ // A slot that always stays ABOVE the toolbar (presence bars, banners…).
18438
+ // The `data-jodit-above-toolbar` attribute tells ViewWithToolbar to keep
18439
+ // the toolbar box below it when (re)attaching the toolbar container.
18440
+ const aboveSlot = this.c.div(this.getFullElName(SLOT, 'above'), NOEDIT);
18441
+ aboveSlot.setAttribute('data-jodit-above-toolbar', '');
18442
+ _modules_index_js__WEBPACK_IMPORTED_MODULE_7__.Dom.appendChildFirst(container, aboveSlot);
18272
18443
  const topSlot = this.c.div(this.getFullElName(SLOT, 'top'), NOEDIT);
18273
18444
  container.appendChild(topSlot);
18274
18445
  const centerSlot = this.c.div(this.getFullElName(SLOT, 'center'), NOEDIT);
@@ -18301,6 +18472,7 @@ let Jodit = Jodit_1 = class Jodit extends _modules_index_js__WEBPACK_IMPORTED_MO
18301
18472
  container,
18302
18473
  workplace,
18303
18474
  slots: {
18475
+ above: aboveSlot,
18304
18476
  top: topSlot,
18305
18477
  bottom: bottomPanel,
18306
18478
  center: centerSlot,