jodit 4.12.27 → 4.12.29

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 (53) hide show
  1. package/CHANGELOG.md +12 -0
  2. package/es2015/jodit.css +1 -1
  3. package/es2015/jodit.fat.min.js +2 -2
  4. package/es2015/jodit.js +44 -8
  5. package/es2015/jodit.min.js +2 -2
  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 +2 -2
  13. package/es2018/jodit.min.js +2 -2
  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 +44 -8
  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 +44 -8
  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 +44 -8
  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/core/event-emitter/event-emitter.js +6 -6
  52. package/esm/core/helpers/html/safe-html.js +39 -0
  53. 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.12.27
4
+ * Version: v4.12.29
5
5
  * Url: https://xdsoft.net/jodit/
6
6
  * License(s): MIT
7
7
  */
@@ -1810,7 +1810,7 @@ __webpack_require__.r(__webpack_exports__);
1810
1810
  * ```
1811
1811
  * @packageDocumentation
1812
1812
  * @module constants
1813
- */ const APP_VERSION = "4.12.27";
1813
+ */ const APP_VERSION = "4.12.29";
1814
1814
  // prettier-ignore
1815
1815
  const ES = "es2021";
1816
1816
  const IS_ES_MODERN = true;
@@ -3870,12 +3870,12 @@ class LazyWalker extends jodit_core_event_emitter_eventify__WEBPACK_IMPORTED_MOD
3870
3870
  }
3871
3871
  __removeStoreFromSubject(subject) {
3872
3872
  if (subject[this.__key] !== undefined) {
3873
- Object.defineProperty(subject, this.__key, {
3874
- enumerable: false,
3875
- configurable: true,
3876
- writable: true,
3877
- value: undefined
3878
- });
3873
+ // Fully remove the namespaces store key instead of just setting it to
3874
+ // `undefined`. On long-lived subjects — e.g. `window` in an SPA where
3875
+ // editors are repeatedly created and destroyed — leftover `undefined`
3876
+ // keys would otherwise pile up on the object. The property is defined
3877
+ // as `configurable`, so `delete` removes it cleanly.
3878
+ delete subject[this.__key];
3879
3879
  }
3880
3880
  }
3881
3881
  __triggerNativeEvent(element, event) {
@@ -6033,12 +6033,48 @@ function normalizeCSS(s) {
6033
6033
  * @module helpers/html
6034
6034
  */
6035
6035
 
6036
+ const HTML_NAMESPACE = 'http://www.w3.org/1999/xhtml';
6037
+ /**
6038
+ * Integration points where HTML is legitimately allowed inside MathML/SVG foreign content.
6039
+ */ const HTML_INTEGRATION_POINTS = new Set([
6040
+ 'foreignobject',
6041
+ 'annotation-xml',
6042
+ 'desc',
6043
+ 'title'
6044
+ ]);
6045
+ /**
6046
+ * True for an HTML element the parser placed inside MathML/SVG outside an integration point - smuggled
6047
+ * HTML (e.g. `mglyph` / `style` under `<math>`) that a reparse can hoist into a live node. Legitimate
6048
+ * MathML/SVG children and HTML below an integration point are kept.
6049
+ */ function isSmuggledForeignHtml(elm) {
6050
+ if (elm.namespaceURI !== HTML_NAMESPACE || elm.closest('math,svg') == null) {
6051
+ return false;
6052
+ }
6053
+ for(let parent = elm.parentElement; parent; parent = parent.parentElement){
6054
+ const name = parent.nodeName.toLowerCase();
6055
+ if (name === 'math' || name === 'svg') {
6056
+ break;
6057
+ }
6058
+ if (HTML_INTEGRATION_POINTS.has(name)) {
6059
+ return false;
6060
+ }
6061
+ }
6062
+ return true;
6063
+ }
6036
6064
  /**
6037
6065
  * Removes dangerous constructs from HTML
6038
6066
  */ function safeHTML(box, options) {
6039
6067
  if (!jodit_core_dom_dom__WEBPACK_IMPORTED_MODULE_0__.Dom.isElement(box) && !jodit_core_dom_dom__WEBPACK_IMPORTED_MODULE_0__.Dom.isFragment(box)) {
6040
6068
  return;
6041
6069
  }
6070
+ // Drop HTML smuggled into MathML/SVG before the walk: a reparse would otherwise hoist its hidden
6071
+ // markup into a live node.
6072
+ const foreign = box.querySelectorAll('math *, svg *');
6073
+ for(let i = 0; i < foreign.length; i++){
6074
+ if (foreign[i].isConnected && isSmuggledForeignHtml(foreign[i])) {
6075
+ jodit_core_dom_dom__WEBPACK_IMPORTED_MODULE_0__.Dom.safeRemove(foreign[i]);
6076
+ }
6077
+ }
6042
6078
  const removeEvents = options.removeEventAttributes ?? options.removeOnError;
6043
6079
  // Single synchronous traversal of the subtree. Besides removing event
6044
6080
  // handlers and `javascript:` links, `sanitizeHTMLElement` neutralises