jodit 4.14.5 → 4.14.6

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 (52) hide show
  1. package/CHANGELOG.md +6 -0
  2. package/es2015/jodit.css +1 -1
  3. package/es2015/jodit.fat.min.js +3 -3
  4. package/es2015/jodit.js +29 -9
  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 +3 -3
  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 +29 -9
  19. package/es2021/jodit.min.js +3 -3
  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 +29 -9
  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 +29 -9
  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/iframe/iframe.js +28 -9
  52. package/package.json +1 -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.14.5
4
+ * Version: v4.14.6
5
5
  * Url: https://xdsoft.net/jodit/
6
6
  * License(s): MIT
7
7
  */
@@ -1779,7 +1779,7 @@ __webpack_require__.r(__webpack_exports__);
1779
1779
  * ```
1780
1780
  * @packageDocumentation
1781
1781
  * @module constants
1782
- */ const APP_VERSION = "4.14.5";
1782
+ */ const APP_VERSION = "4.14.6";
1783
1783
  // prettier-ignore
1784
1784
  const ES = "es2021";
1785
1785
  const IS_ES_MODERN = true;
@@ -32626,6 +32626,25 @@ jodit_config__WEBPACK_IMPORTED_MODULE_0__.Config.prototype.iframeSandbox = null;
32626
32626
  }
32627
32627
  return html;
32628
32628
  };
32629
+ /**
32630
+ * Replace the whole iframe document with the given HTML.
32631
+ *
32632
+ * The markup is parsed in an inert document first (no browsing
32633
+ * context: scripts do not run, sub-resources are not fetched),
32634
+ * sanitized there via `safeHTML`, and only then moved into the
32635
+ * live document. `document.write` on the live document would
32636
+ * execute inline scripts and event handlers while parsing,
32637
+ * before the sanitizer had a chance to strip them, and the
32638
+ * iframe is same-origin with the host page by default.
32639
+ * A `<script>` the cleaner is configured to keep still never
32640
+ * executes: nodes coming from an inert parser are flagged
32641
+ * "already started", exactly like `innerHTML`.
32642
+ * See GHSA-w3xv-x3fm-59ph.
32643
+ */ const replaceDocument = (html)=>{
32644
+ const inert = new DOMParser().parseFromString(html, 'text/html');
32645
+ editor.e.fire('safeHTML', inert.documentElement);
32646
+ doc.replaceChild(doc.adoptNode(inert.documentElement), doc.documentElement);
32647
+ };
32629
32648
  if (docMode) {
32630
32649
  const tag = editor.element.tagName;
32631
32650
  if (tag !== 'TEXTAREA' && tag !== 'INPUT') {
@@ -32638,19 +32657,20 @@ jodit_config__WEBPACK_IMPORTED_MODULE_0__.Config.prototype.iframeSandbox = null;
32638
32657
  if (/<(html|body)/i.test(value)) {
32639
32658
  const old = doc.documentElement.outerHTML;
32640
32659
  if (clearMarkers(old) !== clearMarkers(value)) {
32641
- doc.open();
32642
- doc.write(editor.o.iframeDoctype + clearMarkers(value));
32643
- doc.close();
32660
+ replaceDocument(clearMarkers(value));
32644
32661
  editor.editor = doc.body;
32645
- editor.e.fire('safeHTML', editor.editor);
32646
32662
  toggleEditable();
32647
32663
  editor.e.fire('prepareWYSIWYGEditor');
32648
32664
  editor.e.stopPropagation('beforeSetNativeEditorValue');
32649
32665
  }
32650
- } else {
32651
- doc.body.innerHTML = value;
32666
+ return true;
32652
32667
  }
32653
- return true;
32668
+ // A partial value goes through the regular
32669
+ // path: `clean-html` sanitizes it and the
32670
+ // editor assigns it to `doc.body` via
32671
+ // `innerHTML`. Writing the raw value here
32672
+ // would fire its event handlers first.
32673
+ return false;
32654
32674
  }, {
32655
32675
  top: true
32656
32676
  });