jodit-pro 4.12.21 → 4.12.23

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 (299) hide show
  1. package/es2015/jodit.css +1 -1
  2. package/es2015/jodit.fat.min.js +4 -4
  3. package/es2015/jodit.js +171 -34
  4. package/es2015/jodit.min.js +4 -4
  5. package/es2015/plugins/ai-assistant-pro/ai-assistant-pro.css +1 -1
  6. package/es2015/plugins/ai-assistant-pro/ai-assistant-pro.js +1 -1
  7. package/es2015/plugins/ai-assistant-pro/ai-assistant-pro.min.js +1 -1
  8. package/es2015/plugins/autocomplete/autocomplete.js +1 -1
  9. package/es2015/plugins/autocomplete/autocomplete.min.js +1 -1
  10. package/es2015/plugins/backup/backup.css +1 -1
  11. package/es2015/plugins/backup/backup.js +1 -1
  12. package/es2015/plugins/backup/backup.min.js +1 -1
  13. package/es2015/plugins/button-generator/button-generator.css +1 -1
  14. package/es2015/plugins/button-generator/button-generator.js +1 -1
  15. package/es2015/plugins/button-generator/button-generator.min.js +1 -1
  16. package/es2015/plugins/change-case/change-case.js +1 -1
  17. package/es2015/plugins/change-case/change-case.min.js +1 -1
  18. package/es2015/plugins/color-picker/color-picker.css +1 -1
  19. package/es2015/plugins/color-picker/color-picker.js +1 -1
  20. package/es2015/plugins/color-picker/color-picker.min.js +1 -1
  21. package/es2015/plugins/emoji/emoji.css +1 -1
  22. package/es2015/plugins/emoji/emoji.js +1 -1
  23. package/es2015/plugins/emoji/emoji.min.js +1 -1
  24. package/es2015/plugins/export-docs/export-docs.js +1 -1
  25. package/es2015/plugins/export-docs/export-docs.min.js +1 -1
  26. package/es2015/plugins/finder/finder.css +1 -1
  27. package/es2015/plugins/finder/finder.js +1 -1
  28. package/es2015/plugins/finder/finder.min.js +1 -1
  29. package/es2015/plugins/google-maps/google-maps.css +1 -1
  30. package/es2015/plugins/google-maps/google-maps.js +1 -1
  31. package/es2015/plugins/google-maps/google-maps.min.js +1 -1
  32. package/es2015/plugins/google-search/google-search.js +1 -1
  33. package/es2015/plugins/google-search/google-search.min.js +1 -1
  34. package/es2015/plugins/highlight-signature/highlight-signature.js +1 -1
  35. package/es2015/plugins/highlight-signature/highlight-signature.min.js +1 -1
  36. package/es2015/plugins/iframe-editor/iframe-editor.css +1 -1
  37. package/es2015/plugins/iframe-editor/iframe-editor.js +1 -1
  38. package/es2015/plugins/iframe-editor/iframe-editor.min.js +1 -1
  39. package/es2015/plugins/keyboard/keyboard.css +1 -1
  40. package/es2015/plugins/keyboard/keyboard.js +1 -1
  41. package/es2015/plugins/keyboard/keyboard.min.js +1 -1
  42. package/es2015/plugins/mobile-view/mobile-view.js +1 -1
  43. package/es2015/plugins/mobile-view/mobile-view.min.js +1 -1
  44. package/es2015/plugins/page-break/page-break.js +1 -1
  45. package/es2015/plugins/page-break/page-break.min.js +1 -1
  46. package/es2015/plugins/paste-code/paste-code.css +1 -1
  47. package/es2015/plugins/paste-code/paste-code.js +1 -1
  48. package/es2015/plugins/paste-code/paste-code.min.js +1 -1
  49. package/es2015/plugins/paste-from-word/paste-from-word.js +1 -1
  50. package/es2015/plugins/paste-from-word/paste-from-word.min.js +1 -1
  51. package/es2015/plugins/show-blocks/show-blocks.js +1 -1
  52. package/es2015/plugins/show-blocks/show-blocks.min.js +1 -1
  53. package/es2015/plugins/style/style.css +1 -1
  54. package/es2015/plugins/style/style.js +1 -1
  55. package/es2015/plugins/style/style.min.js +1 -1
  56. package/es2015/plugins/templates/templates.css +1 -1
  57. package/es2015/plugins/templates/templates.js +1 -1
  58. package/es2015/plugins/templates/templates.min.js +1 -1
  59. package/es2015/plugins/todo-list/todo-list.css +1 -1
  60. package/es2015/plugins/todo-list/todo-list.js +1 -1
  61. package/es2015/plugins/todo-list/todo-list.min.js +1 -1
  62. package/es2015/plugins/translate/translate.css +1 -1
  63. package/es2015/plugins/translate/translate.js +1 -1
  64. package/es2015/plugins/translate/translate.min.js +1 -1
  65. package/es2015/plugins/tune-block/tune-block.css +1 -1
  66. package/es2015/plugins/tune-block/tune-block.js +1 -1
  67. package/es2015/plugins/tune-block/tune-block.min.js +1 -1
  68. package/es2018/jodit.fat.min.js +6 -6
  69. package/es2018/jodit.min.js +4 -4
  70. package/es2018/plugins/ai-assistant-pro/ai-assistant-pro.min.js +1 -1
  71. package/es2018/plugins/autocomplete/autocomplete.min.js +1 -1
  72. package/es2018/plugins/backup/backup.min.js +1 -1
  73. package/es2018/plugins/button-generator/button-generator.min.js +1 -1
  74. package/es2018/plugins/change-case/change-case.min.js +1 -1
  75. package/es2018/plugins/color-picker/color-picker.min.js +1 -1
  76. package/es2018/plugins/emoji/emoji.min.js +1 -1
  77. package/es2018/plugins/export-docs/export-docs.min.js +1 -1
  78. package/es2018/plugins/finder/finder.min.js +1 -1
  79. package/es2018/plugins/google-maps/google-maps.min.js +1 -1
  80. package/es2018/plugins/google-search/google-search.min.js +1 -1
  81. package/es2018/plugins/highlight-signature/highlight-signature.min.js +1 -1
  82. package/es2018/plugins/iframe-editor/iframe-editor.min.js +1 -1
  83. package/es2018/plugins/keyboard/keyboard.min.js +1 -1
  84. package/es2018/plugins/mobile-view/mobile-view.min.js +1 -1
  85. package/es2018/plugins/page-break/page-break.min.js +1 -1
  86. package/es2018/plugins/paste-code/paste-code.min.js +1 -1
  87. package/es2018/plugins/paste-from-word/paste-from-word.min.js +1 -1
  88. package/es2018/plugins/show-blocks/show-blocks.min.js +1 -1
  89. package/es2018/plugins/style/style.min.js +1 -1
  90. package/es2018/plugins/templates/templates.min.js +1 -1
  91. package/es2018/plugins/todo-list/todo-list.min.js +1 -1
  92. package/es2018/plugins/translate/translate.min.js +1 -1
  93. package/es2018/plugins/tune-block/tune-block.min.js +1 -1
  94. package/es2021/jodit.css +1 -1
  95. package/es2021/jodit.fat.min.js +8 -8
  96. package/es2021/jodit.js +171 -34
  97. package/es2021/jodit.min.js +5 -5
  98. package/es2021/plugins/ai-assistant-pro/ai-assistant-pro.css +1 -1
  99. package/es2021/plugins/ai-assistant-pro/ai-assistant-pro.js +1 -1
  100. package/es2021/plugins/ai-assistant-pro/ai-assistant-pro.min.js +1 -1
  101. package/es2021/plugins/autocomplete/autocomplete.js +1 -1
  102. package/es2021/plugins/autocomplete/autocomplete.min.js +1 -1
  103. package/es2021/plugins/backup/backup.css +1 -1
  104. package/es2021/plugins/backup/backup.js +1 -1
  105. package/es2021/plugins/backup/backup.min.js +1 -1
  106. package/es2021/plugins/button-generator/button-generator.css +1 -1
  107. package/es2021/plugins/button-generator/button-generator.js +1 -1
  108. package/es2021/plugins/button-generator/button-generator.min.js +1 -1
  109. package/es2021/plugins/change-case/change-case.js +1 -1
  110. package/es2021/plugins/change-case/change-case.min.js +1 -1
  111. package/es2021/plugins/color-picker/color-picker.css +1 -1
  112. package/es2021/plugins/color-picker/color-picker.js +1 -1
  113. package/es2021/plugins/color-picker/color-picker.min.js +1 -1
  114. package/es2021/plugins/emoji/emoji.css +1 -1
  115. package/es2021/plugins/emoji/emoji.js +1 -1
  116. package/es2021/plugins/emoji/emoji.min.js +1 -1
  117. package/es2021/plugins/export-docs/export-docs.js +1 -1
  118. package/es2021/plugins/export-docs/export-docs.min.js +1 -1
  119. package/es2021/plugins/finder/finder.css +1 -1
  120. package/es2021/plugins/finder/finder.js +1 -1
  121. package/es2021/plugins/finder/finder.min.js +1 -1
  122. package/es2021/plugins/google-maps/google-maps.css +1 -1
  123. package/es2021/plugins/google-maps/google-maps.js +1 -1
  124. package/es2021/plugins/google-maps/google-maps.min.js +1 -1
  125. package/es2021/plugins/google-search/google-search.js +1 -1
  126. package/es2021/plugins/google-search/google-search.min.js +1 -1
  127. package/es2021/plugins/highlight-signature/highlight-signature.js +1 -1
  128. package/es2021/plugins/highlight-signature/highlight-signature.min.js +1 -1
  129. package/es2021/plugins/iframe-editor/iframe-editor.css +1 -1
  130. package/es2021/plugins/iframe-editor/iframe-editor.js +1 -1
  131. package/es2021/plugins/iframe-editor/iframe-editor.min.js +1 -1
  132. package/es2021/plugins/keyboard/keyboard.css +1 -1
  133. package/es2021/plugins/keyboard/keyboard.js +1 -1
  134. package/es2021/plugins/keyboard/keyboard.min.js +1 -1
  135. package/es2021/plugins/mobile-view/mobile-view.js +1 -1
  136. package/es2021/plugins/mobile-view/mobile-view.min.js +1 -1
  137. package/es2021/plugins/page-break/page-break.js +1 -1
  138. package/es2021/plugins/page-break/page-break.min.js +1 -1
  139. package/es2021/plugins/paste-code/paste-code.css +1 -1
  140. package/es2021/plugins/paste-code/paste-code.js +1 -1
  141. package/es2021/plugins/paste-code/paste-code.min.js +1 -1
  142. package/es2021/plugins/paste-from-word/paste-from-word.js +1 -1
  143. package/es2021/plugins/paste-from-word/paste-from-word.min.js +1 -1
  144. package/es2021/plugins/show-blocks/show-blocks.js +1 -1
  145. package/es2021/plugins/show-blocks/show-blocks.min.js +1 -1
  146. package/es2021/plugins/style/style.css +1 -1
  147. package/es2021/plugins/style/style.js +1 -1
  148. package/es2021/plugins/style/style.min.js +1 -1
  149. package/es2021/plugins/templates/templates.css +1 -1
  150. package/es2021/plugins/templates/templates.js +1 -1
  151. package/es2021/plugins/templates/templates.min.js +1 -1
  152. package/es2021/plugins/todo-list/todo-list.css +1 -1
  153. package/es2021/plugins/todo-list/todo-list.js +1 -1
  154. package/es2021/plugins/todo-list/todo-list.min.js +1 -1
  155. package/es2021/plugins/translate/translate.css +1 -1
  156. package/es2021/plugins/translate/translate.js +1 -1
  157. package/es2021/plugins/translate/translate.min.js +1 -1
  158. package/es2021/plugins/tune-block/tune-block.css +1 -1
  159. package/es2021/plugins/tune-block/tune-block.js +1 -1
  160. package/es2021/plugins/tune-block/tune-block.min.js +1 -1
  161. package/es2021.en/jodit.css +1 -1
  162. package/es2021.en/jodit.fat.min.js +5 -5
  163. package/es2021.en/jodit.js +171 -34
  164. package/es2021.en/jodit.min.js +5 -5
  165. package/es2021.en/plugins/ai-assistant-pro/ai-assistant-pro.css +1 -1
  166. package/es2021.en/plugins/ai-assistant-pro/ai-assistant-pro.js +1 -1
  167. package/es2021.en/plugins/ai-assistant-pro/ai-assistant-pro.min.js +1 -1
  168. package/es2021.en/plugins/autocomplete/autocomplete.js +1 -1
  169. package/es2021.en/plugins/autocomplete/autocomplete.min.js +1 -1
  170. package/es2021.en/plugins/backup/backup.css +1 -1
  171. package/es2021.en/plugins/backup/backup.js +1 -1
  172. package/es2021.en/plugins/backup/backup.min.js +1 -1
  173. package/es2021.en/plugins/button-generator/button-generator.css +1 -1
  174. package/es2021.en/plugins/button-generator/button-generator.js +1 -1
  175. package/es2021.en/plugins/button-generator/button-generator.min.js +1 -1
  176. package/es2021.en/plugins/change-case/change-case.js +1 -1
  177. package/es2021.en/plugins/change-case/change-case.min.js +1 -1
  178. package/es2021.en/plugins/color-picker/color-picker.css +1 -1
  179. package/es2021.en/plugins/color-picker/color-picker.js +1 -1
  180. package/es2021.en/plugins/color-picker/color-picker.min.js +1 -1
  181. package/es2021.en/plugins/emoji/emoji.css +1 -1
  182. package/es2021.en/plugins/emoji/emoji.js +1 -1
  183. package/es2021.en/plugins/emoji/emoji.min.js +1 -1
  184. package/es2021.en/plugins/export-docs/export-docs.js +1 -1
  185. package/es2021.en/plugins/export-docs/export-docs.min.js +1 -1
  186. package/es2021.en/plugins/finder/finder.css +1 -1
  187. package/es2021.en/plugins/finder/finder.js +1 -1
  188. package/es2021.en/plugins/finder/finder.min.js +1 -1
  189. package/es2021.en/plugins/google-maps/google-maps.css +1 -1
  190. package/es2021.en/plugins/google-maps/google-maps.js +1 -1
  191. package/es2021.en/plugins/google-maps/google-maps.min.js +1 -1
  192. package/es2021.en/plugins/google-search/google-search.js +1 -1
  193. package/es2021.en/plugins/google-search/google-search.min.js +1 -1
  194. package/es2021.en/plugins/highlight-signature/highlight-signature.js +1 -1
  195. package/es2021.en/plugins/highlight-signature/highlight-signature.min.js +1 -1
  196. package/es2021.en/plugins/iframe-editor/iframe-editor.css +1 -1
  197. package/es2021.en/plugins/iframe-editor/iframe-editor.js +1 -1
  198. package/es2021.en/plugins/iframe-editor/iframe-editor.min.js +1 -1
  199. package/es2021.en/plugins/keyboard/keyboard.css +1 -1
  200. package/es2021.en/plugins/keyboard/keyboard.js +1 -1
  201. package/es2021.en/plugins/keyboard/keyboard.min.js +1 -1
  202. package/es2021.en/plugins/mobile-view/mobile-view.js +1 -1
  203. package/es2021.en/plugins/mobile-view/mobile-view.min.js +1 -1
  204. package/es2021.en/plugins/page-break/page-break.js +1 -1
  205. package/es2021.en/plugins/page-break/page-break.min.js +1 -1
  206. package/es2021.en/plugins/paste-code/paste-code.css +1 -1
  207. package/es2021.en/plugins/paste-code/paste-code.js +1 -1
  208. package/es2021.en/plugins/paste-code/paste-code.min.js +1 -1
  209. package/es2021.en/plugins/paste-from-word/paste-from-word.js +1 -1
  210. package/es2021.en/plugins/paste-from-word/paste-from-word.min.js +1 -1
  211. package/es2021.en/plugins/show-blocks/show-blocks.js +1 -1
  212. package/es2021.en/plugins/show-blocks/show-blocks.min.js +1 -1
  213. package/es2021.en/plugins/style/style.css +1 -1
  214. package/es2021.en/plugins/style/style.js +1 -1
  215. package/es2021.en/plugins/style/style.min.js +1 -1
  216. package/es2021.en/plugins/templates/templates.css +1 -1
  217. package/es2021.en/plugins/templates/templates.js +1 -1
  218. package/es2021.en/plugins/templates/templates.min.js +1 -1
  219. package/es2021.en/plugins/todo-list/todo-list.css +1 -1
  220. package/es2021.en/plugins/todo-list/todo-list.js +1 -1
  221. package/es2021.en/plugins/todo-list/todo-list.min.js +1 -1
  222. package/es2021.en/plugins/translate/translate.css +1 -1
  223. package/es2021.en/plugins/translate/translate.js +1 -1
  224. package/es2021.en/plugins/translate/translate.min.js +1 -1
  225. package/es2021.en/plugins/tune-block/tune-block.css +1 -1
  226. package/es2021.en/plugins/tune-block/tune-block.js +1 -1
  227. package/es2021.en/plugins/tune-block/tune-block.min.js +1 -1
  228. package/es5/jodit.css +2 -2
  229. package/es5/jodit.fat.min.js +2 -2
  230. package/es5/jodit.js +184 -34
  231. package/es5/jodit.min.css +2 -2
  232. package/es5/jodit.min.js +2 -2
  233. package/es5/plugins/ai-assistant-pro/ai-assistant-pro.css +1 -1
  234. package/es5/plugins/ai-assistant-pro/ai-assistant-pro.js +1 -1
  235. package/es5/plugins/ai-assistant-pro/ai-assistant-pro.min.js +1 -1
  236. package/es5/plugins/autocomplete/autocomplete.js +1 -1
  237. package/es5/plugins/autocomplete/autocomplete.min.js +1 -1
  238. package/es5/plugins/backup/backup.css +1 -1
  239. package/es5/plugins/backup/backup.js +1 -1
  240. package/es5/plugins/backup/backup.min.js +1 -1
  241. package/es5/plugins/button-generator/button-generator.css +1 -1
  242. package/es5/plugins/button-generator/button-generator.js +1 -1
  243. package/es5/plugins/button-generator/button-generator.min.js +1 -1
  244. package/es5/plugins/change-case/change-case.js +1 -1
  245. package/es5/plugins/change-case/change-case.min.js +1 -1
  246. package/es5/plugins/color-picker/color-picker.css +1 -1
  247. package/es5/plugins/color-picker/color-picker.js +1 -1
  248. package/es5/plugins/color-picker/color-picker.min.js +1 -1
  249. package/es5/plugins/emoji/emoji.css +1 -1
  250. package/es5/plugins/emoji/emoji.js +1 -1
  251. package/es5/plugins/emoji/emoji.min.js +1 -1
  252. package/es5/plugins/export-docs/export-docs.js +1 -1
  253. package/es5/plugins/export-docs/export-docs.min.js +1 -1
  254. package/es5/plugins/finder/finder.css +1 -1
  255. package/es5/plugins/finder/finder.js +1 -1
  256. package/es5/plugins/finder/finder.min.js +1 -1
  257. package/es5/plugins/google-maps/google-maps.css +1 -1
  258. package/es5/plugins/google-maps/google-maps.js +1 -1
  259. package/es5/plugins/google-maps/google-maps.min.js +1 -1
  260. package/es5/plugins/google-search/google-search.js +1 -1
  261. package/es5/plugins/google-search/google-search.min.js +1 -1
  262. package/es5/plugins/highlight-signature/highlight-signature.js +1 -1
  263. package/es5/plugins/highlight-signature/highlight-signature.min.js +1 -1
  264. package/es5/plugins/iframe-editor/iframe-editor.css +1 -1
  265. package/es5/plugins/iframe-editor/iframe-editor.js +1 -1
  266. package/es5/plugins/iframe-editor/iframe-editor.min.js +1 -1
  267. package/es5/plugins/keyboard/keyboard.css +1 -1
  268. package/es5/plugins/keyboard/keyboard.js +1 -1
  269. package/es5/plugins/keyboard/keyboard.min.js +1 -1
  270. package/es5/plugins/mobile-view/mobile-view.js +1 -1
  271. package/es5/plugins/mobile-view/mobile-view.min.js +1 -1
  272. package/es5/plugins/page-break/page-break.js +1 -1
  273. package/es5/plugins/page-break/page-break.min.js +1 -1
  274. package/es5/plugins/paste-code/paste-code.css +1 -1
  275. package/es5/plugins/paste-code/paste-code.js +1 -1
  276. package/es5/plugins/paste-code/paste-code.min.js +1 -1
  277. package/es5/plugins/paste-from-word/paste-from-word.js +1 -1
  278. package/es5/plugins/paste-from-word/paste-from-word.min.js +1 -1
  279. package/es5/plugins/show-blocks/show-blocks.js +1 -1
  280. package/es5/plugins/show-blocks/show-blocks.min.js +1 -1
  281. package/es5/plugins/style/style.css +1 -1
  282. package/es5/plugins/style/style.js +1 -1
  283. package/es5/plugins/style/style.min.js +1 -1
  284. package/es5/plugins/templates/templates.css +1 -1
  285. package/es5/plugins/templates/templates.js +1 -1
  286. package/es5/plugins/templates/templates.min.js +1 -1
  287. package/es5/plugins/todo-list/todo-list.css +1 -1
  288. package/es5/plugins/todo-list/todo-list.js +1 -1
  289. package/es5/plugins/todo-list/todo-list.min.js +1 -1
  290. package/es5/plugins/translate/translate.css +1 -1
  291. package/es5/plugins/translate/translate.js +1 -1
  292. package/es5/plugins/translate/translate.min.js +1 -1
  293. package/es5/plugins/tune-block/tune-block.css +1 -1
  294. package/es5/plugins/tune-block/tune-block.js +1 -1
  295. package/es5/plugins/tune-block/tune-block.min.js +1 -1
  296. package/es5/polyfills.fat.min.js +1 -1
  297. package/es5/polyfills.js +1 -1
  298. package/es5/polyfills.min.js +1 -1
  299. 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.12.21
4
+ * Version: v4.12.23
5
5
  * Url: https://xdsoft.net/jodit/pro/
6
6
  * License(s): SEE LICENSE IN LICENSE.md
7
7
  */
@@ -1746,7 +1746,7 @@ __webpack_require__.r(__webpack_exports__);
1746
1746
  * ```
1747
1747
  * @packageDocumentation
1748
1748
  * @module constants
1749
- */ const APP_VERSION = "4.12.21";
1749
+ */ const APP_VERSION = "4.12.23";
1750
1750
  // prettier-ignore
1751
1751
  const ES = "es2021";
1752
1752
  const IS_ES_MODERN = true;
@@ -7486,6 +7486,18 @@ const completeUrl = (url)=>{
7486
7486
 
7487
7487
 
7488
7488
 
7489
+ /**
7490
+ * Keys that must never be copied from a (potentially untrusted) config object —
7491
+ * assigning them during a recursive merge can reach and mutate
7492
+ * `Object.prototype` (prototype pollution, CWE-1321).
7493
+ */ const UNSAFE_PROTO_KEYS = [
7494
+ '__proto__',
7495
+ 'constructor',
7496
+ 'prototype'
7497
+ ];
7498
+ function isUnsafeProtoKey(key) {
7499
+ return UNSAFE_PROTO_KEYS.indexOf(key) !== -1;
7500
+ }
7489
7501
  /**
7490
7502
  * @example
7491
7503
  * ```js
@@ -7534,6 +7546,9 @@ const completeUrl = (url)=>{
7534
7546
  }
7535
7547
  const newOpt = {};
7536
7548
  Object.keys(options).forEach((key)=>{
7549
+ if (isUnsafeProtoKey(key)) {
7550
+ return;
7551
+ }
7537
7552
  const opt = options[key], protoKey = proto ? proto[key] : null;
7538
7553
  if ((0,_checker_is_plain_object_js__WEBPACK_IMPORTED_MODULE_1__.isPlainObject)(opt) && (0,_checker_is_plain_object_js__WEBPACK_IMPORTED_MODULE_1__.isPlainObject)(protoKey) && !(0,_extend_js__WEBPACK_IMPORTED_MODULE_5__.isAtom)(opt)) {
7539
7554
  newOpt[key] = ConfigProto(opt, protoKey, deep + 1);
@@ -7595,6 +7610,9 @@ function ConfigFlatten(obj) {
7595
7610
  * @see {@link ConfigProto} for the prototype-chain variant used at editor creation time
7596
7611
  */ function ConfigMerge(target, source) {
7597
7612
  Object.keys(source).forEach((key)=>{
7613
+ if (isUnsafeProtoKey(key)) {
7614
+ return;
7615
+ }
7598
7616
  const srcVal = source[key];
7599
7617
  const tgtVal = target[key];
7600
7618
  if ((0,_checker_is_plain_object_js__WEBPACK_IMPORTED_MODULE_1__.isPlainObject)(srcVal) && (0,_checker_is_plain_object_js__WEBPACK_IMPORTED_MODULE_1__.isPlainObject)(tgtVal) && !(0,_extend_js__WEBPACK_IMPORTED_MODULE_5__.isAtom)(srcVal)) {
@@ -32813,7 +32831,11 @@ function filterStyleProperties(style, allowed) {
32813
32831
  if (!jodit.o.cleanHTML.removeEmptyElements) {
32814
32832
  return false;
32815
32833
  }
32816
- return _core_dom_dom_js__WEBPACK_IMPORTED_MODULE_1__.Dom.isElement(node) && node.nodeName.match(_core_constants_js__WEBPACK_IMPORTED_MODULE_0__.IS_INLINE) != null && !_core_dom_dom_js__WEBPACK_IMPORTED_MODULE_1__.Dom.isTemporary(node) && (0,_core_helpers_string_trim_js__WEBPACK_IMPORTED_MODULE_2__.trimInv)(node.innerHTML).length === 0 && (current == null || !_core_dom_dom_js__WEBPACK_IMPORTED_MODULE_1__.Dom.isOrContains(node, current));
32834
+ // Never drop an empty inline element that currently holds the caret it is
32835
+ // a pending-format marker the user is about to type into (#1291). `current`
32836
+ // is captured before a click moves the caret, so also check the live caret.
32837
+ const liveCaret = jodit.s.isCollapsed() ? jodit.s.range.startContainer : null;
32838
+ return _core_dom_dom_js__WEBPACK_IMPORTED_MODULE_1__.Dom.isElement(node) && node.nodeName.match(_core_constants_js__WEBPACK_IMPORTED_MODULE_0__.IS_INLINE) != null && !_core_dom_dom_js__WEBPACK_IMPORTED_MODULE_1__.Dom.isTemporary(node) && (0,_core_helpers_string_trim_js__WEBPACK_IMPORTED_MODULE_2__.trimInv)(node.innerHTML).length === 0 && (current == null || !_core_dom_dom_js__WEBPACK_IMPORTED_MODULE_1__.Dom.isOrContains(node, current)) && (liveCaret == null || !_core_dom_dom_js__WEBPACK_IMPORTED_MODULE_1__.Dom.isOrContains(node, liveCaret));
32817
32839
  }
32818
32840
 
32819
32841
 
@@ -33612,11 +33634,33 @@ var DragState;
33612
33634
  */ class dragAndDropElement extends _core_plugin_index_js__WEBPACK_IMPORTED_MODULE_4__.Plugin {
33613
33635
  /** @override */ afterInit() {
33614
33636
  this.dragList = this.j.o.draggableTags ? (0,_core_helpers_index_js__WEBPACK_IMPORTED_MODULE_3__.splitArray)(this.j.o.draggableTags).filter(Boolean).map((item)=>item.toLowerCase()) : [];
33637
+ // Allow another plugin (e.g. a drag handle/anchor) to start dragging
33638
+ // an element programmatically, regardless of the `draggableTags` list.
33639
+ this.j.e.on('startDragElement', this.onStartDragElement);
33615
33640
  if (!this.dragList.length) {
33616
33641
  return;
33617
33642
  }
33618
33643
  this.j.e.on('mousedown dragstart', this.onDragStart);
33619
33644
  }
33645
+ /**
33646
+ * Start dragging a specific element programmatically.
33647
+ *
33648
+ * Allows a separate UI element (for example a drag handle/anchor shown next
33649
+ * to a block) to initiate the drag without the user pressing directly on the
33650
+ * draggable element itself.
33651
+ *
33652
+ * @example
33653
+ * ```js
33654
+ * handle.addEventListener('mousedown', e => {
33655
+ * editor.e.fire('startDragElement', preBlock, e);
33656
+ * });
33657
+ * ```
33658
+ */ onStartDragElement(element, event) {
33659
+ if (this.isInDestruct || this.state > DragState.IDLE || !element) {
33660
+ return;
33661
+ }
33662
+ this.startDragging(element, event);
33663
+ }
33620
33664
  /**
33621
33665
  * Drag start handler
33622
33666
  */ onDragStart(event) {
@@ -33638,11 +33682,18 @@ var DragState;
33638
33682
  if (_core_dom_index_js__WEBPACK_IMPORTED_MODULE_1__.Dom.isTag(lastTarget.parentElement, 'a') && lastTarget.parentElement.firstChild === lastTarget && lastTarget.parentElement.lastChild === lastTarget) {
33639
33683
  lastTarget = lastTarget.parentElement;
33640
33684
  }
33685
+ this.startDragging(lastTarget, event);
33686
+ }
33687
+ /**
33688
+ * Prepare the ghost element and switch to the waiting state.
33689
+ * Shared by the native mousedown handler and the programmatic
33690
+ * `startDragElement` event handler.
33691
+ */ startDragging(target, event) {
33641
33692
  this.startX = event.clientX;
33642
33693
  this.startY = event.clientY;
33643
33694
  this.isCopyMode = (0,_core_helpers_index_js__WEBPACK_IMPORTED_MODULE_3__.ctrlKey)(event); // we can move only element from editor
33644
- this.draggable = lastTarget.cloneNode(true);
33645
- (0,_core_helpers_index_js__WEBPACK_IMPORTED_MODULE_3__.dataBind)(this.draggable, 'target', lastTarget);
33695
+ this.draggable = target.cloneNode(true);
33696
+ (0,_core_helpers_index_js__WEBPACK_IMPORTED_MODULE_3__.dataBind)(this.draggable, 'target', target);
33646
33697
  this.state = DragState.WAIT_DRAGGING;
33647
33698
  this.addDragListeners();
33648
33699
  }
@@ -33712,6 +33763,18 @@ var DragState;
33712
33763
  }
33713
33764
  const { parentElement } = fragment;
33714
33765
  this.j.s.insertNode(fragment, true, false);
33766
+ // Dropping a non-editable block (e.g. a `<pre>` code sample) can leave an
33767
+ // invisible filler text node beside it. Remove it so the drop does not
33768
+ // introduce a stray empty line (which clean-html would otherwise strip
33769
+ // later, causing a flash).
33770
+ [
33771
+ fragment.previousSibling,
33772
+ fragment.nextSibling
33773
+ ].forEach((node)=>{
33774
+ if (_core_dom_index_js__WEBPACK_IMPORTED_MODULE_1__.Dom.isEmptyTextNode(node)) {
33775
+ _core_dom_index_js__WEBPACK_IMPORTED_MODULE_1__.Dom.safeRemove(node);
33776
+ }
33777
+ });
33715
33778
  if (parentElement && _core_dom_index_js__WEBPACK_IMPORTED_MODULE_1__.Dom.isEmpty(parentElement) && !_core_dom_index_js__WEBPACK_IMPORTED_MODULE_1__.Dom.isCell(parentElement)) {
33716
33779
  _core_dom_index_js__WEBPACK_IMPORTED_MODULE_1__.Dom.safeRemove(parentElement);
33717
33780
  }
@@ -33738,7 +33801,7 @@ var DragState;
33738
33801
  }
33739
33802
  /** @override */ beforeDestruct() {
33740
33803
  this.onDragEnd();
33741
- this.j.e.off('mousedown dragstart', this.onDragStart);
33804
+ this.j.e.off('mousedown dragstart', this.onDragStart).off('startDragElement', this.onStartDragElement);
33742
33805
  this.removeDragListeners();
33743
33806
  }
33744
33807
  constructor(){
@@ -33754,6 +33817,9 @@ var DragState;
33754
33817
  this.state = DragState.IDLE;
33755
33818
  }
33756
33819
  }
33820
+ __decorate([
33821
+ _core_decorators_index_js__WEBPACK_IMPORTED_MODULE_0__.autobind
33822
+ ], dragAndDropElement.prototype, "onStartDragElement", null);
33757
33823
  __decorate([
33758
33824
  _core_decorators_index_js__WEBPACK_IMPORTED_MODULE_0__.autobind
33759
33825
  ], dragAndDropElement.prototype, "onDragStart", null);
@@ -34240,12 +34306,17 @@ _core_global_js__WEBPACK_IMPORTED_MODULE_1__.pluginSystem.add('dtd', dtd);
34240
34306
  if (beforeEnter !== undefined) {
34241
34307
  return beforeEnter;
34242
34308
  }
34243
- if (!editor.s.isCollapsed()) {
34244
- editor.execCommand('Delete');
34245
- }
34246
- editor.s.focus();
34247
- this.onEnter(event);
34248
- editor.e.fire('afterEnter', event);
34309
+ // Delete-of-selection + new block must be a single history step,
34310
+ // otherwise pressing Enter over a selection needs two Ctrl+Z to undo
34311
+ // (the first only reverts to the intermediate empty state). #1292
34312
+ editor.history.snapshot.transaction(()=>{
34313
+ if (!editor.s.isCollapsed()) {
34314
+ editor.execCommand('Delete');
34315
+ }
34316
+ editor.s.focus();
34317
+ this.onEnter(event);
34318
+ editor.e.fire('afterEnter', event);
34319
+ });
34249
34320
  editor.synchronizeValues(); // fire change
34250
34321
  return false;
34251
34322
  }
@@ -43276,13 +43347,14 @@ _config_js__WEBPACK_IMPORTED_MODULE_0__.Config.prototype.select = {
43276
43347
  /***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) {
43277
43348
 
43278
43349
  /* unused harmony export select */
43279
- /* harmony import */ var _core_decorators_index_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(65478);
43280
- /* harmony import */ var _core_dom_dom_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(2748);
43281
- /* harmony import */ var _core_global_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(580);
43282
- /* harmony import */ var _core_helpers_string_camel_case_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(87058);
43283
- /* harmony import */ var _core_plugin_index_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(50911);
43284
- /* harmony import */ var _core_ui_index_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(67510);
43285
- /* harmony import */ var _config_js__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(67215);
43350
+ /* harmony import */ var _core_constants_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(82758);
43351
+ /* harmony import */ var _core_decorators_index_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(65478);
43352
+ /* harmony import */ var _core_dom_dom_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(2748);
43353
+ /* harmony import */ var _core_global_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(580);
43354
+ /* harmony import */ var _core_helpers_string_camel_case_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(87058);
43355
+ /* harmony import */ var _core_plugin_index_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(50911);
43356
+ /* harmony import */ var _core_ui_index_js__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(67510);
43357
+ /* harmony import */ var _config_js__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(67215);
43286
43358
  /*!
43287
43359
  * Jodit Editor (https://xdsoft.net/jodit/)
43288
43360
  * Released under MIT see LICENSE.txt in the project root for license information.
@@ -43300,6 +43372,7 @@ _config_js__WEBPACK_IMPORTED_MODULE_0__.Config.prototype.select = {
43300
43372
 
43301
43373
 
43302
43374
 
43375
+
43303
43376
  /**
43304
43377
  * A utility plugin that allows you to subscribe to a click/mousedown/touchstart/mouseup on an element in DOM order
43305
43378
  *
@@ -43310,7 +43383,7 @@ _config_js__WEBPACK_IMPORTED_MODULE_0__.Config.prototype.select = {
43310
43383
  * console.log(img.src);
43311
43384
  * })
43312
43385
  * ```
43313
- */ class select extends _core_plugin_index_js__WEBPACK_IMPORTED_MODULE_4__.Plugin {
43386
+ */ class select extends _core_plugin_index_js__WEBPACK_IMPORTED_MODULE_5__.Plugin {
43314
43387
  afterInit(jodit) {
43315
43388
  this.proxyEventsList.forEach((eventName)=>{
43316
43389
  jodit.e.on(eventName + '.select', this.onStartSelection);
@@ -43325,7 +43398,7 @@ _config_js__WEBPACK_IMPORTED_MODULE_0__.Config.prototype.select = {
43325
43398
  const { j } = this;
43326
43399
  let result, target = e.target;
43327
43400
  while(result === undefined && target && target !== j.editor){
43328
- result = j.e.fire((0,_core_helpers_string_camel_case_js__WEBPACK_IMPORTED_MODULE_3__.camelCase)(e.type + '_' + target.nodeName.toLowerCase()), target, e);
43401
+ result = j.e.fire((0,_core_helpers_string_camel_case_js__WEBPACK_IMPORTED_MODULE_4__.camelCase)(e.type + '_' + target.nodeName.toLowerCase()), target, e);
43329
43402
  target = target.parentElement;
43330
43403
  }
43331
43404
  if (e.type === 'click' && result === undefined && target === j.editor) {
@@ -43336,10 +43409,10 @@ _config_js__WEBPACK_IMPORTED_MODULE_0__.Config.prototype.select = {
43336
43409
  * @event outsideClick(e) - when user clicked on the outside of editor
43337
43410
  */ onOutsideClick(e) {
43338
43411
  const node = e.target;
43339
- if (_core_dom_dom_js__WEBPACK_IMPORTED_MODULE_1__.Dom.up(node, (elm)=>elm === this.j.editor)) {
43412
+ if (_core_dom_dom_js__WEBPACK_IMPORTED_MODULE_2__.Dom.up(node, (elm)=>elm === this.j.editor)) {
43340
43413
  return;
43341
43414
  }
43342
- const box = _core_ui_index_js__WEBPACK_IMPORTED_MODULE_5__.UIElement.closestElement(node, _core_ui_index_js__WEBPACK_IMPORTED_MODULE_5__.Popup);
43415
+ const box = _core_ui_index_js__WEBPACK_IMPORTED_MODULE_6__.UIElement.closestElement(node, _core_ui_index_js__WEBPACK_IMPORTED_MODULE_6__.Popup);
43343
43416
  if (!box) {
43344
43417
  this.j.e.fire('outsideClick', e);
43345
43418
  }
@@ -43348,7 +43421,7 @@ _config_js__WEBPACK_IMPORTED_MODULE_0__.Config.prototype.select = {
43348
43421
  const { s } = this.j;
43349
43422
  if (!s.isCollapsed()) {
43350
43423
  const current = s.current();
43351
- if (current && _core_dom_dom_js__WEBPACK_IMPORTED_MODULE_1__.Dom.isOrContains(this.j.editor, current)) {
43424
+ if (current && _core_dom_dom_js__WEBPACK_IMPORTED_MODULE_2__.Dom.isOrContains(this.j.editor, current)) {
43352
43425
  this.onCopyNormalizeSelectionBound();
43353
43426
  }
43354
43427
  }
@@ -43360,6 +43433,60 @@ _config_js__WEBPACK_IMPORTED_MODULE_0__.Config.prototype.select = {
43360
43433
  s.expandSelection();
43361
43434
  return false;
43362
43435
  }
43436
+ /**
43437
+ * Fix caret position when clicking to the right of a list item that has a
43438
+ * nested list. Blink/WebKit place the caret at the start of the line instead
43439
+ * of the end (#1296); move it to the end of the item's own text.
43440
+ */ onClickRightOfNestedListItem(e) {
43441
+ const { s } = this.j;
43442
+ const range = s.range;
43443
+ if (!range.collapsed || range.startOffset !== 0 || !_core_dom_dom_js__WEBPACK_IMPORTED_MODULE_2__.Dom.isText(range.startContainer)) {
43444
+ return;
43445
+ }
43446
+ const text = range.startContainer;
43447
+ const li = text.parentNode;
43448
+ // The text must be the direct content of a list item that has a nested
43449
+ // list (the last level has no nested list and behaves correctly).
43450
+ if (!_core_dom_dom_js__WEBPACK_IMPORTED_MODULE_2__.Dom.isTag(li, 'li') || !(li.querySelector('ul') || li.querySelector('ol'))) {
43451
+ return;
43452
+ }
43453
+ const measure = this.j.ed.createRange();
43454
+ measure.selectNodeContents(text);
43455
+ const rect = measure.getBoundingClientRect();
43456
+ // Only when the click happened to the right of the text.
43457
+ if (e.clientX > rect.right) {
43458
+ s.setCursorAfter(text);
43459
+ }
43460
+ }
43461
+ /**
43462
+ * Keep pending inline formatting after a click. Toggling Bold/Italic/etc. on
43463
+ * a collapsed cursor leaves empty marker elements with the caret inside; a
43464
+ * click puts the caret right before them (outside), so they get cleaned up
43465
+ * and the formatting is lost. Move the caret back into the innermost marker
43466
+ * so the next typed character keeps every pending format (#1291).
43467
+ */ onClickKeepPendingFormat() {
43468
+ var _a, _b;
43469
+ const { s } = this.j;
43470
+ const range = s.range;
43471
+ if (!range.collapsed || !_core_dom_dom_js__WEBPACK_IMPORTED_MODULE_2__.Dom.isText(range.startContainer)) {
43472
+ return;
43473
+ }
43474
+ const text = range.startContainer;
43475
+ // Caret must sit at the very end of the text, right before the markers.
43476
+ if (range.startOffset !== ((_b = (_a = text.nodeValue) === null || _a === void 0 ? void 0 : _a.length) !== null && _b !== void 0 ? _b : 0)) {
43477
+ return;
43478
+ }
43479
+ const marker = text.nextSibling;
43480
+ if (!_core_dom_dom_js__WEBPACK_IMPORTED_MODULE_2__.Dom.isElement(marker) || !marker.nodeName.match(_core_constants_js__WEBPACK_IMPORTED_MODULE_0__.IS_INLINE) || !_core_dom_dom_js__WEBPACK_IMPORTED_MODULE_2__.Dom.isEmpty(marker)) {
43481
+ return;
43482
+ }
43483
+ let inner = marker;
43484
+ // Descend into the innermost empty formatting marker.
43485
+ while(_core_dom_dom_js__WEBPACK_IMPORTED_MODULE_2__.Dom.isElement(inner.firstElementChild) && inner.firstElementChild.nodeName.match(_core_constants_js__WEBPACK_IMPORTED_MODULE_0__.IS_INLINE)){
43486
+ inner = inner.firstElementChild;
43487
+ }
43488
+ s.setCursorIn(inner);
43489
+ }
43363
43490
  /**
43364
43491
  * Normalize selection after triple click
43365
43492
  */ onTripleClickNormalizeSelection(e) {
@@ -43368,8 +43495,8 @@ _config_js__WEBPACK_IMPORTED_MODULE_0__.Config.prototype.select = {
43368
43495
  }
43369
43496
  const { s } = this.j;
43370
43497
  const { startContainer, startOffset } = s.range;
43371
- if (startOffset === 0 && _core_dom_dom_js__WEBPACK_IMPORTED_MODULE_1__.Dom.isText(startContainer)) {
43372
- s.select(_core_dom_dom_js__WEBPACK_IMPORTED_MODULE_1__.Dom.closest(startContainer, _core_dom_dom_js__WEBPACK_IMPORTED_MODULE_1__.Dom.isBlock, this.j.editor) || startContainer, true);
43498
+ if (startOffset === 0 && _core_dom_dom_js__WEBPACK_IMPORTED_MODULE_2__.Dom.isText(startContainer)) {
43499
+ s.select(_core_dom_dom_js__WEBPACK_IMPORTED_MODULE_2__.Dom.closest(startContainer, _core_dom_dom_js__WEBPACK_IMPORTED_MODULE_2__.Dom.isBlock, this.j.editor) || startContainer, true);
43373
43500
  }
43374
43501
  }
43375
43502
  onCopyNormalizeSelectionBound(e) {
@@ -43377,7 +43504,7 @@ _config_js__WEBPACK_IMPORTED_MODULE_0__.Config.prototype.select = {
43377
43504
  if (!o.select.normalizeSelectionBeforeCutAndCopy || s.isCollapsed()) {
43378
43505
  return;
43379
43506
  }
43380
- if (e && (!e.isTrusted || !_core_dom_dom_js__WEBPACK_IMPORTED_MODULE_1__.Dom.isNode(e.target) || !_core_dom_dom_js__WEBPACK_IMPORTED_MODULE_1__.Dom.isOrContains(editor, e.target))) {
43507
+ if (e && (!e.isTrusted || !_core_dom_dom_js__WEBPACK_IMPORTED_MODULE_2__.Dom.isNode(e.target) || !_core_dom_dom_js__WEBPACK_IMPORTED_MODULE_2__.Dom.isOrContains(editor, e.target))) {
43381
43508
  return;
43382
43509
  }
43383
43510
  this.jodit.s.expandSelection();
@@ -43394,33 +43521,43 @@ _config_js__WEBPACK_IMPORTED_MODULE_0__.Config.prototype.select = {
43394
43521
  }
43395
43522
  }
43396
43523
  __decorate([
43397
- _core_decorators_index_js__WEBPACK_IMPORTED_MODULE_0__.autobind
43524
+ _core_decorators_index_js__WEBPACK_IMPORTED_MODULE_1__.autobind
43398
43525
  ], select.prototype, "onStartSelection", null);
43399
43526
  __decorate([
43400
- (0,_core_decorators_index_js__WEBPACK_IMPORTED_MODULE_0__.watch)('ow:click')
43527
+ (0,_core_decorators_index_js__WEBPACK_IMPORTED_MODULE_1__.watch)('ow:click')
43401
43528
  ], select.prototype, "onOutsideClick", null);
43402
43529
  __decorate([
43403
- (0,_core_decorators_index_js__WEBPACK_IMPORTED_MODULE_0__.watch)([
43530
+ (0,_core_decorators_index_js__WEBPACK_IMPORTED_MODULE_1__.watch)([
43404
43531
  ':beforeCommandCut'
43405
43532
  ])
43406
43533
  ], select.prototype, "beforeCommandCut", null);
43407
43534
  __decorate([
43408
- (0,_core_decorators_index_js__WEBPACK_IMPORTED_MODULE_0__.watch)([
43535
+ (0,_core_decorators_index_js__WEBPACK_IMPORTED_MODULE_1__.watch)([
43409
43536
  ':beforeCommandSelectall'
43410
43537
  ])
43411
43538
  ], select.prototype, "beforeCommandSelectAll", null);
43412
43539
  __decorate([
43413
- (0,_core_decorators_index_js__WEBPACK_IMPORTED_MODULE_0__.watch)([
43540
+ (0,_core_decorators_index_js__WEBPACK_IMPORTED_MODULE_1__.watch)([
43541
+ ':click'
43542
+ ])
43543
+ ], select.prototype, "onClickRightOfNestedListItem", null);
43544
+ __decorate([
43545
+ (0,_core_decorators_index_js__WEBPACK_IMPORTED_MODULE_1__.watch)([
43546
+ ':click'
43547
+ ])
43548
+ ], select.prototype, "onClickKeepPendingFormat", null);
43549
+ __decorate([
43550
+ (0,_core_decorators_index_js__WEBPACK_IMPORTED_MODULE_1__.watch)([
43414
43551
  ':click'
43415
43552
  ])
43416
43553
  ], select.prototype, "onTripleClickNormalizeSelection", null);
43417
43554
  __decorate([
43418
- (0,_core_decorators_index_js__WEBPACK_IMPORTED_MODULE_0__.watch)([
43555
+ (0,_core_decorators_index_js__WEBPACK_IMPORTED_MODULE_1__.watch)([
43419
43556
  ':copy',
43420
43557
  ':cut'
43421
43558
  ])
43422
43559
  ], select.prototype, "onCopyNormalizeSelectionBound", null);
43423
- _core_global_js__WEBPACK_IMPORTED_MODULE_2__.pluginSystem.add('select', select);
43560
+ _core_global_js__WEBPACK_IMPORTED_MODULE_3__.pluginSystem.add('select', select);
43424
43561
 
43425
43562
 
43426
43563
  /***/ }),