jodit-pro 4.10.4 → 4.11.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (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
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.10.4
4
+ * Version: v4.11.2
5
5
  * Url: https://xdsoft.net/jodit/pro/
6
6
  * License(s): SEE LICENSE IN LICENSE.md
7
7
  */
@@ -1772,7 +1772,7 @@ __webpack_require__.r(__webpack_exports__);
1772
1772
  * ```
1773
1773
  * @packageDocumentation
1774
1774
  * @module constants
1775
- */ const APP_VERSION = "4.10.4";
1775
+ */ const APP_VERSION = "4.11.2";
1776
1776
  // prettier-ignore
1777
1777
  const ES = "es2015";
1778
1778
  const IS_ES_MODERN = true;
@@ -5826,17 +5826,54 @@ function normalizeCSS(s) {
5826
5826
  /**
5827
5827
  * Removes dangerous constructs from HTML
5828
5828
  */ function safeHTML(box, options) {
5829
+ var _a;
5829
5830
  if (!_dom_dom_js__WEBPACK_IMPORTED_MODULE_0__.Dom.isElement(box) && !_dom_dom_js__WEBPACK_IMPORTED_MODULE_0__.Dom.isFragment(box)) {
5830
5831
  return;
5831
5832
  }
5832
- if (options.removeOnError) {
5833
- sanitizeHTMLElement(box);
5833
+ const removeEvents = (_a = options.removeEventAttributes) !== null && _a !== void 0 ? _a : options.removeOnError;
5834
+ if (removeEvents) {
5835
+ removeAllEventAttributes(box);
5836
+ (0,_utils_index_js__WEBPACK_IMPORTED_MODULE_1__.$$)('*', box).forEach((elm)=>removeAllEventAttributes(elm));
5837
+ } else if (options.removeOnError) {
5838
+ sanitizeHTMLElement(box, options);
5834
5839
  (0,_utils_index_js__WEBPACK_IMPORTED_MODULE_1__.$$)('[onerror]', box).forEach((elm)=>sanitizeHTMLElement(elm, options));
5835
5840
  }
5836
5841
  if (options.safeJavaScriptLink) {
5837
- sanitizeHTMLElement(box);
5842
+ sanitizeHTMLElement(box, options);
5838
5843
  (0,_utils_index_js__WEBPACK_IMPORTED_MODULE_1__.$$)('a[href^="javascript"]', box).forEach((elm)=>sanitizeHTMLElement(elm, options));
5839
5844
  }
5845
+ if (options.safeLinksTarget) {
5846
+ (0,_utils_index_js__WEBPACK_IMPORTED_MODULE_1__.$$)('a[target="_blank"]', box).forEach((elm)=>{
5847
+ const rel = elm.getAttribute('rel') || '';
5848
+ const parts = rel.split(/\s+/).filter(Boolean);
5849
+ if (!parts.includes('noopener')) {
5850
+ parts.push('noopener');
5851
+ }
5852
+ if (!parts.includes('noreferrer')) {
5853
+ parts.push('noreferrer');
5854
+ }
5855
+ (0,_utils_index_js__WEBPACK_IMPORTED_MODULE_1__.attr)(elm, 'rel', parts.join(' '));
5856
+ });
5857
+ }
5858
+ }
5859
+ /**
5860
+ * Remove all on* event handler attributes from an element
5861
+ */ function removeAllEventAttributes(elm) {
5862
+ if (!_dom_dom_js__WEBPACK_IMPORTED_MODULE_0__.Dom.isElement(elm)) {
5863
+ return false;
5864
+ }
5865
+ let effected = false;
5866
+ const toRemove = [];
5867
+ for(let i = 0; i < elm.attributes.length; i++){
5868
+ if (elm.attributes[i].name.toLowerCase().startsWith('on')) {
5869
+ toRemove.push(elm.attributes[i].name);
5870
+ }
5871
+ }
5872
+ for (const name of toRemove){
5873
+ elm.removeAttribute(name);
5874
+ effected = true;
5875
+ }
5876
+ return effected;
5840
5877
  }
5841
5878
  function sanitizeHTMLElement(elm, { safeJavaScriptLink, removeOnError } = {
5842
5879
  safeJavaScriptLink: true,
@@ -32577,6 +32614,10 @@ _core_ui_icon_js__WEBPACK_IMPORTED_MODULE_4__.Icon.set('class-span', _class_span
32577
32614
  return false;
32578
32615
  }
32579
32616
  onSafeHTML(sandBox) {
32617
+ const sanitizer = this.j.o.cleanHTML.sanitizer;
32618
+ if (sanitizer) {
32619
+ sandBox.innerHTML = sanitizer(sandBox.innerHTML);
32620
+ }
32580
32621
  (0,_core_helpers_html_safe_html_js__WEBPACK_IMPORTED_MODULE_4__.safeHTML)(sandBox, this.j.o.cleanHTML);
32581
32622
  }
32582
32623
  /** @override */ beforeDestruct() {
@@ -32645,10 +32686,19 @@ _config_js__WEBPACK_IMPORTED_MODULE_1__.Config.prototype.cleanHTML = {
32645
32686
  b: 'strong'
32646
32687
  },
32647
32688
  allowTags: false,
32648
- denyTags: 'script',
32689
+ denyTags: 'script,iframe,object,embed',
32649
32690
  useIframeSandbox: false,
32650
32691
  removeOnError: true,
32692
+ removeEventAttributes: true,
32651
32693
  safeJavaScriptLink: true,
32694
+ safeLinksTarget: true,
32695
+ allowedStyles: false,
32696
+ sanitizer: false,
32697
+ sandboxIframesInContent: true,
32698
+ convertUnsafeEmbeds: [
32699
+ 'object',
32700
+ 'embed'
32701
+ ],
32652
32702
  disableCleanFilter: null
32653
32703
  };
32654
32704
  _config_js__WEBPACK_IMPORTED_MODULE_1__.Config.prototype.controls.eraser = {
@@ -32905,6 +32955,53 @@ _core_ui_icon_js__WEBPACK_IMPORTED_MODULE_0__.Icon.set('eraser', _eraser_svg_js_
32905
32955
  }
32906
32956
 
32907
32957
 
32958
+ /***/ }),
32959
+
32960
+ /***/ 1962:
32961
+ /***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) {
32962
+
32963
+ /* harmony export */ __webpack_require__.d(__webpack_exports__, {
32964
+ /* harmony export */ convertUnsafeEmbeds: function() { return /* binding */ convertUnsafeEmbeds; }
32965
+ /* harmony export */ });
32966
+ /* harmony import */ var _core_dom_dom_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(2748);
32967
+ /* harmony import */ var _core_helpers_utils_attr_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(29960);
32968
+ /*!
32969
+ * Jodit Editor (https://xdsoft.net/jodit/)
32970
+ * Released under MIT see LICENSE.txt in the project root for license information.
32971
+ * Copyright (c) 2013-2026 Valerii Chupurnov. All rights reserved. https://xdsoft.net
32972
+ */
32973
+
32974
+ /**
32975
+ * Convert `<object>` and `<embed>` elements to safer `<iframe>` elements.
32976
+ * @private
32977
+ */ function convertUnsafeEmbeds(jodit, nodeElm, hadEffect) {
32978
+ const opt = jodit.o.cleanHTML.convertUnsafeEmbeds;
32979
+ if (!opt || !_core_dom_dom_js__WEBPACK_IMPORTED_MODULE_0__.Dom.isElement(nodeElm)) {
32980
+ return hadEffect;
32981
+ }
32982
+ const tag = nodeElm.nodeName.toLowerCase();
32983
+ if (!opt.includes(tag)) {
32984
+ return hadEffect;
32985
+ }
32986
+ const elm = nodeElm;
32987
+ 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') || '';
32988
+ if (!src) {
32989
+ _core_dom_dom_js__WEBPACK_IMPORTED_MODULE_0__.Dom.safeRemove(elm);
32990
+ return true;
32991
+ }
32992
+ const iframe = jodit.createInside.element('iframe');
32993
+ (0,_core_helpers_utils_attr_js__WEBPACK_IMPORTED_MODULE_1__.attr)(iframe, {
32994
+ src,
32995
+ sandbox: '',
32996
+ frameborder: '0',
32997
+ width: (0,_core_helpers_utils_attr_js__WEBPACK_IMPORTED_MODULE_1__.attr)(elm, 'width'),
32998
+ height: (0,_core_helpers_utils_attr_js__WEBPACK_IMPORTED_MODULE_1__.attr)(elm, 'height')
32999
+ });
33000
+ _core_dom_dom_js__WEBPACK_IMPORTED_MODULE_0__.Dom.replace(elm, iframe, undefined, false, true);
33001
+ return true;
33002
+ }
33003
+
33004
+
32908
33005
  /***/ }),
32909
33006
 
32910
33007
  /***/ 39433:
@@ -32948,20 +33045,28 @@ const TABLE_CONTAINER_TAGS = new Set([
32948
33045
  __webpack_require__.r(__webpack_exports__);
32949
33046
  /* harmony export */ __webpack_require__.d(__webpack_exports__, {
32950
33047
  /* harmony export */ allowAttributes: function() { return /* reexport safe */ _allow_attributes_js__WEBPACK_IMPORTED_MODULE_0__.allowAttributes; },
32951
- /* harmony export */ fillEmptyParagraph: function() { return /* reexport safe */ _fill_empty_paragraph_js__WEBPACK_IMPORTED_MODULE_1__.fillEmptyParagraph; },
32952
- /* harmony export */ removeEmptyTextNode: function() { return /* reexport safe */ _remove_empty_text_node_js__WEBPACK_IMPORTED_MODULE_2__.removeEmptyTextNode; },
32953
- /* harmony export */ removeInvTextNodes: function() { return /* reexport safe */ _remove_inv_text_nodes_js__WEBPACK_IMPORTED_MODULE_3__.removeInvTextNodes; },
32954
- /* harmony export */ replaceOldTags: function() { return /* reexport safe */ _replace_old_tags_js__WEBPACK_IMPORTED_MODULE_4__.replaceOldTags; },
32955
- /* harmony export */ sanitizeAttributes: function() { return /* reexport safe */ _sanitize_attributes_js__WEBPACK_IMPORTED_MODULE_5__.sanitizeAttributes; },
32956
- /* harmony export */ tryRemoveNode: function() { return /* reexport safe */ _try_remove_node_js__WEBPACK_IMPORTED_MODULE_6__.tryRemoveNode; }
33048
+ /* harmony export */ convertUnsafeEmbeds: function() { return /* reexport safe */ _convert_unsafe_embeds_js__WEBPACK_IMPORTED_MODULE_1__.convertUnsafeEmbeds; },
33049
+ /* harmony export */ fillEmptyParagraph: function() { return /* reexport safe */ _fill_empty_paragraph_js__WEBPACK_IMPORTED_MODULE_2__.fillEmptyParagraph; },
33050
+ /* harmony export */ removeEmptyTextNode: function() { return /* reexport safe */ _remove_empty_text_node_js__WEBPACK_IMPORTED_MODULE_3__.removeEmptyTextNode; },
33051
+ /* harmony export */ removeInvTextNodes: function() { return /* reexport safe */ _remove_inv_text_nodes_js__WEBPACK_IMPORTED_MODULE_4__.removeInvTextNodes; },
33052
+ /* harmony export */ replaceOldTags: function() { return /* reexport safe */ _replace_old_tags_js__WEBPACK_IMPORTED_MODULE_5__.replaceOldTags; },
33053
+ /* harmony export */ safeLinksTarget: function() { return /* reexport safe */ _safe_links_target_js__WEBPACK_IMPORTED_MODULE_6__.safeLinksTarget; },
33054
+ /* harmony export */ sandboxIframesInContent: function() { return /* reexport safe */ _sandbox_iframes_in_content_js__WEBPACK_IMPORTED_MODULE_7__.sandboxIframesInContent; },
33055
+ /* harmony export */ sanitizeAttributes: function() { return /* reexport safe */ _sanitize_attributes_js__WEBPACK_IMPORTED_MODULE_8__.sanitizeAttributes; },
33056
+ /* harmony export */ sanitizeStyles: function() { return /* reexport safe */ _sanitize_styles_js__WEBPACK_IMPORTED_MODULE_9__.sanitizeStyles; },
33057
+ /* harmony export */ tryRemoveNode: function() { return /* reexport safe */ _try_remove_node_js__WEBPACK_IMPORTED_MODULE_10__.tryRemoveNode; }
32957
33058
  /* harmony export */ });
32958
33059
  /* harmony import */ var _allow_attributes_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(82558);
32959
- /* harmony import */ var _fill_empty_paragraph_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(39433);
32960
- /* harmony import */ var _remove_empty_text_node_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(53392);
32961
- /* harmony import */ var _remove_inv_text_nodes_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(25813);
32962
- /* harmony import */ var _replace_old_tags_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(80973);
32963
- /* harmony import */ var _sanitize_attributes_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(384);
32964
- /* harmony import */ var _try_remove_node_js__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(28800);
33060
+ /* harmony import */ var _convert_unsafe_embeds_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(1962);
33061
+ /* harmony import */ var _fill_empty_paragraph_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(39433);
33062
+ /* harmony import */ var _remove_empty_text_node_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(53392);
33063
+ /* harmony import */ var _remove_inv_text_nodes_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(25813);
33064
+ /* harmony import */ var _replace_old_tags_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(80973);
33065
+ /* harmony import */ var _safe_links_target_js__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(95614);
33066
+ /* harmony import */ var _sandbox_iframes_in_content_js__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(85978);
33067
+ /* harmony import */ var _sanitize_attributes_js__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(384);
33068
+ /* harmony import */ var _sanitize_styles_js__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(15583);
33069
+ /* harmony import */ var _try_remove_node_js__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(28800);
32965
33070
  /*!
32966
33071
  * Jodit Editor (https://xdsoft.net/jodit/)
32967
33072
  * Released under MIT see LICENSE.txt in the project root for license information.
@@ -32979,6 +33084,10 @@ __webpack_require__.r(__webpack_exports__);
32979
33084
 
32980
33085
 
32981
33086
 
33087
+
33088
+
33089
+
33090
+
32982
33091
  /***/ }),
32983
33092
 
32984
33093
  /***/ 53392:
@@ -33086,6 +33195,84 @@ __webpack_require__.r(__webpack_exports__);
33086
33195
  }
33087
33196
 
33088
33197
 
33198
+ /***/ }),
33199
+
33200
+ /***/ 95614:
33201
+ /***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) {
33202
+
33203
+ /* harmony export */ __webpack_require__.d(__webpack_exports__, {
33204
+ /* harmony export */ safeLinksTarget: function() { return /* binding */ safeLinksTarget; }
33205
+ /* harmony export */ });
33206
+ /* harmony import */ var _core_dom_dom_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(2748);
33207
+ /* harmony import */ var _core_helpers_utils_attr_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(29960);
33208
+ /*!
33209
+ * Jodit Editor (https://xdsoft.net/jodit/)
33210
+ * Released under MIT see LICENSE.txt in the project root for license information.
33211
+ * Copyright (c) 2013-2026 Valerii Chupurnov. All rights reserved. https://xdsoft.net
33212
+ */
33213
+
33214
+ /**
33215
+ * Automatically add `rel="noopener noreferrer"` to links with `target="_blank"`
33216
+ * @private
33217
+ */ function safeLinksTarget(jodit, nodeElm, hadEffect) {
33218
+ if (!jodit.o.cleanHTML.safeLinksTarget || !_core_dom_dom_js__WEBPACK_IMPORTED_MODULE_0__.Dom.isElement(nodeElm) || nodeElm.nodeName !== 'A') {
33219
+ return hadEffect;
33220
+ }
33221
+ const elm = nodeElm;
33222
+ if ((0,_core_helpers_utils_attr_js__WEBPACK_IMPORTED_MODULE_1__.attr)(elm, 'target') !== '_blank') {
33223
+ return hadEffect;
33224
+ }
33225
+ const rel = (0,_core_helpers_utils_attr_js__WEBPACK_IMPORTED_MODULE_1__.attr)(elm, 'rel') || '';
33226
+ const parts = rel.split(/\s+/).filter(Boolean);
33227
+ let changed = false;
33228
+ if (!parts.includes('noopener')) {
33229
+ parts.push('noopener');
33230
+ changed = true;
33231
+ }
33232
+ if (!parts.includes('noreferrer')) {
33233
+ parts.push('noreferrer');
33234
+ changed = true;
33235
+ }
33236
+ if (changed) {
33237
+ (0,_core_helpers_utils_attr_js__WEBPACK_IMPORTED_MODULE_1__.attr)(elm, 'rel', parts.join(' '));
33238
+ return true;
33239
+ }
33240
+ return hadEffect;
33241
+ }
33242
+
33243
+
33244
+ /***/ }),
33245
+
33246
+ /***/ 85978:
33247
+ /***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) {
33248
+
33249
+ /* harmony export */ __webpack_require__.d(__webpack_exports__, {
33250
+ /* harmony export */ sandboxIframesInContent: function() { return /* binding */ sandboxIframesInContent; }
33251
+ /* harmony export */ });
33252
+ /* harmony import */ var _core_dom_dom_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(2748);
33253
+ /* harmony import */ var _core_helpers_utils_attr_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(29960);
33254
+ /*!
33255
+ * Jodit Editor (https://xdsoft.net/jodit/)
33256
+ * Released under MIT see LICENSE.txt in the project root for license information.
33257
+ * Copyright (c) 2013-2026 Valerii Chupurnov. All rights reserved. https://xdsoft.net
33258
+ */
33259
+
33260
+ /**
33261
+ * Add `sandbox=""` attribute to all `<iframe>` elements in the editor content
33262
+ * @private
33263
+ */ function sandboxIframesInContent(jodit, nodeElm, hadEffect) {
33264
+ if (!jodit.o.cleanHTML.sandboxIframesInContent || !_core_dom_dom_js__WEBPACK_IMPORTED_MODULE_0__.Dom.isElement(nodeElm) || nodeElm.nodeName !== 'IFRAME') {
33265
+ return hadEffect;
33266
+ }
33267
+ const elm = nodeElm;
33268
+ if (!elm.hasAttribute('sandbox')) {
33269
+ (0,_core_helpers_utils_attr_js__WEBPACK_IMPORTED_MODULE_1__.attr)(elm, 'sandbox', '');
33270
+ return true;
33271
+ }
33272
+ return hadEffect;
33273
+ }
33274
+
33275
+
33089
33276
  /***/ }),
33090
33277
 
33091
33278
  /***/ 384:
@@ -33105,9 +33292,15 @@ __webpack_require__.r(__webpack_exports__);
33105
33292
  /**
33106
33293
  * @private
33107
33294
  */ function sanitizeAttributes(jodit, nodeElm, hadEffect) {
33108
- if (_core_dom_dom_js__WEBPACK_IMPORTED_MODULE_0__.Dom.isElement(nodeElm) && (0,_core_helpers_index_js__WEBPACK_IMPORTED_MODULE_1__.sanitizeHTMLElement)(nodeElm, {
33109
- safeJavaScriptLink: jodit.options.cleanHTML.safeJavaScriptLink,
33110
- removeOnError: jodit.options.cleanHTML.removeOnError
33295
+ if (!_core_dom_dom_js__WEBPACK_IMPORTED_MODULE_0__.Dom.isElement(nodeElm)) {
33296
+ return hadEffect;
33297
+ }
33298
+ const opts = jodit.options.cleanHTML;
33299
+ if ((0,_core_helpers_index_js__WEBPACK_IMPORTED_MODULE_1__.sanitizeHTMLElement)(nodeElm, {
33300
+ safeJavaScriptLink: opts.safeJavaScriptLink,
33301
+ removeOnError: opts.removeOnError,
33302
+ removeEventAttributes: opts.removeEventAttributes,
33303
+ safeLinksTarget: opts.safeLinksTarget
33111
33304
  })) {
33112
33305
  return true;
33113
33306
  }
@@ -33115,6 +33308,81 @@ __webpack_require__.r(__webpack_exports__);
33115
33308
  }
33116
33309
 
33117
33310
 
33311
+ /***/ }),
33312
+
33313
+ /***/ 15583:
33314
+ /***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) {
33315
+
33316
+ /* harmony export */ __webpack_require__.d(__webpack_exports__, {
33317
+ /* harmony export */ sanitizeStyles: function() { return /* binding */ sanitizeStyles; }
33318
+ /* harmony export */ });
33319
+ /* harmony import */ var _core_dom_dom_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(2748);
33320
+ /* harmony import */ var _core_helpers_utils_attr_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(29960);
33321
+ /*!
33322
+ * Jodit Editor (https://xdsoft.net/jodit/)
33323
+ * Released under MIT see LICENSE.txt in the project root for license information.
33324
+ * Copyright (c) 2013-2026 Valerii Chupurnov. All rights reserved. https://xdsoft.net
33325
+ */
33326
+
33327
+ /**
33328
+ * Filter CSS properties in style attributes based on allowedStyles whitelist
33329
+ * @private
33330
+ */ function sanitizeStyles(jodit, nodeElm, hadEffect) {
33331
+ const allowedStyles = jodit.o.cleanHTML.allowedStyles;
33332
+ if (!allowedStyles || !_core_dom_dom_js__WEBPACK_IMPORTED_MODULE_0__.Dom.isElement(nodeElm)) {
33333
+ return hadEffect;
33334
+ }
33335
+ const elm = nodeElm;
33336
+ const style = (0,_core_helpers_utils_attr_js__WEBPACK_IMPORTED_MODULE_1__.attr)(elm, 'style');
33337
+ if (!style) {
33338
+ return hadEffect;
33339
+ }
33340
+ const tagName = nodeElm.nodeName.toLowerCase();
33341
+ const allowed = getAllowedPropsForTag(tagName, allowedStyles);
33342
+ if (!allowed) {
33343
+ return hadEffect;
33344
+ }
33345
+ const filtered = filterStyleProperties(style, allowed);
33346
+ if (filtered !== style) {
33347
+ (0,_core_helpers_utils_attr_js__WEBPACK_IMPORTED_MODULE_1__.attr)(elm, 'style', filtered || null);
33348
+ return true;
33349
+ }
33350
+ return hadEffect;
33351
+ }
33352
+ function getAllowedPropsForTag(tagName, allowedStyles) {
33353
+ const tagSpecific = allowedStyles[tagName];
33354
+ const global = allowedStyles['*'];
33355
+ if (!tagSpecific && !global) {
33356
+ return null;
33357
+ }
33358
+ const set = new Set();
33359
+ if (global) {
33360
+ for (const prop of global){
33361
+ set.add(prop.toLowerCase());
33362
+ }
33363
+ }
33364
+ if (tagSpecific) {
33365
+ for (const prop of tagSpecific){
33366
+ set.add(prop.toLowerCase());
33367
+ }
33368
+ }
33369
+ return set;
33370
+ }
33371
+ function filterStyleProperties(style, allowed) {
33372
+ return style.split(';').map((s)=>s.trim()).filter((s)=>{
33373
+ if (!s) {
33374
+ return false;
33375
+ }
33376
+ const colonIdx = s.indexOf(':');
33377
+ if (colonIdx === -1) {
33378
+ return false;
33379
+ }
33380
+ const prop = s.substring(0, colonIdx).trim().toLowerCase();
33381
+ return allowed.has(prop);
33382
+ }).join('; ').replace(/;\s*$/, '');
33383
+ }
33384
+
33385
+
33118
33386
  /***/ }),
33119
33387
 
33120
33388
  /***/ 28800:
@@ -34569,7 +34837,7 @@ _core_global_js__WEBPACK_IMPORTED_MODULE_2__.pluginSystem.add('dragAndDropElemen
34569
34837
  'src'
34570
34838
  ];
34571
34839
  fragment = this.j.createInside.element(tagName);
34572
- 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') || '');
34840
+ (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') || '');
34573
34841
  if (tagName === 'a') {
34574
34842
  fragment.textContent = (0,_core_helpers_index_js__WEBPACK_IMPORTED_MODULE_4__.attr)(fragment, field) || '';
34575
34843
  }
@@ -35166,13 +35434,15 @@ function brBefore(start) {
35166
35434
  /* harmony export */ insertParagraph: function() { return /* binding */ insertParagraph; }
35167
35435
  /* harmony export */ });
35168
35436
  /* harmony import */ var _core_dom_dom_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(2748);
35169
- /* harmony import */ var _core_helpers_utils_scroll_into_view_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(26395);
35437
+ /* harmony import */ var _core_helpers_utils_attr_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(29960);
35438
+ /* harmony import */ var _core_helpers_utils_scroll_into_view_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(26395);
35170
35439
  /*!
35171
35440
  * Jodit Editor (https://xdsoft.net/jodit/)
35172
35441
  * Released under MIT see LICENSE.txt in the project root for license information.
35173
35442
  * Copyright (c) 2013-2026 Valerii Chupurnov. All rights reserved. https://xdsoft.net
35174
35443
  */
35175
35444
 
35445
+
35176
35446
  /**
35177
35447
  * Insert default paragraph
35178
35448
  * @private
@@ -35182,11 +35452,11 @@ function brBefore(start) {
35182
35452
  p.appendChild(br);
35183
35453
  }
35184
35454
  if (style && style.cssText) {
35185
- p.setAttribute('style', style.cssText);
35455
+ (0,_core_helpers_utils_attr_js__WEBPACK_IMPORTED_MODULE_1__.attr)(p, 'style', style.cssText);
35186
35456
  }
35187
35457
  _core_dom_dom_js__WEBPACK_IMPORTED_MODULE_0__.Dom.after(fake, p);
35188
35458
  _core_dom_dom_js__WEBPACK_IMPORTED_MODULE_0__.Dom.before(isBR ? p : br, fake);
35189
- (0,_core_helpers_utils_scroll_into_view_js__WEBPACK_IMPORTED_MODULE_1__.scrollIntoViewIfNeeded)(p, editor.editor, editor.ed);
35459
+ (0,_core_helpers_utils_scroll_into_view_js__WEBPACK_IMPORTED_MODULE_2__.scrollIntoViewIfNeeded)(p, editor.editor, editor.ed);
35190
35460
  return p;
35191
35461
  }
35192
35462
 
@@ -35363,8 +35633,9 @@ function brBefore(start) {
35363
35633
  /* unused harmony export file */
35364
35634
  /* harmony import */ var _core_dom_dom_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(2748);
35365
35635
  /* harmony import */ var _core_global_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(580);
35366
- /* harmony import */ var _config_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(6441);
35367
- /* harmony import */ var _modules_widget_index_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(92762);
35636
+ /* harmony import */ var _core_helpers_utils_attr_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(29960);
35637
+ /* harmony import */ var _config_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(6441);
35638
+ /* harmony import */ var _modules_widget_index_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(92762);
35368
35639
  /*!
35369
35640
  * Jodit Editor (https://xdsoft.net/jodit/)
35370
35641
  * Released under MIT see LICENSE.txt in the project root for license information.
@@ -35373,7 +35644,8 @@ function brBefore(start) {
35373
35644
 
35374
35645
 
35375
35646
 
35376
- _config_js__WEBPACK_IMPORTED_MODULE_2__.Config.prototype.controls.file = {
35647
+
35648
+ _config_js__WEBPACK_IMPORTED_MODULE_3__.Config.prototype.controls.file = {
35377
35649
  popup: (editor, current, close)=>{
35378
35650
  const insert = (url, title = '')=>{
35379
35651
  editor.s.insertNode(editor.createInside.fromHTML(`<a href="${url}" title="${title}">${title || url}</a>`));
@@ -35382,7 +35654,7 @@ _config_js__WEBPACK_IMPORTED_MODULE_2__.Config.prototype.controls.file = {
35382
35654
  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))) {
35383
35655
  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);
35384
35656
  }
35385
- return (0,_modules_widget_index_js__WEBPACK_IMPORTED_MODULE_3__.FileSelectorWidget)(editor, {
35657
+ return (0,_modules_widget_index_js__WEBPACK_IMPORTED_MODULE_4__.FileSelectorWidget)(editor, {
35386
35658
  filebrowser: (data)=>{
35387
35659
  data.files && data.files.forEach((file)=>insert(data.baseurl + file));
35388
35660
  close();
@@ -35390,8 +35662,8 @@ _config_js__WEBPACK_IMPORTED_MODULE_2__.Config.prototype.controls.file = {
35390
35662
  upload: true,
35391
35663
  url: (url, text)=>{
35392
35664
  if (sourceAnchor) {
35393
- sourceAnchor.setAttribute('href', url);
35394
- sourceAnchor.setAttribute('title', text);
35665
+ (0,_core_helpers_utils_attr_js__WEBPACK_IMPORTED_MODULE_2__.attr)(sourceAnchor, 'href', url);
35666
+ (0,_core_helpers_utils_attr_js__WEBPACK_IMPORTED_MODULE_2__.attr)(sourceAnchor, 'title', text);
35395
35667
  } else {
35396
35668
  insert(url, text);
35397
35669
  }
@@ -36304,8 +36576,8 @@ _config_js__WEBPACK_IMPORTED_MODULE_0__.Config.prototype.iframeSandbox = null;
36304
36576
  if (opt.iframeCSSLinks) {
36305
36577
  opt.iframeCSSLinks.forEach((href)=>{
36306
36578
  const link = doc.createElement('link');
36307
- link.setAttribute('rel', 'stylesheet');
36308
- link.setAttribute('href', href);
36579
+ (0,_core_helpers_index_js__WEBPACK_IMPORTED_MODULE_2__.attr)(link, 'rel', 'stylesheet');
36580
+ (0,_core_helpers_index_js__WEBPACK_IMPORTED_MODULE_2__.attr)(link, 'href', href);
36309
36581
  doc.head && doc.head.appendChild(link);
36310
36582
  });
36311
36583
  }
@@ -36322,11 +36594,13 @@ _config_js__WEBPACK_IMPORTED_MODULE_0__.Config.prototype.iframeSandbox = null;
36322
36594
  iframe.style.display = 'block';
36323
36595
  iframe.src = 'about:blank';
36324
36596
  iframe.className = 'jodit-wysiwyg_iframe';
36325
- iframe.setAttribute('allowtransparency', 'true');
36326
- iframe.setAttribute('tabindex', opt.tabIndex.toString());
36327
- iframe.setAttribute('frameborder', '0');
36597
+ (0,_core_helpers_index_js__WEBPACK_IMPORTED_MODULE_2__.attr)(iframe, {
36598
+ allowtransparency: 'true',
36599
+ tabindex: opt.tabIndex.toString(),
36600
+ frameborder: '0'
36601
+ });
36328
36602
  if (opt.iframeSandbox != null) {
36329
- iframe.setAttribute('sandbox', opt.iframeSandbox);
36603
+ (0,_core_helpers_index_js__WEBPACK_IMPORTED_MODULE_2__.attr)(iframe, 'sandbox', opt.iframeSandbox);
36330
36604
  }
36331
36605
  editor.workplace.appendChild(iframe);
36332
36606
  editor.iframe = iframe;
@@ -38177,6 +38451,10 @@ function _async_to_generator(fn) {
38177
38451
  }
38178
38452
  (0,_core_helpers_utils_attr_js__WEBPACK_IMPORTED_MODULE_1__.attr)(link, 'href', imageLink);
38179
38453
  (0,_core_helpers_utils_attr_js__WEBPACK_IMPORTED_MODULE_1__.attr)(link, 'target', imageLinkOpenInNewTab ? '_blank' : null);
38454
+ if (!imageLinkOpenInNewTab) {
38455
+ const relParts = ((0,_core_helpers_utils_attr_js__WEBPACK_IMPORTED_MODULE_1__.attr)(link, 'rel') || '').split(/\s+/).filter((p)=>p && p !== 'noopener' && p !== 'noreferrer');
38456
+ (0,_core_helpers_utils_attr_js__WEBPACK_IMPORTED_MODULE_1__.attr)(link, 'rel', relParts.length ? relParts.join(' ') : null);
38457
+ }
38180
38458
  } else {
38181
38459
  if (link && link.parentNode) {
38182
38460
  link.parentNode.replaceChild(image, link);
@@ -38281,10 +38559,11 @@ function _async_to_generator(fn) {
38281
38559
  /* harmony import */ var _core_dom_index_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(22732);
38282
38560
  /* harmony import */ var _core_global_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(580);
38283
38561
  /* harmony import */ var _core_helpers_index_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(21537);
38284
- /* harmony import */ var _core_ui_icon_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(12153);
38285
- /* harmony import */ var _config_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(6441);
38286
- /* harmony import */ var _modules_widget_index_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(92762);
38287
- /* harmony import */ var _image_svg_js__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(25179);
38562
+ /* harmony import */ var _core_helpers_utils_attr_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(29960);
38563
+ /* harmony import */ var _core_ui_icon_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(12153);
38564
+ /* harmony import */ var _config_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(6441);
38565
+ /* harmony import */ var _modules_widget_index_js__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(92762);
38566
+ /* harmony import */ var _image_svg_js__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(25179);
38288
38567
  function asyncGeneratorStep(gen, resolve, reject, _next, _throw, key, arg) {
38289
38568
  try {
38290
38569
  var info = gen[key](arg);
@@ -38325,15 +38604,16 @@ function _async_to_generator(fn) {
38325
38604
 
38326
38605
 
38327
38606
 
38328
- _core_ui_icon_js__WEBPACK_IMPORTED_MODULE_3__.Icon.set('image', _image_svg_js__WEBPACK_IMPORTED_MODULE_6__["default"]);
38329
- _config_js__WEBPACK_IMPORTED_MODULE_4__.Config.prototype.controls.image = {
38607
+
38608
+ _core_ui_icon_js__WEBPACK_IMPORTED_MODULE_4__.Icon.set('image', _image_svg_js__WEBPACK_IMPORTED_MODULE_7__["default"]);
38609
+ _config_js__WEBPACK_IMPORTED_MODULE_5__.Config.prototype.controls.image = {
38330
38610
  popup: (editor, current, close)=>{
38331
38611
  let sourceImage = null;
38332
38612
  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)) {
38333
38613
  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];
38334
38614
  }
38335
38615
  editor.s.save();
38336
- return (0,_modules_widget_index_js__WEBPACK_IMPORTED_MODULE_5__.FileSelectorWidget)(editor, {
38616
+ return (0,_modules_widget_index_js__WEBPACK_IMPORTED_MODULE_6__.FileSelectorWidget)(editor, {
38337
38617
  filebrowser: (data)=>{
38338
38618
  editor.s.restore();
38339
38619
  data.files && data.files.forEach((file)=>editor.s.insertImage(data.baseurl + file, null, editor.o.imageDefaultWidth));
@@ -38346,8 +38626,8 @@ _config_js__WEBPACK_IMPORTED_MODULE_4__.Config.prototype.controls.image = {
38346
38626
  url = '//' + url;
38347
38627
  }
38348
38628
  const image = sourceImage || editor.createInside.element('img');
38349
- image.setAttribute('src', url);
38350
- image.setAttribute('alt', text);
38629
+ (0,_core_helpers_utils_attr_js__WEBPACK_IMPORTED_MODULE_3__.attr)(image, 'src', url);
38630
+ (0,_core_helpers_utils_attr_js__WEBPACK_IMPORTED_MODULE_3__.attr)(image, 'alt', text);
38351
38631
  if (!sourceImage) {
38352
38632
  yield editor.s.insertImage(image, null, editor.o.imageDefaultWidth);
38353
38633
  }
@@ -40355,7 +40635,7 @@ _config_js__WEBPACK_IMPORTED_MODULE_2__.Config.prototype.controls.link = {
40355
40635
  }
40356
40636
  if (jodit.s.isCollapsed()) {
40357
40637
  const a = jodit.createInside.element('a');
40358
- a.setAttribute('href', html);
40638
+ (0,_core_helpers_index_js__WEBPACK_IMPORTED_MODULE_3__.attr)(a, 'href', html);
40359
40639
  a.textContent = html;
40360
40640
  jodit.e.fire('applyLink', jodit, a, null);
40361
40641
  return a;
@@ -40415,7 +40695,7 @@ _config_js__WEBPACK_IMPORTED_MODULE_2__.Config.prototype.controls.link = {
40415
40695
  target_checkbox.checked = (0,_core_helpers_index_js__WEBPACK_IMPORTED_MODULE_3__.attr)(link, 'target') === '_blank';
40416
40696
  }
40417
40697
  if (noFollowCheckbox && nofollow_checkbox) {
40418
- nofollow_checkbox.checked = (0,_core_helpers_index_js__WEBPACK_IMPORTED_MODULE_3__.attr)(link, 'rel') === 'nofollow';
40698
+ nofollow_checkbox.checked = ((0,_core_helpers_index_js__WEBPACK_IMPORTED_MODULE_3__.attr)(link, 'rel') || '').split(/\s+/).includes('nofollow');
40419
40699
  }
40420
40700
  insert.textContent = i18n('Update');
40421
40701
  } else {
@@ -40481,7 +40761,14 @@ _config_js__WEBPACK_IMPORTED_MODULE_2__.Config.prototype.controls.link = {
40481
40761
  (0,_core_helpers_index_js__WEBPACK_IMPORTED_MODULE_3__.attr)(a, 'target', target_checkbox.checked ? '_blank' : null);
40482
40762
  }
40483
40763
  if (noFollowCheckbox && nofollow_checkbox) {
40484
- (0,_core_helpers_index_js__WEBPACK_IMPORTED_MODULE_3__.attr)(a, 'rel', nofollow_checkbox.checked ? 'nofollow' : null);
40764
+ const relParts = ((0,_core_helpers_index_js__WEBPACK_IMPORTED_MODULE_3__.attr)(a, 'rel') || '').split(/\s+/).filter(Boolean);
40765
+ const hasNofollow = relParts.includes('nofollow');
40766
+ if (nofollow_checkbox.checked && !hasNofollow) {
40767
+ relParts.push('nofollow');
40768
+ } else if (!nofollow_checkbox.checked && hasNofollow) {
40769
+ relParts.splice(relParts.indexOf('nofollow'), 1);
40770
+ }
40771
+ (0,_core_helpers_index_js__WEBPACK_IMPORTED_MODULE_3__.attr)(a, 'rel', relParts.length ? relParts.join(' ') : null);
40485
40772
  }
40486
40773
  jodit.e.fire('applyLink', jodit, a, form);
40487
40774
  });
@@ -43122,8 +43409,8 @@ const keyBInd = '__jodit-resizer_binded';
43122
43409
  this.j.e.off(element, 'mousedown.select touchstart.select').on(element, 'mousedown.select touchstart.select', ()=>{
43123
43410
  this.j.s.select(element);
43124
43411
  }).off(element, 'changesize').on(element, 'changesize', ()=>{
43125
- iframe.setAttribute('width', element.offsetWidth + 'px');
43126
- iframe.setAttribute('height', element.offsetHeight + 'px');
43412
+ (0,_core_helpers_index_js__WEBPACK_IMPORTED_MODULE_4__.attr)(iframe, 'width', element.offsetWidth + 'px');
43413
+ (0,_core_helpers_index_js__WEBPACK_IMPORTED_MODULE_4__.attr)(iframe, 'height', element.offsetHeight + 'px');
43127
43414
  });
43128
43415
  }
43129
43416
  this.j.e.on(element, 'dragstart', this.hide);
@@ -45245,8 +45532,9 @@ class AceEditor extends _sourceEditor_js__WEBPACK_IMPORTED_MODULE_2__.SourceEdit
45245
45532
  /* harmony export */ TextAreaEditor: function() { return /* binding */ TextAreaEditor; }
45246
45533
  /* harmony export */ });
45247
45534
  /* harmony import */ var _core_dom_dom_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(2748);
45248
- /* harmony import */ var _core_helpers_utils_css_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(41180);
45249
- /* harmony import */ var _sourceEditor_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(23370);
45535
+ /* harmony import */ var _core_helpers_utils_attr_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(29960);
45536
+ /* harmony import */ var _core_helpers_utils_css_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(41180);
45537
+ /* harmony import */ var _sourceEditor_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(23370);
45250
45538
  /*!
45251
45539
  * Jodit Editor (https://xdsoft.net/jodit/)
45252
45540
  * Released under MIT see LICENSE.txt in the project root for license information.
@@ -45254,7 +45542,8 @@ class AceEditor extends _sourceEditor_js__WEBPACK_IMPORTED_MODULE_2__.SourceEdit
45254
45542
  */
45255
45543
 
45256
45544
 
45257
- class TextAreaEditor extends _sourceEditor_js__WEBPACK_IMPORTED_MODULE_2__.SourceEditor {
45545
+
45546
+ class TextAreaEditor extends _sourceEditor_js__WEBPACK_IMPORTED_MODULE_3__.SourceEditor {
45258
45547
  init(editor) {
45259
45548
  this.instance = editor.c.element('textarea', {
45260
45549
  class: 'jodit-source__mirror',
@@ -45262,7 +45551,7 @@ class TextAreaEditor extends _sourceEditor_js__WEBPACK_IMPORTED_MODULE_2__.Sourc
45262
45551
  });
45263
45552
  this.container.appendChild(this.instance);
45264
45553
  editor.e.on(this.instance, 'mousedown keydown touchstart input', editor.async.debounce(this.toWYSIWYG, editor.defaultTimeout)).on('setMinHeight.source', (minHeightD)=>{
45265
- (0,_core_helpers_utils_css_js__WEBPACK_IMPORTED_MODULE_1__.css)(this.instance, 'minHeight', minHeightD);
45554
+ (0,_core_helpers_utils_css_js__WEBPACK_IMPORTED_MODULE_2__.css)(this.instance, 'minHeight', minHeightD);
45266
45555
  }).on(this.instance, 'change keydown mousedown touchstart input', this.autosize).on('afterSetMode.source', this.autosize).on(this.instance, 'mousedown focus', (e)=>{
45267
45556
  editor.e.fire(e.type, e);
45268
45557
  });
@@ -45306,14 +45595,10 @@ class TextAreaEditor extends _sourceEditor_js__WEBPACK_IMPORTED_MODULE_2__.Sourc
45306
45595
  this.instance.blur();
45307
45596
  }
45308
45597
  setPlaceHolder(title) {
45309
- this.instance.setAttribute('placeholder', title);
45598
+ (0,_core_helpers_utils_attr_js__WEBPACK_IMPORTED_MODULE_1__.attr)(this.instance, 'placeholder', title);
45310
45599
  }
45311
45600
  setReadOnly(isReadOnly) {
45312
- if (isReadOnly) {
45313
- this.instance.setAttribute('readonly', 'true');
45314
- } else {
45315
- this.instance.removeAttribute('readonly');
45316
- }
45601
+ (0,_core_helpers_utils_attr_js__WEBPACK_IMPORTED_MODULE_1__.attr)(this.instance, 'readonly', isReadOnly ? 'true' : null);
45317
45602
  }
45318
45603
  selectAll() {
45319
45604
  this.instance.select();