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/es2015/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
  */
@@ -1816,7 +1816,7 @@ __webpack_require__.r(__webpack_exports__);
1816
1816
  * ```
1817
1817
  * @packageDocumentation
1818
1818
  * @module constants
1819
- */ const APP_VERSION = "4.12.27";
1819
+ */ const APP_VERSION = "4.12.29";
1820
1820
  // prettier-ignore
1821
1821
  const ES = "es2015";
1822
1822
  const IS_ES_MODERN = true;
@@ -3885,12 +3885,12 @@ class LazyWalker extends jodit_core_event_emitter_eventify__WEBPACK_IMPORTED_MOD
3885
3885
  }
3886
3886
  __removeStoreFromSubject(subject) {
3887
3887
  if (subject[this.__key] !== undefined) {
3888
- Object.defineProperty(subject, this.__key, {
3889
- enumerable: false,
3890
- configurable: true,
3891
- writable: true,
3892
- value: undefined
3893
- });
3888
+ // Fully remove the namespaces store key instead of just setting it to
3889
+ // `undefined`. On long-lived subjects — e.g. `window` in an SPA where
3890
+ // editors are repeatedly created and destroyed — leftover `undefined`
3891
+ // keys would otherwise pile up on the object. The property is defined
3892
+ // as `configurable`, so `delete` removes it cleanly.
3893
+ delete subject[this.__key];
3894
3894
  }
3895
3895
  }
3896
3896
  __triggerNativeEvent(element, event) {
@@ -6055,6 +6055,34 @@ function normalizeCSS(s) {
6055
6055
  * @module helpers/html
6056
6056
  */
6057
6057
 
6058
+ const HTML_NAMESPACE = 'http://www.w3.org/1999/xhtml';
6059
+ /**
6060
+ * Integration points where HTML is legitimately allowed inside MathML/SVG foreign content.
6061
+ */ const HTML_INTEGRATION_POINTS = new Set([
6062
+ 'foreignobject',
6063
+ 'annotation-xml',
6064
+ 'desc',
6065
+ 'title'
6066
+ ]);
6067
+ /**
6068
+ * True for an HTML element the parser placed inside MathML/SVG outside an integration point - smuggled
6069
+ * HTML (e.g. `mglyph` / `style` under `<math>`) that a reparse can hoist into a live node. Legitimate
6070
+ * MathML/SVG children and HTML below an integration point are kept.
6071
+ */ function isSmuggledForeignHtml(elm) {
6072
+ if (elm.namespaceURI !== HTML_NAMESPACE || elm.closest('math,svg') == null) {
6073
+ return false;
6074
+ }
6075
+ for(let parent = elm.parentElement; parent; parent = parent.parentElement){
6076
+ const name = parent.nodeName.toLowerCase();
6077
+ if (name === 'math' || name === 'svg') {
6078
+ break;
6079
+ }
6080
+ if (HTML_INTEGRATION_POINTS.has(name)) {
6081
+ return false;
6082
+ }
6083
+ }
6084
+ return true;
6085
+ }
6058
6086
  /**
6059
6087
  * Removes dangerous constructs from HTML
6060
6088
  */ function safeHTML(box, options) {
@@ -6062,6 +6090,14 @@ function normalizeCSS(s) {
6062
6090
  if (!jodit_core_dom_dom__WEBPACK_IMPORTED_MODULE_0__.Dom.isElement(box) && !jodit_core_dom_dom__WEBPACK_IMPORTED_MODULE_0__.Dom.isFragment(box)) {
6063
6091
  return;
6064
6092
  }
6093
+ // Drop HTML smuggled into MathML/SVG before the walk: a reparse would otherwise hoist its hidden
6094
+ // markup into a live node.
6095
+ const foreign = box.querySelectorAll('math *, svg *');
6096
+ for(let i = 0; i < foreign.length; i++){
6097
+ if (foreign[i].isConnected && isSmuggledForeignHtml(foreign[i])) {
6098
+ jodit_core_dom_dom__WEBPACK_IMPORTED_MODULE_0__.Dom.safeRemove(foreign[i]);
6099
+ }
6100
+ }
6065
6101
  const removeEvents = (_options_removeEventAttributes = options.removeEventAttributes) !== null && _options_removeEventAttributes !== void 0 ? _options_removeEventAttributes : options.removeOnError;
6066
6102
  // Single synchronous traversal of the subtree. Besides removing event
6067
6103
  // handlers and `javascript:` links, `sanitizeHTMLElement` neutralises