jodit-pro 4.10.4 → 4.11.1

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 (300) hide show
  1. package/CHANGELOG.md +74 -1
  2. package/es2015/jodit.css +1 -1
  3. package/es2015/jodit.fat.min.js +6 -6
  4. package/es2015/jodit.js +346 -61
  5. package/es2015/jodit.min.js +9 -9
  6. package/es2015/plugins/ai-assistant-pro/ai-assistant-pro.css +1 -1
  7. package/es2015/plugins/ai-assistant-pro/ai-assistant-pro.js +1 -1
  8. package/es2015/plugins/ai-assistant-pro/ai-assistant-pro.min.js +1 -1
  9. package/es2015/plugins/autocomplete/autocomplete.js +1 -1
  10. package/es2015/plugins/autocomplete/autocomplete.min.js +1 -1
  11. package/es2015/plugins/backup/backup.css +1 -1
  12. package/es2015/plugins/backup/backup.js +1 -1
  13. package/es2015/plugins/backup/backup.min.js +1 -1
  14. package/es2015/plugins/button-generator/button-generator.css +1 -1
  15. package/es2015/plugins/button-generator/button-generator.js +1 -1
  16. package/es2015/plugins/button-generator/button-generator.min.js +1 -1
  17. package/es2015/plugins/change-case/change-case.js +1 -1
  18. package/es2015/plugins/change-case/change-case.min.js +1 -1
  19. package/es2015/plugins/color-picker/color-picker.css +1 -1
  20. package/es2015/plugins/color-picker/color-picker.js +1 -1
  21. package/es2015/plugins/color-picker/color-picker.min.js +1 -1
  22. package/es2015/plugins/emoji/emoji.css +1 -1
  23. package/es2015/plugins/emoji/emoji.js +1 -1
  24. package/es2015/plugins/emoji/emoji.min.js +1 -1
  25. package/es2015/plugins/export-docs/export-docs.js +1 -1
  26. package/es2015/plugins/export-docs/export-docs.min.js +1 -1
  27. package/es2015/plugins/finder/finder.css +1 -1
  28. package/es2015/plugins/finder/finder.js +1 -1
  29. package/es2015/plugins/finder/finder.min.js +1 -1
  30. package/es2015/plugins/google-maps/google-maps.css +1 -1
  31. package/es2015/plugins/google-maps/google-maps.js +1 -1
  32. package/es2015/plugins/google-maps/google-maps.min.js +1 -1
  33. package/es2015/plugins/google-search/google-search.js +1 -1
  34. package/es2015/plugins/google-search/google-search.min.js +1 -1
  35. package/es2015/plugins/highlight-signature/highlight-signature.js +1 -1
  36. package/es2015/plugins/highlight-signature/highlight-signature.min.js +1 -1
  37. package/es2015/plugins/iframe-editor/iframe-editor.css +1 -1
  38. package/es2015/plugins/iframe-editor/iframe-editor.js +1 -1
  39. package/es2015/plugins/iframe-editor/iframe-editor.min.js +1 -1
  40. package/es2015/plugins/keyboard/keyboard.css +1 -1
  41. package/es2015/plugins/keyboard/keyboard.js +1 -1
  42. package/es2015/plugins/keyboard/keyboard.min.js +1 -1
  43. package/es2015/plugins/mobile-view/mobile-view.js +1 -1
  44. package/es2015/plugins/mobile-view/mobile-view.min.js +1 -1
  45. package/es2015/plugins/page-break/page-break.js +1 -1
  46. package/es2015/plugins/page-break/page-break.min.js +1 -1
  47. package/es2015/plugins/paste-code/paste-code.css +1 -1
  48. package/es2015/plugins/paste-code/paste-code.js +1 -1
  49. package/es2015/plugins/paste-code/paste-code.min.js +1 -1
  50. package/es2015/plugins/paste-from-word/paste-from-word.js +1 -1
  51. package/es2015/plugins/paste-from-word/paste-from-word.min.js +1 -1
  52. package/es2015/plugins/show-blocks/show-blocks.js +1 -1
  53. package/es2015/plugins/show-blocks/show-blocks.min.js +1 -1
  54. package/es2015/plugins/style/style.css +1 -1
  55. package/es2015/plugins/style/style.js +1 -1
  56. package/es2015/plugins/style/style.min.js +1 -1
  57. package/es2015/plugins/templates/templates.css +1 -1
  58. package/es2015/plugins/templates/templates.js +1 -1
  59. package/es2015/plugins/templates/templates.min.js +1 -1
  60. package/es2015/plugins/todo-list/todo-list.css +1 -1
  61. package/es2015/plugins/todo-list/todo-list.js +1 -1
  62. package/es2015/plugins/todo-list/todo-list.min.js +1 -1
  63. package/es2015/plugins/translate/translate.css +1 -1
  64. package/es2015/plugins/translate/translate.js +1 -1
  65. package/es2015/plugins/translate/translate.min.js +1 -1
  66. package/es2015/plugins/tune-block/tune-block.css +1 -1
  67. package/es2015/plugins/tune-block/tune-block.js +1 -1
  68. package/es2015/plugins/tune-block/tune-block.min.js +1 -1
  69. package/es2018/jodit.fat.min.js +6 -6
  70. package/es2018/jodit.min.js +15 -15
  71. package/es2018/plugins/ai-assistant-pro/ai-assistant-pro.min.js +1 -1
  72. package/es2018/plugins/autocomplete/autocomplete.min.js +1 -1
  73. package/es2018/plugins/backup/backup.min.js +1 -1
  74. package/es2018/plugins/button-generator/button-generator.min.js +1 -1
  75. package/es2018/plugins/change-case/change-case.min.js +1 -1
  76. package/es2018/plugins/color-picker/color-picker.min.js +1 -1
  77. package/es2018/plugins/emoji/emoji.min.js +1 -1
  78. package/es2018/plugins/export-docs/export-docs.min.js +1 -1
  79. package/es2018/plugins/finder/finder.min.js +1 -1
  80. package/es2018/plugins/google-maps/google-maps.min.js +1 -1
  81. package/es2018/plugins/google-search/google-search.min.js +1 -1
  82. package/es2018/plugins/highlight-signature/highlight-signature.min.js +1 -1
  83. package/es2018/plugins/iframe-editor/iframe-editor.min.js +1 -1
  84. package/es2018/plugins/keyboard/keyboard.min.js +1 -1
  85. package/es2018/plugins/mobile-view/mobile-view.min.js +1 -1
  86. package/es2018/plugins/page-break/page-break.min.js +1 -1
  87. package/es2018/plugins/paste-code/paste-code.min.js +1 -1
  88. package/es2018/plugins/paste-from-word/paste-from-word.min.js +1 -1
  89. package/es2018/plugins/show-blocks/show-blocks.min.js +1 -1
  90. package/es2018/plugins/style/style.min.js +1 -1
  91. package/es2018/plugins/templates/templates.min.js +1 -1
  92. package/es2018/plugins/todo-list/todo-list.min.js +1 -1
  93. package/es2018/plugins/translate/translate.min.js +1 -1
  94. package/es2018/plugins/tune-block/tune-block.min.js +1 -1
  95. package/es2021/jodit.css +1 -1
  96. package/es2021/jodit.fat.min.js +8 -8
  97. package/es2021/jodit.js +346 -61
  98. package/es2021/jodit.min.js +21 -21
  99. package/es2021/plugins/ai-assistant-pro/ai-assistant-pro.css +1 -1
  100. package/es2021/plugins/ai-assistant-pro/ai-assistant-pro.js +1 -1
  101. package/es2021/plugins/ai-assistant-pro/ai-assistant-pro.min.js +1 -1
  102. package/es2021/plugins/autocomplete/autocomplete.js +1 -1
  103. package/es2021/plugins/autocomplete/autocomplete.min.js +1 -1
  104. package/es2021/plugins/backup/backup.css +1 -1
  105. package/es2021/plugins/backup/backup.js +1 -1
  106. package/es2021/plugins/backup/backup.min.js +1 -1
  107. package/es2021/plugins/button-generator/button-generator.css +1 -1
  108. package/es2021/plugins/button-generator/button-generator.js +1 -1
  109. package/es2021/plugins/button-generator/button-generator.min.js +1 -1
  110. package/es2021/plugins/change-case/change-case.js +1 -1
  111. package/es2021/plugins/change-case/change-case.min.js +1 -1
  112. package/es2021/plugins/color-picker/color-picker.css +1 -1
  113. package/es2021/plugins/color-picker/color-picker.js +1 -1
  114. package/es2021/plugins/color-picker/color-picker.min.js +1 -1
  115. package/es2021/plugins/emoji/emoji.css +1 -1
  116. package/es2021/plugins/emoji/emoji.js +1 -1
  117. package/es2021/plugins/emoji/emoji.min.js +1 -1
  118. package/es2021/plugins/export-docs/export-docs.js +1 -1
  119. package/es2021/plugins/export-docs/export-docs.min.js +1 -1
  120. package/es2021/plugins/finder/finder.css +1 -1
  121. package/es2021/plugins/finder/finder.js +1 -1
  122. package/es2021/plugins/finder/finder.min.js +1 -1
  123. package/es2021/plugins/google-maps/google-maps.css +1 -1
  124. package/es2021/plugins/google-maps/google-maps.js +1 -1
  125. package/es2021/plugins/google-maps/google-maps.min.js +1 -1
  126. package/es2021/plugins/google-search/google-search.js +1 -1
  127. package/es2021/plugins/google-search/google-search.min.js +1 -1
  128. package/es2021/plugins/highlight-signature/highlight-signature.js +1 -1
  129. package/es2021/plugins/highlight-signature/highlight-signature.min.js +1 -1
  130. package/es2021/plugins/iframe-editor/iframe-editor.css +1 -1
  131. package/es2021/plugins/iframe-editor/iframe-editor.js +1 -1
  132. package/es2021/plugins/iframe-editor/iframe-editor.min.js +1 -1
  133. package/es2021/plugins/keyboard/keyboard.css +1 -1
  134. package/es2021/plugins/keyboard/keyboard.js +1 -1
  135. package/es2021/plugins/keyboard/keyboard.min.js +1 -1
  136. package/es2021/plugins/mobile-view/mobile-view.js +1 -1
  137. package/es2021/plugins/mobile-view/mobile-view.min.js +1 -1
  138. package/es2021/plugins/page-break/page-break.js +1 -1
  139. package/es2021/plugins/page-break/page-break.min.js +1 -1
  140. package/es2021/plugins/paste-code/paste-code.css +1 -1
  141. package/es2021/plugins/paste-code/paste-code.js +1 -1
  142. package/es2021/plugins/paste-code/paste-code.min.js +1 -1
  143. package/es2021/plugins/paste-from-word/paste-from-word.js +1 -1
  144. package/es2021/plugins/paste-from-word/paste-from-word.min.js +1 -1
  145. package/es2021/plugins/show-blocks/show-blocks.js +1 -1
  146. package/es2021/plugins/show-blocks/show-blocks.min.js +1 -1
  147. package/es2021/plugins/style/style.css +1 -1
  148. package/es2021/plugins/style/style.js +1 -1
  149. package/es2021/plugins/style/style.min.js +1 -1
  150. package/es2021/plugins/templates/templates.css +1 -1
  151. package/es2021/plugins/templates/templates.js +1 -1
  152. package/es2021/plugins/templates/templates.min.js +1 -1
  153. package/es2021/plugins/todo-list/todo-list.css +1 -1
  154. package/es2021/plugins/todo-list/todo-list.js +1 -1
  155. package/es2021/plugins/todo-list/todo-list.min.js +1 -1
  156. package/es2021/plugins/translate/translate.css +1 -1
  157. package/es2021/plugins/translate/translate.js +1 -1
  158. package/es2021/plugins/translate/translate.min.js +1 -1
  159. package/es2021/plugins/tune-block/tune-block.css +1 -1
  160. package/es2021/plugins/tune-block/tune-block.js +1 -1
  161. package/es2021/plugins/tune-block/tune-block.min.js +1 -1
  162. package/es2021.en/jodit.css +1 -1
  163. package/es2021.en/jodit.fat.min.js +8 -8
  164. package/es2021.en/jodit.js +346 -61
  165. package/es2021.en/jodit.min.js +8 -8
  166. package/es2021.en/plugins/ai-assistant-pro/ai-assistant-pro.css +1 -1
  167. package/es2021.en/plugins/ai-assistant-pro/ai-assistant-pro.js +1 -1
  168. package/es2021.en/plugins/ai-assistant-pro/ai-assistant-pro.min.js +1 -1
  169. package/es2021.en/plugins/autocomplete/autocomplete.js +1 -1
  170. package/es2021.en/plugins/autocomplete/autocomplete.min.js +1 -1
  171. package/es2021.en/plugins/backup/backup.css +1 -1
  172. package/es2021.en/plugins/backup/backup.js +1 -1
  173. package/es2021.en/plugins/backup/backup.min.js +1 -1
  174. package/es2021.en/plugins/button-generator/button-generator.css +1 -1
  175. package/es2021.en/plugins/button-generator/button-generator.js +1 -1
  176. package/es2021.en/plugins/button-generator/button-generator.min.js +1 -1
  177. package/es2021.en/plugins/change-case/change-case.js +1 -1
  178. package/es2021.en/plugins/change-case/change-case.min.js +1 -1
  179. package/es2021.en/plugins/color-picker/color-picker.css +1 -1
  180. package/es2021.en/plugins/color-picker/color-picker.js +1 -1
  181. package/es2021.en/plugins/color-picker/color-picker.min.js +1 -1
  182. package/es2021.en/plugins/emoji/emoji.css +1 -1
  183. package/es2021.en/plugins/emoji/emoji.js +1 -1
  184. package/es2021.en/plugins/emoji/emoji.min.js +1 -1
  185. package/es2021.en/plugins/export-docs/export-docs.js +1 -1
  186. package/es2021.en/plugins/export-docs/export-docs.min.js +1 -1
  187. package/es2021.en/plugins/finder/finder.css +1 -1
  188. package/es2021.en/plugins/finder/finder.js +1 -1
  189. package/es2021.en/plugins/finder/finder.min.js +1 -1
  190. package/es2021.en/plugins/google-maps/google-maps.css +1 -1
  191. package/es2021.en/plugins/google-maps/google-maps.js +1 -1
  192. package/es2021.en/plugins/google-maps/google-maps.min.js +1 -1
  193. package/es2021.en/plugins/google-search/google-search.js +1 -1
  194. package/es2021.en/plugins/google-search/google-search.min.js +1 -1
  195. package/es2021.en/plugins/highlight-signature/highlight-signature.js +1 -1
  196. package/es2021.en/plugins/highlight-signature/highlight-signature.min.js +1 -1
  197. package/es2021.en/plugins/iframe-editor/iframe-editor.css +1 -1
  198. package/es2021.en/plugins/iframe-editor/iframe-editor.js +1 -1
  199. package/es2021.en/plugins/iframe-editor/iframe-editor.min.js +1 -1
  200. package/es2021.en/plugins/keyboard/keyboard.css +1 -1
  201. package/es2021.en/plugins/keyboard/keyboard.js +1 -1
  202. package/es2021.en/plugins/keyboard/keyboard.min.js +1 -1
  203. package/es2021.en/plugins/mobile-view/mobile-view.js +1 -1
  204. package/es2021.en/plugins/mobile-view/mobile-view.min.js +1 -1
  205. package/es2021.en/plugins/page-break/page-break.js +1 -1
  206. package/es2021.en/plugins/page-break/page-break.min.js +1 -1
  207. package/es2021.en/plugins/paste-code/paste-code.css +1 -1
  208. package/es2021.en/plugins/paste-code/paste-code.js +1 -1
  209. package/es2021.en/plugins/paste-code/paste-code.min.js +1 -1
  210. package/es2021.en/plugins/paste-from-word/paste-from-word.js +1 -1
  211. package/es2021.en/plugins/paste-from-word/paste-from-word.min.js +1 -1
  212. package/es2021.en/plugins/show-blocks/show-blocks.js +1 -1
  213. package/es2021.en/plugins/show-blocks/show-blocks.min.js +1 -1
  214. package/es2021.en/plugins/style/style.css +1 -1
  215. package/es2021.en/plugins/style/style.js +1 -1
  216. package/es2021.en/plugins/style/style.min.js +1 -1
  217. package/es2021.en/plugins/templates/templates.css +1 -1
  218. package/es2021.en/plugins/templates/templates.js +1 -1
  219. package/es2021.en/plugins/templates/templates.min.js +1 -1
  220. package/es2021.en/plugins/todo-list/todo-list.css +1 -1
  221. package/es2021.en/plugins/todo-list/todo-list.js +1 -1
  222. package/es2021.en/plugins/todo-list/todo-list.min.js +1 -1
  223. package/es2021.en/plugins/translate/translate.css +1 -1
  224. package/es2021.en/plugins/translate/translate.js +1 -1
  225. package/es2021.en/plugins/translate/translate.min.js +1 -1
  226. package/es2021.en/plugins/tune-block/tune-block.css +1 -1
  227. package/es2021.en/plugins/tune-block/tune-block.js +1 -1
  228. package/es2021.en/plugins/tune-block/tune-block.min.js +1 -1
  229. package/es5/jodit.css +2 -2
  230. package/es5/jodit.fat.min.js +2 -2
  231. package/es5/jodit.js +403 -61
  232. package/es5/jodit.min.css +2 -2
  233. package/es5/jodit.min.js +2 -2
  234. package/es5/plugins/ai-assistant-pro/ai-assistant-pro.css +1 -1
  235. package/es5/plugins/ai-assistant-pro/ai-assistant-pro.js +1 -1
  236. package/es5/plugins/ai-assistant-pro/ai-assistant-pro.min.js +1 -1
  237. package/es5/plugins/autocomplete/autocomplete.js +1 -1
  238. package/es5/plugins/autocomplete/autocomplete.min.js +1 -1
  239. package/es5/plugins/backup/backup.css +1 -1
  240. package/es5/plugins/backup/backup.js +1 -1
  241. package/es5/plugins/backup/backup.min.js +1 -1
  242. package/es5/plugins/button-generator/button-generator.css +1 -1
  243. package/es5/plugins/button-generator/button-generator.js +1 -1
  244. package/es5/plugins/button-generator/button-generator.min.js +1 -1
  245. package/es5/plugins/change-case/change-case.js +1 -1
  246. package/es5/plugins/change-case/change-case.min.js +1 -1
  247. package/es5/plugins/color-picker/color-picker.css +1 -1
  248. package/es5/plugins/color-picker/color-picker.js +1 -1
  249. package/es5/plugins/color-picker/color-picker.min.js +1 -1
  250. package/es5/plugins/emoji/emoji.css +1 -1
  251. package/es5/plugins/emoji/emoji.js +1 -1
  252. package/es5/plugins/emoji/emoji.min.js +1 -1
  253. package/es5/plugins/export-docs/export-docs.js +1 -1
  254. package/es5/plugins/export-docs/export-docs.min.js +1 -1
  255. package/es5/plugins/finder/finder.css +1 -1
  256. package/es5/plugins/finder/finder.js +1 -1
  257. package/es5/plugins/finder/finder.min.js +1 -1
  258. package/es5/plugins/google-maps/google-maps.css +1 -1
  259. package/es5/plugins/google-maps/google-maps.js +1 -1
  260. package/es5/plugins/google-maps/google-maps.min.js +1 -1
  261. package/es5/plugins/google-search/google-search.js +1 -1
  262. package/es5/plugins/google-search/google-search.min.js +1 -1
  263. package/es5/plugins/highlight-signature/highlight-signature.js +1 -1
  264. package/es5/plugins/highlight-signature/highlight-signature.min.js +1 -1
  265. package/es5/plugins/iframe-editor/iframe-editor.css +1 -1
  266. package/es5/plugins/iframe-editor/iframe-editor.js +1 -1
  267. package/es5/plugins/iframe-editor/iframe-editor.min.js +1 -1
  268. package/es5/plugins/keyboard/keyboard.css +1 -1
  269. package/es5/plugins/keyboard/keyboard.js +1 -1
  270. package/es5/plugins/keyboard/keyboard.min.js +1 -1
  271. package/es5/plugins/mobile-view/mobile-view.js +1 -1
  272. package/es5/plugins/mobile-view/mobile-view.min.js +1 -1
  273. package/es5/plugins/page-break/page-break.js +1 -1
  274. package/es5/plugins/page-break/page-break.min.js +1 -1
  275. package/es5/plugins/paste-code/paste-code.css +1 -1
  276. package/es5/plugins/paste-code/paste-code.js +1 -1
  277. package/es5/plugins/paste-code/paste-code.min.js +1 -1
  278. package/es5/plugins/paste-from-word/paste-from-word.js +1 -1
  279. package/es5/plugins/paste-from-word/paste-from-word.min.js +1 -1
  280. package/es5/plugins/show-blocks/show-blocks.js +1 -1
  281. package/es5/plugins/show-blocks/show-blocks.min.js +1 -1
  282. package/es5/plugins/style/style.css +1 -1
  283. package/es5/plugins/style/style.js +1 -1
  284. package/es5/plugins/style/style.min.js +1 -1
  285. package/es5/plugins/templates/templates.css +1 -1
  286. package/es5/plugins/templates/templates.js +1 -1
  287. package/es5/plugins/templates/templates.min.js +1 -1
  288. package/es5/plugins/todo-list/todo-list.css +1 -1
  289. package/es5/plugins/todo-list/todo-list.js +1 -1
  290. package/es5/plugins/todo-list/todo-list.min.js +1 -1
  291. package/es5/plugins/translate/translate.css +1 -1
  292. package/es5/plugins/translate/translate.js +1 -1
  293. package/es5/plugins/translate/translate.min.js +1 -1
  294. package/es5/plugins/tune-block/tune-block.css +1 -1
  295. package/es5/plugins/tune-block/tune-block.js +1 -1
  296. package/es5/plugins/tune-block/tune-block.min.js +1 -1
  297. package/es5/polyfills.fat.min.js +1 -1
  298. package/es5/polyfills.js +1 -1
  299. package/es5/polyfills.min.js +1 -1
  300. package/package.json +1 -1
@@ -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.10.4
4
+ * Version: v4.11.1
5
5
  * Url: https://xdsoft.net/jodit/pro/
6
6
  * License(s): SEE LICENSE IN LICENSE.md
7
7
  */
@@ -1721,7 +1721,7 @@ __webpack_require__.r(__webpack_exports__);
1721
1721
  * ```
1722
1722
  * @packageDocumentation
1723
1723
  * @module constants
1724
- */ const APP_VERSION = "4.10.4";
1724
+ */ const APP_VERSION = "4.11.1";
1725
1725
  // prettier-ignore
1726
1726
  const ES = "es2021";
1727
1727
  const IS_ES_MODERN = true;
@@ -5775,17 +5775,54 @@ function normalizeCSS(s) {
5775
5775
  /**
5776
5776
  * Removes dangerous constructs from HTML
5777
5777
  */ function safeHTML(box, options) {
5778
+ var _a;
5778
5779
  if (!_dom_dom_js__WEBPACK_IMPORTED_MODULE_0__.Dom.isElement(box) && !_dom_dom_js__WEBPACK_IMPORTED_MODULE_0__.Dom.isFragment(box)) {
5779
5780
  return;
5780
5781
  }
5781
- if (options.removeOnError) {
5782
- sanitizeHTMLElement(box);
5782
+ const removeEvents = (_a = options.removeEventAttributes) !== null && _a !== void 0 ? _a : options.removeOnError;
5783
+ if (removeEvents) {
5784
+ removeAllEventAttributes(box);
5785
+ (0,_utils_index_js__WEBPACK_IMPORTED_MODULE_1__.$$)('*', box).forEach((elm)=>removeAllEventAttributes(elm));
5786
+ } else if (options.removeOnError) {
5787
+ sanitizeHTMLElement(box, options);
5783
5788
  (0,_utils_index_js__WEBPACK_IMPORTED_MODULE_1__.$$)('[onerror]', box).forEach((elm)=>sanitizeHTMLElement(elm, options));
5784
5789
  }
5785
5790
  if (options.safeJavaScriptLink) {
5786
- sanitizeHTMLElement(box);
5791
+ sanitizeHTMLElement(box, options);
5787
5792
  (0,_utils_index_js__WEBPACK_IMPORTED_MODULE_1__.$$)('a[href^="javascript"]', box).forEach((elm)=>sanitizeHTMLElement(elm, options));
5788
5793
  }
5794
+ if (options.safeLinksTarget) {
5795
+ (0,_utils_index_js__WEBPACK_IMPORTED_MODULE_1__.$$)('a[target="_blank"]', box).forEach((elm)=>{
5796
+ const rel = elm.getAttribute('rel') || '';
5797
+ const parts = rel.split(/\s+/).filter(Boolean);
5798
+ if (!parts.includes('noopener')) {
5799
+ parts.push('noopener');
5800
+ }
5801
+ if (!parts.includes('noreferrer')) {
5802
+ parts.push('noreferrer');
5803
+ }
5804
+ (0,_utils_index_js__WEBPACK_IMPORTED_MODULE_1__.attr)(elm, 'rel', parts.join(' '));
5805
+ });
5806
+ }
5807
+ }
5808
+ /**
5809
+ * Remove all on* event handler attributes from an element
5810
+ */ function removeAllEventAttributes(elm) {
5811
+ if (!_dom_dom_js__WEBPACK_IMPORTED_MODULE_0__.Dom.isElement(elm)) {
5812
+ return false;
5813
+ }
5814
+ let effected = false;
5815
+ const toRemove = [];
5816
+ for(let i = 0; i < elm.attributes.length; i++){
5817
+ if (elm.attributes[i].name.toLowerCase().startsWith('on')) {
5818
+ toRemove.push(elm.attributes[i].name);
5819
+ }
5820
+ }
5821
+ for (const name of toRemove){
5822
+ elm.removeAttribute(name);
5823
+ effected = true;
5824
+ }
5825
+ return effected;
5789
5826
  }
5790
5827
  function sanitizeHTMLElement(elm, { safeJavaScriptLink, removeOnError } = {
5791
5828
  safeJavaScriptLink: true,
@@ -31536,6 +31573,10 @@ _core_ui_icon_js__WEBPACK_IMPORTED_MODULE_4__.Icon.set('class-span', _class_span
31536
31573
  return false;
31537
31574
  }
31538
31575
  onSafeHTML(sandBox) {
31576
+ const sanitizer = this.j.o.cleanHTML.sanitizer;
31577
+ if (sanitizer) {
31578
+ sandBox.innerHTML = sanitizer(sandBox.innerHTML);
31579
+ }
31539
31580
  (0,_core_helpers_html_safe_html_js__WEBPACK_IMPORTED_MODULE_4__.safeHTML)(sandBox, this.j.o.cleanHTML);
31540
31581
  }
31541
31582
  /** @override */ beforeDestruct() {
@@ -31604,10 +31645,19 @@ _config_js__WEBPACK_IMPORTED_MODULE_1__.Config.prototype.cleanHTML = {
31604
31645
  b: 'strong'
31605
31646
  },
31606
31647
  allowTags: false,
31607
- denyTags: 'script',
31648
+ denyTags: 'script,iframe,object,embed',
31608
31649
  useIframeSandbox: false,
31609
31650
  removeOnError: true,
31651
+ removeEventAttributes: true,
31610
31652
  safeJavaScriptLink: true,
31653
+ safeLinksTarget: true,
31654
+ allowedStyles: false,
31655
+ sanitizer: false,
31656
+ sandboxIframesInContent: true,
31657
+ convertUnsafeEmbeds: [
31658
+ 'object',
31659
+ 'embed'
31660
+ ],
31611
31661
  disableCleanFilter: null
31612
31662
  };
31613
31663
  _config_js__WEBPACK_IMPORTED_MODULE_1__.Config.prototype.controls.eraser = {
@@ -31864,6 +31914,53 @@ _core_ui_icon_js__WEBPACK_IMPORTED_MODULE_0__.Icon.set('eraser', _eraser_svg_js_
31864
31914
  }
31865
31915
 
31866
31916
 
31917
+ /***/ }),
31918
+
31919
+ /***/ 1962:
31920
+ /***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) {
31921
+
31922
+ /* harmony export */ __webpack_require__.d(__webpack_exports__, {
31923
+ /* harmony export */ convertUnsafeEmbeds: function() { return /* binding */ convertUnsafeEmbeds; }
31924
+ /* harmony export */ });
31925
+ /* harmony import */ var _core_dom_dom_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(2748);
31926
+ /* harmony import */ var _core_helpers_utils_attr_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(29960);
31927
+ /*!
31928
+ * Jodit Editor (https://xdsoft.net/jodit/)
31929
+ * Released under MIT see LICENSE.txt in the project root for license information.
31930
+ * Copyright (c) 2013-2026 Valerii Chupurnov. All rights reserved. https://xdsoft.net
31931
+ */
31932
+
31933
+ /**
31934
+ * Convert `<object>` and `<embed>` elements to safer `<iframe>` elements.
31935
+ * @private
31936
+ */ function convertUnsafeEmbeds(jodit, nodeElm, hadEffect) {
31937
+ const opt = jodit.o.cleanHTML.convertUnsafeEmbeds;
31938
+ if (!opt || !_core_dom_dom_js__WEBPACK_IMPORTED_MODULE_0__.Dom.isElement(nodeElm)) {
31939
+ return hadEffect;
31940
+ }
31941
+ const tag = nodeElm.nodeName.toLowerCase();
31942
+ if (!opt.includes(tag)) {
31943
+ return hadEffect;
31944
+ }
31945
+ const elm = nodeElm;
31946
+ const src = (0,_core_helpers_utils_attr_js__WEBPACK_IMPORTED_MODULE_1__.attr)(elm, 'data') || (0,_core_helpers_utils_attr_js__WEBPACK_IMPORTED_MODULE_1__.attr)(elm, 'src') || (0,_core_helpers_utils_attr_js__WEBPACK_IMPORTED_MODULE_1__.attr)(elm, 'movie') || '';
31947
+ if (!src) {
31948
+ _core_dom_dom_js__WEBPACK_IMPORTED_MODULE_0__.Dom.safeRemove(elm);
31949
+ return true;
31950
+ }
31951
+ const iframe = jodit.createInside.element('iframe');
31952
+ (0,_core_helpers_utils_attr_js__WEBPACK_IMPORTED_MODULE_1__.attr)(iframe, {
31953
+ src,
31954
+ sandbox: '',
31955
+ frameborder: '0',
31956
+ width: (0,_core_helpers_utils_attr_js__WEBPACK_IMPORTED_MODULE_1__.attr)(elm, 'width'),
31957
+ height: (0,_core_helpers_utils_attr_js__WEBPACK_IMPORTED_MODULE_1__.attr)(elm, 'height')
31958
+ });
31959
+ _core_dom_dom_js__WEBPACK_IMPORTED_MODULE_0__.Dom.replace(elm, iframe, undefined, false, true);
31960
+ return true;
31961
+ }
31962
+
31963
+
31867
31964
  /***/ }),
31868
31965
 
31869
31966
  /***/ 39433:
@@ -31907,20 +32004,28 @@ const TABLE_CONTAINER_TAGS = new Set([
31907
32004
  __webpack_require__.r(__webpack_exports__);
31908
32005
  /* harmony export */ __webpack_require__.d(__webpack_exports__, {
31909
32006
  /* harmony export */ allowAttributes: function() { return /* reexport safe */ _allow_attributes_js__WEBPACK_IMPORTED_MODULE_0__.allowAttributes; },
31910
- /* harmony export */ fillEmptyParagraph: function() { return /* reexport safe */ _fill_empty_paragraph_js__WEBPACK_IMPORTED_MODULE_1__.fillEmptyParagraph; },
31911
- /* harmony export */ removeEmptyTextNode: function() { return /* reexport safe */ _remove_empty_text_node_js__WEBPACK_IMPORTED_MODULE_2__.removeEmptyTextNode; },
31912
- /* harmony export */ removeInvTextNodes: function() { return /* reexport safe */ _remove_inv_text_nodes_js__WEBPACK_IMPORTED_MODULE_3__.removeInvTextNodes; },
31913
- /* harmony export */ replaceOldTags: function() { return /* reexport safe */ _replace_old_tags_js__WEBPACK_IMPORTED_MODULE_4__.replaceOldTags; },
31914
- /* harmony export */ sanitizeAttributes: function() { return /* reexport safe */ _sanitize_attributes_js__WEBPACK_IMPORTED_MODULE_5__.sanitizeAttributes; },
31915
- /* harmony export */ tryRemoveNode: function() { return /* reexport safe */ _try_remove_node_js__WEBPACK_IMPORTED_MODULE_6__.tryRemoveNode; }
32007
+ /* harmony export */ convertUnsafeEmbeds: function() { return /* reexport safe */ _convert_unsafe_embeds_js__WEBPACK_IMPORTED_MODULE_1__.convertUnsafeEmbeds; },
32008
+ /* harmony export */ fillEmptyParagraph: function() { return /* reexport safe */ _fill_empty_paragraph_js__WEBPACK_IMPORTED_MODULE_2__.fillEmptyParagraph; },
32009
+ /* harmony export */ removeEmptyTextNode: function() { return /* reexport safe */ _remove_empty_text_node_js__WEBPACK_IMPORTED_MODULE_3__.removeEmptyTextNode; },
32010
+ /* harmony export */ removeInvTextNodes: function() { return /* reexport safe */ _remove_inv_text_nodes_js__WEBPACK_IMPORTED_MODULE_4__.removeInvTextNodes; },
32011
+ /* harmony export */ replaceOldTags: function() { return /* reexport safe */ _replace_old_tags_js__WEBPACK_IMPORTED_MODULE_5__.replaceOldTags; },
32012
+ /* harmony export */ safeLinksTarget: function() { return /* reexport safe */ _safe_links_target_js__WEBPACK_IMPORTED_MODULE_6__.safeLinksTarget; },
32013
+ /* harmony export */ sandboxIframesInContent: function() { return /* reexport safe */ _sandbox_iframes_in_content_js__WEBPACK_IMPORTED_MODULE_7__.sandboxIframesInContent; },
32014
+ /* harmony export */ sanitizeAttributes: function() { return /* reexport safe */ _sanitize_attributes_js__WEBPACK_IMPORTED_MODULE_8__.sanitizeAttributes; },
32015
+ /* harmony export */ sanitizeStyles: function() { return /* reexport safe */ _sanitize_styles_js__WEBPACK_IMPORTED_MODULE_9__.sanitizeStyles; },
32016
+ /* harmony export */ tryRemoveNode: function() { return /* reexport safe */ _try_remove_node_js__WEBPACK_IMPORTED_MODULE_10__.tryRemoveNode; }
31916
32017
  /* harmony export */ });
31917
32018
  /* harmony import */ var _allow_attributes_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(82558);
31918
- /* harmony import */ var _fill_empty_paragraph_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(39433);
31919
- /* harmony import */ var _remove_empty_text_node_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(53392);
31920
- /* harmony import */ var _remove_inv_text_nodes_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(25813);
31921
- /* harmony import */ var _replace_old_tags_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(80973);
31922
- /* harmony import */ var _sanitize_attributes_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(384);
31923
- /* harmony import */ var _try_remove_node_js__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(28800);
32019
+ /* harmony import */ var _convert_unsafe_embeds_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(1962);
32020
+ /* harmony import */ var _fill_empty_paragraph_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(39433);
32021
+ /* harmony import */ var _remove_empty_text_node_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(53392);
32022
+ /* harmony import */ var _remove_inv_text_nodes_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(25813);
32023
+ /* harmony import */ var _replace_old_tags_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(80973);
32024
+ /* harmony import */ var _safe_links_target_js__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(95614);
32025
+ /* harmony import */ var _sandbox_iframes_in_content_js__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(85978);
32026
+ /* harmony import */ var _sanitize_attributes_js__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(384);
32027
+ /* harmony import */ var _sanitize_styles_js__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(15583);
32028
+ /* harmony import */ var _try_remove_node_js__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(28800);
31924
32029
  /*!
31925
32030
  * Jodit Editor (https://xdsoft.net/jodit/)
31926
32031
  * Released under MIT see LICENSE.txt in the project root for license information.
@@ -31938,6 +32043,10 @@ __webpack_require__.r(__webpack_exports__);
31938
32043
 
31939
32044
 
31940
32045
 
32046
+
32047
+
32048
+
32049
+
31941
32050
  /***/ }),
31942
32051
 
31943
32052
  /***/ 53392:
@@ -32045,6 +32154,84 @@ __webpack_require__.r(__webpack_exports__);
32045
32154
  }
32046
32155
 
32047
32156
 
32157
+ /***/ }),
32158
+
32159
+ /***/ 95614:
32160
+ /***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) {
32161
+
32162
+ /* harmony export */ __webpack_require__.d(__webpack_exports__, {
32163
+ /* harmony export */ safeLinksTarget: function() { return /* binding */ safeLinksTarget; }
32164
+ /* harmony export */ });
32165
+ /* harmony import */ var _core_dom_dom_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(2748);
32166
+ /* harmony import */ var _core_helpers_utils_attr_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(29960);
32167
+ /*!
32168
+ * Jodit Editor (https://xdsoft.net/jodit/)
32169
+ * Released under MIT see LICENSE.txt in the project root for license information.
32170
+ * Copyright (c) 2013-2026 Valerii Chupurnov. All rights reserved. https://xdsoft.net
32171
+ */
32172
+
32173
+ /**
32174
+ * Automatically add `rel="noopener noreferrer"` to links with `target="_blank"`
32175
+ * @private
32176
+ */ function safeLinksTarget(jodit, nodeElm, hadEffect) {
32177
+ if (!jodit.o.cleanHTML.safeLinksTarget || !_core_dom_dom_js__WEBPACK_IMPORTED_MODULE_0__.Dom.isElement(nodeElm) || nodeElm.nodeName !== 'A') {
32178
+ return hadEffect;
32179
+ }
32180
+ const elm = nodeElm;
32181
+ if ((0,_core_helpers_utils_attr_js__WEBPACK_IMPORTED_MODULE_1__.attr)(elm, 'target') !== '_blank') {
32182
+ return hadEffect;
32183
+ }
32184
+ const rel = (0,_core_helpers_utils_attr_js__WEBPACK_IMPORTED_MODULE_1__.attr)(elm, 'rel') || '';
32185
+ const parts = rel.split(/\s+/).filter(Boolean);
32186
+ let changed = false;
32187
+ if (!parts.includes('noopener')) {
32188
+ parts.push('noopener');
32189
+ changed = true;
32190
+ }
32191
+ if (!parts.includes('noreferrer')) {
32192
+ parts.push('noreferrer');
32193
+ changed = true;
32194
+ }
32195
+ if (changed) {
32196
+ (0,_core_helpers_utils_attr_js__WEBPACK_IMPORTED_MODULE_1__.attr)(elm, 'rel', parts.join(' '));
32197
+ return true;
32198
+ }
32199
+ return hadEffect;
32200
+ }
32201
+
32202
+
32203
+ /***/ }),
32204
+
32205
+ /***/ 85978:
32206
+ /***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) {
32207
+
32208
+ /* harmony export */ __webpack_require__.d(__webpack_exports__, {
32209
+ /* harmony export */ sandboxIframesInContent: function() { return /* binding */ sandboxIframesInContent; }
32210
+ /* harmony export */ });
32211
+ /* harmony import */ var _core_dom_dom_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(2748);
32212
+ /* harmony import */ var _core_helpers_utils_attr_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(29960);
32213
+ /*!
32214
+ * Jodit Editor (https://xdsoft.net/jodit/)
32215
+ * Released under MIT see LICENSE.txt in the project root for license information.
32216
+ * Copyright (c) 2013-2026 Valerii Chupurnov. All rights reserved. https://xdsoft.net
32217
+ */
32218
+
32219
+ /**
32220
+ * Add `sandbox=""` attribute to all `<iframe>` elements in the editor content
32221
+ * @private
32222
+ */ function sandboxIframesInContent(jodit, nodeElm, hadEffect) {
32223
+ if (!jodit.o.cleanHTML.sandboxIframesInContent || !_core_dom_dom_js__WEBPACK_IMPORTED_MODULE_0__.Dom.isElement(nodeElm) || nodeElm.nodeName !== 'IFRAME') {
32224
+ return hadEffect;
32225
+ }
32226
+ const elm = nodeElm;
32227
+ if (!elm.hasAttribute('sandbox')) {
32228
+ (0,_core_helpers_utils_attr_js__WEBPACK_IMPORTED_MODULE_1__.attr)(elm, 'sandbox', '');
32229
+ return true;
32230
+ }
32231
+ return hadEffect;
32232
+ }
32233
+
32234
+
32048
32235
  /***/ }),
32049
32236
 
32050
32237
  /***/ 384:
@@ -32064,9 +32251,15 @@ __webpack_require__.r(__webpack_exports__);
32064
32251
  /**
32065
32252
  * @private
32066
32253
  */ function sanitizeAttributes(jodit, nodeElm, hadEffect) {
32067
- if (_core_dom_dom_js__WEBPACK_IMPORTED_MODULE_0__.Dom.isElement(nodeElm) && (0,_core_helpers_index_js__WEBPACK_IMPORTED_MODULE_1__.sanitizeHTMLElement)(nodeElm, {
32068
- safeJavaScriptLink: jodit.options.cleanHTML.safeJavaScriptLink,
32069
- removeOnError: jodit.options.cleanHTML.removeOnError
32254
+ if (!_core_dom_dom_js__WEBPACK_IMPORTED_MODULE_0__.Dom.isElement(nodeElm)) {
32255
+ return hadEffect;
32256
+ }
32257
+ const opts = jodit.options.cleanHTML;
32258
+ if ((0,_core_helpers_index_js__WEBPACK_IMPORTED_MODULE_1__.sanitizeHTMLElement)(nodeElm, {
32259
+ safeJavaScriptLink: opts.safeJavaScriptLink,
32260
+ removeOnError: opts.removeOnError,
32261
+ removeEventAttributes: opts.removeEventAttributes,
32262
+ safeLinksTarget: opts.safeLinksTarget
32070
32263
  })) {
32071
32264
  return true;
32072
32265
  }
@@ -32074,6 +32267,81 @@ __webpack_require__.r(__webpack_exports__);
32074
32267
  }
32075
32268
 
32076
32269
 
32270
+ /***/ }),
32271
+
32272
+ /***/ 15583:
32273
+ /***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) {
32274
+
32275
+ /* harmony export */ __webpack_require__.d(__webpack_exports__, {
32276
+ /* harmony export */ sanitizeStyles: function() { return /* binding */ sanitizeStyles; }
32277
+ /* harmony export */ });
32278
+ /* harmony import */ var _core_dom_dom_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(2748);
32279
+ /* harmony import */ var _core_helpers_utils_attr_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(29960);
32280
+ /*!
32281
+ * Jodit Editor (https://xdsoft.net/jodit/)
32282
+ * Released under MIT see LICENSE.txt in the project root for license information.
32283
+ * Copyright (c) 2013-2026 Valerii Chupurnov. All rights reserved. https://xdsoft.net
32284
+ */
32285
+
32286
+ /**
32287
+ * Filter CSS properties in style attributes based on allowedStyles whitelist
32288
+ * @private
32289
+ */ function sanitizeStyles(jodit, nodeElm, hadEffect) {
32290
+ const allowedStyles = jodit.o.cleanHTML.allowedStyles;
32291
+ if (!allowedStyles || !_core_dom_dom_js__WEBPACK_IMPORTED_MODULE_0__.Dom.isElement(nodeElm)) {
32292
+ return hadEffect;
32293
+ }
32294
+ const elm = nodeElm;
32295
+ const style = (0,_core_helpers_utils_attr_js__WEBPACK_IMPORTED_MODULE_1__.attr)(elm, 'style');
32296
+ if (!style) {
32297
+ return hadEffect;
32298
+ }
32299
+ const tagName = nodeElm.nodeName.toLowerCase();
32300
+ const allowed = getAllowedPropsForTag(tagName, allowedStyles);
32301
+ if (!allowed) {
32302
+ return hadEffect;
32303
+ }
32304
+ const filtered = filterStyleProperties(style, allowed);
32305
+ if (filtered !== style) {
32306
+ (0,_core_helpers_utils_attr_js__WEBPACK_IMPORTED_MODULE_1__.attr)(elm, 'style', filtered || null);
32307
+ return true;
32308
+ }
32309
+ return hadEffect;
32310
+ }
32311
+ function getAllowedPropsForTag(tagName, allowedStyles) {
32312
+ const tagSpecific = allowedStyles[tagName];
32313
+ const global = allowedStyles['*'];
32314
+ if (!tagSpecific && !global) {
32315
+ return null;
32316
+ }
32317
+ const set = new Set();
32318
+ if (global) {
32319
+ for (const prop of global){
32320
+ set.add(prop.toLowerCase());
32321
+ }
32322
+ }
32323
+ if (tagSpecific) {
32324
+ for (const prop of tagSpecific){
32325
+ set.add(prop.toLowerCase());
32326
+ }
32327
+ }
32328
+ return set;
32329
+ }
32330
+ function filterStyleProperties(style, allowed) {
32331
+ return style.split(';').map((s)=>s.trim()).filter((s)=>{
32332
+ if (!s) {
32333
+ return false;
32334
+ }
32335
+ const colonIdx = s.indexOf(':');
32336
+ if (colonIdx === -1) {
32337
+ return false;
32338
+ }
32339
+ const prop = s.substring(0, colonIdx).trim().toLowerCase();
32340
+ return allowed.has(prop);
32341
+ }).join('; ').replace(/;\s*$/, '');
32342
+ }
32343
+
32344
+
32077
32345
  /***/ }),
32078
32346
 
32079
32347
  /***/ 28800:
@@ -33194,7 +33462,7 @@ _core_global_js__WEBPACK_IMPORTED_MODULE_2__.pluginSystem.add('dragAndDropElemen
33194
33462
  'src'
33195
33463
  ];
33196
33464
  fragment = this.j.createInside.element(tagName);
33197
- fragment.setAttribute(field, (0,_core_helpers_index_js__WEBPACK_IMPORTED_MODULE_4__.attr)(this.draggable, 'data-src') || (0,_core_helpers_index_js__WEBPACK_IMPORTED_MODULE_4__.attr)(this.draggable, 'src') || '');
33465
+ (0,_core_helpers_index_js__WEBPACK_IMPORTED_MODULE_4__.attr)(fragment, field, (0,_core_helpers_index_js__WEBPACK_IMPORTED_MODULE_4__.attr)(this.draggable, 'data-src') || (0,_core_helpers_index_js__WEBPACK_IMPORTED_MODULE_4__.attr)(this.draggable, 'src') || '');
33198
33466
  if (tagName === 'a') {
33199
33467
  fragment.textContent = (0,_core_helpers_index_js__WEBPACK_IMPORTED_MODULE_4__.attr)(fragment, field) || '';
33200
33468
  }
@@ -33791,13 +34059,15 @@ function brBefore(start) {
33791
34059
  /* harmony export */ insertParagraph: function() { return /* binding */ insertParagraph; }
33792
34060
  /* harmony export */ });
33793
34061
  /* harmony import */ var _core_dom_dom_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(2748);
33794
- /* harmony import */ var _core_helpers_utils_scroll_into_view_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(26395);
34062
+ /* harmony import */ var _core_helpers_utils_attr_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(29960);
34063
+ /* harmony import */ var _core_helpers_utils_scroll_into_view_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(26395);
33795
34064
  /*!
33796
34065
  * Jodit Editor (https://xdsoft.net/jodit/)
33797
34066
  * Released under MIT see LICENSE.txt in the project root for license information.
33798
34067
  * Copyright (c) 2013-2026 Valerii Chupurnov. All rights reserved. https://xdsoft.net
33799
34068
  */
33800
34069
 
34070
+
33801
34071
  /**
33802
34072
  * Insert default paragraph
33803
34073
  * @private
@@ -33807,11 +34077,11 @@ function brBefore(start) {
33807
34077
  p.appendChild(br);
33808
34078
  }
33809
34079
  if (style && style.cssText) {
33810
- p.setAttribute('style', style.cssText);
34080
+ (0,_core_helpers_utils_attr_js__WEBPACK_IMPORTED_MODULE_1__.attr)(p, 'style', style.cssText);
33811
34081
  }
33812
34082
  _core_dom_dom_js__WEBPACK_IMPORTED_MODULE_0__.Dom.after(fake, p);
33813
34083
  _core_dom_dom_js__WEBPACK_IMPORTED_MODULE_0__.Dom.before(isBR ? p : br, fake);
33814
- (0,_core_helpers_utils_scroll_into_view_js__WEBPACK_IMPORTED_MODULE_1__.scrollIntoViewIfNeeded)(p, editor.editor, editor.ed);
34084
+ (0,_core_helpers_utils_scroll_into_view_js__WEBPACK_IMPORTED_MODULE_2__.scrollIntoViewIfNeeded)(p, editor.editor, editor.ed);
33815
34085
  return p;
33816
34086
  }
33817
34087
 
@@ -33988,8 +34258,9 @@ function brBefore(start) {
33988
34258
  /* unused harmony export file */
33989
34259
  /* harmony import */ var _core_dom_dom_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(2748);
33990
34260
  /* harmony import */ var _core_global_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(580);
33991
- /* harmony import */ var _config_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(6441);
33992
- /* harmony import */ var _modules_widget_index_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(92762);
34261
+ /* harmony import */ var _core_helpers_utils_attr_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(29960);
34262
+ /* harmony import */ var _config_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(6441);
34263
+ /* harmony import */ var _modules_widget_index_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(92762);
33993
34264
  /*!
33994
34265
  * Jodit Editor (https://xdsoft.net/jodit/)
33995
34266
  * Released under MIT see LICENSE.txt in the project root for license information.
@@ -33998,7 +34269,8 @@ function brBefore(start) {
33998
34269
 
33999
34270
 
34000
34271
 
34001
- _config_js__WEBPACK_IMPORTED_MODULE_2__.Config.prototype.controls.file = {
34272
+
34273
+ _config_js__WEBPACK_IMPORTED_MODULE_3__.Config.prototype.controls.file = {
34002
34274
  popup: (editor, current, close)=>{
34003
34275
  const insert = (url, title = '')=>{
34004
34276
  editor.s.insertNode(editor.createInside.fromHTML(`<a href="${url}" title="${title}">${title || url}</a>`));
@@ -34007,7 +34279,7 @@ _config_js__WEBPACK_IMPORTED_MODULE_2__.Config.prototype.controls.file = {
34007
34279
  if (current && (_core_dom_dom_js__WEBPACK_IMPORTED_MODULE_0__.Dom.isTag(current, 'a') || _core_dom_dom_js__WEBPACK_IMPORTED_MODULE_0__.Dom.closest(current, 'a', editor.editor))) {
34008
34280
  sourceAnchor = _core_dom_dom_js__WEBPACK_IMPORTED_MODULE_0__.Dom.isTag(current, 'a') ? current : _core_dom_dom_js__WEBPACK_IMPORTED_MODULE_0__.Dom.closest(current, 'a', editor.editor);
34009
34281
  }
34010
- return (0,_modules_widget_index_js__WEBPACK_IMPORTED_MODULE_3__.FileSelectorWidget)(editor, {
34282
+ return (0,_modules_widget_index_js__WEBPACK_IMPORTED_MODULE_4__.FileSelectorWidget)(editor, {
34011
34283
  filebrowser: (data)=>{
34012
34284
  data.files && data.files.forEach((file)=>insert(data.baseurl + file));
34013
34285
  close();
@@ -34015,8 +34287,8 @@ _config_js__WEBPACK_IMPORTED_MODULE_2__.Config.prototype.controls.file = {
34015
34287
  upload: true,
34016
34288
  url: (url, text)=>{
34017
34289
  if (sourceAnchor) {
34018
- sourceAnchor.setAttribute('href', url);
34019
- sourceAnchor.setAttribute('title', text);
34290
+ (0,_core_helpers_utils_attr_js__WEBPACK_IMPORTED_MODULE_2__.attr)(sourceAnchor, 'href', url);
34291
+ (0,_core_helpers_utils_attr_js__WEBPACK_IMPORTED_MODULE_2__.attr)(sourceAnchor, 'title', text);
34020
34292
  } else {
34021
34293
  insert(url, text);
34022
34294
  }
@@ -34878,8 +35150,8 @@ _config_js__WEBPACK_IMPORTED_MODULE_0__.Config.prototype.iframeSandbox = null;
34878
35150
  if (opt.iframeCSSLinks) {
34879
35151
  opt.iframeCSSLinks.forEach((href)=>{
34880
35152
  const link = doc.createElement('link');
34881
- link.setAttribute('rel', 'stylesheet');
34882
- link.setAttribute('href', href);
35153
+ (0,_core_helpers_index_js__WEBPACK_IMPORTED_MODULE_2__.attr)(link, 'rel', 'stylesheet');
35154
+ (0,_core_helpers_index_js__WEBPACK_IMPORTED_MODULE_2__.attr)(link, 'href', href);
34883
35155
  doc.head && doc.head.appendChild(link);
34884
35156
  });
34885
35157
  }
@@ -34896,11 +35168,13 @@ _config_js__WEBPACK_IMPORTED_MODULE_0__.Config.prototype.iframeSandbox = null;
34896
35168
  iframe.style.display = 'block';
34897
35169
  iframe.src = 'about:blank';
34898
35170
  iframe.className = 'jodit-wysiwyg_iframe';
34899
- iframe.setAttribute('allowtransparency', 'true');
34900
- iframe.setAttribute('tabindex', opt.tabIndex.toString());
34901
- iframe.setAttribute('frameborder', '0');
35171
+ (0,_core_helpers_index_js__WEBPACK_IMPORTED_MODULE_2__.attr)(iframe, {
35172
+ allowtransparency: 'true',
35173
+ tabindex: opt.tabIndex.toString(),
35174
+ frameborder: '0'
35175
+ });
34902
35176
  if (opt.iframeSandbox != null) {
34903
- iframe.setAttribute('sandbox', opt.iframeSandbox);
35177
+ (0,_core_helpers_index_js__WEBPACK_IMPORTED_MODULE_2__.attr)(iframe, 'sandbox', opt.iframeSandbox);
34904
35178
  }
34905
35179
  editor.workplace.appendChild(iframe);
34906
35180
  editor.iframe = iframe;
@@ -36567,6 +36841,10 @@ UIImagePositionTab = __decorate([
36567
36841
  }
36568
36842
  (0,_core_helpers_utils_attr_js__WEBPACK_IMPORTED_MODULE_1__.attr)(link, 'href', imageLink);
36569
36843
  (0,_core_helpers_utils_attr_js__WEBPACK_IMPORTED_MODULE_1__.attr)(link, 'target', imageLinkOpenInNewTab ? '_blank' : null);
36844
+ if (!imageLinkOpenInNewTab) {
36845
+ const relParts = ((0,_core_helpers_utils_attr_js__WEBPACK_IMPORTED_MODULE_1__.attr)(link, 'rel') || '').split(/\s+/).filter((p)=>p && p !== 'noopener' && p !== 'noreferrer');
36846
+ (0,_core_helpers_utils_attr_js__WEBPACK_IMPORTED_MODULE_1__.attr)(link, 'rel', relParts.length ? relParts.join(' ') : null);
36847
+ }
36570
36848
  } else {
36571
36849
  if (link && link.parentNode) {
36572
36850
  link.parentNode.replaceChild(image, link);
@@ -36671,10 +36949,11 @@ UIImagePositionTab = __decorate([
36671
36949
  /* harmony import */ var _core_dom_index_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(22732);
36672
36950
  /* harmony import */ var _core_global_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(580);
36673
36951
  /* harmony import */ var _core_helpers_index_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(21537);
36674
- /* harmony import */ var _core_ui_icon_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(12153);
36675
- /* harmony import */ var _config_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(6441);
36676
- /* harmony import */ var _modules_widget_index_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(92762);
36677
- /* harmony import */ var _image_svg_js__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(25179);
36952
+ /* harmony import */ var _core_helpers_utils_attr_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(29960);
36953
+ /* harmony import */ var _core_ui_icon_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(12153);
36954
+ /* harmony import */ var _config_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(6441);
36955
+ /* harmony import */ var _modules_widget_index_js__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(92762);
36956
+ /* harmony import */ var _image_svg_js__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(25179);
36678
36957
  /*!
36679
36958
  * Jodit Editor (https://xdsoft.net/jodit/)
36680
36959
  * Released under MIT see LICENSE.txt in the project root for license information.
@@ -36686,15 +36965,16 @@ UIImagePositionTab = __decorate([
36686
36965
 
36687
36966
 
36688
36967
 
36689
- _core_ui_icon_js__WEBPACK_IMPORTED_MODULE_3__.Icon.set('image', _image_svg_js__WEBPACK_IMPORTED_MODULE_6__["default"]);
36690
- _config_js__WEBPACK_IMPORTED_MODULE_4__.Config.prototype.controls.image = {
36968
+
36969
+ _core_ui_icon_js__WEBPACK_IMPORTED_MODULE_4__.Icon.set('image', _image_svg_js__WEBPACK_IMPORTED_MODULE_7__["default"]);
36970
+ _config_js__WEBPACK_IMPORTED_MODULE_5__.Config.prototype.controls.image = {
36691
36971
  popup: (editor, current, close)=>{
36692
36972
  let sourceImage = null;
36693
36973
  if (current && !_core_dom_index_js__WEBPACK_IMPORTED_MODULE_0__.Dom.isText(current) && _core_dom_index_js__WEBPACK_IMPORTED_MODULE_0__.Dom.isHTMLElement(current) && (_core_dom_index_js__WEBPACK_IMPORTED_MODULE_0__.Dom.isTag(current, 'img') || (0,_core_helpers_index_js__WEBPACK_IMPORTED_MODULE_2__.$$)('img', current).length)) {
36694
36974
  sourceImage = _core_dom_index_js__WEBPACK_IMPORTED_MODULE_0__.Dom.isTag(current, 'img') ? current : (0,_core_helpers_index_js__WEBPACK_IMPORTED_MODULE_2__.$$)('img', current)[0];
36695
36975
  }
36696
36976
  editor.s.save();
36697
- return (0,_modules_widget_index_js__WEBPACK_IMPORTED_MODULE_5__.FileSelectorWidget)(editor, {
36977
+ return (0,_modules_widget_index_js__WEBPACK_IMPORTED_MODULE_6__.FileSelectorWidget)(editor, {
36698
36978
  filebrowser: (data)=>{
36699
36979
  editor.s.restore();
36700
36980
  data.files && data.files.forEach((file)=>editor.s.insertImage(data.baseurl + file, null, editor.o.imageDefaultWidth));
@@ -36707,8 +36987,8 @@ _config_js__WEBPACK_IMPORTED_MODULE_4__.Config.prototype.controls.image = {
36707
36987
  url = '//' + url;
36708
36988
  }
36709
36989
  const image = sourceImage || editor.createInside.element('img');
36710
- image.setAttribute('src', url);
36711
- image.setAttribute('alt', text);
36990
+ (0,_core_helpers_utils_attr_js__WEBPACK_IMPORTED_MODULE_3__.attr)(image, 'src', url);
36991
+ (0,_core_helpers_utils_attr_js__WEBPACK_IMPORTED_MODULE_3__.attr)(image, 'alt', text);
36712
36992
  if (!sourceImage) {
36713
36993
  await editor.s.insertImage(image, null, editor.o.imageDefaultWidth);
36714
36994
  }
@@ -38344,7 +38624,7 @@ _config_js__WEBPACK_IMPORTED_MODULE_2__.Config.prototype.controls.link = {
38344
38624
  }
38345
38625
  if (jodit.s.isCollapsed()) {
38346
38626
  const a = jodit.createInside.element('a');
38347
- a.setAttribute('href', html);
38627
+ (0,_core_helpers_index_js__WEBPACK_IMPORTED_MODULE_3__.attr)(a, 'href', html);
38348
38628
  a.textContent = html;
38349
38629
  jodit.e.fire('applyLink', jodit, a, null);
38350
38630
  return a;
@@ -38404,7 +38684,7 @@ _config_js__WEBPACK_IMPORTED_MODULE_2__.Config.prototype.controls.link = {
38404
38684
  target_checkbox.checked = (0,_core_helpers_index_js__WEBPACK_IMPORTED_MODULE_3__.attr)(link, 'target') === '_blank';
38405
38685
  }
38406
38686
  if (noFollowCheckbox && nofollow_checkbox) {
38407
- nofollow_checkbox.checked = (0,_core_helpers_index_js__WEBPACK_IMPORTED_MODULE_3__.attr)(link, 'rel') === 'nofollow';
38687
+ nofollow_checkbox.checked = ((0,_core_helpers_index_js__WEBPACK_IMPORTED_MODULE_3__.attr)(link, 'rel') || '').split(/\s+/).includes('nofollow');
38408
38688
  }
38409
38689
  insert.textContent = i18n('Update');
38410
38690
  } else {
@@ -38470,7 +38750,14 @@ _config_js__WEBPACK_IMPORTED_MODULE_2__.Config.prototype.controls.link = {
38470
38750
  (0,_core_helpers_index_js__WEBPACK_IMPORTED_MODULE_3__.attr)(a, 'target', target_checkbox.checked ? '_blank' : null);
38471
38751
  }
38472
38752
  if (noFollowCheckbox && nofollow_checkbox) {
38473
- (0,_core_helpers_index_js__WEBPACK_IMPORTED_MODULE_3__.attr)(a, 'rel', nofollow_checkbox.checked ? 'nofollow' : null);
38753
+ const relParts = ((0,_core_helpers_index_js__WEBPACK_IMPORTED_MODULE_3__.attr)(a, 'rel') || '').split(/\s+/).filter(Boolean);
38754
+ const hasNofollow = relParts.includes('nofollow');
38755
+ if (nofollow_checkbox.checked && !hasNofollow) {
38756
+ relParts.push('nofollow');
38757
+ } else if (!nofollow_checkbox.checked && hasNofollow) {
38758
+ relParts.splice(relParts.indexOf('nofollow'), 1);
38759
+ }
38760
+ (0,_core_helpers_index_js__WEBPACK_IMPORTED_MODULE_3__.attr)(a, 'rel', relParts.length ? relParts.join(' ') : null);
38474
38761
  }
38475
38762
  jodit.e.fire('applyLink', jodit, a, form);
38476
38763
  });
@@ -41080,8 +41367,8 @@ const keyBInd = '__jodit-resizer_binded';
41080
41367
  this.j.e.off(element, 'mousedown.select touchstart.select').on(element, 'mousedown.select touchstart.select', ()=>{
41081
41368
  this.j.s.select(element);
41082
41369
  }).off(element, 'changesize').on(element, 'changesize', ()=>{
41083
- iframe.setAttribute('width', element.offsetWidth + 'px');
41084
- iframe.setAttribute('height', element.offsetHeight + 'px');
41370
+ (0,_core_helpers_index_js__WEBPACK_IMPORTED_MODULE_4__.attr)(iframe, 'width', element.offsetWidth + 'px');
41371
+ (0,_core_helpers_index_js__WEBPACK_IMPORTED_MODULE_4__.attr)(iframe, 'height', element.offsetHeight + 'px');
41085
41372
  });
41086
41373
  }
41087
41374
  this.j.e.on(element, 'dragstart', this.hide);
@@ -43130,8 +43417,9 @@ class AceEditor extends _sourceEditor_js__WEBPACK_IMPORTED_MODULE_2__.SourceEdit
43130
43417
  /* harmony export */ TextAreaEditor: function() { return /* binding */ TextAreaEditor; }
43131
43418
  /* harmony export */ });
43132
43419
  /* harmony import */ var _core_dom_dom_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(2748);
43133
- /* harmony import */ var _core_helpers_utils_css_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(41180);
43134
- /* harmony import */ var _sourceEditor_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(23370);
43420
+ /* harmony import */ var _core_helpers_utils_attr_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(29960);
43421
+ /* harmony import */ var _core_helpers_utils_css_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(41180);
43422
+ /* harmony import */ var _sourceEditor_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(23370);
43135
43423
  /*!
43136
43424
  * Jodit Editor (https://xdsoft.net/jodit/)
43137
43425
  * Released under MIT see LICENSE.txt in the project root for license information.
@@ -43139,7 +43427,8 @@ class AceEditor extends _sourceEditor_js__WEBPACK_IMPORTED_MODULE_2__.SourceEdit
43139
43427
  */
43140
43428
 
43141
43429
 
43142
- class TextAreaEditor extends _sourceEditor_js__WEBPACK_IMPORTED_MODULE_2__.SourceEditor {
43430
+
43431
+ class TextAreaEditor extends _sourceEditor_js__WEBPACK_IMPORTED_MODULE_3__.SourceEditor {
43143
43432
  init(editor) {
43144
43433
  this.instance = editor.c.element('textarea', {
43145
43434
  class: 'jodit-source__mirror',
@@ -43147,7 +43436,7 @@ class TextAreaEditor extends _sourceEditor_js__WEBPACK_IMPORTED_MODULE_2__.Sourc
43147
43436
  });
43148
43437
  this.container.appendChild(this.instance);
43149
43438
  editor.e.on(this.instance, 'mousedown keydown touchstart input', editor.async.debounce(this.toWYSIWYG, editor.defaultTimeout)).on('setMinHeight.source', (minHeightD)=>{
43150
- (0,_core_helpers_utils_css_js__WEBPACK_IMPORTED_MODULE_1__.css)(this.instance, 'minHeight', minHeightD);
43439
+ (0,_core_helpers_utils_css_js__WEBPACK_IMPORTED_MODULE_2__.css)(this.instance, 'minHeight', minHeightD);
43151
43440
  }).on(this.instance, 'change keydown mousedown touchstart input', this.autosize).on('afterSetMode.source', this.autosize).on(this.instance, 'mousedown focus', (e)=>{
43152
43441
  editor.e.fire(e.type, e);
43153
43442
  });
@@ -43191,14 +43480,10 @@ class TextAreaEditor extends _sourceEditor_js__WEBPACK_IMPORTED_MODULE_2__.Sourc
43191
43480
  this.instance.blur();
43192
43481
  }
43193
43482
  setPlaceHolder(title) {
43194
- this.instance.setAttribute('placeholder', title);
43483
+ (0,_core_helpers_utils_attr_js__WEBPACK_IMPORTED_MODULE_1__.attr)(this.instance, 'placeholder', title);
43195
43484
  }
43196
43485
  setReadOnly(isReadOnly) {
43197
- if (isReadOnly) {
43198
- this.instance.setAttribute('readonly', 'true');
43199
- } else {
43200
- this.instance.removeAttribute('readonly');
43201
- }
43486
+ (0,_core_helpers_utils_attr_js__WEBPACK_IMPORTED_MODULE_1__.attr)(this.instance, 'readonly', isReadOnly ? 'true' : null);
43202
43487
  }
43203
43488
  selectAll() {
43204
43489
  this.instance.select();