jodit 4.15.4 → 4.15.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 (60) hide show
  1. package/CHANGELOG.md +12 -0
  2. package/es2015/jodit.css +1 -1
  3. package/es2015/jodit.fat.min.js +4 -4
  4. package/es2015/jodit.js +34 -2
  5. package/es2015/jodit.min.js +6 -6
  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 +4 -4
  13. package/es2018/jodit.min.js +6 -6
  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 +4 -4
  18. package/es2021/jodit.js +34 -2
  19. package/es2021/jodit.min.js +6 -6
  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 +4 -4
  28. package/es2021.en/jodit.js +34 -2
  29. package/es2021.en/jodit.min.js +11 -11
  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 +39 -2
  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/config.d.ts +9 -0
  51. package/esm/core/constants.js +1 -1
  52. package/esm/plugins/clean-html/clean-html.d.ts +9 -0
  53. package/esm/plugins/clean-html/clean-html.js +27 -0
  54. package/esm/plugins/clean-html/config.d.ts +9 -0
  55. package/esm/plugins/clean-html/config.js +1 -0
  56. package/esm/plugins/link/link.js +9 -0
  57. package/package.json +1 -1
  58. package/types/config.d.ts +9 -0
  59. package/types/plugins/clean-html/clean-html.d.ts +9 -0
  60. package/types/plugins/clean-html/config.d.ts +9 -0
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.15.4
4
+ * Version: v4.15.6
5
5
  * Url: https://xdsoft.net/jodit/
6
6
  * License(s): MIT
7
7
  */
@@ -1785,7 +1785,7 @@ __webpack_require__.r(__webpack_exports__);
1785
1785
  * ```
1786
1786
  * @packageDocumentation
1787
1787
  * @module constants
1788
- */ const APP_VERSION = "4.15.4";
1788
+ */ const APP_VERSION = "4.15.6";
1789
1789
  // prettier-ignore
1790
1790
  const ES = "es2015";
1791
1791
  const IS_ES_MODERN = true;
@@ -28598,6 +28598,7 @@ jodit_core_ui_icon__WEBPACK_IMPORTED_MODULE_5__.Icon.set('class-span', (_class_s
28598
28598
  * `<p><br></p>` left after deleting all content) to an empty string —
28599
28599
  * opt-in via `cleanHTML.collapseEmptyValueToEmptyString`. See #1149
28600
28600
  */ onAfterGetValueFromEditor(data) {
28601
+ this.__singleQuotesInFontFamily(data);
28601
28602
  if (!this.j.o.cleanHTML.collapseEmptyValueToEmptyString) {
28602
28603
  return;
28603
28604
  }
@@ -28605,6 +28606,27 @@ jodit_core_ui_icon__WEBPACK_IMPORTED_MODULE_5__.Icon.set('class-span', (_class_s
28605
28606
  data.value = '';
28606
28607
  }
28607
28608
  }
28609
+ /**
28610
+ * Rewrite double-quoted font names inside `style` attributes with single
28611
+ * quotes. The DOM always serialises them as `&quot;…&quot;`, and back ends
28612
+ * that HTML-decode the value before storing it then produce
28613
+ * `style="font-family: "Open Sans", …"` — broken markup. Single quotes
28614
+ * survive that round trip. Names that already contain an apostrophe are
28615
+ * left alone.
28616
+ */ __singleQuotesInFontFamily(data) {
28617
+ if (!this.j.o.cleanHTML.singleQuotesInFontFamily || !data.value.includes('&quot;')) {
28618
+ return;
28619
+ }
28620
+ data.value = data.value.replace(/\sstyle="([^"]*)"/gi, (attribute, css)=>{
28621
+ if (!css.includes('&quot;') || !/font-family/i.test(css)) {
28622
+ return attribute;
28623
+ }
28624
+ const normalized = css.replace(// `&quot;` itself ends with `;`, so the entity has to be
28625
+ // consumed as a unit or the declaration stops inside it.
28626
+ /font-family\s*:(?:&quot;|[^;])*/gi, (declaration)=>declaration.includes("'") ? declaration : declaration.replace(/&quot;/g, "'"));
28627
+ return attribute.replace(css, normalized);
28628
+ });
28629
+ }
28608
28630
  onSafeHTML(sandBox) {
28609
28631
  const sanitizer = this.j.o.cleanHTML.sanitizer;
28610
28632
  if (sanitizer) {
@@ -28677,6 +28699,7 @@ jodit_config__WEBPACK_IMPORTED_MODULE_1__.Config.prototype.cleanHTML = {
28677
28699
  removeEmptyElements: true,
28678
28700
  fillEmptyParagraph: true,
28679
28701
  collapseEmptyValueToEmptyString: false,
28702
+ singleQuotesInFontFamily: true,
28680
28703
  replaceNBSP: true,
28681
28704
  replaceOldTags: {
28682
28705
  i: 'em',
@@ -36990,6 +37013,7 @@ jodit_config__WEBPACK_IMPORTED_MODULE_2__.Config.prototype.controls.link = {
36990
37013
  jodit.history.snapshot.restore(snapshot);
36991
37014
  const textWasChanged = getSelectionText() !== content_input.value.trim();
36992
37015
  const ci = jodit.createInside;
37016
+ let caretAfter = null;
36993
37017
  if (!link || !jodit_core_dom__WEBPACK_IMPORTED_MODULE_3__.Dom.isOrContains(jodit.editor, link)) {
36994
37018
  if (!jodit.s.isCollapsed()) {
36995
37019
  const node = jodit.s.current();
@@ -37006,6 +37030,7 @@ jodit_config__WEBPACK_IMPORTED_MODULE_2__.Config.prototype.controls.link = {
37006
37030
  links = [
37007
37031
  a
37008
37032
  ];
37033
+ caretAfter = a;
37009
37034
  }
37010
37035
  links.forEach((link)=>jodit.s.select(link));
37011
37036
  } else {
@@ -37038,6 +37063,13 @@ jodit_config__WEBPACK_IMPORTED_MODULE_2__.Config.prototype.controls.link = {
37038
37063
  }
37039
37064
  jodit.e.fire('applyLink', jodit, a, form);
37040
37065
  });
37066
+ // A brand-new link inserted at a collapsed caret used to stay
37067
+ // *selected*. Safari does not paint that selection, so the next
37068
+ // Enter silently replaced the link instead of starting a new line.
37069
+ // Put the caret right after the link instead.
37070
+ if (caretAfter) {
37071
+ jodit.s.setCursorAfter(caretAfter);
37072
+ }
37041
37073
  jodit.synchronizeValues();
37042
37074
  close();
37043
37075
  return false;