jodit 4.18.0 → 4.18.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 (57) hide show
  1. package/CHANGELOG.md +13 -0
  2. package/es2015/jodit.css +1 -1
  3. package/es2015/jodit.fat.min.js +3 -3
  4. package/es2015/jodit.js +38 -10
  5. package/es2015/jodit.min.js +3 -3
  6. package/es2015/plugins/debug/debug.css +1 -1
  7. package/es2015/plugins/debug/debug.js +1 -1
  8. package/es2015/plugins/debug/debug.min.js +1 -1
  9. package/es2015/plugins/speech-recognize/speech-recognize.css +1 -1
  10. package/es2015/plugins/speech-recognize/speech-recognize.js +1 -1
  11. package/es2015/plugins/speech-recognize/speech-recognize.min.js +1 -1
  12. package/es2018/jodit.fat.min.js +3 -3
  13. package/es2018/jodit.min.js +8 -8
  14. package/es2018/plugins/debug/debug.min.js +1 -1
  15. package/es2018/plugins/speech-recognize/speech-recognize.min.js +1 -1
  16. package/es2021/jodit.css +1 -1
  17. package/es2021/jodit.fat.min.js +3 -3
  18. package/es2021/jodit.js +38 -10
  19. package/es2021/jodit.min.js +9 -9
  20. package/es2021/plugins/debug/debug.css +1 -1
  21. package/es2021/plugins/debug/debug.js +1 -1
  22. package/es2021/plugins/debug/debug.min.js +1 -1
  23. package/es2021/plugins/speech-recognize/speech-recognize.css +1 -1
  24. package/es2021/plugins/speech-recognize/speech-recognize.js +1 -1
  25. package/es2021/plugins/speech-recognize/speech-recognize.min.js +1 -1
  26. package/es2021.en/jodit.css +1 -1
  27. package/es2021.en/jodit.fat.min.js +3 -3
  28. package/es2021.en/jodit.js +38 -10
  29. package/es2021.en/jodit.min.js +3 -3
  30. package/es2021.en/plugins/debug/debug.css +1 -1
  31. package/es2021.en/plugins/debug/debug.js +1 -1
  32. package/es2021.en/plugins/debug/debug.min.js +1 -1
  33. package/es2021.en/plugins/speech-recognize/speech-recognize.css +1 -1
  34. package/es2021.en/plugins/speech-recognize/speech-recognize.js +1 -1
  35. package/es2021.en/plugins/speech-recognize/speech-recognize.min.js +1 -1
  36. package/es5/jodit.css +2 -2
  37. package/es5/jodit.fat.min.js +2 -2
  38. package/es5/jodit.js +40 -10
  39. package/es5/jodit.min.css +2 -2
  40. package/es5/jodit.min.js +2 -2
  41. package/es5/plugins/debug/debug.css +1 -1
  42. package/es5/plugins/debug/debug.js +1 -1
  43. package/es5/plugins/debug/debug.min.js +1 -1
  44. package/es5/plugins/speech-recognize/speech-recognize.css +1 -1
  45. package/es5/plugins/speech-recognize/speech-recognize.js +1 -1
  46. package/es5/plugins/speech-recognize/speech-recognize.min.js +1 -1
  47. package/es5/polyfills.fat.min.js +1 -1
  48. package/es5/polyfills.js +1 -1
  49. package/es5/polyfills.min.js +1 -1
  50. package/esm/core/constants.js +1 -1
  51. package/esm/plugins/clean-html/clean-html.d.ts +2 -1
  52. package/esm/plugins/clean-html/clean-html.js +24 -7
  53. package/esm/plugins/dtd/after-insert/remove-extra-br.js +6 -1
  54. package/esm/plugins/dtd/before-insert/check-block-nesting.js +16 -1
  55. package/esm/plugins/dtd/config.js +3 -0
  56. package/package.json +1 -1
  57. package/types/plugins/clean-html/clean-html.d.ts +2 -1
package/es2021/jodit.js CHANGED
@@ -1,7 +1,7 @@
1
1
  /*!
2
2
  * jodit - Jodit is an awesome and useful wysiwyg editor with filebrowser
3
3
  * Author: Chupurnov <chupurnov@gmail.com> (https://xdsoft.net/jodit/)
4
- * Version: v4.18.0
4
+ * Version: v4.18.2
5
5
  * Url: https://xdsoft.net/jodit/
6
6
  * License(s): MIT
7
7
  */
@@ -1824,7 +1824,7 @@ __webpack_require__.r(__webpack_exports__);
1824
1824
  * ```
1825
1825
  * @packageDocumentation
1826
1826
  * @module constants
1827
- */ const APP_VERSION = "4.18.0";
1827
+ */ const APP_VERSION = "4.18.2";
1828
1828
  // prettier-ignore
1829
1829
  const ES = "es2021";
1830
1830
  const IS_ES_MODERN = true;
@@ -28987,7 +28987,11 @@ jodit_core_ui_icon__WEBPACK_IMPORTED_MODULE_5__.Icon.set('class-span', (_class_s
28987
28987
  * Clean HTML after removeFormat and insertHorizontalRule command
28988
28988
  */ const TRAILING_BR_BLOCKS = 'p, div, li, td, th, h1, h2, h3, h4, h5, h6, blockquote';
28989
28989
  class cleanHtml extends jodit_core_plugin_plugin__WEBPACK_IMPORTED_MODULE_7__.Plugin {
28990
- /** @override */ afterInit(jodit) {}
28990
+ /** @override */ afterInit() {
28991
+ // The walker's own `:afterInit` watcher is bound on that very event,
28992
+ // so without this the first pass waited for the first key or click
28993
+ this.onChangeCleanHTML();
28994
+ }
28991
28995
  get isEditMode() {
28992
28996
  return !(this.j.isInDestruct || !this.j.isEditorMode() || this.j.getReadOnly());
28993
28997
  }
@@ -29125,10 +29129,11 @@ class cleanHtml extends jodit_core_plugin_plugin__WEBPACK_IMPORTED_MODULE_7__.Pl
29125
29129
  ;(0,jodit_core_helpers_html_safe_html__WEBPACK_IMPORTED_MODULE_6__.safeHTML)(sandBox, this.j.o.cleanHTML);
29126
29130
  }
29127
29131
  /** @override */ beforeDestruct() {
29132
+ this.j.e.off('safeHTML', this.onSafeHTML).off('beforeSetNativeEditorValue', this.onBeforeSetNativeEditorValue).off('afterSetNativeEditorValue', this.onAfterSetNativeEditorValue);
29128
29133
  this.walker.destruct();
29129
29134
  }
29130
- constructor(...args){
29131
- super(...args), /** @override */ (0,_swc_helpers_define_property__WEBPACK_IMPORTED_MODULE_0__._)(this, "buttons", [
29135
+ constructor(jodit){
29136
+ super(jodit), /** @override */ (0,_swc_helpers_define_property__WEBPACK_IMPORTED_MODULE_0__._)(this, "buttons", [
29132
29137
  {
29133
29138
  name: 'eraser',
29134
29139
  group: 'font-style'
@@ -29136,6 +29141,12 @@ class cleanHtml extends jodit_core_plugin_plugin__WEBPACK_IMPORTED_MODULE_7__.Pl
29136
29141
  ]), (0,_swc_helpers_define_property__WEBPACK_IMPORTED_MODULE_0__._)(this, "currentSelectionNode", null), (0,_swc_helpers_define_property__WEBPACK_IMPORTED_MODULE_0__._)(this, "walker", new jodit_core_dom_lazy_walker__WEBPACK_IMPORTED_MODULE_4__.LazyWalker(this.j.async, {
29137
29142
  timeout: this.j.o.cleanHTML.timeout
29138
29143
  }));
29144
+ // `@watch` binds once the plugin is ready, which is after the initial
29145
+ // value has already gone into the editor. The handlers that keep
29146
+ // markup out of the live tree have to be there from the start, or
29147
+ // event handlers in a textarea's content run before anything
29148
+ // sanitises them.
29149
+ jodit.e.on('safeHTML', this.onSafeHTML).on('beforeSetNativeEditorValue', this.onBeforeSetNativeEditorValue).on('afterSetNativeEditorValue', this.onAfterSetNativeEditorValue);
29139
29150
  }
29140
29151
  }
29141
29152
  ;(0,_swc_helpers_ts_decorate__WEBPACK_IMPORTED_MODULE_1__.__decorate)([
@@ -29154,16 +29165,16 @@ class cleanHtml extends jodit_core_plugin_plugin__WEBPACK_IMPORTED_MODULE_7__.Pl
29154
29165
  (0,jodit_core_decorators__WEBPACK_IMPORTED_MODULE_2__.watch)(':beforeCommand')
29155
29166
  ], cleanHtml.prototype, "beforeCommand", null);
29156
29167
  (0,_swc_helpers_ts_decorate__WEBPACK_IMPORTED_MODULE_1__.__decorate)([
29157
- (0,jodit_core_decorators__WEBPACK_IMPORTED_MODULE_2__.watch)(':afterSetNativeEditorValue')
29168
+ jodit_core_decorators__WEBPACK_IMPORTED_MODULE_2__.autobind
29158
29169
  ], cleanHtml.prototype, "onAfterSetNativeEditorValue", null);
29159
29170
  (0,_swc_helpers_ts_decorate__WEBPACK_IMPORTED_MODULE_1__.__decorate)([
29160
- (0,jodit_core_decorators__WEBPACK_IMPORTED_MODULE_2__.watch)(':beforeSetNativeEditorValue')
29171
+ jodit_core_decorators__WEBPACK_IMPORTED_MODULE_2__.autobind
29161
29172
  ], cleanHtml.prototype, "onBeforeSetNativeEditorValue", null);
29162
29173
  (0,_swc_helpers_ts_decorate__WEBPACK_IMPORTED_MODULE_1__.__decorate)([
29163
29174
  (0,jodit_core_decorators__WEBPACK_IMPORTED_MODULE_2__.watch)(':afterGetValueFromEditor')
29164
29175
  ], cleanHtml.prototype, "onAfterGetValueFromEditor", null);
29165
29176
  (0,_swc_helpers_ts_decorate__WEBPACK_IMPORTED_MODULE_1__.__decorate)([
29166
- (0,jodit_core_decorators__WEBPACK_IMPORTED_MODULE_2__.watch)(':safeHTML')
29177
+ jodit_core_decorators__WEBPACK_IMPORTED_MODULE_2__.autobind
29167
29178
  ], cleanHtml.prototype, "onSafeHTML", null);
29168
29179
  jodit_core_global__WEBPACK_IMPORTED_MODULE_5__.pluginSystem.add('cleanHtml', cleanHtml);
29169
29180
 
@@ -31699,7 +31710,12 @@ const brBoxes = new Set([
31699
31710
  if (jodit_core_dom_dom__WEBPACK_IMPORTED_MODULE_0__.Dom.findNotEmptySibling(br, false)) {
31700
31711
  return;
31701
31712
  }
31702
- jodit.s.setCursorBefore(br);
31713
+ // After a block is inserted the caret is already at the end of its
31714
+ // text; moving it before the `<br>` would put it on a line of its own
31715
+ // below the block (#1315)
31716
+ if (!jodit_core_dom_dom__WEBPACK_IMPORTED_MODULE_0__.Dom.isOrContains(node, jodit.s.range.startContainer)) {
31717
+ jodit.s.setCursorBefore(br);
31718
+ }
31703
31719
  jodit_core_dom_dom__WEBPACK_IMPORTED_MODULE_0__.Dom.safeRemove(br);
31704
31720
  }
31705
31721
  }
@@ -31736,13 +31752,22 @@ const brBoxes = new Set([
31736
31752
  let current = jodit.s.current()?.parentElement ?? null;
31737
31753
  while(current && current !== jodit.editor){
31738
31754
  if (jodit_core_dom_dom__WEBPACK_IMPORTED_MODULE_0__.Dom.isBlock(current)) {
31739
- if (jodit.o.dtd.blockLimits[current.nodeName.toLowerCase()]) {
31755
+ // In DIV mode the caret's own empty block is a line, like
31756
+ // `<p><br></p>`, not a container to insert into (#1315)
31757
+ const isEmptyLine = !parent && jodit_core_dom_dom__WEBPACK_IMPORTED_MODULE_0__.Dom.isTag(current, jodit.o.enter) && jodit_core_dom_dom__WEBPACK_IMPORTED_MODULE_0__.Dom.isEmpty(current);
31758
+ if (jodit.o.dtd.blockLimits[current.nodeName.toLowerCase()] && !isEmptyLine) {
31740
31759
  break;
31741
31760
  }
31742
31761
  parent = current;
31743
31762
  }
31744
31763
  current = current.parentElement;
31745
31764
  }
31765
+ // A list that is all of the inserted content adds its items to the
31766
+ // list of the item it goes into, as the browsers' own paste does
31767
+ if (jodit_core_dom_dom__WEBPACK_IMPORTED_MODULE_0__.Dom.isLeaf(current) && jodit_core_dom_dom__WEBPACK_IMPORTED_MODULE_0__.Dom.isList(node) && jodit_core_dom_dom__WEBPACK_IMPORTED_MODULE_0__.Dom.isFragment(node.parentNode) && !jodit_core_dom_dom__WEBPACK_IMPORTED_MODULE_0__.Dom.findNotEmptySibling(node, false)) {
31768
+ jodit_core_dom_dom__WEBPACK_IMPORTED_MODULE_0__.Dom.unwrap(node);
31769
+ parent = current;
31770
+ }
31746
31771
  if (parent) {
31747
31772
  jodit.s.setCursorAfter(parent);
31748
31773
  if (jodit_core_dom_dom__WEBPACK_IMPORTED_MODULE_0__.Dom.isEmpty(parent)) {
@@ -31797,10 +31822,12 @@ jodit_config__WEBPACK_IMPORTED_MODULE_0__.Config.prototype.dtd = {
31797
31822
  audio: 1,
31798
31823
  body: 1,
31799
31824
  caption: 1,
31825
+ dd: 1,
31800
31826
  details: 1,
31801
31827
  dir: 1,
31802
31828
  div: 1,
31803
31829
  dl: 1,
31830
+ dt: 1,
31804
31831
  fieldset: 1,
31805
31832
  figcaption: 1,
31806
31833
  figure: 1,
@@ -31808,6 +31835,7 @@ jodit_config__WEBPACK_IMPORTED_MODULE_0__.Config.prototype.dtd = {
31808
31835
  form: 1,
31809
31836
  header: 1,
31810
31837
  hgroup: 1,
31838
+ li: 1,
31811
31839
  main: 1,
31812
31840
  menu: 1,
31813
31841
  nav: 1,